aboutsummaryrefslogtreecommitdiffhomepage
path: root/vendor/github.com/tdewolff/minify
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/tdewolff/minify')
-rw-r--r--vendor/github.com/tdewolff/minify/.gitattributes1
-rw-r--r--vendor/github.com/tdewolff/minify/.gitignore4
-rw-r--r--vendor/github.com/tdewolff/minify/.goreleaser.yml26
-rw-r--r--vendor/github.com/tdewolff/minify/.travis.yml5
-rw-r--r--vendor/github.com/tdewolff/minify/LICENSE.md22
-rw-r--r--vendor/github.com/tdewolff/minify/README.md590
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/css_test.go32
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/html_test.go36
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/js_test.go35
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/json_test.go33
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/main_test.go18
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/sample_ace.js18655
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/sample_amazon.html10126
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/sample_arctic.svg13940
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/sample_bbc.html513
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/sample_blogpost.html580
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/sample_books.xml120
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/sample_bootstrap.css6332
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/sample_catalog.xml42
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/sample_dot.js140
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/sample_es6.html17583
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/sample_gopher.svg68
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/sample_gumby.css1683
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/sample_jquery.js9205
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/sample_jqueryui.js16608
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/sample_large.json27002
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/sample_moment.js3043
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/sample_omg.xml18071
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/sample_stackoverflow.html4335
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/sample_testsuite.json3315
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/sample_twitter.json52
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/sample_usa.svg12630
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/sample_wikipedia.html3283
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/svg_test.go33
-rw-r--r--vendor/github.com/tdewolff/minify/benchmarks/xml_test.go33
-rw-r--r--vendor/github.com/tdewolff/minify/cmd/minify/README.md149
-rw-r--r--vendor/github.com/tdewolff/minify/cmd/minify/main.go648
-rw-r--r--vendor/github.com/tdewolff/minify/cmd/minify/util.go46
-rw-r--r--vendor/github.com/tdewolff/minify/cmd/minify/watch.go106
-rw-r--r--vendor/github.com/tdewolff/minify/common.go339
-rw-r--r--vendor/github.com/tdewolff/minify/common_test.go237
-rw-r--r--vendor/github.com/tdewolff/minify/css/css.go559
-rw-r--r--vendor/github.com/tdewolff/minify/css/css_test.go234
-rw-r--r--vendor/github.com/tdewolff/minify/css/table.go153
-rw-r--r--vendor/github.com/tdewolff/minify/html/buffer.go131
-rw-r--r--vendor/github.com/tdewolff/minify/html/buffer_test.go37
-rw-r--r--vendor/github.com/tdewolff/minify/html/html.go463
-rw-r--r--vendor/github.com/tdewolff/minify/html/html_test.go408
-rw-r--r--vendor/github.com/tdewolff/minify/html/table.go187
-rw-r--r--vendor/github.com/tdewolff/minify/js/js.go88
-rw-r--r--vendor/github.com/tdewolff/minify/js/js_test.go96
-rw-r--r--vendor/github.com/tdewolff/minify/json/json.go63
-rw-r--r--vendor/github.com/tdewolff/minify/json/json_test.go74
-rw-r--r--vendor/github.com/tdewolff/minify/minify.go279
-rw-r--r--vendor/github.com/tdewolff/minify/minify_test.go358
-rw-r--r--vendor/github.com/tdewolff/minify/svg/buffer.go130
-rw-r--r--vendor/github.com/tdewolff/minify/svg/buffer_test.go68
-rw-r--r--vendor/github.com/tdewolff/minify/svg/pathdata.go282
-rw-r--r--vendor/github.com/tdewolff/minify/svg/pathdata_test.go60
-rw-r--r--vendor/github.com/tdewolff/minify/svg/svg.go434
-rw-r--r--vendor/github.com/tdewolff/minify/svg/svg_test.go199
-rw-r--r--vendor/github.com/tdewolff/minify/svg/table.go96
-rw-r--r--vendor/github.com/tdewolff/minify/xml/buffer.go84
-rw-r--r--vendor/github.com/tdewolff/minify/xml/buffer_test.go37
-rw-r--r--vendor/github.com/tdewolff/minify/xml/xml.go193
-rw-r--r--vendor/github.com/tdewolff/minify/xml/xml_test.go129
66 files changed, 174561 insertions, 0 deletions
diff --git a/vendor/github.com/tdewolff/minify/.gitattributes b/vendor/github.com/tdewolff/minify/.gitattributes
new file mode 100644
index 0000000..4c50ee1
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/.gitattributes
@@ -0,0 +1 @@
+benchmarks/sample_* linguist-generated=true
diff --git a/vendor/github.com/tdewolff/minify/.gitignore b/vendor/github.com/tdewolff/minify/.gitignore
new file mode 100644
index 0000000..3f3e864
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/.gitignore
@@ -0,0 +1,4 @@
+dist/
+benchmarks/*
+!benchmarks/*.go
+!benchmarks/sample_*
diff --git a/vendor/github.com/tdewolff/minify/.goreleaser.yml b/vendor/github.com/tdewolff/minify/.goreleaser.yml
new file mode 100644
index 0000000..bcc6975
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/.goreleaser.yml
@@ -0,0 +1,26 @@
+builds:
+ - binary: minify
+ main: ./cmd/minify/
+ ldflags: -s -w -X main.Version={{.Version}} -X main.Commit={{.Commit}} -X main.Date={{.Date}}
+ goos:
+ - windows
+ - linux
+ - darwin
+ goarch:
+ - amd64
+ - 386
+ - arm
+ - arm64
+archive:
+ format: tar.gz
+ format_overrides:
+ - goos: windows
+ format: zip
+ name_template: "{{.Binary}}_{{.Version}}_{{.Os}}_{{.Arch}}"
+ files:
+ - README.md
+ - LICENSE.md
+snapshot:
+ name_template: "devel"
+release:
+ draft: true
diff --git a/vendor/github.com/tdewolff/minify/.travis.yml b/vendor/github.com/tdewolff/minify/.travis.yml
new file mode 100644
index 0000000..4c14dfb
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/.travis.yml
@@ -0,0 +1,5 @@
+language: go
+before_install:
+ - go get github.com/mattn/goveralls
+script:
+ - goveralls -v -service travis-ci -repotoken $COVERALLS_TOKEN -ignore=cmd/minify/* || go test -v ./...
diff --git a/vendor/github.com/tdewolff/minify/LICENSE.md b/vendor/github.com/tdewolff/minify/LICENSE.md
new file mode 100644
index 0000000..41677de
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/LICENSE.md
@@ -0,0 +1,22 @@
+Copyright (c) 2015 Taco de Wolff
+
+ 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/vendor/github.com/tdewolff/minify/README.md b/vendor/github.com/tdewolff/minify/README.md
new file mode 100644
index 0000000..101bee8
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/README.md
@@ -0,0 +1,590 @@
+# Minify <a name="minify"></a> [![Build Status](https://travis-ci.org/tdewolff/minify.svg?branch=master)](https://travis-ci.org/tdewolff/minify) [![GoDoc](http://godoc.org/github.com/tdewolff/minify?status.svg)](http://godoc.org/github.com/tdewolff/minify) [![Coverage Status](https://coveralls.io/repos/github/tdewolff/minify/badge.svg?branch=master)](https://coveralls.io/github/tdewolff/minify?branch=master) [![Join the chat at https://gitter.im/tdewolff/minify](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/tdewolff/minify?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+
+**[Online demo](http://go.tacodewolff.nl/minify) if you need to minify files *now*.**
+
+**[Command line tool](https://github.com/tdewolff/minify/tree/master/cmd/minify) that minifies concurrently and supports watching file changes.**
+
+**[All releases](https://github.com/tdewolff/minify/releases) for various platforms.**
+
+---
+
+Minify is a minifier package written in [Go][1]. It provides HTML5, CSS3, JS, JSON, SVG and XML minifiers and an interface to implement any other minifier. Minification is the process of removing bytes from a file (such as whitespace) without changing its output and therefore shrinking its size and speeding up transmission over the internet and possibly parsing. The implemented minifiers are high performance and streaming, which implies O(n).
+
+The core functionality associates mimetypes with minification functions, allowing embedded resources (like CSS or JS within HTML files) to be minified as well. Users can add new implementations that are triggered based on a mimetype (or pattern), or redirect to an external command (like ClosureCompiler, UglifyCSS, ...).
+
+#### Table of Contents
+
+- [Minify](#minify)
+ - [Prologue](#prologue)
+ - [Installation](#installation)
+ - [API stability](#api-stability)
+ - [Testing](#testing)
+ - [Performance](#performance)
+ - [HTML](#html)
+ - [Whitespace removal](#whitespace-removal)
+ - [CSS](#css)
+ - [JS](#js)
+ - [JSON](#json)
+ - [SVG](#svg)
+ - [XML](#xml)
+ - [Usage](#usage)
+ - [New](#new)
+ - [From reader](#from-reader)
+ - [From bytes](#from-bytes)
+ - [From string](#from-string)
+ - [To reader](#to-reader)
+ - [To writer](#to-writer)
+ - [Middleware](#middleware)
+ - [Custom minifier](#custom-minifier)
+ - [Mediatypes](#mediatypes)
+ - [Examples](#examples)
+ - [Common minifiers](#common-minifiers)
+ - [Custom minifier](#custom-minifier-example)
+ - [ResponseWriter](#responsewriter)
+ - [Templates](#templates)
+ - [License](#license)
+
+### Status
+
+* CSS: **fully implemented**
+* HTML: **fully implemented**
+* JS: improved JSmin implementation
+* JSON: **fully implemented**
+* SVG: partially implemented; in development
+* XML: **fully implemented**
+
+### Roadmap
+
+- [ ] General speed-up of all minifiers (use ASM for whitespace funcs)
+- [ ] Improve JS minifiers by shortening variables and proper semicolon omission
+- [ ] Speed-up SVG minifier, it is very slow
+- [ ] Proper parser error reporting and line number + column information
+- [ ] Generation of source maps (uncertain, might slow down parsers too much if it cannot run separately nicely)
+- [ ] Look into compression of images, fonts and other web resources (into package `compress`?)
+- [ ] Create a cmd to pack webfiles (much like webpack), ie. merging CSS and JS files, inlining small external files, minification and gzipping. This would work on HTML files.
+- [ ] Create a package to format files, much like `gofmt` for Go files
+
+## Prologue
+Minifiers or bindings to minifiers exist in almost all programming languages. Some implementations are merely using several regular-expressions to trim whitespace and comments (even though regex for parsing HTML/XML is ill-advised, for a good read see [Regular Expressions: Now You Have Two Problems](http://blog.codinghorror.com/regular-expressions-now-you-have-two-problems/)). Some implementations are much more profound, such as the [YUI Compressor](http://yui.github.io/yuicompressor/) and [Google Closure Compiler](https://github.com/google/closure-compiler) for JS. As most existing implementations either use Java or JavaScript and don't focus on performance, they are pretty slow. Additionally, loading the whole file into memory at once is bad for really large files (or impossible for streams).
+
+This minifier proves to be that fast and extensive minifier that can handle HTML and any other filetype it may contain (CSS, JS, ...). It streams the input and output and can minify files concurrently.
+
+## Installation
+Run the following command
+
+ go get github.com/tdewolff/minify
+
+or add the following imports and run the project with `go get`
+``` go
+import (
+ "github.com/tdewolff/minify"
+ "github.com/tdewolff/minify/css"
+ "github.com/tdewolff/minify/html"
+ "github.com/tdewolff/minify/js"
+ "github.com/tdewolff/minify/json"
+ "github.com/tdewolff/minify/svg"
+ "github.com/tdewolff/minify/xml"
+)
+```
+
+## API stability
+There is no guarantee for absolute stability, but I take issues and bugs seriously and don't take API changes lightly. The library will be maintained in a compatible way unless vital bugs prevent me from doing so. There has been one API change after v1 which added options support and I took the opportunity to push through some more API clean up as well. There are no plans whatsoever for future API changes.
+
+## Testing
+For all subpackages and the imported `parse` and `buffer` packages, test coverage of 100% is pursued. Besides full coverage, the minifiers are [fuzz tested](https://github.com/tdewolff/fuzz) using [github.com/dvyukov/go-fuzz](http://www.github.com/dvyukov/go-fuzz), see [the wiki](https://github.com/tdewolff/minify/wiki) for the most important bugs found by fuzz testing. Furthermore am I working on adding visual testing to ensure that minification doesn't change anything visually. By using the WebKit browser to render the original and minified pages we can check whether any pixel is different.
+
+These tests ensure that everything works as intended, the code does not crash (whatever the input) and that it doesn't change the final result visually. If you still encounter a bug, please report [here](https://github.com/tdewolff/minify/issues)!
+
+## Performance
+The benchmarks directory contains a number of standardized samples used to compare performance between changes. To give an indication of the speed of this library, I've ran the tests on my Thinkpad T460 (i5-6300U quad-core 2.4GHz running Arch Linux) using Go 1.9.2.
+
+```
+name time/op
+CSS/sample_bootstrap.css-4 3.05ms ± 1%
+CSS/sample_gumby.css-4 4.25ms ± 1%
+HTML/sample_amazon.html-4 3.33ms ± 0%
+HTML/sample_bbc.html-4 1.39ms ± 7%
+HTML/sample_blogpost.html-4 222µs ± 1%
+HTML/sample_es6.html-4 18.0ms ± 1%
+HTML/sample_stackoverflow.html-4 3.08ms ± 1%
+HTML/sample_wikipedia.html-4 6.06ms ± 1%
+JS/sample_ace.js-4 9.92ms ± 1%
+JS/sample_dot.js-4 91.4µs ± 4%
+JS/sample_jquery.js-4 4.00ms ± 1%
+JS/sample_jqueryui.js-4 7.93ms ± 0%
+JS/sample_moment.js-4 1.46ms ± 1%
+JSON/sample_large.json-4 5.07ms ± 4%
+JSON/sample_testsuite.json-4 2.96ms ± 0%
+JSON/sample_twitter.json-4 11.3µs ± 0%
+SVG/sample_arctic.svg-4 64.7ms ± 0%
+SVG/sample_gopher.svg-4 227µs ± 0%
+SVG/sample_usa.svg-4 35.9ms ± 6%
+XML/sample_books.xml-4 48.1µs ± 4%
+XML/sample_catalog.xml-4 20.2µs ± 0%
+XML/sample_omg.xml-4 9.02ms ± 0%
+
+name speed
+CSS/sample_bootstrap.css-4 45.0MB/s ± 1%
+CSS/sample_gumby.css-4 43.8MB/s ± 1%
+HTML/sample_amazon.html-4 142MB/s ± 0%
+HTML/sample_bbc.html-4 83.0MB/s ± 7%
+HTML/sample_blogpost.html-4 94.5MB/s ± 1%
+HTML/sample_es6.html-4 56.8MB/s ± 1%
+HTML/sample_stackoverflow.html-4 66.7MB/s ± 1%
+HTML/sample_wikipedia.html-4 73.5MB/s ± 1%
+JS/sample_ace.js-4 64.9MB/s ± 1%
+JS/sample_dot.js-4 56.4MB/s ± 4%
+JS/sample_jquery.js-4 61.8MB/s ± 1%
+JS/sample_jqueryui.js-4 59.2MB/s ± 0%
+JS/sample_moment.js-4 67.8MB/s ± 1%
+JSON/sample_large.json-4 150MB/s ± 4%
+JSON/sample_testsuite.json-4 233MB/s ± 0%
+JSON/sample_twitter.json-4 134MB/s ± 0%
+SVG/sample_arctic.svg-4 22.7MB/s ± 0%
+SVG/sample_gopher.svg-4 25.6MB/s ± 0%
+SVG/sample_usa.svg-4 28.6MB/s ± 6%
+XML/sample_books.xml-4 92.1MB/s ± 4%
+XML/sample_catalog.xml-4 95.6MB/s ± 0%
+```
+
+## HTML
+
+HTML (with JS and CSS) minification typically shaves off about 10%.
+
+The HTML5 minifier uses these minifications:
+
+- strip unnecessary whitespace and otherwise collapse it to one space (or newline if it originally contained a newline)
+- strip superfluous quotes, or uses single/double quotes whichever requires fewer escapes
+- strip default attribute values and attribute boolean values
+- strip some empty attributes
+- strip unrequired tags (`html`, `head`, `body`, ...)
+- strip unrequired end tags (`tr`, `td`, `li`, ... and often `p`)
+- strip default protocols (`http:`, `https:` and `javascript:`)
+- strip all comments (including conditional comments, old IE versions are not supported anymore by Microsoft)
+- shorten `doctype` and `meta` charset
+- lowercase tags, attributes and some values to enhance gzip compression
+
+Options:
+
+- `KeepConditionalComments` preserve all IE conditional comments such as `<!--[if IE 6]><![endif]-->` and `<![if IE 6]><![endif]>`, see https://msdn.microsoft.com/en-us/library/ms537512(v=vs.85).aspx#syntax
+- `KeepDefaultAttrVals` preserve default attribute values such as `<script type="text/javascript">`
+- `KeepDocumentTags` preserve `html`, `head` and `body` tags
+- `KeepEndTags` preserve all end tags
+- `KeepWhitespace` preserve whitespace between inline tags but still collapse multiple whitespace characters into one
+
+After recent benchmarking and profiling it became really fast and minifies pages in the 10ms range, making it viable for on-the-fly minification.
+
+However, be careful when doing on-the-fly minification. Minification typically trims off 10% and does this at worst around about 20MB/s. This means users have to download slower than 2MB/s to make on-the-fly minification worthwhile. This may or may not apply in your situation. Rather use caching!
+
+### Whitespace removal
+The whitespace removal mechanism collapses all sequences of whitespace (spaces, newlines, tabs) to a single space. If the sequence contained a newline or carriage return it will collapse into a newline character instead. It trims all text parts (in between tags) depending on whether it was preceded by a space from a previous piece of text and whether it is followed up by a block element or an inline element. In the former case we can omit spaces while for inline elements whitespace has significance.
+
+Make sure your HTML doesn't depend on whitespace between `block` elements that have been changed to `inline` or `inline-block` elements using CSS. Your layout *should not* depend on those whitespaces as the minifier will remove them. An example is a menu consisting of multiple `<li>` that have `display:inline-block` applied and have whitespace in between them. It is bad practise to rely on whitespace for element positioning anyways!
+
+## CSS
+
+Minification typically shaves off about 10%-15%.
+
+The CSS minifier will only use safe minifications:
+
+- remove comments and unnecessary whitespace
+- remove trailing semicolons
+- optimize `margin`, `padding` and `border-width` number of sides
+- shorten numbers by removing unnecessary `+` and zeros and rewriting with/without exponent
+- remove dimension and percentage for zero values
+- remove quotes for URLs
+- remove quotes for font families and make lowercase
+- rewrite hex colors to/from color names, or to 3 digit hex
+- rewrite `rgb(`, `rgba(`, `hsl(` and `hsla(` colors to hex or name
+- replace `normal` and `bold` by numbers for `font-weight` and `font`
+- replace `none` &#8594; `0` for `border`, `background` and `outline`
+- lowercase all identifiers except classes, IDs and URLs to enhance gzip compression
+- shorten MS alpha function
+- rewrite data URIs with base64 or ASCII whichever is shorter
+- calls minifier for data URI mediatypes, thus you can compress embedded SVG files if you have that minifier attached
+
+It does purposely not use the following techniques:
+
+- (partially) merge rulesets
+- (partially) split rulesets
+- collapse multiple declarations when main declaration is defined within a ruleset (don't put `font-weight` within an already existing `font`, too complex)
+- remove overwritten properties in ruleset (this not always overwrites it, for example with `!important`)
+- rewrite properties into one ruleset if possible (like `margin-top`, `margin-right`, `margin-bottom` and `margin-left` &#8594; `margin`)
+- put nested ID selector at the front (`body > div#elem p` &#8594; `#elem p`)
+- rewrite attribute selectors for IDs and classes (`div[id=a]` &#8594; `div#a`)
+- put space after pseudo-selectors (IE6 is old, move on!)
+
+It's great that so many other tools make comparison tables: [CSS Minifier Comparison](http://www.codenothing.com/benchmarks/css-compressor-3.0/full.html), [CSS minifiers comparison](http://www.phpied.com/css-minifiers-comparison/) and [CleanCSS tests](http://goalsmashers.github.io/css-minification-benchmark/). From the last link, this CSS minifier is almost without doubt the fastest and has near-perfect minification rates. It falls short with the purposely not implemented and often unsafe techniques, so that's fine.
+
+Options:
+
+- `Decimals` number of decimals to preserve for numbers, `-1` means no trimming
+
+## JS
+
+The JS minifier is pretty basic. It removes comments, whitespace and line breaks whenever it can. It employs all the rules that [JSMin](http://www.crockford.com/javascript/jsmin.html) does too, but has additional improvements. For example the prefix-postfix bug is fixed.
+
+Common speeds of PHP and JS implementations are about 100-300kB/s (see [Uglify2](http://lisperator.net/uglifyjs/), [Adventures in PHP web asset minimization](https://www.happyassassin.net/2014/12/29/adventures-in-php-web-asset-minimization/)). This implementation or orders of magnitude faster, around ~50MB/s.
+
+TODO:
+- shorten local variables / function parameters names
+- precise semicolon and newline omission
+
+## JSON
+
+Minification typically shaves off about 15% of filesize for common indented JSON such as generated by [JSON Generator](http://www.json-generator.com/).
+
+The JSON minifier only removes whitespace, which is the only thing that can be left out.
+
+## SVG
+
+The SVG minifier uses these minifications:
+
+- trim and collapse whitespace between all tags
+- strip comments, empty `doctype`, XML prelude, `metadata`
+- strip SVG version
+- strip CDATA sections wherever possible
+- collapse tags with no content to a void tag
+- collapse empty container tags (`g`, `svg`, ...)
+- minify style tag and attributes with the CSS minifier
+- minify colors
+- shorten lengths and numbers and remove default `px` unit
+- shorten `path` data
+- convert `rect`, `line`, `polygon`, `polyline` to `path`
+- use relative or absolute positions in path data whichever is shorter
+
+TODO:
+- convert attributes to style attribute whenever shorter
+- merge path data? (same style and no intersection -- the latter is difficult)
+
+Options:
+
+- `Decimals` number of decimals to preserve for numbers, `-1` means no trimming
+
+## XML
+
+The XML minifier uses these minifications:
+
+- strip unnecessary whitespace and otherwise collapse it to one space (or newline if it originally contained a newline)
+- strip comments
+- collapse tags with no content to a void tag
+- strip CDATA sections wherever possible
+
+Options:
+
+- `KeepWhitespace` preserve whitespace between inline tags but still collapse multiple whitespace characters into one
+
+## Usage
+Any input stream is being buffered by the minification functions. This is how the underlying buffer package inherently works to ensure high performance. The output stream however is not buffered. It is wise to preallocate a buffer as big as the input to which the output is written, or otherwise use `bufio` to buffer to a streaming writer.
+
+### New
+Retrieve a minifier struct which holds a map of mediatype &#8594; minifier functions.
+``` go
+m := minify.New()
+```
+
+The following loads all provided minifiers.
+``` go
+m := minify.New()
+m.AddFunc("text/css", css.Minify)
+m.AddFunc("text/html", html.Minify)
+m.AddFunc("text/javascript", js.Minify)
+m.AddFunc("image/svg+xml", svg.Minify)
+m.AddFuncRegexp(regexp.MustCompile("[/+]json$"), json.Minify)
+m.AddFuncRegexp(regexp.MustCompile("[/+]xml$"), xml.Minify)
+```
+
+You can set options to several minifiers.
+``` go
+m.Add("text/html", &html.Minifier{
+ KeepDefaultAttrVals: true,
+ KeepWhitespace: true,
+})
+```
+
+### From reader
+Minify from an `io.Reader` to an `io.Writer` for a specific mediatype.
+``` go
+if err := m.Minify(mediatype, w, r); err != nil {
+ panic(err)
+}
+```
+
+### From bytes
+Minify from and to a `[]byte` for a specific mediatype.
+``` go
+b, err = m.Bytes(mediatype, b)
+if err != nil {
+ panic(err)
+}
+```
+
+### From string
+Minify from and to a `string` for a specific mediatype.
+``` go
+s, err = m.String(mediatype, s)
+if err != nil {
+ panic(err)
+}
+```
+
+### To reader
+Get a minifying reader for a specific mediatype.
+``` go
+mr := m.Reader(mediatype, r)
+if _, err := mr.Read(b); err != nil {
+ panic(err)
+}
+```
+
+### To writer
+Get a minifying writer for a specific mediatype. Must be explicitly closed because it uses an `io.Pipe` underneath.
+``` go
+mw := m.Writer(mediatype, w)
+if mw.Write([]byte("input")); err != nil {
+ panic(err)
+}
+if err := mw.Close(); err != nil {
+ panic(err)
+}
+```
+
+### Middleware
+Minify resources on the fly using middleware. It passes a wrapped response writer to the handler that removes the Content-Length header. The minifier is chosen based on the Content-Type header or, if the header is empty, by the request URI file extension. This is on-the-fly processing, you should preferably cache the results though!
+``` go
+fs := http.FileServer(http.Dir("www/"))
+http.Handle("/", m.Middleware(fs))
+```
+
+### Custom minifier
+Add a minifier for a specific mimetype.
+``` go
+type CustomMinifier struct {
+ KeepLineBreaks bool
+}
+
+func (c *CustomMinifier) Minify(m *minify.M, w io.Writer, r io.Reader, params map[string]string) error {
+ // ...
+ return nil
+}
+
+m.Add(mimetype, &CustomMinifier{KeepLineBreaks: true})
+// or
+m.AddRegexp(regexp.MustCompile("/x-custom$"), &CustomMinifier{KeepLineBreaks: true})
+```
+
+Add a minify function for a specific mimetype.
+``` go
+m.AddFunc(mimetype, func(m *minify.M, w io.Writer, r io.Reader, params map[string]string) error {
+ // ...
+ return nil
+})
+m.AddFuncRegexp(regexp.MustCompile("/x-custom$"), func(m *minify.M, w io.Writer, r io.Reader, params map[string]string) error {
+ // ...
+ return nil
+})
+```
+
+Add a command `cmd` with arguments `args` for a specific mimetype.
+``` go
+m.AddCmd(mimetype, exec.Command(cmd, args...))
+m.AddCmdRegexp(regexp.MustCompile("/x-custom$"), exec.Command(cmd, args...))
+```
+
+### Mediatypes
+Using the `params map[string]string` argument one can pass parameters to the minifier such as seen in mediatypes (`type/subtype; key1=val2; key2=val2`). Examples are the encoding or charset of the data. Calling `Minify` will split the mimetype and parameters for the minifiers for you, but `MinifyMimetype` can be used if you already have them split up.
+
+Minifiers can also be added using a regular expression. For example a minifier with `image/.*` will match any image mime.
+
+## Examples
+### Common minifiers
+Basic example that minifies from stdin to stdout and loads the default HTML, CSS and JS minifiers. Optionally, one can enable `java -jar build/compiler.jar` to run for JS (for example the [ClosureCompiler](https://code.google.com/p/closure-compiler/)). Note that reading the file into a buffer first and writing to a pre-allocated buffer would be faster (but would disable streaming).
+``` go
+package main
+
+import (
+ "log"
+ "os"
+ "os/exec"
+
+ "github.com/tdewolff/minify"
+ "github.com/tdewolff/minify/css"
+ "github.com/tdewolff/minify/html"
+ "github.com/tdewolff/minify/js"
+ "github.com/tdewolff/minify/json"
+ "github.com/tdewolff/minify/svg"
+ "github.com/tdewolff/minify/xml"
+)
+
+func main() {
+ m := minify.New()
+ m.AddFunc("text/css", css.Minify)
+ m.AddFunc("text/html", html.Minify)
+ m.AddFunc("text/javascript", js.Minify)
+ m.AddFunc("image/svg+xml", svg.Minify)
+ m.AddFuncRegexp(regexp.MustCompile("[/+]json$"), json.Minify)
+ m.AddFuncRegexp(regexp.MustCompile("[/+]xml$"), xml.Minify)
+
+ // Or use the following for better minification of JS but lower speed:
+ // m.AddCmd("text/javascript", exec.Command("java", "-jar", "build/compiler.jar"))
+
+ if err := m.Minify("text/html", os.Stdout, os.Stdin); err != nil {
+ panic(err)
+ }
+}
+```
+
+### <a name="custom-minifier-example"></a> Custom minifier
+Custom minifier showing an example that implements the minifier function interface. Within a custom minifier, it is possible to call any minifier function (through `m minify.Minifier`) recursively when dealing with embedded resources.
+``` go
+package main
+
+import (
+ "bufio"
+ "fmt"
+ "io"
+ "log"
+ "strings"
+
+ "github.com/tdewolff/minify"
+)
+
+func main() {
+ m := minify.New()
+ m.AddFunc("text/plain", func(m *minify.M, w io.Writer, r io.Reader, _ map[string]string) error {
+ // remove newlines and spaces
+ rb := bufio.NewReader(r)
+ for {
+ line, err := rb.ReadString('\n')
+ if err != nil && err != io.EOF {
+ return err
+ }
+ if _, errws := io.WriteString(w, strings.Replace(line, " ", "", -1)); errws != nil {
+ return errws
+ }
+ if err == io.EOF {
+ break
+ }
+ }
+ return nil
+ })
+
+ in := "Because my coffee was too cold, I heated it in the microwave."
+ out, err := m.String("text/plain", in)
+ if err != nil {
+ panic(err)
+ }
+ fmt.Println(out)
+ // Output: Becausemycoffeewastoocold,Iheateditinthemicrowave.
+}
+```
+
+### ResponseWriter
+#### Middleware
+``` go
+func main() {
+ m := minify.New()
+ m.AddFunc("text/css", css.Minify)
+ m.AddFunc("text/html", html.Minify)
+ m.AddFunc("text/javascript", js.Minify)
+ m.AddFunc("image/svg+xml", svg.Minify)
+ m.AddFuncRegexp(regexp.MustCompile("[/+]json$"), json.Minify)
+ m.AddFuncRegexp(regexp.MustCompile("[/+]xml$"), xml.Minify)
+
+ fs := http.FileServer(http.Dir("www/"))
+ http.Handle("/", m.Middleware(fs))
+}
+```
+
+#### ResponseWriter
+``` go
+func Serve(w http.ResponseWriter, r *http.Request) {
+ mw := m.ResponseWriter(w, r)
+ defer mw.Close()
+ w = mw
+
+ http.ServeFile(w, r, path.Join("www", r.URL.Path))
+}
+```
+
+#### Custom response writer
+ResponseWriter example which returns a ResponseWriter that minifies the content and then writes to the original ResponseWriter. Any write after applying this filter will be minified.
+``` go
+type MinifyResponseWriter struct {
+ http.ResponseWriter
+ io.WriteCloser
+}
+
+func (m MinifyResponseWriter) Write(b []byte) (int, error) {
+ return m.WriteCloser.Write(b)
+}
+
+// MinifyResponseWriter must be closed explicitly by calling site.
+func MinifyFilter(mediatype string, res http.ResponseWriter) MinifyResponseWriter {
+ m := minify.New()
+ // add minfiers
+
+ mw := m.Writer(mediatype, res)
+ return MinifyResponseWriter{res, mw}
+}
+```
+
+``` go
+// Usage
+func(w http.ResponseWriter, req *http.Request) {
+ w = MinifyFilter("text/html", w)
+ if _, err := io.WriteString(w, "<p class="message"> This HTTP response will be minified. </p>"); err != nil {
+ panic(err)
+ }
+ if err := w.Close(); err != nil {
+ panic(err)
+ }
+ // Output: <p class=message>This HTTP response will be minified.
+}
+```
+
+### Templates
+
+Here's an example of a replacement for `template.ParseFiles` from `template/html`, which automatically minifies each template before parsing it.
+
+Be aware that minifying templates will work in most cases but not all. Because the HTML minifier only works for valid HTML5, your template must be valid HTML5 of itself. Template tags are parsed as regular text by the minifier.
+
+``` go
+func compileTemplates(filenames ...string) (*template.Template, error) {
+ m := minify.New()
+ m.AddFunc("text/html", html.Minify)
+
+ var tmpl *template.Template
+ for _, filename := range filenames {
+ name := filepath.Base(filename)
+ if tmpl == nil {
+ tmpl = template.New(name)
+ } else {
+ tmpl = tmpl.New(name)
+ }
+
+ b, err := ioutil.ReadFile(filename)
+ if err != nil {
+ return nil, err
+ }
+
+ mb, err := m.Bytes("text/html", b)
+ if err != nil {
+ return nil, err
+ }
+ tmpl.Parse(string(mb))
+ }
+ return tmpl, nil
+}
+```
+
+Example usage:
+
+``` go
+templates := template.MustCompile(compileTemplates("view.html", "home.html"))
+```
+
+## License
+Released under the [MIT license](LICENSE.md).
+
+[1]: http://golang.org/ "Go Language"
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/css_test.go b/vendor/github.com/tdewolff/minify/benchmarks/css_test.go
new file mode 100644
index 0000000..e43a142
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/css_test.go
@@ -0,0 +1,32 @@
+package benchmarks
+
+import (
+ "testing"
+
+ "github.com/tdewolff/minify/css"
+)
+
+var cssSamples = []string{
+ "sample_bootstrap.css",
+ "sample_gumby.css",
+}
+
+func init() {
+ for _, sample := range cssSamples {
+ load(sample)
+ }
+}
+
+func BenchmarkCSS(b *testing.B) {
+ for _, sample := range cssSamples {
+ b.Run(sample, func(b *testing.B) {
+ b.SetBytes(int64(r[sample].Len()))
+
+ for i := 0; i < b.N; i++ {
+ r[sample].Reset()
+ w[sample].Reset()
+ css.Minify(m, w[sample], r[sample], nil)
+ }
+ })
+ }
+}
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/html_test.go b/vendor/github.com/tdewolff/minify/benchmarks/html_test.go
new file mode 100644
index 0000000..d26b86d
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/html_test.go
@@ -0,0 +1,36 @@
+package benchmarks
+
+import (
+ "testing"
+
+ "github.com/tdewolff/minify/html"
+)
+
+var htmlSamples = []string{
+ "sample_amazon.html",
+ "sample_bbc.html",
+ "sample_blogpost.html",
+ "sample_es6.html",
+ "sample_stackoverflow.html",
+ "sample_wikipedia.html",
+}
+
+func init() {
+ for _, sample := range htmlSamples {
+ load(sample)
+ }
+}
+
+func BenchmarkHTML(b *testing.B) {
+ for _, sample := range htmlSamples {
+ b.Run(sample, func(b *testing.B) {
+ b.SetBytes(int64(r[sample].Len()))
+
+ for i := 0; i < b.N; i++ {
+ r[sample].Reset()
+ w[sample].Reset()
+ html.Minify(m, w[sample], r[sample], nil)
+ }
+ })
+ }
+}
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/js_test.go b/vendor/github.com/tdewolff/minify/benchmarks/js_test.go
new file mode 100644
index 0000000..38662d7
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/js_test.go
@@ -0,0 +1,35 @@
+package benchmarks
+
+import (
+ "testing"
+
+ "github.com/tdewolff/minify/js"
+)
+
+var jsSamples = []string{
+ "sample_ace.js",
+ "sample_dot.js",
+ "sample_jquery.js",
+ "sample_jqueryui.js",
+ "sample_moment.js",
+}
+
+func init() {
+ for _, sample := range jsSamples {
+ load(sample)
+ }
+}
+
+func BenchmarkJS(b *testing.B) {
+ for _, sample := range jsSamples {
+ b.Run(sample, func(b *testing.B) {
+ b.SetBytes(int64(r[sample].Len()))
+
+ for i := 0; i < b.N; i++ {
+ r[sample].Reset()
+ w[sample].Reset()
+ js.Minify(m, w[sample], r[sample], nil)
+ }
+ })
+ }
+}
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/json_test.go b/vendor/github.com/tdewolff/minify/benchmarks/json_test.go
new file mode 100644
index 0000000..3d9f344
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/json_test.go
@@ -0,0 +1,33 @@
+package benchmarks
+
+import (
+ "testing"
+
+ "github.com/tdewolff/minify/json"
+)
+
+var jsonSamples = []string{
+ "sample_large.json",
+ "sample_testsuite.json",
+ "sample_twitter.json",
+}
+
+func init() {
+ for _, sample := range jsonSamples {
+ load(sample)
+ }
+}
+
+func BenchmarkJSON(b *testing.B) {
+ for _, sample := range jsonSamples {
+ b.Run(sample, func(b *testing.B) {
+ b.SetBytes(int64(r[sample].Len()))
+
+ for i := 0; i < b.N; i++ {
+ r[sample].Reset()
+ w[sample].Reset()
+ json.Minify(m, w[sample], r[sample], nil)
+ }
+ })
+ }
+}
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/main_test.go b/vendor/github.com/tdewolff/minify/benchmarks/main_test.go
new file mode 100644
index 0000000..4edf2a3
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/main_test.go
@@ -0,0 +1,18 @@
+package benchmarks
+
+import (
+ "io/ioutil"
+
+ "github.com/tdewolff/minify"
+ "github.com/tdewolff/parse/buffer"
+)
+
+var m = minify.New()
+var r = map[string]*buffer.Reader{}
+var w = map[string]*buffer.Writer{}
+
+func load(filename string) {
+ sample, _ := ioutil.ReadFile(filename)
+ r[filename] = buffer.NewReader(sample)
+ w[filename] = buffer.NewWriter(make([]byte, 0, len(sample)))
+}
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/sample_ace.js b/vendor/github.com/tdewolff/minify/benchmarks/sample_ace.js
new file mode 100644
index 0000000..471887b
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/sample_ace.js
@@ -0,0 +1,18655 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Distributed under the BSD license:
+ *
+ * Copyright (c) 2010, Ajax.org B.V.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of Ajax.org B.V. nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/**
+ * Define a module along with a payload
+ * @param module a name for the payload
+ * @param payload a function to call with (require, exports, module) params
+ */
+
+(function() {
+
+var ACE_NAMESPACE = "";
+
+var global = (function() { return this; })();
+if (!global && typeof window != "undefined") global = window; // strict mode
+
+
+if (!ACE_NAMESPACE && typeof requirejs !== "undefined")
+ return;
+
+
+var define = function(module, deps, payload) {
+ if (typeof module !== "string") {
+ if (define.original)
+ define.original.apply(this, arguments);
+ else {
+ console.error("dropping module because define wasn\'t a string.");
+ console.trace();
+ }
+ return;
+ }
+ if (arguments.length == 2)
+ payload = deps;
+ if (!define.modules[module]) {
+ define.payloads[module] = payload;
+ define.modules[module] = null;
+ }
+};
+
+define.modules = {};
+define.payloads = {};
+
+/**
+ * Get at functionality define()ed using the function above
+ */
+var _require = function(parentId, module, callback) {
+ if (typeof module === "string") {
+ var payload = lookup(parentId, module);
+ if (payload != undefined) {
+ callback && callback();
+ return payload;
+ }
+ } else if (Object.prototype.toString.call(module) === "[object Array]") {
+ var params = [];
+ for (var i = 0, l = module.length; i < l; ++i) {
+ var dep = lookup(parentId, module[i]);
+ if (dep == undefined && require.original)
+ return;
+ params.push(dep);
+ }
+ return callback && callback.apply(null, params) || true;
+ }
+};
+
+var require = function(module, callback) {
+ var packagedModule = _require("", module, callback);
+ if (packagedModule == undefined && require.original)
+ return require.original.apply(this, arguments);
+ return packagedModule;
+};
+
+var normalizeModule = function(parentId, moduleName) {
+ // normalize plugin requires
+ if (moduleName.indexOf("!") !== -1) {
+ var chunks = moduleName.split("!");
+ return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]);
+ }
+ // normalize relative requires
+ if (moduleName.charAt(0) == ".") {
+ var base = parentId.split("/").slice(0, -1).join("/");
+ moduleName = base + "/" + moduleName;
+
+ while(moduleName.indexOf(".") !== -1 && previous != moduleName) {
+ var previous = moduleName;
+ moduleName = moduleName.replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, "");
+ }
+ }
+ return moduleName;
+};
+
+/**
+ * Internal function to lookup moduleNames and resolve them by calling the
+ * definition function if needed.
+ */
+var lookup = function(parentId, moduleName) {
+ moduleName = normalizeModule(parentId, moduleName);
+
+ var module = define.modules[moduleName];
+ if (!module) {
+ module = define.payloads[moduleName];
+ if (typeof module === 'function') {
+ var exports = {};
+ var mod = {
+ id: moduleName,
+ uri: '',
+ exports: exports,
+ packaged: true
+ };
+
+ var req = function(module, callback) {
+ return _require(moduleName, module, callback);
+ };
+
+ var returnValue = module(req, exports, mod);
+ exports = returnValue || mod.exports;
+ define.modules[moduleName] = exports;
+ delete define.payloads[moduleName];
+ }
+ module = define.modules[moduleName] = exports || module;
+ }
+ return module;
+};
+
+function exportAce(ns) {
+ var root = global;
+ if (ns) {
+ if (!global[ns])
+ global[ns] = {};
+ root = global[ns];
+ }
+
+ if (!root.define || !root.define.packaged) {
+ define.original = root.define;
+ root.define = define;
+ root.define.packaged = true;
+ }
+
+ if (!root.require || !root.require.packaged) {
+ require.original = root.require;
+ root.require = require;
+ root.require.packaged = true;
+ }
+}
+
+exportAce(ACE_NAMESPACE);
+
+})();
+
+define("ace/lib/regexp",["require","exports","module"], function(require, exports, module) {
+"use strict";
+
+ var real = {
+ exec: RegExp.prototype.exec,
+ test: RegExp.prototype.test,
+ match: String.prototype.match,
+ replace: String.prototype.replace,
+ split: String.prototype.split
+ },
+ compliantExecNpcg = real.exec.call(/()??/, "")[1] === undefined, // check `exec` handling of nonparticipating capturing groups
+ compliantLastIndexIncrement = function () {
+ var x = /^/g;
+ real.test.call(x, "");
+ return !x.lastIndex;
+ }();
+
+ if (compliantLastIndexIncrement && compliantExecNpcg)
+ return;
+ RegExp.prototype.exec = function (str) {
+ var match = real.exec.apply(this, arguments),
+ name, r2;
+ if ( typeof(str) == 'string' && match) {
+ if (!compliantExecNpcg && match.length > 1 && indexOf(match, "") > -1) {
+ r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), "g", ""));
+ real.replace.call(str.slice(match.index), r2, function () {
+ for (var i = 1; i < arguments.length - 2; i++) {
+ if (arguments[i] === undefined)
+ match[i] = undefined;
+ }
+ });
+ }
+ if (this._xregexp && this._xregexp.captureNames) {
+ for (var i = 1; i < match.length; i++) {
+ name = this._xregexp.captureNames[i - 1];
+ if (name)
+ match[name] = match[i];
+ }
+ }
+ if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))
+ this.lastIndex--;
+ }
+ return match;
+ };
+ if (!compliantLastIndexIncrement) {
+ RegExp.prototype.test = function (str) {
+ var match = real.exec.call(this, str);
+ if (match && this.global && !match[0].length && (this.lastIndex > match.index))
+ this.lastIndex--;
+ return !!match;
+ };
+ }
+
+ function getNativeFlags (regex) {
+ return (regex.global ? "g" : "") +
+ (regex.ignoreCase ? "i" : "") +
+ (regex.multiline ? "m" : "") +
+ (regex.extended ? "x" : "") + // Proposed for ES4; included in AS3
+ (regex.sticky ? "y" : "");
+ }
+
+ function indexOf (array, item, from) {
+ if (Array.prototype.indexOf) // Use the native array method if available
+ return array.indexOf(item, from);
+ for (var i = from || 0; i < array.length; i++) {
+ if (array[i] === item)
+ return i;
+ }
+ return -1;
+ }
+
+});
+
+define("ace/lib/es5-shim",["require","exports","module"], function(require, exports, module) {
+
+function Empty() {}
+
+if (!Function.prototype.bind) {
+ Function.prototype.bind = function bind(that) { // .length is 1
+ var target = this;
+ if (typeof target != "function") {
+ throw new TypeError("Function.prototype.bind called on incompatible " + target);
+ }
+ var args = slice.call(arguments, 1); // for normal call
+ var bound = function () {
+
+ if (this instanceof bound) {
+
+ var result = target.apply(
+ this,
+ args.concat(slice.call(arguments))
+ );
+ if (Object(result) === result) {
+ return result;
+ }
+ return this;
+
+ } else {
+ return target.apply(
+ that,
+ args.concat(slice.call(arguments))
+ );
+
+ }
+
+ };
+ if(target.prototype) {
+ Empty.prototype = target.prototype;
+ bound.prototype = new Empty();
+ Empty.prototype = null;
+ }
+ return bound;
+ };
+}
+var call = Function.prototype.call;
+var prototypeOfArray = Array.prototype;
+var prototypeOfObject = Object.prototype;
+var slice = prototypeOfArray.slice;
+var _toString = call.bind(prototypeOfObject.toString);
+var owns = call.bind(prototypeOfObject.hasOwnProperty);
+var defineGetter;
+var defineSetter;
+var lookupGetter;
+var lookupSetter;
+var supportsAccessors;
+if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) {
+ defineGetter = call.bind(prototypeOfObject.__defineGetter__);
+ defineSetter = call.bind(prototypeOfObject.__defineSetter__);
+ lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);
+ lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);
+}
+if ([1,2].splice(0).length != 2) {
+ if(function() { // test IE < 9 to splice bug - see issue #138
+ function makeArray(l) {
+ var a = new Array(l+2);
+ a[0] = a[1] = 0;
+ return a;
+ }
+ var array = [], lengthBefore;
+
+ array.splice.apply(array, makeArray(20));
+ array.splice.apply(array, makeArray(26));
+
+ lengthBefore = array.length; //46
+ array.splice(5, 0, "XXX"); // add one element
+
+ lengthBefore + 1 == array.length
+
+ if (lengthBefore + 1 == array.length) {
+ return true;// has right splice implementation without bugs
+ }
+ }()) {//IE 6/7
+ var array_splice = Array.prototype.splice;
+ Array.prototype.splice = function(start, deleteCount) {
+ if (!arguments.length) {
+ return [];
+ } else {
+ return array_splice.apply(this, [
+ start === void 0 ? 0 : start,
+ deleteCount === void 0 ? (this.length - start) : deleteCount
+ ].concat(slice.call(arguments, 2)))
+ }
+ };
+ } else {//IE8
+ Array.prototype.splice = function(pos, removeCount){
+ var length = this.length;
+ if (pos > 0) {
+ if (pos > length)
+ pos = length;
+ } else if (pos == void 0) {
+ pos = 0;
+ } else if (pos < 0) {
+ pos = Math.max(length + pos, 0);
+ }
+
+ if (!(pos+removeCount < length))
+ removeCount = length - pos;
+
+ var removed = this.slice(pos, pos+removeCount);
+ var insert = slice.call(arguments, 2);
+ var add = insert.length;
+ if (pos === length) {
+ if (add) {
+ this.push.apply(this, insert);
+ }
+ } else {
+ var remove = Math.min(removeCount, length - pos);
+ var tailOldPos = pos + remove;
+ var tailNewPos = tailOldPos + add - remove;
+ var tailCount = length - tailOldPos;
+ var lengthAfterRemove = length - remove;
+
+ if (tailNewPos < tailOldPos) { // case A
+ for (var i = 0; i < tailCount; ++i) {
+ this[tailNewPos+i] = this[tailOldPos+i];
+ }
+ } else if (tailNewPos > tailOldPos) { // case B
+ for (i = tailCount; i--; ) {
+ this[tailNewPos+i] = this[tailOldPos+i];
+ }
+ } // else, add == remove (nothing to do)
+
+ if (add && pos === lengthAfterRemove) {
+ this.length = lengthAfterRemove; // truncate array
+ this.push.apply(this, insert);
+ } else {
+ this.length = lengthAfterRemove + add; // reserves space
+ for (i = 0; i < add; ++i) {
+ this[pos+i] = insert[i];
+ }
+ }
+ }
+ return removed;
+ };
+ }
+}
+if (!Array.isArray) {
+ Array.isArray = function isArray(obj) {
+ return _toString(obj) == "[object Array]";
+ };
+}
+var boxedString = Object("a"),
+ splitString = boxedString[0] != "a" || !(0 in boxedString);
+
+if (!Array.prototype.forEach) {
+ Array.prototype.forEach = function forEach(fun /*, thisp*/) {
+ var object = toObject(this),
+ self = splitString && _toString(this) == "[object String]" ?
+ this.split("") :
+ object,
+ thisp = arguments[1],
+ i = -1,
+ length = self.length >>> 0;
+ if (_toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
+
+ while (++i < length) {
+ if (i in self) {
+ fun.call(thisp, self[i], i, object);
+ }
+ }
+ };
+}
+if (!Array.prototype.map) {
+ Array.prototype.map = function map(fun /*, thisp*/) {
+ var object = toObject(this),
+ self = splitString && _toString(this) == "[object String]" ?
+ this.split("") :
+ object,
+ length = self.length >>> 0,
+ result = Array(length),
+ thisp = arguments[1];
+ if (_toString(fun) != "[object Function]") {
+ throw new TypeError(fun + " is not a function");
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self)
+ result[i] = fun.call(thisp, self[i], i, object);
+ }
+ return result;
+ };
+}
+if (!Array.prototype.filter) {
+ Array.prototype.filter = function filter(fun /*, thisp */) {
+ var object = toObject(this),
+ self = splitString && _toString(this) == "[object String]" ?
+ this.split("") :
+ object,
+ length = self.length >>> 0,
+ result = [],
+ value,
+ thisp = arguments[1];
+ if (_toString(fun) != "[object Function]") {
+ throw new TypeError(fun + " is not a function");
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self) {
+ value = self[i];
+ if (fun.call(thisp, value, i, object)) {
+ result.push(value);
+ }
+ }
+ }
+ return result;
+ };
+}
+if (!Array.prototype.every) {
+ Array.prototype.every = function every(fun /*, thisp */) {
+ var object = toObject(this),
+ self = splitString && _toString(this) == "[object String]" ?
+ this.split("") :
+ object,
+ length = self.length >>> 0,
+ thisp = arguments[1];
+ if (_toString(fun) != "[object Function]") {
+ throw new TypeError(fun + " is not a function");
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self && !fun.call(thisp, self[i], i, object)) {
+ return false;
+ }
+ }
+ return true;
+ };
+}
+if (!Array.prototype.some) {
+ Array.prototype.some = function some(fun /*, thisp */) {
+ var object = toObject(this),
+ self = splitString && _toString(this) == "[object String]" ?
+ this.split("") :
+ object,
+ length = self.length >>> 0,
+ thisp = arguments[1];
+ if (_toString(fun) != "[object Function]") {
+ throw new TypeError(fun + " is not a function");
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self && fun.call(thisp, self[i], i, object)) {
+ return true;
+ }
+ }
+ return false;
+ };
+}
+if (!Array.prototype.reduce) {
+ Array.prototype.reduce = function reduce(fun /*, initial*/) {
+ var object = toObject(this),
+ self = splitString && _toString(this) == "[object String]" ?
+ this.split("") :
+ object,
+ length = self.length >>> 0;
+ if (_toString(fun) != "[object Function]") {
+ throw new TypeError(fun + " is not a function");
+ }
+ if (!length && arguments.length == 1) {
+ throw new TypeError("reduce of empty array with no initial value");
+ }
+
+ var i = 0;
+ var result;
+ if (arguments.length >= 2) {
+ result = arguments[1];
+ } else {
+ do {
+ if (i in self) {
+ result = self[i++];
+ break;
+ }
+ if (++i >= length) {
+ throw new TypeError("reduce of empty array with no initial value");
+ }
+ } while (true);
+ }
+
+ for (; i < length; i++) {
+ if (i in self) {
+ result = fun.call(void 0, result, self[i], i, object);
+ }
+ }
+
+ return result;
+ };
+}
+if (!Array.prototype.reduceRight) {
+ Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {
+ var object = toObject(this),
+ self = splitString && _toString(this) == "[object String]" ?
+ this.split("") :
+ object,
+ length = self.length >>> 0;
+ if (_toString(fun) != "[object Function]") {
+ throw new TypeError(fun + " is not a function");
+ }
+ if (!length && arguments.length == 1) {
+ throw new TypeError("reduceRight of empty array with no initial value");
+ }
+
+ var result, i = length - 1;
+ if (arguments.length >= 2) {
+ result = arguments[1];
+ } else {
+ do {
+ if (i in self) {
+ result = self[i--];
+ break;
+ }
+ if (--i < 0) {
+ throw new TypeError("reduceRight of empty array with no initial value");
+ }
+ } while (true);
+ }
+
+ do {
+ if (i in this) {
+ result = fun.call(void 0, result, self[i], i, object);
+ }
+ } while (i--);
+
+ return result;
+ };
+}
+if (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {
+ Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {
+ var self = splitString && _toString(this) == "[object String]" ?
+ this.split("") :
+ toObject(this),
+ length = self.length >>> 0;
+
+ if (!length) {
+ return -1;
+ }
+
+ var i = 0;
+ if (arguments.length > 1) {
+ i = toInteger(arguments[1]);
+ }
+ i = i >= 0 ? i : Math.max(0, length + i);
+ for (; i < length; i++) {
+ if (i in self && self[i] === sought) {
+ return i;
+ }
+ }
+ return -1;
+ };
+}
+if (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {
+ Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {
+ var self = splitString && _toString(this) == "[object String]" ?
+ this.split("") :
+ toObject(this),
+ length = self.length >>> 0;
+
+ if (!length) {
+ return -1;
+ }
+ var i = length - 1;
+ if (arguments.length > 1) {
+ i = Math.min(i, toInteger(arguments[1]));
+ }
+ i = i >= 0 ? i : length - Math.abs(i);
+ for (; i >= 0; i--) {
+ if (i in self && sought === self[i]) {
+ return i;
+ }
+ }
+ return -1;
+ };
+}
+if (!Object.getPrototypeOf) {
+ Object.getPrototypeOf = function getPrototypeOf(object) {
+ return object.__proto__ || (
+ object.constructor ?
+ object.constructor.prototype :
+ prototypeOfObject
+ );
+ };
+}
+if (!Object.getOwnPropertyDescriptor) {
+ var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " +
+ "non-object: ";
+ Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {
+ if ((typeof object != "object" && typeof object != "function") || object === null)
+ throw new TypeError(ERR_NON_OBJECT + object);
+ if (!owns(object, property))
+ return;
+
+ var descriptor, getter, setter;
+ descriptor = { enumerable: true, configurable: true };
+ if (supportsAccessors) {
+ var prototype = object.__proto__;
+ object.__proto__ = prototypeOfObject;
+
+ var getter = lookupGetter(object, property);
+ var setter = lookupSetter(object, property);
+ object.__proto__ = prototype;
+
+ if (getter || setter) {
+ if (getter) descriptor.get = getter;
+ if (setter) descriptor.set = setter;
+ return descriptor;
+ }
+ }
+ descriptor.value = object[property];
+ return descriptor;
+ };
+}
+if (!Object.getOwnPropertyNames) {
+ Object.getOwnPropertyNames = function getOwnPropertyNames(object) {
+ return Object.keys(object);
+ };
+}
+if (!Object.create) {
+ var createEmpty;
+ if (Object.prototype.__proto__ === null) {
+ createEmpty = function () {
+ return { "__proto__": null };
+ };
+ } else {
+ createEmpty = function () {
+ var empty = {};
+ for (var i in empty)
+ empty[i] = null;
+ empty.constructor =
+ empty.hasOwnProperty =
+ empty.propertyIsEnumerable =
+ empty.isPrototypeOf =
+ empty.toLocaleString =
+ empty.toString =
+ empty.valueOf =
+ empty.__proto__ = null;
+ return empty;
+ }
+ }
+
+ Object.create = function create(prototype, properties) {
+ var object;
+ if (prototype === null) {
+ object = createEmpty();
+ } else {
+ if (typeof prototype != "object")
+ throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'");
+ var Type = function () {};
+ Type.prototype = prototype;
+ object = new Type();
+ object.__proto__ = prototype;
+ }
+ if (properties !== void 0)
+ Object.defineProperties(object, properties);
+ return object;
+ };
+}
+
+function doesDefinePropertyWork(object) {
+ try {
+ Object.defineProperty(object, "sentinel", {});
+ return "sentinel" in object;
+ } catch (exception) {
+ }
+}
+if (Object.defineProperty) {
+ var definePropertyWorksOnObject = doesDefinePropertyWork({});
+ var definePropertyWorksOnDom = typeof document == "undefined" ||
+ doesDefinePropertyWork(document.createElement("div"));
+ if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {
+ var definePropertyFallback = Object.defineProperty;
+ }
+}
+
+if (!Object.defineProperty || definePropertyFallback) {
+ var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: ";
+ var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: "
+ var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " +
+ "on this javascript engine";
+
+ Object.defineProperty = function defineProperty(object, property, descriptor) {
+ if ((typeof object != "object" && typeof object != "function") || object === null)
+ throw new TypeError(ERR_NON_OBJECT_TARGET + object);
+ if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null)
+ throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);
+ if (definePropertyFallback) {
+ try {
+ return definePropertyFallback.call(Object, object, property, descriptor);
+ } catch (exception) {
+ }
+ }
+ if (owns(descriptor, "value")) {
+
+ if (supportsAccessors && (lookupGetter(object, property) ||
+ lookupSetter(object, property)))
+ {
+ var prototype = object.__proto__;
+ object.__proto__ = prototypeOfObject;
+ delete object[property];
+ object[property] = descriptor.value;
+ object.__proto__ = prototype;
+ } else {
+ object[property] = descriptor.value;
+ }
+ } else {
+ if (!supportsAccessors)
+ throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);
+ if (owns(descriptor, "get"))
+ defineGetter(object, property, descriptor.get);
+ if (owns(descriptor, "set"))
+ defineSetter(object, property, descriptor.set);
+ }
+
+ return object;
+ };
+}
+if (!Object.defineProperties) {
+ Object.defineProperties = function defineProperties(object, properties) {
+ for (var property in properties) {
+ if (owns(properties, property))
+ Object.defineProperty(object, property, properties[property]);
+ }
+ return object;
+ };
+}
+if (!Object.seal) {
+ Object.seal = function seal(object) {
+ return object;
+ };
+}
+if (!Object.freeze) {
+ Object.freeze = function freeze(object) {
+ return object;
+ };
+}
+try {
+ Object.freeze(function () {});
+} catch (exception) {
+ Object.freeze = (function freeze(freezeObject) {
+ return function freeze(object) {
+ if (typeof object == "function") {
+ return object;
+ } else {
+ return freezeObject(object);
+ }
+ };
+ })(Object.freeze);
+}
+if (!Object.preventExtensions) {
+ Object.preventExtensions = function preventExtensions(object) {
+ return object;
+ };
+}
+if (!Object.isSealed) {
+ Object.isSealed = function isSealed(object) {
+ return false;
+ };
+}
+if (!Object.isFrozen) {
+ Object.isFrozen = function isFrozen(object) {
+ return false;
+ };
+}
+if (!Object.isExtensible) {
+ Object.isExtensible = function isExtensible(object) {
+ if (Object(object) === object) {
+ throw new TypeError(); // TODO message
+ }
+ var name = '';
+ while (owns(object, name)) {
+ name += '?';
+ }
+ object[name] = true;
+ var returnValue = owns(object, name);
+ delete object[name];
+ return returnValue;
+ };
+}
+if (!Object.keys) {
+ var hasDontEnumBug = true,
+ dontEnums = [
+ "toString",
+ "toLocaleString",
+ "valueOf",
+ "hasOwnProperty",
+ "isPrototypeOf",
+ "propertyIsEnumerable",
+ "constructor"
+ ],
+ dontEnumsLength = dontEnums.length;
+
+ for (var key in {"toString": null}) {
+ hasDontEnumBug = false;
+ }
+
+ Object.keys = function keys(object) {
+
+ if (
+ (typeof object != "object" && typeof object != "function") ||
+ object === null
+ ) {
+ throw new TypeError("Object.keys called on a non-object");
+ }
+
+ var keys = [];
+ for (var name in object) {
+ if (owns(object, name)) {
+ keys.push(name);
+ }
+ }
+
+ if (hasDontEnumBug) {
+ for (var i = 0, ii = dontEnumsLength; i < ii; i++) {
+ var dontEnum = dontEnums[i];
+ if (owns(object, dontEnum)) {
+ keys.push(dontEnum);
+ }
+ }
+ }
+ return keys;
+ };
+
+}
+if (!Date.now) {
+ Date.now = function now() {
+ return new Date().getTime();
+ };
+}
+var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" +
+ "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" +
+ "\u2029\uFEFF";
+if (!String.prototype.trim || ws.trim()) {
+ ws = "[" + ws + "]";
+ var trimBeginRegexp = new RegExp("^" + ws + ws + "*"),
+ trimEndRegexp = new RegExp(ws + ws + "*$");
+ String.prototype.trim = function trim() {
+ return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, "");
+ };
+}
+
+function toInteger(n) {
+ n = +n;
+ if (n !== n) { // isNaN
+ n = 0;
+ } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {
+ n = (n > 0 || -1) * Math.floor(Math.abs(n));
+ }
+ return n;
+}
+
+function isPrimitive(input) {
+ var type = typeof input;
+ return (
+ input === null ||
+ type === "undefined" ||
+ type === "boolean" ||
+ type === "number" ||
+ type === "string"
+ );
+}
+
+function toPrimitive(input) {
+ var val, valueOf, toString;
+ if (isPrimitive(input)) {
+ return input;
+ }
+ valueOf = input.valueOf;
+ if (typeof valueOf === "function") {
+ val = valueOf.call(input);
+ if (isPrimitive(val)) {
+ return val;
+ }
+ }
+ toString = input.toString;
+ if (typeof toString === "function") {
+ val = toString.call(input);
+ if (isPrimitive(val)) {
+ return val;
+ }
+ }
+ throw new TypeError();
+}
+var toObject = function (o) {
+ if (o == null) { // this matches both null and undefined
+ throw new TypeError("can't convert "+o+" to object");
+ }
+ return Object(o);
+};
+
+});
+
+define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"], function(require, exports, module) {
+"use strict";
+
+require("./regexp");
+require("./es5-shim");
+
+});
+
+define("ace/lib/dom",["require","exports","module"], function(require, exports, module) {
+"use strict";
+
+var XHTML_NS = "http://www.w3.org/1999/xhtml";
+
+exports.getDocumentHead = function(doc) {
+ if (!doc)
+ doc = document;
+ return doc.head || doc.getElementsByTagName("head")[0] || doc.documentElement;
+};
+
+exports.createElement = function(tag, ns) {
+ return document.createElementNS ?
+ document.createElementNS(ns || XHTML_NS, tag) :
+ document.createElement(tag);
+};
+
+exports.hasCssClass = function(el, name) {
+ var classes = (el.className || "").split(/\s+/g);
+ return classes.indexOf(name) !== -1;
+};
+exports.addCssClass = function(el, name) {
+ if (!exports.hasCssClass(el, name)) {
+ el.className += " " + name;
+ }
+};
+exports.removeCssClass = function(el, name) {
+ var classes = el.className.split(/\s+/g);
+ while (true) {
+ var index = classes.indexOf(name);
+ if (index == -1) {
+ break;
+ }
+ classes.splice(index, 1);
+ }
+ el.className = classes.join(" ");
+};
+
+exports.toggleCssClass = function(el, name) {
+ var classes = el.className.split(/\s+/g), add = true;
+ while (true) {
+ var index = classes.indexOf(name);
+ if (index == -1) {
+ break;
+ }
+ add = false;
+ classes.splice(index, 1);
+ }
+ if (add)
+ classes.push(name);
+
+ el.className = classes.join(" ");
+ return add;
+};
+exports.setCssClass = function(node, className, include) {
+ if (include) {
+ exports.addCssClass(node, className);
+ } else {
+ exports.removeCssClass(node, className);
+ }
+};
+
+exports.hasCssString = function(id, doc) {
+ var index = 0, sheets;
+ doc = doc || document;
+
+ if (doc.createStyleSheet && (sheets = doc.styleSheets)) {
+ while (index < sheets.length)
+ if (sheets[index++].owningElement.id === id) return true;
+ } else if ((sheets = doc.getElementsByTagName("style"))) {
+ while (index < sheets.length)
+ if (sheets[index++].id === id) return true;
+ }
+
+ return false;
+};
+
+exports.importCssString = function importCssString(cssText, id, doc) {
+ doc = doc || document;
+ if (id && exports.hasCssString(id, doc))
+ return null;
+
+ var style;
+
+ if (id)
+ cssText += "\n/*# sourceURL=ace/css/" + id + " */";
+
+ if (doc.createStyleSheet) {
+ style = doc.createStyleSheet();
+ style.cssText = cssText;
+ if (id)
+ style.owningElement.id = id;
+ } else {
+ style = exports.createElement("style");
+ style.appendChild(doc.createTextNode(cssText));
+ if (id)
+ style.id = id;
+
+ exports.getDocumentHead(doc).appendChild(style);
+ }
+};
+
+exports.importCssStylsheet = function(uri, doc) {
+ if (doc.createStyleSheet) {
+ doc.createStyleSheet(uri);
+ } else {
+ var link = exports.createElement('link');
+ link.rel = 'stylesheet';
+ link.href = uri;
+
+ exports.getDocumentHead(doc).appendChild(link);
+ }
+};
+
+exports.getInnerWidth = function(element) {
+ return (
+ parseInt(exports.computedStyle(element, "paddingLeft"), 10) +
+ parseInt(exports.computedStyle(element, "paddingRight"), 10) +
+ element.clientWidth
+ );
+};
+
+exports.getInnerHeight = function(element) {
+ return (
+ parseInt(exports.computedStyle(element, "paddingTop"), 10) +
+ parseInt(exports.computedStyle(element, "paddingBottom"), 10) +
+ element.clientHeight
+ );
+};
+
+exports.scrollbarWidth = function(document) {
+ var inner = exports.createElement("ace_inner");
+ inner.style.width = "100%";
+ inner.style.minWidth = "0px";
+ inner.style.height = "200px";
+ inner.style.display = "block";
+
+ var outer = exports.createElement("ace_outer");
+ var style = outer.style;
+
+ style.position = "absolute";
+ style.left = "-10000px";
+ style.overflow = "hidden";
+ style.width = "200px";
+ style.minWidth = "0px";
+ style.height = "150px";
+ style.display = "block";
+
+ outer.appendChild(inner);
+
+ var body = document.documentElement;
+ body.appendChild(outer);
+
+ var noScrollbar = inner.offsetWidth;
+
+ style.overflow = "scroll";
+ var withScrollbar = inner.offsetWidth;
+
+ if (noScrollbar == withScrollbar) {
+ withScrollbar = outer.clientWidth;
+ }
+
+ body.removeChild(outer);
+
+ return noScrollbar-withScrollbar;
+};
+
+if (typeof document == "undefined") {
+ exports.importCssString = function() {};
+ return;
+}
+
+if (window.pageYOffset !== undefined) {
+ exports.getPageScrollTop = function() {
+ return window.pageYOffset;
+ };
+
+ exports.getPageScrollLeft = function() {
+ return window.pageXOffset;
+ };
+}
+else {
+ exports.getPageScrollTop = function() {
+ return document.body.scrollTop;
+ };
+
+ exports.getPageScrollLeft = function() {
+ return document.body.scrollLeft;
+ };
+}
+
+if (window.getComputedStyle)
+ exports.computedStyle = function(element, style) {
+ if (style)
+ return (window.getComputedStyle(element, "") || {})[style] || "";
+ return window.getComputedStyle(element, "") || {};
+ };
+else
+ exports.computedStyle = function(element, style) {
+ if (style)
+ return element.currentStyle[style];
+ return element.currentStyle;
+ };
+exports.setInnerHtml = function(el, innerHtml) {
+ var element = el.cloneNode(false);//document.createElement("div");
+ element.innerHTML = innerHtml;
+ el.parentNode.replaceChild(element, el);
+ return element;
+};
+
+if ("textContent" in document.documentElement) {
+ exports.setInnerText = function(el, innerText) {
+ el.textContent = innerText;
+ };
+
+ exports.getInnerText = function(el) {
+ return el.textContent;
+ };
+}
+else {
+ exports.setInnerText = function(el, innerText) {
+ el.innerText = innerText;
+ };
+
+ exports.getInnerText = function(el) {
+ return el.innerText;
+ };
+}
+
+exports.getParentWindow = function(document) {
+ return document.defaultView || document.parentWindow;
+};
+
+});
+
+define("ace/lib/oop",["require","exports","module"], function(require, exports, module) {
+"use strict";
+
+exports.inherits = function(ctor, superCtor) {
+ ctor.super_ = superCtor;
+ ctor.prototype = Object.create(superCtor.prototype, {
+ constructor: {
+ value: ctor,
+ enumerable: false,
+ writable: true,
+ configurable: true
+ }
+ });
+};
+
+exports.mixin = function(obj, mixin) {
+ for (var key in mixin) {
+ obj[key] = mixin[key];
+ }
+ return obj;
+};
+
+exports.implement = function(proto, mixin) {
+ exports.mixin(proto, mixin);
+};
+
+});
+
+define("ace/lib/keys",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/oop"], function(require, exports, module) {
+"use strict";
+
+require("./fixoldbrowsers");
+
+var oop = require("./oop");
+var Keys = (function() {
+ var ret = {
+ MODIFIER_KEYS: {
+ 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta'
+ },
+
+ KEY_MODS: {
+ "ctrl": 1, "alt": 2, "option" : 2, "shift": 4,
+ "super": 8, "meta": 8, "command": 8, "cmd": 8
+ },
+
+ FUNCTION_KEYS : {
+ 8 : "Backspace",
+ 9 : "Tab",
+ 13 : "Return",
+ 19 : "Pause",
+ 27 : "Esc",
+ 32 : "Space",
+ 33 : "PageUp",
+ 34 : "PageDown",
+ 35 : "End",
+ 36 : "Home",
+ 37 : "Left",
+ 38 : "Up",
+ 39 : "Right",
+ 40 : "Down",
+ 44 : "Print",
+ 45 : "Insert",
+ 46 : "Delete",
+ 96 : "Numpad0",
+ 97 : "Numpad1",
+ 98 : "Numpad2",
+ 99 : "Numpad3",
+ 100: "Numpad4",
+ 101: "Numpad5",
+ 102: "Numpad6",
+ 103: "Numpad7",
+ 104: "Numpad8",
+ 105: "Numpad9",
+ '-13': "NumpadEnter",
+ 112: "F1",
+ 113: "F2",
+ 114: "F3",
+ 115: "F4",
+ 116: "F5",
+ 117: "F6",
+ 118: "F7",
+ 119: "F8",
+ 120: "F9",
+ 121: "F10",
+ 122: "F11",
+ 123: "F12",
+ 144: "Numlock",
+ 145: "Scrolllock"
+ },
+
+ PRINTABLE_KEYS: {
+ 32: ' ', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5',
+ 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a',
+ 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h',
+ 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o',
+ 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v',
+ 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.',
+ 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',
+ 219: '[', 220: '\\',221: ']', 222: "'", 111: '/', 106: '*'
+ }
+ };
+ var name, i;
+ for (i in ret.FUNCTION_KEYS) {
+ name = ret.FUNCTION_KEYS[i].toLowerCase();
+ ret[name] = parseInt(i, 10);
+ }
+ for (i in ret.PRINTABLE_KEYS) {
+ name = ret.PRINTABLE_KEYS[i].toLowerCase();
+ ret[name] = parseInt(i, 10);
+ }
+ oop.mixin(ret, ret.MODIFIER_KEYS);
+ oop.mixin(ret, ret.PRINTABLE_KEYS);
+ oop.mixin(ret, ret.FUNCTION_KEYS);
+ ret.enter = ret["return"];
+ ret.escape = ret.esc;
+ ret.del = ret["delete"];
+ ret[173] = '-';
+
+ (function() {
+ var mods = ["cmd", "ctrl", "alt", "shift"];
+ for (var i = Math.pow(2, mods.length); i--;) {
+ ret.KEY_MODS[i] = mods.filter(function(x) {
+ return i & ret.KEY_MODS[x];
+ }).join("-") + "-";
+ }
+ })();
+
+ ret.KEY_MODS[0] = "";
+ ret.KEY_MODS[-1] = "input-";
+
+ return ret;
+})();
+oop.mixin(exports, Keys);
+
+exports.keyCodeToString = function(keyCode) {
+ var keyString = Keys[keyCode];
+ if (typeof keyString != "string")
+ keyString = String.fromCharCode(keyCode);
+ return keyString.toLowerCase();
+};
+
+});
+
+define("ace/lib/useragent",["require","exports","module"], function(require, exports, module) {
+"use strict";
+exports.OS = {
+ LINUX: "LINUX",
+ MAC: "MAC",
+ WINDOWS: "WINDOWS"
+};
+exports.getOS = function() {
+ if (exports.isMac) {
+ return exports.OS.MAC;
+ } else if (exports.isLinux) {
+ return exports.OS.LINUX;
+ } else {
+ return exports.OS.WINDOWS;
+ }
+};
+if (typeof navigator != "object")
+ return;
+
+var os = (navigator.platform.match(/mac|win|linux/i) || ["other"])[0].toLowerCase();
+var ua = navigator.userAgent;
+exports.isWin = (os == "win");
+exports.isMac = (os == "mac");
+exports.isLinux = (os == "linux");
+exports.isIE =
+ (navigator.appName == "Microsoft Internet Explorer" || navigator.appName.indexOf("MSAppHost") >= 0)
+ ? parseFloat((ua.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1])
+ : parseFloat((ua.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]); // for ie
+
+exports.isOldIE = exports.isIE && exports.isIE < 9;
+exports.isGecko = exports.isMozilla = (window.Controllers || window.controllers) && window.navigator.product === "Gecko";
+exports.isOldGecko = exports.isGecko && parseInt((ua.match(/rv\:(\d+)/)||[])[1], 10) < 4;
+exports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == "[object Opera]";
+exports.isWebKit = parseFloat(ua.split("WebKit/")[1]) || undefined;
+
+exports.isChrome = parseFloat(ua.split(" Chrome/")[1]) || undefined;
+
+exports.isAIR = ua.indexOf("AdobeAIR") >= 0;
+
+exports.isIPad = ua.indexOf("iPad") >= 0;
+
+exports.isTouchPad = ua.indexOf("TouchPad") >= 0;
+
+exports.isChromeOS = ua.indexOf(" CrOS ") >= 0;
+
+});
+
+define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"], function(require, exports, module) {
+"use strict";
+
+var keys = require("./keys");
+var useragent = require("./useragent");
+
+var pressedKeys = null;
+var ts = 0;
+
+exports.addListener = function(elem, type, callback) {
+ if (elem.addEventListener) {
+ return elem.addEventListener(type, callback, false);
+ }
+ if (elem.attachEvent) {
+ var wrapper = function() {
+ callback.call(elem, window.event);
+ };
+ callback._wrapper = wrapper;
+ elem.attachEvent("on" + type, wrapper);
+ }
+};
+
+exports.removeListener = function(elem, type, callback) {
+ if (elem.removeEventListener) {
+ return elem.removeEventListener(type, callback, false);
+ }
+ if (elem.detachEvent) {
+ elem.detachEvent("on" + type, callback._wrapper || callback);
+ }
+};
+exports.stopEvent = function(e) {
+ exports.stopPropagation(e);
+ exports.preventDefault(e);
+ return false;
+};
+
+exports.stopPropagation = function(e) {
+ if (e.stopPropagation)
+ e.stopPropagation();
+ else
+ e.cancelBubble = true;
+};
+
+exports.preventDefault = function(e) {
+ if (e.preventDefault)
+ e.preventDefault();
+ else
+ e.returnValue = false;
+};
+exports.getButton = function(e) {
+ if (e.type == "dblclick")
+ return 0;
+ if (e.type == "contextmenu" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))
+ return 2;
+ if (e.preventDefault) {
+ return e.button;
+ }
+ else {
+ return {1:0, 2:2, 4:1}[e.button];
+ }
+};
+
+exports.capture = function(el, eventHandler, releaseCaptureHandler) {
+ function onMouseUp(e) {
+ eventHandler && eventHandler(e);
+ releaseCaptureHandler && releaseCaptureHandler(e);
+
+ exports.removeListener(document, "mousemove", eventHandler, true);
+ exports.removeListener(document, "mouseup", onMouseUp, true);
+ exports.removeListener(document, "dragstart", onMouseUp, true);
+ }
+
+ exports.addListener(document, "mousemove", eventHandler, true);
+ exports.addListener(document, "mouseup", onMouseUp, true);
+ exports.addListener(document, "dragstart", onMouseUp, true);
+
+ return onMouseUp;
+};
+
+exports.addTouchMoveListener = function (el, callback) {
+ if ("ontouchmove" in el) {
+ var startx, starty;
+ exports.addListener(el, "touchstart", function (e) {
+ var touchObj = e.changedTouches[0];
+ startx = touchObj.clientX;
+ starty = touchObj.clientY;
+ });
+ exports.addListener(el, "touchmove", function (e) {
+ var factor = 1,
+ touchObj = e.changedTouches[0];
+
+ e.wheelX = -(touchObj.clientX - startx) / factor;
+ e.wheelY = -(touchObj.clientY - starty) / factor;
+
+ startx = touchObj.clientX;
+ starty = touchObj.clientY;
+
+ callback(e);
+ });
+ }
+};
+
+exports.addMouseWheelListener = function(el, callback) {
+ if ("onmousewheel" in el) {
+ exports.addListener(el, "mousewheel", function(e) {
+ var factor = 8;
+ if (e.wheelDeltaX !== undefined) {
+ e.wheelX = -e.wheelDeltaX / factor;
+ e.wheelY = -e.wheelDeltaY / factor;
+ } else {
+ e.wheelX = 0;
+ e.wheelY = -e.wheelDelta / factor;
+ }
+ callback(e);
+ });
+ } else if ("onwheel" in el) {
+ exports.addListener(el, "wheel", function(e) {
+ var factor = 0.35;
+ switch (e.deltaMode) {
+ case e.DOM_DELTA_PIXEL:
+ e.wheelX = e.deltaX * factor || 0;
+ e.wheelY = e.deltaY * factor || 0;
+ break;
+ case e.DOM_DELTA_LINE:
+ case e.DOM_DELTA_PAGE:
+ e.wheelX = (e.deltaX || 0) * 5;
+ e.wheelY = (e.deltaY || 0) * 5;
+ break;
+ }
+
+ callback(e);
+ });
+ } else {
+ exports.addListener(el, "DOMMouseScroll", function(e) {
+ if (e.axis && e.axis == e.HORIZONTAL_AXIS) {
+ e.wheelX = (e.detail || 0) * 5;
+ e.wheelY = 0;
+ } else {
+ e.wheelX = 0;
+ e.wheelY = (e.detail || 0) * 5;
+ }
+ callback(e);
+ });
+ }
+};
+
+exports.addMultiMouseDownListener = function(el, timeouts, eventHandler, callbackName) {
+ var clicks = 0;
+ var startX, startY, timer;
+ var eventNames = {
+ 2: "dblclick",
+ 3: "tripleclick",
+ 4: "quadclick"
+ };
+
+ exports.addListener(el, "mousedown", function(e) {
+ if (exports.getButton(e) !== 0) {
+ clicks = 0;
+ } else if (e.detail > 1) {
+ clicks++;
+ if (clicks > 4)
+ clicks = 1;
+ } else {
+ clicks = 1;
+ }
+ if (useragent.isIE) {
+ var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;
+ if (!timer || isNewClick)
+ clicks = 1;
+ if (timer)
+ clearTimeout(timer);
+ timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600);
+
+ if (clicks == 1) {
+ startX = e.clientX;
+ startY = e.clientY;
+ }
+ }
+
+ e._clicks = clicks;
+
+ eventHandler[callbackName]("mousedown", e);
+
+ if (clicks > 4)
+ clicks = 0;
+ else if (clicks > 1)
+ return eventHandler[callbackName](eventNames[clicks], e);
+ });
+
+ if (useragent.isOldIE) {
+ exports.addListener(el, "dblclick", function(e) {
+ clicks = 2;
+ if (timer)
+ clearTimeout(timer);
+ timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600);
+ eventHandler[callbackName]("mousedown", e);
+ eventHandler[callbackName](eventNames[clicks], e);
+ });
+ }
+};
+
+var getModifierHash = useragent.isMac && useragent.isOpera && !("KeyboardEvent" in window)
+ ? function(e) {
+ return 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0);
+ }
+ : function(e) {
+ return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);
+ };
+
+exports.getModifierString = function(e) {
+ return keys.KEY_MODS[getModifierHash(e)];
+};
+
+function normalizeCommandKeys(callback, e, keyCode) {
+ var hashId = getModifierHash(e);
+
+ if (!useragent.isMac && pressedKeys) {
+ if (pressedKeys.OSKey)
+ hashId |= 8;
+ if (pressedKeys.altGr) {
+ if ((3 & hashId) != 3)
+ pressedKeys.altGr = 0;
+ else
+ return;
+ }
+ if (keyCode === 18 || keyCode === 17) {
+ var location = "location" in e ? e.location : e.keyLocation;
+ if (keyCode === 17 && location === 1) {
+ if (pressedKeys[keyCode] == 1)
+ ts = e.timeStamp;
+ } else if (keyCode === 18 && hashId === 3 && location === 2) {
+ var dt = e.timeStamp - ts;
+ if (dt < 50)
+ pressedKeys.altGr = true;
+ }
+ }
+ }
+
+ if (keyCode in keys.MODIFIER_KEYS) {
+ keyCode = -1;
+ }
+ if (hashId & 8 && (keyCode >= 91 && keyCode <= 93)) {
+ keyCode = -1;
+ }
+
+ if (!hashId && keyCode === 13) {
+ var location = "location" in e ? e.location : e.keyLocation;
+ if (location === 3) {
+ callback(e, hashId, -keyCode);
+ if (e.defaultPrevented)
+ return;
+ }
+ }
+
+ if (useragent.isChromeOS && hashId & 8) {
+ callback(e, hashId, keyCode);
+ if (e.defaultPrevented)
+ return;
+ else
+ hashId &= ~8;
+ }
+ if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {
+ return false;
+ }
+
+ return callback(e, hashId, keyCode);
+}
+
+
+exports.addCommandKeyListener = function(el, callback) {
+ var addListener = exports.addListener;
+ if (useragent.isOldGecko || (useragent.isOpera && !("KeyboardEvent" in window))) {
+ var lastKeyDownKeyCode = null;
+ addListener(el, "keydown", function(e) {
+ lastKeyDownKeyCode = e.keyCode;
+ });
+ addListener(el, "keypress", function(e) {
+ return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);
+ });
+ } else {
+ var lastDefaultPrevented = null;
+
+ addListener(el, "keydown", function(e) {
+ var keyCode = e.keyCode;
+ pressedKeys[keyCode] = (pressedKeys[keyCode] || 0) + 1;
+ if (keyCode == 91 || keyCode == 92) {
+ pressedKeys.OSKey = true;
+ } else if (pressedKeys.OSKey) {
+ if (e.timeStamp - pressedKeys.lastT > 200 && pressedKeys.count == 1)
+ resetPressedKeys();
+ }
+ if (pressedKeys[keyCode] == 1)
+ pressedKeys.count++;
+ pressedKeys.lastT = e.timeStamp;
+ var result = normalizeCommandKeys(callback, e, keyCode);
+ lastDefaultPrevented = e.defaultPrevented;
+ return result;
+ });
+
+ addListener(el, "keypress", function(e) {
+ if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {
+ exports.stopEvent(e);
+ lastDefaultPrevented = null;
+ }
+ });
+
+ addListener(el, "keyup", function(e) {
+ var keyCode = e.keyCode;
+ if (!pressedKeys[keyCode]) {
+ resetPressedKeys();
+ } else {
+ pressedKeys.count = Math.max(pressedKeys.count - 1, 0);
+ }
+ if (keyCode == 91 || keyCode == 92) {
+ pressedKeys.OSKey = false;
+ }
+ pressedKeys[keyCode] = null;
+ });
+
+ if (!pressedKeys) {
+ resetPressedKeys();
+ addListener(window, "focus", resetPressedKeys);
+ }
+ }
+};
+function resetPressedKeys() {
+ pressedKeys = Object.create(null);
+ pressedKeys.count = 0;
+ pressedKeys.lastT = 0;
+}
+
+if (typeof window == "object" && window.postMessage && !useragent.isOldIE) {
+ var postMessageId = 1;
+ exports.nextTick = function(callback, win) {
+ win = win || window;
+ var messageName = "zero-timeout-message-" + postMessageId;
+ exports.addListener(win, "message", function listener(e) {
+ if (e.data == messageName) {
+ exports.stopPropagation(e);
+ exports.removeListener(win, "message", listener);
+ callback();
+ }
+ });
+ win.postMessage(messageName, "*");
+ };
+}
+
+
+exports.nextFrame = typeof window == "object" && (window.requestAnimationFrame
+ || window.mozRequestAnimationFrame
+ || window.webkitRequestAnimationFrame
+ || window.msRequestAnimationFrame
+ || window.oRequestAnimationFrame);
+
+if (exports.nextFrame)
+ exports.nextFrame = exports.nextFrame.bind(window);
+else
+ exports.nextFrame = function(callback) {
+ setTimeout(callback, 17);
+ };
+});
+
+define("ace/lib/lang",["require","exports","module"], function(require, exports, module) {
+"use strict";
+
+exports.last = function(a) {
+ return a[a.length - 1];
+};
+
+exports.stringReverse = function(string) {
+ return string.split("").reverse().join("");
+};
+
+exports.stringRepeat = function (string, count) {
+ var result = '';
+ while (count > 0) {
+ if (count & 1)
+ result += string;
+
+ if (count >>= 1)
+ string += string;
+ }
+ return result;
+};
+
+var trimBeginRegexp = /^\s\s*/;
+var trimEndRegexp = /\s\s*$/;
+
+exports.stringTrimLeft = function (string) {
+ return string.replace(trimBeginRegexp, '');
+};
+
+exports.stringTrimRight = function (string) {
+ return string.replace(trimEndRegexp, '');
+};
+
+exports.copyObject = function(obj) {
+ var copy = {};
+ for (var key in obj) {
+ copy[key] = obj[key];
+ }
+ return copy;
+};
+
+exports.copyArray = function(array){
+ var copy = [];
+ for (var i=0, l=array.length; i<l; i++) {
+ if (array[i] && typeof array[i] == "object")
+ copy[i] = this.copyObject( array[i] );
+ else
+ copy[i] = array[i];
+ }
+ return copy;
+};
+
+exports.deepCopy = function deepCopy(obj) {
+ if (typeof obj !== "object" || !obj)
+ return obj;
+ var copy;
+ if (Array.isArray(obj)) {
+ copy = [];
+ for (var key = 0; key < obj.length; key++) {
+ copy[key] = deepCopy(obj[key]);
+ }
+ return copy;
+ }
+ var cons = obj.constructor;
+ if (cons === RegExp)
+ return obj;
+
+ copy = cons();
+ for (var key in obj) {
+ copy[key] = deepCopy(obj[key]);
+ }
+ return copy;
+};
+
+exports.arrayToMap = function(arr) {
+ var map = {};
+ for (var i=0; i<arr.length; i++) {
+ map[arr[i]] = 1;
+ }
+ return map;
+
+};
+
+exports.createMap = function(props) {
+ var map = Object.create(null);
+ for (var i in props) {
+ map[i] = props[i];
+ }
+ return map;
+};
+exports.arrayRemove = function(array, value) {
+ for (var i = 0; i <= array.length; i++) {
+ if (value === array[i]) {
+ array.splice(i, 1);
+ }
+ }
+};
+
+exports.escapeRegExp = function(str) {
+ return str.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1');
+};
+
+exports.escapeHTML = function(str) {
+ return str.replace(/&/g, "&#38;").replace(/"/g, "&#34;").replace(/'/g, "&#39;").replace(/</g, "&#60;");
+};
+
+exports.getMatchOffsets = function(string, regExp) {
+ var matches = [];
+
+ string.replace(regExp, function(str) {
+ matches.push({
+ offset: arguments[arguments.length-2],
+ length: str.length
+ });
+ });
+
+ return matches;
+};
+exports.deferredCall = function(fcn) {
+ var timer = null;
+ var callback = function() {
+ timer = null;
+ fcn();
+ };
+
+ var deferred = function(timeout) {
+ deferred.cancel();
+ timer = setTimeout(callback, timeout || 0);
+ return deferred;
+ };
+
+ deferred.schedule = deferred;
+
+ deferred.call = function() {
+ this.cancel();
+ fcn();
+ return deferred;
+ };
+
+ deferred.cancel = function() {
+ clearTimeout(timer);
+ timer = null;
+ return deferred;
+ };
+
+ deferred.isPending = function() {
+ return timer;
+ };
+
+ return deferred;
+};
+
+
+exports.delayedCall = function(fcn, defaultTimeout) {
+ var timer = null;
+ var callback = function() {
+ timer = null;
+ fcn();
+ };
+
+ var _self = function(timeout) {
+ if (timer == null)
+ timer = setTimeout(callback, timeout || defaultTimeout);
+ };
+
+ _self.delay = function(timeout) {
+ timer && clearTimeout(timer);
+ timer = setTimeout(callback, timeout || defaultTimeout);
+ };
+ _self.schedule = _self;
+
+ _self.call = function() {
+ this.cancel();
+ fcn();
+ };
+
+ _self.cancel = function() {
+ timer && clearTimeout(timer);
+ timer = null;
+ };
+
+ _self.isPending = function() {
+ return timer;
+ };
+
+ return _self;
+};
+});
+
+define("ace/keyboard/textinput",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/lib/dom","ace/lib/lang"], function(require, exports, module) {
+"use strict";
+
+var event = require("../lib/event");
+var useragent = require("../lib/useragent");
+var dom = require("../lib/dom");
+var lang = require("../lib/lang");
+var BROKEN_SETDATA = useragent.isChrome < 18;
+var USE_IE_MIME_TYPE = useragent.isIE;
+
+var TextInput = function(parentNode, host) {
+ var text = dom.createElement("textarea");
+ text.className = "ace_text-input";
+
+ if (useragent.isTouchPad)
+ text.setAttribute("x-palm-disable-auto-cap", true);
+
+ text.setAttribute("wrap", "off");
+ text.setAttribute("autocorrect", "off");
+ text.setAttribute("autocapitalize", "off");
+ text.setAttribute("spellcheck", false);
+
+ text.style.opacity = "0";
+ if (useragent.isOldIE) text.style.top = "-1000px";
+ parentNode.insertBefore(text, parentNode.firstChild);
+
+ var PLACEHOLDER = "\x01\x01";
+
+ var copied = false;
+ var pasted = false;
+ var inComposition = false;
+ var tempStyle = '';
+ var isSelectionEmpty = true;
+ try { var isFocused = document.activeElement === text; } catch(e) {}
+
+ event.addListener(text, "blur", function(e) {
+ host.onBlur(e);
+ isFocused = false;
+ });
+ event.addListener(text, "focus", function(e) {
+ isFocused = true;
+ host.onFocus(e);
+ resetSelection();
+ });
+ this.focus = function() {
+ if (tempStyle) return text.focus();
+ var top = text.style.top;
+ text.style.position = "fixed";
+ text.style.top = "-1000px";
+ text.focus();
+ setTimeout(function() {
+ text.style.position = "";
+ if (text.style.top == "-1000px")
+ text.style.top = top;
+ }, 0);
+ };
+ this.blur = function() {
+ text.blur();
+ };
+ this.isFocused = function() {
+ return isFocused;
+ };
+ var syncSelection = lang.delayedCall(function() {
+ isFocused && resetSelection(isSelectionEmpty);
+ });
+ var syncValue = lang.delayedCall(function() {
+ if (!inComposition) {
+ text.value = PLACEHOLDER;
+ isFocused && resetSelection();
+ }
+ });
+
+ function resetSelection(isEmpty) {
+ if (inComposition)
+ return;
+ inComposition = true;
+
+ if (inputHandler) {
+ selectionStart = 0;
+ selectionEnd = isEmpty ? 0 : text.value.length - 1;
+ } else {
+ var selectionStart = isEmpty ? 2 : 1;
+ var selectionEnd = 2;
+ }
+ try {
+ text.setSelectionRange(selectionStart, selectionEnd);
+ } catch(e){}
+
+ inComposition = false;
+ }
+
+ function resetValue() {
+ if (inComposition)
+ return;
+ text.value = PLACEHOLDER;
+ if (useragent.isWebKit)
+ syncValue.schedule();
+ }
+
+ useragent.isWebKit || host.addEventListener('changeSelection', function() {
+ if (host.selection.isEmpty() != isSelectionEmpty) {
+ isSelectionEmpty = !isSelectionEmpty;
+ syncSelection.schedule();
+ }
+ });
+
+ resetValue();
+ if (isFocused)
+ host.onFocus();
+
+
+ var isAllSelected = function(text) {
+ return text.selectionStart === 0 && text.selectionEnd === text.value.length;
+ };
+ if (!text.setSelectionRange && text.createTextRange) {
+ text.setSelectionRange = function(selectionStart, selectionEnd) {
+ var range = this.createTextRange();
+ range.collapse(true);
+ range.moveStart('character', selectionStart);
+ range.moveEnd('character', selectionEnd);
+ range.select();
+ };
+ isAllSelected = function(text) {
+ try {
+ var range = text.ownerDocument.selection.createRange();
+ }catch(e) {}
+ if (!range || range.parentElement() != text) return false;
+ return range.text == text.value;
+ }
+ }
+ if (useragent.isOldIE) {
+ var inPropertyChange = false;
+ var onPropertyChange = function(e){
+ if (inPropertyChange)
+ return;
+ var data = text.value;
+ if (inComposition || !data || data == PLACEHOLDER)
+ return;
+ if (e && data == PLACEHOLDER[0])
+ return syncProperty.schedule();
+
+ sendText(data);
+ inPropertyChange = true;
+ resetValue();
+ inPropertyChange = false;
+ };
+ var syncProperty = lang.delayedCall(onPropertyChange);
+ event.addListener(text, "propertychange", onPropertyChange);
+
+ var keytable = { 13:1, 27:1 };
+ event.addListener(text, "keyup", function (e) {
+ if (inComposition && (!text.value || keytable[e.keyCode]))
+ setTimeout(onCompositionEnd, 0);
+ if ((text.value.charCodeAt(0)||0) < 129) {
+ return syncProperty.call();
+ }
+ inComposition ? onCompositionUpdate() : onCompositionStart();
+ });
+ event.addListener(text, "keydown", function (e) {
+ syncProperty.schedule(50);
+ });
+ }
+
+ var onSelect = function(e) {
+ if (copied) {
+ copied = false;
+ } else if (isAllSelected(text)) {
+ host.selectAll();
+ resetSelection();
+ } else if (inputHandler) {
+ resetSelection(host.selection.isEmpty());
+ }
+ };
+
+ var inputHandler = null;
+ this.setInputHandler = function(cb) {inputHandler = cb};
+ this.getInputHandler = function() {return inputHandler};
+ var afterContextMenu = false;
+
+ var sendText = function(data) {
+ if (inputHandler) {
+ data = inputHandler(data);
+ inputHandler = null;
+ }
+ if (pasted) {
+ resetSelection();
+ if (data)
+ host.onPaste(data);
+ pasted = false;
+ } else if (data == PLACEHOLDER.charAt(0)) {
+ if (afterContextMenu)
+ host.execCommand("del", {source: "ace"});
+ else // some versions of android do not fire keydown when pressing backspace
+ host.execCommand("backspace", {source: "ace"});
+ } else {
+ if (data.substring(0, 2) == PLACEHOLDER)
+ data = data.substr(2);
+ else if (data.charAt(0) == PLACEHOLDER.charAt(0))
+ data = data.substr(1);
+ else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))
+ data = data.slice(0, -1);
+ if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))
+ data = data.slice(0, -1);
+
+ if (data)
+ host.onTextInput(data);
+ }
+ if (afterContextMenu)
+ afterContextMenu = false;
+ };
+ var onInput = function(e) {
+ if (inComposition)
+ return;
+ var data = text.value;
+ sendText(data);
+ resetValue();
+ };
+
+ var handleClipboardData = function(e, data) {
+ var clipboardData = e.clipboardData || window.clipboardData;
+ if (!clipboardData || BROKEN_SETDATA)
+ return;
+ var mime = USE_IE_MIME_TYPE ? "Text" : "text/plain";
+ if (data) {
+ return clipboardData.setData(mime, data) !== false;
+ } else {
+ return clipboardData.getData(mime);
+ }
+ };
+
+ var doCopy = function(e, isCut) {
+ var data = host.getCopyText();
+ if (!data)
+ return event.preventDefault(e);
+
+ if (handleClipboardData(e, data)) {
+ isCut ? host.onCut() : host.onCopy();
+ event.preventDefault(e);
+ } else {
+ copied = true;
+ text.value = data;
+ text.select();
+ setTimeout(function(){
+ copied = false;
+ resetValue();
+ resetSelection();
+ isCut ? host.onCut() : host.onCopy();
+ });
+ }
+ };
+
+ var onCut = function(e) {
+ doCopy(e, true);
+ };
+
+ var onCopy = function(e) {
+ doCopy(e, false);
+ };
+
+ var onPaste = function(e) {
+ var data = handleClipboardData(e);
+ if (typeof data == "string") {
+ if (data)
+ host.onPaste(data, e);
+ if (useragent.isIE)
+ setTimeout(resetSelection);
+ event.preventDefault(e);
+ }
+ else {
+ text.value = "";
+ pasted = true;
+ }
+ };
+
+ event.addCommandKeyListener(text, host.onCommandKey.bind(host));
+
+ event.addListener(text, "select", onSelect);
+
+ event.addListener(text, "input", onInput);
+
+ event.addListener(text, "cut", onCut);
+ event.addListener(text, "copy", onCopy);
+ event.addListener(text, "paste", onPaste);
+ if (!('oncut' in text) || !('oncopy' in text) || !('onpaste' in text)){
+ event.addListener(parentNode, "keydown", function(e) {
+ if ((useragent.isMac && !e.metaKey) || !e.ctrlKey)
+ return;
+
+ switch (e.keyCode) {
+ case 67:
+ onCopy(e);
+ break;
+ case 86:
+ onPaste(e);
+ break;
+ case 88:
+ onCut(e);
+ break;
+ }
+ });
+ }
+ var onCompositionStart = function(e) {
+ if (inComposition || !host.onCompositionStart || host.$readOnly)
+ return;
+ inComposition = {};
+ host.onCompositionStart();
+ setTimeout(onCompositionUpdate, 0);
+ host.on("mousedown", onCompositionEnd);
+ if (!host.selection.isEmpty()) {
+ host.insert("");
+ host.session.markUndoGroup();
+ host.selection.clearSelection();
+ }
+ host.session.markUndoGroup();
+ };
+
+ var onCompositionUpdate = function() {
+ if (!inComposition || !host.onCompositionUpdate || host.$readOnly)
+ return;
+ var val = text.value.replace(/\x01/g, "");
+ if (inComposition.lastValue === val) return;
+
+ host.onCompositionUpdate(val);
+ if (inComposition.lastValue)
+ host.undo();
+ inComposition.lastValue = val;
+ if (inComposition.lastValue) {
+ var r = host.selection.getRange();
+ host.insert(inComposition.lastValue);
+ host.session.markUndoGroup();
+ inComposition.range = host.selection.getRange();
+ host.selection.setRange(r);
+ host.selection.clearSelection();
+ }
+ };
+
+ var onCompositionEnd = function(e) {
+ if (!host.onCompositionEnd || host.$readOnly) return;
+ var c = inComposition;
+ inComposition = false;
+ var timer = setTimeout(function() {
+ timer = null;
+ var str = text.value.replace(/\x01/g, "");
+ if (inComposition)
+ return;
+ else if (str == c.lastValue)
+ resetValue();
+ else if (!c.lastValue && str) {
+ resetValue();
+ sendText(str);
+ }
+ });
+ inputHandler = function compositionInputHandler(str) {
+ if (timer)
+ clearTimeout(timer);
+ str = str.replace(/\x01/g, "");
+ if (str == c.lastValue)
+ return "";
+ if (c.lastValue && timer)
+ host.undo();
+ return str;
+ };
+ host.onCompositionEnd();
+ host.removeListener("mousedown", onCompositionEnd);
+ if (e.type == "compositionend" && c.range) {
+ host.selection.setRange(c.range);
+ }
+ };
+
+
+
+ var syncComposition = lang.delayedCall(onCompositionUpdate, 50);
+
+ event.addListener(text, "compositionstart", onCompositionStart);
+ if (useragent.isGecko) {
+ event.addListener(text, "text", function(){syncComposition.schedule()});
+ } else {
+ event.addListener(text, "keyup", function(){syncComposition.schedule()});
+ event.addListener(text, "keydown", function(){syncComposition.schedule()});
+ }
+ event.addListener(text, "compositionend", onCompositionEnd);
+
+ this.getElement = function() {
+ return text;
+ };
+
+ this.setReadOnly = function(readOnly) {
+ text.readOnly = readOnly;
+ };
+
+ this.onContextMenu = function(e) {
+ afterContextMenu = true;
+ resetSelection(host.selection.isEmpty());
+ host._emit("nativecontextmenu", {target: host, domEvent: e});
+ this.moveToMouse(e, true);
+ };
+
+ this.moveToMouse = function(e, bringToFront) {
+ if (!bringToFront && useragent.isOldIE)
+ return;
+ if (!tempStyle)
+ tempStyle = text.style.cssText;
+ text.style.cssText = (bringToFront ? "z-index:100000;" : "")
+ + "height:" + text.style.height + ";"
+ + (useragent.isIE ? "opacity:0.1;" : "");
+
+ var rect = host.container.getBoundingClientRect();
+ var style = dom.computedStyle(host.container);
+ var top = rect.top + (parseInt(style.borderTopWidth) || 0);
+ var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);
+ var maxTop = rect.bottom - top - text.clientHeight -2;
+ var move = function(e) {
+ text.style.left = e.clientX - left - 2 + "px";
+ text.style.top = Math.min(e.clientY - top - 2, maxTop) + "px";
+ };
+ move(e);
+
+ if (e.type != "mousedown")
+ return;
+
+ if (host.renderer.$keepTextAreaAtCursor)
+ host.renderer.$keepTextAreaAtCursor = null;
+ if (useragent.isWin && !useragent.isOldIE)
+ event.capture(host.container, move, onContextMenuClose);
+ };
+
+ this.onContextMenuClose = onContextMenuClose;
+ var closeTimeout;
+ function onContextMenuClose() {
+ clearTimeout(closeTimeout);
+ closeTimeout = setTimeout(function () {
+ if (tempStyle) {
+ text.style.cssText = tempStyle;
+ tempStyle = '';
+ }
+ if (host.renderer.$keepTextAreaAtCursor == null) {
+ host.renderer.$keepTextAreaAtCursor = true;
+ host.renderer.$moveTextAreaToCursor();
+ }
+ }, useragent.isOldIE ? 200 : 0);
+ }
+
+ var onContextMenu = function(e) {
+ host.textInput.onContextMenu(e);
+ onContextMenuClose();
+ };
+ event.addListener(host.renderer.scroller, "contextmenu", onContextMenu);
+ event.addListener(text, "contextmenu", onContextMenu);
+};
+
+exports.TextInput = TextInput;
+});
+
+define("ace/mouse/default_handlers",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"], function(require, exports, module) {
+"use strict";
+
+var dom = require("../lib/dom");
+var event = require("../lib/event");
+var useragent = require("../lib/useragent");
+
+var DRAG_OFFSET = 0; // pixels
+
+function DefaultHandlers(mouseHandler) {
+ mouseHandler.$clickSelection = null;
+
+ var editor = mouseHandler.editor;
+ editor.setDefaultHandler("mousedown", this.onMouseDown.bind(mouseHandler));
+ editor.setDefaultHandler("dblclick", this.onDoubleClick.bind(mouseHandler));
+ editor.setDefaultHandler("tripleclick", this.onTripleClick.bind(mouseHandler));
+ editor.setDefaultHandler("quadclick", this.onQuadClick.bind(mouseHandler));
+ editor.setDefaultHandler("mousewheel", this.onMouseWheel.bind(mouseHandler));
+ editor.setDefaultHandler("touchmove", this.onTouchMove.bind(mouseHandler));
+
+ var exports = ["select", "startSelect", "selectEnd", "selectAllEnd", "selectByWordsEnd",
+ "selectByLinesEnd", "dragWait", "dragWaitEnd", "focusWait"];
+
+ exports.forEach(function(x) {
+ mouseHandler[x] = this[x];
+ }, this);
+
+ mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, "getLineRange");
+ mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, "getWordRange");
+}
+
+(function() {
+
+ this.onMouseDown = function(ev) {
+ var inSelection = ev.inSelection();
+ var pos = ev.getDocumentPosition();
+ this.mousedownEvent = ev;
+ var editor = this.editor;
+
+ var button = ev.getButton();
+ if (button !== 0) {
+ var selectionRange = editor.getSelectionRange();
+ var selectionEmpty = selectionRange.isEmpty();
+ editor.$blockScrolling++;
+ if (selectionEmpty)
+ editor.selection.moveToPosition(pos);
+ editor.$blockScrolling--;
+ editor.textInput.onContextMenu(ev.domEvent);
+ return; // stopping event here breaks contextmenu on ff mac
+ }
+
+ this.mousedownEvent.time = Date.now();
+ if (inSelection && !editor.isFocused()) {
+ editor.focus();
+ if (this.$focusTimout && !this.$clickSelection && !editor.inMultiSelectMode) {
+ this.setState("focusWait");
+ this.captureMouse(ev);
+ return;
+ }
+ }
+
+ this.captureMouse(ev);
+ this.startSelect(pos, ev.domEvent._clicks > 1);
+ return ev.preventDefault();
+ };
+
+ this.startSelect = function(pos, waitForClickSelection) {
+ pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);
+ var editor = this.editor;
+ editor.$blockScrolling++;
+ if (this.mousedownEvent.getShiftKey())
+ editor.selection.selectToPosition(pos);
+ else if (!waitForClickSelection)
+ editor.selection.moveToPosition(pos);
+ if (!waitForClickSelection)
+ this.select();
+ if (editor.renderer.scroller.setCapture) {
+ editor.renderer.scroller.setCapture();
+ }
+ editor.setStyle("ace_selecting");
+ this.setState("select");
+ editor.$blockScrolling--;
+ };
+
+ this.select = function() {
+ var anchor, editor = this.editor;
+ var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);
+ editor.$blockScrolling++;
+ if (this.$clickSelection) {
+ var cmp = this.$clickSelection.comparePoint(cursor);
+
+ if (cmp == -1) {
+ anchor = this.$clickSelection.end;
+ } else if (cmp == 1) {
+ anchor = this.$clickSelection.start;
+ } else {
+ var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);
+ cursor = orientedRange.cursor;
+ anchor = orientedRange.anchor;
+ }
+ editor.selection.setSelectionAnchor(anchor.row, anchor.column);
+ }
+ editor.selection.selectToPosition(cursor);
+ editor.$blockScrolling--;
+ editor.renderer.scrollCursorIntoView();
+ };
+
+ this.extendSelectionBy = function(unitName) {
+ var anchor, editor = this.editor;
+ var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);
+ var range = editor.selection[unitName](cursor.row, cursor.column);
+ editor.$blockScrolling++;
+ if (this.$clickSelection) {
+ var cmpStart = this.$clickSelection.comparePoint(range.start);
+ var cmpEnd = this.$clickSelection.comparePoint(range.end);
+
+ if (cmpStart == -1 && cmpEnd <= 0) {
+ anchor = this.$clickSelection.end;
+ if (range.end.row != cursor.row || range.end.column != cursor.column)
+ cursor = range.start;
+ } else if (cmpEnd == 1 && cmpStart >= 0) {
+ anchor = this.$clickSelection.start;
+ if (range.start.row != cursor.row || range.start.column != cursor.column)
+ cursor = range.end;
+ } else if (cmpStart == -1 && cmpEnd == 1) {
+ cursor = range.end;
+ anchor = range.start;
+ } else {
+ var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);
+ cursor = orientedRange.cursor;
+ anchor = orientedRange.anchor;
+ }
+ editor.selection.setSelectionAnchor(anchor.row, anchor.column);
+ }
+ editor.selection.selectToPosition(cursor);
+ editor.$blockScrolling--;
+ editor.renderer.scrollCursorIntoView();
+ };
+
+ this.selectEnd =
+ this.selectAllEnd =
+ this.selectByWordsEnd =
+ this.selectByLinesEnd = function() {
+ this.$clickSelection = null;
+ this.editor.unsetStyle("ace_selecting");
+ if (this.editor.renderer.scroller.releaseCapture) {
+ this.editor.renderer.scroller.releaseCapture();
+ }
+ };
+
+ this.focusWait = function() {
+ var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);
+ var time = Date.now();
+
+ if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimout)
+ this.startSelect(this.mousedownEvent.getDocumentPosition());
+ };
+
+ this.onDoubleClick = function(ev) {
+ var pos = ev.getDocumentPosition();
+ var editor = this.editor;
+ var session = editor.session;
+
+ var range = session.getBracketRange(pos);
+ if (range) {
+ if (range.isEmpty()) {
+ range.start.column--;
+ range.end.column++;
+ }
+ this.setState("select");
+ } else {
+ range = editor.selection.getWordRange(pos.row, pos.column);
+ this.setState("selectByWords");
+ }
+ this.$clickSelection = range;
+ this.select();
+ };
+
+ this.onTripleClick = function(ev) {
+ var pos = ev.getDocumentPosition();
+ var editor = this.editor;
+
+ this.setState("selectByLines");
+ var range = editor.getSelectionRange();
+ if (range.isMultiLine() && range.contains(pos.row, pos.column)) {
+ this.$clickSelection = editor.selection.getLineRange(range.start.row);
+ this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;
+ } else {
+ this.$clickSelection = editor.selection.getLineRange(pos.row);
+ }
+ this.select();
+ };
+
+ this.onQuadClick = function(ev) {
+ var editor = this.editor;
+
+ editor.selectAll();
+ this.$clickSelection = editor.getSelectionRange();
+ this.setState("selectAll");
+ };
+
+ this.onMouseWheel = function(ev) {
+ if (ev.getAccelKey())
+ return;
+ if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {
+ ev.wheelX = ev.wheelY;
+ ev.wheelY = 0;
+ }
+
+ var t = ev.domEvent.timeStamp;
+ var dt = t - (this.$lastScrollTime||0);
+
+ var editor = this.editor;
+ var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);
+ if (isScrolable || dt < 200) {
+ this.$lastScrollTime = t;
+ editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);
+ return ev.stop();
+ }
+ };
+
+ this.onTouchMove = function (ev) {
+ var t = ev.domEvent.timeStamp;
+ var dt = t - (this.$lastScrollTime || 0);
+
+ var editor = this.editor;
+ var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);
+ if (isScrolable || dt < 200) {
+ this.$lastScrollTime = t;
+ editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);
+ return ev.stop();
+ }
+ };
+
+}).call(DefaultHandlers.prototype);
+
+exports.DefaultHandlers = DefaultHandlers;
+
+function calcDistance(ax, ay, bx, by) {
+ return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));
+}
+
+function calcRangeOrientation(range, cursor) {
+ if (range.start.row == range.end.row)
+ var cmp = 2 * cursor.column - range.start.column - range.end.column;
+ else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)
+ var cmp = cursor.column - 4;
+ else
+ var cmp = 2 * cursor.row - range.start.row - range.end.row;
+
+ if (cmp < 0)
+ return {cursor: range.start, anchor: range.end};
+ else
+ return {cursor: range.end, anchor: range.start};
+}
+
+});
+
+define("ace/tooltip",["require","exports","module","ace/lib/oop","ace/lib/dom"], function(require, exports, module) {
+"use strict";
+
+var oop = require("./lib/oop");
+var dom = require("./lib/dom");
+function Tooltip (parentNode) {
+ this.isOpen = false;
+ this.$element = null;
+ this.$parentNode = parentNode;
+}
+
+(function() {
+ this.$init = function() {
+ this.$element = dom.createElement("div");
+ this.$element.className = "ace_tooltip";
+ this.$element.style.display = "none";
+ this.$parentNode.appendChild(this.$element);
+ return this.$element;
+ };
+ this.getElement = function() {
+ return this.$element || this.$init();
+ };
+ this.setText = function(text) {
+ dom.setInnerText(this.getElement(), text);
+ };
+ this.setHtml = function(html) {
+ this.getElement().innerHTML = html;
+ };
+ this.setPosition = function(x, y) {
+ this.getElement().style.left = x + "px";
+ this.getElement().style.top = y + "px";
+ };
+ this.setClassName = function(className) {
+ dom.addCssClass(this.getElement(), className);
+ };
+ this.show = function(text, x, y) {
+ if (text != null)
+ this.setText(text);
+ if (x != null && y != null)
+ this.setPosition(x, y);
+ if (!this.isOpen) {
+ this.getElement().style.display = "block";
+ this.isOpen = true;
+ }
+ };
+
+ this.hide = function() {
+ if (this.isOpen) {
+ this.getElement().style.display = "none";
+ this.isOpen = false;
+ }
+ };
+ this.getHeight = function() {
+ return this.getElement().offsetHeight;
+ };
+ this.getWidth = function() {
+ return this.getElement().offsetWidth;
+ };
+
+}).call(Tooltip.prototype);
+
+exports.Tooltip = Tooltip;
+});
+
+define("ace/mouse/default_gutter_handler",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event","ace/tooltip"], function(require, exports, module) {
+"use strict";
+var dom = require("../lib/dom");
+var oop = require("../lib/oop");
+var event = require("../lib/event");
+var Tooltip = require("../tooltip").Tooltip;
+
+function GutterHandler(mouseHandler) {
+ var editor = mouseHandler.editor;
+ var gutter = editor.renderer.$gutterLayer;
+ var tooltip = new GutterTooltip(editor.container);
+
+ mouseHandler.editor.setDefaultHandler("guttermousedown", function(e) {
+ if (!editor.isFocused() || e.getButton() != 0)
+ return;
+ var gutterRegion = gutter.getRegion(e);
+
+ if (gutterRegion == "foldWidgets")
+ return;
+
+ var row = e.getDocumentPosition().row;
+ var selection = editor.session.selection;
+
+ if (e.getShiftKey())
+ selection.selectTo(row, 0);
+ else {
+ if (e.domEvent.detail == 2) {
+ editor.selectAll();
+ return e.preventDefault();
+ }
+ mouseHandler.$clickSelection = editor.selection.getLineRange(row);
+ }
+ mouseHandler.setState("selectByLines");
+ mouseHandler.captureMouse(e);
+ return e.preventDefault();
+ });
+
+
+ var tooltipTimeout, mouseEvent, tooltipAnnotation;
+
+ function showTooltip() {
+ var row = mouseEvent.getDocumentPosition().row;
+ var annotation = gutter.$annotations[row];
+ if (!annotation)
+ return hideTooltip();
+
+ var maxRow = editor.session.getLength();
+ if (row == maxRow) {
+ var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;
+ var pos = mouseEvent.$pos;
+ if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))
+ return hideTooltip();
+ }
+
+ if (tooltipAnnotation == annotation)
+ return;
+ tooltipAnnotation = annotation.text.join("<br/>");
+
+ tooltip.setHtml(tooltipAnnotation);
+ tooltip.show();
+ editor.on("mousewheel", hideTooltip);
+
+ if (mouseHandler.$tooltipFollowsMouse) {
+ moveTooltip(mouseEvent);
+ } else {
+ var gutterElement = mouseEvent.domEvent.target;
+ var rect = gutterElement.getBoundingClientRect();
+ var style = tooltip.getElement().style;
+ style.left = rect.right + "px";
+ style.top = rect.bottom + "px";
+ }
+ }
+
+ function hideTooltip() {
+ if (tooltipTimeout)
+ tooltipTimeout = clearTimeout(tooltipTimeout);
+ if (tooltipAnnotation) {
+ tooltip.hide();
+ tooltipAnnotation = null;
+ editor.removeEventListener("mousewheel", hideTooltip);
+ }
+ }
+
+ function moveTooltip(e) {
+ tooltip.setPosition(e.x, e.y);
+ }
+
+ mouseHandler.editor.setDefaultHandler("guttermousemove", function(e) {
+ var target = e.domEvent.target || e.domEvent.srcElement;
+ if (dom.hasCssClass(target, "ace_fold-widget"))
+ return hideTooltip();
+
+ if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse)
+ moveTooltip(e);
+
+ mouseEvent = e;
+ if (tooltipTimeout)
+ return;
+ tooltipTimeout = setTimeout(function() {
+ tooltipTimeout = null;
+ if (mouseEvent && !mouseHandler.isMousePressed)
+ showTooltip();
+ else
+ hideTooltip();
+ }, 50);
+ });
+
+ event.addListener(editor.renderer.$gutter, "mouseout", function(e) {
+ mouseEvent = null;
+ if (!tooltipAnnotation || tooltipTimeout)
+ return;
+
+ tooltipTimeout = setTimeout(function() {
+ tooltipTimeout = null;
+ hideTooltip();
+ }, 50);
+ });
+
+ editor.on("changeSession", hideTooltip);
+}
+
+function GutterTooltip(parentNode) {
+ Tooltip.call(this, parentNode);
+}
+
+oop.inherits(GutterTooltip, Tooltip);
+
+(function(){
+ this.setPosition = function(x, y) {
+ var windowWidth = window.innerWidth || document.documentElement.clientWidth;
+ var windowHeight = window.innerHeight || document.documentElement.clientHeight;
+ var width = this.getWidth();
+ var height = this.getHeight();
+ x += 15;
+ y += 15;
+ if (x + width > windowWidth) {
+ x -= (x + width) - windowWidth;
+ }
+ if (y + height > windowHeight) {
+ y -= 20 + height;
+ }
+ Tooltip.prototype.setPosition.call(this, x, y);
+ };
+
+}).call(GutterTooltip.prototype);
+
+
+
+exports.GutterHandler = GutterHandler;
+
+});
+
+define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"], function(require, exports, module) {
+"use strict";
+
+var event = require("../lib/event");
+var useragent = require("../lib/useragent");
+var MouseEvent = exports.MouseEvent = function(domEvent, editor) {
+ this.domEvent = domEvent;
+ this.editor = editor;
+
+ this.x = this.clientX = domEvent.clientX;
+ this.y = this.clientY = domEvent.clientY;
+
+ this.$pos = null;
+ this.$inSelection = null;
+
+ this.propagationStopped = false;
+ this.defaultPrevented = false;
+};
+
+(function() {
+
+ this.stopPropagation = function() {
+ event.stopPropagation(this.domEvent);
+ this.propagationStopped = true;
+ };
+
+ this.preventDefault = function() {
+ event.preventDefault(this.domEvent);
+ this.defaultPrevented = true;
+ };
+
+ this.stop = function() {
+ this.stopPropagation();
+ this.preventDefault();
+ };
+ this.getDocumentPosition = function() {
+ if (this.$pos)
+ return this.$pos;
+
+ this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);
+ return this.$pos;
+ };
+ this.inSelection = function() {
+ if (this.$inSelection !== null)
+ return this.$inSelection;
+
+ var editor = this.editor;
+
+
+ var selectionRange = editor.getSelectionRange();
+ if (selectionRange.isEmpty())
+ this.$inSelection = false;
+ else {
+ var pos = this.getDocumentPosition();
+ this.$inSelection = selectionRange.contains(pos.row, pos.column);
+ }
+
+ return this.$inSelection;
+ };
+ this.getButton = function() {
+ return event.getButton(this.domEvent);
+ };
+ this.getShiftKey = function() {
+ return this.domEvent.shiftKey;
+ };
+
+ this.getAccelKey = useragent.isMac
+ ? function() { return this.domEvent.metaKey; }
+ : function() { return this.domEvent.ctrlKey; };
+
+}).call(MouseEvent.prototype);
+
+});
+
+define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"], function(require, exports, module) {
+"use strict";
+
+var dom = require("../lib/dom");
+var event = require("../lib/event");
+var useragent = require("../lib/useragent");
+
+var AUTOSCROLL_DELAY = 200;
+var SCROLL_CURSOR_DELAY = 200;
+var SCROLL_CURSOR_HYSTERESIS = 5;
+
+function DragdropHandler(mouseHandler) {
+
+ var editor = mouseHandler.editor;
+
+ var blankImage = dom.createElement("img");
+ blankImage.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";
+ if (useragent.isOpera)
+ blankImage.style.cssText = "width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;";
+
+ var exports = ["dragWait", "dragWaitEnd", "startDrag", "dragReadyEnd", "onMouseDrag"];
+
+ exports.forEach(function(x) {
+ mouseHandler[x] = this[x];
+ }, this);
+ editor.addEventListener("mousedown", this.onMouseDown.bind(mouseHandler));
+
+
+ var mouseTarget = editor.container;
+ var dragSelectionMarker, x, y;
+ var timerId, range;
+ var dragCursor, counter = 0;
+ var dragOperation;
+ var isInternal;
+ var autoScrollStartTime;
+ var cursorMovedTime;
+ var cursorPointOnCaretMoved;
+
+ this.onDragStart = function(e) {
+ if (this.cancelDrag || !mouseTarget.draggable) {
+ var self = this;
+ setTimeout(function(){
+ self.startSelect();
+ self.captureMouse(e);
+ }, 0);
+ return e.preventDefault();
+ }
+ range = editor.getSelectionRange();
+
+ var dataTransfer = e.dataTransfer;
+ dataTransfer.effectAllowed = editor.getReadOnly() ? "copy" : "copyMove";
+ if (useragent.isOpera) {
+ editor.container.appendChild(blankImage);
+ blankImage.scrollTop = 0;
+ }
+ dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0);
+ if (useragent.isOpera) {
+ editor.container.removeChild(blankImage);
+ }
+ dataTransfer.clearData();
+ dataTransfer.setData("Text", editor.session.getTextRange());
+
+ isInternal = true;
+ this.setState("drag");
+ };
+
+ this.onDragEnd = function(e) {
+ mouseTarget.draggable = false;
+ isInternal = false;
+ this.setState(null);
+ if (!editor.getReadOnly()) {
+ var dropEffect = e.dataTransfer.dropEffect;
+ if (!dragOperation && dropEffect == "move")
+ editor.session.remove(editor.getSelectionRange());
+ editor.renderer.$cursorLayer.setBlinking(true);
+ }
+ this.editor.unsetStyle("ace_dragging");
+ this.editor.renderer.setCursorStyle("");
+ };
+
+ this.onDragEnter = function(e) {
+ if (editor.getReadOnly() || !canAccept(e.dataTransfer))
+ return;
+ x = e.clientX;
+ y = e.clientY;
+ if (!dragSelectionMarker)
+ addDragMarker();
+ counter++;
+ e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);
+ return event.preventDefault(e);
+ };
+
+ this.onDragOver = function(e) {
+ if (editor.getReadOnly() || !canAccept(e.dataTransfer))
+ return;
+ x = e.clientX;
+ y = e.clientY;
+ if (!dragSelectionMarker) {
+ addDragMarker();
+ counter++;
+ }
+ if (onMouseMoveTimer !== null)
+ onMouseMoveTimer = null;
+
+ e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);
+ return event.preventDefault(e);
+ };
+
+ this.onDragLeave = function(e) {
+ counter--;
+ if (counter <= 0 && dragSelectionMarker) {
+ clearDragMarker();
+ dragOperation = null;
+ return event.preventDefault(e);
+ }
+ };
+
+ this.onDrop = function(e) {
+ if (!dragCursor)
+ return;
+ var dataTransfer = e.dataTransfer;
+ if (isInternal) {
+ switch (dragOperation) {
+ case "move":
+ if (range.contains(dragCursor.row, dragCursor.column)) {
+ range = {
+ start: dragCursor,
+ end: dragCursor
+ };
+ } else {
+ range = editor.moveText(range, dragCursor);
+ }
+ break;
+ case "copy":
+ range = editor.moveText(range, dragCursor, true);
+ break;
+ }
+ } else {
+ var dropData = dataTransfer.getData('Text');
+ range = {
+ start: dragCursor,
+ end: editor.session.insert(dragCursor, dropData)
+ };
+ editor.focus();
+ dragOperation = null;
+ }
+ clearDragMarker();
+ return event.preventDefault(e);
+ };
+
+ event.addListener(mouseTarget, "dragstart", this.onDragStart.bind(mouseHandler));
+ event.addListener(mouseTarget, "dragend", this.onDragEnd.bind(mouseHandler));
+ event.addListener(mouseTarget, "dragenter", this.onDragEnter.bind(mouseHandler));
+ event.addListener(mouseTarget, "dragover", this.onDragOver.bind(mouseHandler));
+ event.addListener(mouseTarget, "dragleave", this.onDragLeave.bind(mouseHandler));
+ event.addListener(mouseTarget, "drop", this.onDrop.bind(mouseHandler));
+
+ function scrollCursorIntoView(cursor, prevCursor) {
+ var now = Date.now();
+ var vMovement = !prevCursor || cursor.row != prevCursor.row;
+ var hMovement = !prevCursor || cursor.column != prevCursor.column;
+ if (!cursorMovedTime || vMovement || hMovement) {
+ editor.$blockScrolling += 1;
+ editor.moveCursorToPosition(cursor);
+ editor.$blockScrolling -= 1;
+ cursorMovedTime = now;
+ cursorPointOnCaretMoved = {x: x, y: y};
+ } else {
+ var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);
+ if (distance > SCROLL_CURSOR_HYSTERESIS) {
+ cursorMovedTime = null;
+ } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {
+ editor.renderer.scrollCursorIntoView();
+ cursorMovedTime = null;
+ }
+ }
+ }
+
+ function autoScroll(cursor, prevCursor) {
+ var now = Date.now();
+ var lineHeight = editor.renderer.layerConfig.lineHeight;
+ var characterWidth = editor.renderer.layerConfig.characterWidth;
+ var editorRect = editor.renderer.scroller.getBoundingClientRect();
+ var offsets = {
+ x: {
+ left: x - editorRect.left,
+ right: editorRect.right - x
+ },
+ y: {
+ top: y - editorRect.top,
+ bottom: editorRect.bottom - y
+ }
+ };
+ var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);
+ var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);
+ var scrollCursor = {row: cursor.row, column: cursor.column};
+ if (nearestXOffset / characterWidth <= 2) {
+ scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);
+ }
+ if (nearestYOffset / lineHeight <= 1) {
+ scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);
+ }
+ var vScroll = cursor.row != scrollCursor.row;
+ var hScroll = cursor.column != scrollCursor.column;
+ var vMovement = !prevCursor || cursor.row != prevCursor.row;
+ if (vScroll || (hScroll && !vMovement)) {
+ if (!autoScrollStartTime)
+ autoScrollStartTime = now;
+ else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)
+ editor.renderer.scrollCursorIntoView(scrollCursor);
+ } else {
+ autoScrollStartTime = null;
+ }
+ }
+
+ function onDragInterval() {
+ var prevCursor = dragCursor;
+ dragCursor = editor.renderer.screenToTextCoordinates(x, y);
+ scrollCursorIntoView(dragCursor, prevCursor);
+ autoScroll(dragCursor, prevCursor);
+ }
+
+ function addDragMarker() {
+ range = editor.selection.toOrientedRange();
+ dragSelectionMarker = editor.session.addMarker(range, "ace_selection", editor.getSelectionStyle());
+ editor.clearSelection();
+ if (editor.isFocused())
+ editor.renderer.$cursorLayer.setBlinking(false);
+ clearInterval(timerId);
+ onDragInterval();
+ timerId = setInterval(onDragInterval, 20);
+ counter = 0;
+ event.addListener(document, "mousemove", onMouseMove);
+ }
+
+ function clearDragMarker() {
+ clearInterval(timerId);
+ editor.session.removeMarker(dragSelectionMarker);
+ dragSelectionMarker = null;
+ editor.$blockScrolling += 1;
+ editor.selection.fromOrientedRange(range);
+ editor.$blockScrolling -= 1;
+ if (editor.isFocused() && !isInternal)
+ editor.renderer.$cursorLayer.setBlinking(!editor.getReadOnly());
+ range = null;
+ dragCursor = null;
+ counter = 0;
+ autoScrollStartTime = null;
+ cursorMovedTime = null;
+ event.removeListener(document, "mousemove", onMouseMove);
+ }
+ var onMouseMoveTimer = null;
+ function onMouseMove() {
+ if (onMouseMoveTimer == null) {
+ onMouseMoveTimer = setTimeout(function() {
+ if (onMouseMoveTimer != null && dragSelectionMarker)
+ clearDragMarker();
+ }, 20);
+ }
+ }
+
+ function canAccept(dataTransfer) {
+ var types = dataTransfer.types;
+ return !types || Array.prototype.some.call(types, function(type) {
+ return type == 'text/plain' || type == 'Text';
+ });
+ }
+
+ function getDropEffect(e) {
+ var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];
+ var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];
+
+ var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;
+ var effectAllowed = "uninitialized";
+ try {
+ effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();
+ } catch (e) {}
+ var dropEffect = "none";
+
+ if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)
+ dropEffect = "copy";
+ else if (moveAllowed.indexOf(effectAllowed) >= 0)
+ dropEffect = "move";
+ else if (copyAllowed.indexOf(effectAllowed) >= 0)
+ dropEffect = "copy";
+
+ return dropEffect;
+ }
+}
+
+(function() {
+
+ this.dragWait = function() {
+ var interval = Date.now() - this.mousedownEvent.time;
+ if (interval > this.editor.getDragDelay())
+ this.startDrag();
+ };
+
+ this.dragWaitEnd = function() {
+ var target = this.editor.container;
+ target.draggable = false;
+ this.startSelect(this.mousedownEvent.getDocumentPosition());
+ this.selectEnd();
+ };
+
+ this.dragReadyEnd = function(e) {
+ this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly());
+ this.editor.unsetStyle("ace_dragging");
+ this.editor.renderer.setCursorStyle("");
+ this.dragWaitEnd();
+ };
+
+ this.startDrag = function(){
+ this.cancelDrag = false;
+ var editor = this.editor;
+ var target = editor.container;
+ target.draggable = true;
+ editor.renderer.$cursorLayer.setBlinking(false);
+ editor.setStyle("ace_dragging");
+ var cursorStyle = useragent.isWin ? "default" : "move";
+ editor.renderer.setCursorStyle(cursorStyle);
+ this.setState("dragReady");
+ };
+
+ this.onMouseDrag = function(e) {
+ var target = this.editor.container;
+ if (useragent.isIE && this.state == "dragReady") {
+ var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);
+ if (distance > 3)
+ target.dragDrop();
+ }
+ if (this.state === "dragWait") {
+ var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);
+ if (distance > 0) {
+ target.draggable = false;
+ this.startSelect(this.mousedownEvent.getDocumentPosition());
+ }
+ }
+ };
+
+ this.onMouseDown = function(e) {
+ if (!this.$dragEnabled)
+ return;
+ this.mousedownEvent = e;
+ var editor = this.editor;
+
+ var inSelection = e.inSelection();
+ var button = e.getButton();
+ var clickCount = e.domEvent.detail || 1;
+ if (clickCount === 1 && button === 0 && inSelection) {
+ if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))
+ return;
+ this.mousedownEvent.time = Date.now();
+ var eventTarget = e.domEvent.target || e.domEvent.srcElement;
+ if ("unselectable" in eventTarget)
+ eventTarget.unselectable = "on";
+ if (editor.getDragDelay()) {
+ if (useragent.isWebKit) {
+ this.cancelDrag = true;
+ var mouseTarget = editor.container;
+ mouseTarget.draggable = true;
+ }
+ this.setState("dragWait");
+ } else {
+ this.startDrag();
+ }
+ this.captureMouse(e, this.onMouseDrag.bind(this));
+ e.defaultPrevented = true;
+ }
+ };
+
+}).call(DragdropHandler.prototype);
+
+
+function calcDistance(ax, ay, bx, by) {
+ return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));
+}
+
+exports.DragdropHandler = DragdropHandler;
+
+});
+
+define("ace/lib/net",["require","exports","module","ace/lib/dom"], function(require, exports, module) {
+"use strict";
+var dom = require("./dom");
+
+exports.get = function (url, callback) {
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', url, true);
+ xhr.onreadystatechange = function () {
+ if (xhr.readyState === 4) {
+ callback(xhr.responseText);
+ }
+ };
+ xhr.send(null);
+};
+
+exports.loadScript = function(path, callback) {
+ var head = dom.getDocumentHead();
+ var s = document.createElement('script');
+
+ s.src = path;
+ head.appendChild(s);
+
+ s.onload = s.onreadystatechange = function(_, isAbort) {
+ if (isAbort || !s.readyState || s.readyState == "loaded" || s.readyState == "complete") {
+ s = s.onload = s.onreadystatechange = null;
+ if (!isAbort)
+ callback();
+ }
+ };
+};
+exports.qualifyURL = function(url) {
+ var a = document.createElement('a');
+ a.href = url;
+ return a.href;
+}
+
+});
+
+define("ace/lib/event_emitter",["require","exports","module"], function(require, exports, module) {
+"use strict";
+
+var EventEmitter = {};
+var stopPropagation = function() { this.propagationStopped = true; };
+var preventDefault = function() { this.defaultPrevented = true; };
+
+EventEmitter._emit =
+EventEmitter._dispatchEvent = function(eventName, e) {
+ this._eventRegistry || (this._eventRegistry = {});
+ this._defaultHandlers || (this._defaultHandlers = {});
+
+ var listeners = this._eventRegistry[eventName] || [];
+ var defaultHandler = this._defaultHandlers[eventName];
+ if (!listeners.length && !defaultHandler)
+ return;
+
+ if (typeof e != "object" || !e)
+ e = {};
+
+ if (!e.type)
+ e.type = eventName;
+ if (!e.stopPropagation)
+ e.stopPropagation = stopPropagation;
+ if (!e.preventDefault)
+ e.preventDefault = preventDefault;
+
+ listeners = listeners.slice();
+ for (var i=0; i<listeners.length; i++) {
+ listeners[i](e, this);
+ if (e.propagationStopped)
+ break;
+ }
+
+ if (defaultHandler && !e.defaultPrevented)
+ return defaultHandler(e, this);
+};
+
+
+EventEmitter._signal = function(eventName, e) {
+ var listeners = (this._eventRegistry || {})[eventName];
+ if (!listeners)
+ return;
+ listeners = listeners.slice();
+ for (var i=0; i<listeners.length; i++)
+ listeners[i](e, this);
+};
+
+EventEmitter.once = function(eventName, callback) {
+ var _self = this;
+ callback && this.addEventListener(eventName, function newCallback() {
+ _self.removeEventListener(eventName, newCallback);
+ callback.apply(null, arguments);
+ });
+};
+
+
+EventEmitter.setDefaultHandler = function(eventName, callback) {
+ var handlers = this._defaultHandlers
+ if (!handlers)
+ handlers = this._defaultHandlers = {_disabled_: {}};
+
+ if (handlers[eventName]) {
+ var old = handlers[eventName];
+ var disabled = handlers._disabled_[eventName];
+ if (!disabled)
+ handlers._disabled_[eventName] = disabled = [];
+ disabled.push(old);
+ var i = disabled.indexOf(callback);
+ if (i != -1)
+ disabled.splice(i, 1);
+ }
+ handlers[eventName] = callback;
+};
+EventEmitter.removeDefaultHandler = function(eventName, callback) {
+ var handlers = this._defaultHandlers
+ if (!handlers)
+ return;
+ var disabled = handlers._disabled_[eventName];
+
+ if (handlers[eventName] == callback) {
+ var old = handlers[eventName];
+ if (disabled)
+ this.setDefaultHandler(eventName, disabled.pop());
+ } else if (disabled) {
+ var i = disabled.indexOf(callback);
+ if (i != -1)
+ disabled.splice(i, 1);
+ }
+};
+
+EventEmitter.on =
+EventEmitter.addEventListener = function(eventName, callback, capturing) {
+ this._eventRegistry = this._eventRegistry || {};
+
+ var listeners = this._eventRegistry[eventName];
+ if (!listeners)
+ listeners = this._eventRegistry[eventName] = [];
+
+ if (listeners.indexOf(callback) == -1)
+ listeners[capturing ? "unshift" : "push"](callback);
+ return callback;
+};
+
+EventEmitter.off =
+EventEmitter.removeListener =
+EventEmitter.removeEventListener = function(eventName, callback) {
+ this._eventRegistry = this._eventRegistry || {};
+
+ var listeners = this._eventRegistry[eventName];
+ if (!listeners)
+ return;
+
+ var index = listeners.indexOf(callback);
+ if (index !== -1)
+ listeners.splice(index, 1);
+};
+
+EventEmitter.removeAllListeners = function(eventName) {
+ if (this._eventRegistry) this._eventRegistry[eventName] = [];
+};
+
+exports.EventEmitter = EventEmitter;
+
+});
+
+define("ace/lib/app_config",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module) {
+"no use strict";
+
+var oop = require("./oop");
+var EventEmitter = require("./event_emitter").EventEmitter;
+
+var optionsProvider = {
+ setOptions: function(optList) {
+ Object.keys(optList).forEach(function(key) {
+ this.setOption(key, optList[key]);
+ }, this);
+ },
+ getOptions: function(optionNames) {
+ var result = {};
+ if (!optionNames) {
+ optionNames = Object.keys(this.$options);
+ } else if (!Array.isArray(optionNames)) {
+ result = optionNames;
+ optionNames = Object.keys(result);
+ }
+ optionNames.forEach(function(key) {
+ result[key] = this.getOption(key);
+ }, this);
+ return result;
+ },
+ setOption: function(name, value) {
+ if (this["$" + name] === value)
+ return;
+ var opt = this.$options[name];
+ if (!opt) {
+ return warn('misspelled option "' + name + '"');
+ }
+ if (opt.forwardTo)
+ return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);
+
+ if (!opt.handlesSet)
+ this["$" + name] = value;
+ if (opt && opt.set)
+ opt.set.call(this, value);
+ },
+ getOption: function(name) {
+ var opt = this.$options[name];
+ if (!opt) {
+ return warn('misspelled option "' + name + '"');
+ }
+ if (opt.forwardTo)
+ return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);
+ return opt && opt.get ? opt.get.call(this) : this["$" + name];
+ }
+};
+
+function warn(message) {
+ if (typeof console != "undefined" && console.warn)
+ console.warn.apply(console, arguments);
+}
+
+function reportError(msg, data) {
+ var e = new Error(msg);
+ e.data = data;
+ if (typeof console == "object" && console.error)
+ console.error(e);
+ setTimeout(function() { throw e; });
+}
+
+var AppConfig = function() {
+ this.$defaultOptions = {};
+};
+
+(function() {
+ oop.implement(this, EventEmitter);
+ this.defineOptions = function(obj, path, options) {
+ if (!obj.$options)
+ this.$defaultOptions[path] = obj.$options = {};
+
+ Object.keys(options).forEach(function(key) {
+ var opt = options[key];
+ if (typeof opt == "string")
+ opt = {forwardTo: opt};
+
+ opt.name || (opt.name = key);
+ obj.$options[opt.name] = opt;
+ if ("initialValue" in opt)
+ obj["$" + opt.name] = opt.initialValue;
+ });
+ oop.implement(obj, optionsProvider);
+
+ return this;
+ };
+
+ this.resetOptions = function(obj) {
+ Object.keys(obj.$options).forEach(function(key) {
+ var opt = obj.$options[key];
+ if ("value" in opt)
+ obj.setOption(key, opt.value);
+ });
+ };
+
+ this.setDefaultValue = function(path, name, value) {
+ var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});
+ if (opts[name]) {
+ if (opts.forwardTo)
+ this.setDefaultValue(opts.forwardTo, name, value);
+ else
+ opts[name].value = value;
+ }
+ };
+
+ this.setDefaultValues = function(path, optionHash) {
+ Object.keys(optionHash).forEach(function(key) {
+ this.setDefaultValue(path, key, optionHash[key]);
+ }, this);
+ };
+
+ this.warn = warn;
+ this.reportError = reportError;
+
+}).call(AppConfig.prototype);
+
+exports.AppConfig = AppConfig;
+
+});
+
+define("ace/config",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/lib/net","ace/lib/app_config"], function(require, exports, module) {
+"no use strict";
+
+var lang = require("./lib/lang");
+var oop = require("./lib/oop");
+var net = require("./lib/net");
+var AppConfig = require("./lib/app_config").AppConfig;
+
+module.exports = exports = new AppConfig();
+
+var global = (function() {
+ return this || typeof window != "undefined" && window;
+})();
+
+var options = {
+ packaged: false,
+ workerPath: null,
+ modePath: null,
+ themePath: null,
+ basePath: "",
+ suffix: ".js",
+ $moduleUrls: {}
+};
+
+exports.get = function(key) {
+ if (!options.hasOwnProperty(key))
+ throw new Error("Unknown config key: " + key);
+
+ return options[key];
+};
+
+exports.set = function(key, value) {
+ if (!options.hasOwnProperty(key))
+ throw new Error("Unknown config key: " + key);
+
+ options[key] = value;
+};
+
+exports.all = function() {
+ return lang.copyObject(options);
+};
+exports.moduleUrl = function(name, component) {
+ if (options.$moduleUrls[name])
+ return options.$moduleUrls[name];
+
+ var parts = name.split("/");
+ component = component || parts[parts.length - 2] || "";
+ var sep = component == "snippets" ? "/" : "-";
+ var base = parts[parts.length - 1];
+ if (component == "worker" && sep == "-") {
+ var re = new RegExp("^" + component + "[\\-_]|[\\-_]" + component + "$", "g");
+ base = base.replace(re, "");
+ }
+
+ if ((!base || base == component) && parts.length > 1)
+ base = parts[parts.length - 2];
+ var path = options[component + "Path"];
+ if (path == null) {
+ path = options.basePath;
+ } else if (sep == "/") {
+ component = sep = "";
+ }
+ if (path && path.slice(-1) != "/")
+ path += "/";
+ return path + component + sep + base + this.get("suffix");
+};
+
+exports.setModuleUrl = function(name, subst) {
+ return options.$moduleUrls[name] = subst;
+};
+
+exports.$loading = {};
+exports.loadModule = function(moduleName, onLoad) {
+ var module, moduleType;
+ if (Array.isArray(moduleName)) {
+ moduleType = moduleName[0];
+ moduleName = moduleName[1];
+ }
+
+ try {
+ module = require(moduleName);
+ } catch (e) {}
+ if (module && !exports.$loading[moduleName])
+ return onLoad && onLoad(module);
+
+ if (!exports.$loading[moduleName])
+ exports.$loading[moduleName] = [];
+
+ exports.$loading[moduleName].push(onLoad);
+
+ if (exports.$loading[moduleName].length > 1)
+ return;
+
+ var afterLoad = function() {
+ require([moduleName], function(module) {
+ exports._emit("load.module", {name: moduleName, module: module});
+ var listeners = exports.$loading[moduleName];
+ exports.$loading[moduleName] = null;
+ listeners.forEach(function(onLoad) {
+ onLoad && onLoad(module);
+ });
+ });
+ };
+
+ if (!exports.get("packaged"))
+ return afterLoad();
+ net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);
+};
+init(true);function init(packaged) {
+
+ options.packaged = packaged || require.packaged || module.packaged || (global.define && define.packaged);
+
+ if (!global.document)
+ return "";
+
+ var scriptOptions = {};
+ var scriptUrl = "";
+ var currentScript = (document.currentScript || document._currentScript ); // native or polyfill
+ var currentDocument = currentScript && currentScript.ownerDocument || document;
+
+ var scripts = currentDocument.getElementsByTagName("script");
+ for (var i=0; i<scripts.length; i++) {
+ var script = scripts[i];
+
+ var src = script.src || script.getAttribute("src");
+ if (!src)
+ continue;
+
+ var attributes = script.attributes;
+ for (var j=0, l=attributes.length; j < l; j++) {
+ var attr = attributes[j];
+ if (attr.name.indexOf("data-ace-") === 0) {
+ scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, ""))] = attr.value;
+ }
+ }
+
+ var m = src.match(/^(.*)\/ace(\-\w+)?\.js(\?|$)/);
+ if (m)
+ scriptUrl = m[1];
+ }
+
+ if (scriptUrl) {
+ scriptOptions.base = scriptOptions.base || scriptUrl;
+ scriptOptions.packaged = true;
+ }
+
+ scriptOptions.basePath = scriptOptions.base;
+ scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base;
+ scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base;
+ scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base;
+ delete scriptOptions.base;
+
+ for (var key in scriptOptions)
+ if (typeof scriptOptions[key] !== "undefined")
+ exports.set(key, scriptOptions[key]);
+};
+
+exports.init = init;
+
+function deHyphenate(str) {
+ return str.replace(/-(.)/g, function(m, m1) { return m1.toUpperCase(); });
+}
+
+});
+
+define("ace/mouse/mouse_handler",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/mouse/default_handlers","ace/mouse/default_gutter_handler","ace/mouse/mouse_event","ace/mouse/dragdrop_handler","ace/config"], function(require, exports, module) {
+"use strict";
+
+var event = require("../lib/event");
+var useragent = require("../lib/useragent");
+var DefaultHandlers = require("./default_handlers").DefaultHandlers;
+var DefaultGutterHandler = require("./default_gutter_handler").GutterHandler;
+var MouseEvent = require("./mouse_event").MouseEvent;
+var DragdropHandler = require("./dragdrop_handler").DragdropHandler;
+var config = require("../config");
+
+var MouseHandler = function(editor) {
+ var _self = this;
+ this.editor = editor;
+
+ new DefaultHandlers(this);
+ new DefaultGutterHandler(this);
+ new DragdropHandler(this);
+
+ var focusEditor = function(e) {
+ if (!document.hasFocus || !document.hasFocus())
+ window.focus();
+ editor.focus();
+ if (!editor.isFocused())
+ window.focus();
+ };
+
+ var mouseTarget = editor.renderer.getMouseEventTarget();
+ event.addListener(mouseTarget, "click", this.onMouseEvent.bind(this, "click"));
+ event.addListener(mouseTarget, "mousemove", this.onMouseMove.bind(this, "mousemove"));
+ event.addMultiMouseDownListener(mouseTarget, [400, 300, 250], this, "onMouseEvent");
+ if (editor.renderer.scrollBarV) {
+ event.addMultiMouseDownListener(editor.renderer.scrollBarV.inner, [400, 300, 250], this, "onMouseEvent");
+ event.addMultiMouseDownListener(editor.renderer.scrollBarH.inner, [400, 300, 250], this, "onMouseEvent");
+ if (useragent.isIE) {
+ event.addListener(editor.renderer.scrollBarV.element, "mousedown", focusEditor);
+ event.addListener(editor.renderer.scrollBarH.element, "mousedown", focusEditor);
+ }
+ }
+ event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, "mousewheel"));
+ event.addTouchMoveListener(editor.container, this.onTouchMove.bind(this, "touchmove"));
+
+ var gutterEl = editor.renderer.$gutter;
+ event.addListener(gutterEl, "mousedown", this.onMouseEvent.bind(this, "guttermousedown"));
+ event.addListener(gutterEl, "click", this.onMouseEvent.bind(this, "gutterclick"));
+ event.addListener(gutterEl, "dblclick", this.onMouseEvent.bind(this, "gutterdblclick"));
+ event.addListener(gutterEl, "mousemove", this.onMouseEvent.bind(this, "guttermousemove"));
+
+ event.addListener(mouseTarget, "mousedown", focusEditor);
+
+ event.addListener(gutterEl, "mousedown", function(e) {
+ editor.focus();
+ return event.preventDefault(e);
+ });
+
+ editor.on("mousemove", function(e){
+ if (_self.state || _self.$dragDelay || !_self.$dragEnabled)
+ return;
+
+ var character = editor.renderer.screenToTextCoordinates(e.x, e.y);
+ var range = editor.session.selection.getRange();
+ var renderer = editor.renderer;
+
+ if (!range.isEmpty() && range.insideStart(character.row, character.column)) {
+ renderer.setCursorStyle("default");
+ } else {
+ renderer.setCursorStyle("");
+ }
+ });
+};
+
+(function() {
+ this.onMouseEvent = function(name, e) {
+ this.editor._emit(name, new MouseEvent(e, this.editor));
+ };
+
+ this.onMouseMove = function(name, e) {
+ var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;
+ if (!listeners || !listeners.length)
+ return;
+
+ this.editor._emit(name, new MouseEvent(e, this.editor));
+ };
+
+ this.onMouseWheel = function(name, e) {
+ var mouseEvent = new MouseEvent(e, this.editor);
+ mouseEvent.speed = this.$scrollSpeed * 2;
+ mouseEvent.wheelX = e.wheelX;
+ mouseEvent.wheelY = e.wheelY;
+
+ this.editor._emit(name, mouseEvent);
+ };
+
+ this.onTouchMove = function (name, e) {
+ var mouseEvent = new MouseEvent(e, this.editor);
+ mouseEvent.speed = 1;//this.$scrollSpeed * 2;
+ mouseEvent.wheelX = e.wheelX;
+ mouseEvent.wheelY = e.wheelY;
+ this.editor._emit(name, mouseEvent);
+ };
+
+ this.setState = function(state) {
+ this.state = state;
+ };
+
+ this.captureMouse = function(ev, mouseMoveHandler) {
+ this.x = ev.x;
+ this.y = ev.y;
+
+ this.isMousePressed = true;
+ var renderer = this.editor.renderer;
+ if (renderer.$keepTextAreaAtCursor)
+ renderer.$keepTextAreaAtCursor = null;
+
+ var self = this;
+ var onMouseMove = function(e) {
+ if (!e) return;
+ if (useragent.isWebKit && !e.which && self.releaseMouse)
+ return self.releaseMouse();
+
+ self.x = e.clientX;
+ self.y = e.clientY;
+ mouseMoveHandler && mouseMoveHandler(e);
+ self.mouseEvent = new MouseEvent(e, self.editor);
+ self.$mouseMoved = true;
+ };
+
+ var onCaptureEnd = function(e) {
+ clearInterval(timerId);
+ onCaptureInterval();
+ self[self.state + "End"] && self[self.state + "End"](e);
+ self.state = "";
+ if (renderer.$keepTextAreaAtCursor == null) {
+ renderer.$keepTextAreaAtCursor = true;
+ renderer.$moveTextAreaToCursor();
+ }
+ self.isMousePressed = false;
+ self.$onCaptureMouseMove = self.releaseMouse = null;
+ e && self.onMouseEvent("mouseup", e);
+ };
+
+ var onCaptureInterval = function() {
+ self[self.state] && self[self.state]();
+ self.$mouseMoved = false;
+ };
+
+ if (useragent.isOldIE && ev.domEvent.type == "dblclick") {
+ return setTimeout(function() {onCaptureEnd(ev);});
+ }
+
+ self.$onCaptureMouseMove = onMouseMove;
+ self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);
+ var timerId = setInterval(onCaptureInterval, 20);
+ };
+ this.releaseMouse = null;
+ this.cancelContextMenu = function() {
+ var stop = function(e) {
+ if (e && e.domEvent && e.domEvent.type != "contextmenu")
+ return;
+ this.editor.off("nativecontextmenu", stop);
+ if (e && e.domEvent)
+ event.stopEvent(e.domEvent);
+ }.bind(this);
+ setTimeout(stop, 10);
+ this.editor.on("nativecontextmenu", stop);
+ };
+}).call(MouseHandler.prototype);
+
+config.defineOptions(MouseHandler.prototype, "mouseHandler", {
+ scrollSpeed: {initialValue: 2},
+ dragDelay: {initialValue: (useragent.isMac ? 150 : 0)},
+ dragEnabled: {initialValue: true},
+ focusTimout: {initialValue: 0},
+ tooltipFollowsMouse: {initialValue: true}
+});
+
+
+exports.MouseHandler = MouseHandler;
+});
+
+define("ace/mouse/fold_handler",["require","exports","module"], function(require, exports, module) {
+"use strict";
+
+function FoldHandler(editor) {
+
+ editor.on("click", function(e) {
+ var position = e.getDocumentPosition();
+ var session = editor.session;
+ var fold = session.getFoldAt(position.row, position.column, 1);
+ if (fold) {
+ if (e.getAccelKey())
+ session.removeFold(fold);
+ else
+ session.expandFold(fold);
+
+ e.stop();
+ }
+ });
+
+ editor.on("gutterclick", function(e) {
+ var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);
+
+ if (gutterRegion == "foldWidgets") {
+ var row = e.getDocumentPosition().row;
+ var session = editor.session;
+ if (session.foldWidgets && session.foldWidgets[row])
+ editor.session.onFoldWidgetClick(row, e);
+ if (!editor.isFocused())
+ editor.focus();
+ e.stop();
+ }
+ });
+
+ editor.on("gutterdblclick", function(e) {
+ var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);
+
+ if (gutterRegion == "foldWidgets") {
+ var row = e.getDocumentPosition().row;
+ var session = editor.session;
+ var data = session.getParentFoldRangeData(row, true);
+ var range = data.range || data.firstRange;
+
+ if (range) {
+ row = range.start.row;
+ var fold = session.getFoldAt(row, session.getLine(row).length, 1);
+
+ if (fold) {
+ session.removeFold(fold);
+ } else {
+ session.addFold("...", range);
+ editor.renderer.scrollCursorIntoView({row: range.start.row, column: 0});
+ }
+ }
+ e.stop();
+ }
+ });
+}
+
+exports.FoldHandler = FoldHandler;
+
+});
+
+define("ace/keyboard/keybinding",["require","exports","module","ace/lib/keys","ace/lib/event"], function(require, exports, module) {
+"use strict";
+
+var keyUtil = require("../lib/keys");
+var event = require("../lib/event");
+
+var KeyBinding = function(editor) {
+ this.$editor = editor;
+ this.$data = {editor: editor};
+ this.$handlers = [];
+ this.setDefaultHandler(editor.commands);
+};
+
+(function() {
+ this.setDefaultHandler = function(kb) {
+ this.removeKeyboardHandler(this.$defaultHandler);
+ this.$defaultHandler = kb;
+ this.addKeyboardHandler(kb, 0);
+ };
+
+ this.setKeyboardHandler = function(kb) {
+ var h = this.$handlers;
+ if (h[h.length - 1] == kb)
+ return;
+
+ while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler)
+ this.removeKeyboardHandler(h[h.length - 1]);
+
+ this.addKeyboardHandler(kb, 1);
+ };
+
+ this.addKeyboardHandler = function(kb, pos) {
+ if (!kb)
+ return;
+ if (typeof kb == "function" && !kb.handleKeyboard)
+ kb.handleKeyboard = kb;
+ var i = this.$handlers.indexOf(kb);
+ if (i != -1)
+ this.$handlers.splice(i, 1);
+
+ if (pos == undefined)
+ this.$handlers.push(kb);
+ else
+ this.$handlers.splice(pos, 0, kb);
+
+ if (i == -1 && kb.attach)
+ kb.attach(this.$editor);
+ };
+
+ this.removeKeyboardHandler = function(kb) {
+ var i = this.$handlers.indexOf(kb);
+ if (i == -1)
+ return false;
+ this.$handlers.splice(i, 1);
+ kb.detach && kb.detach(this.$editor);
+ return true;
+ };
+
+ this.getKeyboardHandler = function() {
+ return this.$handlers[this.$handlers.length - 1];
+ };
+
+ this.getStatusText = function() {
+ var data = this.$data;
+ var editor = data.editor;
+ return this.$handlers.map(function(h) {
+ return h.getStatusText && h.getStatusText(editor, data) || "";
+ }).filter(Boolean).join(" ");
+ };
+
+ this.$callKeyboardHandlers = function(hashId, keyString, keyCode, e) {
+ var toExecute;
+ var success = false;
+ var commands = this.$editor.commands;
+
+ for (var i = this.$handlers.length; i--;) {
+ toExecute = this.$handlers[i].handleKeyboard(
+ this.$data, hashId, keyString, keyCode, e
+ );
+ if (!toExecute || !toExecute.command)
+ continue;
+ if (toExecute.command == "null") {
+ success = true;
+ } else {
+ success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);
+ }
+ if (success && e && hashId != -1 &&
+ toExecute.passEvent != true && toExecute.command.passEvent != true
+ ) {
+ event.stopEvent(e);
+ }
+ if (success)
+ break;
+ }
+
+ if (!success && hashId == -1) {
+ toExecute = {command: "insertstring"};
+ success = commands.exec("insertstring", this.$editor, keyString);
+ }
+
+ if (success)
+ this.$editor._signal("keyboardActivity", toExecute);
+
+ return success;
+ };
+
+ this.onCommandKey = function(e, hashId, keyCode) {
+ var keyString = keyUtil.keyCodeToString(keyCode);
+ this.$callKeyboardHandlers(hashId, keyString, keyCode, e);
+ };
+
+ this.onTextInput = function(text) {
+ this.$callKeyboardHandlers(-1, text);
+ };
+
+}).call(KeyBinding.prototype);
+
+exports.KeyBinding = KeyBinding;
+});
+
+define("ace/range",["require","exports","module"], function(require, exports, module) {
+"use strict";
+var comparePoints = function(p1, p2) {
+ return p1.row - p2.row || p1.column - p2.column;
+};
+var Range = function(startRow, startColumn, endRow, endColumn) {
+ this.start = {
+ row: startRow,
+ column: startColumn
+ };
+
+ this.end = {
+ row: endRow,
+ column: endColumn
+ };
+};
+
+(function() {
+ this.isEqual = function(range) {
+ return this.start.row === range.start.row &&
+ this.end.row === range.end.row &&
+ this.start.column === range.start.column &&
+ this.end.column === range.end.column;
+ };
+ this.toString = function() {
+ return ("Range: [" + this.start.row + "/" + this.start.column +
+ "] -> [" + this.end.row + "/" + this.end.column + "]");
+ };
+
+ this.contains = function(row, column) {
+ return this.compare(row, column) == 0;
+ };
+ this.compareRange = function(range) {
+ var cmp,
+ end = range.end,
+ start = range.start;
+
+ cmp = this.compare(end.row, end.column);
+ if (cmp == 1) {
+ cmp = this.compare(start.row, start.column);
+ if (cmp == 1) {
+ return 2;
+ } else if (cmp == 0) {
+ return 1;
+ } else {
+ return 0;
+ }
+ } else if (cmp == -1) {
+ return -2;
+ } else {
+ cmp = this.compare(start.row, start.column);
+ if (cmp == -1) {
+ return -1;
+ } else if (cmp == 1) {
+ return 42;
+ } else {
+ return 0;
+ }
+ }
+ };
+ this.comparePoint = function(p) {
+ return this.compare(p.row, p.column);
+ };
+ this.containsRange = function(range) {
+ return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;
+ };
+ this.intersects = function(range) {
+ var cmp = this.compareRange(range);
+ return (cmp == -1 || cmp == 0 || cmp == 1);
+ };
+ this.isEnd = function(row, column) {
+ return this.end.row == row && this.end.column == column;
+ };
+ this.isStart = function(row, column) {
+ return this.start.row == row && this.start.column == column;
+ };
+ this.setStart = function(row, column) {
+ if (typeof row == "object") {
+ this.start.column = row.column;
+ this.start.row = row.row;
+ } else {
+ this.start.row = row;
+ this.start.column = column;
+ }
+ };
+ this.setEnd = function(row, column) {
+ if (typeof row == "object") {
+ this.end.column = row.column;
+ this.end.row = row.row;
+ } else {
+ this.end.row = row;
+ this.end.column = column;
+ }
+ };
+ this.inside = function(row, column) {
+ if (this.compare(row, column) == 0) {
+ if (this.isEnd(row, column) || this.isStart(row, column)) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+ return false;
+ };
+ this.insideStart = function(row, column) {
+ if (this.compare(row, column) == 0) {
+ if (this.isEnd(row, column)) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+ return false;
+ };
+ this.insideEnd = function(row, column) {
+ if (this.compare(row, column) == 0) {
+ if (this.isStart(row, column)) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+ return false;
+ };
+ this.compare = function(row, column) {
+ if (!this.isMultiLine()) {
+ if (row === this.start.row) {
+ return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);
+ };
+ }
+
+ if (row < this.start.row)
+ return -1;
+
+ if (row > this.end.row)
+ return 1;
+
+ if (this.start.row === row)
+ return column >= this.start.column ? 0 : -1;
+
+ if (this.end.row === row)
+ return column <= this.end.column ? 0 : 1;
+
+ return 0;
+ };
+ this.compareStart = function(row, column) {
+ if (this.start.row == row && this.start.column == column) {
+ return -1;
+ } else {
+ return this.compare(row, column);
+ }
+ };
+ this.compareEnd = function(row, column) {
+ if (this.end.row == row && this.end.column == column) {
+ return 1;
+ } else {
+ return this.compare(row, column);
+ }
+ };
+ this.compareInside = function(row, column) {
+ if (this.end.row == row && this.end.column == column) {
+ return 1;
+ } else if (this.start.row == row && this.start.column == column) {
+ return -1;
+ } else {
+ return this.compare(row, column);
+ }
+ };
+ this.clipRows = function(firstRow, lastRow) {
+ if (this.end.row > lastRow)
+ var end = {row: lastRow + 1, column: 0};
+ else if (this.end.row < firstRow)
+ var end = {row: firstRow, column: 0};
+
+ if (this.start.row > lastRow)
+ var start = {row: lastRow + 1, column: 0};
+ else if (this.start.row < firstRow)
+ var start = {row: firstRow, column: 0};
+
+ return Range.fromPoints(start || this.start, end || this.end);
+ };
+ this.extend = function(row, column) {
+ var cmp = this.compare(row, column);
+
+ if (cmp == 0)
+ return this;
+ else if (cmp == -1)
+ var start = {row: row, column: column};
+ else
+ var end = {row: row, column: column};
+
+ return Range.fromPoints(start || this.start, end || this.end);
+ };
+
+ this.isEmpty = function() {
+ return (this.start.row === this.end.row && this.start.column === this.end.column);
+ };
+ this.isMultiLine = function() {
+ return (this.start.row !== this.end.row);
+ };
+ this.clone = function() {
+ return Range.fromPoints(this.start, this.end);
+ };
+ this.collapseRows = function() {
+ if (this.end.column == 0)
+ return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0)
+ else
+ return new Range(this.start.row, 0, this.end.row, 0)
+ };
+ this.toScreenRange = function(session) {
+ var screenPosStart = session.documentToScreenPosition(this.start);
+ var screenPosEnd = session.documentToScreenPosition(this.end);
+
+ return new Range(
+ screenPosStart.row, screenPosStart.column,
+ screenPosEnd.row, screenPosEnd.column
+ );
+ };
+ this.moveBy = function(row, column) {
+ this.start.row += row;
+ this.start.column += column;
+ this.end.row += row;
+ this.end.column += column;
+ };
+
+}).call(Range.prototype);
+Range.fromPoints = function(start, end) {
+ return new Range(start.row, start.column, end.row, end.column);
+};
+Range.comparePoints = comparePoints;
+
+Range.comparePoints = function(p1, p2) {
+ return p1.row - p2.row || p1.column - p2.column;
+};
+
+
+exports.Range = Range;
+});
+
+define("ace/selection",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/range"], function(require, exports, module) {
+"use strict";
+
+var oop = require("./lib/oop");
+var lang = require("./lib/lang");
+var EventEmitter = require("./lib/event_emitter").EventEmitter;
+var Range = require("./range").Range;
+var Selection = function(session) {
+ this.session = session;
+ this.doc = session.getDocument();
+
+ this.clearSelection();
+ this.lead = this.selectionLead = this.doc.createAnchor(0, 0);
+ this.anchor = this.selectionAnchor = this.doc.createAnchor(0, 0);
+
+ var self = this;
+ this.lead.on("change", function(e) {
+ self._emit("changeCursor");
+ if (!self.$isEmpty)
+ self._emit("changeSelection");
+ if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)
+ self.$desiredColumn = null;
+ });
+
+ this.selectionAnchor.on("change", function() {
+ if (!self.$isEmpty)
+ self._emit("changeSelection");
+ });
+};
+
+(function() {
+
+ oop.implement(this, EventEmitter);
+ this.isEmpty = function() {
+ return (this.$isEmpty || (
+ this.anchor.row == this.lead.row &&
+ this.anchor.column == this.lead.column
+ ));
+ };
+ this.isMultiLine = function() {
+ if (this.isEmpty()) {
+ return false;
+ }
+
+ return this.getRange().isMultiLine();
+ };
+ this.getCursor = function() {
+ return this.lead.getPosition();
+ };
+ this.setSelectionAnchor = function(row, column) {
+ this.anchor.setPosition(row, column);
+
+ if (this.$isEmpty) {
+ this.$isEmpty = false;
+ this._emit("changeSelection");
+ }
+ };
+ this.getSelectionAnchor = function() {
+ if (this.$isEmpty)
+ return this.getSelectionLead();
+ else
+ return this.anchor.getPosition();
+ };
+ this.getSelectionLead = function() {
+ return this.lead.getPosition();
+ };
+ this.shiftSelection = function(columns) {
+ if (this.$isEmpty) {
+ this.moveCursorTo(this.lead.row, this.lead.column + columns);
+ return;
+ }
+
+ var anchor = this.getSelectionAnchor();
+ var lead = this.getSelectionLead();
+
+ var isBackwards = this.isBackwards();
+
+ if (!isBackwards || anchor.column !== 0)
+ this.setSelectionAnchor(anchor.row, anchor.column + columns);
+
+ if (isBackwards || lead.column !== 0) {
+ this.$moveSelection(function() {
+ this.moveCursorTo(lead.row, lead.column + columns);
+ });
+ }
+ };
+ this.isBackwards = function() {
+ var anchor = this.anchor;
+ var lead = this.lead;
+ return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));
+ };
+ this.getRange = function() {
+ var anchor = this.anchor;
+ var lead = this.lead;
+
+ if (this.isEmpty())
+ return Range.fromPoints(lead, lead);
+
+ if (this.isBackwards()) {
+ return Range.fromPoints(lead, anchor);
+ }
+ else {
+ return Range.fromPoints(anchor, lead);
+ }
+ };
+ this.clearSelection = function() {
+ if (!this.$isEmpty) {
+ this.$isEmpty = true;
+ this._emit("changeSelection");
+ }
+ };
+ this.selectAll = function() {
+ var lastRow = this.doc.getLength() - 1;
+ this.setSelectionAnchor(0, 0);
+ this.moveCursorTo(lastRow, this.doc.getLine(lastRow).length);
+ };
+ this.setRange =
+ this.setSelectionRange = function(range, reverse) {
+ if (reverse) {
+ this.setSelectionAnchor(range.end.row, range.end.column);
+ this.selectTo(range.start.row, range.start.column);
+ } else {
+ this.setSelectionAnchor(range.start.row, range.start.column);
+ this.selectTo(range.end.row, range.end.column);
+ }
+ if (this.getRange().isEmpty())
+ this.$isEmpty = true;
+ this.$desiredColumn = null;
+ };
+
+ this.$moveSelection = function(mover) {
+ var lead = this.lead;
+ if (this.$isEmpty)
+ this.setSelectionAnchor(lead.row, lead.column);
+
+ mover.call(this);
+ };
+ this.selectTo = function(row, column) {
+ this.$moveSelection(function() {
+ this.moveCursorTo(row, column);
+ });
+ };
+ this.selectToPosition = function(pos) {
+ this.$moveSelection(function() {
+ this.moveCursorToPosition(pos);
+ });
+ };
+ this.moveTo = function(row, column) {
+ this.clearSelection();
+ this.moveCursorTo(row, column);
+ };
+ this.moveToPosition = function(pos) {
+ this.clearSelection();
+ this.moveCursorToPosition(pos);
+ };
+ this.selectUp = function() {
+ this.$moveSelection(this.moveCursorUp);
+ };
+ this.selectDown = function() {
+ this.$moveSelection(this.moveCursorDown);
+ };
+ this.selectRight = function() {
+ this.$moveSelection(this.moveCursorRight);
+ };
+ this.selectLeft = function() {
+ this.$moveSelection(this.moveCursorLeft);
+ };
+ this.selectLineStart = function() {
+ this.$moveSelection(this.moveCursorLineStart);
+ };
+ this.selectLineEnd = function() {
+ this.$moveSelection(this.moveCursorLineEnd);
+ };
+ this.selectFileEnd = function() {
+ this.$moveSelection(this.moveCursorFileEnd);
+ };
+ this.selectFileStart = function() {
+ this.$moveSelection(this.moveCursorFileStart);
+ };
+ this.selectWordRight = function() {
+ this.$moveSelection(this.moveCursorWordRight);
+ };
+ this.selectWordLeft = function() {
+ this.$moveSelection(this.moveCursorWordLeft);
+ };
+ this.getWordRange = function(row, column) {
+ if (typeof column == "undefined") {
+ var cursor = row || this.lead;
+ row = cursor.row;
+ column = cursor.column;
+ }
+ return this.session.getWordRange(row, column);
+ };
+ this.selectWord = function() {
+ this.setSelectionRange(this.getWordRange());
+ };
+ this.selectAWord = function() {
+ var cursor = this.getCursor();
+ var range = this.session.getAWordRange(cursor.row, cursor.column);
+ this.setSelectionRange(range);
+ };
+
+ this.getLineRange = function(row, excludeLastChar) {
+ var rowStart = typeof row == "number" ? row : this.lead.row;
+ var rowEnd;
+
+ var foldLine = this.session.getFoldLine(rowStart);
+ if (foldLine) {
+ rowStart = foldLine.start.row;
+ rowEnd = foldLine.end.row;
+ } else {
+ rowEnd = rowStart;
+ }
+ if (excludeLastChar === true)
+ return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);
+ else
+ return new Range(rowStart, 0, rowEnd + 1, 0);
+ };
+ this.selectLine = function() {
+ this.setSelectionRange(this.getLineRange());
+ };
+ this.moveCursorUp = function() {
+ this.moveCursorBy(-1, 0);
+ };
+ this.moveCursorDown = function() {
+ this.moveCursorBy(1, 0);
+ };
+ this.moveCursorLeft = function() {
+ var cursor = this.lead.getPosition(),
+ fold;
+
+ if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {
+ this.moveCursorTo(fold.start.row, fold.start.column);
+ } else if (cursor.column === 0) {
+ if (cursor.row > 0) {
+ this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);
+ }
+ }
+ else {
+ var tabSize = this.session.getTabSize();
+ if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column-tabSize, cursor.column).split(" ").length-1 == tabSize)
+ this.moveCursorBy(0, -tabSize);
+ else
+ this.moveCursorBy(0, -1);
+ }
+ };
+ this.moveCursorRight = function() {
+ var cursor = this.lead.getPosition(),
+ fold;
+ if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {
+ this.moveCursorTo(fold.end.row, fold.end.column);
+ }
+ else if (this.lead.column == this.doc.getLine(this.lead.row).length) {
+ if (this.lead.row < this.doc.getLength() - 1) {
+ this.moveCursorTo(this.lead.row + 1, 0);
+ }
+ }
+ else {
+ var tabSize = this.session.getTabSize();
+ var cursor = this.lead;
+ if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column, cursor.column+tabSize).split(" ").length-1 == tabSize)
+ this.moveCursorBy(0, tabSize);
+ else
+ this.moveCursorBy(0, 1);
+ }
+ };
+ this.moveCursorLineStart = function() {
+ var row = this.lead.row;
+ var column = this.lead.column;
+ var screenRow = this.session.documentToScreenRow(row, column);
+ var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);
+ var beforeCursor = this.session.getDisplayLine(
+ row, null, firstColumnPosition.row,
+ firstColumnPosition.column
+ );
+
+ var leadingSpace = beforeCursor.match(/^\s*/);
+ if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)
+ firstColumnPosition.column += leadingSpace[0].length;
+ this.moveCursorToPosition(firstColumnPosition);
+ };
+ this.moveCursorLineEnd = function() {
+ var lead = this.lead;
+ var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);
+ if (this.lead.column == lineEnd.column) {
+ var line = this.session.getLine(lineEnd.row);
+ if (lineEnd.column == line.length) {
+ var textEnd = line.search(/\s+$/);
+ if (textEnd > 0)
+ lineEnd.column = textEnd;
+ }
+ }
+
+ this.moveCursorTo(lineEnd.row, lineEnd.column);
+ };
+ this.moveCursorFileEnd = function() {
+ var row = this.doc.getLength() - 1;
+ var column = this.doc.getLine(row).length;
+ this.moveCursorTo(row, column);
+ };
+ this.moveCursorFileStart = function() {
+ this.moveCursorTo(0, 0);
+ };
+ this.moveCursorLongWordRight = function() {
+ var row = this.lead.row;
+ var column = this.lead.column;
+ var line = this.doc.getLine(row);
+ var rightOfCursor = line.substring(column);
+
+ var match;
+ this.session.nonTokenRe.lastIndex = 0;
+ this.session.tokenRe.lastIndex = 0;
+ var fold = this.session.getFoldAt(row, column, 1);
+ if (fold) {
+ this.moveCursorTo(fold.end.row, fold.end.column);
+ return;
+ }
+ if (match = this.session.nonTokenRe.exec(rightOfCursor)) {
+ column += this.session.nonTokenRe.lastIndex;
+ this.session.nonTokenRe.lastIndex = 0;
+ rightOfCursor = line.substring(column);
+ }
+ if (column >= line.length) {
+ this.moveCursorTo(row, line.length);
+ this.moveCursorRight();
+ if (row < this.doc.getLength() - 1)
+ this.moveCursorWordRight();
+ return;
+ }
+ if (match = this.session.tokenRe.exec(rightOfCursor)) {
+ column += this.session.tokenRe.lastIndex;
+ this.session.tokenRe.lastIndex = 0;
+ }
+
+ this.moveCursorTo(row, column);
+ };
+ this.moveCursorLongWordLeft = function() {
+ var row = this.lead.row;
+ var column = this.lead.column;
+ var fold;
+ if (fold = this.session.getFoldAt(row, column, -1)) {
+ this.moveCursorTo(fold.start.row, fold.start.column);
+ return;
+ }
+
+ var str = this.session.getFoldStringAt(row, column, -1);
+ if (str == null) {
+ str = this.doc.getLine(row).substring(0, column);
+ }
+
+ var leftOfCursor = lang.stringReverse(str);
+ var match;
+ this.session.nonTokenRe.lastIndex = 0;
+ this.session.tokenRe.lastIndex = 0;
+ if (match = this.session.nonTokenRe.exec(leftOfCursor)) {
+ column -= this.session.nonTokenRe.lastIndex;
+ leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);
+ this.session.nonTokenRe.lastIndex = 0;
+ }
+ if (column <= 0) {
+ this.moveCursorTo(row, 0);
+ this.moveCursorLeft();
+ if (row > 0)
+ this.moveCursorWordLeft();
+ return;
+ }
+ if (match = this.session.tokenRe.exec(leftOfCursor)) {
+ column -= this.session.tokenRe.lastIndex;
+ this.session.tokenRe.lastIndex = 0;
+ }
+
+ this.moveCursorTo(row, column);
+ };
+
+ this.$shortWordEndIndex = function(rightOfCursor) {
+ var match, index = 0, ch;
+ var whitespaceRe = /\s/;
+ var tokenRe = this.session.tokenRe;
+
+ tokenRe.lastIndex = 0;
+ if (match = this.session.tokenRe.exec(rightOfCursor)) {
+ index = this.session.tokenRe.lastIndex;
+ } else {
+ while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))
+ index ++;
+
+ if (index < 1) {
+ tokenRe.lastIndex = 0;
+ while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {
+ tokenRe.lastIndex = 0;
+ index ++;
+ if (whitespaceRe.test(ch)) {
+ if (index > 2) {
+ index--;
+ break;
+ } else {
+ while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))
+ index ++;
+ if (index > 2)
+ break;
+ }
+ }
+ }
+ }
+ }
+ tokenRe.lastIndex = 0;
+
+ return index;
+ };
+
+ this.moveCursorShortWordRight = function() {
+ var row = this.lead.row;
+ var column = this.lead.column;
+ var line = this.doc.getLine(row);
+ var rightOfCursor = line.substring(column);
+
+ var fold = this.session.getFoldAt(row, column, 1);
+ if (fold)
+ return this.moveCursorTo(fold.end.row, fold.end.column);
+
+ if (column == line.length) {
+ var l = this.doc.getLength();
+ do {
+ row++;
+ rightOfCursor = this.doc.getLine(row);
+ } while (row < l && /^\s*$/.test(rightOfCursor));
+
+ if (!/^\s+/.test(rightOfCursor))
+ rightOfCursor = "";
+ column = 0;
+ }
+
+ var index = this.$shortWordEndIndex(rightOfCursor);
+
+ this.moveCursorTo(row, column + index);
+ };
+
+ this.moveCursorShortWordLeft = function() {
+ var row = this.lead.row;
+ var column = this.lead.column;
+
+ var fold;
+ if (fold = this.session.getFoldAt(row, column, -1))
+ return this.moveCursorTo(fold.start.row, fold.start.column);
+
+ var line = this.session.getLine(row).substring(0, column);
+ if (column === 0) {
+ do {
+ row--;
+ line = this.doc.getLine(row);
+ } while (row > 0 && /^\s*$/.test(line));
+
+ column = line.length;
+ if (!/\s+$/.test(line))
+ line = "";
+ }
+
+ var leftOfCursor = lang.stringReverse(line);
+ var index = this.$shortWordEndIndex(leftOfCursor);
+
+ return this.moveCursorTo(row, column - index);
+ };
+
+ this.moveCursorWordRight = function() {
+ if (this.session.$selectLongWords)
+ this.moveCursorLongWordRight();
+ else
+ this.moveCursorShortWordRight();
+ };
+
+ this.moveCursorWordLeft = function() {
+ if (this.session.$selectLongWords)
+ this.moveCursorLongWordLeft();
+ else
+ this.moveCursorShortWordLeft();
+ };
+ this.moveCursorBy = function(rows, chars) {
+ var screenPos = this.session.documentToScreenPosition(
+ this.lead.row,
+ this.lead.column
+ );
+
+ if (chars === 0) {
+ if (this.$desiredColumn)
+ screenPos.column = this.$desiredColumn;
+ else
+ this.$desiredColumn = screenPos.column;
+ }
+
+ var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column);
+
+ if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {
+ if (this.session.lineWidgets && this.session.lineWidgets[docPos.row]) {
+ if (docPos.row > 0 || rows > 0)
+ docPos.row++;
+ }
+ }
+ this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);
+ };
+ this.moveCursorToPosition = function(position) {
+ this.moveCursorTo(position.row, position.column);
+ };
+ this.moveCursorTo = function(row, column, keepDesiredColumn) {
+ var fold = this.session.getFoldAt(row, column, 1);
+ if (fold) {
+ row = fold.start.row;
+ column = fold.start.column;
+ }
+
+ this.$keepDesiredColumnOnChange = true;
+ this.lead.setPosition(row, column);
+ this.$keepDesiredColumnOnChange = false;
+
+ if (!keepDesiredColumn)
+ this.$desiredColumn = null;
+ };
+ this.moveCursorToScreen = function(row, column, keepDesiredColumn) {
+ var pos = this.session.screenToDocumentPosition(row, column);
+ this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);
+ };
+ this.detach = function() {
+ this.lead.detach();
+ this.anchor.detach();
+ this.session = this.doc = null;
+ };
+
+ this.fromOrientedRange = function(range) {
+ this.setSelectionRange(range, range.cursor == range.start);
+ this.$desiredColumn = range.desiredColumn || this.$desiredColumn;
+ };
+
+ this.toOrientedRange = function(range) {
+ var r = this.getRange();
+ if (range) {
+ range.start.column = r.start.column;
+ range.start.row = r.start.row;
+ range.end.column = r.end.column;
+ range.end.row = r.end.row;
+ } else {
+ range = r;
+ }
+
+ range.cursor = this.isBackwards() ? range.start : range.end;
+ range.desiredColumn = this.$desiredColumn;
+ return range;
+ };
+ this.getRangeOfMovements = function(func) {
+ var start = this.getCursor();
+ try {
+ func.call(null, this);
+ var end = this.getCursor();
+ return Range.fromPoints(start,end);
+ } catch(e) {
+ return Range.fromPoints(start,start);
+ } finally {
+ this.moveCursorToPosition(start);
+ }
+ };
+
+ this.toJSON = function() {
+ if (this.rangeCount) {
+ var data = this.ranges.map(function(r) {
+ var r1 = r.clone();
+ r1.isBackwards = r.cursor == r.start;
+ return r1;
+ });
+ } else {
+ var data = this.getRange();
+ data.isBackwards = this.isBackwards();
+ }
+ return data;
+ };
+
+ this.fromJSON = function(data) {
+ if (data.start == undefined) {
+ if (this.rangeList) {
+ this.toSingleRange(data[0]);
+ for (var i = data.length; i--; ) {
+ var r = Range.fromPoints(data[i].start, data[i].end);
+ if (data[i].isBackwards)
+ r.cursor = r.start;
+ this.addRange(r, true);
+ }
+ return;
+ } else
+ data = data[0];
+ }
+ if (this.rangeList)
+ this.toSingleRange(data);
+ this.setSelectionRange(data, data.isBackwards);
+ };
+
+ this.isEqual = function(data) {
+ if ((data.length || this.rangeCount) && data.length != this.rangeCount)
+ return false;
+ if (!data.length || !this.ranges)
+ return this.getRange().isEqual(data);
+
+ for (var i = this.ranges.length; i--; ) {
+ if (!this.ranges[i].isEqual(data[i]))
+ return false;
+ }
+ return true;
+ };
+
+}).call(Selection.prototype);
+
+exports.Selection = Selection;
+});
+
+define("ace/tokenizer",["require","exports","module","ace/config"], function(require, exports, module) {
+"use strict";
+
+var config = require("./config");
+var MAX_TOKEN_COUNT = 2000;
+var Tokenizer = function(rules) {
+ this.states = rules;
+
+ this.regExps = {};
+ this.matchMappings = {};
+ for (var key in this.states) {
+ var state = this.states[key];
+ var ruleRegExps = [];
+ var matchTotal = 0;
+ var mapping = this.matchMappings[key] = {defaultToken: "text"};
+ var flag = "g";
+
+ var splitterRurles = [];
+ for (var i = 0; i < state.length; i++) {
+ var rule = state[i];
+ if (rule.defaultToken)
+ mapping.defaultToken = rule.defaultToken;
+ if (rule.caseInsensitive)
+ flag = "gi";
+ if (rule.regex == null)
+ continue;
+
+ if (rule.regex instanceof RegExp)
+ rule.regex = rule.regex.toString().slice(1, -1);
+ var adjustedregex = rule.regex;
+ var matchcount = new RegExp("(?:(" + adjustedregex + ")|(.))").exec("a").length - 2;
+ if (Array.isArray(rule.token)) {
+ if (rule.token.length == 1 || matchcount == 1) {
+ rule.token = rule.token[0];
+ } else if (matchcount - 1 != rule.token.length) {
+ this.reportError("number of classes and regexp groups doesn't match", {
+ rule: rule,
+ groupCount: matchcount - 1
+ });
+ rule.token = rule.token[0];
+ } else {
+ rule.tokenArray = rule.token;
+ rule.token = null;
+ rule.onMatch = this.$arrayTokens;
+ }
+ } else if (typeof rule.token == "function" && !rule.onMatch) {
+ if (matchcount > 1)
+ rule.onMatch = this.$applyToken;
+ else
+ rule.onMatch = rule.token;
+ }
+
+ if (matchcount > 1) {
+ if (/\\\d/.test(rule.regex)) {
+ adjustedregex = rule.regex.replace(/\\([0-9]+)/g, function(match, digit) {
+ return "\\" + (parseInt(digit, 10) + matchTotal + 1);
+ });
+ } else {
+ matchcount = 1;
+ adjustedregex = this.removeCapturingGroups(rule.regex);
+ }
+ if (!rule.splitRegex && typeof rule.token != "string")
+ splitterRurles.push(rule); // flag will be known only at the very end
+ }
+
+ mapping[matchTotal] = i;
+ matchTotal += matchcount;
+
+ ruleRegExps.push(adjustedregex);
+ if (!rule.onMatch)
+ rule.onMatch = null;
+ }
+
+ if (!ruleRegExps.length) {
+ mapping[0] = 0;
+ ruleRegExps.push("$");
+ }
+
+ splitterRurles.forEach(function(rule) {
+ rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);
+ }, this);
+
+ this.regExps[key] = new RegExp("(" + ruleRegExps.join(")|(") + ")|($)", flag);
+ }
+};
+
+(function() {
+ this.$setMaxTokenCount = function(m) {
+ MAX_TOKEN_COUNT = m | 0;
+ };
+
+ this.$applyToken = function(str) {
+ var values = this.splitRegex.exec(str).slice(1);
+ var types = this.token.apply(this, values);
+ if (typeof types === "string")
+ return [{type: types, value: str}];
+
+ var tokens = [];
+ for (var i = 0, l = types.length; i < l; i++) {
+ if (values[i])
+ tokens[tokens.length] = {
+ type: types[i],
+ value: values[i]
+ };
+ }
+ return tokens;
+ },
+
+ this.$arrayTokens = function(str) {
+ if (!str)
+ return [];
+ var values = this.splitRegex.exec(str);
+ if (!values)
+ return "text";
+ var tokens = [];
+ var types = this.tokenArray;
+ for (var i = 0, l = types.length; i < l; i++) {
+ if (values[i + 1])
+ tokens[tokens.length] = {
+ type: types[i],
+ value: values[i + 1]
+ };
+ }
+ return tokens;
+ };
+
+ this.removeCapturingGroups = function(src) {
+ var r = src.replace(
+ /\[(?:\\.|[^\]])*?\]|\\.|\(\?[:=!]|(\()/g,
+ function(x, y) {return y ? "(?:" : x;}
+ );
+ return r;
+ };
+
+ this.createSplitterRegexp = function(src, flag) {
+ if (src.indexOf("(?=") != -1) {
+ var stack = 0;
+ var inChClass = false;
+ var lastCapture = {};
+ src.replace(/(\\.)|(\((?:\?[=!])?)|(\))|([\[\]])/g, function(
+ m, esc, parenOpen, parenClose, square, index
+ ) {
+ if (inChClass) {
+ inChClass = square != "]";
+ } else if (square) {
+ inChClass = true;
+ } else if (parenClose) {
+ if (stack == lastCapture.stack) {
+ lastCapture.end = index+1;
+ lastCapture.stack = -1;
+ }
+ stack--;
+ } else if (parenOpen) {
+ stack++;
+ if (parenOpen.length != 1) {
+ lastCapture.stack = stack
+ lastCapture.start = index;
+ }
+ }
+ return m;
+ });
+
+ if (lastCapture.end != null && /^\)*$/.test(src.substr(lastCapture.end)))
+ src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);
+ }
+ if (src.charAt(0) != "^") src = "^" + src;
+ if (src.charAt(src.length - 1) != "$") src += "$";
+
+ return new RegExp(src, (flag||"").replace("g", ""));
+ };
+ this.getLineTokens = function(line, startState) {
+ if (startState && typeof startState != "string") {
+ var stack = startState.slice(0);
+ startState = stack[0];
+ if (startState === "#tmp") {
+ stack.shift()
+ startState = stack.shift()
+ }
+ } else
+ var stack = [];
+
+ var currentState = startState || "start";
+ var state = this.states[currentState];
+ if (!state) {
+ currentState = "start";
+ state = this.states[currentState];
+ }
+ var mapping = this.matchMappings[currentState];
+ var re = this.regExps[currentState];
+ re.lastIndex = 0;
+
+ var match, tokens = [];
+ var lastIndex = 0;
+ var matchAttempts = 0;
+
+ var token = {type: null, value: ""};
+
+ while (match = re.exec(line)) {
+ var type = mapping.defaultToken;
+ var rule = null;
+ var value = match[0];
+ var index = re.lastIndex;
+
+ if (index - value.length > lastIndex) {
+ var skipped = line.substring(lastIndex, index - value.length);
+ if (token.type == type) {
+ token.value += skipped;
+ } else {
+ if (token.type)
+ tokens.push(token);
+ token = {type: type, value: skipped};
+ }
+ }
+
+ for (var i = 0; i < match.length-2; i++) {
+ if (match[i + 1] === undefined)
+ continue;
+
+ rule = state[mapping[i]];
+
+ if (rule.onMatch)
+ type = rule.onMatch(value, currentState, stack);
+ else
+ type = rule.token;
+
+ if (rule.next) {
+ if (typeof rule.next == "string") {
+ currentState = rule.next;
+ } else {
+ currentState = rule.next(currentState, stack);
+ }
+
+ state = this.states[currentState];
+ if (!state) {
+ this.reportError("state doesn't exist", currentState);
+ currentState = "start";
+ state = this.states[currentState];
+ }
+ mapping = this.matchMappings[currentState];
+ lastIndex = index;
+ re = this.regExps[currentState];
+ re.lastIndex = index;
+ }
+ break;
+ }
+
+ if (value) {
+ if (typeof type === "string") {
+ if ((!rule || rule.merge !== false) && token.type === type) {
+ token.value += value;
+ } else {
+ if (token.type)
+ tokens.push(token);
+ token = {type: type, value: value};
+ }
+ } else if (type) {
+ if (token.type)
+ tokens.push(token);
+ token = {type: null, value: ""};
+ for (var i = 0; i < type.length; i++)
+ tokens.push(type[i]);
+ }
+ }
+
+ if (lastIndex == line.length)
+ break;
+
+ lastIndex = index;
+
+ if (matchAttempts++ > MAX_TOKEN_COUNT) {
+ if (matchAttempts > 2 * line.length) {
+ this.reportError("infinite loop with in ace tokenizer", {
+ startState: startState,
+ line: line
+ });
+ }
+ while (lastIndex < line.length) {
+ if (token.type)
+ tokens.push(token);
+ token = {
+ value: line.substring(lastIndex, lastIndex += 2000),
+ type: "overflow"
+ };
+ }
+ currentState = "start";
+ stack = [];
+ break;
+ }
+ }
+
+ if (token.type)
+ tokens.push(token);
+
+ if (stack.length > 1) {
+ if (stack[0] !== currentState)
+ stack.unshift("#tmp", currentState);
+ }
+ return {
+ tokens : tokens,
+ state : stack.length ? stack : currentState
+ };
+ };
+
+ this.reportError = config.reportError;
+
+}).call(Tokenizer.prototype);
+
+exports.Tokenizer = Tokenizer;
+});
+
+define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"], function(require, exports, module) {
+"use strict";
+
+var lang = require("../lib/lang");
+
+var TextHighlightRules = function() {
+
+ this.$rules = {
+ "start" : [{
+ token : "empty_line",
+ regex : '^$'
+ }, {
+ defaultToken : "text"
+ }]
+ };
+};
+
+(function() {
+
+ this.addRules = function(rules, prefix) {
+ if (!prefix) {
+ for (var key in rules)
+ this.$rules[key] = rules[key];
+ return;
+ }
+ for (var key in rules) {
+ var state = rules[key];
+ for (var i = 0; i < state.length; i++) {
+ var rule = state[i];
+ if (rule.next || rule.onMatch) {
+ if (typeof rule.next == "string") {
+ if (rule.next.indexOf(prefix) !== 0)
+ rule.next = prefix + rule.next;
+ }
+ if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)
+ rule.nextState = prefix + rule.nextState;
+ }
+ }
+ this.$rules[prefix + key] = state;
+ }
+ };
+
+ this.getRules = function() {
+ return this.$rules;
+ };
+
+ this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {
+ var embedRules = typeof HighlightRules == "function"
+ ? new HighlightRules().getRules()
+ : HighlightRules;
+ if (states) {
+ for (var i = 0; i < states.length; i++)
+ states[i] = prefix + states[i];
+ } else {
+ states = [];
+ for (var key in embedRules)
+ states.push(prefix + key);
+ }
+
+ this.addRules(embedRules, prefix);
+
+ if (escapeRules) {
+ var addRules = Array.prototype[append ? "push" : "unshift"];
+ for (var i = 0; i < states.length; i++)
+ addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules));
+ }
+
+ if (!this.$embeds)
+ this.$embeds = [];
+ this.$embeds.push(prefix);
+ };
+
+ this.getEmbeds = function() {
+ return this.$embeds;
+ };
+
+ var pushState = function(currentState, stack) {
+ if (currentState != "start" || stack.length)
+ stack.unshift(this.nextState, currentState);
+ return this.nextState;
+ };
+ var popState = function(currentState, stack) {
+ stack.shift();
+ return stack.shift() || "start";
+ };
+
+ this.normalizeRules = function() {
+ var id = 0;
+ var rules = this.$rules;
+ function processState(key) {
+ var state = rules[key];
+ state.processed = true;
+ for (var i = 0; i < state.length; i++) {
+ var rule = state[i];
+ if (!rule.regex && rule.start) {
+ rule.regex = rule.start;
+ if (!rule.next)
+ rule.next = [];
+ rule.next.push({
+ defaultToken: rule.token
+ }, {
+ token: rule.token + ".end",
+ regex: rule.end || rule.start,
+ next: "pop"
+ });
+ rule.token = rule.token + ".start";
+ rule.push = true;
+ }
+ var next = rule.next || rule.push;
+ if (next && Array.isArray(next)) {
+ var stateName = rule.stateName;
+ if (!stateName) {
+ stateName = rule.token;
+ if (typeof stateName != "string")
+ stateName = stateName[0] || "";
+ if (rules[stateName])
+ stateName += id++;
+ }
+ rules[stateName] = next;
+ rule.next = stateName;
+ processState(stateName);
+ } else if (next == "pop") {
+ rule.next = popState;
+ }
+
+ if (rule.push) {
+ rule.nextState = rule.next || rule.push;
+ rule.next = pushState;
+ delete rule.push;
+ }
+
+ if (rule.rules) {
+ for (var r in rule.rules) {
+ if (rules[r]) {
+ if (rules[r].push)
+ rules[r].push.apply(rules[r], rule.rules[r]);
+ } else {
+ rules[r] = rule.rules[r];
+ }
+ }
+ }
+ if (rule.include || typeof rule == "string") {
+ var includeName = rule.include || rule;
+ var toInsert = rules[includeName];
+ } else if (Array.isArray(rule))
+ toInsert = rule;
+
+ if (toInsert) {
+ var args = [i, 1].concat(toInsert);
+ if (rule.noEscape)
+ args = args.filter(function(x) {return !x.next;});
+ state.splice.apply(state, args);
+ i--;
+ toInsert = null;
+ }
+
+ if (rule.keywordMap) {
+ rule.token = this.createKeywordMapper(
+ rule.keywordMap, rule.defaultToken || "text", rule.caseInsensitive
+ );
+ delete rule.defaultToken;
+ }
+ }
+ }
+ Object.keys(rules).forEach(processState, this);
+ };
+
+ this.createKeywordMapper = function(map, defaultToken, ignoreCase, splitChar) {
+ var keywords = Object.create(null);
+ Object.keys(map).forEach(function(className) {
+ var a = map[className];
+ if (ignoreCase)
+ a = a.toLowerCase();
+ var list = a.split(splitChar || "|");
+ for (var i = list.length; i--; )
+ keywords[list[i]] = className;
+ });
+ if (Object.getPrototypeOf(keywords)) {
+ keywords.__proto__ = null;
+ }
+ this.$keywordList = Object.keys(keywords);
+ map = null;
+ return ignoreCase
+ ? function(value) {return keywords[value.toLowerCase()] || defaultToken }
+ : function(value) {return keywords[value] || defaultToken };
+ };
+
+ this.getKeywords = function() {
+ return this.$keywords;
+ };
+
+}).call(TextHighlightRules.prototype);
+
+exports.TextHighlightRules = TextHighlightRules;
+});
+
+define("ace/mode/behaviour",["require","exports","module"], function(require, exports, module) {
+"use strict";
+
+var Behaviour = function() {
+ this.$behaviours = {};
+};
+
+(function () {
+
+ this.add = function (name, action, callback) {
+ switch (undefined) {
+ case this.$behaviours:
+ this.$behaviours = {};
+ case this.$behaviours[name]:
+ this.$behaviours[name] = {};
+ }
+ this.$behaviours[name][action] = callback;
+ }
+
+ this.addBehaviours = function (behaviours) {
+ for (var key in behaviours) {
+ for (var action in behaviours[key]) {
+ this.add(key, action, behaviours[key][action]);
+ }
+ }
+ }
+
+ this.remove = function (name) {
+ if (this.$behaviours && this.$behaviours[name]) {
+ delete this.$behaviours[name];
+ }
+ }
+
+ this.inherit = function (mode, filter) {
+ if (typeof mode === "function") {
+ var behaviours = new mode().getBehaviours(filter);
+ } else {
+ var behaviours = mode.getBehaviours(filter);
+ }
+ this.addBehaviours(behaviours);
+ }
+
+ this.getBehaviours = function (filter) {
+ if (!filter) {
+ return this.$behaviours;
+ } else {
+ var ret = {}
+ for (var i = 0; i < filter.length; i++) {
+ if (this.$behaviours[filter[i]]) {
+ ret[filter[i]] = this.$behaviours[filter[i]];
+ }
+ }
+ return ret;
+ }
+ }
+
+}).call(Behaviour.prototype);
+
+exports.Behaviour = Behaviour;
+});
+
+define("ace/unicode",["require","exports","module"], function(require, exports, module) {
+"use strict";
+exports.packages = {};
+
+addUnicodePackage({
+ L: "0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",
+ Ll: "0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A",
+ Lu: "0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A",
+ Lt: "01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC",
+ Lm: "02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F",
+ Lo: "01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",
+ M: "0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26",
+ Mn: "0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26",
+ Mc: "0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC",
+ Me: "0488048906DE20DD-20E020E2-20E4A670-A672",
+ N: "0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",
+ Nd: "0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",
+ Nl: "16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF",
+ No: "00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835",
+ P: "0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65",
+ Pd: "002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D",
+ Ps: "0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62",
+ Pe: "0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63",
+ Pi: "00AB2018201B201C201F20392E022E042E092E0C2E1C2E20",
+ Pf: "00BB2019201D203A2E032E052E0A2E0D2E1D2E21",
+ Pc: "005F203F20402054FE33FE34FE4D-FE4FFF3F",
+ Po: "0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65",
+ S: "0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD",
+ Sm: "002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC",
+ Sc: "002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6",
+ Sk: "005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3",
+ So: "00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD",
+ Z: "002000A01680180E2000-200A20282029202F205F3000",
+ Zs: "002000A01680180E2000-200A202F205F3000",
+ Zl: "2028",
+ Zp: "2029",
+ C: "0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF",
+ Cc: "0000-001F007F-009F",
+ Cf: "00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB",
+ Co: "E000-F8FF",
+ Cs: "D800-DFFF",
+ Cn: "03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF"
+});
+
+function addUnicodePackage (pack) {
+ var codePoint = /\w{4}/g;
+ for (var name in pack)
+ exports.packages[name] = pack[name].replace(codePoint, "\\u$&");
+};
+
+});
+
+define("ace/token_iterator",["require","exports","module"], function(require, exports, module) {
+"use strict";
+var TokenIterator = function(session, initialRow, initialColumn) {
+ this.$session = session;
+ this.$row = initialRow;
+ this.$rowTokens = session.getTokens(initialRow);
+
+ var token = session.getTokenAt(initialRow, initialColumn);
+ this.$tokenIndex = token ? token.index : -1;
+};
+
+(function() {
+ this.stepBackward = function() {
+ this.$tokenIndex -= 1;
+
+ while (this.$tokenIndex < 0) {
+ this.$row -= 1;
+ if (this.$row < 0) {
+ this.$row = 0;
+ return null;
+ }
+
+ this.$rowTokens = this.$session.getTokens(this.$row);
+ this.$tokenIndex = this.$rowTokens.length - 1;
+ }
+
+ return this.$rowTokens[this.$tokenIndex];
+ };
+ this.stepForward = function() {
+ this.$tokenIndex += 1;
+ var rowCount;
+ while (this.$tokenIndex >= this.$rowTokens.length) {
+ this.$row += 1;
+ if (!rowCount)
+ rowCount = this.$session.getLength();
+ if (this.$row >= rowCount) {
+ this.$row = rowCount - 1;
+ return null;
+ }
+
+ this.$rowTokens = this.$session.getTokens(this.$row);
+ this.$tokenIndex = 0;
+ }
+
+ return this.$rowTokens[this.$tokenIndex];
+ };
+ this.getCurrentToken = function () {
+ return this.$rowTokens[this.$tokenIndex];
+ };
+ this.getCurrentTokenRow = function () {
+ return this.$row;
+ };
+ this.getCurrentTokenColumn = function() {
+ var rowTokens = this.$rowTokens;
+ var tokenIndex = this.$tokenIndex;
+ var column = rowTokens[tokenIndex].start;
+ if (column !== undefined)
+ return column;
+
+ column = 0;
+ while (tokenIndex > 0) {
+ tokenIndex -= 1;
+ column += rowTokens[tokenIndex].value.length;
+ }
+
+ return column;
+ };
+ this.getCurrentTokenPosition = function() {
+ return {row: this.$row, column: this.getCurrentTokenColumn()};
+ };
+
+}).call(TokenIterator.prototype);
+
+exports.TokenIterator = TokenIterator;
+});
+
+define("ace/mode/text",["require","exports","module","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour","ace/unicode","ace/lib/lang","ace/token_iterator","ace/range"], function(require, exports, module) {
+"use strict";
+
+var Tokenizer = require("../tokenizer").Tokenizer;
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+var Behaviour = require("./behaviour").Behaviour;
+var unicode = require("../unicode");
+var lang = require("../lib/lang");
+var TokenIterator = require("../token_iterator").TokenIterator;
+var Range = require("../range").Range;
+
+var Mode = function() {
+ this.HighlightRules = TextHighlightRules;
+ this.$behaviour = new Behaviour();
+};
+
+(function() {
+
+ this.tokenRe = new RegExp("^["
+ + unicode.packages.L
+ + unicode.packages.Mn + unicode.packages.Mc
+ + unicode.packages.Nd
+ + unicode.packages.Pc + "\\$_]+", "g"
+ );
+
+ this.nonTokenRe = new RegExp("^(?:[^"
+ + unicode.packages.L
+ + unicode.packages.Mn + unicode.packages.Mc
+ + unicode.packages.Nd
+ + unicode.packages.Pc + "\\$_]|\\s])+", "g"
+ );
+
+ this.getTokenizer = function() {
+ if (!this.$tokenizer) {
+ this.$highlightRules = this.$highlightRules || new this.HighlightRules();
+ this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());
+ }
+ return this.$tokenizer;
+ };
+
+ this.lineCommentStart = "";
+ this.blockComment = "";
+
+ this.toggleCommentLines = function(state, session, startRow, endRow) {
+ var doc = session.doc;
+
+ var ignoreBlankLines = true;
+ var shouldRemove = true;
+ var minIndent = Infinity;
+ var tabSize = session.getTabSize();
+ var insertAtTabStop = false;
+
+ if (!this.lineCommentStart) {
+ if (!this.blockComment)
+ return false;
+ var lineCommentStart = this.blockComment.start;
+ var lineCommentEnd = this.blockComment.end;
+ var regexpStart = new RegExp("^(\\s*)(?:" + lang.escapeRegExp(lineCommentStart) + ")");
+ var regexpEnd = new RegExp("(?:" + lang.escapeRegExp(lineCommentEnd) + ")\\s*$");
+
+ var comment = function(line, i) {
+ if (testRemove(line, i))
+ return;
+ if (!ignoreBlankLines || /\S/.test(line)) {
+ doc.insertInLine({row: i, column: line.length}, lineCommentEnd);
+ doc.insertInLine({row: i, column: minIndent}, lineCommentStart);
+ }
+ };
+
+ var uncomment = function(line, i) {
+ var m;
+ if (m = line.match(regexpEnd))
+ doc.removeInLine(i, line.length - m[0].length, line.length);
+ if (m = line.match(regexpStart))
+ doc.removeInLine(i, m[1].length, m[0].length);
+ };
+
+ var testRemove = function(line, row) {
+ if (regexpStart.test(line))
+ return true;
+ var tokens = session.getTokens(row);
+ for (var i = 0; i < tokens.length; i++) {
+ if (tokens[i].type === 'comment')
+ return true;
+ }
+ };
+ } else {
+ if (Array.isArray(this.lineCommentStart)) {
+ var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join("|");
+ var lineCommentStart = this.lineCommentStart[0];
+ } else {
+ var regexpStart = lang.escapeRegExp(this.lineCommentStart);
+ var lineCommentStart = this.lineCommentStart;
+ }
+ regexpStart = new RegExp("^(\\s*)(?:" + regexpStart + ") ?");
+
+ insertAtTabStop = session.getUseSoftTabs();
+
+ var uncomment = function(line, i) {
+ var m = line.match(regexpStart);
+ if (!m) return;
+ var start = m[1].length, end = m[0].length;
+ if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == " ")
+ end--;
+ doc.removeInLine(i, start, end);
+ };
+ var commentWithSpace = lineCommentStart + " ";
+ var comment = function(line, i) {
+ if (!ignoreBlankLines || /\S/.test(line)) {
+ if (shouldInsertSpace(line, minIndent, minIndent))
+ doc.insertInLine({row: i, column: minIndent}, commentWithSpace);
+ else
+ doc.insertInLine({row: i, column: minIndent}, lineCommentStart);
+ }
+ };
+ var testRemove = function(line, i) {
+ return regexpStart.test(line);
+ };
+
+ var shouldInsertSpace = function(line, before, after) {
+ var spaces = 0;
+ while (before-- && line.charAt(before) == " ")
+ spaces++;
+ if (spaces % tabSize != 0)
+ return false;
+ var spaces = 0;
+ while (line.charAt(after++) == " ")
+ spaces++;
+ if (tabSize > 2)
+ return spaces % tabSize != tabSize - 1;
+ else
+ return spaces % tabSize == 0;
+ return true;
+ };
+ }
+
+ function iter(fun) {
+ for (var i = startRow; i <= endRow; i++)
+ fun(doc.getLine(i), i);
+ }
+
+
+ var minEmptyLength = Infinity;
+ iter(function(line, i) {
+ var indent = line.search(/\S/);
+ if (indent !== -1) {
+ if (indent < minIndent)
+ minIndent = indent;
+ if (shouldRemove && !testRemove(line, i))
+ shouldRemove = false;
+ } else if (minEmptyLength > line.length) {
+ minEmptyLength = line.length;
+ }
+ });
+
+ if (minIndent == Infinity) {
+ minIndent = minEmptyLength;
+ ignoreBlankLines = false;
+ shouldRemove = false;
+ }
+
+ if (insertAtTabStop && minIndent % tabSize != 0)
+ minIndent = Math.floor(minIndent / tabSize) * tabSize;
+
+ iter(shouldRemove ? uncomment : comment);
+ };
+
+ this.toggleBlockComment = function(state, session, range, cursor) {
+ var comment = this.blockComment;
+ if (!comment)
+ return;
+ if (!comment.start && comment[0])
+ comment = comment[0];
+
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
+ var token = iterator.getCurrentToken();
+
+ var sel = session.selection;
+ var initialRange = session.selection.toOrientedRange();
+ var startRow, colDiff;
+
+ if (token && /comment/.test(token.type)) {
+ var startRange, endRange;
+ while (token && /comment/.test(token.type)) {
+ var i = token.value.indexOf(comment.start);
+ if (i != -1) {
+ var row = iterator.getCurrentTokenRow();
+ var column = iterator.getCurrentTokenColumn() + i;
+ startRange = new Range(row, column, row, column + comment.start.length);
+ break;
+ }
+ token = iterator.stepBackward();
+ }
+
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
+ var token = iterator.getCurrentToken();
+ while (token && /comment/.test(token.type)) {
+ var i = token.value.indexOf(comment.end);
+ if (i != -1) {
+ var row = iterator.getCurrentTokenRow();
+ var column = iterator.getCurrentTokenColumn() + i;
+ endRange = new Range(row, column, row, column + comment.end.length);
+ break;
+ }
+ token = iterator.stepForward();
+ }
+ if (endRange)
+ session.remove(endRange);
+ if (startRange) {
+ session.remove(startRange);
+ startRow = startRange.start.row;
+ colDiff = -comment.start.length;
+ }
+ } else {
+ colDiff = comment.start.length;
+ startRow = range.start.row;
+ session.insert(range.end, comment.end);
+ session.insert(range.start, comment.start);
+ }
+ if (initialRange.start.row == startRow)
+ initialRange.start.column += colDiff;
+ if (initialRange.end.row == startRow)
+ initialRange.end.column += colDiff;
+ session.selection.fromOrientedRange(initialRange);
+ };
+
+ this.getNextLineIndent = function(state, line, tab) {
+ return this.$getIndent(line);
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return false;
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ };
+
+ this.$getIndent = function(line) {
+ return line.match(/^\s*/)[0];
+ };
+
+ this.createWorker = function(session) {
+ return null;
+ };
+
+ this.createModeDelegates = function (mapping) {
+ this.$embeds = [];
+ this.$modes = {};
+ for (var i in mapping) {
+ if (mapping[i]) {
+ this.$embeds.push(i);
+ this.$modes[i] = new mapping[i]();
+ }
+ }
+
+ var delegations = ['toggleBlockComment', 'toggleCommentLines', 'getNextLineIndent',
+ 'checkOutdent', 'autoOutdent', 'transformAction', 'getCompletions'];
+
+ for (var i = 0; i < delegations.length; i++) {
+ (function(scope) {
+ var functionName = delegations[i];
+ var defaultHandler = scope[functionName];
+ scope[delegations[i]] = function() {
+ return this.$delegator(functionName, arguments, defaultHandler);
+ };
+ } (this));
+ }
+ };
+
+ this.$delegator = function(method, args, defaultHandler) {
+ var state = args[0];
+ if (typeof state != "string")
+ state = state[0];
+ for (var i = 0; i < this.$embeds.length; i++) {
+ if (!this.$modes[this.$embeds[i]]) continue;
+
+ var split = state.split(this.$embeds[i]);
+ if (!split[0] && split[1]) {
+ args[0] = split[1];
+ var mode = this.$modes[this.$embeds[i]];
+ return mode[method].apply(mode, args);
+ }
+ }
+ var ret = defaultHandler.apply(this, args);
+ return defaultHandler ? ret : undefined;
+ };
+
+ this.transformAction = function(state, action, editor, session, param) {
+ if (this.$behaviour) {
+ var behaviours = this.$behaviour.getBehaviours();
+ for (var key in behaviours) {
+ if (behaviours[key][action]) {
+ var ret = behaviours[key][action].apply(this, arguments);
+ if (ret) {
+ return ret;
+ }
+ }
+ }
+ }
+ };
+
+ this.getKeywords = function(append) {
+ if (!this.completionKeywords) {
+ var rules = this.$tokenizer.rules;
+ var completionKeywords = [];
+ for (var rule in rules) {
+ var ruleItr = rules[rule];
+ for (var r = 0, l = ruleItr.length; r < l; r++) {
+ if (typeof ruleItr[r].token === "string") {
+ if (/keyword|support|storage/.test(ruleItr[r].token))
+ completionKeywords.push(ruleItr[r].regex);
+ }
+ else if (typeof ruleItr[r].token === "object") {
+ for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) {
+ if (/keyword|support|storage/.test(ruleItr[r].token[a])) {
+ var rule = ruleItr[r].regex.match(/\(.+?\)/g)[a];
+ completionKeywords.push(rule.substr(1, rule.length - 2));
+ }
+ }
+ }
+ }
+ }
+ this.completionKeywords = completionKeywords;
+ }
+ if (!append)
+ return this.$keywordList;
+ return completionKeywords.concat(this.$keywordList || []);
+ };
+
+ this.$createKeywordList = function() {
+ if (!this.$highlightRules)
+ this.getTokenizer();
+ return this.$keywordList = this.$highlightRules.$keywordList || [];
+ };
+
+ this.getCompletions = function(state, session, pos, prefix) {
+ var keywords = this.$keywordList || this.$createKeywordList();
+ return keywords.map(function(word) {
+ return {
+ name: word,
+ value: word,
+ score: 0,
+ meta: "keyword"
+ };
+ });
+ };
+
+ this.$id = "ace/mode/text";
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+
+define("ace/apply_delta",["require","exports","module"], function(require, exports, module) {
+"use strict";
+
+function throwDeltaError(delta, errorText){
+ console.log("Invalid Delta:", delta);
+ throw "Invalid Delta: " + errorText;
+}
+
+function positionInDocument(docLines, position) {
+ return position.row >= 0 && position.row < docLines.length &&
+ position.column >= 0 && position.column <= docLines[position.row].length;
+}
+
+function validateDelta(docLines, delta) {
+ if (delta.action != "insert" && delta.action != "remove")
+ throwDeltaError(delta, "delta.action must be 'insert' or 'remove'");
+ if (!(delta.lines instanceof Array))
+ throwDeltaError(delta, "delta.lines must be an Array");
+ if (!delta.start || !delta.end)
+ throwDeltaError(delta, "delta.start/end must be an present");
+ var start = delta.start;
+ if (!positionInDocument(docLines, delta.start))
+ throwDeltaError(delta, "delta.start must be contained in document");
+ var end = delta.end;
+ if (delta.action == "remove" && !positionInDocument(docLines, end))
+ throwDeltaError(delta, "delta.end must contained in document for 'remove' actions");
+ var numRangeRows = end.row - start.row;
+ var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));
+ if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)
+ throwDeltaError(delta, "delta.range must match delta lines");
+}
+
+exports.applyDelta = function(docLines, delta, doNotValidate) {
+
+ var row = delta.start.row;
+ var startColumn = delta.start.column;
+ var line = docLines[row] || "";
+ switch (delta.action) {
+ case "insert":
+ var lines = delta.lines;
+ if (lines.length === 1) {
+ docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);
+ } else {
+ var args = [row, 1].concat(delta.lines);
+ docLines.splice.apply(docLines, args);
+ docLines[row] = line.substring(0, startColumn) + docLines[row];
+ docLines[row + delta.lines.length - 1] += line.substring(startColumn);
+ }
+ break;
+ case "remove":
+ var endColumn = delta.end.column;
+ var endRow = delta.end.row;
+ if (row === endRow) {
+ docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);
+ } else {
+ docLines.splice(
+ row, endRow - row + 1,
+ line.substring(0, startColumn) + docLines[endRow].substring(endColumn)
+ );
+ }
+ break;
+ }
+}
+});
+
+define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module) {
+"use strict";
+
+var oop = require("./lib/oop");
+var EventEmitter = require("./lib/event_emitter").EventEmitter;
+
+var Anchor = exports.Anchor = function(doc, row, column) {
+ this.$onChange = this.onChange.bind(this);
+ this.attach(doc);
+
+ if (typeof column == "undefined")
+ this.setPosition(row.row, row.column);
+ else
+ this.setPosition(row, column);
+};
+
+(function() {
+
+ oop.implement(this, EventEmitter);
+ this.getPosition = function() {
+ return this.$clipPositionToDocument(this.row, this.column);
+ };
+ this.getDocument = function() {
+ return this.document;
+ };
+ this.$insertRight = false;
+ this.onChange = function(delta) {
+ if (delta.start.row == delta.end.row && delta.start.row != this.row)
+ return;
+
+ if (delta.start.row > this.row)
+ return;
+
+ var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);
+ this.setPosition(point.row, point.column, true);
+ };
+
+ function $pointsInOrder(point1, point2, equalPointsInOrder) {
+ var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;
+ return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);
+ }
+
+ function $getTransformedPoint(delta, point, moveIfEqual) {
+ var deltaIsInsert = delta.action == "insert";
+ var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);
+ var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);
+ var deltaStart = delta.start;
+ var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.
+ if ($pointsInOrder(point, deltaStart, moveIfEqual)) {
+ return {
+ row: point.row,
+ column: point.column
+ };
+ }
+ if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {
+ return {
+ row: point.row + deltaRowShift,
+ column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)
+ };
+ }
+
+ return {
+ row: deltaStart.row,
+ column: deltaStart.column
+ };
+ }
+ this.setPosition = function(row, column, noClip) {
+ var pos;
+ if (noClip) {
+ pos = {
+ row: row,
+ column: column
+ };
+ } else {
+ pos = this.$clipPositionToDocument(row, column);
+ }
+
+ if (this.row == pos.row && this.column == pos.column)
+ return;
+
+ var old = {
+ row: this.row,
+ column: this.column
+ };
+
+ this.row = pos.row;
+ this.column = pos.column;
+ this._signal("change", {
+ old: old,
+ value: pos
+ });
+ };
+ this.detach = function() {
+ this.document.removeEventListener("change", this.$onChange);
+ };
+ this.attach = function(doc) {
+ this.document = doc || this.document;
+ this.document.on("change", this.$onChange);
+ };
+ this.$clipPositionToDocument = function(row, column) {
+ var pos = {};
+
+ if (row >= this.document.getLength()) {
+ pos.row = Math.max(0, this.document.getLength() - 1);
+ pos.column = this.document.getLine(pos.row).length;
+ }
+ else if (row < 0) {
+ pos.row = 0;
+ pos.column = 0;
+ }
+ else {
+ pos.row = row;
+ pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));
+ }
+
+ if (column < 0)
+ pos.column = 0;
+
+ return pos;
+ };
+
+}).call(Anchor.prototype);
+
+});
+
+define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module) {
+"use strict";
+
+var oop = require("./lib/oop");
+var applyDelta = require("./apply_delta").applyDelta;
+var EventEmitter = require("./lib/event_emitter").EventEmitter;
+var Range = require("./range").Range;
+var Anchor = require("./anchor").Anchor;
+
+var Document = function(textOrLines) {
+ this.$lines = [""];
+ if (textOrLines.length === 0) {
+ this.$lines = [""];
+ } else if (Array.isArray(textOrLines)) {
+ this.insertMergedLines({row: 0, column: 0}, textOrLines);
+ } else {
+ this.insert({row: 0, column:0}, textOrLines);
+ }
+};
+
+(function() {
+
+ oop.implement(this, EventEmitter);
+ this.setValue = function(text) {
+ var len = this.getLength() - 1;
+ this.remove(new Range(0, 0, len, this.getLine(len).length));
+ this.insert({row: 0, column: 0}, text);
+ };
+ this.getValue = function() {
+ return this.getAllLines().join(this.getNewLineCharacter());
+ };
+ this.createAnchor = function(row, column) {
+ return new Anchor(this, row, column);
+ };
+ if ("aaa".split(/a/).length === 0) {
+ this.$split = function(text) {
+ return text.replace(/\r\n|\r/g, "\n").split("\n");
+ };
+ } else {
+ this.$split = function(text) {
+ return text.split(/\r\n|\r|\n/);
+ };
+ }
+
+
+ this.$detectNewLine = function(text) {
+ var match = text.match(/^.*?(\r\n|\r|\n)/m);
+ this.$autoNewLine = match ? match[1] : "\n";
+ this._signal("changeNewLineMode");
+ };
+ this.getNewLineCharacter = function() {
+ switch (this.$newLineMode) {
+ case "windows":
+ return "\r\n";
+ case "unix":
+ return "\n";
+ default:
+ return this.$autoNewLine || "\n";
+ }
+ };
+
+ this.$autoNewLine = "";
+ this.$newLineMode = "auto";
+ this.setNewLineMode = function(newLineMode) {
+ if (this.$newLineMode === newLineMode)
+ return;
+
+ this.$newLineMode = newLineMode;
+ this._signal("changeNewLineMode");
+ };
+ this.getNewLineMode = function() {
+ return this.$newLineMode;
+ };
+ this.isNewLine = function(text) {
+ return (text == "\r\n" || text == "\r" || text == "\n");
+ };
+ this.getLine = function(row) {
+ return this.$lines[row] || "";
+ };
+ this.getLines = function(firstRow, lastRow) {
+ return this.$lines.slice(firstRow, lastRow + 1);
+ };
+ this.getAllLines = function() {
+ return this.getLines(0, this.getLength());
+ };
+ this.getLength = function() {
+ return this.$lines.length;
+ };
+ this.getTextRange = function(range) {
+ return this.getLinesForRange(range).join(this.getNewLineCharacter());
+ };
+ this.getLinesForRange = function(range) {
+ var lines;
+ if (range.start.row === range.end.row) {
+ lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];
+ } else {
+ lines = this.getLines(range.start.row, range.end.row);
+ lines[0] = (lines[0] || "").substring(range.start.column);
+ var l = lines.length - 1;
+ if (range.end.row - range.start.row == l)
+ lines[l] = lines[l].substring(0, range.end.column);
+ }
+ return lines;
+ };
+ this.insertLines = function(row, lines) {
+ console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead.");
+ return this.insertFullLines(row, lines);
+ };
+ this.removeLines = function(firstRow, lastRow) {
+ console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead.");
+ return this.removeFullLines(firstRow, lastRow);
+ };
+ this.insertNewLine = function(position) {
+ console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\'\', \'\']) instead.");
+ return this.insertMergedLines(position, ["", ""]);
+ };
+ this.insert = function(position, text) {
+ if (this.getLength() <= 1)
+ this.$detectNewLine(text);
+
+ return this.insertMergedLines(position, this.$split(text));
+ };
+ this.insertInLine = function(position, text) {
+ var start = this.clippedPos(position.row, position.column);
+ var end = this.pos(position.row, position.column + text.length);
+
+ this.applyDelta({
+ start: start,
+ end: end,
+ action: "insert",
+ lines: [text]
+ }, true);
+
+ return this.clonePos(end);
+ };
+
+ this.clippedPos = function(row, column) {
+ var length = this.getLength();
+ if (row === undefined) {
+ row = length;
+ } else if (row < 0) {
+ row = 0;
+ } else if (row >= length) {
+ row = length - 1;
+ column = undefined;
+ }
+ var line = this.getLine(row);
+ if (column == undefined)
+ column = line.length;
+ column = Math.min(Math.max(column, 0), line.length);
+ return {row: row, column: column};
+ };
+
+ this.clonePos = function(pos) {
+ return {row: pos.row, column: pos.column};
+ };
+
+ this.pos = function(row, column) {
+ return {row: row, column: column};
+ };
+
+ this.$clipPosition = function(position) {
+ var length = this.getLength();
+ if (position.row >= length) {
+ position.row = Math.max(0, length - 1);
+ position.column = this.getLine(length - 1).length;
+ } else {
+ position.row = Math.max(0, position.row);
+ position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);
+ }
+ return position;
+ };
+ this.insertFullLines = function(row, lines) {
+ row = Math.min(Math.max(row, 0), this.getLength());
+ var column = 0;
+ if (row < this.getLength()) {
+ lines = lines.concat([""]);
+ column = 0;
+ } else {
+ lines = [""].concat(lines);
+ row--;
+ column = this.$lines[row].length;
+ }
+ this.insertMergedLines({row: row, column: column}, lines);
+ };
+ this.insertMergedLines = function(position, lines) {
+ var start = this.clippedPos(position.row, position.column);
+ var end = {
+ row: start.row + lines.length - 1,
+ column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length
+ };
+
+ this.applyDelta({
+ start: start,
+ end: end,
+ action: "insert",
+ lines: lines
+ });
+
+ return this.clonePos(end);
+ };
+ this.remove = function(range) {
+ var start = this.clippedPos(range.start.row, range.start.column);
+ var end = this.clippedPos(range.end.row, range.end.column);
+ this.applyDelta({
+ start: start,
+ end: end,
+ action: "remove",
+ lines: this.getLinesForRange({start: start, end: end})
+ });
+ return this.clonePos(start);
+ };
+ this.removeInLine = function(row, startColumn, endColumn) {
+ var start = this.clippedPos(row, startColumn);
+ var end = this.clippedPos(row, endColumn);
+
+ this.applyDelta({
+ start: start,
+ end: end,
+ action: "remove",
+ lines: this.getLinesForRange({start: start, end: end})
+ }, true);
+
+ return this.clonePos(start);
+ };
+ this.removeFullLines = function(firstRow, lastRow) {
+ firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);
+ lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1);
+ var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;
+ var deleteLastNewLine = lastRow < this.getLength() - 1;
+ var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow );
+ var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 );
+ var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow );
+ var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length );
+ var range = new Range(startRow, startCol, endRow, endCol);
+ var deletedLines = this.$lines.slice(firstRow, lastRow + 1);
+
+ this.applyDelta({
+ start: range.start,
+ end: range.end,
+ action: "remove",
+ lines: this.getLinesForRange(range)
+ });
+ return deletedLines;
+ };
+ this.removeNewLine = function(row) {
+ if (row < this.getLength() - 1 && row >= 0) {
+ this.applyDelta({
+ start: this.pos(row, this.getLine(row).length),
+ end: this.pos(row + 1, 0),
+ action: "remove",
+ lines: ["", ""]
+ });
+ }
+ };
+ this.replace = function(range, text) {
+ if (!(range instanceof Range))
+ range = Range.fromPoints(range.start, range.end);
+ if (text.length === 0 && range.isEmpty())
+ return range.start;
+ if (text == this.getTextRange(range))
+ return range.end;
+
+ this.remove(range);
+ var end;
+ if (text) {
+ end = this.insert(range.start, text);
+ }
+ else {
+ end = range.start;
+ }
+
+ return end;
+ };
+ this.applyDeltas = function(deltas) {
+ for (var i=0; i<deltas.length; i++) {
+ this.applyDelta(deltas[i]);
+ }
+ };
+ this.revertDeltas = function(deltas) {
+ for (var i=deltas.length-1; i>=0; i--) {
+ this.revertDelta(deltas[i]);
+ }
+ };
+ this.applyDelta = function(delta, doNotValidate) {
+ var isInsert = delta.action == "insert";
+ if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]
+ : !Range.comparePoints(delta.start, delta.end)) {
+ return;
+ }
+
+ if (isInsert && delta.lines.length > 20000)
+ this.$splitAndapplyLargeDelta(delta, 20000);
+ applyDelta(this.$lines, delta, doNotValidate);
+ this._signal("change", delta);
+ };
+
+ this.$splitAndapplyLargeDelta = function(delta, MAX) {
+ var lines = delta.lines;
+ var l = lines.length;
+ var row = delta.start.row;
+ var column = delta.start.column;
+ var from = 0, to = 0;
+ do {
+ from = to;
+ to += MAX - 1;
+ var chunk = lines.slice(from, to);
+ if (to > l) {
+ delta.lines = chunk;
+ delta.start.row = row + from;
+ delta.start.column = column;
+ break;
+ }
+ chunk.push("");
+ this.applyDelta({
+ start: this.pos(row + from, column),
+ end: this.pos(row + to, column = 0),
+ action: delta.action,
+ lines: chunk
+ }, true);
+ } while(true);
+ };
+ this.revertDelta = function(delta) {
+ this.applyDelta({
+ start: this.clonePos(delta.start),
+ end: this.clonePos(delta.end),
+ action: (delta.action == "insert" ? "remove" : "insert"),
+ lines: delta.lines.slice()
+ });
+ };
+ this.indexToPosition = function(index, startRow) {
+ var lines = this.$lines || this.getAllLines();
+ var newlineLength = this.getNewLineCharacter().length;
+ for (var i = startRow || 0, l = lines.length; i < l; i++) {
+ index -= lines[i].length + newlineLength;
+ if (index < 0)
+ return {row: i, column: index + lines[i].length + newlineLength};
+ }
+ return {row: l-1, column: lines[l-1].length};
+ };
+ this.positionToIndex = function(pos, startRow) {
+ var lines = this.$lines || this.getAllLines();
+ var newlineLength = this.getNewLineCharacter().length;
+ var index = 0;
+ var row = Math.min(pos.row, lines.length);
+ for (var i = startRow || 0; i < row; ++i)
+ index += lines[i].length + newlineLength;
+
+ return index + pos.column;
+ };
+
+}).call(Document.prototype);
+
+exports.Document = Document;
+});
+
+define("ace/background_tokenizer",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module) {
+"use strict";
+
+var oop = require("./lib/oop");
+var EventEmitter = require("./lib/event_emitter").EventEmitter;
+
+var BackgroundTokenizer = function(tokenizer, editor) {
+ this.running = false;
+ this.lines = [];
+ this.states = [];
+ this.currentLine = 0;
+ this.tokenizer = tokenizer;
+
+ var self = this;
+
+ this.$worker = function() {
+ if (!self.running) { return; }
+
+ var workerStart = new Date();
+ var currentLine = self.currentLine;
+ var endLine = -1;
+ var doc = self.doc;
+
+ var startLine = currentLine;
+ while (self.lines[currentLine])
+ currentLine++;
+
+ var len = doc.getLength();
+ var processedLines = 0;
+ self.running = false;
+ while (currentLine < len) {
+ self.$tokenizeRow(currentLine);
+ endLine = currentLine;
+ do {
+ currentLine++;
+ } while (self.lines[currentLine]);
+ processedLines ++;
+ if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) {
+ self.running = setTimeout(self.$worker, 20);
+ break;
+ }
+ }
+ self.currentLine = currentLine;
+
+ if (startLine <= endLine)
+ self.fireUpdateEvent(startLine, endLine);
+ };
+};
+
+(function(){
+
+ oop.implement(this, EventEmitter);
+ this.setTokenizer = function(tokenizer) {
+ this.tokenizer = tokenizer;
+ this.lines = [];
+ this.states = [];
+
+ this.start(0);
+ };
+ this.setDocument = function(doc) {
+ this.doc = doc;
+ this.lines = [];
+ this.states = [];
+
+ this.stop();
+ };
+ this.fireUpdateEvent = function(firstRow, lastRow) {
+ var data = {
+ first: firstRow,
+ last: lastRow
+ };
+ this._signal("update", {data: data});
+ };
+ this.start = function(startRow) {
+ this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());
+ this.lines.splice(this.currentLine, this.lines.length);
+ this.states.splice(this.currentLine, this.states.length);
+
+ this.stop();
+ this.running = setTimeout(this.$worker, 700);
+ };
+
+ this.scheduleStart = function() {
+ if (!this.running)
+ this.running = setTimeout(this.$worker, 700);
+ }
+
+ this.$updateOnChange = function(delta) {
+ var startRow = delta.start.row;
+ var len = delta.end.row - startRow;
+
+ if (len === 0) {
+ this.lines[startRow] = null;
+ } else if (delta.action == "remove") {
+ this.lines.splice(startRow, len + 1, null);
+ this.states.splice(startRow, len + 1, null);
+ } else {
+ var args = Array(len + 1);
+ args.unshift(startRow, 1);
+ this.lines.splice.apply(this.lines, args);
+ this.states.splice.apply(this.states, args);
+ }
+
+ this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());
+
+ this.stop();
+ };
+ this.stop = function() {
+ if (this.running)
+ clearTimeout(this.running);
+ this.running = false;
+ };
+ this.getTokens = function(row) {
+ return this.lines[row] || this.$tokenizeRow(row);
+ };
+ this.getState = function(row) {
+ if (this.currentLine == row)
+ this.$tokenizeRow(row);
+ return this.states[row] || "start";
+ };
+
+ this.$tokenizeRow = function(row) {
+ var line = this.doc.getLine(row);
+ var state = this.states[row - 1];
+
+ var data = this.tokenizer.getLineTokens(line, state, row);
+
+ if (this.states[row] + "" !== data.state + "") {
+ this.states[row] = data.state;
+ this.lines[row + 1] = null;
+ if (this.currentLine > row + 1)
+ this.currentLine = row + 1;
+ } else if (this.currentLine == row) {
+ this.currentLine = row + 1;
+ }
+
+ return this.lines[row] = data.tokens;
+ };
+
+}).call(BackgroundTokenizer.prototype);
+
+exports.BackgroundTokenizer = BackgroundTokenizer;
+});
+
+define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"], function(require, exports, module) {
+"use strict";
+
+var lang = require("./lib/lang");
+var oop = require("./lib/oop");
+var Range = require("./range").Range;
+
+var SearchHighlight = function(regExp, clazz, type) {
+ this.setRegexp(regExp);
+ this.clazz = clazz;
+ this.type = type || "text";
+};
+
+(function() {
+ this.MAX_RANGES = 500;
+
+ this.setRegexp = function(regExp) {
+ if (this.regExp+"" == regExp+"")
+ return;
+ this.regExp = regExp;
+ this.cache = [];
+ };
+
+ this.update = function(html, markerLayer, session, config) {
+ if (!this.regExp)
+ return;
+ var start = config.firstRow, end = config.lastRow;
+
+ for (var i = start; i <= end; i++) {
+ var ranges = this.cache[i];
+ if (ranges == null) {
+ ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);
+ if (ranges.length > this.MAX_RANGES)
+ ranges = ranges.slice(0, this.MAX_RANGES);
+ ranges = ranges.map(function(match) {
+ return new Range(i, match.offset, i, match.offset + match.length);
+ });
+ this.cache[i] = ranges.length ? ranges : "";
+ }
+
+ for (var j = ranges.length; j --; ) {
+ markerLayer.drawSingleLineMarker(
+ html, ranges[j].toScreenRange(session), this.clazz, config);
+ }
+ }
+ };
+
+}).call(SearchHighlight.prototype);
+
+exports.SearchHighlight = SearchHighlight;
+});
+
+define("ace/edit_session/fold_line",["require","exports","module","ace/range"], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+function FoldLine(foldData, folds) {
+ this.foldData = foldData;
+ if (Array.isArray(folds)) {
+ this.folds = folds;
+ } else {
+ folds = this.folds = [ folds ];
+ }
+
+ var last = folds[folds.length - 1];
+ this.range = new Range(folds[0].start.row, folds[0].start.column,
+ last.end.row, last.end.column);
+ this.start = this.range.start;
+ this.end = this.range.end;
+
+ this.folds.forEach(function(fold) {
+ fold.setFoldLine(this);
+ }, this);
+}
+
+(function() {
+ this.shiftRow = function(shift) {
+ this.start.row += shift;
+ this.end.row += shift;
+ this.folds.forEach(function(fold) {
+ fold.start.row += shift;
+ fold.end.row += shift;
+ });
+ };
+
+ this.addFold = function(fold) {
+ if (fold.sameRow) {
+ if (fold.start.row < this.startRow || fold.endRow > this.endRow) {
+ throw new Error("Can't add a fold to this FoldLine as it has no connection");
+ }
+ this.folds.push(fold);
+ this.folds.sort(function(a, b) {
+ return -a.range.compareEnd(b.start.row, b.start.column);
+ });
+ if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {
+ this.end.row = fold.end.row;
+ this.end.column = fold.end.column;
+ } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {
+ this.start.row = fold.start.row;
+ this.start.column = fold.start.column;
+ }
+ } else if (fold.start.row == this.end.row) {
+ this.folds.push(fold);
+ this.end.row = fold.end.row;
+ this.end.column = fold.end.column;
+ } else if (fold.end.row == this.start.row) {
+ this.folds.unshift(fold);
+ this.start.row = fold.start.row;
+ this.start.column = fold.start.column;
+ } else {
+ throw new Error("Trying to add fold to FoldRow that doesn't have a matching row");
+ }
+ fold.foldLine = this;
+ };
+
+ this.containsRow = function(row) {
+ return row >= this.start.row && row <= this.end.row;
+ };
+
+ this.walk = function(callback, endRow, endColumn) {
+ var lastEnd = 0,
+ folds = this.folds,
+ fold,
+ cmp, stop, isNewRow = true;
+
+ if (endRow == null) {
+ endRow = this.end.row;
+ endColumn = this.end.column;
+ }
+
+ for (var i = 0; i < folds.length; i++) {
+ fold = folds[i];
+
+ cmp = fold.range.compareStart(endRow, endColumn);
+ if (cmp == -1) {
+ callback(null, endRow, endColumn, lastEnd, isNewRow);
+ return;
+ }
+
+ stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);
+ stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);
+ if (stop || cmp === 0) {
+ return;
+ }
+ isNewRow = !fold.sameRow;
+ lastEnd = fold.end.column;
+ }
+ callback(null, endRow, endColumn, lastEnd, isNewRow);
+ };
+
+ this.getNextFoldTo = function(row, column) {
+ var fold, cmp;
+ for (var i = 0; i < this.folds.length; i++) {
+ fold = this.folds[i];
+ cmp = fold.range.compareEnd(row, column);
+ if (cmp == -1) {
+ return {
+ fold: fold,
+ kind: "after"
+ };
+ } else if (cmp === 0) {
+ return {
+ fold: fold,
+ kind: "inside"
+ };
+ }
+ }
+ return null;
+ };
+
+ this.addRemoveChars = function(row, column, len) {
+ var ret = this.getNextFoldTo(row, column),
+ fold, folds;
+ if (ret) {
+ fold = ret.fold;
+ if (ret.kind == "inside"
+ && fold.start.column != column
+ && fold.start.row != row)
+ {
+ window.console && window.console.log(row, column, fold);
+ } else if (fold.start.row == row) {
+ folds = this.folds;
+ var i = folds.indexOf(fold);
+ if (i === 0) {
+ this.start.column += len;
+ }
+ for (i; i < folds.length; i++) {
+ fold = folds[i];
+ fold.start.column += len;
+ if (!fold.sameRow) {
+ return;
+ }
+ fold.end.column += len;
+ }
+ this.end.column += len;
+ }
+ }
+ };
+
+ this.split = function(row, column) {
+ var pos = this.getNextFoldTo(row, column);
+
+ if (!pos || pos.kind == "inside")
+ return null;
+
+ var fold = pos.fold;
+ var folds = this.folds;
+ var foldData = this.foldData;
+
+ var i = folds.indexOf(fold);
+ var foldBefore = folds[i - 1];
+ this.end.row = foldBefore.end.row;
+ this.end.column = foldBefore.end.column;
+ folds = folds.splice(i, folds.length - i);
+
+ var newFoldLine = new FoldLine(foldData, folds);
+ foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);
+ return newFoldLine;
+ };
+
+ this.merge = function(foldLineNext) {
+ var folds = foldLineNext.folds;
+ for (var i = 0; i < folds.length; i++) {
+ this.addFold(folds[i]);
+ }
+ var foldData = this.foldData;
+ foldData.splice(foldData.indexOf(foldLineNext), 1);
+ };
+
+ this.toString = function() {
+ var ret = [this.range.toString() + ": [" ];
+
+ this.folds.forEach(function(fold) {
+ ret.push(" " + fold.toString());
+ });
+ ret.push("]");
+ return ret.join("\n");
+ };
+
+ this.idxToPosition = function(idx) {
+ var lastFoldEndColumn = 0;
+
+ for (var i = 0; i < this.folds.length; i++) {
+ var fold = this.folds[i];
+
+ idx -= fold.start.column - lastFoldEndColumn;
+ if (idx < 0) {
+ return {
+ row: fold.start.row,
+ column: fold.start.column + idx
+ };
+ }
+
+ idx -= fold.placeholder.length;
+ if (idx < 0) {
+ return fold.start;
+ }
+
+ lastFoldEndColumn = fold.end.column;
+ }
+
+ return {
+ row: this.end.row,
+ column: this.end.column + idx
+ };
+ };
+}).call(FoldLine.prototype);
+
+exports.FoldLine = FoldLine;
+});
+
+define("ace/range_list",["require","exports","module","ace/range"], function(require, exports, module) {
+"use strict";
+var Range = require("./range").Range;
+var comparePoints = Range.comparePoints;
+
+var RangeList = function() {
+ this.ranges = [];
+};
+
+(function() {
+ this.comparePoints = comparePoints;
+
+ this.pointIndex = function(pos, excludeEdges, startIndex) {
+ var list = this.ranges;
+
+ for (var i = startIndex || 0; i < list.length; i++) {
+ var range = list[i];
+ var cmpEnd = comparePoints(pos, range.end);
+ if (cmpEnd > 0)
+ continue;
+ var cmpStart = comparePoints(pos, range.start);
+ if (cmpEnd === 0)
+ return excludeEdges && cmpStart !== 0 ? -i-2 : i;
+ if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))
+ return i;
+
+ return -i-1;
+ }
+ return -i - 1;
+ };
+
+ this.add = function(range) {
+ var excludeEdges = !range.isEmpty();
+ var startIndex = this.pointIndex(range.start, excludeEdges);
+ if (startIndex < 0)
+ startIndex = -startIndex - 1;
+
+ var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);
+
+ if (endIndex < 0)
+ endIndex = -endIndex - 1;
+ else
+ endIndex++;
+ return this.ranges.splice(startIndex, endIndex - startIndex, range);
+ };
+
+ this.addList = function(list) {
+ var removed = [];
+ for (var i = list.length; i--; ) {
+ removed.push.call(removed, this.add(list[i]));
+ }
+ return removed;
+ };
+
+ this.substractPoint = function(pos) {
+ var i = this.pointIndex(pos);
+
+ if (i >= 0)
+ return this.ranges.splice(i, 1);
+ };
+ this.merge = function() {
+ var removed = [];
+ var list = this.ranges;
+
+ list = list.sort(function(a, b) {
+ return comparePoints(a.start, b.start);
+ });
+
+ var next = list[0], range;
+ for (var i = 1; i < list.length; i++) {
+ range = next;
+ next = list[i];
+ var cmp = comparePoints(range.end, next.start);
+ if (cmp < 0)
+ continue;
+
+ if (cmp == 0 && !range.isEmpty() && !next.isEmpty())
+ continue;
+
+ if (comparePoints(range.end, next.end) < 0) {
+ range.end.row = next.end.row;
+ range.end.column = next.end.column;
+ }
+
+ list.splice(i, 1);
+ removed.push(next);
+ next = range;
+ i--;
+ }
+
+ this.ranges = list;
+
+ return removed;
+ };
+
+ this.contains = function(row, column) {
+ return this.pointIndex({row: row, column: column}) >= 0;
+ };
+
+ this.containsPoint = function(pos) {
+ return this.pointIndex(pos) >= 0;
+ };
+
+ this.rangeAtPoint = function(pos) {
+ var i = this.pointIndex(pos);
+ if (i >= 0)
+ return this.ranges[i];
+ };
+
+
+ this.clipRows = function(startRow, endRow) {
+ var list = this.ranges;
+ if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)
+ return [];
+
+ var startIndex = this.pointIndex({row: startRow, column: 0});
+ if (startIndex < 0)
+ startIndex = -startIndex - 1;
+ var endIndex = this.pointIndex({row: endRow, column: 0}, startIndex);
+ if (endIndex < 0)
+ endIndex = -endIndex - 1;
+
+ var clipped = [];
+ for (var i = startIndex; i < endIndex; i++) {
+ clipped.push(list[i]);
+ }
+ return clipped;
+ };
+
+ this.removeAll = function() {
+ return this.ranges.splice(0, this.ranges.length);
+ };
+
+ this.attach = function(session) {
+ if (this.session)
+ this.detach();
+
+ this.session = session;
+ this.onChange = this.$onChange.bind(this);
+
+ this.session.on('change', this.onChange);
+ };
+
+ this.detach = function() {
+ if (!this.session)
+ return;
+ this.session.removeListener('change', this.onChange);
+ this.session = null;
+ };
+
+ this.$onChange = function(delta) {
+ if (delta.action == "insert"){
+ var start = delta.start;
+ var end = delta.end;
+ } else {
+ var end = delta.start;
+ var start = delta.end;
+ }
+ var startRow = start.row;
+ var endRow = end.row;
+ var lineDif = endRow - startRow;
+
+ var colDiff = -start.column + end.column;
+ var ranges = this.ranges;
+
+ for (var i = 0, n = ranges.length; i < n; i++) {
+ var r = ranges[i];
+ if (r.end.row < startRow)
+ continue;
+ if (r.start.row > startRow)
+ break;
+
+ if (r.start.row == startRow && r.start.column >= start.column ) {
+ if (r.start.column == start.column && this.$insertRight) {
+ } else {
+ r.start.column += colDiff;
+ r.start.row += lineDif;
+ }
+ }
+ if (r.end.row == startRow && r.end.column >= start.column) {
+ if (r.end.column == start.column && this.$insertRight) {
+ continue;
+ }
+ if (r.end.column == start.column && colDiff > 0 && i < n - 1) {
+ if (r.end.column > r.start.column && r.end.column == ranges[i+1].start.column)
+ r.end.column -= colDiff;
+ }
+ r.end.column += colDiff;
+ r.end.row += lineDif;
+ }
+ }
+
+ if (lineDif != 0 && i < n) {
+ for (; i < n; i++) {
+ var r = ranges[i];
+ r.start.row += lineDif;
+ r.end.row += lineDif;
+ }
+ }
+ };
+
+}).call(RangeList.prototype);
+
+exports.RangeList = RangeList;
+});
+
+define("ace/edit_session/fold",["require","exports","module","ace/range","ace/range_list","ace/lib/oop"], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+var RangeList = require("../range_list").RangeList;
+var oop = require("../lib/oop")
+var Fold = exports.Fold = function(range, placeholder) {
+ this.foldLine = null;
+ this.placeholder = placeholder;
+ this.range = range;
+ this.start = range.start;
+ this.end = range.end;
+
+ this.sameRow = range.start.row == range.end.row;
+ this.subFolds = this.ranges = [];
+};
+
+oop.inherits(Fold, RangeList);
+
+(function() {
+
+ this.toString = function() {
+ return '"' + this.placeholder + '" ' + this.range.toString();
+ };
+
+ this.setFoldLine = function(foldLine) {
+ this.foldLine = foldLine;
+ this.subFolds.forEach(function(fold) {
+ fold.setFoldLine(foldLine);
+ });
+ };
+
+ this.clone = function() {
+ var range = this.range.clone();
+ var fold = new Fold(range, this.placeholder);
+ this.subFolds.forEach(function(subFold) {
+ fold.subFolds.push(subFold.clone());
+ });
+ fold.collapseChildren = this.collapseChildren;
+ return fold;
+ };
+
+ this.addSubFold = function(fold) {
+ if (this.range.isEqual(fold))
+ return;
+
+ if (!this.range.containsRange(fold))
+ throw new Error("A fold can't intersect already existing fold" + fold.range + this.range);
+ consumeRange(fold, this.start);
+
+ var row = fold.start.row, column = fold.start.column;
+ for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {
+ cmp = this.subFolds[i].range.compare(row, column);
+ if (cmp != 1)
+ break;
+ }
+ var afterStart = this.subFolds[i];
+
+ if (cmp == 0)
+ return afterStart.addSubFold(fold);
+ var row = fold.range.end.row, column = fold.range.end.column;
+ for (var j = i, cmp = -1; j < this.subFolds.length; j++) {
+ cmp = this.subFolds[j].range.compare(row, column);
+ if (cmp != 1)
+ break;
+ }
+ var afterEnd = this.subFolds[j];
+
+ if (cmp == 0)
+ throw new Error("A fold can't intersect already existing fold" + fold.range + this.range);
+
+ var consumedFolds = this.subFolds.splice(i, j - i, fold);
+ fold.setFoldLine(this.foldLine);
+
+ return fold;
+ };
+
+ this.restoreRange = function(range) {
+ return restoreRange(range, this.start);
+ };
+
+}).call(Fold.prototype);
+
+function consumePoint(point, anchor) {
+ point.row -= anchor.row;
+ if (point.row == 0)
+ point.column -= anchor.column;
+}
+function consumeRange(range, anchor) {
+ consumePoint(range.start, anchor);
+ consumePoint(range.end, anchor);
+}
+function restorePoint(point, anchor) {
+ if (point.row == 0)
+ point.column += anchor.column;
+ point.row += anchor.row;
+}
+function restoreRange(range, anchor) {
+ restorePoint(range.start, anchor);
+ restorePoint(range.end, anchor);
+}
+
+});
+
+define("ace/edit_session/folding",["require","exports","module","ace/range","ace/edit_session/fold_line","ace/edit_session/fold","ace/token_iterator"], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+var FoldLine = require("./fold_line").FoldLine;
+var Fold = require("./fold").Fold;
+var TokenIterator = require("../token_iterator").TokenIterator;
+
+function Folding() {
+ this.getFoldAt = function(row, column, side) {
+ var foldLine = this.getFoldLine(row);
+ if (!foldLine)
+ return null;
+
+ var folds = foldLine.folds;
+ for (var i = 0; i < folds.length; i++) {
+ var fold = folds[i];
+ if (fold.range.contains(row, column)) {
+ if (side == 1 && fold.range.isEnd(row, column)) {
+ continue;
+ } else if (side == -1 && fold.range.isStart(row, column)) {
+ continue;
+ }
+ return fold;
+ }
+ }
+ };
+ this.getFoldsInRange = function(range) {
+ var start = range.start;
+ var end = range.end;
+ var foldLines = this.$foldData;
+ var foundFolds = [];
+
+ start.column += 1;
+ end.column -= 1;
+
+ for (var i = 0; i < foldLines.length; i++) {
+ var cmp = foldLines[i].range.compareRange(range);
+ if (cmp == 2) {
+ continue;
+ }
+ else if (cmp == -2) {
+ break;
+ }
+
+ var folds = foldLines[i].folds;
+ for (var j = 0; j < folds.length; j++) {
+ var fold = folds[j];
+ cmp = fold.range.compareRange(range);
+ if (cmp == -2) {
+ break;
+ } else if (cmp == 2) {
+ continue;
+ } else
+ if (cmp == 42) {
+ break;
+ }
+ foundFolds.push(fold);
+ }
+ }
+ start.column -= 1;
+ end.column += 1;
+
+ return foundFolds;
+ };
+
+ this.getFoldsInRangeList = function(ranges) {
+ if (Array.isArray(ranges)) {
+ var folds = [];
+ ranges.forEach(function(range) {
+ folds = folds.concat(this.getFoldsInRange(range));
+ }, this);
+ } else {
+ var folds = this.getFoldsInRange(ranges);
+ }
+ return folds;
+ };
+ this.getAllFolds = function() {
+ var folds = [];
+ var foldLines = this.$foldData;
+
+ for (var i = 0; i < foldLines.length; i++)
+ for (var j = 0; j < foldLines[i].folds.length; j++)
+ folds.push(foldLines[i].folds[j]);
+
+ return folds;
+ };
+ this.getFoldStringAt = function(row, column, trim, foldLine) {
+ foldLine = foldLine || this.getFoldLine(row);
+ if (!foldLine)
+ return null;
+
+ var lastFold = {
+ end: { column: 0 }
+ };
+ var str, fold;
+ for (var i = 0; i < foldLine.folds.length; i++) {
+ fold = foldLine.folds[i];
+ var cmp = fold.range.compareEnd(row, column);
+ if (cmp == -1) {
+ str = this
+ .getLine(fold.start.row)
+ .substring(lastFold.end.column, fold.start.column);
+ break;
+ }
+ else if (cmp === 0) {
+ return null;
+ }
+ lastFold = fold;
+ }
+ if (!str)
+ str = this.getLine(fold.start.row).substring(lastFold.end.column);
+
+ if (trim == -1)
+ return str.substring(0, column - lastFold.end.column);
+ else if (trim == 1)
+ return str.substring(column - lastFold.end.column);
+ else
+ return str;
+ };
+
+ this.getFoldLine = function(docRow, startFoldLine) {
+ var foldData = this.$foldData;
+ var i = 0;
+ if (startFoldLine)
+ i = foldData.indexOf(startFoldLine);
+ if (i == -1)
+ i = 0;
+ for (i; i < foldData.length; i++) {
+ var foldLine = foldData[i];
+ if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {
+ return foldLine;
+ } else if (foldLine.end.row > docRow) {
+ return null;
+ }
+ }
+ return null;
+ };
+ this.getNextFoldLine = function(docRow, startFoldLine) {
+ var foldData = this.$foldData;
+ var i = 0;
+ if (startFoldLine)
+ i = foldData.indexOf(startFoldLine);
+ if (i == -1)
+ i = 0;
+ for (i; i < foldData.length; i++) {
+ var foldLine = foldData[i];
+ if (foldLine.end.row >= docRow) {
+ return foldLine;
+ }
+ }
+ return null;
+ };
+
+ this.getFoldedRowCount = function(first, last) {
+ var foldData = this.$foldData, rowCount = last-first+1;
+ for (var i = 0; i < foldData.length; i++) {
+ var foldLine = foldData[i],
+ end = foldLine.end.row,
+ start = foldLine.start.row;
+ if (end >= last) {
+ if (start < last) {
+ if (start >= first)
+ rowCount -= last-start;
+ else
+ rowCount = 0; // in one fold
+ }
+ break;
+ } else if (end >= first){
+ if (start >= first) // fold inside range
+ rowCount -= end-start;
+ else
+ rowCount -= end-first+1;
+ }
+ }
+ return rowCount;
+ };
+
+ this.$addFoldLine = function(foldLine) {
+ this.$foldData.push(foldLine);
+ this.$foldData.sort(function(a, b) {
+ return a.start.row - b.start.row;
+ });
+ return foldLine;
+ };
+ this.addFold = function(placeholder, range) {
+ var foldData = this.$foldData;
+ var added = false;
+ var fold;
+
+ if (placeholder instanceof Fold)
+ fold = placeholder;
+ else {
+ fold = new Fold(range, placeholder);
+ fold.collapseChildren = range.collapseChildren;
+ }
+ this.$clipRangeToDocument(fold.range);
+
+ var startRow = fold.start.row;
+ var startColumn = fold.start.column;
+ var endRow = fold.end.row;
+ var endColumn = fold.end.column;
+ if (!(startRow < endRow ||
+ startRow == endRow && startColumn <= endColumn - 2))
+ throw new Error("The range has to be at least 2 characters width");
+
+ var startFold = this.getFoldAt(startRow, startColumn, 1);
+ var endFold = this.getFoldAt(endRow, endColumn, -1);
+ if (startFold && endFold == startFold)
+ return startFold.addSubFold(fold);
+
+ if (startFold && !startFold.range.isStart(startRow, startColumn))
+ this.removeFold(startFold);
+
+ if (endFold && !endFold.range.isEnd(endRow, endColumn))
+ this.removeFold(endFold);
+ var folds = this.getFoldsInRange(fold.range);
+ if (folds.length > 0) {
+ this.removeFolds(folds);
+ folds.forEach(function(subFold) {
+ fold.addSubFold(subFold);
+ });
+ }
+
+ for (var i = 0; i < foldData.length; i++) {
+ var foldLine = foldData[i];
+ if (endRow == foldLine.start.row) {
+ foldLine.addFold(fold);
+ added = true;
+ break;
+ } else if (startRow == foldLine.end.row) {
+ foldLine.addFold(fold);
+ added = true;
+ if (!fold.sameRow) {
+ var foldLineNext = foldData[i + 1];
+ if (foldLineNext && foldLineNext.start.row == endRow) {
+ foldLine.merge(foldLineNext);
+ break;
+ }
+ }
+ break;
+ } else if (endRow <= foldLine.start.row) {
+ break;
+ }
+ }
+
+ if (!added)
+ foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));
+
+ if (this.$useWrapMode)
+ this.$updateWrapData(foldLine.start.row, foldLine.start.row);
+ else
+ this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);
+ this.$modified = true;
+ this._signal("changeFold", { data: fold, action: "add" });
+
+ return fold;
+ };
+
+ this.addFolds = function(folds) {
+ folds.forEach(function(fold) {
+ this.addFold(fold);
+ }, this);
+ };
+
+ this.removeFold = function(fold) {
+ var foldLine = fold.foldLine;
+ var startRow = foldLine.start.row;
+ var endRow = foldLine.end.row;
+
+ var foldLines = this.$foldData;
+ var folds = foldLine.folds;
+ if (folds.length == 1) {
+ foldLines.splice(foldLines.indexOf(foldLine), 1);
+ } else
+ if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {
+ folds.pop();
+ foldLine.end.row = folds[folds.length - 1].end.row;
+ foldLine.end.column = folds[folds.length - 1].end.column;
+ } else
+ if (foldLine.range.isStart(fold.start.row, fold.start.column)) {
+ folds.shift();
+ foldLine.start.row = folds[0].start.row;
+ foldLine.start.column = folds[0].start.column;
+ } else
+ if (fold.sameRow) {
+ folds.splice(folds.indexOf(fold), 1);
+ } else
+ {
+ var newFoldLine = foldLine.split(fold.start.row, fold.start.column);
+ folds = newFoldLine.folds;
+ folds.shift();
+ newFoldLine.start.row = folds[0].start.row;
+ newFoldLine.start.column = folds[0].start.column;
+ }
+
+ if (!this.$updating) {
+ if (this.$useWrapMode)
+ this.$updateWrapData(startRow, endRow);
+ else
+ this.$updateRowLengthCache(startRow, endRow);
+ }
+ this.$modified = true;
+ this._signal("changeFold", { data: fold, action: "remove" });
+ };
+
+ this.removeFolds = function(folds) {
+ var cloneFolds = [];
+ for (var i = 0; i < folds.length; i++) {
+ cloneFolds.push(folds[i]);
+ }
+
+ cloneFolds.forEach(function(fold) {
+ this.removeFold(fold);
+ }, this);
+ this.$modified = true;
+ };
+
+ this.expandFold = function(fold) {
+ this.removeFold(fold);
+ fold.subFolds.forEach(function(subFold) {
+ fold.restoreRange(subFold);
+ this.addFold(subFold);
+ }, this);
+ if (fold.collapseChildren > 0) {
+ this.foldAll(fold.start.row+1, fold.end.row, fold.collapseChildren-1);
+ }
+ fold.subFolds = [];
+ };
+
+ this.expandFolds = function(folds) {
+ folds.forEach(function(fold) {
+ this.expandFold(fold);
+ }, this);
+ };
+
+ this.unfold = function(location, expandInner) {
+ var range, folds;
+ if (location == null) {
+ range = new Range(0, 0, this.getLength(), 0);
+ expandInner = true;
+ } else if (typeof location == "number")
+ range = new Range(location, 0, location, this.getLine(location).length);
+ else if ("row" in location)
+ range = Range.fromPoints(location, location);
+ else
+ range = location;
+
+ folds = this.getFoldsInRangeList(range);
+ if (expandInner) {
+ this.removeFolds(folds);
+ } else {
+ var subFolds = folds;
+ while (subFolds.length) {
+ this.expandFolds(subFolds);
+ subFolds = this.getFoldsInRangeList(range);
+ }
+ }
+ if (folds.length)
+ return folds;
+ };
+ this.isRowFolded = function(docRow, startFoldRow) {
+ return !!this.getFoldLine(docRow, startFoldRow);
+ };
+
+ this.getRowFoldEnd = function(docRow, startFoldRow) {
+ var foldLine = this.getFoldLine(docRow, startFoldRow);
+ return foldLine ? foldLine.end.row : docRow;
+ };
+
+ this.getRowFoldStart = function(docRow, startFoldRow) {
+ var foldLine = this.getFoldLine(docRow, startFoldRow);
+ return foldLine ? foldLine.start.row : docRow;
+ };
+
+ this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) {
+ if (startRow == null)
+ startRow = foldLine.start.row;
+ if (startColumn == null)
+ startColumn = 0;
+ if (endRow == null)
+ endRow = foldLine.end.row;
+ if (endColumn == null)
+ endColumn = this.getLine(endRow).length;
+ var doc = this.doc;
+ var textLine = "";
+
+ foldLine.walk(function(placeholder, row, column, lastColumn) {
+ if (row < startRow)
+ return;
+ if (row == startRow) {
+ if (column < startColumn)
+ return;
+ lastColumn = Math.max(startColumn, lastColumn);
+ }
+
+ if (placeholder != null) {
+ textLine += placeholder;
+ } else {
+ textLine += doc.getLine(row).substring(lastColumn, column);
+ }
+ }, endRow, endColumn);
+ return textLine;
+ };
+
+ this.getDisplayLine = function(row, endColumn, startRow, startColumn) {
+ var foldLine = this.getFoldLine(row);
+
+ if (!foldLine) {
+ var line;
+ line = this.doc.getLine(row);
+ return line.substring(startColumn || 0, endColumn || line.length);
+ } else {
+ return this.getFoldDisplayLine(
+ foldLine, row, endColumn, startRow, startColumn);
+ }
+ };
+
+ this.$cloneFoldData = function() {
+ var fd = [];
+ fd = this.$foldData.map(function(foldLine) {
+ var folds = foldLine.folds.map(function(fold) {
+ return fold.clone();
+ });
+ return new FoldLine(fd, folds);
+ });
+
+ return fd;
+ };
+
+ this.toggleFold = function(tryToUnfold) {
+ var selection = this.selection;
+ var range = selection.getRange();
+ var fold;
+ var bracketPos;
+
+ if (range.isEmpty()) {
+ var cursor = range.start;
+ fold = this.getFoldAt(cursor.row, cursor.column);
+
+ if (fold) {
+ this.expandFold(fold);
+ return;
+ } else if (bracketPos = this.findMatchingBracket(cursor)) {
+ if (range.comparePoint(bracketPos) == 1) {
+ range.end = bracketPos;
+ } else {
+ range.start = bracketPos;
+ range.start.column++;
+ range.end.column--;
+ }
+ } else if (bracketPos = this.findMatchingBracket({row: cursor.row, column: cursor.column + 1})) {
+ if (range.comparePoint(bracketPos) == 1)
+ range.end = bracketPos;
+ else
+ range.start = bracketPos;
+
+ range.start.column++;
+ } else {
+ range = this.getCommentFoldRange(cursor.row, cursor.column) || range;
+ }
+ } else {
+ var folds = this.getFoldsInRange(range);
+ if (tryToUnfold && folds.length) {
+ this.expandFolds(folds);
+ return;
+ } else if (folds.length == 1 ) {
+ fold = folds[0];
+ }
+ }
+
+ if (!fold)
+ fold = this.getFoldAt(range.start.row, range.start.column);
+
+ if (fold && fold.range.toString() == range.toString()) {
+ this.expandFold(fold);
+ return;
+ }
+
+ var placeholder = "...";
+ if (!range.isMultiLine()) {
+ placeholder = this.getTextRange(range);
+ if (placeholder.length < 4)
+ return;
+ placeholder = placeholder.trim().substring(0, 2) + "..";
+ }
+
+ this.addFold(placeholder, range);
+ };
+
+ this.getCommentFoldRange = function(row, column, dir) {
+ var iterator = new TokenIterator(this, row, column);
+ var token = iterator.getCurrentToken();
+ if (token && /^comment|string/.test(token.type)) {
+ var range = new Range();
+ var re = new RegExp(token.type.replace(/\..*/, "\\."));
+ if (dir != 1) {
+ do {
+ token = iterator.stepBackward();
+ } while (token && re.test(token.type));
+ iterator.stepForward();
+ }
+
+ range.start.row = iterator.getCurrentTokenRow();
+ range.start.column = iterator.getCurrentTokenColumn() + 2;
+
+ iterator = new TokenIterator(this, row, column);
+
+ if (dir != -1) {
+ do {
+ token = iterator.stepForward();
+ } while (token && re.test(token.type));
+ token = iterator.stepBackward();
+ } else
+ token = iterator.getCurrentToken();
+
+ range.end.row = iterator.getCurrentTokenRow();
+ range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2;
+ return range;
+ }
+ };
+
+ this.foldAll = function(startRow, endRow, depth) {
+ if (depth == undefined)
+ depth = 100000; // JSON.stringify doesn't hanle Infinity
+ var foldWidgets = this.foldWidgets;
+ if (!foldWidgets)
+ return; // mode doesn't support folding
+ endRow = endRow || this.getLength();
+ startRow = startRow || 0;
+ for (var row = startRow; row < endRow; row++) {
+ if (foldWidgets[row] == null)
+ foldWidgets[row] = this.getFoldWidget(row);
+ if (foldWidgets[row] != "start")
+ continue;
+
+ var range = this.getFoldWidgetRange(row);
+ if (range && range.isMultiLine()
+ && range.end.row <= endRow
+ && range.start.row >= startRow
+ ) {
+ row = range.end.row;
+ try {
+ var fold = this.addFold("...", range);
+ if (fold)
+ fold.collapseChildren = depth;
+ } catch(e) {}
+ }
+ }
+ };
+ this.$foldStyles = {
+ "manual": 1,
+ "markbegin": 1,
+ "markbeginend": 1
+ };
+ this.$foldStyle = "markbegin";
+ this.setFoldStyle = function(style) {
+ if (!this.$foldStyles[style])
+ throw new Error("invalid fold style: " + style + "[" + Object.keys(this.$foldStyles).join(", ") + "]");
+
+ if (this.$foldStyle == style)
+ return;
+
+ this.$foldStyle = style;
+
+ if (style == "manual")
+ this.unfold();
+ var mode = this.$foldMode;
+ this.$setFolding(null);
+ this.$setFolding(mode);
+ };
+
+ this.$setFolding = function(foldMode) {
+ if (this.$foldMode == foldMode)
+ return;
+
+ this.$foldMode = foldMode;
+
+ this.off('change', this.$updateFoldWidgets);
+ this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);
+ this._signal("changeAnnotation");
+
+ if (!foldMode || this.$foldStyle == "manual") {
+ this.foldWidgets = null;
+ return;
+ }
+
+ this.foldWidgets = [];
+ this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);
+ this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);
+
+ this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);
+ this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);
+ this.on('change', this.$updateFoldWidgets);
+ this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);
+ };
+
+ this.getParentFoldRangeData = function (row, ignoreCurrent) {
+ var fw = this.foldWidgets;
+ if (!fw || (ignoreCurrent && fw[row]))
+ return {};
+
+ var i = row - 1, firstRange;
+ while (i >= 0) {
+ var c = fw[i];
+ if (c == null)
+ c = fw[i] = this.getFoldWidget(i);
+
+ if (c == "start") {
+ var range = this.getFoldWidgetRange(i);
+ if (!firstRange)
+ firstRange = range;
+ if (range && range.end.row >= row)
+ break;
+ }
+ i--;
+ }
+
+ return {
+ range: i !== -1 && range,
+ firstRange: firstRange
+ };
+ };
+
+ this.onFoldWidgetClick = function(row, e) {
+ e = e.domEvent;
+ var options = {
+ children: e.shiftKey,
+ all: e.ctrlKey || e.metaKey,
+ siblings: e.altKey
+ };
+
+ var range = this.$toggleFoldWidget(row, options);
+ if (!range) {
+ var el = (e.target || e.srcElement);
+ if (el && /ace_fold-widget/.test(el.className))
+ el.className += " ace_invalid";
+ }
+ };
+
+ this.$toggleFoldWidget = function(row, options) {
+ if (!this.getFoldWidget)
+ return;
+ var type = this.getFoldWidget(row);
+ var line = this.getLine(row);
+
+ var dir = type === "end" ? -1 : 1;
+ var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);
+
+ if (fold) {
+ if (options.children || options.all)
+ this.removeFold(fold);
+ else
+ this.expandFold(fold);
+ return;
+ }
+
+ var range = this.getFoldWidgetRange(row, true);
+ if (range && !range.isMultiLine()) {
+ fold = this.getFoldAt(range.start.row, range.start.column, 1);
+ if (fold && range.isEqual(fold.range)) {
+ this.removeFold(fold);
+ return;
+ }
+ }
+
+ if (options.siblings) {
+ var data = this.getParentFoldRangeData(row);
+ if (data.range) {
+ var startRow = data.range.start.row + 1;
+ var endRow = data.range.end.row;
+ }
+ this.foldAll(startRow, endRow, options.all ? 10000 : 0);
+ } else if (options.children) {
+ endRow = range ? range.end.row : this.getLength();
+ this.foldAll(row + 1, endRow, options.all ? 10000 : 0);
+ } else if (range) {
+ if (options.all)
+ range.collapseChildren = 10000;
+ this.addFold("...", range);
+ }
+
+ return range;
+ };
+
+
+
+ this.toggleFoldWidget = function(toggleParent) {
+ var row = this.selection.getCursor().row;
+ row = this.getRowFoldStart(row);
+ var range = this.$toggleFoldWidget(row, {});
+
+ if (range)
+ return;
+ var data = this.getParentFoldRangeData(row, true);
+ range = data.range || data.firstRange;
+
+ if (range) {
+ row = range.start.row;
+ var fold = this.getFoldAt(row, this.getLine(row).length, 1);
+
+ if (fold) {
+ this.removeFold(fold);
+ } else {
+ this.addFold("...", range);
+ }
+ }
+ };
+
+ this.updateFoldWidgets = function(delta) {
+ var firstRow = delta.start.row;
+ var len = delta.end.row - firstRow;
+
+ if (len === 0) {
+ this.foldWidgets[firstRow] = null;
+ } else if (delta.action == 'remove') {
+ this.foldWidgets.splice(firstRow, len + 1, null);
+ } else {
+ var args = Array(len + 1);
+ args.unshift(firstRow, 1);
+ this.foldWidgets.splice.apply(this.foldWidgets, args);
+ }
+ };
+ this.tokenizerUpdateFoldWidgets = function(e) {
+ var rows = e.data;
+ if (rows.first != rows.last) {
+ if (this.foldWidgets.length > rows.first)
+ this.foldWidgets.splice(rows.first, this.foldWidgets.length);
+ }
+ };
+}
+
+exports.Folding = Folding;
+
+});
+
+define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"], function(require, exports, module) {
+"use strict";
+
+var TokenIterator = require("../token_iterator").TokenIterator;
+var Range = require("../range").Range;
+
+
+function BracketMatch() {
+
+ this.findMatchingBracket = function(position, chr) {
+ if (position.column == 0) return null;
+
+ var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column-1);
+ if (charBeforeCursor == "") return null;
+
+ var match = charBeforeCursor.match(/([\(\[\{])|([\)\]\}])/);
+ if (!match)
+ return null;
+
+ if (match[1])
+ return this.$findClosingBracket(match[1], position);
+ else
+ return this.$findOpeningBracket(match[2], position);
+ };
+
+ this.getBracketRange = function(pos) {
+ var line = this.getLine(pos.row);
+ var before = true, range;
+
+ var chr = line.charAt(pos.column-1);
+ var match = chr && chr.match(/([\(\[\{])|([\)\]\}])/);
+ if (!match) {
+ chr = line.charAt(pos.column);
+ pos = {row: pos.row, column: pos.column + 1};
+ match = chr && chr.match(/([\(\[\{])|([\)\]\}])/);
+ before = false;
+ }
+ if (!match)
+ return null;
+
+ if (match[1]) {
+ var bracketPos = this.$findClosingBracket(match[1], pos);
+ if (!bracketPos)
+ return null;
+ range = Range.fromPoints(pos, bracketPos);
+ if (!before) {
+ range.end.column++;
+ range.start.column--;
+ }
+ range.cursor = range.end;
+ } else {
+ var bracketPos = this.$findOpeningBracket(match[2], pos);
+ if (!bracketPos)
+ return null;
+ range = Range.fromPoints(bracketPos, pos);
+ if (!before) {
+ range.start.column++;
+ range.end.column--;
+ }
+ range.cursor = range.start;
+ }
+
+ return range;
+ };
+
+ this.$brackets = {
+ ")": "(",
+ "(": ")",
+ "]": "[",
+ "[": "]",
+ "{": "}",
+ "}": "{"
+ };
+
+ this.$findOpeningBracket = function(bracket, position, typeRe) {
+ var openBracket = this.$brackets[bracket];
+ var depth = 1;
+
+ var iterator = new TokenIterator(this, position.row, position.column);
+ var token = iterator.getCurrentToken();
+ if (!token)
+ token = iterator.stepForward();
+ if (!token)
+ return;
+
+ if (!typeRe){
+ typeRe = new RegExp(
+ "(\\.?" +
+ token.type.replace(".", "\\.").replace("rparen", ".paren")
+ .replace(/\b(?:end)\b/, "(?:start|begin|end)")
+ + ")+"
+ );
+ }
+ var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;
+ var value = token.value;
+
+ while (true) {
+
+ while (valueIndex >= 0) {
+ var chr = value.charAt(valueIndex);
+ if (chr == openBracket) {
+ depth -= 1;
+ if (depth == 0) {
+ return {row: iterator.getCurrentTokenRow(),
+ column: valueIndex + iterator.getCurrentTokenColumn()};
+ }
+ }
+ else if (chr == bracket) {
+ depth += 1;
+ }
+ valueIndex -= 1;
+ }
+ do {
+ token = iterator.stepBackward();
+ } while (token && !typeRe.test(token.type));
+
+ if (token == null)
+ break;
+
+ value = token.value;
+ valueIndex = value.length - 1;
+ }
+
+ return null;
+ };
+
+ this.$findClosingBracket = function(bracket, position, typeRe) {
+ var closingBracket = this.$brackets[bracket];
+ var depth = 1;
+
+ var iterator = new TokenIterator(this, position.row, position.column);
+ var token = iterator.getCurrentToken();
+ if (!token)
+ token = iterator.stepForward();
+ if (!token)
+ return;
+
+ if (!typeRe){
+ typeRe = new RegExp(
+ "(\\.?" +
+ token.type.replace(".", "\\.").replace("lparen", ".paren")
+ .replace(/\b(?:start|begin)\b/, "(?:start|begin|end)")
+ + ")+"
+ );
+ }
+ var valueIndex = position.column - iterator.getCurrentTokenColumn();
+
+ while (true) {
+
+ var value = token.value;
+ var valueLength = value.length;
+ while (valueIndex < valueLength) {
+ var chr = value.charAt(valueIndex);
+ if (chr == closingBracket) {
+ depth -= 1;
+ if (depth == 0) {
+ return {row: iterator.getCurrentTokenRow(),
+ column: valueIndex + iterator.getCurrentTokenColumn()};
+ }
+ }
+ else if (chr == bracket) {
+ depth += 1;
+ }
+ valueIndex += 1;
+ }
+ do {
+ token = iterator.stepForward();
+ } while (token && !typeRe.test(token.type));
+
+ if (token == null)
+ break;
+
+ valueIndex = 0;
+ }
+
+ return null;
+ };
+}
+exports.BracketMatch = BracketMatch;
+
+});
+
+define("ace/edit_session",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/config","ace/lib/event_emitter","ace/selection","ace/mode/text","ace/range","ace/document","ace/background_tokenizer","ace/search_highlight","ace/edit_session/folding","ace/edit_session/bracket_match"], function(require, exports, module) {
+"use strict";
+
+var oop = require("./lib/oop");
+var lang = require("./lib/lang");
+var config = require("./config");
+var EventEmitter = require("./lib/event_emitter").EventEmitter;
+var Selection = require("./selection").Selection;
+var TextMode = require("./mode/text").Mode;
+var Range = require("./range").Range;
+var Document = require("./document").Document;
+var BackgroundTokenizer = require("./background_tokenizer").BackgroundTokenizer;
+var SearchHighlight = require("./search_highlight").SearchHighlight;
+
+var EditSession = function(text, mode) {
+ this.$breakpoints = [];
+ this.$decorations = [];
+ this.$frontMarkers = {};
+ this.$backMarkers = {};
+ this.$markerId = 1;
+ this.$undoSelect = true;
+
+ this.$foldData = [];
+ this.$foldData.toString = function() {
+ return this.join("\n");
+ };
+ this.on("changeFold", this.onChangeFold.bind(this));
+ this.$onChange = this.onChange.bind(this);
+
+ if (typeof text != "object" || !text.getLine)
+ text = new Document(text);
+
+ this.setDocument(text);
+ this.selection = new Selection(this);
+
+ config.resetOptions(this);
+ this.setMode(mode);
+ config._signal("session", this);
+};
+
+
+(function() {
+
+ oop.implement(this, EventEmitter);
+ this.setDocument = function(doc) {
+ if (this.doc)
+ this.doc.removeListener("change", this.$onChange);
+
+ this.doc = doc;
+ doc.on("change", this.$onChange);
+
+ if (this.bgTokenizer)
+ this.bgTokenizer.setDocument(this.getDocument());
+
+ this.resetCaches();
+ };
+ this.getDocument = function() {
+ return this.doc;
+ };
+ this.$resetRowCache = function(docRow) {
+ if (!docRow) {
+ this.$docRowCache = [];
+ this.$screenRowCache = [];
+ return;
+ }
+ var l = this.$docRowCache.length;
+ var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;
+ if (l > i) {
+ this.$docRowCache.splice(i, l);
+ this.$screenRowCache.splice(i, l);
+ }
+ };
+
+ this.$getRowCacheIndex = function(cacheArray, val) {
+ var low = 0;
+ var hi = cacheArray.length - 1;
+
+ while (low <= hi) {
+ var mid = (low + hi) >> 1;
+ var c = cacheArray[mid];
+
+ if (val > c)
+ low = mid + 1;
+ else if (val < c)
+ hi = mid - 1;
+ else
+ return mid;
+ }
+
+ return low -1;
+ };
+
+ this.resetCaches = function() {
+ this.$modified = true;
+ this.$wrapData = [];
+ this.$rowLengthCache = [];
+ this.$resetRowCache(0);
+ if (this.bgTokenizer)
+ this.bgTokenizer.start(0);
+ };
+
+ this.onChangeFold = function(e) {
+ var fold = e.data;
+ this.$resetRowCache(fold.start.row);
+ };
+
+ this.onChange = function(delta) {
+ this.$modified = true;
+
+ this.$resetRowCache(delta.start.row);
+
+ var removedFolds = this.$updateInternalDataOnChange(delta);
+ if (!this.$fromUndo && this.$undoManager && !delta.ignore) {
+ this.$deltasDoc.push(delta);
+ if (removedFolds && removedFolds.length != 0) {
+ this.$deltasFold.push({
+ action: "removeFolds",
+ folds: removedFolds
+ });
+ }
+
+ this.$informUndoManager.schedule();
+ }
+
+ this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta);
+ this._signal("change", delta);
+ };
+ this.setValue = function(text) {
+ this.doc.setValue(text);
+ this.selection.moveTo(0, 0);
+
+ this.$resetRowCache(0);
+ this.$deltas = [];
+ this.$deltasDoc = [];
+ this.$deltasFold = [];
+ this.setUndoManager(this.$undoManager);
+ this.getUndoManager().reset();
+ };
+ this.getValue =
+ this.toString = function() {
+ return this.doc.getValue();
+ };
+ this.getSelection = function() {
+ return this.selection;
+ };
+ this.getState = function(row) {
+ return this.bgTokenizer.getState(row);
+ };
+ this.getTokens = function(row) {
+ return this.bgTokenizer.getTokens(row);
+ };
+ this.getTokenAt = function(row, column) {
+ var tokens = this.bgTokenizer.getTokens(row);
+ var token, c = 0;
+ if (column == null) {
+ i = tokens.length - 1;
+ c = this.getLine(row).length;
+ } else {
+ for (var i = 0; i < tokens.length; i++) {
+ c += tokens[i].value.length;
+ if (c >= column)
+ break;
+ }
+ }
+ token = tokens[i];
+ if (!token)
+ return null;
+ token.index = i;
+ token.start = c - token.value.length;
+ return token;
+ };
+ this.setUndoManager = function(undoManager) {
+ this.$undoManager = undoManager;
+ this.$deltas = [];
+ this.$deltasDoc = [];
+ this.$deltasFold = [];
+
+ if (this.$informUndoManager)
+ this.$informUndoManager.cancel();
+
+ if (undoManager) {
+ var self = this;
+
+ this.$syncInformUndoManager = function() {
+ self.$informUndoManager.cancel();
+
+ if (self.$deltasFold.length) {
+ self.$deltas.push({
+ group: "fold",
+ deltas: self.$deltasFold
+ });
+ self.$deltasFold = [];
+ }
+
+ if (self.$deltasDoc.length) {
+ self.$deltas.push({
+ group: "doc",
+ deltas: self.$deltasDoc
+ });
+ self.$deltasDoc = [];
+ }
+
+ if (self.$deltas.length > 0) {
+ undoManager.execute({
+ action: "aceupdate",
+ args: [self.$deltas, self],
+ merge: self.mergeUndoDeltas
+ });
+ }
+ self.mergeUndoDeltas = false;
+ self.$deltas = [];
+ };
+ this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);
+ }
+ };
+ this.markUndoGroup = function() {
+ if (this.$syncInformUndoManager)
+ this.$syncInformUndoManager();
+ };
+
+ this.$defaultUndoManager = {
+ undo: function() {},
+ redo: function() {},
+ reset: function() {}
+ };
+ this.getUndoManager = function() {
+ return this.$undoManager || this.$defaultUndoManager;
+ };
+ this.getTabString = function() {
+ if (this.getUseSoftTabs()) {
+ return lang.stringRepeat(" ", this.getTabSize());
+ } else {
+ return "\t";
+ }
+ };
+ this.setUseSoftTabs = function(val) {
+ this.setOption("useSoftTabs", val);
+ };
+ this.getUseSoftTabs = function() {
+ return this.$useSoftTabs && !this.$mode.$indentWithTabs;
+ };
+ this.setTabSize = function(tabSize) {
+ this.setOption("tabSize", tabSize);
+ };
+ this.getTabSize = function() {
+ return this.$tabSize;
+ };
+ this.isTabStop = function(position) {
+ return this.$useSoftTabs && (position.column % this.$tabSize === 0);
+ };
+
+ this.$overwrite = false;
+ this.setOverwrite = function(overwrite) {
+ this.setOption("overwrite", overwrite);
+ };
+ this.getOverwrite = function() {
+ return this.$overwrite;
+ };
+ this.toggleOverwrite = function() {
+ this.setOverwrite(!this.$overwrite);
+ };
+ this.addGutterDecoration = function(row, className) {
+ if (!this.$decorations[row])
+ this.$decorations[row] = "";
+ this.$decorations[row] += " " + className;
+ this._signal("changeBreakpoint", {});
+ };
+ this.removeGutterDecoration = function(row, className) {
+ this.$decorations[row] = (this.$decorations[row] || "").replace(" " + className, "");
+ this._signal("changeBreakpoint", {});
+ };
+ this.getBreakpoints = function() {
+ return this.$breakpoints;
+ };
+ this.setBreakpoints = function(rows) {
+ this.$breakpoints = [];
+ for (var i=0; i<rows.length; i++) {
+ this.$breakpoints[rows[i]] = "ace_breakpoint";
+ }
+ this._signal("changeBreakpoint", {});
+ };
+ this.clearBreakpoints = function() {
+ this.$breakpoints = [];
+ this._signal("changeBreakpoint", {});
+ };
+ this.setBreakpoint = function(row, className) {
+ if (className === undefined)
+ className = "ace_breakpoint";
+ if (className)
+ this.$breakpoints[row] = className;
+ else
+ delete this.$breakpoints[row];
+ this._signal("changeBreakpoint", {});
+ };
+ this.clearBreakpoint = function(row) {
+ delete this.$breakpoints[row];
+ this._signal("changeBreakpoint", {});
+ };
+ this.addMarker = function(range, clazz, type, inFront) {
+ var id = this.$markerId++;
+
+ var marker = {
+ range : range,
+ type : type || "line",
+ renderer: typeof type == "function" ? type : null,
+ clazz : clazz,
+ inFront: !!inFront,
+ id: id
+ };
+
+ if (inFront) {
+ this.$frontMarkers[id] = marker;
+ this._signal("changeFrontMarker");
+ } else {
+ this.$backMarkers[id] = marker;
+ this._signal("changeBackMarker");
+ }
+
+ return id;
+ };
+ this.addDynamicMarker = function(marker, inFront) {
+ if (!marker.update)
+ return;
+ var id = this.$markerId++;
+ marker.id = id;
+ marker.inFront = !!inFront;
+
+ if (inFront) {
+ this.$frontMarkers[id] = marker;
+ this._signal("changeFrontMarker");
+ } else {
+ this.$backMarkers[id] = marker;
+ this._signal("changeBackMarker");
+ }
+
+ return marker;
+ };
+ this.removeMarker = function(markerId) {
+ var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];
+ if (!marker)
+ return;
+
+ var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;
+ if (marker) {
+ delete (markers[markerId]);
+ this._signal(marker.inFront ? "changeFrontMarker" : "changeBackMarker");
+ }
+ };
+ this.getMarkers = function(inFront) {
+ return inFront ? this.$frontMarkers : this.$backMarkers;
+ };
+
+ this.highlight = function(re) {
+ if (!this.$searchHighlight) {
+ var highlight = new SearchHighlight(null, "ace_selected-word", "text");
+ this.$searchHighlight = this.addDynamicMarker(highlight);
+ }
+ this.$searchHighlight.setRegexp(re);
+ };
+ this.highlightLines = function(startRow, endRow, clazz, inFront) {
+ if (typeof endRow != "number") {
+ clazz = endRow;
+ endRow = startRow;
+ }
+ if (!clazz)
+ clazz = "ace_step";
+
+ var range = new Range(startRow, 0, endRow, Infinity);
+ range.id = this.addMarker(range, clazz, "fullLine", inFront);
+ return range;
+ };
+ this.setAnnotations = function(annotations) {
+ this.$annotations = annotations;
+ this._signal("changeAnnotation", {});
+ };
+ this.getAnnotations = function() {
+ return this.$annotations || [];
+ };
+ this.clearAnnotations = function() {
+ this.setAnnotations([]);
+ };
+ this.$detectNewLine = function(text) {
+ var match = text.match(/^.*?(\r?\n)/m);
+ if (match) {
+ this.$autoNewLine = match[1];
+ } else {
+ this.$autoNewLine = "\n";
+ }
+ };
+ this.getWordRange = function(row, column) {
+ var line = this.getLine(row);
+
+ var inToken = false;
+ if (column > 0)
+ inToken = !!line.charAt(column - 1).match(this.tokenRe);
+
+ if (!inToken)
+ inToken = !!line.charAt(column).match(this.tokenRe);
+
+ if (inToken)
+ var re = this.tokenRe;
+ else if (/^\s+$/.test(line.slice(column-1, column+1)))
+ var re = /\s/;
+ else
+ var re = this.nonTokenRe;
+
+ var start = column;
+ if (start > 0) {
+ do {
+ start--;
+ }
+ while (start >= 0 && line.charAt(start).match(re));
+ start++;
+ }
+
+ var end = column;
+ while (end < line.length && line.charAt(end).match(re)) {
+ end++;
+ }
+
+ return new Range(row, start, row, end);
+ };
+ this.getAWordRange = function(row, column) {
+ var wordRange = this.getWordRange(row, column);
+ var line = this.getLine(wordRange.end.row);
+
+ while (line.charAt(wordRange.end.column).match(/[ \t]/)) {
+ wordRange.end.column += 1;
+ }
+ return wordRange;
+ };
+ this.setNewLineMode = function(newLineMode) {
+ this.doc.setNewLineMode(newLineMode);
+ };
+ this.getNewLineMode = function() {
+ return this.doc.getNewLineMode();
+ };
+ this.setUseWorker = function(useWorker) { this.setOption("useWorker", useWorker); };
+ this.getUseWorker = function() { return this.$useWorker; };
+ this.onReloadTokenizer = function(e) {
+ var rows = e.data;
+ this.bgTokenizer.start(rows.first);
+ this._signal("tokenizerUpdate", e);
+ };
+
+ this.$modes = {};
+ this.$mode = null;
+ this.$modeId = null;
+ this.setMode = function(mode, cb) {
+ if (mode && typeof mode === "object") {
+ if (mode.getTokenizer)
+ return this.$onChangeMode(mode);
+ var options = mode;
+ var path = options.path;
+ } else {
+ path = mode || "ace/mode/text";
+ }
+ if (!this.$modes["ace/mode/text"])
+ this.$modes["ace/mode/text"] = new TextMode();
+
+ if (this.$modes[path] && !options) {
+ this.$onChangeMode(this.$modes[path]);
+ cb && cb();
+ return;
+ }
+ this.$modeId = path;
+ config.loadModule(["mode", path], function(m) {
+ if (this.$modeId !== path)
+ return cb && cb();
+ if (this.$modes[path] && !options) {
+ this.$onChangeMode(this.$modes[path]);
+ } else if (m && m.Mode) {
+ m = new m.Mode(options);
+ if (!options) {
+ this.$modes[path] = m;
+ m.$id = path;
+ }
+ this.$onChangeMode(m);
+ }
+ cb && cb();
+ }.bind(this));
+ if (!this.$mode)
+ this.$onChangeMode(this.$modes["ace/mode/text"], true);
+ };
+
+ this.$onChangeMode = function(mode, $isPlaceholder) {
+ if (!$isPlaceholder)
+ this.$modeId = mode.$id;
+ if (this.$mode === mode)
+ return;
+
+ this.$mode = mode;
+
+ this.$stopWorker();
+
+ if (this.$useWorker)
+ this.$startWorker();
+
+ var tokenizer = mode.getTokenizer();
+
+ if(tokenizer.addEventListener !== undefined) {
+ var onReloadTokenizer = this.onReloadTokenizer.bind(this);
+ tokenizer.addEventListener("update", onReloadTokenizer);
+ }
+
+ if (!this.bgTokenizer) {
+ this.bgTokenizer = new BackgroundTokenizer(tokenizer);
+ var _self = this;
+ this.bgTokenizer.addEventListener("update", function(e) {
+ _self._signal("tokenizerUpdate", e);
+ });
+ } else {
+ this.bgTokenizer.setTokenizer(tokenizer);
+ }
+
+ this.bgTokenizer.setDocument(this.getDocument());
+
+ this.tokenRe = mode.tokenRe;
+ this.nonTokenRe = mode.nonTokenRe;
+
+
+ if (!$isPlaceholder) {
+ if (mode.attachToSession)
+ mode.attachToSession(this);
+ this.$options.wrapMethod.set.call(this, this.$wrapMethod);
+ this.$setFolding(mode.foldingRules);
+ this.bgTokenizer.start(0);
+ this._emit("changeMode");
+ }
+ };
+
+ this.$stopWorker = function() {
+ if (this.$worker) {
+ this.$worker.terminate();
+ this.$worker = null;
+ }
+ };
+
+ this.$startWorker = function() {
+ try {
+ this.$worker = this.$mode.createWorker(this);
+ } catch (e) {
+ config.warn("Could not load worker", e);
+ this.$worker = null;
+ }
+ };
+ this.getMode = function() {
+ return this.$mode;
+ };
+
+ this.$scrollTop = 0;
+ this.setScrollTop = function(scrollTop) {
+ if (this.$scrollTop === scrollTop || isNaN(scrollTop))
+ return;
+
+ this.$scrollTop = scrollTop;
+ this._signal("changeScrollTop", scrollTop);
+ };
+ this.getScrollTop = function() {
+ return this.$scrollTop;
+ };
+
+ this.$scrollLeft = 0;
+ this.setScrollLeft = function(scrollLeft) {
+ if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))
+ return;
+
+ this.$scrollLeft = scrollLeft;
+ this._signal("changeScrollLeft", scrollLeft);
+ };
+ this.getScrollLeft = function() {
+ return this.$scrollLeft;
+ };
+ this.getScreenWidth = function() {
+ this.$computeWidth();
+ if (this.lineWidgets)
+ return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);
+ return this.screenWidth;
+ };
+
+ this.getLineWidgetMaxWidth = function() {
+ if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth;
+ var width = 0;
+ this.lineWidgets.forEach(function(w) {
+ if (w && w.screenWidth > width)
+ width = w.screenWidth;
+ });
+ return this.lineWidgetWidth = width;
+ };
+
+ this.$computeWidth = function(force) {
+ if (this.$modified || force) {
+ this.$modified = false;
+
+ if (this.$useWrapMode)
+ return this.screenWidth = this.$wrapLimit;
+
+ var lines = this.doc.getAllLines();
+ var cache = this.$rowLengthCache;
+ var longestScreenLine = 0;
+ var foldIndex = 0;
+ var foldLine = this.$foldData[foldIndex];
+ var foldStart = foldLine ? foldLine.start.row : Infinity;
+ var len = lines.length;
+
+ for (var i = 0; i < len; i++) {
+ if (i > foldStart) {
+ i = foldLine.end.row + 1;
+ if (i >= len)
+ break;
+ foldLine = this.$foldData[foldIndex++];
+ foldStart = foldLine ? foldLine.start.row : Infinity;
+ }
+
+ if (cache[i] == null)
+ cache[i] = this.$getStringScreenWidth(lines[i])[0];
+
+ if (cache[i] > longestScreenLine)
+ longestScreenLine = cache[i];
+ }
+ this.screenWidth = longestScreenLine;
+ }
+ };
+ this.getLine = function(row) {
+ return this.doc.getLine(row);
+ };
+ this.getLines = function(firstRow, lastRow) {
+ return this.doc.getLines(firstRow, lastRow);
+ };
+ this.getLength = function() {
+ return this.doc.getLength();
+ };
+ this.getTextRange = function(range) {
+ return this.doc.getTextRange(range || this.selection.getRange());
+ };
+ this.insert = function(position, text) {
+ return this.doc.insert(position, text);
+ };
+ this.remove = function(range) {
+ return this.doc.remove(range);
+ };
+ this.removeFullLines = function(firstRow, lastRow){
+ return this.doc.removeFullLines(firstRow, lastRow);
+ };
+ this.undoChanges = function(deltas, dontSelect) {
+ if (!deltas.length)
+ return;
+
+ this.$fromUndo = true;
+ var lastUndoRange = null;
+ for (var i = deltas.length - 1; i != -1; i--) {
+ var delta = deltas[i];
+ if (delta.group == "doc") {
+ this.doc.revertDeltas(delta.deltas);
+ lastUndoRange =
+ this.$getUndoSelection(delta.deltas, true, lastUndoRange);
+ } else {
+ delta.deltas.forEach(function(foldDelta) {
+ this.addFolds(foldDelta.folds);
+ }, this);
+ }
+ }
+ this.$fromUndo = false;
+ lastUndoRange &&
+ this.$undoSelect &&
+ !dontSelect &&
+ this.selection.setSelectionRange(lastUndoRange);
+ return lastUndoRange;
+ };
+ this.redoChanges = function(deltas, dontSelect) {
+ if (!deltas.length)
+ return;
+
+ this.$fromUndo = true;
+ var lastUndoRange = null;
+ for (var i = 0; i < deltas.length; i++) {
+ var delta = deltas[i];
+ if (delta.group == "doc") {
+ this.doc.applyDeltas(delta.deltas);
+ lastUndoRange =
+ this.$getUndoSelection(delta.deltas, false, lastUndoRange);
+ }
+ }
+ this.$fromUndo = false;
+ lastUndoRange &&
+ this.$undoSelect &&
+ !dontSelect &&
+ this.selection.setSelectionRange(lastUndoRange);
+ return lastUndoRange;
+ };
+ this.setUndoSelect = function(enable) {
+ this.$undoSelect = enable;
+ };
+
+ this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) {
+ function isInsert(delta) {
+ return isUndo ? delta.action !== "insert" : delta.action === "insert";
+ }
+
+ var delta = deltas[0];
+ var range, point;
+ var lastDeltaIsInsert = false;
+ if (isInsert(delta)) {
+ range = Range.fromPoints(delta.start, delta.end);
+ lastDeltaIsInsert = true;
+ } else {
+ range = Range.fromPoints(delta.start, delta.start);
+ lastDeltaIsInsert = false;
+ }
+
+ for (var i = 1; i < deltas.length; i++) {
+ delta = deltas[i];
+ if (isInsert(delta)) {
+ point = delta.start;
+ if (range.compare(point.row, point.column) == -1) {
+ range.setStart(point);
+ }
+ point = delta.end;
+ if (range.compare(point.row, point.column) == 1) {
+ range.setEnd(point);
+ }
+ lastDeltaIsInsert = true;
+ } else {
+ point = delta.start;
+ if (range.compare(point.row, point.column) == -1) {
+ range = Range.fromPoints(delta.start, delta.start);
+ }
+ lastDeltaIsInsert = false;
+ }
+ }
+ if (lastUndoRange != null) {
+ if (Range.comparePoints(lastUndoRange.start, range.start) === 0) {
+ lastUndoRange.start.column += range.end.column - range.start.column;
+ lastUndoRange.end.column += range.end.column - range.start.column;
+ }
+
+ var cmp = lastUndoRange.compareRange(range);
+ if (cmp == 1) {
+ range.setStart(lastUndoRange.start);
+ } else if (cmp == -1) {
+ range.setEnd(lastUndoRange.end);
+ }
+ }
+
+ return range;
+ };
+ this.replace = function(range, text) {
+ return this.doc.replace(range, text);
+ };
+ this.moveText = function(fromRange, toPosition, copy) {
+ var text = this.getTextRange(fromRange);
+ var folds = this.getFoldsInRange(fromRange);
+
+ var toRange = Range.fromPoints(toPosition, toPosition);
+ if (!copy) {
+ this.remove(fromRange);
+ var rowDiff = fromRange.start.row - fromRange.end.row;
+ var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;
+ if (collDiff) {
+ if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)
+ toRange.start.column += collDiff;
+ if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)
+ toRange.end.column += collDiff;
+ }
+ if (rowDiff && toRange.start.row >= fromRange.end.row) {
+ toRange.start.row += rowDiff;
+ toRange.end.row += rowDiff;
+ }
+ }
+
+ toRange.end = this.insert(toRange.start, text);
+ if (folds.length) {
+ var oldStart = fromRange.start;
+ var newStart = toRange.start;
+ var rowDiff = newStart.row - oldStart.row;
+ var collDiff = newStart.column - oldStart.column;
+ this.addFolds(folds.map(function(x) {
+ x = x.clone();
+ if (x.start.row == oldStart.row)
+ x.start.column += collDiff;
+ if (x.end.row == oldStart.row)
+ x.end.column += collDiff;
+ x.start.row += rowDiff;
+ x.end.row += rowDiff;
+ return x;
+ }));
+ }
+
+ return toRange;
+ };
+ this.indentRows = function(startRow, endRow, indentString) {
+ indentString = indentString.replace(/\t/g, this.getTabString());
+ for (var row=startRow; row<=endRow; row++)
+ this.doc.insertInLine({row: row, column: 0}, indentString);
+ };
+ this.outdentRows = function (range) {
+ var rowRange = range.collapseRows();
+ var deleteRange = new Range(0, 0, 0, 0);
+ var size = this.getTabSize();
+
+ for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {
+ var line = this.getLine(i);
+
+ deleteRange.start.row = i;
+ deleteRange.end.row = i;
+ for (var j = 0; j < size; ++j)
+ if (line.charAt(j) != ' ')
+ break;
+ if (j < size && line.charAt(j) == '\t') {
+ deleteRange.start.column = j;
+ deleteRange.end.column = j + 1;
+ } else {
+ deleteRange.start.column = 0;
+ deleteRange.end.column = j;
+ }
+ this.remove(deleteRange);
+ }
+ };
+
+ this.$moveLines = function(firstRow, lastRow, dir) {
+ firstRow = this.getRowFoldStart(firstRow);
+ lastRow = this.getRowFoldEnd(lastRow);
+ if (dir < 0) {
+ var row = this.getRowFoldStart(firstRow + dir);
+ if (row < 0) return 0;
+ var diff = row-firstRow;
+ } else if (dir > 0) {
+ var row = this.getRowFoldEnd(lastRow + dir);
+ if (row > this.doc.getLength()-1) return 0;
+ var diff = row-lastRow;
+ } else {
+ firstRow = this.$clipRowToDocument(firstRow);
+ lastRow = this.$clipRowToDocument(lastRow);
+ var diff = lastRow - firstRow + 1;
+ }
+
+ var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);
+ var folds = this.getFoldsInRange(range).map(function(x){
+ x = x.clone();
+ x.start.row += diff;
+ x.end.row += diff;
+ return x;
+ });
+
+ var lines = dir == 0
+ ? this.doc.getLines(firstRow, lastRow)
+ : this.doc.removeFullLines(firstRow, lastRow);
+ this.doc.insertFullLines(firstRow+diff, lines);
+ folds.length && this.addFolds(folds);
+ return diff;
+ };
+ this.moveLinesUp = function(firstRow, lastRow) {
+ return this.$moveLines(firstRow, lastRow, -1);
+ };
+ this.moveLinesDown = function(firstRow, lastRow) {
+ return this.$moveLines(firstRow, lastRow, 1);
+ };
+ this.duplicateLines = function(firstRow, lastRow) {
+ return this.$moveLines(firstRow, lastRow, 0);
+ };
+
+
+ this.$clipRowToDocument = function(row) {
+ return Math.max(0, Math.min(row, this.doc.getLength()-1));
+ };
+
+ this.$clipColumnToRow = function(row, column) {
+ if (column < 0)
+ return 0;
+ return Math.min(this.doc.getLine(row).length, column);
+ };
+
+
+ this.$clipPositionToDocument = function(row, column) {
+ column = Math.max(0, column);
+
+ if (row < 0) {
+ row = 0;
+ column = 0;
+ } else {
+ var len = this.doc.getLength();
+ if (row >= len) {
+ row = len - 1;
+ column = this.doc.getLine(len-1).length;
+ } else {
+ column = Math.min(this.doc.getLine(row).length, column);
+ }
+ }
+
+ return {
+ row: row,
+ column: column
+ };
+ };
+
+ this.$clipRangeToDocument = function(range) {
+ if (range.start.row < 0) {
+ range.start.row = 0;
+ range.start.column = 0;
+ } else {
+ range.start.column = this.$clipColumnToRow(
+ range.start.row,
+ range.start.column
+ );
+ }
+
+ var len = this.doc.getLength() - 1;
+ if (range.end.row > len) {
+ range.end.row = len;
+ range.end.column = this.doc.getLine(len).length;
+ } else {
+ range.end.column = this.$clipColumnToRow(
+ range.end.row,
+ range.end.column
+ );
+ }
+ return range;
+ };
+ this.$wrapLimit = 80;
+ this.$useWrapMode = false;
+ this.$wrapLimitRange = {
+ min : null,
+ max : null
+ };
+ this.setUseWrapMode = function(useWrapMode) {
+ if (useWrapMode != this.$useWrapMode) {
+ this.$useWrapMode = useWrapMode;
+ this.$modified = true;
+ this.$resetRowCache(0);
+ if (useWrapMode) {
+ var len = this.getLength();
+ this.$wrapData = Array(len);
+ this.$updateWrapData(0, len - 1);
+ }
+
+ this._signal("changeWrapMode");
+ }
+ };
+ this.getUseWrapMode = function() {
+ return this.$useWrapMode;
+ };
+ this.setWrapLimitRange = function(min, max) {
+ if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {
+ this.$wrapLimitRange = { min: min, max: max };
+ this.$modified = true;
+ if (this.$useWrapMode)
+ this._signal("changeWrapMode");
+ }
+ };
+ this.adjustWrapLimit = function(desiredLimit, $printMargin) {
+ var limits = this.$wrapLimitRange;
+ if (limits.max < 0)
+ limits = {min: $printMargin, max: $printMargin};
+ var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);
+ if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {
+ this.$wrapLimit = wrapLimit;
+ this.$modified = true;
+ if (this.$useWrapMode) {
+ this.$updateWrapData(0, this.getLength() - 1);
+ this.$resetRowCache(0);
+ this._signal("changeWrapLimit");
+ }
+ return true;
+ }
+ return false;
+ };
+
+ this.$constrainWrapLimit = function(wrapLimit, min, max) {
+ if (min)
+ wrapLimit = Math.max(min, wrapLimit);
+
+ if (max)
+ wrapLimit = Math.min(max, wrapLimit);
+
+ return wrapLimit;
+ };
+ this.getWrapLimit = function() {
+ return this.$wrapLimit;
+ };
+ this.setWrapLimit = function (limit) {
+ this.setWrapLimitRange(limit, limit);
+ };
+ this.getWrapLimitRange = function() {
+ return {
+ min : this.$wrapLimitRange.min,
+ max : this.$wrapLimitRange.max
+ };
+ };
+
+ this.$updateInternalDataOnChange = function(delta) {
+ var useWrapMode = this.$useWrapMode;
+ var action = delta.action;
+ var start = delta.start;
+ var end = delta.end;
+ var firstRow = start.row;
+ var lastRow = end.row;
+ var len = lastRow - firstRow;
+ var removedFolds = null;
+
+ this.$updating = true;
+ if (len != 0) {
+ if (action === "remove") {
+ this[useWrapMode ? "$wrapData" : "$rowLengthCache"].splice(firstRow, len);
+
+ var foldLines = this.$foldData;
+ removedFolds = this.getFoldsInRange(delta);
+ this.removeFolds(removedFolds);
+
+ var foldLine = this.getFoldLine(end.row);
+ var idx = 0;
+ if (foldLine) {
+ foldLine.addRemoveChars(end.row, end.column, start.column - end.column);
+ foldLine.shiftRow(-len);
+
+ var foldLineBefore = this.getFoldLine(firstRow);
+ if (foldLineBefore && foldLineBefore !== foldLine) {
+ foldLineBefore.merge(foldLine);
+ foldLine = foldLineBefore;
+ }
+ idx = foldLines.indexOf(foldLine) + 1;
+ }
+
+ for (idx; idx < foldLines.length; idx++) {
+ var foldLine = foldLines[idx];
+ if (foldLine.start.row >= end.row) {
+ foldLine.shiftRow(-len);
+ }
+ }
+
+ lastRow = firstRow;
+ } else {
+ var args = Array(len);
+ args.unshift(firstRow, 0);
+ var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache
+ arr.splice.apply(arr, args);
+ var foldLines = this.$foldData;
+ var foldLine = this.getFoldLine(firstRow);
+ var idx = 0;
+ if (foldLine) {
+ var cmp = foldLine.range.compareInside(start.row, start.column);
+ if (cmp == 0) {
+ foldLine = foldLine.split(start.row, start.column);
+ if (foldLine) {
+ foldLine.shiftRow(len);
+ foldLine.addRemoveChars(lastRow, 0, end.column - start.column);
+ }
+ } else
+ if (cmp == -1) {
+ foldLine.addRemoveChars(firstRow, 0, end.column - start.column);
+ foldLine.shiftRow(len);
+ }
+ idx = foldLines.indexOf(foldLine) + 1;
+ }
+
+ for (idx; idx < foldLines.length; idx++) {
+ var foldLine = foldLines[idx];
+ if (foldLine.start.row >= firstRow) {
+ foldLine.shiftRow(len);
+ }
+ }
+ }
+ } else {
+ len = Math.abs(delta.start.column - delta.end.column);
+ if (action === "remove") {
+ removedFolds = this.getFoldsInRange(delta);
+ this.removeFolds(removedFolds);
+
+ len = -len;
+ }
+ var foldLine = this.getFoldLine(firstRow);
+ if (foldLine) {
+ foldLine.addRemoveChars(firstRow, start.column, len);
+ }
+ }
+
+ if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {
+ console.error("doc.getLength() and $wrapData.length have to be the same!");
+ }
+ this.$updating = false;
+
+ if (useWrapMode)
+ this.$updateWrapData(firstRow, lastRow);
+ else
+ this.$updateRowLengthCache(firstRow, lastRow);
+
+ return removedFolds;
+ };
+
+ this.$updateRowLengthCache = function(firstRow, lastRow, b) {
+ this.$rowLengthCache[firstRow] = null;
+ this.$rowLengthCache[lastRow] = null;
+ };
+
+ this.$updateWrapData = function(firstRow, lastRow) {
+ var lines = this.doc.getAllLines();
+ var tabSize = this.getTabSize();
+ var wrapData = this.$wrapData;
+ var wrapLimit = this.$wrapLimit;
+ var tokens;
+ var foldLine;
+
+ var row = firstRow;
+ lastRow = Math.min(lastRow, lines.length - 1);
+ while (row <= lastRow) {
+ foldLine = this.getFoldLine(row, foldLine);
+ if (!foldLine) {
+ tokens = this.$getDisplayTokens(lines[row]);
+ wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);
+ row ++;
+ } else {
+ tokens = [];
+ foldLine.walk(function(placeholder, row, column, lastColumn) {
+ var walkTokens;
+ if (placeholder != null) {
+ walkTokens = this.$getDisplayTokens(
+ placeholder, tokens.length);
+ walkTokens[0] = PLACEHOLDER_START;
+ for (var i = 1; i < walkTokens.length; i++) {
+ walkTokens[i] = PLACEHOLDER_BODY;
+ }
+ } else {
+ walkTokens = this.$getDisplayTokens(
+ lines[row].substring(lastColumn, column),
+ tokens.length);
+ }
+ tokens = tokens.concat(walkTokens);
+ }.bind(this),
+ foldLine.end.row,
+ lines[foldLine.end.row].length + 1
+ );
+
+ wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);
+ row = foldLine.end.row + 1;
+ }
+ }
+ };
+ var CHAR = 1,
+ CHAR_EXT = 2,
+ PLACEHOLDER_START = 3,
+ PLACEHOLDER_BODY = 4,
+ PUNCTUATION = 9,
+ SPACE = 10,
+ TAB = 11,
+ TAB_SPACE = 12;
+
+
+ this.$computeWrapSplits = function(tokens, wrapLimit, tabSize) {
+ if (tokens.length == 0) {
+ return [];
+ }
+
+ var splits = [];
+ var displayLength = tokens.length;
+ var lastSplit = 0, lastDocSplit = 0;
+
+ var isCode = this.$wrapAsCode;
+
+ var indentedSoftWrap = this.$indentedSoftWrap;
+ var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)
+ || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);
+
+ function getWrapIndent() {
+ var indentation = 0;
+ if (maxIndent === 0)
+ return indentation;
+ if (indentedSoftWrap) {
+ for (var i = 0; i < tokens.length; i++) {
+ var token = tokens[i];
+ if (token == SPACE)
+ indentation += 1;
+ else if (token == TAB)
+ indentation += tabSize;
+ else if (token == TAB_SPACE)
+ continue;
+ else
+ break;
+ }
+ }
+ if (isCode && indentedSoftWrap !== false)
+ indentation += tabSize;
+ return Math.min(indentation, maxIndent);
+ }
+ function addSplit(screenPos) {
+ var displayed = tokens.slice(lastSplit, screenPos);
+ var len = displayed.length;
+ displayed.join("").
+ replace(/12/g, function() {
+ len -= 1;
+ }).
+ replace(/2/g, function() {
+ len -= 1;
+ });
+
+ if (!splits.length) {
+ indent = getWrapIndent();
+ splits.indent = indent;
+ }
+ lastDocSplit += len;
+ splits.push(lastDocSplit);
+ lastSplit = screenPos;
+ }
+ var indent = 0;
+ while (displayLength - lastSplit > wrapLimit - indent) {
+ var split = lastSplit + wrapLimit - indent;
+ if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {
+ addSplit(split);
+ continue;
+ }
+ if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {
+ for (split; split != lastSplit - 1; split--) {
+ if (tokens[split] == PLACEHOLDER_START) {
+ break;
+ }
+ }
+ if (split > lastSplit) {
+ addSplit(split);
+ continue;
+ }
+ split = lastSplit + wrapLimit;
+ for (split; split < tokens.length; split++) {
+ if (tokens[split] != PLACEHOLDER_BODY) {
+ break;
+ }
+ }
+ if (split == tokens.length) {
+ break; // Breaks the while-loop.
+ }
+ addSplit(split);
+ continue;
+ }
+ var minSplit = Math.max(split - (wrapLimit -(wrapLimit>>2)), lastSplit - 1);
+ while (split > minSplit && tokens[split] < PLACEHOLDER_START) {
+ split --;
+ }
+ if (isCode) {
+ while (split > minSplit && tokens[split] < PLACEHOLDER_START) {
+ split --;
+ }
+ while (split > minSplit && tokens[split] == PUNCTUATION) {
+ split --;
+ }
+ } else {
+ while (split > minSplit && tokens[split] < SPACE) {
+ split --;
+ }
+ }
+ if (split > minSplit) {
+ addSplit(++split);
+ continue;
+ }
+ split = lastSplit + wrapLimit;
+ if (tokens[split] == CHAR_EXT)
+ split--;
+ addSplit(split - indent);
+ }
+ return splits;
+ };
+ this.$getDisplayTokens = function(str, offset) {
+ var arr = [];
+ var tabSize;
+ offset = offset || 0;
+
+ for (var i = 0; i < str.length; i++) {
+ var c = str.charCodeAt(i);
+ if (c == 9) {
+ tabSize = this.getScreenTabSize(arr.length + offset);
+ arr.push(TAB);
+ for (var n = 1; n < tabSize; n++) {
+ arr.push(TAB_SPACE);
+ }
+ }
+ else if (c == 32) {
+ arr.push(SPACE);
+ } else if((c > 39 && c < 48) || (c > 57 && c < 64)) {
+ arr.push(PUNCTUATION);
+ }
+ else if (c >= 0x1100 && isFullWidth(c)) {
+ arr.push(CHAR, CHAR_EXT);
+ } else {
+ arr.push(CHAR);
+ }
+ }
+ return arr;
+ };
+ this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {
+ if (maxScreenColumn == 0)
+ return [0, 0];
+ if (maxScreenColumn == null)
+ maxScreenColumn = Infinity;
+ screenColumn = screenColumn || 0;
+
+ var c, column;
+ for (column = 0; column < str.length; column++) {
+ c = str.charCodeAt(column);
+ if (c == 9) {
+ screenColumn += this.getScreenTabSize(screenColumn);
+ }
+ else if (c >= 0x1100 && isFullWidth(c)) {
+ screenColumn += 2;
+ } else {
+ screenColumn += 1;
+ }
+ if (screenColumn > maxScreenColumn) {
+ break;
+ }
+ }
+
+ return [screenColumn, column];
+ };
+
+ this.lineWidgets = null;
+ this.getRowLength = function(row) {
+ if (this.lineWidgets)
+ var h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;
+ else
+ h = 0
+ if (!this.$useWrapMode || !this.$wrapData[row]) {
+ return 1 + h;
+ } else {
+ return this.$wrapData[row].length + 1 + h;
+ }
+ };
+ this.getRowLineCount = function(row) {
+ if (!this.$useWrapMode || !this.$wrapData[row]) {
+ return 1;
+ } else {
+ return this.$wrapData[row].length + 1;
+ }
+ };
+
+ this.getRowWrapIndent = function(screenRow) {
+ if (this.$useWrapMode) {
+ var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);
+ var splits = this.$wrapData[pos.row];
+ return splits.length && splits[0] < pos.column ? splits.indent : 0;
+ } else {
+ return 0;
+ }
+ }
+ this.getScreenLastRowColumn = function(screenRow) {
+ var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);
+ return this.documentToScreenColumn(pos.row, pos.column);
+ };
+ this.getDocumentLastRowColumn = function(docRow, docColumn) {
+ var screenRow = this.documentToScreenRow(docRow, docColumn);
+ return this.getScreenLastRowColumn(screenRow);
+ };
+ this.getDocumentLastRowColumnPosition = function(docRow, docColumn) {
+ var screenRow = this.documentToScreenRow(docRow, docColumn);
+ return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);
+ };
+ this.getRowSplitData = function(row) {
+ if (!this.$useWrapMode) {
+ return undefined;
+ } else {
+ return this.$wrapData[row];
+ }
+ };
+ this.getScreenTabSize = function(screenColumn) {
+ return this.$tabSize - screenColumn % this.$tabSize;
+ };
+
+
+ this.screenToDocumentRow = function(screenRow, screenColumn) {
+ return this.screenToDocumentPosition(screenRow, screenColumn).row;
+ };
+
+
+ this.screenToDocumentColumn = function(screenRow, screenColumn) {
+ return this.screenToDocumentPosition(screenRow, screenColumn).column;
+ };
+ this.screenToDocumentPosition = function(screenRow, screenColumn) {
+ if (screenRow < 0)
+ return {row: 0, column: 0};
+
+ var line;
+ var docRow = 0;
+ var docColumn = 0;
+ var column;
+ var row = 0;
+ var rowLength = 0;
+
+ var rowCache = this.$screenRowCache;
+ var i = this.$getRowCacheIndex(rowCache, screenRow);
+ var l = rowCache.length;
+ if (l && i >= 0) {
+ var row = rowCache[i];
+ var docRow = this.$docRowCache[i];
+ var doCache = screenRow > rowCache[l - 1];
+ } else {
+ var doCache = !l;
+ }
+
+ var maxRow = this.getLength() - 1;
+ var foldLine = this.getNextFoldLine(docRow);
+ var foldStart = foldLine ? foldLine.start.row : Infinity;
+
+ while (row <= screenRow) {
+ rowLength = this.getRowLength(docRow);
+ if (row + rowLength > screenRow || docRow >= maxRow) {
+ break;
+ } else {
+ row += rowLength;
+ docRow++;
+ if (docRow > foldStart) {
+ docRow = foldLine.end.row+1;
+ foldLine = this.getNextFoldLine(docRow, foldLine);
+ foldStart = foldLine ? foldLine.start.row : Infinity;
+ }
+ }
+
+ if (doCache) {
+ this.$docRowCache.push(docRow);
+ this.$screenRowCache.push(row);
+ }
+ }
+
+ if (foldLine && foldLine.start.row <= docRow) {
+ line = this.getFoldDisplayLine(foldLine);
+ docRow = foldLine.start.row;
+ } else if (row + rowLength <= screenRow || docRow > maxRow) {
+ return {
+ row: maxRow,
+ column: this.getLine(maxRow).length
+ };
+ } else {
+ line = this.getLine(docRow);
+ foldLine = null;
+ }
+ var wrapIndent = 0;
+ if (this.$useWrapMode) {
+ var splits = this.$wrapData[docRow];
+ if (splits) {
+ var splitIndex = Math.floor(screenRow - row);
+ column = splits[splitIndex];
+ if(splitIndex > 0 && splits.length) {
+ wrapIndent = splits.indent;
+ docColumn = splits[splitIndex - 1] || splits[splits.length - 1];
+ line = line.substring(docColumn);
+ }
+ }
+ }
+
+ docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];
+ if (this.$useWrapMode && docColumn >= column)
+ docColumn = column - 1;
+
+ if (foldLine)
+ return foldLine.idxToPosition(docColumn);
+
+ return {row: docRow, column: docColumn};
+ };
+ this.documentToScreenPosition = function(docRow, docColumn) {
+ if (typeof docColumn === "undefined")
+ var pos = this.$clipPositionToDocument(docRow.row, docRow.column);
+ else
+ pos = this.$clipPositionToDocument(docRow, docColumn);
+
+ docRow = pos.row;
+ docColumn = pos.column;
+
+ var screenRow = 0;
+ var foldStartRow = null;
+ var fold = null;
+ fold = this.getFoldAt(docRow, docColumn, 1);
+ if (fold) {
+ docRow = fold.start.row;
+ docColumn = fold.start.column;
+ }
+
+ var rowEnd, row = 0;
+
+
+ var rowCache = this.$docRowCache;
+ var i = this.$getRowCacheIndex(rowCache, docRow);
+ var l = rowCache.length;
+ if (l && i >= 0) {
+ var row = rowCache[i];
+ var screenRow = this.$screenRowCache[i];
+ var doCache = docRow > rowCache[l - 1];
+ } else {
+ var doCache = !l;
+ }
+
+ var foldLine = this.getNextFoldLine(row);
+ var foldStart = foldLine ?foldLine.start.row :Infinity;
+
+ while (row < docRow) {
+ if (row >= foldStart) {
+ rowEnd = foldLine.end.row + 1;
+ if (rowEnd > docRow)
+ break;
+ foldLine = this.getNextFoldLine(rowEnd, foldLine);
+ foldStart = foldLine ?foldLine.start.row :Infinity;
+ }
+ else {
+ rowEnd = row + 1;
+ }
+
+ screenRow += this.getRowLength(row);
+ row = rowEnd;
+
+ if (doCache) {
+ this.$docRowCache.push(row);
+ this.$screenRowCache.push(screenRow);
+ }
+ }
+ var textLine = "";
+ if (foldLine && row >= foldStart) {
+ textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);
+ foldStartRow = foldLine.start.row;
+ } else {
+ textLine = this.getLine(docRow).substring(0, docColumn);
+ foldStartRow = docRow;
+ }
+ var wrapIndent = 0;
+ if (this.$useWrapMode) {
+ var wrapRow = this.$wrapData[foldStartRow];
+ if (wrapRow) {
+ var screenRowOffset = 0;
+ while (textLine.length >= wrapRow[screenRowOffset]) {
+ screenRow ++;
+ screenRowOffset++;
+ }
+ textLine = textLine.substring(
+ wrapRow[screenRowOffset - 1] || 0, textLine.length
+ );
+ wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;
+ }
+ }
+
+ return {
+ row: screenRow,
+ column: wrapIndent + this.$getStringScreenWidth(textLine)[0]
+ };
+ };
+ this.documentToScreenColumn = function(row, docColumn) {
+ return this.documentToScreenPosition(row, docColumn).column;
+ };
+ this.documentToScreenRow = function(docRow, docColumn) {
+ return this.documentToScreenPosition(docRow, docColumn).row;
+ };
+ this.getScreenLength = function() {
+ var screenRows = 0;
+ var fold = null;
+ if (!this.$useWrapMode) {
+ screenRows = this.getLength();
+ var foldData = this.$foldData;
+ for (var i = 0; i < foldData.length; i++) {
+ fold = foldData[i];
+ screenRows -= fold.end.row - fold.start.row;
+ }
+ } else {
+ var lastRow = this.$wrapData.length;
+ var row = 0, i = 0;
+ var fold = this.$foldData[i++];
+ var foldStart = fold ? fold.start.row :Infinity;
+
+ while (row < lastRow) {
+ var splits = this.$wrapData[row];
+ screenRows += splits ? splits.length + 1 : 1;
+ row ++;
+ if (row > foldStart) {
+ row = fold.end.row+1;
+ fold = this.$foldData[i++];
+ foldStart = fold ?fold.start.row :Infinity;
+ }
+ }
+ }
+ if (this.lineWidgets)
+ screenRows += this.$getWidgetScreenLength();
+
+ return screenRows;
+ };
+ this.$setFontMetrics = function(fm) {
+ if (!this.$enableVarChar) return;
+ this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {
+ if (maxScreenColumn === 0)
+ return [0, 0];
+ if (!maxScreenColumn)
+ maxScreenColumn = Infinity;
+ screenColumn = screenColumn || 0;
+
+ var c, column;
+ for (column = 0; column < str.length; column++) {
+ c = str.charAt(column);
+ if (c === "\t") {
+ screenColumn += this.getScreenTabSize(screenColumn);
+ } else {
+ screenColumn += fm.getCharacterWidth(c);
+ }
+ if (screenColumn > maxScreenColumn) {
+ break;
+ }
+ }
+
+ return [screenColumn, column];
+ };
+ };
+
+ this.destroy = function() {
+ if (this.bgTokenizer) {
+ this.bgTokenizer.setDocument(null);
+ this.bgTokenizer = null;
+ }
+ this.$stopWorker();
+ };
+ function isFullWidth(c) {
+ if (c < 0x1100)
+ return false;
+ return c >= 0x1100 && c <= 0x115F ||
+ c >= 0x11A3 && c <= 0x11A7 ||
+ c >= 0x11FA && c <= 0x11FF ||
+ c >= 0x2329 && c <= 0x232A ||
+ c >= 0x2E80 && c <= 0x2E99 ||
+ c >= 0x2E9B && c <= 0x2EF3 ||
+ c >= 0x2F00 && c <= 0x2FD5 ||
+ c >= 0x2FF0 && c <= 0x2FFB ||
+ c >= 0x3000 && c <= 0x303E ||
+ c >= 0x3041 && c <= 0x3096 ||
+ c >= 0x3099 && c <= 0x30FF ||
+ c >= 0x3105 && c <= 0x312D ||
+ c >= 0x3131 && c <= 0x318E ||
+ c >= 0x3190 && c <= 0x31BA ||
+ c >= 0x31C0 && c <= 0x31E3 ||
+ c >= 0x31F0 && c <= 0x321E ||
+ c >= 0x3220 && c <= 0x3247 ||
+ c >= 0x3250 && c <= 0x32FE ||
+ c >= 0x3300 && c <= 0x4DBF ||
+ c >= 0x4E00 && c <= 0xA48C ||
+ c >= 0xA490 && c <= 0xA4C6 ||
+ c >= 0xA960 && c <= 0xA97C ||
+ c >= 0xAC00 && c <= 0xD7A3 ||
+ c >= 0xD7B0 && c <= 0xD7C6 ||
+ c >= 0xD7CB && c <= 0xD7FB ||
+ c >= 0xF900 && c <= 0xFAFF ||
+ c >= 0xFE10 && c <= 0xFE19 ||
+ c >= 0xFE30 && c <= 0xFE52 ||
+ c >= 0xFE54 && c <= 0xFE66 ||
+ c >= 0xFE68 && c <= 0xFE6B ||
+ c >= 0xFF01 && c <= 0xFF60 ||
+ c >= 0xFFE0 && c <= 0xFFE6;
+ };
+
+}).call(EditSession.prototype);
+
+require("./edit_session/folding").Folding.call(EditSession.prototype);
+require("./edit_session/bracket_match").BracketMatch.call(EditSession.prototype);
+
+
+config.defineOptions(EditSession.prototype, "session", {
+ wrap: {
+ set: function(value) {
+ if (!value || value == "off")
+ value = false;
+ else if (value == "free")
+ value = true;
+ else if (value == "printMargin")
+ value = -1;
+ else if (typeof value == "string")
+ value = parseInt(value, 10) || false;
+
+ if (this.$wrap == value)
+ return;
+ this.$wrap = value;
+ if (!value) {
+ this.setUseWrapMode(false);
+ } else {
+ var col = typeof value == "number" ? value : null;
+ this.setWrapLimitRange(col, col);
+ this.setUseWrapMode(true);
+ }
+ },
+ get: function() {
+ if (this.getUseWrapMode()) {
+ if (this.$wrap == -1)
+ return "printMargin";
+ if (!this.getWrapLimitRange().min)
+ return "free";
+ return this.$wrap;
+ }
+ return "off";
+ },
+ handlesSet: true
+ },
+ wrapMethod: {
+ set: function(val) {
+ val = val == "auto"
+ ? this.$mode.type != "text"
+ : val != "text";
+ if (val != this.$wrapAsCode) {
+ this.$wrapAsCode = val;
+ if (this.$useWrapMode) {
+ this.$modified = true;
+ this.$resetRowCache(0);
+ this.$updateWrapData(0, this.getLength() - 1);
+ }
+ }
+ },
+ initialValue: "auto"
+ },
+ indentedSoftWrap: { initialValue: true },
+ firstLineNumber: {
+ set: function() {this._signal("changeBreakpoint");},
+ initialValue: 1
+ },
+ useWorker: {
+ set: function(useWorker) {
+ this.$useWorker = useWorker;
+
+ this.$stopWorker();
+ if (useWorker)
+ this.$startWorker();
+ },
+ initialValue: true
+ },
+ useSoftTabs: {initialValue: true},
+ tabSize: {
+ set: function(tabSize) {
+ if (isNaN(tabSize) || this.$tabSize === tabSize) return;
+
+ this.$modified = true;
+ this.$rowLengthCache = [];
+ this.$tabSize = tabSize;
+ this._signal("changeTabSize");
+ },
+ initialValue: 4,
+ handlesSet: true
+ },
+ overwrite: {
+ set: function(val) {this._signal("changeOverwrite");},
+ initialValue: false
+ },
+ newLineMode: {
+ set: function(val) {this.doc.setNewLineMode(val)},
+ get: function() {return this.doc.getNewLineMode()},
+ handlesSet: true
+ },
+ mode: {
+ set: function(val) { this.setMode(val) },
+ get: function() { return this.$modeId }
+ }
+});
+
+exports.EditSession = EditSession;
+});
+
+define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"], function(require, exports, module) {
+"use strict";
+
+var lang = require("./lib/lang");
+var oop = require("./lib/oop");
+var Range = require("./range").Range;
+
+var Search = function() {
+ this.$options = {};
+};
+
+(function() {
+ this.set = function(options) {
+ oop.mixin(this.$options, options);
+ return this;
+ };
+ this.getOptions = function() {
+ return lang.copyObject(this.$options);
+ };
+ this.setOptions = function(options) {
+ this.$options = options;
+ };
+ this.find = function(session) {
+ var options = this.$options;
+ var iterator = this.$matchIterator(session, options);
+ if (!iterator)
+ return false;
+
+ var firstRange = null;
+ iterator.forEach(function(range, row, offset) {
+ if (!range.start) {
+ var column = range.offset + (offset || 0);
+ firstRange = new Range(row, column, row, column + range.length);
+ if (!range.length && options.start && options.start.start
+ && options.skipCurrent != false && firstRange.isEqual(options.start)
+ ) {
+ firstRange = null;
+ return false;
+ }
+ } else
+ firstRange = range;
+ return true;
+ });
+
+ return firstRange;
+ };
+ this.findAll = function(session) {
+ var options = this.$options;
+ if (!options.needle)
+ return [];
+ this.$assembleRegExp(options);
+
+ var range = options.range;
+ var lines = range
+ ? session.getLines(range.start.row, range.end.row)
+ : session.doc.getAllLines();
+
+ var ranges = [];
+ var re = options.re;
+ if (options.$isMultiLine) {
+ var len = re.length;
+ var maxRow = lines.length - len;
+ var prevRange;
+ outer: for (var row = re.offset || 0; row <= maxRow; row++) {
+ for (var j = 0; j < len; j++)
+ if (lines[row + j].search(re[j]) == -1)
+ continue outer;
+
+ var startLine = lines[row];
+ var line = lines[row + len - 1];
+ var startIndex = startLine.length - startLine.match(re[0])[0].length;
+ var endIndex = line.match(re[len - 1])[0].length;
+
+ if (prevRange && prevRange.end.row === row &&
+ prevRange.end.column > startIndex
+ ) {
+ continue;
+ }
+ ranges.push(prevRange = new Range(
+ row, startIndex, row + len - 1, endIndex
+ ));
+ if (len > 2)
+ row = row + len - 2;
+ }
+ } else {
+ for (var i = 0; i < lines.length; i++) {
+ var matches = lang.getMatchOffsets(lines[i], re);
+ for (var j = 0; j < matches.length; j++) {
+ var match = matches[j];
+ ranges.push(new Range(i, match.offset, i, match.offset + match.length));
+ }
+ }
+ }
+
+ if (range) {
+ var startColumn = range.start.column;
+ var endColumn = range.start.column;
+ var i = 0, j = ranges.length - 1;
+ while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row)
+ i++;
+
+ while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row)
+ j--;
+
+ ranges = ranges.slice(i, j + 1);
+ for (i = 0, j = ranges.length; i < j; i++) {
+ ranges[i].start.row += range.start.row;
+ ranges[i].end.row += range.start.row;
+ }
+ }
+
+ return ranges;
+ };
+ this.replace = function(input, replacement) {
+ var options = this.$options;
+
+ var re = this.$assembleRegExp(options);
+ if (options.$isMultiLine)
+ return replacement;
+
+ if (!re)
+ return;
+
+ var match = re.exec(input);
+ if (!match || match[0].length != input.length)
+ return null;
+
+ replacement = input.replace(re, replacement);
+ if (options.preserveCase) {
+ replacement = replacement.split("");
+ for (var i = Math.min(input.length, input.length); i--; ) {
+ var ch = input[i];
+ if (ch && ch.toLowerCase() != ch)
+ replacement[i] = replacement[i].toUpperCase();
+ else
+ replacement[i] = replacement[i].toLowerCase();
+ }
+ replacement = replacement.join("");
+ }
+
+ return replacement;
+ };
+
+ this.$matchIterator = function(session, options) {
+ var re = this.$assembleRegExp(options);
+ if (!re)
+ return false;
+
+ var callback;
+ if (options.$isMultiLine) {
+ var len = re.length;
+ var matchIterator = function(line, row, offset) {
+ var startIndex = line.search(re[0]);
+ if (startIndex == -1)
+ return;
+ for (var i = 1; i < len; i++) {
+ line = session.getLine(row + i);
+ if (line.search(re[i]) == -1)
+ return;
+ }
+
+ var endIndex = line.match(re[len - 1])[0].length;
+
+ var range = new Range(row, startIndex, row + len - 1, endIndex);
+ if (re.offset == 1) {
+ range.start.row--;
+ range.start.column = Number.MAX_VALUE;
+ } else if (offset)
+ range.start.column += offset;
+
+ if (callback(range))
+ return true;
+ };
+ } else if (options.backwards) {
+ var matchIterator = function(line, row, startIndex) {
+ var matches = lang.getMatchOffsets(line, re);
+ for (var i = matches.length-1; i >= 0; i--)
+ if (callback(matches[i], row, startIndex))
+ return true;
+ };
+ } else {
+ var matchIterator = function(line, row, startIndex) {
+ var matches = lang.getMatchOffsets(line, re);
+ for (var i = 0; i < matches.length; i++)
+ if (callback(matches[i], row, startIndex))
+ return true;
+ };
+ }
+
+ var lineIterator = this.$lineIterator(session, options);
+
+ return {
+ forEach: function(_callback) {
+ callback = _callback;
+ lineIterator.forEach(matchIterator);
+ }
+ };
+ };
+
+ this.$assembleRegExp = function(options, $disableFakeMultiline) {
+ if (options.needle instanceof RegExp)
+ return options.re = options.needle;
+
+ var needle = options.needle;
+
+ if (!options.needle)
+ return options.re = false;
+
+ if (!options.regExp)
+ needle = lang.escapeRegExp(needle);
+
+ if (options.wholeWord)
+ needle = "\\b" + needle + "\\b";
+
+ var modifier = options.caseSensitive ? "gm" : "gmi";
+
+ options.$isMultiLine = !$disableFakeMultiline && /[\n\r]/.test(needle);
+ if (options.$isMultiLine)
+ return options.re = this.$assembleMultilineRegExp(needle, modifier);
+
+ try {
+ var re = new RegExp(needle, modifier);
+ } catch(e) {
+ re = false;
+ }
+ return options.re = re;
+ };
+
+ this.$assembleMultilineRegExp = function(needle, modifier) {
+ var parts = needle.replace(/\r\n|\r|\n/g, "$\n^").split("\n");
+ var re = [];
+ for (var i = 0; i < parts.length; i++) try {
+ re.push(new RegExp(parts[i], modifier));
+ } catch(e) {
+ return false;
+ }
+ if (parts[0] == "") {
+ re.shift();
+ re.offset = 1;
+ } else {
+ re.offset = 0;
+ }
+ return re;
+ };
+
+ this.$lineIterator = function(session, options) {
+ var backwards = options.backwards == true;
+ var skipCurrent = options.skipCurrent != false;
+
+ var range = options.range;
+ var start = options.start;
+ if (!start)
+ start = range ? range[backwards ? "end" : "start"] : session.selection.getRange();
+
+ if (start.start)
+ start = start[skipCurrent != backwards ? "end" : "start"];
+
+ var firstRow = range ? range.start.row : 0;
+ var lastRow = range ? range.end.row : session.getLength() - 1;
+
+ var forEach = backwards ? function(callback) {
+ var row = start.row;
+
+ var line = session.getLine(row).substring(0, start.column);
+ if (callback(line, row))
+ return;
+
+ for (row--; row >= firstRow; row--)
+ if (callback(session.getLine(row), row))
+ return;
+
+ if (options.wrap == false)
+ return;
+
+ for (row = lastRow, firstRow = start.row; row >= firstRow; row--)
+ if (callback(session.getLine(row), row))
+ return;
+ } : function(callback) {
+ var row = start.row;
+
+ var line = session.getLine(row).substr(start.column);
+ if (callback(line, row, start.column))
+ return;
+
+ for (row = row+1; row <= lastRow; row++)
+ if (callback(session.getLine(row), row))
+ return;
+
+ if (options.wrap == false)
+ return;
+
+ for (row = firstRow, lastRow = start.row; row <= lastRow; row++)
+ if (callback(session.getLine(row), row))
+ return;
+ };
+
+ return {forEach: forEach};
+ };
+
+}).call(Search.prototype);
+
+exports.Search = Search;
+});
+
+define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"], function(require, exports, module) {
+"use strict";
+
+var keyUtil = require("../lib/keys");
+var useragent = require("../lib/useragent");
+var KEY_MODS = keyUtil.KEY_MODS;
+
+function HashHandler(config, platform) {
+ this.platform = platform || (useragent.isMac ? "mac" : "win");
+ this.commands = {};
+ this.commandKeyBinding = {};
+ this.addCommands(config);
+ this.$singleCommand = true;
+}
+
+function MultiHashHandler(config, platform) {
+ HashHandler.call(this, config, platform);
+ this.$singleCommand = false;
+}
+
+MultiHashHandler.prototype = HashHandler.prototype;
+
+(function() {
+
+
+ this.addCommand = function(command) {
+ if (this.commands[command.name])
+ this.removeCommand(command);
+
+ this.commands[command.name] = command;
+
+ if (command.bindKey)
+ this._buildKeyHash(command);
+ };
+
+ this.removeCommand = function(command, keepCommand) {
+ var name = command && (typeof command === 'string' ? command : command.name);
+ command = this.commands[name];
+ if (!keepCommand)
+ delete this.commands[name];
+ var ckb = this.commandKeyBinding;
+ for (var keyId in ckb) {
+ var cmdGroup = ckb[keyId];
+ if (cmdGroup == command) {
+ delete ckb[keyId];
+ } else if (Array.isArray(cmdGroup)) {
+ var i = cmdGroup.indexOf(command);
+ if (i != -1) {
+ cmdGroup.splice(i, 1);
+ if (cmdGroup.length == 1)
+ ckb[keyId] = cmdGroup[0];
+ }
+ }
+ }
+ };
+
+ this.bindKey = function(key, command, position) {
+ if (typeof key == "object") {
+ if (position == undefined)
+ position = key.position;
+ key = key[this.platform];
+ }
+ if (!key)
+ return;
+ if (typeof command == "function")
+ return this.addCommand({exec: command, bindKey: key, name: command.name || key});
+
+ key.split("|").forEach(function(keyPart) {
+ var chain = "";
+ if (keyPart.indexOf(" ") != -1) {
+ var parts = keyPart.split(/\s+/);
+ keyPart = parts.pop();
+ parts.forEach(function(keyPart) {
+ var binding = this.parseKeys(keyPart);
+ var id = KEY_MODS[binding.hashId] + binding.key;
+ chain += (chain ? " " : "") + id;
+ this._addCommandToBinding(chain, "chainKeys");
+ }, this);
+ chain += " ";
+ }
+ var binding = this.parseKeys(keyPart);
+ var id = KEY_MODS[binding.hashId] + binding.key;
+ this._addCommandToBinding(chain + id, command, position);
+ }, this);
+ };
+
+ function getPosition(command) {
+ return typeof command == "object" && command.bindKey
+ && command.bindKey.position || 0;
+ }
+ this._addCommandToBinding = function(keyId, command, position) {
+ var ckb = this.commandKeyBinding, i;
+ if (!command) {
+ delete ckb[keyId];
+ } else if (!ckb[keyId] || this.$singleCommand) {
+ ckb[keyId] = command;
+ } else {
+ if (!Array.isArray(ckb[keyId])) {
+ ckb[keyId] = [ckb[keyId]];
+ } else if ((i = ckb[keyId].indexOf(command)) != -1) {
+ ckb[keyId].splice(i, 1);
+ }
+
+ if (typeof position != "number") {
+ if (position || command.isDefault)
+ position = -100;
+ else
+ position = getPosition(command);
+ }
+ var commands = ckb[keyId];
+ for (i = 0; i < commands.length; i++) {
+ var other = commands[i];
+ var otherPos = getPosition(other);
+ if (otherPos > position)
+ break;
+ }
+ commands.splice(i, 0, command);
+ }
+ };
+
+ this.addCommands = function(commands) {
+ commands && Object.keys(commands).forEach(function(name) {
+ var command = commands[name];
+ if (!command)
+ return;
+
+ if (typeof command === "string")
+ return this.bindKey(command, name);
+
+ if (typeof command === "function")
+ command = { exec: command };
+
+ if (typeof command !== "object")
+ return;
+
+ if (!command.name)
+ command.name = name;
+
+ this.addCommand(command);
+ }, this);
+ };
+
+ this.removeCommands = function(commands) {
+ Object.keys(commands).forEach(function(name) {
+ this.removeCommand(commands[name]);
+ }, this);
+ };
+
+ this.bindKeys = function(keyList) {
+ Object.keys(keyList).forEach(function(key) {
+ this.bindKey(key, keyList[key]);
+ }, this);
+ };
+
+ this._buildKeyHash = function(command) {
+ this.bindKey(command.bindKey, command);
+ };
+ this.parseKeys = function(keys) {
+ var parts = keys.toLowerCase().split(/[\-\+]([\-\+])?/).filter(function(x){return x});
+ var key = parts.pop();
+
+ var keyCode = keyUtil[key];
+ if (keyUtil.FUNCTION_KEYS[keyCode])
+ key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();
+ else if (!parts.length)
+ return {key: key, hashId: -1};
+ else if (parts.length == 1 && parts[0] == "shift")
+ return {key: key.toUpperCase(), hashId: -1};
+
+ var hashId = 0;
+ for (var i = parts.length; i--;) {
+ var modifier = keyUtil.KEY_MODS[parts[i]];
+ if (modifier == null) {
+ if (typeof console != "undefined")
+ console.error("invalid modifier " + parts[i] + " in " + keys);
+ return false;
+ }
+ hashId |= modifier;
+ }
+ return {key: key, hashId: hashId};
+ };
+
+ this.findKeyCommand = function findKeyCommand(hashId, keyString) {
+ var key = KEY_MODS[hashId] + keyString;
+ return this.commandKeyBinding[key];
+ };
+
+ this.handleKeyboard = function(data, hashId, keyString, keyCode) {
+ if (keyCode < 0) return;
+ var key = KEY_MODS[hashId] + keyString;
+ var command = this.commandKeyBinding[key];
+ if (data.$keyChain) {
+ data.$keyChain += " " + key;
+ command = this.commandKeyBinding[data.$keyChain] || command;
+ }
+
+ if (command) {
+ if (command == "chainKeys" || command[command.length - 1] == "chainKeys") {
+ data.$keyChain = data.$keyChain || key;
+ return {command: "null"};
+ }
+ }
+
+ if (data.$keyChain) {
+ if ((!hashId || hashId == 4) && keyString.length == 1)
+ data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input
+ else if (hashId == -1 || keyCode > 0)
+ data.$keyChain = ""; // reset keyChain
+ }
+ return {command: command};
+ };
+
+ this.getStatusText = function(editor, data) {
+ return data.$keyChain || "";
+ };
+
+}).call(HashHandler.prototype);
+
+exports.HashHandler = HashHandler;
+exports.MultiHashHandler = MultiHashHandler;
+});
+
+define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var MultiHashHandler = require("../keyboard/hash_handler").MultiHashHandler;
+var EventEmitter = require("../lib/event_emitter").EventEmitter;
+
+var CommandManager = function(platform, commands) {
+ MultiHashHandler.call(this, commands, platform);
+ this.byName = this.commands;
+ this.setDefaultHandler("exec", function(e) {
+ return e.command.exec(e.editor, e.args || {});
+ });
+};
+
+oop.inherits(CommandManager, MultiHashHandler);
+
+(function() {
+
+ oop.implement(this, EventEmitter);
+
+ this.exec = function(command, editor, args) {
+ if (Array.isArray(command)) {
+ for (var i = command.length; i--; ) {
+ if (this.exec(command[i], editor, args)) return true;
+ }
+ return false;
+ }
+
+ if (typeof command === "string")
+ command = this.commands[command];
+
+ if (!command)
+ return false;
+
+ if (editor && editor.$readOnly && !command.readOnly)
+ return false;
+
+ var e = {editor: editor, command: command, args: args};
+ e.returnValue = this._emit("exec", e);
+ this._signal("afterExec", e);
+
+ return e.returnValue === false ? false : true;
+ };
+
+ this.toggleRecording = function(editor) {
+ if (this.$inReplay)
+ return;
+
+ editor && editor._emit("changeStatus");
+ if (this.recording) {
+ this.macro.pop();
+ this.removeEventListener("exec", this.$addCommandToMacro);
+
+ if (!this.macro.length)
+ this.macro = this.oldMacro;
+
+ return this.recording = false;
+ }
+ if (!this.$addCommandToMacro) {
+ this.$addCommandToMacro = function(e) {
+ this.macro.push([e.command, e.args]);
+ }.bind(this);
+ }
+
+ this.oldMacro = this.macro;
+ this.macro = [];
+ this.on("exec", this.$addCommandToMacro);
+ return this.recording = true;
+ };
+
+ this.replay = function(editor) {
+ if (this.$inReplay || !this.macro)
+ return;
+
+ if (this.recording)
+ return this.toggleRecording(editor);
+
+ try {
+ this.$inReplay = true;
+ this.macro.forEach(function(x) {
+ if (typeof x == "string")
+ this.exec(x, editor);
+ else
+ this.exec(x[0], editor, x[1]);
+ }, this);
+ } finally {
+ this.$inReplay = false;
+ }
+ };
+
+ this.trimMacro = function(m) {
+ return m.map(function(x){
+ if (typeof x[0] != "string")
+ x[0] = x[0].name;
+ if (!x[1])
+ x = x[0];
+ return x;
+ });
+ };
+
+}).call(CommandManager.prototype);
+
+exports.CommandManager = CommandManager;
+
+});
+
+define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"], function(require, exports, module) {
+"use strict";
+
+var lang = require("../lib/lang");
+var config = require("../config");
+var Range = require("../range").Range;
+
+function bindKey(win, mac) {
+ return {win: win, mac: mac};
+}
+exports.commands = [{
+ name: "showSettingsMenu",
+ bindKey: bindKey("Ctrl-,", "Command-,"),
+ exec: function(editor) {
+ config.loadModule("ace/ext/settings_menu", function(module) {
+ module.init(editor);
+ editor.showSettingsMenu();
+ });
+ },
+ readOnly: true
+}, {
+ name: "goToNextError",
+ bindKey: bindKey("Alt-E", "Ctrl-E"),
+ exec: function(editor) {
+ config.loadModule("ace/ext/error_marker", function(module) {
+ module.showErrorMarker(editor, 1);
+ });
+ },
+ scrollIntoView: "animate",
+ readOnly: true
+}, {
+ name: "goToPreviousError",
+ bindKey: bindKey("Alt-Shift-E", "Ctrl-Shift-E"),
+ exec: function(editor) {
+ config.loadModule("ace/ext/error_marker", function(module) {
+ module.showErrorMarker(editor, -1);
+ });
+ },
+ scrollIntoView: "animate",
+ readOnly: true
+}, {
+ name: "selectall",
+ bindKey: bindKey("Ctrl-A", "Command-A"),
+ exec: function(editor) { editor.selectAll(); },
+ readOnly: true
+}, {
+ name: "centerselection",
+ bindKey: bindKey(null, "Ctrl-L"),
+ exec: function(editor) { editor.centerSelection(); },
+ readOnly: true
+}, {
+ name: "gotoline",
+ bindKey: bindKey("Ctrl-L", "Command-L"),
+ exec: function(editor) {
+ var line = parseInt(prompt("Enter line number:"), 10);
+ if (!isNaN(line)) {
+ editor.gotoLine(line);
+ }
+ },
+ readOnly: true
+}, {
+ name: "fold",
+ bindKey: bindKey("Alt-L|Ctrl-F1", "Command-Alt-L|Command-F1"),
+ exec: function(editor) { editor.session.toggleFold(false); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "center",
+ readOnly: true
+}, {
+ name: "unfold",
+ bindKey: bindKey("Alt-Shift-L|Ctrl-Shift-F1", "Command-Alt-Shift-L|Command-Shift-F1"),
+ exec: function(editor) { editor.session.toggleFold(true); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "center",
+ readOnly: true
+}, {
+ name: "toggleFoldWidget",
+ bindKey: bindKey("F2", "F2"),
+ exec: function(editor) { editor.session.toggleFoldWidget(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "center",
+ readOnly: true
+}, {
+ name: "toggleParentFoldWidget",
+ bindKey: bindKey("Alt-F2", "Alt-F2"),
+ exec: function(editor) { editor.session.toggleFoldWidget(true); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "center",
+ readOnly: true
+}, {
+ name: "foldall",
+ bindKey: bindKey(null, "Ctrl-Command-Option-0"),
+ exec: function(editor) { editor.session.foldAll(); },
+ scrollIntoView: "center",
+ readOnly: true
+}, {
+ name: "foldOther",
+ bindKey: bindKey("Alt-0", "Command-Option-0"),
+ exec: function(editor) {
+ editor.session.foldAll();
+ editor.session.unfold(editor.selection.getAllRanges());
+ },
+ scrollIntoView: "center",
+ readOnly: true
+}, {
+ name: "unfoldall",
+ bindKey: bindKey("Alt-Shift-0", "Command-Option-Shift-0"),
+ exec: function(editor) { editor.session.unfold(); },
+ scrollIntoView: "center",
+ readOnly: true
+}, {
+ name: "findnext",
+ bindKey: bindKey("Ctrl-K", "Command-G"),
+ exec: function(editor) { editor.findNext(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "center",
+ readOnly: true
+}, {
+ name: "findprevious",
+ bindKey: bindKey("Ctrl-Shift-K", "Command-Shift-G"),
+ exec: function(editor) { editor.findPrevious(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "center",
+ readOnly: true
+}, {
+ name: "selectOrFindNext",
+ bindKey: bindKey("Alt-K", "Ctrl-G"),
+ exec: function(editor) {
+ if (editor.selection.isEmpty())
+ editor.selection.selectWord();
+ else
+ editor.findNext();
+ },
+ readOnly: true
+}, {
+ name: "selectOrFindPrevious",
+ bindKey: bindKey("Alt-Shift-K", "Ctrl-Shift-G"),
+ exec: function(editor) {
+ if (editor.selection.isEmpty())
+ editor.selection.selectWord();
+ else
+ editor.findPrevious();
+ },
+ readOnly: true
+}, {
+ name: "find",
+ bindKey: bindKey("Ctrl-F", "Command-F"),
+ exec: function(editor) {
+ config.loadModule("ace/ext/searchbox", function(e) {e.Search(editor)});
+ },
+ readOnly: true
+}, {
+ name: "overwrite",
+ bindKey: "Insert",
+ exec: function(editor) { editor.toggleOverwrite(); },
+ readOnly: true
+}, {
+ name: "selecttostart",
+ bindKey: bindKey("Ctrl-Shift-Home", "Command-Shift-Up"),
+ exec: function(editor) { editor.getSelection().selectFileStart(); },
+ multiSelectAction: "forEach",
+ readOnly: true,
+ scrollIntoView: "animate",
+ aceCommandGroup: "fileJump"
+}, {
+ name: "gotostart",
+ bindKey: bindKey("Ctrl-Home", "Command-Home|Command-Up"),
+ exec: function(editor) { editor.navigateFileStart(); },
+ multiSelectAction: "forEach",
+ readOnly: true,
+ scrollIntoView: "animate",
+ aceCommandGroup: "fileJump"
+}, {
+ name: "selectup",
+ bindKey: bindKey("Shift-Up", "Shift-Up"),
+ exec: function(editor) { editor.getSelection().selectUp(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "golineup",
+ bindKey: bindKey("Up", "Up|Ctrl-P"),
+ exec: function(editor, args) { editor.navigateUp(args.times); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "selecttoend",
+ bindKey: bindKey("Ctrl-Shift-End", "Command-Shift-Down"),
+ exec: function(editor) { editor.getSelection().selectFileEnd(); },
+ multiSelectAction: "forEach",
+ readOnly: true,
+ scrollIntoView: "animate",
+ aceCommandGroup: "fileJump"
+}, {
+ name: "gotoend",
+ bindKey: bindKey("Ctrl-End", "Command-End|Command-Down"),
+ exec: function(editor) { editor.navigateFileEnd(); },
+ multiSelectAction: "forEach",
+ readOnly: true,
+ scrollIntoView: "animate",
+ aceCommandGroup: "fileJump"
+}, {
+ name: "selectdown",
+ bindKey: bindKey("Shift-Down", "Shift-Down"),
+ exec: function(editor) { editor.getSelection().selectDown(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "golinedown",
+ bindKey: bindKey("Down", "Down|Ctrl-N"),
+ exec: function(editor, args) { editor.navigateDown(args.times); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "selectwordleft",
+ bindKey: bindKey("Ctrl-Shift-Left", "Option-Shift-Left"),
+ exec: function(editor) { editor.getSelection().selectWordLeft(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "gotowordleft",
+ bindKey: bindKey("Ctrl-Left", "Option-Left"),
+ exec: function(editor) { editor.navigateWordLeft(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "selecttolinestart",
+ bindKey: bindKey("Alt-Shift-Left", "Command-Shift-Left"),
+ exec: function(editor) { editor.getSelection().selectLineStart(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "gotolinestart",
+ bindKey: bindKey("Alt-Left|Home", "Command-Left|Home|Ctrl-A"),
+ exec: function(editor) { editor.navigateLineStart(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "selectleft",
+ bindKey: bindKey("Shift-Left", "Shift-Left"),
+ exec: function(editor) { editor.getSelection().selectLeft(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "gotoleft",
+ bindKey: bindKey("Left", "Left|Ctrl-B"),
+ exec: function(editor, args) { editor.navigateLeft(args.times); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "selectwordright",
+ bindKey: bindKey("Ctrl-Shift-Right", "Option-Shift-Right"),
+ exec: function(editor) { editor.getSelection().selectWordRight(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "gotowordright",
+ bindKey: bindKey("Ctrl-Right", "Option-Right"),
+ exec: function(editor) { editor.navigateWordRight(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "selecttolineend",
+ bindKey: bindKey("Alt-Shift-Right", "Command-Shift-Right"),
+ exec: function(editor) { editor.getSelection().selectLineEnd(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "gotolineend",
+ bindKey: bindKey("Alt-Right|End", "Command-Right|End|Ctrl-E"),
+ exec: function(editor) { editor.navigateLineEnd(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "selectright",
+ bindKey: bindKey("Shift-Right", "Shift-Right"),
+ exec: function(editor) { editor.getSelection().selectRight(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "gotoright",
+ bindKey: bindKey("Right", "Right|Ctrl-F"),
+ exec: function(editor, args) { editor.navigateRight(args.times); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "selectpagedown",
+ bindKey: "Shift-PageDown",
+ exec: function(editor) { editor.selectPageDown(); },
+ readOnly: true
+}, {
+ name: "pagedown",
+ bindKey: bindKey(null, "Option-PageDown"),
+ exec: function(editor) { editor.scrollPageDown(); },
+ readOnly: true
+}, {
+ name: "gotopagedown",
+ bindKey: bindKey("PageDown", "PageDown|Ctrl-V"),
+ exec: function(editor) { editor.gotoPageDown(); },
+ readOnly: true
+}, {
+ name: "selectpageup",
+ bindKey: "Shift-PageUp",
+ exec: function(editor) { editor.selectPageUp(); },
+ readOnly: true
+}, {
+ name: "pageup",
+ bindKey: bindKey(null, "Option-PageUp"),
+ exec: function(editor) { editor.scrollPageUp(); },
+ readOnly: true
+}, {
+ name: "gotopageup",
+ bindKey: "PageUp",
+ exec: function(editor) { editor.gotoPageUp(); },
+ readOnly: true
+}, {
+ name: "scrollup",
+ bindKey: bindKey("Ctrl-Up", null),
+ exec: function(e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },
+ readOnly: true
+}, {
+ name: "scrolldown",
+ bindKey: bindKey("Ctrl-Down", null),
+ exec: function(e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },
+ readOnly: true
+}, {
+ name: "selectlinestart",
+ bindKey: "Shift-Home",
+ exec: function(editor) { editor.getSelection().selectLineStart(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "selectlineend",
+ bindKey: "Shift-End",
+ exec: function(editor) { editor.getSelection().selectLineEnd(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "togglerecording",
+ bindKey: bindKey("Ctrl-Alt-E", "Command-Option-E"),
+ exec: function(editor) { editor.commands.toggleRecording(editor); },
+ readOnly: true
+}, {
+ name: "replaymacro",
+ bindKey: bindKey("Ctrl-Shift-E", "Command-Shift-E"),
+ exec: function(editor) { editor.commands.replay(editor); },
+ readOnly: true
+}, {
+ name: "jumptomatching",
+ bindKey: bindKey("Ctrl-P", "Ctrl-P"),
+ exec: function(editor) { editor.jumpToMatching(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "animate",
+ readOnly: true
+}, {
+ name: "selecttomatching",
+ bindKey: bindKey("Ctrl-Shift-P", "Ctrl-Shift-P"),
+ exec: function(editor) { editor.jumpToMatching(true); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "animate",
+ readOnly: true
+}, {
+ name: "expandToMatching",
+ bindKey: bindKey("Ctrl-Shift-M", "Ctrl-Shift-M"),
+ exec: function(editor) { editor.jumpToMatching(true, true); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "animate",
+ readOnly: true
+}, {
+ name: "passKeysToBrowser",
+ bindKey: bindKey(null, null),
+ exec: function() {},
+ passEvent: true,
+ readOnly: true
+}, {
+ name: "copy",
+ exec: function(editor) {
+ },
+ readOnly: true
+},
+{
+ name: "cut",
+ exec: function(editor) {
+ var range = editor.getSelectionRange();
+ editor._emit("cut", range);
+
+ if (!editor.selection.isEmpty()) {
+ editor.session.remove(range);
+ editor.clearSelection();
+ }
+ },
+ scrollIntoView: "cursor",
+ multiSelectAction: "forEach"
+}, {
+ name: "paste",
+ exec: function(editor, args) {
+ editor.$handlePaste(args);
+ },
+ scrollIntoView: "cursor"
+}, {
+ name: "removeline",
+ bindKey: bindKey("Ctrl-D", "Command-D"),
+ exec: function(editor) { editor.removeLines(); },
+ scrollIntoView: "cursor",
+ multiSelectAction: "forEachLine"
+}, {
+ name: "duplicateSelection",
+ bindKey: bindKey("Ctrl-Shift-D", "Command-Shift-D"),
+ exec: function(editor) { editor.duplicateSelection(); },
+ scrollIntoView: "cursor",
+ multiSelectAction: "forEach"
+}, {
+ name: "sortlines",
+ bindKey: bindKey("Ctrl-Alt-S", "Command-Alt-S"),
+ exec: function(editor) { editor.sortLines(); },
+ scrollIntoView: "selection",
+ multiSelectAction: "forEachLine"
+}, {
+ name: "togglecomment",
+ bindKey: bindKey("Ctrl-/", "Command-/"),
+ exec: function(editor) { editor.toggleCommentLines(); },
+ multiSelectAction: "forEachLine",
+ scrollIntoView: "selectionPart"
+}, {
+ name: "toggleBlockComment",
+ bindKey: bindKey("Ctrl-Shift-/", "Command-Shift-/"),
+ exec: function(editor) { editor.toggleBlockComment(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "selectionPart"
+}, {
+ name: "modifyNumberUp",
+ bindKey: bindKey("Ctrl-Shift-Up", "Alt-Shift-Up"),
+ exec: function(editor) { editor.modifyNumber(1); },
+ scrollIntoView: "cursor",
+ multiSelectAction: "forEach"
+}, {
+ name: "modifyNumberDown",
+ bindKey: bindKey("Ctrl-Shift-Down", "Alt-Shift-Down"),
+ exec: function(editor) { editor.modifyNumber(-1); },
+ scrollIntoView: "cursor",
+ multiSelectAction: "forEach"
+}, {
+ name: "replace",
+ bindKey: bindKey("Ctrl-H", "Command-Option-F"),
+ exec: function(editor) {
+ config.loadModule("ace/ext/searchbox", function(e) {e.Search(editor, true)});
+ }
+}, {
+ name: "undo",
+ bindKey: bindKey("Ctrl-Z", "Command-Z"),
+ exec: function(editor) { editor.undo(); }
+}, {
+ name: "redo",
+ bindKey: bindKey("Ctrl-Shift-Z|Ctrl-Y", "Command-Shift-Z|Command-Y"),
+ exec: function(editor) { editor.redo(); }
+}, {
+ name: "copylinesup",
+ bindKey: bindKey("Alt-Shift-Up", "Command-Option-Up"),
+ exec: function(editor) { editor.copyLinesUp(); },
+ scrollIntoView: "cursor"
+}, {
+ name: "movelinesup",
+ bindKey: bindKey("Alt-Up", "Option-Up"),
+ exec: function(editor) { editor.moveLinesUp(); },
+ scrollIntoView: "cursor"
+}, {
+ name: "copylinesdown",
+ bindKey: bindKey("Alt-Shift-Down", "Command-Option-Down"),
+ exec: function(editor) { editor.copyLinesDown(); },
+ scrollIntoView: "cursor"
+}, {
+ name: "movelinesdown",
+ bindKey: bindKey("Alt-Down", "Option-Down"),
+ exec: function(editor) { editor.moveLinesDown(); },
+ scrollIntoView: "cursor"
+}, {
+ name: "del",
+ bindKey: bindKey("Delete", "Delete|Ctrl-D|Shift-Delete"),
+ exec: function(editor) { editor.remove("right"); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor"
+}, {
+ name: "backspace",
+ bindKey: bindKey(
+ "Shift-Backspace|Backspace",
+ "Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H"
+ ),
+ exec: function(editor) { editor.remove("left"); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor"
+}, {
+ name: "cut_or_delete",
+ bindKey: bindKey("Shift-Delete", null),
+ exec: function(editor) {
+ if (editor.selection.isEmpty()) {
+ editor.remove("left");
+ } else {
+ return false;
+ }
+ },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor"
+}, {
+ name: "removetolinestart",
+ bindKey: bindKey("Alt-Backspace", "Command-Backspace"),
+ exec: function(editor) { editor.removeToLineStart(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor"
+}, {
+ name: "removetolineend",
+ bindKey: bindKey("Alt-Delete", "Ctrl-K"),
+ exec: function(editor) { editor.removeToLineEnd(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor"
+}, {
+ name: "removewordleft",
+ bindKey: bindKey("Ctrl-Backspace", "Alt-Backspace|Ctrl-Alt-Backspace"),
+ exec: function(editor) { editor.removeWordLeft(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor"
+}, {
+ name: "removewordright",
+ bindKey: bindKey("Ctrl-Delete", "Alt-Delete"),
+ exec: function(editor) { editor.removeWordRight(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor"
+}, {
+ name: "outdent",
+ bindKey: bindKey("Shift-Tab", "Shift-Tab"),
+ exec: function(editor) { editor.blockOutdent(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "selectionPart"
+}, {
+ name: "indent",
+ bindKey: bindKey("Tab", "Tab"),
+ exec: function(editor) { editor.indent(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "selectionPart"
+}, {
+ name: "blockoutdent",
+ bindKey: bindKey("Ctrl-[", "Ctrl-["),
+ exec: function(editor) { editor.blockOutdent(); },
+ multiSelectAction: "forEachLine",
+ scrollIntoView: "selectionPart"
+}, {
+ name: "blockindent",
+ bindKey: bindKey("Ctrl-]", "Ctrl-]"),
+ exec: function(editor) { editor.blockIndent(); },
+ multiSelectAction: "forEachLine",
+ scrollIntoView: "selectionPart"
+}, {
+ name: "insertstring",
+ exec: function(editor, str) { editor.insert(str); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor"
+}, {
+ name: "inserttext",
+ exec: function(editor, args) {
+ editor.insert(lang.stringRepeat(args.text || "", args.times || 1));
+ },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor"
+}, {
+ name: "splitline",
+ bindKey: bindKey(null, "Ctrl-O"),
+ exec: function(editor) { editor.splitLine(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor"
+}, {
+ name: "transposeletters",
+ bindKey: bindKey("Ctrl-T", "Ctrl-T"),
+ exec: function(editor) { editor.transposeLetters(); },
+ multiSelectAction: function(editor) {editor.transposeSelections(1); },
+ scrollIntoView: "cursor"
+}, {
+ name: "touppercase",
+ bindKey: bindKey("Ctrl-U", "Ctrl-U"),
+ exec: function(editor) { editor.toUpperCase(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor"
+}, {
+ name: "tolowercase",
+ bindKey: bindKey("Ctrl-Shift-U", "Ctrl-Shift-U"),
+ exec: function(editor) { editor.toLowerCase(); },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor"
+}, {
+ name: "expandtoline",
+ bindKey: bindKey("Ctrl-Shift-L", "Command-Shift-L"),
+ exec: function(editor) {
+ var range = editor.selection.getRange();
+
+ range.start.column = range.end.column = 0;
+ range.end.row++;
+ editor.selection.setRange(range, false);
+ },
+ multiSelectAction: "forEach",
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "joinlines",
+ bindKey: bindKey(null, null),
+ exec: function(editor) {
+ var isBackwards = editor.selection.isBackwards();
+ var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();
+ var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();
+ var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;
+ var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());
+ var selectedCount = selectedText.replace(/\n\s*/, " ").length;
+ var insertLine = editor.session.doc.getLine(selectionStart.row);
+
+ for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {
+ var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));
+ if (curLine.length !== 0) {
+ curLine = " " + curLine;
+ }
+ insertLine += curLine;
+ }
+
+ if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {
+ insertLine += editor.session.doc.getNewLineCharacter();
+ }
+
+ editor.clearSelection();
+ editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);
+
+ if (selectedCount > 0) {
+ editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);
+ editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);
+ } else {
+ firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;
+ editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);
+ }
+ },
+ multiSelectAction: "forEach",
+ readOnly: true
+}, {
+ name: "invertSelection",
+ bindKey: bindKey(null, null),
+ exec: function(editor) {
+ var endRow = editor.session.doc.getLength() - 1;
+ var endCol = editor.session.doc.getLine(endRow).length;
+ var ranges = editor.selection.rangeList.ranges;
+ var newRanges = [];
+ if (ranges.length < 1) {
+ ranges = [editor.selection.getRange()];
+ }
+
+ for (var i = 0; i < ranges.length; i++) {
+ if (i == (ranges.length - 1)) {
+ if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {
+ newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));
+ }
+ }
+
+ if (i === 0) {
+ if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {
+ newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));
+ }
+ } else {
+ newRanges.push(new Range(ranges[i-1].end.row, ranges[i-1].end.column, ranges[i].start.row, ranges[i].start.column));
+ }
+ }
+
+ editor.exitMultiSelectMode();
+ editor.clearSelection();
+
+ for(var i = 0; i < newRanges.length; i++) {
+ editor.selection.addRange(newRanges[i], false);
+ }
+ },
+ readOnly: true,
+ scrollIntoView: "none"
+}];
+
+});
+
+define("ace/editor",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/keyboard/textinput","ace/mouse/mouse_handler","ace/mouse/fold_handler","ace/keyboard/keybinding","ace/edit_session","ace/search","ace/range","ace/lib/event_emitter","ace/commands/command_manager","ace/commands/default_commands","ace/config","ace/token_iterator"], function(require, exports, module) {
+"use strict";
+
+require("./lib/fixoldbrowsers");
+
+var oop = require("./lib/oop");
+var dom = require("./lib/dom");
+var lang = require("./lib/lang");
+var useragent = require("./lib/useragent");
+var TextInput = require("./keyboard/textinput").TextInput;
+var MouseHandler = require("./mouse/mouse_handler").MouseHandler;
+var FoldHandler = require("./mouse/fold_handler").FoldHandler;
+var KeyBinding = require("./keyboard/keybinding").KeyBinding;
+var EditSession = require("./edit_session").EditSession;
+var Search = require("./search").Search;
+var Range = require("./range").Range;
+var EventEmitter = require("./lib/event_emitter").EventEmitter;
+var CommandManager = require("./commands/command_manager").CommandManager;
+var defaultCommands = require("./commands/default_commands").commands;
+var config = require("./config");
+var TokenIterator = require("./token_iterator").TokenIterator;
+var Editor = function(renderer, session) {
+ var container = renderer.getContainerElement();
+ this.container = container;
+ this.renderer = renderer;
+
+ this.commands = new CommandManager(useragent.isMac ? "mac" : "win", defaultCommands);
+ this.textInput = new TextInput(renderer.getTextAreaContainer(), this);
+ this.renderer.textarea = this.textInput.getElement();
+ this.keyBinding = new KeyBinding(this);
+ this.$mouseHandler = new MouseHandler(this);
+ new FoldHandler(this);
+
+ this.$blockScrolling = 0;
+ this.$search = new Search().set({
+ wrap: true
+ });
+
+ this.$historyTracker = this.$historyTracker.bind(this);
+ this.commands.on("exec", this.$historyTracker);
+
+ this.$initOperationListeners();
+
+ this._$emitInputEvent = lang.delayedCall(function() {
+ this._signal("input", {});
+ if (this.session && this.session.bgTokenizer)
+ this.session.bgTokenizer.scheduleStart();
+ }.bind(this));
+
+ this.on("change", function(_, _self) {
+ _self._$emitInputEvent.schedule(31);
+ });
+
+ this.setSession(session || new EditSession(""));
+ config.resetOptions(this);
+ config._signal("editor", this);
+};
+
+(function(){
+
+ oop.implement(this, EventEmitter);
+
+ this.$initOperationListeners = function() {
+ function last(a) {return a[a.length - 1]}
+
+ this.selections = [];
+ this.commands.on("exec", this.startOperation.bind(this), true);
+ this.commands.on("afterExec", this.endOperation.bind(this), true);
+
+ this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this));
+
+ this.on("change", function() {
+ this.curOp || this.startOperation();
+ this.curOp.docChanged = true;
+ }.bind(this), true);
+
+ this.on("changeSelection", function() {
+ this.curOp || this.startOperation();
+ this.curOp.selectionChanged = true;
+ }.bind(this), true);
+ };
+
+ this.curOp = null;
+ this.prevOp = {};
+ this.startOperation = function(commadEvent) {
+ if (this.curOp) {
+ if (!commadEvent || this.curOp.command)
+ return;
+ this.prevOp = this.curOp;
+ }
+ if (!commadEvent) {
+ this.previousCommand = null;
+ commadEvent = {};
+ }
+
+ this.$opResetTimer.schedule();
+ this.curOp = {
+ command: commadEvent.command || {},
+ args: commadEvent.args,
+ scrollTop: this.renderer.scrollTop
+ };
+ if (this.curOp.command.name && this.curOp.command.scrollIntoView !== undefined)
+ this.$blockScrolling++;
+ };
+
+ this.endOperation = function(e) {
+ if (this.curOp) {
+ if (e && e.returnValue === false)
+ return this.curOp = null;
+ this._signal("beforeEndOperation");
+ var command = this.curOp.command;
+ if (command.name && this.$blockScrolling > 0)
+ this.$blockScrolling--;
+ var scrollIntoView = command && command.scrollIntoView;
+ if (scrollIntoView) {
+ switch (scrollIntoView) {
+ case "center-animate":
+ scrollIntoView = "animate";
+ case "center":
+ this.renderer.scrollCursorIntoView(null, 0.5);
+ break;
+ case "animate":
+ case "cursor":
+ this.renderer.scrollCursorIntoView();
+ break;
+ case "selectionPart":
+ var range = this.selection.getRange();
+ var config = this.renderer.layerConfig;
+ if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {
+ this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);
+ }
+ break;
+ default:
+ break;
+ }
+ if (scrollIntoView == "animate")
+ this.renderer.animateScrolling(this.curOp.scrollTop);
+ }
+
+ this.prevOp = this.curOp;
+ this.curOp = null;
+ }
+ };
+ this.$mergeableCommands = ["backspace", "del", "insertstring"];
+ this.$historyTracker = function(e) {
+ if (!this.$mergeUndoDeltas)
+ return;
+
+ var prev = this.prevOp;
+ var mergeableCommands = this.$mergeableCommands;
+ var shouldMerge = prev.command && (e.command.name == prev.command.name);
+ if (e.command.name == "insertstring") {
+ var text = e.args;
+ if (this.mergeNextCommand === undefined)
+ this.mergeNextCommand = true;
+
+ shouldMerge = shouldMerge
+ && this.mergeNextCommand // previous command allows to coalesce with
+ && (!/\s/.test(text) || /\s/.test(prev.args)); // previous insertion was of same type
+
+ this.mergeNextCommand = true;
+ } else {
+ shouldMerge = shouldMerge
+ && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable
+ }
+
+ if (
+ this.$mergeUndoDeltas != "always"
+ && Date.now() - this.sequenceStartTime > 2000
+ ) {
+ shouldMerge = false; // the sequence is too long
+ }
+
+ if (shouldMerge)
+ this.session.mergeUndoDeltas = true;
+ else if (mergeableCommands.indexOf(e.command.name) !== -1)
+ this.sequenceStartTime = Date.now();
+ };
+ this.setKeyboardHandler = function(keyboardHandler, cb) {
+ if (keyboardHandler && typeof keyboardHandler === "string") {
+ this.$keybindingId = keyboardHandler;
+ var _self = this;
+ config.loadModule(["keybinding", keyboardHandler], function(module) {
+ if (_self.$keybindingId == keyboardHandler)
+ _self.keyBinding.setKeyboardHandler(module && module.handler);
+ cb && cb();
+ });
+ } else {
+ this.$keybindingId = null;
+ this.keyBinding.setKeyboardHandler(keyboardHandler);
+ cb && cb();
+ }
+ };
+ this.getKeyboardHandler = function() {
+ return this.keyBinding.getKeyboardHandler();
+ };
+ this.setSession = function(session) {
+ if (this.session == session)
+ return;
+ if (this.curOp) this.endOperation();
+ this.curOp = {};
+
+ var oldSession = this.session;
+ if (oldSession) {
+ this.session.removeEventListener("change", this.$onDocumentChange);
+ this.session.removeEventListener("changeMode", this.$onChangeMode);
+ this.session.removeEventListener("tokenizerUpdate", this.$onTokenizerUpdate);
+ this.session.removeEventListener("changeTabSize", this.$onChangeTabSize);
+ this.session.removeEventListener("changeWrapLimit", this.$onChangeWrapLimit);
+ this.session.removeEventListener("changeWrapMode", this.$onChangeWrapMode);
+ this.session.removeEventListener("onChangeFold", this.$onChangeFold);
+ this.session.removeEventListener("changeFrontMarker", this.$onChangeFrontMarker);
+ this.session.removeEventListener("changeBackMarker", this.$onChangeBackMarker);
+ this.session.removeEventListener("changeBreakpoint", this.$onChangeBreakpoint);
+ this.session.removeEventListener("changeAnnotation", this.$onChangeAnnotation);
+ this.session.removeEventListener("changeOverwrite", this.$onCursorChange);
+ this.session.removeEventListener("changeScrollTop", this.$onScrollTopChange);
+ this.session.removeEventListener("changeScrollLeft", this.$onScrollLeftChange);
+
+ var selection = this.session.getSelection();
+ selection.removeEventListener("changeCursor", this.$onCursorChange);
+ selection.removeEventListener("changeSelection", this.$onSelectionChange);
+ }
+
+ this.session = session;
+ if (session) {
+ this.$onDocumentChange = this.onDocumentChange.bind(this);
+ session.addEventListener("change", this.$onDocumentChange);
+ this.renderer.setSession(session);
+
+ this.$onChangeMode = this.onChangeMode.bind(this);
+ session.addEventListener("changeMode", this.$onChangeMode);
+
+ this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);
+ session.addEventListener("tokenizerUpdate", this.$onTokenizerUpdate);
+
+ this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);
+ session.addEventListener("changeTabSize", this.$onChangeTabSize);
+
+ this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);
+ session.addEventListener("changeWrapLimit", this.$onChangeWrapLimit);
+
+ this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);
+ session.addEventListener("changeWrapMode", this.$onChangeWrapMode);
+
+ this.$onChangeFold = this.onChangeFold.bind(this);
+ session.addEventListener("changeFold", this.$onChangeFold);
+
+ this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);
+ this.session.addEventListener("changeFrontMarker", this.$onChangeFrontMarker);
+
+ this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);
+ this.session.addEventListener("changeBackMarker", this.$onChangeBackMarker);
+
+ this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);
+ this.session.addEventListener("changeBreakpoint", this.$onChangeBreakpoint);
+
+ this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);
+ this.session.addEventListener("changeAnnotation", this.$onChangeAnnotation);
+
+ this.$onCursorChange = this.onCursorChange.bind(this);
+ this.session.addEventListener("changeOverwrite", this.$onCursorChange);
+
+ this.$onScrollTopChange = this.onScrollTopChange.bind(this);
+ this.session.addEventListener("changeScrollTop", this.$onScrollTopChange);
+
+ this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);
+ this.session.addEventListener("changeScrollLeft", this.$onScrollLeftChange);
+
+ this.selection = session.getSelection();
+ this.selection.addEventListener("changeCursor", this.$onCursorChange);
+
+ this.$onSelectionChange = this.onSelectionChange.bind(this);
+ this.selection.addEventListener("changeSelection", this.$onSelectionChange);
+
+ this.onChangeMode();
+
+ this.$blockScrolling += 1;
+ this.onCursorChange();
+ this.$blockScrolling -= 1;
+
+ this.onScrollTopChange();
+ this.onScrollLeftChange();
+ this.onSelectionChange();
+ this.onChangeFrontMarker();
+ this.onChangeBackMarker();
+ this.onChangeBreakpoint();
+ this.onChangeAnnotation();
+ this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();
+ this.renderer.updateFull();
+ } else {
+ this.selection = null;
+ this.renderer.setSession(session);
+ }
+
+ this._signal("changeSession", {
+ session: session,
+ oldSession: oldSession
+ });
+
+ this.curOp = null;
+
+ oldSession && oldSession._signal("changeEditor", {oldEditor: this});
+ session && session._signal("changeEditor", {editor: this});
+ };
+ this.getSession = function() {
+ return this.session;
+ };
+ this.setValue = function(val, cursorPos) {
+ this.session.doc.setValue(val);
+
+ if (!cursorPos)
+ this.selectAll();
+ else if (cursorPos == 1)
+ this.navigateFileEnd();
+ else if (cursorPos == -1)
+ this.navigateFileStart();
+
+ return val;
+ };
+ this.getValue = function() {
+ return this.session.getValue();
+ };
+ this.getSelection = function() {
+ return this.selection;
+ };
+ this.resize = function(force) {
+ this.renderer.onResize(force);
+ };
+ this.setTheme = function(theme, cb) {
+ this.renderer.setTheme(theme, cb);
+ };
+ this.getTheme = function() {
+ return this.renderer.getTheme();
+ };
+ this.setStyle = function(style) {
+ this.renderer.setStyle(style);
+ };
+ this.unsetStyle = function(style) {
+ this.renderer.unsetStyle(style);
+ };
+ this.getFontSize = function () {
+ return this.getOption("fontSize") ||
+ dom.computedStyle(this.container, "fontSize");
+ };
+ this.setFontSize = function(size) {
+ this.setOption("fontSize", size);
+ };
+
+ this.$highlightBrackets = function() {
+ if (this.session.$bracketHighlight) {
+ this.session.removeMarker(this.session.$bracketHighlight);
+ this.session.$bracketHighlight = null;
+ }
+
+ if (this.$highlightPending) {
+ return;
+ }
+ var self = this;
+ this.$highlightPending = true;
+ setTimeout(function() {
+ self.$highlightPending = false;
+ var session = self.session;
+ if (!session || !session.bgTokenizer) return;
+ var pos = session.findMatchingBracket(self.getCursorPosition());
+ if (pos) {
+ var range = new Range(pos.row, pos.column, pos.row, pos.column + 1);
+ } else if (session.$mode.getMatching) {
+ var range = session.$mode.getMatching(self.session);
+ }
+ if (range)
+ session.$bracketHighlight = session.addMarker(range, "ace_bracket", "text");
+ }, 50);
+ };
+ this.$highlightTags = function() {
+ if (this.$highlightTagPending)
+ return;
+ var self = this;
+ this.$highlightTagPending = true;
+ setTimeout(function() {
+ self.$highlightTagPending = false;
+
+ var session = self.session;
+ if (!session || !session.bgTokenizer) return;
+
+ var pos = self.getCursorPosition();
+ var iterator = new TokenIterator(self.session, pos.row, pos.column);
+ var token = iterator.getCurrentToken();
+
+ if (!token || !/\b(?:tag-open|tag-name)/.test(token.type)) {
+ session.removeMarker(session.$tagHighlight);
+ session.$tagHighlight = null;
+ return;
+ }
+
+ if (token.type.indexOf("tag-open") != -1) {
+ token = iterator.stepForward();
+ if (!token)
+ return;
+ }
+
+ var tag = token.value;
+ var depth = 0;
+ var prevToken = iterator.stepBackward();
+
+ if (prevToken.value == '<'){
+ do {
+ prevToken = token;
+ token = iterator.stepForward();
+
+ if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {
+ if (prevToken.value === '<'){
+ depth++;
+ } else if (prevToken.value === '</'){
+ depth--;
+ }
+ }
+
+ } while (token && depth >= 0);
+ } else {
+ do {
+ token = prevToken;
+ prevToken = iterator.stepBackward();
+
+ if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {
+ if (prevToken.value === '<') {
+ depth++;
+ } else if (prevToken.value === '</') {
+ depth--;
+ }
+ }
+ } while (prevToken && depth <= 0);
+ iterator.stepForward();
+ }
+
+ if (!token) {
+ session.removeMarker(session.$tagHighlight);
+ session.$tagHighlight = null;
+ return;
+ }
+
+ var row = iterator.getCurrentTokenRow();
+ var column = iterator.getCurrentTokenColumn();
+ var range = new Range(row, column, row, column+token.value.length);
+ if (session.$tagHighlight && range.compareRange(session.$backMarkers[session.$tagHighlight].range)!==0) {
+ session.removeMarker(session.$tagHighlight);
+ session.$tagHighlight = null;
+ }
+
+ if (range && !session.$tagHighlight)
+ session.$tagHighlight = session.addMarker(range, "ace_bracket", "text");
+ }, 50);
+ };
+ this.focus = function() {
+ var _self = this;
+ setTimeout(function() {
+ _self.textInput.focus();
+ });
+ this.textInput.focus();
+ };
+ this.isFocused = function() {
+ return this.textInput.isFocused();
+ };
+ this.blur = function() {
+ this.textInput.blur();
+ };
+ this.onFocus = function(e) {
+ if (this.$isFocused)
+ return;
+ this.$isFocused = true;
+ this.renderer.showCursor();
+ this.renderer.visualizeFocus();
+ this._emit("focus", e);
+ };
+ this.onBlur = function(e) {
+ if (!this.$isFocused)
+ return;
+ this.$isFocused = false;
+ this.renderer.hideCursor();
+ this.renderer.visualizeBlur();
+ this._emit("blur", e);
+ };
+
+ this.$cursorChange = function() {
+ this.renderer.updateCursor();
+ };
+ this.onDocumentChange = function(delta) {
+ var wrap = this.session.$useWrapMode;
+ var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity);
+ this.renderer.updateLines(delta.start.row, lastRow, wrap);
+
+ this._signal("change", delta);
+ this.$cursorChange();
+ this.$updateHighlightActiveLine();
+ };
+
+ this.onTokenizerUpdate = function(e) {
+ var rows = e.data;
+ this.renderer.updateLines(rows.first, rows.last);
+ };
+
+
+ this.onScrollTopChange = function() {
+ this.renderer.scrollToY(this.session.getScrollTop());
+ };
+
+ this.onScrollLeftChange = function() {
+ this.renderer.scrollToX(this.session.getScrollLeft());
+ };
+ this.onCursorChange = function() {
+ this.$cursorChange();
+
+ if (!this.$blockScrolling) {
+ config.warn("Automatically scrolling cursor into view after selection change",
+ "this will be disabled in the next version",
+ "set editor.$blockScrolling = Infinity to disable this message"
+ );
+ this.renderer.scrollCursorIntoView();
+ }
+
+ this.$highlightBrackets();
+ this.$highlightTags();
+ this.$updateHighlightActiveLine();
+ this._signal("changeSelection");
+ };
+
+ this.$updateHighlightActiveLine = function() {
+ var session = this.getSession();
+
+ var highlight;
+ if (this.$highlightActiveLine) {
+ if ((this.$selectionStyle != "line" || !this.selection.isMultiLine()))
+ highlight = this.getCursorPosition();
+ if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1))
+ highlight = false;
+ }
+
+ if (session.$highlightLineMarker && !highlight) {
+ session.removeMarker(session.$highlightLineMarker.id);
+ session.$highlightLineMarker = null;
+ } else if (!session.$highlightLineMarker && highlight) {
+ var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);
+ range.id = session.addMarker(range, "ace_active-line", "screenLine");
+ session.$highlightLineMarker = range;
+ } else if (highlight) {
+ session.$highlightLineMarker.start.row = highlight.row;
+ session.$highlightLineMarker.end.row = highlight.row;
+ session.$highlightLineMarker.start.column = highlight.column;
+ session._signal("changeBackMarker");
+ }
+ };
+
+ this.onSelectionChange = function(e) {
+ var session = this.session;
+
+ if (session.$selectionMarker) {
+ session.removeMarker(session.$selectionMarker);
+ }
+ session.$selectionMarker = null;
+
+ if (!this.selection.isEmpty()) {
+ var range = this.selection.getRange();
+ var style = this.getSelectionStyle();
+ session.$selectionMarker = session.addMarker(range, "ace_selection", style);
+ } else {
+ this.$updateHighlightActiveLine();
+ }
+
+ var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();
+ this.session.highlight(re);
+
+ this._signal("changeSelection");
+ };
+
+ this.$getSelectionHighLightRegexp = function() {
+ var session = this.session;
+
+ var selection = this.getSelectionRange();
+ if (selection.isEmpty() || selection.isMultiLine())
+ return;
+
+ var startOuter = selection.start.column - 1;
+ var endOuter = selection.end.column + 1;
+ var line = session.getLine(selection.start.row);
+ var lineCols = line.length;
+ var needle = line.substring(Math.max(startOuter, 0),
+ Math.min(endOuter, lineCols));
+ if ((startOuter >= 0 && /^[\w\d]/.test(needle)) ||
+ (endOuter <= lineCols && /[\w\d]$/.test(needle)))
+ return;
+
+ needle = line.substring(selection.start.column, selection.end.column);
+ if (!/^[\w\d]+$/.test(needle))
+ return;
+
+ var re = this.$search.$assembleRegExp({
+ wholeWord: true,
+ caseSensitive: true,
+ needle: needle
+ });
+
+ return re;
+ };
+
+
+ this.onChangeFrontMarker = function() {
+ this.renderer.updateFrontMarkers();
+ };
+
+ this.onChangeBackMarker = function() {
+ this.renderer.updateBackMarkers();
+ };
+
+
+ this.onChangeBreakpoint = function() {
+ this.renderer.updateBreakpoints();
+ };
+
+ this.onChangeAnnotation = function() {
+ this.renderer.setAnnotations(this.session.getAnnotations());
+ };
+
+
+ this.onChangeMode = function(e) {
+ this.renderer.updateText();
+ this._emit("changeMode", e);
+ };
+
+
+ this.onChangeWrapLimit = function() {
+ this.renderer.updateFull();
+ };
+
+ this.onChangeWrapMode = function() {
+ this.renderer.onResize(true);
+ };
+
+
+ this.onChangeFold = function() {
+ this.$updateHighlightActiveLine();
+ this.renderer.updateFull();
+ };
+ this.getSelectedText = function() {
+ return this.session.getTextRange(this.getSelectionRange());
+ };
+ this.getCopyText = function() {
+ var text = this.getSelectedText();
+ this._signal("copy", text);
+ return text;
+ };
+ this.onCopy = function() {
+ this.commands.exec("copy", this);
+ };
+ this.onCut = function() {
+ this.commands.exec("cut", this);
+ };
+ this.onPaste = function(text, event) {
+ var e = {text: text, event: event};
+ this.commands.exec("paste", this, e);
+ };
+
+ this.$handlePaste = function(e) {
+ if (typeof e == "string")
+ e = {text: e};
+ this._signal("paste", e);
+ var text = e.text;
+ if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {
+ this.insert(text);
+ } else {
+ var lines = text.split(/\r\n|\r|\n/);
+ var ranges = this.selection.rangeList.ranges;
+
+ if (lines.length > ranges.length || lines.length < 2 || !lines[1])
+ return this.commands.exec("insertstring", this, text);
+
+ for (var i = ranges.length; i--;) {
+ var range = ranges[i];
+ if (!range.isEmpty())
+ this.session.remove(range);
+
+ this.session.insert(range.start, lines[i]);
+ }
+ }
+ };
+
+ this.execCommand = function(command, args) {
+ return this.commands.exec(command, this, args);
+ };
+ this.insert = function(text, pasted) {
+ var session = this.session;
+ var mode = session.getMode();
+ var cursor = this.getCursorPosition();
+
+ if (this.getBehavioursEnabled() && !pasted) {
+ var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);
+ if (transform) {
+ if (text !== transform.text) {
+ this.session.mergeUndoDeltas = false;
+ this.$mergeNextCommand = false;
+ }
+ text = transform.text;
+
+ }
+ }
+
+ if (text == "\t")
+ text = this.session.getTabString();
+ if (!this.selection.isEmpty()) {
+ var range = this.getSelectionRange();
+ cursor = this.session.remove(range);
+ this.clearSelection();
+ }
+ else if (this.session.getOverwrite()) {
+ var range = new Range.fromPoints(cursor, cursor);
+ range.end.column += text.length;
+ this.session.remove(range);
+ }
+
+ if (text == "\n" || text == "\r\n") {
+ var line = session.getLine(cursor.row);
+ if (cursor.column > line.search(/\S|$/)) {
+ var d = line.substr(cursor.column).search(/\S|$/);
+ session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);
+ }
+ }
+ this.clearSelection();
+
+ var start = cursor.column;
+ var lineState = session.getState(cursor.row);
+ var line = session.getLine(cursor.row);
+ var shouldOutdent = mode.checkOutdent(lineState, line, text);
+ var end = session.insert(cursor, text);
+
+ if (transform && transform.selection) {
+ if (transform.selection.length == 2) { // Transform relative to the current column
+ this.selection.setSelectionRange(
+ new Range(cursor.row, start + transform.selection[0],
+ cursor.row, start + transform.selection[1]));
+ } else { // Transform relative to the current row.
+ this.selection.setSelectionRange(
+ new Range(cursor.row + transform.selection[0],
+ transform.selection[1],
+ cursor.row + transform.selection[2],
+ transform.selection[3]));
+ }
+ }
+
+ if (session.getDocument().isNewLine(text)) {
+ var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());
+
+ session.insert({row: cursor.row+1, column: 0}, lineIndent);
+ }
+ if (shouldOutdent)
+ mode.autoOutdent(lineState, session, cursor.row);
+ };
+
+ this.onTextInput = function(text) {
+ this.keyBinding.onTextInput(text);
+ };
+
+ this.onCommandKey = function(e, hashId, keyCode) {
+ this.keyBinding.onCommandKey(e, hashId, keyCode);
+ };
+ this.setOverwrite = function(overwrite) {
+ this.session.setOverwrite(overwrite);
+ };
+ this.getOverwrite = function() {
+ return this.session.getOverwrite();
+ };
+ this.toggleOverwrite = function() {
+ this.session.toggleOverwrite();
+ };
+ this.setScrollSpeed = function(speed) {
+ this.setOption("scrollSpeed", speed);
+ };
+ this.getScrollSpeed = function() {
+ return this.getOption("scrollSpeed");
+ };
+ this.setDragDelay = function(dragDelay) {
+ this.setOption("dragDelay", dragDelay);
+ };
+ this.getDragDelay = function() {
+ return this.getOption("dragDelay");
+ };
+ this.setSelectionStyle = function(val) {
+ this.setOption("selectionStyle", val);
+ };
+ this.getSelectionStyle = function() {
+ return this.getOption("selectionStyle");
+ };
+ this.setHighlightActiveLine = function(shouldHighlight) {
+ this.setOption("highlightActiveLine", shouldHighlight);
+ };
+ this.getHighlightActiveLine = function() {
+ return this.getOption("highlightActiveLine");
+ };
+ this.setHighlightGutterLine = function(shouldHighlight) {
+ this.setOption("highlightGutterLine", shouldHighlight);
+ };
+
+ this.getHighlightGutterLine = function() {
+ return this.getOption("highlightGutterLine");
+ };
+ this.setHighlightSelectedWord = function(shouldHighlight) {
+ this.setOption("highlightSelectedWord", shouldHighlight);
+ };
+ this.getHighlightSelectedWord = function() {
+ return this.$highlightSelectedWord;
+ };
+
+ this.setAnimatedScroll = function(shouldAnimate){
+ this.renderer.setAnimatedScroll(shouldAnimate);
+ };
+
+ this.getAnimatedScroll = function(){
+ return this.renderer.getAnimatedScroll();
+ };
+ this.setShowInvisibles = function(showInvisibles) {
+ this.renderer.setShowInvisibles(showInvisibles);
+ };
+ this.getShowInvisibles = function() {
+ return this.renderer.getShowInvisibles();
+ };
+
+ this.setDisplayIndentGuides = function(display) {
+ this.renderer.setDisplayIndentGuides(display);
+ };
+
+ this.getDisplayIndentGuides = function() {
+ return this.renderer.getDisplayIndentGuides();
+ };
+ this.setShowPrintMargin = function(showPrintMargin) {
+ this.renderer.setShowPrintMargin(showPrintMargin);
+ };
+ this.getShowPrintMargin = function() {
+ return this.renderer.getShowPrintMargin();
+ };
+ this.setPrintMarginColumn = function(showPrintMargin) {
+ this.renderer.setPrintMarginColumn(showPrintMargin);
+ };
+ this.getPrintMarginColumn = function() {
+ return this.renderer.getPrintMarginColumn();
+ };
+ this.setReadOnly = function(readOnly) {
+ this.setOption("readOnly", readOnly);
+ };
+ this.getReadOnly = function() {
+ return this.getOption("readOnly");
+ };
+ this.setBehavioursEnabled = function (enabled) {
+ this.setOption("behavioursEnabled", enabled);
+ };
+ this.getBehavioursEnabled = function () {
+ return this.getOption("behavioursEnabled");
+ };
+ this.setWrapBehavioursEnabled = function (enabled) {
+ this.setOption("wrapBehavioursEnabled", enabled);
+ };
+ this.getWrapBehavioursEnabled = function () {
+ return this.getOption("wrapBehavioursEnabled");
+ };
+ this.setShowFoldWidgets = function(show) {
+ this.setOption("showFoldWidgets", show);
+
+ };
+ this.getShowFoldWidgets = function() {
+ return this.getOption("showFoldWidgets");
+ };
+
+ this.setFadeFoldWidgets = function(fade) {
+ this.setOption("fadeFoldWidgets", fade);
+ };
+
+ this.getFadeFoldWidgets = function() {
+ return this.getOption("fadeFoldWidgets");
+ };
+ this.remove = function(dir) {
+ if (this.selection.isEmpty()){
+ if (dir == "left")
+ this.selection.selectLeft();
+ else
+ this.selection.selectRight();
+ }
+
+ var range = this.getSelectionRange();
+ if (this.getBehavioursEnabled()) {
+ var session = this.session;
+ var state = session.getState(range.start.row);
+ var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);
+
+ if (range.end.column === 0) {
+ var text = session.getTextRange(range);
+ if (text[text.length - 1] == "\n") {
+ var line = session.getLine(range.end.row);
+ if (/^\s+$/.test(line)) {
+ range.end.column = line.length;
+ }
+ }
+ }
+ if (new_range)
+ range = new_range;
+ }
+
+ this.session.remove(range);
+ this.clearSelection();
+ };
+ this.removeWordRight = function() {
+ if (this.selection.isEmpty())
+ this.selection.selectWordRight();
+
+ this.session.remove(this.getSelectionRange());
+ this.clearSelection();
+ };
+ this.removeWordLeft = function() {
+ if (this.selection.isEmpty())
+ this.selection.selectWordLeft();
+
+ this.session.remove(this.getSelectionRange());
+ this.clearSelection();
+ };
+ this.removeToLineStart = function() {
+ if (this.selection.isEmpty())
+ this.selection.selectLineStart();
+
+ this.session.remove(this.getSelectionRange());
+ this.clearSelection();
+ };
+ this.removeToLineEnd = function() {
+ if (this.selection.isEmpty())
+ this.selection.selectLineEnd();
+
+ var range = this.getSelectionRange();
+ if (range.start.column == range.end.column && range.start.row == range.end.row) {
+ range.end.column = 0;
+ range.end.row++;
+ }
+
+ this.session.remove(range);
+ this.clearSelection();
+ };
+ this.splitLine = function() {
+ if (!this.selection.isEmpty()) {
+ this.session.remove(this.getSelectionRange());
+ this.clearSelection();
+ }
+
+ var cursor = this.getCursorPosition();
+ this.insert("\n");
+ this.moveCursorToPosition(cursor);
+ };
+ this.transposeLetters = function() {
+ if (!this.selection.isEmpty()) {
+ return;
+ }
+
+ var cursor = this.getCursorPosition();
+ var column = cursor.column;
+ if (column === 0)
+ return;
+
+ var line = this.session.getLine(cursor.row);
+ var swap, range;
+ if (column < line.length) {
+ swap = line.charAt(column) + line.charAt(column-1);
+ range = new Range(cursor.row, column-1, cursor.row, column+1);
+ }
+ else {
+ swap = line.charAt(column-1) + line.charAt(column-2);
+ range = new Range(cursor.row, column-2, cursor.row, column);
+ }
+ this.session.replace(range, swap);
+ };
+ this.toLowerCase = function() {
+ var originalRange = this.getSelectionRange();
+ if (this.selection.isEmpty()) {
+ this.selection.selectWord();
+ }
+
+ var range = this.getSelectionRange();
+ var text = this.session.getTextRange(range);
+ this.session.replace(range, text.toLowerCase());
+ this.selection.setSelectionRange(originalRange);
+ };
+ this.toUpperCase = function() {
+ var originalRange = this.getSelectionRange();
+ if (this.selection.isEmpty()) {
+ this.selection.selectWord();
+ }
+
+ var range = this.getSelectionRange();
+ var text = this.session.getTextRange(range);
+ this.session.replace(range, text.toUpperCase());
+ this.selection.setSelectionRange(originalRange);
+ };
+ this.indent = function() {
+ var session = this.session;
+ var range = this.getSelectionRange();
+
+ if (range.start.row < range.end.row) {
+ var rows = this.$getSelectedRows();
+ session.indentRows(rows.first, rows.last, "\t");
+ return;
+ } else if (range.start.column < range.end.column) {
+ var text = session.getTextRange(range);
+ if (!/^\s+$/.test(text)) {
+ var rows = this.$getSelectedRows();
+ session.indentRows(rows.first, rows.last, "\t");
+ return;
+ }
+ }
+
+ var line = session.getLine(range.start.row);
+ var position = range.start;
+ var size = session.getTabSize();
+ var column = session.documentToScreenColumn(position.row, position.column);
+
+ if (this.session.getUseSoftTabs()) {
+ var count = (size - column % size);
+ var indentString = lang.stringRepeat(" ", count);
+ } else {
+ var count = column % size;
+ while (line[range.start.column] == " " && count) {
+ range.start.column--;
+ count--;
+ }
+ this.selection.setSelectionRange(range);
+ indentString = "\t";
+ }
+ return this.insert(indentString);
+ };
+ this.blockIndent = function() {
+ var rows = this.$getSelectedRows();
+ this.session.indentRows(rows.first, rows.last, "\t");
+ };
+ this.blockOutdent = function() {
+ var selection = this.session.getSelection();
+ this.session.outdentRows(selection.getRange());
+ };
+ this.sortLines = function() {
+ var rows = this.$getSelectedRows();
+ var session = this.session;
+
+ var lines = [];
+ for (i = rows.first; i <= rows.last; i++)
+ lines.push(session.getLine(i));
+
+ lines.sort(function(a, b) {
+ if (a.toLowerCase() < b.toLowerCase()) return -1;
+ if (a.toLowerCase() > b.toLowerCase()) return 1;
+ return 0;
+ });
+
+ var deleteRange = new Range(0, 0, 0, 0);
+ for (var i = rows.first; i <= rows.last; i++) {
+ var line = session.getLine(i);
+ deleteRange.start.row = i;
+ deleteRange.end.row = i;
+ deleteRange.end.column = line.length;
+ session.replace(deleteRange, lines[i-rows.first]);
+ }
+ };
+ this.toggleCommentLines = function() {
+ var state = this.session.getState(this.getCursorPosition().row);
+ var rows = this.$getSelectedRows();
+ this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);
+ };
+
+ this.toggleBlockComment = function() {
+ var cursor = this.getCursorPosition();
+ var state = this.session.getState(cursor.row);
+ var range = this.getSelectionRange();
+ this.session.getMode().toggleBlockComment(state, this.session, range, cursor);
+ };
+ this.getNumberAt = function(row, column) {
+ var _numberRx = /[\-]?[0-9]+(?:\.[0-9]+)?/g;
+ _numberRx.lastIndex = 0;
+
+ var s = this.session.getLine(row);
+ while (_numberRx.lastIndex < column) {
+ var m = _numberRx.exec(s);
+ if(m.index <= column && m.index+m[0].length >= column){
+ var number = {
+ value: m[0],
+ start: m.index,
+ end: m.index+m[0].length
+ };
+ return number;
+ }
+ }
+ return null;
+ };
+ this.modifyNumber = function(amount) {
+ var row = this.selection.getCursor().row;
+ var column = this.selection.getCursor().column;
+ var charRange = new Range(row, column-1, row, column);
+
+ var c = this.session.getTextRange(charRange);
+ if (!isNaN(parseFloat(c)) && isFinite(c)) {
+ var nr = this.getNumberAt(row, column);
+ if (nr) {
+ var fp = nr.value.indexOf(".") >= 0 ? nr.start + nr.value.indexOf(".") + 1 : nr.end;
+ var decimals = nr.start + nr.value.length - fp;
+
+ var t = parseFloat(nr.value);
+ t *= Math.pow(10, decimals);
+
+
+ if(fp !== nr.end && column < fp){
+ amount *= Math.pow(10, nr.end - column - 1);
+ } else {
+ amount *= Math.pow(10, nr.end - column);
+ }
+
+ t += amount;
+ t /= Math.pow(10, decimals);
+ var nnr = t.toFixed(decimals);
+ var replaceRange = new Range(row, nr.start, row, nr.end);
+ this.session.replace(replaceRange, nnr);
+ this.moveCursorTo(row, Math.max(nr.start +1, column + nnr.length - nr.value.length));
+
+ }
+ }
+ };
+ this.removeLines = function() {
+ var rows = this.$getSelectedRows();
+ this.session.removeFullLines(rows.first, rows.last);
+ this.clearSelection();
+ };
+
+ this.duplicateSelection = function() {
+ var sel = this.selection;
+ var doc = this.session;
+ var range = sel.getRange();
+ var reverse = sel.isBackwards();
+ if (range.isEmpty()) {
+ var row = range.start.row;
+ doc.duplicateLines(row, row);
+ } else {
+ var point = reverse ? range.start : range.end;
+ var endPoint = doc.insert(point, doc.getTextRange(range), false);
+ range.start = point;
+ range.end = endPoint;
+
+ sel.setSelectionRange(range, reverse);
+ }
+ };
+ this.moveLinesDown = function() {
+ this.$moveLines(1, false);
+ };
+ this.moveLinesUp = function() {
+ this.$moveLines(-1, false);
+ };
+ this.moveText = function(range, toPosition, copy) {
+ return this.session.moveText(range, toPosition, copy);
+ };
+ this.copyLinesUp = function() {
+ this.$moveLines(-1, true);
+ };
+ this.copyLinesDown = function() {
+ this.$moveLines(1, true);
+ };
+ this.$moveLines = function(dir, copy) {
+ var rows, moved;
+ var selection = this.selection;
+ if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {
+ var range = selection.toOrientedRange();
+ rows = this.$getSelectedRows(range);
+ moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);
+ if (copy && dir == -1) moved = 0;
+ range.moveBy(moved, 0);
+ selection.fromOrientedRange(range);
+ } else {
+ var ranges = selection.rangeList.ranges;
+ selection.rangeList.detach(this.session);
+ this.inVirtualSelectionMode = true;
+
+ var diff = 0;
+ var totalDiff = 0;
+ var l = ranges.length;
+ for (var i = 0; i < l; i++) {
+ var rangeIndex = i;
+ ranges[i].moveBy(diff, 0);
+ rows = this.$getSelectedRows(ranges[i]);
+ var first = rows.first;
+ var last = rows.last;
+ while (++i < l) {
+ if (totalDiff) ranges[i].moveBy(totalDiff, 0);
+ var subRows = this.$getSelectedRows(ranges[i]);
+ if (copy && subRows.first != last)
+ break;
+ else if (!copy && subRows.first > last + 1)
+ break;
+ last = subRows.last;
+ }
+ i--;
+ diff = this.session.$moveLines(first, last, copy ? 0 : dir);
+ if (copy && dir == -1) rangeIndex = i + 1;
+ while (rangeIndex <= i) {
+ ranges[rangeIndex].moveBy(diff, 0);
+ rangeIndex++;
+ }
+ if (!copy) diff = 0;
+ totalDiff += diff;
+ }
+
+ selection.fromOrientedRange(selection.ranges[0]);
+ selection.rangeList.attach(this.session);
+ this.inVirtualSelectionMode = false;
+ }
+ };
+ this.$getSelectedRows = function(range) {
+ range = (range || this.getSelectionRange()).collapseRows();
+
+ return {
+ first: this.session.getRowFoldStart(range.start.row),
+ last: this.session.getRowFoldEnd(range.end.row)
+ };
+ };
+
+ this.onCompositionStart = function(text) {
+ this.renderer.showComposition(this.getCursorPosition());
+ };
+
+ this.onCompositionUpdate = function(text) {
+ this.renderer.setCompositionText(text);
+ };
+
+ this.onCompositionEnd = function() {
+ this.renderer.hideComposition();
+ };
+ this.getFirstVisibleRow = function() {
+ return this.renderer.getFirstVisibleRow();
+ };
+ this.getLastVisibleRow = function() {
+ return this.renderer.getLastVisibleRow();
+ };
+ this.isRowVisible = function(row) {
+ return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());
+ };
+ this.isRowFullyVisible = function(row) {
+ return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());
+ };
+ this.$getVisibleRowCount = function() {
+ return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;
+ };
+
+ this.$moveByPage = function(dir, select) {
+ var renderer = this.renderer;
+ var config = this.renderer.layerConfig;
+ var rows = dir * Math.floor(config.height / config.lineHeight);
+
+ this.$blockScrolling++;
+ if (select === true) {
+ this.selection.$moveSelection(function(){
+ this.moveCursorBy(rows, 0);
+ });
+ } else if (select === false) {
+ this.selection.moveCursorBy(rows, 0);
+ this.selection.clearSelection();
+ }
+ this.$blockScrolling--;
+
+ var scrollTop = renderer.scrollTop;
+
+ renderer.scrollBy(0, rows * config.lineHeight);
+ if (select != null)
+ renderer.scrollCursorIntoView(null, 0.5);
+
+ renderer.animateScrolling(scrollTop);
+ };
+ this.selectPageDown = function() {
+ this.$moveByPage(1, true);
+ };
+ this.selectPageUp = function() {
+ this.$moveByPage(-1, true);
+ };
+ this.gotoPageDown = function() {
+ this.$moveByPage(1, false);
+ };
+ this.gotoPageUp = function() {
+ this.$moveByPage(-1, false);
+ };
+ this.scrollPageDown = function() {
+ this.$moveByPage(1);
+ };
+ this.scrollPageUp = function() {
+ this.$moveByPage(-1);
+ };
+ this.scrollToRow = function(row) {
+ this.renderer.scrollToRow(row);
+ };
+ this.scrollToLine = function(line, center, animate, callback) {
+ this.renderer.scrollToLine(line, center, animate, callback);
+ };
+ this.centerSelection = function() {
+ var range = this.getSelectionRange();
+ var pos = {
+ row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),
+ column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)
+ };
+ this.renderer.alignCursor(pos, 0.5);
+ };
+ this.getCursorPosition = function() {
+ return this.selection.getCursor();
+ };
+ this.getCursorPositionScreen = function() {
+ return this.session.documentToScreenPosition(this.getCursorPosition());
+ };
+ this.getSelectionRange = function() {
+ return this.selection.getRange();
+ };
+ this.selectAll = function() {
+ this.$blockScrolling += 1;
+ this.selection.selectAll();
+ this.$blockScrolling -= 1;
+ };
+ this.clearSelection = function() {
+ this.selection.clearSelection();
+ };
+ this.moveCursorTo = function(row, column) {
+ this.selection.moveCursorTo(row, column);
+ };
+ this.moveCursorToPosition = function(pos) {
+ this.selection.moveCursorToPosition(pos);
+ };
+ this.jumpToMatching = function(select, expand) {
+ var cursor = this.getCursorPosition();
+ var iterator = new TokenIterator(this.session, cursor.row, cursor.column);
+ var prevToken = iterator.getCurrentToken();
+ var token = prevToken || iterator.stepForward();
+
+ if (!token) return;
+ var matchType;
+ var found = false;
+ var depth = {};
+ var i = cursor.column - token.start;
+ var bracketType;
+ var brackets = {
+ ")": "(",
+ "(": "(",
+ "]": "[",
+ "[": "[",
+ "{": "{",
+ "}": "{"
+ };
+
+ do {
+ if (token.value.match(/[{}()\[\]]/g)) {
+ for (; i < token.value.length && !found; i++) {
+ if (!brackets[token.value[i]]) {
+ continue;
+ }
+
+ bracketType = brackets[token.value[i]] + '.' + token.type.replace("rparen", "lparen");
+
+ if (isNaN(depth[bracketType])) {
+ depth[bracketType] = 0;
+ }
+
+ switch (token.value[i]) {
+ case '(':
+ case '[':
+ case '{':
+ depth[bracketType]++;
+ break;
+ case ')':
+ case ']':
+ case '}':
+ depth[bracketType]--;
+
+ if (depth[bracketType] === -1) {
+ matchType = 'bracket';
+ found = true;
+ }
+ break;
+ }
+ }
+ }
+ else if (token && token.type.indexOf('tag-name') !== -1) {
+ if (isNaN(depth[token.value])) {
+ depth[token.value] = 0;
+ }
+
+ if (prevToken.value === '<') {
+ depth[token.value]++;
+ }
+ else if (prevToken.value === '</') {
+ depth[token.value]--;
+ }
+
+ if (depth[token.value] === -1) {
+ matchType = 'tag';
+ found = true;
+ }
+ }
+
+ if (!found) {
+ prevToken = token;
+ token = iterator.stepForward();
+ i = 0;
+ }
+ } while (token && !found);
+ if (!matchType)
+ return;
+
+ var range, pos;
+ if (matchType === 'bracket') {
+ range = this.session.getBracketRange(cursor);
+ if (!range) {
+ range = new Range(
+ iterator.getCurrentTokenRow(),
+ iterator.getCurrentTokenColumn() + i - 1,
+ iterator.getCurrentTokenRow(),
+ iterator.getCurrentTokenColumn() + i - 1
+ );
+ pos = range.start;
+ if (expand || pos.row === cursor.row && Math.abs(pos.column - cursor.column) < 2)
+ range = this.session.getBracketRange(pos);
+ }
+ }
+ else if (matchType === 'tag') {
+ if (token && token.type.indexOf('tag-name') !== -1)
+ var tag = token.value;
+ else
+ return;
+
+ range = new Range(
+ iterator.getCurrentTokenRow(),
+ iterator.getCurrentTokenColumn() - 2,
+ iterator.getCurrentTokenRow(),
+ iterator.getCurrentTokenColumn() - 2
+ );
+ if (range.compare(cursor.row, cursor.column) === 0) {
+ found = false;
+ do {
+ token = prevToken;
+ prevToken = iterator.stepBackward();
+
+ if (prevToken) {
+ if (prevToken.type.indexOf('tag-close') !== -1) {
+ range.setEnd(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);
+ }
+
+ if (token.value === tag && token.type.indexOf('tag-name') !== -1) {
+ if (prevToken.value === '<') {
+ depth[tag]++;
+ }
+ else if (prevToken.value === '</') {
+ depth[tag]--;
+ }
+
+ if (depth[tag] === 0)
+ found = true;
+ }
+ }
+ } while (prevToken && !found);
+ }
+ if (token && token.type.indexOf('tag-name')) {
+ pos = range.start;
+ if (pos.row == cursor.row && Math.abs(pos.column - cursor.column) < 2)
+ pos = range.end;
+ }
+ }
+
+ pos = range && range.cursor || pos;
+ if (pos) {
+ if (select) {
+ if (range && expand) {
+ this.selection.setRange(range);
+ } else if (range && range.isEqual(this.getSelectionRange())) {
+ this.clearSelection();
+ } else {
+ this.selection.selectTo(pos.row, pos.column);
+ }
+ } else {
+ this.selection.moveTo(pos.row, pos.column);
+ }
+ }
+ };
+ this.gotoLine = function(lineNumber, column, animate) {
+ this.selection.clearSelection();
+ this.session.unfold({row: lineNumber - 1, column: column || 0});
+
+ this.$blockScrolling += 1;
+ this.exitMultiSelectMode && this.exitMultiSelectMode();
+ this.moveCursorTo(lineNumber - 1, column || 0);
+ this.$blockScrolling -= 1;
+
+ if (!this.isRowFullyVisible(lineNumber - 1))
+ this.scrollToLine(lineNumber - 1, true, animate);
+ };
+ this.navigateTo = function(row, column) {
+ this.selection.moveTo(row, column);
+ };
+ this.navigateUp = function(times) {
+ if (this.selection.isMultiLine() && !this.selection.isBackwards()) {
+ var selectionStart = this.selection.anchor.getPosition();
+ return this.moveCursorToPosition(selectionStart);
+ }
+ this.selection.clearSelection();
+ this.selection.moveCursorBy(-times || -1, 0);
+ };
+ this.navigateDown = function(times) {
+ if (this.selection.isMultiLine() && this.selection.isBackwards()) {
+ var selectionEnd = this.selection.anchor.getPosition();
+ return this.moveCursorToPosition(selectionEnd);
+ }
+ this.selection.clearSelection();
+ this.selection.moveCursorBy(times || 1, 0);
+ };
+ this.navigateLeft = function(times) {
+ if (!this.selection.isEmpty()) {
+ var selectionStart = this.getSelectionRange().start;
+ this.moveCursorToPosition(selectionStart);
+ }
+ else {
+ times = times || 1;
+ while (times--) {
+ this.selection.moveCursorLeft();
+ }
+ }
+ this.clearSelection();
+ };
+ this.navigateRight = function(times) {
+ if (!this.selection.isEmpty()) {
+ var selectionEnd = this.getSelectionRange().end;
+ this.moveCursorToPosition(selectionEnd);
+ }
+ else {
+ times = times || 1;
+ while (times--) {
+ this.selection.moveCursorRight();
+ }
+ }
+ this.clearSelection();
+ };
+ this.navigateLineStart = function() {
+ this.selection.moveCursorLineStart();
+ this.clearSelection();
+ };
+ this.navigateLineEnd = function() {
+ this.selection.moveCursorLineEnd();
+ this.clearSelection();
+ };
+ this.navigateFileEnd = function() {
+ this.selection.moveCursorFileEnd();
+ this.clearSelection();
+ };
+ this.navigateFileStart = function() {
+ this.selection.moveCursorFileStart();
+ this.clearSelection();
+ };
+ this.navigateWordRight = function() {
+ this.selection.moveCursorWordRight();
+ this.clearSelection();
+ };
+ this.navigateWordLeft = function() {
+ this.selection.moveCursorWordLeft();
+ this.clearSelection();
+ };
+ this.replace = function(replacement, options) {
+ if (options)
+ this.$search.set(options);
+
+ var range = this.$search.find(this.session);
+ var replaced = 0;
+ if (!range)
+ return replaced;
+
+ if (this.$tryReplace(range, replacement)) {
+ replaced = 1;
+ }
+ if (range !== null) {
+ this.selection.setSelectionRange(range);
+ this.renderer.scrollSelectionIntoView(range.start, range.end);
+ }
+
+ return replaced;
+ };
+ this.replaceAll = function(replacement, options) {
+ if (options) {
+ this.$search.set(options);
+ }
+
+ var ranges = this.$search.findAll(this.session);
+ var replaced = 0;
+ if (!ranges.length)
+ return replaced;
+
+ this.$blockScrolling += 1;
+
+ var selection = this.getSelectionRange();
+ this.selection.moveTo(0, 0);
+
+ for (var i = ranges.length - 1; i >= 0; --i) {
+ if(this.$tryReplace(ranges[i], replacement)) {
+ replaced++;
+ }
+ }
+
+ this.selection.setSelectionRange(selection);
+ this.$blockScrolling -= 1;
+
+ return replaced;
+ };
+
+ this.$tryReplace = function(range, replacement) {
+ var input = this.session.getTextRange(range);
+ replacement = this.$search.replace(input, replacement);
+ if (replacement !== null) {
+ range.end = this.session.replace(range, replacement);
+ return range;
+ } else {
+ return null;
+ }
+ };
+ this.getLastSearchOptions = function() {
+ return this.$search.getOptions();
+ };
+ this.find = function(needle, options, animate) {
+ if (!options)
+ options = {};
+
+ if (typeof needle == "string" || needle instanceof RegExp)
+ options.needle = needle;
+ else if (typeof needle == "object")
+ oop.mixin(options, needle);
+
+ var range = this.selection.getRange();
+ if (options.needle == null) {
+ needle = this.session.getTextRange(range)
+ || this.$search.$options.needle;
+ if (!needle) {
+ range = this.session.getWordRange(range.start.row, range.start.column);
+ needle = this.session.getTextRange(range);
+ }
+ this.$search.set({needle: needle});
+ }
+
+ this.$search.set(options);
+ if (!options.start)
+ this.$search.set({start: range});
+
+ var newRange = this.$search.find(this.session);
+ if (options.preventScroll)
+ return newRange;
+ if (newRange) {
+ this.revealRange(newRange, animate);
+ return newRange;
+ }
+ if (options.backwards)
+ range.start = range.end;
+ else
+ range.end = range.start;
+ this.selection.setRange(range);
+ };
+ this.findNext = function(options, animate) {
+ this.find({skipCurrent: true, backwards: false}, options, animate);
+ };
+ this.findPrevious = function(options, animate) {
+ this.find(options, {skipCurrent: true, backwards: true}, animate);
+ };
+
+ this.revealRange = function(range, animate) {
+ this.$blockScrolling += 1;
+ this.session.unfold(range);
+ this.selection.setSelectionRange(range);
+ this.$blockScrolling -= 1;
+
+ var scrollTop = this.renderer.scrollTop;
+ this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);
+ if (animate !== false)
+ this.renderer.animateScrolling(scrollTop);
+ };
+ this.undo = function() {
+ this.$blockScrolling++;
+ this.session.getUndoManager().undo();
+ this.$blockScrolling--;
+ this.renderer.scrollCursorIntoView(null, 0.5);
+ };
+ this.redo = function() {
+ this.$blockScrolling++;
+ this.session.getUndoManager().redo();
+ this.$blockScrolling--;
+ this.renderer.scrollCursorIntoView(null, 0.5);
+ };
+ this.destroy = function() {
+ this.renderer.destroy();
+ this._signal("destroy", this);
+ if (this.session) {
+ this.session.destroy();
+ }
+ };
+ this.setAutoScrollEditorIntoView = function(enable) {
+ if (!enable)
+ return;
+ var rect;
+ var self = this;
+ var shouldScroll = false;
+ if (!this.$scrollAnchor)
+ this.$scrollAnchor = document.createElement("div");
+ var scrollAnchor = this.$scrollAnchor;
+ scrollAnchor.style.cssText = "position:absolute";
+ this.container.insertBefore(scrollAnchor, this.container.firstChild);
+ var onChangeSelection = this.on("changeSelection", function() {
+ shouldScroll = true;
+ });
+ var onBeforeRender = this.renderer.on("beforeRender", function() {
+ if (shouldScroll)
+ rect = self.renderer.container.getBoundingClientRect();
+ });
+ var onAfterRender = this.renderer.on("afterRender", function() {
+ if (shouldScroll && rect && (self.isFocused()
+ || self.searchBox && self.searchBox.isFocused())
+ ) {
+ var renderer = self.renderer;
+ var pos = renderer.$cursorLayer.$pixelPos;
+ var config = renderer.layerConfig;
+ var top = pos.top - config.offset;
+ if (pos.top >= 0 && top + rect.top < 0) {
+ shouldScroll = true;
+ } else if (pos.top < config.height &&
+ pos.top + rect.top + config.lineHeight > window.innerHeight) {
+ shouldScroll = false;
+ } else {
+ shouldScroll = null;
+ }
+ if (shouldScroll != null) {
+ scrollAnchor.style.top = top + "px";
+ scrollAnchor.style.left = pos.left + "px";
+ scrollAnchor.style.height = config.lineHeight + "px";
+ scrollAnchor.scrollIntoView(shouldScroll);
+ }
+ shouldScroll = rect = null;
+ }
+ });
+ this.setAutoScrollEditorIntoView = function(enable) {
+ if (enable)
+ return;
+ delete this.setAutoScrollEditorIntoView;
+ this.removeEventListener("changeSelection", onChangeSelection);
+ this.renderer.removeEventListener("afterRender", onAfterRender);
+ this.renderer.removeEventListener("beforeRender", onBeforeRender);
+ };
+ };
+
+
+ this.$resetCursorStyle = function() {
+ var style = this.$cursorStyle || "ace";
+ var cursorLayer = this.renderer.$cursorLayer;
+ if (!cursorLayer)
+ return;
+ cursorLayer.setSmoothBlinking(/smooth/.test(style));
+ cursorLayer.isBlinking = !this.$readOnly && style != "wide";
+ dom.setCssClass(cursorLayer.element, "ace_slim-cursors", /slim/.test(style));
+ };
+
+}).call(Editor.prototype);
+
+
+
+config.defineOptions(Editor.prototype, "editor", {
+ selectionStyle: {
+ set: function(style) {
+ this.onSelectionChange();
+ this._signal("changeSelectionStyle", {data: style});
+ },
+ initialValue: "line"
+ },
+ highlightActiveLine: {
+ set: function() {this.$updateHighlightActiveLine();},
+ initialValue: true
+ },
+ highlightSelectedWord: {
+ set: function(shouldHighlight) {this.$onSelectionChange();},
+ initialValue: true
+ },
+ readOnly: {
+ set: function(readOnly) {
+ this.$resetCursorStyle();
+ },
+ initialValue: false
+ },
+ cursorStyle: {
+ set: function(val) { this.$resetCursorStyle(); },
+ values: ["ace", "slim", "smooth", "wide"],
+ initialValue: "ace"
+ },
+ mergeUndoDeltas: {
+ values: [false, true, "always"],
+ initialValue: true
+ },
+ behavioursEnabled: {initialValue: true},
+ wrapBehavioursEnabled: {initialValue: true},
+ autoScrollEditorIntoView: {
+ set: function(val) {this.setAutoScrollEditorIntoView(val)}
+ },
+
+ hScrollBarAlwaysVisible: "renderer",
+ vScrollBarAlwaysVisible: "renderer",
+ highlightGutterLine: "renderer",
+ animatedScroll: "renderer",
+ showInvisibles: "renderer",
+ showPrintMargin: "renderer",
+ printMarginColumn: "renderer",
+ printMargin: "renderer",
+ fadeFoldWidgets: "renderer",
+ showFoldWidgets: "renderer",
+ showLineNumbers: "renderer",
+ showGutter: "renderer",
+ displayIndentGuides: "renderer",
+ fontSize: "renderer",
+ fontFamily: "renderer",
+ maxLines: "renderer",
+ minLines: "renderer",
+ scrollPastEnd: "renderer",
+ fixedWidthGutter: "renderer",
+ theme: "renderer",
+
+ scrollSpeed: "$mouseHandler",
+ dragDelay: "$mouseHandler",
+ dragEnabled: "$mouseHandler",
+ focusTimout: "$mouseHandler",
+ tooltipFollowsMouse: "$mouseHandler",
+
+ firstLineNumber: "session",
+ overwrite: "session",
+ newLineMode: "session",
+ useWorker: "session",
+ useSoftTabs: "session",
+ tabSize: "session",
+ wrap: "session",
+ indentedSoftWrap: "session",
+ foldStyle: "session",
+ mode: "session"
+});
+
+exports.Editor = Editor;
+});
+
+define("ace/undomanager",["require","exports","module"], function(require, exports, module) {
+"use strict";
+var UndoManager = function() {
+ this.reset();
+};
+
+(function() {
+ this.execute = function(options) {
+ var deltaSets = options.args[0];
+ this.$doc = options.args[1];
+ if (options.merge && this.hasUndo()){
+ this.dirtyCounter--;
+ deltaSets = this.$undoStack.pop().concat(deltaSets);
+ }
+ this.$undoStack.push(deltaSets);
+ this.$redoStack = [];
+ if (this.dirtyCounter < 0) {
+ this.dirtyCounter = NaN;
+ }
+ this.dirtyCounter++;
+ };
+ this.undo = function(dontSelect) {
+ var deltaSets = this.$undoStack.pop();
+ var undoSelectionRange = null;
+ if (deltaSets) {
+ undoSelectionRange = this.$doc.undoChanges(deltaSets, dontSelect);
+ this.$redoStack.push(deltaSets);
+ this.dirtyCounter--;
+ }
+
+ return undoSelectionRange;
+ };
+ this.redo = function(dontSelect) {
+ var deltaSets = this.$redoStack.pop();
+ var redoSelectionRange = null;
+ if (deltaSets) {
+ redoSelectionRange =
+ this.$doc.redoChanges(this.$deserializeDeltas(deltaSets), dontSelect);
+ this.$undoStack.push(deltaSets);
+ this.dirtyCounter++;
+ }
+ return redoSelectionRange;
+ };
+ this.reset = function() {
+ this.$undoStack = [];
+ this.$redoStack = [];
+ this.dirtyCounter = 0;
+ };
+ this.hasUndo = function() {
+ return this.$undoStack.length > 0;
+ };
+ this.hasRedo = function() {
+ return this.$redoStack.length > 0;
+ };
+ this.markClean = function() {
+ this.dirtyCounter = 0;
+ };
+ this.isClean = function() {
+ return this.dirtyCounter === 0;
+ };
+ this.$serializeDeltas = function(deltaSets) {
+ return cloneDeltaSetsObj(deltaSets, $serializeDelta);
+ };
+ this.$deserializeDeltas = function(deltaSets) {
+ return cloneDeltaSetsObj(deltaSets, $deserializeDelta);
+ };
+
+ function $serializeDelta(delta){
+ return {
+ action: delta.action,
+ start: delta.start,
+ end: delta.end,
+ lines: delta.lines.length == 1 ? null : delta.lines,
+ text: delta.lines.length == 1 ? delta.lines[0] : null,
+ };
+ }
+
+ function $deserializeDelta(delta) {
+ return {
+ action: delta.action,
+ start: delta.start,
+ end: delta.end,
+ lines: delta.lines || [delta.text]
+ };
+ }
+
+ function cloneDeltaSetsObj(deltaSets_old, fnGetModifiedDelta) {
+ var deltaSets_new = new Array(deltaSets_old.length);
+ for (var i = 0; i < deltaSets_old.length; i++) {
+ var deltaSet_old = deltaSets_old[i];
+ var deltaSet_new = { group: deltaSet_old.group, deltas: new Array(deltaSet_old.length)};
+
+ for (var j = 0; j < deltaSet_old.deltas.length; j++) {
+ var delta_old = deltaSet_old.deltas[j];
+ deltaSet_new.deltas[j] = fnGetModifiedDelta(delta_old);
+ }
+
+ deltaSets_new[i] = deltaSet_new;
+ }
+ return deltaSets_new;
+ }
+
+}).call(UndoManager.prototype);
+
+exports.UndoManager = UndoManager;
+});
+
+define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter"], function(require, exports, module) {
+"use strict";
+
+var dom = require("../lib/dom");
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var EventEmitter = require("../lib/event_emitter").EventEmitter;
+
+var Gutter = function(parentEl) {
+ this.element = dom.createElement("div");
+ this.element.className = "ace_layer ace_gutter-layer";
+ parentEl.appendChild(this.element);
+ this.setShowFoldWidgets(this.$showFoldWidgets);
+
+ this.gutterWidth = 0;
+
+ this.$annotations = [];
+ this.$updateAnnotations = this.$updateAnnotations.bind(this);
+
+ this.$cells = [];
+};
+
+(function() {
+
+ oop.implement(this, EventEmitter);
+
+ this.setSession = function(session) {
+ if (this.session)
+ this.session.removeEventListener("change", this.$updateAnnotations);
+ this.session = session;
+ if (session)
+ session.on("change", this.$updateAnnotations);
+ };
+
+ this.addGutterDecoration = function(row, className){
+ if (window.console)
+ console.warn && console.warn("deprecated use session.addGutterDecoration");
+ this.session.addGutterDecoration(row, className);
+ };
+
+ this.removeGutterDecoration = function(row, className){
+ if (window.console)
+ console.warn && console.warn("deprecated use session.removeGutterDecoration");
+ this.session.removeGutterDecoration(row, className);
+ };
+
+ this.setAnnotations = function(annotations) {
+ this.$annotations = [];
+ for (var i = 0; i < annotations.length; i++) {
+ var annotation = annotations[i];
+ var row = annotation.row;
+ var rowInfo = this.$annotations[row];
+ if (!rowInfo)
+ rowInfo = this.$annotations[row] = {text: []};
+
+ var annoText = annotation.text;
+ annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || "";
+
+ if (rowInfo.text.indexOf(annoText) === -1)
+ rowInfo.text.push(annoText);
+
+ var type = annotation.type;
+ if (type == "error")
+ rowInfo.className = " ace_error";
+ else if (type == "warning" && rowInfo.className != " ace_error")
+ rowInfo.className = " ace_warning";
+ else if (type == "info" && (!rowInfo.className))
+ rowInfo.className = " ace_info";
+ }
+ };
+
+ this.$updateAnnotations = function (delta) {
+ if (!this.$annotations.length)
+ return;
+ var firstRow = delta.start.row;
+ var len = delta.end.row - firstRow;
+ if (len === 0) {
+ } else if (delta.action == 'remove') {
+ this.$annotations.splice(firstRow, len + 1, null);
+ } else {
+ var args = new Array(len + 1);
+ args.unshift(firstRow, 1);
+ this.$annotations.splice.apply(this.$annotations, args);
+ }
+ };
+
+ this.update = function(config) {
+ var session = this.session;
+ var firstRow = config.firstRow;
+ var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar
+ session.getLength() - 1);
+ var fold = session.getNextFoldLine(firstRow);
+ var foldStart = fold ? fold.start.row : Infinity;
+ var foldWidgets = this.$showFoldWidgets && session.foldWidgets;
+ var breakpoints = session.$breakpoints;
+ var decorations = session.$decorations;
+ var firstLineNumber = session.$firstLineNumber;
+ var lastLineNumber = 0;
+
+ var gutterRenderer = session.gutterRenderer || this.$renderer;
+
+ var cell = null;
+ var index = -1;
+ var row = firstRow;
+ while (true) {
+ if (row > foldStart) {
+ row = fold.end.row + 1;
+ fold = session.getNextFoldLine(row, fold);
+ foldStart = fold ? fold.start.row : Infinity;
+ }
+ if (row > lastRow) {
+ while (this.$cells.length > index + 1) {
+ cell = this.$cells.pop();
+ this.element.removeChild(cell.element);
+ }
+ break;
+ }
+
+ cell = this.$cells[++index];
+ if (!cell) {
+ cell = {element: null, textNode: null, foldWidget: null};
+ cell.element = dom.createElement("div");
+ cell.textNode = document.createTextNode('');
+ cell.element.appendChild(cell.textNode);
+ this.element.appendChild(cell.element);
+ this.$cells[index] = cell;
+ }
+
+ var className = "ace_gutter-cell ";
+ if (breakpoints[row])
+ className += breakpoints[row];
+ if (decorations[row])
+ className += decorations[row];
+ if (this.$annotations[row])
+ className += this.$annotations[row].className;
+ if (cell.element.className != className)
+ cell.element.className = className;
+
+ var height = session.getRowLength(row) * config.lineHeight + "px";
+ if (height != cell.element.style.height)
+ cell.element.style.height = height;
+
+ if (foldWidgets) {
+ var c = foldWidgets[row];
+ if (c == null)
+ c = foldWidgets[row] = session.getFoldWidget(row);
+ }
+
+ if (c) {
+ if (!cell.foldWidget) {
+ cell.foldWidget = dom.createElement("span");
+ cell.element.appendChild(cell.foldWidget);
+ }
+ var className = "ace_fold-widget ace_" + c;
+ if (c == "start" && row == foldStart && row < fold.end.row)
+ className += " ace_closed";
+ else
+ className += " ace_open";
+ if (cell.foldWidget.className != className)
+ cell.foldWidget.className = className;
+
+ var height = config.lineHeight + "px";
+ if (cell.foldWidget.style.height != height)
+ cell.foldWidget.style.height = height;
+ } else {
+ if (cell.foldWidget) {
+ cell.element.removeChild(cell.foldWidget);
+ cell.foldWidget = null;
+ }
+ }
+
+ var text = lastLineNumber = gutterRenderer
+ ? gutterRenderer.getText(session, row)
+ : row + firstLineNumber;
+ if (text != cell.textNode.data)
+ cell.textNode.data = text;
+
+ row++;
+ }
+
+ this.element.style.height = config.minHeight + "px";
+
+ if (this.$fixedWidth || session.$useWrapMode)
+ lastLineNumber = session.getLength() + firstLineNumber;
+
+ var gutterWidth = gutterRenderer
+ ? gutterRenderer.getWidth(session, lastLineNumber, config)
+ : lastLineNumber.toString().length * config.characterWidth;
+
+ var padding = this.$padding || this.$computePadding();
+ gutterWidth += padding.left + padding.right;
+ if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {
+ this.gutterWidth = gutterWidth;
+ this.element.style.width = Math.ceil(this.gutterWidth) + "px";
+ this._emit("changeGutterWidth", gutterWidth);
+ }
+ };
+
+ this.$fixedWidth = false;
+
+ this.$showLineNumbers = true;
+ this.$renderer = "";
+ this.setShowLineNumbers = function(show) {
+ this.$renderer = !show && {
+ getWidth: function() {return ""},
+ getText: function() {return ""}
+ };
+ };
+
+ this.getShowLineNumbers = function() {
+ return this.$showLineNumbers;
+ };
+
+ this.$showFoldWidgets = true;
+ this.setShowFoldWidgets = function(show) {
+ if (show)
+ dom.addCssClass(this.element, "ace_folding-enabled");
+ else
+ dom.removeCssClass(this.element, "ace_folding-enabled");
+
+ this.$showFoldWidgets = show;
+ this.$padding = null;
+ };
+
+ this.getShowFoldWidgets = function() {
+ return this.$showFoldWidgets;
+ };
+
+ this.$computePadding = function() {
+ if (!this.element.firstChild)
+ return {left: 0, right: 0};
+ var style = dom.computedStyle(this.element.firstChild);
+ this.$padding = {};
+ this.$padding.left = parseInt(style.paddingLeft) + 1 || 0;
+ this.$padding.right = parseInt(style.paddingRight) || 0;
+ return this.$padding;
+ };
+
+ this.getRegion = function(point) {
+ var padding = this.$padding || this.$computePadding();
+ var rect = this.element.getBoundingClientRect();
+ if (point.x < padding.left + rect.left)
+ return "markers";
+ if (this.$showFoldWidgets && point.x > rect.right - padding.right)
+ return "foldWidgets";
+ };
+
+}).call(Gutter.prototype);
+
+exports.Gutter = Gutter;
+
+});
+
+define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+var dom = require("../lib/dom");
+
+var Marker = function(parentEl) {
+ this.element = dom.createElement("div");
+ this.element.className = "ace_layer ace_marker-layer";
+ parentEl.appendChild(this.element);
+};
+
+(function() {
+
+ this.$padding = 0;
+
+ this.setPadding = function(padding) {
+ this.$padding = padding;
+ };
+ this.setSession = function(session) {
+ this.session = session;
+ };
+
+ this.setMarkers = function(markers) {
+ this.markers = markers;
+ };
+
+ this.update = function(config) {
+ var config = config || this.config;
+ if (!config)
+ return;
+
+ this.config = config;
+
+
+ var html = [];
+ for (var key in this.markers) {
+ var marker = this.markers[key];
+
+ if (!marker.range) {
+ marker.update(html, this, this.session, config);
+ continue;
+ }
+
+ var range = marker.range.clipRows(config.firstRow, config.lastRow);
+ if (range.isEmpty()) continue;
+
+ range = range.toScreenRange(this.session);
+ if (marker.renderer) {
+ var top = this.$getTop(range.start.row, config);
+ var left = this.$padding + range.start.column * config.characterWidth;
+ marker.renderer(html, range, left, top, config);
+ } else if (marker.type == "fullLine") {
+ this.drawFullLineMarker(html, range, marker.clazz, config);
+ } else if (marker.type == "screenLine") {
+ this.drawScreenLineMarker(html, range, marker.clazz, config);
+ } else if (range.isMultiLine()) {
+ if (marker.type == "text")
+ this.drawTextMarker(html, range, marker.clazz, config);
+ else
+ this.drawMultiLineMarker(html, range, marker.clazz, config);
+ } else {
+ this.drawSingleLineMarker(html, range, marker.clazz + " ace_start" + " ace_br15", config);
+ }
+ }
+ this.element.innerHTML = html.join("");
+ };
+
+ this.$getTop = function(row, layerConfig) {
+ return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;
+ };
+
+ function getBorderClass(tl, tr, br, bl) {
+ return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);
+ }
+ this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) {
+ var session = this.session;
+ var start = range.start.row;
+ var end = range.end.row;
+ var row = start;
+ var prev = 0;
+ var curr = 0;
+ var next = session.getScreenLastRowColumn(row);
+ var lineRange = new Range(row, range.start.column, row, curr);
+ for (; row <= end; row++) {
+ lineRange.start.row = lineRange.end.row = row;
+ lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);
+ lineRange.end.column = next;
+ prev = curr;
+ curr = next;
+ next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;
+ this.drawSingleLineMarker(stringBuilder, lineRange,
+ clazz + (row == start ? " ace_start" : "") + " ace_br"
+ + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end),
+ layerConfig, row == end ? 0 : 1, extraStyle);
+ }
+ };
+ this.drawMultiLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {
+ var padding = this.$padding;
+ var height = config.lineHeight;
+ var top = this.$getTop(range.start.row, config);
+ var left = padding + range.start.column * config.characterWidth;
+ extraStyle = extraStyle || "";
+
+ stringBuilder.push(
+ "<div class='", clazz, " ace_br1 ace_start' style='",
+ "height:", height, "px;",
+ "right:0;",
+ "top:", top, "px;",
+ "left:", left, "px;", extraStyle, "'></div>"
+ );
+ top = this.$getTop(range.end.row, config);
+ var width = range.end.column * config.characterWidth;
+
+ stringBuilder.push(
+ "<div class='", clazz, " ace_br12' style='",
+ "height:", height, "px;",
+ "width:", width, "px;",
+ "top:", top, "px;",
+ "left:", padding, "px;", extraStyle, "'></div>"
+ );
+ height = (range.end.row - range.start.row - 1) * config.lineHeight;
+ if (height <= 0)
+ return;
+ top = this.$getTop(range.start.row + 1, config);
+
+ var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);
+
+ stringBuilder.push(
+ "<div class='", clazz, (radiusClass ? " ace_br" + radiusClass : ""), "' style='",
+ "height:", height, "px;",
+ "right:0;",
+ "top:", top, "px;",
+ "left:", padding, "px;", extraStyle, "'></div>"
+ );
+ };
+ this.drawSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {
+ var height = config.lineHeight;
+ var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;
+
+ var top = this.$getTop(range.start.row, config);
+ var left = this.$padding + range.start.column * config.characterWidth;
+
+ stringBuilder.push(
+ "<div class='", clazz, "' style='",
+ "height:", height, "px;",
+ "width:", width, "px;",
+ "top:", top, "px;",
+ "left:", left, "px;", extraStyle || "", "'></div>"
+ );
+ };
+
+ this.drawFullLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {
+ var top = this.$getTop(range.start.row, config);
+ var height = config.lineHeight;
+ if (range.start.row != range.end.row)
+ height += this.$getTop(range.end.row, config) - top;
+
+ stringBuilder.push(
+ "<div class='", clazz, "' style='",
+ "height:", height, "px;",
+ "top:", top, "px;",
+ "left:0;right:0;", extraStyle || "", "'></div>"
+ );
+ };
+
+ this.drawScreenLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {
+ var top = this.$getTop(range.start.row, config);
+ var height = config.lineHeight;
+
+ stringBuilder.push(
+ "<div class='", clazz, "' style='",
+ "height:", height, "px;",
+ "top:", top, "px;",
+ "left:0;right:0;", extraStyle || "", "'></div>"
+ );
+ };
+
+}).call(Marker.prototype);
+
+exports.Marker = Marker;
+
+});
+
+define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var dom = require("../lib/dom");
+var lang = require("../lib/lang");
+var useragent = require("../lib/useragent");
+var EventEmitter = require("../lib/event_emitter").EventEmitter;
+
+var Text = function(parentEl) {
+ this.element = dom.createElement("div");
+ this.element.className = "ace_layer ace_text-layer";
+ parentEl.appendChild(this.element);
+ this.$updateEolChar = this.$updateEolChar.bind(this);
+};
+
+(function() {
+
+ oop.implement(this, EventEmitter);
+
+ this.EOF_CHAR = "\xB6";
+ this.EOL_CHAR_LF = "\xAC";
+ this.EOL_CHAR_CRLF = "\xa4";
+ this.EOL_CHAR = this.EOL_CHAR_LF;
+ this.TAB_CHAR = "\u2014"; //"\u21E5";
+ this.SPACE_CHAR = "\xB7";
+ this.$padding = 0;
+
+ this.$updateEolChar = function() {
+ var EOL_CHAR = this.session.doc.getNewLineCharacter() == "\n"
+ ? this.EOL_CHAR_LF
+ : this.EOL_CHAR_CRLF;
+ if (this.EOL_CHAR != EOL_CHAR) {
+ this.EOL_CHAR = EOL_CHAR;
+ return true;
+ }
+ }
+
+ this.setPadding = function(padding) {
+ this.$padding = padding;
+ this.element.style.padding = "0 " + padding + "px";
+ };
+
+ this.getLineHeight = function() {
+ return this.$fontMetrics.$characterSize.height || 0;
+ };
+
+ this.getCharacterWidth = function() {
+ return this.$fontMetrics.$characterSize.width || 0;
+ };
+
+ this.$setFontMetrics = function(measure) {
+ this.$fontMetrics = measure;
+ this.$fontMetrics.on("changeCharacterSize", function(e) {
+ this._signal("changeCharacterSize", e);
+ }.bind(this));
+ this.$pollSizeChanges();
+ }
+
+ this.checkForSizeChanges = function() {
+ this.$fontMetrics.checkForSizeChanges();
+ };
+ this.$pollSizeChanges = function() {
+ return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();
+ };
+ this.setSession = function(session) {
+ this.session = session;
+ if (session)
+ this.$computeTabString();
+ };
+
+ this.showInvisibles = false;
+ this.setShowInvisibles = function(showInvisibles) {
+ if (this.showInvisibles == showInvisibles)
+ return false;
+
+ this.showInvisibles = showInvisibles;
+ this.$computeTabString();
+ return true;
+ };
+
+ this.displayIndentGuides = true;
+ this.setDisplayIndentGuides = function(display) {
+ if (this.displayIndentGuides == display)
+ return false;
+
+ this.displayIndentGuides = display;
+ this.$computeTabString();
+ return true;
+ };
+
+ this.$tabStrings = [];
+ this.onChangeTabSize =
+ this.$computeTabString = function() {
+ var tabSize = this.session.getTabSize();
+ this.tabSize = tabSize;
+ var tabStr = this.$tabStrings = [0];
+ for (var i = 1; i < tabSize + 1; i++) {
+ if (this.showInvisibles) {
+ tabStr.push("<span class='ace_invisible ace_invisible_tab'>"
+ + lang.stringRepeat(this.TAB_CHAR, i)
+ + "</span>");
+ } else {
+ tabStr.push(lang.stringRepeat(" ", i));
+ }
+ }
+ if (this.displayIndentGuides) {
+ this.$indentGuideRe = /\s\S| \t|\t |\s$/;
+ var className = "ace_indent-guide";
+ var spaceClass = "";
+ var tabClass = "";
+ if (this.showInvisibles) {
+ className += " ace_invisible";
+ spaceClass = " ace_invisible_space";
+ tabClass = " ace_invisible_tab";
+ var spaceContent = lang.stringRepeat(this.SPACE_CHAR, this.tabSize);
+ var tabContent = lang.stringRepeat(this.TAB_CHAR, this.tabSize);
+ } else{
+ var spaceContent = lang.stringRepeat(" ", this.tabSize);
+ var tabContent = spaceContent;
+ }
+
+ this.$tabStrings[" "] = "<span class='" + className + spaceClass + "'>" + spaceContent + "</span>";
+ this.$tabStrings["\t"] = "<span class='" + className + tabClass + "'>" + tabContent + "</span>";
+ }
+ };
+
+ this.updateLines = function(config, firstRow, lastRow) {
+ if (this.config.lastRow != config.lastRow ||
+ this.config.firstRow != config.firstRow) {
+ this.scrollLines(config);
+ }
+ this.config = config;
+
+ var first = Math.max(firstRow, config.firstRow);
+ var last = Math.min(lastRow, config.lastRow);
+
+ var lineElements = this.element.childNodes;
+ var lineElementsIdx = 0;
+
+ for (var row = config.firstRow; row < first; row++) {
+ var foldLine = this.session.getFoldLine(row);
+ if (foldLine) {
+ if (foldLine.containsRow(first)) {
+ first = foldLine.start.row;
+ break;
+ } else {
+ row = foldLine.end.row;
+ }
+ }
+ lineElementsIdx ++;
+ }
+
+ var row = first;
+ var foldLine = this.session.getNextFoldLine(row);
+ var foldStart = foldLine ? foldLine.start.row : Infinity;
+
+ while (true) {
+ if (row > foldStart) {
+ row = foldLine.end.row+1;
+ foldLine = this.session.getNextFoldLine(row, foldLine);
+ foldStart = foldLine ? foldLine.start.row :Infinity;
+ }
+ if (row > last)
+ break;
+
+ var lineElement = lineElements[lineElementsIdx++];
+ if (lineElement) {
+ var html = [];
+ this.$renderLine(
+ html, row, !this.$useLineGroups(), row == foldStart ? foldLine : false
+ );
+ lineElement.style.height = config.lineHeight * this.session.getRowLength(row) + "px";
+ lineElement.innerHTML = html.join("");
+ }
+ row++;
+ }
+ };
+
+ this.scrollLines = function(config) {
+ var oldConfig = this.config;
+ this.config = config;
+
+ if (!oldConfig || oldConfig.lastRow < config.firstRow)
+ return this.update(config);
+
+ if (config.lastRow < oldConfig.firstRow)
+ return this.update(config);
+
+ var el = this.element;
+ if (oldConfig.firstRow < config.firstRow)
+ for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--)
+ el.removeChild(el.firstChild);
+
+ if (oldConfig.lastRow > config.lastRow)
+ for (var row=this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row>0; row--)
+ el.removeChild(el.lastChild);
+
+ if (config.firstRow < oldConfig.firstRow) {
+ var fragment = this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1);
+ if (el.firstChild)
+ el.insertBefore(fragment, el.firstChild);
+ else
+ el.appendChild(fragment);
+ }
+
+ if (config.lastRow > oldConfig.lastRow) {
+ var fragment = this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow);
+ el.appendChild(fragment);
+ }
+ };
+
+ this.$renderLinesFragment = function(config, firstRow, lastRow) {
+ var fragment = this.element.ownerDocument.createDocumentFragment();
+ var row = firstRow;
+ var foldLine = this.session.getNextFoldLine(row);
+ var foldStart = foldLine ? foldLine.start.row : Infinity;
+
+ while (true) {
+ if (row > foldStart) {
+ row = foldLine.end.row+1;
+ foldLine = this.session.getNextFoldLine(row, foldLine);
+ foldStart = foldLine ? foldLine.start.row : Infinity;
+ }
+ if (row > lastRow)
+ break;
+
+ var container = dom.createElement("div");
+
+ var html = [];
+ this.$renderLine(html, row, false, row == foldStart ? foldLine : false);
+ container.innerHTML = html.join("");
+ if (this.$useLineGroups()) {
+ container.className = 'ace_line_group';
+ fragment.appendChild(container);
+ container.style.height = config.lineHeight * this.session.getRowLength(row) + "px";
+
+ } else {
+ while(container.firstChild)
+ fragment.appendChild(container.firstChild);
+ }
+
+ row++;
+ }
+ return fragment;
+ };
+
+ this.update = function(config) {
+ this.config = config;
+
+ var html = [];
+ var firstRow = config.firstRow, lastRow = config.lastRow;
+
+ var row = firstRow;
+ var foldLine = this.session.getNextFoldLine(row);
+ var foldStart = foldLine ? foldLine.start.row : Infinity;
+
+ while (true) {
+ if (row > foldStart) {
+ row = foldLine.end.row+1;
+ foldLine = this.session.getNextFoldLine(row, foldLine);
+ foldStart = foldLine ? foldLine.start.row :Infinity;
+ }
+ if (row > lastRow)
+ break;
+
+ if (this.$useLineGroups())
+ html.push("<div class='ace_line_group' style='height:", config.lineHeight*this.session.getRowLength(row), "px'>")
+
+ this.$renderLine(html, row, false, row == foldStart ? foldLine : false);
+
+ if (this.$useLineGroups())
+ html.push("</div>"); // end the line group
+
+ row++;
+ }
+ this.element.innerHTML = html.join("");
+ };
+
+ this.$textToken = {
+ "text": true,
+ "rparen": true,
+ "lparen": true
+ };
+
+ this.$renderToken = function(stringBuilder, screenColumn, token, value) {
+ var self = this;
+ var replaceReg = /\t|&|<|>|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF\uFFF9-\uFFFC])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]/g;
+ var replaceFunc = function(c, a, b, tabIdx, idx4) {
+ if (a) {
+ return self.showInvisibles
+ ? "<span class='ace_invisible ace_invisible_space'>" + lang.stringRepeat(self.SPACE_CHAR, c.length) + "</span>"
+ : c;
+ } else if (c == "&") {
+ return "&#38;";
+ } else if (c == "<") {
+ return "&#60;";
+ } else if (c == ">") {
+ return "&#62;";
+ } else if (c == "\t") {
+ var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx);
+ screenColumn += tabSize - 1;
+ return self.$tabStrings[tabSize];
+ } else if (c == "\u3000") {
+ var classToUse = self.showInvisibles ? "ace_cjk ace_invisible ace_invisible_space" : "ace_cjk";
+ var space = self.showInvisibles ? self.SPACE_CHAR : "";
+ screenColumn += 1;
+ return "<span class='" + classToUse + "' style='width:" +
+ (self.config.characterWidth * 2) +
+ "px'>" + space + "</span>";
+ } else if (b) {
+ return "<span class='ace_invisible ace_invisible_space ace_invalid'>" + self.SPACE_CHAR + "</span>";
+ } else {
+ screenColumn += 1;
+ return "<span class='ace_cjk' style='width:" +
+ (self.config.characterWidth * 2) +
+ "px'>" + c + "</span>";
+ }
+ };
+
+ var output = value.replace(replaceReg, replaceFunc);
+
+ if (!this.$textToken[token.type]) {
+ var classes = "ace_" + token.type.replace(/\./g, " ace_");
+ var style = "";
+ if (token.type == "fold")
+ style = " style='width:" + (token.value.length * this.config.characterWidth) + "px;' ";
+ stringBuilder.push("<span class='", classes, "'", style, ">", output, "</span>");
+ }
+ else {
+ stringBuilder.push(output);
+ }
+ return screenColumn + value.length;
+ };
+
+ this.renderIndentGuide = function(stringBuilder, value, max) {
+ var cols = value.search(this.$indentGuideRe);
+ if (cols <= 0 || cols >= max)
+ return value;
+ if (value[0] == " ") {
+ cols -= cols % this.tabSize;
+ stringBuilder.push(lang.stringRepeat(this.$tabStrings[" "], cols/this.tabSize));
+ return value.substr(cols);
+ } else if (value[0] == "\t") {
+ stringBuilder.push(lang.stringRepeat(this.$tabStrings["\t"], cols));
+ return value.substr(cols);
+ }
+ return value;
+ };
+
+ this.$renderWrappedLine = function(stringBuilder, tokens, splits, onlyContents) {
+ var chars = 0;
+ var split = 0;
+ var splitChars = splits[0];
+ var screenColumn = 0;
+
+ for (var i = 0; i < tokens.length; i++) {
+ var token = tokens[i];
+ var value = token.value;
+ if (i == 0 && this.displayIndentGuides) {
+ chars = value.length;
+ value = this.renderIndentGuide(stringBuilder, value, splitChars);
+ if (!value)
+ continue;
+ chars -= value.length;
+ }
+
+ if (chars + value.length < splitChars) {
+ screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);
+ chars += value.length;
+ } else {
+ while (chars + value.length >= splitChars) {
+ screenColumn = this.$renderToken(
+ stringBuilder, screenColumn,
+ token, value.substring(0, splitChars - chars)
+ );
+ value = value.substring(splitChars - chars);
+ chars = splitChars;
+
+ if (!onlyContents) {
+ stringBuilder.push("</div>",
+ "<div class='ace_line' style='height:",
+ this.config.lineHeight, "px'>"
+ );
+ }
+
+ stringBuilder.push(lang.stringRepeat("\xa0", splits.indent));
+
+ split ++;
+ screenColumn = 0;
+ splitChars = splits[split] || Number.MAX_VALUE;
+ }
+ if (value.length != 0) {
+ chars += value.length;
+ screenColumn = this.$renderToken(
+ stringBuilder, screenColumn, token, value
+ );
+ }
+ }
+ }
+ };
+
+ this.$renderSimpleLine = function(stringBuilder, tokens) {
+ var screenColumn = 0;
+ var token = tokens[0];
+ var value = token.value;
+ if (this.displayIndentGuides)
+ value = this.renderIndentGuide(stringBuilder, value);
+ if (value)
+ screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);
+ for (var i = 1; i < tokens.length; i++) {
+ token = tokens[i];
+ value = token.value;
+ screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);
+ }
+ };
+ this.$renderLine = function(stringBuilder, row, onlyContents, foldLine) {
+ if (!foldLine && foldLine != false)
+ foldLine = this.session.getFoldLine(row);
+
+ if (foldLine)
+ var tokens = this.$getFoldLineTokens(row, foldLine);
+ else
+ var tokens = this.session.getTokens(row);
+
+
+ if (!onlyContents) {
+ stringBuilder.push(
+ "<div class='ace_line' style='height:",
+ this.config.lineHeight * (
+ this.$useLineGroups() ? 1 :this.session.getRowLength(row)
+ ), "px'>"
+ );
+ }
+
+ if (tokens.length) {
+ var splits = this.session.getRowSplitData(row);
+ if (splits && splits.length)
+ this.$renderWrappedLine(stringBuilder, tokens, splits, onlyContents);
+ else
+ this.$renderSimpleLine(stringBuilder, tokens);
+ }
+
+ if (this.showInvisibles) {
+ if (foldLine)
+ row = foldLine.end.row
+
+ stringBuilder.push(
+ "<span class='ace_invisible ace_invisible_eol'>",
+ row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR,
+ "</span>"
+ );
+ }
+ if (!onlyContents)
+ stringBuilder.push("</div>");
+ };
+
+ this.$getFoldLineTokens = function(row, foldLine) {
+ var session = this.session;
+ var renderTokens = [];
+
+ function addTokens(tokens, from, to) {
+ var idx = 0, col = 0;
+ while ((col + tokens[idx].value.length) < from) {
+ col += tokens[idx].value.length;
+ idx++;
+
+ if (idx == tokens.length)
+ return;
+ }
+ if (col != from) {
+ var value = tokens[idx].value.substring(from - col);
+ if (value.length > (to - from))
+ value = value.substring(0, to - from);
+
+ renderTokens.push({
+ type: tokens[idx].type,
+ value: value
+ });
+
+ col = from + value.length;
+ idx += 1;
+ }
+
+ while (col < to && idx < tokens.length) {
+ var value = tokens[idx].value;
+ if (value.length + col > to) {
+ renderTokens.push({
+ type: tokens[idx].type,
+ value: value.substring(0, to - col)
+ });
+ } else
+ renderTokens.push(tokens[idx]);
+ col += value.length;
+ idx += 1;
+ }
+ }
+
+ var tokens = session.getTokens(row);
+ foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) {
+ if (placeholder != null) {
+ renderTokens.push({
+ type: "fold",
+ value: placeholder
+ });
+ } else {
+ if (isNewRow)
+ tokens = session.getTokens(row);
+
+ if (tokens.length)
+ addTokens(tokens, lastColumn, column);
+ }
+ }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);
+
+ return renderTokens;
+ };
+
+ this.$useLineGroups = function() {
+ return this.session.getUseWrapMode();
+ };
+
+ this.destroy = function() {
+ clearInterval(this.$pollSizeChangesTimer);
+ if (this.$measureNode)
+ this.$measureNode.parentNode.removeChild(this.$measureNode);
+ delete this.$measureNode;
+ };
+
+}).call(Text.prototype);
+
+exports.Text = Text;
+
+});
+
+define("ace/layer/cursor",["require","exports","module","ace/lib/dom"], function(require, exports, module) {
+"use strict";
+
+var dom = require("../lib/dom");
+var isIE8;
+
+var Cursor = function(parentEl) {
+ this.element = dom.createElement("div");
+ this.element.className = "ace_layer ace_cursor-layer";
+ parentEl.appendChild(this.element);
+
+ if (isIE8 === undefined)
+ isIE8 = !("opacity" in this.element.style);
+
+ this.isVisible = false;
+ this.isBlinking = true;
+ this.blinkInterval = 1000;
+ this.smoothBlinking = false;
+
+ this.cursors = [];
+ this.cursor = this.addCursor();
+ dom.addCssClass(this.element, "ace_hidden-cursors");
+ this.$updateCursors = (isIE8
+ ? this.$updateVisibility
+ : this.$updateOpacity).bind(this);
+};
+
+(function() {
+
+ this.$updateVisibility = function(val) {
+ var cursors = this.cursors;
+ for (var i = cursors.length; i--; )
+ cursors[i].style.visibility = val ? "" : "hidden";
+ };
+ this.$updateOpacity = function(val) {
+ var cursors = this.cursors;
+ for (var i = cursors.length; i--; )
+ cursors[i].style.opacity = val ? "" : "0";
+ };
+
+
+ this.$padding = 0;
+ this.setPadding = function(padding) {
+ this.$padding = padding;
+ };
+
+ this.setSession = function(session) {
+ this.session = session;
+ };
+
+ this.setBlinking = function(blinking) {
+ if (blinking != this.isBlinking){
+ this.isBlinking = blinking;
+ this.restartTimer();
+ }
+ };
+
+ this.setBlinkInterval = function(blinkInterval) {
+ if (blinkInterval != this.blinkInterval){
+ this.blinkInterval = blinkInterval;
+ this.restartTimer();
+ }
+ };
+
+ this.setSmoothBlinking = function(smoothBlinking) {
+ if (smoothBlinking != this.smoothBlinking && !isIE8) {
+ this.smoothBlinking = smoothBlinking;
+ dom.setCssClass(this.element, "ace_smooth-blinking", smoothBlinking);
+ this.$updateCursors(true);
+ this.$updateCursors = (this.$updateOpacity).bind(this);
+ this.restartTimer();
+ }
+ };
+
+ this.addCursor = function() {
+ var el = dom.createElement("div");
+ el.className = "ace_cursor";
+ this.element.appendChild(el);
+ this.cursors.push(el);
+ return el;
+ };
+
+ this.removeCursor = function() {
+ if (this.cursors.length > 1) {
+ var el = this.cursors.pop();
+ el.parentNode.removeChild(el);
+ return el;
+ }
+ };
+
+ this.hideCursor = function() {
+ this.isVisible = false;
+ dom.addCssClass(this.element, "ace_hidden-cursors");
+ this.restartTimer();
+ };
+
+ this.showCursor = function() {
+ this.isVisible = true;
+ dom.removeCssClass(this.element, "ace_hidden-cursors");
+ this.restartTimer();
+ };
+
+ this.restartTimer = function() {
+ var update = this.$updateCursors;
+ clearInterval(this.intervalId);
+ clearTimeout(this.timeoutId);
+ if (this.smoothBlinking) {
+ dom.removeCssClass(this.element, "ace_smooth-blinking");
+ }
+
+ update(true);
+
+ if (!this.isBlinking || !this.blinkInterval || !this.isVisible)
+ return;
+
+ if (this.smoothBlinking) {
+ setTimeout(function(){
+ dom.addCssClass(this.element, "ace_smooth-blinking");
+ }.bind(this));
+ }
+
+ var blink = function(){
+ this.timeoutId = setTimeout(function() {
+ update(false);
+ }, 0.6 * this.blinkInterval);
+ }.bind(this);
+
+ this.intervalId = setInterval(function() {
+ update(true);
+ blink();
+ }, this.blinkInterval);
+
+ blink();
+ };
+
+ this.getPixelPosition = function(position, onScreen) {
+ if (!this.config || !this.session)
+ return {left : 0, top : 0};
+
+ if (!position)
+ position = this.session.selection.getCursor();
+ var pos = this.session.documentToScreenPosition(position);
+ var cursorLeft = this.$padding + pos.column * this.config.characterWidth;
+ var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *
+ this.config.lineHeight;
+
+ return {left : cursorLeft, top : cursorTop};
+ };
+
+ this.update = function(config) {
+ this.config = config;
+
+ var selections = this.session.$selectionMarkers;
+ var i = 0, cursorIndex = 0;
+
+ if (selections === undefined || selections.length === 0){
+ selections = [{cursor: null}];
+ }
+
+ for (var i = 0, n = selections.length; i < n; i++) {
+ var pixelPos = this.getPixelPosition(selections[i].cursor, true);
+ if ((pixelPos.top > config.height + config.offset ||
+ pixelPos.top < 0) && i > 1) {
+ continue;
+ }
+
+ var style = (this.cursors[cursorIndex++] || this.addCursor()).style;
+
+ if (!this.drawCursor) {
+ style.left = pixelPos.left + "px";
+ style.top = pixelPos.top + "px";
+ style.width = config.characterWidth + "px";
+ style.height = config.lineHeight + "px";
+ } else {
+ this.drawCursor(style, pixelPos, config, selections[i], this.session);
+ }
+ }
+ while (this.cursors.length > cursorIndex)
+ this.removeCursor();
+
+ var overwrite = this.session.getOverwrite();
+ this.$setOverwrite(overwrite);
+ this.$pixelPos = pixelPos;
+ this.restartTimer();
+ };
+
+ this.drawCursor = null;
+
+ this.$setOverwrite = function(overwrite) {
+ if (overwrite != this.overwrite) {
+ this.overwrite = overwrite;
+ if (overwrite)
+ dom.addCssClass(this.element, "ace_overwrite-cursors");
+ else
+ dom.removeCssClass(this.element, "ace_overwrite-cursors");
+ }
+ };
+
+ this.destroy = function() {
+ clearInterval(this.intervalId);
+ clearTimeout(this.timeoutId);
+ };
+
+}).call(Cursor.prototype);
+
+exports.Cursor = Cursor;
+
+});
+
+define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"], function(require, exports, module) {
+"use strict";
+
+var oop = require("./lib/oop");
+var dom = require("./lib/dom");
+var event = require("./lib/event");
+var EventEmitter = require("./lib/event_emitter").EventEmitter;
+var ScrollBar = function(parent) {
+ this.element = dom.createElement("div");
+ this.element.className = "ace_scrollbar ace_scrollbar" + this.classSuffix;
+
+ this.inner = dom.createElement("div");
+ this.inner.className = "ace_scrollbar-inner";
+ this.element.appendChild(this.inner);
+
+ parent.appendChild(this.element);
+
+ this.setVisible(false);
+ this.skipEvent = false;
+
+ event.addListener(this.element, "scroll", this.onScroll.bind(this));
+ event.addListener(this.element, "mousedown", event.preventDefault);
+};
+
+(function() {
+ oop.implement(this, EventEmitter);
+
+ this.setVisible = function(isVisible) {
+ this.element.style.display = isVisible ? "" : "none";
+ this.isVisible = isVisible;
+ };
+}).call(ScrollBar.prototype);
+var VScrollBar = function(parent, renderer) {
+ ScrollBar.call(this, parent);
+ this.scrollTop = 0;
+ renderer.$scrollbarWidth =
+ this.width = dom.scrollbarWidth(parent.ownerDocument);
+ this.inner.style.width =
+ this.element.style.width = (this.width || 15) + 5 + "px";
+};
+
+oop.inherits(VScrollBar, ScrollBar);
+
+(function() {
+
+ this.classSuffix = '-v';
+ this.onScroll = function() {
+ if (!this.skipEvent) {
+ this.scrollTop = this.element.scrollTop;
+ this._emit("scroll", {data: this.scrollTop});
+ }
+ this.skipEvent = false;
+ };
+ this.getWidth = function() {
+ return this.isVisible ? this.width : 0;
+ };
+ this.setHeight = function(height) {
+ this.element.style.height = height + "px";
+ };
+ this.setInnerHeight = function(height) {
+ this.inner.style.height = height + "px";
+ };
+ this.setScrollHeight = function(height) {
+ this.inner.style.height = height + "px";
+ };
+ this.setScrollTop = function(scrollTop) {
+ if (this.scrollTop != scrollTop) {
+ this.skipEvent = true;
+ this.scrollTop = this.element.scrollTop = scrollTop;
+ }
+ };
+
+}).call(VScrollBar.prototype);
+var HScrollBar = function(parent, renderer) {
+ ScrollBar.call(this, parent);
+ this.scrollLeft = 0;
+ this.height = renderer.$scrollbarWidth;
+ this.inner.style.height =
+ this.element.style.height = (this.height || 15) + 5 + "px";
+};
+
+oop.inherits(HScrollBar, ScrollBar);
+
+(function() {
+
+ this.classSuffix = '-h';
+ this.onScroll = function() {
+ if (!this.skipEvent) {
+ this.scrollLeft = this.element.scrollLeft;
+ this._emit("scroll", {data: this.scrollLeft});
+ }
+ this.skipEvent = false;
+ };
+ this.getHeight = function() {
+ return this.isVisible ? this.height : 0;
+ };
+ this.setWidth = function(width) {
+ this.element.style.width = width + "px";
+ };
+ this.setInnerWidth = function(width) {
+ this.inner.style.width = width + "px";
+ };
+ this.setScrollWidth = function(width) {
+ this.inner.style.width = width + "px";
+ };
+ this.setScrollLeft = function(scrollLeft) {
+ if (this.scrollLeft != scrollLeft) {
+ this.skipEvent = true;
+ this.scrollLeft = this.element.scrollLeft = scrollLeft;
+ }
+ };
+
+}).call(HScrollBar.prototype);
+
+
+exports.ScrollBar = VScrollBar; // backward compatibility
+exports.ScrollBarV = VScrollBar; // backward compatibility
+exports.ScrollBarH = HScrollBar; // backward compatibility
+
+exports.VScrollBar = VScrollBar;
+exports.HScrollBar = HScrollBar;
+});
+
+define("ace/renderloop",["require","exports","module","ace/lib/event"], function(require, exports, module) {
+"use strict";
+
+var event = require("./lib/event");
+
+
+var RenderLoop = function(onRender, win) {
+ this.onRender = onRender;
+ this.pending = false;
+ this.changes = 0;
+ this.window = win || window;
+};
+
+(function() {
+
+
+ this.schedule = function(change) {
+ this.changes = this.changes | change;
+ if (!this.pending && this.changes) {
+ this.pending = true;
+ var _self = this;
+ event.nextFrame(function() {
+ _self.pending = false;
+ var changes;
+ while (changes = _self.changes) {
+ _self.changes = 0;
+ _self.onRender(changes);
+ }
+ }, this.window);
+ }
+ };
+
+}).call(RenderLoop.prototype);
+
+exports.RenderLoop = RenderLoop;
+});
+
+define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"], function(require, exports, module) {
+
+var oop = require("../lib/oop");
+var dom = require("../lib/dom");
+var lang = require("../lib/lang");
+var useragent = require("../lib/useragent");
+var EventEmitter = require("../lib/event_emitter").EventEmitter;
+
+var CHAR_COUNT = 0;
+
+var FontMetrics = exports.FontMetrics = function(parentEl, interval) {
+ this.el = dom.createElement("div");
+ this.$setMeasureNodeStyles(this.el.style, true);
+
+ this.$main = dom.createElement("div");
+ this.$setMeasureNodeStyles(this.$main.style);
+
+ this.$measureNode = dom.createElement("div");
+ this.$setMeasureNodeStyles(this.$measureNode.style);
+
+
+ this.el.appendChild(this.$main);
+ this.el.appendChild(this.$measureNode);
+ parentEl.appendChild(this.el);
+
+ if (!CHAR_COUNT)
+ this.$testFractionalRect();
+ this.$measureNode.innerHTML = lang.stringRepeat("X", CHAR_COUNT);
+
+ this.$characterSize = {width: 0, height: 0};
+ this.checkForSizeChanges();
+};
+
+(function() {
+
+ oop.implement(this, EventEmitter);
+
+ this.$characterSize = {width: 0, height: 0};
+
+ this.$testFractionalRect = function() {
+ var el = dom.createElement("div");
+ this.$setMeasureNodeStyles(el.style);
+ el.style.width = "0.2px";
+ document.documentElement.appendChild(el);
+ var w = el.getBoundingClientRect().width;
+ if (w > 0 && w < 1)
+ CHAR_COUNT = 50;
+ else
+ CHAR_COUNT = 100;
+ el.parentNode.removeChild(el);
+ };
+
+ this.$setMeasureNodeStyles = function(style, isRoot) {
+ style.width = style.height = "auto";
+ style.left = style.top = "0px";
+ style.visibility = "hidden";
+ style.position = "absolute";
+ style.whiteSpace = "pre";
+
+ if (useragent.isIE < 8) {
+ style["font-family"] = "inherit";
+ } else {
+ style.font = "inherit";
+ }
+ style.overflow = isRoot ? "hidden" : "visible";
+ };
+
+ this.checkForSizeChanges = function() {
+ var size = this.$measureSizes();
+ if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {
+ this.$measureNode.style.fontWeight = "bold";
+ var boldSize = this.$measureSizes();
+ this.$measureNode.style.fontWeight = "";
+ this.$characterSize = size;
+ this.charSizes = Object.create(null);
+ this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;
+ this._emit("changeCharacterSize", {data: size});
+ }
+ };
+
+ this.$pollSizeChanges = function() {
+ if (this.$pollSizeChangesTimer)
+ return this.$pollSizeChangesTimer;
+ var self = this;
+ return this.$pollSizeChangesTimer = setInterval(function() {
+ self.checkForSizeChanges();
+ }, 500);
+ };
+
+ this.setPolling = function(val) {
+ if (val) {
+ this.$pollSizeChanges();
+ } else if (this.$pollSizeChangesTimer) {
+ clearInterval(this.$pollSizeChangesTimer);
+ this.$pollSizeChangesTimer = 0;
+ }
+ };
+
+ this.$measureSizes = function() {
+ if (CHAR_COUNT === 50) {
+ var rect = null;
+ try {
+ rect = this.$measureNode.getBoundingClientRect();
+ } catch(e) {
+ rect = {width: 0, height:0 };
+ };
+ var size = {
+ height: rect.height,
+ width: rect.width / CHAR_COUNT
+ };
+ } else {
+ var size = {
+ height: this.$measureNode.clientHeight,
+ width: this.$measureNode.clientWidth / CHAR_COUNT
+ };
+ }
+ if (size.width === 0 || size.height === 0)
+ return null;
+ return size;
+ };
+
+ this.$measureCharWidth = function(ch) {
+ this.$main.innerHTML = lang.stringRepeat(ch, CHAR_COUNT);
+ var rect = this.$main.getBoundingClientRect();
+ return rect.width / CHAR_COUNT;
+ };
+
+ this.getCharacterWidth = function(ch) {
+ var w = this.charSizes[ch];
+ if (w === undefined) {
+ w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;
+ }
+ return w;
+ };
+
+ this.destroy = function() {
+ clearInterval(this.$pollSizeChangesTimer);
+ if (this.el && this.el.parentNode)
+ this.el.parentNode.removeChild(this.el);
+ };
+
+}).call(FontMetrics.prototype);
+
+});
+
+define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/config","ace/lib/useragent","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter"], function(require, exports, module) {
+"use strict";
+
+var oop = require("./lib/oop");
+var dom = require("./lib/dom");
+var config = require("./config");
+var useragent = require("./lib/useragent");
+var GutterLayer = require("./layer/gutter").Gutter;
+var MarkerLayer = require("./layer/marker").Marker;
+var TextLayer = require("./layer/text").Text;
+var CursorLayer = require("./layer/cursor").Cursor;
+var HScrollBar = require("./scrollbar").HScrollBar;
+var VScrollBar = require("./scrollbar").VScrollBar;
+var RenderLoop = require("./renderloop").RenderLoop;
+var FontMetrics = require("./layer/font_metrics").FontMetrics;
+var EventEmitter = require("./lib/event_emitter").EventEmitter;
+var editorCss = ".ace_editor {\
+position: relative;\
+overflow: hidden;\
+font: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\
+direction: ltr;\
+}\
+.ace_scroller {\
+position: absolute;\
+overflow: hidden;\
+top: 0;\
+bottom: 0;\
+background-color: inherit;\
+-ms-user-select: none;\
+-moz-user-select: none;\
+-webkit-user-select: none;\
+user-select: none;\
+cursor: text;\
+}\
+.ace_content {\
+position: absolute;\
+-moz-box-sizing: border-box;\
+-webkit-box-sizing: border-box;\
+box-sizing: border-box;\
+min-width: 100%;\
+}\
+.ace_dragging .ace_scroller:before{\
+position: absolute;\
+top: 0;\
+left: 0;\
+right: 0;\
+bottom: 0;\
+content: '';\
+background: rgba(250, 250, 250, 0.01);\
+z-index: 1000;\
+}\
+.ace_dragging.ace_dark .ace_scroller:before{\
+background: rgba(0, 0, 0, 0.01);\
+}\
+.ace_selecting, .ace_selecting * {\
+cursor: text !important;\
+}\
+.ace_gutter {\
+position: absolute;\
+overflow : hidden;\
+width: auto;\
+top: 0;\
+bottom: 0;\
+left: 0;\
+cursor: default;\
+z-index: 4;\
+-ms-user-select: none;\
+-moz-user-select: none;\
+-webkit-user-select: none;\
+user-select: none;\
+}\
+.ace_gutter-active-line {\
+position: absolute;\
+left: 0;\
+right: 0;\
+}\
+.ace_scroller.ace_scroll-left {\
+box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\
+}\
+.ace_gutter-cell {\
+padding-left: 19px;\
+padding-right: 6px;\
+background-repeat: no-repeat;\
+}\
+.ace_gutter-cell.ace_error {\
+background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\");\
+background-repeat: no-repeat;\
+background-position: 2px center;\
+}\
+.ace_gutter-cell.ace_warning {\
+background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\");\
+background-position: 2px center;\
+}\
+.ace_gutter-cell.ace_info {\
+background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\");\
+background-position: 2px center;\
+}\
+.ace_dark .ace_gutter-cell.ace_info {\
+background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\");\
+}\
+.ace_scrollbar {\
+position: absolute;\
+right: 0;\
+bottom: 0;\
+z-index: 6;\
+}\
+.ace_scrollbar-inner {\
+position: absolute;\
+cursor: text;\
+left: 0;\
+top: 0;\
+}\
+.ace_scrollbar-v{\
+overflow-x: hidden;\
+overflow-y: scroll;\
+top: 0;\
+}\
+.ace_scrollbar-h {\
+overflow-x: scroll;\
+overflow-y: hidden;\
+left: 0;\
+}\
+.ace_print-margin {\
+position: absolute;\
+height: 100%;\
+}\
+.ace_text-input {\
+position: absolute;\
+z-index: 0;\
+width: 0.5em;\
+height: 1em;\
+opacity: 0;\
+background: transparent;\
+-moz-appearance: none;\
+appearance: none;\
+border: none;\
+resize: none;\
+outline: none;\
+overflow: hidden;\
+font: inherit;\
+padding: 0 1px;\
+margin: 0 -1px;\
+text-indent: -1em;\
+-ms-user-select: text;\
+-moz-user-select: text;\
+-webkit-user-select: text;\
+user-select: text;\
+white-space: pre!important;\
+}\
+.ace_text-input.ace_composition {\
+background: inherit;\
+color: inherit;\
+z-index: 1000;\
+opacity: 1;\
+text-indent: 0;\
+}\
+.ace_layer {\
+z-index: 1;\
+position: absolute;\
+overflow: hidden;\
+word-wrap: normal;\
+white-space: pre;\
+height: 100%;\
+width: 100%;\
+-moz-box-sizing: border-box;\
+-webkit-box-sizing: border-box;\
+box-sizing: border-box;\
+pointer-events: none;\
+}\
+.ace_gutter-layer {\
+position: relative;\
+width: auto;\
+text-align: right;\
+pointer-events: auto;\
+}\
+.ace_text-layer {\
+font: inherit !important;\
+}\
+.ace_cjk {\
+display: inline-block;\
+text-align: center;\
+}\
+.ace_cursor-layer {\
+z-index: 4;\
+}\
+.ace_cursor {\
+z-index: 4;\
+position: absolute;\
+-moz-box-sizing: border-box;\
+-webkit-box-sizing: border-box;\
+box-sizing: border-box;\
+border-left: 2px solid;\
+transform: translatez(0);\
+}\
+.ace_slim-cursors .ace_cursor {\
+border-left-width: 1px;\
+}\
+.ace_overwrite-cursors .ace_cursor {\
+border-left-width: 0;\
+border-bottom: 1px solid;\
+}\
+.ace_hidden-cursors .ace_cursor {\
+opacity: 0.2;\
+}\
+.ace_smooth-blinking .ace_cursor {\
+-webkit-transition: opacity 0.18s;\
+transition: opacity 0.18s;\
+}\
+.ace_editor.ace_multiselect .ace_cursor {\
+border-left-width: 1px;\
+}\
+.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\
+position: absolute;\
+z-index: 3;\
+}\
+.ace_marker-layer .ace_selection {\
+position: absolute;\
+z-index: 5;\
+}\
+.ace_marker-layer .ace_bracket {\
+position: absolute;\
+z-index: 6;\
+}\
+.ace_marker-layer .ace_active-line {\
+position: absolute;\
+z-index: 2;\
+}\
+.ace_marker-layer .ace_selected-word {\
+position: absolute;\
+z-index: 4;\
+-moz-box-sizing: border-box;\
+-webkit-box-sizing: border-box;\
+box-sizing: border-box;\
+}\
+.ace_line .ace_fold {\
+-moz-box-sizing: border-box;\
+-webkit-box-sizing: border-box;\
+box-sizing: border-box;\
+display: inline-block;\
+height: 11px;\
+margin-top: -2px;\
+vertical-align: middle;\
+background-image:\
+url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),\
+url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\");\
+background-repeat: no-repeat, repeat-x;\
+background-position: center center, top left;\
+color: transparent;\
+border: 1px solid black;\
+border-radius: 2px;\
+cursor: pointer;\
+pointer-events: auto;\
+}\
+.ace_dark .ace_fold {\
+}\
+.ace_fold:hover{\
+background-image:\
+url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),\
+url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\");\
+}\
+.ace_tooltip {\
+background-color: #FFF;\
+background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));\
+background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\
+border: 1px solid gray;\
+border-radius: 1px;\
+box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\
+color: black;\
+max-width: 100%;\
+padding: 3px 4px;\
+position: fixed;\
+z-index: 999999;\
+-moz-box-sizing: border-box;\
+-webkit-box-sizing: border-box;\
+box-sizing: border-box;\
+cursor: default;\
+white-space: pre;\
+word-wrap: break-word;\
+line-height: normal;\
+font-style: normal;\
+font-weight: normal;\
+letter-spacing: normal;\
+pointer-events: none;\
+}\
+.ace_folding-enabled > .ace_gutter-cell {\
+padding-right: 13px;\
+}\
+.ace_fold-widget {\
+-moz-box-sizing: border-box;\
+-webkit-box-sizing: border-box;\
+box-sizing: border-box;\
+margin: 0 -12px 0 1px;\
+display: none;\
+width: 11px;\
+vertical-align: top;\
+background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\");\
+background-repeat: no-repeat;\
+background-position: center;\
+border-radius: 3px;\
+border: 1px solid transparent;\
+cursor: pointer;\
+}\
+.ace_folding-enabled .ace_fold-widget {\
+display: inline-block; \
+}\
+.ace_fold-widget.ace_end {\
+background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\");\
+}\
+.ace_fold-widget.ace_closed {\
+background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\");\
+}\
+.ace_fold-widget:hover {\
+border: 1px solid rgba(0, 0, 0, 0.3);\
+background-color: rgba(255, 255, 255, 0.2);\
+box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\
+}\
+.ace_fold-widget:active {\
+border: 1px solid rgba(0, 0, 0, 0.4);\
+background-color: rgba(0, 0, 0, 0.05);\
+box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\
+}\
+.ace_dark .ace_fold-widget {\
+background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\");\
+}\
+.ace_dark .ace_fold-widget.ace_end {\
+background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\");\
+}\
+.ace_dark .ace_fold-widget.ace_closed {\
+background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\");\
+}\
+.ace_dark .ace_fold-widget:hover {\
+box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\
+background-color: rgba(255, 255, 255, 0.1);\
+}\
+.ace_dark .ace_fold-widget:active {\
+box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\
+}\
+.ace_fold-widget.ace_invalid {\
+background-color: #FFB4B4;\
+border-color: #DE5555;\
+}\
+.ace_fade-fold-widgets .ace_fold-widget {\
+-webkit-transition: opacity 0.4s ease 0.05s;\
+transition: opacity 0.4s ease 0.05s;\
+opacity: 0;\
+}\
+.ace_fade-fold-widgets:hover .ace_fold-widget {\
+-webkit-transition: opacity 0.05s ease 0.05s;\
+transition: opacity 0.05s ease 0.05s;\
+opacity:1;\
+}\
+.ace_underline {\
+text-decoration: underline;\
+}\
+.ace_bold {\
+font-weight: bold;\
+}\
+.ace_nobold .ace_bold {\
+font-weight: normal;\
+}\
+.ace_italic {\
+font-style: italic;\
+}\
+.ace_error-marker {\
+background-color: rgba(255, 0, 0,0.2);\
+position: absolute;\
+z-index: 9;\
+}\
+.ace_highlight-marker {\
+background-color: rgba(255, 255, 0,0.2);\
+position: absolute;\
+z-index: 8;\
+}\
+.ace_br1 {border-top-left-radius : 3px;}\
+.ace_br2 {border-top-right-radius : 3px;}\
+.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\
+.ace_br4 {border-bottom-right-radius: 3px;}\
+.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\
+.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\
+.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\
+.ace_br8 {border-bottom-left-radius : 3px;}\
+.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\
+.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\
+.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\
+.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\
+.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\
+.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\
+.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\
+";
+
+dom.importCssString(editorCss, "ace_editor.css");
+
+var VirtualRenderer = function(container, theme) {
+ var _self = this;
+
+ this.container = container || dom.createElement("div");
+ this.$keepTextAreaAtCursor = !useragent.isOldIE;
+
+ dom.addCssClass(this.container, "ace_editor");
+
+ this.setTheme(theme);
+
+ this.$gutter = dom.createElement("div");
+ this.$gutter.className = "ace_gutter";
+ this.container.appendChild(this.$gutter);
+
+ this.scroller = dom.createElement("div");
+ this.scroller.className = "ace_scroller";
+ this.container.appendChild(this.scroller);
+
+ this.content = dom.createElement("div");
+ this.content.className = "ace_content";
+ this.scroller.appendChild(this.content);
+
+ this.$gutterLayer = new GutterLayer(this.$gutter);
+ this.$gutterLayer.on("changeGutterWidth", this.onGutterResize.bind(this));
+
+ this.$markerBack = new MarkerLayer(this.content);
+
+ var textLayer = this.$textLayer = new TextLayer(this.content);
+ this.canvas = textLayer.element;
+
+ this.$markerFront = new MarkerLayer(this.content);
+
+ this.$cursorLayer = new CursorLayer(this.content);
+ this.$horizScroll = false;
+ this.$vScroll = false;
+
+ this.scrollBar =
+ this.scrollBarV = new VScrollBar(this.container, this);
+ this.scrollBarH = new HScrollBar(this.container, this);
+ this.scrollBarV.addEventListener("scroll", function(e) {
+ if (!_self.$scrollAnimation)
+ _self.session.setScrollTop(e.data - _self.scrollMargin.top);
+ });
+ this.scrollBarH.addEventListener("scroll", function(e) {
+ if (!_self.$scrollAnimation)
+ _self.session.setScrollLeft(e.data - _self.scrollMargin.left);
+ });
+
+ this.scrollTop = 0;
+ this.scrollLeft = 0;
+
+ this.cursorPos = {
+ row : 0,
+ column : 0
+ };
+
+ this.$fontMetrics = new FontMetrics(this.container, 500);
+ this.$textLayer.$setFontMetrics(this.$fontMetrics);
+ this.$textLayer.addEventListener("changeCharacterSize", function(e) {
+ _self.updateCharacterSize();
+ _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);
+ _self._signal("changeCharacterSize", e);
+ });
+
+ this.$size = {
+ width: 0,
+ height: 0,
+ scrollerHeight: 0,
+ scrollerWidth: 0,
+ $dirty: true
+ };
+
+ this.layerConfig = {
+ width : 1,
+ padding : 0,
+ firstRow : 0,
+ firstRowScreen: 0,
+ lastRow : 0,
+ lineHeight : 0,
+ characterWidth : 0,
+ minHeight : 1,
+ maxHeight : 1,
+ offset : 0,
+ height : 1,
+ gutterOffset: 1
+ };
+
+ this.scrollMargin = {
+ left: 0,
+ right: 0,
+ top: 0,
+ bottom: 0,
+ v: 0,
+ h: 0
+ };
+
+ this.$loop = new RenderLoop(
+ this.$renderChanges.bind(this),
+ this.container.ownerDocument.defaultView
+ );
+ this.$loop.schedule(this.CHANGE_FULL);
+
+ this.updateCharacterSize();
+ this.setPadding(4);
+ config.resetOptions(this);
+ config._emit("renderer", this);
+};
+
+(function() {
+
+ this.CHANGE_CURSOR = 1;
+ this.CHANGE_MARKER = 2;
+ this.CHANGE_GUTTER = 4;
+ this.CHANGE_SCROLL = 8;
+ this.CHANGE_LINES = 16;
+ this.CHANGE_TEXT = 32;
+ this.CHANGE_SIZE = 64;
+ this.CHANGE_MARKER_BACK = 128;
+ this.CHANGE_MARKER_FRONT = 256;
+ this.CHANGE_FULL = 512;
+ this.CHANGE_H_SCROLL = 1024;
+
+ oop.implement(this, EventEmitter);
+
+ this.updateCharacterSize = function() {
+ if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {
+ this.$allowBoldFonts = this.$textLayer.allowBoldFonts;
+ this.setStyle("ace_nobold", !this.$allowBoldFonts);
+ }
+
+ this.layerConfig.characterWidth =
+ this.characterWidth = this.$textLayer.getCharacterWidth();
+ this.layerConfig.lineHeight =
+ this.lineHeight = this.$textLayer.getLineHeight();
+ this.$updatePrintMargin();
+ };
+ this.setSession = function(session) {
+ if (this.session)
+ this.session.doc.off("changeNewLineMode", this.onChangeNewLineMode);
+
+ this.session = session;
+ if (session && this.scrollMargin.top && session.getScrollTop() <= 0)
+ session.setScrollTop(-this.scrollMargin.top);
+
+ this.$cursorLayer.setSession(session);
+ this.$markerBack.setSession(session);
+ this.$markerFront.setSession(session);
+ this.$gutterLayer.setSession(session);
+ this.$textLayer.setSession(session);
+ if (!session)
+ return;
+
+ this.$loop.schedule(this.CHANGE_FULL);
+ this.session.$setFontMetrics(this.$fontMetrics);
+
+ this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);
+ this.onChangeNewLineMode()
+ this.session.doc.on("changeNewLineMode", this.onChangeNewLineMode);
+ };
+ this.updateLines = function(firstRow, lastRow, force) {
+ if (lastRow === undefined)
+ lastRow = Infinity;
+
+ if (!this.$changedLines) {
+ this.$changedLines = {
+ firstRow: firstRow,
+ lastRow: lastRow
+ };
+ }
+ else {
+ if (this.$changedLines.firstRow > firstRow)
+ this.$changedLines.firstRow = firstRow;
+
+ if (this.$changedLines.lastRow < lastRow)
+ this.$changedLines.lastRow = lastRow;
+ }
+ if (this.$changedLines.lastRow < this.layerConfig.firstRow) {
+ if (force)
+ this.$changedLines.lastRow = this.layerConfig.lastRow;
+ else
+ return;
+ }
+ if (this.$changedLines.firstRow > this.layerConfig.lastRow)
+ return;
+ this.$loop.schedule(this.CHANGE_LINES);
+ };
+
+ this.onChangeNewLineMode = function() {
+ this.$loop.schedule(this.CHANGE_TEXT);
+ this.$textLayer.$updateEolChar();
+ };
+
+ this.onChangeTabSize = function() {
+ this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);
+ this.$textLayer.onChangeTabSize();
+ };
+ this.updateText = function() {
+ this.$loop.schedule(this.CHANGE_TEXT);
+ };
+ this.updateFull = function(force) {
+ if (force)
+ this.$renderChanges(this.CHANGE_FULL, true);
+ else
+ this.$loop.schedule(this.CHANGE_FULL);
+ };
+ this.updateFontSize = function() {
+ this.$textLayer.checkForSizeChanges();
+ };
+
+ this.$changes = 0;
+ this.$updateSizeAsync = function() {
+ if (this.$loop.pending)
+ this.$size.$dirty = true;
+ else
+ this.onResize();
+ };
+ this.onResize = function(force, gutterWidth, width, height) {
+ if (this.resizing > 2)
+ return;
+ else if (this.resizing > 0)
+ this.resizing++;
+ else
+ this.resizing = force ? 1 : 0;
+ var el = this.container;
+ if (!height)
+ height = el.clientHeight || el.scrollHeight;
+ if (!width)
+ width = el.clientWidth || el.scrollWidth;
+ var changes = this.$updateCachedSize(force, gutterWidth, width, height);
+
+
+ if (!this.$size.scrollerHeight || (!width && !height))
+ return this.resizing = 0;
+
+ if (force)
+ this.$gutterLayer.$padding = null;
+
+ if (force)
+ this.$renderChanges(changes | this.$changes, true);
+ else
+ this.$loop.schedule(changes | this.$changes);
+
+ if (this.resizing)
+ this.resizing = 0;
+ this.scrollBarV.scrollLeft = this.scrollBarV.scrollTop = null;
+ };
+
+ this.$updateCachedSize = function(force, gutterWidth, width, height) {
+ height -= (this.$extraHeight || 0);
+ var changes = 0;
+ var size = this.$size;
+ var oldSize = {
+ width: size.width,
+ height: size.height,
+ scrollerHeight: size.scrollerHeight,
+ scrollerWidth: size.scrollerWidth
+ };
+ if (height && (force || size.height != height)) {
+ size.height = height;
+ changes |= this.CHANGE_SIZE;
+
+ size.scrollerHeight = size.height;
+ if (this.$horizScroll)
+ size.scrollerHeight -= this.scrollBarH.getHeight();
+ this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + "px";
+
+ changes = changes | this.CHANGE_SCROLL;
+ }
+
+ if (width && (force || size.width != width)) {
+ changes |= this.CHANGE_SIZE;
+ size.width = width;
+
+ if (gutterWidth == null)
+ gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;
+
+ this.gutterWidth = gutterWidth;
+
+ this.scrollBarH.element.style.left =
+ this.scroller.style.left = gutterWidth + "px";
+ size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth());
+
+ this.scrollBarH.element.style.right =
+ this.scroller.style.right = this.scrollBarV.getWidth() + "px";
+ this.scroller.style.bottom = this.scrollBarH.getHeight() + "px";
+
+ if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force)
+ changes |= this.CHANGE_FULL;
+ }
+
+ size.$dirty = !width || !height;
+
+ if (changes)
+ this._signal("resize", oldSize);
+
+ return changes;
+ };
+
+ this.onGutterResize = function() {
+ var gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;
+ if (gutterWidth != this.gutterWidth)
+ this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);
+
+ if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {
+ this.$loop.schedule(this.CHANGE_FULL);
+ } else if (this.$size.$dirty) {
+ this.$loop.schedule(this.CHANGE_FULL);
+ } else {
+ this.$computeLayerConfig();
+ this.$loop.schedule(this.CHANGE_MARKER);
+ }
+ };
+ this.adjustWrapLimit = function() {
+ var availableWidth = this.$size.scrollerWidth - this.$padding * 2;
+ var limit = Math.floor(availableWidth / this.characterWidth);
+ return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);
+ };
+ this.setAnimatedScroll = function(shouldAnimate){
+ this.setOption("animatedScroll", shouldAnimate);
+ };
+ this.getAnimatedScroll = function() {
+ return this.$animatedScroll;
+ };
+ this.setShowInvisibles = function(showInvisibles) {
+ this.setOption("showInvisibles", showInvisibles);
+ };
+ this.getShowInvisibles = function() {
+ return this.getOption("showInvisibles");
+ };
+ this.getDisplayIndentGuides = function() {
+ return this.getOption("displayIndentGuides");
+ };
+
+ this.setDisplayIndentGuides = function(display) {
+ this.setOption("displayIndentGuides", display);
+ };
+ this.setShowPrintMargin = function(showPrintMargin) {
+ this.setOption("showPrintMargin", showPrintMargin);
+ };
+ this.getShowPrintMargin = function() {
+ return this.getOption("showPrintMargin");
+ };
+ this.setPrintMarginColumn = function(showPrintMargin) {
+ this.setOption("printMarginColumn", showPrintMargin);
+ };
+ this.getPrintMarginColumn = function() {
+ return this.getOption("printMarginColumn");
+ };
+ this.getShowGutter = function(){
+ return this.getOption("showGutter");
+ };
+ this.setShowGutter = function(show){
+ return this.setOption("showGutter", show);
+ };
+
+ this.getFadeFoldWidgets = function(){
+ return this.getOption("fadeFoldWidgets")
+ };
+
+ this.setFadeFoldWidgets = function(show) {
+ this.setOption("fadeFoldWidgets", show);
+ };
+
+ this.setHighlightGutterLine = function(shouldHighlight) {
+ this.setOption("highlightGutterLine", shouldHighlight);
+ };
+
+ this.getHighlightGutterLine = function() {
+ return this.getOption("highlightGutterLine");
+ };
+
+ this.$updateGutterLineHighlight = function() {
+ var pos = this.$cursorLayer.$pixelPos;
+ var height = this.layerConfig.lineHeight;
+ if (this.session.getUseWrapMode()) {
+ var cursor = this.session.selection.getCursor();
+ cursor.column = 0;
+ pos = this.$cursorLayer.getPixelPosition(cursor, true);
+ height *= this.session.getRowLength(cursor.row);
+ }
+ this.$gutterLineHighlight.style.top = pos.top - this.layerConfig.offset + "px";
+ this.$gutterLineHighlight.style.height = height + "px";
+ };
+
+ this.$updatePrintMargin = function() {
+ if (!this.$showPrintMargin && !this.$printMarginEl)
+ return;
+
+ if (!this.$printMarginEl) {
+ var containerEl = dom.createElement("div");
+ containerEl.className = "ace_layer ace_print-margin-layer";
+ this.$printMarginEl = dom.createElement("div");
+ this.$printMarginEl.className = "ace_print-margin";
+ containerEl.appendChild(this.$printMarginEl);
+ this.content.insertBefore(containerEl, this.content.firstChild);
+ }
+
+ var style = this.$printMarginEl.style;
+ style.left = ((this.characterWidth * this.$printMarginColumn) + this.$padding) + "px";
+ style.visibility = this.$showPrintMargin ? "visible" : "hidden";
+
+ if (this.session && this.session.$wrap == -1)
+ this.adjustWrapLimit();
+ };
+ this.getContainerElement = function() {
+ return this.container;
+ };
+ this.getMouseEventTarget = function() {
+ return this.scroller;
+ };
+ this.getTextAreaContainer = function() {
+ return this.container;
+ };
+ this.$moveTextAreaToCursor = function() {
+ if (!this.$keepTextAreaAtCursor)
+ return;
+ var config = this.layerConfig;
+ var posTop = this.$cursorLayer.$pixelPos.top;
+ var posLeft = this.$cursorLayer.$pixelPos.left;
+ posTop -= config.offset;
+
+ var style = this.textarea.style;
+ var h = this.lineHeight;
+ if (posTop < 0 || posTop > config.height - h) {
+ style.top = style.left = "0";
+ return;
+ }
+
+ var w = this.characterWidth;
+ if (this.$composition) {
+ var val = this.textarea.value.replace(/^\x01+/, "");
+ w *= (this.session.$getStringScreenWidth(val)[0]+2);
+ h += 2;
+ }
+ posLeft -= this.scrollLeft;
+ if (posLeft > this.$size.scrollerWidth - w)
+ posLeft = this.$size.scrollerWidth - w;
+
+ posLeft += this.gutterWidth;
+ style.height = h + "px";
+ style.width = w + "px";
+ style.left = Math.min(posLeft, this.$size.scrollerWidth - w) + "px";
+ style.top = Math.min(posTop, this.$size.height - h) + "px";
+ };
+ this.getFirstVisibleRow = function() {
+ return this.layerConfig.firstRow;
+ };
+ this.getFirstFullyVisibleRow = function() {
+ return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);
+ };
+ this.getLastFullyVisibleRow = function() {
+ var flint = Math.floor((this.layerConfig.height + this.layerConfig.offset) / this.layerConfig.lineHeight);
+ return this.layerConfig.firstRow - 1 + flint;
+ };
+ this.getLastVisibleRow = function() {
+ return this.layerConfig.lastRow;
+ };
+
+ this.$padding = null;
+ this.setPadding = function(padding) {
+ this.$padding = padding;
+ this.$textLayer.setPadding(padding);
+ this.$cursorLayer.setPadding(padding);
+ this.$markerFront.setPadding(padding);
+ this.$markerBack.setPadding(padding);
+ this.$loop.schedule(this.CHANGE_FULL);
+ this.$updatePrintMargin();
+ };
+
+ this.setScrollMargin = function(top, bottom, left, right) {
+ var sm = this.scrollMargin;
+ sm.top = top|0;
+ sm.bottom = bottom|0;
+ sm.right = right|0;
+ sm.left = left|0;
+ sm.v = sm.top + sm.bottom;
+ sm.h = sm.left + sm.right;
+ if (sm.top && this.scrollTop <= 0 && this.session)
+ this.session.setScrollTop(-sm.top);
+ this.updateFull();
+ };
+ this.getHScrollBarAlwaysVisible = function() {
+ return this.$hScrollBarAlwaysVisible;
+ };
+ this.setHScrollBarAlwaysVisible = function(alwaysVisible) {
+ this.setOption("hScrollBarAlwaysVisible", alwaysVisible);
+ };
+ this.getVScrollBarAlwaysVisible = function() {
+ return this.$vScrollBarAlwaysVisible;
+ };
+ this.setVScrollBarAlwaysVisible = function(alwaysVisible) {
+ this.setOption("vScrollBarAlwaysVisible", alwaysVisible);
+ };
+
+ this.$updateScrollBarV = function() {
+ var scrollHeight = this.layerConfig.maxHeight;
+ var scrollerHeight = this.$size.scrollerHeight;
+ if (!this.$maxLines && this.$scrollPastEnd) {
+ scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;
+ if (this.scrollTop > scrollHeight - scrollerHeight) {
+ scrollHeight = this.scrollTop + scrollerHeight;
+ this.scrollBarV.scrollTop = null;
+ }
+ }
+ this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);
+ this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);
+ };
+ this.$updateScrollBarH = function() {
+ this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);
+ this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);
+ };
+
+ this.$frozen = false;
+ this.freeze = function() {
+ this.$frozen = true;
+ };
+
+ this.unfreeze = function() {
+ this.$frozen = false;
+ };
+
+ this.$renderChanges = function(changes, force) {
+ if (this.$changes) {
+ changes |= this.$changes;
+ this.$changes = 0;
+ }
+ if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {
+ this.$changes |= changes;
+ return;
+ }
+ if (this.$size.$dirty) {
+ this.$changes |= changes;
+ return this.onResize(true);
+ }
+ if (!this.lineHeight) {
+ this.$textLayer.checkForSizeChanges();
+ }
+
+ this._signal("beforeRender");
+ var config = this.layerConfig;
+ if (changes & this.CHANGE_FULL ||
+ changes & this.CHANGE_SIZE ||
+ changes & this.CHANGE_TEXT ||
+ changes & this.CHANGE_LINES ||
+ changes & this.CHANGE_SCROLL ||
+ changes & this.CHANGE_H_SCROLL
+ ) {
+ changes |= this.$computeLayerConfig();
+ if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {
+ var st = this.scrollTop + (config.firstRow - this.layerConfig.firstRow) * this.lineHeight;
+ if (st > 0) {
+ this.scrollTop = st;
+ changes = changes | this.CHANGE_SCROLL;
+ changes |= this.$computeLayerConfig();
+ }
+ }
+ config = this.layerConfig;
+ this.$updateScrollBarV();
+ if (changes & this.CHANGE_H_SCROLL)
+ this.$updateScrollBarH();
+ this.$gutterLayer.element.style.marginTop = (-config.offset) + "px";
+ this.content.style.marginTop = (-config.offset) + "px";
+ this.content.style.width = config.width + 2 * this.$padding + "px";
+ this.content.style.height = config.minHeight + "px";
+ }
+ if (changes & this.CHANGE_H_SCROLL) {
+ this.content.style.marginLeft = -this.scrollLeft + "px";
+ this.scroller.className = this.scrollLeft <= 0 ? "ace_scroller" : "ace_scroller ace_scroll-left";
+ }
+ if (changes & this.CHANGE_FULL) {
+ this.$textLayer.update(config);
+ if (this.$showGutter)
+ this.$gutterLayer.update(config);
+ this.$markerBack.update(config);
+ this.$markerFront.update(config);
+ this.$cursorLayer.update(config);
+ this.$moveTextAreaToCursor();
+ this.$highlightGutterLine && this.$updateGutterLineHighlight();
+ this._signal("afterRender");
+ return;
+ }
+ if (changes & this.CHANGE_SCROLL) {
+ if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)
+ this.$textLayer.update(config);
+ else
+ this.$textLayer.scrollLines(config);
+
+ if (this.$showGutter)
+ this.$gutterLayer.update(config);
+ this.$markerBack.update(config);
+ this.$markerFront.update(config);
+ this.$cursorLayer.update(config);
+ this.$highlightGutterLine && this.$updateGutterLineHighlight();
+ this.$moveTextAreaToCursor();
+ this._signal("afterRender");
+ return;
+ }
+
+ if (changes & this.CHANGE_TEXT) {
+ this.$textLayer.update(config);
+ if (this.$showGutter)
+ this.$gutterLayer.update(config);
+ }
+ else if (changes & this.CHANGE_LINES) {
+ if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)
+ this.$gutterLayer.update(config);
+ }
+ else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {
+ if (this.$showGutter)
+ this.$gutterLayer.update(config);
+ }
+
+ if (changes & this.CHANGE_CURSOR) {
+ this.$cursorLayer.update(config);
+ this.$moveTextAreaToCursor();
+ this.$highlightGutterLine && this.$updateGutterLineHighlight();
+ }
+
+ if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {
+ this.$markerFront.update(config);
+ }
+
+ if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {
+ this.$markerBack.update(config);
+ }
+
+ this._signal("afterRender");
+ };
+
+
+ this.$autosize = function() {
+ var height = this.session.getScreenLength() * this.lineHeight;
+ var maxHeight = this.$maxLines * this.lineHeight;
+ var desiredHeight = Math.max(
+ (this.$minLines||1) * this.lineHeight,
+ Math.min(maxHeight, height)
+ ) + this.scrollMargin.v + (this.$extraHeight || 0);
+ if (this.$horizScroll)
+ desiredHeight += this.scrollBarH.getHeight();
+ var vScroll = height > maxHeight;
+
+ if (desiredHeight != this.desiredHeight ||
+ this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {
+ if (vScroll != this.$vScroll) {
+ this.$vScroll = vScroll;
+ this.scrollBarV.setVisible(vScroll);
+ }
+
+ var w = this.container.clientWidth;
+ this.container.style.height = desiredHeight + "px";
+ this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);
+ this.desiredHeight = desiredHeight;
+
+ this._signal("autosize");
+ }
+ };
+
+ this.$computeLayerConfig = function() {
+ var session = this.session;
+ var size = this.$size;
+
+ var hideScrollbars = size.height <= 2 * this.lineHeight;
+ var screenLines = this.session.getScreenLength();
+ var maxHeight = screenLines * this.lineHeight;
+
+ var longestLine = this.$getLongestLine();
+
+ var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||
+ size.scrollerWidth - longestLine - 2 * this.$padding < 0);
+
+ var hScrollChanged = this.$horizScroll !== horizScroll;
+ if (hScrollChanged) {
+ this.$horizScroll = horizScroll;
+ this.scrollBarH.setVisible(horizScroll);
+ }
+ var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine
+ if (this.$maxLines && this.lineHeight > 1)
+ this.$autosize();
+
+ var offset = this.scrollTop % this.lineHeight;
+ var minHeight = size.scrollerHeight + this.lineHeight;
+
+ var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd
+ ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd
+ : 0;
+ maxHeight += scrollPastEnd;
+
+ var sm = this.scrollMargin;
+ this.session.setScrollTop(Math.max(-sm.top,
+ Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));
+
+ this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft,
+ longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));
+
+ var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||
+ size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);
+ var vScrollChanged = vScrollBefore !== vScroll;
+ if (vScrollChanged) {
+ this.$vScroll = vScroll;
+ this.scrollBarV.setVisible(vScroll);
+ }
+
+ var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;
+ var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));
+ var lastRow = firstRow + lineCount;
+ var firstRowScreen, firstRowHeight;
+ var lineHeight = this.lineHeight;
+ firstRow = session.screenToDocumentRow(firstRow, 0);
+ var foldLine = session.getFoldLine(firstRow);
+ if (foldLine) {
+ firstRow = foldLine.start.row;
+ }
+
+ firstRowScreen = session.documentToScreenRow(firstRow, 0);
+ firstRowHeight = session.getRowLength(firstRow) * lineHeight;
+
+ lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);
+ minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +
+ firstRowHeight;
+
+ offset = this.scrollTop - firstRowScreen * lineHeight;
+
+ var changes = 0;
+ if (this.layerConfig.width != longestLine)
+ changes = this.CHANGE_H_SCROLL;
+ if (hScrollChanged || vScrollChanged) {
+ changes = this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);
+ this._signal("scrollbarVisibilityChanged");
+ if (vScrollChanged)
+ longestLine = this.$getLongestLine();
+ }
+
+ this.layerConfig = {
+ width : longestLine,
+ padding : this.$padding,
+ firstRow : firstRow,
+ firstRowScreen: firstRowScreen,
+ lastRow : lastRow,
+ lineHeight : lineHeight,
+ characterWidth : this.characterWidth,
+ minHeight : minHeight,
+ maxHeight : maxHeight,
+ offset : offset,
+ gutterOffset : Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)),
+ height : this.$size.scrollerHeight
+ };
+
+ return changes;
+ };
+
+ this.$updateLines = function() {
+ var firstRow = this.$changedLines.firstRow;
+ var lastRow = this.$changedLines.lastRow;
+ this.$changedLines = null;
+
+ var layerConfig = this.layerConfig;
+
+ if (firstRow > layerConfig.lastRow + 1) { return; }
+ if (lastRow < layerConfig.firstRow) { return; }
+ if (lastRow === Infinity) {
+ if (this.$showGutter)
+ this.$gutterLayer.update(layerConfig);
+ this.$textLayer.update(layerConfig);
+ return;
+ }
+ this.$textLayer.updateLines(layerConfig, firstRow, lastRow);
+ return true;
+ };
+
+ this.$getLongestLine = function() {
+ var charCount = this.session.getScreenWidth();
+ if (this.showInvisibles && !this.session.$useWrapMode)
+ charCount += 1;
+
+ return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));
+ };
+ this.updateFrontMarkers = function() {
+ this.$markerFront.setMarkers(this.session.getMarkers(true));
+ this.$loop.schedule(this.CHANGE_MARKER_FRONT);
+ };
+ this.updateBackMarkers = function() {
+ this.$markerBack.setMarkers(this.session.getMarkers());
+ this.$loop.schedule(this.CHANGE_MARKER_BACK);
+ };
+ this.addGutterDecoration = function(row, className){
+ this.$gutterLayer.addGutterDecoration(row, className);
+ };
+ this.removeGutterDecoration = function(row, className){
+ this.$gutterLayer.removeGutterDecoration(row, className);
+ };
+ this.updateBreakpoints = function(rows) {
+ this.$loop.schedule(this.CHANGE_GUTTER);
+ };
+ this.setAnnotations = function(annotations) {
+ this.$gutterLayer.setAnnotations(annotations);
+ this.$loop.schedule(this.CHANGE_GUTTER);
+ };
+ this.updateCursor = function() {
+ this.$loop.schedule(this.CHANGE_CURSOR);
+ };
+ this.hideCursor = function() {
+ this.$cursorLayer.hideCursor();
+ };
+ this.showCursor = function() {
+ this.$cursorLayer.showCursor();
+ };
+
+ this.scrollSelectionIntoView = function(anchor, lead, offset) {
+ this.scrollCursorIntoView(anchor, offset);
+ this.scrollCursorIntoView(lead, offset);
+ };
+ this.scrollCursorIntoView = function(cursor, offset, $viewMargin) {
+ if (this.$size.scrollerHeight === 0)
+ return;
+
+ var pos = this.$cursorLayer.getPixelPosition(cursor);
+
+ var left = pos.left;
+ var top = pos.top;
+
+ var topMargin = $viewMargin && $viewMargin.top || 0;
+ var bottomMargin = $viewMargin && $viewMargin.bottom || 0;
+
+ var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;
+
+ if (scrollTop + topMargin > top) {
+ if (offset)
+ top -= offset * this.$size.scrollerHeight;
+ if (top === 0)
+ top = -this.scrollMargin.top;
+ this.session.setScrollTop(top);
+ } else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) {
+ if (offset)
+ top += offset * this.$size.scrollerHeight;
+ this.session.setScrollTop(top + this.lineHeight - this.$size.scrollerHeight);
+ }
+
+ var scrollLeft = this.scrollLeft;
+
+ if (scrollLeft > left) {
+ if (left < this.$padding + 2 * this.layerConfig.characterWidth)
+ left = -this.scrollMargin.left;
+ this.session.setScrollLeft(left);
+ } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) {
+ this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth));
+ } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) {
+ this.session.setScrollLeft(0);
+ }
+ };
+ this.getScrollTop = function() {
+ return this.session.getScrollTop();
+ };
+ this.getScrollLeft = function() {
+ return this.session.getScrollLeft();
+ };
+ this.getScrollTopRow = function() {
+ return this.scrollTop / this.lineHeight;
+ };
+ this.getScrollBottomRow = function() {
+ return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);
+ };
+ this.scrollToRow = function(row) {
+ this.session.setScrollTop(row * this.lineHeight);
+ };
+
+ this.alignCursor = function(cursor, alignment) {
+ if (typeof cursor == "number")
+ cursor = {row: cursor, column: 0};
+
+ var pos = this.$cursorLayer.getPixelPosition(cursor);
+ var h = this.$size.scrollerHeight - this.lineHeight;
+ var offset = pos.top - h * (alignment || 0);
+
+ this.session.setScrollTop(offset);
+ return offset;
+ };
+
+ this.STEPS = 8;
+ this.$calcSteps = function(fromValue, toValue){
+ var i = 0;
+ var l = this.STEPS;
+ var steps = [];
+
+ var func = function(t, x_min, dx) {
+ return dx * (Math.pow(t - 1, 3) + 1) + x_min;
+ };
+
+ for (i = 0; i < l; ++i)
+ steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));
+
+ return steps;
+ };
+ this.scrollToLine = function(line, center, animate, callback) {
+ var pos = this.$cursorLayer.getPixelPosition({row: line, column: 0});
+ var offset = pos.top;
+ if (center)
+ offset -= this.$size.scrollerHeight / 2;
+
+ var initialScroll = this.scrollTop;
+ this.session.setScrollTop(offset);
+ if (animate !== false)
+ this.animateScrolling(initialScroll, callback);
+ };
+
+ this.animateScrolling = function(fromValue, callback) {
+ var toValue = this.scrollTop;
+ if (!this.$animatedScroll)
+ return;
+ var _self = this;
+
+ if (fromValue == toValue)
+ return;
+
+ if (this.$scrollAnimation) {
+ var oldSteps = this.$scrollAnimation.steps;
+ if (oldSteps.length) {
+ fromValue = oldSteps[0];
+ if (fromValue == toValue)
+ return;
+ }
+ }
+
+ var steps = _self.$calcSteps(fromValue, toValue);
+ this.$scrollAnimation = {from: fromValue, to: toValue, steps: steps};
+
+ clearInterval(this.$timer);
+
+ _self.session.setScrollTop(steps.shift());
+ _self.session.$scrollTop = toValue;
+ this.$timer = setInterval(function() {
+ if (steps.length) {
+ _self.session.setScrollTop(steps.shift());
+ _self.session.$scrollTop = toValue;
+ } else if (toValue != null) {
+ _self.session.$scrollTop = -1;
+ _self.session.setScrollTop(toValue);
+ toValue = null;
+ } else {
+ _self.$timer = clearInterval(_self.$timer);
+ _self.$scrollAnimation = null;
+ callback && callback();
+ }
+ }, 10);
+ };
+ this.scrollToY = function(scrollTop) {
+ if (this.scrollTop !== scrollTop) {
+ this.$loop.schedule(this.CHANGE_SCROLL);
+ this.scrollTop = scrollTop;
+ }
+ };
+ this.scrollToX = function(scrollLeft) {
+ if (this.scrollLeft !== scrollLeft)
+ this.scrollLeft = scrollLeft;
+ this.$loop.schedule(this.CHANGE_H_SCROLL);
+ };
+ this.scrollTo = function(x, y) {
+ this.session.setScrollTop(y);
+ this.session.setScrollLeft(y);
+ };
+ this.scrollBy = function(deltaX, deltaY) {
+ deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);
+ deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);
+ };
+ this.isScrollableBy = function(deltaX, deltaY) {
+ if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)
+ return true;
+ if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight
+ - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)
+ return true;
+ if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)
+ return true;
+ if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth
+ - this.layerConfig.width < -1 + this.scrollMargin.right)
+ return true;
+ };
+
+ this.pixelToScreenCoordinates = function(x, y) {
+ var canvasPos = this.scroller.getBoundingClientRect();
+
+ var offset = (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth;
+ var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);
+ var col = Math.round(offset);
+
+ return {row: row, column: col, side: offset - col > 0 ? 1 : -1};
+ };
+
+ this.screenToTextCoordinates = function(x, y) {
+ var canvasPos = this.scroller.getBoundingClientRect();
+
+ var col = Math.round(
+ (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth
+ );
+
+ var row = (y + this.scrollTop - canvasPos.top) / this.lineHeight;
+
+ return this.session.screenToDocumentPosition(row, Math.max(col, 0));
+ };
+ this.textToScreenCoordinates = function(row, column) {
+ var canvasPos = this.scroller.getBoundingClientRect();
+ var pos = this.session.documentToScreenPosition(row, column);
+
+ var x = this.$padding + Math.round(pos.column * this.characterWidth);
+ var y = pos.row * this.lineHeight;
+
+ return {
+ pageX: canvasPos.left + x - this.scrollLeft,
+ pageY: canvasPos.top + y - this.scrollTop
+ };
+ };
+ this.visualizeFocus = function() {
+ dom.addCssClass(this.container, "ace_focus");
+ };
+ this.visualizeBlur = function() {
+ dom.removeCssClass(this.container, "ace_focus");
+ };
+ this.showComposition = function(position) {
+ if (!this.$composition)
+ this.$composition = {
+ keepTextAreaAtCursor: this.$keepTextAreaAtCursor,
+ cssText: this.textarea.style.cssText
+ };
+
+ this.$keepTextAreaAtCursor = true;
+ dom.addCssClass(this.textarea, "ace_composition");
+ this.textarea.style.cssText = "";
+ this.$moveTextAreaToCursor();
+ };
+ this.setCompositionText = function(text) {
+ this.$moveTextAreaToCursor();
+ };
+ this.hideComposition = function() {
+ if (!this.$composition)
+ return;
+
+ dom.removeCssClass(this.textarea, "ace_composition");
+ this.$keepTextAreaAtCursor = this.$composition.keepTextAreaAtCursor;
+ this.textarea.style.cssText = this.$composition.cssText;
+ this.$composition = null;
+ };
+ this.setTheme = function(theme, cb) {
+ var _self = this;
+ this.$themeId = theme;
+ _self._dispatchEvent('themeChange',{theme:theme});
+
+ if (!theme || typeof theme == "string") {
+ var moduleName = theme || this.$options.theme.initialValue;
+ config.loadModule(["theme", moduleName], afterLoad);
+ } else {
+ afterLoad(theme);
+ }
+
+ function afterLoad(module) {
+ if (_self.$themeId != theme)
+ return cb && cb();
+ if (!module.cssClass)
+ return;
+ dom.importCssString(
+ module.cssText,
+ module.cssClass,
+ _self.container.ownerDocument
+ );
+
+ if (_self.theme)
+ dom.removeCssClass(_self.container, _self.theme.cssClass);
+
+ var padding = "padding" in module ? module.padding
+ : "padding" in (_self.theme || {}) ? 4 : _self.$padding;
+ if (_self.$padding && padding != _self.$padding)
+ _self.setPadding(padding);
+ _self.$theme = module.cssClass;
+
+ _self.theme = module;
+ dom.addCssClass(_self.container, module.cssClass);
+ dom.setCssClass(_self.container, "ace_dark", module.isDark);
+ if (_self.$size) {
+ _self.$size.width = 0;
+ _self.$updateSizeAsync();
+ }
+
+ _self._dispatchEvent('themeLoaded', {theme:module});
+ cb && cb();
+ }
+ };
+ this.getTheme = function() {
+ return this.$themeId;
+ };
+ this.setStyle = function(style, include) {
+ dom.setCssClass(this.container, style, include !== false);
+ };
+ this.unsetStyle = function(style) {
+ dom.removeCssClass(this.container, style);
+ };
+
+ this.setCursorStyle = function(style) {
+ if (this.scroller.style.cursor != style)
+ this.scroller.style.cursor = style;
+ };
+ this.setMouseCursor = function(cursorStyle) {
+ this.scroller.style.cursor = cursorStyle;
+ };
+ this.destroy = function() {
+ this.$textLayer.destroy();
+ this.$cursorLayer.destroy();
+ };
+
+}).call(VirtualRenderer.prototype);
+
+
+config.defineOptions(VirtualRenderer.prototype, "renderer", {
+ animatedScroll: {initialValue: false},
+ showInvisibles: {
+ set: function(value) {
+ if (this.$textLayer.setShowInvisibles(value))
+ this.$loop.schedule(this.CHANGE_TEXT);
+ },
+ initialValue: false
+ },
+ showPrintMargin: {
+ set: function() { this.$updatePrintMargin(); },
+ initialValue: true
+ },
+ printMarginColumn: {
+ set: function() { this.$updatePrintMargin(); },
+ initialValue: 80
+ },
+ printMargin: {
+ set: function(val) {
+ if (typeof val == "number")
+ this.$printMarginColumn = val;
+ this.$showPrintMargin = !!val;
+ this.$updatePrintMargin();
+ },
+ get: function() {
+ return this.$showPrintMargin && this.$printMarginColumn;
+ }
+ },
+ showGutter: {
+ set: function(show){
+ this.$gutter.style.display = show ? "block" : "none";
+ this.$loop.schedule(this.CHANGE_FULL);
+ this.onGutterResize();
+ },
+ initialValue: true
+ },
+ fadeFoldWidgets: {
+ set: function(show) {
+ dom.setCssClass(this.$gutter, "ace_fade-fold-widgets", show);
+ },
+ initialValue: false
+ },
+ showFoldWidgets: {
+ set: function(show) {this.$gutterLayer.setShowFoldWidgets(show)},
+ initialValue: true
+ },
+ showLineNumbers: {
+ set: function(show) {
+ this.$gutterLayer.setShowLineNumbers(show);
+ this.$loop.schedule(this.CHANGE_GUTTER);
+ },
+ initialValue: true
+ },
+ displayIndentGuides: {
+ set: function(show) {
+ if (this.$textLayer.setDisplayIndentGuides(show))
+ this.$loop.schedule(this.CHANGE_TEXT);
+ },
+ initialValue: true
+ },
+ highlightGutterLine: {
+ set: function(shouldHighlight) {
+ if (!this.$gutterLineHighlight) {
+ this.$gutterLineHighlight = dom.createElement("div");
+ this.$gutterLineHighlight.className = "ace_gutter-active-line";
+ this.$gutter.appendChild(this.$gutterLineHighlight);
+ return;
+ }
+
+ this.$gutterLineHighlight.style.display = shouldHighlight ? "" : "none";
+ if (this.$cursorLayer.$pixelPos)
+ this.$updateGutterLineHighlight();
+ },
+ initialValue: false,
+ value: true
+ },
+ hScrollBarAlwaysVisible: {
+ set: function(val) {
+ if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)
+ this.$loop.schedule(this.CHANGE_SCROLL);
+ },
+ initialValue: false
+ },
+ vScrollBarAlwaysVisible: {
+ set: function(val) {
+ if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)
+ this.$loop.schedule(this.CHANGE_SCROLL);
+ },
+ initialValue: false
+ },
+ fontSize: {
+ set: function(size) {
+ if (typeof size == "number")
+ size = size + "px";
+ this.container.style.fontSize = size;
+ this.updateFontSize();
+ },
+ initialValue: 12
+ },
+ fontFamily: {
+ set: function(name) {
+ this.container.style.fontFamily = name;
+ this.updateFontSize();
+ }
+ },
+ maxLines: {
+ set: function(val) {
+ this.updateFull();
+ }
+ },
+ minLines: {
+ set: function(val) {
+ this.updateFull();
+ }
+ },
+ scrollPastEnd: {
+ set: function(val) {
+ val = +val || 0;
+ if (this.$scrollPastEnd == val)
+ return;
+ this.$scrollPastEnd = val;
+ this.$loop.schedule(this.CHANGE_SCROLL);
+ },
+ initialValue: 0,
+ handlesSet: true
+ },
+ fixedWidthGutter: {
+ set: function(val) {
+ this.$gutterLayer.$fixedWidth = !!val;
+ this.$loop.schedule(this.CHANGE_GUTTER);
+ }
+ },
+ theme: {
+ set: function(val) { this.setTheme(val) },
+ get: function() { return this.$themeId || this.theme; },
+ initialValue: "./theme/textmate",
+ handlesSet: true
+ }
+});
+
+exports.VirtualRenderer = VirtualRenderer;
+});
+
+define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/net","ace/lib/event_emitter","ace/config"], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var net = require("../lib/net");
+var EventEmitter = require("../lib/event_emitter").EventEmitter;
+var config = require("../config");
+
+var WorkerClient = function(topLevelNamespaces, mod, classname, workerUrl) {
+ this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);
+ this.changeListener = this.changeListener.bind(this);
+ this.onMessage = this.onMessage.bind(this);
+ if (require.nameToUrl && !require.toUrl)
+ require.toUrl = require.nameToUrl;
+
+ if (config.get("packaged") || !require.toUrl) {
+ workerUrl = workerUrl || config.moduleUrl(mod, "worker");
+ } else {
+ var normalizePath = this.$normalizePath;
+ workerUrl = workerUrl || normalizePath(require.toUrl("ace/worker/worker.js", null, "_"));
+
+ var tlns = {};
+ topLevelNamespaces.forEach(function(ns) {
+ tlns[ns] = normalizePath(require.toUrl(ns, null, "_").replace(/(\.js)?(\?.*)?$/, ""));
+ });
+ }
+
+ try {
+ this.$worker = new Worker(workerUrl);
+ } catch(e) {
+ if (e instanceof window.DOMException) {
+ var blob = this.$workerBlob(workerUrl);
+ var URL = window.URL || window.webkitURL;
+ var blobURL = URL.createObjectURL(blob);
+
+ this.$worker = new Worker(blobURL);
+ URL.revokeObjectURL(blobURL);
+ } else {
+ throw e;
+ }
+ }
+ this.$worker.postMessage({
+ init : true,
+ tlns : tlns,
+ module : mod,
+ classname : classname
+ });
+
+ this.callbackId = 1;
+ this.callbacks = {};
+
+ this.$worker.onmessage = this.onMessage;
+};
+
+(function(){
+
+ oop.implement(this, EventEmitter);
+
+ this.onMessage = function(e) {
+ var msg = e.data;
+ switch(msg.type) {
+ case "event":
+ this._signal(msg.name, {data: msg.data});
+ break;
+ case "call":
+ var callback = this.callbacks[msg.id];
+ if (callback) {
+ callback(msg.data);
+ delete this.callbacks[msg.id];
+ }
+ break;
+ case "error":
+ this.reportError(msg.data);
+ break;
+ case "log":
+ window.console && console.log && console.log.apply(console, msg.data);
+ break;
+ }
+ };
+
+ this.reportError = function(err) {
+ window.console && console.error && console.error(err);
+ };
+
+ this.$normalizePath = function(path) {
+ return net.qualifyURL(path);
+ };
+
+ this.terminate = function() {
+ this._signal("terminate", {});
+ this.deltaQueue = null;
+ this.$worker.terminate();
+ this.$worker = null;
+ if (this.$doc)
+ this.$doc.off("change", this.changeListener);
+ this.$doc = null;
+ };
+
+ this.send = function(cmd, args) {
+ this.$worker.postMessage({command: cmd, args: args});
+ };
+
+ this.call = function(cmd, args, callback) {
+ if (callback) {
+ var id = this.callbackId++;
+ this.callbacks[id] = callback;
+ args.push(id);
+ }
+ this.send(cmd, args);
+ };
+
+ this.emit = function(event, data) {
+ try {
+ this.$worker.postMessage({event: event, data: {data: data.data}});
+ }
+ catch(ex) {
+ console.error(ex.stack);
+ }
+ };
+
+ this.attachToDocument = function(doc) {
+ if(this.$doc)
+ this.terminate();
+
+ this.$doc = doc;
+ this.call("setValue", [doc.getValue()]);
+ doc.on("change", this.changeListener);
+ };
+
+ this.changeListener = function(delta) {
+ if (!this.deltaQueue) {
+ this.deltaQueue = [];
+ setTimeout(this.$sendDeltaQueue, 0);
+ }
+ if (delta.action == "insert")
+ this.deltaQueue.push(delta.start, delta.lines);
+ else
+ this.deltaQueue.push(delta.start, delta.end);
+ };
+
+ this.$sendDeltaQueue = function() {
+ var q = this.deltaQueue;
+ if (!q) return;
+ this.deltaQueue = null;
+ if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {
+ this.call("setValue", [this.$doc.getValue()]);
+ } else
+ this.emit("change", {data: q});
+ };
+
+ this.$workerBlob = function(workerUrl) {
+ var script = "importScripts('" + net.qualifyURL(workerUrl) + "');";
+ try {
+ return new Blob([script], {"type": "application/javascript"});
+ } catch (e) { // Backwards-compatibility
+ var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;
+ var blobBuilder = new BlobBuilder();
+ blobBuilder.append(script);
+ return blobBuilder.getBlob("application/javascript");
+ }
+ };
+
+}).call(WorkerClient.prototype);
+
+
+var UIWorkerClient = function(topLevelNamespaces, mod, classname) {
+ this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);
+ this.changeListener = this.changeListener.bind(this);
+ this.callbackId = 1;
+ this.callbacks = {};
+ this.messageBuffer = [];
+
+ var main = null;
+ var emitSync = false;
+ var sender = Object.create(EventEmitter);
+ var _self = this;
+
+ this.$worker = {};
+ this.$worker.terminate = function() {};
+ this.$worker.postMessage = function(e) {
+ _self.messageBuffer.push(e);
+ if (main) {
+ if (emitSync)
+ setTimeout(processNext);
+ else
+ processNext();
+ }
+ };
+ this.setEmitSync = function(val) { emitSync = val };
+
+ var processNext = function() {
+ var msg = _self.messageBuffer.shift();
+ if (msg.command)
+ main[msg.command].apply(main, msg.args);
+ else if (msg.event)
+ sender._signal(msg.event, msg.data);
+ };
+
+ sender.postMessage = function(msg) {
+ _self.onMessage({data: msg});
+ };
+ sender.callback = function(data, callbackId) {
+ this.postMessage({type: "call", id: callbackId, data: data});
+ };
+ sender.emit = function(name, data) {
+ this.postMessage({type: "event", name: name, data: data});
+ };
+
+ config.loadModule(["worker", mod], function(Main) {
+ main = new Main[classname](sender);
+ while (_self.messageBuffer.length)
+ processNext();
+ });
+};
+
+UIWorkerClient.prototype = WorkerClient.prototype;
+
+exports.UIWorkerClient = UIWorkerClient;
+exports.WorkerClient = WorkerClient;
+
+});
+
+define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"], function(require, exports, module) {
+"use strict";
+
+var Range = require("./range").Range;
+var EventEmitter = require("./lib/event_emitter").EventEmitter;
+var oop = require("./lib/oop");
+
+var PlaceHolder = function(session, length, pos, others, mainClass, othersClass) {
+ var _self = this;
+ this.length = length;
+ this.session = session;
+ this.doc = session.getDocument();
+ this.mainClass = mainClass;
+ this.othersClass = othersClass;
+ this.$onUpdate = this.onUpdate.bind(this);
+ this.doc.on("change", this.$onUpdate);
+ this.$others = others;
+
+ this.$onCursorChange = function() {
+ setTimeout(function() {
+ _self.onCursorChange();
+ });
+ };
+
+ this.$pos = pos;
+ var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {length: -1};
+ this.$undoStackDepth = undoStack.length;
+ this.setup();
+
+ session.selection.on("changeCursor", this.$onCursorChange);
+};
+
+(function() {
+
+ oop.implement(this, EventEmitter);
+ this.setup = function() {
+ var _self = this;
+ var doc = this.doc;
+ var session = this.session;
+
+ this.selectionBefore = session.selection.toJSON();
+ if (session.selection.inMultiSelectMode)
+ session.selection.toSingleRange();
+
+ this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);
+ var pos = this.pos;
+ pos.$insertRight = true;
+ pos.detach();
+ pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);
+ this.others = [];
+ this.$others.forEach(function(other) {
+ var anchor = doc.createAnchor(other.row, other.column);
+ anchor.$insertRight = true;
+ anchor.detach();
+ _self.others.push(anchor);
+ });
+ session.setUndoSelect(false);
+ };
+ this.showOtherMarkers = function() {
+ if (this.othersActive) return;
+ var session = this.session;
+ var _self = this;
+ this.othersActive = true;
+ this.others.forEach(function(anchor) {
+ anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column+_self.length), _self.othersClass, null, false);
+ });
+ };
+ this.hideOtherMarkers = function() {
+ if (!this.othersActive) return;
+ this.othersActive = false;
+ for (var i = 0; i < this.others.length; i++) {
+ this.session.removeMarker(this.others[i].markerId);
+ }
+ };
+ this.onUpdate = function(delta) {
+ if (this.$updating)
+ return this.updateAnchors(delta);
+
+ var range = delta;
+ if (range.start.row !== range.end.row) return;
+ if (range.start.row !== this.pos.row) return;
+ this.$updating = true;
+ var lengthDiff = delta.action === "insert" ? range.end.column - range.start.column : range.start.column - range.end.column;
+ var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;
+ var distanceFromStart = range.start.column - this.pos.column;
+
+ this.updateAnchors(delta);
+
+ if (inMainRange)
+ this.length += lengthDiff;
+
+ if (inMainRange && !this.session.$fromUndo) {
+ if (delta.action === 'insert') {
+ for (var i = this.others.length - 1; i >= 0; i--) {
+ var otherPos = this.others[i];
+ var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};
+ this.doc.insertMergedLines(newPos, delta.lines);
+ }
+ } else if (delta.action === 'remove') {
+ for (var i = this.others.length - 1; i >= 0; i--) {
+ var otherPos = this.others[i];
+ var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};
+ this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));
+ }
+ }
+ }
+
+ this.$updating = false;
+ this.updateMarkers();
+ };
+
+ this.updateAnchors = function(delta) {
+ this.pos.onChange(delta);
+ for (var i = this.others.length; i--;)
+ this.others[i].onChange(delta);
+ this.updateMarkers();
+ };
+
+ this.updateMarkers = function() {
+ if (this.$updating)
+ return;
+ var _self = this;
+ var session = this.session;
+ var updateMarker = function(pos, className) {
+ session.removeMarker(pos.markerId);
+ pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column+_self.length), className, null, false);
+ };
+ updateMarker(this.pos, this.mainClass);
+ for (var i = this.others.length; i--;)
+ updateMarker(this.others[i], this.othersClass);
+ };
+
+ this.onCursorChange = function(event) {
+ if (this.$updating || !this.session) return;
+ var pos = this.session.selection.getCursor();
+ if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {
+ this.showOtherMarkers();
+ this._emit("cursorEnter", event);
+ } else {
+ this.hideOtherMarkers();
+ this._emit("cursorLeave", event);
+ }
+ };
+ this.detach = function() {
+ this.session.removeMarker(this.pos && this.pos.markerId);
+ this.hideOtherMarkers();
+ this.doc.removeEventListener("change", this.$onUpdate);
+ this.session.selection.removeEventListener("changeCursor", this.$onCursorChange);
+ this.session.setUndoSelect(true);
+ this.session = null;
+ };
+ this.cancel = function() {
+ if (this.$undoStackDepth === -1)
+ return;
+ var undoManager = this.session.getUndoManager();
+ var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth;
+ for (var i = 0; i < undosRequired; i++) {
+ undoManager.undo(true);
+ }
+ if (this.selectionBefore)
+ this.session.selection.fromJSON(this.selectionBefore);
+ };
+}).call(PlaceHolder.prototype);
+
+
+exports.PlaceHolder = PlaceHolder;
+});
+
+define("ace/mouse/multi_select_handler",["require","exports","module","ace/lib/event","ace/lib/useragent"], function(require, exports, module) {
+
+var event = require("../lib/event");
+var useragent = require("../lib/useragent");
+function isSamePoint(p1, p2) {
+ return p1.row == p2.row && p1.column == p2.column;
+}
+
+function onMouseDown(e) {
+ var ev = e.domEvent;
+ var alt = ev.altKey;
+ var shift = ev.shiftKey;
+ var ctrl = ev.ctrlKey;
+ var accel = e.getAccelKey();
+ var button = e.getButton();
+
+ if (ctrl && useragent.isMac)
+ button = ev.button;
+
+ if (e.editor.inMultiSelectMode && button == 2) {
+ e.editor.textInput.onContextMenu(e.domEvent);
+ return;
+ }
+
+ if (!ctrl && !alt && !accel) {
+ if (button === 0 && e.editor.inMultiSelectMode)
+ e.editor.exitMultiSelectMode();
+ return;
+ }
+
+ if (button !== 0)
+ return;
+
+ var editor = e.editor;
+ var selection = editor.selection;
+ var isMultiSelect = editor.inMultiSelectMode;
+ var pos = e.getDocumentPosition();
+ var cursor = selection.getCursor();
+ var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));
+
+ var mouseX = e.x, mouseY = e.y;
+ var onMouseSelection = function(e) {
+ mouseX = e.clientX;
+ mouseY = e.clientY;
+ };
+
+ var session = editor.session;
+ var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);
+ var screenCursor = screenAnchor;
+
+ var selectionMode;
+ if (editor.$mouseHandler.$enableJumpToDef) {
+ if (ctrl && alt || accel && alt)
+ selectionMode = shift ? "block" : "add";
+ else if (alt && editor.$blockSelectEnabled)
+ selectionMode = "block";
+ } else {
+ if (accel && !alt) {
+ selectionMode = "add";
+ if (!isMultiSelect && shift)
+ return;
+ } else if (alt && editor.$blockSelectEnabled) {
+ selectionMode = "block";
+ }
+ }
+
+ if (selectionMode && useragent.isMac && ev.ctrlKey) {
+ editor.$mouseHandler.cancelContextMenu();
+ }
+
+ if (selectionMode == "add") {
+ if (!isMultiSelect && inSelection)
+ return; // dragging
+
+ if (!isMultiSelect) {
+ var range = selection.toOrientedRange();
+ editor.addSelectionMarker(range);
+ }
+
+ var oldRange = selection.rangeList.rangeAtPoint(pos);
+
+
+ editor.$blockScrolling++;
+ editor.inVirtualSelectionMode = true;
+
+ if (shift) {
+ oldRange = null;
+ range = selection.ranges[0] || range;
+ editor.removeSelectionMarker(range);
+ }
+ editor.once("mouseup", function() {
+ var tmpSel = selection.toOrientedRange();
+
+ if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))
+ selection.substractPoint(tmpSel.cursor);
+ else {
+ if (shift) {
+ selection.substractPoint(range.cursor);
+ } else if (range) {
+ editor.removeSelectionMarker(range);
+ selection.addRange(range);
+ }
+ selection.addRange(tmpSel);
+ }
+ editor.$blockScrolling--;
+ editor.inVirtualSelectionMode = false;
+ });
+
+ } else if (selectionMode == "block") {
+ e.stop();
+ editor.inVirtualSelectionMode = true;
+ var initialRange;
+ var rectSel = [];
+ var blockSelect = function() {
+ var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);
+ var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column);
+
+ if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))
+ return;
+ screenCursor = newCursor;
+
+ editor.$blockScrolling++;
+ editor.selection.moveToPosition(cursor);
+ editor.renderer.scrollCursorIntoView();
+
+ editor.removeSelectionMarkers(rectSel);
+ rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);
+ if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())
+ rectSel[0] = editor.$mouseHandler.$clickSelection.clone();
+ rectSel.forEach(editor.addSelectionMarker, editor);
+ editor.updateSelectionMarkers();
+ editor.$blockScrolling--;
+ };
+ editor.$blockScrolling++;
+ if (isMultiSelect && !accel) {
+ selection.toSingleRange();
+ } else if (!isMultiSelect && accel) {
+ initialRange = selection.toOrientedRange();
+ editor.addSelectionMarker(initialRange);
+ }
+
+ if (shift)
+ screenAnchor = session.documentToScreenPosition(selection.lead);
+ else
+ selection.moveToPosition(pos);
+ editor.$blockScrolling--;
+
+ screenCursor = {row: -1, column: -1};
+
+ var onMouseSelectionEnd = function(e) {
+ clearInterval(timerId);
+ editor.removeSelectionMarkers(rectSel);
+ if (!rectSel.length)
+ rectSel = [selection.toOrientedRange()];
+ editor.$blockScrolling++;
+ if (initialRange) {
+ editor.removeSelectionMarker(initialRange);
+ selection.toSingleRange(initialRange);
+ }
+ for (var i = 0; i < rectSel.length; i++)
+ selection.addRange(rectSel[i]);
+ editor.inVirtualSelectionMode = false;
+ editor.$mouseHandler.$clickSelection = null;
+ editor.$blockScrolling--;
+ };
+
+ var onSelectionInterval = blockSelect;
+
+ event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);
+ var timerId = setInterval(function() {onSelectionInterval();}, 20);
+
+ return e.preventDefault();
+ }
+}
+
+
+exports.onMouseDown = onMouseDown;
+
+});
+
+define("ace/commands/multi_select_commands",["require","exports","module","ace/keyboard/hash_handler"], function(require, exports, module) {
+exports.defaultCommands = [{
+ name: "addCursorAbove",
+ exec: function(editor) { editor.selectMoreLines(-1); },
+ bindKey: {win: "Ctrl-Alt-Up", mac: "Ctrl-Alt-Up"},
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "addCursorBelow",
+ exec: function(editor) { editor.selectMoreLines(1); },
+ bindKey: {win: "Ctrl-Alt-Down", mac: "Ctrl-Alt-Down"},
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "addCursorAboveSkipCurrent",
+ exec: function(editor) { editor.selectMoreLines(-1, true); },
+ bindKey: {win: "Ctrl-Alt-Shift-Up", mac: "Ctrl-Alt-Shift-Up"},
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "addCursorBelowSkipCurrent",
+ exec: function(editor) { editor.selectMoreLines(1, true); },
+ bindKey: {win: "Ctrl-Alt-Shift-Down", mac: "Ctrl-Alt-Shift-Down"},
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "selectMoreBefore",
+ exec: function(editor) { editor.selectMore(-1); },
+ bindKey: {win: "Ctrl-Alt-Left", mac: "Ctrl-Alt-Left"},
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "selectMoreAfter",
+ exec: function(editor) { editor.selectMore(1); },
+ bindKey: {win: "Ctrl-Alt-Right", mac: "Ctrl-Alt-Right"},
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "selectNextBefore",
+ exec: function(editor) { editor.selectMore(-1, true); },
+ bindKey: {win: "Ctrl-Alt-Shift-Left", mac: "Ctrl-Alt-Shift-Left"},
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "selectNextAfter",
+ exec: function(editor) { editor.selectMore(1, true); },
+ bindKey: {win: "Ctrl-Alt-Shift-Right", mac: "Ctrl-Alt-Shift-Right"},
+ scrollIntoView: "cursor",
+ readOnly: true
+}, {
+ name: "splitIntoLines",
+ exec: function(editor) { editor.multiSelect.splitIntoLines(); },
+ bindKey: {win: "Ctrl-Alt-L", mac: "Ctrl-Alt-L"},
+ readOnly: true
+}, {
+ name: "alignCursors",
+ exec: function(editor) { editor.alignCursors(); },
+ bindKey: {win: "Ctrl-Alt-A", mac: "Ctrl-Alt-A"},
+ scrollIntoView: "cursor"
+}, {
+ name: "findAll",
+ exec: function(editor) { editor.findAll(); },
+ bindKey: {win: "Ctrl-Alt-K", mac: "Ctrl-Alt-G"},
+ scrollIntoView: "cursor",
+ readOnly: true
+}];
+exports.multiSelectCommands = [{
+ name: "singleSelection",
+ bindKey: "esc",
+ exec: function(editor) { editor.exitMultiSelectMode(); },
+ scrollIntoView: "cursor",
+ readOnly: true,
+ isAvailable: function(editor) {return editor && editor.inMultiSelectMode}
+}];
+
+var HashHandler = require("../keyboard/hash_handler").HashHandler;
+exports.keyboardHandler = new HashHandler(exports.multiSelectCommands);
+
+});
+
+define("ace/multi_select",["require","exports","module","ace/range_list","ace/range","ace/selection","ace/mouse/multi_select_handler","ace/lib/event","ace/lib/lang","ace/commands/multi_select_commands","ace/search","ace/edit_session","ace/editor","ace/config"], function(require, exports, module) {
+
+var RangeList = require("./range_list").RangeList;
+var Range = require("./range").Range;
+var Selection = require("./selection").Selection;
+var onMouseDown = require("./mouse/multi_select_handler").onMouseDown;
+var event = require("./lib/event");
+var lang = require("./lib/lang");
+var commands = require("./commands/multi_select_commands");
+exports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);
+var Search = require("./search").Search;
+var search = new Search();
+
+function find(session, needle, dir) {
+ search.$options.wrap = true;
+ search.$options.needle = needle;
+ search.$options.backwards = dir == -1;
+ return search.find(session);
+}
+var EditSession = require("./edit_session").EditSession;
+(function() {
+ this.getSelectionMarkers = function() {
+ return this.$selectionMarkers;
+ };
+}).call(EditSession.prototype);
+(function() {
+ this.ranges = null;
+ this.rangeList = null;
+ this.addRange = function(range, $blockChangeEvents) {
+ if (!range)
+ return;
+
+ if (!this.inMultiSelectMode && this.rangeCount === 0) {
+ var oldRange = this.toOrientedRange();
+ this.rangeList.add(oldRange);
+ this.rangeList.add(range);
+ if (this.rangeList.ranges.length != 2) {
+ this.rangeList.removeAll();
+ return $blockChangeEvents || this.fromOrientedRange(range);
+ }
+ this.rangeList.removeAll();
+ this.rangeList.add(oldRange);
+ this.$onAddRange(oldRange);
+ }
+
+ if (!range.cursor)
+ range.cursor = range.end;
+
+ var removed = this.rangeList.add(range);
+
+ this.$onAddRange(range);
+
+ if (removed.length)
+ this.$onRemoveRange(removed);
+
+ if (this.rangeCount > 1 && !this.inMultiSelectMode) {
+ this._signal("multiSelect");
+ this.inMultiSelectMode = true;
+ this.session.$undoSelect = false;
+ this.rangeList.attach(this.session);
+ }
+
+ return $blockChangeEvents || this.fromOrientedRange(range);
+ };
+
+ this.toSingleRange = function(range) {
+ range = range || this.ranges[0];
+ var removed = this.rangeList.removeAll();
+ if (removed.length)
+ this.$onRemoveRange(removed);
+
+ range && this.fromOrientedRange(range);
+ };
+ this.substractPoint = function(pos) {
+ var removed = this.rangeList.substractPoint(pos);
+ if (removed) {
+ this.$onRemoveRange(removed);
+ return removed[0];
+ }
+ };
+ this.mergeOverlappingRanges = function() {
+ var removed = this.rangeList.merge();
+ if (removed.length)
+ this.$onRemoveRange(removed);
+ else if(this.ranges[0])
+ this.fromOrientedRange(this.ranges[0]);
+ };
+
+ this.$onAddRange = function(range) {
+ this.rangeCount = this.rangeList.ranges.length;
+ this.ranges.unshift(range);
+ this._signal("addRange", {range: range});
+ };
+
+ this.$onRemoveRange = function(removed) {
+ this.rangeCount = this.rangeList.ranges.length;
+ if (this.rangeCount == 1 && this.inMultiSelectMode) {
+ var lastRange = this.rangeList.ranges.pop();
+ removed.push(lastRange);
+ this.rangeCount = 0;
+ }
+
+ for (var i = removed.length; i--; ) {
+ var index = this.ranges.indexOf(removed[i]);
+ this.ranges.splice(index, 1);
+ }
+
+ this._signal("removeRange", {ranges: removed});
+
+ if (this.rangeCount === 0 && this.inMultiSelectMode) {
+ this.inMultiSelectMode = false;
+ this._signal("singleSelect");
+ this.session.$undoSelect = true;
+ this.rangeList.detach(this.session);
+ }
+
+ lastRange = lastRange || this.ranges[0];
+ if (lastRange && !lastRange.isEqual(this.getRange()))
+ this.fromOrientedRange(lastRange);
+ };
+ this.$initRangeList = function() {
+ if (this.rangeList)
+ return;
+
+ this.rangeList = new RangeList();
+ this.ranges = [];
+ this.rangeCount = 0;
+ };
+ this.getAllRanges = function() {
+ return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];
+ };
+
+ this.splitIntoLines = function () {
+ if (this.rangeCount > 1) {
+ var ranges = this.rangeList.ranges;
+ var lastRange = ranges[ranges.length - 1];
+ var range = Range.fromPoints(ranges[0].start, lastRange.end);
+
+ this.toSingleRange();
+ this.setSelectionRange(range, lastRange.cursor == lastRange.start);
+ } else {
+ var range = this.getRange();
+ var isBackwards = this.isBackwards();
+ var startRow = range.start.row;
+ var endRow = range.end.row;
+ if (startRow == endRow) {
+ if (isBackwards)
+ var start = range.end, end = range.start;
+ else
+ var start = range.start, end = range.end;
+
+ this.addRange(Range.fromPoints(end, end));
+ this.addRange(Range.fromPoints(start, start));
+ return;
+ }
+
+ var rectSel = [];
+ var r = this.getLineRange(startRow, true);
+ r.start.column = range.start.column;
+ rectSel.push(r);
+
+ for (var i = startRow + 1; i < endRow; i++)
+ rectSel.push(this.getLineRange(i, true));
+
+ r = this.getLineRange(endRow, true);
+ r.end.column = range.end.column;
+ rectSel.push(r);
+
+ rectSel.forEach(this.addRange, this);
+ }
+ };
+ this.toggleBlockSelection = function () {
+ if (this.rangeCount > 1) {
+ var ranges = this.rangeList.ranges;
+ var lastRange = ranges[ranges.length - 1];
+ var range = Range.fromPoints(ranges[0].start, lastRange.end);
+
+ this.toSingleRange();
+ this.setSelectionRange(range, lastRange.cursor == lastRange.start);
+ } else {
+ var cursor = this.session.documentToScreenPosition(this.selectionLead);
+ var anchor = this.session.documentToScreenPosition(this.selectionAnchor);
+
+ var rectSel = this.rectangularRangeBlock(cursor, anchor);
+ rectSel.forEach(this.addRange, this);
+ }
+ };
+ this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) {
+ var rectSel = [];
+
+ var xBackwards = screenCursor.column < screenAnchor.column;
+ if (xBackwards) {
+ var startColumn = screenCursor.column;
+ var endColumn = screenAnchor.column;
+ } else {
+ var startColumn = screenAnchor.column;
+ var endColumn = screenCursor.column;
+ }
+
+ var yBackwards = screenCursor.row < screenAnchor.row;
+ if (yBackwards) {
+ var startRow = screenCursor.row;
+ var endRow = screenAnchor.row;
+ } else {
+ var startRow = screenAnchor.row;
+ var endRow = screenCursor.row;
+ }
+
+ if (startColumn < 0)
+ startColumn = 0;
+ if (startRow < 0)
+ startRow = 0;
+
+ if (startRow == endRow)
+ includeEmptyLines = true;
+
+ for (var row = startRow; row <= endRow; row++) {
+ var range = Range.fromPoints(
+ this.session.screenToDocumentPosition(row, startColumn),
+ this.session.screenToDocumentPosition(row, endColumn)
+ );
+ if (range.isEmpty()) {
+ if (docEnd && isSamePoint(range.end, docEnd))
+ break;
+ var docEnd = range.end;
+ }
+ range.cursor = xBackwards ? range.start : range.end;
+ rectSel.push(range);
+ }
+
+ if (yBackwards)
+ rectSel.reverse();
+
+ if (!includeEmptyLines) {
+ var end = rectSel.length - 1;
+ while (rectSel[end].isEmpty() && end > 0)
+ end--;
+ if (end > 0) {
+ var start = 0;
+ while (rectSel[start].isEmpty())
+ start++;
+ }
+ for (var i = end; i >= start; i--) {
+ if (rectSel[i].isEmpty())
+ rectSel.splice(i, 1);
+ }
+ }
+
+ return rectSel;
+ };
+}).call(Selection.prototype);
+var Editor = require("./editor").Editor;
+(function() {
+ this.updateSelectionMarkers = function() {
+ this.renderer.updateCursor();
+ this.renderer.updateBackMarkers();
+ };
+ this.addSelectionMarker = function(orientedRange) {
+ if (!orientedRange.cursor)
+ orientedRange.cursor = orientedRange.end;
+
+ var style = this.getSelectionStyle();
+ orientedRange.marker = this.session.addMarker(orientedRange, "ace_selection", style);
+
+ this.session.$selectionMarkers.push(orientedRange);
+ this.session.selectionMarkerCount = this.session.$selectionMarkers.length;
+ return orientedRange;
+ };
+ this.removeSelectionMarker = function(range) {
+ if (!range.marker)
+ return;
+ this.session.removeMarker(range.marker);
+ var index = this.session.$selectionMarkers.indexOf(range);
+ if (index != -1)
+ this.session.$selectionMarkers.splice(index, 1);
+ this.session.selectionMarkerCount = this.session.$selectionMarkers.length;
+ };
+
+ this.removeSelectionMarkers = function(ranges) {
+ var markerList = this.session.$selectionMarkers;
+ for (var i = ranges.length; i--; ) {
+ var range = ranges[i];
+ if (!range.marker)
+ continue;
+ this.session.removeMarker(range.marker);
+ var index = markerList.indexOf(range);
+ if (index != -1)
+ markerList.splice(index, 1);
+ }
+ this.session.selectionMarkerCount = markerList.length;
+ };
+
+ this.$onAddRange = function(e) {
+ this.addSelectionMarker(e.range);
+ this.renderer.updateCursor();
+ this.renderer.updateBackMarkers();
+ };
+
+ this.$onRemoveRange = function(e) {
+ this.removeSelectionMarkers(e.ranges);
+ this.renderer.updateCursor();
+ this.renderer.updateBackMarkers();
+ };
+
+ this.$onMultiSelect = function(e) {
+ if (this.inMultiSelectMode)
+ return;
+ this.inMultiSelectMode = true;
+
+ this.setStyle("ace_multiselect");
+ this.keyBinding.addKeyboardHandler(commands.keyboardHandler);
+ this.commands.setDefaultHandler("exec", this.$onMultiSelectExec);
+
+ this.renderer.updateCursor();
+ this.renderer.updateBackMarkers();
+ };
+
+ this.$onSingleSelect = function(e) {
+ if (this.session.multiSelect.inVirtualMode)
+ return;
+ this.inMultiSelectMode = false;
+
+ this.unsetStyle("ace_multiselect");
+ this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);
+
+ this.commands.removeDefaultHandler("exec", this.$onMultiSelectExec);
+ this.renderer.updateCursor();
+ this.renderer.updateBackMarkers();
+ this._emit("changeSelection");
+ };
+
+ this.$onMultiSelectExec = function(e) {
+ var command = e.command;
+ var editor = e.editor;
+ if (!editor.multiSelect)
+ return;
+ if (!command.multiSelectAction) {
+ var result = command.exec(editor, e.args || {});
+ editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());
+ editor.multiSelect.mergeOverlappingRanges();
+ } else if (command.multiSelectAction == "forEach") {
+ result = editor.forEachSelection(command, e.args);
+ } else if (command.multiSelectAction == "forEachLine") {
+ result = editor.forEachSelection(command, e.args, true);
+ } else if (command.multiSelectAction == "single") {
+ editor.exitMultiSelectMode();
+ result = command.exec(editor, e.args || {});
+ } else {
+ result = command.multiSelectAction(editor, e.args || {});
+ }
+ return result;
+ };
+ this.forEachSelection = function(cmd, args, options) {
+ if (this.inVirtualSelectionMode)
+ return;
+ var keepOrder = options && options.keepOrder;
+ var $byLines = options == true || options && options.$byLines
+ var session = this.session;
+ var selection = this.selection;
+ var rangeList = selection.rangeList;
+ var ranges = (keepOrder ? selection : rangeList).ranges;
+ var result;
+
+ if (!ranges.length)
+ return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});
+
+ var reg = selection._eventRegistry;
+ selection._eventRegistry = {};
+
+ var tmpSel = new Selection(session);
+ this.inVirtualSelectionMode = true;
+ for (var i = ranges.length; i--;) {
+ if ($byLines) {
+ while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)
+ i--;
+ }
+ tmpSel.fromOrientedRange(ranges[i]);
+ tmpSel.index = i;
+ this.selection = session.selection = tmpSel;
+ var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});
+ if (!result && cmdResult !== undefined)
+ result = cmdResult;
+ tmpSel.toOrientedRange(ranges[i]);
+ }
+ tmpSel.detach();
+
+ this.selection = session.selection = selection;
+ this.inVirtualSelectionMode = false;
+ selection._eventRegistry = reg;
+ selection.mergeOverlappingRanges();
+
+ var anim = this.renderer.$scrollAnimation;
+ this.onCursorChange();
+ this.onSelectionChange();
+ if (anim && anim.from == anim.to)
+ this.renderer.animateScrolling(anim.from);
+
+ return result;
+ };
+ this.exitMultiSelectMode = function() {
+ if (!this.inMultiSelectMode || this.inVirtualSelectionMode)
+ return;
+ this.multiSelect.toSingleRange();
+ };
+
+ this.getSelectedText = function() {
+ var text = "";
+ if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {
+ var ranges = this.multiSelect.rangeList.ranges;
+ var buf = [];
+ for (var i = 0; i < ranges.length; i++) {
+ buf.push(this.session.getTextRange(ranges[i]));
+ }
+ var nl = this.session.getDocument().getNewLineCharacter();
+ text = buf.join(nl);
+ if (text.length == (buf.length - 1) * nl.length)
+ text = "";
+ } else if (!this.selection.isEmpty()) {
+ text = this.session.getTextRange(this.getSelectionRange());
+ }
+ return text;
+ };
+
+ this.$checkMultiselectChange = function(e, anchor) {
+ if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {
+ var range = this.multiSelect.ranges[0];
+ if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)
+ return;
+ var pos = anchor == this.multiSelect.anchor
+ ? range.cursor == range.start ? range.end : range.start
+ : range.cursor;
+ if (pos.row != anchor.row
+ || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)
+ this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());
+ }
+ };
+ this.findAll = function(needle, options, additive) {
+ options = options || {};
+ options.needle = needle || options.needle;
+ if (options.needle == undefined) {
+ var range = this.selection.isEmpty()
+ ? this.selection.getWordRange()
+ : this.selection.getRange();
+ options.needle = this.session.getTextRange(range);
+ }
+ this.$search.set(options);
+
+ var ranges = this.$search.findAll(this.session);
+ if (!ranges.length)
+ return 0;
+
+ this.$blockScrolling += 1;
+ var selection = this.multiSelect;
+
+ if (!additive)
+ selection.toSingleRange(ranges[0]);
+
+ for (var i = ranges.length; i--; )
+ selection.addRange(ranges[i], true);
+ if (range && selection.rangeList.rangeAtPoint(range.start))
+ selection.addRange(range, true);
+
+ this.$blockScrolling -= 1;
+
+ return ranges.length;
+ };
+ this.selectMoreLines = function(dir, skip) {
+ var range = this.selection.toOrientedRange();
+ var isBackwards = range.cursor == range.end;
+
+ var screenLead = this.session.documentToScreenPosition(range.cursor);
+ if (this.selection.$desiredColumn)
+ screenLead.column = this.selection.$desiredColumn;
+
+ var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);
+
+ if (!range.isEmpty()) {
+ var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);
+ var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);
+ } else {
+ var anchor = lead;
+ }
+
+ if (isBackwards) {
+ var newRange = Range.fromPoints(lead, anchor);
+ newRange.cursor = newRange.start;
+ } else {
+ var newRange = Range.fromPoints(anchor, lead);
+ newRange.cursor = newRange.end;
+ }
+
+ newRange.desiredColumn = screenLead.column;
+ if (!this.selection.inMultiSelectMode) {
+ this.selection.addRange(range);
+ } else {
+ if (skip)
+ var toRemove = range.cursor;
+ }
+
+ this.selection.addRange(newRange);
+ if (toRemove)
+ this.selection.substractPoint(toRemove);
+ };
+ this.transposeSelections = function(dir) {
+ var session = this.session;
+ var sel = session.multiSelect;
+ var all = sel.ranges;
+
+ for (var i = all.length; i--; ) {
+ var range = all[i];
+ if (range.isEmpty()) {
+ var tmp = session.getWordRange(range.start.row, range.start.column);
+ range.start.row = tmp.start.row;
+ range.start.column = tmp.start.column;
+ range.end.row = tmp.end.row;
+ range.end.column = tmp.end.column;
+ }
+ }
+ sel.mergeOverlappingRanges();
+
+ var words = [];
+ for (var i = all.length; i--; ) {
+ var range = all[i];
+ words.unshift(session.getTextRange(range));
+ }
+
+ if (dir < 0)
+ words.unshift(words.pop());
+ else
+ words.push(words.shift());
+
+ for (var i = all.length; i--; ) {
+ var range = all[i];
+ var tmp = range.clone();
+ session.replace(range, words[i]);
+ range.start.row = tmp.start.row;
+ range.start.column = tmp.start.column;
+ }
+ };
+ this.selectMore = function(dir, skip, stopAtFirst) {
+ var session = this.session;
+ var sel = session.multiSelect;
+
+ var range = sel.toOrientedRange();
+ if (range.isEmpty()) {
+ range = session.getWordRange(range.start.row, range.start.column);
+ range.cursor = dir == -1 ? range.start : range.end;
+ this.multiSelect.addRange(range);
+ if (stopAtFirst)
+ return;
+ }
+ var needle = session.getTextRange(range);
+
+ var newRange = find(session, needle, dir);
+ if (newRange) {
+ newRange.cursor = dir == -1 ? newRange.start : newRange.end;
+ this.$blockScrolling += 1;
+ this.session.unfold(newRange);
+ this.multiSelect.addRange(newRange);
+ this.$blockScrolling -= 1;
+ this.renderer.scrollCursorIntoView(null, 0.5);
+ }
+ if (skip)
+ this.multiSelect.substractPoint(range.cursor);
+ };
+ this.alignCursors = function() {
+ var session = this.session;
+ var sel = session.multiSelect;
+ var ranges = sel.ranges;
+ var row = -1;
+ var sameRowRanges = ranges.filter(function(r) {
+ if (r.cursor.row == row)
+ return true;
+ row = r.cursor.row;
+ });
+
+ if (!ranges.length || sameRowRanges.length == ranges.length - 1) {
+ var range = this.selection.getRange();
+ var fr = range.start.row, lr = range.end.row;
+ var guessRange = fr == lr;
+ if (guessRange) {
+ var max = this.session.getLength();
+ var line;
+ do {
+ line = this.session.getLine(lr);
+ } while (/[=:]/.test(line) && ++lr < max);
+ do {
+ line = this.session.getLine(fr);
+ } while (/[=:]/.test(line) && --fr > 0);
+
+ if (fr < 0) fr = 0;
+ if (lr >= max) lr = max - 1;
+ }
+ var lines = this.session.removeFullLines(fr, lr);
+ lines = this.$reAlignText(lines, guessRange);
+ this.session.insert({row: fr, column: 0}, lines.join("\n") + "\n");
+ if (!guessRange) {
+ range.start.column = 0;
+ range.end.column = lines[lines.length - 1].length;
+ }
+ this.selection.setRange(range);
+ } else {
+ sameRowRanges.forEach(function(r) {
+ sel.substractPoint(r.cursor);
+ });
+
+ var maxCol = 0;
+ var minSpace = Infinity;
+ var spaceOffsets = ranges.map(function(r) {
+ var p = r.cursor;
+ var line = session.getLine(p.row);
+ var spaceOffset = line.substr(p.column).search(/\S/g);
+ if (spaceOffset == -1)
+ spaceOffset = 0;
+
+ if (p.column > maxCol)
+ maxCol = p.column;
+ if (spaceOffset < minSpace)
+ minSpace = spaceOffset;
+ return spaceOffset;
+ });
+ ranges.forEach(function(r, i) {
+ var p = r.cursor;
+ var l = maxCol - p.column;
+ var d = spaceOffsets[i] - minSpace;
+ if (l > d)
+ session.insert(p, lang.stringRepeat(" ", l - d));
+ else
+ session.remove(new Range(p.row, p.column, p.row, p.column - l + d));
+
+ r.start.column = r.end.column = maxCol;
+ r.start.row = r.end.row = p.row;
+ r.cursor = r.end;
+ });
+ sel.fromOrientedRange(ranges[0]);
+ this.renderer.updateCursor();
+ this.renderer.updateBackMarkers();
+ }
+ };
+
+ this.$reAlignText = function(lines, forceLeft) {
+ var isLeftAligned = true, isRightAligned = true;
+ var startW, textW, endW;
+
+ return lines.map(function(line) {
+ var m = line.match(/(\s*)(.*?)(\s*)([=:].*)/);
+ if (!m)
+ return [line];
+
+ if (startW == null) {
+ startW = m[1].length;
+ textW = m[2].length;
+ endW = m[3].length;
+ return m;
+ }
+
+ if (startW + textW + endW != m[1].length + m[2].length + m[3].length)
+ isRightAligned = false;
+ if (startW != m[1].length)
+ isLeftAligned = false;
+
+ if (startW > m[1].length)
+ startW = m[1].length;
+ if (textW < m[2].length)
+ textW = m[2].length;
+ if (endW > m[3].length)
+ endW = m[3].length;
+
+ return m;
+ }).map(forceLeft ? alignLeft :
+ isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);
+
+ function spaces(n) {
+ return lang.stringRepeat(" ", n);
+ }
+
+ function alignLeft(m) {
+ return !m[2] ? m[0] : spaces(startW) + m[2]
+ + spaces(textW - m[2].length + endW)
+ + m[4].replace(/^([=:])\s+/, "$1 ");
+ }
+ function alignRight(m) {
+ return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]
+ + spaces(endW, " ")
+ + m[4].replace(/^([=:])\s+/, "$1 ");
+ }
+ function unAlign(m) {
+ return !m[2] ? m[0] : spaces(startW) + m[2]
+ + spaces(endW)
+ + m[4].replace(/^([=:])\s+/, "$1 ");
+ }
+ };
+}).call(Editor.prototype);
+
+
+function isSamePoint(p1, p2) {
+ return p1.row == p2.row && p1.column == p2.column;
+}
+exports.onSessionChange = function(e) {
+ var session = e.session;
+ if (session && !session.multiSelect) {
+ session.$selectionMarkers = [];
+ session.selection.$initRangeList();
+ session.multiSelect = session.selection;
+ }
+ this.multiSelect = session && session.multiSelect;
+
+ var oldSession = e.oldSession;
+ if (oldSession) {
+ oldSession.multiSelect.off("addRange", this.$onAddRange);
+ oldSession.multiSelect.off("removeRange", this.$onRemoveRange);
+ oldSession.multiSelect.off("multiSelect", this.$onMultiSelect);
+ oldSession.multiSelect.off("singleSelect", this.$onSingleSelect);
+ oldSession.multiSelect.lead.off("change", this.$checkMultiselectChange);
+ oldSession.multiSelect.anchor.off("change", this.$checkMultiselectChange);
+ }
+
+ if (session) {
+ session.multiSelect.on("addRange", this.$onAddRange);
+ session.multiSelect.on("removeRange", this.$onRemoveRange);
+ session.multiSelect.on("multiSelect", this.$onMultiSelect);
+ session.multiSelect.on("singleSelect", this.$onSingleSelect);
+ session.multiSelect.lead.on("change", this.$checkMultiselectChange);
+ session.multiSelect.anchor.on("change", this.$checkMultiselectChange);
+ }
+
+ if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {
+ if (session.selection.inMultiSelectMode)
+ this.$onMultiSelect();
+ else
+ this.$onSingleSelect();
+ }
+};
+function MultiSelect(editor) {
+ if (editor.$multiselectOnSessionChange)
+ return;
+ editor.$onAddRange = editor.$onAddRange.bind(editor);
+ editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);
+ editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);
+ editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);
+ editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);
+ editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);
+
+ editor.$multiselectOnSessionChange(editor);
+ editor.on("changeSession", editor.$multiselectOnSessionChange);
+
+ editor.on("mousedown", onMouseDown);
+ editor.commands.addCommands(commands.defaultCommands);
+
+ addAltCursorListeners(editor);
+}
+
+function addAltCursorListeners(editor){
+ var el = editor.textInput.getElement();
+ var altCursor = false;
+ event.addListener(el, "keydown", function(e) {
+ var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);
+ if (editor.$blockSelectEnabled && altDown) {
+ if (!altCursor) {
+ editor.renderer.setMouseCursor("crosshair");
+ altCursor = true;
+ }
+ } else if (altCursor) {
+ reset();
+ }
+ });
+
+ event.addListener(el, "keyup", reset);
+ event.addListener(el, "blur", reset);
+ function reset(e) {
+ if (altCursor) {
+ editor.renderer.setMouseCursor("");
+ altCursor = false;
+ }
+ }
+}
+
+exports.MultiSelect = MultiSelect;
+
+
+require("./config").defineOptions(Editor.prototype, "editor", {
+ enableMultiselect: {
+ set: function(val) {
+ MultiSelect(this);
+ if (val) {
+ this.on("changeSession", this.$multiselectOnSessionChange);
+ this.on("mousedown", onMouseDown);
+ } else {
+ this.off("changeSession", this.$multiselectOnSessionChange);
+ this.off("mousedown", onMouseDown);
+ }
+ },
+ value: true
+ },
+ enableBlockSelect: {
+ set: function(val) {
+ this.$blockSelectEnabled = val;
+ },
+ value: true
+ }
+});
+
+
+
+});
+
+define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"], function(require, exports, module) {
+"use strict";
+
+var Range = require("../../range").Range;
+
+var FoldMode = exports.FoldMode = function() {};
+
+(function() {
+
+ this.foldingStartMarker = null;
+ this.foldingStopMarker = null;
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ if (this.foldingStartMarker.test(line))
+ return "start";
+ if (foldStyle == "markbeginend"
+ && this.foldingStopMarker
+ && this.foldingStopMarker.test(line))
+ return "end";
+ return "";
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ return null;
+ };
+
+ this.indentationBlock = function(session, row, column) {
+ var re = /\S/;
+ var line = session.getLine(row);
+ var startLevel = line.search(re);
+ if (startLevel == -1)
+ return;
+
+ var startColumn = column || line.length;
+ var maxRow = session.getLength();
+ var startRow = row;
+ var endRow = row;
+
+ while (++row < maxRow) {
+ var level = session.getLine(row).search(re);
+
+ if (level == -1)
+ continue;
+
+ if (level <= startLevel)
+ break;
+
+ endRow = row;
+ }
+
+ if (endRow > startRow) {
+ var endColumn = session.getLine(endRow).length;
+ return new Range(startRow, startColumn, endRow, endColumn);
+ }
+ };
+
+ this.openingBracketBlock = function(session, bracket, row, column, typeRe) {
+ var start = {row: row, column: column + 1};
+ var end = session.$findClosingBracket(bracket, start, typeRe);
+ if (!end)
+ return;
+
+ var fw = session.foldWidgets[end.row];
+ if (fw == null)
+ fw = session.getFoldWidget(end.row);
+
+ if (fw == "start" && end.row > start.row) {
+ end.row --;
+ end.column = session.getLine(end.row).length;
+ }
+ return Range.fromPoints(start, end);
+ };
+
+ this.closingBracketBlock = function(session, bracket, row, column, typeRe) {
+ var end = {row: row, column: column};
+ var start = session.$findOpeningBracket(bracket, end);
+
+ if (!start)
+ return;
+
+ start.column++;
+ end.column--;
+
+ return Range.fromPoints(start, end);
+ };
+}).call(FoldMode.prototype);
+
+});
+
+define("ace/theme/textmate",["require","exports","module","ace/lib/dom"], function(require, exports, module) {
+"use strict";
+
+exports.isDark = false;
+exports.cssClass = "ace-tm";
+exports.cssText = ".ace-tm .ace_gutter {\
+background: #f0f0f0;\
+color: #333;\
+}\
+.ace-tm .ace_print-margin {\
+width: 1px;\
+background: #e8e8e8;\
+}\
+.ace-tm .ace_fold {\
+background-color: #6B72E6;\
+}\
+.ace-tm {\
+background-color: #FFFFFF;\
+color: black;\
+}\
+.ace-tm .ace_cursor {\
+color: black;\
+}\
+.ace-tm .ace_invisible {\
+color: rgb(191, 191, 191);\
+}\
+.ace-tm .ace_storage,\
+.ace-tm .ace_keyword {\
+color: blue;\
+}\
+.ace-tm .ace_constant {\
+color: rgb(197, 6, 11);\
+}\
+.ace-tm .ace_constant.ace_buildin {\
+color: rgb(88, 72, 246);\
+}\
+.ace-tm .ace_constant.ace_language {\
+color: rgb(88, 92, 246);\
+}\
+.ace-tm .ace_constant.ace_library {\
+color: rgb(6, 150, 14);\
+}\
+.ace-tm .ace_invalid {\
+background-color: rgba(255, 0, 0, 0.1);\
+color: red;\
+}\
+.ace-tm .ace_support.ace_function {\
+color: rgb(60, 76, 114);\
+}\
+.ace-tm .ace_support.ace_constant {\
+color: rgb(6, 150, 14);\
+}\
+.ace-tm .ace_support.ace_type,\
+.ace-tm .ace_support.ace_class {\
+color: rgb(109, 121, 222);\
+}\
+.ace-tm .ace_keyword.ace_operator {\
+color: rgb(104, 118, 135);\
+}\
+.ace-tm .ace_string {\
+color: rgb(3, 106, 7);\
+}\
+.ace-tm .ace_comment {\
+color: rgb(76, 136, 107);\
+}\
+.ace-tm .ace_comment.ace_doc {\
+color: rgb(0, 102, 255);\
+}\
+.ace-tm .ace_comment.ace_doc.ace_tag {\
+color: rgb(128, 159, 191);\
+}\
+.ace-tm .ace_constant.ace_numeric {\
+color: rgb(0, 0, 205);\
+}\
+.ace-tm .ace_variable {\
+color: rgb(49, 132, 149);\
+}\
+.ace-tm .ace_xml-pe {\
+color: rgb(104, 104, 91);\
+}\
+.ace-tm .ace_entity.ace_name.ace_function {\
+color: #0000A2;\
+}\
+.ace-tm .ace_heading {\
+color: rgb(12, 7, 255);\
+}\
+.ace-tm .ace_list {\
+color:rgb(185, 6, 144);\
+}\
+.ace-tm .ace_meta.ace_tag {\
+color:rgb(0, 22, 142);\
+}\
+.ace-tm .ace_string.ace_regex {\
+color: rgb(255, 0, 0)\
+}\
+.ace-tm .ace_marker-layer .ace_selection {\
+background: rgb(181, 213, 255);\
+}\
+.ace-tm.ace_multiselect .ace_selection.ace_start {\
+box-shadow: 0 0 3px 0px white;\
+}\
+.ace-tm .ace_marker-layer .ace_step {\
+background: rgb(252, 255, 0);\
+}\
+.ace-tm .ace_marker-layer .ace_stack {\
+background: rgb(164, 229, 101);\
+}\
+.ace-tm .ace_marker-layer .ace_bracket {\
+margin: -1px 0 0 -1px;\
+border: 1px solid rgb(192, 192, 192);\
+}\
+.ace-tm .ace_marker-layer .ace_active-line {\
+background: rgba(0, 0, 0, 0.07);\
+}\
+.ace-tm .ace_gutter-active-line {\
+background-color : #dcdcdc;\
+}\
+.ace-tm .ace_marker-layer .ace_selected-word {\
+background: rgb(250, 250, 255);\
+border: 1px solid rgb(200, 200, 250);\
+}\
+.ace-tm .ace_indent-guide {\
+background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\
+}\
+";
+
+var dom = require("../lib/dom");
+dom.importCssString(exports.cssText, exports.cssClass);
+});
+
+define("ace/line_widgets",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/range"], function(require, exports, module) {
+"use strict";
+
+var oop = require("./lib/oop");
+var dom = require("./lib/dom");
+var Range = require("./range").Range;
+
+
+function LineWidgets(session) {
+ this.session = session;
+ this.session.widgetManager = this;
+ this.session.getRowLength = this.getRowLength;
+ this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;
+ this.updateOnChange = this.updateOnChange.bind(this);
+ this.renderWidgets = this.renderWidgets.bind(this);
+ this.measureWidgets = this.measureWidgets.bind(this);
+ this.session._changedWidgets = [];
+ this.$onChangeEditor = this.$onChangeEditor.bind(this);
+
+ this.session.on("change", this.updateOnChange);
+ this.session.on("changeFold", this.updateOnFold);
+ this.session.on("changeEditor", this.$onChangeEditor);
+}
+
+(function() {
+ this.getRowLength = function(row) {
+ var h;
+ if (this.lineWidgets)
+ h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;
+ else
+ h = 0;
+ if (!this.$useWrapMode || !this.$wrapData[row]) {
+ return 1 + h;
+ } else {
+ return this.$wrapData[row].length + 1 + h;
+ }
+ };
+
+ this.$getWidgetScreenLength = function() {
+ var screenRows = 0;
+ this.lineWidgets.forEach(function(w){
+ if (w && w.rowCount && !w.hidden)
+ screenRows += w.rowCount;
+ });
+ return screenRows;
+ };
+
+ this.$onChangeEditor = function(e) {
+ this.attach(e.editor);
+ };
+
+ this.attach = function(editor) {
+ if (editor && editor.widgetManager && editor.widgetManager != this)
+ editor.widgetManager.detach();
+
+ if (this.editor == editor)
+ return;
+
+ this.detach();
+ this.editor = editor;
+
+ if (editor) {
+ editor.widgetManager = this;
+ editor.renderer.on("beforeRender", this.measureWidgets);
+ editor.renderer.on("afterRender", this.renderWidgets);
+ }
+ };
+ this.detach = function(e) {
+ var editor = this.editor;
+ if (!editor)
+ return;
+
+ this.editor = null;
+ editor.widgetManager = null;
+
+ editor.renderer.off("beforeRender", this.measureWidgets);
+ editor.renderer.off("afterRender", this.renderWidgets);
+ var lineWidgets = this.session.lineWidgets;
+ lineWidgets && lineWidgets.forEach(function(w) {
+ if (w && w.el && w.el.parentNode) {
+ w._inDocument = false;
+ w.el.parentNode.removeChild(w.el);
+ }
+ });
+ };
+
+ this.updateOnFold = function(e, session) {
+ var lineWidgets = session.lineWidgets;
+ if (!lineWidgets || !e.action)
+ return;
+ var fold = e.data;
+ var start = fold.start.row;
+ var end = fold.end.row;
+ var hide = e.action == "add";
+ for (var i = start + 1; i < end; i++) {
+ if (lineWidgets[i])
+ lineWidgets[i].hidden = hide;
+ }
+ if (lineWidgets[end]) {
+ if (hide) {
+ if (!lineWidgets[start])
+ lineWidgets[start] = lineWidgets[end];
+ else
+ lineWidgets[end].hidden = hide;
+ } else {
+ if (lineWidgets[start] == lineWidgets[end])
+ lineWidgets[start] = undefined;
+ lineWidgets[end].hidden = hide;
+ }
+ }
+ };
+
+ this.updateOnChange = function(delta) {
+ var lineWidgets = this.session.lineWidgets;
+ if (!lineWidgets) return;
+
+ var startRow = delta.start.row;
+ var len = delta.end.row - startRow;
+
+ if (len === 0) {
+ } else if (delta.action == 'remove') {
+ var removed = lineWidgets.splice(startRow + 1, len);
+ removed.forEach(function(w) {
+ w && this.removeLineWidget(w);
+ }, this);
+ this.$updateRows();
+ } else {
+ var args = new Array(len);
+ args.unshift(startRow, 0);
+ lineWidgets.splice.apply(lineWidgets, args);
+ this.$updateRows();
+ }
+ };
+
+ this.$updateRows = function() {
+ var lineWidgets = this.session.lineWidgets;
+ if (!lineWidgets) return;
+ var noWidgets = true;
+ lineWidgets.forEach(function(w, i) {
+ if (w) {
+ noWidgets = false;
+ w.row = i;
+ while (w.$oldWidget) {
+ w.$oldWidget.row = i;
+ w = w.$oldWidget;
+ }
+ }
+ });
+ if (noWidgets)
+ this.session.lineWidgets = null;
+ };
+
+ this.addLineWidget = function(w) {
+ if (!this.session.lineWidgets)
+ this.session.lineWidgets = new Array(this.session.getLength());
+
+ var old = this.session.lineWidgets[w.row];
+ if (old) {
+ w.$oldWidget = old;
+ if (old.el && old.el.parentNode) {
+ old.el.parentNode.removeChild(old.el);
+ old._inDocument = false;
+ }
+ }
+
+ this.session.lineWidgets[w.row] = w;
+
+ w.session = this.session;
+
+ var renderer = this.editor.renderer;
+ if (w.html && !w.el) {
+ w.el = dom.createElement("div");
+ w.el.innerHTML = w.html;
+ }
+ if (w.el) {
+ dom.addCssClass(w.el, "ace_lineWidgetContainer");
+ w.el.style.position = "absolute";
+ w.el.style.zIndex = 5;
+ renderer.container.appendChild(w.el);
+ w._inDocument = true;
+ }
+
+ if (!w.coverGutter) {
+ w.el.style.zIndex = 3;
+ }
+ if (!w.pixelHeight) {
+ w.pixelHeight = w.el.offsetHeight;
+ }
+ if (w.rowCount == null) {
+ w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;
+ }
+
+ var fold = this.session.getFoldAt(w.row, 0);
+ w.$fold = fold;
+ if (fold) {
+ var lineWidgets = this.session.lineWidgets;
+ if (w.row == fold.end.row && !lineWidgets[fold.start.row])
+ lineWidgets[fold.start.row] = w;
+ else
+ w.hidden = true;
+ }
+
+ this.session._emit("changeFold", {data:{start:{row: w.row}}});
+
+ this.$updateRows();
+ this.renderWidgets(null, renderer);
+ this.onWidgetChanged(w);
+ return w;
+ };
+
+ this.removeLineWidget = function(w) {
+ w._inDocument = false;
+ w.session = null;
+ if (w.el && w.el.parentNode)
+ w.el.parentNode.removeChild(w.el);
+ if (w.editor && w.editor.destroy) try {
+ w.editor.destroy();
+ } catch(e){}
+ if (this.session.lineWidgets) {
+ var w1 = this.session.lineWidgets[w.row]
+ if (w1 == w) {
+ this.session.lineWidgets[w.row] = w.$oldWidget;
+ if (w.$oldWidget)
+ this.onWidgetChanged(w.$oldWidget);
+ } else {
+ while (w1) {
+ if (w1.$oldWidget == w) {
+ w1.$oldWidget = w.$oldWidget;
+ break;
+ }
+ w1 = w1.$oldWidget;
+ }
+ }
+ }
+ this.session._emit("changeFold", {data:{start:{row: w.row}}});
+ this.$updateRows();
+ };
+
+ this.getWidgetsAtRow = function(row) {
+ var lineWidgets = this.session.lineWidgets;
+ var w = lineWidgets && lineWidgets[row];
+ var list = [];
+ while (w) {
+ list.push(w);
+ w = w.$oldWidget;
+ }
+ return list;
+ };
+
+ this.onWidgetChanged = function(w) {
+ this.session._changedWidgets.push(w);
+ this.editor && this.editor.renderer.updateFull();
+ };
+
+ this.measureWidgets = function(e, renderer) {
+ var changedWidgets = this.session._changedWidgets;
+ var config = renderer.layerConfig;
+
+ if (!changedWidgets || !changedWidgets.length) return;
+ var min = Infinity;
+ for (var i = 0; i < changedWidgets.length; i++) {
+ var w = changedWidgets[i];
+ if (!w || !w.el) continue;
+ if (w.session != this.session) continue;
+ if (!w._inDocument) {
+ if (this.session.lineWidgets[w.row] != w)
+ continue;
+ w._inDocument = true;
+ renderer.container.appendChild(w.el);
+ }
+
+ w.h = w.el.offsetHeight;
+
+ if (!w.fixedWidth) {
+ w.w = w.el.offsetWidth;
+ w.screenWidth = Math.ceil(w.w / config.characterWidth);
+ }
+
+ var rowCount = w.h / config.lineHeight;
+ if (w.coverLine) {
+ rowCount -= this.session.getRowLineCount(w.row);
+ if (rowCount < 0)
+ rowCount = 0;
+ }
+ if (w.rowCount != rowCount) {
+ w.rowCount = rowCount;
+ if (w.row < min)
+ min = w.row;
+ }
+ }
+ if (min != Infinity) {
+ this.session._emit("changeFold", {data:{start:{row: min}}});
+ this.session.lineWidgetWidth = null;
+ }
+ this.session._changedWidgets = [];
+ };
+
+ this.renderWidgets = function(e, renderer) {
+ var config = renderer.layerConfig;
+ var lineWidgets = this.session.lineWidgets;
+ if (!lineWidgets)
+ return;
+ var first = Math.min(this.firstRow, config.firstRow);
+ var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);
+
+ while (first > 0 && !lineWidgets[first])
+ first--;
+
+ this.firstRow = config.firstRow;
+ this.lastRow = config.lastRow;
+
+ renderer.$cursorLayer.config = config;
+ for (var i = first; i <= last; i++) {
+ var w = lineWidgets[i];
+ if (!w || !w.el) continue;
+ if (w.hidden) {
+ w.el.style.top = -100 - (w.pixelHeight || 0) + "px";
+ continue;
+ }
+ if (!w._inDocument) {
+ w._inDocument = true;
+ renderer.container.appendChild(w.el);
+ }
+ var top = renderer.$cursorLayer.getPixelPosition({row: i, column:0}, true).top;
+ if (!w.coverLine)
+ top += config.lineHeight * this.session.getRowLineCount(w.row);
+ w.el.style.top = top - config.offset + "px";
+
+ var left = w.coverGutter ? 0 : renderer.gutterWidth;
+ if (!w.fixedWidth)
+ left -= renderer.scrollLeft;
+ w.el.style.left = left + "px";
+
+ if (w.fullWidth && w.screenWidth) {
+ w.el.style.minWidth = config.width + 2 * config.padding + "px";
+ }
+
+ if (w.fixedWidth) {
+ w.el.style.right = renderer.scrollBar.getWidth() + "px";
+ } else {
+ w.el.style.right = "";
+ }
+ }
+ };
+
+}).call(LineWidgets.prototype);
+
+
+exports.LineWidgets = LineWidgets;
+
+});
+
+define("ace/ext/error_marker",["require","exports","module","ace/line_widgets","ace/lib/dom","ace/range"], function(require, exports, module) {
+"use strict";
+var LineWidgets = require("../line_widgets").LineWidgets;
+var dom = require("../lib/dom");
+var Range = require("../range").Range;
+
+function binarySearch(array, needle, comparator) {
+ var first = 0;
+ var last = array.length - 1;
+
+ while (first <= last) {
+ var mid = (first + last) >> 1;
+ var c = comparator(needle, array[mid]);
+ if (c > 0)
+ first = mid + 1;
+ else if (c < 0)
+ last = mid - 1;
+ else
+ return mid;
+ }
+ return -(first + 1);
+}
+
+function findAnnotations(session, row, dir) {
+ var annotations = session.getAnnotations().sort(Range.comparePoints);
+ if (!annotations.length)
+ return;
+
+ var i = binarySearch(annotations, {row: row, column: -1}, Range.comparePoints);
+ if (i < 0)
+ i = -i - 1;
+
+ if (i >= annotations.length)
+ i = dir > 0 ? 0 : annotations.length - 1;
+ else if (i === 0 && dir < 0)
+ i = annotations.length - 1;
+
+ var annotation = annotations[i];
+ if (!annotation || !dir)
+ return;
+
+ if (annotation.row === row) {
+ do {
+ annotation = annotations[i += dir];
+ } while (annotation && annotation.row === row);
+ if (!annotation)
+ return annotations.slice();
+ }
+
+
+ var matched = [];
+ row = annotation.row;
+ do {
+ matched[dir < 0 ? "unshift" : "push"](annotation);
+ annotation = annotations[i += dir];
+ } while (annotation && annotation.row == row);
+ return matched.length && matched;
+}
+
+exports.showErrorMarker = function(editor, dir) {
+ var session = editor.session;
+ if (!session.widgetManager) {
+ session.widgetManager = new LineWidgets(session);
+ session.widgetManager.attach(editor);
+ }
+
+ var pos = editor.getCursorPosition();
+ var row = pos.row;
+ var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function(w) {
+ return w.type == "errorMarker";
+ })[0];
+ if (oldWidget) {
+ oldWidget.destroy();
+ } else {
+ row -= dir;
+ }
+ var annotations = findAnnotations(session, row, dir);
+ var gutterAnno;
+ if (annotations) {
+ var annotation = annotations[0];
+ pos.column = (annotation.pos && typeof annotation.column != "number"
+ ? annotation.pos.sc
+ : annotation.column) || 0;
+ pos.row = annotation.row;
+ gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];
+ } else if (oldWidget) {
+ return;
+ } else {
+ gutterAnno = {
+ text: ["Looks good!"],
+ className: "ace_ok"
+ };
+ }
+ editor.session.unfold(pos.row);
+ editor.selection.moveToPosition(pos);
+
+ var w = {
+ row: pos.row,
+ fixedWidth: true,
+ coverGutter: true,
+ el: dom.createElement("div"),
+ type: "errorMarker"
+ };
+ var el = w.el.appendChild(dom.createElement("div"));
+ var arrow = w.el.appendChild(dom.createElement("div"));
+ arrow.className = "error_widget_arrow " + gutterAnno.className;
+
+ var left = editor.renderer.$cursorLayer
+ .getPixelPosition(pos).left;
+ arrow.style.left = left + editor.renderer.gutterWidth - 5 + "px";
+
+ w.el.className = "error_widget_wrapper";
+ el.className = "error_widget " + gutterAnno.className;
+ el.innerHTML = gutterAnno.text.join("<br>");
+
+ el.appendChild(dom.createElement("div"));
+
+ var kb = function(_, hashId, keyString) {
+ if (hashId === 0 && (keyString === "esc" || keyString === "return")) {
+ w.destroy();
+ return {command: "null"};
+ }
+ };
+
+ w.destroy = function() {
+ if (editor.$mouseHandler.isMousePressed)
+ return;
+ editor.keyBinding.removeKeyboardHandler(kb);
+ session.widgetManager.removeLineWidget(w);
+ editor.off("changeSelection", w.destroy);
+ editor.off("changeSession", w.destroy);
+ editor.off("mouseup", w.destroy);
+ editor.off("change", w.destroy);
+ };
+
+ editor.keyBinding.addKeyboardHandler(kb);
+ editor.on("changeSelection", w.destroy);
+ editor.on("changeSession", w.destroy);
+ editor.on("mouseup", w.destroy);
+ editor.on("change", w.destroy);
+
+ editor.session.widgetManager.addLineWidget(w);
+
+ w.el.onmousedown = editor.focus.bind(editor);
+
+ editor.renderer.scrollCursorIntoView(null, 0.5, {bottom: w.el.offsetHeight});
+};
+
+
+dom.importCssString("\
+ .error_widget_wrapper {\
+ background: inherit;\
+ color: inherit;\
+ border:none\
+ }\
+ .error_widget {\
+ border-top: solid 2px;\
+ border-bottom: solid 2px;\
+ margin: 5px 0;\
+ padding: 10px 40px;\
+ white-space: pre-wrap;\
+ }\
+ .error_widget.ace_error, .error_widget_arrow.ace_error{\
+ border-color: #ff5a5a\
+ }\
+ .error_widget.ace_warning, .error_widget_arrow.ace_warning{\
+ border-color: #F1D817\
+ }\
+ .error_widget.ace_info, .error_widget_arrow.ace_info{\
+ border-color: #5a5a5a\
+ }\
+ .error_widget.ace_ok, .error_widget_arrow.ace_ok{\
+ border-color: #5aaa5a\
+ }\
+ .error_widget_arrow {\
+ position: absolute;\
+ border: solid 5px;\
+ border-top-color: transparent!important;\
+ border-right-color: transparent!important;\
+ border-left-color: transparent!important;\
+ top: -5px;\
+ }\
+", "");
+
+});
+
+define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config"], function(require, exports, module) {
+"use strict";
+
+require("./lib/fixoldbrowsers");
+
+var dom = require("./lib/dom");
+var event = require("./lib/event");
+
+var Editor = require("./editor").Editor;
+var EditSession = require("./edit_session").EditSession;
+var UndoManager = require("./undomanager").UndoManager;
+var Renderer = require("./virtual_renderer").VirtualRenderer;
+require("./worker/worker_client");
+require("./keyboard/hash_handler");
+require("./placeholder");
+require("./multi_select");
+require("./mode/folding/fold_mode");
+require("./theme/textmate");
+require("./ext/error_marker");
+
+exports.config = require("./config");
+exports.require = require;
+exports.edit = function(el) {
+ if (typeof(el) == "string") {
+ var _id = el;
+ el = document.getElementById(_id);
+ if (!el)
+ throw new Error("ace.edit can't find div #" + _id);
+ }
+
+ if (el && el.env && el.env.editor instanceof Editor)
+ return el.env.editor;
+
+ var value = "";
+ if (el && /input|textarea/i.test(el.tagName)) {
+ var oldNode = el;
+ value = oldNode.value;
+ el = dom.createElement("pre");
+ oldNode.parentNode.replaceChild(el, oldNode);
+ } else if (el) {
+ value = dom.getInnerText(el);
+ el.innerHTML = '';
+ }
+
+ var doc = exports.createEditSession(value);
+
+ var editor = new Editor(new Renderer(el));
+ editor.setSession(doc);
+
+ var env = {
+ document: doc,
+ editor: editor,
+ onResize: editor.resize.bind(editor, null)
+ };
+ if (oldNode) env.textarea = oldNode;
+ event.addListener(window, "resize", env.onResize);
+ editor.on("destroy", function() {
+ event.removeListener(window, "resize", env.onResize);
+ env.editor.container.env = null; // prevent memory leak on old ie
+ });
+ editor.container.env = editor.env = env;
+ return editor;
+};
+exports.createEditSession = function(text, mode) {
+ var doc = new EditSession(text, mode);
+ doc.setUndoManager(new UndoManager());
+ return doc;
+}
+exports.EditSession = EditSession;
+exports.UndoManager = UndoManager;
+exports.version = "1.2.2";
+});
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ a && a.config.init(true);
+ if (!window.ace)
+ window.ace = a;
+ for (var key in a) if (a.hasOwnProperty(key))
+ window.ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/sample_amazon.html b/vendor/github.com/tdewolff/minify/benchmarks/sample_amazon.html
new file mode 100644
index 0000000..0f47025
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/sample_amazon.html
@@ -0,0 +1,10126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <!doctype html><!--[if lt IE 7]><html class="a-no-js a-lt-ie10 a-lt-ie9 a-lt-ie8 a-lt-ie7 a-ie6" data-19ax5a9jf="dingo"><![endif]--><!--[if IE 7]><html class="a-no-js a-lt-ie10 a-lt-ie9 a-lt-ie8 a-ie7" data-19ax5a9jf="dingo"><![endif]--><!--[if IE 8]><html class="a-no-js a-lt-ie10 a-lt-ie9 a-ie8" data-19ax5a9jf="dingo"><![endif]--><!--[if IE 9]><html class="a-no-js a-lt-ie10 a-ie9" data-19ax5a9jf="dingo"><![endif]--><!--[if !IE]><!--><html class="a-no-js" data-19ax5a9jf="dingo"><!--<![endif]--><head>
+<script type="text/javascript">var ue_t0=ue_t0||+new Date();</script>
+<script type='text/javascript'>
+var ue_id='1GM97J2XXNXR8Y322FQC',
+ue_csm = window,
+ue_err_chan = 'jserr-rw',
+ue = {};
+ue_csm.ue_hob=ue_csm.ue_hob||+new Date();(function(c){var a=c.ue,b=(Date.now||function(){return +new Date()});a.lr=[];a.log=function(f,e,d){if(a.lr.length==500){return}a.lr.push(["l",f,e,d,a.d(),c.ue_id])};a.log.isStub=1;a.d=function(d){return b()-(d?0:c.ue_t0)}})(ue_csm);ue_csm.ue_hoe=+new Date();
+ue_csm.ue_hob=ue_csm.ue_hob||+new Date();(function(f,a){var b="FATAL",c={ec:0,ecf:0,pec:0,ts:0,erl:[],ter:[],mxe:50,startTimer:function(){c.ts++;setInterval(function(){if(f.ue&&(c.pec<c.ec)){f.uex("at")}c.pec=c.ec},10000)}};function e(i,h){if(c.ec>c.mxe||!i){return}c.ec++;c.ter.push(i);h=h||{};var g=i.logLevel||h.logLevel;if(!g||(g==b)){c.ecf++}h.pageURL=""+(a.location?a.location.href:"");h.logLevel=g;h.attribution=i.attribution||h.attribution;c.erl.push({ex:i,info:h})}function d(l,k,g,i,h){var j={m:l,f:k,l:g,c:""+i,err:h,fromOnError:1,args:arguments};f.ueLogError(j);return false}d.skipTrace=1;e.skipTrace=1;f.ueLogError=e;f.ue_err=c;a.onerror=d})(ue_csm,window);ue_csm.ue_hoe=+new Date();
+
+
+var ue_url='/uedata/nvp/unsticky/178-3863399-4887466/Gateway/ntpoffrw',
+ue_sid='178-3863399-4887466',
+ue_mid='ATVPDKIKX0DER',
+ue_sn='www.amazon.com',
+ue_furl='fls-na.amazon.com',
+ue_navtiming=1,
+ue_log_idx=0,
+ue_fcsn=1,
+ue_isrw=true,
+ue_fpf='//fls-na.amazon.com/1/batch/1/OP/ATVPDKIKX0DER:178-3863399-4887466:1GM97J2XXNXR8Y322FQC$uedata=s:',
+ue_lnb=0,
+ue_lwl=0,
+ue_ran=0,
+ue_nb=0,
+ue_hpfi=0,
+ue_osfp=0,
+ue_novizfix=1,
+ue_ssbf=1,
+ue_fixnt=1,
+ue_mce='click';
+if (!window.ue_csm) {var ue_csm = window;}
+ue_csm.ue_hob=ue_csm.ue_hob||+new Date();function ue_viz(){(function(d,l,h){var k=0,b,n,f,a,c=["webkit","o","ms","moz",""],m=0,g=20,j="addEventListener";for(var e=0;(e<c.length&&!m);e++){b=c[e];n=(b?b+"H":"h")+"idden";m=typeof l[n]=="boolean";if(m){f=b+"visibilitychange";if(h.ue_novizfix!=1){a=(b?b+"V":"v")+"isibilityState"}else{a=b+"VisibilityState"}}}function o(r){if((d.ue.viz.length<g)&&!k){var q=r.type,i=r.originalEvent;if(!(/^focus./.test(q)&&i&&(i.toElement||i.fromElement||i.relatedTarget))){var s=l[a]||(q=="blur"||q=="focusout"?"hidden":"visible"),p=+new Date()-d.ue.t0;d.ue.viz.push(s+":"+p);if(s=="visible"){if(ue.isl){uex("at")}k=1}}}}o({});if(m){l[j](f,o,0)}if(d.ue&&m){d.ue.pageViz={event:f,propHid:n}}})(ue_csm,document,window)}ue_csm.ue_hoe=+new Date();
+ue_csm.ue_hob=ue_csm.ue_hob||+new Date();(function(n,j){n.ueinit=(n.ueinit||0)+1;var c={t0:j.aPageStart||n.ue_t0,id:n.ue_id,url:n.ue_url,rid:n.ue_id,a:"",b:"",h:{},r:{ld:0,oe:0,ul:0},s:1,t:{},sc:{},iel:[],ielf:[],fc_idx:{},viz:[],v:"0.108.0",d:n.ue&&n.ue.d,log:n.ue&&n.ue.log,lr:n.ue&&n.ue.lr,ulh:[],cfa2:0},p=n.ue_fpf?1:0,b="beforeunload",e;function i(s){return s&&s.replace&&s.replace(/^\s+|\s+$/g,"")}function d(s){return typeof s==="undefined"}function a(s){return typeof s==="function"}function g(t,s){return(a(t.now)&&!d(s))?(new Date(s+t.now())-(new Date())):0}c.oid=i(c.id);c.lid=i(c.id);n.ue=c;n.ue._t0=n.ue.t0;function f(u){if(!n.ue_fpf||!j.encodeURIComponent||!u){return}var s=new Image(),t=""+n.ue_fpf+j.encodeURIComponent(u)+":"+(+new Date()-n.ue_t0);n.ue.iel.push(s);s.src=t}n.ue.tagC=function(){var s={};return function(t){if(t){s[t]=1}var v=[];for(var u in s){if(s.hasOwnProperty(u)){v.push(u)}}return v}};n.ue.tag=n.ue.tagC();n.ue.ifr=((j.top!==j.self)||(j.frameElement))?1:0;function l(u,x,z,w){var y=w||(+new Date()),v,s;if(x||d(z)){if(u){v=x?m("t",x)||m("t",x,{}):n.ue.t;v[u]=y;for(s in z){if(z.hasOwnProperty(s)){m(s,x,z[s])}}}return y}}function m(u,v,w){var t=n.ue,s=(v&&v!=t.id)?t.sc[v]:t;if(!s){s=(t.sc[v]={})}if(u=="id"&&w){t.cfa2=1;if(n.ue_ran&&n.ue_cel){n.ue_cel.reset(w)}}return(s[u]=(w||s[u]))}function r(w,x,v,t,s){var u="on"+v,y=x[u];if(a(y)){if(w){n.ue.h[w]=y}}else{y=function(){}}x[u]=s?function(z){t(z);y(z)}:function(z){y(z);t(z)};x[u].isUeh=1}function k(C,w,B){function u(ad,ab){var Z=[ad],U=0,aa={},S,T;if(ab){Z.push("m=1");aa[ab]=1}else{aa=n.ue.sc}for(T in aa){if(aa.hasOwnProperty(T)){var V=m("wb",T),Y=m("t",T)||{},X=m("t0",T)||n.ue.t0,ac,W;if(ab||V==2){ac=V?U++:"";Z.push("sc"+ac+"="+T);for(W in Y){if(W.length<=3&&Y[W]){Z.push(W+ac+"="+(Y[W]-X))}}Z.push("t"+ac+"="+Y[C]);if(m("ctb",T)||m("wb",T)){S=1}}}}if(!x&&S){Z.push("ctb=1")}return Z.join("&")}function N(S,T){if(n.ue.b){var U=n.ue.b;n.ue.b="";G(U,S,T,1)}}function G(S,V,Y,U){if(!S){return}var W=new Image(),aa=!U||!n.ue.log||!(j.amznJQ||j.P)||(j.amznJQ&&j.amznJQ.Ok),T=n.ue_err,X,Z;if(n.ue_osfp!=1&&aa){n.ue.iel.push(W);W.src=S}if(n.ue_osfp!=3){if(p){f(S)}else{if(n.ue.log){X=j.chrome&&(V=="ul");Z=(!U&&X)?1:0;n.ue.log(S,"uedata",n.ue_svi?{n:1,img:Z}:{n:1});n.ue.ielf.push(S)}}}if(T&&!T.ts){T.startTimer()}N(V,Y)}function Q(T){if(!ue.collected){var V=T.timing,U=T.navigation,S=ue.t;if(V){S.na_=V.navigationStart;S.ul_=V.unloadEventStart;S._ul=V.unloadEventEnd;S.rd_=V.redirectStart;S._rd=V.redirectEnd;S.fe_=V.fetchStart;S.lk_=V.domainLookupStart;S._lk=V.domainLookupEnd;S.co_=V.connectStart;S._co=V.connectEnd;S.sc_=V.secureConnectionStart;S.rq_=V.requestStart;S.rs_=V.responseStart;S._rs=V.responseEnd;S.dl_=V.domLoading;S.di_=V.domInteractive;S.de_=V.domContentLoadedEventStart;S._de=V.domContentLoadedEventEnd;S._dc=V.domComplete;S.ld_=V.loadEventStart;S._ld=V.loadEventEnd;if(n.ue_fixnt){S.ntd=g(T,S.na_)+n.ue.t0}}if(U){S.ty=U.type+n.ue.t0;S.rc=U.redirectCount+n.ue.t0}ue.collected=1}}if(!w&&!d(B)){return}for(var s in B){if(B.hasOwnProperty(s)){m(s,w,B[s])}}l("pc",w,B);var I=m("id",w)||n.ue.id,y=n.ue.url+"?"+C+"&v="+n.ue.v+"&id="+I,x=m("ctb",w)||m("wb",w),M=j.performance||j.webkitPerformance,J=n.ue.bfini,A=(M&&M.navigation?M.navigation.type:e),z=(A==2),E=(A&&(A!=2)),t,P;if(x){y+="&ctb="+x}if(n.ueinit>1){y+="&ic="+n.ueinit}if(!n.ue.cfa2){if(J&&J>1){y+="&bfform=1";if(!E){n.ue.isBFT=(J-1)}}if(z){y+="&bfnt=1";n.ue.isBFT=n.ue.isBFT||1}if(n.ue_ssbf&&n.ue.ssw&&n.ue.isBFT){if(d(n.ue.isNRBF)){var L=n.ue.ssw(n.ue.oid);if(!L.e&&!d(L.val)){n.ue.isNRBF=(L.val>1)?0:1}}if(!d(n.ue.isNRBF)){y+="&nrbf="+n.ue.isNRBF}}else{n.ue_ssbf=0}if(n.ue.isBFT&&!n.ue.isNRBF){y+="&bft="+n.ue.isBFT}}if(n.ue._fi&&C=="at"&&(!w||w==I)){y+=n.ue._fi()}if((C=="ld"||C=="ul")&&(!w||w==I)){if(C=="ld"){if(j.onbeforeunload&&j.onbeforeunload.isUeh){j.onbeforeunload=null}if(j.chrome){for(P=0;P<ue.ulh.length;P++){o("beforeunload",ue.ulh[P])}}var O=document.ue_backdetect;if(O&&O.ue_back){O.ue_back.value++}if(n._uess){t=n._uess()}n.ue.isl=1}if(n.ue_navtiming&&M&&M.timing){m("ctb",I,"1");if(n.ue_navtiming==1){l("tc",e,e,M.timing.navigationStart)}}if(M){Q(M)}n.ue.t.hob=n.ue_hob;n.ue.t.hoe=n.ue_hoe;if(n.ue.ifr){y+="&ifr=1"}}l(C,w,B);var H=(C=="ld"&&w&&m("wb",w)),K=1,F,v,R;if(H){m("wb",w,2)}else{if(C=="ld"){c.lid=i(I)}}for(F in n.ue.sc){if(m("wb",F)==1){K=0;break}}if(H){if(!n.ue.s){y=u(y,null)}else{return}}else{R=u(y,null);if(R!=y){n.ue.b=R}if(t){y+=t}y=u(y,w||n.ue.id)}if(n.ue.b||H){for(F in n.ue.sc){if(m("wb",F)==2){delete n.ue.sc[F]}}}var D=0;if(ue._rt){y+="&rt="+ue._rt()}if(!H){n.ue.s=0;v=n.ue_err;if(v&&v.ec>0&&(v.pec<v.ec)){v.pec=v.ec;y+="&ec="+v.ec+"&ecf="+v.ecf}D=m("ctb",w);m("t",w,{})}if(y&&n.ue.tag&&n.ue.tag().length>0){y+="&csmtags="+n.ue.tag().join("|");n.ue.tag=n.ue.tagC()}if(y&&n.ue.viz&&n.ue.viz.length>0){y+="&viz="+n.ue.viz.join("|");n.ue.viz=[]}if(y&&!d(n.ue_pty)){y+="&pty="+n.ue_pty+"&spty="+n.ue_spty+"&pti="+n.ue_pti}if(y&&n.ue.tabid){y+="&tid="+n.ue.tabid}if(y&&n.ue.aftb){y+="&aftb=1"}if(n.ue._ui&&(!w||w==I)){y+=n.ue._ui()}n.ue.a=y;G(y,C,D,H)}function h(s,t,u){u=u||j;if(u.addEventListener){u.addEventListener(s,t,false)}else{if(u.attachEvent){u.attachEvent("on"+s,t)}}}ue.attach=h;function o(s,t,u){u=u||j;if(u.removeEventListener){u.removeEventListener(s,t,false)}else{if(u.detachEvent){u.detachEvent("on"+s,t)}}}ue.detach=o;function q(){var v=n.ue.r,s,w;function t(){n.onUl()}function u(x){return function(){if(!v[x]){v[x]=1;k(x)}}}n.onLd=u("ld");n.onLdEnd=u("ld");n.onUl=u("ul");s={stop:u("os")};if(!j.chrome){s[b]=n.onUl}else{h("beforeunload",t);ue.ulh.push(t)}for(w in s){if(s.hasOwnProperty(w)){r(0,j,w,s[w])}}if(n.ue_viz){ue_viz()}h("load",n.onLd);l("ue")}ue.reset=function(t,s){if(t){if(n.ue_cel){n.ue_cel.reset()}n.ue.t0=+new Date();n.ue.rid=t;n.ue.id=t;n.ue.fc_idx={};n.ue.viz=[]}};n.uei=q;n.ueh=r;n.ues=m;n.uet=l;n.uex=k;q()})(ue_csm,window);ue_csm.ue_hoe=+new Date();
+
+
+</script>
+<script type='text/javascript'>
+ue_csm.ue_hob=ue_csm.ue_hob||+new Date();(function(a){a.ue.cv={};a.ue.cv.scopes={};a.ue.count=function(d,b,c){var f={},e=a.ue.cv;f.counter=d;f.value=b;f.t=a.ue.d();if(c&&c.scope){e=a.ue.cv.scopes[c.scope]=a.ue.cv.scopes[c.scope]||{};f.scope=c.scope}if(b===undefined){return e[d]}e[d]=b;if(a.ue.log){a.ue.log(f,"csmcount",{c:1})}}})(ue_csm);ue_csm.ue_hoe=+new Date();
+</script>
+<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><script>var aPageStart = (new Date()).getTime();</script><meta charset="utf-8"><script>
+
+var GwInstrumentation = (function() {
+ var self = {};
+
+ var cfCount = 0;
+ var af = false;
+
+ self.markAF = function() {
+ af = true;
+ uet('af');
+ tryToFireCF();
+ P.register('af');
+ };
+
+ self.preload = function(src, onload) {
+ if(!src) { return; }
+ var img = new Image();
+ img.onload = function() {
+ onload && onload();
+ };
+ img.src = src;
+ };
+
+ self.CF = function() {
+ var cf;
+ if(typeof arguments[0] === 'string') {
+ var src = arguments[0];
+ cf = new self.CF();
+ self.preload(src, function() {
+ cf.ready();
+ });
+ }
+ else if(this.constructor === self.CF) { // invoked with the new keyword
+ cf = {};
+ cfCount++;
+ cf.ready = function() {
+ cfCount--;
+ tryToFireCF();
+ };
+ return cf;
+ }
+ else {
+ throw new Error("Incorrect invocation of GwInstrumentation.CF(...)");
+ }
+ };
+
+ return self;
+
+ function tryToFireCF() {
+ if(af && cfCount === 0) {
+ uet && uet('cf');
+ P && P.register('cf');
+ }
+ }
+
+}());
+
+</script>
+
+ <script>
+ GwInstrumentation.preload("http://g-ecx.images-amazon.com/images/G/01/gno/sprites/global-sprite-32-v4._V319941157_.png");
+ </script>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <meta http-equiv="x-dns-prefetch-control" content="on">
+ <link rel="dns-prefetch" href="http://g-ecx.images-amazon.com">
+ <link rel="dns-prefetch" href="http://z-ecx.images-amazon.com">
+ <link rel="dns-prefetch" href="http://ecx.images-amazon.com">
+ <link rel="dns-prefetch" href="http://completion.amazon.com">
+ <link rel="dns-prefetch" href="http://fls-na.amazon.com">
+ <!-- ue -->
+
+<!-- nav-config-asset-injection US::desktop::standard::31406:T1&42812:T1&42994:C::auiDebug=0::isSecure=0::jsOnEvent= navc-h9xf7zWEzrf5xSHREQESKj5ZXZmKnFWbmx3PveFsJLyJdR78xOR87sLm1ylnahRxEbTggpt+vEk= rid-1QAZFBKPAV6NKZ3984G0 seq-85 (Sun Nov 23 01:01:51 2014) **CACHED-BY-NCCC** -->
+<link rel="stylesheet" href="http://z-ecx.images-amazon.com/images/G/01/AUIClients/NavAuiBlackbeltAssets-cc8372c8e2be5c57edb3a442829fb59e0a0ef6c5.min._V2_.css" />
+
+
+
+ <script>
+ var d = document.documentElement;
+ d.setAttribute('data-useragent', navigator.userAgent);
+ d.setAttribute('data-platform', navigator.platform);
+ </script>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <script>
+ (function() {
+ GwInstrumentation.CF("http://g-ecx.images-amazon.com/images/G/01/kindle/merch/2014/campaign/PreHoliday/HD6_HolidayTravel-GW2._UX1500_SX1500_V320366459_.jpg");
+ }());
+ </script>
+
+
+ <link rel="stylesheet" href="http://z-ecx.images-amazon.com/images/G/01/AUIClients/AmazonUI-c3f8c71c9a4a1044a53d3a9a5002119252491104.rendering_engine-not-trident.weblab-AUI_CSS_REDUCTION_28708-T1.min._V2_.css" />
+<link rel="stylesheet" href="http://z-ecx.images-amazon.com/images/G/01/AUIClients/AmazonGatewayAuiAssets-5f50bfd83b0ebe0757c2e36b035c3f94b0119cbd.min._V2_.css" />
+
+ <script>
+(function(){(function(j,s,t,o){function n(b){h&&h.count&&h.count("aui:"+b,(h.count("aui:"+b)||0)+1)}function v(b){try{return b.test(navigator.userAgent)}catch(i){return!1}}function w(b,i,a){b.addEventListener?b.addEventListener(i,a,!1):b.attachEvent&&b.attachEvent("on"+i,a)}function e(b,i,a,c){i=i&&a?i+b+a:i||a;return c?e(b,i,c):i}function l(){return setTimeout(C,0)}function C(){for(var b=l(),i=c();E.length;)if(E.shift()(),c()-i>50)return;clearTimeout(b);g=!1}function x(b,i){var a=b.length,c=a,f=
+function(){c--||(E.push(i),g||(l(),g=!0))};for(f();a--;)F[b[a]]?f():(y[b[a]]=y[b[a]]||[]).push(f)}function d(b,i,a,c,f){return function(m,e){var g=f||this;typeof m==="function"&&(e=m,m="anon"+J++);var d=g.guardError(m,function(){for(var a=[],f=0;f<b.length;f++)a[f]=z.hasOwnProperty(b[f])?z[b[f]]:o;f=null;c?f=e:typeof e==="function"&&(f=e.apply(j,a));if(i){z[m]=f;a=m;for(F[a]=!0;(y[a]||[]).length;)y[a].shift()();delete y[a]}});z.hasOwnProperty(m)&&g.error("Component already registered",m);z[m]=o;a?
+d():x(b,d)}}function k(b){return function(){return{execute:d(arguments,!1,b,!1,this),register:d(arguments,!0,b,!1,this)}}}function A(b,i){for(var a=0;a<i.length;a++)G[i[a]]&&b.error("Asset already loaded containing: "+i[a],i[a]);for(;a--;)G[i[a]]=!0}function u(b,i,a,c){var f=s.createElement(b?"script":"link");w(f,"error",c);if(b){f.type="text/javascript";f.async=!0;if(a)b=j.InstallTrigger!==o,a=j.chrome,c=v(/MSIE 10/),(b||a||c)&&/AUIClients.+_V2_/.test(i)&&f.setAttribute("crossorigin","anonymous");
+f.src=i}else f.rel="stylesheet",f.href=i;s.getElementsByTagName("head")[0].appendChild(f)}function p(b,c){return function(a,e){function f(){u(c,a,g,function(){H&&g?(g=!1,n("resource_retry"),f()):(n("resource_error"),b.log("Asset failed to load: "+a))})}if(I[a])return!1;A(b,e||[]);I[a]=!0;n("resource_count");var g=!0;return!f()}}function B(b,c){return function(a,g){var f=this;return function(){g||(g=a,a=o);try{g.apply(this,arguments)}catch(d){var h=j.console;if(h&&h.error&&f.log(d,c,a))h.error(e(String.fromCharCode(10),
+e(": ",b,a,d.message),d.stack||d));else throw d instanceof Error?d:Error(e(": ",b,a,d));}}}}function q(b){this.log=function(c,a,g){var f=j.ueLogError;return f?(f({message:c,logLevel:a||"ERROR",attribution:e(":",b,g)}),!0):!1};this.error=function(c,a,g,f){throw Error(e(" @ ",e(":",f,c),e(":",b,a,g)));};this.guardError=B(b);this.guardFatal=B(b,"FATAL");this.load={js:p(this,!0),css:p(this)}}var r=j.AmazonUIPageJS||j.P;if(r&&r.when&&r.register)throw Error("A copy of P has already been loaded on this page.");
+var h=j.ue;h&&h.tag&&(h.tag("aui"),h.tag("aui:aui_build_date:3.14.7.1-2014-11-14"));var c=t.now=t.now||function(){return+new t},E=[],g=!1;v(/OS 6_[0-9]+ like Mac OS X/i)&&w(j,"scroll",l);var I={},G={},J=0,z={},F={},y={},D,H=!1,H=!0;q.prototype={declare:d([],!0,!0,!0),register:d([],!0),execute:d([]),AUI_BUILD_DATE:"3.14.7.1-2014-11-14",when:k(),now:k(!0),trigger:function(b,g){var a=j.aPageStart||NaN,d=c(),a={data:g,pageElapsedTime:d-a,triggerTime:d};this.declare(b,a);D&&D(b,a)},handleTriggers:function(b){D&&
+this.error("Trigger handler already registered");D=b},attributeErrors:function(b){return new q(b)}};j.AmazonUIPageJS=new q})(window,document,Date);window.P=window.AmazonUIPageJS;if(document.addEventListener){var C;document.addEventListener("DOMContentLoaded",C=function(){window.AmazonUIPageJS.trigger("a-domready");document.removeEventListener("DOMContentLoaded",C,!1)},!1)}window.AmazonUIPageJS.register("p-weblab",function(){return{}});window.AmazonUIPageJS.when("p-weblab").register("p-detect",function(j){function s(c,
+d){for(var g=c.className.split(" "),e=g.length;e--;)if(g[e]===d)return;c.className+=" "+d}function t(c,d){for(var g=c.className.split(" "),e=[],h;(h=g.pop())!==w;)h&&h!==d&&e.push(h);c.className=e.join(" ")}function o(c){try{return c()}catch(d){return!1}}function n(){if(p){var c=window.innerWidth?{w:window.innerWidth,h:window.innerHeight}:{w:e.clientWidth,h:e.clientHeight},h=!1;Math.abs(c.w-q.w)>5||c.h-q.h>50?(q=c,r=4,(h=d.mobile||d.tablet?c.w>c.h:c.w>=1250)?s(e,"a-ws"):t(e,"a-ws")):r--&&(B=setTimeout(n,
+16))}}function v(){clearTimeout(B);r=4;n()}var w,e=document.documentElement,l;try{l=navigator.userAgent}catch(C){l=""}var x=function(){var c="Khtml,O,ms,Moz,Webkit".split(","),d=document.createElement("div");return{testGradients:function(){d.style.cssText=("background-image:"+"-webkit- ".split(" ").join("gradient(linear,left top,right bottom,from(#9f9),to(white));background-image:")+c.join("linear-gradient(left top,#9f9, white);background-image:")).slice(0,-17);return d.style.backgroundImage.indexOf("gradient")>
+-1},test:function(g){for(var e=g.charAt(0).toUpperCase()+g.substr(1),g=(c.join(e+" ")+e+" "+g).split(" "),e=g.length;e--;)if(d.style[g[e]]==="")return!0;return!1},testTransform3d:function(){var c=!1;if(window.matchMedia)c=window.matchMedia("(-webkit-transform-3d)").matches;return c}}}(),d={audio:function(){return!!document.createElement("audio").canPlayType},video:function(){return!!document.createElement("video").canPlayType},canvas:function(){return!!document.createElement("canvas").getContext},
+offline:function(){return navigator.hasOwnProperty&&navigator.hasOwnProperty("onLine")&&navigator.onLine},dragDrop:function(){return"draggable"in document.createElement("span")},geolocation:function(){return!!navigator.geolocation},history:function(){return!(!window.history||!window.history.pushState)},autofocus:function(){return"autofocus"in document.createElement("input")},inputPlaceholder:function(){return"placeholder"in document.createElement("input")},textareaPlaceholder:function(){return"placeholder"in
+document.createElement("textarea")},localStorage:function(){return"localStorage"in window&&window.localStorage!==null},orientation:function(){return"orientation"in window},touch:function(){return"ontouchend"in document},gradients:function(){return x.testGradients()},hires:function(){return window.devicePixelRatio&&window.devicePixelRatio>=1.5},transform3d:function(){return x.testTransform3d()},touchScrolling:function(){return RegExp("Windowshop|android.([3-9]|[L-Z])|OS ([5-9]|[1-9][0-9]+)(_[0-9]{1,2})+ like Mac OS X|Chrome|Silk|Firefox|Trident"+
+String.fromCharCode(92)+"/.+?; Touch","i").test(l)},ios:function(){return!!l.match(/OS [1-9][0-9]*(_[0-9]*)+ like Mac OS X/i)},android:function(){return!!l.match(/android [1-9]/i)},mobile:function(){return/(^| )a-mobile( |$)/.test(e.className)},tablet:function(){return/(^| )a-tablet( |$)/.test(e.className)}},k;for(k in d)d.hasOwnProperty(k)&&(d[k]=o(d[k]));for(var A="textShadow textStroke boxShadow borderRadius borderImage opacity transform transition".split(" "),u=0;u<A.length;u++)d[A[u]]=o(function(){return x.test(A[u])});
+var p=!0,B=0,q={w:0,h:0},r=4;n();typeof window.addEventListener==="function"?window.addEventListener("resize",v,!1):window.attachEvent("onresize",v);t(e,"a-no-js");s(e,"a-js");k=[];for(var h in d)d.hasOwnProperty(h)&&d[h]&&k.push("a-"+h.replace(/([A-Z])/g,function(c){return"-"+c.toLowerCase()}));for(h in j)j.hasOwnProperty(h)&&k.push("a-"+(h+"-"+j[h]).toLowerCase());s(e,k.join(" "));e.setAttribute("data-aui-build-date",window.AmazonUIPageJS.AUI_BUILD_DATE);return{capabilities:d,toggleResponsiveGrid:function(c){(p=
+c===w?!p:!!c)&&n()},responsiveGridEnabled:function(){return p}}})})();
+//Locally override
+</script>
+<script>
+(window.AmazonUIPageJS ? AmazonUIPageJS : P).when('cf').execute(function() {
+ (window.AmazonUIPageJS ? AmazonUIPageJS : P).load.js('http://z-ecx.images-amazon.com/images/G/01/AUIClients/AmazonUI-c78535156e8f8ee3f2f2f17f8f6902bbe8c5ce25.rendering_engine-not-trident.weblab-AUI_CSS_REDUCTION_28708-T1.min._V2_.js', ['AmazonUIjQuery', 'AmazonUIBaseJS', 'AmazonUIBaseCSS', 'AmazonUITouchJS', 'AmazonUIPopoverJS', 'AmazonUIPopoverCSS', 'AmazonUIPopover', 'AmazonUIComponents', 'AmazonUICompatJS', 'AmazonUICarousel', 'AmazonUI']);
+});
+(window.AmazonUIPageJS ? AmazonUIPageJS : P).when('cf').execute(function() {
+ (window.AmazonUIPageJS ? AmazonUIPageJS : P).load.js('http://z-ecx.images-amazon.com/images/G/01/AUIClients/Nav-cb69b4b8eec21f7f069285cea2390ed2ad7c013c._V2_.js', ['NavAuiShim', 'RetailSearchAutocompleteAuiAssets', 'RetailSearchClientSideLoggingAuiAssets']);
+});
+ (window.AmazonUIPageJS ? AmazonUIPageJS : P).load.js('http://z-ecx.images-amazon.com/images/G/01/AUIClients/AmazonGatewayAuiAssets-b277c73516ec6a92a6f7b179bb53a1b9c76497aa.min._V2_.js', ['AmazonGatewayAuiAssets']);
+</script>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<title>Amazon.com: Online Shopping for Electronics, Apparel, Computers, Books, DVDs &amp; more</title>
+<meta name="description" content="Online shopping from the earth&#39;s biggest selection of books, magazines, music, DVDs, videos, electronics, computers, software, apparel &amp; accessories, shoes, jewelry, tools &amp; hardware, housewares, furniture, sporting goods, beauty &amp; personal care, broadband &amp; dsl, gourmet food &amp; just about anything else."/>
+<meta name="keywords" content="Amazon, Amazon.com, Books, Online Shopping, Book Store, Magazine, Subscription, Music, CDs, DVDs, Videos, Electronics, Video Games, Computers, Cell Phones, Toys, Games, Apparel, Accessories, Shoes, Jewelry, Watches, Office Products, Sports &amp; Outdoors, Sporting Goods, Baby Products, Health, Personal Care, Beauty, Home, Garden, Bed &amp; Bath, Furniture, Tools, Hardware, Vacuums, Outdoor Living, Automotive Parts, Pet Supplies, Broadband, DSL"/>
+<meta name="google" content="nositelinkssearchbox"/>
+<meta name="google-site-verification" content="9vpzZueNucS8hPqoGpZ5r10Nr2_sLMRG3AnDtNlucc4" />
+<link rel="canonical" href="http://www.amazon.com/" />
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
+
+
+<meta property="fb:app_id" content="164734381262" />
+<meta name="twitter:card" value="summary"/>
+<meta name="twitter:site:id" value="20793816"/>
+<meta property="og:image" content="http://g-ec2.images-amazon.com/images/G/01/social/api-share/amazon_logo_500500._V323939215_.png" xmlns:og="http://opengraphprotocol.org/schema/" />
+<meta property="og:description" content="Online shopping from the earth&#39;s biggest selection of books, magazines, music, DVDs, videos, electronics, computers, software, apparel &amp; accessories, shoes, jewelry, tools &amp; hardware, housewares, furniture, sporting goods, beauty &amp; personal care, broadband &amp; dsl, gourmet food &amp; just about anything else." xmlns:og="http://opengraphprotocol.org/schema/" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- aui-sgn-ff begin -->
+
+ <div id="css-free-form">
+ <style type="text/css">
+ .scalable-image-map img { height: auto; }
+ .a-lt-ie9 .youtique { display: none !important; }
+ </style>
+ <script>
+ P.when('A','ready').execute(function(A) {
+ A.$('.feed-carousel:visible').first().addClass('first-carousel');
+ });
+ </script>
+ </div>
+
+<!-- aui-sgn-ff end -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!-- aui-sgn-ff begin -->
+
+ <style type="text/css">
+ /* random blue lines in hero when clicked */
+ area:focus {
+ outline:0;
+ }
+ /* page-widening div in RHF */
+ .rhfWrapper #white-mask {
+ max-width:1440px;
+ }
+ /* problems with Youtique in safari */
+ #a-page .youtique .feed-carousel {
+ height:100%;
+ }
+ </style>
+ <style>
+ #a-page .yt-title-block-left,
+ #a-page .yt-title-block-right {
+ display:none;
+ }
+ </style>
+ <script>
+ P.when("A", "ready").execute(function(A) {
+ var $ = A.$;
+ var $yt_title_block_left = $(".yt-title-block-left");
+ var $yt_title_block_right = $(".yt-title-block-right");
+ var do_not_capitalize = {'a':1,'an':1,'the':1,'and':1,'but':1,'or':1,'for':1,'nor':1,'on':1,'at':1,'to':1,'from':1,'by':1};
+ $yt_title_block_left.each(function() {
+ var title = $(this).text();
+ title = title.replace(/\w+/g, function(match) {
+ if(do_not_capitalize[match]) { return match; }
+ return match.substr(0,1).toUpperCase()+match.substr(1);
+ });
+ $(this).find("span").text(title);
+ });
+ $yt_title_block_right.find("a").text('See more');
+ $yt_title_block_left.fadeIn();
+ $yt_title_block_right.fadeIn();
+ });
+ </script>
+
+<!-- aui-sgn-ff end -->
+
+
+<noscript>
+<style>
+#sidebar {
+ display:none !important;
+}
+</style>
+</noscript>
+<style>
+
+ #a-page .fresh-shoveler .as-title-block-left,
+ #a-page .fresh-shoveler .as-title-block-right {
+ width:auto;
+ float:left;
+ }
+ #a-page .asin-shoveler .as-title-block-right {
+ padding-left:15px;
+ line-height:35px;
+ }
+ #a-page .uber-widget .as-title-block-right {
+ padding-left:15px;
+ line-height:36px;
+ }
+ #a-page .fresh-shoveler .as-title-block-left .a-color-secondary,
+ #a-page .fresh-shoveler .as-title-block-right .a-color-base,
+ #a-page .fresh-shoveler .as-title-block-right .as-title-divider {
+ display:none;
+ }
+
+#pageContent {
+ max-width:1500px;
+ min-width:1000px;
+ margin:auto;
+}
+#pageContent hr {
+ margin:0 auto;
+ height:1px;
+ background-color:#eee;
+ color:#eee;
+ border:none;
+}
+#sidebar hr {
+ width:100%;
+ margin:15px 0 15px 0;
+}
+#sidebar hr.desktop-ad-atf-hr {
+ margin:0 0 15px 0;
+}
+#pageContent a {
+ outline:0;
+}
+.billboardRowWrapper {
+ padding:12px 0;
+}
+#a-page .billboardRow {
+ background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIW2N8/vz5fwAJKAO2z0UyAQAAAABJRU5ErkJggg==) CENTER CENTER REPEAT-Y;
+}
+#a-page .billboardRow img {
+ max-width:100%;
+ max-height:200px;
+ width:auto;
+ height:auto;
+}
+.billboard {
+ vertical-align:middle;
+ display:inline-block;
+ width:100%;
+ height:100%;
+ padding:0 10px 0 10px;
+ max-height:200px;
+ text-align:center;
+}
+
+#sidebar {
+ position:relative;
+ padding:10px 23px 10px 23px;
+ background:white;
+}
+#sidebar::before {
+ content:'';
+ position: absolute; top: 0; left: 0; right: 0; bottom: 0;
+ background:rgba(0,0,0,0.025);
+ z-index:2;
+ pointer-events: none;
+}
+.a-js #gw-content-grid .a-fixed-right-grid-inner {
+ background: url(data:image/gif;base64,R0lGODlhNgEBAIABAPj4+P///yH+EUNyZWF0ZWQgd2l0aCBHSU1QACwAAAAANgEBAAACD4SPqcvtD6OctNqLs97cFQA7) TOP RIGHT REPEAT-Y;
+}
+.a-lt-ie10 #gw-content-grid .a-fixed-right-grid-inner {
+ background: none !important;
+}
+html[data-useragent*='MSIE 10.0'] #gw-content-grid .a-fixed-right-grid-inner {
+ background: none !important;
+}
+.a-lt-ie10 #sidebar::before {
+ display:none;
+}
+#sidebar .cropped-image-map-size {
+ max-height:200px !important;
+}
+html[data-useragent*='MSIE 10.0'] #sidebar::before {
+ display:none;
+}
+#btfContent {
+ padding:5px 20px 0 20px;
+}
+.sidekick,.desktop-row,.bestsellers {
+ width:100%;
+}
+.gw-ftGr-desktop-hero img {
+ height:300px !important;
+ width:1500px !important;
+}
+#gw-desktop-herotator .cropped-image-map-size {
+ height:300px !important;
+ width:100% !important;
+}
+#gw-desktop-herotator {
+ position:relative;
+}
+#gw-desktop-herotator-controls {
+ position:absolute;
+ height:0px;
+ bottom:0px;
+ width:100%;
+}
+#gw-desktop-herotator-controls ol {
+ margin:0 auto;
+ padding:0;
+ position:relative;
+ bottom:24px;
+}
+#gw-desktop-herotator-controls ol li {
+ list-style:none;
+ display:none;
+}
+.gw-desktop-herotator-ready #gw-desktop-herotator-controls ol li {
+ display:block;
+ float:left;
+ padding:0 5px;
+}
+.gw-icon {
+ background-size: 100px 60px;
+ background-image: url(http://g-ecx.images-amazon.com/images/G/01/gateway/sprites/gw-2014_sprite-v1-hires._V321904448_.png);
+}
+.gw-desktop-herotator-ready #gw-desktop-herotator-controls ol li a {
+ display:block;
+ width: 12px;
+ height: 13px;
+ background-size: 100px 60px;
+ background-image: url(http://g-ecx.images-amazon.com/images/G/01/gateway/sprites/gw-2014_sprite-v1-hires._V321904448_.png);
+ background-position: -18px -44px;
+ background-repeat: no-repeat;
+}
+.gw-desktop-herotator-ready #gw-desktop-herotator-controls ol li a.active,
+#a-page .gw-desktop-herotator-ready #gw-desktop-herotator-controls ol li a:hover {
+ background-position: -30px -44px;
+}
+#gw-desktop-herotator-controls .gw-text {
+ position:absolute;
+ top:-10000px;
+ left:-10000px;
+}
+.displayAd {
+ padding-top:5px;
+ width:300px;
+ margin-left:-18px;
+ z-index:3;
+ position:relative;
+ background-color:white;
+}
+.displayAd a {
+ color:#888 !important;
+ top:-5px !important;
+ right:0px !important;
+}
+#DAr2 {
+ height:270px !important;
+}
+#DAr2::before, #DAr7::before {
+ content:'';
+ position: absolute; top: 0; left: 0; right: 0; bottom: 0;
+ background:rgba(0,0,0,0.025);
+ z-index:2;
+ pointer-events: none;
+}
+.a-lt-ie10 #DAr2::before, .a-lt-ie10 #DAr7::before {
+ display:none;
+}
+html[data-useragent*='MSIE 10.0'] #DAr2::before,
+html[data-useragent*='MSIE 10.0'] #DAr7::before {
+ display:none;
+}
+
+#rhfMainHeading {
+ font-size: 20px !important;
+ color: #444 !important;
+ font-weight: normal !important;
+}
+.rhf_header {
+ padding: 20px 10px 0 10px !important;
+}
+
+#mainContent .slot-hr {
+ display: none;
+}
+.a-touch #mainContent .slot-hr {
+ display: block;
+}
+.a-touch #mainContent .youtique {
+ border-bottom:1px solid #eee;
+}
+.first-carousel .feed-carousel-control {
+ display: inline !important;
+}
+
+.a-lt-ie9 .rhf-RVIs img {
+ max-width: none;
+ }
+
+.a-lt-ie9 .gw-desktop-herotator-ready #gw-desktop-herotator-controls ol li a,
+.a-lt-ie9 .gw-icon {
+ background-image: url(http://g-ecx.images-amazon.com/images/G/01/gateway/sprites/gw-2014_sprite-v1._V321904159_.png);
+}
+
+.a-lt-ie9 .gw-ftGr-desktop-hero span {
+ width:1500px;
+ }
+
+</style>
+
+
+ <script type="text/javascript">
+ window.AmazonUIPageJS.when('p-detect').execute(function(d) {
+ if(d.capabilities.touch) return;
+ d.capabilities.touch = 'ontouchend' in document || navigator.MaxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;
+ if(d.capabilities.touch) document.documentElement.className += ' a-touch';
+ });
+ </script>
+ <script type="text/javascript">
+(function(f,c){var b=[];function d(g){b.push(g)}function a(h){if(!h){return}var g=f.head||f.getElementsByTagName("head")[0]||f.documentElement,i=f.createElement("script");i.async="async";i.src=h;g.insertBefore(i,g.firstChild)}function e(){ue.uels=a;for(var g=0;g<b.length;g++){a(b[g])}ue.deffered=1}if(c.ue){ue.uels=d;if(c.ue.attach){c.ue.attach("load",e)}}})(document,window);
+if (window.ue_csm) {
+ window.ue_csm.useCel = 1;
+ window.ue_csm.useCelFF = 20;
+}
+
+ if (window.P && P.load && P.load.js && P.when) {
+ P.when('ready').execute(function() {
+ P.load.js("http://z-ecx.images-amazon.com/images/G/01/browser-scripts/csm-all/csm-all-min-2447272645._V1_.js", ["csm_cel"]);
+ });
+}
+ else if (window.ue && window.ue.uels) {
+ ue.uels("http://z-ecx.images-amazon.com/images/G/01/browser-scripts/csm-all/csm-all-min-2447272645._V1_.js");
+}
+ else if (window.amznJQ) {
+ amznJQ.addLogical('csm-all', ["http://z-ecx.images-amazon.com/images/G/01/browser-scripts/csm-all/csm-all-min-2447272645._V1_.js"]);
+ amznJQ.available('csm-all', function() {});
+}
+
+
+var ue_tbno = 0,
+ue_tble = 0,
+ue_sstb = 1,
+ue_ssle = 0,
+ue_tbpv = 0;
+
+(function(c,m){var b=("; expires="+new Date(+new Date()+604800000).toGMTString()),j,h=c.ue_sstb,p=c.ue_tbno,k=c.ue_tble,i=c.ue_tbpv,o=c.ue||{},e=i&&o.pageViz&&o.pageViz.event&&o.pageViz.propHid;function n(q){j=q;document.cookie="csm-hit="+q+("|"+(+new Date()))+b+"; path=/"}function l(){var r="",t=o.isBFT?"b":"s",u=""+o.oid,q=""+o.lid,s=u;if((u!=q)&&(q.length==20)){t+="a";s+=("-"+q)}if(h&&o.tabid){r=o.tabid+"+"}r+=(t+"-"+s);return r}function d(r){var q=l();if((p||(q!=j))&&(q.length<100)){n(q)}if(k){a(""+(r?r.type:"interaction")+" "+q)}}function g(){j=0;if(k){a("blur")}}function a(q){if(o.log){o.log(q,"csm")}}function f(q){if(m[o.pageViz.propHid]===false){g()}else{if(m[o.pageViz.propHid]===true){d({type:"visible"})}}}if(o.attach){o.attach("click",d);o.attach("keyup",d);if(!p){if(!e||(i==4)||(i==5)){o.attach("focus",d);o.attach("blur",g)}if(e){o.attach(o.pageViz.event,f)}if(e&&((i==3)||(i==5))){f({})}}}o.aftb=1})(ue_csm,document);
+(function(f,g){var i=f.ue||{},a="",d="csmtid",e,b,h,j;function c(m,o){var n={};if(!h||!b){try{var k=g.sessionStorage;if(!k){b=1}else{if(m){if(typeof o!=="undefined"){k.setItem(m,o)}else{n.val=k.getItem(m)}}}}catch(l){h=1}}if(h){n.e=1}return n}e=c(d);if(b){a="NA"}else{if(e.e){a="ET"}else{a=e.val;if(!a){a=i.oid||"NI";c(d,a)}j=c(i.oid);if(!j.e){j.val=j.val||0;c(i.oid,j.val+1)}i.ssw=c}}i.tabid=a})(ue_csm,window);
+(function(c){var a="[CSM] Alert invocation detected with argument: ",e="WARN",b=c.alert;function d(){if(c.ueLogError){c.ueLogError({message:a+arguments[0],logLevel:e})}Function.prototype.apply.apply(b,[c,arguments||[]])}window.alert=d})(window);
+(function(c,g,k){var n=c.ue,b=c.uex,h=0,j=0,l,m,e,f,a={click:1,mousemove:2,scroll:3,keydown:4};if(!n||!b){return}function p(r){if(j){return}j=a[r.type];if(typeof r.clientX==="undefined"){e=r.pageX;f=r.pageY}else{e=r.clientX;f=r.clientY}if(j==2&&(!l||(l==e&&m==f))){l=e;m=f;j=0;return}for(var q in a){if(a.hasOwnProperty(q)){n.detach(q,p,k)}}if(n.isl){g.setTimeout(function(){b("at",n.id)},0)}}function o(){var i="";if(!h&&j){h=1;i+="&ui="+j}return i}for(var d in a){if(a.hasOwnProperty(d)){n.attach(d,p,k)}}n._ui=o})(ue_csm,window,document);
+(function(b,g){var h=20,i=50,f="length",j=b.ue,d="getEntriesByType";function a(m,l){return m.filter(function(n){return n.initiatorType==l})}function e(l,n){if(!j.t[l]){return}var u=j.t[l]-j._t0,m=n.filter(function(v){return v.responseEnd!==0&&(k(v)<u)}),q=a(m,"script"),o=a(m,"link"),s=a(m,"img"),t=m.map(function(w){var v=w.name.match(new RegExp("^(https|http)?://(.+?)/","i"));return v&&v[2]}).filter(function(x,w,v){return x&&v.lastIndexOf(x)==w}),p=m.filter(function(v){return v.duration<h}),r=((u-Math.max.apply(null,m.map(k)))<i)|0;if(l=="af"){j._afjs=q.length}return l+":"+[m[f],q[f],o[f],s[f],t[f],p[f],r].join("-")}function k(l){return l.responseEnd-(j._t0-g.timing.navigationStart)}function c(){var o=g[d]("resource"),n=e("cf",o),l=e("af",o),m=e("ld",o);delete j._rt;j._ld=j.t.ld-j._t0;if(j._art){j._art()}return[n,l,m].join("_")}j._rre=k;j._rt=g&&g.timing&&g[d]&&c})(ue_csm,window.performance);
+
+</script>
+</head>
+
+ <body><script type='text/javascript'>
+(function(){window.amzn=window.amzn||{};amzn.copilot=amzn.copilot||{};var f=window,k=document;var d=k.head||k.getElementsByTagName("head")[0],m="cpidv",b=0,j="cpJQUnavailable",a="cpLoadResourceError";amzn.copilot.checkCoPilotSession=function(){if(k.cookie.match(m)){if(typeof jQuery!=="undefined"){i(jQuery)}else{if(f.P&&f.P.when){f.P.when("jQuery").execute(function(n){i(n)})}else{if(f.amznJQ&&f.amznJQ.available){f.amznJQ.available("jQuery",function(){i(jQuery)})}else{c()}}}}};var c=function(){if(!b){b=1;if(k.addEventListener){k.addEventListener("DOMContentLoaded",amzn.copilot.checkCoPilotSession,false)}else{if(k.attachEvent){k.attachEvent("onreadystatechange",function(){if(k.readyState==="complete"){amzn.copilot.checkCoPilotSession()}})}}}else{if(f.ue&&(typeof f.ue.count==="function")){f.ue.count(j,1)}}};var i=function(p){amzn.copilot.jQuery=p;var o=l("debugJS"),n=f.location.protocol==="https:"?1:0;if(amzn.copilot.jQuery.ajax){amzn.copilot.jQuery.ajax({url:"/gp/copilot/handlers/copilot_strings_resources.html",dataType:"json",data:{isDebug:o,isSecure:n},success:function(q){amzn.copilot.vip=q.serviceEndPoint;g(q)},error:function(){f.ue.count(a,1)}})}};var g=function(o){var s=amzn.copilot.jQuery;var n=function(){amzn.copilot.setup(s.extend({isContinuedSession:true},o))};var q=o.CSSUrls||[copilotCSSUrl];s.each(q,function(t,u){e(u)});var r=l("forceSynchronousJS");var p=o.JSUrls[0]||[copilotJSUrl];s.each(p,function(t,u){if(t===p.length-1){h(u,r,n)}else{h(u,r)}})},h=function(o,q,n){var p=k.createElement("script");p.type="text/javascript";p.src=o;p.async=q?false:true;if(n){p.onload=n}d.appendChild(p)},e=function(n){var o=k.createElement("link");o.type="text/css";o.rel="stylesheet";o.href=n;d.appendChild(o)};function l(q){var o=f.location.search.substring(1);var n=o.split("&");for(var p=0;p<n.length;p++){var r=n[p].split("=");if(r[0]===q){return r[1]}}}})();
+amzn.copilot.checkCoPilotSession();
+</script>
+<div id="a-page">
+ <a name="top"></a>
+
+
+
+ <div style="position:absolute; left:0px; top:-500px; width:1px;height:1px; overflow:hidden;">
+ <a href="/access">We have recently updated the screen reader optimized website to include headings, landmarks, and new shopping features to improve your experience. Please follow this link or go to www.amazon.com/access.</a>
+</div>
+
+
+
+
+
+
+
+<!-- BeginNav --><!-- From remote config --><style type="text/css"><!--
+.nav-sprite-v4 .nav-sprite, .nav-sprite-v4 .nav-icon {
+ background-image: url(http://g-ecx.images-amazon.com/images/G/01/gno/sprites/global-sprite-32-v4._V319941157_.png);
+ background-position: 0 1000px;
+ background-repeat: repeat-x;
+}
+.nav-spinner {
+ background-image: url(http://g-ecx.images-amazon.com/images/G/01/javascripts/lib/popover/images/snake._V192571611_.gif);
+ background-position: center center;
+ background-repeat: no-repeat;
+}
+--></style>
+<!-- nav-config-asset-injection US::desktop::standard::31406:T1&42812:T1&42994:C::auiDebug=0::isSecure=0::jsOnEvent= navc-h9xf7zWEzrf5xSHREQESKj5ZXZmKnFWbmx3PveFsJLyJdR78xOR87sLm1ylnahRxEbTggpt+vEk= rid-1QAZFBKPAV6NKZ3984G0 seq-85 (Sun Nov 23 01:01:51 2014) **CACHED-BY-NCCC** -->
+<script>
+ (window.AmazonUIPageJS ? AmazonUIPageJS : P).load.js('http://z-ecx.images-amazon.com/images/G/01/AUIClients/NavAuiBlackbeltAssets-b30a1c6670bbe3d5385c824f6633d09189ea3e47.min._V2_.js', ['NavAuiBlackbeltAssets']);
+</script>
+<!-- From remote config v3-->
+<script type="text/javascript">
+(function(b){document.createElement("header");var d=function(b){function c(c,e,b){c[b]=function(){a._replay.push(e.concat({m:b,a:[].slice.call(arguments)}))}}var a={};a._sourceName=b;a._replay=[];a.getNow=function(a,c){return c};a.when=function(){var a=[{m:"when",a:[].slice.call(arguments)}],b={};c(b,a,"run");c(b,a,"declare");c(b,a,"publish");c(b,a,"build");return b};c(a,[],"declare");c(a,[],"build");c(a,[],"publish");c(a,[],"importEvent");d._shims.push(a);return a};d._shims=[];b.$Nav||(b.$Nav=d("rcx-nav"));
+b.$Nav.make||(b.$Nav.make=d)})(window);
+
+window.amznJQ && amznJQ.available('navbarJS-desktop', function(){});
+$Nav.importEvent('navbarJS-desktop');
+$Nav.importEvent('NavAuiBlackbeltAssets');
+$Nav.declare('img.sprite', {
+ 'png8': 'http://g-ecx.images-amazon.com/images/G/01/gno/sprites/global-sprite-v4._V319941159_.png',
+ 'png32': 'http://g-ecx.images-amazon.com/images/G/01/gno/sprites/global-sprite-32-v4._V319941157_.png',
+ 'png32-2x': 'http://g-ecx.images-amazon.com/images/G/01/gno/sprites/global-sprite-32-2x-v4._V319941159_.png'
+});
+window._navbarSpriteUrl = 'http://g-ecx.images-amazon.com/images/G/01/gno/sprites/global-sprite-32-v4._V319941157_.png';
+$Nav.declare('img.pixel', 'http://g-ecx.images-amazon.com/images/G/01/x-locale/common/transparent-pixel._V386942464_.gif');
+</script>
+<img src="http://g-ecx.images-amazon.com/images/G/01/gno/sprites/global-sprite-32-v4._V319941157_.png" style="display:none" alt=""/>
+<img src="http://g-ecx.images-amazon.com/images/G/01/x-locale/common/transparent-pixel._V386942464_.gif" style="display:none" alt="" id="nav_trans_pixel"/>
+<!--[if IE 6]>
+<style type="text/css"><!--
+ #navbar.nav-sprite-v4 .nav-sprite {
+ background-image: url(http://g-ecx.images-amazon.com/images/G/01/gno/sprites/global-sprite-v4._V319941159_.png);
+ }
+--></style>
+<![endif]-->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<style>
+#nav-transient-flyout h3 {
+ font: 21px arial, sans-serif;
+ color:#e47911;
+ margin: 5px 0;
+}
+#nav-transient-flyout h4 {
+ font: 13px arial, sans-serif;
+ line-height: 21px;
+ margin: 5px 0;
+}
+#nav-transient-flyout .nav-transient-gray {
+ color: #888;
+}
+#nav-transient-flyout-info {
+ font: 12px arial, sans-serif;
+ display: inline-block;
+ margin-left: 10px;
+}
+#nav-transient-flyout a {
+ display: block;
+ margin-top: 10px;
+ border:none;
+}
+#nav-transient-flyout img {
+ border:none;
+}
+#nav-transient-flyout a:hover .nav-transient-blue, #nav-transient-flyout a:hover .nav-transient-gray {
+ text-decoration: underline;
+}
+#nav-transient-flyout .nav-transient-subheading {
+ display: block;
+}
+#nav-transient-flyout #nav-play-button {
+ display: inline-block;
+}
+#nav-transient-flyout #nav-play-button {
+ background:url('//g-ecx.images-amazon.com/images/G/01/gno/icon_play_sprite.png') no-repeat;
+ width: 28px;
+ height: 28px;
+}
+#nav-transient-flyout #nav-play-button:hover {
+ background-position-x: -84px;
+}
+#nav-transient-flyout #nav-play-button:focus {
+ background-position-x: -28px;
+}
+#nav-transient-flyout #nav-play-button:active {
+ background-position-x: -28px;
+}
+#nav-holiday-flyout-trigger {
+ float: left;
+}
+</style>
+<script type="text/javascript">
+ window.$Nav && $Nav.when("data").run(function(data) {
+ data({
+ "transientFlyoutContent": {"html":"<div id=\"nav-transient-flyout\"><h3>Listen free while you shop</h3><h4 class=\"nav-transient-gray\">An Amazon Exclusive Playlist to get you in the holiday spirit</h4><div style=\"cursor:pointer\" onclick=\"var w=895;var h=366;var left=(screen.width/2)-(w/2);var top = (screen.height/2)-(h/2);window.open('/gp/dmusic/public/dynamicWidgets/holidayPlayer.html?pa=B00PR9PUB8&ta=B00PGEOM9K,B00P4SZYZO,B00PB6I9PG,B00P71QYSO,B00PG9I0DO,B00PA0AOCE,B00P854XWI,B00PGR16SM,B00P72DW5Q,B00P3S6KV2,B00P3LYXY0,B00P7MWSQ0,B00PG6MZZ6,B00P8N2TFS&introFile=intro&introTitle=Amazon%20Music%5C%27s%20Exclusive%20Holiday%20Playlist&boomerFile=outro&boomerTitle=Happy%20Holidays&ref=nav_dm_pl_flyout_link', 'holidayflyout', 'toolbar=0, location=0,status=0, menubar=0, scrollbars=0, resizable=0,width='+w+', height='+h+', top='+top+', left='+left);return false;\"><img src=\"http://g-ecx.images-amazon.com/images/G/01/gno/AIB_playlist_72._V321452080_.jpg\"></div><a href=\"/b/ref=nav_dm_pl_tooltip?ie=UTF8&node=10269000011\" onclick=\"var w=895;var h=366;var left=(screen.width/2)-(w/2);var top = (screen.height/2)-(h/2);window.open('/gp/dmusic/public/dynamicWidgets/holidayPlayer.html?pa=B00PR9PUB8&ta=B00PGEOM9K,B00P4SZYZO,B00PB6I9PG,B00P71QYSO,B00PG9I0DO,B00PA0AOCE,B00P854XWI,B00PGR16SM,B00P72DW5Q,B00P3S6KV2,B00P3LYXY0,B00P7MWSQ0,B00PG6MZZ6,B00P8N2TFS&introFile=intro&introTitle=Amazon%20Music%5C%27s%20Exclusive%20Holiday%20Playlist&boomerFile=outro&boomerTitle=Happy%20Holidays&ref=nav_dm_pl_flyout_link', 'holidayflyout', 'toolbar=0, location=0,status=0, menubar=0, scrollbars=0, resizable=0,width='+w+', height='+h+', top='+top+', left='+left);return false;\"><span id=\"nav-play-button\"></span><span id=\"nav-transient-flyout-info\"><span class=\"nav-transient-blue nav-transient-subheading\">Stream select songs</span><span class=\"nav-transient-gray nav-transient-subheading\">Pop-out player</span></span></a></div>"}
+ })
+ });
+</script>
+
+
+
+
+<!--Pilu -->
+
+<style type='text/css'>#navbar .nav-cart .nav-cart-1 .nav-cart-count,#nav-cart .nav-cart-1 .nav-cart-count {padding-top: 17px;}#navbar .nav-cart .nav-cart-10 .nav-cart-count,#nav-cart .nav-cart-10 .nav-cart-count {padding-top: 17px; padding-left: 4px;}#navbar .nav-cart .nav-cart-20 .nav-cart-count,#nav-cart .nav-cart-20 .nav-cart-count {padding-top: 17px; padding-left: 6px;}#navbar .nav-cart .nav-cart-100 .nav-cart-count,#nav-cart .nav-cart-100 .nav-cart-count {padding-top: 17px; padding-left: 8px;}.nav-whitebelt #nav-belt #nav-cart .nav-a:hover{text-decoration: none}.nav-catFlyout .nav-promo { max-height: 522px; } header .nav-whitebelt #nav-supra{background: #f6f6f6; }</style>
+<script type='text/javascript'>
+window.uet && uet('ns');
+
+window._navbar = (function (o) {
+ o.componentLoaded = o.loading = function(){};
+ o.browsepromos = {};
+ o.issPromos = [];
+ return o;
+}(window._navbar || {}));
+
+window.$Nav && $Nav.declare('logEvent.enabled',
+ false);
+
+
+window.$Nav && $Nav.declare('config.lightningDeals',{});
+window.$Nav && $Nav.declare('config.swmStyleData',{});
+window.$Nav && $Nav.declare('config.ajaxProximity', [141,7,60,150]);
+
+</script>
+
+
+<script type="text/javascript">
+ window.$Nav && $Nav.when("data").run(function(data) { data({"emptyWishlist":{"template":{"name":"flyoutError","data":{"error":{"button":{"text":"Your Wishlist","url":"/gp/registry/wishlist/ref=nav_err_empty_wishlist"},"title":"Oops!","paragraph":"Your list is empty"}}}},"yourAccountContent":{"template":{"name":"flyoutError","data":{"error":{"button":{"text":"Your Account","url":"/gp/css/homepage.html/ref=nav_err_youraccount"},"title":"Oops!","paragraph":"Unable to retrieve your account"}}}},"errorWishlist":{"template":{"name":"flyoutError","data":{"error":{"button":{"text":"Your Wishlist","url":"/gp/registry/wishlist/ref=nav_err_wishlist"},"title":"Oops!","paragraph":"Unable to retrieve your wishlist"}}}},"ewcTimeout":{"template":{"name":"flyoutError","data":{"error":{"button":{"text":"Your Cart","url":"/gp/cart/view.html/ref=nav_err_ewc_timeout"},"title":"Oops!","paragraph":"There's a problem loading your cart right now."}}}},"cartTimeout":{"template":{"name":"flyoutError","data":{"error":{"button":{"text":"Your Cart","url":"/gp/cart/view.html/ref=nav_err_cart_timeout"},"title":"Oops!","paragraph":"Unable to retrieve your cart."}}}},"kindleTimeout":{"template":{"name":"flyoutError","data":{"error":{"paragraph":"Unable to retrieve list, please try again later"}}}},"shopAllTimeout":{"template":{"name":"flyoutError","data":{"error":{"paragraph":"Unable to retrieve departments, please try again later"}}}},"primeTimeout":{"template":{"name":"flyoutError","data":{"error":{"title":"<a href='/gp/prime'><img src='//g-ec2.images-amazon.com/images/G/01/prime/piv/YourPrimePIV_fallback_CTA._V337321878_.jpg' /></a>"}}}}}); });
+ window.$Nav && $Nav.when("util.templates").run("FlyoutErrorTemplate", function (templates) {
+ templates.add("flyoutError", "<# if(error.title) { #><span class='nav-title'><#=error.title #></span><# } #><# if(error.paragraph) { #><p class='nav-paragraph'><#=error.paragraph #></p><# } #><# if(error.button) { #><a href='<#=error.button.url #>' class='nav-action-button' ><span class='nav-action-inner'><#=error.button.text #></span></a><# } #>");
+ });
+</script>
+
+<!-- navp-C726e3sRhVlDoCKev+ZHIhOzbL+JeXgl29WccGoCsLVQaz4j4Sk5y/z0BgZ/n8S92hNZ5TSgYqc= rid-1GM97J2XXNXR8Y322FQC (Sun Nov 23 02:00:45 2014) -->
+
+
+
+
+
+<![if gt IE 6]><noscript><![endif]>
+<style type="text/css"><!--
+ #navbar #nav-shop .nav-a:hover {
+ color: #ff9900;
+ text-decoration: underline;
+ }
+ #navbar #nav-search .nav-search-facade,
+ #navbar #nav-tools .nav-icon {
+ display: none;
+ }
+ #navbar #nav-search .nav-search-submit,
+ #navbar #nav-search .nav-search-scope {
+ display: block;
+ }
+ #nav-search .nav-search-scope {
+ padding: 0 5px;
+ }
+ #navbar #nav-search .nav-search-dropdown {
+ position: relative;
+ top: 3px;
+ height: 23px;
+ font-size: 14px;
+ opacity: 1;
+ filter: alpha(opacity = 100);
+ }
+--></style>
+<![if gt IE 6]></noscript><![endif]>
+
+
+
+<header class='nav-locale-us nav-lang-en nav-unrec'>
+ <div id='navbar' role="navigation" class='nav-sprite-v4 nav-whitebelt'>
+
+<script type="text/javascript">
+ if(window.$Nav) {
+ (function(){
+ var w = [1000,1170,1290,1440];
+ var ww = window.innerWidth ||
+ document.documentElement.clientWidth ||
+ document.body.clientWidth;
+ var nh = document.getElementById("navbar").parentNode;
+ for(var i = 0; i < w.length; i++) {
+ if(ww >= w[i]) {
+ nh.className += " nav-w" + w[i];
+ }
+ }
+ $Nav.declare('config.windowWidths', w);
+ })();
+ }
+</script>
+
+
+
+ <div id='nav-belt'>
+ <div class='nav-left'>
+
+<div id='nav-logo' >
+ <a href='/ref=nav_logo'
+ class='nav-logo-link'
+ data-nav-tabindex="1"
+ >
+ <span class='nav-logo-base nav-sprite'>Amazon</span>
+ <span class='nav-logo-ext nav-sprite'></span>
+ <span class='nav-logo-locale nav-sprite'></span>
+ </a>
+
+ <a href='/gp/prime/ref=nav_logo_prime_join' data-nav-tabindex="2" class='nav-logo-tagline nav-sprite nav-prime-try'>
+ Try Prime
+ </a>
+</div>
+
+
+ </div>
+ <div class='nav-right'>
+
+
+
+
+
+
+
+<div id='nav-tools'>
+ <a href="https://www.amazon.com/ap/signin?_encoding=UTF8&openid.assoc_handle=usflex&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0&openid.pape.max_auth_age=0&openid.return_to=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fyourstore%2Fhome%3Fie%3DUTF8%26ref_%3Dnav_ya_signin" class="nav-a" data-nav-tabindex="20" id="nav-link-yourAccount">Your Account<i class="nav-icon nav-arrow"></i></a><a href="/gp/product/B00DBYBNEE/ref=nav_prime_try_btn" class="nav-a" data-nav-tabindex="21" id="nav-link-prime">Try Prime<i class="nav-icon nav-arrow"></i></a><a href="/gp/registry/wishlist/ref=nav_wishlist_btn" class="nav-a" data-nav-tabindex="22" id="nav-link-wishlist">Wish List<i class="nav-icon nav-arrow"></i></a>
+</div>
+
+
+<div id="nav-cart">
+ <a href="/gp/cart/view.html/ref=nav_cart" class="nav-a nav-cart-0" data-nav-tabindex='30'>
+ <i class='nav-icon'></i>
+ <span class='nav-cart-count'>
+ 0
+ </span>
+ </a>
+</div>
+
+ </div>
+ <div class='nav-fill'>
+
+
+<label id="nav-search-label" for="twotabsearchtextbox">
+ Search
+</label>
+<div id="nav-search">
+ <div id="nav-bar-left"></div>
+ <form accept-charset="utf-8" action="/s/ref=nb_sb_noss" class="nav-searchbar" method="GET" name="site-search" role="search">
+
+ <div class="nav-left">
+ <div class="nav-search-scope">
+
+<div class="nav-search-facade" data-value="search-alias=aps">
+ <span class="nav-search-label">All</span>
+ <i class="nav-icon"></i>
+</div>
+
+
+<select class="nav-search-dropdown searchSelect" data-nav-digest="PLWobzU+yaSSYg7adOgLcoK0H9Y" data-nav-selected="0" data-nav-tabindex="10" id="searchDropdownBox" name="url" title="Search in">
+<option selected="selected" value="search-alias=aps">All Departments</option>
+<option value="search-alias=instant-video">Amazon Instant Video</option>
+<option value="search-alias=appliances">Appliances</option>
+<option value="search-alias=mobile-apps">Apps & Games</option>
+<option value="search-alias=arts-crafts">Arts, Crafts & Sewing</option>
+<option value="search-alias=automotive">Automotive</option>
+<option value="search-alias=baby-products">Baby</option>
+<option value="search-alias=beauty">Beauty</option>
+<option value="search-alias=stripbooks">Books</option>
+<option value="search-alias=popular">CDs & Vinyl</option>
+<option value="search-alias=mobile">Cell Phones & Accessories</option>
+<option value="search-alias=fashion">Clothing, Shoes & Jewelry</option>
+<option value="search-alias=fashion-womens">&#160;&#160;&#160;Women</option>
+<option value="search-alias=fashion-mens">&#160;&#160;&#160;Men</option>
+<option value="search-alias=fashion-girls">&#160;&#160;&#160;Girls</option>
+<option value="search-alias=fashion-boys">&#160;&#160;&#160;Boys</option>
+<option value="search-alias=fashion-baby">&#160;&#160;&#160;Baby</option>
+<option value="search-alias=collectibles">Collectibles & Fine Art</option>
+<option value="search-alias=computers">Computers</option>
+<option value="search-alias=financial">Credit and Payment Cards</option>
+<option value="search-alias=digital-music">Digital Music</option>
+<option value="search-alias=electronics">Electronics</option>
+<option value="search-alias=gift-cards">Gift Cards</option>
+<option value="search-alias=grocery">Grocery & Gourmet Food</option>
+<option value="search-alias=hpc">Health & Personal Care</option>
+<option value="search-alias=garden">Home & Kitchen</option>
+<option value="search-alias=industrial">Industrial & Scientific</option>
+<option value="search-alias=digital-text">Kindle Store</option>
+<option value="search-alias=fashion-luggage">Luggage & Travel Gear</option>
+<option value="search-alias=magazines">Magazine Subscriptions</option>
+<option value="search-alias=movies-tv">Movies & TV</option>
+<option value="search-alias=mi">Musical Instruments</option>
+<option value="search-alias=office-products">Office Products</option>
+<option value="search-alias=lawngarden">Patio, Lawn & Garden</option>
+<option value="search-alias=pets">Pet Supplies</option>
+<option value="search-alias=pantry">Prime Pantry</option>
+<option value="search-alias=software">Software</option>
+<option value="search-alias=sporting">Sports & Outdoors</option>
+<option value="search-alias=tools">Tools & Home Improvement</option>
+<option value="search-alias=toys-and-games">Toys & Games</option>
+<option value="search-alias=videogames">Video Games</option>
+<option value="search-alias=wine">Wine</option>
+</select>
+
+
+ </div>
+ </div>
+ <div class="nav-right">
+ <div class="nav-search-submit">
+ <span class="nav-search-submit-text">Go</span>
+ <input type="submit" class="nav-input" value="Go" data-nav-tabindex="12"/>
+ </div>
+ </div>
+ <div class="nav-fill">
+ <div class="nav-search-field">
+ <input type='text'
+ id='twotabsearchtextbox'
+ value=''
+ name='field-keywords'
+ autocomplete='off'
+ class='nav-input'
+ data-nav-tabindex='11'
+ >
+ </div>
+ </div>
+ <div id="nav-iss-attach"></div>
+ </form>
+</div>
+
+ </div>
+ </div>
+ <div id='nav-main'>
+ <div class='nav-left'>
+
+<div id='nav-shop'>
+ <a href="/gp/site-directory/ref=nav_shopall_btn" alt="Departments" class="nav-a" data-nav-tabindex="40" id="nav-link-shopall">Departments<i class="nav-icon nav-arrow"></i></a><a href="/dp/B00IKPYKWG/ref=nav_kindle_btn" alt="Fire &amp; Kindle" class="nav-a" data-nav-tabindex="41" id="nav-link-kindle">Fire & Kindle<i class="nav-icon nav-arrow"></i></a>
+</div>
+
+ </div>
+ <div class='nav-right'>
+
+
+ <div id='nav-swmslot'>
+ <div id="navSwmHoliday" style="background-image: url(http://g-ecx.images-amazon.com/images/G/01/img14/other/tr_bf_deals_week_2014_3._V320773730_.png); width: 400px; height: 40px; overflow: hidden;"><img alt='Black Friday Deals Week' src='http://g-ecx.images-amazon.com/images/G/01/x-locale/common/transparent-pixel._V386942464_.gif' border='0' width='400px' height='40px' usemap='#nav-swm-holiday-map' /></div><div style="display: none;"><map id="nav-swm-holiday-map" name="nav-swm-holiday-map"><area shape="rect" coords="1,2,400,40" href ="/Black-Friday/b/ref=bfdw_swm?ie=UTF8&node=384082011&pf_rd_p=1978619382&pf_rd_s=nav-sitewide-msg&pf_rd_t=4201&pf_rd_i=navbar-4201&pf_rd_m=ATVPDKIKX0DER&pf_rd_r=1GM97J2XXNXR8Y322FQC" alt ="Black Friday Deals Week" /></map></div>
+ </div>
+
+ </div>
+ <div id='nav-xshop' class='nav-fill'>
+
+<a href="/gp/yourstore/home/ref=nav_cs_ys" class="nav-a" data-nav-tabindex="51" id="recommended-for-you"><span class="nav-text-short">For You</span><span class="nav-text-long">Recommended for You</span></a><a href="/gp/goldbox/ref=nav_cs_gb" class="nav-a" data-nav-tabindex="52" id="nav-xshop-deals"><span class="nav-text-short">Deals</span><span class="nav-text-long">Today's Deals</span></a><a href="/gift-cards/b/ref=nav_cs_gc?ie=UTF8&amp;node=2238192011" class="nav-a" data-nav-tabindex="53">Gift Cards</a><a href="/gp/help/customer/display.html/ref=nav_cs_help?ie=UTF8&amp;nodeId=508510" class="nav-a" data-nav-tabindex="54">Help</a><a href="/gp/seller-account/mm-product-page.html/ref=nav_cs_sell?ie=UTF8&amp;ld=AZSOAUSCSNav" class="nav-a" data-nav-tabindex="55">Sell</a><a href="/b/ref=nav_dm_pl_tooltip?ie=UTF8&amp;node=10269000011" id="nav-transient-flyout-trigger" style="float: left;width: 35px;height: 24px;margin-left:10px;background: url(&#39;http://g-ecx.images-amazon.com/images/G/01/gno/holiday-playlist._V319930085_.png&#39;) no-repeat;"></a>
+
+ </div>
+ </div>
+
+ <div id='nav-subnav'>
+
+ </div>
+
+
+ </div>
+
+
+</header>
+
+<!-- nav promo cached -->
+
+
+<map name="nav_imgmap_desktop-shopall-android" id="nav_imgmap_desktop-shopall-android">
+<area shape="rect" coords="0,0,499,474" href="/dp/B00P73L20M /ref=agsm_int_rt_tds" alt=""/>
+</map>
+
+
+
+<map name="nav_imgmap_desktop-shopall-automotive-industrial" id="nav_imgmap_desktop-shopall-automotive-industrial">
+<area shape="rect" coords="3,291,267,444" href="/s/ref=nav_sap_automotive_blackfridayweek?_encoding=UTF8&rh=n%3A392446011%2Ci%3Aautomotive" alt="Black Friday Deals Week in Automotive"/>
+<area shape="rect" coords="284,96,495,476" href="/s/ref=nav_sap_automotive_blackfridayweek?_encoding=UTF8&rh=n%3A392446011%2Ci%3Aautomotive" alt="Black Friday Deals Week in Automotive"/>
+<area shape="rect" coords="51,444,238,479" href="/b/ref=nav_sap_automotive_blackfridayweek?_encoding=UTF8&node=384082011" alt="Corporate Deals Page"/>
+</map>
+
+
+
+<map name="nav_imgmap_desktop-shopall-books" id="nav_imgmap_desktop-shopall-books">
+<area shape="rect" coords="0,0,540,515" href="/Bargain-Books/b/ref=nav_sap_hdibsBB?ie=UTF8&node=45" alt="Holiday Deals in Books"/>
+</map>
+
+
+
+<map name="nav_imgmap_desktop-shopall-clothing-shoes-jewelry" id="nav_imgmap_desktop-shopall-clothing-shoes-jewelry">
+<area shape="rect" coords="237,73,498,358" href="/b/ref=nav_sap_clothing_bf_promo_upto65off_imagecl?ie=UTF8&node=10143512011" alt="Shop Up to 65% Off"/>
+<area shape="rect" coords="303,378,424,398" href="/b/ref=nav_sap_clothing_bf_promo_upto65off?ie=UTF8&node=10143512011" alt="Shop Up to 65% Off"/>
+<area shape="rect" coords="247,402,483,428" href="/b/ref=nav_sap_clothing_bf_promo_upto65off?ie=UTF8&node=9538491011" alt="Sales & Deals"/>
+</map>
+
+
+
+<map name="nav_imgmap_desktop-shopall-cloud-drive" id="nav_imgmap_desktop-shopall-cloud-drive">
+<area shape="rect" coords="0,0,540,522" href="/clouddrive/home/ref=nav_acd_cdimg" alt="Learn more"/>
+</map>
+
+
+
+<map name="nav_imgmap_desktop-shopall-credit" id="nav_imgmap_desktop-shopall-credit">
+<area shape="rect" coords="0,0,540,515" href="/gp/cobrandcard/marketing.html/ref=?ie=UTF8&plattr=PLFLYGRAPH&pr=conplcc" alt="nav_sap_plcc_6M_fly_blackbelt"/>
+</map>
+
+
+
+<map name="nav_imgmap_desktop-shopall-digital-music" id="nav_imgmap_desktop-shopall-digital-music">
+<area shape="poly" coords="238,2,226,233,154,258,115,281,2,281,1,453,497,455,497,1" href="/b/ref=nav_sa_dm_blackfriday_bb?_encoding=UTF8&node=6064969011" alt="Black Friday"/>
+</map>
+
+
+
+<map name="nav_imgmap_desktop-shopall-electronics-computers" id="nav_imgmap_desktop-shopall-electronics-computers">
+<area shape="rect" coords="0,0,501,477" href="/b/ref=egg2014-gno?_encoding=UTF8&node=7258612011" alt="2014 Electronics Holiday Gift Guide"/>
+</map>
+
+
+
+<map name="nav_imgmap_desktop-shopall-grocery-health-beauty-horiz" id="nav_imgmap_desktop-shopall-grocery-health-beauty-horiz">
+<area shape="rect" coords="28,278,457,491" href="/b/ref=nav_beauty_groomdeal_braun?_encoding=UTF8&node=9316745011" alt="Grooming Deals"/>
+</map>
+
+
+
+<map name="nav_imgmap_desktop-shopall-home-garden-tools" id="nav_imgmap_desktop-shopall-home-garden-tools">
+<area shape="rect" coords="0,0,499,474" href="/b/ref=HKG_GG?_encoding=UTF8&node=10044414011" alt="Home, Kitchen & Garden Holiday Deals & Gift Guide"/>
+</map>
+
+
+
+<map name="nav_imgmap_desktop-shopall-instant-video" id="nav_imgmap_desktop-shopall-instant-video">
+<area shape="rect" coords="0,0,499,474" href="/dp/B00I3MPMPA/ref=nav_sap_GortimerS1" alt="Gortimer S1"/>
+</map>
+
+
+
+<map name="nav_imgmap_desktop-shopall-movies-music-games" id="nav_imgmap_desktop-shopall-movies-music-games">
+<area shape="rect" coords="384,20,535,159" href="/dp/B00IURL19Y/ref=nav_sap_dvd" alt="Movies Deals"/>
+<area shape="rect" coords="13,452,153,472" href="/todaysdeals-dvd-bluray/b/ref=nav_sap_dvdtextlink?ie=UTF8&node=2921749011" alt="Movies Deals"/>
+<area shape="rect" coords="390,167,540,307" href="/dp/B00O0MBJPO/ref=nav_sap_music" alt="Music Deals"/>
+<area shape="rect" coords="153,452,278,471" href="/b/ref=nav_sap_musictextlink?ie=UTF8&node=4989003011" alt="Music Deals"/>
+<area shape="rect" coords="379,310,540,456" href="/dp/B00NFXON1Q/ref=nav_sap_vglink" alt="Video Games Deals"/>
+<area shape="rect" coords="279,456,415,475" href="/Video-Games-Deals/b/ref=nav_sap_vgtextlink?ie=UTF8&node=409566" alt="Video Games Deals"/>
+</map>
+
+
+
+<map name="nav_imgmap_desktop-shopall-sports-outdoors-t1" id="nav_imgmap_desktop-shopall-sports-outdoors-t1">
+<area shape="rect" coords="257,149,484,220" href="/Sales-Deals-Sports/b/ref=nav_sports-BFDW-2014-GNO?ie=UTF8&node=10805321" alt="Shop Sports Deals"/>
+<area shape="rect" coords="256,224,381,257" href="/Sales-Deals-Sports/b/ref=nav_sports-BFDW-2014-GNO?ie=UTF8&node=10805321" alt="Shop Sports Deals"/>
+<area shape="rect" coords="389,223,514,256" href="/Black-Friday/b/ref=nav_sports-BFDW-Corp-2014-GNO?ie=UTF8&node=384082011" alt="Shop All Deals"/>
+<area shape="poly" coords="19,482,18,461,19,444,19,422,18,405,19,382,20,364,21,346,17,324,35,312,60,307,79,303,117,295,135,297,163,293,190,290,230,288,235,280,233,274,250,267,265,265,294,265,324,266,356,265,384,265,412,262,427,262,443,264,470,264,490,261,499,276,501,294,503,316,505,332,506,352,507,373,509,401,504,421,506,436,507,457,508,467,504,473" href="/Sales-Deals-Sports/b/ref=nav_sports-CDBF-2014-GNO?ie=UTF8&node=10805321" alt="Shop Sports Deals"/>
+</map>
+
+
+
+<map name="nav_imgmap_desktop-shopall-toys-kids-baby" id="nav_imgmap_desktop-shopall-toys-kids-baby">
+<area shape="poly" coords="29,460,93,335,196,278,217,33,538,34,517,478" href="/b/ref=nav_sap_toysbf14?_encoding=UTF8&node=2241292011" alt="Toys & Games Black Friday Deals"/>
+</map>
+
+
+
+<map name="nav_imgmap_desktop-shopall_k-fire-phone" id="nav_imgmap_desktop-shopall_k-fire-phone">
+<area shape="rect" coords="0,0,499,474" href="/dp/B00EOE0WKQ/ref=nav_sap_fp_bb" alt="Get Fire phone plus 12 months of Prime for only $0.99"/>
+</map>
+
+
+
+<map name="nav_imgmap_desktop-shopall_k-fire-tablet" id="nav_imgmap_desktop-shopall_k-fire-tablet">
+<area shape="poly" coords="2,295,247,303,248,234,497,230,498,476,0,475" href="/dp/B00KC6I06S/ref=nav_sap_hdx_bb" alt="Shop Fire HD 6"/>
+</map>
+
+
+
+<map name="nav_imgmap_desktop-shopall_k-fire-tv" id="nav_imgmap_desktop-shopall_k-fire-tv">
+<area shape="rect" coords="0,0,499,474" href="/dp/B00CX5P8FC/ref=nav_sap_ftv_apps" alt="Shop Amazon Fire TV"/>
+</map>
+
+
+
+<map name="nav_imgmap_desktop-shopall_k-reader" id="nav_imgmap_desktop-shopall_k-reader">
+<area shape="poly" coords="2,338,227,337,242,161,391,152,498,178,497,477,0,476" href="/dp/B00IOY8XWQ/ref=nav_sap_kp_bb" alt="Shop Kindle Voyage"/>
+</map>
+
+
+
+<script type="text/javascript"><!--
+
+window.$Nav && $Nav.declare('config.pageType', 'Gateway');
+
+window.$Nav && $Nav.declare('config.dynamicMenuUrl', '/gp/navigation/ajax/dynamic-menu.html');
+
+window.$Nav && $Nav.declare('config.dismissNotificationUrl',
+ '/gp/navigation/ajax/dismissnotification.html');
+
+window.$Nav && $Nav.declare('config.enableDynamicMenus', true);
+
+window.$Nav && $Nav.declare('config.isInternal', false);
+
+window.$Nav && $Nav.declare('config.isRecognized', false);
+
+window.$Nav && $Nav.declare('config.transientFlyoutTrigger', '#nav-transient-flyout-trigger');
+
+window.$Nav && $Nav.declare('config.subnavFlyoutUrl',
+ '/gp/navigation/ajax/subnav-flyout');
+
+window.$Nav && $Nav.declare('config.recordEvUrl',
+ '/gp/navigation/ajax/recordevent.html');
+window.$Nav && $Nav.declare('config.recordEvInterval', 15000);
+window.$Nav && $Nav.declare('config.sessionId', '178-3863399-4887466');
+window.$Nav && $Nav.declare('config.requestId', '1GM97J2XXNXR8Y322FQC');
+
+window.$Nav && $Nav.declare('config.readyOnATF', true);
+
+window.$Nav && $Nav.declare('config.dynamicMenuArgs',
+ {"rid":"1GM97J2XXNXR8Y322FQC","isPrime":0,"weblabs":"42812:T1","primeMenuWidth":310});
+
+window.$Nav && $Nav.declare('config.signOutText',
+ null);
+
+window.$Nav && $Nav.declare('config.yourAccountPrimeURL',
+ null);
+
+window.$Nav && $Nav.declare('config.yourAccountPrimeHover',
+ false);
+
+window.$Nav && $Nav.declare('config.searchBackState',
+ {});
+
+
+
+
+
+
+
+
+
+
+if (window.amznJQ && amznJQ.available) {
+ amznJQ.available('jQuery', function() {
+ if (!jQuery.isArray) {
+ jQuery.isArray = function(o) {
+ return Object.prototype.toString.call(o) === "[object Array]";
+ };
+ }
+ });
+}
+
+ if (typeof uet == 'function') {
+ uet('bb', 'iss-init-pc', {wb: 1});
+ }
+
+ if (!window.$SearchJS && window.$Nav) {
+ window.$SearchJS = $Nav.make('sx');
+ }
+
+
+ var opts = {
+ host: "completion.amazon.com/search/complete"
+ , marketId: "1"
+ , searchAliases: ["aps", "stripbooks", "popular", "apparel", "electronics", "sporting", "garden", "videogames", "toys-and-games", "jewelry", "digital-text", "digital-music", "prime-digital-music", "watches", "grocery", "hpc", "instant-video", "prime-instant-video", "shop-instant-video", "baby-products", "office-products", "software", "magazines", "tools", "automotive", "misc", "industrial", "mi", "pet-supplies", "digital-music-track", "digital-music-album", "mobile", "mobile-apps", "movies-tv", "music-artist", "music-album", "music-song", "stripbooks-spanish", "electronics-accessories", "pantry", "photo", "audio-video", "computers", "furniture", "kitchen", "audible", "audiobooks", "beauty", "shoes", "arts-crafts", "appliances", "gift-cards", "pets", "outdoor", "lawngarden", "collectibles", "financial", "wine", "fine-art", "fashion", "fashion-womens", "fashion-womens-clothing", "fashion-womens-jewelry", "fashion-womens-shoes", "fashion-womens-watches", "fashion-womens-handbags", "fashion-mens", "fashion-mens-clothing", "fashion-mens-jewelry", "fashion-mens-shoes", "fashion-mens-watches", "fashion-girls", "fashion-girls-clothing", "fashion-girls-jewelry", "fashion-girls-shoes", "fashion-girls-watches", "fashion-boys", "fashion-boys-clothing", "fashion-boys-jewelry", "fashion-boys-shoes", "fashion-boys-watches", "fashion-baby", "fashion-baby-boys", "fashion-baby-girls", "fashion-luggage", "3d-printing", "tradein-aps", "local-services", "video-shorts"]
+ , isDoCtw: 0
+ , pageType: "Gateway"
+ , requestId: "1GM97J2XXNXR8Y322FQC"
+ , keydownTriggeredWeblabs: []
+ , displayTriggeredWeblabs: []
+ , isDdInT3: 0
+ , isDdInT1: 0
+ , isJpOrCn: 0
+ , isUseAuiIss: 0
+ };
+
+ var issOpts = {
+ fallbackFlag: 1
+ , isDigitalFeaturesEnabled: 1
+ , isWayfindingEnabled: 1
+ , dropdown: "select.searchSelect"
+ , departmentText: "in {department}"
+ , suggestionText: "Search suggestions"
+ , isTriggerIssOnClick: 0
+ , imeEnh: 0
+ , xcatSuggestionImprovementFlag: 2
+ , isShowPromotionInfoInIss: 0
+ , np: 0
+ };
+
+
+ if (opts.isUseAuiIss === 1) {
+ $Nav.when('sx.iss').run('iss-mason-init', function(iss){
+ var issInitObj = buildIssInitObject(opts, issOpts, true);
+ new iss.IssParentCoordinator(issInitObj);
+
+ tryInitClientTriggeredWeblabs(issInitObj);
+ });
+ } else if (window.$SearchJS) {
+
+ var iss;
+
+ // BEGIN Deprecated globals
+ var issHost = opts.host
+ , issMktid = opts.marketId
+ , issSearchAliases = opts.searchAliases
+ , updateISSCompletion = function() { iss.updateAutoCompletion(); };
+ // END deprecated globals
+
+
+
+
+ $SearchJS.when('jQuery', 'search-js-autocomplete-lib').run('autocomplete-init', initializeAutocomplete);
+ $SearchJS.when('canCreateAutocomplete').run('createAutocomplete', createAutocomplete);
+
+
+ if (opts.isDdInT3) {
+ $SearchJS.when('search-js-autocomplete').run('autocomplete-dd-init', function(){ mergeBTFDropdown(); });
+ }
+
+ if (opts.isDdInT1) {
+ $SearchJS.when('search-js-autocomplete').run('autocomplete-dd-init', function(){ searchDropdown(); });
+ }
+
+ } // END conditional for window.$SearchJS
+
+
+
+ function initializeAutocomplete(jQuery) {
+
+ var issInitObj = buildIssInitObject(opts, issOpts);
+
+ tryInitClientTriggeredWeblabs(issInitObj);
+ } // END initializeAutocomplete
+
+
+
+ function tryInitClientTriggeredWeblabs(issInitObj) {
+
+ if (opts.isDoCtw) {
+ $SearchJS.importEvent('search-csl');
+ $SearchJS.when('search-csl').run('autocomplete-csl-init', function delegateToInitSearchCsl(searchCSL) { initSearchCsl( searchCSL, issInitObj ); } );
+ } else {
+ $SearchJS.declare('canCreateAutocomplete', issInitObj);
+ }
+ }
+
+
+
+ function initSearchCsl(searchCSL, issInitObject) {
+ searchCSL.init(opts.pageType, (window.ue && window.ue.rid) || opts.requestId);
+
+
+ var keydownCtw = opts.keydownTriggeredWeblabs;
+ var displayCtw = opts.displayTriggeredWeblabs;
+
+
+ issInitObject.doCTWKeydown = function(e) {
+ for (var i = 0; i < keydownCtw.length; i++) {
+ searchCSL.addWlt(keydownCtw[i].call ? keydownCtw[i](e) : keydownCtw[i]);
+ }
+ };
+
+ issInitObject.doCTWDisplay = function() {
+ for (var i = 0; i < displayCtw.length; i++) {
+ searchCSL.addWlt(displayCtw[i].call ? displayCtw[i]() : displayCtw[i]);
+ }
+ };
+
+ $SearchJS.declare('canCreateAutocomplete', issInitObject);
+ } // END initSearchCsl
+
+
+
+ function createAutocomplete(issObject) {
+ iss = new AutoComplete(issObject);
+
+ $SearchJS.publish('search-js-autocomplete', iss);
+
+ logMetrics();
+ } // END createAutocomplete
+
+
+
+ function buildIssInitObject(opts, issOpts, isNewIss) {
+ var issInitObj = {
+ src: opts.host
+ , mkt: opts.marketId
+ , aliases: opts.searchAliases
+ , fb: issOpts.fallbackFlag
+ , isDigitalFeaturesEnabled: issOpts.isDigitalFeaturesEnabled
+ , isWayfindingEnabled: issOpts.isWayfindingEnabled
+ , deptText: issOpts.departmentText
+ , sugText: issOpts.suggestionText
+ , ime: opts.isJpOrCn
+ , mktid: opts.marketId
+ , qs: opts.isJpOrCn
+ , deepNodeISS: {
+ searchAliasAccessor: function() {
+ return (window.SearchPageAccess && window.SearchPageAccess.searchAlias()) ||
+ jQuery('select.searchSelect').children().attr('data-root-alias');
+ },
+ searchAliasDisplayNameAccessor: function() {
+ return (window.SearchPageAccess && window.SearchPageAccess.searchAliasDisplayName());
+ }
+ }
+ };
+
+ // If we aren't using the new ISS then we need to add these properties
+ if (!isNewIss) {
+ issInitObj.dd = issOpts.dropdown; // The element with id searchDropdownBox doesn't exist in C.
+ issInitObj.imeEnh = issOpts.imeEnh;
+ issInitObj.imeSpacing = issOpts.imeSpacing;
+ issInitObj.xcatSuggestionImprovementFlag = issOpts.xcatSuggestionImprovementFlag;
+ issInitObj.isShowPromotionInfoInIss = issOpts.isShowPromotionInfoInIss;
+ issInitObj.isNavInline = 1;
+ issInitObj.triggerISSOnClick = issOpts.triggerIssOnClick
+ issInitObj.sc = 1;
+ issInitObj.np = issOpts.np;
+ }
+
+ return issInitObj;
+ } // END buildIssInitObject
+
+
+ function logMetrics() {
+ if (typeof uet == 'function' && typeof uex == 'function' ) {
+ uet('be', 'iss-init-pc', {wb: 1});
+ uex('ld', 'iss-init-pc', {wb: 1});
+ }
+ } // END logMetrics
+
+
+
+
+ window.amznJQ && amznJQ.declareAvailable('navbarInline');
+ window.$Nav && $Nav.declare('nav.inline');
+
+ window.amznJQ && amznJQ.available('jQuery', function() {
+ amznJQ.available('navbarJS-beacon', function(){});
+ });
+
+(function (i) {
+i.onload = function() {window.uet && uet('ne')};
+i.src = window._navbarSpriteUrl;
+}(new Image()));
+
+window.$Nav && $Nav.declare('config.autoFocus', false);
+
+
+window.$Nav && $Nav.declare('config.responsiveTouchAgents', ["ieTouch"]);
+
+window.$Nav && $Nav.declare('config.responsiveGW',true);
+
+window.$Nav && $Nav.declare('config.newFlyouts',true);
+
+window.$Nav && $Nav.declare('config.velocityFlyoutToggling', true);
+window.$Nav && $Nav.declare('config.velocityFlyoutThreshold', 40);
+
+window.$Nav && $Nav.declare('config.twoClickFlyouts',false);
+
+window.$Nav && $Nav.declare('config.sslTriggerType','pageReady');
+window.$Nav && $Nav.declare('config.sslTriggerRetry',0);
+
+window.$Nav && $Nav.declare('config.doubleCart',false);
+
+window.$Nav && $Nav.declare('config.csm',false);
+
+
+window.$Nav && $Nav.declare('config.signInTooltip',true);
+
+window.$Nav && $Nav.declare('config.isPrimeMember',false);
+
+window.$Nav && $Nav.declare('config.primeTooltip',false);
+
+window.$Nav && $Nav.declare('config.carnac',false);
+
+
+window.$Nav && $Nav.declare('config.ewc',false);
+
+
+window.$Nav && $Nav.declare('config.blackbelt', true);
+
+window.$Nav && $Nav.declare('config.searchapiEndpoint',false);
+
+ window._navbar = window._navbar || {};
+ window._navbar.browsepromos = window._navbar.browsepromos || {};
+
+ _navbar.browsepromos['desktop-shopall-android'] = {"width":540,"promoType":"wide","vertOffset":0,"horizOffset":0,"height":522,"image":"http://g-ecx.images-amazon.com/images/G/01/Appstore/Flyout/flyout-bb-talesFromDeepSpace._V320395556_.png"};
+ _navbar.browsepromos['desktop-shopall-automotive-industrial'] = {"width":541,"promoType":"wide","vertOffset":0,"horizOffset":0,"height":524,"image":"http://g-ecx.images-amazon.com/images/G/01/img14/automotive/flyout/12132_automotive_blackfriday_flyout_us_black-white-belt._V320438274_.png"};
+ _navbar.browsepromos['desktop-shopall-books'] = {"width":540,"promoType":"wide","vertOffset":0,"horizOffset":0,"height":522,"image":"http://g-ecx.images-amazon.com/images/G/01/img14/books/flyout/12942_books_product-alert_flyout_us_blackbelt._V320466420_.png"};
+ _navbar.browsepromos['desktop-shopall-clothing-shoes-jewelry'] = {"width":540,"promoType":"wide","vertOffset":0,"horizOffset":0,"height":515,"image":"http://g-ecx.images-amazon.com/images/G/01/AMAZON_FASHION/2014/WAYFINDING/EDITORIAL/HOL_2/GATEWAY/FLYOUTS/FO_BLACKBELT_1_BFW_65off_all._V320130658_.png"};
+ _navbar.browsepromos['desktop-shopall-cloud-drive'] = {"width":540,"promoType":"wide","vertOffset":0,"horizOffset":0,"height":522,"image":"http://g-ecx.images-amazon.com/images/G/01/digital/adrive/images/gno/us_cd_prime_bb_gno_2._V320633312_.png"};
+ _navbar.browsepromos['desktop-shopall-credit'] = {"width":540,"promoType":"wide","vertOffset":0,"horizOffset":0,"height":522,"image":"http://g-ecx.images-amazon.com/images/G/01/credit/img14/PLCC/plcc6MonthFinancing_Blackbelt_flyout._V320078765_.png"};
+ _navbar.browsepromos['desktop-shopall-digital-music'] = {"width":540,"promoType":"wide","vertOffset":0,"horizOffset":0,"height":522,"image":"http://g-ecx.images-amazon.com/images/G/01/digital/music/merch/holiday2014/BlackFriday/BlackFriday2014_MP3_flyout_Blackbelt._V320355690_.png"};
+ _navbar.browsepromos['desktop-shopall-electronics-computers'] = {"width":540,"promoType":"wide","vertOffset":0,"horizOffset":0,"height":522,"image":"http://g-ecx.images-amazon.com/images/G/01/img14/ce-accessories/egg/reciprocals/gateway/9658_electronics_EGGGatewayUS-FLYOUT_BLACKBELT_03._V320253137_.png"};
+ _navbar.browsepromos['desktop-shopall-grocery-health-beauty-horiz'] = {"width":540,"promoType":"wide","vertOffset":0,"horizOffset":0,"height":522,"image":"http://g-ecx.images-amazon.com/images/G/01/img14/health-personal-care/flyout/13878_HPC_Mens-Grooming_flyout_us_blackbelt1._V320349729_.png"};
+ _navbar.browsepromos['desktop-shopall-home-garden-tools'] = {"width":540,"promoType":"wide","vertOffset":0,"horizOffset":0,"height":522,"image":"http://g-ecx.images-amazon.com/images/G/01/img14/kitchen/gift-guide/flyout/14235_hkg_holiday-deals_flyout_us_blackbelt._V320367325_.png"};
+ _navbar.browsepromos['desktop-shopall-instant-video'] = {"width":540,"promoType":"wide","vertOffset":0,"horizOffset":0,"height":522,"image":"http://g-ecx.images-amazon.com/images/G/01/digital/video/merch/GNOflyout/2014-GNO_GG_S1_FullBleed-FinalPNG_BlackBelt._V320340757_.png"};
+ _navbar.browsepromos['desktop-shopall-movies-music-games'] = {"width":540,"promoType":"wide","vertOffset":0,"horizOffset":0,"height":522,"image":"http://g-ecx.images-amazon.com/images/G/01/img14/movies-tv/flyout/14174_Movies-TV_flyout_blackbelt_Sunday-v2._V320719383_.png"};
+ _navbar.browsepromos['desktop-shopall-sports-outdoors-t1'] = {"width":540,"promoType":"wide","vertOffset":0,"horizOffset":0,"height":522,"image":"http://g-ecx.images-amazon.com/images/G/01/img14/sports-outdoors/flyout/BFDW_Sports_flyout_us_blackbelt._V320389399_.png"};
+ _navbar.browsepromos['desktop-shopall-toys-kids-baby'] = {"width":541,"promoType":"wide","vertOffset":0,"horizOffset":0,"height":524,"image":"http://g-ecx.images-amazon.com/images/G/01/img14/toys/flyout/13888_toys_bkfriday-deals_flyout_us_black-white-belt._V320719841_.png"};
+ _navbar.browsepromos['desktop-shopall_k-fire-phone'] = {"width":540,"promoType":"wide","vertOffset":0,"horizOffset":0,"height":515,"image":"http://g-ecx.images-amazon.com/images/G/01/kindle/merch/2014/campaign/fp/h/FP_Blackbelt_H_540x515._V327130929_.png"};
+ _navbar.browsepromos['desktop-shopall_k-fire-tablet'] = {"width":540,"promoType":"wide","vertOffset":0,"horizOffset":0,"height":516,"image":"http://g-ecx.images-amazon.com/images/G/01/kindle/merch/2014/campaign/G7/Family/fire-tablets-GNO-blackbelt-540x516._V325759433_.png"};
+ _navbar.browsepromos['desktop-shopall_k-fire-tv'] = {"width":540,"promoType":"wide","vertOffset":"-20","horizOffset":"0","height":516,"image":"http://g-ecx.images-amazon.com/images/G/01/kindle/merch/2014/campaign/kb/app/AFTV-GNO-blackbelt-540x516._V321877984_.png"};
+ _navbar.browsepromos['desktop-shopall_k-reader'] = {"width":540,"promoType":"wide","vertOffset":0,"horizOffset":0,"height":515,"image":"http://g-ecx.images-amazon.com/images/G/01/kindle/merch/2014/campaign/G7/Family/kindle-GNO-blackbelt-540x516_v6._V320414234_.png"};
+
+
+ window.$Nav && $Nav.declare('config.browsePromos', window._navbar.browsepromos);
+
+
+window.$Nav && $Nav.declare('configComplete');
+
+--></script>
+
+
+
+
+<!--Tilu -->
+
+<!-- EndNav --><style>
+ #slideout-hover {
+ position:absolute;
+ top:0px;
+ z-index:1000;
+ overflow: none;
+ outline: 1px solid transparent;
+ pointer-events: none;
+ }
+ #slideout-hover .hoverDetailsContent {
+ border-top:1px solid #EEE;
+ border-bottom:1px solid #EEE;
+ width:215px;
+ height:220px;
+ background:white;
+ background: rgba(100%, 100%, 100%, 0.95);
+ padding: 15px;
+ position: relative;
+ }
+ #slideout-hover .hoverDetailsContent .title {
+ font-family:Arial;
+ color:#333;
+ font-size:16px;
+ white-space:normal;
+ line-height:1.5;
+ max-height: 6em;
+ overflow: hidden;
+ }
+ #slideout-hover .hoverDetailsContent .byline {
+ padding:5px 2px 5px 0;
+ color:#888;
+ white-space:normal;
+ }
+ #slideout-hover .hoverDetailsContent .pricing {
+ font-size: 16px;
+ position:absolute;
+ bottom:15px;
+ left:15px;
+ }
+ #slideout-hover .hoverDetailsContent .review-count {
+ color:#888;
+ }
+ #slideout-hover .hoverDetailsContent .pricing .price {
+ color:#333;
+ }
+ #slideout-hover .hoverDetailsContent .pricing .prime {
+ position: relative;
+ bottom: -2px;
+ }
+ #slideout-hover .loading {
+ position: absolute;
+ top: 50%; left: 0; right: 0;
+ margin-top: -50px;
+ text-align: center;
+ display: none;
+ }
+</style>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div id="pageContent" class="a-section a-spacing-none">
+
+
+ <div style='width:100%;'>
+
+
+
+<div id="gw-desktop-herotator" class="a-section a-spacing-none">
+ <div data-a-carousel-options="{&quot;maintain_state&quot;:false,&quot;minimum_gutter_width&quot;:0,&quot;name&quot;:&quot;gateway-desktop-layout.herotator&quot;,&quot;show_partial_next&quot;:false,&quot;set_size&quot;:5}" data-a-display-strategy="single" data-a-class="desktop" class="a-carousel-container a-carousel-static a-carousel-display-single a-carousel-transition-slide gw-desktop-herotator" style="height:300px;"><form class="a-carousel-state" action="#" method="get"><input autocomplete="on" type="hidden" name="firstVisibleItem" class="a-carousel-firstvisibleitem"></form>
+ <div class="a-row a-carousel-controls a-carousel-row"><div class="a-carousel-row-inner"><div class="a-carousel-col a-carousel-center"><div class="a-carousel-viewport"><ol class="a-carousel" aria-live="assertive" role="list">
+ <li class="a-carousel-card" role="listitem" aria-setsize="5" aria-posinset="1">
+ <div id="gw-ftGr-desktop-hero-1" class="gw-ftGr-desktop-hero">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<style>
+ #image-map-ns_11W8BQTPRX9B0HEBP75P_19181_ .cropped-image-map-size {
+ position:relative;
+ overflow:hidden;
+ width:100%;
+ height:300px;
+}
+#image-map-ns_11W8BQTPRX9B0HEBP75P_19181_ .cropped-image-map-center-alignment {
+ text-align:center;
+ position:absolute;
+ top:0;
+ right:-200%;
+ bottom:0;
+ left:-200%;
+}
+#image-map-ns_11W8BQTPRX9B0HEBP75P_19181_ .cropped-image-map-left-alignment {
+ position:absolute;
+ top:0;
+ right:-400%;
+ bottom:0;
+ left:0px;
+ text-align:left;
+}
+#image-map-ns_11W8BQTPRX9B0HEBP75P_19181_ .cropped-image-map-right-alignment {
+ position:absolute;
+ top:0;
+ right:0px;
+ bottom:0;
+ left:-400%;
+ text-align:right;
+}
+.cropped-image-map-size img {
+ max-width: none;
+}
+</style>
+<div id="image-map-ns_11W8BQTPRX9B0HEBP75P_19181_" class="shogun-widget image-map gateway-desktop-map">
+ <div class="cropped-image-map-size">
+ <div class="cropped-image-map-center-alignment">
+ <map name="map_0_image-map-ns_11W8BQTPRX9B0HEBP75P_19181_">
+
+
+<area coords="0,900,4500,0" shape="rect" alt="Fire HD 6: First-Class Entertainment" href="/dp/B00KC6I06S/ref=br_imp_ara-1?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-hero-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978160002&pf_rd_i=desktop">
+
+</map>
+ <span style="display:inline-block">
+ <img alt="Fire HD 6: First-Class Entertainment" src="http://g-ecx.images-amazon.com/images/G/01/kindle/merch/2014/campaign/PreHoliday/HD6_HolidayTravel-GW2._UX1500_SX1500_V320366459_.jpg" class="a-dynamic-image" title="Fire HD 6: First-Class Entertainment" height="300px" width="1500px" data-a-dynamic-image="{&quot;http://g-ecx.images-amazon.com/images/G/01/kindle/merch/2014/campaign/PreHoliday/HD6_HolidayTravel-GW2._UX2250_SX2250_V320366459_.jpg&quot;:[450,2250],&quot;http://g-ecx.images-amazon.com/images/G/01/kindle/merch/2014/campaign/PreHoliday/HD6_HolidayTravel-GW2._UX1500_SX1500_V320366459_.jpg&quot;:[300,1500],&quot;http://g-ecx.images-amazon.com/images/G/01/kindle/merch/2014/campaign/PreHoliday/HD6_HolidayTravel-GW2._V320366459_.jpg&quot;:[900,4500],&quot;http://g-ecx.images-amazon.com/images/G/01/kindle/merch/2014/campaign/PreHoliday/HD6_HolidayTravel-GW2._UX3000_SX3000_V320366459_.jpg&quot;:[600,3000]}" usemap="#map_0_image-map-ns_11W8BQTPRX9B0HEBP75P_19181_">
+ </span>
+ </div>
+ </div>
+</div>
+
+
+ </div>
+ </li>
+ <li class="a-carousel-card" role="listitem" aria-setsize="5" aria-posinset="1">
+ <div class="a-lazy-loaded gw-ftGr-desktop-hero" id="gw-ftGr-desktop-hero-2">&nbsp;</div>
+ </li>
+ <li class="a-carousel-card" role="listitem" aria-setsize="5" aria-posinset="2">
+ <div class="a-lazy-loaded gw-ftGr-desktop-hero" id="gw-ftGr-desktop-hero-3">&nbsp;</div>
+ </li>
+ <li class="a-carousel-card" role="listitem" aria-setsize="5" aria-posinset="3">
+ <div class="a-lazy-loaded gw-ftGr-desktop-hero" id="gw-ftGr-desktop-hero-4">&nbsp;</div>
+ </li>
+ <li class="a-carousel-card" role="listitem" aria-setsize="5" aria-posinset="4">
+ <div class="a-lazy-loaded gw-ftGr-desktop-hero" id="gw-ftGr-desktop-hero-5">&nbsp;</div>
+ </li>
+ </ol></div></div></div></div>
+ </div>
+
+ <div id="gw-desktop-herotator-controls">
+ <ol style="width:110px">
+ <li>
+ <a href="#gw-ftGr-desktop-hero-1" class="active herotator-goToPage-1">
+ <span class="gw-text">gw-ftGr-desktop-hero-1</span>
+ </a>
+ </li>
+ <li>
+ <a href="#gw-ftGr-desktop-hero-2" class="herotator-goToPage-2">
+ <span class="gw-text">gw-ftGr-desktop-hero-2 </span>
+ </a>
+ </li>
+ <li>
+ <a href="#gw-ftGr-desktop-hero-3" class="herotator-goToPage-3">
+ <span class="gw-text">gw-ftGr-desktop-hero-3 </span>
+ </a>
+ </li>
+ <li>
+ <a href="#gw-ftGr-desktop-hero-4" class="herotator-goToPage-4">
+ <span class="gw-text">gw-ftGr-desktop-hero-4 </span>
+ </a>
+ </li>
+ <li>
+ <a href="#gw-ftGr-desktop-hero-5" class="herotator-goToPage-5">
+ <span class="gw-text">gw-ftGr-desktop-hero-5 </span>
+ </a>
+ </li>
+ </ol>
+ </div>
+
+</div>
+
+
+
+
+
+ </div>
+ <script>
+ GwInstrumentation.markAF();
+ </script>
+
+
+ <script type="text/javascript">
+
+ P.execute(function() {
+ var begin_time = Date.now();
+
+ var btf_hero_content = [{"callbackUrl":"/gp/gw/ajax/desktop/herotator/record-impressions.html?ie=UTF8&aPTID=36701&cmpnId=427061762&cnttId=1&h=232C8A27F9C857162CAE8E8373EF5720121D90937&mId=ATVPDKIKX0DER&mkId=ATVPDKIKX0DER&pId=1979645462&pIdent=desktop&rId=1GM97J2XXNXR8Y322FQC2&sid=8&slotName=desktop-hero-2","content":"\n \n \n \n \n \n \n\n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n \n\n \n \n \n\n\n\n\n \n \n\n\n\n\n\n\n \n \n\n \n \n \n\n\n\n\n\n\n\n\n \n\n \n\n\n\n\n\n\n\n\n\n\n \n \n\n\n\n\n\n\n<style>\n #image-map-ns_1GM97J2XXNXR8Y322FQC_20846_ .cropped-image-map-size {\n\tposition:relative;\n\toverflow:hidden;\n\twidth:100%;\n\theight:300px;\n}\n#image-map-ns_1GM97J2XXNXR8Y322FQC_20846_ .cropped-image-map-center-alignment {\n\ttext-align:center;\n\tposition:absolute;\n\t\ttop:0;\n\tright:-200%;\n\tbottom:0;\n\tleft:-200%;\n}\n#image-map-ns_1GM97J2XXNXR8Y322FQC_20846_ .cropped-image-map-left-alignment {\n\tposition:absolute;\n\t\ttop:0;\n\tright:-400%;\n\tbottom:0;\n\tleft:0px;\n\ttext-align:left;\n}\n#image-map-ns_1GM97J2XXNXR8Y322FQC_20846_ .cropped-image-map-right-alignment {\n\tposition:absolute;\n\t\ttop:0;\n\tright:0px;\n\tbottom:0;\n\tleft:-400%;\n\ttext-align:right;\n}\n.cropped-image-map-size img {\n\t max-width: none;\n}\n</style>\n<div id=\"image-map-ns_1GM97J2XXNXR8Y322FQC_20846_\" class=\"shogun-widget image-map gateway-desktop-map\">\n <div class=\"cropped-image-map-size\">\n <div class=\"cropped-image-map-center-alignment\">\n <map name=\"map_0_image-map-ns_1GM97J2XXNXR8Y322FQC_20846_\">\n \n\n<area coords=\"0,300,1500,0\" shape=\"rect\" alt=\"Black Friday Deals Week\" href=\"/b/ref=br_imp_ara-1?_encoding=UTF8&node=384082011&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-hero-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1979645462&pf_rd_i=desktop\">\n\n</map>\n <span style=\"display:inline-block\">\n <img alt=\"Black Friday Deals Week\" src=\"http://g-ecx.images-amazon.com/images/G/01/Gateway/Heroes/SUPERdwB._UX1500_SX1500_V320725559_.png\" class=\"a-dynamic-image\" title=\"Black Friday Deals Week\" height=\"300px\" width=\"1500px\" data-a-dynamic-image=\"{&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Heroes/SUPERdwB._UX3000_SX3000_V320725559_.png&quot;:[600,3000],&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Heroes/SUPERdwB._UX1500_SX1500_V320725559_.png&quot;:[300,1500],&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Heroes/SUPERdwB._V320725559_.png&quot;:[900,4500],&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Heroes/SUPERdwB._UX2250_SX2250_V320725559_.png&quot;:[450,2250]}\" usemap=\"#map_0_image-map-ns_1GM97J2XXNXR8Y322FQC_20846_\">\n </span>\n </div>\n </div>\n</div>\n","fgID":"desktop-hero-2"},{"callbackUrl":"/gp/gw/ajax/desktop/herotator/record-impressions.html?ie=UTF8&aPTID=36701&cmpnId=427073882&cnttId=1&h=13BFA0CE21C80D9CA06C5088FB0741A323C9E6F40&mId=ATVPDKIKX0DER&mkId=ATVPDKIKX0DER&pId=1980078842&pIdent=desktop&rId=1GM97J2XXNXR8Y322FQC2&sid=8&slotName=desktop-hero-3","content":"\n \n \n \n \n \n \n\n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n \n\n \n \n \n\n\n\n\n \n \n\n\n\n\n\n\n \n \n\n \n \n \n\n\n\n\n\n\n\n\n \n\n \n\n\n\n\n\n\n\n\n\n\n \n \n\n\n\n\n\n\n<style>\n #image-map-ns_1GM97J2XXNXR8Y322FQC_20847_ .cropped-image-map-size {\n\tposition:relative;\n\toverflow:hidden;\n\twidth:100%;\n\theight:300px;\n}\n#image-map-ns_1GM97J2XXNXR8Y322FQC_20847_ .cropped-image-map-center-alignment {\n\ttext-align:center;\n\tposition:absolute;\n\t\ttop:0;\n\tright:-200%;\n\tbottom:0;\n\tleft:-200%;\n}\n#image-map-ns_1GM97J2XXNXR8Y322FQC_20847_ .cropped-image-map-left-alignment {\n\tposition:absolute;\n\t\ttop:0;\n\tright:-400%;\n\tbottom:0;\n\tleft:0px;\n\ttext-align:left;\n}\n#image-map-ns_1GM97J2XXNXR8Y322FQC_20847_ .cropped-image-map-right-alignment {\n\tposition:absolute;\n\t\ttop:0;\n\tright:0px;\n\tbottom:0;\n\tleft:-400%;\n\ttext-align:right;\n}\n.cropped-image-map-size img {\n\t max-width: none;\n}\n</style>\n<div id=\"image-map-ns_1GM97J2XXNXR8Y322FQC_20847_\" class=\"shogun-widget image-map gateway-desktop-map\">\n <div class=\"cropped-image-map-size\">\n <div class=\"cropped-image-map-center-alignment\">\n <map name=\"map_0_image-map-ns_1GM97J2XXNXR8Y322FQC_20847_\">\n \n\n<area coords=\"0,900,4500,0\" shape=\"rect\" alt=\"Women&#39;s Top Gifts\" href=\"/b/ref=br_imp_ara-1?_encoding=UTF8&node=7147440011&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-hero-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1980078842&pf_rd_i=desktop\">\n\n</map>\n <span style=\"display:inline-block\">\n <img alt=\"Women&#39;s Top Gifts\" src=\"http://g-ecx.images-amazon.com/images/G/01/AMAZON_FASHION/2014/WAYFINDING/EDITORIAL/HOL_2/GATEWAY/HERO/HERO_WOMEN_THG_COAT._UX1500_SX1500_V320700442_.jpg\" class=\"a-dynamic-image\" title=\"Women&#39;s Top Gifts\" height=\"300px\" width=\"1500px\" data-a-dynamic-image=\"{&quot;http://g-ecx.images-amazon.com/images/G/01/AMAZON_FASHION/2014/WAYFINDING/EDITORIAL/HOL_2/GATEWAY/HERO/HERO_WOMEN_THG_COAT._UX3000_SX3000_V320700442_.jpg&quot;:[600,3000],&quot;http://g-ecx.images-amazon.com/images/G/01/AMAZON_FASHION/2014/WAYFINDING/EDITORIAL/HOL_2/GATEWAY/HERO/HERO_WOMEN_THG_COAT._UX2250_SX2250_V320700442_.jpg&quot;:[450,2250],&quot;http://g-ecx.images-amazon.com/images/G/01/AMAZON_FASHION/2014/WAYFINDING/EDITORIAL/HOL_2/GATEWAY/HERO/HERO_WOMEN_THG_COAT._V320700442_.jpg&quot;:[900,4500],&quot;http://g-ecx.images-amazon.com/images/G/01/AMAZON_FASHION/2014/WAYFINDING/EDITORIAL/HOL_2/GATEWAY/HERO/HERO_WOMEN_THG_COAT._UX1500_SX1500_V320700442_.jpg&quot;:[300,1500]}\" usemap=\"#map_0_image-map-ns_1GM97J2XXNXR8Y322FQC_20847_\">\n </span>\n </div>\n </div>\n</div>\n","fgID":"desktop-hero-3"},{"callbackUrl":"/gp/gw/ajax/desktop/herotator/record-impressions.html?ie=UTF8&aPTID=36701&cmpnId=426776082&cnttId=3&h=70D6649CBE4FC28BD55797F30DA1346A17EB8D298&mId=ATVPDKIKX0DER&mkId=ATVPDKIKX0DER&pId=1978160262&pIdent=desktop&rId=1GM97J2XXNXR8Y322FQC2&sid=8&slotName=desktop-hero-4","content":"\n \n \n \n \n \n \n\n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n \n\n \n \n \n\n\n\n\n \n \n\n\n\n\n\n\n \n \n\n \n \n \n\n\n\n\n\n\n\n\n \n\n \n\n\n\n\n\n\n\n\n\n\n \n \n\n\n\n\n\n\n<style>\n #image-map-ns_1GM97J2XXNXR8Y322FQC_20848_ .cropped-image-map-size {\n\tposition:relative;\n\toverflow:hidden;\n\twidth:100%;\n\theight:300px;\n}\n#image-map-ns_1GM97J2XXNXR8Y322FQC_20848_ .cropped-image-map-center-alignment {\n\ttext-align:center;\n\tposition:absolute;\n\t\ttop:0;\n\tright:-200%;\n\tbottom:0;\n\tleft:-200%;\n}\n#image-map-ns_1GM97J2XXNXR8Y322FQC_20848_ .cropped-image-map-left-alignment {\n\tposition:absolute;\n\t\ttop:0;\n\tright:-400%;\n\tbottom:0;\n\tleft:0px;\n\ttext-align:left;\n}\n#image-map-ns_1GM97J2XXNXR8Y322FQC_20848_ .cropped-image-map-right-alignment {\n\tposition:absolute;\n\t\ttop:0;\n\tright:0px;\n\tbottom:0;\n\tleft:-400%;\n\ttext-align:right;\n}\n.cropped-image-map-size img {\n\t max-width: none;\n}\n</style>\n<div id=\"image-map-ns_1GM97J2XXNXR8Y322FQC_20848_\" class=\"shogun-widget image-map gateway-desktop-map\">\n <div class=\"cropped-image-map-size\">\n <div class=\"cropped-image-map-center-alignment\">\n <map name=\"map_0_image-map-ns_1GM97J2XXNXR8Y322FQC_20848_\">\n \n\n<area coords=\"0,900,4500,0\" shape=\"rect\" alt=\"All Is Bright\" href=\"/dp/B00PR9PUB8/ref=dm_aib_gw_hero?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-hero-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978160262&pf_rd_i=desktop\">\n\n</map>\n <span style=\"display:inline-block\">\n <img alt=\"All Is Bright\" src=\"http://g-ecx.images-amazon.com/images/G/01/digital/music/merch/holiday2014/AllIsBright/AIB_110314_Herotator_4500x900_v2._UX1500_SX1500_V319827118_.jpg\" class=\"a-dynamic-image\" title=\"All Is Bright\" height=\"300px\" width=\"1500px\" data-a-dynamic-image=\"{&quot;http://g-ecx.images-amazon.com/images/G/01/digital/music/merch/holiday2014/AllIsBright/AIB_110314_Herotator_4500x900_v2._UX1500_SX1500_V319827118_.jpg&quot;:[300,1500],&quot;http://g-ecx.images-amazon.com/images/G/01/digital/music/merch/holiday2014/AllIsBright/AIB_110314_Herotator_4500x900_v2._UX2250_SX2250_V319827118_.jpg&quot;:[450,2250],&quot;http://g-ecx.images-amazon.com/images/G/01/digital/music/merch/holiday2014/AllIsBright/AIB_110314_Herotator_4500x900_v2._V319827118_.jpg&quot;:[900,4500],&quot;http://g-ecx.images-amazon.com/images/G/01/digital/music/merch/holiday2014/AllIsBright/AIB_110314_Herotator_4500x900_v2._UX3000_SX3000_V319827118_.jpg&quot;:[600,3000]}\" usemap=\"#map_0_image-map-ns_1GM97J2XXNXR8Y322FQC_20848_\">\n </span>\n </div>\n </div>\n</div>\n","fgID":"desktop-hero-4"},{"callbackUrl":"/gp/gw/ajax/desktop/herotator/record-impressions.html?ie=UTF8&aPTID=36701&cmpnId=425551322&cnttId=1&h=01CD2956CF4276D98AAB9842E48A3986338E247E7&mId=ATVPDKIKX0DER&mkId=ATVPDKIKX0DER&pId=1978160842&pIdent=desktop&rId=1GM97J2XXNXR8Y322FQC0&sid=8&slotName=desktop-hero-5","content":"\n \n \n \n \n \n \n\n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n \n\n \n \n \n\n\n\n\n \n \n\n\n\n\n\n\n \n \n\n \n \n \n\n\n\n\n\n\n\n\n \n\n \n\n\n\n\n\n\n\n\n\n\n \n \n\n\n\n\n\n\n<style>\n #image-map-ns_1GM97J2XXNXR8Y322FQC_20849_ .cropped-image-map-size {\n\tposition:relative;\n\toverflow:hidden;\n\twidth:100%;\n\theight:300px;\n}\n#image-map-ns_1GM97J2XXNXR8Y322FQC_20849_ .cropped-image-map-center-alignment {\n\ttext-align:center;\n\tposition:absolute;\n\t\ttop:0;\n\tright:-200%;\n\tbottom:0;\n\tleft:-200%;\n}\n#image-map-ns_1GM97J2XXNXR8Y322FQC_20849_ .cropped-image-map-left-alignment {\n\tposition:absolute;\n\t\ttop:0;\n\tright:-400%;\n\tbottom:0;\n\tleft:0px;\n\ttext-align:left;\n}\n#image-map-ns_1GM97J2XXNXR8Y322FQC_20849_ .cropped-image-map-right-alignment {\n\tposition:absolute;\n\t\ttop:0;\n\tright:0px;\n\tbottom:0;\n\tleft:-400%;\n\ttext-align:right;\n}\n.cropped-image-map-size img {\n\t max-width: none;\n}\n</style>\n<div id=\"image-map-ns_1GM97J2XXNXR8Y322FQC_20849_\" class=\"shogun-widget image-map gateway-desktop-map\">\n <div class=\"cropped-image-map-size\">\n <div class=\"cropped-image-map-center-alignment\">\n <map name=\"map_0_image-map-ns_1GM97J2XXNXR8Y322FQC_20849_\">\n \n\n<area coords=\"0,900,4500,0\" shape=\"rect\" alt=\"Kindle w Touch\" href=\"/dp/B00I15SB16/ref=br_imp_ara-1?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-hero-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978160842&pf_rd_i=desktop\">\n\n</map>\n <span style=\"display:inline-block\">\n <img alt=\"Kindle w Touch\" src=\"http://g-ecx.images-amazon.com/images/G/01/Gateway/Heroes/kindleparkII._UX1500_SX1500_V323432045_.jpg\" class=\"a-dynamic-image\" title=\"Kindle w Touch\" height=\"300px\" width=\"1500px\" data-a-dynamic-image=\"{&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Heroes/kindleparkII._UX3000_SX3000_V323432045_.jpg&quot;:[600,3000],&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Heroes/kindleparkII._V323432045_.jpg&quot;:[900,4500],&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Heroes/kindleparkII._UX2250_SX2250_V323432045_.jpg&quot;:[450,2250],&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Heroes/kindleparkII._UX1500_SX1500_V323432045_.jpg&quot;:[300,1500]}\" usemap=\"#map_0_image-map-ns_1GM97J2XXNXR8Y322FQC_20849_\">\n </span>\n </div>\n </div>\n</div>\n","fgID":"desktop-hero-5"}];
+ var hero_unloaded_images = {};
+
+ var autorotations_maximum = btf_hero_content.length + 1;
+ var autorotations_count = 0;
+ var autorotation_delay = 5000; // default to 5 seconds
+ var stopped = false;
+
+ var a_carousel = undefined;
+ var autorotation_state = UnreadyState();
+
+ var tick_delay = 1000; //ms
+ var delay_countdown = 0;
+
+ P.register("gw-desktop-herotator", function() {
+ return {
+ get_autorotation_delay: function() {
+ return autorotation_delay;
+ },
+ set_autorotation_delay: function(arg) {
+ autorotation_delay = parseInt(arg);
+ }
+ };
+ });
+
+ var desktopHerotatorEl = document.getElementById("gw-desktop-herotator");
+ add_event_listener(desktopHerotatorEl, 'click', on_user_interaction);
+ add_event_listener(desktopHerotatorEl, 'touchstart', on_user_interaction);
+ add_event_listener(desktopHerotatorEl, 'touchmove', on_user_interaction);
+ add_event_listener(desktopHerotatorEl, 'touchend', on_user_interaction);
+ add_event_listener(desktopHerotatorEl, 'touchcancel', on_user_interaction);
+ add_event_listener(desktopHerotatorEl, 'mouseenter', on_mouse_move);
+ add_event_listener(desktopHerotatorEl, 'mousemove', on_mouse_move);
+
+ var spinner_death_classname_regex = new RegExp("\\s*\\ba\\-lazy\\-loaded\\b\\s*");
+
+ var gw_ftGr_desktop_hero_1 = document.getElementById("gw-ftGr-desktop-hero-1");
+ var desktop_hero_1_imgs = gw_ftGr_desktop_hero_1.getElementsByTagName("img");
+ load_images("desktop-hero-1", desktop_hero_1_imgs || []);
+
+ P.when("A", "gw-desktop-herotator", "a-carousel-framework", "cf").execute(function(A, gw_desktop_herotator, a_carousel_framework) {
+ a_carousel_framework.onInit("gateway-desktop-layout.herotator", function on_carousel_initialized(){
+ A.on("a:carousel:gateway-desktop-layout.herotator:change:pageNumber", function(data) {
+ var pageNum = data.newValue;
+ record_impression(pageNum);
+ });
+ var $a_carousel_container = A.$("#gw-desktop-herotator > .a-carousel-container");
+ a_carousel = a_carousel_framework.getCarousel($a_carousel_container);
+ populate_btf_hero_slots();
+ autorotation_state.carousel_init();
+ });
+
+ });
+
+ return;
+
+ function populate_btf_hero_slots() {
+ var fgIndex = 0;
+ while(btf_hero_content[fgIndex]) {
+ populate_slot_content(btf_hero_content[fgIndex].fgID, btf_hero_content[fgIndex].content);
+ fgIndex++;
+ }
+ }
+
+ function record_impression(page_number) {
+ P.when("A").execute(function(A) {
+ var btf_hero_content_index = (page_number - 2);
+ if(btf_hero_content[btf_hero_content_index] && btf_hero_content[btf_hero_content_index].callbackUrl) {
+ A.$.post(btf_hero_content[btf_hero_content_index].callbackUrl);
+ delete btf_hero_content[btf_hero_content_index].callbackUrl;
+ }
+ });
+ }
+
+ function on_user_interaction() {
+ if(!stopped) {
+ log_user_interaction_before_autorotation_completion();
+ }
+ stop_autorotate();
+ }
+
+ function on_mouse_move() {
+ clearTimeout(on_mouse_move.timeout_id);
+ on_mouse_move.timeout_id = setTimeout(function() {
+ delay_countdown = Math.max(delay_countdown, 3);
+ }, 0);
+ }
+
+ function stop_autorotate() {
+ stopped = true;
+ }
+
+ function populate_slot_content(fgID, content) {
+ var ftGrEl = document.getElementById("gw-ftGr-"+fgID);
+ var classAttr = ftGrEl.getAttribute("class");
+ if(!spinner_death_classname_regex.test(classAttr)) {
+ return
+ }
+ ftGrEl.setAttribute("class", classAttr.replace(spinner_death_classname_regex, ""));
+ ftGrEl.innerHTML = content;
+ var imgEls = ftGrEl.getElementsByTagName("img");
+ load_images(fgID, imgEls);
+ }
+
+ function load_images(fgID, imgEls) {
+ hero_unloaded_images[fgID] = [];
+ var img_count = imgEls.length;
+ if(img_count > 0) {
+ for(var i=0; i<img_count; i++) {
+ (function(i) {
+ var image = new Image();
+ image.onload = function() {
+ hero_unloaded_images[fgID].splice(index_of(hero_unloaded_images[fgID], image), 1);
+ if(check_if_all_images_loaded(fgID)) {
+ autorotation_state.hero_images_loaded(fgID);
+ }
+ }
+ hero_unloaded_images[fgID].push(image);
+ image.src = imgEls[i].src;
+ }(i));
+ }
+ }
+ else {
+ autorotation_state.hero_images_loaded(fgID);
+ }
+ check_if_all_images_loaded(fgID);
+ }
+
+ function check_if_all_images_loaded(fgID) {
+ var loaded = !!(hero_unloaded_images[fgID] && hero_unloaded_images[fgID].length === 0);
+ return loaded;
+ }
+
+ function log_spinner_death() {
+ if(log_spinner_death.sent) { return; }
+ increment_ctr({"exp":"1416736965","rID":"1GM97J2XXNXR8Y322FQC","h":"E390A5DB63D688F6EE56581FB1142DD931EF741C","ctr":"desktop_herotator_spinner_death"});
+ log_spinner_death.sent = true;
+ }
+
+ function log_premature_autorotation() {
+ if(log_premature_autorotation.sent) { return; }
+ increment_ctr({"exp":"1416736965","rID":"1GM97J2XXNXR8Y322FQC","h":"0C660B11AEF0B367161DEB7C9EF84F3CFDD2941E","ctr":"desktop_herotator_premature_autorotation"});
+ log_premature_autorotation.sent = true;
+ }
+
+ function log_user_interaction_before_autorotation_completion() {
+ if(log_user_interaction_before_autorotation_completion.sent) { return; }
+ clearTimeout(log_user_interaction_before_autorotation_completion.timeout);
+ log_user_interaction_before_autorotation_completion.timeout = setTimeout(function() {
+ increment_ctr({"exp":"1416736965","rID":"1GM97J2XXNXR8Y322FQC","h":"A5FE173C679D3BC9298312793770AB0D2864D4FC","ctr":"desktop_herotator_user_interaction_before_autorotation_completion"});
+ log_user_interaction_before_autorotation_completion.sent = true;
+ }, 2000);
+ }
+
+ function increment_ctr(data) {
+ var ajaxMethod = "post";
+ var ajaxHandler = "/gp/gw/ajax/ctr.html";
+ P.when('A').execute(function(A) {
+ A.$.ajax(ajaxHandler, {async:false, cache:false, type:ajaxMethod, data:data});
+ });
+ }
+
+ function tick() {
+ delay_countdown--;
+ if(delay_countdown <= 0) {
+ autorotation_state.delay_complete();
+ }
+ if(!stopped) {
+ setTimeout(tick, tick_delay);
+ }
+ }
+
+ function begin_delay_countdown() {
+ var since_begin_time = (Date.now() - begin_time);
+ delay_countdown = Math.max(1, (autorotation_delay-since_begin_time)/tick_delay);
+ setTimeout(tick, tick_delay);
+ }
+
+ function reset_delay_countdown(arg) {
+ delay_countdown = Math.max(arg || (autorotation_delay/tick_delay), delay_countdown);
+ }
+
+ function add_event_listener(element, evt, fn) {
+ if (element.addEventListener) {
+ element.addEventListener(evt, fn, false);
+ }
+ else {
+ element.attachEvent("on"+evt, fn);
+ }
+ }
+
+ function index_of(arr, el) {
+ if(arr.indexOf) { return arr.indexOf(el); }
+ for(var i=0; i<arr.length; i++) {
+ if(arr[i] === el) { return i; }
+ }
+ }
+
+ function create_controls() {
+ P.when("A").execute(function(A) {
+ A.$("#gw-desktop-herotator").addClass("gw-desktop-herotator-ready");
+ var $controls_el = A.$("#gw-desktop-herotator-controls");
+ var $controls_links = $controls_el.find("a");
+ $controls_links.click(function(e) {
+ var m = undefined;
+ var class_attr = A.$(this).attr("class") || "";
+ if(m = class_attr.match(/\bherotator\-goToPage\-(\d+)\b/)) {
+ var page_num = Number(m[1]);
+ a_carousel.gotoPage(page_num);
+ on_user_interaction();
+ e.preventDefault();
+ }
+ });
+ $controls_links.each(function() {
+ var $heroEl = A.$(A.$(this).attr("href"));
+ var altText = $heroEl.find(".gw-ftGr-desktop-hero-alt").text();
+ altText = altText || $heroEl.find(".image-map.shogun-widget img").attr("alt");
+ if(altText) {
+ A.$(this).find(".gw-text").text(altText);
+ }
+ });
+ $controls_el.find("li").fadeIn(800);
+ A.on("a:carousel:gateway-desktop-layout.herotator:change:pageNumber", function(data) {
+ var pageNum = data.newValue;
+ A.$("#gw-desktop-herotator-controls li a").removeClass("active");
+ A.$("#gw-desktop-herotator-controls li a.herotator-goToPage-"+pageNum).addClass("active");
+ });
+ });
+ }
+
+ /* State Constructors */
+
+ function BaseAutorotationState(arg) {
+ arg = arg || {};
+ var noop = function() {};
+ return {
+ delay_complete : arg.delay_complete || noop,
+ carousel_init : arg.carousel_init || noop,
+ hero_images_loaded : arg.hero_images_loaded || noop
+ };
+ }
+
+ function UnreadyState() {
+ var carousel_init = false;
+ return BaseAutorotationState({
+ hero_images_loaded: function(fgID) {
+ if(fgID === 'desktop-hero-1') {
+ begin_delay_countdown();
+ check_if_ready();
+ }
+ },
+ carousel_init: function() {
+ carousel_init = true;
+ check_if_ready();
+ }
+ });
+
+ function check_if_ready() {
+ if(check_if_all_images_loaded("desktop-hero-1") && carousel_init) {
+ create_controls();
+ autorotation_state = PendingState();
+ return true;
+ }
+ else {
+ return false;
+ }
+ }
+
+ }
+
+ function PendingState() {
+ if(autorotations_count >= btf_hero_content.length) {
+ return PendingFinalRotationState();
+ }
+ var nextfgID = btf_hero_content[(autorotations_count)].fgID;
+ return BaseAutorotationState({
+ hero_images_loaded: function(fgID) {
+ if(fgID === nextfgID) {
+ autorotation_state = PendingDelayState();
+ }
+ },
+ delay_complete: function() {
+ autorotation_state = PendingImagesLoadedState();
+ }
+ });
+ }
+
+ function PendingDelayState() {
+ return BaseAutorotationState({
+ delay_complete: function() {
+ autorotation_state = AutorotatingState();
+ }
+ });
+ }
+
+ function PendingImagesLoadedState() {
+ var nextfgID = btf_hero_content[(autorotations_count)].fgID;
+ if(check_if_all_images_loaded(nextfgID)) {
+ return AutorotatingState();
+ }
+ return BaseAutorotationState({
+ hero_images_loaded: function(fgID) {
+ if(fgID === nextfgID) {
+ autorotation_state = AutorotatingState();
+ }
+ }
+ });
+ }
+
+ function PendingFinalRotationState() {
+ return PendingDelayState();
+ }
+
+ function AutorotatingState() {
+ autorotations_count++;
+ var skip = false;
+ if(autorotations_count <= autorotations_maximum) {
+ if(btf_hero_content[(autorotations_count-1)]) {
+ var fgID = btf_hero_content[(autorotations_count-1)].fgID;
+ var ftGrEl = document.getElementById("gw-ftGr-"+fgID);
+
+ if(spinner_death_classname_regex.test(ftGrEl.getAttribute("class"))) {
+ log_spinner_death();
+ skip = true;
+ }
+
+ if(!check_if_all_images_loaded(fgID)) {
+ log_premature_autorotation();
+ }
+ }
+
+ if(btf_hero_content[autorotations_count]) {
+ populate_slot_content(btf_hero_content[autorotations_count].fgID, btf_hero_content[autorotations_count].content);
+ }
+ if(!stopped) {
+ var page = (autorotations_count % autorotations_maximum)+1;
+ a_carousel.gotoPage(page);
+ }
+
+ if(skip) {
+ return AutorotatingState();
+ }
+ }
+ else {
+ stop_autorotate();
+ return BaseAutorotationState({});
+ }
+ reset_delay_countdown();
+ return PendingState();
+ }
+ });
+ </script>
+
+
+ <div id="gw-content-grid" class="a-fixed-right-flipped-grid"><div class="a-fixed-right-grid-inner">
+ <div class="a-section a-spacing-medium">
+ <div id="sidebar" class="a-fixed-right-grid-col a-col-right" style="width:310px;float:right;">
+
+
+ <div class='displayAd' id='desktop-ad-atf'>
+
+
+
+
+
+<div id="DAr2" class="arid-79be3bb644394c09b7a0ac76574ab5b3 copilot-secure-display" data-arid="79be3bb644394c09b7a0ac76574ab5b3" style="width:300px;height:280px;"><iframe id="DA3916i" title="Advertisement" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" allowtransparency="true" width="302" height="250"class="ap_never_hide"></iframe></div><script>(function(w,d,e){var i='DAr2';if(w.uDA=w.ues&&w.uet&&w.uex){ues('wb',i,1);uet('bb',i,{wb:1})}e=d.getElementById('DA3916i');e.a=(w.aanParams=w.aanParams||{})['right-2']='site=amazon.us;pt=Gateway;slot=right-2;pid=desktop;bn=378521011;prid=1GM97J2XXNXR8Y322FQC;arid=79be3bb644394c09b7a0ac76574ab5b3;ef=0.05;ad-sid=0101d03fd327bef75456bdd923a6b844fccfdb0100ad06e83d92bc0b6ff27cba07ea';e.f='/aan/2009-09-09/ad/feedback.us/default?pt=RemoteContent&slot=main&pt2=us-external';e.fi=1;var p=function(b,d,k,s){var d="<body>"+d+"<\/body>",l,m,f=b.parentNode.id,i=document.getElementById(f),c=(i||{}).ad||{},g=c.a||{};var u=function(){return i.getElementsByTagName("iframe")[0];};u().contentWindow.onerror=function(m){var creativeId = typeof aanResponse!=="undefined"?aanResponse.creativeId :"";ueLogError&&ueLogError({message:'displayads-iframe-'+creativeId+'-'+m,logLevel:'ERROR',attribution:'dacx'}),!0};if(!c.a){var c=parent.aanParams,e;for(e in c)if("DA"+e.replace(/([a-z])[a-z]+(-|$)/g,"$1")==f)for(var h=c[e].split(";"),j=0,t=h.length;j<t;j++){var n=h[j].split("=");g[n[0]]=n[1]}}var q=function(){if(i&&u()){var a=u(),a=(a.contentWindow||a.contentDocument||{}).aanResponse||{};if(a.adId){var a={s:g.site||"",p:g.pt||"",l:g.slot||"",a:a.adId||0,c:a.creativeId||0,n:a.adNetwork||"DART",m:"load",v:l},c=[],b;for(b in a)c.push('"'+b+'":"'+a[b]+'"');(new Image).src=m+escape("{"+c.join(",")+"}")}else setTimeout(q,1E3)}},r=function(a){k&&(parent.uDA&&f)&&(parent["ld"==a?"uex":"uet"](a,f,{wb:1}))};k&&(b.z=function(){r("cf")},b.onload=function(){l=new Date-adStartTime;m="//fls-"+s+".amazon.com/1/display-ads-cx/1/OP/?LMET";q();r("ld");if(f=="DAr2"){if(typeof(amznJQ)!="undefined"&&amznJQ)amznJQ.declareAvailable('r2Loaded');else if(typeof(P)!="undefined")P.register("r2Loaded");}});c=navigator.userAgent.toLowerCase();e=/firefox/.test(c);c=/msie/.test(c);b=(h=b.contentWindow)?h.document:b.contentDocument;c?-1!=d.indexOf(".close()")&&(b.close=function(){}):(e||b.open("text/html","replace"),d+="<script>document.close()<\/script>");adStartTime=new Date;b.write(d)};if(w.uDA)uet('af',i,{wb:1});var d16g_doubleClickScriptUrl = "http://ad.doubleclick.net/N4215/adj/amzn.us.gw.atf;sz=300x250;oe=ISO-8859-1;u=79be3bb644394c09b7a0ac76574ab5b3;s=i0;s=i1;s=i2;s=i3;s=i5;s=i6;s=i7;s=i8;s=i9;s=i14;s=m1;s=m4;s=u4;s=u5;s=u12;s=u17;z=2691;s=3072;s=32;s=1009;s=3103;s=3717;s=7250;s=1279;dc_ref=http%3A%2F%2Fwww.amazon.com;tile=1;ord=1GM97J2XXNXR8Y322FQC?";if(!w.d16g_originalPageOrd) {w.d16g_originalPageOrd = Math.floor(Math.random()*10e12);}if(w.d16g_originalPageOrd) {d16g_doubleClickScriptUrl = d16g_doubleClickScriptUrl.replace(/ord=.*;/gi,"ord="+w.d16g_originalPageOrd+";");d16g_doubleClickScriptUrl = d16g_doubleClickScriptUrl.replace(/ord=.*\?/gi,"ord="+w.d16g_originalPageOrd+"?");}var onErrorOverride = '<script> window.onerror = function(message, url, line){ var creativeId = typeof aanResponse !=="undefined" ? aanResponse.creativeId : ""; if(window.ueLogError){ window.ueLogError({message:"displayads-iframe" + creativeId + "-" + message,logLevel:"ERROR",attribution:"3pDACX"});}return true;}<\/script>'; var doubleClickScript = '<script src="'+d16g_doubleClickScriptUrl+'"onload="frameElement.z()" onreadystatechange="/complete/.test(this.readyState)&&frameElement.z()"><\/script>';p(e,onErrorOverride + doubleClickScript,1,'na');})(window, document);</script>
+ </div>
+ <hr class='slot-hr desktop-ad-atf-hr' />
+
+
+ <div class='sidekick' id='desktop-sidekick-1'>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<style>
+ #image-map-ns_0Z941X9PHHBC1XRYTRQ7_5563_ .cropped-image-map-size {
+ position:relative;
+ overflow:hidden;
+ width:100%;
+ height:170px;
+}
+#image-map-ns_0Z941X9PHHBC1XRYTRQ7_5563_ .cropped-image-map-center-alignment {
+ text-align:center;
+ position:absolute;
+ top:0;
+ right:-200%;
+ bottom:0;
+ left:-200%;
+}
+#image-map-ns_0Z941X9PHHBC1XRYTRQ7_5563_ .cropped-image-map-left-alignment {
+ position:absolute;
+ top:0;
+ right:-400%;
+ bottom:0;
+ left:0px;
+ text-align:left;
+}
+#image-map-ns_0Z941X9PHHBC1XRYTRQ7_5563_ .cropped-image-map-right-alignment {
+ position:absolute;
+ top:0;
+ right:0px;
+ bottom:0;
+ left:-400%;
+ text-align:right;
+}
+.cropped-image-map-size img {
+ max-width: none;
+}
+</style>
+<div id="image-map-ns_0Z941X9PHHBC1XRYTRQ7_5563_" class="shogun-widget image-map gateway-desktop-link">
+ <div class="cropped-image-map-size">
+ <div class="cropped-image-map-center-alignment">
+ <span style="display:inline-block">
+ <a class="a-link-normal a-inline-block" href="/b/ref=br_imp?_encoding=UTF8&node=7258612011&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-sidekick-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978120222&pf_rd_i=desktop"><img alt="Electronics Gift Guide" src="http://g-ecx.images-amazon.com/images/G/01/Gateway/Sidekicks/EGGsidekick._UX264_SX264_V321283694_.png" class="a-dynamic-image" title="Electronics Gift Guide" height="170px" width="264px" data-a-dynamic-image="{&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Sidekicks/EGGsidekick._V321283694_.png&quot;:[510,792],&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Sidekicks/EGGsidekick._UX528_SX528_V321283694_.png&quot;:[340,528],&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Sidekicks/EGGsidekick._UX396_SX396_V321283694_.png&quot;:[255,396],&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Sidekicks/EGGsidekick._UX264_SX264_V321283694_.png&quot;:[170,264]}"></a>
+ </span>
+ </div>
+ </div>
+</div>
+
+ </div>
+ <hr class='slot-hr desktop-sidekick-1-hr' />
+
+
+ <div class='sidekick' id='desktop-sidekick-2'>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<style>
+ #image-map-ns_0ZVMDSM0Q25KDT3DXCRC_14213_ .cropped-image-map-size {
+ position:relative;
+ overflow:hidden;
+ width:100%;
+ height:170px;
+}
+#image-map-ns_0ZVMDSM0Q25KDT3DXCRC_14213_ .cropped-image-map-center-alignment {
+ text-align:center;
+ position:absolute;
+ top:0;
+ right:-200%;
+ bottom:0;
+ left:-200%;
+}
+#image-map-ns_0ZVMDSM0Q25KDT3DXCRC_14213_ .cropped-image-map-left-alignment {
+ position:absolute;
+ top:0;
+ right:-400%;
+ bottom:0;
+ left:0px;
+ text-align:left;
+}
+#image-map-ns_0ZVMDSM0Q25KDT3DXCRC_14213_ .cropped-image-map-right-alignment {
+ position:absolute;
+ top:0;
+ right:0px;
+ bottom:0;
+ left:-400%;
+ text-align:right;
+}
+.cropped-image-map-size img {
+ max-width: none;
+}
+</style>
+<div id="image-map-ns_0ZVMDSM0Q25KDT3DXCRC_14213_" class="shogun-widget image-map gateway-desktop-link">
+ <div class="cropped-image-map-size">
+ <div class="cropped-image-map-center-alignment">
+ <span style="display:inline-block">
+ <a class="a-link-normal a-inline-block" href="/b/ref=br_imp?_encoding=UTF8&field-enc-merchantbin=ATVPDKIKX0DER&node=10340302011&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-sidekick-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970017502&pf_rd_i=desktop"><img alt="$59.99 Invicta Watches" src="http://g-ecx.images-amazon.com/images/G/01/AMAZON_FASHION/2014/WATCHES/SALE_SUITES/11_NOV/1121_INVICTA_COOP/1121_Invicta_sidekickHD_Deal2._UX264_SX264_V321866416_.jpg" class="a-dynamic-image" title="$59.99 Invicta Watches" height="170px" width="264px" data-a-dynamic-image="{&quot;http://g-ecx.images-amazon.com/images/G/01/AMAZON_FASHION/2014/WATCHES/SALE_SUITES/11_NOV/1121_INVICTA_COOP/1121_Invicta_sidekickHD_Deal2._UX528_SX528_V321866416_.jpg&quot;:[340,528],&quot;http://g-ecx.images-amazon.com/images/G/01/AMAZON_FASHION/2014/WATCHES/SALE_SUITES/11_NOV/1121_INVICTA_COOP/1121_Invicta_sidekickHD_Deal2._V321866416_.jpg&quot;:[510,792],&quot;http://g-ecx.images-amazon.com/images/G/01/AMAZON_FASHION/2014/WATCHES/SALE_SUITES/11_NOV/1121_INVICTA_COOP/1121_Invicta_sidekickHD_Deal2._UX396_SX396_V321866416_.jpg&quot;:[255,396],&quot;http://g-ecx.images-amazon.com/images/G/01/AMAZON_FASHION/2014/WATCHES/SALE_SUITES/11_NOV/1121_INVICTA_COOP/1121_Invicta_sidekickHD_Deal2._UX264_SX264_V321866416_.jpg&quot;:[170,264]}"></a>
+ </span>
+ </div>
+ </div>
+</div>
+
+ </div>
+ <hr class='slot-hr desktop-sidekick-2-hr' />
+
+
+ <div id='sidebarbtf'></div>
+ <script>
+ P.when('ready').execute(function() {
+ var sidebarbtf = document.getElementById('sidebarbtf');
+ var sidebarhidden = document.getElementById('sidebarhidden');
+ if (sidebarbtf != null && sidebarhidden != null) {
+ sidebarbtf.innerHTML = sidebarhidden.innerHTML;
+ }
+ });
+ P.when('A','ready').execute(function(A) {
+ var firstCarousel = A.$('.feed-carousel').first().addClass('first-carousel');
+ });
+ </script>
+
+ </div>
+ <div id="mainContent" class="a-fixed-right-grid-col a-col-left" style="padding-right:0%;float:none;">
+
+ <div id='btfContent'>
+
+ <div class='desktop-row' id='desktop-0'>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div id="scalable-image-map_scalable-image-map-ns_0333DAP23YH7WQBRCQZV_3514_" class="a-section a-text-center shogun-widget scalable-image-map aui-desktop-link">
+ <a class="a-link-normal" href="/b/ref=br_imp?_encoding=UTF8&node=384082011&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-0&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1979655002&pf_rd_i=desktop"><img alt="Black Friday Deals Week Starts" src="http://g-ecx.images-amazon.com/images/G/01/Gateway/Heroes/dealsweek_miniC._UX1150_SX1150_V320728920_.png" class="a-dynamic-image" height="100%" width="1150px" data-a-dynamic-image="{&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Heroes/dealsweek_miniC._UX2300_SX2300_V320728920_.png&quot;:[400,2300],&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Heroes/dealsweek_miniC._UX1150_SX1150_V320728920_.png&quot;:[200,1150],&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Heroes/dealsweek_miniC._V320728920_.png&quot;:[600,3450],&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Heroes/dealsweek_miniC._UX1725_SX1725_V320728920_.png&quot;:[300,1725]}"></a>
+</div>
+
+ </div>
+ <hr class='slot-hr desktop-0-hr' />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div class='desktop-row' id='desktop-1'>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div id="uber-widget-ns_1GM97J2XXNXR8Y322FQC_20829_" class="a-section a-spacing-none shogun-widget uber-widget aui-desktop fresh-shoveler">
+
+
+<div class="a-section as-title-block">
+ <span class=as-title-block-left>
+ <span class="a-color-base">
+ Related to Items You've Viewed
+ </span>
+ </span>
+ <span class="as-title-block-right">
+ <a class="a-link-normal" href="/gp/history/ref=br_ubw_cllTn?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970559082&pf_rd_i=desktop">
+ See more
+</a>
+ </span>
+</div>
+
+
+
+
+
+
+<div class="a-section feed-carousel">
+ <ul class="a-nostyle a-horizontal feed-carousel-shelf">
+
+
+
+<li data-sghover="{&quot;asin&quot;:&quot;B00D3F7CFK&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00D3F7CFK/ref=s9_simh_gw_p147_d21_i2?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970559082&pf_rd_i=desktop"><img alt="ASUS GTX770-DC2OC-2GD5 GeForce GTX770 2GB GDDR5 256-bit, DVI-I/DVI-D/ HDMI/DP PCI-Express 3.0 SLI ready Graphic Card OC-selected 1110MHz core" src="http://ecx.images-amazon.com/images/I/4104sN2YQCL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="ASUS GTX770-DC2OC-2GD5 GeForce GTX770 2GB GDDR5 256-bit, DVI-I/DVI-D/ HDMI/DP PCI-Express 3.0 SLI ready Graphic Card OC-selected 1110MHz core" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/4104sN2YQCL._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/4104sN2YQCL._AC_SY220_.jpg&quot;:[220,220],&quot;http://ecx.images-amazon.com/images/I/4104sN2YQCL._AC_SY440_.jpg&quot;:[440,440],&quot;http://ecx.images-amazon.com/images/I/4104sN2YQCL._AC_SY660_.jpg&quot;:[500,500]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00E4MQO8C&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00E4MQO8C/ref=s9_simh_gw_p147_d21_i3?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970559082&pf_rd_i=desktop"><img alt="MSI NVIDIA GeForce GTX 770 Gaming OC 4GB GDDR5 2DVI/HDMI/DisplayPort PCI-Express Video Card N770 TF 4GD5/OC" src="http://ecx.images-amazon.com/images/I/51GoKgDpzvL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="MSI NVIDIA GeForce GTX 770 Gaming OC 4GB GDDR5 2DVI/HDMI/DisplayPort PCI-Express Video Card N770 TF 4GD5/OC" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51GoKgDpzvL._AC_SY330_.jpg&quot;:[330,439],&quot;http://ecx.images-amazon.com/images/I/51GoKgDpzvL._AC_SY440_.jpg&quot;:[376,500],&quot;http://ecx.images-amazon.com/images/I/51GoKgDpzvL._AC_SY660_.jpg&quot;:[376,500],&quot;http://ecx.images-amazon.com/images/I/51GoKgDpzvL._AC_SY220_.jpg&quot;:[220,293]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00D3ES1Q0&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00D3ES1Q0/ref=s9_simh_gw_p147_d21_i4?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970559082&pf_rd_i=desktop"><img alt="Gigabyte GTX 770 GDDR5-2GB 2xDVI/HDMI/DP OC WINDFORCE 3X Graphics Card GV-N770OC-2GD" src="http://ecx.images-amazon.com/images/I/41XSX00OLYL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Gigabyte GTX 770 GDDR5-2GB 2xDVI/HDMI/DP OC WINDFORCE 3X Graphics Card GV-N770OC-2GD" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41XSX00OLYL._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/41XSX00OLYL._AC_SY220_.jpg&quot;:[220,220],&quot;http://ecx.images-amazon.com/images/I/41XSX00OLYL._AC_SY660_.jpg&quot;:[500,500],&quot;http://ecx.images-amazon.com/images/I/41XSX00OLYL._AC_SY440_.jpg&quot;:[440,440]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00CZ7Q028&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00CZ7Q028/ref=s9_simh_gw_p147_d21_i5?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970559082&pf_rd_i=desktop"><img alt="PNY NVIDIA GeForce VCGGTX7702XPB GTX 770 2GB GDDR5 Video Card" src="http://ecx.images-amazon.com/images/I/41jlYjcyrkL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="PNY NVIDIA GeForce VCGGTX7702XPB GTX 770 2GB GDDR5 Video Card" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41jlYjcyrkL._AC_SY440_.jpg&quot;:[332,500],&quot;http://ecx.images-amazon.com/images/I/41jlYjcyrkL._AC_SY660_.jpg&quot;:[332,500],&quot;http://ecx.images-amazon.com/images/I/41jlYjcyrkL._AC_SY330_.jpg&quot;:[330,497],&quot;http://ecx.images-amazon.com/images/I/41jlYjcyrkL._AC_SY220_.jpg&quot;:[220,331]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00D2OYUDE&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00D2OYUDE/ref=s9_simh_gw_p147_d21_i6?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970559082&pf_rd_i=desktop"><img alt="Zotac GeForce GTX 770 2GB GDDR5 PCI Express 3.0 DVI HDMI DisplayPort SLI Ready Graphics Card ZT-70301-10P" src="http://ecx.images-amazon.com/images/I/41XZqrRO49L._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Zotac GeForce GTX 770 2GB GDDR5 PCI Express 3.0 DVI HDMI DisplayPort SLI Ready Graphics Card ZT-70301-10P" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41XZqrRO49L._AC_SY330_.jpg&quot;:[330,433],&quot;http://ecx.images-amazon.com/images/I/41XZqrRO49L._AC_SY220_.jpg&quot;:[220,289],&quot;http://ecx.images-amazon.com/images/I/41XZqrRO49L._AC_SY660_.jpg&quot;:[381,500],&quot;http://ecx.images-amazon.com/images/I/41XZqrRO49L._AC_SY440_.jpg&quot;:[381,500]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00ENU2K7O&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00ENU2K7O/ref=s9_simh_gw_p147_d21_i7?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970559082&pf_rd_i=desktop"><img alt="MSI NVIDIA GeForce GTX 770 Gaming 2GB GDDR5 2DVI/HDMI/Display Port PCI-Express Video Card (N770-2GD5/OC)" src="http://ecx.images-amazon.com/images/I/516jXcf8R6L._AC_SY220_.jpg" class="a-dynamic-image product-image" title="MSI NVIDIA GeForce GTX 770 Gaming 2GB GDDR5 2DVI/HDMI/Display Port PCI-Express Video Card (N770-2GD5/OC)" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/516jXcf8R6L._AC_SY660_.jpg&quot;:[400,500],&quot;http://ecx.images-amazon.com/images/I/516jXcf8R6L._AC_SY440_.jpg&quot;:[400,500],&quot;http://ecx.images-amazon.com/images/I/516jXcf8R6L._AC_SY220_.jpg&quot;:[220,275],&quot;http://ecx.images-amazon.com/images/I/516jXcf8R6L._AC_SY330_.jpg&quot;:[330,412]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00DIH8OW8&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00DIH8OW8/ref=s9_simh_gw_p147_d21_i8?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970559082&pf_rd_i=desktop"><img alt="MSI NVIDIA GeForce GTX 760 OC 2GB GDDR5 2DVI/HDMI/DisplayPort PCI-Express Video Card N760 TF 2GD5/OC" src="http://ecx.images-amazon.com/images/I/51skLhSF1nL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="MSI NVIDIA GeForce GTX 760 OC 2GB GDDR5 2DVI/HDMI/DisplayPort PCI-Express Video Card N760 TF 2GD5/OC" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51skLhSF1nL._AC_SY440_.jpg&quot;:[400,500],&quot;http://ecx.images-amazon.com/images/I/51skLhSF1nL._AC_SY330_.jpg&quot;:[330,412],&quot;http://ecx.images-amazon.com/images/I/51skLhSF1nL._AC_SY660_.jpg&quot;:[400,500],&quot;http://ecx.images-amazon.com/images/I/51skLhSF1nL._AC_SY220_.jpg&quot;:[220,275]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00CZIQXBA&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00CZIQXBA/ref=s9_simh_gw_p147_d21_i9?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970559082&pf_rd_i=desktop"><img alt="EVGA GeForce GTX770 SuperClocked with EVGA ACX Cooler, 2GB GDDR5 256bit, DL DVI-I, DVI-D, HDMI, DP, SLI Ready Graphics Cards (02G-P4-2774-KR)" src="http://ecx.images-amazon.com/images/I/51oLUdzAGdL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="EVGA GeForce GTX770 SuperClocked with EVGA ACX Cooler, 2GB GDDR5 256bit, DL DVI-I, DVI-D, HDMI, DP, SLI Ready Graphics Cards (02G-P4-2774-KR)" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51oLUdzAGdL._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/51oLUdzAGdL._AC_SY660_.jpg&quot;:[500,500],&quot;http://ecx.images-amazon.com/images/I/51oLUdzAGdL._AC_SY220_.jpg&quot;:[220,220],&quot;http://ecx.images-amazon.com/images/I/51oLUdzAGdL._AC_SY440_.jpg&quot;:[440,440]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00DBPKEOI&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00DBPKEOI/ref=s9_simh_gw_p147_d21_i10?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970559082&pf_rd_i=desktop"><img alt="ASUS GTX760-DC2OC-2GD5 GeForce GTX760 2GB GDDR5 256-bit, DVI-I/DVI-D/ HDMI/DP PCI-Express 3.0 SLI ready Graphic Card OC-selected 1072 MHz core" src="http://ecx.images-amazon.com/images/I/51x1zNu7j8L._AC_SY220_.jpg" class="a-dynamic-image product-image" title="ASUS GTX760-DC2OC-2GD5 GeForce GTX760 2GB GDDR5 256-bit, DVI-I/DVI-D/ HDMI/DP PCI-Express 3.0 SLI ready Graphic Card OC-selected 1072 MHz core" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51x1zNu7j8L._AC_SY330_.jpg&quot;:[330,445],&quot;http://ecx.images-amazon.com/images/I/51x1zNu7j8L._AC_SY440_.jpg&quot;:[371,500],&quot;http://ecx.images-amazon.com/images/I/51x1zNu7j8L._AC_SY220_.jpg&quot;:[220,296],&quot;http://ecx.images-amazon.com/images/I/51x1zNu7j8L._AC_SY660_.jpg&quot;:[371,500]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00E5AEIKE&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00E5AEIKE/ref=s9_simh_gw_p147_d21_i11?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970559082&pf_rd_i=desktop"><img alt="EVGA GeForce GTX 770 Superclocked with ACX Cooler 4 GB GDDR5 256-Bit Dual-Link DVI-I/DVI-D HDMI DP SLI Ready Graphics Card 04G-P4-3774-KR" src="http://ecx.images-amazon.com/images/I/41TPp-b9UIL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="EVGA GeForce GTX 770 Superclocked with ACX Cooler 4 GB GDDR5 256-Bit Dual-Link DVI-I/DVI-D HDMI DP SLI Ready Graphics Card 04G-P4-3774-KR" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41TPp-b9UIL._AC_SY660_.jpg&quot;:[500,500],&quot;http://ecx.images-amazon.com/images/I/41TPp-b9UIL._AC_SY440_.jpg&quot;:[440,440],&quot;http://ecx.images-amazon.com/images/I/41TPp-b9UIL._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/41TPp-b9UIL._AC_SY220_.jpg&quot;:[220,220]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00CU9GOAO&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00CU9GOAO/ref=s9_simh_gw_p147_d21_i12?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970559082&pf_rd_i=desktop"><img alt="Gigabyte GTX 770 GDDR5-4GB 2xDVI/HDMI/DP OC WINDFORCE 3X Graphics Card GV-N770OC-4GD" src="http://ecx.images-amazon.com/images/I/51ZgtdhTWuL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Gigabyte GTX 770 GDDR5-4GB 2xDVI/HDMI/DP OC WINDFORCE 3X Graphics Card GV-N770OC-4GD" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51ZgtdhTWuL._AC_SY220_.jpg&quot;:[220,220],&quot;http://ecx.images-amazon.com/images/I/51ZgtdhTWuL._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/51ZgtdhTWuL._AC_SY440_.jpg&quot;:[440,440],&quot;http://ecx.images-amazon.com/images/I/51ZgtdhTWuL._AC_SY660_.jpg&quot;:[500,500]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00NN0GEXQ&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00NN0GEXQ/ref=s9_simh_gw_p147_d21_i13?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970559082&pf_rd_i=desktop"><img alt="MSI GTX 970 GAMING 4G Graphics Cards GTX 970 GAMING 4G" src="http://ecx.images-amazon.com/images/I/519xnBRbYbL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="MSI GTX 970 GAMING 4G Graphics Cards GTX 970 GAMING 4G" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/519xnBRbYbL._AC_SY220_.jpg&quot;:[220,293],&quot;http://ecx.images-amazon.com/images/I/519xnBRbYbL._AC_SY440_.jpg&quot;:[376,500],&quot;http://ecx.images-amazon.com/images/I/519xnBRbYbL._AC_SY330_.jpg&quot;:[330,439],&quot;http://ecx.images-amazon.com/images/I/519xnBRbYbL._AC_SY660_.jpg&quot;:[376,500]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00DHW4HXY&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00DHW4HXY/ref=s9_simh_gw_p147_d21_i14?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970559082&pf_rd_i=desktop"><img alt="EVGA GeForce GTX760 SuperClocked w/EVGA ACX Cooler 2GB GDDR5 256bit, Dual-Link DVI-I, DVI-D, HDMI,DP, SLI Ready Graphics Card (02G-P4-2765-KR) Graphics Cards 02G-P4-2765-KR" src="http://ecx.images-amazon.com/images/I/51LgMsVumML._AC_SY220_.jpg" class="a-dynamic-image product-image" title="EVGA GeForce GTX760 SuperClocked w/EVGA ACX Cooler 2GB GDDR5 256bit, Dual-Link DVI-I, DVI-D, HDMI,DP, SLI Ready Graphics Card (02G-P4-2765-KR) Graphics Cards 02G-P4-2765-KR" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51LgMsVumML._AC_SY440_.jpg&quot;:[440,440],&quot;http://ecx.images-amazon.com/images/I/51LgMsVumML._AC_SY660_.jpg&quot;:[500,500],&quot;http://ecx.images-amazon.com/images/I/51LgMsVumML._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/51LgMsVumML._AC_SY220_.jpg&quot;:[220,220]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00DWV3NM6&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00DWV3NM6/ref=s9_simh_gw_p147_d21_i15?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970559082&pf_rd_i=desktop"><img alt="ASUS Direct CU II Thermal Design with Direct-GPU Contact 10mm Copper Heat Pipe Graphics Card GTX780-DC2OC-3GD5" src="http://ecx.images-amazon.com/images/I/51Fo1W50U6L._AC_SY220_.jpg" class="a-dynamic-image product-image" title="ASUS Direct CU II Thermal Design with Direct-GPU Contact 10mm Copper Heat Pipe Graphics Card GTX780-DC2OC-3GD5" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51Fo1W50U6L._AC_SY440_.jpg&quot;:[440,440],&quot;http://ecx.images-amazon.com/images/I/51Fo1W50U6L._AC_SY660_.jpg&quot;:[500,500],&quot;http://ecx.images-amazon.com/images/I/51Fo1W50U6L._AC_SY220_.jpg&quot;:[220,220],&quot;http://ecx.images-amazon.com/images/I/51Fo1W50U6L._AC_SY330_.jpg&quot;:[330,330]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00DIH8OOQ&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00DIH8OOQ/ref=s9_simh_gw_p147_d21_i16?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970559082&pf_rd_i=desktop"><img alt="MSI Computer Corp. Video Graphics Cards N780 TF 3GD5/OC" src="http://ecx.images-amazon.com/images/I/510Z5kUmCML._AC_SY220_.jpg" class="a-dynamic-image product-image" title="MSI Computer Corp. Video Graphics Cards N780 TF 3GD5/OC" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/510Z5kUmCML._AC_SY660_.jpg&quot;:[375,500],&quot;http://ecx.images-amazon.com/images/I/510Z5kUmCML._AC_SY440_.jpg&quot;:[375,500],&quot;http://ecx.images-amazon.com/images/I/510Z5kUmCML._AC_SY220_.jpg&quot;:[220,293],&quot;http://ecx.images-amazon.com/images/I/510Z5kUmCML._AC_SY330_.jpg&quot;:[330,440]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00EAY05O8&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00EAY05O8/ref=s9_simh_gw_p147_d21_i17?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970559082&pf_rd_i=desktop"><img alt="MSI - N770 TF 2GD5/OC - MSI Video Card N770 TF 2GD5/OC GeForce GTX770 2GB DDR5 256Bit DVI/DVI-D/HDMI/DisplayPort Retail" src="http://ecx.images-amazon.com/images/I/51-BlHxgxyL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="MSI - N770 TF 2GD5/OC - MSI Video Card N770 TF 2GD5/OC GeForce GTX770 2GB DDR5 256Bit DVI/DVI-D/HDMI/DisplayPort Retail" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51-BlHxgxyL._AC_SY660_.jpg&quot;:[400,400],&quot;http://ecx.images-amazon.com/images/I/51-BlHxgxyL._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/51-BlHxgxyL._AC_SY220_.jpg&quot;:[220,220],&quot;http://ecx.images-amazon.com/images/I/51-BlHxgxyL._AC_SY440_.jpg&quot;:[400,400]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00FR6XPL8&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00FR6XPL8/ref=s9_simh_gw_p147_d21_i18?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970559082&pf_rd_i=desktop"><img alt="MSI Computer Corp. Video Graphics Cards R9 280X GAMING 3G" src="http://ecx.images-amazon.com/images/I/510bAGXVTiL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="MSI Computer Corp. Video Graphics Cards R9 280X GAMING 3G" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/510bAGXVTiL._AC_SY660_.jpg&quot;:[416,500],&quot;http://ecx.images-amazon.com/images/I/510bAGXVTiL._AC_SY440_.jpg&quot;:[416,500],&quot;http://ecx.images-amazon.com/images/I/510bAGXVTiL._AC_SY330_.jpg&quot;:[330,397],&quot;http://ecx.images-amazon.com/images/I/510bAGXVTiL._AC_SY220_.jpg&quot;:[220,264]}"></a></span></li>
+
+
+ </ul>
+ <div class="spinner"><img src="http://g-ecx.images-amazon.com/images/G/01/amazonui/loading/loading-4x._V391853216_.gif" /></div>
+
+ <a class="feed-carousel-control feed-left" href="#"><span class="gw-icon feed-arrow"></span></a>
+ <a class="feed-carousel-control feed-right" href="#"><span class="gw-icon feed-arrow"></span></a>
+ <span class="feed-scrollbar">
+ <span class="feed-scrollbar-track"><span class="feed-scrollbar-thumb"></span></span>
+ </span>
+</div>
+
+</div>
+
+
+
+<script type="text/javascript">
+
+ P.when('A').execute(function(A) {
+ var $ = A.$;
+
+ var Carousel = function ($carousel) {
+ var self = this;
+
+ this.init($carousel);
+ };
+
+ Carousel.prototype = {
+ init: function ($carousel) {
+ var self = this;
+
+ if (A.capabilities.touch) {
+ $carousel.addClass('feed-carousel-touch');
+ }
+
+ self.minItems = 10;
+
+ self.$carousel = $carousel;
+ self.$shelf = self.$carousel.find('.feed-carousel-shelf');
+ self.$spinner = self.$carousel.find('.spinner');
+ self.$left = $('.feed-carousel-control.feed-left', $carousel);
+ self.$right = $('.feed-carousel-control.feed-right', $carousel);
+ self.$buttons = $('.feed-carousel-control', $carousel);
+ self.$thumb = $('.feed-scrollbar-thumb', $carousel);
+ self.shelfLeft = -1 * parseInt(self.$shelf.css('left'), 10);
+ self.calcWidth = $('html').hasClass('a-lt-ie9');
+
+ self.bindEvents();
+ self.$carousel.data("Carousel", self);
+
+ self.$carousel.trigger('change');
+ },
+
+ bindEvents: function () {
+ var self = this,
+ $body = $('body');
+
+ self.$carousel.change(function(e) {
+ self.updateSpinner();
+ self.updateShelfWidth();
+ self.updateControls();
+ });
+
+ self.$left.click(function(e) {
+ e.preventDefault();
+ self.changePage(-1);
+ });
+
+ self.$right.click(function(e) {
+ e.preventDefault();
+ self.changePage(+1);
+ });
+
+ $('.product-image', self.$shelf).one('sload', function() {
+ self.$carousel.trigger('change');
+ });
+
+ $(window).resize(function() {
+ self.changePage(0);
+ self.updateControls();
+ });
+
+ self.$thumb.mousedown(function(e) {
+ var lastX = e.clientX;
+
+ if (e.which !== 1) return;
+
+ e.preventDefault();
+
+ self.$carousel.addClass('scrolling');
+
+ $body.bind("mousemove.feed-carousel",function(e) {
+ var cd = self.getDimensions(),
+ mouseDistance = e.clientX - lastX,
+ shelfDistance = 1 / cd.pageRatio * mouseDistance,
+ targetLeft = Math.max(Math.min(cd.shelfLeft + shelfDistance, cd.maxLeft), 0);
+
+ lastX = e.clientX;
+ self.moveShelf(targetLeft);
+ });
+ $(document).bind("selectstart.feed-carousel", function() { return false; });
+ });
+
+ $body.mouseup(function() {
+ self.$carousel.removeClass('scrolling');
+ if(!self.$carousel.hasClass('hovering')) {
+ self.hideControls();
+ }
+ $body.unbind("mousemove.feed-carousel");
+ $(document).unbind("selectstart.feed-carousel");
+ });
+
+ self.$carousel.hover(
+ function() {
+ self.$carousel.addClass('hovering');
+ clearTimeout(self.hoverTimer);
+ self.hoverTimer = setTimeout(function(){
+ if(self.$carousel.hasClass('hovering')){
+ self.showControls();
+ }
+ }, 300);
+ },
+ function() {
+ self.$carousel.removeClass('hovering');
+ clearTimeout(self.hoverTimer);
+ if(!self.$carousel.hasClass('scrolling')) {
+ self.hoverTimer = setTimeout(function(){
+ if(!self.$carousel.hasClass('hovering')) {
+ self.hideControls();
+ }
+ }, 600);
+ }
+ }
+ );
+ },
+
+ getDimensions: function() {
+ var self = this,
+ shelfWidth = self.$shelf.width(),
+ shelfLeft = self.shelfLeft,
+ pageWidth = self.$carousel.width();
+
+ return {
+ pageWidth: pageWidth,
+ shelfWidth: shelfWidth,
+ shelfLeft: shelfLeft,
+ pageRatio: pageWidth / shelfWidth,
+ leftRatio: shelfLeft / shelfWidth,
+ maxLeft: shelfWidth - pageWidth
+ };
+ },
+
+ updateShelfWidth: function() {
+ var self = this,
+ w = 0;
+
+ if(!self.calcWidth) {
+ return;
+ }
+
+ self.$shelf.children().each(function() { w += $(this).outerWidth(true); });
+ self.$shelf.width(w);
+ },
+
+ updateSpinner: function() {
+ var self = this;
+ if(self.size() < self.minItems) {
+ self.$spinner.show();
+ } else {
+ self.$spinner.hide();
+ }
+ },
+
+ updateControls: function() {
+ var self = this;
+ self.updateArrows();
+ self.updateScrollThumb();
+ },
+
+ showControls: function(complete) {
+ var self = this,
+ $controls = self.$thumb.add(self.$buttons);
+
+ $controls.stop(true, true).fadeIn({
+ duration: 300,
+ complete: complete,
+ queue: false
+ });
+ },
+
+ hideControls: function(complete) {
+ var self = this;
+ $controls = self.$thumb;
+
+ if(!self.$carousel.hasClass('first-carousel')) {
+ $controls = $controls.add(self.$buttons);
+ }
+
+ $controls.stop(true, true).fadeOut({
+ duration: 300,
+ complete: complete,
+ queue: false
+ });
+ },
+
+ appendCards: function(cards) {
+ var self = this;
+
+ self.$shelf.append(cards);
+ self.$carousel.trigger("change");
+ },
+
+ updateArrows: function() {
+ var self = this,
+ clazz = 'feed-control-disabled',
+ cd = self.getDimensions(),
+ flags = [ cd.shelfLeft > 0, cd.shelfLeft < cd.maxLeft ],
+ ctrls = [ self.$left, self.$right ];
+
+ $.each(ctrls, function(i, $e) {
+ flags[i] ? $e.removeClass(clazz) : $e.addClass(clazz);
+ });
+ },
+
+ updateScrollThumb: function() {
+ var self = this,
+ cd = self.getDimensions(),
+ left = cd.leftRatio * cd.pageWidth,
+ width = Math.min(cd.pageRatio * cd.pageWidth, cd.pageWidth);
+ self.$thumb.width(width).each(function() {
+ A.animate($(this), { left: left }, 0);
+ });
+ },
+
+ changePage: function (n) {
+ var self = this,
+ cd = self.getDimensions(),
+ target = self.alignWithItem(cd.shelfLeft + n * cd.pageWidth),
+ targetLeft = Math.min(n < 0 ? target.right : target.left, cd.maxLeft);
+
+ if (cd.shelfLeft == targetLeft) {
+ self.bounce(self.$shelf, -30 * n);
+ self.bounce(self.$thumb, 6 * n);
+ } else {
+ self.shelfLeft = targetLeft;
+ self.slide(self.$shelf, -targetLeft, function() {
+ self.updateArrows();
+ });
+ self.slide(self.$thumb, targetLeft / cd.shelfWidth * cd.pageWidth, function() {
+ self.updateScrollThumb();
+ });
+ }
+ },
+
+ moveShelf: function (targetLeft) {
+ var self = this;
+
+ self.shelfLeft = targetLeft;
+ A.animate(self.$shelf, { left: -targetLeft }, 0);
+ self.updateControls();
+ },
+
+ getItems: function() {
+ var self = this;
+ return self.$shelf.find('.feed-carousel-card');
+ },
+
+ size: function() {
+ var self = this;
+ return self.getItems().length;
+ },
+
+ alignWithItem: function(x) {
+ if(x < 0) {
+ return { left: 0, right: 0 };
+ }
+
+ var self = this,
+ $items = self.getItems(),
+ rv = $items.map(function() {
+ var pos = self.cardPosition($(this));
+ if(x >= pos.left && x <= pos.right) {
+ return pos;
+ }
+ }).get(0);
+
+ return rv ? rv : self.cardPosition($items.last());
+ },
+
+ cardPosition: function($e) {
+ var left = $e.position().left,
+ right = left + $e.outerWidth(true);
+
+ return { left: left, right: right };
+ },
+
+ slide: function($c, targetLeft, callback) {
+ var self = this,
+ speed = 400,
+ easing = 'cubic-bezier(0.455, 0.03, 0.515, 0.955)'; // easeInOutQuad
+
+ $c.each(function() {
+ var $e = $(this);
+ A.animate($e, { left: targetLeft }, speed, easing, callback);
+ });
+ },
+
+ bounce: function($c, x) {
+ var self = this,
+ speedIn = 400,
+ speedOut = 100,
+ easing = 'cubic-bezier(0.175, 0.885, 0.32, 1.275)'; // easeOutBack
+
+ $c.each(function() {
+ var $e = $(this);
+ A.animate($e, { marginLeft: x }, speedIn, easing, function() {
+ A.animate($e, { marginLeft: 0 }, speedOut);
+ });
+ });
+ }
+ };
+
+ $("#" + "uber-widget-ns_1GM97J2XXNXR8Y322FQC_20829_" + " .feed-carousel").each(function(i, e) {
+ var $e = $(e);
+ new Carousel($e);
+ });
+ });
+</script>
+
+
+
+<script type="text/javascript">
+ P.when('A').execute(function(A) {
+ var $ = A.$;
+
+ var bilh = function(e, n) {
+ $(e).show().one('load error', function() {
+ $(n).trigger('sload');
+ }).each(function() { if(e.complete) $(e).trigger('load'); });
+ };
+
+ var imgs = $("#" + "uber-widget-ns_1GM97J2XXNXR8Y322FQC_20829_" + " " +
+ "." + "product-image");
+ for(var i = 2, len = imgs.length; i < len; i++) {
+ (function(c, n) {
+ $(c).one('sload', function() {
+ bilh(this, n);
+ });
+ })(imgs[i - 1], imgs[i]);
+ }
+
+ bilh(imgs[0], imgs[1]);
+ });
+
+</script>
+
+
+<script type="text/javascript">
+P.when("A", "cf").execute(function(A){
+ A.loadDescendantImagesManually(A.$("#uber-widget-ns_1GM97J2XXNXR8Y322FQC_20829_"));
+});
+</script>
+
+
+
+
+
+<script type="text/javascript">
+P.when('A').register("shogunUber-widget-ns_1GM97J2XXNXR8Y322FQC_20829_ProductdbAjaxAjaxHandler", function(A){
+ return {
+ "ajax" : function (arg0, arg1, arg2){
+ var successFunction, failureFunction, params;
+ if(typeof arg0 === 'object' && typeof arg1 === 'undefined') {
+ successFunction = arg0.success;
+ failureFunction = arg0.fail;
+ params = arg0.params;
+ }
+ else if(typeof arg0 === 'function' && typeof arg1 === 'function') {
+ successFunction = arg0;
+ failureFunction = arg1;
+ params = arg2;
+ }
+ else if(typeof arg0 === 'undefined' && typeof arg1 === 'undefined') {
+ }
+ else { throw new Error("Incorrect invocation of SgnAjaxFn"); }
+ params = params || {};
+ var auiShogunAjaxHandler = {};
+ if(successFunction){ auiShogunAjaxHandler.success = successFunction; }
+ if(failureFunction){ auiShogunAjaxHandler.failure = failureFunction; }
+ auiShogunAjaxHandler.params = A.$.extend({"swn":"productdb-ajax","oia":1,"ht":"D979A416CB6A19AF1C8191D2DCD3AC1933CDA418","opt":"Gateway","oe":"{\"isDesktop\":\"1\",\"isTablet\":0,\"isMobile\":0}","sa":"{\"asins\":[\"B00D3F7CFK\",\"B00E4MQO8C\",\"B00D3ES1Q0\",\"B00CZ7Q028\",\"B00D2OYUDE\",\"B00ENU2K7O\",\"B00DIH8OW8\",\"B00CZIQXBA\",\"B00DBPKEOI\",\"B00E5AEIKE\",\"B00CU9GOAO\",\"B00NN0GEXQ\",\"B00DHW4HXY\",\"B00DWV3NM6\",\"B00DIH8OOQ\",\"B00EAY05O8\",\"B00FR6XPL8\"]}","ospt":"desktop","rrid":"1GM97J2XXNXR8Y322FQC"}, params);
+ var auiShogunAjaxHandlerUrl = "/gp/shogun/ajax.html";
+ if(ue_sid){ auiShogunAjaxHandlerUrl += "/" + ue_sid; }
+ auiShogunAjaxHandler.method = "get";
+ A.ajax(auiShogunAjaxHandlerUrl, auiShogunAjaxHandler);
+ }
+ };
+});
+</script>
+
+ <script type="text/javascript">
+ P.when("gw-productdb",
+ "shogunUber-widget-ns_1GM97J2XXNXR8Y322FQC_20829_ProductdbAjaxAjaxHandler",
+ "cf").execute(function(pdb, sac) {
+ sac.ajax(function(data) { pdb._add(data); }, function() {});
+ });
+ </script>
+
+
+
+ </div>
+ <hr class='slot-hr desktop-1-hr' />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div class='desktop-row' id='desktop-2'>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div id="asin-shoveler-ns_1Z256P8XDVV6281VEQK3_20751_" class="a-section a-spacing-none shogun-widget asin-shoveler aui-desktop fresh-shoveler">
+
+
+<div class="a-section as-title-block">
+ <span class="as-title-block-left">
+ <span class="a-color-base">
+ Wearable Technology
+ </span>
+ </span>
+ <span class="as-title-block-right">
+ <a class="a-link-normal" href="/b/ref=br_asw_smr?_encoding=UTF8&node=9013937011&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop">
+ See more
+</a>
+ </span>
+</div>
+
+
+
+
+
+
+<div class="a-section feed-carousel">
+ <ul class="a-nostyle a-horizontal feed-carousel-shelf">
+
+
+
+<li data-sghover="{&quot;asin&quot;:&quot;B00NIYJF6U&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00NIYJF6U/ref=s9_al_gw_g421_i1?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop"><img alt="GoPro HERO4 SILVER" src="http://ecx.images-amazon.com/images/I/41rMfUQjRcL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="GoPro HERO4 SILVER" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41rMfUQjRcL._AC_SY660_.jpg&quot;:[500,500],&quot;http://ecx.images-amazon.com/images/I/41rMfUQjRcL._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/41rMfUQjRcL._AC_SY220_.jpg&quot;:[220,220],&quot;http://ecx.images-amazon.com/images/I/41rMfUQjRcL._AC_SY440_.jpg&quot;:[440,440]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B0095PZHPE&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B0095PZHPE/ref=s9_al_gw_g364_i2?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop"><img alt="Fitbit One Wireless Activity Plus Sleep Tracker, Black" src="http://ecx.images-amazon.com/images/I/31cJZdMlStL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Fitbit One Wireless Activity Plus Sleep Tracker, Black" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/31cJZdMlStL._AC_SY220_.jpg&quot;:[220,220],&quot;http://ecx.images-amazon.com/images/I/31cJZdMlStL._AC_SY660_.jpg&quot;:[500,500],&quot;http://ecx.images-amazon.com/images/I/31cJZdMlStL._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/31cJZdMlStL._AC_SY440_.jpg&quot;:[440,440]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00ISSD6QG&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00ISSD6QG/ref=s9_al_gw_g364_i3?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop"><img alt="Fitbit Flex Wireless Activity + Sleep Wristband, Tangerine [Amazon Exclusive]" src="http://ecx.images-amazon.com/images/I/31p98baJSVL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Fitbit Flex Wireless Activity + Sleep Wristband, Tangerine [Amazon Exclusive]" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/31p98baJSVL._AC_SY660_.jpg&quot;:[281,500],&quot;http://ecx.images-amazon.com/images/I/31p98baJSVL._AC_SY220_.jpg&quot;:[220,391],&quot;http://ecx.images-amazon.com/images/I/31p98baJSVL._AC_SY440_.jpg&quot;:[281,500],&quot;http://ecx.images-amazon.com/images/I/31p98baJSVL._AC_SY330_.jpg&quot;:[281,500]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00HFPOX9W&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00HFPOX9W/ref=s9_al_gw_g422_i4?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop"><img alt="Garmin Vivofit Fitness Band - Blue" src="http://ecx.images-amazon.com/images/I/410DvDv7jBL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Garmin Vivofit Fitness Band - Blue" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/410DvDv7jBL._AC_SY660_.jpg&quot;:[500,318],&quot;http://ecx.images-amazon.com/images/I/410DvDv7jBL._AC_SY440_.jpg&quot;:[440,280],&quot;http://ecx.images-amazon.com/images/I/410DvDv7jBL._AC_SY220_.jpg&quot;:[220,140],&quot;http://ecx.images-amazon.com/images/I/410DvDv7jBL._AC_SY330_.jpg&quot;:[330,210]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00JLHW0J2&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00JLHW0J2/ref=s9_al_gw_g21_i5?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop"><img alt="LeapFrog LeapBand, Pink" src="http://ecx.images-amazon.com/images/I/41TcC3nq%2BYL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="LeapFrog LeapBand, Pink" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41TcC3nq%2BYL._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/41TcC3nq%2BYL._AC_SY440_.jpg&quot;:[440,440],&quot;http://ecx.images-amazon.com/images/I/41TcC3nq%2BYL._AC_SY220_.jpg&quot;:[220,220],&quot;http://ecx.images-amazon.com/images/I/41TcC3nq%2BYL._AC_SY660_.jpg&quot;:[500,500]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00EOHUVTU&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00EOHUVTU/ref=s9_al_gw_g422_i6?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop"><img alt="Garmin Virb Elite Action Camera" src="http://ecx.images-amazon.com/images/I/412F-RGANvL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Garmin Virb Elite Action Camera" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/412F-RGANvL._AC_SY660_.jpg&quot;:[500,500],&quot;http://ecx.images-amazon.com/images/I/412F-RGANvL._AC_SY220_.jpg&quot;:[220,220],&quot;http://ecx.images-amazon.com/images/I/412F-RGANvL._AC_SY440_.jpg&quot;:[440,440],&quot;http://ecx.images-amazon.com/images/I/412F-RGANvL._AC_SY330_.jpg&quot;:[330,330]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00JBJ3HQ0&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00JBJ3HQ0/ref=s9_al_gw_g107_i7?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop"><img alt="Samsung Gear 2 Smartwatch - Silver/Black (US Warranty)" src="http://ecx.images-amazon.com/images/I/41FKk8AjJgL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Samsung Gear 2 Smartwatch - Silver/Black (US Warranty)" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41FKk8AjJgL._AC_SY330_.jpg&quot;:[330,185],&quot;http://ecx.images-amazon.com/images/I/41FKk8AjJgL._AC_SY440_.jpg&quot;:[440,247],&quot;http://ecx.images-amazon.com/images/I/41FKk8AjJgL._AC_SY220_.jpg&quot;:[220,124],&quot;http://ecx.images-amazon.com/images/I/41FKk8AjJgL._AC_SY660_.jpg&quot;:[500,281]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00GQB1JES&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00GQB1JES/ref=s9_al_gw_g107_i8?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop"><img alt="UP 24 by Jawbone - Bluetooth Enabled - Medium - Retail Packaging - Onyx" src="http://ecx.images-amazon.com/images/I/31RGCA%2BivPL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="UP 24 by Jawbone - Bluetooth Enabled - Medium - Retail Packaging - Onyx" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/31RGCA%2BivPL._AC_SY440_.jpg&quot;:[239,500],&quot;http://ecx.images-amazon.com/images/I/31RGCA%2BivPL._AC_SY660_.jpg&quot;:[239,500],&quot;http://ecx.images-amazon.com/images/I/31RGCA%2BivPL._AC_SY330_.jpg&quot;:[239,500],&quot;http://ecx.images-amazon.com/images/I/31RGCA%2BivPL._AC_SY220_.jpg&quot;:[220,460]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00JBJ3JBI&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00JBJ3JBI/ref=s9_al_gw_g107_i9?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop"><img alt="Samsung Gear Fit Fitness Tracker and Smartwatch for Samsung Devices (US Warranty) - Black" src="http://ecx.images-amazon.com/images/I/41OoL-B1UzL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Samsung Gear Fit Fitness Tracker and Smartwatch for Samsung Devices (US Warranty) - Black" height="173px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41OoL-B1UzL._AC_SY440_.jpg&quot;:[173,500],&quot;http://ecx.images-amazon.com/images/I/41OoL-B1UzL._AC_SY330_.jpg&quot;:[173,500],&quot;http://ecx.images-amazon.com/images/I/41OoL-B1UzL._AC_SY220_.jpg&quot;:[173,500],&quot;http://ecx.images-amazon.com/images/I/41OoL-B1UzL._AC_SY660_.jpg&quot;:[173,500]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00EVIBN8U&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00EVIBN8U/ref=s9_al_gw_g421_i10?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop"><img alt="Sony AS30V High Definition POV Action Video Camera HDR-AS30V" src="http://ecx.images-amazon.com/images/I/41bLJQkRkOL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Sony AS30V High Definition POV Action Video Camera HDR-AS30V" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41bLJQkRkOL._AC_SY660_.jpg&quot;:[375,500],&quot;http://ecx.images-amazon.com/images/I/41bLJQkRkOL._AC_SY330_.jpg&quot;:[330,440],&quot;http://ecx.images-amazon.com/images/I/41bLJQkRkOL._AC_SY220_.jpg&quot;:[220,293],&quot;http://ecx.images-amazon.com/images/I/41bLJQkRkOL._AC_SY440_.jpg&quot;:[375,500]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B0095PZHZE&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B0095PZHZE/ref=s9_al_gw_g364_i11?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop"><img alt="Fitbit Zip Wireless Activity Tracker, Charcoal" src="http://ecx.images-amazon.com/images/I/31YvPtJtAqL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Fitbit Zip Wireless Activity Tracker, Charcoal" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/31YvPtJtAqL._AC_SY440_.jpg&quot;:[440,440],&quot;http://ecx.images-amazon.com/images/I/31YvPtJtAqL._AC_SY220_.jpg&quot;:[220,220],&quot;http://ecx.images-amazon.com/images/I/31YvPtJtAqL._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/31YvPtJtAqL._AC_SY660_.jpg&quot;:[500,500]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B0049POHK6&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B0049POHK6/ref=s9_al_gw_g364_i13?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop"><img alt="BodyMedia LINK Armband Weight Management System" src="http://ecx.images-amazon.com/images/I/41jl2ynNbXL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="BodyMedia LINK Armband Weight Management System" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41jl2ynNbXL._AC_SY660_.jpg&quot;:[500,500],&quot;http://ecx.images-amazon.com/images/I/41jl2ynNbXL._AC_SY220_.jpg&quot;:[220,220],&quot;http://ecx.images-amazon.com/images/I/41jl2ynNbXL._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/41jl2ynNbXL._AC_SY440_.jpg&quot;:[440,440]}"></a></span></li>
+
+
+ </ul>
+ <div class="spinner"><img src="http://g-ecx.images-amazon.com/images/G/01/amazonui/loading/loading-4x._V391853216_.gif" border="0" /></div>
+
+ <a class="feed-carousel-control feed-left" href="#"><span class="gw-icon feed-arrow"></span></a>
+ <a class="feed-carousel-control feed-right" href="#"><span class="gw-icon feed-arrow"></span></a>
+ <span class="feed-scrollbar">
+ <span class="feed-scrollbar-track"><span class="feed-scrollbar-thumb"></span></span>
+ </span>
+</div>
+
+</div>
+
+
+
+<script type="text/javascript">
+
+ P.when('A').execute(function(A) {
+ var $ = A.$;
+
+ var Carousel = function ($carousel) {
+ var self = this;
+
+ this.init($carousel);
+ };
+
+ Carousel.prototype = {
+ init: function ($carousel) {
+ var self = this;
+
+ if (A.capabilities.touch) {
+ $carousel.addClass('feed-carousel-touch');
+ }
+
+ self.minItems = 10;
+
+ self.$carousel = $carousel;
+ self.$shelf = self.$carousel.find('.feed-carousel-shelf');
+ self.$spinner = self.$carousel.find('.spinner');
+ self.$left = $('.feed-carousel-control.feed-left', $carousel);
+ self.$right = $('.feed-carousel-control.feed-right', $carousel);
+ self.$buttons = $('.feed-carousel-control', $carousel);
+ self.$thumb = $('.feed-scrollbar-thumb', $carousel);
+ self.shelfLeft = -1 * parseInt(self.$shelf.css('left'), 10);
+ self.calcWidth = $('html').hasClass('a-lt-ie9');
+
+ self.bindEvents();
+ self.$carousel.data("Carousel", self);
+
+ self.$carousel.trigger('change');
+ },
+
+ bindEvents: function () {
+ var self = this,
+ $body = $('body');
+
+ self.$carousel.change(function(e) {
+ self.updateSpinner();
+ self.updateShelfWidth();
+ self.updateControls();
+ });
+
+ self.$left.click(function(e) {
+ e.preventDefault();
+ self.changePage(-1);
+ });
+
+ self.$right.click(function(e) {
+ e.preventDefault();
+ self.changePage(+1);
+ });
+
+ $('.product-image', self.$shelf).one('sload', function() {
+ self.$carousel.trigger('change');
+ });
+
+ $(window).resize(function() {
+ self.changePage(0);
+ self.updateControls();
+ });
+
+ self.$thumb.mousedown(function(e) {
+ var lastX = e.clientX;
+
+ if (e.which !== 1) return;
+
+ e.preventDefault();
+
+ self.$carousel.addClass('scrolling');
+
+ $body.bind("mousemove.feed-carousel",function(e) {
+ var cd = self.getDimensions(),
+ mouseDistance = e.clientX - lastX,
+ shelfDistance = 1 / cd.pageRatio * mouseDistance,
+ targetLeft = Math.max(Math.min(cd.shelfLeft + shelfDistance, cd.maxLeft), 0);
+
+ lastX = e.clientX;
+ self.moveShelf(targetLeft);
+ });
+ $(document).bind("selectstart.feed-carousel", function() { return false; });
+ });
+
+ $body.mouseup(function() {
+ self.$carousel.removeClass('scrolling');
+ if(!self.$carousel.hasClass('hovering')) {
+ self.hideControls();
+ }
+ $body.unbind("mousemove.feed-carousel");
+ $(document).unbind("selectstart.feed-carousel");
+ });
+
+ self.$carousel.hover(
+ function() {
+ self.$carousel.addClass('hovering');
+ clearTimeout(self.hoverTimer);
+ self.hoverTimer = setTimeout(function(){
+ if(self.$carousel.hasClass('hovering')){
+ self.showControls();
+ }
+ }, 300);
+ },
+ function() {
+ self.$carousel.removeClass('hovering');
+ clearTimeout(self.hoverTimer);
+ if(!self.$carousel.hasClass('scrolling')) {
+ self.hoverTimer = setTimeout(function(){
+ if(!self.$carousel.hasClass('hovering')) {
+ self.hideControls();
+ }
+ }, 600);
+ }
+ }
+ );
+ },
+
+ getDimensions: function() {
+ var self = this,
+ shelfWidth = self.$shelf.width(),
+ shelfLeft = self.shelfLeft,
+ pageWidth = self.$carousel.width();
+
+ return {
+ pageWidth: pageWidth,
+ shelfWidth: shelfWidth,
+ shelfLeft: shelfLeft,
+ pageRatio: pageWidth / shelfWidth,
+ leftRatio: shelfLeft / shelfWidth,
+ maxLeft: shelfWidth - pageWidth
+ };
+ },
+
+ updateShelfWidth: function() {
+ var self = this,
+ w = 0;
+
+ if(!self.calcWidth) {
+ return;
+ }
+
+ self.$shelf.children().each(function() { w += $(this).outerWidth(true); });
+ self.$shelf.width(w);
+ },
+
+ updateSpinner: function() {
+ var self = this;
+ if(self.size() < self.minItems) {
+ self.$spinner.show();
+ } else {
+ self.$spinner.hide();
+ }
+ },
+
+ updateControls: function() {
+ var self = this;
+ self.updateArrows();
+ self.updateScrollThumb();
+ },
+
+ showControls: function(complete) {
+ var self = this,
+ $controls = self.$thumb.add(self.$buttons);
+
+ $controls.stop(true, true).fadeIn({
+ duration: 300,
+ complete: complete,
+ queue: false
+ });
+ },
+
+ hideControls: function(complete) {
+ var self = this;
+ $controls = self.$thumb;
+
+ if(!self.$carousel.hasClass('first-carousel')) {
+ $controls = $controls.add(self.$buttons);
+ }
+
+ $controls.stop(true, true).fadeOut({
+ duration: 300,
+ complete: complete,
+ queue: false
+ });
+ },
+
+ appendCards: function(cards) {
+ var self = this;
+
+ self.$shelf.append(cards);
+ self.$carousel.trigger("change");
+ },
+
+ updateArrows: function() {
+ var self = this,
+ clazz = 'feed-control-disabled',
+ cd = self.getDimensions(),
+ flags = [ cd.shelfLeft > 0, cd.shelfLeft < cd.maxLeft ],
+ ctrls = [ self.$left, self.$right ];
+
+ $.each(ctrls, function(i, $e) {
+ flags[i] ? $e.removeClass(clazz) : $e.addClass(clazz);
+ });
+ },
+
+ updateScrollThumb: function() {
+ var self = this,
+ cd = self.getDimensions(),
+ left = cd.leftRatio * cd.pageWidth,
+ width = Math.min(cd.pageRatio * cd.pageWidth, cd.pageWidth);
+ self.$thumb.width(width).each(function() {
+ A.animate($(this), { left: left }, 0);
+ });
+ },
+
+ changePage: function (n) {
+ var self = this,
+ cd = self.getDimensions(),
+ target = self.alignWithItem(cd.shelfLeft + n * cd.pageWidth),
+ targetLeft = Math.min(n < 0 ? target.right : target.left, cd.maxLeft);
+
+ if (cd.shelfLeft == targetLeft) {
+ self.bounce(self.$shelf, -30 * n);
+ self.bounce(self.$thumb, 6 * n);
+ } else {
+ self.shelfLeft = targetLeft;
+ self.slide(self.$shelf, -targetLeft, function() {
+ self.updateArrows();
+ });
+ self.slide(self.$thumb, targetLeft / cd.shelfWidth * cd.pageWidth, function() {
+ self.updateScrollThumb();
+ });
+ }
+ },
+
+ moveShelf: function (targetLeft) {
+ var self = this;
+
+ self.shelfLeft = targetLeft;
+ A.animate(self.$shelf, { left: -targetLeft }, 0);
+ self.updateControls();
+ },
+
+ getItems: function() {
+ var self = this;
+ return self.$shelf.find('.feed-carousel-card');
+ },
+
+ size: function() {
+ var self = this;
+ return self.getItems().length;
+ },
+
+ alignWithItem: function(x) {
+ if(x < 0) {
+ return { left: 0, right: 0 };
+ }
+
+ var self = this,
+ $items = self.getItems(),
+ rv = $items.map(function() {
+ var pos = self.cardPosition($(this));
+ if(x >= pos.left && x <= pos.right) {
+ return pos;
+ }
+ }).get(0);
+
+ return rv ? rv : self.cardPosition($items.last());
+ },
+
+ cardPosition: function($e) {
+ var left = $e.position().left,
+ right = left + $e.outerWidth(true);
+
+ return { left: left, right: right };
+ },
+
+ slide: function($c, targetLeft, callback) {
+ var self = this,
+ speed = 400,
+ easing = 'cubic-bezier(0.455, 0.03, 0.515, 0.955)'; // easeInOutQuad
+
+ $c.each(function() {
+ var $e = $(this);
+ A.animate($e, { left: targetLeft }, speed, easing, callback);
+ });
+ },
+
+ bounce: function($c, x) {
+ var self = this,
+ speedIn = 400,
+ speedOut = 100,
+ easing = 'cubic-bezier(0.175, 0.885, 0.32, 1.275)'; // easeOutBack
+
+ $c.each(function() {
+ var $e = $(this);
+ A.animate($e, { marginLeft: x }, speedIn, easing, function() {
+ A.animate($e, { marginLeft: 0 }, speedOut);
+ });
+ });
+ }
+ };
+
+ $("#" + "asin-shoveler-ns_1Z256P8XDVV6281VEQK3_20751_" + " .feed-carousel").each(function(i, e) {
+ var $e = $(e);
+ new Carousel($e);
+ });
+ });
+</script>
+
+
+
+<script type="text/javascript">
+ P.when('A').execute(function(A) {
+ var $ = A.$;
+
+ var bilh = function(e, n) {
+ $(e).show().one('load error', function() {
+ $(n).trigger('sload');
+ }).each(function() { if(e.complete) $(e).trigger('load'); });
+ };
+
+ var imgs = $("#" + "asin-shoveler-ns_1Z256P8XDVV6281VEQK3_20751_" + " " +
+ "." + "product-image");
+ for(var i = 2, len = imgs.length; i < len; i++) {
+ (function(c, n) {
+ $(c).one('sload', function() {
+ bilh(this, n);
+ });
+ })(imgs[i - 1], imgs[i]);
+ }
+
+ bilh(imgs[0], imgs[1]);
+ });
+
+</script>
+
+
+<script type="text/javascript">
+P.when("A", "cf").execute(function(A){
+ A.loadDescendantImagesManually(A.$("#asin-shoveler-ns_1Z256P8XDVV6281VEQK3_20751_"));
+});
+</script>
+
+
+ <script type="text/javascript">
+ P.when("gw-productdb").execute(function(pdb) {
+ pdb._add({"p":[{"nodeId":null,"byline":"GoPro","reviews":{"url":"/product-reviews/B00NIYJF6U/ref=s9_al_gw_g421_i1?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop","numberOfRatings":82,"hoverText":"4.0 out of 5 stars","auiStarClass":"a-star-4"},"url":"/gp/product/B00NIYJF6U/ref=s9_al_gw_g421_i1?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00NIYJF6U","title":"GoPro HERO4 SILVER","price":"$399.99"},{"nodeId":null,"byline":"Fitbit","reviews":{"url":"/product-reviews/B0095PZHPE/ref=s9_al_gw_g364_i2?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop","numberOfRatings":8061,"hoverText":"4.4 out of 5 stars","auiStarClass":"a-star-4-5"},"url":"/gp/product/B0095PZHPE/ref=s9_al_gw_g364_i2?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B0095PZHPE","title":"Fitbit One Wireless Activity Plus Sleep Tracker, Black","price":"$92.78"},{"nodeId":null,"byline":"Fitbit","reviews":{"url":"/product-reviews/B00ISSD6QG/ref=s9_al_gw_g364_i3?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop","numberOfRatings":8686,"hoverText":"3.7 out of 5 stars","auiStarClass":"a-star-3-5"},"url":"/gp/product/B00ISSD6QG/ref=s9_al_gw_g364_i3?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00ISSD6QG","title":"Fitbit Flex Wireless Activity + Sleep Wristband, Tangerine [Amazon Exclusive]","price":"$99.95"},{"nodeId":null,"byline":"Garmin","reviews":{"url":"/product-reviews/B00HFPOX9W/ref=s9_al_gw_g422_i4?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop","numberOfRatings":1017,"hoverText":"3.5 out of 5 stars","auiStarClass":"a-star-3-5"},"url":"/gp/product/B00HFPOX9W/ref=s9_al_gw_g422_i4?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00HFPOX9W","title":"Garmin Vivofit Fitness Band - Blue","price":"$79.99"},{"nodeId":null,"byline":"LeapFrog Enterprises","reviews":{"url":"/product-reviews/B00JLHW0J2/ref=s9_al_gw_g21_i5?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop","numberOfRatings":172,"hoverText":"4.4 out of 5 stars","auiStarClass":"a-star-4-5"},"url":"/gp/product/B00JLHW0J2/ref=s9_al_gw_g21_i5?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00JLHW0J2","title":"LeapFrog LeapBand, Pink","price":"$24.99"},{"nodeId":null,"byline":"Garmin","reviews":{"url":"/product-reviews/B00EOHUVTU/ref=s9_al_gw_g422_i6?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop","numberOfRatings":85,"hoverText":"3.8 out of 5 stars","auiStarClass":"a-star-4"},"url":"/gp/product/B00EOHUVTU/ref=s9_al_gw_g422_i6?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00EOHUVTU","title":"Garmin Virb Elite Action Camera","price":"$249.99"},{"nodeId":null,"byline":null,"reviews":{"url":"/product-reviews/B00JBJ3HQ0/ref=s9_al_gw_g107_i7?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop","numberOfRatings":415,"hoverText":"4.4 out of 5 stars","auiStarClass":"a-star-4-5"},"url":"/gp/product/B00JBJ3HQ0/ref=s9_al_gw_g107_i7?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00JBJ3HQ0","title":"Samsung Gear 2 Smartwatch - Silver/Black (US Warranty)","price":"$299.99"},{"nodeId":null,"byline":null,"reviews":{"url":"/product-reviews/B00GQB1JES/ref=s9_al_gw_g107_i8?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop","numberOfRatings":1622,"hoverText":"3.6 out of 5 stars","auiStarClass":"a-star-3-5"},"url":"/gp/product/B00GQB1JES/ref=s9_al_gw_g107_i8?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00GQB1JES","title":"UP 24 by Jawbone - Bluetooth Enabled - Medium - Retail Packaging - Onyx","price":"$107.89"},{"nodeId":null,"byline":null,"reviews":{"url":"/product-reviews/B00JBJ3JBI/ref=s9_al_gw_g107_i9?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop","numberOfRatings":333,"hoverText":"3.5 out of 5 stars","auiStarClass":"a-star-3-5"},"url":"/gp/product/B00JBJ3JBI/ref=s9_al_gw_g107_i9?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00JBJ3JBI","title":"Samsung Gear Fit Fitness Tracker and Smartwatch for Samsung Devices (US Warranty) - Black","price":"$143.22"},{"nodeId":null,"byline":"Sony","reviews":{"url":"/product-reviews/B00EVIBN8U/ref=s9_al_gw_g421_i10?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop","numberOfRatings":75,"hoverText":"3.8 out of 5 stars","auiStarClass":"a-star-4"},"url":"/gp/product/B00EVIBN8U/ref=s9_al_gw_g421_i10?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00EVIBN8U","title":"Sony AS30V High Definition POV Action Video Camera HDR-AS30V","price":"$179.00"},{"nodeId":null,"byline":"Fitbit","reviews":{"url":"/product-reviews/B0095PZHZE/ref=s9_al_gw_g364_i11?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop","numberOfRatings":4547,"hoverText":"4.3 out of 5 stars","auiStarClass":"a-star-4"},"url":"/gp/product/B0095PZHZE/ref=s9_al_gw_g364_i11?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B0095PZHZE","title":"Fitbit Zip Wireless Activity Tracker, Charcoal","price":"$46.89"},{"nodeId":null,"byline":"BodyMedia","reviews":{"url":"/product-reviews/B0049POHK6/ref=s9_al_gw_g364_i13?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop","numberOfRatings":668,"hoverText":"3.6 out of 5 stars","auiStarClass":"a-star-3-5"},"url":"/gp/product/B0049POHK6/ref=s9_al_gw_g364_i13?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978492462&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B0049POHK6","title":"BodyMedia LINK Armband Weight Management System","price":"$119.99"}]});
+ });
+ </script>
+
+
+
+ </div>
+ <hr class='slot-hr desktop-2-hr' />
+
+
+
+ <div class="billboardRowWrapper">
+ <div class="a-row billboardRow">
+ <div class="a-column a-span6">
+
+ <div class='billboard' id='desktop-billboard-1'>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div id="scalable-image-map_scalable-image-map-ns_024EP00B3XEA9TTSP5RP_13701_" class="a-section a-text-center shogun-widget scalable-image-map aui-desktop-link">
+ <a class="a-link-normal" href="/gp/holidaytoylist/ref=br_imp?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-billboard-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978116802&pf_rd_i=desktop"><img alt="Holiday Toy List" src="http://g-ecx.images-amazon.com/images/G/01/Gateway/Billboards/HTLBillboardPresent._UX440_SX440_V320923596_.png" class="a-dynamic-image" height="100%" width="440px" data-a-dynamic-image="{&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Billboards/HTLBillboardPresent._UX880_SX880_V320923596_.png&quot;:[400,880],&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Billboards/HTLBillboardPresent._UX440_SX440_V320923596_.png&quot;:[200,440],&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Billboards/HTLBillboardPresent._V320923596_.png&quot;:[600,1320],&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Billboards/HTLBillboardPresent._UX660_SX660_V320923596_.png&quot;:[300,660]}"></a>
+</div>
+
+ </div>
+
+ </div>
+ <div class="a-column a-span6 a-span-last">
+
+ <div class='billboard' id='desktop-billboard-2'>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div id="scalable-image-map_scalable-image-map-ns_1AXNX7ZTR4X59FCGEB3E_6992_" class="a-section a-text-center shogun-widget scalable-image-map aui-desktop-link">
+ <a class="a-link-normal" href="/b/ref=br_imp?_encoding=UTF8&node=7258612011&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-billboard-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1974109382&pf_rd_i=desktop"><img alt="2014 Electronics Holiday Gift Guide" src="http://g-ecx.images-amazon.com/images/G/01/img14/ce-accessories/egg/traffic-drivers/gateway/EGG_BB_A1._UX440_SX440_V320289512_.jpg" class="a-dynamic-image" height="100%" width="440px" data-a-dynamic-image="{&quot;http://g-ecx.images-amazon.com/images/G/01/img14/ce-accessories/egg/traffic-drivers/gateway/EGG_BB_A1._UX880_SX880_V320289512_.jpg&quot;:[400,880],&quot;http://g-ecx.images-amazon.com/images/G/01/img14/ce-accessories/egg/traffic-drivers/gateway/EGG_BB_A1._V320289512_.jpg&quot;:[600,1320],&quot;http://g-ecx.images-amazon.com/images/G/01/img14/ce-accessories/egg/traffic-drivers/gateway/EGG_BB_A1._UX660_SX660_V320289512_.jpg&quot;:[300,660],&quot;http://g-ecx.images-amazon.com/images/G/01/img14/ce-accessories/egg/traffic-drivers/gateway/EGG_BB_A1._UX440_SX440_V320289512_.jpg&quot;:[200,440]}"></a>
+</div>
+
+ </div>
+
+ </div>
+ </div>
+ </div>
+ <hr class="billboardrow-hr" />
+
+
+ <div class='desktop-row' id='desktop-3'>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div id="asin-shoveler-ns_1V2CWE03ECJ8S3QWDJBZ_3024_" class="a-section a-spacing-none shogun-widget asin-shoveler aui-desktop fresh-shoveler">
+
+
+<div class="a-section as-title-block">
+ <span class="as-title-block-left">
+ <span class="a-color-base">
+ Gifts in Tools &amp; Home Improvement
+ </span>
+ </span>
+ <span class="as-title-block-right">
+ <a class="a-link-normal" href="/b/ref=br_asw_smr?_encoding=UTF8&node=7669466011&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop">
+ See more
+</a>
+ </span>
+</div>
+
+
+
+
+
+
+<div class="a-section feed-carousel">
+ <ul class="a-nostyle a-horizontal feed-carousel-shelf">
+
+
+
+<li data-sghover="{&quot;asin&quot;:&quot;B002L3RUVG&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B002L3RUVG/ref=s9_al_gw_g469_i1?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop"><img alt="Dremel 4000-2/30 120-Volt Variable Speed Rotary Tool Kit" src="http://ecx.images-amazon.com/images/I/41n2FMqiyHL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Dremel 4000-2/30 120-Volt Variable Speed Rotary Tool Kit" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41n2FMqiyHL._AC_SY220_.jpg&quot;:[220,309],&quot;http://ecx.images-amazon.com/images/I/41n2FMqiyHL._AC_SY660_.jpg&quot;:[356,500],&quot;http://ecx.images-amazon.com/images/I/41n2FMqiyHL._AC_SY440_.jpg&quot;:[356,500],&quot;http://ecx.images-amazon.com/images/I/41n2FMqiyHL._AC_SY330_.jpg&quot;:[330,463]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B000WU9LCQ&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B000WU9LCQ/ref=s9_al_gw_g469_i2?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop"><img alt="MagnoGrip 311-090 Magnetic Wristband" src="http://ecx.images-amazon.com/images/I/51shSRxl5gL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="MagnoGrip 311-090 Magnetic Wristband" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51shSRxl5gL._AC_SY330_.jpg&quot;:[330,344],&quot;http://ecx.images-amazon.com/images/I/51shSRxl5gL._AC_SY440_.jpg&quot;:[440,459],&quot;http://ecx.images-amazon.com/images/I/51shSRxl5gL._AC_SY220_.jpg&quot;:[220,230],&quot;http://ecx.images-amazon.com/images/I/51shSRxl5gL._AC_SY660_.jpg&quot;:[479,500]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00315CWXE&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00315CWXE/ref=s9_al_gw_g469_i3?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop"><img alt="Shop-Vac 9650600 3.0-Peak HP Pro Series Wet or Dry Vacuum, 6-Gallon" src="http://ecx.images-amazon.com/images/I/41O%2BlvT3-mL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Shop-Vac 9650600 3.0-Peak HP Pro Series Wet or Dry Vacuum, 6-Gallon" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41O%2BlvT3-mL._AC_SY220_.jpg&quot;:[220,263],&quot;http://ecx.images-amazon.com/images/I/41O%2BlvT3-mL._AC_SY660_.jpg&quot;:[419,500],&quot;http://ecx.images-amazon.com/images/I/41O%2BlvT3-mL._AC_SY330_.jpg&quot;:[330,394],&quot;http://ecx.images-amazon.com/images/I/41O%2BlvT3-mL._AC_SY440_.jpg&quot;:[419,500]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00MB3LMP6&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00MB3LMP6/ref=s9_al_gw_g60_i4?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop"><img alt="Piper HD Security Camera, Video Monitoring Wireless Surveillance System and Home Automation Hub, White" src="http://ecx.images-amazon.com/images/I/41aUpfkl2%2BL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Piper HD Security Camera, Video Monitoring Wireless Surveillance System and Home Automation Hub, White" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41aUpfkl2%2BL._AC_SY440_.jpg&quot;:[440,440],&quot;http://ecx.images-amazon.com/images/I/41aUpfkl2%2BL._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/41aUpfkl2%2BL._AC_SY660_.jpg&quot;:[500,500],&quot;http://ecx.images-amazon.com/images/I/41aUpfkl2%2BL._AC_SY220_.jpg&quot;:[220,220]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00K194N9Y&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00K194N9Y/ref=s9_al_gw_g469_i5?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop"><img alt="Makita XFD01 18V LXT Lithium-Ion Cordless 1/2 Inch Driver-Drill Kit" src="http://ecx.images-amazon.com/images/I/41FLnQM8tnL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Makita XFD01 18V LXT Lithium-Ion Cordless 1/2 Inch Driver-Drill Kit" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41FLnQM8tnL._AC_SY220_.jpg&quot;:[220,340],&quot;http://ecx.images-amazon.com/images/I/41FLnQM8tnL._AC_SY660_.jpg&quot;:[324,500],&quot;http://ecx.images-amazon.com/images/I/41FLnQM8tnL._AC_SY330_.jpg&quot;:[324,500],&quot;http://ecx.images-amazon.com/images/I/41FLnQM8tnL._AC_SY440_.jpg&quot;:[324,500]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B000EDTSZG&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B000EDTSZG/ref=s9_al_gw_g469_i7?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop"><img alt="Custom LeatherCraft 1539 18 Multi-Compartment Tool Carrier" src="http://ecx.images-amazon.com/images/I/51oRpYSjOzL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Custom LeatherCraft 1539 18 Multi-Compartment Tool Carrier" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51oRpYSjOzL._AC_SY660_.jpg&quot;:[430,500],&quot;http://ecx.images-amazon.com/images/I/51oRpYSjOzL._AC_SY440_.jpg&quot;:[430,500],&quot;http://ecx.images-amazon.com/images/I/51oRpYSjOzL._AC_SY220_.jpg&quot;:[220,256],&quot;http://ecx.images-amazon.com/images/I/51oRpYSjOzL._AC_SY330_.jpg&quot;:[330,384]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B002S56S5Q&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B002S56S5Q/ref=s9_al_gw_g469_i8?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop"><img alt="DEWALT DC012 Worksite Charger/Radio" src="http://ecx.images-amazon.com/images/I/51DA4fv4RpL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="DEWALT DC012 Worksite Charger/Radio" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51DA4fv4RpL._AC_SY440_.jpg&quot;:[440,440],&quot;http://ecx.images-amazon.com/images/I/51DA4fv4RpL._AC_SY660_.jpg&quot;:[500,500],&quot;http://ecx.images-amazon.com/images/I/51DA4fv4RpL._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/51DA4fv4RpL._AC_SY220_.jpg&quot;:[220,220]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00IWHDAKA&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00IWHDAKA/ref=s9_al_gw_g60_i9?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop"><img alt="Ankuoo NEO Wi-Fi Smart Switch with Home Automation App for iPhone, iPad, iPad Mini, iPod Touch and Android Smartphones and Tablets" src="http://ecx.images-amazon.com/images/I/31DHz-5cfxL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Ankuoo NEO Wi-Fi Smart Switch with Home Automation App for iPhone, iPad, iPad Mini, iPod Touch and Android Smartphones and Tablets" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/31DHz-5cfxL._AC_SY220_.jpg&quot;:[220,152],&quot;http://ecx.images-amazon.com/images/I/31DHz-5cfxL._AC_SY330_.jpg&quot;:[330,228],&quot;http://ecx.images-amazon.com/images/I/31DHz-5cfxL._AC_SY660_.jpg&quot;:[500,345],&quot;http://ecx.images-amazon.com/images/I/31DHz-5cfxL._AC_SY440_.jpg&quot;:[440,304]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00I12ZB4Y&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00I12ZB4Y/ref=s9_al_gw_g60_i10?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop"><img alt="Philips 259952 Friends of Hue Personal Wireless Lighting Bloom Starter Pack, Frustration Free" src="http://ecx.images-amazon.com/images/I/41sXpy-eVhL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Philips 259952 Friends of Hue Personal Wireless Lighting Bloom Starter Pack, Frustration Free" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41sXpy-eVhL._AC_SY440_.jpg&quot;:[353,500],&quot;http://ecx.images-amazon.com/images/I/41sXpy-eVhL._AC_SY330_.jpg&quot;:[330,467],&quot;http://ecx.images-amazon.com/images/I/41sXpy-eVhL._AC_SY660_.jpg&quot;:[353,500],&quot;http://ecx.images-amazon.com/images/I/41sXpy-eVhL._AC_SY220_.jpg&quot;:[220,312]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00081NHBA&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00081NHBA/ref=s9_al_gw_g469_i11?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop"><img alt="Streamlight 61302 Argo HP C4 LED Headmount Flashlight, Black" src="http://ecx.images-amazon.com/images/I/41ai9zYaxrL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Streamlight 61302 Argo HP C4 LED Headmount Flashlight, Black" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41ai9zYaxrL._AC_SY660_.jpg&quot;:[430,500],&quot;http://ecx.images-amazon.com/images/I/41ai9zYaxrL._AC_SY330_.jpg&quot;:[330,384],&quot;http://ecx.images-amazon.com/images/I/41ai9zYaxrL._AC_SY220_.jpg&quot;:[220,256],&quot;http://ecx.images-amazon.com/images/I/41ai9zYaxrL._AC_SY440_.jpg&quot;:[430,500]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00LGANH8K&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00LGANH8K/ref=s9_al_gw_g469_i12?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop"><img alt="Bosch GLM 15 Compact Laser Measure, 50-Feet" src="http://ecx.images-amazon.com/images/I/41qTeQHdaFL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Bosch GLM 15 Compact Laser Measure, 50-Feet" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41qTeQHdaFL._AC_SY440_.jpg&quot;:[440,440],&quot;http://ecx.images-amazon.com/images/I/41qTeQHdaFL._AC_SY220_.jpg&quot;:[220,220],&quot;http://ecx.images-amazon.com/images/I/41qTeQHdaFL._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/41qTeQHdaFL._AC_SY660_.jpg&quot;:[500,500]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B000BAURXY&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B000BAURXY/ref=s9_al_gw_g469_i13?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop"><img alt="DEWALT DC515K 1/2-Gallon 18-Volt NiCd Cordless Wet/Dry Vac" src="http://ecx.images-amazon.com/images/I/41QmInMTk5L._AC_SY220_.jpg" class="a-dynamic-image product-image" title="DEWALT DC515K 1/2-Gallon 18-Volt NiCd Cordless Wet/Dry Vac" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41QmInMTk5L._AC_SY660_.jpg&quot;:[500,500],&quot;http://ecx.images-amazon.com/images/I/41QmInMTk5L._AC_SY440_.jpg&quot;:[440,440],&quot;http://ecx.images-amazon.com/images/I/41QmInMTk5L._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/41QmInMTk5L._AC_SY220_.jpg&quot;:[220,220]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B000R8DIIG&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B000R8DIIG/ref=s9_al_gw_g469_i14?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop"><img alt="Rayovac Industrial Flashlight, IN2-MS" src="http://ecx.images-amazon.com/images/I/31eNp6BmNIL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Rayovac Industrial Flashlight, IN2-MS" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/31eNp6BmNIL._AC_SY660_.jpg&quot;:[500,179],&quot;http://ecx.images-amazon.com/images/I/31eNp6BmNIL._AC_SY330_.jpg&quot;:[330,118],&quot;http://ecx.images-amazon.com/images/I/31eNp6BmNIL._AC_SY440_.jpg&quot;:[440,158],&quot;http://ecx.images-amazon.com/images/I/31eNp6BmNIL._AC_SY220_.jpg&quot;:[220,79]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00N3W70L4&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00N3W70L4/ref=s9_al_gw_g60_i15?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop"><img alt="O&#39;Keeffe&#39;s K0350015 Working Hands and Healthy Feet Combo Pack" src="http://ecx.images-amazon.com/images/I/51F9OPbT%2BgL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="O&#39;Keeffe&#39;s K0350015 Working Hands and Healthy Feet Combo Pack" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51F9OPbT%2BgL._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/51F9OPbT%2BgL._AC_SY440_.jpg&quot;:[440,440],&quot;http://ecx.images-amazon.com/images/I/51F9OPbT%2BgL._AC_SY220_.jpg&quot;:[220,220],&quot;http://ecx.images-amazon.com/images/I/51F9OPbT%2BgL._AC_SY660_.jpg&quot;:[500,500]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00I9VAJEY&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00I9VAJEY/ref=s9_al_gw_g60_i16?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop"><img alt="Hol&icirc;, The Smart Connected LED Mood Lamp for iOS 7, Android 4.0 Compatible with Bluetooth 3.0 HOLI0108, Silver" src="http://ecx.images-amazon.com/images/I/317gWG7dtoL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Hol&icirc;, The Smart Connected LED Mood Lamp for iOS 7, Android 4.0 Compatible with Bluetooth 3.0 HOLI0108, Silver" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/317gWG7dtoL._AC_SY440_.jpg&quot;:[440,442],&quot;http://ecx.images-amazon.com/images/I/317gWG7dtoL._AC_SY660_.jpg&quot;:[498,500],&quot;http://ecx.images-amazon.com/images/I/317gWG7dtoL._AC_SY330_.jpg&quot;:[330,331],&quot;http://ecx.images-amazon.com/images/I/317gWG7dtoL._AC_SY220_.jpg&quot;:[220,221]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B000S5S5CW&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B000S5S5CW/ref=s9_al_gw_g469_i17?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop"><img alt="Bosch 4100-09 10-Inch Worksite Table Saw with Gravity-Rise Stand" src="http://ecx.images-amazon.com/images/I/518tVaedTYL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Bosch 4100-09 10-Inch Worksite Table Saw with Gravity-Rise Stand" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/518tVaedTYL._AC_SY660_.jpg&quot;:[487,500],&quot;http://ecx.images-amazon.com/images/I/518tVaedTYL._AC_SY220_.jpg&quot;:[220,226],&quot;http://ecx.images-amazon.com/images/I/518tVaedTYL._AC_SY330_.jpg&quot;:[330,339],&quot;http://ecx.images-amazon.com/images/I/518tVaedTYL._AC_SY440_.jpg&quot;:[440,452]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B006M9PTF4&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B006M9PTF4/ref=s9_al_gw_g469_i18?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop"><img alt="Gerber 31-001034 Micro Torch Light" src="http://ecx.images-amazon.com/images/I/31sbM3BO6RL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Gerber 31-001034 Micro Torch Light" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/31sbM3BO6RL._AC_SY330_.jpg&quot;:[330,441],&quot;http://ecx.images-amazon.com/images/I/31sbM3BO6RL._AC_SY660_.jpg&quot;:[374,500],&quot;http://ecx.images-amazon.com/images/I/31sbM3BO6RL._AC_SY440_.jpg&quot;:[374,500],&quot;http://ecx.images-amazon.com/images/I/31sbM3BO6RL._AC_SY220_.jpg&quot;:[220,294]}"></a></span></li>
+
+
+ </ul>
+ <div class="spinner"><img src="http://g-ecx.images-amazon.com/images/G/01/amazonui/loading/loading-4x._V391853216_.gif" border="0" /></div>
+
+ <a class="feed-carousel-control feed-left" href="#"><span class="gw-icon feed-arrow"></span></a>
+ <a class="feed-carousel-control feed-right" href="#"><span class="gw-icon feed-arrow"></span></a>
+ <span class="feed-scrollbar">
+ <span class="feed-scrollbar-track"><span class="feed-scrollbar-thumb"></span></span>
+ </span>
+</div>
+
+</div>
+
+
+
+<script type="text/javascript">
+
+ P.when('A').execute(function(A) {
+ var $ = A.$;
+
+ var Carousel = function ($carousel) {
+ var self = this;
+
+ this.init($carousel);
+ };
+
+ Carousel.prototype = {
+ init: function ($carousel) {
+ var self = this;
+
+ if (A.capabilities.touch) {
+ $carousel.addClass('feed-carousel-touch');
+ }
+
+ self.minItems = 10;
+
+ self.$carousel = $carousel;
+ self.$shelf = self.$carousel.find('.feed-carousel-shelf');
+ self.$spinner = self.$carousel.find('.spinner');
+ self.$left = $('.feed-carousel-control.feed-left', $carousel);
+ self.$right = $('.feed-carousel-control.feed-right', $carousel);
+ self.$buttons = $('.feed-carousel-control', $carousel);
+ self.$thumb = $('.feed-scrollbar-thumb', $carousel);
+ self.shelfLeft = -1 * parseInt(self.$shelf.css('left'), 10);
+ self.calcWidth = $('html').hasClass('a-lt-ie9');
+
+ self.bindEvents();
+ self.$carousel.data("Carousel", self);
+
+ self.$carousel.trigger('change');
+ },
+
+ bindEvents: function () {
+ var self = this,
+ $body = $('body');
+
+ self.$carousel.change(function(e) {
+ self.updateSpinner();
+ self.updateShelfWidth();
+ self.updateControls();
+ });
+
+ self.$left.click(function(e) {
+ e.preventDefault();
+ self.changePage(-1);
+ });
+
+ self.$right.click(function(e) {
+ e.preventDefault();
+ self.changePage(+1);
+ });
+
+ $('.product-image', self.$shelf).one('sload', function() {
+ self.$carousel.trigger('change');
+ });
+
+ $(window).resize(function() {
+ self.changePage(0);
+ self.updateControls();
+ });
+
+ self.$thumb.mousedown(function(e) {
+ var lastX = e.clientX;
+
+ if (e.which !== 1) return;
+
+ e.preventDefault();
+
+ self.$carousel.addClass('scrolling');
+
+ $body.bind("mousemove.feed-carousel",function(e) {
+ var cd = self.getDimensions(),
+ mouseDistance = e.clientX - lastX,
+ shelfDistance = 1 / cd.pageRatio * mouseDistance,
+ targetLeft = Math.max(Math.min(cd.shelfLeft + shelfDistance, cd.maxLeft), 0);
+
+ lastX = e.clientX;
+ self.moveShelf(targetLeft);
+ });
+ $(document).bind("selectstart.feed-carousel", function() { return false; });
+ });
+
+ $body.mouseup(function() {
+ self.$carousel.removeClass('scrolling');
+ if(!self.$carousel.hasClass('hovering')) {
+ self.hideControls();
+ }
+ $body.unbind("mousemove.feed-carousel");
+ $(document).unbind("selectstart.feed-carousel");
+ });
+
+ self.$carousel.hover(
+ function() {
+ self.$carousel.addClass('hovering');
+ clearTimeout(self.hoverTimer);
+ self.hoverTimer = setTimeout(function(){
+ if(self.$carousel.hasClass('hovering')){
+ self.showControls();
+ }
+ }, 300);
+ },
+ function() {
+ self.$carousel.removeClass('hovering');
+ clearTimeout(self.hoverTimer);
+ if(!self.$carousel.hasClass('scrolling')) {
+ self.hoverTimer = setTimeout(function(){
+ if(!self.$carousel.hasClass('hovering')) {
+ self.hideControls();
+ }
+ }, 600);
+ }
+ }
+ );
+ },
+
+ getDimensions: function() {
+ var self = this,
+ shelfWidth = self.$shelf.width(),
+ shelfLeft = self.shelfLeft,
+ pageWidth = self.$carousel.width();
+
+ return {
+ pageWidth: pageWidth,
+ shelfWidth: shelfWidth,
+ shelfLeft: shelfLeft,
+ pageRatio: pageWidth / shelfWidth,
+ leftRatio: shelfLeft / shelfWidth,
+ maxLeft: shelfWidth - pageWidth
+ };
+ },
+
+ updateShelfWidth: function() {
+ var self = this,
+ w = 0;
+
+ if(!self.calcWidth) {
+ return;
+ }
+
+ self.$shelf.children().each(function() { w += $(this).outerWidth(true); });
+ self.$shelf.width(w);
+ },
+
+ updateSpinner: function() {
+ var self = this;
+ if(self.size() < self.minItems) {
+ self.$spinner.show();
+ } else {
+ self.$spinner.hide();
+ }
+ },
+
+ updateControls: function() {
+ var self = this;
+ self.updateArrows();
+ self.updateScrollThumb();
+ },
+
+ showControls: function(complete) {
+ var self = this,
+ $controls = self.$thumb.add(self.$buttons);
+
+ $controls.stop(true, true).fadeIn({
+ duration: 300,
+ complete: complete,
+ queue: false
+ });
+ },
+
+ hideControls: function(complete) {
+ var self = this;
+ $controls = self.$thumb;
+
+ if(!self.$carousel.hasClass('first-carousel')) {
+ $controls = $controls.add(self.$buttons);
+ }
+
+ $controls.stop(true, true).fadeOut({
+ duration: 300,
+ complete: complete,
+ queue: false
+ });
+ },
+
+ appendCards: function(cards) {
+ var self = this;
+
+ self.$shelf.append(cards);
+ self.$carousel.trigger("change");
+ },
+
+ updateArrows: function() {
+ var self = this,
+ clazz = 'feed-control-disabled',
+ cd = self.getDimensions(),
+ flags = [ cd.shelfLeft > 0, cd.shelfLeft < cd.maxLeft ],
+ ctrls = [ self.$left, self.$right ];
+
+ $.each(ctrls, function(i, $e) {
+ flags[i] ? $e.removeClass(clazz) : $e.addClass(clazz);
+ });
+ },
+
+ updateScrollThumb: function() {
+ var self = this,
+ cd = self.getDimensions(),
+ left = cd.leftRatio * cd.pageWidth,
+ width = Math.min(cd.pageRatio * cd.pageWidth, cd.pageWidth);
+ self.$thumb.width(width).each(function() {
+ A.animate($(this), { left: left }, 0);
+ });
+ },
+
+ changePage: function (n) {
+ var self = this,
+ cd = self.getDimensions(),
+ target = self.alignWithItem(cd.shelfLeft + n * cd.pageWidth),
+ targetLeft = Math.min(n < 0 ? target.right : target.left, cd.maxLeft);
+
+ if (cd.shelfLeft == targetLeft) {
+ self.bounce(self.$shelf, -30 * n);
+ self.bounce(self.$thumb, 6 * n);
+ } else {
+ self.shelfLeft = targetLeft;
+ self.slide(self.$shelf, -targetLeft, function() {
+ self.updateArrows();
+ });
+ self.slide(self.$thumb, targetLeft / cd.shelfWidth * cd.pageWidth, function() {
+ self.updateScrollThumb();
+ });
+ }
+ },
+
+ moveShelf: function (targetLeft) {
+ var self = this;
+
+ self.shelfLeft = targetLeft;
+ A.animate(self.$shelf, { left: -targetLeft }, 0);
+ self.updateControls();
+ },
+
+ getItems: function() {
+ var self = this;
+ return self.$shelf.find('.feed-carousel-card');
+ },
+
+ size: function() {
+ var self = this;
+ return self.getItems().length;
+ },
+
+ alignWithItem: function(x) {
+ if(x < 0) {
+ return { left: 0, right: 0 };
+ }
+
+ var self = this,
+ $items = self.getItems(),
+ rv = $items.map(function() {
+ var pos = self.cardPosition($(this));
+ if(x >= pos.left && x <= pos.right) {
+ return pos;
+ }
+ }).get(0);
+
+ return rv ? rv : self.cardPosition($items.last());
+ },
+
+ cardPosition: function($e) {
+ var left = $e.position().left,
+ right = left + $e.outerWidth(true);
+
+ return { left: left, right: right };
+ },
+
+ slide: function($c, targetLeft, callback) {
+ var self = this,
+ speed = 400,
+ easing = 'cubic-bezier(0.455, 0.03, 0.515, 0.955)'; // easeInOutQuad
+
+ $c.each(function() {
+ var $e = $(this);
+ A.animate($e, { left: targetLeft }, speed, easing, callback);
+ });
+ },
+
+ bounce: function($c, x) {
+ var self = this,
+ speedIn = 400,
+ speedOut = 100,
+ easing = 'cubic-bezier(0.175, 0.885, 0.32, 1.275)'; // easeOutBack
+
+ $c.each(function() {
+ var $e = $(this);
+ A.animate($e, { marginLeft: x }, speedIn, easing, function() {
+ A.animate($e, { marginLeft: 0 }, speedOut);
+ });
+ });
+ }
+ };
+
+ $("#" + "asin-shoveler-ns_1V2CWE03ECJ8S3QWDJBZ_3024_" + " .feed-carousel").each(function(i, e) {
+ var $e = $(e);
+ new Carousel($e);
+ });
+ });
+</script>
+
+
+
+<script type="text/javascript">
+ P.when('A').execute(function(A) {
+ var $ = A.$;
+
+ var bilh = function(e, n) {
+ $(e).show().one('load error', function() {
+ $(n).trigger('sload');
+ }).each(function() { if(e.complete) $(e).trigger('load'); });
+ };
+
+ var imgs = $("#" + "asin-shoveler-ns_1V2CWE03ECJ8S3QWDJBZ_3024_" + " " +
+ "." + "product-image");
+ for(var i = 2, len = imgs.length; i < len; i++) {
+ (function(c, n) {
+ $(c).one('sload', function() {
+ bilh(this, n);
+ });
+ })(imgs[i - 1], imgs[i]);
+ }
+
+ bilh(imgs[0], imgs[1]);
+ });
+
+</script>
+
+
+<script type="text/javascript">
+P.when("A", "cf").execute(function(A){
+ A.loadDescendantImagesManually(A.$("#asin-shoveler-ns_1V2CWE03ECJ8S3QWDJBZ_3024_"));
+});
+</script>
+
+
+ <script type="text/javascript">
+ P.when("gw-productdb").execute(function(pdb) {
+ pdb._add({"p":[{"nodeId":null,"byline":"Dremel","reviews":{"url":"/product-reviews/B002L3RUVG/ref=s9_al_gw_g469_i1?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","numberOfRatings":513,"hoverText":"4.7 out of 5 stars","auiStarClass":"a-star-4-5"},"url":"/gp/product/B002L3RUVG/ref=s9_al_gw_g469_i1?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B002L3RUVG","title":"Dremel 4000-2/30 120-Volt Variable Speed Rotary Tool Kit","price":"$79.98"},{"nodeId":null,"byline":"MagnoGrip","reviews":{"url":"/product-reviews/B000WU9LCQ/ref=s9_al_gw_g469_i2?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","numberOfRatings":577,"hoverText":"4.4 out of 5 stars","auiStarClass":"a-star-4-5"},"url":"/gp/product/B000WU9LCQ/ref=s9_al_gw_g469_i2?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B000WU9LCQ","title":"MagnoGrip 311-090 Magnetic Wristband","price":"$12.94"},{"nodeId":null,"byline":"Shop-Vac","reviews":{"url":"/product-reviews/B00315CWXE/ref=s9_al_gw_g469_i3?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","numberOfRatings":284,"hoverText":"4.2 out of 5 stars","auiStarClass":"a-star-4"},"url":"/gp/product/B00315CWXE/ref=s9_al_gw_g469_i3?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00315CWXE","title":"Shop-Vac 9650600 3.0-Peak HP Pro Series Wet or Dry Vacuum, 6-Gallon","price":"$58.99"},{"nodeId":null,"byline":"iControl Networks","reviews":{"url":"/product-reviews/B00MB3LMP6/ref=s9_al_gw_g60_i4?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","numberOfRatings":35,"hoverText":"3.3 out of 5 stars","auiStarClass":"a-star-3-5"},"url":"/gp/product/B00MB3LMP6/ref=s9_al_gw_g60_i4?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00MB3LMP6","title":"Piper HD Security Camera, Video Monitoring Wireless Surveillance System and Home Automation Hub, White","price":"$199.00"},{"nodeId":null,"byline":"Makita","reviews":{"url":"/product-reviews/B00K194N9Y/ref=s9_al_gw_g469_i5?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","numberOfRatings":1,"hoverText":"5.0 out of 5 stars","auiStarClass":"a-star-5"},"url":"/gp/product/B00K194N9Y/ref=s9_al_gw_g469_i5?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00K194N9Y","title":"Makita XFD01 18V LXT Lithium-Ion Cordless 1/2 Inch Driver-Drill Kit","price":"$257.65"},{"nodeId":null,"byline":"Custom Leathercraft","reviews":{"url":"/product-reviews/B000EDTSZG/ref=s9_al_gw_g469_i7?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","numberOfRatings":229,"hoverText":"4.8 out of 5 stars","auiStarClass":"a-star-5"},"url":"/gp/product/B000EDTSZG/ref=s9_al_gw_g469_i7?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B000EDTSZG","title":"Custom LeatherCraft 1539 18 Multi-Compartment Tool Carrier","price":"$57.99"},{"nodeId":null,"byline":"DEWALT","reviews":{"url":"/product-reviews/B002S56S5Q/ref=s9_al_gw_g469_i8?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","numberOfRatings":268,"hoverText":"4.4 out of 5 stars","auiStarClass":"a-star-4-5"},"url":"/gp/product/B002S56S5Q/ref=s9_al_gw_g469_i8?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B002S56S5Q","title":"DEWALT DC012 Worksite Charger/Radio","price":"\n Click to see price\n"},{"nodeId":null,"byline":"Ankuoo","reviews":{"url":"/product-reviews/B00IWHDAKA/ref=s9_al_gw_g60_i9?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","numberOfRatings":66,"hoverText":"4.0 out of 5 stars","auiStarClass":"a-star-4"},"url":"/gp/product/B00IWHDAKA/ref=s9_al_gw_g60_i9?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00IWHDAKA","title":"Ankuoo NEO Wi-Fi Smart Switch with Home Automation App for iPhone, iPad, iPad Mini, iPod Touch and Android Smartphones and Tablets","price":"$36.99"},{"nodeId":null,"byline":"Philips","reviews":{"url":"/product-reviews/B00I12ZB4Y/ref=s9_al_gw_g60_i10?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","numberOfRatings":696,"hoverText":"4.1 out of 5 stars","auiStarClass":"a-star-4"},"url":"/gp/product/B00I12ZB4Y/ref=s9_al_gw_g60_i10?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00I12ZB4Y","title":"Philips 259952 Friends of Hue Personal Wireless Lighting Bloom Starter Pack, Frustration Free","price":"$179.95"},{"nodeId":null,"byline":"Streamlight","reviews":{"url":"/product-reviews/B00081NHBA/ref=s9_al_gw_g469_i11?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","numberOfRatings":144,"hoverText":"4.5 out of 5 stars","auiStarClass":"a-star-4-5"},"url":"/gp/product/B00081NHBA/ref=s9_al_gw_g469_i11?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00081NHBA","title":"Streamlight 61302 Argo HP C4 LED Headmount Flashlight, Black","price":"$35.46"},{"nodeId":null,"byline":"Bosch","reviews":{"url":"/product-reviews/B00LGANH8K/ref=s9_al_gw_g469_i12?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","numberOfRatings":52,"hoverText":"4.5 out of 5 stars","auiStarClass":"a-star-4-5"},"url":"/gp/product/B00LGANH8K/ref=s9_al_gw_g469_i12?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00LGANH8K","title":"Bosch GLM 15 Compact Laser Measure, 50-Feet","price":"$49.97"},{"nodeId":null,"byline":"DEWALT","reviews":{"url":"/product-reviews/B000BAURXY/ref=s9_al_gw_g469_i13?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","numberOfRatings":220,"hoverText":"4.3 out of 5 stars","auiStarClass":"a-star-4-5"},"url":"/gp/product/B000BAURXY/ref=s9_al_gw_g469_i13?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B000BAURXY","title":"DEWALT DC515K 1/2-Gallon 18-Volt NiCd Cordless Wet/Dry Vac","price":"$129.00"},{"nodeId":null,"byline":"Rayovac","reviews":{"url":"/product-reviews/B000R8DIIG/ref=s9_al_gw_g469_i14?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","numberOfRatings":14,"hoverText":"3.9 out of 5 stars","auiStarClass":"a-star-4"},"url":"/gp/product/B000R8DIIG/ref=s9_al_gw_g469_i14?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B000R8DIIG","title":"Rayovac Industrial Flashlight, IN2-MS","price":"$6.17"},{"nodeId":null,"byline":"O'Keeffe's","reviews":{"url":"/product-reviews/B00N3W70L4/ref=s9_al_gw_g60_i15?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","numberOfRatings":295,"hoverText":"4.6 out of 5 stars","auiStarClass":"a-star-4-5"},"url":"/gp/product/B00N3W70L4/ref=s9_al_gw_g60_i15?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00N3W70L4","title":"O'Keeffe's K0350015 Working Hands and Healthy Feet Combo Pack","price":"$12.53"},{"nodeId":null,"byline":"Holî","reviews":{"url":"/product-reviews/B00I9VAJEY/ref=s9_al_gw_g60_i16?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","numberOfRatings":10,"hoverText":"4.1 out of 5 stars","auiStarClass":"a-star-4"},"url":"/gp/product/B00I9VAJEY/ref=s9_al_gw_g60_i16?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00I9VAJEY","title":"Holî, The Smart Connected LED Mood Lamp for iOS 7, Android 4.0 Compatible with Bluetooth 3.0 HOLI0108, Silver","price":"$249.95"},{"nodeId":null,"byline":"Bosch","reviews":{"url":"/product-reviews/B000S5S5CW/ref=s9_al_gw_g469_i17?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","numberOfRatings":289,"hoverText":"4.4 out of 5 stars","auiStarClass":"a-star-4-5"},"url":"/gp/product/B000S5S5CW/ref=s9_al_gw_g469_i17?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B000S5S5CW","title":"Bosch 4100-09 10-Inch Worksite Table Saw with Gravity-Rise Stand","price":"\n Click to see price\n"},{"nodeId":null,"byline":"Gerber","reviews":{"url":"/product-reviews/B006M9PTF4/ref=s9_al_gw_g469_i18?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","numberOfRatings":46,"hoverText":"4.4 out of 5 stars","auiStarClass":"a-star-4-5"},"url":"/gp/product/B006M9PTF4/ref=s9_al_gw_g469_i18?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1972997562&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B006M9PTF4","title":"Gerber 31-001034 Micro Torch Light","price":"$9.91"}]});
+ });
+ </script>
+
+
+
+ </div>
+ <hr class='slot-hr desktop-3-hr' />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div class='desktop-row' id='desktop-4'>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div id="asin-shoveler-ns_1SDHZQ8T99ARS8TVH2PD_15737_" class="a-section a-spacing-none shogun-widget asin-shoveler aui-desktop fresh-shoveler">
+
+
+<div class="a-section as-title-block">
+ <span class="as-title-block-left">
+ <span class="a-color-base">
+ Gift Ideas in Beauty, Grooming &amp; Health
+ </span>
+ </span>
+ <span class="as-title-block-right">
+ <a class="a-link-normal" href="/b/ref=br_asw_smr?_encoding=UTF8&node=6131423011&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop">
+ See more
+</a>
+ </span>
+</div>
+
+
+
+
+
+
+<div class="a-section feed-carousel">
+ <ul class="a-nostyle a-horizontal feed-carousel-shelf">
+
+
+
+<li data-sghover="{&quot;asin&quot;:&quot;B008XNJXXQ&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B008XNJXXQ/ref=s9_al_gw_g510_i1?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop"><img alt="LORAC PRO Palette" src="http://ecx.images-amazon.com/images/I/417xhGYDOUL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="LORAC PRO Palette" height="206px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/417xhGYDOUL._AC_SY220_.jpg&quot;:[206,500],&quot;http://ecx.images-amazon.com/images/I/417xhGYDOUL._AC_SY330_.jpg&quot;:[206,500],&quot;http://ecx.images-amazon.com/images/I/417xhGYDOUL._AC_SY440_.jpg&quot;:[206,500],&quot;http://ecx.images-amazon.com/images/I/417xhGYDOUL._AC_SY660_.jpg&quot;:[206,500]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B008HBMQU6&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B008HBMQU6/ref=s9_al_gw_g121_i2?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop"><img alt="Burt&#39;s Bees Baby Bee Sweet Memories Gift Set with Keepsake Photo Box" src="http://ecx.images-amazon.com/images/I/41viGYuXu1L._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Burt&#39;s Bees Baby Bee Sweet Memories Gift Set with Keepsake Photo Box" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41viGYuXu1L._AC_SY220_.jpg&quot;:[220,147],&quot;http://ecx.images-amazon.com/images/I/41viGYuXu1L._AC_SY330_.jpg&quot;:[330,220],&quot;http://ecx.images-amazon.com/images/I/41viGYuXu1L._AC_SY440_.jpg&quot;:[440,293],&quot;http://ecx.images-amazon.com/images/I/41viGYuXu1L._AC_SY660_.jpg&quot;:[500,333]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00N75NI7W&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00N75NI7W/ref=s9_al_gw_g194_i3?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop"><img alt="Nivea Body Smooth Skincare Gift Set" src="http://ecx.images-amazon.com/images/I/51PtrsU250L._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Nivea Body Smooth Skincare Gift Set" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51PtrsU250L._AC_SY660_.jpg&quot;:[500,500],&quot;http://ecx.images-amazon.com/images/I/51PtrsU250L._AC_SY440_.jpg&quot;:[440,440],&quot;http://ecx.images-amazon.com/images/I/51PtrsU250L._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/51PtrsU250L._AC_SY220_.jpg&quot;:[220,220]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00M32Q42G&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00M32Q42G/ref=s9_al_gw_g510_i4?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop"><img alt="LORAC The Royal Lip Lustre Creme Set" src="http://ecx.images-amazon.com/images/I/510J0i2JlsL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="LORAC The Royal Lip Lustre Creme Set" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/510J0i2JlsL._AC_SY660_.jpg&quot;:[500,435],&quot;http://ecx.images-amazon.com/images/I/510J0i2JlsL._AC_SY330_.jpg&quot;:[330,287],&quot;http://ecx.images-amazon.com/images/I/510J0i2JlsL._AC_SY440_.jpg&quot;:[440,383],&quot;http://ecx.images-amazon.com/images/I/510J0i2JlsL._AC_SY220_.jpg&quot;:[220,191]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B001DNE3KQ&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B001DNE3KQ/ref=s9_al_gw_g364_i5?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop"><img alt="Panasonic ES8103S Arc3 Electric Shaver Wet/Dry with Nanotech Blades for Men" src="http://ecx.images-amazon.com/images/I/41yxXBKcnvL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Panasonic ES8103S Arc3 Electric Shaver Wet/Dry with Nanotech Blades for Men" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41yxXBKcnvL._AC_SY660_.jpg&quot;:[500,203],&quot;http://ecx.images-amazon.com/images/I/41yxXBKcnvL._AC_SY440_.jpg&quot;:[440,179],&quot;http://ecx.images-amazon.com/images/I/41yxXBKcnvL._AC_SY330_.jpg&quot;:[330,134],&quot;http://ecx.images-amazon.com/images/I/41yxXBKcnvL._AC_SY220_.jpg&quot;:[220,89]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B004PJ1LDW&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B004PJ1LDW/ref=s9_al_gw_g510_i6?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop"><img alt="Lolita Lempicka Eau de Parfum Spray, 3.4 fl. oz." src="http://ecx.images-amazon.com/images/I/41ipsBPus6L._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Lolita Lempicka Eau de Parfum Spray, 3.4 fl. oz." height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41ipsBPus6L._AC_SY660_.jpg&quot;:[500,334],&quot;http://ecx.images-amazon.com/images/I/41ipsBPus6L._AC_SY440_.jpg&quot;:[440,294],&quot;http://ecx.images-amazon.com/images/I/41ipsBPus6L._AC_SY220_.jpg&quot;:[220,147],&quot;http://ecx.images-amazon.com/images/I/41ipsBPus6L._AC_SY330_.jpg&quot;:[330,220]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00FS2N3FE&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00FS2N3FE/ref=s9_al_gw_g364_i7?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop"><img alt="Philips Sonicare HX9352/04 DiamondClean Rechargeable Electric Toothbrush, Black" src="http://ecx.images-amazon.com/images/I/31oj2m7SYxL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Philips Sonicare HX9352/04 DiamondClean Rechargeable Electric Toothbrush, Black" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/31oj2m7SYxL._AC_SY330_.jpg&quot;:[330,404],&quot;http://ecx.images-amazon.com/images/I/31oj2m7SYxL._AC_SY440_.jpg&quot;:[408,500],&quot;http://ecx.images-amazon.com/images/I/31oj2m7SYxL._AC_SY660_.jpg&quot;:[408,500],&quot;http://ecx.images-amazon.com/images/I/31oj2m7SYxL._AC_SY220_.jpg&quot;:[220,270]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B000SX31VY&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B000SX31VY/ref=s9_al_gw_g510_i8?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop"><img alt="Jack Black Core Collection" src="http://ecx.images-amazon.com/images/I/51mK5J%2B5zEL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Jack Black Core Collection" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51mK5J%2B5zEL._AC_SY220_.jpg&quot;:[220,251],&quot;http://ecx.images-amazon.com/images/I/51mK5J%2B5zEL._AC_SY660_.jpg&quot;:[439,500],&quot;http://ecx.images-amazon.com/images/I/51mK5J%2B5zEL._AC_SY440_.jpg&quot;:[439,500],&quot;http://ecx.images-amazon.com/images/I/51mK5J%2B5zEL._AC_SY330_.jpg&quot;:[330,376]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00BGO0Q9O&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00BGO0Q9O/ref=s9_al_gw_g364_i9?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop"><img alt="Fitbit Flex Wireless Activity + Sleep Wristband, Black" src="http://ecx.images-amazon.com/images/I/21ukcP7LNVL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Fitbit Flex Wireless Activity + Sleep Wristband, Black" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/21ukcP7LNVL._AC_SY220_.jpg&quot;:[220,391],&quot;http://ecx.images-amazon.com/images/I/21ukcP7LNVL._AC_SY330_.jpg&quot;:[281,500],&quot;http://ecx.images-amazon.com/images/I/21ukcP7LNVL._AC_SY660_.jpg&quot;:[281,500],&quot;http://ecx.images-amazon.com/images/I/21ukcP7LNVL._AC_SY440_.jpg&quot;:[281,500]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B002N5MHLU&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B002N5MHLU/ref=s9_al_gw_g364_i10?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop"><img alt="Panasonic ES-LA63-S Arc4 Electric Shaver Wet/Dry with Multi-Flex Pivoting Head for Men" src="http://ecx.images-amazon.com/images/I/41o12KdbvnL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Panasonic ES-LA63-S Arc4 Electric Shaver Wet/Dry with Multi-Flex Pivoting Head for Men" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41o12KdbvnL._AC_SY440_.jpg&quot;:[440,258],&quot;http://ecx.images-amazon.com/images/I/41o12KdbvnL._AC_SY330_.jpg&quot;:[330,193],&quot;http://ecx.images-amazon.com/images/I/41o12KdbvnL._AC_SY220_.jpg&quot;:[220,129],&quot;http://ecx.images-amazon.com/images/I/41o12KdbvnL._AC_SY660_.jpg&quot;:[500,293]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B0012RV5UO&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B0012RV5UO/ref=s9_al_gw_g194_i11?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop"><img alt="Marc Jacobs Daisy by Marc Jacobs 3.4oz 100ml EDT Spray" src="http://ecx.images-amazon.com/images/I/51XtK4t0sCL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Marc Jacobs Daisy by Marc Jacobs 3.4oz 100ml EDT Spray" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51XtK4t0sCL._AC_SY440_.jpg&quot;:[440,440],&quot;http://ecx.images-amazon.com/images/I/51XtK4t0sCL._AC_SY220_.jpg&quot;:[220,220],&quot;http://ecx.images-amazon.com/images/I/51XtK4t0sCL._AC_SY660_.jpg&quot;:[500,500],&quot;http://ecx.images-amazon.com/images/I/51XtK4t0sCL._AC_SY330_.jpg&quot;:[330,330]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B007Y4EKNS&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B007Y4EKNS/ref=s9_al_gw_g510_i12?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop"><img alt="Baxter of California Scented Candle, White Wood Number Three" src="http://ecx.images-amazon.com/images/I/31cup9D2C-L._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Baxter of California Scented Candle, White Wood Number Three" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/31cup9D2C-L._AC_SY440_.jpg&quot;:[440,306],&quot;http://ecx.images-amazon.com/images/I/31cup9D2C-L._AC_SY330_.jpg&quot;:[330,230],&quot;http://ecx.images-amazon.com/images/I/31cup9D2C-L._AC_SY220_.jpg&quot;:[220,153],&quot;http://ecx.images-amazon.com/images/I/31cup9D2C-L._AC_SY660_.jpg&quot;:[500,348]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00DQZ6PCS&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00DQZ6PCS/ref=s9_al_gw_g194_i13?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop"><img alt="butter LONDON Ice Lacquer and Overcoat Duo" src="http://ecx.images-amazon.com/images/I/51h3bVaj4FL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="butter LONDON Ice Lacquer and Overcoat Duo" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51h3bVaj4FL._AC_SY660_.jpg&quot;:[459,500],&quot;http://ecx.images-amazon.com/images/I/51h3bVaj4FL._AC_SY440_.jpg&quot;:[440,479],&quot;http://ecx.images-amazon.com/images/I/51h3bVaj4FL._AC_SY330_.jpg&quot;:[330,359],&quot;http://ecx.images-amazon.com/images/I/51h3bVaj4FL._AC_SY220_.jpg&quot;:[220,240]}"></a></span></li>
+
+
+ </ul>
+ <div class="spinner"><img src="http://g-ecx.images-amazon.com/images/G/01/amazonui/loading/loading-4x._V391853216_.gif" border="0" /></div>
+
+ <a class="feed-carousel-control feed-left" href="#"><span class="gw-icon feed-arrow"></span></a>
+ <a class="feed-carousel-control feed-right" href="#"><span class="gw-icon feed-arrow"></span></a>
+ <span class="feed-scrollbar">
+ <span class="feed-scrollbar-track"><span class="feed-scrollbar-thumb"></span></span>
+ </span>
+</div>
+
+</div>
+
+
+
+<script type="text/javascript">
+
+ P.when('A').execute(function(A) {
+ var $ = A.$;
+
+ var Carousel = function ($carousel) {
+ var self = this;
+
+ this.init($carousel);
+ };
+
+ Carousel.prototype = {
+ init: function ($carousel) {
+ var self = this;
+
+ if (A.capabilities.touch) {
+ $carousel.addClass('feed-carousel-touch');
+ }
+
+ self.minItems = 10;
+
+ self.$carousel = $carousel;
+ self.$shelf = self.$carousel.find('.feed-carousel-shelf');
+ self.$spinner = self.$carousel.find('.spinner');
+ self.$left = $('.feed-carousel-control.feed-left', $carousel);
+ self.$right = $('.feed-carousel-control.feed-right', $carousel);
+ self.$buttons = $('.feed-carousel-control', $carousel);
+ self.$thumb = $('.feed-scrollbar-thumb', $carousel);
+ self.shelfLeft = -1 * parseInt(self.$shelf.css('left'), 10);
+ self.calcWidth = $('html').hasClass('a-lt-ie9');
+
+ self.bindEvents();
+ self.$carousel.data("Carousel", self);
+
+ self.$carousel.trigger('change');
+ },
+
+ bindEvents: function () {
+ var self = this,
+ $body = $('body');
+
+ self.$carousel.change(function(e) {
+ self.updateSpinner();
+ self.updateShelfWidth();
+ self.updateControls();
+ });
+
+ self.$left.click(function(e) {
+ e.preventDefault();
+ self.changePage(-1);
+ });
+
+ self.$right.click(function(e) {
+ e.preventDefault();
+ self.changePage(+1);
+ });
+
+ $('.product-image', self.$shelf).one('sload', function() {
+ self.$carousel.trigger('change');
+ });
+
+ $(window).resize(function() {
+ self.changePage(0);
+ self.updateControls();
+ });
+
+ self.$thumb.mousedown(function(e) {
+ var lastX = e.clientX;
+
+ if (e.which !== 1) return;
+
+ e.preventDefault();
+
+ self.$carousel.addClass('scrolling');
+
+ $body.bind("mousemove.feed-carousel",function(e) {
+ var cd = self.getDimensions(),
+ mouseDistance = e.clientX - lastX,
+ shelfDistance = 1 / cd.pageRatio * mouseDistance,
+ targetLeft = Math.max(Math.min(cd.shelfLeft + shelfDistance, cd.maxLeft), 0);
+
+ lastX = e.clientX;
+ self.moveShelf(targetLeft);
+ });
+ $(document).bind("selectstart.feed-carousel", function() { return false; });
+ });
+
+ $body.mouseup(function() {
+ self.$carousel.removeClass('scrolling');
+ if(!self.$carousel.hasClass('hovering')) {
+ self.hideControls();
+ }
+ $body.unbind("mousemove.feed-carousel");
+ $(document).unbind("selectstart.feed-carousel");
+ });
+
+ self.$carousel.hover(
+ function() {
+ self.$carousel.addClass('hovering');
+ clearTimeout(self.hoverTimer);
+ self.hoverTimer = setTimeout(function(){
+ if(self.$carousel.hasClass('hovering')){
+ self.showControls();
+ }
+ }, 300);
+ },
+ function() {
+ self.$carousel.removeClass('hovering');
+ clearTimeout(self.hoverTimer);
+ if(!self.$carousel.hasClass('scrolling')) {
+ self.hoverTimer = setTimeout(function(){
+ if(!self.$carousel.hasClass('hovering')) {
+ self.hideControls();
+ }
+ }, 600);
+ }
+ }
+ );
+ },
+
+ getDimensions: function() {
+ var self = this,
+ shelfWidth = self.$shelf.width(),
+ shelfLeft = self.shelfLeft,
+ pageWidth = self.$carousel.width();
+
+ return {
+ pageWidth: pageWidth,
+ shelfWidth: shelfWidth,
+ shelfLeft: shelfLeft,
+ pageRatio: pageWidth / shelfWidth,
+ leftRatio: shelfLeft / shelfWidth,
+ maxLeft: shelfWidth - pageWidth
+ };
+ },
+
+ updateShelfWidth: function() {
+ var self = this,
+ w = 0;
+
+ if(!self.calcWidth) {
+ return;
+ }
+
+ self.$shelf.children().each(function() { w += $(this).outerWidth(true); });
+ self.$shelf.width(w);
+ },
+
+ updateSpinner: function() {
+ var self = this;
+ if(self.size() < self.minItems) {
+ self.$spinner.show();
+ } else {
+ self.$spinner.hide();
+ }
+ },
+
+ updateControls: function() {
+ var self = this;
+ self.updateArrows();
+ self.updateScrollThumb();
+ },
+
+ showControls: function(complete) {
+ var self = this,
+ $controls = self.$thumb.add(self.$buttons);
+
+ $controls.stop(true, true).fadeIn({
+ duration: 300,
+ complete: complete,
+ queue: false
+ });
+ },
+
+ hideControls: function(complete) {
+ var self = this;
+ $controls = self.$thumb;
+
+ if(!self.$carousel.hasClass('first-carousel')) {
+ $controls = $controls.add(self.$buttons);
+ }
+
+ $controls.stop(true, true).fadeOut({
+ duration: 300,
+ complete: complete,
+ queue: false
+ });
+ },
+
+ appendCards: function(cards) {
+ var self = this;
+
+ self.$shelf.append(cards);
+ self.$carousel.trigger("change");
+ },
+
+ updateArrows: function() {
+ var self = this,
+ clazz = 'feed-control-disabled',
+ cd = self.getDimensions(),
+ flags = [ cd.shelfLeft > 0, cd.shelfLeft < cd.maxLeft ],
+ ctrls = [ self.$left, self.$right ];
+
+ $.each(ctrls, function(i, $e) {
+ flags[i] ? $e.removeClass(clazz) : $e.addClass(clazz);
+ });
+ },
+
+ updateScrollThumb: function() {
+ var self = this,
+ cd = self.getDimensions(),
+ left = cd.leftRatio * cd.pageWidth,
+ width = Math.min(cd.pageRatio * cd.pageWidth, cd.pageWidth);
+ self.$thumb.width(width).each(function() {
+ A.animate($(this), { left: left }, 0);
+ });
+ },
+
+ changePage: function (n) {
+ var self = this,
+ cd = self.getDimensions(),
+ target = self.alignWithItem(cd.shelfLeft + n * cd.pageWidth),
+ targetLeft = Math.min(n < 0 ? target.right : target.left, cd.maxLeft);
+
+ if (cd.shelfLeft == targetLeft) {
+ self.bounce(self.$shelf, -30 * n);
+ self.bounce(self.$thumb, 6 * n);
+ } else {
+ self.shelfLeft = targetLeft;
+ self.slide(self.$shelf, -targetLeft, function() {
+ self.updateArrows();
+ });
+ self.slide(self.$thumb, targetLeft / cd.shelfWidth * cd.pageWidth, function() {
+ self.updateScrollThumb();
+ });
+ }
+ },
+
+ moveShelf: function (targetLeft) {
+ var self = this;
+
+ self.shelfLeft = targetLeft;
+ A.animate(self.$shelf, { left: -targetLeft }, 0);
+ self.updateControls();
+ },
+
+ getItems: function() {
+ var self = this;
+ return self.$shelf.find('.feed-carousel-card');
+ },
+
+ size: function() {
+ var self = this;
+ return self.getItems().length;
+ },
+
+ alignWithItem: function(x) {
+ if(x < 0) {
+ return { left: 0, right: 0 };
+ }
+
+ var self = this,
+ $items = self.getItems(),
+ rv = $items.map(function() {
+ var pos = self.cardPosition($(this));
+ if(x >= pos.left && x <= pos.right) {
+ return pos;
+ }
+ }).get(0);
+
+ return rv ? rv : self.cardPosition($items.last());
+ },
+
+ cardPosition: function($e) {
+ var left = $e.position().left,
+ right = left + $e.outerWidth(true);
+
+ return { left: left, right: right };
+ },
+
+ slide: function($c, targetLeft, callback) {
+ var self = this,
+ speed = 400,
+ easing = 'cubic-bezier(0.455, 0.03, 0.515, 0.955)'; // easeInOutQuad
+
+ $c.each(function() {
+ var $e = $(this);
+ A.animate($e, { left: targetLeft }, speed, easing, callback);
+ });
+ },
+
+ bounce: function($c, x) {
+ var self = this,
+ speedIn = 400,
+ speedOut = 100,
+ easing = 'cubic-bezier(0.175, 0.885, 0.32, 1.275)'; // easeOutBack
+
+ $c.each(function() {
+ var $e = $(this);
+ A.animate($e, { marginLeft: x }, speedIn, easing, function() {
+ A.animate($e, { marginLeft: 0 }, speedOut);
+ });
+ });
+ }
+ };
+
+ $("#" + "asin-shoveler-ns_1SDHZQ8T99ARS8TVH2PD_15737_" + " .feed-carousel").each(function(i, e) {
+ var $e = $(e);
+ new Carousel($e);
+ });
+ });
+</script>
+
+
+
+<script type="text/javascript">
+ P.when('A').execute(function(A) {
+ var $ = A.$;
+
+ var bilh = function(e, n) {
+ $(e).show().one('load error', function() {
+ $(n).trigger('sload');
+ }).each(function() { if(e.complete) $(e).trigger('load'); });
+ };
+
+ var imgs = $("#" + "asin-shoveler-ns_1SDHZQ8T99ARS8TVH2PD_15737_" + " " +
+ "." + "product-image");
+ for(var i = 2, len = imgs.length; i < len; i++) {
+ (function(c, n) {
+ $(c).one('sload', function() {
+ bilh(this, n);
+ });
+ })(imgs[i - 1], imgs[i]);
+ }
+
+ bilh(imgs[0], imgs[1]);
+ });
+
+</script>
+
+
+<script type="text/javascript">
+P.when("A", "cf").execute(function(A){
+ A.loadDescendantImagesManually(A.$("#asin-shoveler-ns_1SDHZQ8T99ARS8TVH2PD_15737_"));
+});
+</script>
+
+
+ <script type="text/javascript">
+ P.when("gw-productdb").execute(function(pdb) {
+ pdb._add({"p":[{"nodeId":null,"byline":"LORAC","reviews":{"url":"/product-reviews/B008XNJXXQ/ref=s9_al_gw_g510_i1?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop","numberOfRatings":401,"hoverText":"4.8 out of 5 stars","auiStarClass":"a-star-5"},"url":"/gp/product/B008XNJXXQ/ref=s9_al_gw_g510_i1?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B008XNJXXQ","title":"LORAC PRO Palette","price":"$42.00"},{"nodeId":null,"byline":"Burt's Bees","reviews":{"url":"/product-reviews/B008HBMQU6/ref=s9_al_gw_g121_i2?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop","numberOfRatings":44,"hoverText":"4.5 out of 5 stars","auiStarClass":"a-star-4-5"},"url":"/gp/product/B008HBMQU6/ref=s9_al_gw_g121_i2?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B008HBMQU6","title":"Burt's Bees Baby Bee Sweet Memories Gift Set with Keepsake Photo Box","price":"$19.97"},{"nodeId":null,"byline":"Nivea","reviews":{"url":"/product-reviews/B00N75NI7W/ref=s9_al_gw_g194_i3?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop","numberOfRatings":35,"hoverText":"4.2 out of 5 stars","auiStarClass":"a-star-4"},"url":"/gp/product/B00N75NI7W/ref=s9_al_gw_g194_i3?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop","prime":null,"asin":"B00N75NI7W","title":"Nivea Body Smooth Skincare Gift Set","price":"$9.00"},{"nodeId":null,"byline":"LORAC","reviews":{"url":"/product-reviews/B00M32Q42G/ref=s9_al_gw_g510_i4?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop","numberOfRatings":21,"hoverText":"4.9 out of 5 stars","auiStarClass":"a-star-5"},"url":"/gp/product/B00M32Q42G/ref=s9_al_gw_g510_i4?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00M32Q42G","title":"LORAC The Royal Lip Lustre Creme Set","price":"$25.00"},{"nodeId":null,"byline":"Panasonic","reviews":{"url":"/product-reviews/B001DNE3KQ/ref=s9_al_gw_g364_i5?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop","numberOfRatings":2495,"hoverText":"4.2 out of 5 stars","auiStarClass":"a-star-4"},"url":"/gp/product/B001DNE3KQ/ref=s9_al_gw_g364_i5?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B001DNE3KQ","title":"Panasonic ES8103S Arc3 Electric Shaver Wet/Dry with Nanotech Blades for Men","price":"$77.52"},{"nodeId":null,"byline":"Lolita Lempicka","reviews":{"url":"/product-reviews/B004PJ1LDW/ref=s9_al_gw_g510_i6?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop","numberOfRatings":122,"hoverText":"4.6 out of 5 stars","auiStarClass":"a-star-4-5"},"url":"/gp/product/B004PJ1LDW/ref=s9_al_gw_g510_i6?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B004PJ1LDW","title":"Lolita Lempicka Eau de Parfum Spray, 3.4 fl. oz.","price":"$105.00"},{"nodeId":null,"byline":"Philips","reviews":{"url":"/product-reviews/B00FS2N3FE/ref=s9_al_gw_g364_i7?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop","numberOfRatings":1078,"hoverText":"4.5 out of 5 stars","auiStarClass":"a-star-4-5"},"url":"/gp/product/B00FS2N3FE/ref=s9_al_gw_g364_i7?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00FS2N3FE","title":"Philips Sonicare HX9352/04 DiamondClean Rechargeable Electric Toothbrush, Black","price":"$189.95"},{"nodeId":null,"byline":"Jack Black","reviews":{"url":"/product-reviews/B000SX31VY/ref=s9_al_gw_g510_i8?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop","numberOfRatings":15,"hoverText":"4.6 out of 5 stars","auiStarClass":"a-star-4-5"},"url":"/gp/product/B000SX31VY/ref=s9_al_gw_g510_i8?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B000SX31VY","title":"Jack Black Core Collection","price":"$52.00"},{"nodeId":null,"byline":"Fitbit","reviews":{"url":"/product-reviews/B00BGO0Q9O/ref=s9_al_gw_g364_i9?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop","numberOfRatings":8686,"hoverText":"3.7 out of 5 stars","auiStarClass":"a-star-3-5"},"url":"/gp/product/B00BGO0Q9O/ref=s9_al_gw_g364_i9?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00BGO0Q9O","title":"Fitbit Flex Wireless Activity + Sleep Wristband, Black","price":"$94.95"},{"nodeId":null,"byline":"Panasonic","reviews":{"url":"/product-reviews/B002N5MHLU/ref=s9_al_gw_g364_i10?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop","numberOfRatings":1184,"hoverText":"4.4 out of 5 stars","auiStarClass":"a-star-4-5"},"url":"/gp/product/B002N5MHLU/ref=s9_al_gw_g364_i10?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B002N5MHLU","title":"Panasonic ES-LA63-S Arc4 Electric Shaver Wet/Dry with Multi-Flex Pivoting Head for Men","price":"$129.99"},{"nodeId":null,"byline":"MARC JACOBS","reviews":{"url":"/product-reviews/B0012RV5UO/ref=s9_al_gw_g194_i11?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop","numberOfRatings":142,"hoverText":"4.6 out of 5 stars","auiStarClass":"a-star-4-5"},"url":"/gp/product/B0012RV5UO/ref=s9_al_gw_g194_i11?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B0012RV5UO","title":"Marc Jacobs Daisy by Marc Jacobs 3.4oz 100ml EDT Spray","price":"$51.96"},{"nodeId":null,"byline":"Baxter of California","reviews":{"url":"/product-reviews/B007Y4EKNS/ref=s9_al_gw_g510_i12?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop","numberOfRatings":25,"hoverText":"4.2 out of 5 stars","auiStarClass":"a-star-4"},"url":"/gp/product/B007Y4EKNS/ref=s9_al_gw_g510_i12?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B007Y4EKNS","title":"Baxter of California Scented Candle, White Wood Number Three","price":"$55.00"},{"nodeId":null,"byline":"butter LONDON","reviews":{"url":"/product-reviews/B00DQZ6PCS/ref=s9_al_gw_g194_i13?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop","numberOfRatings":11,"hoverText":"4.1 out of 5 stars","auiStarClass":"a-star-4"},"url":"/gp/product/B00DQZ6PCS/ref=s9_al_gw_g194_i13?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978488602&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00DQZ6PCS","title":"butter LONDON Ice Lacquer and Overcoat Duo","price":"$23.47"}]});
+ });
+ </script>
+
+
+
+ </div>
+ <hr class='slot-hr desktop-4-hr' />
+
+
+
+ <div class="billboardRowWrapper">
+ <div class="a-row billboardRow">
+ <div class="a-column a-span6">
+
+ <div class='billboard' id='desktop-billboard-3'>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div id="scalable-image-map_scalable-image-map-ns_140VBH5DV633V6N07NMS_4522_" class="a-section a-text-center shogun-widget scalable-image-map aui-desktop-link">
+ <a class="a-link-normal" href="/b/ref=br_imp?_encoding=UTF8&node=2350149011&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-billboard-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1976490162&pf_rd_i=desktop"><img alt="Free App of the Day" src="http://g-ecx.images-amazon.com/images/G/01/Gateway/Billboards/FADEvergreen._UX440_SX440_V320303992_.png" class="a-dynamic-image" height="100%" width="440px" data-a-dynamic-image="{&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Billboards/FADEvergreen._V320303992_.png&quot;:[600,1320],&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Billboards/FADEvergreen._UX660_SX660_V320303992_.png&quot;:[300,660],&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Billboards/FADEvergreen._UX880_SX880_V320303992_.png&quot;:[400,880],&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Billboards/FADEvergreen._UX440_SX440_V320303992_.png&quot;:[200,440]}"></a>
+</div>
+
+ </div>
+
+ </div>
+ <div class="a-column a-span6 a-span-last">
+
+ <div class='billboard' id='desktop-billboard-4'>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div id="scalable-image-map_scalable-image-map-ns_1VT375ZC33V57A7NX3CV_17734_" class="a-section a-text-center shogun-widget scalable-image-map aui-desktop-link">
+ <a class="a-link-normal" href="/dp/B00PR9PUB8/ref=dm_aib_gw_bb?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-billboard-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1977632522&pf_rd_i=desktop"><img alt="All Is Bright" src="http://g-ecx.images-amazon.com/images/G/01/digital/music/merch/holiday2014/AllIsBright/AIB_110314_1320X600_HD_v2._UX440_SX440_V319829468_.jpg" class="a-dynamic-image" height="100%" width="440px" data-a-dynamic-image="{&quot;http://g-ecx.images-amazon.com/images/G/01/digital/music/merch/holiday2014/AllIsBright/AIB_110314_1320X600_HD_v2._UX440_SX440_V319829468_.jpg&quot;:[200,440],&quot;http://g-ecx.images-amazon.com/images/G/01/digital/music/merch/holiday2014/AllIsBright/AIB_110314_1320X600_HD_v2._UX660_SX660_V319829468_.jpg&quot;:[300,660],&quot;http://g-ecx.images-amazon.com/images/G/01/digital/music/merch/holiday2014/AllIsBright/AIB_110314_1320X600_HD_v2._V319829468_.jpg&quot;:[600,1320],&quot;http://g-ecx.images-amazon.com/images/G/01/digital/music/merch/holiday2014/AllIsBright/AIB_110314_1320X600_HD_v2._UX880_SX880_V319829468_.jpg&quot;:[400,880]}"></a>
+</div>
+
+ </div>
+
+ </div>
+ </div>
+ </div>
+ <hr class="billboardrow-hr" />
+
+
+ <div class='desktop-row' id='desktop-5'>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div id="asin-shoveler-ns_1Y7MBFB6RGEG0MX1HZ5X_18468_" class="a-section a-spacing-none shogun-widget asin-shoveler aui-desktop fresh-shoveler">
+
+
+<div class="a-section as-title-block">
+ <span class="as-title-block-left">
+ <span class="a-color-base">
+ Gift Ideas from the Home Gift Guide
+ </span>
+ </span>
+ <span class="as-title-block-right">
+ <a class="a-link-normal" href="/b/ref=br_asw_smr?_encoding=UTF8&node=10044414011&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop">
+ See more
+</a>
+ </span>
+</div>
+
+
+
+
+
+
+<div class="a-section feed-carousel">
+ <ul class="a-nostyle a-horizontal feed-carousel-shelf">
+
+
+
+<li data-sghover="{&quot;asin&quot;:&quot;B00JBKVN8S&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00JBKVN8S/ref=s9_al_gw_g201_i1?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop"><img alt="Brother XM2701 Lightweight, Full-Featured Sewing Machine with 27 Stitches, 1-Step Auto-Size Buttonholer, 6 Sewing Feet, and Instructional DVD" src="http://ecx.images-amazon.com/images/I/41BaaoUCz3L._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Brother XM2701 Lightweight, Full-Featured Sewing Machine with 27 Stitches, 1-Step Auto-Size Buttonholer, 6 Sewing Feet, and Instructional DVD" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41BaaoUCz3L._AC_SY440_.jpg&quot;:[440,440],&quot;http://ecx.images-amazon.com/images/I/41BaaoUCz3L._AC_SY220_.jpg&quot;:[220,220],&quot;http://ecx.images-amazon.com/images/I/41BaaoUCz3L._AC_SY660_.jpg&quot;:[500,500],&quot;http://ecx.images-amazon.com/images/I/41BaaoUCz3L._AC_SY330_.jpg&quot;:[330,330]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00IO9PBPS&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00IO9PBPS/ref=s9_al_gw_g201_i2?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop"><img alt="iRobot Roomba 880 Vacuum Cleaning Robot For Pets and Allergies" src="http://ecx.images-amazon.com/images/I/41ia0ytRwZL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="iRobot Roomba 880 Vacuum Cleaning Robot For Pets and Allergies" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41ia0ytRwZL._AC_SY440_.jpg&quot;:[440,488],&quot;http://ecx.images-amazon.com/images/I/41ia0ytRwZL._AC_SY660_.jpg&quot;:[451,500],&quot;http://ecx.images-amazon.com/images/I/41ia0ytRwZL._AC_SY220_.jpg&quot;:[220,244],&quot;http://ecx.images-amazon.com/images/I/41ia0ytRwZL._AC_SY330_.jpg&quot;:[330,366]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00005UP2P&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00005UP2P/ref=s9_al_gw_g79_i3?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop"><img alt="KitchenAid KSM150PSER 5-Qt. Artisan Series with Pouring Shield - Empire Red" src="http://ecx.images-amazon.com/images/I/51WFtb%2BbDAL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="KitchenAid KSM150PSER 5-Qt. Artisan Series with Pouring Shield - Empire Red" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51WFtb%2BbDAL._AC_SY220_.jpg&quot;:[220,226],&quot;http://ecx.images-amazon.com/images/I/51WFtb%2BbDAL._AC_SY660_.jpg&quot;:[487,500],&quot;http://ecx.images-amazon.com/images/I/51WFtb%2BbDAL._AC_SY440_.jpg&quot;:[440,452],&quot;http://ecx.images-amazon.com/images/I/51WFtb%2BbDAL._AC_SY330_.jpg&quot;:[330,339]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B0015MG9P2&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B0015MG9P2/ref=s9_al_gw_g86_i4?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop"><img alt="Miracle-Gro AeroGarden 3-Pod Indoor Garden with Gourmet Herb Seed Kit, Black" src="http://ecx.images-amazon.com/images/I/510ETaNb1dL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Miracle-Gro AeroGarden 3-Pod Indoor Garden with Gourmet Herb Seed Kit, Black" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/510ETaNb1dL._AC_SY440_.jpg&quot;:[440,440],&quot;http://ecx.images-amazon.com/images/I/510ETaNb1dL._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/510ETaNb1dL._AC_SY220_.jpg&quot;:[220,220],&quot;http://ecx.images-amazon.com/images/I/510ETaNb1dL._AC_SY660_.jpg&quot;:[500,500]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00KR5UJN6&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00KR5UJN6/ref=s9_al_gw_g201_i5?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop"><img alt="Bissell 1132A Symphony All-in-One Vacuum and Steam Mop (4 Mop Pads Included)" src="http://ecx.images-amazon.com/images/I/319vPJRp8sL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Bissell 1132A Symphony All-in-One Vacuum and Steam Mop (4 Mop Pads Included)" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/319vPJRp8sL._AC_SY660_.jpg&quot;:[500,187],&quot;http://ecx.images-amazon.com/images/I/319vPJRp8sL._AC_SY220_.jpg&quot;:[220,82],&quot;http://ecx.images-amazon.com/images/I/319vPJRp8sL._AC_SY330_.jpg&quot;:[330,123],&quot;http://ecx.images-amazon.com/images/I/319vPJRp8sL._AC_SY440_.jpg&quot;:[440,165]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00AEUK9PW&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00AEUK9PW/ref=s9_al_gw_g201_i6?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop"><img alt="Altra Furniture Carson Coffee Table" src="http://ecx.images-amazon.com/images/I/413dHDRs6SL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Altra Furniture Carson Coffee Table" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/413dHDRs6SL._AC_SY440_.jpg&quot;:[235,500],&quot;http://ecx.images-amazon.com/images/I/413dHDRs6SL._AC_SY330_.jpg&quot;:[235,500],&quot;http://ecx.images-amazon.com/images/I/413dHDRs6SL._AC_SY660_.jpg&quot;:[235,500],&quot;http://ecx.images-amazon.com/images/I/413dHDRs6SL._AC_SY220_.jpg&quot;:[220,468]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00FLYWNYQ&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00FLYWNYQ/ref=s9_al_gw_g79_i7?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop"><img alt="Instant Pot IP-DUO60 7-in-1 Programmable Pressure Cooker with Stainless Steel Cooking Pot and Exterior, 6-Quart/1000-watt, Latest 3rd Generation Technology" src="http://ecx.images-amazon.com/images/I/510HIekZWpL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Instant Pot IP-DUO60 7-in-1 Programmable Pressure Cooker with Stainless Steel Cooking Pot and Exterior, 6-Quart/1000-watt, Latest 3rd Generation Technology" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/510HIekZWpL._AC_SY660_.jpg&quot;:[497,500],&quot;http://ecx.images-amazon.com/images/I/510HIekZWpL._AC_SY440_.jpg&quot;:[440,443],&quot;http://ecx.images-amazon.com/images/I/510HIekZWpL._AC_SY220_.jpg&quot;:[220,221],&quot;http://ecx.images-amazon.com/images/I/510HIekZWpL._AC_SY330_.jpg&quot;:[330,332]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B0099P87Z2&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B0099P87Z2/ref=s9_al_gw_g79_i8?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop"><img alt="Chicago Cutlery Belmont 16-Piece Block Knife Set" src="http://ecx.images-amazon.com/images/I/419chpaqTEL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Chicago Cutlery Belmont 16-Piece Block Knife Set" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/419chpaqTEL._AC_SY220_.jpg&quot;:[220,220],&quot;http://ecx.images-amazon.com/images/I/419chpaqTEL._AC_SY660_.jpg&quot;:[500,500],&quot;http://ecx.images-amazon.com/images/I/419chpaqTEL._AC_SY440_.jpg&quot;:[440,440],&quot;http://ecx.images-amazon.com/images/I/419chpaqTEL._AC_SY330_.jpg&quot;:[330,330]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00EXOZGVC&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00EXOZGVC/ref=s9_al_gw_g79_i9?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop"><img alt="BELLA 13839 Dots Collection 12-Cup Programmable Coffee Maker, Red" src="http://ecx.images-amazon.com/images/I/51jkoFrPB%2BL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="BELLA 13839 Dots Collection 12-Cup Programmable Coffee Maker, Red" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51jkoFrPB%2BL._AC_SY660_.jpg&quot;:[500,500],&quot;http://ecx.images-amazon.com/images/I/51jkoFrPB%2BL._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/51jkoFrPB%2BL._AC_SY440_.jpg&quot;:[440,440],&quot;http://ecx.images-amazon.com/images/I/51jkoFrPB%2BL._AC_SY220_.jpg&quot;:[220,220]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00CJAU0E0&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00CJAU0E0/ref=s9_al_gw_g79_i10?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop"><img alt="Rachael Ray Porcelain Enamel II Nonstick 12-Piece Cookware Set, Red Gradient" src="http://ecx.images-amazon.com/images/I/51TFN%2Bd3q5L._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Rachael Ray Porcelain Enamel II Nonstick 12-Piece Cookware Set, Red Gradient" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51TFN%2Bd3q5L._AC_SY220_.jpg&quot;:[220,220],&quot;http://ecx.images-amazon.com/images/I/51TFN%2Bd3q5L._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/51TFN%2Bd3q5L._AC_SY440_.jpg&quot;:[440,440],&quot;http://ecx.images-amazon.com/images/I/51TFN%2Bd3q5L._AC_SY660_.jpg&quot;:[500,500]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00BWKN0HC&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00BWKN0HC/ref=s9_al_gw_g86_i11?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop"><img alt="Masterbuilt 23011114 Butterball Indoor Gen III Electric Fryer Cooker Extra Large Capacity" src="http://ecx.images-amazon.com/images/I/41welZMmt-L._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Masterbuilt 23011114 Butterball Indoor Gen III Electric Fryer Cooker Extra Large Capacity" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41welZMmt-L._AC_SY440_.jpg&quot;:[440,490],&quot;http://ecx.images-amazon.com/images/I/41welZMmt-L._AC_SY330_.jpg&quot;:[330,367],&quot;http://ecx.images-amazon.com/images/I/41welZMmt-L._AC_SY220_.jpg&quot;:[220,245],&quot;http://ecx.images-amazon.com/images/I/41welZMmt-L._AC_SY660_.jpg&quot;:[449,500]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00MGHG2TS&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00MGHG2TS/ref=s9_al_gw_g86_i12?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop"><img alt="Cuisinart CPO-600 Alfrescamore Portable Outdoor Pizza Oven" src="http://ecx.images-amazon.com/images/I/41wjQlfasuL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Cuisinart CPO-600 Alfrescamore Portable Outdoor Pizza Oven" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41wjQlfasuL._AC_SY330_.jpg&quot;:[330,470],&quot;http://ecx.images-amazon.com/images/I/41wjQlfasuL._AC_SY660_.jpg&quot;:[351,500],&quot;http://ecx.images-amazon.com/images/I/41wjQlfasuL._AC_SY440_.jpg&quot;:[351,500],&quot;http://ecx.images-amazon.com/images/I/41wjQlfasuL._AC_SY220_.jpg&quot;:[220,313]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B001I8ZTJ0&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B001I8ZTJ0/ref=s9_al_gw_g86_i13?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop"><img alt="Weber 721001 Smokey Mountain Cooker 18-1/2-Inch Charcoal Smoker, Black" src="http://ecx.images-amazon.com/images/I/41-rED8HfFL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Weber 721001 Smokey Mountain Cooker 18-1/2-Inch Charcoal Smoker, Black" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41-rED8HfFL._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/41-rED8HfFL._AC_SY440_.jpg&quot;:[440,440],&quot;http://ecx.images-amazon.com/images/I/41-rED8HfFL._AC_SY220_.jpg&quot;:[220,220],&quot;http://ecx.images-amazon.com/images/I/41-rED8HfFL._AC_SY660_.jpg&quot;:[500,500]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B0098HR0PY&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B0098HR0PY/ref=s9_al_gw_g86_i14?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop"><img alt="Weber 46110001 Spirit E210 Liquid Propane Gas Grill, Black" src="http://ecx.images-amazon.com/images/I/41mVE827EEL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Weber 46110001 Spirit E210 Liquid Propane Gas Grill, Black" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41mVE827EEL._AC_SY660_.jpg&quot;:[500,500],&quot;http://ecx.images-amazon.com/images/I/41mVE827EEL._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/41mVE827EEL._AC_SY220_.jpg&quot;:[220,220],&quot;http://ecx.images-amazon.com/images/I/41mVE827EEL._AC_SY440_.jpg&quot;:[440,440]}"></a></span></li>
+
+
+ </ul>
+ <div class="spinner"><img src="http://g-ecx.images-amazon.com/images/G/01/amazonui/loading/loading-4x._V391853216_.gif" border="0" /></div>
+
+ <a class="feed-carousel-control feed-left" href="#"><span class="gw-icon feed-arrow"></span></a>
+ <a class="feed-carousel-control feed-right" href="#"><span class="gw-icon feed-arrow"></span></a>
+ <span class="feed-scrollbar">
+ <span class="feed-scrollbar-track"><span class="feed-scrollbar-thumb"></span></span>
+ </span>
+</div>
+
+</div>
+
+
+
+<script type="text/javascript">
+
+ P.when('A').execute(function(A) {
+ var $ = A.$;
+
+ var Carousel = function ($carousel) {
+ var self = this;
+
+ this.init($carousel);
+ };
+
+ Carousel.prototype = {
+ init: function ($carousel) {
+ var self = this;
+
+ if (A.capabilities.touch) {
+ $carousel.addClass('feed-carousel-touch');
+ }
+
+ self.minItems = 10;
+
+ self.$carousel = $carousel;
+ self.$shelf = self.$carousel.find('.feed-carousel-shelf');
+ self.$spinner = self.$carousel.find('.spinner');
+ self.$left = $('.feed-carousel-control.feed-left', $carousel);
+ self.$right = $('.feed-carousel-control.feed-right', $carousel);
+ self.$buttons = $('.feed-carousel-control', $carousel);
+ self.$thumb = $('.feed-scrollbar-thumb', $carousel);
+ self.shelfLeft = -1 * parseInt(self.$shelf.css('left'), 10);
+ self.calcWidth = $('html').hasClass('a-lt-ie9');
+
+ self.bindEvents();
+ self.$carousel.data("Carousel", self);
+
+ self.$carousel.trigger('change');
+ },
+
+ bindEvents: function () {
+ var self = this,
+ $body = $('body');
+
+ self.$carousel.change(function(e) {
+ self.updateSpinner();
+ self.updateShelfWidth();
+ self.updateControls();
+ });
+
+ self.$left.click(function(e) {
+ e.preventDefault();
+ self.changePage(-1);
+ });
+
+ self.$right.click(function(e) {
+ e.preventDefault();
+ self.changePage(+1);
+ });
+
+ $('.product-image', self.$shelf).one('sload', function() {
+ self.$carousel.trigger('change');
+ });
+
+ $(window).resize(function() {
+ self.changePage(0);
+ self.updateControls();
+ });
+
+ self.$thumb.mousedown(function(e) {
+ var lastX = e.clientX;
+
+ if (e.which !== 1) return;
+
+ e.preventDefault();
+
+ self.$carousel.addClass('scrolling');
+
+ $body.bind("mousemove.feed-carousel",function(e) {
+ var cd = self.getDimensions(),
+ mouseDistance = e.clientX - lastX,
+ shelfDistance = 1 / cd.pageRatio * mouseDistance,
+ targetLeft = Math.max(Math.min(cd.shelfLeft + shelfDistance, cd.maxLeft), 0);
+
+ lastX = e.clientX;
+ self.moveShelf(targetLeft);
+ });
+ $(document).bind("selectstart.feed-carousel", function() { return false; });
+ });
+
+ $body.mouseup(function() {
+ self.$carousel.removeClass('scrolling');
+ if(!self.$carousel.hasClass('hovering')) {
+ self.hideControls();
+ }
+ $body.unbind("mousemove.feed-carousel");
+ $(document).unbind("selectstart.feed-carousel");
+ });
+
+ self.$carousel.hover(
+ function() {
+ self.$carousel.addClass('hovering');
+ clearTimeout(self.hoverTimer);
+ self.hoverTimer = setTimeout(function(){
+ if(self.$carousel.hasClass('hovering')){
+ self.showControls();
+ }
+ }, 300);
+ },
+ function() {
+ self.$carousel.removeClass('hovering');
+ clearTimeout(self.hoverTimer);
+ if(!self.$carousel.hasClass('scrolling')) {
+ self.hoverTimer = setTimeout(function(){
+ if(!self.$carousel.hasClass('hovering')) {
+ self.hideControls();
+ }
+ }, 600);
+ }
+ }
+ );
+ },
+
+ getDimensions: function() {
+ var self = this,
+ shelfWidth = self.$shelf.width(),
+ shelfLeft = self.shelfLeft,
+ pageWidth = self.$carousel.width();
+
+ return {
+ pageWidth: pageWidth,
+ shelfWidth: shelfWidth,
+ shelfLeft: shelfLeft,
+ pageRatio: pageWidth / shelfWidth,
+ leftRatio: shelfLeft / shelfWidth,
+ maxLeft: shelfWidth - pageWidth
+ };
+ },
+
+ updateShelfWidth: function() {
+ var self = this,
+ w = 0;
+
+ if(!self.calcWidth) {
+ return;
+ }
+
+ self.$shelf.children().each(function() { w += $(this).outerWidth(true); });
+ self.$shelf.width(w);
+ },
+
+ updateSpinner: function() {
+ var self = this;
+ if(self.size() < self.minItems) {
+ self.$spinner.show();
+ } else {
+ self.$spinner.hide();
+ }
+ },
+
+ updateControls: function() {
+ var self = this;
+ self.updateArrows();
+ self.updateScrollThumb();
+ },
+
+ showControls: function(complete) {
+ var self = this,
+ $controls = self.$thumb.add(self.$buttons);
+
+ $controls.stop(true, true).fadeIn({
+ duration: 300,
+ complete: complete,
+ queue: false
+ });
+ },
+
+ hideControls: function(complete) {
+ var self = this;
+ $controls = self.$thumb;
+
+ if(!self.$carousel.hasClass('first-carousel')) {
+ $controls = $controls.add(self.$buttons);
+ }
+
+ $controls.stop(true, true).fadeOut({
+ duration: 300,
+ complete: complete,
+ queue: false
+ });
+ },
+
+ appendCards: function(cards) {
+ var self = this;
+
+ self.$shelf.append(cards);
+ self.$carousel.trigger("change");
+ },
+
+ updateArrows: function() {
+ var self = this,
+ clazz = 'feed-control-disabled',
+ cd = self.getDimensions(),
+ flags = [ cd.shelfLeft > 0, cd.shelfLeft < cd.maxLeft ],
+ ctrls = [ self.$left, self.$right ];
+
+ $.each(ctrls, function(i, $e) {
+ flags[i] ? $e.removeClass(clazz) : $e.addClass(clazz);
+ });
+ },
+
+ updateScrollThumb: function() {
+ var self = this,
+ cd = self.getDimensions(),
+ left = cd.leftRatio * cd.pageWidth,
+ width = Math.min(cd.pageRatio * cd.pageWidth, cd.pageWidth);
+ self.$thumb.width(width).each(function() {
+ A.animate($(this), { left: left }, 0);
+ });
+ },
+
+ changePage: function (n) {
+ var self = this,
+ cd = self.getDimensions(),
+ target = self.alignWithItem(cd.shelfLeft + n * cd.pageWidth),
+ targetLeft = Math.min(n < 0 ? target.right : target.left, cd.maxLeft);
+
+ if (cd.shelfLeft == targetLeft) {
+ self.bounce(self.$shelf, -30 * n);
+ self.bounce(self.$thumb, 6 * n);
+ } else {
+ self.shelfLeft = targetLeft;
+ self.slide(self.$shelf, -targetLeft, function() {
+ self.updateArrows();
+ });
+ self.slide(self.$thumb, targetLeft / cd.shelfWidth * cd.pageWidth, function() {
+ self.updateScrollThumb();
+ });
+ }
+ },
+
+ moveShelf: function (targetLeft) {
+ var self = this;
+
+ self.shelfLeft = targetLeft;
+ A.animate(self.$shelf, { left: -targetLeft }, 0);
+ self.updateControls();
+ },
+
+ getItems: function() {
+ var self = this;
+ return self.$shelf.find('.feed-carousel-card');
+ },
+
+ size: function() {
+ var self = this;
+ return self.getItems().length;
+ },
+
+ alignWithItem: function(x) {
+ if(x < 0) {
+ return { left: 0, right: 0 };
+ }
+
+ var self = this,
+ $items = self.getItems(),
+ rv = $items.map(function() {
+ var pos = self.cardPosition($(this));
+ if(x >= pos.left && x <= pos.right) {
+ return pos;
+ }
+ }).get(0);
+
+ return rv ? rv : self.cardPosition($items.last());
+ },
+
+ cardPosition: function($e) {
+ var left = $e.position().left,
+ right = left + $e.outerWidth(true);
+
+ return { left: left, right: right };
+ },
+
+ slide: function($c, targetLeft, callback) {
+ var self = this,
+ speed = 400,
+ easing = 'cubic-bezier(0.455, 0.03, 0.515, 0.955)'; // easeInOutQuad
+
+ $c.each(function() {
+ var $e = $(this);
+ A.animate($e, { left: targetLeft }, speed, easing, callback);
+ });
+ },
+
+ bounce: function($c, x) {
+ var self = this,
+ speedIn = 400,
+ speedOut = 100,
+ easing = 'cubic-bezier(0.175, 0.885, 0.32, 1.275)'; // easeOutBack
+
+ $c.each(function() {
+ var $e = $(this);
+ A.animate($e, { marginLeft: x }, speedIn, easing, function() {
+ A.animate($e, { marginLeft: 0 }, speedOut);
+ });
+ });
+ }
+ };
+
+ $("#" + "asin-shoveler-ns_1Y7MBFB6RGEG0MX1HZ5X_18468_" + " .feed-carousel").each(function(i, e) {
+ var $e = $(e);
+ new Carousel($e);
+ });
+ });
+</script>
+
+
+
+<script type="text/javascript">
+ P.when('A').execute(function(A) {
+ var $ = A.$;
+
+ var bilh = function(e, n) {
+ $(e).show().one('load error', function() {
+ $(n).trigger('sload');
+ }).each(function() { if(e.complete) $(e).trigger('load'); });
+ };
+
+ var imgs = $("#" + "asin-shoveler-ns_1Y7MBFB6RGEG0MX1HZ5X_18468_" + " " +
+ "." + "product-image");
+ for(var i = 2, len = imgs.length; i < len; i++) {
+ (function(c, n) {
+ $(c).one('sload', function() {
+ bilh(this, n);
+ });
+ })(imgs[i - 1], imgs[i]);
+ }
+
+ bilh(imgs[0], imgs[1]);
+ });
+
+</script>
+
+
+<script type="text/javascript">
+P.when("A", "cf").execute(function(A){
+ A.loadDescendantImagesManually(A.$("#asin-shoveler-ns_1Y7MBFB6RGEG0MX1HZ5X_18468_"));
+});
+</script>
+
+
+ <script type="text/javascript">
+ P.when("gw-productdb").execute(function(pdb) {
+ pdb._add({"p":[{"nodeId":null,"byline":"Brother","reviews":{"url":"/product-reviews/B00JBKVN8S/ref=s9_al_gw_g201_i1?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","numberOfRatings":60,"hoverText":"4.5 out of 5 stars","auiStarClass":"a-star-4-5"},"url":"/gp/product/B00JBKVN8S/ref=s9_al_gw_g201_i1?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00JBKVN8S","title":"Brother XM2701 Lightweight, Full-Featured Sewing Machine with 27 Stitches, 1-Step Auto-Size Buttonholer, 6 Sewing Feet, and Instructional DVD","price":"$89.99"},{"nodeId":null,"byline":"iRobot","reviews":{"url":"/product-reviews/B00IO9PBPS/ref=s9_al_gw_g201_i2?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","numberOfRatings":325,"hoverText":"4.5 out of 5 stars","auiStarClass":"a-star-4-5"},"url":"/gp/product/B00IO9PBPS/ref=s9_al_gw_g201_i2?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00IO9PBPS","title":"iRobot Roomba 880 Vacuum Cleaning Robot For Pets and Allergies","price":"$699.99"},{"nodeId":null,"byline":"KitchenAid","reviews":{"url":"/product-reviews/B00005UP2P/ref=s9_al_gw_g79_i3?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","numberOfRatings":3593,"hoverText":"4.7 out of 5 stars","auiStarClass":"a-star-4-5"},"url":"/gp/product/B00005UP2P/ref=s9_al_gw_g79_i3?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00005UP2P","title":"KitchenAid KSM150PSER 5-Qt. Artisan Series with Pouring Shield - Empire Red","price":"\n Click to see price\n"},{"nodeId":null,"byline":"AeroGrow","reviews":{"url":"/product-reviews/B0015MG9P2/ref=s9_al_gw_g86_i4?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","numberOfRatings":170,"hoverText":"3.3 out of 5 stars","auiStarClass":"a-star-3-5"},"url":"/gp/product/B0015MG9P2/ref=s9_al_gw_g86_i4?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B0015MG9P2","title":"Miracle-Gro AeroGarden 3-Pod Indoor Garden with Gourmet Herb Seed Kit, Black","price":"$74.90"},{"nodeId":null,"byline":"Bissell","reviews":{"url":"/product-reviews/B00KR5UJN6/ref=s9_al_gw_g201_i5?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","numberOfRatings":110,"hoverText":"4.3 out of 5 stars","auiStarClass":"a-star-4"},"url":"/gp/product/B00KR5UJN6/ref=s9_al_gw_g201_i5?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00KR5UJN6","title":"Bissell 1132A Symphony All-in-One Vacuum and Steam Mop (4 Mop Pads Included)","price":"$179.99"},{"nodeId":null,"byline":"Altra Furniture","reviews":{"url":"/product-reviews/B00AEUK9PW/ref=s9_al_gw_g201_i6?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","numberOfRatings":15,"hoverText":"4.0 out of 5 stars","auiStarClass":"a-star-4"},"url":"/gp/product/B00AEUK9PW/ref=s9_al_gw_g201_i6?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00AEUK9PW","title":"Altra Furniture Carson Coffee Table","price":"$97.24"},{"nodeId":null,"byline":"Instant Pot","reviews":{"url":"/product-reviews/B00FLYWNYQ/ref=s9_al_gw_g79_i7?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","numberOfRatings":792,"hoverText":"4.7 out of 5 stars","auiStarClass":"a-star-4-5"},"url":"/gp/product/B00FLYWNYQ/ref=s9_al_gw_g79_i7?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00FLYWNYQ","title":"Instant Pot IP-DUO60 7-in-1 Programmable Pressure Cooker with Stainless Steel Cooking Pot and Exterior, 6-Quart/1000-watt, Latest 3rd Generation Technology","price":"$134.95"},{"nodeId":null,"byline":"Chicago Cutlery","reviews":{"url":"/product-reviews/B0099P87Z2/ref=s9_al_gw_g79_i8?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","numberOfRatings":126,"hoverText":"4.3 out of 5 stars","auiStarClass":"a-star-4-5"},"url":"/gp/product/B0099P87Z2/ref=s9_al_gw_g79_i8?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B0099P87Z2","title":"Chicago Cutlery Belmont 16-Piece Block Knife Set","price":"$55.00"},{"nodeId":null,"byline":"BELLA","reviews":{"url":"/product-reviews/B00EXOZGVC/ref=s9_al_gw_g79_i9?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","numberOfRatings":278,"hoverText":"4.0 out of 5 stars","auiStarClass":"a-star-4"},"url":"/gp/product/B00EXOZGVC/ref=s9_al_gw_g79_i9?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00EXOZGVC","title":"BELLA 13839 Dots Collection 12-Cup Programmable Coffee Maker, Red","price":"$39.99"},{"nodeId":null,"byline":"Rachael Ray","reviews":{"url":"/product-reviews/B00CJAU0E0/ref=s9_al_gw_g79_i10?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","numberOfRatings":81,"hoverText":"4.3 out of 5 stars","auiStarClass":"a-star-4"},"url":"/gp/product/B00CJAU0E0/ref=s9_al_gw_g79_i10?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00CJAU0E0","title":"Rachael Ray Porcelain Enamel II Nonstick 12-Piece Cookware Set, Red Gradient","price":"$159.95"},{"nodeId":null,"byline":"Masterbuilt","reviews":{"url":"/product-reviews/B00BWKN0HC/ref=s9_al_gw_g86_i11?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","numberOfRatings":250,"hoverText":"4.6 out of 5 stars","auiStarClass":"a-star-4-5"},"url":"/gp/product/B00BWKN0HC/ref=s9_al_gw_g86_i11?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00BWKN0HC","title":"Masterbuilt 23011114 Butterball Indoor Gen III Electric Fryer Cooker Extra Large Capacity","price":"$129.00"},{"nodeId":null,"byline":"Cuisinart","reviews":{"url":"/product-reviews/B00MGHG2TS/ref=s9_al_gw_g86_i12?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","numberOfRatings":26,"hoverText":"4.4 out of 5 stars","auiStarClass":"a-star-4-5"},"url":"/gp/product/B00MGHG2TS/ref=s9_al_gw_g86_i12?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B00MGHG2TS","title":"Cuisinart CPO-600 Alfrescamore Portable Outdoor Pizza Oven","price":"$249.99"},{"nodeId":null,"byline":"Weber","reviews":{"url":"/product-reviews/B001I8ZTJ0/ref=s9_al_gw_g86_i13?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","numberOfRatings":562,"hoverText":"4.8 out of 5 stars","auiStarClass":"a-star-5"},"url":"/gp/product/B001I8ZTJ0/ref=s9_al_gw_g86_i13?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B001I8ZTJ0","title":"Weber 721001 Smokey Mountain Cooker 18-1/2-Inch Charcoal Smoker, Black","price":"$299.00"},{"nodeId":null,"byline":"Weber","reviews":{"url":"/product-reviews/B0098HR0PY/ref=s9_al_gw_g86_i14?_encoding=UTF8&showViewpoints=1&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","numberOfRatings":731,"hoverText":"4.5 out of 5 stars","auiStarClass":"a-star-4-5"},"url":"/gp/product/B0098HR0PY/ref=s9_al_gw_g86_i14?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978163922&pf_rd_i=desktop","prime":{"auiIconClass":"a-icon-prime","complimentary":0,"shipping":1},"asin":"B0098HR0PY","title":"Weber 46110001 Spirit E210 Liquid Propane Gas Grill, Black","price":"$399.00"}]});
+ });
+ </script>
+
+
+
+ </div>
+ <hr class='slot-hr desktop-5-hr' />
+
+
+ <div class='desktop-row' id='desktop-6'>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div id="uber-widget-ns_1GM97J2XXNXR8Y322FQC_20850_" class="a-section a-spacing-none shogun-widget uber-widget aui-desktop fresh-shoveler">
+
+
+<div class="a-section as-title-block">
+ <span class=as-title-block-left>
+ <span class="a-color-base">
+ More Items to Consider
+ </span>
+ </span>
+ <span class="as-title-block-right">
+ <a class="a-link-normal" href="/gp/history/ref=br_ubw_cllTn?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-6&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970566542&pf_rd_i=desktop">
+ See more
+</a>
+ </span>
+</div>
+
+
+
+
+
+
+<div class="a-section feed-carousel">
+ <ul class="a-nostyle a-horizontal feed-carousel-shelf">
+
+
+
+<li data-sghover="{&quot;asin&quot;:&quot;B00CJD4HD2&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00CJD4HD2/ref=s9_simh_gw_p147_d22_i2?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-6&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970566542&pf_rd_i=desktop"><img alt="Logitech G500s Laser Gaming Mouse with Adjustable Weight Tuning" src="http://ecx.images-amazon.com/images/I/41EEnvJ01UL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Logitech G500s Laser Gaming Mouse with Adjustable Weight Tuning" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41EEnvJ01UL._AC_SY660_.jpg&quot;:[440,500],&quot;http://ecx.images-amazon.com/images/I/41EEnvJ01UL._AC_SY330_.jpg&quot;:[330,375],&quot;http://ecx.images-amazon.com/images/I/41EEnvJ01UL._AC_SY440_.jpg&quot;:[440,500],&quot;http://ecx.images-amazon.com/images/I/41EEnvJ01UL._AC_SY220_.jpg&quot;:[220,250]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00BCEK2LA&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00BCEK2LA/ref=s9_simh_gw_p147_d22_i3?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-6&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970566542&pf_rd_i=desktop"><img alt="Logitech G400s 910-003589 Optical Gaming Mouse" src="http://ecx.images-amazon.com/images/I/41VUsmBHc%2BL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Logitech G400s 910-003589 Optical Gaming Mouse" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41VUsmBHc%2BL._AC_SY660_.jpg&quot;:[500,243],&quot;http://ecx.images-amazon.com/images/I/41VUsmBHc%2BL._AC_SY440_.jpg&quot;:[440,214],&quot;http://ecx.images-amazon.com/images/I/41VUsmBHc%2BL._AC_SY220_.jpg&quot;:[220,107],&quot;http://ecx.images-amazon.com/images/I/41VUsmBHc%2BL._AC_SY330_.jpg&quot;:[330,160]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B002J9GDXI&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B002J9GDXI/ref=s9_simh_gw_p147_d22_i4?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-6&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970566542&pf_rd_i=desktop"><img alt="Logitech G500 Programmable Gaming Mouse" src="http://ecx.images-amazon.com/images/I/51HoNxGz0wL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Logitech G500 Programmable Gaming Mouse" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51HoNxGz0wL._AC_SY440_.jpg&quot;:[440,397],&quot;http://ecx.images-amazon.com/images/I/51HoNxGz0wL._AC_SY330_.jpg&quot;:[330,298],&quot;http://ecx.images-amazon.com/images/I/51HoNxGz0wL._AC_SY660_.jpg&quot;:[500,451],&quot;http://ecx.images-amazon.com/images/I/51HoNxGz0wL._AC_SY220_.jpg&quot;:[220,198]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B0007Z1M50&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B0007Z1M50/ref=s9_simh_gw_p147_d22_i5?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-6&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970566542&pf_rd_i=desktop"><img alt="Logitech MX 518 High Performance Optical Gaming Mouse (Metal)" src="http://ecx.images-amazon.com/images/I/41BQVE1SXZL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Logitech MX 518 High Performance Optical Gaming Mouse (Metal)" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41BQVE1SXZL._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/41BQVE1SXZL._AC_SY220_.jpg&quot;:[220,220],&quot;http://ecx.images-amazon.com/images/I/41BQVE1SXZL._AC_SY660_.jpg&quot;:[500,500],&quot;http://ecx.images-amazon.com/images/I/41BQVE1SXZL._AC_SY440_.jpg&quot;:[440,440]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B0055QZ216&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B0055QZ216/ref=s9_simh_gw_p147_d22_i6?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-6&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970566542&pf_rd_i=desktop"><img alt="Logitech Optical Gaming Mouse G400 with High-Precision 3600 DPI Optical Engine" src="http://ecx.images-amazon.com/images/I/41VI09rPyjL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Logitech Optical Gaming Mouse G400 with High-Precision 3600 DPI Optical Engine" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41VI09rPyjL._AC_SY220_.jpg&quot;:[220,252],&quot;http://ecx.images-amazon.com/images/I/41VI09rPyjL._AC_SY660_.jpg&quot;:[436,500],&quot;http://ecx.images-amazon.com/images/I/41VI09rPyjL._AC_SY440_.jpg&quot;:[436,500],&quot;http://ecx.images-amazon.com/images/I/41VI09rPyjL._AC_SY330_.jpg&quot;:[330,378]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B000J45SW2&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B000J45SW2/ref=s9_simh_gw_p147_d22_i7?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-6&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970566542&pf_rd_i=desktop"><img alt="Logitech G5 Laser Gaming Mouse: Battlefield 2142 Edition" src="http://ecx.images-amazon.com/images/I/41XQB6XP81L._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Logitech G5 Laser Gaming Mouse: Battlefield 2142 Edition" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41XQB6XP81L._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/41XQB6XP81L._AC_SY660_.jpg&quot;:[500,500],&quot;http://ecx.images-amazon.com/images/I/41XQB6XP81L._AC_SY440_.jpg&quot;:[440,440],&quot;http://ecx.images-amazon.com/images/I/41XQB6XP81L._AC_SY220_.jpg&quot;:[220,220]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00IASVAGW&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00IASVAGW/ref=s9_simh_gw_p147_d22_i8?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-6&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970566542&pf_rd_i=desktop"><img alt="Logitech G100 Optical Laser Gaming Mouse - Red Edition" src="http://ecx.images-amazon.com/images/I/31S85-3YmZL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Logitech G100 Optical Laser Gaming Mouse - Red Edition" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/31S85-3YmZL._AC_SY660_.jpg&quot;:[333,500],&quot;http://ecx.images-amazon.com/images/I/31S85-3YmZL._AC_SY220_.jpg&quot;:[220,330],&quot;http://ecx.images-amazon.com/images/I/31S85-3YmZL._AC_SY440_.jpg&quot;:[333,500],&quot;http://ecx.images-amazon.com/images/I/31S85-3YmZL._AC_SY330_.jpg&quot;:[330,495]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00IRHE892&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00IRHE892/ref=s9_simh_gw_p147_d22_i9?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-6&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970566542&pf_rd_i=desktop"><img alt="Logitech G502 Proteus Core Tunable Gaming Mouse with Fully Customizable Surface, Weight and Balance Tuning (910-004074)" src="http://ecx.images-amazon.com/images/I/41jTfTUmnXL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Logitech G502 Proteus Core Tunable Gaming Mouse with Fully Customizable Surface, Weight and Balance Tuning (910-004074)" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41jTfTUmnXL._AC_SY440_.jpg&quot;:[440,254],&quot;http://ecx.images-amazon.com/images/I/41jTfTUmnXL._AC_SY660_.jpg&quot;:[500,289],&quot;http://ecx.images-amazon.com/images/I/41jTfTUmnXL._AC_SY220_.jpg&quot;:[220,127],&quot;http://ecx.images-amazon.com/images/I/41jTfTUmnXL._AC_SY330_.jpg&quot;:[330,191]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B000AY5Y5W&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B000AY5Y5W/ref=s9_simh_gw_p147_d22_i10?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-6&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970566542&pf_rd_i=desktop"><img alt="Logitech G7 Laser Cordless Mouse" src="http://ecx.images-amazon.com/images/I/41Q6YQAJGQL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Logitech G7 Laser Cordless Mouse" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41Q6YQAJGQL._AC_SY440_.jpg&quot;:[440,440],&quot;http://ecx.images-amazon.com/images/I/41Q6YQAJGQL._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/41Q6YQAJGQL._AC_SY660_.jpg&quot;:[500,500],&quot;http://ecx.images-amazon.com/images/I/41Q6YQAJGQL._AC_SY220_.jpg&quot;:[220,220]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00BCEK2LK&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00BCEK2LK/ref=s9_simh_gw_p147_d22_i11?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-6&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970566542&pf_rd_i=desktop"><img alt="Logitech G100s Optical Gaming Mouse" src="http://ecx.images-amazon.com/images/I/41wfXufvqkL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Logitech G100s Optical Gaming Mouse" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41wfXufvqkL._AC_SY660_.jpg&quot;:[500,228],&quot;http://ecx.images-amazon.com/images/I/41wfXufvqkL._AC_SY330_.jpg&quot;:[330,150],&quot;http://ecx.images-amazon.com/images/I/41wfXufvqkL._AC_SY440_.jpg&quot;:[440,201],&quot;http://ecx.images-amazon.com/images/I/41wfXufvqkL._AC_SY220_.jpg&quot;:[220,100]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B001NTFATI&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B001NTFATI/ref=s9_simh_gw_p147_d22_i12?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-6&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970566542&pf_rd_i=desktop"><img alt="Logitech G9X Programmable Laser Gaming Mouse with Precision Grips" src="http://ecx.images-amazon.com/images/I/31vcP9sYhtL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Logitech G9X Programmable Laser Gaming Mouse with Precision Grips" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/31vcP9sYhtL._AC_SY330_.jpg&quot;:[330,495],&quot;http://ecx.images-amazon.com/images/I/31vcP9sYhtL._AC_SY660_.jpg&quot;:[333,500],&quot;http://ecx.images-amazon.com/images/I/31vcP9sYhtL._AC_SY220_.jpg&quot;:[220,330],&quot;http://ecx.images-amazon.com/images/I/31vcP9sYhtL._AC_SY440_.jpg&quot;:[333,500]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B003VAM32E&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B003VAM32E/ref=s9_simh_gw_p147_d22_i13?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-6&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970566542&pf_rd_i=desktop"><img alt="Logitech Wireless Gaming Mouse G700" src="http://ecx.images-amazon.com/images/I/41RdQr-mEeL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Logitech Wireless Gaming Mouse G700" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41RdQr-mEeL._AC_SY660_.jpg&quot;:[420,500],&quot;http://ecx.images-amazon.com/images/I/41RdQr-mEeL._AC_SY330_.jpg&quot;:[330,393],&quot;http://ecx.images-amazon.com/images/I/41RdQr-mEeL._AC_SY220_.jpg&quot;:[220,262],&quot;http://ecx.images-amazon.com/images/I/41RdQr-mEeL._AC_SY440_.jpg&quot;:[420,500]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B0001YGIB0&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B0001YGIB0/ref=s9_simh_gw_p147_d22_i14?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-6&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970566542&pf_rd_i=desktop"><img alt="Logitech MX 510 Performance Optical Gaming Mouse (Red)" src="http://ecx.images-amazon.com/images/I/418E7H3ZYHL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Logitech MX 510 Performance Optical Gaming Mouse (Red)" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/418E7H3ZYHL._AC_SY660_.jpg&quot;:[420,500],&quot;http://ecx.images-amazon.com/images/I/418E7H3ZYHL._AC_SY330_.jpg&quot;:[330,393],&quot;http://ecx.images-amazon.com/images/I/418E7H3ZYHL._AC_SY220_.jpg&quot;:[220,262],&quot;http://ecx.images-amazon.com/images/I/418E7H3ZYHL._AC_SY440_.jpg&quot;:[420,500]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B005EWB3AU&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B005EWB3AU/ref=s9_simh_gw_p147_d22_i15?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-6&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970566542&pf_rd_i=desktop"><img alt="Logitech Gaming Mouse G300 with Nine Programmable Controls (910-002358)" src="http://ecx.images-amazon.com/images/I/41qFxLQqxUL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Logitech Gaming Mouse G300 with Nine Programmable Controls (910-002358)" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41qFxLQqxUL._AC_SY660_.jpg&quot;:[500,450],&quot;http://ecx.images-amazon.com/images/I/41qFxLQqxUL._AC_SY440_.jpg&quot;:[440,396],&quot;http://ecx.images-amazon.com/images/I/41qFxLQqxUL._AC_SY220_.jpg&quot;:[220,198],&quot;http://ecx.images-amazon.com/images/I/41qFxLQqxUL._AC_SY330_.jpg&quot;:[330,297]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00BFOEY3Y&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00BFOEY3Y/ref=s9_simh_gw_p147_d22_i16?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-6&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970566542&pf_rd_i=desktop"><img alt="Logitech G700s 910-003584 Rechargeable Gaming Mouse" src="http://ecx.images-amazon.com/images/I/417mTvPDEML._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Logitech G700s 910-003584 Rechargeable Gaming Mouse" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/417mTvPDEML._AC_SY440_.jpg&quot;:[440,284],&quot;http://ecx.images-amazon.com/images/I/417mTvPDEML._AC_SY330_.jpg&quot;:[330,213],&quot;http://ecx.images-amazon.com/images/I/417mTvPDEML._AC_SY220_.jpg&quot;:[220,142],&quot;http://ecx.images-amazon.com/images/I/417mTvPDEML._AC_SY660_.jpg&quot;:[500,323]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00CVT8L7C&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00CVT8L7C/ref=s9_simh_gw_p147_d22_i17?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-6&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970566542&pf_rd_i=desktop"><img alt="Logitech 910-001204 Corded Mouse M500 Laser - 1000dpi - Scroll Wheel - USB - Black Gray" src="http://ecx.images-amazon.com/images/I/411PNYv4kAL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Logitech 910-001204 Corded Mouse M500 Laser - 1000dpi - Scroll Wheel - USB - Black Gray" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/411PNYv4kAL._AC_SY660_.jpg&quot;:[400,400],&quot;http://ecx.images-amazon.com/images/I/411PNYv4kAL._AC_SY220_.jpg&quot;:[220,220],&quot;http://ecx.images-amazon.com/images/I/411PNYv4kAL._AC_SY330_.jpg&quot;:[330,330],&quot;http://ecx.images-amazon.com/images/I/411PNYv4kAL._AC_SY440_.jpg&quot;:[400,400]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B009DYOPJQ&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B009DYOPJQ/ref=s9_simh_gw_p147_d22_i18?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-6&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970566542&pf_rd_i=desktop"><img alt="ROCCAT KONE Pure Core Performance Gaming Mouse, Black" src="http://ecx.images-amazon.com/images/I/41Gl8DjMwpL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="ROCCAT KONE Pure Core Performance Gaming Mouse, Black" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41Gl8DjMwpL._AC_SY660_.jpg&quot;:[500,456],&quot;http://ecx.images-amazon.com/images/I/41Gl8DjMwpL._AC_SY440_.jpg&quot;:[440,401],&quot;http://ecx.images-amazon.com/images/I/41Gl8DjMwpL._AC_SY330_.jpg&quot;:[330,301],&quot;http://ecx.images-amazon.com/images/I/41Gl8DjMwpL._AC_SY220_.jpg&quot;:[220,201]}"></a></span></li>
+
+
+ </ul>
+ <div class="spinner"><img src="http://g-ecx.images-amazon.com/images/G/01/amazonui/loading/loading-4x._V391853216_.gif" /></div>
+
+ <a class="feed-carousel-control feed-left" href="#"><span class="gw-icon feed-arrow"></span></a>
+ <a class="feed-carousel-control feed-right" href="#"><span class="gw-icon feed-arrow"></span></a>
+ <span class="feed-scrollbar">
+ <span class="feed-scrollbar-track"><span class="feed-scrollbar-thumb"></span></span>
+ </span>
+</div>
+
+</div>
+
+
+
+<script type="text/javascript">
+
+ P.when('A').execute(function(A) {
+ var $ = A.$;
+
+ var Carousel = function ($carousel) {
+ var self = this;
+
+ this.init($carousel);
+ };
+
+ Carousel.prototype = {
+ init: function ($carousel) {
+ var self = this;
+
+ if (A.capabilities.touch) {
+ $carousel.addClass('feed-carousel-touch');
+ }
+
+ self.minItems = 10;
+
+ self.$carousel = $carousel;
+ self.$shelf = self.$carousel.find('.feed-carousel-shelf');
+ self.$spinner = self.$carousel.find('.spinner');
+ self.$left = $('.feed-carousel-control.feed-left', $carousel);
+ self.$right = $('.feed-carousel-control.feed-right', $carousel);
+ self.$buttons = $('.feed-carousel-control', $carousel);
+ self.$thumb = $('.feed-scrollbar-thumb', $carousel);
+ self.shelfLeft = -1 * parseInt(self.$shelf.css('left'), 10);
+ self.calcWidth = $('html').hasClass('a-lt-ie9');
+
+ self.bindEvents();
+ self.$carousel.data("Carousel", self);
+
+ self.$carousel.trigger('change');
+ },
+
+ bindEvents: function () {
+ var self = this,
+ $body = $('body');
+
+ self.$carousel.change(function(e) {
+ self.updateSpinner();
+ self.updateShelfWidth();
+ self.updateControls();
+ });
+
+ self.$left.click(function(e) {
+ e.preventDefault();
+ self.changePage(-1);
+ });
+
+ self.$right.click(function(e) {
+ e.preventDefault();
+ self.changePage(+1);
+ });
+
+ $('.product-image', self.$shelf).one('sload', function() {
+ self.$carousel.trigger('change');
+ });
+
+ $(window).resize(function() {
+ self.changePage(0);
+ self.updateControls();
+ });
+
+ self.$thumb.mousedown(function(e) {
+ var lastX = e.clientX;
+
+ if (e.which !== 1) return;
+
+ e.preventDefault();
+
+ self.$carousel.addClass('scrolling');
+
+ $body.bind("mousemove.feed-carousel",function(e) {
+ var cd = self.getDimensions(),
+ mouseDistance = e.clientX - lastX,
+ shelfDistance = 1 / cd.pageRatio * mouseDistance,
+ targetLeft = Math.max(Math.min(cd.shelfLeft + shelfDistance, cd.maxLeft), 0);
+
+ lastX = e.clientX;
+ self.moveShelf(targetLeft);
+ });
+ $(document).bind("selectstart.feed-carousel", function() { return false; });
+ });
+
+ $body.mouseup(function() {
+ self.$carousel.removeClass('scrolling');
+ if(!self.$carousel.hasClass('hovering')) {
+ self.hideControls();
+ }
+ $body.unbind("mousemove.feed-carousel");
+ $(document).unbind("selectstart.feed-carousel");
+ });
+
+ self.$carousel.hover(
+ function() {
+ self.$carousel.addClass('hovering');
+ clearTimeout(self.hoverTimer);
+ self.hoverTimer = setTimeout(function(){
+ if(self.$carousel.hasClass('hovering')){
+ self.showControls();
+ }
+ }, 300);
+ },
+ function() {
+ self.$carousel.removeClass('hovering');
+ clearTimeout(self.hoverTimer);
+ if(!self.$carousel.hasClass('scrolling')) {
+ self.hoverTimer = setTimeout(function(){
+ if(!self.$carousel.hasClass('hovering')) {
+ self.hideControls();
+ }
+ }, 600);
+ }
+ }
+ );
+ },
+
+ getDimensions: function() {
+ var self = this,
+ shelfWidth = self.$shelf.width(),
+ shelfLeft = self.shelfLeft,
+ pageWidth = self.$carousel.width();
+
+ return {
+ pageWidth: pageWidth,
+ shelfWidth: shelfWidth,
+ shelfLeft: shelfLeft,
+ pageRatio: pageWidth / shelfWidth,
+ leftRatio: shelfLeft / shelfWidth,
+ maxLeft: shelfWidth - pageWidth
+ };
+ },
+
+ updateShelfWidth: function() {
+ var self = this,
+ w = 0;
+
+ if(!self.calcWidth) {
+ return;
+ }
+
+ self.$shelf.children().each(function() { w += $(this).outerWidth(true); });
+ self.$shelf.width(w);
+ },
+
+ updateSpinner: function() {
+ var self = this;
+ if(self.size() < self.minItems) {
+ self.$spinner.show();
+ } else {
+ self.$spinner.hide();
+ }
+ },
+
+ updateControls: function() {
+ var self = this;
+ self.updateArrows();
+ self.updateScrollThumb();
+ },
+
+ showControls: function(complete) {
+ var self = this,
+ $controls = self.$thumb.add(self.$buttons);
+
+ $controls.stop(true, true).fadeIn({
+ duration: 300,
+ complete: complete,
+ queue: false
+ });
+ },
+
+ hideControls: function(complete) {
+ var self = this;
+ $controls = self.$thumb;
+
+ if(!self.$carousel.hasClass('first-carousel')) {
+ $controls = $controls.add(self.$buttons);
+ }
+
+ $controls.stop(true, true).fadeOut({
+ duration: 300,
+ complete: complete,
+ queue: false
+ });
+ },
+
+ appendCards: function(cards) {
+ var self = this;
+
+ self.$shelf.append(cards);
+ self.$carousel.trigger("change");
+ },
+
+ updateArrows: function() {
+ var self = this,
+ clazz = 'feed-control-disabled',
+ cd = self.getDimensions(),
+ flags = [ cd.shelfLeft > 0, cd.shelfLeft < cd.maxLeft ],
+ ctrls = [ self.$left, self.$right ];
+
+ $.each(ctrls, function(i, $e) {
+ flags[i] ? $e.removeClass(clazz) : $e.addClass(clazz);
+ });
+ },
+
+ updateScrollThumb: function() {
+ var self = this,
+ cd = self.getDimensions(),
+ left = cd.leftRatio * cd.pageWidth,
+ width = Math.min(cd.pageRatio * cd.pageWidth, cd.pageWidth);
+ self.$thumb.width(width).each(function() {
+ A.animate($(this), { left: left }, 0);
+ });
+ },
+
+ changePage: function (n) {
+ var self = this,
+ cd = self.getDimensions(),
+ target = self.alignWithItem(cd.shelfLeft + n * cd.pageWidth),
+ targetLeft = Math.min(n < 0 ? target.right : target.left, cd.maxLeft);
+
+ if (cd.shelfLeft == targetLeft) {
+ self.bounce(self.$shelf, -30 * n);
+ self.bounce(self.$thumb, 6 * n);
+ } else {
+ self.shelfLeft = targetLeft;
+ self.slide(self.$shelf, -targetLeft, function() {
+ self.updateArrows();
+ });
+ self.slide(self.$thumb, targetLeft / cd.shelfWidth * cd.pageWidth, function() {
+ self.updateScrollThumb();
+ });
+ }
+ },
+
+ moveShelf: function (targetLeft) {
+ var self = this;
+
+ self.shelfLeft = targetLeft;
+ A.animate(self.$shelf, { left: -targetLeft }, 0);
+ self.updateControls();
+ },
+
+ getItems: function() {
+ var self = this;
+ return self.$shelf.find('.feed-carousel-card');
+ },
+
+ size: function() {
+ var self = this;
+ return self.getItems().length;
+ },
+
+ alignWithItem: function(x) {
+ if(x < 0) {
+ return { left: 0, right: 0 };
+ }
+
+ var self = this,
+ $items = self.getItems(),
+ rv = $items.map(function() {
+ var pos = self.cardPosition($(this));
+ if(x >= pos.left && x <= pos.right) {
+ return pos;
+ }
+ }).get(0);
+
+ return rv ? rv : self.cardPosition($items.last());
+ },
+
+ cardPosition: function($e) {
+ var left = $e.position().left,
+ right = left + $e.outerWidth(true);
+
+ return { left: left, right: right };
+ },
+
+ slide: function($c, targetLeft, callback) {
+ var self = this,
+ speed = 400,
+ easing = 'cubic-bezier(0.455, 0.03, 0.515, 0.955)'; // easeInOutQuad
+
+ $c.each(function() {
+ var $e = $(this);
+ A.animate($e, { left: targetLeft }, speed, easing, callback);
+ });
+ },
+
+ bounce: function($c, x) {
+ var self = this,
+ speedIn = 400,
+ speedOut = 100,
+ easing = 'cubic-bezier(0.175, 0.885, 0.32, 1.275)'; // easeOutBack
+
+ $c.each(function() {
+ var $e = $(this);
+ A.animate($e, { marginLeft: x }, speedIn, easing, function() {
+ A.animate($e, { marginLeft: 0 }, speedOut);
+ });
+ });
+ }
+ };
+
+ $("#" + "uber-widget-ns_1GM97J2XXNXR8Y322FQC_20850_" + " .feed-carousel").each(function(i, e) {
+ var $e = $(e);
+ new Carousel($e);
+ });
+ });
+</script>
+
+
+
+<script type="text/javascript">
+ P.when('A').execute(function(A) {
+ var $ = A.$;
+
+ var bilh = function(e, n) {
+ $(e).show().one('load error', function() {
+ $(n).trigger('sload');
+ }).each(function() { if(e.complete) $(e).trigger('load'); });
+ };
+
+ var imgs = $("#" + "uber-widget-ns_1GM97J2XXNXR8Y322FQC_20850_" + " " +
+ "." + "product-image");
+ for(var i = 2, len = imgs.length; i < len; i++) {
+ (function(c, n) {
+ $(c).one('sload', function() {
+ bilh(this, n);
+ });
+ })(imgs[i - 1], imgs[i]);
+ }
+
+ bilh(imgs[0], imgs[1]);
+ });
+
+</script>
+
+
+<script type="text/javascript">
+P.when("A", "cf").execute(function(A){
+ A.loadDescendantImagesManually(A.$("#uber-widget-ns_1GM97J2XXNXR8Y322FQC_20850_"));
+});
+</script>
+
+
+
+
+
+<script type="text/javascript">
+P.when('A').register("shogunUber-widget-ns_1GM97J2XXNXR8Y322FQC_20850_ProductdbAjaxAjaxHandler", function(A){
+ return {
+ "ajax" : function (arg0, arg1, arg2){
+ var successFunction, failureFunction, params;
+ if(typeof arg0 === 'object' && typeof arg1 === 'undefined') {
+ successFunction = arg0.success;
+ failureFunction = arg0.fail;
+ params = arg0.params;
+ }
+ else if(typeof arg0 === 'function' && typeof arg1 === 'function') {
+ successFunction = arg0;
+ failureFunction = arg1;
+ params = arg2;
+ }
+ else if(typeof arg0 === 'undefined' && typeof arg1 === 'undefined') {
+ }
+ else { throw new Error("Incorrect invocation of SgnAjaxFn"); }
+ params = params || {};
+ var auiShogunAjaxHandler = {};
+ if(successFunction){ auiShogunAjaxHandler.success = successFunction; }
+ if(failureFunction){ auiShogunAjaxHandler.failure = failureFunction; }
+ auiShogunAjaxHandler.params = A.$.extend({"swn":"productdb-ajax","oia":1,"ht":"D979A416CB6A19AF1C8191D2DCD3AC1933CDA418","opt":"Gateway","oe":"{\"isDesktop\":\"1\",\"isTablet\":0,\"isMobile\":0}","sa":"{\"asins\":[\"B00CJD4HD2\",\"B00BCEK2LA\",\"B002J9GDXI\",\"B0007Z1M50\",\"B0055QZ216\",\"B000J45SW2\",\"B00IASVAGW\",\"B00IRHE892\",\"B000AY5Y5W\",\"B00BCEK2LK\",\"B001NTFATI\",\"B003VAM32E\",\"B0001YGIB0\",\"B005EWB3AU\",\"B00BFOEY3Y\",\"B00CVT8L7C\",\"B009DYOPJQ\"]}","ospt":"desktop","rrid":"1GM97J2XXNXR8Y322FQC"}, params);
+ var auiShogunAjaxHandlerUrl = "/gp/shogun/ajax.html";
+ if(ue_sid){ auiShogunAjaxHandlerUrl += "/" + ue_sid; }
+ auiShogunAjaxHandler.method = "get";
+ A.ajax(auiShogunAjaxHandlerUrl, auiShogunAjaxHandler);
+ }
+ };
+});
+</script>
+
+ <script type="text/javascript">
+ P.when("gw-productdb",
+ "shogunUber-widget-ns_1GM97J2XXNXR8Y322FQC_20850_ProductdbAjaxAjaxHandler",
+ "cf").execute(function(pdb, sac) {
+ sac.ajax(function(data) { pdb._add(data); }, function() {});
+ });
+ </script>
+
+
+
+ </div>
+ <hr class='slot-hr desktop-6-hr' />
+
+
+
+ <div class="billboardRowWrapper">
+ <div class="a-row billboardRow">
+ <div class="a-column a-span6">
+
+ <div class='billboard' id='desktop-billboard-5'>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div id="scalable-image-map_scalable-image-map-ns_15V6HYKN8W20TGWPB4QV_12803_" class="a-section a-text-center shogun-widget scalable-image-map aui-desktop-link">
+ <a class="a-link-normal" href="/b/ref=vpc_i_newgw_507846?_encoding=UTF8&node=2231352011&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-billboard-5&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1978811342&pf_rd_i=desktop"><img alt="Amazon Coupons" src="http://g-ecx.images-amazon.com/images/G/01/Gateway/Billboards/Coupons_BB._UX440_SX440_V321546233_.png" class="a-dynamic-image" height="100%" width="440px" data-a-dynamic-image="{&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Billboards/Coupons_BB._UX660_SX660_V321546233_.png&quot;:[300,660],&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Billboards/Coupons_BB._V321546233_.png&quot;:[600,1320],&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Billboards/Coupons_BB._UX880_SX880_V321546233_.png&quot;:[400,880],&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Billboards/Coupons_BB._UX440_SX440_V321546233_.png&quot;:[200,440]}"></a>
+</div>
+
+ </div>
+
+ </div>
+ <div class="a-column a-span6 a-span-last">
+
+ <div class='billboard' id='desktop-billboard-6'>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div id="scalable-image-map_scalable-image-map-ns_1B3XX0C91NVXVAYKSGBE_6992_" class="a-section a-text-center shogun-widget scalable-image-map aui-desktop-link">
+ <a class="a-link-normal" href="/b/ref=br_imp?_encoding=UTF8&node=9578129011&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-billboard-6&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1963345102&pf_rd_i=desktop"><img alt="Kindle Unlimited" src="http://g-ecx.images-amazon.com/images/G/01/img14/kindle/ku/post-launch/on-site/9927_kindleContent_doublewideWeblab_1320x600_03._UX440_SX440_V323897444_.png" class="a-dynamic-image" height="100%" width="440px" data-a-dynamic-image="{&quot;http://g-ecx.images-amazon.com/images/G/01/img14/kindle/ku/post-launch/on-site/9927_kindleContent_doublewideWeblab_1320x600_03._UX660_SX660_V323897444_.png&quot;:[300,660],&quot;http://g-ecx.images-amazon.com/images/G/01/img14/kindle/ku/post-launch/on-site/9927_kindleContent_doublewideWeblab_1320x600_03._V323897444_.png&quot;:[600,1320],&quot;http://g-ecx.images-amazon.com/images/G/01/img14/kindle/ku/post-launch/on-site/9927_kindleContent_doublewideWeblab_1320x600_03._UX880_SX880_V323897444_.png&quot;:[400,880],&quot;http://g-ecx.images-amazon.com/images/G/01/img14/kindle/ku/post-launch/on-site/9927_kindleContent_doublewideWeblab_1320x600_03._UX440_SX440_V323897444_.png&quot;:[200,440]}"></a>
+</div>
+
+ </div>
+
+ </div>
+ </div>
+ </div>
+ <hr class="billboardrow-hr" />
+
+
+ <div class='desktop-row' id='desktop-7'>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div id="uber-widget-ns_1GM97J2XXNXR8Y322FQC_20854_" class="a-section a-spacing-none shogun-widget uber-widget aui-desktop fresh-shoveler">
+
+
+<div class="a-section as-title-block">
+ <span class=as-title-block-left>
+ <span class="a-color-base">
+ Included with Prime Membership at No Additional Cost
+ </span>
+ </span>
+ <span class="as-title-block-right">
+ <a class="a-link-normal" href="/s/ref=s9_nwrsa_gw_clnk?_encoding=UTF8&node=2858778011%2C7613704011&search-alias=prime-instant-video&pf_rd_m=ATVPDKIKX0DER&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-7&pf_rd_s=center-8&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_t=101&pf_rd_p=1970555722&pf_rd_p=0&pf_rd_i=desktop&pf_rd_i=507846">
+ See more
+</a>
+ </span>
+</div>
+
+
+
+
+
+
+<div class="a-section feed-carousel">
+ <ul class="a-nostyle a-horizontal feed-carousel-shelf">
+
+
+
+<li data-sghover="{&quot;asin&quot;:&quot;B00I2TV3NO&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00I2TV3NO/ref=s9_nwrsa_gw_g318_i1?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-7&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970555722&pf_rd_i=desktop"><img alt="The Hunger Games: Catching Fire [HD]" src="http://ecx.images-amazon.com/images/I/51NFFVQfBAL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="The Hunger Games: Catching Fire [HD]" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51NFFVQfBAL._AC_SY440_.jpg&quot;:[440,302],&quot;http://ecx.images-amazon.com/images/I/51NFFVQfBAL._AC_SY660_.jpg&quot;:[500,343],&quot;http://ecx.images-amazon.com/images/I/51NFFVQfBAL._AC_SY330_.jpg&quot;:[330,226],&quot;http://ecx.images-amazon.com/images/I/51NFFVQfBAL._AC_SY220_.jpg&quot;:[220,151]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B008Y6URAA&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B008Y6URAA/ref=s9_nwrsa_gw_g318_i2?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-7&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970555722&pf_rd_i=desktop"><img alt="The Fifth Element [HD]" src="http://ecx.images-amazon.com/images/I/51HfRWujF%2BL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="The Fifth Element [HD]" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51HfRWujF%2BL._AC_SY660_.jpg&quot;:[500,343],&quot;http://ecx.images-amazon.com/images/I/51HfRWujF%2BL._AC_SY440_.jpg&quot;:[440,302],&quot;http://ecx.images-amazon.com/images/I/51HfRWujF%2BL._AC_SY330_.jpg&quot;:[330,226],&quot;http://ecx.images-amazon.com/images/I/51HfRWujF%2BL._AC_SY220_.jpg&quot;:[220,151]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B0091WZY9K&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B0091WZY9K/ref=s9_nwrsa_gw_g318_i3?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-7&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970555722&pf_rd_i=desktop"><img alt="Willy Wonka &amp; The Chocolate Factory [HD]" src="http://ecx.images-amazon.com/images/I/51dM05yxkfL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Willy Wonka &amp; The Chocolate Factory [HD]" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51dM05yxkfL._AC_SY440_.jpg&quot;:[440,302],&quot;http://ecx.images-amazon.com/images/I/51dM05yxkfL._AC_SY220_.jpg&quot;:[220,151],&quot;http://ecx.images-amazon.com/images/I/51dM05yxkfL._AC_SY660_.jpg&quot;:[500,343],&quot;http://ecx.images-amazon.com/images/I/51dM05yxkfL._AC_SY330_.jpg&quot;:[330,226]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00H8AJTB6&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00H8AJTB6/ref=s9_nwrsa_gw_g318_i4?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-7&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970555722&pf_rd_i=desktop"><img alt="Hours [HD]" src="http://ecx.images-amazon.com/images/I/51pd8Fa5KsL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Hours [HD]" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51pd8Fa5KsL._AC_SY330_.jpg&quot;:[330,226],&quot;http://ecx.images-amazon.com/images/I/51pd8Fa5KsL._AC_SY660_.jpg&quot;:[500,343],&quot;http://ecx.images-amazon.com/images/I/51pd8Fa5KsL._AC_SY440_.jpg&quot;:[440,302],&quot;http://ecx.images-amazon.com/images/I/51pd8Fa5KsL._AC_SY220_.jpg&quot;:[220,151]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B0099RFVXQ&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B0099RFVXQ/ref=s9_nwrsa_gw_g318_i5?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-7&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970555722&pf_rd_i=desktop"><img alt="Marvel&#39;s The Avengers [HD]" src="http://ecx.images-amazon.com/images/I/51mzxwgxMoL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Marvel&#39;s The Avengers [HD]" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51mzxwgxMoL._AC_SY440_.jpg&quot;:[440,302],&quot;http://ecx.images-amazon.com/images/I/51mzxwgxMoL._AC_SY660_.jpg&quot;:[500,343],&quot;http://ecx.images-amazon.com/images/I/51mzxwgxMoL._AC_SY220_.jpg&quot;:[220,151],&quot;http://ecx.images-amazon.com/images/I/51mzxwgxMoL._AC_SY330_.jpg&quot;:[330,226]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00E5Q1HJS&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00E5Q1HJS/ref=s9_nwrsa_gw_g318_i6?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-7&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970555722&pf_rd_i=desktop"><img alt="Star Trek Into Darkness [HD]" src="http://ecx.images-amazon.com/images/I/51guGEmYDxL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Star Trek Into Darkness [HD]" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51guGEmYDxL._AC_SY440_.jpg&quot;:[440,302],&quot;http://ecx.images-amazon.com/images/I/51guGEmYDxL._AC_SY330_.jpg&quot;:[330,226],&quot;http://ecx.images-amazon.com/images/I/51guGEmYDxL._AC_SY660_.jpg&quot;:[500,343],&quot;http://ecx.images-amazon.com/images/I/51guGEmYDxL._AC_SY220_.jpg&quot;:[220,151]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B008Y6RGFE&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B008Y6RGFE/ref=s9_nwrsa_gw_g318_i7?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-7&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970555722&pf_rd_i=desktop"><img alt="Hitch [HD]" src="http://ecx.images-amazon.com/images/I/41VkOnXyB7L._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Hitch [HD]" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41VkOnXyB7L._AC_SY440_.jpg&quot;:[440,302],&quot;http://ecx.images-amazon.com/images/I/41VkOnXyB7L._AC_SY660_.jpg&quot;:[500,343],&quot;http://ecx.images-amazon.com/images/I/41VkOnXyB7L._AC_SY330_.jpg&quot;:[330,226],&quot;http://ecx.images-amazon.com/images/I/41VkOnXyB7L._AC_SY220_.jpg&quot;:[220,151]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B009V5KI98&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B009V5KI98/ref=s9_nwrsa_gw_g318_i8?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-7&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970555722&pf_rd_i=desktop"><img alt="Annie [HD]" src="http://ecx.images-amazon.com/images/I/41LGcx8Q0OL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Annie [HD]" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41LGcx8Q0OL._AC_SY330_.jpg&quot;:[330,226],&quot;http://ecx.images-amazon.com/images/I/41LGcx8Q0OL._AC_SY660_.jpg&quot;:[500,343],&quot;http://ecx.images-amazon.com/images/I/41LGcx8Q0OL._AC_SY440_.jpg&quot;:[440,302],&quot;http://ecx.images-amazon.com/images/I/41LGcx8Q0OL._AC_SY220_.jpg&quot;:[220,151]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B008Y7X50I&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B008Y7X50I/ref=s9_nwrsa_gw_g318_i9?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-7&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970555722&pf_rd_i=desktop"><img alt="Teenage Mutant Ninja Turtles 2 [HD]" src="http://ecx.images-amazon.com/images/I/61wCEkZ-fWL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Teenage Mutant Ninja Turtles 2 [HD]" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/61wCEkZ-fWL._AC_SY660_.jpg&quot;:[500,343],&quot;http://ecx.images-amazon.com/images/I/61wCEkZ-fWL._AC_SY330_.jpg&quot;:[330,226],&quot;http://ecx.images-amazon.com/images/I/61wCEkZ-fWL._AC_SY440_.jpg&quot;:[440,302],&quot;http://ecx.images-amazon.com/images/I/61wCEkZ-fWL._AC_SY220_.jpg&quot;:[220,151]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00BUCXVPI&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00BUCXVPI/ref=s9_nwrsa_gw_g318_i10?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-7&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970555722&pf_rd_i=desktop"><img alt="Jack Reacher [HD]" src="http://ecx.images-amazon.com/images/I/51wPZ%2B9KRJL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Jack Reacher [HD]" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51wPZ%2B9KRJL._AC_SY440_.jpg&quot;:[440,302],&quot;http://ecx.images-amazon.com/images/I/51wPZ%2B9KRJL._AC_SY330_.jpg&quot;:[330,226],&quot;http://ecx.images-amazon.com/images/I/51wPZ%2B9KRJL._AC_SY220_.jpg&quot;:[220,151],&quot;http://ecx.images-amazon.com/images/I/51wPZ%2B9KRJL._AC_SY660_.jpg&quot;:[500,343]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B009CF7F8Y&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B009CF7F8Y/ref=s9_nwrsa_gw_g318_i11?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-7&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970555722&pf_rd_i=desktop"><img alt="The Duchess [HD]" src="http://ecx.images-amazon.com/images/I/51iDk0GYixL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="The Duchess [HD]" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51iDk0GYixL._AC_SY330_.jpg&quot;:[330,226],&quot;http://ecx.images-amazon.com/images/I/51iDk0GYixL._AC_SY220_.jpg&quot;:[220,151],&quot;http://ecx.images-amazon.com/images/I/51iDk0GYixL._AC_SY660_.jpg&quot;:[500,343],&quot;http://ecx.images-amazon.com/images/I/51iDk0GYixL._AC_SY440_.jpg&quot;:[440,302]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B009KWU6Q2&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B009KWU6Q2/ref=s9_nwrsa_gw_g318_i12?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-7&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970555722&pf_rd_i=desktop"><img alt="Hook [HD]" src="http://ecx.images-amazon.com/images/I/51Wk4HiYi-L._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Hook [HD]" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51Wk4HiYi-L._AC_SY220_.jpg&quot;:[220,151],&quot;http://ecx.images-amazon.com/images/I/51Wk4HiYi-L._AC_SY440_.jpg&quot;:[440,302],&quot;http://ecx.images-amazon.com/images/I/51Wk4HiYi-L._AC_SY660_.jpg&quot;:[500,343],&quot;http://ecx.images-amazon.com/images/I/51Wk4HiYi-L._AC_SY330_.jpg&quot;:[330,226]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B0091X3B6M&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B0091X3B6M/ref=s9_nwrsa_gw_g318_i13?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-7&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970555722&pf_rd_i=desktop"><img alt="An Unfinished Life [HD]" src="http://ecx.images-amazon.com/images/I/51caqFSC4jL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="An Unfinished Life [HD]" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51caqFSC4jL._AC_SY220_.jpg&quot;:[220,151],&quot;http://ecx.images-amazon.com/images/I/51caqFSC4jL._AC_SY660_.jpg&quot;:[500,343],&quot;http://ecx.images-amazon.com/images/I/51caqFSC4jL._AC_SY440_.jpg&quot;:[440,302],&quot;http://ecx.images-amazon.com/images/I/51caqFSC4jL._AC_SY330_.jpg&quot;:[330,226]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B0094LZY2A&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B0094LZY2A/ref=s9_nwrsa_gw_g318_i14?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-7&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970555722&pf_rd_i=desktop"><img alt="Jumanji [HD]" src="http://ecx.images-amazon.com/images/I/51yerEP4M8L._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Jumanji [HD]" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51yerEP4M8L._AC_SY660_.jpg&quot;:[500,343],&quot;http://ecx.images-amazon.com/images/I/51yerEP4M8L._AC_SY220_.jpg&quot;:[220,151],&quot;http://ecx.images-amazon.com/images/I/51yerEP4M8L._AC_SY330_.jpg&quot;:[330,226],&quot;http://ecx.images-amazon.com/images/I/51yerEP4M8L._AC_SY440_.jpg&quot;:[440,302]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00JUKEBH4&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00JUKEBH4/ref=s9_nwrsa_gw_g318_i15?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-7&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970555722&pf_rd_i=desktop"><img alt="Still Mine [HD]" src="http://ecx.images-amazon.com/images/I/51Bb5Y5ZKWL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Still Mine [HD]" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51Bb5Y5ZKWL._AC_SY660_.jpg&quot;:[500,343],&quot;http://ecx.images-amazon.com/images/I/51Bb5Y5ZKWL._AC_SY220_.jpg&quot;:[220,151],&quot;http://ecx.images-amazon.com/images/I/51Bb5Y5ZKWL._AC_SY330_.jpg&quot;:[330,226],&quot;http://ecx.images-amazon.com/images/I/51Bb5Y5ZKWL._AC_SY440_.jpg&quot;:[440,302]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B00EL8I8IS&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B00EL8I8IS/ref=s9_nwrsa_gw_g318_i16?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-7&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970555722&pf_rd_i=desktop"><img alt="World War Z [HD]" src="http://ecx.images-amazon.com/images/I/51HDIUSH7wL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="World War Z [HD]" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51HDIUSH7wL._AC_SY330_.jpg&quot;:[330,226],&quot;http://ecx.images-amazon.com/images/I/51HDIUSH7wL._AC_SY660_.jpg&quot;:[500,343],&quot;http://ecx.images-amazon.com/images/I/51HDIUSH7wL._AC_SY220_.jpg&quot;:[220,151],&quot;http://ecx.images-amazon.com/images/I/51HDIUSH7wL._AC_SY440_.jpg&quot;:[440,302]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B008Y720JU&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B008Y720JU/ref=s9_nwrsa_gw_g318_i17?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-7&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970555722&pf_rd_i=desktop"><img alt="Salmon Fishing in the Yemen [HD]" src="http://ecx.images-amazon.com/images/I/51WE60qiYUL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="Salmon Fishing in the Yemen [HD]" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51WE60qiYUL._AC_SY440_.jpg&quot;:[440,302],&quot;http://ecx.images-amazon.com/images/I/51WE60qiYUL._AC_SY660_.jpg&quot;:[500,343],&quot;http://ecx.images-amazon.com/images/I/51WE60qiYUL._AC_SY330_.jpg&quot;:[330,226],&quot;http://ecx.images-amazon.com/images/I/51WE60qiYUL._AC_SY220_.jpg&quot;:[220,151]}"></a></span></li><li data-sghover="{&quot;asin&quot;:&quot;B008Y78M60&quot;,&quot;type&quot;:&quot;slideout&quot;}" class="feed-carousel-card"><span class="a-list-item"><a class="a-link-normal a-inline-block" href="/gp/product/B008Y78M60/ref=s9_nwrsa_gw_g318_i18?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-7&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970555722&pf_rd_i=desktop"><img alt="The Conspirator [HD]" src="http://ecx.images-amazon.com/images/I/51sEWV7WVhL._AC_SY220_.jpg" class="a-dynamic-image product-image" title="The Conspirator [HD]" height="220px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51sEWV7WVhL._AC_SY440_.jpg&quot;:[440,302],&quot;http://ecx.images-amazon.com/images/I/51sEWV7WVhL._AC_SY330_.jpg&quot;:[330,226],&quot;http://ecx.images-amazon.com/images/I/51sEWV7WVhL._AC_SY660_.jpg&quot;:[500,343],&quot;http://ecx.images-amazon.com/images/I/51sEWV7WVhL._AC_SY220_.jpg&quot;:[220,151]}"></a></span></li>
+
+
+ </ul>
+ <div class="spinner"><img src="http://g-ecx.images-amazon.com/images/G/01/amazonui/loading/loading-4x._V391853216_.gif" /></div>
+
+ <a class="feed-carousel-control feed-left" href="#"><span class="gw-icon feed-arrow"></span></a>
+ <a class="feed-carousel-control feed-right" href="#"><span class="gw-icon feed-arrow"></span></a>
+ <span class="feed-scrollbar">
+ <span class="feed-scrollbar-track"><span class="feed-scrollbar-thumb"></span></span>
+ </span>
+</div>
+
+</div>
+
+
+
+<script type="text/javascript">
+
+ P.when('A').execute(function(A) {
+ var $ = A.$;
+
+ var Carousel = function ($carousel) {
+ var self = this;
+
+ this.init($carousel);
+ };
+
+ Carousel.prototype = {
+ init: function ($carousel) {
+ var self = this;
+
+ if (A.capabilities.touch) {
+ $carousel.addClass('feed-carousel-touch');
+ }
+
+ self.minItems = 10;
+
+ self.$carousel = $carousel;
+ self.$shelf = self.$carousel.find('.feed-carousel-shelf');
+ self.$spinner = self.$carousel.find('.spinner');
+ self.$left = $('.feed-carousel-control.feed-left', $carousel);
+ self.$right = $('.feed-carousel-control.feed-right', $carousel);
+ self.$buttons = $('.feed-carousel-control', $carousel);
+ self.$thumb = $('.feed-scrollbar-thumb', $carousel);
+ self.shelfLeft = -1 * parseInt(self.$shelf.css('left'), 10);
+ self.calcWidth = $('html').hasClass('a-lt-ie9');
+
+ self.bindEvents();
+ self.$carousel.data("Carousel", self);
+
+ self.$carousel.trigger('change');
+ },
+
+ bindEvents: function () {
+ var self = this,
+ $body = $('body');
+
+ self.$carousel.change(function(e) {
+ self.updateSpinner();
+ self.updateShelfWidth();
+ self.updateControls();
+ });
+
+ self.$left.click(function(e) {
+ e.preventDefault();
+ self.changePage(-1);
+ });
+
+ self.$right.click(function(e) {
+ e.preventDefault();
+ self.changePage(+1);
+ });
+
+ $('.product-image', self.$shelf).one('sload', function() {
+ self.$carousel.trigger('change');
+ });
+
+ $(window).resize(function() {
+ self.changePage(0);
+ self.updateControls();
+ });
+
+ self.$thumb.mousedown(function(e) {
+ var lastX = e.clientX;
+
+ if (e.which !== 1) return;
+
+ e.preventDefault();
+
+ self.$carousel.addClass('scrolling');
+
+ $body.bind("mousemove.feed-carousel",function(e) {
+ var cd = self.getDimensions(),
+ mouseDistance = e.clientX - lastX,
+ shelfDistance = 1 / cd.pageRatio * mouseDistance,
+ targetLeft = Math.max(Math.min(cd.shelfLeft + shelfDistance, cd.maxLeft), 0);
+
+ lastX = e.clientX;
+ self.moveShelf(targetLeft);
+ });
+ $(document).bind("selectstart.feed-carousel", function() { return false; });
+ });
+
+ $body.mouseup(function() {
+ self.$carousel.removeClass('scrolling');
+ if(!self.$carousel.hasClass('hovering')) {
+ self.hideControls();
+ }
+ $body.unbind("mousemove.feed-carousel");
+ $(document).unbind("selectstart.feed-carousel");
+ });
+
+ self.$carousel.hover(
+ function() {
+ self.$carousel.addClass('hovering');
+ clearTimeout(self.hoverTimer);
+ self.hoverTimer = setTimeout(function(){
+ if(self.$carousel.hasClass('hovering')){
+ self.showControls();
+ }
+ }, 300);
+ },
+ function() {
+ self.$carousel.removeClass('hovering');
+ clearTimeout(self.hoverTimer);
+ if(!self.$carousel.hasClass('scrolling')) {
+ self.hoverTimer = setTimeout(function(){
+ if(!self.$carousel.hasClass('hovering')) {
+ self.hideControls();
+ }
+ }, 600);
+ }
+ }
+ );
+ },
+
+ getDimensions: function() {
+ var self = this,
+ shelfWidth = self.$shelf.width(),
+ shelfLeft = self.shelfLeft,
+ pageWidth = self.$carousel.width();
+
+ return {
+ pageWidth: pageWidth,
+ shelfWidth: shelfWidth,
+ shelfLeft: shelfLeft,
+ pageRatio: pageWidth / shelfWidth,
+ leftRatio: shelfLeft / shelfWidth,
+ maxLeft: shelfWidth - pageWidth
+ };
+ },
+
+ updateShelfWidth: function() {
+ var self = this,
+ w = 0;
+
+ if(!self.calcWidth) {
+ return;
+ }
+
+ self.$shelf.children().each(function() { w += $(this).outerWidth(true); });
+ self.$shelf.width(w);
+ },
+
+ updateSpinner: function() {
+ var self = this;
+ if(self.size() < self.minItems) {
+ self.$spinner.show();
+ } else {
+ self.$spinner.hide();
+ }
+ },
+
+ updateControls: function() {
+ var self = this;
+ self.updateArrows();
+ self.updateScrollThumb();
+ },
+
+ showControls: function(complete) {
+ var self = this,
+ $controls = self.$thumb.add(self.$buttons);
+
+ $controls.stop(true, true).fadeIn({
+ duration: 300,
+ complete: complete,
+ queue: false
+ });
+ },
+
+ hideControls: function(complete) {
+ var self = this;
+ $controls = self.$thumb;
+
+ if(!self.$carousel.hasClass('first-carousel')) {
+ $controls = $controls.add(self.$buttons);
+ }
+
+ $controls.stop(true, true).fadeOut({
+ duration: 300,
+ complete: complete,
+ queue: false
+ });
+ },
+
+ appendCards: function(cards) {
+ var self = this;
+
+ self.$shelf.append(cards);
+ self.$carousel.trigger("change");
+ },
+
+ updateArrows: function() {
+ var self = this,
+ clazz = 'feed-control-disabled',
+ cd = self.getDimensions(),
+ flags = [ cd.shelfLeft > 0, cd.shelfLeft < cd.maxLeft ],
+ ctrls = [ self.$left, self.$right ];
+
+ $.each(ctrls, function(i, $e) {
+ flags[i] ? $e.removeClass(clazz) : $e.addClass(clazz);
+ });
+ },
+
+ updateScrollThumb: function() {
+ var self = this,
+ cd = self.getDimensions(),
+ left = cd.leftRatio * cd.pageWidth,
+ width = Math.min(cd.pageRatio * cd.pageWidth, cd.pageWidth);
+ self.$thumb.width(width).each(function() {
+ A.animate($(this), { left: left }, 0);
+ });
+ },
+
+ changePage: function (n) {
+ var self = this,
+ cd = self.getDimensions(),
+ target = self.alignWithItem(cd.shelfLeft + n * cd.pageWidth),
+ targetLeft = Math.min(n < 0 ? target.right : target.left, cd.maxLeft);
+
+ if (cd.shelfLeft == targetLeft) {
+ self.bounce(self.$shelf, -30 * n);
+ self.bounce(self.$thumb, 6 * n);
+ } else {
+ self.shelfLeft = targetLeft;
+ self.slide(self.$shelf, -targetLeft, function() {
+ self.updateArrows();
+ });
+ self.slide(self.$thumb, targetLeft / cd.shelfWidth * cd.pageWidth, function() {
+ self.updateScrollThumb();
+ });
+ }
+ },
+
+ moveShelf: function (targetLeft) {
+ var self = this;
+
+ self.shelfLeft = targetLeft;
+ A.animate(self.$shelf, { left: -targetLeft }, 0);
+ self.updateControls();
+ },
+
+ getItems: function() {
+ var self = this;
+ return self.$shelf.find('.feed-carousel-card');
+ },
+
+ size: function() {
+ var self = this;
+ return self.getItems().length;
+ },
+
+ alignWithItem: function(x) {
+ if(x < 0) {
+ return { left: 0, right: 0 };
+ }
+
+ var self = this,
+ $items = self.getItems(),
+ rv = $items.map(function() {
+ var pos = self.cardPosition($(this));
+ if(x >= pos.left && x <= pos.right) {
+ return pos;
+ }
+ }).get(0);
+
+ return rv ? rv : self.cardPosition($items.last());
+ },
+
+ cardPosition: function($e) {
+ var left = $e.position().left,
+ right = left + $e.outerWidth(true);
+
+ return { left: left, right: right };
+ },
+
+ slide: function($c, targetLeft, callback) {
+ var self = this,
+ speed = 400,
+ easing = 'cubic-bezier(0.455, 0.03, 0.515, 0.955)'; // easeInOutQuad
+
+ $c.each(function() {
+ var $e = $(this);
+ A.animate($e, { left: targetLeft }, speed, easing, callback);
+ });
+ },
+
+ bounce: function($c, x) {
+ var self = this,
+ speedIn = 400,
+ speedOut = 100,
+ easing = 'cubic-bezier(0.175, 0.885, 0.32, 1.275)'; // easeOutBack
+
+ $c.each(function() {
+ var $e = $(this);
+ A.animate($e, { marginLeft: x }, speedIn, easing, function() {
+ A.animate($e, { marginLeft: 0 }, speedOut);
+ });
+ });
+ }
+ };
+
+ $("#" + "uber-widget-ns_1GM97J2XXNXR8Y322FQC_20854_" + " .feed-carousel").each(function(i, e) {
+ var $e = $(e);
+ new Carousel($e);
+ });
+ });
+</script>
+
+
+
+<script type="text/javascript">
+ P.when('A').execute(function(A) {
+ var $ = A.$;
+
+ var bilh = function(e, n) {
+ $(e).show().one('load error', function() {
+ $(n).trigger('sload');
+ }).each(function() { if(e.complete) $(e).trigger('load'); });
+ };
+
+ var imgs = $("#" + "uber-widget-ns_1GM97J2XXNXR8Y322FQC_20854_" + " " +
+ "." + "product-image");
+ for(var i = 2, len = imgs.length; i < len; i++) {
+ (function(c, n) {
+ $(c).one('sload', function() {
+ bilh(this, n);
+ });
+ })(imgs[i - 1], imgs[i]);
+ }
+
+ bilh(imgs[0], imgs[1]);
+ });
+
+</script>
+
+
+<script type="text/javascript">
+P.when("A", "cf").execute(function(A){
+ A.loadDescendantImagesManually(A.$("#uber-widget-ns_1GM97J2XXNXR8Y322FQC_20854_"));
+});
+</script>
+
+
+
+
+
+<script type="text/javascript">
+P.when('A').register("shogunUber-widget-ns_1GM97J2XXNXR8Y322FQC_20854_ProductdbAjaxAjaxHandler", function(A){
+ return {
+ "ajax" : function (arg0, arg1, arg2){
+ var successFunction, failureFunction, params;
+ if(typeof arg0 === 'object' && typeof arg1 === 'undefined') {
+ successFunction = arg0.success;
+ failureFunction = arg0.fail;
+ params = arg0.params;
+ }
+ else if(typeof arg0 === 'function' && typeof arg1 === 'function') {
+ successFunction = arg0;
+ failureFunction = arg1;
+ params = arg2;
+ }
+ else if(typeof arg0 === 'undefined' && typeof arg1 === 'undefined') {
+ }
+ else { throw new Error("Incorrect invocation of SgnAjaxFn"); }
+ params = params || {};
+ var auiShogunAjaxHandler = {};
+ if(successFunction){ auiShogunAjaxHandler.success = successFunction; }
+ if(failureFunction){ auiShogunAjaxHandler.failure = failureFunction; }
+ auiShogunAjaxHandler.params = A.$.extend({"swn":"productdb-ajax","oia":1,"ht":"D979A416CB6A19AF1C8191D2DCD3AC1933CDA418","opt":"Gateway","oe":"{\"isDesktop\":\"1\",\"isTablet\":0,\"isMobile\":0}","sa":"{\"asins\":[\"B00I2TV3NO\",\"B008Y6URAA\",\"B0091WZY9K\",\"B00H8AJTB6\",\"B0099RFVXQ\",\"B00E5Q1HJS\",\"B008Y6RGFE\",\"B009V5KI98\",\"B008Y7X50I\",\"B00BUCXVPI\",\"B009CF7F8Y\",\"B009KWU6Q2\",\"B0091X3B6M\",\"B0094LZY2A\",\"B00JUKEBH4\",\"B00EL8I8IS\",\"B008Y720JU\",\"B008Y78M60\"]}","ospt":"desktop","rrid":"1GM97J2XXNXR8Y322FQC"}, params);
+ var auiShogunAjaxHandlerUrl = "/gp/shogun/ajax.html";
+ if(ue_sid){ auiShogunAjaxHandlerUrl += "/" + ue_sid; }
+ auiShogunAjaxHandler.method = "get";
+ A.ajax(auiShogunAjaxHandlerUrl, auiShogunAjaxHandler);
+ }
+ };
+});
+</script>
+
+ <script type="text/javascript">
+ P.when("gw-productdb",
+ "shogunUber-widget-ns_1GM97J2XXNXR8Y322FQC_20854_ProductdbAjaxAjaxHandler",
+ "cf").execute(function(pdb, sac) {
+ sac.ajax(function(data) { pdb._add(data); }, function() {});
+ });
+ </script>
+
+
+
+ </div>
+
+ </div>
+
+ </div>
+
+
+
+
+
+
+
+<div style="display: none">
+ <div id="nav-prime-menu" class="nav-empty nav-flyout-content nav-ajax-prime-menu">
+ <div class="nav_dynamic"></div>
+ <div class="nav-ajax-message"></div>
+ <div class="nav-ajax-error-msg">
+ <p class="nav_p nav-bold">There's a problem loading this menu right now.</p>
+ <p class="nav_p"><a href="/gp/prime/ref=nav_prime_ajax_err" class="nav_a">Learn more about Amazon Prime.</a></p>
+ </div>
+ </div>
+</div>
+
+
+
+
+
+
+
+<style>
+ #nav-prime-tooltip{
+ padding: 0 20px 2px 20px;
+ background-color: white;
+ font-family: arial,sans-serif;
+ }
+ .nav-npt-text-title{
+ font-family: arial,sans-serif;
+ font-size: 18px;
+ font-weight: bold;
+ line-height: 21px;
+ color: #E47923;
+ }
+ .nav-npt-text-detail, a.nav-npt-a{
+ font-family: arial,sans-serif;
+ font-size: 12px;
+ line-height: 14px;
+ color: #333333;
+ margin: 2px 0px;
+ }
+ a.nav-npt-a {
+ text-decoration: underline;
+ }
+</style>
+
+<div style="display: none">
+ <div id="nav-prime-tooltip">
+ <div class="nav-npt-text-title"> Get free unlimited photo storage with Amazon Prime </div>
+ <div class="nav-npt-text-detail"> Prime members also enjoy FREE Two-Day Shipping and exclusive access to music, movies, TV shows, and Kindle books. </div>
+ <div class="nav-npt-text-detail">
+ &gt;
+ <a class="nav-npt-a" href="/gp/prime/ref=nav_tooltip_redirect">Get started</a>
+ </div>
+ </div>
+</div>
+
+
+
+
+
+
+<script type="text/javascript">
+ $Nav.when("data").run(function(data) { data({"shopAllContent":{"template":{"name":"itemList","data":{"items":[{"text":"Unlimited Instant Videos","panelKey":"InstantVideoPanel"},{"text":"Digital Music","panelKey":"DigitalMusicPanel"},{"text":"Appstore for Android","panelKey":"AndroidPanel"},{"text":"Amazon Cloud Drive","panelKey":"CloudDrivePanel"},{"text":"Books & Audible","dividerBefore":"1","panelKey":"BooksPanel"},{"text":"Movies, Music & Games","panelKey":"MoviesMusicGamesPanel"},{"text":"Electronics & Computers","panelKey":"ElectronicsComputersPanel"},{"text":"Home, Garden & Tools","panelKey":"HomeGardenToolsPanel"},{"text":"Beauty, Health & Grocery","panelKey":"GroceryHealthBeautyHorizPanel"},{"text":"Toys, Kids & Baby","panelKey":"ToysKidsBabyPanel"},{"text":"Clothing, Shoes & Jewelry","panelKey":"ClothingShoesJewelryPanel"},{"text":"Sports & Outdoors","panelKey":"SportsOutdoorsT1Panel"},{"text":"Automotive & Industrial","panelKey":"AutomotiveIndustrialPanel"},{"text":"Credit & Payment Products","panelKey":"CreditPanel"},{"text":"Full Store Directory","decorate":"carat","dividerBefore":"1","url":"/gp/site-directory/ref=nav_shopall_fullstore"}]}},"wlTriggers":"41538:42645"},"signinContent":{"html":"<div id=\"nav-signin-tooltip\"><a href=\"https://www.amazon.com/ap/signin?_encoding=UTF8&openid.assoc_handle=usflex&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0&openid.pape.max_auth_age=0&openid.return_to=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fyourstore%2Fhome%3Fie%3DUTF8%26ref_%3Dnav_custrec_signin\" class=\"nav-action-button\"><span class=\"nav-action-inner\">\n Sign in\n </span></a><div class=\"nav-signin-tooltip-footer\">\n New customer? <a href=\"https://www.amazon.com/ap/register?_encoding=UTF8&openid.assoc_handle=usflex&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0&openid.pape.max_auth_age=0&openid.return_to=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fyourstore%2Fhome%3Fie%3DUTF8%26ref_%3Dnav_custrec_newcust\" class=\"nav-a\">\n Start here.\n </a></div></div>"},"ElectronicsComputersPanel":{"promoID":"desktop-shopall-electronics-computers","template":{"name":"itemList","data":{"text":"Electronics & Computers","items":[{"text":"Electronics","items":[{"text":"TV & Video","url":"/Televisions-Video/b/ref=nav_shopall_tv?ie=UTF8&node=1266092011"},{"text":"Home Audio & Theater","url":"/Home-Audio-Electronics/b/ref=nav_shopall_hat?ie=UTF8&node=667846011"},{"text":"Camera, Photo & Video","url":"/Camera-Photo-Film-Canon-Sony/b/ref=nav_shopall_p?ie=UTF8&node=502394"},{"text":"Cell Phones & Accessories","url":"/cell-phones-service-plans-accessories/b/ref=nav_shopall_wi?ie=UTF8&node=2335752011"},{"text":"Video Games","url":"/computer-video-games-hardware-accessories/b/ref=nav_shopall_cvg_ce?ie=UTF8&node=468642"},{"text":"Portable Audio & Accessories","url":"/MP3-Players-Audio-Video/b/ref=nav_shopall_mp3?ie=UTF8&node=172630"},{"text":"Car Electronics & GPS","url":"/Car-Electronics/b/ref=nav_shopall_gps_ce?ie=UTF8&node=1077068"},{"text":"Musical Instruments","url":"/musical-instruments-accessories-sound-recording/b/ref=nav_shopall_mi_ce?ie=UTF8&node=11091801"},{"text":"Electronics Accessories","url":"/Tech-Accessories-Electronics/b/ref=nav_shopall_elec_acc?ie=UTF8&node=5745855011"},{"text":"Wearable Technology","url":"/b/ref=nav_shopall_wear_tech?ie=UTF8&node=9013937011"}]},{"text":"Computers","columnBreak":"1","items":[{"text":" Laptops & Tablets","url":"/Laptops-Tablets/b/ref=nav_shopall_lapnet?ie=UTF8&node=2956501011"},{"text":"Desktops & Monitors","url":"/Desktops/b/ref=nav_shopall_deskserv?ie=UTF8&node=4972214011"},{"subtext":"External drives, mice, networking & more","text":"Computer Accessories & Peripherals","url":"/Computer-Accessories-Supplies/b/ref=nav_shopall_compaccess?ie=UTF8&node=172456"},{"text":"Computer Parts & Components","url":"/PC-Parts-Components/b/ref=nav_shopall_components?ie=UTF8&node=193870011"},{"text":"Software","url":"/design-download-business-education-software/b/ref=nav_shopall_sw?ie=UTF8&node=229534"},{"text":"Printers & Ink","url":"/Printers-Office-Electronics/b/ref=nav_shopall_printers?ie=UTF8&node=172635"},{"text":"Office & School Supplies","url":"/office-products-supplies-electronics-furniture/b/ref=nav_shopall_op?ie=UTF8&node=1064954"},{"text":"Trade In Your Electronics","url":"/Electronics-Trade-In/b/ref=nav_shopall_trade_in_elec?ie=UTF8&node=2226766011"}]}]}}},"FireTvPanel":{"promoID":"desktop-shopall_k-fire-tv","template":{"name":"itemList","data":{"text":"Fire TV","url":"/dp/B00CX5P8FC/ref=nav_shopall_k_tv_tv_top","items":[{"text":"Watch and Play","items":[{"subtext":"Streaming 1080p media player with voice search","text":"Amazon Fire TV","url":"/dp/B00CX5P8FC/ref=nav_shopall_k_tv_tv"},{"subtext":"Streaming media stick with Netflix and Amazon Instant Video","text":"Fire TV Stick","url":"/dp/B00GDQ0RMG/ref=nav_shopall_k_tv_stick"},{"subtext":"Dedicated wireless controller","text":"Amazon Fire Game Controller","url":"/dp/B00DU0ZI8Q/ref=nav_shopall_k_tv_controller"}]},{"text":"Movies, TV, and Games","columnBreak":"1","items":[{"text":"Prime Instant Video","url":"/Prime-Instant-Video/b/ref=nav_shopall_k_tv_piv?ie=UTF8&node=2676882011"},{"text":"Amazon Instant Video","url":"/Instant-Video/b/ref=nav_shopall_k_tv_aiv?ie=UTF8&node=2858778011"},{"text":"Games for Fire TV","url":"/b/ref=nav_shopall_k_tv_gaming?ie=UTF8&node=7031433011"},{"text":"Amazon Cloud Drive","url":"/clouddrive/home/ref=nav_shopall_k_tv_cd"}]}],"image":{"width":85,"src":"http://g-ecx.images-amazon.com/images/G/01/gno/icons/GNO-flyout-firetv_85x60._V350217003_.jpg","height":60}}}},"FirePhonePanel":{"promoID":"desktop-shopall_k-fire-phone","template":{"name":"itemList","data":{"text":"Fire Phone","url":"/dp/B00EOE0WKQ/ref=nav_shopall_k_phone_phone_top","items":[{"text":"Phones and Accessories","items":[{"subtext":"4.7\" HD display, quad-core processor, 4G LTE, 13MP camera, 32GB or 64GB","text":"Amazon Fire Phone","url":"/dp/B00EOE0WKQ/ref=nav_shopall_k_phone_phone"},{"subtext":"Cases, headphones, and more","text":"Accessories","url":"/b/ref=nav_shopall_k_phone_acc?ie=UTF8&node=9425691011"}]},{"text":"Content and Services","columnBreak":"1","items":[{"text":"Digital Music","url":"/MP3-Music-Download/b/ref=nav_shopall_k_phone_music?ie=UTF8&node=163856011"},{"text":"Amazon Cloud Drive","url":"/clouddrive/home/ref=nav_shopall_k_phone_cd"},{"text":"Amazon Instant Video","url":"/Instant-Video/b/ref=nav_shopall_k_phone_aiv?ie=UTF8&node=2858778011"}]}],"image":{"width":85,"src":"http://g-ecx.images-amazon.com/images/G/01/gno/icons/GNO-flyout-firephone_85x60._V350217003_.jpg","height":60}}}},"AutomotiveIndustrialPanel":{"promoID":"desktop-shopall-automotive-industrial","template":{"name":"itemList","data":{"text":"Automotive & Industrial","items":[{"text":"Automotive","items":[{"text":"Automotive Parts & Accessories","url":"/automotive-auto-truck-replacements-parts/b/ref=nav_shopall_apa?ie=UTF8&node=15684181"},{"text":"Automotive Tools & Equipment","url":"/Tools-Equipment-Automotive/b/ref=nav_shopall_ate?ie=UTF8&node=15706941"},{"text":"Car/Vehicle Electronics & GPS","url":"/b/ref=nav_shopall_ceg?ie=UTF8&node=3248684011"},{"text":"Tires & Wheels","url":"/b/ref=nav_shopall_wt?ie=UTF8&node=15706571"},{"text":"Motorcycle & Powersports","url":"/Motorcycle-ATV-Automotive/b/ref=nav_shopall_matv?ie=UTF8&node=346333011"}]},{"text":"Industrial & Scientific","items":[{"text":"Industrial Supplies","url":"/industrial-scientific-supplies/b/ref=nav_shopall_ind_sup?ie=UTF8&node=16310091"},{"text":"Lab & Scientific","url":"/Lab-Scientific-Supplies/b/ref=nav_shopall_ind_lab?ie=UTF8&node=317970011"},{"text":"Janitorial","url":"/b/ref=nav_shopall_ind_jan?ie=UTF8&node=317971011"},{"text":"Safety","url":"/b/ref=nav_shopall_ind_saf?ie=UTF8&node=318135011"}]}]}}},"CloudDrivePanel":{"promoID":"desktop-shopall-cloud-drive","template":{"name":"itemList","data":{"text":"Amazon Cloud Drive","items":[{"text":"Amazon Cloud Drive","items":[{"subtext":"Secure storage for photos and more","text":"About Cloud Drive","url":"/clouddrive/home/ref=nav_shopall_acd_about"},{"subtext":"For desktop, iOS, and Android","text":"Download the Free Apps","url":"/clouddrive/home/ref=nav_shopall_acd_freeapps#download-section"},{"subtext":"Free for Prime members","text":"Unlimited Photo Storage","url":"/clouddrive/primephotos/ref=nav_shopall_acd_prime"},{"subtext":"Everyone starts with 5 GB free","text":"Plans and Pricing","url":"/clouddrive/pricing/ref=nav_shopall_acd_pricing"},{"subtext":"View and manage your digital content","text":"Sign In","url":"/clouddrive/ref=nav_shopall_acd_urc?_encoding=UTF8&sf=1"}]}]}}},"GroceryHealthBeautyHorizPanel":{"promoID":"desktop-shopall-grocery-health-beauty-horiz","template":{"name":"itemList","data":{"text":"Beauty, Health & Grocery","items":[{"text":"Grocery & Wine","items":[{"text":"Grocery & Gourmet Food","url":"/grocery-breakfast-foods-snacks-organic/b/ref=nav_shopall_gro?ie=UTF8&node=16310101"},{"text":"Natural & Organic","url":"/Natural-Organic-Grocery/b/ref=nav_shopall_nto?ie=UTF8&node=51537011"},{"text":"Gourmet Gifts","url":"/Gourmet-Gifts-Baskets/b/ref=nav_shopall_gourmet_gifts?ie=UTF8&node=2255571011"},{"subtext":"Available in select states","text":"Wine","url":"/Wine-Red-White-Sparkling-Dessert-Rose/b/ref=nav_shopall_wine?ie=UTF8&node=2983386011"},{"subtext":"Available in select cities","text":"AmazonFresh","url":"https://www.amazon.com:443/gp/redirect.html/ref=nav_shopall_fresh?location=https://fresh.amazon.com/&token=28DE5151E2930C25FD313A6DAA6DA31818DA06E4&source=standards"}]},{"text":"Health, Household & Baby","items":[{"text":"Health & Household","url":"/health-personal-care-nutrition-fitness/b/ref=nav_shopall_healthhouse?ie=UTF8&node=3760901"},{"text":"Baby Care","url":"/Baby-Child-Care-Products/b/ref=nav_shopall_babyhealth?ie=UTF8&node=10787321"}]},{"text":"Beauty & Grooming","columnBreak":"1","items":[{"text":"All Beauty","url":"/Beauty-Makeup-Skin-Hair-Products/b/ref=nav_shopall_bty?ie=UTF8&node=3760911"},{"text":"Luxury Beauty","url":"/Luxury-Makeup-Skin-Hair-Beauty-Products/b/ref=nav_shopall_luxury_bty?ie=UTF8&node=7175545011"},{"text":"Men’s Grooming","url":"/Mens-Grooming-Products/b/ref=nav_shopall_men_grooming?ie=UTF8&node=6682399011"}]},{"text":"Amazon Exclusives","items":[{"subtext":"Up to 15% off, free shipping, and more","text":"Subscribe & Save","url":"/b/ref=nav_shopall_subscribe_save?ie=UTF8&node=5856181011"},{"subtext":"Everyday essentials in everyday sizes","text":"Prime Pantry","url":"/b/ref=nav_shopall_prime_pantry?ie=UTF8&node=7301146011"}]}]}}},"ClothingShoesJewelryPanel":{"promoID":"desktop-shopall-clothing-shoes-jewelry","template":{"name":"itemList","data":{"text":"Clothing, Shoes & Jewelry","items":[{"text":"Clothing, Shoes, Jewelry & Watches","items":[{"text":"Women","url":"/b/ref=nav_shopall_sft_women?ie=UTF8&node=7147440011"},{"text":"Men","url":"/b/ref=nav_shopall_sft_men?ie=UTF8&node=7147441011"},{"text":"Girls","url":"/b/ref=nav_shopall_sft_girls?ie=UTF8&node=7147442011"},{"text":"Boys","url":"/b/ref=nav_shopall_sft_boys?ie=UTF8&node=7147443011"},{"text":"Baby","url":"/b/ref=nav_shopall_sft_baby?ie=UTF8&node=7147444011"},{"text":"Luggage","url":"/Luggage-Bags-Travel-Accessories-Clothing/b/ref=nav_shopall_sft_luggage?ie=UTF8&node=15743161"}]},{"text":"More to Explore","items":[{"subtext":"Eligible for Amazon Prime shipping benefits","text":"Shopbop.com","url":"/b/ref=nav_shopall_shopbop?ie=UTF8&node=8209716011"},{"subtext":"Eligible for Amazon Prime shipping benefits","text":"EastDane.com","url":"/b/ref=nav_shopall_eastdane?ie=UTF8&node=8209718011"},{"subtext":"Up to 60% off fashion & lifestyle brands","text":"MYHABIT.com","url":"/b/ref=nav_shopall_myhabit?ie=UTF8&node=8209720011"}]}]}}},"AndroidPanel":{"promoID":"desktop-shopall-android","template":{"name":"itemList","data":{"text":"Appstore for Android","items":[{"text":"Appstore for Android","items":[{"subtext":"Shop over 250,000 apps and games","text":"Apps","url":"/mobile-apps/b/ref=nav_shopall_adr_app?ie=UTF8&node=2350149011"},{"subtext":"Shop new, bestselling, and free games","text":"Games","url":"/b/ref=nav_shopall_adr_gam?ie=UTF8&node=2478844011"},{"subtext":"Get a new paid app for free every day","text":"Free App of the Day","url":"/mobile-apps/b/ref=nav_shopall_adr_free?ie=UTF8&node=2350149011"},{"subtext":"Save up to 20% on apps and games","text":"Amazon Coins","url":"/gp/feature.html/ref=nav_shopall_adr_coins?ie=UTF8&docId=1001166401"},{"subtext":"Install on your Android phone or tablet","text":"Download Amazon Appstore","dividerBefore":"1","url":"/gp/feature.html/ref=nav_shopall_adr_dl?ie=UTF8&docId=1000626391"},{"subtext":"Kindle, Shopping, MP3, IMDb, and more","text":"Amazon Apps","url":"/gp/feature.html/ref=nav_shopall_adr_amz?ie=UTF8&docId=1000645111"},{"subtext":"View your apps and manage your devices","text":"Your Apps and Devices","url":"/gp/mas/your-account/myapps/ref=nav_shopall_adr_yad"}]}]}}},"wishlistContent":{"template":{"name":"itemList","data":{"items":[{"text":"Wish List","items":[{"text":"Create a Wish List","url":"/gp/registry/wishlist/ref=nav_wishlist_create?ie=UTF8&triggerElementID=createList"},{"text":"Save Items from the Web","url":"/gp/registry/wishlist/ref=nav_wishlist_gno_showUWLPromo?ie=UTF8&triggerElementID=showUWLPromo"}]},{"text":"Gifting & Registries","dividerBefore":"1","items":[{"text":"Find a Wish List or Registry","url":"/gp/registry/search/ref=nav_wishlist_find"},{"text":"Find a Gift - New","url":"/gp/gift-finder/ref=nav_wishlist_gf"},{"text":"Friends & Family Gifting","url":"/gp/gift-central/organizer/ref=nav_wishlist_fafgift"},{"text":"Wedding Registry","url":"/gp/wedding/homepage/ref=nav_wishlist_wr"},{"text":"Baby Registry","url":"/gp/registry/baby/ref=nav_wishlist_br"},{"text":"Kids' Birthdays","url":"/gp/toys/birthday/ref=nav_wishlist_kb"},{"text":"Your Hearts (in Fashion)","url":"/gp/yt/newforyou/myactions/ref=nav_wishlist_yt"}]}]}},"wlTriggers":"22704"},"SportsOutdoorsT1Panel":{"promoID":"desktop-shopall-sports-outdoors-t1","template":{"name":"itemList","data":{"text":"Sports & Outdoors","items":[{"text":"Sports","items":[{"text":"Exercise & Fitness","url":"/Exercise-Fitness-Sports-Outdoors/b/ref=nav_shopall_ef?ie=UTF8&node=3407731"},{"text":"Hunting &amp; Fishing","url":"/Hunting-Fishing/b/ref=nav_shopall_hntfsh?ie=UTF8&node=706813011"},{"text":"Athletic Clothing","url":"/Apparel/b/ref=nav_shopall_athcloth?ie=UTF8&node=2206626011"},{"text":"Boating & Water Sports","url":"/Boating-Water-Sports-Outdoors/b/ref=nav_shopall_btwt?ie=UTF8&node=3421331"},{"text":"Team Sports","url":"/Team-Sports-Outdoors/b/ref=nav_shopall_teamsp?ie=UTF8&node=706809011"},{"text":"Fan Shop","url":"/Fan-Shop-Sports-Outdoors/b/ref=nav_shopall_fan?ie=UTF8&node=3386071"},{"text":"Sports Collectibles","url":"/Sports-Collectibles/b/ref=nav_shopall_sprt_cllct?ie=UTF8&node=3250697011"},{"text":"Golf","url":"/Golf-Sports-Outdoors/b/ref=nav_shopall_golf?ie=UTF8&node=3410851"},{"text":"Leisure Sports & Game Room","url":"/Leisure-Sports-Games/b/ref=nav_shopall_sgr?ie=UTF8&node=706808011"},{"text":"All Sports & Outdoors","url":"/sporting-goods/b/ref=nav_shopall_sg?ie=UTF8&node=3375251"}]},{"text":"Outdoors","columnBreak":"1","items":[{"text":"Outdoor Gear","url":"/outdoor-gear/b/ref=nav_shopall_outrec?ie=UTF8&node=706814011"},{"text":"Outdoor Clothing","url":"/Apparel/b/ref=nav_shopall_outcloth?ie=UTF8&node=2206626011"},{"text":"Cycling","url":"/Cycling-Wheel-Sports-Outdoors/b/ref=nav_shopall_bike?ie=UTF8&node=3403201"},{"text":"Action Sports","url":"/Action-Sports-Outdoors/b/ref=nav_shopall_action_sprt?ie=UTF8&node=706812011"}]}]}}},"MoviesMusicGamesPanel":{"promoID":"desktop-shopall-movies-music-games","template":{"name":"itemList","data":{"text":"Movies, Music & Games","items":[{"text":"Movies, Music & Games","items":[{"text":"Movies & TV","url":"/movies-tv-dvd-bluray/b/ref=nav_shopall_mov?ie=UTF8&node=2625373011"},{"text":"Blu-ray","url":"/movies-tv-bluray-bluray3d/b/ref=nav_shopall_blu?ie=UTF8&node=2901953011"},{"text":"Amazon Instant Video","url":"/Instant-Video/b/ref=nav_shopall_atv?ie=UTF8&node=2858778011"},{"text":"CDs & Vinyl","dividerBefore":"1","url":"/music-rock-classical-pop-jazz/b/ref=nav_shopall_cd_vinyl?ie=UTF8&node=5174"},{"text":"Digital Music","url":"/MP3-Music-Download/b/ref=nav_shopall_dmusic?ie=UTF8&node=163856011"},{"text":"Musical Instruments","url":"/musical-instruments-accessories-sound-recording/b/ref=nav_shopall_mi?ie=UTF8&node=11091801"},{"text":"Video Games","dividerBefore":"1","url":"/computer-video-games-hardware-accessories/b/ref=nav_shopall_cvg?ie=UTF8&node=468642"},{"text":"Digital Games","url":"/Game-Downloads/b/ref=nav_shopall_gdown?ie=UTF8&node=979455011"},{"text":"Entertainment Collectibles","dividerBefore":"1","url":"/Entertainment-Collectibles/b/ref=nav_shopall_entcol?ie=UTF8&node=5088769011"},{"text":"Trade In Movies, Music & Games","url":"/Trade-In/b/ref=nav_shopall_trade_in_mmg?ie=UTF8&node=2242532011"}]}]}}},"CreditPanel":{"promoID":"desktop-shopall-credit","template":{"name":"itemList","data":{"text":"Credit & Payment Products","items":[{"text":"Credit Cards","items":[{"subtext":"Special financing on eligible orders","text":"Amazon.com Store Card","url":"/gp/cobrandcard/marketing.html/ref=nav_shopall_credit_plcc?ie=UTF8&plattr=PLCCGNO&pr=conplcc"},{"subtext":"Get rewarded for every purchase","text":"Amazon.com Rewards Visa Card","url":"/gp/cobrandcard/marketing.html/ref=nav_shopall_credit_cbcc?ie=UTF8&place=camp&plattr=CBCCGNO&pr=con321"},{"subtext":"Credit Lines for Businesses","text":"Amazon.com Corporate Credit Line","url":"/gp/cobrandcard/marketing.html/ref=nav_shopall_credit_ccl?ie=UTF8&plattr=GNO_CCL&pr=ibprox"},{"subtext":"Find a credit card that’s right for you","text":"Credit Card Marketplace","url":"/compare-credit-card-offers/b/ref=nav_shopall_credit_ccmp?ie=UTF8&node=3561432011"}]},{"text":"Payment Products","items":[{"subtext":"Use your rewards points for purchases","text":"Shop with Points at Amazon","url":"/earn-spend-rewards-points/b/ref=nav_shopall_credit_swp?ie=UTF8&node=2634438011"},{"subtext":"Learn how to pay in your local currency","text":"Amazon Currency Converter","url":"/Currency-Converter/b/ref=nav_shopall_credit_tfx?ie=UTF8&node=388305011"}]}]}}},"HomeGardenToolsPanel":{"promoID":"desktop-shopall-home-garden-tools","template":{"name":"itemList","data":{"text":"Home, Garden & Tools","items":[{"text":"Home, Garden &amp; Pets","items":[{"text":"Home","url":"/home-garden-kitchen-furniture-bedding/b/ref=nav_shopall_home_storefront?ie=UTF8&node=1055398"},{"text":"Kitchen & Dining","url":"/kitchen-dining/b/ref=nav_shopall_ki?ie=UTF8&node=284507"},{"text":"Furniture & Décor","url":"/furniture-decor-rugs-lamps-beds-tv-stands/b/ref=nav_shopall_fd?ie=UTF8&node=1057794"},{"text":"Bedding & Bath","url":"/bedding-bath-sheets-towels/b/ref=nav_shopall_bb?ie=UTF8&node=1057792"},{"text":"Appliances","url":"/Appliances/b/ref=nav_shopall_ha?ie=UTF8&node=2619525011"},{"text":"Patio, Lawn & Garden","url":"/Patio-Lawn-Garden/b/ref=nav_shopall_lp?ie=UTF8&node=2972638011"},{"text":"Fine Art","url":"/Art/b/ref=nav_shopall_fine_art?ie=UTF8&node=6685269011"},{"text":"Arts, Crafts & Sewing","url":"/Arts-Crafts-Sewing/b/ref=nav_shopall_sch?ie=UTF8&node=2617941011"},{"text":"Pet Supplies","url":"/pet-shops-dogs-cats-hamsters-kittens/b/ref=nav_shopall_ps?ie=UTF8&node=2619533011"},{"text":"Wedding Registry","dividerBefore":"1","url":"/gp/wedding/homepage/ref=gno_listpop_wr/ref=nav_shopall_weddingregistry"}]},{"text":"Tools, Home Improvement","columnBreak":"1","items":[{"text":"Home Improvement","url":"/Tools-and-Home-Improvement/b/ref=nav_shopall_hi2?ie=UTF8&node=228013"},{"text":"Power & Hand Tools","url":"/Power-Tools-and-Hand-Tools/b/ref=nav_shopall_hi?ie=UTF8&node=328182011"},{"text":"Lamps & Light Fixtures","url":"/Lighting-and-Ceiling-Fans/b/ref=nav_shopall_llf?ie=UTF8&node=495224"},{"text":"Kitchen & Bath Fixtures","url":"/Kitchen-and-Bath-Fixtures/b/ref=nav_shopall_kbf?ie=UTF8&node=3754161"},{"text":"Hardware","url":"/Hardware-Locks-and-Fasteners/b/ref=nav_shopall_hdw?ie=UTF8&node=511228"},{"text":"Home Automation","url":"/home-automation-smarthome/b/ref=nav_shopall_homaut?ie=UTF8&node=6563140011"}]}]}}},"kindleContent":{"template":{"name":"itemList","data":{"items":[{"text":"Fire Phone","url":"/dp/B00EOE0WKQ/ref=nav_shopall_k_phone_top","panelKey":"FirePhonePanel","image":{"width":85,"src":"http://g-ecx.images-amazon.com/images/G/01/gno/icons/GNO-flyout-firephone_85x60._V350217003_.jpg","height":60}},{"text":"Fire TV","url":"/dp/B00CX5P8FC/ref=nav_shopall_k_tv_top","panelKey":"FireTvPanel","image":{"width":85,"src":"http://g-ecx.images-amazon.com/images/G/01/gno/icons/GNO-flyout-firetv_85x60._V350217003_.jpg","height":60}},{"text":"Fire Tablets","url":"/dp/B00DOPNO4M/ref=nav_shopall_k_kdpth_top","panelKey":"FireTabletPanel","image":{"width":85,"src":"http://g-ecx.images-amazon.com/images/G/01/gno/icons/GNO-flyout-tablets_85x60._V350217003_.jpg","height":60}},{"text":"Kindle","url":"/dp/B00JG8GOWU/ref=nav_shopall_k_kdppnwn_top","panelKey":"ReaderPanel","image":{"width":85,"src":"http://g-ecx.images-amazon.com/images/G/01/gno/icons/GNO-flyout-ereaders_85x60._V350217003_.jpg","height":60}},{"text":"Manage Your Content & Devices","decorate":"carat","dividerBefore":"1","url":"/mn/dcw/myx.html/ref=nav_shopall_k_nav_kindle_myk"}]}}},"yourAccountContent":{"template":{"name":"itemList","data":{"items":[{"text":"Your Account","items":[{"text":"Account","url":"https://www.amazon.com/gp/css/homepage.html/ref=nav_youraccount_ya"},{"text":"Orders","url":"https://www.amazon.com/gp/css/order-history/ref=nav_youraccount_orders","id":"nav_prefetch_yourorders"},{"text":"Wish List","url":"/gp/registry/wishlist/ref=nav_youraccount_wl?ie=UTF8&requiresSignIn=1"},{"text":"Recommendations","url":"/gp/yourstore/ref=nav_youraccount_recs"},{"text":"Subscribe & Save Items","url":"https://www.amazon.com/gp/subscribe-and-save/manager/viewsubscriptions/ref=nav_youraccount_sns"},{"text":"Prime Membership","url":"/gp/subs/primeclub/account/homepage.html/ref=nav_youraccount_prime"}]},{"text":"Your Library","dividerBefore":"1","items":[{"text":"Manage Content & Devices","url":"/mn/dcw/myx.html/ref=nav_youraccount_myk"},{"text":"Prime Music","url":"/b/ref=nav_youraccount_pmu?ie=UTF8&node=8335758011"},{"text":"Music Library","url":"/gp/dmusic/mp3/player/ref=nav_youraccount_cldplyr"},{"text":"Cloud Drive","url":"/clouddrive/ref=nav_youraccount_clddrv"},{"url":"/Prime-Instant-Video/b/ref=nav_youraccount_piv?ie=UTF8&node=2676882011"},{"text":"Watchlist","url":"/gp/video/watchlist/ref=nav_youraccount_ywl"},{"text":"Video Library","url":"/gp/video/library/ref=nav_youraccount_yvl"},{"text":"Games & Software Library","url":"/gp/swvgdtt/your-account/manage-downloads.html/ref=nav_youraccount_gsl"},{"text":"Android Apps & Devices","url":"/gp/mas/your-account/myapps/ref=nav_youraccount_aad"}]}]}},"signInHtml":"<div id=\"nav-flyout-ya-signin\"><a href=\"https://www.amazon.com/ap/signin?_encoding=UTF8&openid.assoc_handle=usflex&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0&openid.pape.max_auth_age=0&openid.return_to=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fyourstore%2Fhome%3Fie%3DUTF8%26ref_%3Dnav_signin\" rel=\"nofollow\" class=\"nav-action-button\"><span class=\"nav-action-inner\">\n Sign in\n </span></a><div id=\"nav-flyout-ya-newCust\" class=\"nav_pop_new_cust\">\n New customer?\n <a href=\"https://www.amazon.com/ap/register?_encoding=UTF8&openid.assoc_handle=usflex&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0&openid.pape.max_auth_age=0&openid.return_to=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fyourstore%2Fhome%3Fie%3DUTF8%26ref_%3Dnav_newcust\" rel=\"nofollow\" class=\"nav-a\">\n Start here.\n </a></div></div>"},"BooksPanel":{"promoID":"desktop-shopall-books","template":{"name":"itemList","data":{"text":"Books & Audible","dividerBefore":"1","items":[{"text":"Books","items":[{"text":"Books","url":"/books-used-books-textbooks/b/ref=nav_shopall_bo?ie=UTF8&node=283155"},{"text":"Kindle Books","url":"/Kindle-eBooks/b/ref=nav_shopall_k_kbo?ie=UTF8&node=1286228011"},{"text":"Children's Books","url":"/Childrens-Books/b/ref=nav_shopall_cbo?ie=UTF8&node=4"},{"text":"Textbooks","url":"/New-Used-Textbooks-Books/b/ref=nav_shopall_tb?ie=UTF8&node=465600"},{"text":"Magazines","url":"/magazines/b/ref=nav_shopall_magazines?ie=UTF8&node=599858"},{"text":"Sell Us Your Books","dividerBefore":"1","url":"/Sell-Books/b/ref=nav_shopall_us_ti_tb_0513?ie=UTF8&node=2205237011"}]},{"text":"Audible Audiobooks","items":[{"subtext":"Get to know Audible","text":"Audible Membership","url":"/gp/audible/signup/display.html/ref=nav_shopall_aud_mem"},{"text":"Audible Audiobooks & More","url":"/b/ref=nav_shopall_aud_bks?ie=UTF8&node=2402172011"},{"subtext":"Switch between reading and listening","text":"Whispersync for Voice","url":"/b/ref=nav_shopall_aud_wfv?ie=UTF8&node=5744819011"}]}]}}},"DigitalMusicPanel":{"promoID":"desktop-shopall-digital-music","template":{"name":"itemList","data":{"text":"Digital Music","items":[{"text":"Digital Music","items":[{"text":"Digital Music Store","url":"/MP3-Music-Download/b/ref=nav_shopall_digi_str?ie=UTF8&node=163856011"},{"text":"Prime Music","url":"/b/ref=nav_shopall_prime_music?ie=UTF8&node=8335758011"},{"text":"Best Sellers","url":"/Best-Sellers-MP3-Downloads/zgbs/dmusic/ref=nav_shopall_mp3_best_sellers"},{"text":"New Releases","url":"/New-Future-Releases-MP3-Downloads/b/ref=nav_shopall_mp3_new_releases?ie=UTF8&node=307026011"},{"text":"Deals","url":"/MP3-Deals/b/ref=nav_shopall_mp3_deal?ie=UTF8&node=678551011"},{"subtext":"Amazon Music for your phone","text":"Play your music on the go","dividerBefore":"1","url":"/gp/feature.html/ref=nav_shopall_mp3_cloud_player?ie=UTF8&docId=1001316131"},{"subtext":"Amazon Music for your PC","text":"Play your music at home","url":"/gp/feature.html/ref=nav_shopall_mp3_hm?ie=UTF8&docId=1001422531"}]}]}}},"InstantVideoPanel":{"promoID":"desktop-shopall-instant-video","template":{"name":"itemList","data":{"text":"Unlimited Instant Videos","items":[{"text":"Unlimited Instant Videos","items":[{"subtext":"All movies and TV shows","text":"Amazon Instant Video","url":"/Instant-Video/b/ref=nav_shopall_aiv?ie=UTF8&node=2858778011"},{"subtext":"Unlimited streaming of movies and TV shows","text":"Prime Instant Video","url":"/Prime-Instant-Video/b/ref=nav_shopall_aiv_piv?ie=UTF8&node=2676882011"},{"subtext":"Rent or buy movies and TV shows","text":"Shop Instant Video","url":"/Shop-Instant-Video/b/ref=nav_shopall_aiv_shop?ie=UTF8&node=7589478011"},{"subtext":"Free music videos, movie and video game trailers, product reviews, and more","text":"Video Shorts","url":"/b/ref=nav_shopall_video_shorts?ie=UTF8&node=9013971011"},{"subtext":"Add videos to watch later","text":"Your Watchlist","dividerBefore":"1","url":"/gp/video/watchlist/ref=nav_shopall_aiv_wlst"},{"subtext":"Your purchases and rentals","text":"Your Video Library","url":"/gp/video/library/ref=nav_shopall_aiv_yvl"},{"subtext":"Tablets, game consoles, TVs and more","text":"Watch Anywhere","url":"/gp/feature.html/ref=nav_shopall_aiv_wtv?ie=UTF8&docId=1001423601"}]}]}}},"cartContent":{"html":"<div id=\"nav-cart-flyout\" class=\"nav-empty nav-flyout-content\"\n data-one=\"{count} item\" data-many=\"{count} items\"><div class=\"nav-dynamic-full\"><div id=\"nav-cart-standard\" class='nav-cart-content'><a href=\"/gp/cart/view.html/ref=nav_flyout_viewcart?ie=UTF8&hasWorkingJavascript=1\" class='nav-cart-title'>Items in your Cart</a><div class='nav-cart-subtitle'></div><div class='nav-cart-items'></div></div><div id='nav-cart-pantry' class='nav-cart-content'\n data-box=\"{count} box\" data-boxes=\"{count} boxes\" \n data-box-filled=\"{pct}% filled\" data-boxes-filled=\"{pct}% filled in current box\"><a href=\"/gp/cart/view.html/ref=nav_flyout_viewcart?ie=UTF8&hasWorkingJavascript=1\" class='nav-cart-title'>Prime Pantry Items</a><div class='nav-cart-subtitle'></div><div class='nav-cart-items'></div></div></div><div class='nav-ajax-message'></div><div class='nav-dynamic-empty'><p class='nav_p nav-bold nav-cart-empty'> Your Shopping Cart is empty.</p><p class='nav_p '> Give it purpose&mdash;fill it with books, DVDs, clothes, electronics, and more.</p><p class='nav_p '> If you already have an account, <a href=\"https://www.amazon.com/ap/signin?_encoding=UTF8&openid.assoc_handle=usflex&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0&openid.pape.max_auth_age=0&openid.return_to=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fyourstore%2Fhome%3Fie%3DUTF8%26ref_%3Dnav_signin_cart\" class=\"nav_a\">sign in</a>.</p></div><div class='nav-ajax-error-msg'><p class='nav_p nav-bold'> There's a problem previewing your cart right now.</p><p class='nav_p '> Check your Internet connection and <a href=\"/gp/cart/view.html/ref=nav_flyout_viewcart?ie=UTF8&hasWorkingJavascript=1\" class=\"nav_a\">go to your cart</a>, or <a href='javascript:void(0);' class='nav_a nav-try-again'>try again</a>.</p></div><div id='nav-cart-footer'><a href=\"/gp/cart/view.html/ref=nav_flyout_viewcart?ie=UTF8&hasWorkingJavascript=1\" id=\"nav-cart-menu-button\" class=\"nav-action-button\"><span class=\"nav-action-inner\">\n View Cart\n <span id='nav-cart-menu-button-count' ><span id='nav-cart-zero'>(<span class='nav-cart-count'>0</span> items)</span><span id='nav-cart-one' style='display: none;'>(<span class='nav-cart-count'>0</span> item)</span><span id='nav-cart-many' style='display: none;'>(<span class='nav-cart-count'>0</span> items)</span></span></span></a></div></div>"},"ReaderPanel":{"promoID":"desktop-shopall_k-reader","template":{"name":"itemList","data":{"text":"Kindle","url":"/dp/B00JG8GOWU/ref=nav_shopall_k_reader_kdppnwn_top","items":[{"text":"Kindle E-readers","items":[{"subtext":"All-new Kindle, now with touch","text":"Kindle","url":"/dp/B00I15SB16/ref=nav_shopall_k_reader_k_ki"},{"subtext":"For reading, tablets can't compete","text":"Kindle Paperwhite","url":"/dp/B00JG8GOWU/ref=nav_shopall_k_reader_k_kp"},{"subtext":"Passionately crafted for readers","text":"Kindle Voyage","url":"/dp/B00IOY8XWQ/ref=nav_shopall_k_reader_k_kv"},{"subtext":"Covers, chargers, sleeves and more","text":"Accessories","url":"/b/ref=nav_shopall_k_reader_k_kacce?ie=UTF8&node=5916440011"}]},{"text":"Kindle Store","items":[{"text":"Kindle Books","url":"/Kindle-eBooks/b/ref=nav_shopall_k_reader_kbo?ie=UTF8&node=1286228011"},{"text":"Newsstand","url":"/gp/digital/fiona/redirect/newsstand/home/ref=nav_shopall_k_reader_knwstnd"},{"subtext":"Unlimited reading & listening, $9.99 a month","text":"Kindle Unlimited","url":"/gp/kindle/ku/sign-up/ui/rw/about/ref=nav_shopall_k_reader_kds"}]},{"text":"Apps & Resources","columnBreak":"1","items":[{"subtext":"For PC, iPad, iPhone, Android, and more","text":"Free Kindle Reading Apps","url":"/gp/feature.html/ref=nav_shopall_k_reader_karl?ie=UTF8&docId=1000493771"},{"subtext":"Read your Kindle books in a browser","text":"Kindle Cloud Reader","url":"https://www.amazon.com:443/gp/redirect.html/ref=nav_shopall_k_reader_kcr?location=https://read.amazon.com/&token=34AD60CFC4DCD7A97D4E2F4A4A7C4149FBEEF236&source=standards"}]}],"image":{"width":85,"src":"http://g-ecx.images-amazon.com/images/G/01/gno/icons/GNO-flyout-ereaders_85x60._V350217003_.jpg","height":60}}}},"FireTabletPanel":{"promoID":"desktop-shopall_k-fire-tablet","template":{"name":"itemList","data":{"text":"Fire Tablets","url":"/dp/B00DOPNO4M/ref=nav_shopall_k_tablet_kdpth_top","items":[{"text":"Fire Tablets","items":[{"subtext":"6\" - The most powerful tablet under $100","text":"Fire HD 6","url":"/dp/B00KC6I06S/ref=nav_shopall_k_tablet_k_hd6"},{"subtext":"7\" - Powerful tablet, endless entertainment ","text":"Fire HD 7","url":"/dp/B00IKPYKWG/ref=nav_shopall_k_tablet_k_hd7"},{"subtext":"Everything kids love. Everything parents want.","text":"Fire HD Kids Edition","url":"/dp/B00LOR524M/ref=nav_shopall_k_tablet_k_hdk"},{"subtext":"7\" - Built for work and play","text":"Kindle Fire HDX","url":"/dp/B00BWYQ9YE/ref=nav_shopall_k_tablet_k_hdx"},{"subtext":"8.9\" - Our most powerful tablet ever","text":"Fire HDX 8.9","url":"/dp/B00HCNHDN0/ref=nav_shopall_k_tablet_k_hdx89"},{"subtext":"Cases, chargers, sleeves and more","text":"Accessories","url":"/b/ref=nav_shopall_k_tablet_k_kaccf?ie=UTF8&node=5916439011"}]},{"text":"Content & Resources","columnBreak":"1","items":[{"text":"Instant Video","url":"/gp/feature.html/ref=nav_shopall_k_tablet_video?ie=UTF8&docId=1000739191"},{"text":"Apps & Games","url":"/b/ref=nav_shopall_k_tablet_apps_games?ie=UTF8&node=3427287011"},{"text":"MP3 Downloads","url":"/gp/feature.html/ref=nav_shopall_k_tablet_music?ie=UTF8&docId=1000825251"},{"text":"Kindle Books","url":"/Kindle-eBooks/b/ref=nav_shopall_k_tablet_books?ie=UTF8&node=154606011"},{"text":"Newsstand","url":"/gp/digital/fiona/redirect/newsstand/home/ref=nav_shopall_k_tablet_knwstnd"},{"text":"Audible Audiobooks","url":"/b/ref=nav_shopall_k_tablet_aud?ie=UTF8&node=7258776011"},{"text":"Amazon Cloud Drive","url":"/clouddrive/home/ref=nav_shopall_k_tablet_cd"}]}],"image":{"width":85,"src":"http://g-ecx.images-amazon.com/images/G/01/gno/icons/GNO-flyout-tablets_85x60._V350217003_.jpg","height":60}}}},"ToysKidsBabyPanel":{"promoID":"desktop-shopall-toys-kids-baby","template":{"name":"itemList","data":{"text":"Toys, Kids & Baby","items":[{"text":"Toys, Kids & Baby","items":[{"text":"Toys & Games","url":"/toys/b/ref=nav_shopall_tg?ie=UTF8&node=165793011"},{"text":"Baby","url":"/baby-car-seats-strollers-bedding/b/ref=nav_shopall_ba?ie=UTF8&node=165796011"},{"text":"Video Games for Kids","url":"/Kids-Family/b/ref=nav_shopall_cvg?ie=UTF8&node=471306"},{"subtext":"20% off diapers, free shipping and more","text":"Amazon Mom","url":"/gp/mom/signup/ref=nav_shopall_mom"},{"text":"Baby Registry","url":"/gp/registry/baby/ref=nav_shopall_babyreg"},{"text":"Kids’ Birthdays","url":"/gp/toys/birthday/ref=nav_shopall_kidsbirthdays"}]},{"text":"Clothing & Shoes","items":[{"text":"For Girls","url":"/b/ref=nav_shopall_toys_girls?ie=UTF8&node=7147442011"},{"text":"For Boys","url":"/b/ref=nav_shopall_toys_boys?ie=UTF8&node=7147443011"},{"text":"For Baby","url":"/b/ref=nav_shopall_toys_baby?ie=UTF8&node=7147444011"}]}]}}},"templates":{"asin-promo":"<a href='<#=destination #>' class='nav_asin_promo'> <img src='<#=image #>' class='nav_asin_promo_img'/> <span class='nav_asin_promo_headline'><#=headline #></span> <span class='nav_asin_promo_info'> <span class='nav_asin_promo_title'><#=productTitle #></span> <span class='nav_asin_promo_title2'><#=productTitle2 #></span> <span class='nav_asin_promo_price'><#=price #></span> </span> <span class='nav_asin_promo_button nav-sprite'><#=button #></span></a>","itemList":"<# var hasColumns = (function () { var checkColumns = function (_items) { if (!_items) { return false; } for (var i=0; i<_items.length; i++) { if (_items[i].columnBreak || (_items[i].items && checkColumns(_items[i].items))) { return true; } } return false; }; return checkColumns(items);}()); #><# if(hasColumns) { #> <div class='nav-column'><# } #><# var renderItems = function(items) { #> <# jQuery.each(items, function (i, item) { #> <# if(hasColumns && item.columnBreak) { #> </div><div class='nav-column'> <# } #> <# if(item.dividerBefore) { #> <div class='nav-divider'></div> <# } #> <# if(item.text || item.content) { #> <# if(item.url) { #> <a href='<#=item.url #>' class='nav-link <# } else {#> <span class=' <# } #> <# if(item.panelKey) { #> nav-hasPanel <# } #> <# if(item.items) { #> nav-title <# } #> <# if(item.decorate == 'carat') { #> nav-carat <# } #> nav-item' <#if(item.id) { #> id='<#=item.id #>' <# } #> <# if(item.panelKey) { #> data-nav-panelkey='<#=item.panelKey #>' <# } #> <# if(item.subtextKey) { #> data-nav-subtextkey='<#=item.subtextKey #>' <# } #> <# if(item.image && item.image.height > 16) { #> style='line-height:<#=item.image.height #>px;' <# } #> > <# if(item.decorate == 'carat') { #> <i class=\"nav-icon\"></i> <# } #> <# if(item.image && item.image.src) { #> <img class='nav-image' src='<#=item.image.src #>' style='height:<#=item.image.height #>px; width:<#=item.image.width #>px;' /> <# } #> <# if(item.text) { #> <span class='nav-text'><#=item.text#></span> <# } else if (item.content) { #> <span class='nav-content'><# jQuery.each(item.content, function (j, cItem) { #><# if(cItem.url && cItem.text) { #><a href='<#=cItem.url #>' class='nav-a'><#=cItem.text #></a><# } else if (cItem.text) { #><#=cItem.text#><# } #><# }); #></span> <# } #> <# if(item.subtext) { #> <span class='nav-subtext'><#=item.subtext #></span> <# } #> <# if(item.url) { #> </a> <# } else {#> </span> <# } #> <# } #> <# if(item.items) { #> <div class='nav-panel'> <# renderItems(item.items); #> </div> <# } #> <# }); #><# }; #><# renderItems(items); #><# if(hasColumns) { #> </div><# } #>","htmlList":" <# jQuery.each(items, function (i, item) { #> <div class='nav-item'> <#=item #> </div> <# }); #>","subnav":"<# if (obj && obj.type === 'vertical') { #> <# jQuery.each(obj.rows, function (i, row) { #> <# if (row.flyoutElement === 'button') { #> <div class='nav_sv_fo_v_button' <#=(row.elementStyle ? 'style=\"' + row.elementStyle + '\"' : '') #>> <a href='<#=row.url #>' class='nav-action-button nav-sprite'> <#=row.text #> </a> </div> <# } else if (row.flyoutElement === 'list' && row.list) { #> <# jQuery.each(row.list, function (j, list) { #> <div class=\"nav_sv_fo_v_column <#=(j === 0) ? 'nav_sv_fo_v_first' : '' #>\"> <ul class='<#=list.elementClass #>'> <# jQuery.each(list.linkList, function (k, link) { #> <# if (k === 0) { link.elementClass += ' nav_sv_fo_v_first'; } #> <li class='<#=link.elementClass #>'> <# if (link.url) { #> <a href='<#=link.url #>' class='nav_a'><#=link.text #></a> <# } else { #> <span class=\"nav_sv_fo_v_span\"><#=link.text #></span> <# } #> </li> <# }); #> </ul> </div> <# }); #> <# } else if (row.flyoutElement === 'link') { #> <# if (row.topSpacer) { #> <div class=\"nav_sv_fo_v_clear\"></div> <# } #> <div class='<#=row.elementClass #>'> <a href='<#=row.url #>' class='nav_sv_fo_v_lmargin nav_a'> <#=row.text #> </a> </div> <# } #> <# }); #><# } else if (obj) { #> <div class='nav_sv_fo_scheduled'> <#= obj #> </div><# } #>","wishlist":"<# jQuery.each(wishlist, function (i, item) { #> <li class='nav_pop_li'> <a href='<#=item.url #>' class='nav_a'> <#=item.name #> </a> <div class='nav_tag'> <!-- TODO this logic should now be in dynamic-wish-list.mi --> <# if(typeof item.count !='undefined') { #> <#= (item.count == 1 ? \"{count} item\" : \"{count} items\") .replace(\"{count}\", item.count) #> <# } #> </div> </li><# }); #>","cart":"<# jQuery.each(items, function (i, item) { #> <div class='nav-cart-item'> <a href='<#=item.url #>' class='nav-cart-item-link'> <img src='<#=item.img #>' class='nav-cart-item-image' /> <span class='nav-cart-item-title'><#=item.name #></span> <# if (item.weight) { #> <span class='nav-cart-item-weight' style='display:none;'> <#= \"Ship weight: {value} {unit}\".replace(\"{value}\", item.weight.value).replace(\"{unit}\", item.weight.unit) #> </span> <# } #> <# if (item.ourPrice) { #> <span class='nav-cart-item-buyingPrice'><#=item.ourPrice #></span> <# } #> <# if (item.scarcityMessage) { #> <span class='<#=item.scarcityClass #>'><#=item.scarcityMessage #></span> <# } #> <span class='nav-cart-item-quantity'> <# if(typeof item.wireless !== 'undefined') { #> <#= \"Items: {count}\".replace(\"{count}\", item.qty) #> <# } else { #> <#= \"Quantity: {count}\".replace(\"{count}\", item.qty) #> <# } #> </span> </a> </div> <# if (i%2==1) { #> <div class='nav-cart-item-break'></div> <# } #><# }); #><div class='nav-cart-item-break'></div>"}}); });
+</script>
+
+ <script type='text/javascript'>
+ window.$Nav && $Nav.declare('config.prefetchUrls', ["http://z-ecx.images-amazon.com/images/G/01/browser-scripts/cartWithAjaxJS/cartWithAjaxJS-264118135._V1_.js","http://z-ecx.images-amazon.com/images/G/01/browser-scripts/tmpMasterDPMergedCSS-US/tmpMasterDPMergedCSS-US-10142221368._V1_.css","https://images-na.ssl-images-amazon.com/images/G/01/authportal/common/images/amazon_logo_no-org_mid._V153387053_.png","https://images-na.ssl-images-amazon.com/images/G/01/authportal/common/images/amznbtn-sprite03._V395592492_.png","https://images-na.ssl-images-amazon.com/images/G/01/authportal/flex/reduced-nav/ap-flex-reduced-nav-2.0._V393733149_.js","https://images-na.ssl-images-amazon.com/images/G/01/authportal/flex/reduced-nav/ap-flex-reduced-nav-2.1._V343920894_.css","https://images-na.ssl-images-amazon.com/images/G/01/browser-scripts/wcs-ya-homepage-beaconized/wcs-ya-homepage-beaconized-3515399030._V1_.js","https://images-na.ssl-images-amazon.com/images/G/01/browser-scripts/wcs-ya-homepage-beaconized/wcs-ya-homepage-beaconized-530192997._V1_.css","https://images-na.ssl-images-amazon.com/images/G/01/browser-scripts/wcs-ya-order-history-beaconized/wcs-ya-order-history-beaconized-207125090._V1_.css","https://images-na.ssl-images-amazon.com/images/G/01/gno/images/general/navAmazonLogoFooter._V169459313_.gif","https://images-na.ssl-images-amazon.com/images/G/01/gno/sprites/global-sprite-32-v4._V319941157_.png","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/common/buttons/sign-in-secure._V192194766_.gif","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/common/login/fwcim._V342128453_.js","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/common/transparent-pixel._V386942464_.gif","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/communities/social/snwicons_v2._V369764580_.png","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/cs/css/images/amznbtn-sprite03._V387356454_.png","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/cs/help/images/spotlight/kindle-family-02b._V354814520_.jpg","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/cs/orders/images/acorn._V192250692_.gif","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/cs/orders/images/amazon-gc-100._V192250695_.gif","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/cs/orders/images/amazon-gcs-100._V192250695_.gif","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/cs/orders/images/btn-close._V192250694_.gif","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/cs/projects/text-trace/texttrace_typ._V353754787_.js","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/cs/ya/images/new-link._V192250664_.gif","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/cs/ya/images/shipment_large_lt._V192250661_.gif"]);
+window.$Nav && $Nav.declare('config.prefetch',function() {
+ var pUrls = window.$Nav.getNow('config.prefetchUrls');
+ if (window.amznJQ) amznJQ.addPL(pUrls);
+ else if (window.P) P.when('A').execute(function (A) { A.preload(pUrls); });
+});
+
+ /* nav-config-asset-injection US::desktop::standard::31406:T1&42812:T1&42994:C::isSecure=0::preload navc-6Pzm2wZ3mdK6eZ2I9QynmRhhg4HXwk+FeheVFR+/bZzD+vZNJFkUE5r8FHQtmci7tYChP3KTxBw= rid-00W9MQFESV00G8KBQT6R seq-267 (Sun Nov 23 01:04:59 2014) **CACHED-BY-NCCC** */
+
+ __auiPreloadIndex = window.__auiPreloadIndex || 0;
+ (window.AmazonUIPageJS ? AmazonUIPageJS : P).when('A').execute("auiPreloadJS_"+(++__auiPreloadIndex), function(A){
+ A.preload("http://z-ecx.images-amazon.com/images/G/01/AUIClients/NavAuiBlackbeltAssets-b30a1c6670bbe3d5385c824f6633d09189ea3e47.min._V2_.js");
+ A.preload("https://images-na.ssl-images-amazon.com/images/G/01/AUIClients/NavAuiBlackbeltAssets-b30a1c6670bbe3d5385c824f6633d09189ea3e47.secure.min._V2_.js");
+ });
+ (window.AmazonUIPageJS ? AmazonUIPageJS : P).when('A').execute("auiPreloadCSS_"+(++__auiPreloadIndex), function(A){
+ A.preload("http://z-ecx.images-amazon.com/images/G/01/AUIClients/NavAuiBlackbeltAssets-cc8372c8e2be5c57edb3a442829fb59e0a0ef6c5.min._V2_.css");
+ A.preload("https://images-na.ssl-images-amazon.com/images/G/01/AUIClients/NavAuiBlackbeltAssets-cc8372c8e2be5c57edb3a442829fb59e0a0ef6c5.secure.min._V2_.css");
+ });
+
+
+ if (window.amznJQ && (typeof window.P !== "object" || !P.AUI_BUILD_DATE)) {
+ AmazonUIPageJS.register("A",function(){
+ return {"preload":amznJQ.addPL};
+ });
+ }
+
+ window.$Nav && $Nav.declare('config.flyoutURL', null);
+ window.$Nav && $Nav.declare('btf.lite');
+ window.amznJQ && amznJQ.declareAvailable('navbarBTFLite');
+ window.$Nav && $Nav.declare('btf.full');
+ window.$Nav && $Nav.declare('btf.exists');
+ window.amznJQ && amznJQ.declareAvailable('navbarBTF');
+ (window.AmazonUIPageJS ? AmazonUIPageJS : P).register('navCF');
+ </script>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <link rel="stylesheet" type="text/css" href="http://z-ecx.images-amazon.com/images/G/01/x-locale/redirect-overlay/redirect-overlay-nav-20140702._V348573361_.css">
+ <!--[if lte IE 9]><link rel="stylesheet" type="text/css" href="http://z-ecx.images-amazon.com/images/G/01/x-locale/redirect-overlay/redirect-overlay-lte-ie9._V336734515_.css"><![endif]-->
+
+
+<script type="text/javascript">
+ window.$Nav && $Nav.when('$').run('INMarketplaceRedirectOverlay',function($) {
+ $.ajax({
+ type: 'POST',
+ url: '/gp/redirection/india.html',
+ data: {
+ path: '/',
+ queryString: '?ie=UTF8\u0026%2AVersion%2A=1\u0026fresh=1\u0026%2Aentries%2A=0',
+ pageType: 'Gateway',
+ referer: ''
+ },
+ success: function(data) {
+ if (data) {
+ $('body').append(data);
+ }
+ }
+ });
+ });
+</script>
+
+
+
+
+
+
+
+
+
+
+ <div id='sidebarhidden' style='display:none;'>
+
+
+ <div class='bestsellers' id='desktop-bestsellers-1'>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div id="bestseller-list-ns_0680TT2BFMMQ5A3XA344_23906_" class="a-section a-spacing-none shogun-widget bestseller-list aui-desktop">
+
+<h3 class="a-text-normal">
+ Top 5 Songs to Sing in the&nbsp;Shower
+</h3>
+
+
+<div class='listRow'>
+ <div class='ranking'>
+ 1
+ </div>
+ <div style='text-align:center'>
+ <a class="a-link-normal a-inline-block" href="/gp/product/B0040GYI6C/ref=br_bsl_pdt-1?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-bestsellers-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1934217002&pf_rd_i=desktop"><img alt="Don&#39;t Stop Believin&#39; [Clean]" src="http://ecx.images-amazon.com/images/I/51iMA%2BovtYL._AC_SX75_.jpg" class="a-dynamic-image product-image" title="Don&#39;t Stop Believin&#39; [Clean]" height="75px" width="75px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51iMA%2BovtYL._AC_SX75_.jpg&quot;:[75,75],&quot;http://ecx.images-amazon.com/images/I/51iMA%2BovtYL._AC_SX150_.jpg&quot;:[149,150],&quot;http://ecx.images-amazon.com/images/I/51iMA%2BovtYL._AC_SX225_.jpg&quot;:[224,225],&quot;http://ecx.images-amazon.com/images/I/51iMA%2BovtYL._AC_SX112.5_.jpg&quot;:[111,112]}"></a>
+ </div>
+</div>
+
+
+<div class='listRow'>
+ <div class='ranking'>
+ 2
+ </div>
+ <div style='text-align:center'>
+ <a class="a-link-normal a-inline-block" href="/gp/product/B001KR5RKA/ref=br_bsl_pdt-2?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-bestsellers-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1934217002&pf_rd_i=desktop"><img alt="Halo" src="http://ecx.images-amazon.com/images/I/513oUEusUxL._AC_SX75_.jpg" class="a-dynamic-image product-image" title="Halo" height="75px" width="75px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/513oUEusUxL._AC_SX225_.jpg&quot;:[225,225],&quot;http://ecx.images-amazon.com/images/I/513oUEusUxL._AC_SX150_.jpg&quot;:[150,150],&quot;http://ecx.images-amazon.com/images/I/513oUEusUxL._AC_SX75_.jpg&quot;:[75,75],&quot;http://ecx.images-amazon.com/images/I/513oUEusUxL._AC_SX112.5_.jpg&quot;:[112,112]}"></a>
+ </div>
+</div>
+
+
+<div class='listRow'>
+ <div class='ranking'>
+ 3
+ </div>
+ <div style='text-align:center'>
+ <a class="a-link-normal a-inline-block" href="/gp/product/B001BHEA6Q/ref=br_bsl_pdt-3?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-bestsellers-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1934217002&pf_rd_i=desktop"><img alt="Jessie&#39;s Girl" src="http://ecx.images-amazon.com/images/I/51OPkX82y2L._AC_SX75_.jpg" class="a-dynamic-image product-image" title="Jessie&#39;s Girl" height="75px" width="75px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51OPkX82y2L._AC_SX75_.jpg&quot;:[75,75],&quot;http://ecx.images-amazon.com/images/I/51OPkX82y2L._AC_SX112.5_.jpg&quot;:[112,112],&quot;http://ecx.images-amazon.com/images/I/51OPkX82y2L._AC_SX225_.jpg&quot;:[224,225],&quot;http://ecx.images-amazon.com/images/I/51OPkX82y2L._AC_SX150_.jpg&quot;:[149,150]}"></a>
+ </div>
+</div>
+
+
+<div class='listRow'>
+ <div class='ranking'>
+ 4
+ </div>
+ <div style='text-align:center'>
+ <a class="a-link-normal a-inline-block" href="/gp/product/B0043ZBIQI/ref=br_bsl_pdt-4?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-bestsellers-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1934217002&pf_rd_i=desktop"><img alt="Just The Way You Are" src="http://ecx.images-amazon.com/images/I/41IjECMLsQL._AC_SX75_.jpg" class="a-dynamic-image product-image" title="Just The Way You Are" height="75px" width="75px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41IjECMLsQL._AC_SX150_.jpg&quot;:[149,150],&quot;http://ecx.images-amazon.com/images/I/41IjECMLsQL._AC_SX225_.jpg&quot;:[224,225],&quot;http://ecx.images-amazon.com/images/I/41IjECMLsQL._AC_SX75_.jpg&quot;:[75,75],&quot;http://ecx.images-amazon.com/images/I/41IjECMLsQL._AC_SX112.5_.jpg&quot;:[111,112]}"></a>
+ </div>
+</div>
+
+
+<div class='listRow'>
+ <div class='ranking'>
+ 5
+ </div>
+ <div style='text-align:center'>
+ <a class="a-link-normal a-inline-block" href="/gp/product/B00137KEZ0/ref=br_bsl_pdt-5?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-bestsellers-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1934217002&pf_rd_i=desktop"><img alt="Since U Been Gone" src="http://ecx.images-amazon.com/images/I/51KPQBpxeEL._AC_SX75_.jpg" class="a-dynamic-image product-image" title="Since U Been Gone" height="75px" width="75px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51KPQBpxeEL._AC_SX112.5_.jpg&quot;:[112,112],&quot;http://ecx.images-amazon.com/images/I/51KPQBpxeEL._AC_SX150_.jpg&quot;:[150,150],&quot;http://ecx.images-amazon.com/images/I/51KPQBpxeEL._AC_SX75_.jpg&quot;:[75,75],&quot;http://ecx.images-amazon.com/images/I/51KPQBpxeEL._AC_SX225_.jpg&quot;:[225,225]}"></a>
+ </div>
+</div>
+
+
+<div class='seemore'>
+<a class="a-link-normal" href="/b/ref=br_bsl_smr?_encoding=UTF8&node=163856011&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-bestsellers-1&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1934217002&pf_rd_i=desktop">
+ More Digital Music
+</a>
+</div>
+
+</div>
+
+ </div>
+ <hr class='slot-hr desktop-bestsellers-1-hr' />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div class='bestsellers' id='desktop-bestsellers-2'>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div id="bestseller-list-ns_1YKXSPD1ZGMRSSFZNWQF_6260_" class="a-section a-spacing-none shogun-widget bestseller-list aui-desktop">
+
+<h3 class="a-text-normal">
+ Most Wished in Video&nbsp;Games
+</h3>
+
+
+<div class='listRow'>
+ <div class='ranking'>
+ 1
+ </div>
+ <div style='text-align:center'>
+ <a class="a-link-normal a-inline-block" href="/gp/product/B00BGA9WK2/ref=br_bsl_pdt-1?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-bestsellers-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970069562&pf_rd_i=desktop"><img alt="PlayStation 4 Console" src="http://ecx.images-amazon.com/images/I/41omR-LTnaL._AC_SX75_.jpg" class="a-dynamic-image product-image" title="PlayStation 4 Console" height="95px" width="75px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41omR-LTnaL._AC_SX225_.jpg&quot;:[286,225],&quot;http://ecx.images-amazon.com/images/I/41omR-LTnaL._AC_SX150_.jpg&quot;:[191,150],&quot;http://ecx.images-amazon.com/images/I/41omR-LTnaL._AC_SX75_.jpg&quot;:[95,75],&quot;http://ecx.images-amazon.com/images/I/41omR-LTnaL._AC_SX112.5_.jpg&quot;:[142,112]}"></a>
+ </div>
+</div>
+
+
+<div class='listRow'>
+ <div class='ranking'>
+ 2
+ </div>
+ <div style='text-align:center'>
+ <a class="a-link-normal a-inline-block" href="/gp/product/B00GDQ0RMG/ref=br_bsl_pdt-2?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-bestsellers-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970069562&pf_rd_i=desktop"><img alt="Fire TV Stick" src="http://ecx.images-amazon.com/images/I/41ZIGnYLqeL._AC_SX75_.jpg" class="a-dynamic-image product-image" title="Fire TV Stick" height="75px" width="75px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/41ZIGnYLqeL._AC_SX75_.jpg&quot;:[75,75],&quot;http://ecx.images-amazon.com/images/I/41ZIGnYLqeL._AC_SX150_.jpg&quot;:[150,150],&quot;http://ecx.images-amazon.com/images/I/41ZIGnYLqeL._AC_SX225_.jpg&quot;:[225,225],&quot;http://ecx.images-amazon.com/images/I/41ZIGnYLqeL._AC_SX112.5_.jpg&quot;:[112,112]}"></a>
+ </div>
+</div>
+
+
+<div class='listRow'>
+ <div class='ranking'>
+ 3
+ </div>
+ <div style='text-align:center'>
+ <a class="a-link-normal a-inline-block" href="/gp/product/B00DD0B0BM/ref=br_bsl_pdt-3?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-bestsellers-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970069562&pf_rd_i=desktop"><img alt="Super Smash Bros. - Nintendo Wii U" src="http://ecx.images-amazon.com/images/I/61Yaq8PacBL._AC_SX75_.jpg" class="a-dynamic-image product-image" title="Super Smash Bros. - Nintendo Wii U" height="107px" width="75px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/61Yaq8PacBL._AC_SX225_.jpg&quot;:[321,225],&quot;http://ecx.images-amazon.com/images/I/61Yaq8PacBL._AC_SX75_.jpg&quot;:[107,75],&quot;http://ecx.images-amazon.com/images/I/61Yaq8PacBL._AC_SX112.5_.jpg&quot;:[160,112],&quot;http://ecx.images-amazon.com/images/I/61Yaq8PacBL._AC_SX150_.jpg&quot;:[214,150]}"></a>
+ </div>
+</div>
+
+
+<div class='listRow'>
+ <div class='ranking'>
+ 4
+ </div>
+ <div style='text-align:center'>
+ <a class="a-link-normal a-inline-block" href="/gp/product/B00KSQHX1K/ref=br_bsl_pdt-4?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-bestsellers-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970069562&pf_rd_i=desktop"><img alt="Halo: The Master Chief Collection" src="http://ecx.images-amazon.com/images/I/51U0B-o4Z1L._AC_SX75_.jpg" class="a-dynamic-image product-image" title="Halo: The Master Chief Collection" height="97px" width="75px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51U0B-o4Z1L._AC_SX112.5_.jpg&quot;:[144,112],&quot;http://ecx.images-amazon.com/images/I/51U0B-o4Z1L._AC_SX150_.jpg&quot;:[193,150],&quot;http://ecx.images-amazon.com/images/I/51U0B-o4Z1L._AC_SX225_.jpg&quot;:[290,225],&quot;http://ecx.images-amazon.com/images/I/51U0B-o4Z1L._AC_SX75_.jpg&quot;:[97,75]}"></a>
+ </div>
+</div>
+
+
+<div class='listRow'>
+ <div class='ranking'>
+ 5
+ </div>
+ <div style='text-align:center'>
+ <a class="a-link-normal a-inline-block" href="/gp/product/B00DD0B1R0/ref=br_bsl_pdt-5?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-bestsellers-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970069562&pf_rd_i=desktop"><img alt="Super Smash Bros. - Nintendo 3DS" src="http://ecx.images-amazon.com/images/I/51R6piddIOL._AC_SX75_.jpg" class="a-dynamic-image product-image" title="Super Smash Bros. - Nintendo 3DS" height="75px" width="75px" data-a-dynamic-image="{&quot;http://ecx.images-amazon.com/images/I/51R6piddIOL._AC_SX150_.jpg&quot;:[150,150],&quot;http://ecx.images-amazon.com/images/I/51R6piddIOL._AC_SX75_.jpg&quot;:[75,75],&quot;http://ecx.images-amazon.com/images/I/51R6piddIOL._AC_SX225_.jpg&quot;:[225,225],&quot;http://ecx.images-amazon.com/images/I/51R6piddIOL._AC_SX112.5_.jpg&quot;:[112,112]}"></a>
+ </div>
+</div>
+
+
+<div class='seemore'>
+<a class="a-link-normal" href="/b/ref=br_bsl_smr?_encoding=UTF8&node=468642&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-bestsellers-2&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1970069562&pf_rd_i=desktop">
+ More Video Games
+</a>
+</div>
+
+</div>
+
+ </div>
+ <hr class='slot-hr desktop-bestsellers-2-hr' />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div class='sidekick' id='desktop-sidekick-3'>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<style>
+ #image-map-ns_0Z5X4P524SK6PEHFZXER_2873_ .cropped-image-map-size {
+ position:relative;
+ overflow:hidden;
+ width:100%;
+ height:170px;
+}
+#image-map-ns_0Z5X4P524SK6PEHFZXER_2873_ .cropped-image-map-center-alignment {
+ text-align:center;
+ position:absolute;
+ top:0;
+ right:-200%;
+ bottom:0;
+ left:-200%;
+}
+#image-map-ns_0Z5X4P524SK6PEHFZXER_2873_ .cropped-image-map-left-alignment {
+ position:absolute;
+ top:0;
+ right:-400%;
+ bottom:0;
+ left:0px;
+ text-align:left;
+}
+#image-map-ns_0Z5X4P524SK6PEHFZXER_2873_ .cropped-image-map-right-alignment {
+ position:absolute;
+ top:0;
+ right:0px;
+ bottom:0;
+ left:-400%;
+ text-align:right;
+}
+.cropped-image-map-size img {
+ max-width: none;
+}
+</style>
+<div id="image-map-ns_0Z5X4P524SK6PEHFZXER_2873_" class="shogun-widget image-map gateway-desktop-link">
+ <div class="cropped-image-map-size">
+ <div class="cropped-image-map-center-alignment">
+ <span style="display:inline-block">
+ <a class="a-link-normal a-inline-block" href="/s/browse/ref=br_imp?_encoding=UTF8&node=7990088011&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-sidekick-3&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1969605462&pf_rd_i=desktop"><img alt="$25 Off Select $100 Makita Tool Orders" src="http://g-ecx.images-amazon.com/images/G/01/img14/tools/sidekick/12720_us-tools_oct30-cdbf-sidekicks_792x510._UX264_SX264_V320917153_.jpg" class="a-dynamic-image" title="$25 Off Select $100 Makita Tool Orders" height="170px" width="264px" data-a-dynamic-image="{&quot;http://g-ecx.images-amazon.com/images/G/01/img14/tools/sidekick/12720_us-tools_oct30-cdbf-sidekicks_792x510._UX528_SX528_V320917153_.jpg&quot;:[340,528],&quot;http://g-ecx.images-amazon.com/images/G/01/img14/tools/sidekick/12720_us-tools_oct30-cdbf-sidekicks_792x510._UX264_SX264_V320917153_.jpg&quot;:[170,264],&quot;http://g-ecx.images-amazon.com/images/G/01/img14/tools/sidekick/12720_us-tools_oct30-cdbf-sidekicks_792x510._V320917153_.jpg&quot;:[510,792],&quot;http://g-ecx.images-amazon.com/images/G/01/img14/tools/sidekick/12720_us-tools_oct30-cdbf-sidekicks_792x510._UX396_SX396_V320917153_.jpg&quot;:[255,396]}"></a>
+ </span>
+ </div>
+ </div>
+</div>
+
+ </div>
+ <hr class='slot-hr desktop-sidekick-3-hr' />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div class='sidekick' id='desktop-sidekick-4'>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<style>
+ #image-map-ns_1DW0FEXMHW15F9G2WYY2_5250_ .cropped-image-map-size {
+ position:relative;
+ overflow:hidden;
+ width:100%;
+ height:170px;
+}
+#image-map-ns_1DW0FEXMHW15F9G2WYY2_5250_ .cropped-image-map-center-alignment {
+ text-align:center;
+ position:absolute;
+ top:0;
+ right:-200%;
+ bottom:0;
+ left:-200%;
+}
+#image-map-ns_1DW0FEXMHW15F9G2WYY2_5250_ .cropped-image-map-left-alignment {
+ position:absolute;
+ top:0;
+ right:-400%;
+ bottom:0;
+ left:0px;
+ text-align:left;
+}
+#image-map-ns_1DW0FEXMHW15F9G2WYY2_5250_ .cropped-image-map-right-alignment {
+ position:absolute;
+ top:0;
+ right:0px;
+ bottom:0;
+ left:-400%;
+ text-align:right;
+}
+.cropped-image-map-size img {
+ max-width: none;
+}
+</style>
+<div id="image-map-ns_1DW0FEXMHW15F9G2WYY2_5250_" class="shogun-widget image-map gateway-desktop-link">
+ <div class="cropped-image-map-size">
+ <div class="cropped-image-map-center-alignment">
+ <span style="display:inline-block">
+ <a class="a-link-normal a-inline-block" href="/b/ref=br_imp?_encoding=UTF8&node=706809011&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-sidekick-4&pf_rd_r=1GM97J2XXNXR8Y322FQC&pf_rd_t=36701&pf_rd_p=1947545282&pf_rd_i=desktop"><img alt="Winter Sports" src="http://g-ecx.images-amazon.com/images/G/01/Gateway/Sidekicks/wintersports._UX264_SX264_V323265474_.jpg" class="a-dynamic-image" title="Winter Sports" height="170px" width="264px" data-a-dynamic-image="{&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Sidekicks/wintersports._UX396_SX396_V323265474_.jpg&quot;:[255,396],&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Sidekicks/wintersports._V323265474_.jpg&quot;:[510,792],&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Sidekicks/wintersports._UX528_SX528_V323265474_.jpg&quot;:[340,528],&quot;http://g-ecx.images-amazon.com/images/G/01/Gateway/Sidekicks/wintersports._UX264_SX264_V323265474_.jpg&quot;:[170,264]}"></a>
+ </span>
+ </div>
+ </div>
+</div>
+
+ </div>
+ <hr class='slot-hr desktop-sidekick-4-hr' />
+
+
+ <div class='displayAd' id='desktop-ad-btf'>
+
+
+
+
+
+<div id="DAr7" class="arid-5bef3e319942462c82d367c9fe5e351d copilot-secure-display" data-arid="5bef3e319942462c82d367c9fe5e351d" style="width:300px;height:280px;"></div><script>(function(w,d,e,o){var i='DAr7';if(w.uDA=w.ues&&w.uet&&w.uex){ues('wb',i,1);uet('bb',i,{wb:1})}var L=function(){o=w.DA;if(!o){o=w.DA=[];e=d.createElement('script');e.src='http://z-ecx.images-amazon.com/images/G/01/browser-scripts/DA-us/DA-us-3484012048._CB320340196_.js';d.getElementsByTagName('head')[0].appendChild(e);}o.push({c:885,a:'site=amazon.us;pt=Gateway;slot=right-7;pid=desktop;bn=3375251;prid=1GM97J2XXNXR8Y322FQC;arid=5bef3e319942462c82d367c9fe5e351d;ef=0.00;ad-sid=0101d03fd327bef75456bdd923a6b844fccfdb0100ad06e83d92bc0b6ff27cba07ea',f:'/aan/2009-09-09/ad/feedback.us/default?pt=RemoteContent&slot=main&pt2=us-external',fi:1,g:'',r:1,v:1,y:'na',u:'http://ad.doubleclick.net/N4215/adj/amzn.us.gw.btf;sz=300x250;oe=ISO-8859-1;u=5bef3e319942462c82d367c9fe5e351d;s=i0;s=i1;s=i2;s=i3;s=i5;s=i6;s=i7;s=i8;s=i9;s=i14;s=m1;s=m4;s=u4;s=u5;s=u12;s=u17;z=2692;s=3072;s=32;s=1009;s=3103;s=3717;s=7250;dc_ref=http%3A%2F%2Fwww.amazon.com;tile=3;ord=1GM97J2XXNXR8Y322FQC?'})};if(d.readyState=='complete') {L();} else {if (typeof w.addEventListener === 'function') { w.addEventListener('load',L,!1)} else {w.attachEvent('onload',L)}}})(window,document)</script>
+ </div>
+
+
+
+
+ </div>
+
+ </div>
+ </div></div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<style type="text/css">
+#rhf_table {
+ border: 1px solid #DDD;
+ border-radius: 5px;
+ border-collapse: separate;
+ width: 100% !important;
+}
+
+#rhf_container {
+ margin-top: 0px;
+}
+
+#rhf_container .rhf-sign-in-button {
+ margin-bottom: 17px;
+}
+
+.rhf_header {
+ text-align:left;
+ padding:10px 10px 0 10px;
+ white-space: nowrap;
+}
+
+#rhfMainHeading {
+ font-family: Arial;
+ font-weight: bold;
+ font-size: 18px;
+ color: #E47911;
+}
+
+.rhf-box-tl {
+ background-position: 0px 0px;
+ background-repeat:no-repeat;
+}
+.rhf-box-tc {
+ background-position: 0px -41px;
+ background-repeat:repeat-x;
+}
+.rhf-box-tr {
+ background-position: 0px -81px;
+ background-repeat:no-repeat;
+}
+.rhf-box-l {
+ background-position: -7px 0px;
+ background-repeat:repeat-y;
+}
+.rhf-box-r {
+ background-position: 9px 0px;
+ background-repeat:repeat-y;
+}
+.rhf-box-br {
+ background-position: 0px -123px;
+ background-repeat:no-repeat;
+}
+.rhf-box-bc {
+ background-position: 0px -139px;
+ background-repeat:repeat-x;
+}
+.rhf-box-bl {
+ background-position: 0px -158px;
+ background-repeat:no-repeat;
+}
+.rhfHistoryWrapper {
+ padding: 0 10px;
+}
+
+
+.rhf_loading_outer {
+ height: 248px;
+ overflow: hidden;
+ position: relative;
+ margin-top: 10px;
+ width: 100% !important;
+}
+.rhf_loading_outer[class] {
+ display: table;
+ position: static;
+}
+.rhf_loading_middle {
+ height: 100%;
+ width: 100% !important;
+}
+.rhf_loading_inner {
+ text-align: center;
+ vertical-align: middle;
+}
+
+
+
+
+
+
+
+/* auiTestSprite is a replacement for swSprite - same image class names apply so we have to wrap the shoveler in a test only class */
+#rhfShovelerWrapper .auiTestWrapper .auiTestSprite {
+ display: inline-block;
+ overflow: hidden;
+ padding: 0;
+ position: relative;
+ vertical-align: middle;
+}
+
+#rhfShovelerWrapper .auiTestWrapper .auiTestSprite span {
+ left: -9999px;
+ position: absolute;
+}
+
+#rhfShovelerWrapper .auiTestSprite {
+ background: url("http://g-ecx.images-amazon.com/images/G/01/nav2/images/sprite-carousel-btns-stars._V375962055_.png") no-repeat scroll 0 0 transparent;
+}
+
+/* Back button and a tag around it */
+#rhfShovelerWrapper .auiTestWrapper .shoveler a.back-button,
+#rhfShovelerWrapper .auiTestWrapper .shoveler a.next-button {
+ width: 36px;
+ height: 39px;
+ margin-top: 60px;
+}
+
+#rhfShovelerWrapper .auiTestWrapper .auiTestSprite.s_shvlBack {
+ width: 36px;
+ height: 39px;
+ background-position: 0 0;
+}
+
+#rhfShovelerWrapper .auiTestWrapper .auiTestSprite.s_shvlBack:hover {
+ background-position: 0 -54px;
+}
+
+#rhfShovelerWrapper .auiTestWrapper .depressed .auiTestSprite.s_shvlBack {
+ background-position: 0 -108px;
+}
+
+#rhfShovelerWrapper .auiTestWrapper .auiTestSprite.s_shvlNext {
+ width: 36px;
+ height: 39px;
+ background-position: -54px 0;
+}
+
+#rhfShovelerWrapper .auiTestWrapper .auiTestSprite.s_shvlNext:hover {
+ background-position: -54px -54px;
+}
+
+#rhfShovelerWrapper .auiTestWrapper .depressed .auiTestSprite.s_shvlNext {
+ background-position: -54px -108px;
+}
+
+.rhfWrapper .shoveler .shoveler-heading {
+ padding-right: 24em;
+}
+
+
+.ybh-not-signed-in-wrapper {
+ width: 100%;
+ margin: 11px 0 14px 20px;
+}
+
+
+.rhfWrapper .shoveler .shoveler-pagination {
+ color: #666;
+ padding: 0;
+ position: absolute;
+ right: 0;
+ top: 0;
+ width:14em;
+ text-align:right;
+ margin-top: -10px;
+}
+
+#rhf_container #yourBrowsingHistoryOnText {
+ display: table-cell;
+ float: left;
+ margin-top: 19px;
+ margin-left: 15px;
+ margin-right: 20px;
+}
+
+#rhf_container #rhf-ybh-turn-on-link {
+ display: table-cell;
+ padding-top: 18px;
+ float: right;
+}
+
+.ybh-not-signed-in-wrapper .ybh-turn-on-wrapper {
+ display: table-cell;
+ padding-top: 30px;
+ float: left;
+}
+
+.ybh-not-signed-in-wrapper .rhf-sign-in-button {
+ display: table-cell;
+ float: right;
+ padding-right: 20px;
+}
+
+.rhfWrapper .history-content {
+ height: 78px;
+ width: 95%;
+ padding-top: 7px;
+ margin: -14px 0 0px 15px;
+}
+
+.rhfWrapper .history-text {
+ width: 150px;
+ display: table-cell;
+ white-space: nowrap;
+}
+
+.rhfWrapper #rhfViewHistoryWrapper {
+ display:table;
+ width: 95px;
+ white-space: normal;
+ overflow: hidden;
+ vertical-align: top;
+}
+
+.rhfWrapper #white-mask {
+ position: absolute;
+ margin-top:-18px;
+ background: white;
+ height :18px;
+ width: 90%;
+}
+
+.rhfWrapper .rhfHistoryWrapper {
+ margin: 0 auto;
+ width: 100%;
+ min-height: 45px;
+ overflow: hidden;
+ display: table-cell;
+}
+
+.rhfWrapper #youViewed {
+ margin-right: 3px;
+ width: 45px; /* this value is overridden in some locales */
+}
+
+.rhfWrapper #rvisColumn {
+ vertical-align: top;
+ height: 61px;
+}
+
+.rhf-sign-in-box {
+ margin-left: 26px;
+}
+
+.rhfWrapper .shoveler #rhfUpsellColumnTitle {
+ color: #666666;
+ font-size: 13px;
+ font-family: Arial;
+ white-space: nowrap;
+ float: left;
+ display: block;
+ margin-top: -10px;
+}
+
+.rhfWrapper #rhfUpsellColumnTitle .upsell_title_pre {
+ display: inline-table;
+ font-weight: bold;
+}
+
+.rhfWrapper #rhfUpsellColumnTitle .upsell_title_post {
+ display: inline-table;
+ white-space: normal;
+ font-size: 15px;
+}
+
+.rhfWrapper #rhfUpsellColumnTitle .rvi_title {
+ white-space: normal;
+}
+
+.rhfWrapper .shoveler-button-wrapper {
+ width:100%;
+ min-height: 310px;
+ margin-bottom: -40px;
+ margin-top: 10px;
+}
+
+.rhfWrapper #YBH_RVI {
+ text-align:left;
+ float: right;
+ padding-top: 9px;
+ margin-right: 14px;
+ margin-bottom: 35px;
+ line-height: 11px;
+}
+
+.ybh-not-signed-in-wrapper .ybh-turn-on-wrapper .youViewedText {
+ padding-right: 24px !important;
+}
+
+.rhfWrapper .rvisRowWrapper {
+ display: table;
+}
+
+.rhfWrapper .rvisRowWrapper .rhf-sign-in-button {
+ display: table-cell;
+ float: right;
+}
+
+#rhf_container .youViewedText {
+ padding-top: 12px;
+ padding-right: 12px;
+ margin-bottom: 10px;
+ line-height: 13px;
+ float: left;
+ border-right: 1px solid #ddd;
+}
+
+#rhf_container #rvisColumn .youViewedText {
+ width: 45px;
+}
+
+
+.rhfWrapper #rhf_content_table {
+ width: 100% !important;
+ table-layout: fixed;
+}
+
+#rhf a {
+ text-decoration: none;
+ color: #004B91;
+}
+
+#rhf a:hover {
+ color: #E47911;
+}
+
+.rhfWrapper .shoveler .start-over {
+ font-size: 11px;
+ font-family: Verdana;
+ color: #666666;
+}
+
+.rhfWrapper .shoveler {
+ position: relative;
+ width: 100%;
+}
+
+.rhfWrapper .shoveler .shoveler-content {
+ padding-top: 10px;
+ margin: 0 35px 0 45px;
+ clear:both;
+}
+
+* html .rhfWrapper .shoveler .rhfHistoryWrapper ul li {
+ display: inline;
+}
+
+#rhfContainer .youViewedText p, #youViewedText p {
+ margin: 0 0 1.25em;
+ line-height: 13px;
+}
+
+#youViewedTextYBH {
+ line-height: 13px;
+ float: left;
+ margin-left: 20px;
+}
+
+.rhf_container .youViewedText p, #youViewedText p, .rhf-sign-in-title {
+ font-family: Arial;
+ font-size: 13px;
+ color: black;
+}
+
+.rhfWrapper td {
+ padding: 0;
+}
+
+.rhf-sign-in-tooltip-new-customer {
+ font-family: Arial;
+ font-size: 11px;
+}
+
+.rhfWrapper .history-content ul {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ overflow: hidden;
+ outline: none;
+}
+
+.rhfWrapper #rhf_view_history_span {
+ display: table-cell;
+ padding-right: 11px;
+ color: rgb(204, 153, 0);
+ font-weight: bold;
+ font-size: 11px;
+ margin-top: -3px;
+}
+
+.rhfWrapper #YBH_RVI p {
+ display: table-cell;
+ font-size: 10px;
+ line-height: 11px;
+ font-family: Arial;
+}
+
+.rhfWrapper .shoveler li p {
+ text-align: left;
+}
+
+.rhfWrapper .shoveler .reason-text {
+ margin-top: 3px;
+}
+
+.rhfWrapper .shoveler ul li.shoveler-progress {
+ background: no-repeat center 45px url('http://g-ecx.images-amazon.com/images/G/01/x-locale/personalization/shoveler/loading-indicator._V192185253_.gif');
+}
+
+#rhf .rhfWrapper .product-link-wrapper a:hover,
+#rhf .rhfWrapper .product-link-wrapper a:active {
+ text-decoration: none;
+ cursor: hand;
+}
+#rhf .rhfWrapper a:hover .title,
+#rhf .rhfWrapper a:active .title {
+ text-decoration: underline;
+}
+
+.rhfWrapper .title {
+ font-family: arial, verdana, sans-serif;
+ font-size: 13px;
+ line-height: 18px;
+ margin-top: 0;
+}
+
+.rhfWrapper .new-release {
+ color: #009B01;
+ font-weight: bold;
+ font-family: verdana, arial, helvetica, sans-serif;
+ font-size: 11px;
+}
+
+.rhfWrapper .byline {
+ font-size: 11px;
+}
+
+.rhf-sign-in-button {
+ border-left: 1px solid #ddd;
+ white-space: nowrap;
+ margin-top: 19px;
+}
+
+.rhf-sign-in-button .action-button, .rhf-sign-in-button a.action-button:hover,
+.rhf-sign-in-button a.action-button:link, .rhf-sign-in-button a.action-button:active {
+ max-width: 230px;
+ text-decoration: none;
+ margin-bottom: 5px;
+ margin-top: 5px;
+ width: 230px;
+ display:block;
+ background-position: -10px -170px;
+ background-image: url("http://g-ecx.images-amazon.com/images/G/01/gno/beacon/BeaconSprite-US-01._V397411194_.png");
+}
+
+
+.rhf-sign-in-button .action-button .action-inner,
+a.action-button:link .action-inner,
+a.action-button:active .action-inner,
+a.action-button:hover .action-inner,
+a.action-button:visited .action-inner {
+ cursor: pointer;
+ background-position: right -170px;
+ display: block;
+ height: 28px;
+ position: relative;
+ color: black;
+ font-size: 12px;
+ line-height: 28px;
+ text-align: center;
+ font-family: "arial","sans-serif";
+ font-weight: bold;
+ text-decoration: none;
+ text-shadow: 0px 1px 0px #ffe093;
+}
+
+.rhfWrapper #rhf_nav_back {
+ margin: 15px 30px 30px 30px;
+ font-size: 13px;
+ font-style: italic;
+ float: left;
+}
+
+.rhfWrapper .rhf-divider-inner {
+ height: 23px;
+ margin-bottom: -6px;
+ background: -moz-linear-gradient(top,#ddd,#f7f7f7 3px,white);
+ background: -webkit-gradient(linear,left top,left bottom,color-stop(0%,#ddd),color-stop(3px,#f7f7f7),color-stop(100%,white));
+ background: -webkit-linear-gradient(top,#ddd,#f7f7f7 3px,white);
+ background: -o-linear-gradient(top,#ddd,#f7f7f7 3px,white);
+ background: -ms-linear-gradient(top,#ddd,#f7f7f7 3px,white);
+ background: linear-gradient(top,#ddd,#f7f7f7 3px,white);
+ filter: none;
+ z-index: 0;
+ zoom: 1;
+}
+
+.rhfWrapper .rhf-divider-inner:after {
+ display: block;
+ width: 100%;
+ height: 44px;
+ background-color: transparent;
+ background: -moz-linear-gradient(left,white,rgba(255,255,255,0),white);
+ background: -webkit-gradient(linear,left top,right top,color-stop(0%,white),color-stop(50%,rgba(255,255,255,0)),color-stop(100%,white));
+ background: -webkit-linear-gradient(left,white,rgba(255,255,255,0),white);
+ background: -o-linear-gradient(left,white,rgba(255,255,255,0),white);
+ background: -ms-linear-gradient(left,white,rgba(255,255,255,0),white);
+ background: linear-gradient(left,white,rgba(255,255,255,0),white);
+ filter: none;
+ z-index: 1;
+ content: "";
+}
+
+#rhf_container #yourBrowsingHistoryOnText p {
+ font-size: 13px;
+ color: #ddd;
+ font-style: italic;
+}
+
+.rhfWrapper .rhf-RVIs a img {
+ border-style: solid;
+ border-width: 1px;
+ border-color: #ddd;
+ box-sizing: border-box;
+ -moz-box-sizing: border-box; /* FireFox */
+ -webkit-box-sizing: border-box; /* Safari */
+}
+
+.rhfWrapper .rhf-RVIs a:hover img {
+ border: 2px solid #E47911;
+}
+
+.rhfWrapper .arrowImg {
+ position: absolute;
+ margin-top: 2px;
+ visibility: hidden;
+}
+
+.rhfWrapper #youViewed #youViewedText {
+ margin-bottom: -13px;
+ padding-top: 12px;
+}
+
+.rhfWrapper #rhf-recs-down-text {
+ padding-top: 13px;
+ font-size: 16px;
+ line-height: 26px;
+}
+
+.rhfWrapper .rhfHistoryWrapper li {
+ float: left;
+ margin-left: 10px;
+ margin-right: 10px;
+ margin-top: 3px;
+ list-style-type: none;
+}
+
+.rhfWrapper .rhfHistoryWrapper .byline {
+ color: #666666;
+}
+
+.rhfWrapper .rating {
+ margin-top: 2px;
+}
+
+.rhfWrapper .binding {
+ color: #666666;
+ font-size: 11px;
+}
+
+.rhfWrapper .shoveler .binding {
+ margin-top: 2px;
+}
+
+.rhfWrapper .shoveler .price {
+ margin-top: 2px;
+ color: #900;
+ font-size: 13px;
+}
+
+.rhfWrapper .shoveler .price .price-suffix {
+ color: #666666;
+}
+.rhfWrapper .shoveler .price-label {
+ color: #888888;
+ font-size: 12px;
+ font-family: Arial, sans-serif;
+ letter-spacing: normal;
+}
+
+.rhfWrapper .shoveler .price .unit {
+ color: #666;
+ font-size: 12px;
+}
+
+.rhfWrapper .shoveler .priceText { font-size: 12px };
+.rhfWrapper .shoveler .price-per-unit {
+ font-size:10px;
+ color:#990000;
+ margin-left:.25em;
+ white-space:nowrap;
+}
+
+.rhfWrapper .shoveler .primeExplanation {
+ color: #666666;
+ font-size: 11px;
+}
+
+.rhfWrapper .RobinBadgeSmall {
+ background-position: -9px -17px;
+ background-repeat: no-repeat;
+ background-size: 125px 50px;
+ display: inline-block;
+ height: 14px;
+ width: 47px;
+}
+
+.rhfWrapper #rhfNoRecsMessage {
+ color: #666666;
+ font-size: 13px;
+ font-family: Arial;
+}
+
+.rhfWrapper .rhfHistoryWrapper #rhfHistoryColumnTitle {
+ color: #666666;
+ font-size: 13px;
+ font-family: Arial;
+}
+
+.rhfWrapper .popoverTrigger {
+ margin-left:.35em;
+ cursor:default;
+}
+
+.rhfWrapper #rhfShovelerWrapper{
+ display: block;
+ height: 310px;
+}
+
+.rhfWrapper #rhfDividerColumn {
+ border-top: 1px solid #ddd;
+}
+* html .rhf {
+ height:1%;
+}
+
+.rhfWrapper #rhfUpsellColumnWrapper {
+ padding: 10px 10px 0 10px;
+}
+.rhfWrapper .shoveler div.disabled-button {
+ opacity: 0.2;
+ -moz-opacity: 0.2;
+ filter: alpha(opacity=20);
+ cursor: default;
+}
+.rhfWrapper .shoveler .disclaim {
+ margin-bottom: 15px;
+}
+
+#rhf_container .carat {
+ font-size: 11px;
+ color: #E47911;
+ line-height: 0;
+ margin: 0 3px 0 0;
+ font-weight: bold;
+}
+
+.rhfWrapper .shoveler ul {
+ height: 300px !important;
+ padding: 0;
+ margin: 0;
+ overflow:hidden;
+ outline: none;
+ font-size: 86%;
+}
+
+.rhfWrapper .shoveler ul li {
+ float: left;
+ margin: 0;
+ padding: 0;
+ width: 155px;
+ height: 300px !important;
+ overflow: hidden;
+}
+
+#rhf_footer {
+ padding: 10px;
+ text-align: left;
+ font-size: 13px;
+}
+.price {
+ color: #990000;
+}
+
+.price-suffix {
+ color: #666666;
+}
+.primeExplanation {
+ font-size: 11px;
+}
+.a-carousel-slide .a-carousel {
+ transform-style: flat;
+}
+.a-carousel-card {
+ white-space: normal;
+}
+
+
+
+
+</style>
+ <br />
+ <div id="rhf" class="copilot-secure-display" style="clear:both">
+
+
+ <table id="rhf_table" align="center" cellpadding="0" cellspacing="0">
+ <tr>
+ <td class="rhf-box-corner-sprite rhf-box-tl" width="15"></td>
+ <td class="rhf-box-corner-sprite rhf-box-tc">
+ <div class="rhf_header"><span id="rhfMainHeading">Your Recently Viewed Items and Featured Recommendations</span>&nbsp;</div>
+ </td>
+ <td class="rhf-box-corner-sprite rhf-box-tr" width="15"></td>
+ </tr>
+ <tr>
+ <td class="rhf-box-sides-sprite rhf-box-l" width="15">&nbsp;</td>
+ <td>
+ <div id="rhf_container" style="display:none;">
+
+
+
+
+
+<div class='rhf_loading_outer'><table class='rhf_loading_middle'><tr><td class='rhf_loading_inner'><img src='http://g-ecx.images-amazon.com/images/G/01/ui/loadIndicators/loadIndicator-large._V192195480_.gif' /></td></tr></table></div>
+
+
+<script type="text/JavaScript">
+
+window.rhf_use_AUI = 1 && typeof P === 'object' && P.AUI_BUILD_DATE;
+
+
+window.rhf_use_AUI_lib = typeof P === 'object' && P.AUI_BUILD_DATE;
+
+if (!window.rhf_use_AUI_lib) {
+
+
+amznJQ.addLogical('p13nlogger', ['http://z-ecx.images-amazon.com/images/G/01/browser-scripts/p13nlogger/p13nlogger-3861958816._V1_.js']);
+amznJQ.addLogical('callOnVisible', ['http://z-ecx.images-amazon.com/images/G/01/browser-scripts/callOnVisible/callOnVisible-66186444._V1_.js']);
+
+var rhfP13NLogger = function(rhfWaitTime, success) {
+ amznJQ.onReady('callOnVisible', function () {
+ var rhfContainer = jQuery("#rhf_container");
+ var action = success ? 'view' : 'ajax_failure';
+ if (typeof rhfContainer.callOnVisible == 'function') {
+ rhfContainer.callOnVisible(function () {
+ var rhfLog = function(eventData) {
+ amznJQ.onReady('p13nlogger', function() {
+ var commonData = {
+ channel: 'recommendations',
+ widget: 'pd_rhf',
+ featureElement: rhfContainer,
+ requestInfoElement: '#rhf0RequestInfo'
+ };
+ p13n.logEvent(jQuery.extend({}, commonData, eventData));
+ });
+ };
+ rhfLog({
+ action: action,
+ page: 1,
+ eventtime: rhfWaitTime,
+ meta: {'isRHFLoaded': success}
+ });
+ }, 0);
+ }
+ });
+};
+
+var rhfRVIP13NLogger = function() {
+ var rviContainer = jQuery("#horizontal-list");
+ var shvlContainer = jQuery('#rhf_upsell_div');
+ var isEventComplete = function() {
+ return shvlContainer.find('.rhf_loading_outer').size() == 0;
+ };
+ var rviLog = function(eventData) {
+ amznJQ.onReady('p13nlogger', function() {
+ var commonData = {
+ channel: 'recommendations',
+ widget: 'pd_rhf',
+ isEventComplete: isEventComplete,
+ featureElement: shvlContainer,
+ requestInfoElement: '#rhf0RequestInfo'
+ };
+ p13n.logAsyncEvent(jQuery.extend({}, commonData, eventData));
+ });
+ };
+ rviContainer.find('.rhf-RVIs').click(function() {
+ rviLog({
+ action: 'rvi_click',
+ page: 1
+ });
+ });
+ rviContainer.find('.clearSelection').click(function() {
+ rviLog({
+ action: 'clear_click',
+ page: 1
+ });
+ });
+};
+
+}
+
+var rhfShovelerBootstrapFunction = function($) { (function($) {
+
+ window.RECS_rhfShvlLoading = false;
+ window.RECS_rhfShvlLoaded = false;
+ window.RECS_rhfInView = false;
+ window.RECS_rhfMetrics = {};
+
+ var rhfWaitTime = 0;
+
+ $("#rhf_container").show();
+ var rhfShvlEventHandler = function () {
+ if ( ! window.RECS_rhfShvlLoaded
+ && ! window.RECS_rhfShvlLoading
+ && $('#rhf_container').size() > 0 ) {
+ var yPosition = $(window).scrollTop() + $(window).height();
+ var rhfElementFound = $('#rhfMainHeading').size();
+ var rhfPosition = $('#rhfMainHeading').offset().top;
+
+ if (/webkit.*mobile/i.test(navigator.userAgent)) {
+ rhfPosition -= $(window).scrollTop();
+ }
+
+ if (rhfElementFound && ( rhfPosition - yPosition < 400 )) {
+ window.RECS_rhfMetrics["start"] = (new Date()).getTime();
+ window.RECS_rhfShvlLoading = true;
+ var handleSuccess = function (html) {
+ $("#rhf_container").html(html);
+ $("#rhf0Shvl").trigger("render-shoveler");
+ window.RECS_rhfShvlLoaded = true;
+ window.RECS_rhfMetrics["loaded"] = (new Date()).getTime();
+ if (!window.rhf_use_AUI_lib) {
+ rhfWaitTime = window.RECS_rhfMetrics["loaded"] - window.RECS_rhfMetrics["inView"];
+ rhfP13NLogger(rhfWaitTime, true);
+ rhfRVIP13NLogger();
+ }
+ //If RHF is loaded, remove the interval.
+ if ("C" === "T1" && window.rhf_trigger_event) {
+ clearInterval(window.rhf_trigger_event);
+ }
+ };
+ var handleError = function () {
+ $("#rhf_container").hide();
+ $("#rhf_error").show();
+ window.RECS_rhfMetrics["loaded"] = "error";
+ if (!window.rhf_use_AUI_lib) {
+ rhfP13NLogger(rhfWaitTime, false);
+ }
+ //If RHF fails to load, remove the interval.
+ if ("C" === "T1" && window.rhf_trigger_event) {
+ clearInterval(window.rhf_trigger_event);
+ }
+ };
+ var ajaxURL = '/gp/history/external/full-rhf-rec-handler.html';
+ var ajaxArgs = {
+ type: "POST",
+ timeout: 10000,
+ data: {
+ shovelerName : 'rhf0',
+ key : 'rhf',
+ numToPreload : '8',
+ isGateway : 1,
+ refTag : 'pd_rhf_gw',
+ parentSession : '178-3863399-4887466',
+ relatedRequestId: '1GM97J2XXNXR8Y322FQC',
+ excludeASIN : '',
+ renderPopover : 0,
+ forceSprites : 0,
+ currentPageType : 'Gateway',
+ currentSubPageType : 'desktop',
+ weblabTriggers : "",
+ // We'll pretend that AUI is disabled everywhere until all AUI carousel bugs are fixed.
+ isAUI : window.rhf_use_AUI ? 1 : 0
+ },
+ dataType: "json",
+ success: function (data, status) {
+ if (typeof(data) === 'object' && data.success && data.html) {
+ handleSuccess(data.html);
+ if (window.rhf_use_AUI) {
+ P.when("jQuery", "a-carousel-framework").execute(function(jQuery, framework){
+ jQuery("#rhf_upsell_div .a-carousel-viewport").addClass("a-carousel-slide");
+ framework.createAll();
+ });
+ }
+ } else {
+ handleError();
+ }
+ },
+ error: function (xhr, status) {
+ handleError();
+ }
+ };
+ if (window.rhf_use_AUI) {
+ P.when("A").execute(function (A) {
+ A.$.ajax(ajaxURL, ajaxArgs);
+ });
+ } else {
+ ajaxArgs['url'] = ajaxURL;
+ $.ajax(ajaxArgs);
+ }
+ }
+ }
+ };
+ var getDuplicateASINList = function() {
+ var cartRecsASINList;
+ if (window.rhf_use_AUI) {
+ var cartCarouselParams = $("div[data-p13n-widget = 'pd_cart_recs']").attr("data-a-carousel-options");
+ if (cartCarouselParams) {
+ cartRecsASINList = JSON.parse(cartCarouselParams).ajax.id_list;
+ //Get first 10 of the List, will get all of them if less than 10
+ return JSON.stringify(cartRecsASINList.slice(0, 10));
+ }
+ } else if (window.RECS_cartRecs_ASINList) {
+ cartRecsASINList = window.RECS_cartRecs_ASINList;
+ return JSON.stringify(cartRecsASINList.slice(0, 10));
+ }
+ return cartRecsASINList;
+ };
+ var rhfInView = function() {
+ if (!window.RECS_rhfInView && $('#rhf_container').size() > 0) {
+ var yPosition = $(window).scrollTop() + $(window).height();
+ var rhfElementFound = ($('#rhfMainHeading').size() > 0);
+ var rhfPosition = $('#rhfMainHeading').offset().top;
+ if (/webkit.*mobile/i.test(navigator.userAgent)) {
+ rhfPosition -= $(window).scrollTop();
+ }
+ if (rhfElementFound && ( rhfPosition - yPosition < 0 )) {
+ window.RECS_rhfInView = true;
+ window.RECS_rhfMetrics["inView"] = (new Date()).getTime();
+ if ("C" === "T1" && window.rhf_inView_event) {
+ clearInterval(window.rhf_inView_event);
+ }
+ }
+ }
+ };
+ window.rhfYBHTurnOn = function () {
+ $.ajax({
+ url: '/gp/history/external/full-rhf-ybh-on-handler.html',
+ type: "POST",
+ timeout: 2000,
+ data: {
+ parentSession : '178-3863399-4887466'
+ },
+ dataType: "text",
+ success: function (data, status) {
+ $("#yourBrowsingHistoryOnText").find('p').html("You don't have any recently viewed Items.");
+ $("#rhf-ybh-turn-on-link").hide();
+ }
+ });
+ };
+ $(document).ready(rhfShvlEventHandler);
+ $(document).ready(rhfInView);
+
+ if ("C" === "T1") {
+ //We met some problems with jQuery scroll function, so we decide to use setInterval for checking RHF triggering status.
+ //https://tt.amazon.com/0026187346
+ window.rhf_trigger_event = setInterval(function () {
+ if (!window.RECS_rhfShvlLoaded
+ && !window.RECS_rhfShvlLoading
+ && $('#rhf_container').size() > 0) {
+ rhfShvlEventHandler();
+ }
+ }, 200);
+
+ window.rhf_inView_event = setInterval(function () {
+ if ( !window.RECS_rhfInView && $('#rhf_container').size() > 0) {
+ rhfInView();
+ }
+ }, 200);
+ } else {
+ $(window).scroll(rhfShvlEventHandler);
+ $(window).scroll(rhfInView);
+ }
+
+})($); }
+if (window.rhf_use_AUI) {
+ //Register a component
+ P.when('jQuery', 'ready').register('rhf-bootstrapper', function($){
+ return {
+ bootstrap : function(){
+ return rhfShovelerBootstrapFunction($);
+ }
+ };
+ });
+ //Use that component after it initializes
+ P.when('rhf-bootstrapper').execute(function(rhfBootstrapper){
+ rhfBootstrapper.bootstrap();
+ });
+} else {
+ amznJQ.onReady(
+ 'jQuery',
+ function () {
+ rhfShovelerBootstrapFunction(jQuery);
+ }
+ );
+}
+</script>
+
+</div><noscript>
+
+
+
+
+
+
+<table width="100%" border="0" cellspacing="0" cellpadding="0" style="margin-top: 10px">
+ <tr valign="top">
+ <td valign="top">
+ <div class="rhfHistoryWrapper">
+ <p>After viewing product detail pages, look here to find an easy way to navigate back to pages you are interested in.</p>
+ </div>
+ </td>
+ </tr>
+ <tr><td>
+ <div style="padding:10px 10px 0 10px; text-align:left;">
+ <b><span style="color: rgb(204, 153, 0); font-weight: bold; font-size: 13px;"> &#8250; </span>
+ <a href="/gp/yourstore/pym/ref=pd_pyml_rhf">View and Edit Your Browsing History</a>
+ </b></div>
+ </td></tr>
+</table>
+</noscript><div id="rhf_error" style="display:none;">
+
+
+
+
+
+
+<table width="100%" border="0" cellspacing="0" cellpadding="0" style="margin-top: 10px">
+ <tr valign="top">
+ <td valign="top">
+ <div class="rhfHistoryWrapper">
+ <p>After viewing product detail pages, look here to find an easy way to navigate back to pages you are interested in.</p>
+ </div>
+ </td>
+ </tr>
+ <tr><td>
+ <div style="padding:10px 10px 0 10px; text-align:left;">
+ <b><span style="color: rgb(204, 153, 0); font-weight: bold; font-size: 13px;"> &#8250; </span>
+ <a href="/gp/yourstore/pym/ref=pd_pyml_rhf">View and Edit Your Browsing History</a>
+ </b></div>
+ </td></tr>
+</table>
+</div><div id="rhf_recs_error" style="display:none;">
+
+
+
+
+<div id="rhf-recs-service-down" align="center" style="padding-top: 24px;">
+ <div id="rhf-recs-down-text">
+ <p>Our recommendations service is currently unavailable. Please refresh this page or try again later.</p>
+ <p>We apologize for the inconvenience!</p>
+ </div>
+</div>
+</div>
+ </td>
+ <td class="rhf-box-sides-sprite rhf-box-r" width="15"></td>
+ </tr>
+ </table>
+ </div>
+ <br />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div id="navFooter"><table class="navFooterVerticalColumn" cellspacing="0" align="center"><tr><td class="navFooterLinkCol"><div class="navFooterColHead">Get to Know Us</div><ul><li class="nav_first"><a href="/gp/redirect.html/ref=footer_careers?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.jobs%2Fgp%2Fredirect.html%3Flocation%3D%252F&amp;source=standards&amp;token=25117E9F01C8F0AB1D649F37EDDD2DEBE047C3A6" class="nav_a">Careers</a></li><li><a href="/gp/redirect.html/ref=gw_m_b_ir?_encoding=UTF8&amp;location=http%3A%2F%2Fphx.corporate-ir.net%2Fphoenix.zhtml%3Fc%3D97664%26p%3Dirol-irhome&amp;source=standards&amp;token=F9CAD8A11D4336B5E0B3C3B089FA066D0A467C1C" class="nav_a">Investor Relations</a></li><li><a href="/gp/redirect.html/ref=gw_m_b_pr?_encoding=UTF8&amp;location=http%3A%2F%2Fphx.corporate-ir.net%2Fphoenix.zhtml%3Fc%3D176060%26p%3Dirol-mediaHome&amp;source=standards&amp;token=F9CAD8A11D4336B5E0B3C3B089FA066D0A467C1C" class="nav_a">Press Releases</a></li><li><a href="/b/ref=gw_m_b_corpres?ie=UTF8&amp;node=13786321" class="nav_a">Amazon and Our Planet</a></li><li><a href="/b/ref=gw_m_b_ourcomm?ie=UTF8&amp;node=13786411" class="nav_a">Amazon in the Community</a></li><li class="nav_last"><a href="http://www.amazon.com/Streaming-Internet-Media-Player/oc/Fire-TV" class="nav_a">Fire TV – Amazon’s Media Player</a></li></ul></td><td class="navFooterColSpacerInner"></td><td class="navFooterLinkCol"><div class="navFooterColHead">Make Money with Us</div><ul><li class="nav_first"><a href="/gp/redirect.html/ref=footer_soa?_encoding=UTF8&amp;location=http%3A%2F%2Fwww.amazonservices.com%2Fcontent%2Fsell-on-amazon.htm%2Fref%3Dfooter_soa%3Fld%3DAZFSSOA&amp;source=standards&amp;token=1E60AB4AC0ECCA00151B45353E21782E539DC601" class="nav_a">Sell on Amazon</a></li><li><a href="http://services.amazon.com/selling-services/benefits.htm?ld=AS" class="nav_a">Sell Your Services on Amazon</a></li><li><a href="https://www.amazon.com:443/gp/redirect.html/ref=footer_sya?_encoding=UTF8&amp;location=https%3A%2F%2Fdeveloper.amazon.com%2Fappsandservices%3Fsc_channel%3Dba%26sc_place%3Damazonhome&amp;source=standards&amp;token=DF0CFA9EECFD0DEDEAE6094981480E48DBC1E112" class="nav_a">Sell Your Apps on Amazon</a></li><li><a href="/gp/redirect.html/ref=footer_affliate?location=http://affiliate-program.amazon.com/&amp;token=020E83530EE2B7F2EDA65ADA51F882D31A4AC155&amp;source=standards" class="nav_a">Become an Affiliate</a></li><li><a href="http://services.amazon.com/content/product-ads-on-amazon.htm/ref=footer_pads?ld=AZPADSFooter" class="nav_a">Advertise Your Products</a></li><li><a href="/gp/seller-account/mm-summary-page.html?ie=UTF8&amp;ld=AZFooterSelfPublish&amp;topic=200260520" class="nav_a">Independently Publish with Us</a></li><li class="nav_last nav_a_carat"><span class="nav_a_carat">&rsaquo;</span><a href="/gp/seller-account/mm-landing.html/ref=footer_seeall?ie=UTF8&amp;ld=AZSOAviewallMakeM" class="nav_a">See all</a></li></ul></td><td class="navFooterColSpacerInner"></td><td class="navFooterLinkCol"><div class="navFooterColHead">Amazon Payment Products</div><ul><li class="nav_first"><a href="/gp/cobrandcard/marketing.html/ref=footer_cbcc?ie=UTF8&amp;place=camp&amp;plattr=CBFOOT&amp;pr=con321" class="nav_a">Amazon.com Rewards Visa Card</a></li><li><a href="/gp/cobrandcard/marketing.html/ref=footer_plcc?ie=UTF8&amp;place=camp&amp;plattr=PLCCFOOT&amp;pr=conplcc" class="nav_a">Amazon.com Store Card</a></li><li><a href="/gp/cobrandcard/marketing.html/ref=footer_ccl?ie=UTF-8&amp;place=camp&amp;plattr=CCLFOOT&amp;pr=ibprox" class="nav_a">Amazon.com Corporate Credit Line</a></li><li><a href="/earn-spend-rewards-points/b/ref=footer_swp?ie=UTF8&amp;node=2634438011" class="nav_a">Shop with Points</a></li><li><a href="/compare-credit-card-offers/b/ref=footer_ccmp?ie=UTF8&amp;node=3561432011" class="nav_a">Credit Card Marketplace</a></li><li class="nav_last"><a href="/Currency-Converter/b/ref=footer_tfx?ie=UTF8&amp;node=388305011" class="nav_a">Amazon Currency Converter</a></li></ul></td><td class="navFooterColSpacerInner"></td><td class="navFooterLinkCol"><div class="navFooterColHead">Let Us Help You</div><ul><li class="nav_first"><a href="https://www.amazon.com/gp/css/homepage.html/ref=footer_ya" class="nav_a">Your Account</a></li><li><a href="/gp/help/customer/display.html/ref=footer_shiprates?ie=UTF8&amp;nodeId=468520" class="nav_a">Shipping Rates & Policies</a></li><li><a href="/gp/prime/ref=footer_prime" class="nav_a">Amazon Prime</a></li><li><a href="/gp/css/returns/homepage.html/ref=hy_f_4" class="nav_a">Returns & Replacements</a></li><li><a href="/gp/digital/fiona/manage/ref=footer_myk" class="nav_a">Manage Your Content and Devices</a></li><li class="nav_last"><a href="/gp/help/customer/display.html/ref=gw_m_b_he?ie=UTF8&amp;nodeId=508510" class="nav_a">Help</a></li></ul></td></tr></table>
+
+<div class="navFooterLine navFooterLogoLine"><a href="/ref=footer_logo"><img src="http://g-ecx.images-amazon.com/images/G/01/gno/images/general/navAmazonLogoFooter._V169459313_.gif" width="126" alt="amazon.com" height="24" border="0" /></a></div>
+
+<div class="navFooterLine navFooterLinkLine navFooterPadItemLine"><ul><li class="nav_first"><a href="http://www.amazon.com.au" class="nav_a">Australia</a></li><li><a href="http://www.amazon.com.br" class="nav_a">Brazil</a></li><li><a href="http://www.amazon.ca/" class="nav_a">Canada</a></li><li><a href="http://www.amazon.cn/" class="nav_a">China</a></li><li><a href="http://www.amazon.fr/" class="nav_a">France</a></li><li><a href="http://www.amazon.de/" class="nav_a">Germany</a></li><li><a href="http://www.amazon.in/" class="nav_a">India</a></li><li><a href="http://www.amazon.it/" class="nav_a">Italy</a></li><li><a href="http://www.amazon.co.jp/" class="nav_a">Japan</a></li><li><a href="http://www.amazon.com.mx/" class="nav_a">Mexico</a></li><li><a href="http://www.amazon.nl/" class="nav_a">Netherlands</a></li><li><a href="http://www.amazon.es/" class="nav_a">Spain</a></li><li class="nav_last"><a href="http://www.amazon.co.uk/" class="nav_a">United Kingdom</a></li></ul></div>
+
+<div class="navFooterLine navFooterLinkLine navFooterDescLine"><table cellspacing="0"><tr>
+<td class="navFooterDescSpacer" style="width: 38.0%"></td>
+<td class="navFooterDescItem"><a href="http://www.6pm.com/" class="nav_a">6pm<br/> <span class="navFooterDescText">Score deals<br/> on fashion brands</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://www.abebooks.com/" class="nav_a">AbeBooks<br/> <span class="navFooterDescText">Rare Books<br/> & Textbooks</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://www.acx.com" class="nav_a">ACX <br/> <span class="navFooterDescText">Audiobook Publishing<br/> Made Easy</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://www.afterschool.com/" class="nav_a">AfterSchool.com<br/> <span class="navFooterDescText">Kids’ Sports, Outdoor<br/> & Dance Gear</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://www.alexa.com/" class="nav_a">Alexa<br/> <span class="navFooterDescText">Actionable Analytics<br/> for the Web</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://fresh.amazon.com" class="nav_a">AmazonFresh<br/> <span class="navFooterDescText">Groceries & More<br/> Right To Your Door</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://amazonlocal.com/" class="nav_a">Amazon Local<br/> <span class="navFooterDescText">Great Local Deals<br/> in Your City</span></a></td>
+<td class="navFooterDescSpacer" style="width: 38.0%"></td>
+</tr>
+<tr><td>&nbsp;</td></tr>
+<tr>
+<td class="navFooterDescSpacer" style="width: 38.0%"></td>
+<td class="navFooterDescItem"><a href="http://www.amazonsupply.com/" class="nav_a">AmazonSupply<br/> <span class="navFooterDescText">Business, Industrial<br/> & Scientific Supplies</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://aws.amazon.com/what-is-cloud-computing/?sc_channel=EL&amp;sc_campaign=amazonfooter" class="nav_a">Amazon Web Services<br/> <span class="navFooterDescText">Scalable Cloud<br/> Computing Services</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://www.audible.com/" class="nav_a">Audible<br/> <span class="navFooterDescText">Download<br/> Audio Books</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://www.beautybar.com/" class="nav_a">BeautyBar.com<br/> <span class="navFooterDescText">Prestige Beauty<br/> Delivered</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://www.bookdepository.com/" class="nav_a">Book Depository<br/> <span class="navFooterDescText">Books With Free<br/> Delivery Worldwide</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://www.bookworm.com" class="nav_a">Bookworm.com<br/> <span class="navFooterDescText">Books For Children<br/> Of All Ages</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://www.casa.com/" class="nav_a">Casa.com<br/> <span class="navFooterDescText">Kitchen, Storage<br/> & Everything Home</span></a></td>
+<td class="navFooterDescSpacer" style="width: 38.0%"></td>
+</tr>
+<tr><td>&nbsp;</td></tr>
+<tr>
+<td class="navFooterDescSpacer" style="width: 38.0%"></td>
+<td class="navFooterDescItem"><a href="https://www.comixology.com/" class="nav_a">ComiXology<br/> <span class="navFooterDescText">Thousands of<br/> Digital Comics</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://www.createspace.com/" class="nav_a">CreateSpace<br/> <span class="navFooterDescText">Indie Print Publishing<br/> Made Easy</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://www.diapers.com/" class="nav_a">Diapers.com<br/> <span class="navFooterDescText">Everything<br/> But The Baby</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://www.dpreview.com/" class="nav_a">DPReview<br/> <span class="navFooterDescText">Digital<br/> Photography</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://www.eastdane.com/welcome" class="nav_a">East Dane<br/> <span class="navFooterDescText">Designer Men's<br/> Fashion</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://www.fabric.com/" class="nav_a">Fabric<br/> <span class="navFooterDescText">Sewing, Quilting<br/> & Knitting</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://www.goodreads.com/" class="nav_a">Goodreads<br/> <span class="navFooterDescText">Book reviews<br/> & recommendations</span></a></td>
+<td class="navFooterDescSpacer" style="width: 38.0%"></td>
+</tr>
+<tr><td>&nbsp;</td></tr>
+<tr>
+<td class="navFooterDescSpacer" style="width: 38.0%"></td>
+<td class="navFooterDescItem"><a href="http://www.imdb.com/" class="nav_a">IMDb<br/> <span class="navFooterDescText">Movies, TV<br/> & Celebrities</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://www.junglee.com/" class="nav_a">Junglee.com<br/> <span class="navFooterDescText">Shop Online<br/> in India</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://kdp.amazon.com/" class="nav_a">Kindle Direct Publishing<br/> <span class="navFooterDescText">Indie Digital Publishing<br/> Made Easy
+</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://www.look.com/" class="nav_a">Look.com<br/> <span class="navFooterDescText">Kids' Clothing<br/> & Shoes</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://www.myhabit.com/" class="nav_a">MYHABIT<br/> <span class="navFooterDescText">Private Fashion<br/> Designer Sales</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://www.shopbop.com/welcome" class="nav_a">Shopbop<br/> <span class="navFooterDescText">Designer<br/> Fashion Brands</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://www.soap.com/" class="nav_a">Soap.com<br/> <span class="navFooterDescText">Health, Beauty &<br/> Home Essentials</span></a></td>
+<td class="navFooterDescSpacer" style="width: 38.0%"></td>
+</tr>
+<tr><td>&nbsp;</td></tr>
+<tr>
+<td class="navFooterDescSpacer" style="width: 38.0%"></td>
+<td class="navFooterDescItem"><a href="http://www.tenmarks.com/" class="nav_a">TenMarks.com<br/> <span class="navFooterDescText">Math Activities<br/> for Kids & Schools</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://www.vine.com/" class="nav_a">Vine.com<br/> <span class="navFooterDescText">Everything<br/> to Live Life Green</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://www.wag.com/" class="nav_a">Wag.com<br/> <span class="navFooterDescText">Everything<br/> For Your Pet</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="/b/ref=footer_wrhsdls?ie=UTF8&amp;node=1267877011" class="nav_a">Warehouse Deals<br/> <span class="navFooterDescText">Open-Box<br/> Discounts</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://www.woot.com/" class="nav_a">Woot!<br/> <span class="navFooterDescText">Discounts and <br/> Shenanigans</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://www.yoyo.com/" class="nav_a">Yoyo.com<br/> <span class="navFooterDescText">A Happy Place<br/> To Shop For Toys</span></a></td>
+<td class="navFooterDescSpacer" style="width: 4%"></td>
+<td class="navFooterDescItem"><a href="http://www.zappos.com/c/top-searches" class="nav_a">Zappos<br/> <span class="navFooterDescText">Shoes &<br/> Clothing</span></a></td>
+<td class="navFooterDescSpacer" style="width: 38.0%"></td>
+</tr>
+</table></div>
+
+<div class="navFooterLine navFooterLinkLine navFooterPadItemLine"><ul><li class="nav_first"><a href="/gp/help/customer/display.html/ref=footer_cou?ie=UTF8&amp;nodeId=508088" class="nav_a">Conditions of Use</a></li><li><a href="/gp/help/customer/display.html/ref=footer_privacy?ie=UTF8&amp;nodeId=468496" class="nav_a">Privacy Notice</a></li><li><a href="/interestbasedads" class="nav_a">Interest-Based Ads</a></li><li class="nav_last">© 1996-2014, Amazon.com, Inc. or its affiliates</li></ul></div>
+</div>
+<!-- whfh-lmLgEXnuFvLi9CCxHBm4eTc1i2O5460Fa+qcqf1aKq82tcH4QY4PSHsFAD3jc2zz rid-1GM97J2XXNXR8Y322FQC -->
+
+<div id="sis_pixel_r2" aria-hidden="true" style="height:1px;"></div><script>(function(a,b){a.attachEvent?a.attachEvent("onload",b):a.addEventListener&&a.addEventListener("load",b,!1)})(window,function(){setTimeout(function(){var el=document.getElementById("sis_pixel_r2");el&&(el.innerHTML='<iframe id="DAsis" src="//s.amazon-adsystem.com/iu3?d=amazon.com&slot=navFooter&a2=0101d03fd327bef75456bdd923a6b844fccfdb0100ad06e83d92bc0b6ff27cba07ea&old_oo=0&cb=1416736845844" width="1" height="1" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>')},300)});</script><script type="text/javascript">
+
+ P.when('A').register('SgHover', function(A) {
+ return function(root) {
+ var self = this,
+ modules = {},
+ dragging = false;
+
+ self.register = function(type, module) {
+ modules[type] = module;
+ };
+
+ if (A.capabilities.touch) {
+ return;
+ }
+
+ A.$(root).each(function(i, r) {
+ A.$(r).delegate('*[data-sghover]', 'mouseenter mouseleave click touchend', function(e) {
+ self.handle.call(this, { data: A.$(this).data('sghover'), event: e, target: this, root: r });
+ });
+ });
+
+ A.$('body').mousedown(function() { dragging = true; }).mouseup(function() { dragging = false; });
+
+ self.handle = function(e) {
+ var module = modules[e.data.type];
+ var asin = e.data.asin;
+ if(dragging || !module || !asin) return;
+
+ if( e.event.type === 'mouseenter' ) {
+ _clearTitles(this);
+ module['in'].call(this, e);
+ } else {
+ module['out'].call(this, e);
+ }
+ }
+ }
+
+ function _clearTitles(e) {
+ A.$(e).find('[title]').each(function(i, v) {
+ A.$(v).removeAttr('title');
+ });
+ }
+ });
+
+ P.when('A','dombinder').register('SgHoverHelper', function(A, binder) {
+ return function(hover, pdb) {
+ var self = this;
+
+ self.register = function(type, $root, callbacks, options) {
+ var showTimer = null,
+ loadTimer = null,
+ product = null,
+ productObserver = null,
+ opts = options || {},
+ showDelay = opts['showDelay'] || 0,
+ loadDelay = opts['loadDelay'] || 0,
+ ctx = binder.init($root);
+
+ hover.register(type, {
+ 'in': function(e) {
+ showTimer = setTimeout(function() { _in(e); }, showDelay);
+ },
+ 'out': function(e) {
+ _unobserve();
+ _hide(e);
+ }
+ });
+
+ if(opts['disablePointerEvents']) {
+ $root.css('pointer-events', 'none');
+ $root.bind("tap click mousedown mouseup mouseenter mouseleave", function(e) {
+ var target;
+ if(document.msElementsFromPoint) {
+ var targets = document.elementFromPoint(e.clientX, e.clientY);
+ if(targets.length > 1) {
+ target = targets[1];
+ }
+ } else {
+ $(this).hide();
+ target = document.elementFromPoint(e.clientX, e.clientY);
+ $(this).show();
+ }
+ $(target).trigger(e.type);
+ return false;
+ });
+ }
+
+ function _in(e) {
+ if(!e.data) {
+ return
+ }
+ _unobserve();
+ product = pdb.get(e.data['asin']);
+ binder.update(ctx, product);
+ _observe(e);
+ loadTimer = setTimeout(function() { _call(callbacks['show'], e); }, loadDelay);
+ }
+
+ function _observe(e) {
+ _unobserve();
+ productObserver = function() {
+ binder.update(ctx, product);
+ if(!product.loading) {
+ _show(e);
+ }
+ }
+ product.pdb_observe(productObserver);
+ }
+
+ function _unobserve() {
+ if(product && productObserver) {
+ product.pdb_unobserve(productObserver);
+ productObserver = null;
+ }
+ }
+
+ function _show(e) {
+ _clearDelays();
+ _call(callbacks['show'], e);
+ }
+
+ function _hide(e) {
+ _clearDelays();
+ _call(callbacks['hide'], e);
+ }
+
+ function _clearDelays() {
+ if(loadTimer) {
+ clearTimeout(loadTimer);
+ loadTimer = null;
+ }
+ if(showTimer) {
+ clearTimeout(showTimer);
+ showTimer = null;
+ }
+ }
+ };
+ };
+
+ function _call(func, data) {
+ if(func) {
+ func(data);
+ }
+ }
+ });
+
+ P.when('A').register('dombinder', function(A) {
+ function _getProp(obj, path) {
+ for (var i = 0, path = path.split('.'), len = path.length; i < len; i++) {
+ obj = obj && obj[path[i]];
+ }
+ return obj;
+ }
+
+ var bindingHandlers = {
+ 'text': {
+ update: function(e, v, d) {
+ A.$(e).text(_getProp(d, v) || '');
+ }
+ },
+ 'trimText': {
+ update: function(e, v, d) {
+ var $e = A.$(e),
+ txt = $e.text();
+ if(txt.length > v) {
+ $e.text(txt.substring(0, v - 4) + '...');
+ }
+ }
+ },
+ 'visible': {
+ update: function(e, v, d) {
+ var negate = false;
+ if(v.charAt(0) === '!') {
+ negate = true;
+ v = v.substring(1);
+ }
+ if(negate != !!_getProp(d, v)) {
+ A.$(e).show();
+ } else {
+ A.$(e).hide();
+ }
+ }
+ },
+ 'css': {
+ init: function(e, v) {
+ var $e = A.$(e),
+ cssState = $e.data('dombcss') || [];
+ cssState[v] = '';
+ $e.data('dombcss', cssState);
+ },
+ update: function(e, v, d) {
+ var $e = A.$(e),
+ cssState = $e.data('dombcss'),
+ oldClass = cssState[v],
+ newClass = _getProp(d, v);
+ if(oldClass !== newClass) {
+ cssState[v] = newClass;
+ if(oldClass) { $e.removeClass(oldClass); }
+ if(newClass) { $e.addClass(newClass); }
+ }
+ }
+ }
+ };
+
+ function _parse(e) {
+ return A.$.map(A.$(e).data('bind').split(','), function(s) {
+ var tmp = s.split(':'),
+ k = A.$.trim(tmp[0]), v = A.$.trim(tmp[1]),
+ b = bindingHandlers[k];
+ if(!b) { return; }
+
+ if(b.init) {
+ b.init(e, v);
+ }
+ return function(data) {
+ b.update(e, v, data);
+ };
+ });
+ }
+
+ return {
+ init: function($root) {
+ var ctx = { $root: $root, bindings: [] };
+ $root.find('[data-bind]').each(function() {
+ A.$.each(_parse(this), function(i, v) {
+ ctx.bindings.push(v);
+ });
+ });
+ return ctx;
+ },
+ update: function(ctx, data) {
+ A.$.each(ctx.bindings, function(i, v) {
+ v(data);
+ });
+ }
+ };
+ });
+
+ P.when('A').register('gw-productdb', function(A) {
+ var db = {};
+
+ return {
+ _add: function(data) {
+ if(data.p) {
+ A.$.each(data.p, function(i, p) {
+ if(!p.asin) return;
+ var entry = db[p.asin] || _new(p.asin);
+ A.$.extend(entry, p, { loading: false, error: false });
+ entry._trigger(p);
+ });
+ }
+ },
+ get: function(asin) {
+ if(asin in db) {
+ return db[asin];
+ } else {
+ return _new(asin);
+ }
+ }
+ };
+
+ function _new(asin) {
+
+ var observers = [];
+
+ db[asin] = {
+ loading: true,
+ pdb_observe: function(handler) {
+ observers.push(handler);
+ },
+ pdb_unobserve: function(handler) {
+ observers = A.$.grep(observers, function(v) {
+ return v != handler;
+ });
+ },
+ _trigger: function() {
+ A.$.each(observers, function() {
+ this.call(db[asin]);
+ });
+ }
+ };
+
+ return db[asin];
+ }
+
+ function _call(func, data) {
+ if(func) {
+ func(data);
+ }
+ }
+ });
+
+</script>
+
+<script type="text/javascript">
+ P.when('SgHover').register('gw-hover-main', function(SgHover) {
+ return new SgHover('#mainContent');
+ });
+
+ P.when('SgHoverHelper', 'gw-hover-main', 'gw-productdb')
+ .register('gw-hover-main-helper', function(SgHoverHelper, gwHover, pdb) {
+ return new SgHoverHelper(gwHover, pdb);
+ });
+</script>
+
+
+<div id="slideout-hover" style="display:none;">
+ <div class="hoverDetailsContent">
+ <div class="details" data-bind="visible: !loading">
+ <div class="title" data-bind="text: title, trimText: 78"></div>
+ <div class="byline" data-bind="text: byline"></div>
+ <i class="a-icon a-icon-star" data-bind="visible: reviews, css: reviews.auiStarClass"></i>
+ <span class="review-count" data-bind="text: reviews.numberOfRatings"></span>
+ <div class="bottomInfo">
+ <div class="pricing">
+ <span class="price" data-bind="text: price"></span>
+ <i class="prime a-icon a-icon-small" data-bind="visible: prime, css: prime.auiIconClass"></i>
+ </div>
+ </div>
+ </div>
+ <div class="loading" data-bind="visible: loading"><img src="http://g-ecx.images-amazon.com/images/G/01/amazonui/loading/loading-4x._V391853216_.gif" /></div>
+ </div>
+</div>
+
+<script type="text/javascript">
+ P.when('A', 'gw-hover-main-helper').execute(function(A, hh) {
+ (function() {
+ var $h = A.$('#slideout-hover'),
+ hoverWidth = $h.width();
+
+ hh.register('slideout', $h, {
+ show: function(e) {
+ var $tgt = A.$(e.target),
+ $root = A.$(e.root),
+ tgtPos = $tgt.offset(),
+ rootPos = $root.offset(),
+ tgtRight = tgtPos.left + $tgt.width(),
+ rootRight = rootPos.left + $root.width(),
+ bodyWidth = A.$('body').width(),
+ left = tgtRight + hoverWidth <= rootRight ? tgtRight : '',
+ right = left ? '' : bodyWidth - tgtPos.left,
+ css = { 'left' : left,
+ 'right' : right,
+ 'width' : 0,
+ 'top' : tgtPos.top
+ };
+
+ $h.stop().css(css).show().animate({ width: hoverWidth }, 225);
+ },
+ hide: function(e) {
+ $h.stop().animate({ width: 0 }, 225, function() { $h.hide(); });
+ }
+ }, { disablePointerEvents: true });
+ })();
+ });
+</script>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div id="SponsoredLinksGateway"><script>
+
+
+function a9_sl_sessionCacheUpdateHandler ($) {
+ var browserWidth = $(window).width();
+ var browserHeight = $(window).height();
+
+ // Make a request to the session cache update handler in Gurupa
+ $.post('/gp/product/sessionCacheUpdateHandler.html',
+ { 'sessionCacheUpdateFlag' : '1',
+ 'pageType' : 'Gateway',
+ 'browserWidth' : browserWidth,
+ 'browserHeight' : browserHeight,
+ 'token' : "fVoboEDsYMjWCjzTN8sCOZN8G4g7RXLwccIwTd6Z2c0="
+ },
+ function(data) {}
+ );
+}
+
+if(typeof amznJQ !== 'undefined') {
+ amznJQ.onReady("jQuery", function () {
+ if (typeof window.usePageContentReady !== 'undefined' && window.usePageContentReady) {
+ amznJQ.available('PageContentReady', function () {a9_sl_sessionCacheUpdateHandler(jQuery);});
+ } else {
+ jQuery(window).load(a9_sl_sessionCacheUpdateHandler(jQuery));
+ }
+ });
+} else {
+ P.when('A', 'jQuery').execute(function (A, $) {
+ A.on('PageContentReady', function () {a9_sl_sessionCacheUpdateHandler($);});
+ });
+}
+
+</script>
+</div>
+
+
+
+
+<script type="text/javascript">
+try {
+P.when('A').execute(function(A){
+ A.preload(["https://images-na.ssl-images-amazon.com/images/G/01/advertising/dev/js/live/adSnippet._V142890782_.js","https://images-na.ssl-images-amazon.com/images/G/01/authportal/flex/reduced-nav/ap-flex-reduced-nav-2.1._V343920894_.css","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/checkout/signin-banner._V356015500_.gif","https://images-na.ssl-images-amazon.com/images/G/01/authportal/common/js/ap-checkout-frn._V358119688_.js","https://images-na.ssl-images-amazon.com/images/G/01/authportal/common/css/ap_global._V350136985_.css","https://images-na.ssl-images-amazon.com/images/G/01/authportal/common/images/amznbtn-sprite03._V395592492_.png","https://images-na.ssl-images-amazon.com/images/G/01/javascripts/lib/jquery/jquery-1.2.6.min._V253690767_.js","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/common/buttons/sign-in-secure._V192194766_.gif","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/common/errors-alerts/error-styles-ssl._V219086192_.css","https://images-na.ssl-images-amazon.com/images/G/01/authportal/flex/reduced-nav/ap-flex-reduced-nav-2.0._V393733149_.js","https://images-na.ssl-images-amazon.com/images/G/01/orderApplication/js/authPortal/sign-in._V375965495_.js","https://images-na.ssl-images-amazon.com/images/G/01/authportal/common/images/amazon_logo_no-org_mid._V153387053_.png","https://images-na.ssl-images-amazon.com/images/G/01/orderApplication/css/authPortal/sign-in._V392399058_.css","https://images-na.ssl-images-amazon.com/images/G/01/authportal/common/css/ap-checkout-frn._V367515985_.css","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/common/login/fwcim._V342128453_.js","https://images-na.ssl-images-amazon.com/images/G/01/authportal/common/js/ap_global-1.1._V369095239_.js"]);
+});
+}
+catch (e) {}
+</script>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<script type="text/javascript">
+ P.when('A').execute(function(A){
+ A.preload(["https://images-na.ssl-images-amazon.com/images/G/01/gno/images/general/navAmazonLogoFooter._V169459313_.gif","https://images-na.ssl-images-amazon.com/images/G/01/gno/sprites/global-sprite-32-v4._V319941157_.png","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/common/transparent-pixel._V386942464_.gif","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/cs/ya/images/shipment_large_lt._V192250661_.gif","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/cs/ya/images/new-link._V192250664_.gif","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/cs/help/images/spotlight/kindle-family-02b._V354814520_.jpg","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/cs/orders/images/acorn._V192250692_.gif","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/cs/orders/images/btn-close._V192250694_.gif","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/cs/orders/images/amazon-gcs-100._V192250695_.gif","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/cs/orders/images/amazon-gc-100._V192250695_.gif","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/communities/social/snwicons_v2._V369764580_.png","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/cs/projects/text-trace/texttrace_typ._V353754787_.js","https://images-na.ssl-images-amazon.com/images/G/01/x-locale/cs/css/images/amznbtn-sprite03._V387356454_.png","https://images-na.ssl-images-amazon.com/images/G/01/browser-scripts/wcs-ya-homepage-beaconized/wcs-ya-homepage-beaconized-530192997._V1_.css","https://images-na.ssl-images-amazon.com/images/G/01/browser-scripts/wcs-ya-homepage-beaconized/wcs-ya-homepage-beaconized-3515399030._V1_.js","https://images-na.ssl-images-amazon.com/images/G/01/browser-scripts/wcs-ya-order-history-beaconized/wcs-ya-order-history-beaconized-207125090._V1_.css","https://images-na.ssl-images-amazon.com/images/G/01/browser-scripts/wcs-ya-order-history-js/wcs-ya-order-history-js-2387659835._V1_.js"],0);
+ });
+</script>
+
+
+
+
+
+
+
+<script type="text/javascript">
+
+
+if (!window.$SearchJS && window.$Nav) {
+ window.$SearchJS = $Nav.make('sx');
+}
+if (window.$SearchJS) {
+
+$SearchJS.when('jQuery').run('jQuery-unload-patch', function(jQuery) {
+ if (jQuery.fn.jquery == '1.2.6') {
+ var windowUnloadHandlers = jQuery.data(window, "events").unload;
+ for (var origUnloadUnbinder in windowUnloadHandlers) {
+ break;
+ }
+ jQuery(window).unbind('unload', windowUnloadHandlers[origUnloadUnbinder]).unload(function(){
+ if (jQuery.browser.msie) {
+ // taken from http://bugs.jquery.com/attachment/ticket/2698/unload.js
+ var elems = document.getElementsByTagName('*'),
+ pos = elems.length + 1, // +1 for the document
+ dummy = {};
+
+ jQuery.data( dummy );
+ for( var expando in dummy );
+
+ while( pos-- ){
+ var elem = elems[ pos ] || document, //add the document
+ id = elem[expando];
+
+ if( id && jQuery.cache[id] && jQuery.cache[id].events )
+ jQuery.event.remove( elem );
+ }
+ }
+ });
+ }
+});
+
+$SearchJS.importEvent('search-sabc', {global: "amzn.sx.sabc"});
+$SearchJS.when('jQuery', 'search-sabc', 'page.loaded').run('sabc-init', function($, sabc) {
+ var loadingSpinnerCss = "<style type='text/css'>" +
+ ".loadingSpinner { background-image: url('http://g-ecx.images-amazon.com/images/G/01/nav2/images/gui/loading-large._V192184511_.gif '); background-repeat: no-repeat; height: 52px; width: 152px; margin-left: 50%; margin-top: 8px;}" +
+ "</style>";
+ $("head").append($(loadingSpinnerCss).attr({type: "text/css"}));
+
+ sabc.controllerInstance = new sabc.Controller(
+ 8,
+ false,
+ false,
+ 5,
+ ["electronics-tradein","moviestv-tradein","textbooks-tradein","videogames-tradein","wireless-tradein","books-tradein","foreign-books-tradein","music-tradein","auctions","local","people","tags","ohs","zshops","community-reviews","rp-listmania","rp-sylt","help"],
+ undefined,
+ []);
+});
+
+
+}
+
+
+
+(function() {
+
+ var precacheMaterials = ["http://g-ecx.images-amazon.com/images/G/01/gno/sprites/global-sprite-v1._CB339353059_.png","http://g-ecx.images-amazon.com/images/G/01/x-locale/common/transparent-pixel._CB386942464_.gif","http://z-ecx.images-amazon.com/images/G/01/browser-scripts/search-css/search-css-918397038._V1_.css","http://z-ecx.images-amazon.com/images/G/01/browser-scripts/us-site-wide-css-beacon/site-wide-6800426958._V1_.css","http://z-ecx.images-amazon.com/images/G/01/browser-scripts/search-csl/search-csl-227774459._V1_.js","http://z-ecx.images-amazon.com/images/G/01/browser-scripts/search-js-general/search-js-general-879121515._V1_.js","http://z-ecx.images-amazon.com/images/G/01/browser-scripts/search-ajax/search-ajax-3464710302._V1_.js","http://z-ecx.images-amazon.com/images/G/01/browser-scripts/csmCELLS/csmCELLS-2425371312._V1_.js","http://g-ecx.images-amazon.com/images/G/01/nav2/images/gui/searchSprite._CB320513356_.png","http://g-ecx.images-amazon.com/images/G/01/AUIClients/RetailSearchAssets-27928df169e4456cd1277bed640153785a94cee2.renderskin-pc.search-results-aui.min._V2_.js","http://z-ecx.images-amazon.com/images/G/01/browser-scripts/clickWithinSearchPageStatic/clickWithinSearchPageStatic-3684480397._V1_.css","http://z-ecx.images-amazon.com/images/G/01/browser-scripts/jserrors/jserrors-4214293505._V1_.js","http://g-ecx.images-amazon.com/images/G/01/AUIClients/AmazonUI-a006f7c78477fcaf7ae8d246eeea1abb1ee01b07.rendering_engine-not-trident.min._V2_.js","http://z-ecx.images-amazon.com/images/G/01/browser-scripts/page-ajax/page-ajax-675460093._V1_.js","http://z-ecx.images-amazon.com/images/G/01/browser-scripts/forester-client/forester-client-3633558923._V1_.js","http://g-ecx.images-amazon.com/images/G/01/AUIClients/RetailSearchAssets-27928df169e4456cd1277bed640153785a94cee2.renderskin-pc.min._V2_.js","http://g-ecx.images-amazon.com/images/G/01/AUIClients/RetailSearchAssets-efe2404414cecd996290d635a71e79a693d119f3.renderskin-pc.min._V2_.css","http://z-ecx.images-amazon.com/images/G/01/browser-scripts/search-js-trackplayer/search-js-trackplayer-2851113861._V1_.js","http://g-ecx.images-amazon.com/images/G/01/AUIClients/RetailSearchAssets-28bd8dbf5381e7a82c680078bf4bce4823dbf05a.renderskin-pc.search-results-aui.min._V2_.css","http://z-ecx.images-amazon.com/images/G/01/browser-scripts/site-wide-js-1.6.4-beacon/site-wide-9181374584._V1_.js","http://g-ecx.images-amazon.com/images/G/01/AUIClients/AmazonUI-1bad35cc7a016ac93fa3db08dd1a43f6b947c70a.rendering_engine-not-trident.min._V2_.css"];
+
+ if (window.amznJQ) {
+ amznJQ.addPL(precacheMaterials);
+ } else if (window.P) {
+ P.when('A').execute(function(A){
+ A.preload(precacheMaterials);
+ });
+ }
+
+
+})();
+
+
+</script>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ </div>
+ </div><script type='text/javascript'>
+
+ window.ue_csm.cel_widgets = [
+ { id: "DAr2" } , { id: "DAr7" } , { id: "gwcswA" } , { id: "gwcswB" } , { id: "sidebarbtf" } , { id: "desktop-billboard-1" } , { id: "desktop-billboard-2" } , { c: "desktop-row" , id_gen: function(elem, index){ return 'desktop-' + index; } } , { c: "sidekick" , id_gen: function(elem, index){ return 'sidekick-' + index; } } , { c: "gw-desktop-herotator" , id_gen: function(){ return 'gw-desktop-herotator'; } } , { s: "#centercol .s9Widget" , id_gen: function(elem, index) { return 'S9WidgetC' + (index + 1); } } , { s: "#rightcolbtf2 .unified_widget" , id_gen: function(elem, index) { return 'S9WidgetR' + (index + 1); } } , { c: "celwidget" } , { id: "fallbacksessionShvl" } , { id: "rhf" }
+ ];
+
+
+
+</script>
+
+<div id='be' style='display:none;visibility:hidden;'><form name='ue_backdetect'><input name='ue_back' value='1' type='hidden'></form><script type="text/javascript">
+(function(c){var a=document.ue_backdetect;if(a&&a.ue_back&&c.ue){c.ue.bfini=a.ue_back.value}if(c.uet){c.uet("be")}if(c.onLdEnd){if(window.addEventListener){window.addEventListener("load",c.onLdEnd,false)}else{if(window.attachEvent){window.attachEvent("onload",c.onLdEnd)}}}if(c.ueh){c.ueh(0,window,"load",c.onLd,1)}if(c.ue&&c.ue.tag){if(c.ue_furl&&c.ue_furl.split){var b=c.ue_furl.split(".");if(b&&b[0]){c.ue.tag(b[0])}}else{c.ue.tag("nofls")}}})(ue_csm);
+
+var ue_pty='Gateway', ue_spty='desktop', ue_pti='36701';
+
+</script>
+
+<a href='/gp/uedata/nvp/unsticky/178-3863399-4887466//ntpoffrw?tepes=1&amp;id=1GM97J2XXNXR8Y322FQC'>v</a>
+<noscript>
+ <img src='/gp/uedata/nvp/unsticky/178-3863399-4887466//ntpoffrw?noscript&amp;id=1GM97J2XXNXR8Y322FQC&amp;pty=Gateway&amp;spty=desktop&amp;pti=36701' />
+ <img src='//fls-na.amazon.com/1/batch/1/OP/ATVPDKIKX0DER:178-3863399-4887466:1GM97J2XXNXR8Y322FQC$uedata=s:%2Fuedata%2Fnvp%2Funsticky%2F178-3863399-4887466%2FGateway%2Fntpoffrw%3Fnoscript%26id%3D1GM97J2XXNXR8Y322FQC%26pty%3DGateway%26spty%3Ddesktop%26pti%3D36701:2000' />
+
+</noscript>
+</div>
+<script type='text/javascript'>
+(function(b,c){var a=c.images;if(a&&a.length){b.ue.count("totalImages",a.length)}})(ue_csm,document);
+</script>
+</body>
+</html>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/sample_arctic.svg b/vendor/github.com/tdewolff/minify/benchmarks/sample_arctic.svg
new file mode 100644
index 0000000..26cb992
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/sample_arctic.svg
@@ -0,0 +1,13940 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.1" id="svg2" xmlns:ns1="http://ns.adobe.com/Flows/1.0/" xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="1009.588" height="1267.293" viewBox="-251.814 -316.31 1009.588 1267.293"
+ overflow="visible" enable-background="new -251.814 -316.31 1009.588 1267.293" xml:space="preserve">
+<g id="Calque_1">
+ <rect id="rect9" x="-251.498" y="-288.808" fill="#E6F6ED" width="1008" height="1223.997"/>
+ <polyline id="polyline11" fill="#FFFFFF" points="-92.666,356.599 -91.658,356.454 -90.795,355.446 -89.786,355.159
+ -88.923,355.591 -88.059,355.446 -87.482,354.151 -86.042,354.151 -85.61,353.718 -84.026,353.718 -82.874,353.286
+ -81.146,353.286 -79.706,353.718 -78.267,353.718 -78.267,354.581 -77.834,355.304 -77.402,355.733 -76.538,353.718
+ -75.818,352.854 -74.811,351.847 -74.091,351.271 -72.795,349.831 -72.362,349.397 -70.778,349.397 -70.49,348.966
+ -71.066,348.823 -71.066,344.069 -70.202,343.64 -68.906,343.495 -68.763,343.351 -69.771,343.206 -70.202,342.63 -71.066,342.63
+ -71.354,342.198 -71.498,341.335 -71.066,340.327 -70.059,339.749 -69.194,339.319 -67.179,338.454 -66.171,337.446
+ -65.883,337.304 -64.73,336.151 -64.442,336.581 -63.435,336.726 -63.003,337.304 -63.003,338.312 -62.715,339.606
+ -63.146,340.614 -62.139,339.319 -62.282,336.87 -61.851,336.294 -61.274,335.573 -60.555,335.286 -59.114,335.286 -58.25,335.718
+ -57.387,335.862 -57.099,335.286 -57.963,334.71 -58.826,334.71 -58.826,333.271 -57.963,332.263 -57.242,331.831 -56.811,331.397
+ -54.795,331.397 -53.786,332.263 -53.643,333.991 -54.795,335.431 -54.795,335.718 -54.074,336.294 -53.643,337.015
+ -53.066,337.733 -53.066,333.991 -52.635,332.839 -53.211,332.263 -53.211,331.542 -52.202,330.39 -51.339,330.39 -50.763,329.815
+ -49.755,329.815 -48.891,330.966 -48.891,331.831 -49.322,332.263 -50.042,333.126 -49.467,333.847 -48.746,333.271
+ -47.883,332.405 -46.154,332.405 -45.578,333.413 -44.57,333.271 -43.994,332.694 -42.41,332.839 -42.122,332.983 -40.683,334.71
+ -40.683,336.151 -40.25,336.726 -40.106,338.599 -40.826,340.038 -42.122,341.046 -43.274,341.479 -43.851,342.198
+ -44.715,343.351 -45.578,344.79 -46.299,346.374 -47.162,348.39 -48.026,349.976 -49.034,351.126 -49.467,351.702 -50.475,352.71
+ -51.771,353.286 -53.354,353.286 -55.803,353.573 -57.387,354.007 -58.826,354.007 -60.267,354.294 -61.563,355.304
+ -62.427,356.454 -63.29,358.472 -63.29,360.054 -64.011,361.351 -64.154,362.499 -64.154,363.077 -64.587,364.663 -64.73,365.386
+ -65.595,366.966 -66.026,367.397 -68.618,369.271 -72.362,369.126 -77.114,369.271 -78.843,369.847 -82.011,371.144
+ -84.314,371.144 -91.082,370.712 -96.698,370.136 -100.154,368.983 -104.33,367.253 -108.938,365.526 -113.259,363.511
+ -116.427,361.206 -118.442,359.479 -119.738,356.886 -119.883,353.286 -118.874,351.847 -116.858,350.263 -113.834,348.39
+ -109.227,346.085 -105.482,344.069 -102.171,342.774 -100.442,341.335 -100.299,340.472 -100.874,339.319 -102.171,337.733
+ -102.746,336.87 -102.458,335.144 -101.883,334.278 -100.442,332.694 -99.146,331.687 -97.563,330.966 -93.675,330.966
+ -91.37,330.679 -87.771,329.095 -83.162,325.64 -80.282,323.335 -78.122,321.319 -75.675,319.015 -74.522,317.862 -73.082,317.286
+ -70.923,317.718 -69.194,318.294 -67.755,319.159 -62.57,319.015 -58.25,318.726 -52.635,318.581 -50.187,318.438 -48.746,319.015
+ -48.171,320.312 -48.026,320.599 -48.026,321.894 -49.034,322.759 -49.898,323.479 -50.618,324.198 -51.339,324.774
+ -51.771,324.774 -52.347,325.782 -52.347,326.069 -53.354,326.069 -54.362,325.782 -54.938,325.351 -55.082,325.495
+ -54.362,326.358 -53.786,326.935 -53.211,327.655 -53.211,328.808 -54.219,329.382 -55.082,329.958 -56.666,330.245
+ -58.538,329.958 -58.971,330.823 -59.402,331.397 -59.402,331.831 -60.122,331.831 -60.843,331.253 -61.274,330.679
+ -61.994,329.958 -62.858,329.958 -63.578,330.103 -63.146,330.823 -62.282,330.966 -61.706,331.397 -61.418,331.831
+ -61.274,332.839 -61.851,333.271 -62.139,333.847 -63.003,334.71 -63.723,335.286 -64.73,336.151 -65.307,336.151 -66.171,335.431
+ -67.034,335.144 -67.61,334.565 -67.61,333.702 -67.898,333.271 -70.347,333.126 -70.347,333.702 -69.626,334.278 -69.051,335.144
+ -68.33,335.718 -67.898,336.151 -67.467,336.438 -67.61,337.733 -67.755,338.022 -69.051,338.167 -69.771,338.022 -70.635,337.591
+ -71.066,337.878 -72.074,338.886 -73.082,339.175 -73.515,339.462 -74.234,339.462 -74.666,339.749 -74.091,339.894
+ -73.37,340.183 -72.795,341.046 -72.507,341.767 -72.219,342.917 -72.219,343.782 -72.507,345.222 -72.65,347.237 -72.65,348.245
+ -72.938,348.966 -73.803,349.976 -74.811,350.694 -75.963,351.413 -76.538,351.558 -76.971,351.991 -80.858,351.991
+ -81.578,351.413 -81.866,350.694 -82.154,350.118 -82.299,351.126 -82.587,351.558 -83.162,352.136 -84.458,351.991
+ -85.034,352.421 -85.898,352.421 -86.475,352.854 -87.339,352.999 -87.914,353.431 -88.347,353.862 -88.923,353.862
+ -89.498,354.294 -90.074,354.294 -90.938,354.438 -91.37,355.446 -91.946,356.312 -92.666,356.599 -93.099,356.741
+ -95.547,356.022 -94.538,356.741 -94.538,359.622 -94.106,360.917 -93.963,359.767 -93.675,358.759 -93.53,358.038
+ -93.099,357.319 -92.954,357.319 -92.666,356.599 "/>
+ <polyline id="polyline13" fill="#FFFFFF" points="-98.282,353.573 -99.578,352.421 -100.587,351.991 -102.891,351.558
+ -104.187,351.558 -101.883,352.136 -100.587,352.565 -99.578,353.286 -98.282,354.007 -97.274,354.87 -98.282,353.573 "/>
+ <polyline id="polyline15" fill="#FFFFFF" points="-92.666,356.599 -91.946,356.312 -91.37,355.446 -90.938,354.438
+ -90.074,354.294 -89.498,354.294 -88.923,353.862 -88.347,353.862 -87.914,353.431 -87.339,352.999 -86.475,352.854
+ -85.898,352.421 -85.034,352.421 -84.458,351.991 -83.162,352.136 -82.587,351.558 -82.299,351.126 -82.154,350.118
+ -81.866,350.694 -81.578,351.413 -80.858,351.991 -76.971,351.991 -76.538,351.558 -75.963,351.413 -74.811,350.694
+ -73.803,349.976 -72.938,348.966 -72.65,348.245 -72.65,347.237 -72.507,345.222 -72.219,343.782 -72.219,342.917 -72.507,341.767
+ -72.795,341.046 -73.37,340.183 -74.091,339.894 -74.666,339.749 -74.234,339.462 -73.515,339.462 -73.082,339.175
+ -72.074,338.886 -71.066,337.878 -70.635,337.591 -69.771,338.022 -69.051,338.167 -67.755,338.022 -67.61,337.733
+ -67.467,336.438 -67.898,336.151 -68.33,335.718 -69.051,335.144 -69.626,334.278 -70.347,333.702 -70.347,333.126
+ -67.898,333.271 -67.61,333.702 -67.61,334.565 -67.034,335.144 -66.171,335.431 -65.307,336.151 -64.73,336.151 -65.883,337.304
+ -66.171,337.446 -67.179,338.454 -69.194,339.319 -70.059,339.749 -71.066,340.327 -71.498,341.335 -71.354,342.198
+ -71.066,342.63 -70.202,342.63 -69.771,343.206 -68.763,343.351 -68.906,343.495 -70.202,343.64 -71.066,344.069 -71.066,348.823
+ -70.49,348.966 -70.778,349.397 -72.362,349.397 -72.795,349.831 -74.091,351.271 -74.811,351.847 -75.818,352.854
+ -76.538,353.718 -77.402,355.733 -77.834,355.304 -78.267,354.581 -78.267,353.718 -79.706,353.718 -81.146,353.286
+ -82.874,353.286 -84.026,353.718 -85.61,353.718 -86.042,354.151 -87.482,354.151 -88.059,355.446 -88.923,355.591
+ -89.786,355.159 -90.795,355.446 -91.658,356.454 -92.666,356.599 "/>
+ <polyline id="polyline17" fill="#FFFFFF" points="-92.666,356.599 -92.954,357.319 -93.099,357.319 -93.53,358.038
+ -93.675,358.759 -93.963,359.767 -94.106,360.917 -94.538,359.622 -94.538,356.741 -95.547,356.022 -93.099,356.741
+ -92.666,356.599 "/>
+ <polyline id="polyline19" fill="#FFFFFF" points="-71.211,276.102 -69.482,273.654 -67.898,273.222 -66.603,272.501
+ -61.851,267.75 -60.41,265.734 -58.971,263.142 -53.643,258.678 -50.763,256.374 -48.891,254.501 -46.587,253.782 -43.706,253.35
+ -40.971,253.206 -39.242,252.629 -37.946,251.478 -37.227,250.326 -36.65,249.174 -36.074,245.718 -35.643,244.566
+ -35.643,242.838 -33.771,240.965 -32.906,239.958 -32.042,239.094 -31.467,239.094 -31.034,238.95 -29.45,237.222 -27.723,236.501
+ -25.706,234.629 -22.683,232.182 -20.811,230.166 -19.082,228.726 -17.498,227.286 -14.33,224.984 -11.162,221.958 -9.146,219.51
+ -7.131,216.198 -5.834,213.608 -4.971,210.15 -4.395,208.422 -3.675,205.83 -1.658,202.806 2.518,200.07 6.693,198.629
+ 8.71,198.629 9.573,200.358 9.573,204.246 10.294,205.542 11.014,207.414 12.31,210.293 13.605,212.166 14.758,213.894
+ 17.638,214.038 19.653,213.318 21.67,211.734 23.109,209.286 24.405,206.984 25.126,205.974 26.422,204.822 28.726,203.381
+ 31.029,202.085 32.758,200.648 34.485,199.35 36.214,197.622 38.373,193.301 39.67,190.422 39.67,187.974 39.382,185.526
+ 38.373,182.79 38.229,181.782 38.086,181.206 39.382,180.198 40.245,179.91 41.542,180.486 42.838,181.782 44.565,183.078
+ 46.149,184.662 47.302,185.381 47.733,186.246 47.59,187.11 46.582,187.83 45.861,188.406 46.006,188.549 47.445,188.549
+ 48.166,189.27 48.166,192.15 47.445,193.446 46.438,194.598 45.718,195.75 44.854,197.622 44.422,198.629 44.277,200.648
+ 43.701,201.366 42.693,201.51 41.829,200.79 40.821,200.501 40.39,200.648 40.533,201.078 41.686,201.797 42.693,202.518
+ 43.27,203.381 43.413,204.965 42.981,206.984 42.55,208.278 42.117,210.15 41.397,212.024 39.958,213.894 38.661,215.333
+ 36.934,216.917 35.926,217.206 34.197,217.35 33.189,216.486 32.47,215.622 31.894,215.192 31.462,215.48 31.462,216.198
+ 32.47,217.206 33.334,217.782 33.334,218.79 32.901,219.51 32.037,220.232 31.317,220.806 30.598,221.094 29.733,221.238
+ 28.869,220.806 27.861,220.085 27.43,220.085 26.998,220.806 27.718,221.381 28.438,222.102 28.438,222.965 28.006,223.83
+ 26.565,224.549 25.701,224.694 24.838,224.984 24.405,225.414 22.966,225.414 22.533,225.846 20.949,225.846 19.941,225.702
+ 19.51,225.125 19.077,224.406 18.789,223.974 18.502,223.974 18.069,224.406 18.069,224.984 17.493,225.702 16.054,225.846
+ 14.613,225.558 14.182,225.558 13.605,225.99 12.453,225.99 11.302,224.838 10.582,224.406 10.294,224.549 10.438,224.984
+ 11.014,225.702 11.302,226.278 10.582,226.854 9.861,227.286 8.854,227.862 7.558,228.293 6.405,228.87 5.686,229.446
+ 5.397,232.182 4.39,232.614 3.67,232.614 2.661,231.75 2.086,230.742 2.086,230.598 1.653,229.734 1.077,228.726 0.646,228.006
+ 0.214,227.862 0.214,228.293 0.789,229.734 1.365,230.742 2.086,232.614 2.086,234.054 1.077,235.062 0.069,235.638
+ -2.091,235.494 -2.666,235.062 -3.675,234.917 -3.675,235.35 -3.099,235.926 -2.234,236.358 -1.227,236.79 -0.362,237.366
+ -0.362,238.806 -0.795,240.678 -1.946,241.83 -3.099,242.838 -4.683,244.133 -6.843,244.566 -7.563,244.709 -9.146,244.998
+ -10.73,245.142 -10.874,245.574 -9.146,245.718 -7.274,245.574 -5.114,245.142 -3.675,244.709 -2.379,243.846 -1.37,242.694
+ -0.219,241.398 0.214,240.822 1.077,240.965 1.653,241.398 2.086,242.118 2.229,243.414 2.229,246.582 2.374,247.734
+ 2.949,248.022 3.237,246.87 3.094,245.286 3.525,243.27 5.542,243.27 6.405,243.99 7.413,244.566 7.846,244.854 7.989,246.15
+ 8.277,247.014 8.854,246.15 9.142,245.142 9.43,243.846 9.861,243.125 9.861,242.406 10.726,240.678 10.582,237.366
+ 11.445,234.917 14.325,235.062 15.334,235.638 16.054,236.646 16.054,238.518 16.197,239.814 16.485,239.814 16.63,237.654
+ 16.485,235.494 15.621,234.629 14.47,234.486 13.174,234.198 12.31,233.19 12.31,232.326 12.741,230.31 13.029,229.446
+ 13.462,228.582 14.325,227.574 15.189,227.574 15.766,227.717 16.485,228.438 17.062,229.301 17.35,229.446 17.493,228.293
+ 17.926,227.862 18.646,227.862 19.51,228.293 21.813,227.862 22.678,227.574 24.405,226.998 26.998,226.998 27.573,227.574
+ 28.006,228.438 28.294,229.158 29.014,230.885 29.157,232.326 29.302,233.19 29.59,234.054 29.878,233.333 30.021,229.301
+ 30.453,228.438 31.462,228.006 31.605,227.286 32.182,226.568 32.613,225.99 33.766,225.99 34.197,226.422 34.918,226.709
+ 34.197,225.558 33.189,224.549 32.47,223.4 32.47,222.678 32.901,222.246 33.478,221.526 34.197,221.67 34.63,221.094
+ 35.35,220.232 36.357,219.366 36.502,219.222 38.086,219.222 39.094,219.654 40.245,220.374 41.254,221.381 42.405,222.678
+ 43.126,223.686 43.558,224.406 43.989,224.118 43.701,223.11 43.27,222.39 42.55,221.381 41.397,220.232 40.245,219.366
+ 39.382,218.648 39.237,218.358 39.525,216.629 40.39,215.91 41.254,215.192 42.117,214.47 43.989,214.47 45.573,214.614
+ 46.149,214.758 46.869,215.045 47.59,215.91 48.31,217.494 49.029,218.501 50.182,219.942 50.47,219.222 49.894,218.213
+ 49.029,217.064 48.598,216.486 48.598,214.902 50.037,214.758 50.758,214.47 51.909,214.326 57.094,213.461 48.453,213.461
+ 48.021,213.608 47.445,213.318 45.861,213.03 44.71,212.454 43.989,212.166 44.134,209.574 44.422,207.27 44.854,206.118
+ 45.285,205.254 45.573,204.39 48.31,204.39 48.886,204.534 49.75,204.965 51.046,205.542 52.485,206.118 56.806,206.406
+ 61.27,206.118 68.182,205.686 73.941,205.11 76.678,204.102 78.838,204.822 85.75,211.446 92.086,216.917 95.397,220.232
+ 94.678,223.254 93.67,226.854 92.229,231.03 88.054,238.662 86.037,240.822 84.166,241.398 77.829,243.846 85.75,241.974
+ 87.046,242.262 92.949,250.758 97.701,257.094 100.294,262.566 102.453,268.326 103.174,271.638 104.037,275.814 104.182,278.837
+ 102.598,279.125 98.71,279.702 92.949,281.862 87.766,283.302 85.75,283.59 83.014,281.862 79.126,280.278 76.102,278.837
+ 72.789,277.253 69.766,276.102 66.741,274.23 63.142,273.654 59.397,273.942 53.062,275.238 58.245,275.238 62.134,274.806
+ 65.445,274.806 66.021,275.238 69.046,277.542 74.518,279.125 78.693,281.142 83.014,283.302 86.037,284.598 87.189,284.886
+ 89.926,283.877 92.661,283.302 93.525,283.59 94.102,286.614 94.102,290.501 94.39,293.094 94.533,295.11 94.102,297.27
+ 93.237,298.709 90.789,299.574 88.342,302.022 85.75,305.045 89.638,302.022 92.086,300.582 94.821,299.718 96.838,302.886
+ 97.701,304.47 99.573,307.206 102.021,309.222 108.357,313.542 112.821,317.431 116.422,319.591 121.462,323.046 120.31,325.782
+ 122.47,323.335 124.054,321.319 125.35,319.591 126.502,318.294 125.926,316.997 125.781,315.125 125.493,317.718 124.918,318.581
+ 123.478,320.022 122.758,321.319 121.029,320.741 116.998,318.87 110.373,314.118 104.037,309.51 102.021,307.494 99.861,305.045
+ 96.838,300.582 96.117,298.854 95.397,288.774 95.686,283.014 99.573,282.15 103.75,280.278 109.222,280.278 114.693,280.566
+ 121.029,282.15 131.542,285.461 139.894,287.19 147.237,288.774 158.325,290.213 166.245,290.934 173.445,289.926 168.55,289.926
+ 158.613,289.35 153.285,288.486 145.077,286.902 138.166,285.75 132.405,283.302 121.894,280.566 115.27,279.125 109.222,278.549
+ 106.197,278.837 105.621,274.806 104.325,270.054 102.741,264.293 100.726,260.694 97.126,254.646 91.653,247.158 87.478,241.11
+ 88.63,239.526 90.789,236.501 93.237,230.742 94.966,226.568 97.701,221.094 124.918,215.766 142.342,212.024 144.214,212.024
+ 143.638,219.654 142.918,227.717 142.342,236.79 145.077,239.238 148.678,240.534 144.214,237.51 144.214,231.461 144.502,223.83
+ 145.941,210.87 145.365,204.822 144.646,198.342 144.646,192.438 143.781,185.238 142.054,178.902 152.71,173.286 162.934,168.246
+ 169.413,164.648 172.006,164.358 176.613,165.224 185.254,167.669 187.126,169.254 189.43,173.142 192.598,176.166
+ 187.126,167.094 176.901,164.213 172.869,163.206 170.71,163.206 164.518,166.232 150.117,173.717 141.189,178.47 139.317,173.574
+ 137.157,169.83 137.014,166.518 137.445,162.342 139.029,156.582 141.189,149.816 142.918,143.192 143.781,136.422
+ 144.214,135.272 145.51,134.118 148.102,134.118 152.71,133.976 161.493,133.976 169.413,134.118 173.445,131.238 177.334,127.64
+ 181.653,123.896 185.254,120.293 188.277,118.709 189.43,117.99 190.294,118.278 190.869,118.709 191.878,120.87 193.605,123.896
+ 196.054,126.776 198.502,129.654 201.813,131.669 205.701,133.976 209.733,137.144 211.174,138.87 210.886,141.608
+ 209.733,144.917 207.573,149.526 210.886,144.486 212.325,141.896 213.189,139.877 213.478,138.582 212.758,137.717
+ 209.878,135.414 205.846,132.246 203.109,130.374 200.806,127.782 199.077,125.768 208.149,124.472 217.941,122.454
+ 222.838,121.59 226.582,117.702 239.686,123.318 243.861,124.758 262.293,123.75 271.365,122.6 271.365,123.75 271.51,128.358
+ 272.373,131.816 273.957,137.574 274.102,141.318 273.379,143.333 272.086,145.206 270.502,146.936 273.379,145.352
+ 275.109,143.333 275.828,141.174 275.686,139.301 284.898,139.734 288.789,143.48 295.559,147.224 309.813,157.59 310.533,158.024
+ 310.533,158.742 310.678,159.896 309.525,163.35 306.215,170.549 304.918,173.717 301.316,177.894 293.828,184.662
+ 301.605,179.333 306.934,173.862 309.957,166.518 311.543,162.629 312.547,160.038 315.285,157.158 318.598,153.414
+ 320.324,152.984 322.055,154.278 325.941,158.166 328.533,160.614 331.414,162.917 331.846,163.926 331.414,166.662
+ 330.117,171.125 329.398,174.44 328.246,176.454 327.957,179.48 328.533,180.776 332.133,183.078 336.021,186.965 339.621,191.286
+ 340.197,191.862 341.492,191.862 341.492,193.158 341.781,193.446 341.781,194.454 340.918,195.75 337.895,197.766
+ 334.582,199.926 331.988,200.934 327.238,202.085 323.492,203.526 321.906,205.11 324.215,204.102 329.109,202.374 333.43,201.942
+ 336.313,201.51 337.029,201.942 339.047,202.662 344.518,205.686 348.98,209.717 354.313,214.326 354.883,214.902 358.918,223.11
+ 363.094,232.614 362.807,235.782 360.502,237.942 357.047,241.398 355.461,243.558 352.869,245.286 350.711,246.006
+ 348.117,246.438 344.66,245.862 340.055,243.846 336.313,241.11 332.998,239.526 328.391,237.222 325.223,236.79 323.063,237.366
+ 319.174,239.526 316.006,241.542 313.27,243.846 312.838,244.421 316.293,242.838 319.461,240.965 322.055,239.526
+ 323.781,238.518 327.094,238.374 329.109,238.95 331.846,240.822 335.301,242.262 337.895,243.558 341.063,245.574
+ 345.094,247.446 347.686,248.022 350.854,247.734 353.879,246.438 355.461,245.43 356.037,244.854 356.473,244.566
+ 357.477,243.846 357.477,243.99 360.645,248.598 362.086,250.038 363.238,252.198 364.822,254.79 368.709,260.118 371.732,264.15
+ 372.311,265.446 372.311,266.886 371.732,269.19 370.582,276.678 368.998,283.158 367.27,286.47 364.389,291.222 361.51,295.398
+ 359.492,296.694 355.605,295.83 350.998,296.262 353.73,296.549 358.197,297.558 359.926,299.574 361.795,300.582 364.822,302.742
+ 367.127,303.75 368.277,304.038 368.564,304.182 370.006,304.614 372.021,305.478 372.883,306.917 373.174,309.797
+ 373.461,312.965 373.029,315.125 372.311,317.718 371.301,320.599 370.582,321.749 369.572,322.327 367.557,322.759
+ 363.525,322.472 360.215,321.175 358.484,320.022 359.492,321.462 361.941,322.901 364.822,323.909 367.99,323.909
+ 370.582,323.479 372.021,323.335 373.174,323.479 375.334,324.774 377.494,326.358 377.926,326.647 380.949,328.95 383.83,331.11
+ 385.127,332.983 385.414,335.144 384.547,336.007 379.795,338.454 378.213,340.327 377.926,341.622 377.781,343.495
+ 376.055,344.79 373.605,347.237 370.582,350.55 368.564,352.278 365.83,351.413 364.678,350.839 358.773,349.11 354.313,347.815
+ 351.43,347.237 348.838,345.798 346.965,343.782 343.941,340.183 345.957,343.782 347.109,345.511 348.117,346.95 349.414,348.103
+ 349.27,349.253 348.117,351.271 346.246,354.294 343.797,357.894 341.926,360.487 341.641,363.655 341.781,365.386
+ 342.645,368.118 343.074,369.987 342.934,371.286 341.926,371.862 339.766,372.729 337.75,372.87 336.166,373.591 334.582,374.022
+ 333.285,374.454 331.988,375.319 330.838,376.472 329.828,377.622 328.82,378.917 328.102,380.358 326.949,381.942
+ 325.941,383.095 325.223,383.958 324.066,385.542 323.641,386.694 322.484,387.702 321.477,388.854 320.758,388.569
+ 320.037,387.847 318.738,386.839 318.021,385.827 317.014,384.679 316.006,383.526 315.285,382.229 314.133,381.511
+ 314.422,382.519 315.141,383.958 316.727,385.976 318.021,386.983 320.324,389.573 321.477,390.729 322.484,392.163
+ 323.205,393.462 323.35,395.19 324.215,396.63 323.926,398.647 323.781,399.942 322.629,401.237 322.055,402.39 321.621,403.542
+ 320.898,404.405 320.182,406.136 319.316,407.431 316.869,408.151 314.133,408.151 310.246,408.294 306.502,408.438
+ 303.189,408.87 301.75,409.304 301.029,410.022 299.73,410.163 299.014,409.733 298.727,409.015 298.582,402.679 298.293,397.351
+ 297.861,394.472 297.43,392.741 296.998,392.022 296.133,391.591 295.27,391.304 293.828,391.015 291.238,390.294 290.086,389.722
+ 289.223,388.854 288.934,387.847 288.789,384.245 289.074,379.495 289.074,375.462 288.645,375.606 287.926,377.331
+ 287.641,378.917 287.492,387.413 287.781,389.286 288.502,390.151 289.365,390.729 290.809,391.444 292.678,392.022
+ 294.547,392.454 295.988,393.175 296.563,394.038 296.998,396.487 297.141,404.118 297.141,417.366 296.998,419.671
+ 296.711,422.405 296.711,423.271 295.129,423.702 292.965,423.987 290.66,424.421 289.223,425.144 288.357,426.151
+ 287.205,428.022 285.047,429.03 282.598,429.897 280.582,430.901 278.277,432.058 276.117,432.343 274.965,430.323
+ 273.957,427.444 272.66,426.151 271.223,423.702 270.645,421.976 271.074,419.671 271.652,416.499 272.086,413.622
+ 273.379,410.454 273.238,408.581 272.809,406.569 272.373,405.413 272.518,408.007 272.809,410.599 271.365,413.046
+ 270.934,414.774 270.645,415.782 270.357,417.366 269.926,418.95 269.641,420.245 268.918,420.819 267.477,419.386 266.037,416.79
+ 263.879,414.487 261.285,412.472 259.414,411.03 257.686,410.163 255.379,409.733 251.205,409.444 245.157,410.312
+ 239.397,410.741 234.502,411.462 233.35,410.741 233.062,407.286 233.781,402.966 234.069,399.366 234.789,396.058
+ 237.958,392.454 241.126,387.987 246.598,381.222 249.478,377.767 250.918,371.431 251.638,367.544 252.646,362.069
+ 253.077,357.749 253.365,354.581 252.214,359.909 251.493,364.663 250.054,369.271 249.334,376.472 247.317,378.774
+ 244.294,382.229 237.67,391.015 234.069,394.323 233.493,396.774 233.062,403.11 232.054,407.862 231.909,411.897 231.478,414.63
+ 231.189,417.366 228.453,420.103 225.861,422.554 224.134,424.569 228.741,420.966 231.334,420.103 232.918,422.405
+ 235.798,426.294 237.67,428.599 238.821,430.612 238.821,433.065 237.237,435.511 235.653,438.245 233.35,441.126 232.197,443.144
+ 230.758,445.015 229.029,447.462 228.598,448.183 224.277,448.901 219.958,449.909 224.71,449.767 227.878,449.622
+ 229.317,450.341 230.758,452.214 233.493,456.534 235.51,461.431 238.678,465.749 239.686,467.479 240.262,469.206
+ 241.558,471.222 242.134,472.663 242.277,473.237 242.71,474.679 242.854,476.118 243.43,477.562 244.294,479.142 245.302,480.005
+ 246.31,480.87 247.174,481.444 248.182,482.312 248.758,483.317 248.901,484.47 248.325,485.046 247.462,485.333 246.598,485.911
+ 245.302,486.485 244.294,487.063 242.422,488.071 241.126,488.79 239.829,488.79 237.813,488.501 237.094,488.071 235.941,487.638
+ 234.214,486.919 232.342,486.774 230.325,486.774 232.485,487.063 233.926,487.638 234.789,487.927 234.934,488.071
+ 235.941,488.358 237.094,489.079 238.102,490.229 238.821,490.663 241.558,490.806 241.989,492.39 242.277,495.847
+ 241.701,496.854 240.55,497.431 238.678,498.438 236.518,499.013 236.229,500.31 235.941,501.462 235.798,504.054 235.365,506.071
+ 235.077,507.653 234.789,508.517 233.35,506.935 231.621,506.358 230.325,505.349 228.166,504.341 226.726,504.054
+ 224.854,503.911 224.134,504.198 227.014,504.774 228.453,505.638 229.462,506.071 231.478,507.942 233.062,509.813
+ 233.926,510.39 234.646,511.974 234.934,512.694 234.789,513.56 234.502,514.567 232.197,515.573 230.325,517.157 229.462,517.733
+ 227.733,517.589 227.157,516.87 226.438,515.573 225.861,514.134 225.285,512.981 224.565,512.263 223.126,511.542 221.397,511.11
+ 219.525,511.255 218.229,511.687 220.678,511.829 221.542,512.118 223.126,512.839 224.422,513.989 225.142,515.286
+ 225.285,516.726 224.565,518.454 223.846,520.903 223.27,522.774 222.405,523.782 220.102,523.782 219.237,523.349
+ 217.222,522.919 215.638,522.341 214.197,521.765 211.174,519.317 211.894,520.612 213.621,522.485 214.773,523.495
+ 217.077,524.646 217.222,525.653 215.638,526.229 214.485,527.095 213.334,527.813 212.47,528.679 212.182,529.11 211.75,529.829
+ 211.462,530.55 210.741,531.989 210.021,533.431 209.302,533.286 208.294,532.421 206.998,532.134 206.71,532.567 208.006,534.149
+ 208.726,534.726 210.598,535.444 211.894,536.454 211.462,538.903 212.47,539.765 213.046,542.79 212.901,544.517 212.182,545.382
+ 211.317,545.813 208.726,545.235 207.861,544.229 206.71,543.653 206.71,542.358 208.006,541.062 210.166,540.054 210.886,539.333
+ 209.157,540.054 205.558,542.214 204.55,541.927 204.838,542.214 205.846,543.653 206.854,545.235 207.142,546.821
+ 206.565,549.413 205.413,550.854 203.829,550.854 202.966,549.847 200.806,547.11 199.51,545.235 199.941,547.255 202.678,550.278
+ 202.821,550.567 204.117,552.005 204.405,552.294 205.126,553.013 205.846,553.589 205.989,553.733 206.565,554.886
+ 206.854,555.751 207.573,557.19 207.573,559.206 206.565,560.071 204.838,560.358 204.55,560.501 203.686,560.935 202.678,561.079
+ 202.533,560.358 200.518,558.485 201.525,560.214 201.382,561.509 200.661,562.374 200.229,564.39 199.798,565.397
+ 198.934,566.694 198.069,567.847 197.493,568.71 195.909,568.854 195.189,568.567 195.046,567.847 195.478,567.126
+ 195.621,565.397 196.485,564.39 197.062,563.813 197.493,561.942 197.638,560.935 197.493,560.214 197.205,560.646
+ 196.773,561.509 196.197,562.517 194.613,563.671 193.317,563.813 191.733,563.671 191.157,562.663 191.59,562.229
+ 192.021,561.509 192.31,561.079 192.021,560.214 191.445,560.79 190.869,561.222 190.006,562.087 189.573,562.95 187.558,563.526
+ 186.838,562.95 186.838,558.341 186.262,557.333 186.405,556.612 186.981,555.751 187.413,554.886 187.846,553.878
+ 188.134,553.589 188.998,553.013 189.43,552.438 190.149,551.431 191.157,550.421 192.886,549.558 190.582,549.847
+ 188.998,550.854 188.277,552.005 186.981,552.87 186.838,551.142 186.981,549.702 187.558,546.679 188.565,543.653
+ 189.861,541.062 191.302,539.333 189.573,540.919 187.989,543.366 186.55,545.671 185.109,548.839 184.102,551.286 183.67,553.157
+ 183.813,558.054 182.806,558.919 182.373,559.206 177.766,555.173 181.941,560.071 182.518,560.501 183.237,560.646
+ 183.958,562.663 183.813,567.847 184.245,568.997 184.245,570.581 183.67,571.589 183.094,572.454 180.934,573.894 180.789,574.47
+ 179.638,574.47 179.062,574.038 178.63,574.038 178.342,574.759 178.63,575.046 179.205,575.478 179.493,576.341 179.638,577.349
+ 179.926,578.214 179.638,579.222 179.062,580.087 178.342,580.229 177.621,579.653 175.605,579.653 174.741,579.942
+ 173.878,580.374 173.878,580.806 175.317,581.095 176.182,581.671 176.758,581.958 176.613,582.821 176.182,583.974 175.75,584.55
+ 174.886,585.271 174.31,585.702 173.302,586.278 171.861,586.565 169.701,586.421 169.558,587.142 170.71,587.718 174.598,587.718
+ 175.317,588.149 175.174,588.87 174.453,589.589 173.878,590.165 173.157,590.886 172.149,592.038 171.861,592.759 171.43,593.333
+ 171.142,594.054 169.989,594.772 169.701,594.772 169.126,594.198 168.405,593.911 167.829,593.046 167.397,592.47 166.821,592.47
+ 166.821,594.63 166.245,594.919 165.525,595.495 165.525,595.927 164.518,596.214 164.518,596.646 164.949,596.935 165.813,596.79
+ 166.245,596.356 167.974,596.356 168.55,596.79 168.981,597.222 168.981,597.798 168.55,598.663 167.974,599.095 167.109,600.103
+ 166.102,600.679 166.102,604.565 165.67,605.431 163.222,605.286 161.781,605.142 161.781,603.989 162.214,603.413
+ 162.069,600.966 161.35,600.39 161.35,599.813 161.781,599.095 161.638,598.229 160.918,597.509 160.63,596.646 160.63,594.919
+ 160.054,594.772 159.909,595.495 159.766,597.366 160.342,598.229 160.485,602.839 159.909,603.558 159.189,603.989
+ 158.182,603.558 157.174,602.981 156.453,602.263 155.733,601.829 154.869,601.829 155.302,602.55 155.878,603.126
+ 156.598,603.989 156.741,604.134 157.894,605.286 158.037,605.573 158.901,606.726 159.189,609.03 158.613,609.462
+ 156.886,609.462 156.166,609.173 155.302,609.03 155.157,609.604 154.726,609.462 154.006,609.03 153.718,608.597 152.998,608.022
+ 152.565,607.302 151.413,607.302 151.126,607.589 151.701,609.03 152.71,610.181 152.998,611.188 152.134,611.911 151.701,612.772
+ 151.27,613.206 149.974,614.356 149.109,615.222 148.821,615.222 148.533,615.079 147.958,614.646 147.382,614.356
+ 147.094,613.349 146.661,612.341 145.941,611.333 145.51,609.894 145.077,608.886 144.214,608.886 144.214,610.038
+ 144.502,610.899 144.789,612.483 145.365,613.349 145.653,614.356 146.373,615.366 146.806,616.229 147.382,617.671
+ 147.813,618.534 148.39,620.55 148.39,625.302 147.958,626.31 146.518,627.751 145.653,627.751 145.653,626.454 145.077,625.733
+ 144.646,625.302 144.357,625.013 143.205,624.294 142.918,623.431 142.197,623.142 141.909,624.149 142.485,624.87
+ 143.062,625.878 143.493,626.886 143.638,628.038 143.205,629.046 142.485,629.622 141.909,631.062 141.046,632.356
+ 140.758,632.935 139.75,633.509 138.886,633.366 137.445,632.646 136.726,632.214 136.438,629.911 136.006,625.013
+ 136.006,620.263 135.43,615.653 135.142,611.622 135.142,608.886 135.43,606.87 133.989,601.255 133.126,599.235 132.262,599.095
+ 131.254,599.671 129.958,600.966 127.941,601.11 127.077,600.821 125.781,598.087 125.493,595.638 124.342,591.604
+ 123.621,588.294 123.909,583.542 123.909,579.798 126.646,576.198 128.373,574.181 130.39,573.03 134.134,572.022 137.59,570.87
+ 140.613,570.294 142.63,571.157 144.357,572.597 147.525,575.188 150.405,577.495 152.277,577.495 153.142,576.63 154.294,574.325
+ 155.157,572.454 156.886,570.581 157.75,569.431 159.621,567.413 159.909,567.558 160.054,564.247 159.909,558.63 160.918,556.181
+ 161.493,554.886 162.502,553.157 164.949,548.118 165.958,546.39 166.39,542.501 167.397,537.606 168.117,536.454 169.413,534.438
+ 170.998,531.126 172.582,528.39 173.59,525.509 176.613,519.894 179.926,513.56 183.813,507.942 186.693,504.63 188.998,501.317
+ 191.014,498.149 191.733,495.56 192.741,492.534 195.046,487.638 194.901,484.612 192.453,482.599 190.726,481.157
+ 188.565,478.854 186.55,475.542 186.262,471.366 184.966,468.341 183.382,465.462 183.094,465.319 183.094,460.995
+ 182.229,459.562 180.646,457.11 178.63,456.245 175.605,453.942 175.317,451.782 175.029,450.341 173.878,445.015 172.149,442.995
+ 169.989,441.562 168.405,440.694 165.382,440.118 160.485,437.815 156.741,436.663 154.438,435.366 151.846,434.214
+ 148.678,432.198 145.222,428.89 142.773,426.87 141.621,425.286 138.741,423.702 138.021,423.271 137.157,422.405 135.142,421.253
+ 132.262,419.671 128.661,418.085 125.781,416.499 123.766,415.495 120.741,414.343 117.43,414.343 114.55,414.917 108.069,415.927
+ 106.918,416.069 102.021,416.069 96.838,416.358 91.365,415.495 89.35,413.622 86.037,411.175 83.302,409.155 78.838,405.987
+ 74.086,401.095 72.357,397.927 72.069,394.323 71.493,393.606 71.493,392.022 72.789,391.155 74.229,391.015 77.397,391.304
+ 78.405,392.741 78.693,393.606 78.838,394.759 79.126,393.606 79.701,392.741 80.854,392.163 82.294,392.312 83.878,392.741
+ 84.598,393.749 84.741,395.479 84.598,397.206 84.598,398.069 85.174,398.499 86.037,398.79 87.189,399.222 88.342,399.798
+ 89.35,400.663 90.069,401.386 91.365,401.386 92.518,401.815 93.237,402.103 93.958,403.11 94.966,402.679 95.686,402.534
+ 96.838,402.966 97.701,404.118 98.277,405.847 98.854,406.854 99.573,408.007 99.861,406.995 100.006,404.694 99.718,403.976
+ 98.854,402.966 98.71,401.095 98.854,400.519 99.861,399.942 99.861,397.351 100.438,396.63 101.59,396.058 102.741,395.909
+ 104.182,395.622 105.189,395.046 105.621,394.183 105.478,394.183 103.75,394.901 100.869,395.046 98.565,394.901 96.981,394.323
+ 96.117,393.749 95.254,393.03 94.821,393.606 94.102,394.472 93.094,394.759 89.781,394.759 89.062,394.038 88.342,393.462
+ 87.766,393.03 87.621,391.015 87.046,391.304 86.613,391.878 85.605,392.454 84.453,391.733 83.59,390.87 82.869,389.862
+ 83.302,389.144 84.166,388.569 84.021,387.702 82.726,388.136 81.573,388.71 80.277,389.431 77.686,389.722 73.51,389.862
+ 73.365,388.995 72.789,388.278 72.357,388.854 71.638,390.294 68.901,390.151 67.894,389.573 68.47,388.995 68.613,387.847
+ 67.605,387.847 67.174,388.136 65.157,389.144 64.582,389.286 63.718,388.569 63.142,387.987 63.718,387.271 63.718,386.405
+ 62.71,386.405 62.134,387.271 60.405,387.413 59.254,386.694 59.397,382.085 58.966,382.229 58.678,382.95 54.069,382.808
+ 53.205,381.942 52.63,382.229 52.63,385.397 50.901,385.827 49.605,385.827 49.605,383.815 48.598,383.386 48.31,383.815
+ 47.59,384.679 46.869,384.966 45.718,384.39 44.854,384.679 44.277,385.827 42.55,385.976 40.245,385.11 37.941,384.103
+ 35.781,382.374 34.342,380.647 33.766,379.206 33.909,378.058 34.918,376.183 36.069,373.88 38.661,370.569 40.245,368.405
+ 41.974,365.671 42.405,363.655 42.55,360.774 41.829,358.614 41.254,357.03 40.678,355.304 39.958,352.854 37.222,349.976
+ 35.205,348.823 34.054,348.39 32.613,347.958 30.886,347.815 30.453,347.382 29.445,347.815 28.294,347.815 28.149,346.663
+ 28.582,345.222 28.582,343.495 27.573,342.198 26.71,342.054 26.854,343.64 26.422,344.647 24.55,345.222 23.254,344.503
+ 22.245,343.495 22.966,342.63 22.678,341.622 21.67,342.054 21.094,343.062 21.094,345.511 21.525,345.942 21.382,347.382
+ 21.094,347.958 20.661,348.679 19.941,348.966 18.646,349.397 14.47,349.253 12.31,347.671 11.878,346.519 11.59,344.935
+ 11.733,340.327 13.174,337.304 16.773,332.694 20.806,330.966 26.998,329.526 28.582,328.519 31.75,327.366 32.037,326.358
+ 32.037,323.479 31.174,323.046 29.733,322.038 29.157,321.606 28.582,319.878 29.59,318.87 29.59,316.709 30.021,314.406
+ 29.302,313.686 29.157,312.965 30.166,312.102 31.029,311.381 32.037,311.381 32.901,312.102 33.334,312.534 34.342,310.806
+ 36.357,310.374 37.653,309.222 39.237,308.358 40.39,306.774 40.821,305.045 41.109,303.174 40.102,305.333 39.237,307.062
+ 38.086,307.926 36.214,309.366 34.054,310.23 31.605,310.518 29.878,310.662 28.726,310.806 27.43,310.518 26.422,310.085
+ 25.413,309.942 24.838,310.374 26.422,311.381 26.854,312.246 26.71,314.118 26.71,316.854 26.277,318.726 24.981,319.878
+ 23.829,320.454 22.102,321.03 20.086,320.454 18.069,319.733 16.197,318.294 13.605,316.709 12.021,314.982 9.718,312.965
+ 7.989,311.094 7.413,308.79 7.701,307.638 8.565,307.062 9.142,306.198 9.285,305.91 7.701,306.342 6.838,306.917 5.974,307.926
+ 4.678,308.07 2.949,307.926 2.229,306.629 1.51,304.038 1.222,301.734 4.39,301.734 4.821,301.446 5.109,300.15 4.966,300.006
+ 4.102,299.862 2.661,299.718 2.086,299.142 2.518,297.414 3.382,296.406 4.821,296.549 6.693,296.262 7.989,295.686 9.718,295.686
+ 10.582,295.398 9.573,294.39 9.285,292.95 9.142,290.358 9.142,289.062 9.573,288.054 11.157,287.478 12.021,287.19
+ 12.886,287.045 14.758,287.045 15.766,287.766 16.485,288.629 17.062,288.629 16.918,288.342 16.342,287.333 15.766,286.47
+ 16.197,285.606 18.069,285.03 19.798,284.022 21.525,282.726 22.245,282.15 22.39,282.293 23.397,281.574 24.55,281.142
+ 25.558,280.421 23.974,280.278 22.678,281.142 21.237,281.862 19.222,283.158 17.493,283.734 15.909,284.31 14.758,284.886
+ 12.166,284.598 11.878,284.022 11.733,280.421 11.302,279.27 10.869,276.822 10.869,274.085 11.014,272.646 11.445,271.35
+ 11.445,269.478 11.302,270.629 10.582,271.926 10.149,272.79 10.006,275.238 10.438,277.253 10.726,280.421 11.014,283.446
+ 10.294,285.318 9.573,286.326 8.422,286.758 7.413,286.47 6.117,285.461 4.678,284.166 3.67,282.582 3.094,280.566 2.661,278.694
+ 2.806,275.669 2.374,274.518 0.502,272.79 1.077,273.942 2.229,275.669 2.086,276.965 2.086,279.99 2.661,280.854 2.661,283.59
+ 2.374,284.166 0.934,285.174 -0.219,286.182 -0.65,286.614 -0.938,286.182 -1.803,284.454 -3.099,282.582 -4.25,280.421
+ -5.979,278.837 -6.843,277.974 -9.146,277.398 -11.738,277.974 -14.042,279.27 -13.034,278.982 -11.595,278.549 -10.154,278.262
+ -8.282,278.262 -7.131,279.414 -6.843,281.142 -5.69,281.718 -5.402,282.582 -4.826,283.302 -4.106,284.886 -3.099,286.47
+ -2.379,288.917 -1.658,290.501 -0.938,292.662 -0.362,293.669 -0.65,294.534 -2.811,294.246 -2.234,295.11 -1.082,296.262
+ -0.362,296.837 -0.219,299.142 -0.507,302.454 -0.795,304.758 -2.379,306.198 -3.818,307.494 -5.979,307.494 -7.274,306.629
+ -8.858,306.054 -10.011,305.045 -10.874,304.47 -9.723,306.054 -7.706,307.206 -6.41,308.07 -4.538,309.797 -3.963,310.518
+ -2.666,311.958 -2.954,313.686 -3.242,315.27 -2.666,317.431 -1.658,320.741 -1.37,327.942 -1.37,328.085 -3.242,331.397
+ -6.267,332.55 -9.723,332.118 -13.322,330.823 -15.482,329.095 -17.498,326.358 -19.082,324.487 -21.963,321.462 -23.259,319.878
+ -23.979,316.709 -26.282,315.125 -28.011,311.238 -29.307,309.797 -30.891,308.79 -34.059,308.213 -36.938,306.917 -39.099,305.91
+ -41.259,304.47 -43.706,303.318 -46.442,302.166 -47.883,301.446 -49.179,300.87 -49.61,300.293 -49.61,299.142 -48.746,298.566
+ -48.746,297.99 -48.314,297.414 -48.171,295.686 -48.746,295.11 -49.755,294.678 -50.187,293.814 -50.187,293.094 -49.467,292.518
+ -48.746,292.23 -48.603,291.654 -49.034,291.222 -49.61,291.078 -49.755,291.654 -51.051,291.654 -51.482,292.085 -53.354,292.085
+ -53.931,290.79 -53.786,289.35 -52.923,287.91 -51.051,285.75 -50.33,285.894 -49.61,286.326 -48.746,286.182 -48.746,284.886
+ -49.61,284.886 -49.61,283.59 -48.603,282.438 -48.171,281.142 -47.738,280.709 -46.73,280.566 -45.435,281.142 -44.715,281.718
+ -43.418,282.582 -42.555,283.302 -40.826,283.446 -40.826,283.014 -41.259,282.87 -41.834,282.582 -42.698,282.006
+ -43.851,281.142 -44.858,280.566 -45.866,279.558 -45.866,279.125 -45.29,278.262 -44.715,277.686 -43.851,277.253
+ -42.843,276.678 -39.099,276.678 -36.219,276.246 -35.354,275.814 -33.771,274.806 -32.906,274.23 -31.755,273.797
+ -30.891,273.366 -29.883,272.213 -29.019,271.494 -28.011,270.342 -28.011,270.054 -29.019,270.774 -30.314,271.782
+ -31.755,272.934 -33.771,273.942 -34.778,274.806 -36.65,275.381 -38.234,275.381 -39.099,275.814 -42.41,275.814 -42.986,275.381
+ -44.715,275.381 -45.003,275.814 -45.723,276.246 -46.874,276.678 -47.45,277.253 -48.891,277.11 -48.746,275.526 -48.891,273.797
+ -48.746,272.501 -48.891,271.206 -49.034,271.206 -49.322,272.213 -49.61,272.934 -49.755,273.51 -49.755,276.246 -50.187,276.678
+ -51.626,276.822 -52.202,276.39 -52.778,276.246 -53.643,275.526 -53.643,276.246 -53.066,276.965 -52.635,277.11 -52.059,277.686
+ -51.626,278.262 -50.763,279.702 -50.618,281.862 -51.194,282.438 -51.626,283.446 -52.635,284.454 -53.498,285.461
+ -54.507,285.461 -54.938,286.326 -55.946,286.758 -57.818,286.758 -58.826,286.182 -58.826,285.318 -58.395,284.742 -58.25,283.59
+ -57.963,283.158 -58.538,283.158 -59.259,283.877 -59.69,284.454 -60.41,284.886 -62.139,284.886 -62.715,284.31 -62.57,282.006
+ -62.139,280.709 -61.994,280.421 -61.131,279.414 -62.139,279.558 -62.57,280.134 -63.146,280.709 -64.011,281.43 -64.587,282.15
+ -65.019,282.582 -65.883,282.582 -66.458,283.014 -67.898,283.446 -70.202,283.446 -70.778,283.014 -71.354,282.438
+ -71.786,280.998 -71.786,280.421 -70.778,279.558 -69.914,279.702 -69.914,278.262 -70.635,278.262 -71.211,277.686
+ -71.211,276.102 "/>
+ <polyline id="polyline21" fill="#FFFFFF" points="159.189,398.935 157.462,399.222 156.886,399.366 158.47,399.222
+ 159.189,398.935 159.909,399.366 167.254,398.935 176.47,398.358 181.222,397.64 182.949,396.487 186.117,391.015 189.285,384.534
+ 190.438,382.808 194.325,372.296 196.485,370.712 199.941,369.271 195.334,370.421 192.886,372.581 190.582,378.774
+ 188.134,384.245 185.254,390.729 182.949,394.472 181.798,395.767 179.926,396.487 176.182,397.065 168.117,397.782
+ 161.638,398.358 159.189,398.935 "/>
+ <polyline id="polyline23" fill="#FFFFFF" points="200.661,499.013 198.502,499.157 199.941,499.444 201.237,499.589
+ 202.39,500.165 203.542,500.743 203.686,501.606 204.262,503.333 204.693,505.782 204.693,499.589 205.27,498.87 207.142,496.421
+ 209.302,493.829 210.166,493.255 210.886,492.534 213.189,490.374 213.909,489.653 215.35,489.222 216.214,488.935 217.51,488.79
+ 217.941,488.79 218.661,487.782 219.382,485.911 220.245,483.462 220.966,482.454 221.686,482.022 223.558,481.589
+ 222.693,481.302 221.542,481.444 219.958,482.165 219.237,484.038 217.365,488.214 216.214,488.79 215.062,488.647
+ 214.054,488.071 214.054,486.774 212.758,484.759 213.478,487.206 213.334,489.222 211.174,491.235 207.861,494.263
+ 205.558,496.71 204.55,498.149 203.686,499.878 200.661,499.013 "/>
+ <polyline id="polyline25" fill="#FFFFFF" points="-68.187,285.174 -67.322,284.598 -66.746,284.598 -66.314,284.166
+ -64.442,284.166 -64.299,286.038 -64.874,287.478 -65.45,288.054 -66.746,288.054 -67.898,287.045 -68.187,286.614
+ -68.187,285.174 "/>
+ <polyline id="polyline27" fill="#FFFFFF" points="-63.723,288.342 -63.29,287.478 -61.851,287.333 -59.402,287.91 -58.971,288.342
+ -58.971,288.774 -59.547,289.206 -60.986,289.782 -62.282,290.213 -63.723,290.213 -63.723,288.342 "/>
+ <polyline id="polyline29" fill="#FFFFFF" points="-59.979,290.934 -59.402,290.646 -58.538,290.213 -57.099,290.213
+ -56.522,290.79 -56.234,291.654 -56.234,293.526 -56.666,294.39 -58.106,294.822 -59.114,294.965 -59.547,294.39 -60.122,292.95
+ -59.979,291.797 -59.979,290.934 "/>
+ <polyline id="polyline31" fill="#FFFFFF" points="-55.803,296.262 -55.37,295.398 -54.507,294.39 -51.194,294.39 -50.763,294.965
+ -50.33,295.83 -50.187,296.837 -51.194,297.846 -51.771,298.278 -54.362,298.278 -55.082,297.846 -55.658,296.694 -55.803,296.262
+ "/>
+ <polyline id="polyline33" fill="#FFFFFF" points="-50.475,326.503 -50.042,324.917 -49.179,324.63 -48.458,324.054
+ -46.587,324.054 -46.154,325.062 -46.73,326.503 -47.019,326.935 -48.603,327.511 -49.898,327.511 -50.618,326.935
+ -50.475,326.503 "/>
+ <polyline id="polyline35" fill="#FFFFFF" points="-46.874,328.808 -46.154,328.519 -44.427,328.374 -43.851,328.95 -43.851,330.39
+ -44.427,330.823 -45.723,330.823 -46.73,330.39 -46.874,329.526 -46.874,328.808 "/>
+ <polyline id="polyline37" fill="#FFFFFF" points="-3.099,309.797 -3.099,308.934 -2.379,308.358 -1.658,308.07 0.357,308.07
+ 0.789,308.501 0.789,309.366 -0.219,310.374 -1.37,310.662 -2.666,310.374 -3.099,309.797 "/>
+ <polyline id="polyline39" fill="#FFFFFF" points="0.789,287.333 1.653,285.894 2.661,284.886 4.533,284.886 5.542,286.326
+ 6.117,288.054 5.254,289.206 4.102,290.213 3.094,290.646 1.941,290.934 0.789,290.213 0.789,287.333 "/>
+ <polyline id="polyline41" fill="#FFFFFF" points="1.222,236.07 1.653,235.206 2.374,234.629 3.237,234.198 4.533,234.629
+ 4.966,235.206 4.966,236.934 4.102,237.366 3.382,237.942 1.653,237.797 1.077,237.366 1.222,236.07 "/>
+ <polyline id="polyline43" fill="#FFFFFF" points="2.229,293.238 6.55,290.213 7.846,290.358 8.277,293.094 7.413,294.822
+ 6.262,295.253 4.102,294.965 2.661,293.958 2.229,293.238 "/>
+ <polyline id="polyline45" fill="#FFFFFF" points="2.229,239.814 3.094,238.95 4.533,237.942 5.109,237.51 6.262,237.51
+ 7.413,238.374 8.277,238.806 9.142,239.958 9.285,241.398 8.854,242.118 8.134,242.549 5.829,242.694 4.966,242.118 4.102,241.686
+ 3.525,241.254 2.661,240.822 2.229,239.814 "/>
+ <polyline id="polyline47" fill="#FFFFFF" points="6.405,235.782 6.981,234.629 9.718,234.629 10.149,235.782 9.718,237.654
+ 8.422,237.797 7.558,237.078 6.981,236.358 6.405,235.782 "/>
+ <polyline id="polyline49" fill="#FFFFFF" points="6.981,230.454 7.989,229.301 8.71,228.87 10.149,228.438 12.166,228.293
+ 12.166,229.446 11.59,231.75 11.157,232.47 10.294,233.622 8.854,233.622 7.413,232.902 6.981,232.614 6.981,230.454 "/>
+ <polyline id="polyline51" fill="#FFFFFF" points="18.646,144.056 19.51,143.045 20.949,142.758 21.382,143.192 21.813,144.056
+ 22.102,145.64 20.806,147.366 18.502,147.366 18.357,145.206 18.646,144.056 "/>
+ <polyline id="polyline53" fill="#FFFFFF" points="20.373,149.958 21.094,149.094 21.382,148.808 22.678,148.374 24.262,149.816
+ 24.262,151.254 22.821,152.694 21.237,152.838 20.518,152.549 20.373,150.534 20.373,149.958 "/>
+ <polyline id="polyline55" fill="#FFFFFF" points="21.813,138.44 22.39,137.43 22.39,137.286 24.55,137.144 26.277,138.15
+ 26.277,139.016 24.693,140.6 23.397,141.174 22.39,141.174 21.958,140.6 21.813,138.87 21.813,138.44 "/>
+ <polyline id="polyline57" fill="#FFFFFF" points="21.958,157.446 22.821,156.15 23.542,155.144 25.27,155.144 27.573,157.016
+ 27.43,157.59 26.71,158.888 25.126,160.326 23.974,160.326 22.821,159.461 21.958,158.6 21.958,157.446 "/>
+ <polyline id="polyline59" fill="#FFFFFF" points="22.821,347.095 23.542,346.663 23.829,346.519 24.838,346.519 25.846,347.382
+ 25.846,347.815 25.27,348.245 23.542,348.679 22.966,348.245 22.966,347.815 22.821,347.095 "/>
+ <polyline id="polyline61" fill="#FFFFFF" points="23.397,143.045 24.405,142.038 26.422,140.6 27.285,139.734 28.149,139.734
+ 30.598,141.608 30.598,146.358 29.014,147.797 26.134,147.797 24.838,147.366 24.262,146.79 23.974,145.926 23.397,144.342
+ 23.397,143.045 "/>
+ <polyline id="polyline63" fill="#FFFFFF" points="24.838,132.392 25.413,131.958 26.134,131.526 26.71,131.094 28.149,130.52
+ 32.47,130.52 32.901,131.094 32.901,132.965 32.037,133.976 31.029,135.414 28.149,135.414 26.854,134.838 25.27,134.406
+ 24.693,133.83 24.693,133.254 24.838,132.392 "/>
+ <polyline id="polyline65" fill="#FFFFFF" points="25.27,164.358 25.989,163.64 26.854,163.206 27.285,162.629 28.294,162.198
+ 28.726,162.198 29.733,162.776 30.166,163.64 30.166,165.224 29.733,166.95 29.157,167.381 28.582,167.958 26.277,167.958
+ 25.27,167.381 25.27,164.358 "/>
+ <polyline id="polyline67" fill="#FFFFFF" points="26.71,151.254 27.142,150.534 27.861,149.381 29.878,148.808 30.886,148.95
+ 32.47,150.246 34.485,152.694 34.485,154.133 33.334,154.709 32.47,155.144 31.462,155.43 29.59,155.286 28.006,154.278
+ 26.71,152.984 26.71,151.254 "/>
+ <polyline id="polyline69" fill="#FFFFFF" points="27.43,127.494 27.718,126.486 28.149,125.333 28.726,124.902 31.462,124.902
+ 32.47,125.91 32.47,128.213 31.894,128.648 28.294,128.648 27.573,127.926 27.43,127.494 "/>
+ <polyline id="polyline71" fill="#FFFFFF" points="28.582,225.125 29.59,224.118 30.741,223.686 31.029,223.686 31.462,224.118
+ 31.462,226.278 30.31,228.006 28.726,228.006 28.582,225.846 28.582,225.125 "/>
+ <polyline id="polyline73" fill="#FFFFFF" points="29.014,169.974 30.021,169.11 30.598,168.678 31.605,167.526 32.47,167.669
+ 33.334,168.678 34.197,169.974 34.63,170.984 34.773,172.422 32.758,172.998 31.462,172.854 30.453,171.99 29.445,170.984
+ 28.869,170.406 29.014,169.974 "/>
+ <polyline id="polyline75" fill="#FFFFFF" points="31.174,160.184 31.75,159.896 31.894,159.896 32.758,159.608 33.478,159.896
+ 34.342,160.902 35.205,161.333 36.214,161.48 37.798,162.486 37.798,163.064 37.077,164.648 36.357,165.654 33.766,166.232
+ 32.758,165.51 32.037,164.07 31.462,162.629 31.174,161.622 31.174,160.184 "/>
+ <polyline id="polyline77" fill="#FFFFFF" points="31.462,120.44 32.47,119.574 33.909,119.574 35.35,121.014 36.357,122.312
+ 36.214,122.888 35.493,123.318 32.037,123.318 31.317,122.742 31.462,120.44 "/>
+ <polyline id="polyline79" fill="#FFFFFF" points="32.613,142.614 35.926,142.614 37.222,144.056 38.806,146.07 40.678,148.808
+ 40.678,151.254 40.102,152.694 37.222,152.694 35.926,151.686 35.062,150.678 33.478,149.238 33.046,147.078 32.47,144.917
+ 32.613,143.333 32.613,142.614 "/>
+ <polyline id="polyline81" fill="#FFFFFF" points="33.909,126.776 34.918,125.768 36.214,124.902 38.086,124.758 39.094,126.198
+ 40.102,128.213 40.102,129.078 39.094,130.085 37.222,130.52 35.35,130.52 34.342,129.51 33.909,128.07 33.909,126.776 "/>
+ <polyline id="polyline83" fill="#FFFFFF" points="34.054,175.877 38.229,175.877 38.806,177.03 39.094,178.47 38.949,179.192
+ 38.373,179.766 36.934,180.198 36.357,180.198 35.35,179.192 34.918,178.758 34.485,177.894 33.909,177.318 34.054,176.598
+ 34.054,175.877 "/>
+ <polyline id="polyline85" fill="#FFFFFF" points="35.35,167.669 37.077,167.526 38.229,168.104 39.094,169.11 40.102,170.118
+ 40.102,171.558 39.237,171.99 38.373,171.99 37.798,172.422 37.365,172.422 36.357,171.846 35.926,170.838 35.35,169.974
+ 35.35,167.669 "/>
+ <polyline id="polyline87" fill="#FFFFFF" points="35.781,114.678 36.357,113.238 37.798,111.797 40.102,111.797 40.678,112.374
+ 40.678,115.11 38.661,117.56 38.229,117.99 37.365,117.99 36.357,117.56 35.781,116.549 35.781,114.678 "/>
+ <polyline id="polyline89" fill="#FFFFFF" points="36.357,157.446 37.077,157.016 37.798,156.582 39.67,155.574 43.126,155.574
+ 45.43,156.582 45.573,159.318 44.422,161.622 41.542,161.91 39.382,160.758 37.365,159.461 36.357,158.454 36.357,157.446 "/>
+ <polyline id="polyline91" fill="#FFFFFF" points="39.237,164.213 39.958,163.926 40.39,163.782 41.542,163.782 42.981,164.213
+ 44.422,164.79 45.285,165.224 46.438,165.797 47.878,167.238 47.878,168.392 46.869,169.542 46.438,170.549 45.573,171.414
+ 44.998,171.846 42.55,171.99 41.686,170.984 41.109,170.406 40.533,168.392 40.245,167.669 39.237,166.662 39.237,164.213 "/>
+ <polyline id="polyline93" fill="#FFFFFF" points="39.237,119.574 39.67,119.144 40.678,118.133 42.117,116.694 43.558,116.694
+ 45.43,117.125 45.861,117.56 46.438,120.006 46.294,123.318 45.43,124.758 43.989,125.192 41.109,125.192 40.533,124.326
+ 39.67,121.877 39.237,121.304 39.237,119.574 "/>
+ <polyline id="polyline95" fill="#FFFFFF" points="39.67,107.045 40.533,106.038 42.405,106.038 44.854,107.045 44.998,107.91
+ 43.413,108.917 42.55,109.782 41.109,109.926 40.245,109.494 39.67,108.917 39.67,107.045 "/>
+ <polyline id="polyline97" fill="#FFFFFF" points="39.813,175.446 40.39,174.582 40.966,174.293 42.262,174.15 43.846,175.59
+ 44.565,176.024 45.285,176.742 46.149,177.461 46.006,177.894 45.718,178.902 44.998,179.766 44.134,180.629 42.55,180.629
+ 41.254,179.91 39.958,179.045 39.958,178.326 40.39,177.894 40.102,176.886 39.958,176.454 39.813,175.446 "/>
+ <polyline id="polyline99" fill="#FFFFFF" points="42.405,112.95 43.126,112.232 43.846,111.366 45.43,109.926 45.861,109.494
+ 47.302,109.494 48.31,110.358 48.741,110.936 49.75,112.232 49.75,114.246 49.317,114.678 47.59,114.965 43.413,114.678
+ 42.405,114.104 42.405,112.95 "/>
+ <polyline id="polyline101" fill="#FFFFFF" points="43.558,101.862 44.422,100.998 45.43,100.278 50.901,100.133 53.062,100.709
+ 53.205,103.014 52.63,103.592 51.766,104.024 51.189,105.03 50.182,106.038 48.886,106.038 47.878,105.174 46.438,104.454
+ 45.573,104.166 44.565,103.304 43.558,102.728 43.558,101.862 "/>
+ <polyline id="polyline103" fill="#FFFFFF" points="44.998,181.35 46.006,180.486 46.726,180.198 47.302,179.192 47.302,178.47
+ 48.453,178.47 49.75,178.902 50.182,180.054 50.613,180.776 50.613,185.669 50.037,186.102 48.166,186.102 47.733,185.526
+ 46.582,184.232 45.573,183.366 44.998,182.79 44.998,181.35 "/>
+ <polyline id="polyline105" fill="#FFFFFF" points="45.43,198.776 46.006,198.629 47.302,198.776 47.878,199.926 48.453,200.648
+ 49.462,201.51 50.182,201.654 48.453,199.926 48.021,199.064 47.157,197.48 47.302,195.174 47.878,194.454 48.453,194.024
+ 48.886,194.024 49.75,194.598 50.613,195.461 51.046,196.038 51.766,196.47 52.63,196.902 52.918,197.045 54.214,197.48
+ 55.798,197.48 54.069,196.758 52.342,195.75 50.901,194.598 49.894,193.301 49.894,188.262 50.613,187.542 52.63,187.542
+ 54.646,187.83 55.798,188.118 57.525,188.118 55.653,187.686 54.069,186.822 52.918,186.39 52.054,185.238 51.766,183.942
+ 51.766,180.776 51.909,179.48 52.63,179.045 54.214,179.333 54.934,179.766 55.798,180.198 57.382,180.776 58.966,181.206
+ 59.542,181.206 56.806,180.054 54.789,178.902 53.781,177.894 52.342,177.03 50.613,176.454 49.317,175.446 48.31,175.014
+ 46.726,173.43 46.869,172.133 47.302,171.125 48.741,169.83 49.894,168.822 50.47,168.246 51.621,168.246 54.214,168.678
+ 58.533,169.4 61.126,169.686 61.989,169.83 62.854,170.694 63.861,171.846 64.438,172.998 65.445,175.158 66.598,176.598
+ 68.037,178.902 69.334,180.917 70.63,183.222 71.926,184.95 72.789,186.39 73.941,187.974 74.806,188.838 75.525,189.27
+ 77.397,189.558 78.981,189.558 80.134,190.133 81.718,190.133 81.718,190.568 82.006,191.717 82.294,192.006 82.869,190.422
+ 83.302,188.984 84.166,187.83 84.453,186.822 85.462,185.526 85.605,183.942 85.605,183.366 85.317,184.662 84.886,185.958
+ 84.166,186.822 83.59,187.83 83.157,188.838 82.006,189.27 80.71,189.27 78.981,188.838 77.109,188.694 76.102,187.974
+ 75.237,187.11 73.51,185.238 72.357,183.366 70.485,180.776 68.47,177.461 67.317,175.158 66.598,172.709 65.59,170.838
+ 64.438,168.822 64.582,167.669 65.445,166.95 66.166,165.797 68.037,164.648 69.046,163.782 69.334,163.494 69.766,162.342
+ 70.63,161.91 71.493,161.045 72.646,160.184 73.51,159.174 74.518,158.024 75.237,157.59 75.813,156.87 76.39,156.728
+ 84.598,155.286 91.365,154.568 97.701,154.133 98.71,154.278 101.733,158.024 103.894,161.192 106.197,164.358 108.646,168.104
+ 110.086,170.694 110.518,170.984 113.109,171.414 121.317,172.568 129.67,173.574 135.43,174.44 138.598,175.446 140.182,177.75
+ 141.478,181.206 142.773,185.816 143.493,194.024 143.926,203.526 144.069,209.286 143.781,209.717 142.773,210.438
+ 140.182,211.301 135.718,212.31 125.926,214.326 115.413,216.198 105.189,218.648 99.142,219.51 97.27,219.366 94.245,216.629
+ 89.781,213.03 84.886,208.709 83.302,207.27 80.134,204.822 78.117,203.094 76.966,203.094 75.237,203.67 72.069,203.816
+ 68.182,204.822 64.149,205.254 60.405,205.542 56.373,205.542 53.493,205.4 51.909,204.965 50.613,203.958 49.317,203.238
+ 46.869,203.238 45.718,202.95 45.285,202.518 45.43,198.776 "/>
+ <polyline id="polyline107" fill="#FFFFFF" points="45.43,96.965 45.861,96.246 46.006,95.958 46.869,94.95 48.166,94.085
+ 50.758,94.085 53.062,95.094 53.062,97.83 52.054,98.694 50.182,98.984 46.438,98.694 45.43,97.83 45.43,96.965 "/>
+ <polyline id="polyline109" fill="#FFFFFF" points="46.869,119.574 47.878,117.56 49.317,116.262 50.325,115.11 51.046,115.11
+ 52.63,116.694 53.493,119.144 54.069,120.293 53.062,121.877 51.046,122.888 49.174,123.174 47.445,122.742 46.869,121.446
+ 46.869,119.574 "/>
+ <polyline id="polyline111" fill="#FFFFFF" points="50.325,90.631 51.189,89.768 51.766,88.76 52.485,88.184 53.638,88.326
+ 54.357,88.76 55.51,89.333 56.518,90.198 56.518,92.501 55.51,93.366 54.502,93.942 52.918,93.942 51.334,93.078 50.182,91.926
+ 50.325,90.631 "/>
+ <polyline id="polyline113" fill="#FFFFFF" points="50.613,108.056 51.334,107.192 51.766,106.614 52.197,105.608 53.205,103.734
+ 53.926,103.304 54.934,103.304 56.373,104.6 57.094,106.326 57.237,107.622 58.245,108.776 58.821,109.782 58.821,111.224
+ 57.525,112.232 56.661,112.808 55.798,113.816 54.789,113.669 53.638,112.232 52.197,110.79 51.189,109.352 50.758,108.917
+ 50.758,108.629 50.613,108.056 "/>
+ <polyline id="polyline115" fill="#FFFFFF" points="54.214,97.4 54.646,95.381 55.653,94.662 57.237,94.085 58.39,94.085
+ 60.405,95.094 62.277,96.392 62.71,98.406 62.71,100.133 61.701,101.286 59.397,103.014 58.966,103.592 57.67,103.592
+ 56.806,102.728 55.51,101.43 54.214,99.702 54.214,97.4 "/>
+ <polyline id="polyline117" fill="#FFFFFF" points="54.646,385.253 55.51,384.534 57.382,384.39 57.525,385.827 55.077,385.827
+ 54.646,385.253 "/>
+ <polyline id="polyline119" fill="#FFFFFF" points="55.653,122.6 57.382,125.045 58.39,127.64 59.829,130.232 62.134,135.272
+ 65.302,141.608 69.766,150.246 72.502,154.998 73.365,156.582 73.222,157.446 71.205,159.03 68.47,161.333 65.014,164.07
+ 62.134,166.518 60.981,167.381 51.766,166.662 48.453,165.224 46.006,163.206 46.006,161.91 46.438,160.472 47.014,158.024
+ 47.59,156.438 48.598,156.582 52.342,157.158 52.918,156.438 52.63,155.862 50.613,155.574 48.886,155.286 46.869,154.133
+ 44.998,153.125 42.693,152.694 41.974,152.262 41.829,149.816 42.117,146.648 41.254,145.782 40.966,145.206 40.39,144.486
+ 39.958,143.622 39.382,143.045 39.382,142.184 39.237,141.608 42.693,141.896 43.989,142.326 46.006,142.902 47.157,143.622
+ 45.573,142.184 43.27,141.461 40.966,141.03 37.941,140.312 35.638,139.877 32.758,139.158 32.758,137.717 33.189,135.99
+ 34.054,134.694 35.493,133.542 36.069,133.976 36.502,134.406 37.798,134.549 37.51,133.11 37.365,132.246 38.373,131.669
+ 40.966,130.662 42.262,130.95 43.558,132.822 45.285,133.976 46.582,135.125 47.014,135.272 47.014,134.549 45.43,132.965
+ 44.277,131.094 43.126,129.654 42.693,129.078 42.693,127.494 44.134,126.917 45.718,126.486 46.006,125.768 46.869,124.614
+ 49.894,124.614 50.325,126.198 50.758,128.07 51.334,129.366 52.342,130.085 51.621,128.07 51.334,125.768 51.189,124.184
+ 52.918,123.03 53.926,122.454 55.653,122.6 "/>
+ <polyline id="polyline121" fill="#FFFFFF" points="56.086,115.254 57.525,114.246 58.966,112.808 59.686,112.232 61.989,112.374
+ 64.582,113.094 65.878,114.104 66.166,117.56 66.166,119.43 64.726,120.728 62.71,121.734 60.838,122.312 59.686,123.318
+ 58.966,123.318 58.102,121.446 56.949,118.709 56.086,116.984 56.086,115.254 "/>
+ <polyline id="polyline123" fill="#FFFFFF" points="58.245,106.184 58.678,105.318 59.686,104.312 60.981,103.304 61.701,102.582
+ 63.142,102.15 64.149,102.006 65.445,102.728 66.598,103.592 67.317,103.592 68.037,104.6 68.037,108.917 67.75,110.213
+ 67.174,111.224 66.453,112.085 64.726,112.232 62.565,111.797 60.981,111.224 59.397,109.782 58.821,108.056 58.102,106.76
+ 58.245,106.184 "/>
+ <polyline id="polyline125" fill="#FFFFFF" points="58.533,88.038 59.109,87.896 60.693,87.896 62.277,88.326 63.718,89.768
+ 63.718,92.501 62.71,93.366 61.701,93.942 61.27,93.942 59.397,92.501 58.821,90.631 58.39,89.192 58.39,88.902 58.533,88.038 "/>
+ <polyline id="polyline127" fill="#FFFFFF" points="60.693,127.206 60.262,126.917 59.974,125.622 60.262,124.614 60.693,124.184
+ 61.126,123.75 61.989,123.174 62.71,122.742 63.573,122.6 64.582,121.734 65.733,121.014 66.453,121.446 66.886,122.312
+ 67.029,123.461 67.462,124.902 68.037,125.91 69.189,127.064 68.182,125.192 67.317,123.174 67.317,118.856 67.894,118.422
+ 68.47,117.846 72.214,117.846 74.086,118.278 75.094,119.43 75.958,122.312 76.39,122.742 77.109,123.461 76.966,116.549
+ 77.974,115.11 78.838,113.669 79.846,112.662 80.998,111.654 82.869,109.782 84.166,109.782 84.741,110.358 85.605,110.79
+ 86.182,111.366 87.189,112.085 87.621,112.52 88.485,114.822 89.062,116.118 89.493,117.846 89.638,120.293 89.493,123.608
+ 89.781,127.206 90.214,129.224 90.069,132.678 90.069,135.56 90.357,136.998 91.222,139.158 90.646,136.422 90.646,129.366
+ 90.357,127.206 90.646,122.454 90.357,120.293 90.214,118.709 89.781,115.976 89.781,114.678 90.357,112.662 91.222,110.79
+ 91.941,109.352 92.949,107.768 93.813,106.902 94.39,106.326 95.254,105.896 97.126,105.896 97.701,106.472 98.565,106.902
+ 98.998,107.91 98.998,112.662 98.854,114.534 99.43,115.976 100.149,117.99 100.726,119.144 101.157,120.728 101.302,122.166
+ 101.445,123.03 101.302,123.896 100.438,125.768 101.878,123.608 102.021,121.304 101.733,119.72 101.157,118.278 100.582,117.125
+ 100.294,115.976 100.149,114.678 100.149,112.95 100.438,111.654 101.014,111.654 102.741,111.366 104.613,110.79 106.054,110.501
+ 108.357,110.501 108.934,110.648 108.934,112.085 109.365,113.238 109.653,114.965 110.086,116.549 109.798,117.846
+ 109.51,118.568 110.806,116.984 110.518,115.83 110.373,114.822 110.373,113.958 110.086,112.662 110.086,111.797 109.941,110.501
+ 109.798,109.782 110.373,109.064 110.949,108.056 111.67,107.333 112.102,106.76 112.533,105.75 112.821,104.888 112.821,104.166
+ 113.109,103.592 113.974,103.592 115.558,103.734 117.861,104.024 120.741,105.174 124.63,107.48 126.934,109.352 130.245,112.662
+ 133.701,117.56 136.438,121.304 138.886,124.758 141.766,128.501 143.062,132.246 143.062,136.422 141.621,143.192
+ 140.037,149.526 138.021,156.438 136.438,161.91 136.006,165.797 136.438,169.83 137.157,171.846 137.878,174.293 135.573,173.574
+ 131.686,173.142 127.077,172.568 122.037,171.846 116.71,170.984 111.958,170.262 110.806,170.118 109.077,166.662 107.35,163.926
+ 105.621,161.48 103.462,158.742 101.302,155.862 100.149,154.568 98.565,152.838 97.126,151.686 95.686,150.678 95.109,150.534
+ 96.693,151.976 97.701,153.272 95.829,152.838 92.806,153.125 89.205,153.56 84.598,154.133 81.43,154.422 78.117,154.854
+ 76.102,154.998 74.806,154.854 73.798,154.278 72.934,153.414 71.493,150.822 68.613,145.352 64.438,137.574 61.989,131.669
+ 61.126,130.085 61.27,128.07 60.693,127.206 "/>
+ <polyline id="polyline129" fill="#FFFFFF" points="64.149,94.52 65.733,93.078 66.453,92.648 67.605,92.213 68.613,91.782
+ 70.197,91.64 71.35,93.078 72.789,94.662 73.798,96.104 74.229,96.965 74.229,97.4 73.365,98.694 71.781,99.702 70.485,100.709
+ 69.046,101.574 68.182,102.15 66.166,100.709 64.726,98.838 64.006,96.678 64.149,94.52 "/>
+ <polyline id="polyline131" fill="#FFFFFF" points="64.726,84.87 66.598,84.87 68.037,85.877 68.613,86.312 69.046,88.038
+ 68.901,89.622 65.59,89.768 64.582,88.184 64.726,85.592 64.726,84.87 "/>
+ <polyline id="polyline133" fill="#FFFFFF" points="67.894,115.254 68.037,112.95 68.758,110.501 70.054,109.782 71.638,110.07
+ 74.373,111.078 76.102,111.654 76.245,112.662 75.382,113.816 75.237,115.254 74.086,116.694 72.789,117.272 70.197,116.984
+ 68.47,116.262 67.894,115.254 "/>
+ <polyline id="polyline135" fill="#FFFFFF" points="69.478,107.622 69.766,106.902 70.485,105.03 72.069,103.158 73.365,101.286
+ 74.661,100.278 76.245,100.422 78.117,102.295 79.558,104.312 80.565,106.614 80.565,108.056 79.126,109.926 77.974,110.648
+ 75.382,110.648 73.077,109.782 71.062,108.776 70.197,108.342 69.478,107.622 "/>
+ <polyline id="polyline137" fill="#FFFFFF" points="70.918,83.432 71.35,82.136 72.502,80.984 73.365,80.984 74.661,81.56
+ 76.102,82.568 77.542,83.432 77.686,85.877 76.678,86.312 73.653,86.888 72.214,87.75 71.638,87.75 70.918,86.312 71.35,85.446
+ 71.35,84.728 70.918,84.006 70.918,83.432 "/>
+ <polyline id="polyline139" fill="#FFFFFF" points="73.222,89.622 73.941,89.192 75.237,88.76 76.821,88.184 78.117,87.75
+ 78.693,87.318 80.998,87.463 82.006,88.326 82.006,89.622 80.998,90.631 80.422,91.64 79.413,92.79 78.117,93.51 76.678,93.51
+ 75.237,92.501 73.798,91.64 73.222,90.631 73.222,89.622 "/>
+ <polyline id="polyline141" fill="#FFFFFF" points="77.254,95.669 77.829,95.094 78.981,94.95 79.701,94.085 80.422,93.078
+ 81.573,92.07 82.869,91.064 84.31,89.622 84.886,89.192 85.174,88.76 85.75,88.76 86.325,90.198 86.613,96.965 86.613,100.278
+ 85.462,100.998 81.573,100.998 79.558,100.709 78.55,99.272 78.117,97.688 77.542,96.822 77.254,95.669 "/>
+ <polyline id="polyline143" fill="#FFFFFF" points="77.254,78.68 77.686,77.669 78.693,76.662 79.27,76.232 80.422,76.232
+ 80.998,77.238 81.43,78.822 81.43,80.551 80.565,81.56 79.989,81.99 79.27,81.99 78.117,80.984 77.109,79.976 77.254,78.68 "/>
+ <polyline id="polyline145" fill="#FFFFFF" points="78.262,390.438 78.838,389.862 80.854,389.862 82.006,390.007 82.438,390.87
+ 82.294,391.304 81.718,391.733 80.134,391.878 79.126,391.591 78.405,390.87 78.262,390.438 "/>
+ <polyline id="polyline147" fill="#FFFFFF" points="82.006,82.422 83.014,81.56 83.878,80.984 86.901,80.694 89.926,80.551
+ 91.222,81.56 91.653,82.568 91.653,84.295 90.214,85.877 88.197,87.463 86.758,88.184 85.75,88.184 84.021,86.742 82.438,85.446
+ 82.006,84.87 82.006,82.422 "/>
+ <polyline id="polyline149" fill="#FFFFFF" points="83.014,104.024 84.021,103.304 87.334,103.304 88.342,101.862 89.35,100.709
+ 89.781,99.272 94.245,99.414 95.542,97.83 96.693,96.246 96.981,95.526 98.422,95.526 100.294,97.976 101.59,99.702 101.59,102.15
+ 100.149,103.446 98.998,104.6 98.565,105.461 97.27,105.461 95.254,104.888 93.813,105.03 92.661,106.326 91.222,108.342
+ 89.926,110.358 89.062,111.366 87.909,111.366 87.189,111.078 86.325,109.494 85.462,108.629 84.31,108.056 83.59,107.045
+ 83.014,105.608 83.014,104.024 "/>
+ <polyline id="polyline151" fill="#FFFFFF" points="83.014,76.232 83.733,75.224 85.75,75.224 87.334,76.232 88.197,77.238
+ 88.197,78.68 86.901,79.4 85.174,79.542 84.453,79.542 83.445,78.967 83.014,77.958 83.014,76.232 "/>
+ <polyline id="polyline153" fill="#FFFFFF" points="85.317,397.065 85.317,396.058 85.894,395.479 89.205,395.622 91.222,396.63
+ 91.653,397.351 91.653,398.358 90.069,399.222 88.485,398.935 86.47,398.358 85.317,397.065 "/>
+ <polyline id="polyline155" fill="#FFFFFF" points="88.197,91.206 88.773,90.342 90.214,88.76 91.653,87.318 92.806,86.312
+ 93.525,86.888 93.958,88.184 94.966,90.198 95.829,92.07 96.262,93.224 95.829,94.52 94.966,95.381 93.525,96.678 90.646,96.822
+ 89.205,95.958 88.773,94.95 88.197,92.648 88.197,91.206 "/>
+ <polyline id="polyline157" fill="#FFFFFF" points="91.222,76.232 92.086,74.358 93.525,72.917 94.678,71.333 95.542,71.047
+ 96.981,71.047 98.277,71.91 99.718,73.352 100.149,74.79 100.294,76.232 99.285,77.526 97.846,79.11 96.838,80.551 95.397,81.56
+ 94.102,81.414 93.094,79.976 92.086,78.68 91.51,77.669 91.222,76.232 "/>
+ <polyline id="polyline159" fill="#FFFFFF" points="91.798,399.077 92.806,398.499 94.678,398.499 95.829,399.511 95.974,400.519
+ 95.397,400.808 92.661,400.663 91.653,399.798 91.798,399.077 "/>
+ <polyline id="polyline161" fill="#FFFFFF" points="94.533,396.198 95.686,395.479 97.27,395.046 98.71,395.331 99.43,396.774
+ 99.43,398.358 98.854,398.79 97.27,398.79 95.974,397.927 94.966,397.206 94.533,396.487 94.533,396.198 "/>
+ <polyline id="polyline163" fill="#FFFFFF" points="96.981,84.006 99.142,81.99 100.149,80.551 101.445,79.11 102.021,78.104
+ 103.029,77.096 105.334,76.662 111.237,77.238 111.094,79.83 110.518,80.838 109.365,83.144 107.926,85.016 105.909,86.024
+ 102.741,86.454 98.71,86.6 97.126,85.158 96.981,84.006 "/>
+ <polyline id="polyline165" fill="#FFFFFF" points="99.718,89.192 100.294,88.184 101.157,87.463 103.174,87.03 105.334,86.742
+ 106.918,86.312 107.638,86.312 108.214,86.742 108.789,88.038 109.51,89.622 110.373,90.486 110.373,91.494 109.653,92.648
+ 107.926,94.232 106.773,95.669 105.334,96.678 104.325,96.822 103.605,96.246 102.598,94.95 101.302,93.51 100.438,92.358
+ 99.718,90.776 99.718,89.192 "/>
+ <polyline id="polyline167" fill="#FFFFFF" points="99.718,67.592 100.149,67.016 103.174,67.158 104.182,67.592 104.901,67.879
+ 106.485,69.03 107.926,70.472 107.926,73.206 107.493,74.358 106.918,74.648 105.909,74.79 104.613,74.215 102.741,73.206
+ 100.726,71.768 100.294,71.333 99.861,68.888 99.718,67.592 "/>
+ <polyline id="polyline169" fill="#FFFFFF" points="103.029,102.006 103.462,101.286 103.605,101.144 104.182,100.709
+ 105.046,100.856 106.485,101.72 106.918,101.862 107.926,102.44 109.365,102.728 109.941,103.304 109.941,108.342 108.934,109.206
+ 107.062,109.64 105.046,109.64 103.894,110.358 101.157,110.358 99.861,109.352 99.285,108.198 99.285,105.03 100.149,104.454
+ 101.302,103.304 102.31,102.582 103.029,102.006 "/>
+ <polyline id="polyline171" fill="#FFFFFF" points="106.054,63.702 106.485,62.984 107.493,62.406 108.789,62.406 109.941,63.414
+ 110.806,64.856 110.949,66.582 110.806,67.734 110.229,68.166 109.365,68.6 107.35,68.166 106.342,67.158 106.054,66.728
+ 106.054,63.702 "/>
+ <polyline id="polyline173" fill="#FFFFFF" points="106.197,97.83 107.062,96.822 109.51,94.374 110.518,93.654 114.117,93.654
+ 116.71,94.232 118.294,94.95 121.029,95.816 122.613,97.4 123.478,98.406 123.478,99.846 123.189,101.43 121.75,103.304
+ 120.741,104.024 118.438,103.446 115.558,102.728 114.262,102.15 111.094,101.144 108.502,100.278 106.918,99.702 106.054,98.694
+ 106.197,97.83 "/>
+ <polyline id="polyline175" fill="#FFFFFF" points="109.365,84.728 109.941,83.432 111.094,81.99 111.813,80.406 112.821,78.822
+ 113.829,77.669 115.558,77.669 116.998,78.104 118.869,79.11 119.302,80.118 119.59,81.702 120.453,85.446 121.317,87.03
+ 121.462,87.75 121.462,89.333 120.598,90.198 119.878,91.206 119.733,92.07 119.302,92.936 118.582,93.366 117.285,93.366
+ 115.413,92.936 114.693,92.501 113.254,91.926 111.67,90.776 110.806,89.192 110.518,87.318 109.941,86.6 109.653,85.877
+ 109.365,85.158 109.365,84.728 "/>
+ <polyline id="polyline177" fill="#FFFFFF" points="110.373,73.782 110.661,73.064 110.806,72.776 111.237,71.91 112.102,70.902
+ 112.966,69.03 113.829,68.166 114.693,67.446 116.134,67.158 117.573,66.582 119.878,66.582 120.886,67.592 121.317,68.454
+ 121.317,73.206 119.878,75.078 118.438,76.662 117.285,76.662 115.701,76.085 113.686,75.512 111.382,75.224 110.373,74.648
+ 110.373,73.782 "/>
+ <polyline id="polyline179" fill="#FFFFFF" points="111.958,62.264 112.821,60.822 113.397,60.246 117.142,60.392 117.573,60.967
+ 118.149,63.414 117.573,64.278 116.71,64.711 114.693,65.144 114.262,65.144 113.397,64.711 112.821,64.136 112.245,63.272
+ 111.958,62.264 "/>
+ <polyline id="polyline181" fill="#FFFFFF" points="119.733,93.654 121.029,92.501 122.182,91.494 123.189,90.776 123.621,90.486
+ 124.773,90.917 126.357,92.501 127.365,94.52 126.357,95.958 125.062,97.254 123.909,97.688 122.182,95.958 121.029,95.094
+ 119.878,94.52 119.59,94.085 119.733,93.654 "/>
+ <polyline id="polyline183" fill="#FFFFFF" points="120.453,77.669 121.029,76.52 122.47,75.224 123.909,74.358 126.214,73.782
+ 130.102,73.782 131.109,74.358 131.542,76.232 131.974,78.534 131.829,79.4 130.533,80.406 129.525,80.984 127.941,81.848
+ 126.789,82.856 125.493,83.432 124.918,83.286 124.342,83.72 122.901,83.72 122.325,83.286 122.037,82.422 121.317,80.984
+ 120.598,79.542 120.453,77.669 "/>
+ <polyline id="polyline185" fill="#FFFFFF" points="120.598,62.694 120.886,62.118 121.029,61.688 122.037,60.392 123.046,59.958
+ 125.35,59.816 126.214,60.392 126.646,60.822 126.934,62.118 126.357,63.127 125.35,64.136 124.342,64.568 121.174,64.711
+ 120.598,64.136 120.598,62.694 "/>
+ <polyline id="polyline187" fill="#FFFFFF" points="122.47,104.742 122.613,104.024 122.613,103.446 123.766,101.862
+ 124.918,100.422 125.781,98.549 127.077,96.822 128.086,96.246 129.67,96.246 130.966,97.976 131.686,100.133 132.981,101.862
+ 134.277,103.592 132.981,100.422 131.397,97.11 130.821,94.662 130.678,93.799 132.405,92.501 134.134,91.64 136.006,91.064
+ 137.59,91.352 139.75,93.799 140.758,96.822 141.478,100.422 142.054,104.6 143.493,107.045 145.653,109.782 147.094,111.797
+ 146.806,112.374 144.214,114.534 140.325,117.56 137.878,119.862 137.302,120.293 135.573,117.846 131.829,112.662
+ 129.094,109.494 126.357,107.192 123.621,105.461 123.189,105.174 122.47,104.742 "/>
+ <polyline id="polyline189" fill="#FFFFFF" points="123.766,67.734 124.773,66.295 125.781,64.856 126.789,63.99 128.229,63.99
+ 129.094,64.422 130.102,64.998 131.109,65.862 131.397,66.295 132.405,66.87 132.981,67.879 132.838,69.608 132.405,70.614
+ 131.974,71.48 131.397,71.91 130.966,72.486 129.958,72.917 126.214,72.917 125.35,72.486 123.909,71.91 123.766,67.734 "/>
+ <polyline id="polyline191" fill="#FFFFFF" points="124.773,85.877 125.781,85.016 126.789,83.862 128.086,83.574 129.813,83.432
+ 131.109,82.568 132.693,82.136 133.846,81.99 134.565,82.856 135.573,84.295 136.294,85.446 136.294,86.742 135.43,87.608
+ 134.422,88.184 132.55,89.045 131.109,89.768 130.102,90.631 129.525,91.064 128.229,91.064 126.646,90.198 126.214,89.045
+ 125.781,88.184 124.773,86.742 124.773,85.877 "/>
+ <polyline id="polyline193" fill="#FFFFFF" points="130.102,59.526 130.821,59.238 132.838,58.95 134.998,59.238 136.294,59.816
+ 136.869,60.246 137.59,61.11 137.302,61.688 136.294,62.551 135.43,63.56 134.565,63.99 132.55,63.99 131.254,63.56
+ 130.678,62.694 130.102,62.264 130.102,59.526 "/>
+ <polyline id="polyline195" fill="#FFFFFF" points="134.277,74.215 134.998,73.782 136.006,73.352 140.613,73.352 141.766,74.79
+ 142.485,75.654 145.077,75.799 145.653,76.52 146.661,77.096 147.67,77.816 147.67,79.4 146.661,80.694 145.222,81.414
+ 143.638,82.568 140.901,83.574 140.47,84.006 137.59,83.862 137.157,82.856 136.582,81.99 136.149,80.984 135.718,79.542
+ 135.142,78.104 134.854,77.096 134.277,76.232 134.277,74.215 "/>
+ <polyline id="polyline197" fill="#FFFFFF" points="134.71,70.902 134.998,70.184 135.142,69.896 135.718,69.03 136.006,68.166
+ 137.59,66.582 138.166,66.15 139.174,66.15 139.894,67.158 140.47,68.6 140.47,71.48 138.886,72.776 137.445,72.917 134.71,72.776
+ 134.71,70.902 "/>
+ <polyline id="polyline199" fill="#FFFFFF" points="138.741,120.87 144.214,116.694 148.966,113.381 150.262,113.381
+ 157.605,115.11 158.758,121.158 160.485,128.648 160.773,132.822 155.014,132.965 149.686,132.822 144.934,133.542
+ 144.069,129.366 141.621,125.48 138.453,121.59 138.31,121.304 138.741,120.87 "/>
+ <polyline id="polyline201" fill="#FFFFFF" points="139.462,60.104 139.894,59.669 140.47,59.238 141.478,58.808 143.35,58.808
+ 143.781,59.669 143.781,62.984 143.062,64.136 142.342,64.568 141.334,64.568 140.037,63.99 139.462,63.56 139.029,61.976
+ 139.029,61.11 139.462,60.104 "/>
+ <polyline id="polyline203" fill="#FFFFFF" points="141.046,634.087 141.766,633.509 141.909,633.366 143.205,632.935
+ 143.35,632.935 144.502,633.509 145.077,634.087 144.789,634.374 144.214,634.806 140.901,634.806 141.046,634.087 "/>
+ <polyline id="polyline205" fill="#FFFFFF" points="142.63,67.016 143.205,66.582 147.958,66.582 149.397,66.15 149.974,66.15
+ 150.262,66.582 150.405,69.463 149.829,70.902 148.821,72.344 148.39,73.206 147.382,74.648 146.949,75.078 145.941,75.512
+ 143.781,75.512 142.197,74.358 141.766,72.344 141.766,70.902 142.63,67.016 "/>
+ <polyline id="polyline207" fill="#FFFFFF" points="144.646,630.919 145.077,630.198 146.518,630.198 147.382,631.206
+ 147.382,632.646 146.949,632.935 146.518,632.935 145.51,632.214 144.789,631.495 144.646,630.919 "/>
+ <polyline id="polyline209" fill="#FFFFFF" points="146.086,60.822 146.806,60.392 147.237,60.104 149.542,60.246 150.55,61.254
+ 150.405,63.56 149.974,63.99 149.397,64.568 148.102,65.144 147.094,65.144 146.229,64.568 145.653,63.99 145.653,63.56
+ 145.941,61.688 146.086,60.822 "/>
+ <polyline id="polyline211" fill="#FFFFFF" points="149.109,627.317 149.542,627.03 150.117,627.03 151.126,628.038
+ 151.126,630.198 150.117,630.919 149.686,630.919 149.109,630.198 148.678,629.622 148.678,628.181 149.109,627.317 "/>
+ <polyline id="polyline213" fill="#FFFFFF" points="149.254,617.382 149.686,616.806 150.117,616.374 150.693,615.942
+ 151.126,615.366 151.989,615.366 152.854,615.798 153.573,616.806 154.006,617.813 153.861,618.247 153.43,619.255
+ 151.126,621.558 150.55,621.558 150.117,621.126 149.686,619.687 149.254,618.679 149.254,617.382 "/>
+ <polyline id="polyline215" fill="#FFFFFF" points="150.405,75.654 151.126,75.078 151.413,74.79 152.422,74.79 153.285,75.224
+ 154.294,76.085 155.302,76.662 158.037,76.808 158.613,77.526 159.621,77.669 161.062,78.104 161.493,79.542 161.493,82.422
+ 160.918,82.998 160.485,83.432 160.054,83.862 156.31,83.862 155.302,83.432 151.558,83.432 150.405,82.422 150.405,75.654 "/>
+ <polyline id="polyline217" fill="#FFFFFF" points="151.989,624.005 152.71,623.286 152.998,622.997 155.878,622.997
+ 156.31,623.431 156.453,624.294 155.878,624.726 154.438,625.444 152.998,625.302 151.989,624.581 151.989,624.005 "/>
+ <polyline id="polyline219" fill="#FFFFFF" points="152.565,62.118 152.854,61.11 153.285,60.246 153.861,59.238 154.726,58.374
+ 156.166,58.232 156.741,59.238 158.037,60.68 158.182,62.984 157.75,64.136 156.598,64.998 153.861,64.998 152.854,64.568
+ 152.565,62.118 "/>
+ <polyline id="polyline221" fill="#FFFFFF" points="152.854,69.03 153.43,68.312 153.861,67.592 154.869,67.592 155.733,68.024
+ 157.174,69.896 158.182,70.038 160.485,70.472 161.493,71.333 161.493,73.352 161.062,75.224 160.485,75.654 159.478,76.232
+ 155.302,75.942 154.294,75.224 153.285,73.782 152.854,72.776 152.854,69.03 "/>
+ <polyline id="polyline223" fill="#FFFFFF" points="153.43,613.062 154.149,612.341 154.582,612.054 156.31,612.054
+ 157.605,612.483 158.325,613.062 158.325,614.79 157.75,615.366 156.453,615.798 154.438,615.798 154.006,615.366 153.43,614.79
+ 153.43,613.062 "/>
+ <polyline id="polyline225" fill="#FFFFFF" points="154.582,619.974 155.157,618.966 155.59,617.958 156.166,617.524
+ 157.462,617.095 158.182,617.671 158.037,620.403 157.462,620.839 154.582,620.839 154.582,619.974 "/>
+ <polyline id="polyline227" fill="#FFFFFF" points="159.189,398.935 161.638,398.358 168.117,397.782 176.182,397.065
+ 179.926,396.487 181.798,395.767 182.949,394.472 185.254,390.729 188.134,384.245 190.582,378.774 192.886,372.581
+ 195.334,370.421 199.941,369.271 196.485,370.712 194.325,372.296 190.438,382.808 189.285,384.534 186.117,391.015
+ 182.949,396.487 181.222,397.64 176.47,398.358 167.254,398.935 159.909,399.366 159.189,398.935 "/>
+ <polyline id="polyline229" fill="#FFFFFF" points="159.189,398.935 158.47,399.222 156.886,399.366 157.462,399.222
+ 159.189,398.935 "/>
+ <polyline id="polyline231" fill="#FFFFFF" points="161.062,611.622 161.781,611.622 164.518,611.478 164.518,613.349
+ 163.941,614.501 163.51,615.366 162.502,615.942 161.781,615.942 161.205,614.79 161.062,612.341 161.062,611.622 "/>
+ <polyline id="polyline233" fill="#FFFFFF" points="161.35,606.581 162.069,606.438 162.934,606.149 163.941,606.294
+ 167.686,606.726 167.829,609.03 167.254,609.462 161.781,609.462 161.35,608.886 161.35,606.581 "/>
+ <polyline id="polyline235" fill="#FFFFFF" points="162.214,86.888 162.069,89.48 162.069,92.79 161.926,93.51 161.205,95.238
+ 160.197,96.678 157.894,99.272 157.317,100.568 157.605,100.568 158.182,99.414 159.766,97.688 162.214,94.662 162.789,92.358
+ 163.077,88.038 163.365,86.312 163.941,83.286 163.798,80.551 163.365,79.83 163.51,77.669 164.086,76.662 165.813,76.085
+ 167.397,76.232 168.693,76.662 169.27,77.096 170.134,77.526 171.573,77.669 172.149,78.68 172.582,79.4 172.582,80.406
+ 172.149,83.72 172.582,84.006 173.302,81.414 173.59,79.11 174.453,78.104 175.029,77.669 176.901,77.669 177.909,78.68
+ 178.773,79.688 179.781,80.118 180.646,80.551 181.222,80.984 183.237,80.984 184.245,80.551 185.974,80.406 186.838,81.56
+ 186.838,83.862 186.405,86.166 185.829,87.174 185.109,88.184 184.533,89.192 183.525,89.622 183.094,90.056 182.086,90.486
+ 181.077,91.064 180.214,91.494 178.773,92.07 177.334,92.501 175.894,92.501 175.029,93.078 173.878,93.51 173.014,94.374
+ 172.006,95.526 171.285,96.534 170.422,98.549 170.134,98.984 168.838,102.15 167.542,104.742 166.102,108.198 165.67,108.917
+ 164.661,110.358 162.502,112.085 160.63,113.381 158.47,114.104 155.59,113.669 151.27,112.95 149.686,111.942 148.245,110.501
+ 146.661,109.206 146.229,108.629 145.653,107.768 145.222,107.045 144.502,106.038 144.069,105.174 143.638,104.166 143.35,102.87
+ 142.918,100.278 142.342,96.678 141.909,95.526 141.478,94.808 140.901,93.366 140.758,91.926 140.325,90.917 139.894,90.056
+ 139.317,88.614 139.462,86.742 140.901,85.304 141.909,84.582 143.205,83.862 144.069,83.432 144.502,83.144 144.934,82.856
+ 145.365,82.422 149.397,82.422 150.117,82.998 150.981,84.295 151.558,84.87 151.846,85.304 152.134,85.734 152.134,85.877
+ 152.71,85.877 152.998,85.304 153.43,84.87 154.149,84.87 155.302,84.728 156.31,84.728 157.462,84.87 160.197,84.728
+ 161.062,84.728 161.926,85.016 162.214,86.888 "/>
+ <polyline id="polyline237" fill="#FFFFFF" points="163.941,62.694 163.941,67.446 163.365,67.879 162.357,68.742 161.493,68.742
+ 160.054,68.312 158.613,67.879 158.037,66.87 158.182,66.44 158.613,64.998 159.046,64.136 159.478,62.694 160.054,61.688
+ 161.062,61.11 161.926,61.254 162.934,61.688 163.077,61.83 163.941,62.694 "/>
+ <polyline id="polyline239" fill="#FFFFFF" points="165.382,72.917 165.813,71.91 166.39,70.902 166.821,70.038 167.829,69.463
+ 170.71,69.03 176.325,69.03 176.47,73.352 175.894,74.358 174.886,75.224 173.014,77.096 170.71,77.096 168.838,75.654
+ 168.262,75.224 167.254,74.79 165.382,74.215 165.382,72.917 "/>
+ <polyline id="polyline241" fill="#FFFFFF" points="167.397,107.48 168.693,105.03 169.413,102.295 170.565,99.846 171.573,97.254
+ 173.014,95.526 174.598,94.085 176.037,93.51 176.47,93.51 177.334,93.942 180.502,93.942 181.222,93.51 182.229,92.936
+ 183.094,92.501 183.958,92.648 184.39,96.392 184.966,100.568 185.974,103.592 186.405,105.75 187.27,108.776 188.277,113.094
+ 188.71,113.958 188.71,115.976 185.397,118.422 181.222,122.312 175.462,127.782 170.277,132.246 169.701,132.678 163.365,132.678
+ 162.502,131.816 162.069,129.366 161.062,126.342 160.63,123.03 159.621,118.568 159.189,116.406 159.189,114.965 160.197,114.392
+ 163.222,112.808 165.813,110.648 167.397,107.48 "/>
+ <polyline id="polyline243" fill="#FFFFFF" points="167.542,602.263 168.262,601.829 170.565,601.829 171.43,602.403 171.43,604.71
+ 170.422,605.286 168.981,605.142 168.117,604.134 167.397,603.413 167.397,602.981 167.542,602.263 "/>
+ <polyline id="polyline245" fill="#FFFFFF" points="167.686,64.136 168.117,60.68 168.693,59.669 170.565,59.669 171.43,60.246
+ 172.006,60.68 172.438,61.688 172.438,64.136 172.006,65.432 171.573,66.44 170.565,67.016 167.686,66.87 167.686,64.136 "/>
+ <polyline id="polyline247" fill="#FFFFFF" points="170.134,598.663 170.854,597.942 171.285,597.509 172.006,597.509
+ 172.582,598.374 173.157,599.095 173.733,600.103 173.733,600.39 172.582,600.821 172.149,600.966 170.854,600.247
+ 170.277,599.813 170.277,599.382 170.134,598.663 "/>
+ <polyline id="polyline249" fill="#FFFFFF" points="173.157,595.062 173.59,593.911 173.878,592.325 175.029,591.317
+ 175.605,590.886 176.901,591.03 177.766,592.038 177.766,596.646 177.189,597.653 174.741,597.798 173.733,596.79 173.157,595.782
+ 173.157,595.062 "/>
+ <polyline id="polyline251" fill="#FFFFFF" points="173.878,61.254 174.886,60.246 177.189,60.246 178.197,61.11 179.205,62.264
+ 179.638,62.694 179.638,64.568 179.205,65.574 178.773,66.15 178.197,66.44 174.886,66.44 174.021,66.006 173.445,65.432
+ 173.445,64.568 173.733,61.976 173.878,61.254 "/>
+ <polyline id="polyline253" fill="#FFFFFF" points="177.478,584.839 177.621,584.403 177.766,583.974 178.63,582.966
+ 179.493,582.103 180.214,581.958 181.077,582.534 181.222,588.149 181.653,589.157 182.086,589.733 182.086,590.743
+ 181.798,591.317 181.077,592.038 180.214,592.325 179.205,592.038 178.342,591.03 178.197,587.718 177.478,586.278
+ 177.478,584.839 "/>
+ <polyline id="polyline255" fill="#FFFFFF" points="177.766,73.064 178.197,72.486 178.342,72.198 178.773,70.76 179.35,69.896
+ 180.069,69.463 180.502,69.75 182.229,71.333 183.094,71.768 184.966,72.198 189.718,72.776 189.861,73.64 189.285,74.648
+ 188.854,75.512 188.422,76.52 187.413,77.526 184.533,77.958 181.077,77.958 180.214,77.526 179.35,77.096 178.773,76.662
+ 178.342,75.654 177.766,74.648 177.766,73.064 "/>
+ <polyline id="polyline257" fill="#FFFFFF" points="179.638,58.232 180.357,57.654 180.789,57.366 181.222,56.936 181.941,56.501
+ 182.518,56.358 183.094,56.936 183.525,57.799 183.958,58.374 184.39,58.808 184.533,59.816 184.102,60.246 183.525,60.68
+ 183.094,61.254 182.806,62.264 181.077,62.118 180.646,61.688 180.214,61.254 179.781,60.246 179.638,59.096 179.638,58.232 "/>
+ <polyline id="polyline259" fill="#FFFFFF" points="182.086,575.188 182.373,574.47 182.949,573.317 183.67,572.886 185.109,572.31
+ 186.117,572.454 186.838,572.886 187.701,573.751 187.846,574.903 186.838,575.622 185.254,576.483 184.678,577.495
+ 184.533,578.214 184.39,581.235 183.813,581.813 182.949,581.813 182.086,580.806 182.086,575.188 "/>
+ <polyline id="polyline261" fill="#FFFFFF" points="182.086,65.862 182.086,65.144 182.661,64.422 183.094,63.99 183.958,63.127
+ 184.966,62.118 186.838,62.118 187.413,62.694 188.854,64.136 189.861,65.144 190.582,66.006 191.59,66.44 192.166,67.016
+ 192.166,68.888 191.157,69.896 186.55,69.896 185.829,69.318 184.966,69.318 184.533,68.888 183.958,68.888 183.525,68.454
+ 183.237,67.879 182.661,67.016 182.086,65.862 "/>
+ <polyline id="polyline263" fill="#FFFFFF" points="183.237,585.271 183.958,584.55 184.102,584.403 184.966,584.55
+ 185.686,584.981 186.262,586.134 186.262,587.431 185.686,588.294 184.102,588.149 183.382,587.718 183.237,585.847
+ 183.237,585.271 "/>
+ <polyline id="polyline265" fill="#FFFFFF" points="185.397,56.358 185.829,55.494 186.405,54.917 186.981,54.486 187.413,54.486
+ 188.134,54.056 190.294,53.91 190.726,54.486 191.157,55.064 191.59,55.494 191.59,56.358 191.157,56.936 190.726,57.366
+ 190.294,57.799 189.718,58.374 189.285,58.808 186.405,58.808 185.974,58.374 185.397,57.942 185.397,56.358 "/>
+ <polyline id="polyline267" fill="#FFFFFF" points="186.117,579.366 187.413,578.071 188.71,577.206 189.43,576.772
+ 190.149,576.772 190.726,577.349 190.726,580.087 189.718,581.235 188.71,582.103 188.565,582.39 186.838,582.39 186.262,581.382
+ 186.117,579.942 186.117,579.366 "/>
+ <polyline id="polyline269" fill="#FFFFFF" points="187.413,566.118 188.134,565.687 190.438,565.687 193.174,566.118
+ 193.317,568.567 192.598,569.573 191.878,570.581 191.302,571.589 190.582,572.454 189.573,572.886 188.422,572.31
+ 187.413,571.302 187.413,566.118 "/>
+ <polyline id="polyline271" fill="#FFFFFF" points="189.43,107.622 189.285,107.333 188.277,104.166 187.989,101.72 187.413,99.702
+ 187.413,96.392 188.565,95.381 189.861,95.381 191.302,95.816 193.174,95.816 194.325,95.381 195.478,94.95 196.197,94.52
+ 196.918,94.52 197.35,95.381 197.926,96.392 198.357,97.688 198.934,99.127 199.365,99.702 199.941,99.702 199.798,98.406
+ 198.934,96.822 198.502,95.381 198.357,92.936 199.798,91.064 201.813,88.614 203.829,88.614 204.693,89.045 206.134,89.045
+ 206.71,88.614 208.006,88.184 209.157,87.318 210.453,86.742 211.462,86.312 211.894,86.312 212.325,86.888 212.901,89.192
+ 213.189,90.486 213.766,91.494 214.773,92.936 215.205,93.942 216.069,95.381 217.077,97.4 217.653,99.272 218.518,100.709
+ 219.525,102.582 220.533,104.024 220.533,105.608 219.958,113.238 219.525,115.976 218.949,119.862 218.518,120.293
+ 217.222,120.87 215.638,121.304 213.766,121.734 209.878,122.742 207.285,123.174 205.126,123.318 199.365,124.184
+ 197.493,124.184 196.054,122.742 194.613,120.728 193.174,117.846 191.302,113.958 190.294,111.224 189.718,108.776
+ 189.43,107.622 "/>
+ <polyline id="polyline273" fill="#FFFFFF" points="189.718,61.254 189.718,60.246 190.726,59.669 191.157,59.238 191.59,58.808
+ 192.741,58.374 194.037,58.374 194.47,58.808 195.046,59.383 195.046,62.118 194.47,62.694 194.037,63.56 193.605,63.99
+ 192.741,64.568 192.166,64.568 191.733,64.136 191.302,64.136 190.726,63.702 190.294,62.984 189.718,62.551 189.718,61.254 "/>
+ <polyline id="polyline275" fill="#FFFFFF" points="190.726,78.534 191.157,77.816 191.302,77.526 192.31,77.096 197.493,77.096
+ 198.502,77.526 198.934,79.11 199.365,80.838 199.51,81.848 198.934,83.144 197.926,83.72 196.63,83.862 195.621,84.728
+ 194.037,85.158 190.294,85.304 189.861,84.728 189.861,83.286 190.294,82.278 190.582,79.254 190.726,78.534 "/>
+ <polyline id="polyline277" fill="#FFFFFF" points="192.453,572.597 193.894,571.589 194.47,571.157 196.342,571.157
+ 196.773,571.733 196.773,574.038 195.766,574.47 193.029,574.47 192.453,573.894 192.453,572.597 "/>
+ <polyline id="polyline279" fill="#FFFFFF" points="192.741,73.64 193.174,72.631 193.605,71.768 194.037,71.192 195.046,70.184
+ 196.485,70.326 197.493,70.76 197.926,71.333 197.926,72.198 197.493,73.782 197.062,74.648 196.485,75.512 193.174,75.512
+ 192.741,74.936 192.741,73.64 "/>
+ <polyline id="polyline281" fill="#FFFFFF" points="195.909,85.304 198.646,85.304 199.798,86.312 200.373,87.174 200.373,88.614
+ 198.934,90.631 197.926,91.926 196.773,93.366 195.478,94.374 195.046,94.808 191.302,94.95 190.149,93.942 189.285,93.942
+ 187.846,93.366 187.413,92.936 187.558,92.07 187.846,90.056 188.422,89.192 188.854,88.184 189.43,87.318 191.302,86.742
+ 192.31,86.166 192.741,85.877 194.47,85.734 195.909,85.304 "/>
+ <polyline id="polyline283" fill="#FFFFFF" points="197.781,569.431 198.214,568.854 198.934,568.278 201.67,568.278
+ 201.67,570.726 200.229,572.165 199.653,572.743 198.789,572.597 198.357,572.165 197.781,571.013 197.781,569.431 "/>
+ <polyline id="polyline285" fill="#FFFFFF" points="197.781,74.215 197.926,74.07 198.502,73.64 198.934,73.064 199.51,72.631
+ 200.373,71.768 201.237,71.333 201.813,70.76 202.821,70.326 203.254,70.326 204.117,70.76 204.693,71.768 205.126,73.064
+ 205.126,74.07 204.693,75.078 204.117,76.085 202.966,76.52 201.525,77.816 199.51,77.816 198.502,76.95 197.638,75.942
+ 197.781,74.215 "/>
+ <polyline id="polyline287" fill="#FFFFFF" points="198.934,69.318 198.069,69.176 197.493,68.888 197.062,68.454 196.485,67.446
+ 196.485,66.006 196.918,64.998 197.493,64.568 197.926,64.136 198.357,63.56 199.798,63.56 200.229,64.136 200.806,64.568
+ 201.237,64.998 201.67,65.862 201.813,66.006 202.245,67.016 202.245,68.024 201.813,68.454 200.949,69.318 198.934,69.318 "/>
+ <polyline id="polyline289" fill="#FFFFFF" points="200.373,79.11 201.813,78.104 203.254,77.096 204.838,76.232 205.701,75.654
+ 206.71,75.654 207.573,76.662 208.006,77.238 208.438,78.104 209.445,79.11 209.878,79.542 210.886,80.118 212.325,80.984
+ 212.758,81.414 212.901,82.856 212.325,83.862 210.886,85.304 209.878,86.166 208.869,87.03 208.006,87.608 206.565,88.184
+ 205.126,88.038 202.245,87.174 200.806,85.158 200.373,83.862 200.373,79.11 "/>
+ <polyline id="polyline291" fill="#FFFFFF" points="201.525,565.11 202.102,564.103 202.102,563.958 202.39,562.806
+ 203.254,562.087 203.974,561.798 206.422,561.942 207.285,562.374 208.006,563.382 207.861,564.821 207.43,565.11 206.422,565.542
+ 204.981,566.981 203.974,567.702 202.966,567.702 202.102,566.981 201.67,566.55 201.525,565.542 201.525,565.11 "/>
+ <polyline id="polyline293" fill="#FFFFFF" points="206.277,66.006 205.413,64.998 205.27,64.856 204.838,63.99 204.55,63.56
+ 204.693,62.694 205.126,61.688 205.413,61.254 206.134,60.822 206.565,59.816 206.998,58.808 207.573,58.085 207.861,57.654
+ 208.438,56.936 209.445,56.936 210.021,57.654 211.462,58.52 212.325,59.383 212.325,60.822 212.037,62.406 210.31,63.702
+ 208.869,64.568 207.573,66.006 206.277,66.006 "/>
+ <polyline id="polyline295" fill="#FFFFFF" points="206.998,550.854 207.43,550.134 207.43,549.989 208.438,548.118
+ 209.733,547.542 211.605,547.397 213.334,547.974 213.766,548.694 213.621,551.718 212.758,552.294 210.741,552.294
+ 209.445,553.302 208.726,554.165 208.149,554.165 207.142,553.013 206.998,551.573 206.998,550.854 "/>
+ <polyline id="polyline297" fill="#FFFFFF" points="209.59,555.462 210.453,554.597 211.75,554.022 214.197,554.022 215.35,555.173
+ 215.35,556.759 214.773,557.333 213.909,558.341 212.901,558.774 211.174,558.919 209.878,557.911 209.157,556.612 209.59,555.462
+ "/>
+ <polyline id="polyline299" fill="#FFFFFF" points="211.174,75.942 210.31,74.79 209.878,74.215 208.726,72.776 207.573,70.472
+ 207.861,68.888 207.861,68.166 209.59,67.016 210.453,65.72 210.741,65.432 211.174,65.72 213.621,67.446 215.205,68.454
+ 214.342,70.76 213.478,72.917 212.613,74.358 211.605,75.512 211.174,75.942 "/>
+ <polyline id="polyline301" fill="#FFFFFF" points="213.334,58.374 211.894,56.936 211.462,55.928 211.317,54.486 211.894,54.056
+ 212.758,53.333 213.621,52.614 214.918,52.472 216.502,54.056 216.069,55.494 215.638,56.79 214.773,57.799 214.197,58.374
+ 213.334,58.374 "/>
+ <polyline id="polyline303" fill="#FFFFFF" points="213.621,532.134 213.766,531.847 213.766,531.702 214.773,530.403
+ 216.069,530.55 217.365,531.558 218.661,532.997 219.525,534.581 220.39,536.022 220.39,537.606 219.237,538.181 217.941,538.612
+ 216.934,539.046 215.638,539.765 214.197,539.765 213.909,538.038 213.478,536.022 213.189,534.438 213.334,533.286
+ 213.621,532.134 "/>
+ <polyline id="polyline305" fill="#FFFFFF" points="214.197,51.608 213.766,50.312 213.766,48.728 214.197,48.295 214.773,47.432
+ 215.926,46.711 216.646,46.856 218.086,48.728 218.086,50.166 217.222,51.608 214.197,51.608 "/>
+ <polyline id="polyline307" fill="#FFFFFF" points="215.638,542.358 216.357,541.349 217.798,540.63 219.958,540.341
+ 221.397,540.774 221.397,542.501 220.39,544.517 219.382,546.39 218.661,546.966 215.638,546.966 215.638,542.358 "/>
+ <polyline id="polyline309" fill="#FFFFFF" points="216.646,550.997 217.51,549.847 218.229,549.413 219.813,549.413
+ 220.39,549.847 220.533,552.581 219.382,553.589 218.086,553.733 216.646,552.726 216.646,550.997 "/>
+ <polyline id="polyline311" fill="#FFFFFF" points="216.646,528.966 217.365,528.247 218.086,527.671 219.958,527.095
+ 221.686,526.806 223.989,526.806 226.149,527.813 227.157,528.966 227.302,530.118 226.149,531.126 225.285,532.278
+ 223.846,533.573 223.413,535.013 221.974,536.022 220.821,535.302 219.813,532.997 218.518,531.558 217.51,530.694
+ 216.934,530.118 216.646,528.966 "/>
+ <polyline id="polyline313" fill="#FFFFFF" points="217.222,66.006 216.502,65.432 216.069,64.998 214.63,64.136 214.63,62.264
+ 215.926,59.958 216.934,58.808 217.941,57.366 220.966,57.366 222.838,58.374 222.838,59.383 222.117,61.254 221.542,62.838
+ 220.821,64.278 219.67,65.574 218.661,66.006 217.222,66.006 "/>
+ <polyline id="polyline315" fill="#FFFFFF" points="219.525,46.422 220.102,45.702 220.533,45.414 220.966,44.838 221.397,44.838
+ 222.405,45.414 222.838,45.848 222.981,46.136 223.413,46.278 223.413,47.72 222.838,48.295 222.405,48.295 221.829,48.728
+ 219.525,48.728 219.525,46.422 "/>
+ <polyline id="polyline317" fill="#FFFFFF" points="221.397,544.229 222.55,543.366 223.413,543.366 224.134,544.374
+ 224.854,545.526 225.43,546.966 224.565,548.981 221.974,548.839 221.542,548.118 221.397,544.229 "/>
+ <polyline id="polyline319" fill="#FFFFFF" points="221.829,81.99 230.901,90.631 238.102,98.262 239.109,99.272 239.686,100.422
+ 239.109,101.144 234.934,105.75 230.325,110.936 225.285,117.414 222.838,119.862 221.829,120.44 220.966,120.293 220.678,119.862
+ 220.533,116.118 221.109,113.526 221.974,104.888 220.678,102.44 217.653,97.11 215.926,94.232 214.342,91.494 213.909,90.056
+ 213.909,87.03 214.342,85.304 214.918,82.422 217.222,81.99 221.829,81.99 "/>
+ <polyline id="polyline321" fill="#FFFFFF" points="222.55,81.702 220.533,81.702 217.798,81.414 216.214,80.406 214.773,79.976
+ 213.334,78.967 212.758,78.104 212.758,76.662 213.334,75.654 214.342,74.215 214.918,72.776 215.205,71.91 215.781,70.902
+ 216.502,70.038 217.222,70.038 218.086,71.48 218.661,71.91 219.094,71.91 219.094,68.166 220.102,67.016 220.678,66.582
+ 221.109,65.144 221.974,64.711 223.126,64.136 223.846,64.278 225.285,65.144 226.149,66.006 226.726,66.582 226.869,67.016
+ 227.878,67.016 227.878,65.574 226.869,64.998 225.285,63.127 224.422,61.688 224.422,59.816 224.854,58.95 225.43,58.374
+ 226.726,57.942 227.157,57.942 227.733,57.512 228.741,56.936 230.182,56.501 230.758,56.501 231.621,57.078 232.485,57.942
+ 233.062,58.52 233.205,58.808 233.493,58.95 233.926,57.366 233.35,56.936 233.493,55.494 233.926,55.064 234.502,54.486
+ 235.365,54.056 235.941,53.622 236.518,53.192 237.958,52.614 238.821,52.76 239.829,53.047 241.701,53.192 242.134,53.48
+ 242.565,53.622 243.43,54.056 244.438,55.064 244.582,56.07 244.006,59.383 243.43,59.958 242.71,60.822 242.134,61.254
+ 241.27,62.264 240.55,63.56 240.117,64.711 239.686,65.144 239.686,66.44 239.254,67.446 239.254,69.03 239.686,69.03
+ 240.55,67.592 240.55,66.15 241.413,64.711 241.989,63.702 243.142,62.694 244.006,61.688 245.014,60.822 245.445,60.392
+ 246.021,59.816 246.453,59.816 246.886,60.246 247.894,60.822 248.325,61.688 248.901,62.264 249.909,63.414 251.493,64.998
+ 252.214,65.432 252.934,65.574 253.652,66.582 254.086,67.592 254.518,68.166 255.094,69.03 254.66,71.768 254.086,73.206
+ 253.652,75.654 252.934,76.95 252.214,78.104 252.214,78.967 252.789,78.967 253.51,77.238 254.086,75.799 254.66,74.79
+ 255.67,73.206 256.533,71.333 257.543,69.896 258.406,69.03 259.559,68.454 260.422,68.024 261.285,67.734 262.006,67.592
+ 262.727,67.158 265.174,67.158 265.605,67.446 266.182,71.622 266.613,74.936 267.047,77.669 267.334,81.414 267.906,83.72
+ 267.906,84.87 266.613,86.742 266.037,88.472 264.598,90.056 263.156,91.926 262.006,93.654 261.715,94.374 261.861,95.381
+ 261.57,96.965 261.285,98.694 260.133,99.99 257.398,101.43 252.934,103.592 249.334,105.318 247.75,106.326 246.741,106.184
+ 243.142,102.728 237.813,96.822 231.478,89.768 231.046,89.192 227.445,85.734 225.142,83.286 223.701,81.99 222.55,81.702 "/>
+ <polyline id="polyline323" fill="#FFFFFF" points="223.413,537.173 223.989,536.022 224.854,534.581 225.861,533.431
+ 227.157,532.134 228.598,532.134 229.029,532.997 229.029,535.302 227.733,537.03 226.726,537.894 226.149,539.19 224.998,539.622
+ 223.846,539.478 223.558,539.046 223.413,537.173 "/>
+ <polyline id="polyline325" fill="#FFFFFF" points="225.142,523.349 226.006,520.325 226.438,518.31 228.021,518.022
+ 229.462,519.173 229.462,520.47 228.598,522.485 228.166,524.071 227.157,524.646 225.718,524.071 225.142,523.349 "/>
+ <polyline id="polyline327" fill="#FFFFFF" points="225.573,47.72 225.285,47.144 225.285,46.856 224.854,46.278 224.277,45.848
+ 224.277,44.406 224.854,44.406 224.854,43.976 225.718,43.4 226.294,43.4 226.726,42.967 229.174,42.967 229.605,43.4
+ 230.037,44.406 230.037,46.278 229.605,47.286 229.029,47.72 225.573,47.72 "/>
+ <polyline id="polyline329" fill="#FFFFFF" points="226.438,542.214 226.869,541.782 228.166,541.638 228.166,544.087
+ 226.726,544.087 226.149,543.653 226.438,542.214 "/>
+ <polyline id="polyline331" fill="#FFFFFF" points="229.029,538.325 229.174,537.606 229.462,536.454 231.046,536.31
+ 231.478,536.886 231.621,539.046 231.046,539.622 229.317,539.765 228.741,539.19 228.741,539.046 229.029,538.325 "/>
+ <polyline id="polyline333" fill="#FFFFFF" points="229.317,114.822 240.838,101.144 246.453,107.768 248.182,107.91
+ 261.141,100.568 263.014,98.984 263.59,94.662 266.613,89.192 269.205,87.03 273.525,93.51 277.27,99.99 280.148,105.174
+ 280.006,106.902 277.27,111.366 275.686,116.118 273.238,120.44 272.23,121.158 244.294,123.318 227.302,116.406 227.878,115.976
+ 229.317,114.822 "/>
+ <polyline id="polyline335" fill="#FFFFFF" points="229.317,54.486 228.166,55.206 226.726,56.07 224.998,57.366 223.701,56.648
+ 222.117,56.07 220.245,55.352 218.949,54.198 218.806,52.76 219.67,51.463 221.397,51.176 222.838,50.6 223.413,50.024
+ 224.71,49.879 226.294,49.592 226.438,49.158 228.166,49.304 228.31,50.024 227.733,52.76 228.886,53.48 229.174,54.056
+ 229.317,54.486 "/>
+ <polyline id="polyline337" fill="#FFFFFF" points="229.605,525.653 229.894,524.214 230.47,522.054 231.621,519.173
+ 233.926,516.87 236.661,514.71 238.678,513.702 239.829,513.847 240.55,514.854 241.27,517.302 241.126,520.325 239.829,521.333
+ 238.821,521.911 237.67,523.062 236.086,525.798 235.51,527.382 234.646,528.247 233.493,528.679 231.334,528.39 229.605,526.517
+ 229.605,525.653 "/>
+ <polyline id="polyline339" fill="#FFFFFF" points="230.182,448.901 230.182,448.038 231.189,447.03 232.485,447.03
+ 234.214,447.171 236.806,447.03 240.838,447.462 244.294,447.606 248.325,447.749 250.63,448.183 252.646,449.479 253.941,450.774
+ 255.957,453.366 257.828,455.815 259.27,459.413 259.846,462.87 260.563,465.606 261.285,467.767 262.438,469.64 263.879,471.655
+ 264.598,472.95 265.029,473.815 265.029,475.11 264.021,476.405 262.438,477.271 261.141,477.987 259.846,478.278 258.838,478.278
+ 257.973,478.71 257.398,479.862 256.82,481.157 256.678,482.312 255.813,483.317 255.238,484.038 254.373,484.183 253.652,484.183
+ 252.069,483.317 251.062,482.312 249.909,481.733 249.046,481.157 247.894,480.728 247.174,480.149 245.878,479.286
+ 245.157,478.567 244.726,477.413 244.294,476.694 244.006,475.976 243.718,474.679 243.718,473.095 243.43,472.229 242.71,471.222
+ 241.558,468.63 240.693,467.331 240.117,466.038 238.678,464.312 237.67,462.003 236.086,459.413 234.646,456.819 232.63,453.077
+ 231.478,450.774 230.758,449.767 230.182,448.901 "/>
+ <polyline id="polyline341" fill="#FFFFFF" points="232.918,41.096 235.365,41.096 236.373,42.104 236.806,43.976 236.229,44.406
+ 234.502,44.838 233.35,44.838 232.63,43.542 232.63,42.104 232.918,41.096 "/>
+ <polyline id="polyline343" fill="#FFFFFF" points="233.062,531.989 233.638,531.558 236.806,531.558 237.382,532.421
+ 237.094,532.854 236.373,533.862 235.222,534.438 233.493,534.294 233.062,533.862 233.062,531.989 "/>
+ <polyline id="polyline345" fill="#FFFFFF" points="234.214,412.323 234.502,412.323 237.382,411.897 241.989,411.606
+ 246.021,411.462 250.054,410.89 253.797,410.454 256.965,410.312 258.117,410.89 260.277,412.759 262.869,414.774 265.461,417.655
+ 268.055,421.11 271.941,426.438 273.67,429.897 275.973,433.64 277.559,437.237 278.563,438.534 278.563,439.827 277.559,440.405
+ 276.117,441.126 274.678,442.569 272.949,443.573 270.934,445.155 269.926,446.454 267.189,448.901 265.461,451.065
+ 264.598,453.077 264.021,454.808 263.301,456.245 262.438,457.397 261.861,458.118 261.141,458.405 260.277,458.405
+ 259.846,457.687 259.27,456.534 258.547,455.095 257.398,453.077 256.391,451.927 255.094,450.487 253.652,448.901
+ 251.638,447.462 249.909,447.03 247.605,446.886 244.438,446.454 240.262,446.312 236.949,446.022 234.502,446.163 232.63,446.022
+ 232.485,444.87 232.485,444.294 233.493,442.854 235.222,440.405 237.525,437.237 238.966,435.077 239.974,432.917
+ 240.262,432.198 240.117,430.472 239.974,429.897 239.542,429.03 237.67,426.729 235.653,424.278 234.214,422.118 233.35,420.245
+ 232.485,418.519 232.054,417.077 232.197,414.917 232.63,412.901 232.918,412.759 233.062,412.759 234.214,412.323 "/>
+ <polyline id="polyline347" fill="#FFFFFF" points="237.382,526.95 238.102,526.374 239.686,526.229 240.117,526.806
+ 240.262,528.679 239.109,529.542 237.67,529.687 237.382,528.679 237.382,526.95 "/>
+ <polyline id="polyline349" fill="#FFFFFF" points="237.525,45.56 237.525,48.15 237.094,50.312 236.373,51.463 234.934,52.614
+ 233.205,53.333 231.189,53.333 229.75,52.184 230.037,49.592 231.189,48.15 232.342,46.856 234.214,45.99 236.373,45.414
+ 236.806,45.414 237.525,45.56 "/>
+ <polyline id="polyline351" fill="#FFFFFF" points="237.958,500.454 238.966,499.444 240.262,498.581 242.277,498.438
+ 244.006,498.438 244.869,498.87 245.59,499.589 245.59,500.31 245.302,501.173 245.157,501.894 244.726,503.911 244.149,506.358
+ 243.43,508.663 242.422,510.247 241.27,510.821 238.102,510.821 237.237,509.813 237.237,506.071 237.813,504.485 237.958,500.454
+ "/>
+ <polyline id="polyline353" fill="#FFFFFF" points="239.109,50.6 239.254,49.158 239.686,46.856 240.262,45.848 241.126,44.838
+ 243.43,44.838 244.438,45.848 244.869,46.278 245.445,47.862 245.302,49.879 244.582,52.038 242.134,52.184 241.558,51.608
+ 239.109,50.6 "/>
+ <polyline id="polyline355" fill="#FFFFFF" points="240.262,522.485 240.55,521.622 241.27,521.333 242.134,521.622
+ 243.573,523.206 243.43,525.222 242.422,526.087 241.701,526.229 240.262,524.79 240.262,522.485 "/>
+ <polyline id="polyline357" fill="#FFFFFF" points="241.989,43.976 240.693,43.976 239.254,42.967 238.678,42.392 238.678,40.808
+ 238.821,40.52 240.693,40.52 241.989,42.104 242.565,42.534 242.565,43.542 241.989,43.976 "/>
+ <polyline id="polyline359" fill="#FFFFFF" points="242.71,513.847 244.294,512.263 245.302,511.829 247.174,512.263
+ 247.894,512.694 247.894,515.718 246.886,516.149 246.453,516.581 246.741,519.03 245.733,519.894 245.302,520.038
+ 244.582,519.894 243.573,518.597 242.565,516.149 242.71,513.847 "/>
+ <polyline id="polyline361" fill="#FFFFFF" points="244.006,490.95 244.726,489.942 246.453,488.79 248.037,487.782
+ 249.766,486.919 250.342,486.341 252.934,486.341 254.23,487.351 254.518,489.222 254.66,491.671 253.797,491.958 252.646,492.103
+ 251.781,492.39 250.197,492.534 249.189,492.679 248.47,493.397 247.605,493.974 246.741,495.126 246.166,495.989 245.445,496.421
+ 244.582,496.421 244.006,495.413 244.006,490.95 "/>
+ <polyline id="polyline363" fill="#FFFFFF" points="245.59,507.366 246.021,504.485 246.598,503.046 247.174,502.612
+ 249.766,502.612 250.773,503.046 252.214,504.198 252.214,505.349 251.35,506.501 250.054,507.222 249.478,507.509
+ 248.613,508.087 248.037,508.95 247.174,509.526 246.021,509.235 245.445,508.517 245.59,507.366 "/>
+ <polyline id="polyline365" fill="#FFFFFF" points="247.317,58.232 247.317,54.631 254.809,54.486 256.391,56.358 256.391,65.862
+ 255.813,66.44 254.518,66.44 253.077,65.432 252.934,64.136 251.926,63.272 251.062,62.264 249.621,60.967 248.613,59.526
+ 247.894,58.808 247.317,58.232 "/>
+ <polyline id="polyline367" fill="#FFFFFF" points="248.325,497.431 248.758,496.567 248.901,496.134 249.766,494.981
+ 250.918,494.118 254.949,494.118 255.67,494.694 255.525,498.294 254.518,498.87 252.934,499.733 252.069,500.743 250.342,500.743
+ 249.189,500.165 248.47,499.444 248.325,498.005 248.325,497.431 "/>
+ <polyline id="polyline369" fill="#FFFFFF" points="248.901,511.255 249.478,510.39 249.766,509.813 250.918,508.95
+ 252.357,507.798 253.223,508.374 254.086,509.382 254.23,510.966 253.223,512.263 251.781,513.126 250.918,513.126
+ 249.766,512.118 249.478,511.829 248.901,511.255 "/>
+ <polyline id="polyline371" fill="#FFFFFF" points="253.51,19.352 253.652,17.192 254.518,16.472 255.094,15.751 256.678,15.176
+ 258.693,15.176 259.27,15.751 260.277,16.614 260.711,17.047 265.461,17.047 265.461,19.064 265.316,20.648 264.598,22.808
+ 265.316,21.942 266.037,21.366 267.047,20.504 267.477,19.928 269.063,19.928 270.215,20.504 270.934,21.078 272.518,21.799
+ 273.094,21.799 273.238,23.816 272.809,24.246 272.23,25.256 272.23,27.702 272.66,27.702 273.094,28.711 273.238,32.024
+ 272.66,32.454 272.23,33.75 271.797,34.614 270.645,34.902 269.781,35.768 266.037,35.768 265.461,35.333 264.883,34.902
+ 264.021,34.902 264.166,35.333 264.453,35.622 264.598,36.198 265.029,36.776 265.605,36.776 265.461,37.206 264.883,37.928
+ 264.021,38.936 262.727,39.654 262.438,40.085 262.148,40.52 259.846,40.52 258.98,40.085 260.277,41.238 261.141,42.104
+ 261.141,43.4 260.711,43.976 259.846,44.551 258.693,44.838 257.398,45.127 254.518,45.127 253.077,45.272 251.638,45.272
+ 250.485,45.56 249.766,45.848 248.47,45.56 247.605,44.838 246.886,43.83 246.31,42.822 245.59,41.816 245.302,40.808
+ 245.302,36.486 245.59,35.333 245.733,34.614 245.733,33.318 245.014,32.742 243.573,31.446 241.846,30.44 239.974,29.862
+ 239.254,28.856 239.829,27.702 240.838,25.256 241.846,23.816 244.869,23.238 246.598,21.654 248.325,20.358 249.621,19.928
+ 251.062,19.64 251.926,19.208 252.357,20.358 253.941,20.648 253.941,19.928 253.51,19.352 "/>
+ <polyline id="polyline373" fill="#FFFFFF" points="254.086,501.751 255.238,500.743 256.246,500.454 257.109,500.454
+ 257.973,501.173 258.98,502.325 259.27,503.478 258.98,505.349 257.973,506.935 257.398,507.366 255.238,507.366 254.518,506.358
+ 254.086,505.495 254.086,501.751 "/>
+ <polyline id="polyline375" fill="#FFFFFF" points="256.678,484.038 256.82,483.751 257.254,482.743 258.262,480.87
+ 259.846,479.431 261.57,478.997 263.301,478.278 265.029,477.702 266.613,476.694 267.766,476.263 272.086,476.55 273.379,477.126
+ 274.678,477.847 274.965,479.862 274.678,484.038 273.379,484.612 272.518,485.479 271.074,485.767 270.357,486.198
+ 269.641,486.774 267.334,486.774 265.895,485.767 264.453,485.479 263.156,485.479 261.43,486.485 259.846,487.782
+ 258.547,489.366 257.686,490.229 256.678,490.229 256.533,485.19 256.678,484.038 "/>
+ <polyline id="polyline377" fill="#FFFFFF" points="257.973,492.103 259.701,490.519 261.285,489.222 262.582,488.214
+ 263.59,487.782 265.029,487.782 267.334,488.358 268.629,490.519 268.629,492.103 267.047,492.966 264.883,492.966 263.73,493.542
+ 263.301,494.839 262.727,495.989 261.43,496.854 258.98,496.854 258.547,496.421 257.828,494.263 257.973,492.103 "/>
+ <polyline id="polyline379" fill="#FFFFFF" points="260.277,499.589 260.998,499.013 261.285,498.87 262.148,498.294
+ 262.869,498.438 263.73,499.878 263.73,500.454 263.156,501.606 262.006,502.038 260.854,501.173 260.422,500.454 260.422,500.165
+ 260.277,499.589 "/>
+ <polyline id="polyline381" fill="#FFFFFF" points="260.854,460.854 260.854,460.421 261.861,459.562 262.438,458.694
+ 263.59,457.397 264.598,455.815 265.461,454.085 265.895,452.358 266.324,451.495 267.477,449.909 268.629,448.612 270.215,447.03
+ 271.941,445.733 273.525,444.729 274.678,443.573 275.686,442.71 276.547,441.702 277.414,440.983 278.133,440.694 278.563,440.55
+ 278.998,440.55 279.715,441.413 280.006,443.573 280.582,445.878 280.869,447.319 281.445,449.046 281.73,451.065 281.879,456.103
+ 281.879,463.015 281.59,464.599 281.156,466.038 280.438,467.19 279.141,468.917 278.133,470.499 276.693,472.519 275.543,474.103
+ 274.678,475.542 273.094,475.827 272.373,475.542 271.074,475.11 269.641,474.819 267.334,474.534 266.898,473.237
+ 266.324,472.663 265.461,471.798 264.453,470.647 263.73,469.64 263.156,469.065 262.582,467.479 262.148,466.472 261.715,465.606
+ 261.43,464.312 260.854,463.304 260.711,462.151 260.854,460.854 "/>
+ <polyline id="polyline383" fill="#FFFFFF" points="261.861,15.751 260.711,14.6 259.846,13.734 259.846,11.72 261.285,10.278
+ 263.59,10.278 265.174,11.288 265.316,13.016 265.029,14.167 264.021,15.03 262.438,15.463 261.861,15.751 "/>
+ <polyline id="polyline385" fill="#FFFFFF" points="262.148,45.414 262.438,45.702 262.582,46.278 263.73,47.286 264.598,48.87
+ 265.029,50.312 263.73,52.326 262.582,53.48 260.563,54.198 256.82,54.776 255.813,54.631 254.809,54.198 253.223,53.91
+ 248.901,53.047 247.317,52.038 247.317,51.176 247.605,50.742 249.046,48.87 250.342,47.286 251.493,46.422 253.797,45.99
+ 255.67,45.848 257.828,45.848 258.693,45.414 259.988,45.127 262.148,45.414 "/>
+ <polyline id="polyline387" fill="#FFFFFF" points="263.879,55.064 264.166,55.352 264.166,60.104 264.453,63.56 264.166,63.99
+ 262.582,64.568 259.988,65.432 258.838,65.574 257.828,65.574 256.965,64.422 257.398,61.688 257.398,55.782 259.414,55.206
+ 262.727,54.198 263.879,55.064 "/>
+ <polyline id="polyline389" fill="#FFFFFF" points="265.174,495.989 266.182,494.981 267.906,494.981 269.492,495.989
+ 269.492,497.718 268.629,498.728 266.758,499.157 265.75,498.728 265.316,497.718 265.174,495.989 "/>
+ <polyline id="polyline391" fill="#FFFFFF" points="268.918,53.047 268.773,52.184 268.773,51.608 270.934,49.592 271.941,48.295
+ 272.66,48.006 273.957,48.15 273.67,47.432 274.82,47.144 276.117,48.006 276.693,48.728 277.27,48.87 278.998,48.582
+ 280.148,48.15 281.73,47.574 282.738,47.574 284.324,47.862 282.738,48.728 281.73,50.024 281.59,50.888 281.59,52.184
+ 281.445,53.48 280.006,54.776 278.711,55.494 276.98,56.215 275.686,56.358 273.238,56.215 271.941,55.64 270.066,54.198
+ 269.492,53.622 268.918,53.047 "/>
+ <polyline id="polyline393" fill="#FFFFFF" points="269.35,18.486 268.918,18.056 268.197,16.76 267.766,15.176 267.477,14.6
+ 267.477,11.72 269.35,11.72 269.781,10.856 271.223,10.856 272.23,12.008 272.23,13.734 273.238,13.734 273.238,15.608
+ 271.941,17.047 270.789,18.486 269.35,18.486 "/>
+ <polyline id="polyline395" fill="#FFFFFF" points="269.641,70.326 269.35,69.463 268.918,68.742 269.063,67.734 269.492,67.016
+ 269.492,58.95 270.066,58.662 271.941,59.096 272.949,59.816 272.949,65.286 271.941,66.44 270.789,68.312 270.215,69.463
+ 269.641,70.326 "/>
+ <polyline id="polyline397" fill="#FFFFFF" points="270.502,488.935 271.074,488.214 271.797,487.351 273.525,486.485
+ 274.678,485.911 276.262,485.911 277.27,487.782 277.846,489.798 277.559,492.679 276.693,493.542 275.254,494.403
+ 274.246,494.981 271.365,494.839 270.502,493.687 270.502,488.935 "/>
+ <polyline id="polyline399" fill="#FFFFFF" points="270.502,77.238 273.525,77.238 277.129,77.526 280.006,78.104 282.738,79.254
+ 286.484,80.694 288.645,82.709 291.957,87.463 293.973,90.056 295.27,91.782 296.854,92.501 305.205,92.79 308.809,92.79
+ 309.238,94.374 307.941,95.526 306.934,96.822 306.066,98.118 305.926,99.99 305.781,101.862 304.197,103.446 302.324,103.592
+ 299.59,104.454 293.398,104.742 284.613,105.03 281.59,104.312 280.438,102.87 275.828,94.808 273.525,89.333 271.941,85.446
+ 271.51,82.422 273.379,82.422 276.262,82.136 273.379,81.414 271.074,80.551 270.502,79.976 270.357,78.246 270.502,77.238 "/>
+ <polyline id="polyline401" fill="#FFFFFF" points="272.086,41.526 272.086,42.822 270.645,43.11 269.926,43.976 268.773,45.56
+ 267.334,46.711 266.898,47.286 265.029,47.286 264.166,46.711 263.301,45.272 262.582,43.976 262.293,42.822 262.869,41.238
+ 263.879,39.942 265.316,38.936 266.182,38.215 269.35,38.215 269.781,38.648 270.215,39.224 270.934,39.799 271.797,40.52
+ 272.086,41.526 "/>
+ <polyline id="polyline403" fill="#FFFFFF" points="274.102,26.694 274.246,25.256 274.678,23.816 275.686,22.808 277.414,21.799
+ 278.711,21.224 279.715,20.792 280.148,20.504 282.021,20.504 282.883,20.792 282.313,22.808 281.73,23.816 280.438,25.256
+ 280.148,26.84 280.727,28.136 280.727,29.432 280.438,30.44 279.715,31.158 278.854,31.158 277.988,31.446 276.838,30.008
+ 275.543,29.432 274.678,28.711 274.246,27.848 274.102,26.694 "/>
+ <polyline id="polyline405" fill="#FFFFFF" points="274.82,19.928 274.391,19.208 273.67,17.48 273.67,17.047 274.102,16.04
+ 275.254,15.176 275.973,14.742 277.414,14.742 278.998,15.896 279.141,17.047 278.998,18.056 278.422,18.056 277.559,18.776
+ 276.547,19.494 275.973,19.928 274.82,19.928 "/>
+ <polyline id="polyline407" fill="#FFFFFF" points="275.686,43.688 276.406,42.822 276.693,42.104 277.27,41.238 277.701,40.662
+ 278.711,39.654 280.006,39.654 281.014,40.232 282.021,40.662 282.883,41.238 283.461,42.104 283.461,42.534 282.883,44.984
+ 282.021,45.414 280.582,45.414 280.006,45.848 277.701,45.848 276.838,45.414 276.117,44.984 275.686,44.406 275.686,43.688 "/>
+ <polyline id="polyline409" fill="#FFFFFF" points="277.27,478.136 278.133,477.413 281.156,477.126 287.35,477.271
+ 288.357,478.278 288.215,480.581 287.781,481.444 287.35,482.454 286.342,483.751 285.906,484.47 285.477,484.903 282.021,485.333
+ 280.582,485.911 279.715,485.767 278.854,485.046 277.701,483.462 276.838,482.022 276.838,480.728 277.27,478.136 "/>
+ <polyline id="polyline411" fill="#FFFFFF" points="277.559,33.463 277.414,34.472 276.547,35.192 275.973,36.056 275.109,36.917
+ 275.109,38.648 272.23,38.648 271.365,37.352 271.365,36.056 272.518,34.326 273.238,33.03 274.678,31.879 276.547,32.024
+ 277.559,33.463 "/>
+ <polyline id="polyline413" fill="#FFFFFF" points="277.846,433.927 282.166,431.909 285.766,430.323 287.926,428.312
+ 289.223,426.294 292.82,424.854 296.711,424.421 297.715,424.569 298.869,427.444 302.037,429.897 304.918,433.206
+ 306.789,436.229 309.238,439.542 308.518,441.126 307.223,444.003 306.502,444.87 303.477,445.444 300.598,446.022
+ 297.141,447.606 291.957,448.901 287.781,449.19 284.613,448.901 282.166,448.183 281.73,445.304 281.301,442.569 280.582,440.405
+ 279.57,437.671 278.133,435.655 277.846,433.927 "/>
+ <polyline id="polyline415" fill="#FFFFFF" points="278.711,473.958 279.141,473.237 279.43,472.808 281.014,471.077
+ 282.021,469.927 283.316,468.917 284.758,468.774 285.906,467.909 287.063,466.901 288.934,466.323 290.23,466.612
+ 291.957,467.622 292.246,469.065 292.102,470.069 291.238,471.222 290.23,472.519 290.086,473.237 288.789,474.39 287.35,474.679
+ 286.055,475.11 284.898,475.976 284.037,476.263 280.727,475.976 279.861,475.827 278.854,474.679 278.711,473.958 "/>
+ <polyline id="polyline417" fill="#FFFFFF" points="279.57,109.926 280.006,108.056 280.727,107.192 281.301,106.614
+ 281.73,106.038 290.949,106.038 294.406,105.75 296.854,105.318 298.869,105.318 300.883,105.03 302.324,104.454 306.066,104.454
+ 307.365,121.734 309.67,123.461 312.693,125.768 316.727,128.79 321.766,132.678 323.205,134.118 323.781,134.262 323.781,135.56
+ 323.641,135.702 322.629,135.702 322.055,135.99 319.895,136.709 317.73,137.286 315.141,138.582 313.559,139.301 317.014,138.006
+ 318.166,137.717 320.324,137.286 322.773,137.144 326.23,136.998 328.82,137.144 330.838,138.293 331.129,138.87 331.129,139.158
+ 328.102,143.045 324.645,146.358 320.473,150.246 316.293,153.414 313.27,156.582 312.547,157.158 311.686,157.158
+ 311.254,157.016 310.82,156.87 309.957,156.293 306.066,153.56 301.75,150.678 295.701,145.926 291.525,143.48 289.365,142.038
+ 286.918,139.734 285.334,138.15 284.473,138.15 281.879,138.44 278.711,138.15 276.838,138.006 275.686,137.717 274.82,135.846
+ 273.957,133.688 273.094,130.374 272.949,128.213 273.094,125.622 273.379,123.608 274.965,121.014 276.838,117.272
+ 278.133,114.392 278.998,112.232 279.57,109.926 "/>
+ <polyline id="polyline419" fill="#FFFFFF" points="280.582,487.782 281.301,487.495 281.73,487.351 283.316,487.351
+ 284.324,488.358 284.473,491.095 283.895,491.526 282.453,492.103 281.59,491.671 280.438,490.229 280.582,488.501
+ 280.582,487.782 "/>
+ <polyline id="polyline421" fill="#FFFFFF" points="280.582,35.768 281.301,35.192 281.59,34.902 282.453,34.472 283.029,34.038
+ 283.316,33.463 284.037,33.03 285.766,33.03 285.766,32.888 286.197,33.608 286.918,34.326 287.205,34.902 287.205,37.64
+ 286.197,38.79 284.758,39.224 283.895,39.654 282.021,39.799 281.445,39.078 281.014,37.64 280.438,36.631 280.438,36.486
+ 280.582,35.768 "/>
+ <polyline id="polyline423" fill="#FFFFFF" points="283.461,466.472 283.461,462.438 284.037,458.55 283.461,453.942
+ 282.598,450.917 283.605,449.909 285.766,449.622 287.781,450.054 290.086,450.054 291.813,449.767 293.686,449.622
+ 294.838,449.331 295.414,449.046 297.861,448.472 299.73,447.606 301.75,446.741 303.047,446.312 304.918,446.163 306.215,445.878
+ 307.365,445.155 308.086,443.862 308.518,442.71 308.66,442.278 308.949,441.702 309.525,441.271 310.678,440.983 311.398,441.271
+ 311.828,442.278 312.406,443.573 313.129,445.155 315.43,447.462 316.582,448.612 318.738,449.767 320.324,451.351
+ 323.926,453.366 325.941,454.808 327.67,455.095 329.828,455.815 330.547,456.534 330.838,456.819 330.98,457.11 330.98,457.976
+ 330.117,458.263 328.533,459.562 327.379,460.421 326.949,461.718 326.518,462.294 325.51,464.022 324.502,465.606
+ 323.641,467.046 322.484,468.054 321.477,469.065 320.037,469.64 318.598,469.64 316.148,468.63 314.998,468.198 313.559,467.767
+ 311.973,466.612 310.533,465.319 310.391,464.454 310.102,464.163 309.813,460.995 309.813,460.421 309.238,458.983
+ 308.518,457.542 307.652,456.679 307.223,456.103 307.51,457.687 307.797,458.983 307.941,460.569 307.797,461.862
+ 306.934,462.729 306.645,463.304 306.357,464.022 305.926,464.741 305.641,464.163 305.205,464.163 303.906,464.454
+ 302.898,464.886 302.182,464.886 302.182,463.304 301.605,462.151 300.738,461.573 299.59,461.573 298.293,462.151 297.43,462.87
+ 296.854,463.589 295.988,463.878 295.129,463.304 294.838,462.729 294.838,461.144 294.693,460.136 293.973,459.413
+ 293.973,461.862 293.828,463.304 294.406,464.741 294.262,465.897 293.543,467.19 291.957,466.759 290.518,465.171
+ 288.789,464.741 287.641,464.741 284.898,466.612 284.037,467.19 283.461,466.472 "/>
+ <polyline id="polyline425" fill="#FFFFFF" points="285.766,42.534 286.342,42.104 286.918,42.104 287.641,42.967 293.109,43.542
+ 293.398,43.976 294.406,44.406 295.414,45.56 295.414,46.422 294.98,49.734 292.533,50.166 290.23,50.312 289.652,49.304
+ 289.223,47.862 289.074,46.998 287.781,46.998 286.773,46.422 286.197,45.848 285.766,44.984 285.766,42.534 "/>
+ <polyline id="polyline427" fill="#FFFFFF" points="286.342,486.341 287.063,486.054 288.789,485.911 290.086,486.774
+ 290.23,488.647 289.652,489.798 288.789,490.663 287.926,490.663 286.918,489.798 286.342,488.647 286.342,486.341 "/>
+ <polyline id="polyline429" fill="#FFFFFF" points="287.205,35.622 288.215,35.48 288.502,35.333 289.223,34.902 293.109,34.902
+ 293.109,38.79 291.957,40.232 288.215,40.085 287.641,39.512 287.926,36.776 287.205,35.622 "/>
+ <polyline id="polyline431" fill="#FFFFFF" points="288.645,65.72 287.641,63.702 286.918,61.254 286.773,60.534 286.055,58.232
+ 285.477,56.501 285.189,54.631 285.621,52.184 286.055,50.888 287.35,50.024 287.926,51.176 288.357,52.184 288.645,53.622
+ 289.365,54.198 291.525,54.198 292.102,53.622 293.254,53.192 294.838,53.192 294.98,55.64 295.129,57.942 295.27,59.816
+ 295.27,60.104 295.988,60.246 297.285,60.104 297.57,58.374 297.57,55.64 298.006,52.184 298.727,48.44 300.021,48.728
+ 302.037,48.87 302.324,51.463 302.613,52.472 302.613,55.494 303.047,57.224 303.766,57.942 305.492,57.942 305.492,49.446
+ 306.934,48.44 307.797,48.295 308.66,50.024 310.102,51.896 310.82,52.902 312.262,54.344 312.693,54.631 314.711,54.631
+ 316.582,54.776 315.141,55.928 313.846,57.799 311.973,59.958 309.813,61.976 308.23,64.278 307.51,67.016 304.629,71.192
+ 301.895,74.501 299.156,77.816 295.559,80.551 292.678,82.422 290.809,83.72 289.652,83.432 288.502,81.127 285.477,79.542
+ 281.59,78.104 276.98,76.662 273.813,76.232 269.926,76.52 269.35,74.358 269.641,72.631 272.949,72.917 272.949,72.056
+ 271.941,70.614 273.094,70.472 274.391,68.742 275.254,67.879 275.973,66.87 275.828,66.15 275.828,61.542 275.973,60.104
+ 277.701,59.238 280.148,57.512 281.73,57.078 283.316,57.654 284.037,57.942 283.461,59.383 283.461,61.11 283.605,61.976
+ 284.758,63.414 285.189,64.711 286.055,66.15 287.926,69.176 288.357,70.184 289.365,70.902 290.809,70.472 290.518,68.454
+ 289.51,67.016 288.645,65.72 "/>
+ <polyline id="polyline433" fill="#FFFFFF" points="289.797,481.444 290.086,481.015 290.66,479.718 291.379,478.71
+ 292.391,478.567 293.828,479.573 295.414,480.87 295.559,484.903 294.98,485.911 293.398,485.767 291.094,484.903 289.652,483.03
+ 289.652,482.454 289.797,481.444 "/>
+ <polyline id="polyline435" fill="#FFFFFF" points="292.246,471.509 292.82,471.077 295.846,471.077 297.285,472.085
+ 298.869,472.519 300.313,472.95 300.313,475.253 299.445,476.694 298.293,478.136 294.98,478.136 294.117,477.562 292.678,477.126
+ 291.67,476.55 291.238,476.118 291.094,474.819 291.67,473.958 292.246,471.509 "/>
+ <polyline id="polyline437" fill="#FFFFFF" points="293.973,36.344 294.547,35.91 296.563,35.48 298.293,35.48 298.869,35.91
+ 299.156,37.352 299.59,38.215 299.156,40.085 298.727,41.096 297.861,41.958 296.563,41.958 295.27,41.526 294.838,40.95
+ 293.543,40.085 293.686,36.776 293.973,36.344 "/>
+ <polyline id="polyline439" fill="#FFFFFF" points="295.129,466.323 295.846,465.606 296.998,464.599 297.861,463.444
+ 298.869,462.581 300.021,462.438 300.883,462.87 301.029,463.444 301.174,465.319 300.738,466.612 299.879,468.054
+ 299.445,469.065 299.014,470.069 298.438,470.499 296.563,470.499 295.701,470.069 294.98,469.351 295.129,466.323 "/>
+ <polyline id="polyline441" fill="#FFFFFF" points="298.582,413.19 299.445,412.323 300.738,411.897 301.895,411.319
+ 303.334,410.89 304.918,410.312 306.357,410.022 309.67,410.022 314.711,409.733 318.166,409.733 319.174,409.591 320.182,408.581
+ 320.758,407.573 321.766,405.126 322.484,403.687 323.35,402.39 323.926,401.095 324.645,399.798 325.365,399.077 325.941,398.935
+ 327.525,400.808 329.973,403.827 333.43,407.144 338.758,412.038 339.621,413.19 339.621,414.198 339.189,414.63 336.738,414.774
+ 334.869,415.065 333.43,415.495 332.133,416.214 330.693,417.655 329.254,419.526 327.67,421.542 325.365,424.995 323.781,427.304
+ 322.055,429.319 321.477,429.897 320.324,430.183 317.73,430.759 315.43,431.046 313.129,431.479 309.67,432.343 308.086,433.351
+ 305.926,433.351 304.197,431.046 301.75,428.312 299.445,425.722 298.438,424.278 298.582,413.19 "/>
+ <polyline id="polyline443" fill="#FFFFFF" points="299.301,42.68 299.73,41.526 300.738,40.662 301.895,39.799 304.629,39.654
+ 305.063,39.224 305.926,38.79 306.645,37.64 307.797,37.928 308.809,38.79 310.246,39.224 310.391,40.662 309.379,41.669
+ 309.238,41.958 308.373,42.967 307.365,43.976 307.074,44.694 306.357,45.414 305.492,45.848 304.055,46.422 303.621,46.422
+ 301.605,45.99 300.598,45.414 299.879,44.838 299.301,44.406 299.301,42.68 "/>
+ <polyline id="polyline445" fill="#FFFFFF" points="300.166,34.472 301.316,33.463 302.182,32.454 303.047,32.6 304.055,33.463
+ 305.063,34.614 305.492,34.902 305.492,36.198 305.063,37.206 304.484,37.782 303.477,38.648 301.174,38.648 300.313,37.64
+ 300.166,34.472 "/>
+ <polyline id="polyline447" fill="#FFFFFF" points="300.738,470.069 301.316,468.774 301.75,467.331 302.613,466.472
+ 304.055,465.171 305.492,464.599 305.926,464.741 306.789,464.886 307.652,465.319 308.086,465.897 308.086,467.046
+ 306.502,468.487 305.063,469.927 304.055,470.935 303.334,471.366 302.182,471.942 301.316,471.942 300.738,471.366
+ 300.738,470.069 "/>
+ <polyline id="polyline449" fill="#FFFFFF" points="304.055,27.702 305.492,26.694 313.129,26.694 314.133,27.272 314.133,28.568
+ 313.559,30.582 312.547,31.446 311.254,31.879 310.246,32.454 308.809,33.03 307.51,32.888 306.502,32.454 305.492,31.446
+ 304.055,30.15 304.055,27.702 "/>
+ <polyline id="polyline451" fill="#FFFFFF" points="307.51,97.688 309.813,95.238 311.543,93.224 313.559,90.631 315.285,88.184
+ 317.156,85.016 319.174,81.414 320.898,79.11 323.492,75.512 325.365,73.782 328.102,71.622 329.686,70.472 331.988,71.768
+ 332.711,72.344 332.998,76.232 334.293,79.976 335.59,84.15 337.316,87.318 339.334,89.768 341.205,91.926 342.645,93.51
+ 344.086,94.52 344.518,95.238 344.66,96.534 343.652,100.278 343.223,103.446 342.357,103.592 339.906,102.582 337.895,101.72
+ 336.166,101.862 334.293,101.862 332.563,102.295 329.828,102.87 327.094,104.024 325.365,105.03 323.641,105.896 321.906,106.326
+ 319.75,106.76 309.525,106.902 307.652,106.472 307.223,102.295 307.51,97.688 "/>
+ <polyline id="polyline453" fill="#FFFFFF" points="307.941,434.935 308.23,434.069 308.809,433.64 309.094,433.351 310.102,432.63
+ 312.547,432.63 314.854,432.058 317.59,431.622 319.461,431.19 321.189,430.759 322.055,431.479 324.215,434.069 326.518,436.374
+ 328.391,437.382 331.559,438.819 332.854,439.827 332.854,441.413 332.277,443.144 331.988,444.581 332.422,446.454
+ 332.854,448.183 333.715,451.206 334.293,453.222 334.006,454.663 333.141,455.237 330.406,455.237 328.678,454.229
+ 325.652,452.79 322.484,450.774 319.029,448.901 317.156,447.319 313.701,444.151 312.547,441.847 311.254,440.118
+ 309.813,437.382 308.518,435.798 307.941,434.935 "/>
+ <polyline id="polyline455" fill="#FFFFFF" points="308.373,107.91 320.182,107.91 321.766,107.622 323.35,107.045 325.51,106.184
+ 326.949,105.608 328.391,104.888 330.406,104.6 338.037,104.6 340.484,105.461 343.074,106.76 345.957,107.622 347.398,108.629
+ 348.838,109.782 349.559,110.358 349.414,111.078 348.838,111.942 347.254,114.104 345.813,115.542 345.379,116.262 344.23,117.56
+ 343.652,117.846 342.934,117.846 341.492,117.125 340.773,116.694 339.766,116.406 338.324,116.406 338.037,116.549
+ 338.898,116.694 340.484,117.272 341.926,118.568 343.223,119.574 344.23,121.014 345.094,122.312 345.379,123.03 344.809,123.896
+ 343.941,125.045 342.357,125.768 341.492,126.629 340.773,127.494 339.766,128.501 338.324,128.501 336.883,127.494
+ 334.869,126.056 333.861,124.758 332.998,123.608 332.422,123.03 331.559,122.6 330.547,121.734 330.262,122.024 330.547,122.454
+ 331.414,123.461 332.277,124.038 333.141,124.902 334.148,126.198 334.293,127.206 334.727,127.926 335.301,128.79
+ 336.313,129.942 336.883,130.52 337.605,131.094 337.895,131.526 337.029,132.392 336.166,133.11 335.59,133.688 335.59,134.118
+ 334.582,134.694 326.23,134.549 324.502,133.4 323.35,132.534 321.766,131.526 320.613,130.374 318.598,128.79 317.301,127.782
+ 314.998,126.198 312.838,124.614 310.391,122.454 309.094,121.158 308.373,120.44 308.086,111.366 307.797,108.776 308.373,107.91
+ "/>
+ <polyline id="polyline457" fill="#FFFFFF" points="308.809,34.902 309.525,34.326 309.813,34.038 311.398,33.03 312.547,32.454
+ 313.129,32.024 313.559,32.166 314.563,32.6 314.998,33.03 316.006,33.463 316.438,33.896 318.883,33.896 319.461,33.463
+ 321.334,33.463 321.766,34.038 322.197,34.614 321.766,35.768 319.316,38.215 318.453,39.224 317.301,40.085 316.438,40.662
+ 313.701,40.662 312.693,40.232 311.828,39.654 310.82,38.648 310.533,37.928 309.813,36.776 308.809,35.768 308.809,34.902 "/>
+ <polyline id="polyline459" fill="#FFFFFF" points="308.949,477.987 309.525,477.271 309.813,476.839 310.82,476.55
+ 311.828,476.983 311.254,475.542 310.102,475.542 309.094,476.263 307.941,476.405 307.365,477.126 305.641,477.271
+ 304.629,476.839 304.629,475.253 304.918,474.679 305.641,472.95 306.215,472.085 307.365,471.222 307.797,470.935
+ 309.094,469.782 310.102,468.774 311.254,468.774 311.828,469.206 312.838,469.64 313.988,470.499 315.715,470.79 317.156,470.935
+ 318.453,470.79 319.461,470.79 320.037,470.647 321.334,470.499 322.197,470.358 322.773,469.927 323.35,469.065 323.926,468.487
+ 324.502,467.767 325.652,466.038 326.518,464.312 327.67,462.729 328.965,460.995 330.693,459.847 331.988,459.271
+ 333.141,458.694 334.006,458.405 334.438,458.118 337.75,458.118 338.758,458.839 338.758,459.562 338.898,460.995
+ 338.898,461.573 338.758,463.444 338.037,464.022 337.029,464.886 335.59,466.038 334.582,467.046 333.43,467.909 332.422,468.917
+ 331.27,469.64 330.406,469.64 331.27,469.782 332.563,469.206 334.006,468.487 334.869,467.767 335.73,467.19 337.316,465.319
+ 338.613,464.599 340.342,464.022 342.066,464.022 342.357,464.312 343.51,464.454 345.957,464.022 347.543,464.022 348.262,465.03
+ 348.406,466.472 347.398,467.479 347.398,468.198 348.262,468.341 349.129,467.767 352.582,467.767 353.59,468.63 353.59,469.64
+ 353.301,470.069 352.727,472.085 351.861,472.374 350.277,472.808 348.406,473.382 347.686,474.966 346.678,475.542
+ 344.518,475.397 343.51,474.819 343.797,476.263 344.66,476.983 345.379,477.987 344.949,479.286 343.941,480.294 342.934,480.294
+ 342.934,482.312 342.215,482.886 341.063,483.317 340.055,483.462 338.613,483.462 336.738,482.165 337.029,480.149
+ 336.883,478.136 336.166,476.839 335.445,475.827 334.148,474.534 332.998,474.39 332.998,475.542 334.006,476.405
+ 334.438,477.702 334.438,479.286 334.293,482.022 334.006,482.454 332.563,483.606 331.27,484.038 330.98,484.612 332.133,485.479
+ 333.43,485.046 334.727,485.046 335.301,485.19 335.301,486.774 335.73,487.638 335.59,489.079 333.861,489.366 332.277,489.653
+ 330.838,489.942 329.686,491.235 329.686,492.821 329.543,494.55 328.391,494.839 326.66,494.263 325.074,492.534 323.926,491.095
+ 322.773,490.374 320.037,488.935 318.453,488.647 317.156,488.647 316.293,488.358 313.988,488.501 313.27,488.647 312.262,488.79
+ 309.957,488.935 308.809,488.358 306.645,488.071 304.918,487.638 303.189,487.351 302.324,486.919 300.883,486.485
+ 299.445,485.479 299.301,483.896 299.445,482.165 300.166,481.157 300.598,480.149 300.883,479.718 301.316,479.286
+ 304.197,479.286 305.205,479.718 306.066,480.294 306.645,481.015 307.652,481.733 308.373,481.733 308.949,481.444
+ 309.094,480.728 308.373,479.862 308.518,478.997 308.518,478.71 308.949,477.987 "/>
+ <polyline id="polyline461" fill="#FFFFFF" points="309.813,44.838 310.246,43.976 310.678,43.542 311.828,42.534 312.117,42.534
+ 313.559,42.967 313.988,43.4 316.582,43.542 317.014,43.11 318.021,42.534 319.895,42.534 320.613,43.4 321.189,43.976
+ 323.205,46.422 323.781,46.856 325.223,46.856 325.223,47.432 324.645,48.295 323.641,48.728 322.629,49.879 321.766,50.742
+ 320.758,51.176 314.563,51.318 313.559,50.742 312.262,49.304 311.828,47.862 310.82,46.856 310.246,46.568 309.813,45.99
+ 309.813,44.838 "/>
+ <polyline id="polyline463" fill="#FFFFFF" points="315.861,57.078 317.301,57.654 318.021,58.662 318.883,60.534 318.883,61.976
+ 319.895,62.694 320.324,62.838 320.613,64.422 320.898,65.286 321.906,64.856 324.066,64.856 324.645,65.144 327.094,66.295
+ 327.957,67.016 328.391,68.454 326.518,68.742 324.645,70.038 322.918,72.198 322.197,73.352 321.766,74.79 320.898,76.52
+ 319.75,78.392 318.598,80.264 317.59,82.136 315.715,85.446 314.563,87.03 312.693,89.192 311.543,90.776 310.102,91.352
+ 308.809,91.494 303.766,91.926 298.869,91.206 295.988,90.776 293.254,87.318 291.238,85.304 291.238,84.15 293.398,83.144
+ 296.998,80.838 301.174,76.95 305.781,70.902 307.51,67.734 308.809,65.72 309.67,64.136 310.678,61.976 312.98,59.958
+ 314.854,58.085 315.861,57.078 "/>
+ <polyline id="polyline465" fill="#FFFFFF" points="317.014,29.144 317.59,28.424 317.879,28.136 318.883,27.272 320.758,27.272
+ 321.189,27.702 321.334,30.008 320.758,30.582 319.75,31.016 318.313,31.592 317.014,31.592 317.014,29.144 "/>
+ <polyline id="polyline467" fill="#FFFFFF" points="320.182,56.215 320.613,55.206 320.898,54.631 321.906,53.622 322.773,51.896
+ 323.781,51.318 325.797,51.176 326.66,52.184 327.238,54.631 328.533,56.07 329.828,56.501 330.838,56.936 331.988,57.512
+ 332.711,58.374 332.854,58.95 332.277,59.816 331.414,61.11 330.838,62.264 329.973,63.272 329.828,63.702 328.965,64.711
+ 327.67,64.711 326.518,64.136 323.205,64.136 322.342,63.702 321.334,62.838 320.758,62.264 320.758,58.95 320.324,58.374
+ 320.182,56.648 320.182,56.215 "/>
+ <polyline id="polyline469" fill="#FFFFFF" points="321.766,40.232 322.197,39.799 322.629,38.79 323.641,37.928 324.645,36.917
+ 326.66,36.344 327.525,36.344 327.957,36.917 328.391,37.782 328.533,41.096 327.957,44.551 327.379,44.984 325.652,44.984
+ 325.074,43.976 324.215,43.542 322.197,41.669 321.766,41.096 321.766,40.232 "/>
+ <polyline id="polyline471" fill="#FFFFFF" points="322.773,429.606 324.066,428.163 325.365,426.294 326.809,423.847
+ 328.102,421.976 329.543,420.39 330.98,418.374 332.277,416.79 333.861,415.927 335.73,415.64 338.613,415.206 341.492,415.065
+ 342.215,415.206 343.652,416.069 344.949,417.222 346.965,418.95 348.117,419.671 348.693,420.39 348.98,421.397 349.129,424.136
+ 348.406,425.722 347.398,426.729 345.67,427.878 344.23,428.454 342.645,428.89 341.063,428.741 337.895,428.599 337.029,428.599
+ 338.758,429.03 340.484,429.175 342.066,430.183 341.926,432.198 341.926,434.647 341.205,436.085 340.197,437.095 338.613,438.39
+ 336.453,439.253 334.727,439.542 332.854,438.534 328.82,436.808 326.66,435.511 325.365,434.069 323.641,432.487 322.918,431.331
+ 322.773,430.472 322.773,429.606 "/>
+ <polyline id="polyline473" fill="#FFFFFF" points="323.781,148.085 328.391,144.198 330.262,142.472 332.711,140.888
+ 336.738,137.144 340.055,134.118 342.066,131.669 343.652,130.085 344.949,129.078 345.813,129.078 346.82,129.942
+ 348.117,130.662 349.414,131.669 349.846,132.534 349.129,133.254 347.973,134.694 349.988,133.11 351.141,132.392
+ 353.014,132.392 354.883,130.808 355.895,129.797 356.613,129.51 357.766,129.942 358.197,131.238 358.484,132.104
+ 358.918,132.392 359.781,133.4 360.645,134.262 361.223,135.272 361.074,136.278 360.357,137.43 359.641,138.006 358.629,139.158
+ 358.197,139.59 357.334,140.024 356.613,140.312 355.605,140.6 354.313,140.742 353.59,140.888 352.727,141.318 352.006,141.75
+ 351.715,142.184 353.156,141.896 353.301,142.038 355.174,141.75 356.613,141.75 357.766,141.174 359.492,140.312 360.215,139.877
+ 361.074,139.301 361.654,138.87 362.086,138.582 362.949,138.728 363.525,139.734 363.67,140.6 364.102,141.461 364.246,142.184
+ 363.814,143.48 364.246,143.91 367.414,143.91 367.846,144.198 368.998,145.064 370.148,145.926 370.293,149.669 372.311,151.686
+ 373.605,152.406 373.75,152.694 374.758,153.125 374.758,153.414 374.037,154.278 370.725,154.278 369.715,153.99 369.141,154.133
+ 368.564,154.709 368.131,155.43 367.414,155.717 367.127,156.438 366.693,157.016 366.117,158.024 365.254,158.888
+ 364.389,158.742 363.379,158.024 362.373,157.301 361.795,156.438 361.074,155.574 360.645,155.144 360.357,154.854
+ 360.645,154.278 361.654,153.272 361.795,152.694 361.223,152.406 360.645,153.125 359.926,153.702 358.773,153.702
+ 357.766,153.414 356.037,151.686 354.738,150.965 354.021,150.104 353.445,149.526 352.727,148.808 352.148,148.374
+ 351.43,147.942 350.563,147.654 348.406,147.654 347.543,147.942 347.109,148.518 348.693,148.374 349.846,148.518 351.285,148.95
+ 352.293,149.526 352.727,150.392 353.445,151.11 354.166,151.976 354.453,152.694 355.029,153.56 355.75,154.422 356.613,155.144
+ 357.189,155.43 357.621,155.862 357.621,156.438 357.906,157.446 357.047,158.024 356.182,158.6 355.75,159.03 354.883,159.318
+ 354.021,159.896 352.869,159.75 351.43,159.75 350.277,159.608 347.254,159.608 345.957,159.896 343.941,159.896 342.789,160.184
+ 342.215,160.326 340.773,160.472 339.906,160.758 339.047,161.045 338.182,161.333 336.883,161.622 336.021,161.91
+ 335.156,162.198 334.438,162.486 333.57,162.629 332.563,161.91 331.129,160.614 328.391,158.166 325.365,155.286 324.215,154.278
+ 322.055,152.694 321.477,151.976 321.334,151.254 321.334,150.678 321.477,150.392 321.621,150.104 322.197,149.526
+ 323.205,148.662 323.781,148.085 "/>
+ <polyline id="polyline475" fill="#FFFFFF" points="324.066,33.03 324.066,30.582 324.645,30.15 326.66,30.15 327.094,31.158
+ 327.094,32.888 324.789,33.03 324.066,33.03 "/>
+ <polyline id="polyline477" fill="#FFFFFF" points="325.223,386.839 327.525,383.671 328.82,381.942 329.543,380.935
+ 330.693,379.64 331.27,378.487 331.559,377.622 332.854,376.183 334.148,375.606 335.156,374.89 336.883,374.599 338.473,374.312
+ 339.766,373.733 342.066,372.87 343.652,372.438 345.67,372.296 346.678,373.304 347.828,374.312 348.693,375.03 348.693,377.19
+ 348.262,380.214 348.262,381.942 347.973,383.671 347.973,384.819 347.828,386.118 347.686,388.278 348.117,389.862
+ 348.117,391.444 347.973,393.319 348.117,394.759 347.828,395.331 345.525,395.19 343.51,394.901 340.342,394.901 339.621,395.479
+ 338.324,396.63 337.174,397.782 336.021,399.077 334.727,400.229 333.43,401.237 332.711,402.103 332.133,402.966 330.98,403.11
+ 330.262,401.958 328.965,400.663 327.67,398.79 326.373,397.351 325.223,395.909 324.789,395.19 324.357,394.038 322.918,391.878
+ 322.773,390.438 323.641,388.71 325.223,386.839 "/>
+ <polyline id="polyline479" fill="#FFFFFF" points="327.957,49.304 328.533,48.295 329.398,47.432 330.406,46.422 330.98,45.56
+ 332.422,44.838 335.156,44.984 335.73,45.56 335.73,45.99 335.156,46.856 335.156,47.432 335.73,48.006 336.021,51.176
+ 336.598,52.614 336.598,53.91 336.021,54.917 335.156,55.494 331.846,55.494 330.406,54.917 329.398,54.486 328.391,53.48
+ 327.957,51.176 327.957,49.304 "/>
+ <polyline id="polyline481" fill="#FFFFFF" points="331.129,493.829 331.27,492.534 331.414,492.39 331.559,492.103
+ 331.701,491.235 334.727,491.235 335.445,491.958 335.445,493.397 334.869,494.403 333.861,495.413 332.133,495.56
+ 331.559,494.981 331.129,493.829 "/>
+ <polyline id="polyline483" fill="#FFFFFF" points="331.27,67.734 331.559,67.304 331.846,66.44 332.133,65.574 332.563,65.144
+ 332.998,64.711 335.879,64.711 336.313,64.856 336.598,64.998 336.738,65.144 337.316,65.72 337.895,66.15 340.484,66.15
+ 341.35,65.862 342.215,65.286 342.789,65.432 343.074,65.574 343.51,66.295 343.797,66.728 343.941,67.304 343.941,67.592
+ 344.518,68.024 345.67,68.312 347.398,69.176 348.838,69.608 348.838,70.76 348.547,71.622 347.686,72.344 347.109,73.064
+ 345.094,74.501 343.365,74.79 344.086,74.936 345.813,74.936 346.82,74.79 348.547,74.648 349.846,74.501 350.422,74.936
+ 350.854,75.512 351.715,76.374 353.156,76.52 354.598,76.95 355.605,77.669 355.895,78.246 355.605,79.542 355.174,80.694
+ 354.453,81.702 353.59,82.709 353.301,84.006 353.73,84.87 351.141,85.304 349.414,85.158 348.406,84.44 347.398,83.862
+ 347.973,84.87 348.838,85.592 349.988,85.877 351.285,86.024 353.156,85.877 353.73,86.166 354.598,87.03 356.037,89.192
+ 357.189,91.494 357.766,93.654 357.477,93.942 353.014,94.232 349.129,94.085 346.678,93.654 345.525,93.366 343.941,92.358
+ 341.492,90.198 340.197,88.902 338.758,87.174 337.895,85.592 337.029,84.006 336.166,81.56 335.301,77.958 334.148,73.64
+ 333.57,71.333 332.563,69.75 331.27,67.734 "/>
+ <polyline id="polyline485" fill="#FFFFFF" points="332.277,33.896 332.711,33.463 334.148,33.463 336.166,34.038 337.029,34.902
+ 337.605,35.91 338.182,36.776 338.613,38.07 337.895,38.648 337.605,40.662 337.029,41.669 336.598,42.104 335.879,42.534
+ 332.854,42.534 332.277,41.669 331.846,39.654 331.846,38.215 332.277,33.896 "/>
+ <polyline id="polyline487" fill="#FFFFFF" points="333.141,404.118 335.156,401.671 337.029,399.655 338.758,398.069
+ 341.063,396.343 345.67,396.63 352.869,396.63 356.037,396.774 356.037,397.782 355.75,398.499 355.029,399.511 354.598,400.229
+ 353.73,401.671 353.59,402.679 353.879,403.687 354.598,404.983 355.174,406.278 355.605,407.862 356.182,408.729 356.613,410.599
+ 357.047,411.319 357.621,412.183 358.197,413.19 358.342,414.198 358.197,415.351 357.906,415.927 357.047,416.79 356.758,417.222
+ 356.324,417.511 356.182,418.229 355.895,420.103 355.316,421.687 355.029,422.554 354.313,423.562 353.301,424.569
+ 352.293,425.573 350.854,425.573 350.563,423.126 349.846,420.39 348.98,419.671 348.117,418.663 346.678,417.366 345.238,415.927
+ 344.373,414.774 342.645,414.058 341.205,413.19 340.342,412.183 338.898,410.741 336.313,408.729 334.293,406.71 333.285,405.847
+ 332.998,404.983 333.141,404.118 "/>
+ <polyline id="polyline489" fill="#FFFFFF" points="333.43,443.862 333.861,442.995 334.006,442.854 334.869,442.136
+ 336.166,441.562 337.029,441.271 338.473,441.271 338.898,441.126 339.766,440.405 340.484,439.827 341.641,438.819
+ 342.502,438.534 343.652,438.966 344.518,439.827 344.373,442.995 344.086,445.015 343.074,445.878 341.492,446.886
+ 340.629,447.319 338.898,448.038 337.895,448.612 336.453,449.046 335.156,448.901 334.438,447.03 334.148,445.015
+ 333.861,444.438 333.43,443.862 "/>
+ <polyline id="polyline491" fill="#FFFFFF" points="334.006,163.64 337.316,162.486 341.205,161.48 344.373,161.045 349.27,160.614
+ 353.879,160.614 355.605,161.622 357.334,164.07 359.492,167.669 359.35,169.686 358.342,170.984 350.711,171.125 341.641,171.414
+ 339.766,172.133 335.73,175.59 331.27,179.192 330.547,179.333 329.254,177.461 329.686,176.166 330.98,174.582 331.559,171.414
+ 332.711,167.816 333.861,164.79 334.006,163.64 "/>
+ <polyline id="polyline493" fill="#FFFFFF" points="334.727,60.822 335.73,59.816 337.174,58.374 338.182,57.942 338.613,57.512
+ 339.477,56.936 341.063,56.936 341.492,57.512 341.35,62.264 339.906,63.702 339.047,64.136 338.037,64.136 336.738,62.694
+ 335.156,62.264 334.582,61.688 334.727,60.822 "/>
+ <polyline id="polyline495" fill="#FFFFFF" points="336.453,452.647 336.453,451.782 337.174,451.351 338.324,450.917
+ 339.621,449.909 341.926,449.479 344.23,449.909 345.67,450.487 347.109,451.782 347.543,452.935 346.391,454.229 345.379,455.095
+ 341.926,455.095 340.918,454.663 340.484,454.663 339.621,454.95 338.037,455.095 337.029,455.095 336.453,454.374
+ 336.453,452.647 "/>
+ <polyline id="polyline497" fill="#FFFFFF" points="336.883,492.821 337.316,491.671 337.461,490.229 338.182,490.229
+ 339.189,491.235 339.906,492.103 340.342,492.821 340.773,493.397 339.766,493.974 336.883,493.974 336.883,492.821 "/>
+ <polyline id="polyline499" fill="#FFFFFF" points="337.029,46.711 337.461,45.702 337.605,45.414 338.473,44.551 339.047,43.976
+ 339.477,42.246 340.918,41.238 343.797,41.238 344.373,41.669 344.66,42.68 344.66,43.11 343.797,43.976 343.365,44.551
+ 343.51,45.848 342.502,46.998 342.502,47.286 341.926,48.295 342.066,52.614 340.342,53.192 339.047,53.047 338.473,52.184
+ 338.037,51.608 337.174,47.862 337.174,47.144 337.029,46.711 "/>
+ <polyline id="polyline501" fill="#FFFFFF" points="337.605,199.638 338.324,199.064 342.215,196.038 345.957,193.59
+ 352.148,191.286 357.621,189.702 360.215,188.984 362.23,187.974 363.094,187.4 364.102,188.262 365.254,190.998 366.117,192.582
+ 363.094,193.877 361.51,194.598 359.063,196.182 357.334,198.054 360.066,196.47 362.807,195.03 366.262,194.31 371.445,194.31
+ 371.732,196.758 371.59,199.638 372.311,201.942 370.293,203.526 367.846,204.965 361.074,210.15 356.473,213.03 355.174,213.174
+ 353.301,212.454 348.693,208.568 345.379,205.542 342.066,203.238 339.047,201.222 337.461,200.501 337.461,200.213
+ 337.605,199.638 "/>
+ <polyline id="polyline503" fill="#FFFFFF" points="338.324,485.911 339.477,485.622 340.484,486.341 341.205,486.919
+ 341.926,487.351 344.949,487.495 345.957,487.782 346.246,488.358 346.391,489.509 345.379,490.663 344.373,491.526
+ 342.066,491.671 340.629,490.806 339.621,490.087 339.189,489.222 338.324,488.358 338.324,485.911 "/>
+ <polyline id="polyline505" fill="#FFFFFF" points="341.205,35.91 341.35,35.768 341.492,35.333 342.502,34.902 343.365,34.472
+ 344.809,34.038 346.246,34.038 346.391,34.76 345.238,35.91 344.66,36.776 344.373,37.206 343.797,37.782 342.934,38.215
+ 341.492,38.215 341.063,37.206 341.205,35.91 "/>
+ <polyline id="polyline507" fill="#FFFFFF" points="341.492,459.987 342.066,459.271 342.215,458.983 342.789,458.55
+ 343.652,458.55 344.086,458.983 344.518,459.562 344.949,459.987 345.094,461.862 344.518,462.438 342.645,462.294
+ 341.641,461.718 341.492,460.71 341.492,459.987 "/>
+ <polyline id="polyline509" fill="#FFFFFF" points="341.492,191.862 337.316,186.822 332.711,182.07 331.129,180.776
+ 336.021,177.461 340.342,174.582 342.502,173.43 345.525,172.709 353.156,173.142 355.75,173.142 356.473,172.854 357.189,172.568
+ 357.047,173.43 356.898,174.582 356.182,177.461 356.613,178.47 351.861,180.054 350.133,181.494 356.324,179.48 358.484,180.342
+ 362.807,183.797 359.063,185.958 354.883,188.406 350.711,190.278 344.23,192.726 342.645,193.301 341.492,191.862 "/>
+ <polyline id="polyline511" fill="#FFFFFF" points="343.365,57.512 344.373,57.078 346.533,56.648 349.701,56.79 350.277,57.512
+ 350.133,59.958 349.701,60.967 349.701,62.264 350.133,62.838 350.998,63.272 352.006,64.278 352.148,64.568 351.57,66.006
+ 351.141,67.158 350.563,67.592 348.547,67.592 346.82,67.158 344.809,66.582 344.086,66.006 343.365,65.144 342.934,64.136
+ 342.934,62.838 343.365,57.512 "/>
+ <polyline id="polyline513" fill="#FFFFFF" points="343.652,482.599 344.23,481.157 345.379,480.294 348.693,480.294
+ 349.559,481.157 350.133,482.886 349.846,485.333 348.693,486.341 346.965,486.485 345.813,485.767 343.941,485.19 343.51,484.325
+ 343.652,482.599 "/>
+ <polyline id="polyline515" fill="#FFFFFF" points="343.941,431.479 344.66,430.612 345.238,430.038 346.391,428.741
+ 347.686,428.022 348.838,427.591 350.133,427.878 351.141,429.175 351.715,430.472 352.148,431.767 352.582,432.917
+ 352.582,436.229 351.715,437.382 350.854,437.815 348.262,438.245 346.533,438.39 345.094,437.382 344.23,436.229 343.941,432.058
+ 343.941,431.479 "/>
+ <polyline id="polyline517" fill="#FFFFFF" points="344.086,49.879 344.809,48.44 345.238,47.432 345.957,46.422 346.246,45.99
+ 347.254,44.984 348.262,44.551 348.693,43.976 349.701,43.542 351.141,42.967 352.438,43.542 352.582,46.422 351.43,46.856
+ 350.133,47.862 349.559,48.728 348.547,50.312 348.262,51.608 347.109,52.614 344.373,52.614 344.086,49.879 "/>
+ <polyline id="polyline519" fill="#FFFFFF" points="345.094,117.846 346.391,116.549 347.543,115.11 348.98,113.669
+ 350.563,111.942 351.715,111.51 352.869,112.374 353.59,113.238 355.605,114.678 355.75,116.549 355.174,118.422 354.598,119.862
+ 350.422,121.014 349.27,121.446 347.828,122.454 347.254,122.312 346.102,120.728 344.949,119.72 345.094,117.846 "/>
+ <polyline id="polyline521" fill="#FFFFFF" points="346.391,456.39 347.398,455.526 348.262,454.519 348.693,453.942
+ 350.133,454.085 350.998,454.519 351.57,454.95 352.438,455.526 353.014,455.815 355.174,455.958 355.461,456.534 355.461,457.827
+ 355.029,458.263 351.141,458.405 350.563,458.839 349.701,459.987 349.559,460.136 348.693,460.278 347.828,459.702
+ 347.109,459.126 346.678,458.263 346.391,457.827 346.391,456.39 "/>
+ <polyline id="polyline523" fill="#FFFFFF" points="346.391,444.151 346.678,443.431 346.965,440.55 347.973,440.118
+ 350.277,440.118 350.854,441.562 351.285,443.862 351.715,445.444 351.715,448.759 350.711,449.767 348.838,449.767
+ 347.254,449.19 346.533,448.183 346.391,444.87 346.391,444.151 "/>
+ <polyline id="polyline525" fill="#FFFFFF" points="347.254,127.064 348.262,126.056 349.27,125.192 350.711,124.614
+ 351.57,124.184 352.582,123.608 354.453,123.174 357.766,123.318 357.906,124.758 356.898,125.622 356.324,126.486
+ 355.895,127.494 355.029,128.501 354.598,129.51 353.59,130.374 352.582,130.95 352.006,131.381 350.563,131.381 349.701,130.808
+ 348.693,130.085 348.262,129.51 347.686,128.648 347.254,128.07 347.254,127.064 "/>
+ <polyline id="polyline527" fill="#FFFFFF" points="347.398,476.263 347.973,475.397 348.98,474.819 351.715,474.819
+ 351.861,475.976 351.715,477.702 351.285,478.136 348.838,478.136 347.973,477.702 347.398,477.126 347.398,476.263 "/>
+ <polyline id="polyline529" fill="#FFFFFF" points="347.543,38.501 348.117,37.494 348.117,37.352 349.129,36.344 350.563,36.344
+ 351.43,37.352 352.006,38.215 352.006,39.078 350.998,40.085 350.133,40.662 347.686,40.662 347.543,38.936 347.543,38.501 "/>
+ <polyline id="polyline531" fill="#FFFFFF" points="348.117,352.854 349.559,350.839 350.854,348.966 352.006,348.245
+ 354.166,348.39 355.605,348.823 359.35,349.976 361.51,350.694 362.662,351.271 363.094,351.847 362.949,353.431 362.086,355.159
+ 361.365,357.03 360.502,359.335 360.502,360.198 360.789,361.351 361.223,362.79 361.795,364.229 362.662,366.245 364.246,368.983
+ 365.254,370.712 366.262,372.296 366.98,373.304 367.127,374.599 366.262,375.606 365.109,376.323 363.238,377.19 361.654,377.622
+ 359.205,378.058 355.75,377.909 353.73,377.19 352.006,375.897 349.846,374.454 347.828,372.729 345.957,371.286 344.66,369.702
+ 343.652,367.397 342.934,365.671 342.645,364.663 342.645,361.351 342.789,360.343 344.23,358.614 345.379,357.03 346.965,354.87
+ 347.686,353.718 348.117,352.854 "/>
+ <polyline id="polyline533" fill="#FFFFFF" points="349.414,107.045 350.277,106.038 352.727,106.038 355.605,107.045
+ 357.477,108.056 357.477,109.926 356.037,111.797 353.73,111.654 352.293,110.648 350.563,110.213 349.846,109.352 349.27,108.486
+ 349.414,107.045 "/>
+ <polyline id="polyline535" fill="#FFFFFF" points="349.559,52.76 350.133,51.75 350.422,50.888 350.998,49.879 351.57,48.87
+ 352.006,48.44 354.021,48.44 354.883,48.87 355.316,49.446 355.316,50.312 354.738,51.75 354.313,52.184 353.301,52.76
+ 352.438,53.192 350.998,53.768 349.559,53.622 349.559,52.76 "/>
+ <polyline id="polyline537" fill="#FFFFFF" points="350.277,71.91 350.563,71.333 350.711,71.047 351.715,69.896 352.727,68.024
+ 353.59,66.15 354.166,65.144 354.598,64.711 358.342,64.711 359.205,65.574 359.781,66.582 360.789,67.592 360.789,69.896
+ 359.781,70.902 359.063,72.917 358.629,73.782 357.766,75.078 356.613,76.085 355.029,76.085 352.582,75.512 350.998,74.79
+ 350.277,73.64 350.277,71.91 "/>
+ <polyline id="polyline539" fill="#FFFFFF" points="350.711,376.759 352.727,378.058 354.883,379.206 357.334,379.495
+ 360.934,379.351 363.814,378.774 365.254,377.622 366.262,376.901 367.557,376.759 368.277,376.759 368.854,377.331
+ 369.572,380.214 370.148,381.366 371.59,384.103 371.59,385.827 370.582,387.126 369.285,388.421 367.99,389.431 366.547,390.294
+ 364.533,390.151 362.23,389.431 360.357,389.431 359.063,391.015 358.055,393.175 357.766,394.038 356.898,394.759
+ 356.324,395.046 355.316,395.331 349.988,395.331 349.414,392.89 349.27,389.431 348.693,386.118 348.838,383.237 348.98,381.222
+ 349.414,379.495 350.711,376.759 "/>
+ <polyline id="polyline541" fill="#FFFFFF" points="351.141,461.286 351.43,460.854 354.313,460.71 354.313,463.589
+ 353.879,464.163 353.445,464.163 352.006,463.589 351.43,463.155 350.998,462.581 351.141,461.286 "/>
+ <polyline id="polyline543" fill="#FFFFFF" points="351.285,452.069 351.715,451.206 352.869,450.198 353.59,449.331
+ 355.174,449.19 356.037,450.198 356.613,451.206 356.898,452.214 357.047,453.509 356.473,453.942 353.879,454.085
+ 352.727,453.509 351.715,453.077 351.141,452.358 351.285,452.069 "/>
+ <polyline id="polyline545" fill="#FFFFFF" points="351.57,58.95 352.006,57.078 353.014,55.64 354.166,54.776 355.029,54.198
+ 357.766,54.056 359.205,55.64 359.781,57.512 359.641,58.374 359.205,59.383 358.342,60.392 357.766,61.254 357.334,61.688
+ 356.324,62.264 354.883,62.838 353.014,62.694 352.006,61.688 351.43,60.822 351.57,58.95 "/>
+ <polyline id="polyline547" fill="#FFFFFF" points="352.148,96.822 353.156,96.534 355.75,95.816 357.906,95.958 359.35,96.822
+ 359.926,97.83 359.926,99.272 359.35,100.278 358.918,101.144 357.477,102.582 356.613,103.592 356.324,104.024 353.73,104.024
+ 352.293,103.592 352.148,96.822 "/>
+ <polyline id="polyline549" fill="#FFFFFF" points="354.453,82.998 355.174,81.99 355.895,81.127 357.189,80.406 358.342,79.254
+ 359.492,78.104 360.645,75.942 361.223,74.648 361.941,72.917 362.949,72.776 364.246,73.64 365.109,74.501 366.838,75.942
+ 367.846,77.383 368.131,78.246 368.131,79.254 367.414,80.264 366.547,81.127 365.398,81.99 364.533,82.422 362.662,82.856
+ 362.23,82.856 361.223,82.998 358.773,83.286 356.898,83.72 355.75,83.862 355.029,83.72 354.883,83.432 354.453,82.998 "/>
+ <polyline id="polyline551" fill="#FFFFFF" points="355.174,85.446 356.182,84.44 358.918,84.006 362.086,83.862 366.117,83.574
+ 366.117,83.72 367.846,85.446 368.854,86.742 370.582,88.472 372.021,89.622 373.318,90.776 373.318,92.648 372.883,93.51
+ 372.166,94.662 371.156,95.381 369.715,95.381 368.564,94.662 367.99,94.085 367.27,93.51 365.686,93.51 364.822,93.799
+ 363.238,93.942 361.223,94.374 360.357,94.374 359.641,93.366 359.063,92.213 358.342,90.917 357.621,89.622 356.758,88.614
+ 356.182,87.463 355.461,86.742 355.174,85.446 "/>
+ <polyline id="polyline553" fill="#FFFFFF" points="356.182,215.622 357.766,213.75 362.373,210.293 368.564,206.262
+ 372.311,203.958 375.621,202.374 376.629,202.374 377.35,204.678 378.068,206.838 378.213,208.709 377.061,210.87 375.908,212.598
+ 374.324,213.894 369.43,216.486 371.59,215.91 374.324,214.902 375.334,214.614 376.773,215.192 379.51,217.782 381.238,220.085
+ 381.379,221.238 378.789,223.686 375.479,224.694 372.311,226.422 368.131,229.59 364.389,233.19 363.957,233.766 362.662,229.734
+ 361.074,225.414 359.205,222.102 357.766,218.358 356.182,215.622 "/>
+ <polyline id="polyline555" fill="#FFFFFF" points="356.613,119.43 357.047,117.99 357.621,116.984 359.205,116.838
+ 360.066,116.549 361.223,116.694 361.941,116.984 362.373,117.56 362.373,119.72 361.941,120.44 357.334,120.44 356.613,119.862
+ 356.613,119.43 "/>
+ <polyline id="polyline557" fill="#FFFFFF" points="357.189,161.333 357.766,160.614 357.906,160.472 358.629,159.461
+ 359.781,159.03 360.789,159.03 362.373,160.902 363.238,161.91 365.109,163.064 366.98,163.782 368.422,164.213 368.564,166.085
+ 367.99,166.662 367.557,168.965 367.127,169.4 366.117,169.974 364.246,170.406 362.23,170.838 361.365,170.838 361.074,170.406
+ 360.357,166.662 359.35,165.224 358.629,164.213 357.621,162.776 357.334,162.056 357.189,161.333 "/>
+ <polyline id="polyline559" fill="#FFFFFF" points="357.477,113.816 358.055,112.808 359.063,111.366 361.654,111.078
+ 363.238,112.232 363.238,113.816 361.795,115.254 359.492,115.254 357.621,114.678 357.477,113.816 "/>
+ <polyline id="polyline561" fill="#FFFFFF" points="357.906,174.582 359.205,173.43 361.223,173.286 362.662,173.286
+ 364.678,174.293 365.83,176.166 367.127,178.182 368.131,180.198 368.422,181.638 367.99,182.934 365.686,182.934 363.094,181.926
+ 361.51,181.064 359.35,179.91 357.621,178.182 357.477,175.734 357.906,174.582 "/>
+ <polyline id="polyline563" fill="#FFFFFF" points="358.197,241.542 358.197,240.246 359.641,240.246 360.645,239.526
+ 362.373,238.085 363.814,236.646 364.822,235.35 365.686,234.198 366.693,233.045 367.846,231.606 369.715,230.022 371.59,228.582
+ 373.461,227.142 375.189,225.846 376.629,225.27 377.639,224.984 378.357,224.838 380.086,224.694 381.379,224.694
+ 382.102,225.125 382.678,225.99 382.822,227.142 382.678,228.87 382.389,230.31 381.814,231.75 381.094,233.19 380.373,234.486
+ 381.525,233.91 382.533,232.038 382.963,230.31 383.398,229.014 383.541,226.422 383.973,224.838 384.693,222.534 385.27,220.662
+ 386.277,219.51 387.285,218.934 388.148,218.79 388.869,219.222 389.732,220.232 390.166,221.094 391.174,222.534 392.324,223.83
+ 393.189,224.984 394.773,226.422 395.639,227.286 396.213,228.293 396.502,229.014 396.646,229.877 395.35,230.885
+ 393.334,232.182 391.174,233.766 389.156,235.35 387.572,236.213 386.277,236.79 385.701,237.51 384.98,238.806 384.262,240.39
+ 383.83,241.686 383.109,242.982 382.102,244.566 380.23,246.15 378.068,247.158 376.055,247.734 372.166,249.03 369.141,249.894
+ 366.117,250.182 363.379,250.182 361.795,248.598 360.066,246.293 358.918,244.421 358.342,243.414 358.055,242.262
+ 358.197,241.542 "/>
+ <polyline id="polyline565" fill="#FFFFFF" points="358.484,440.839 359.205,440.263 360.066,439.397 359.926,439.11
+ 358.629,439.976 356.613,440.263 356.037,440.55 354.738,439.542 354.738,437.382 355.174,437.095 355.174,434.79 355.316,433.351
+ 356.473,432.343 357.621,431.479 360.934,431.479 361.654,431.767 362.086,432.198 362.518,433.351 363.379,434.214
+ 363.238,432.63 362.807,431.479 362.23,431.046 361.51,430.472 360.789,430.038 359.35,429.03 358.197,429.03 357.047,429.749
+ 356.037,430.323 355.605,430.901 354.166,431.046 353.879,429.749 353.301,428.599 353.301,427.155 353.879,427.015
+ 355.316,425.573 356.324,424.278 356.758,422.983 358.773,422.983 359.781,423.562 361.074,424.136 362.086,423.847
+ 363.094,423.413 364.246,422.839 365.686,422.554 366.838,422.405 366.838,422.263 366.262,422.263 364.822,422.405
+ 363.094,422.405 361.795,422.839 360.215,422.839 359.063,422.554 358.197,421.976 357.189,421.397 356.898,420.39
+ 357.047,419.815 357.189,419.386 357.766,418.085 358.484,417.511 359.492,415.782 359.492,413.622 358.629,412.183
+ 357.906,410.163 357.189,408.581 356.473,406.995 356.037,405.987 355.605,404.983 354.738,403.687 354.598,402.534
+ 354.883,401.526 355.461,400.95 356.037,399.942 357.189,398.499 358.197,396.63 359.063,394.323 359.926,392.89 360.645,391.591
+ 361.51,390.729 363.094,390.87 364.246,390.729 365.398,390.87 366.406,391.155 367.414,390.87 368.709,390.438 369.861,389.144
+ 370.869,388.569 371.877,388.136 372.74,387.562 373.75,387.413 374.613,387.413 378.068,387.271 378.502,387.126 379.365,386.694
+ 381.094,384.966 381.957,383.386 383.254,382.519 383.973,382.519 385.27,382.663 385.846,382.808 386.277,383.526
+ 388.148,384.819 389.59,385.11 390.883,386.983 391.029,388.854 390.453,390.294 389.732,391.304 389.59,392.163 388.725,393.175
+ 388.725,394.038 390.311,394.472 391.893,395.046 393.045,396.058 394.055,397.495 394.486,398.935 395.061,400.374
+ 395.35,401.815 395.205,402.679 394.773,403.542 393.908,403.687 392.471,403.542 392.758,404.263 393.045,404.694
+ 393.045,405.987 392.471,406.569 391.605,406.569 391.461,407.573 392.613,408.007 392.613,413.331 392.471,413.767
+ 391.605,414.198 391.75,415.065 391.605,415.64 393.045,415.64 394.055,416.069 394.486,417.077 395.061,418.808 395.35,419.958
+ 395.494,420.819 395.494,423.413 395.35,424.136 395.205,424.278 393.621,424.278 393.334,423.702 392.613,423.271
+ 392.324,423.271 392.037,423.413 392.037,424.421 392.613,425.144 392.613,426.294 392.182,427.304 391.461,428.163
+ 390.883,428.741 389.877,429.175 389.301,428.741 388.869,428.163 388.148,428.022 388.148,428.599 388.293,429.462
+ 388.293,430.612 387.861,430.901 387.715,431.479 387.285,431.909 385.414,431.909 384.693,431.479 384.547,431.479
+ 384.547,432.917 384.406,433.351 383.973,433.351 383.973,434.358 383.109,435.222 381.957,435.366 381.238,435.366
+ 380.662,435.942 380.662,436.808 381.957,436.663 382.102,438.103 381.814,438.534 381.094,440.118 380.807,440.983
+ 380.23,441.847 380.086,442.854 379.654,443.286 379.654,444.729 378.789,445.589 378.213,445.878 377.35,445.878 376.918,445.444
+ 375.766,445.444 375.908,446.022 376.342,446.741 376.342,447.749 375.479,448.038 375.189,448.323 373.605,448.183
+ 373.318,447.171 372.74,446.886 371.877,446.741 372.021,447.749 372.021,449.767 371.445,450.198 370.006,450.198
+ 370.006,449.767 368.277,449.331 368.564,449.767 368.131,450.198 367.557,450.63 366.98,450.774 366.547,450.917 365.254,450.63
+ 364.389,450.198 362.949,448.612 362.949,447.897 363.379,447.462 363.238,446.454 362.518,446.312 362.23,446.741 361.074,447.03
+ 360.357,447.462 359.063,448.183 357.621,448.183 356.898,447.606 356.182,446.741 355.174,445.878 354.738,444.87
+ 354.738,442.995 355.461,442.569 355.75,442.278 356.182,441.987 356.898,441.847 357.189,441.562 358.484,440.839 "/>
+ <polyline id="polyline567" fill="#FFFFFF" points="358.484,103.158 358.773,102.44 358.918,102.15 359.492,101.286
+ 360.934,100.278 362.373,100.278 364.102,101.43 364.389,103.158 362.807,104.6 361.365,105.896 359.063,106.038 358.484,105.461
+ 358.484,103.158 "/>
+ <polyline id="polyline569" fill="#FFFFFF" points="358.773,450.341 359.205,449.909 360.215,449.331 361.654,449.331
+ 362.518,450.341 362.662,451.351 362.086,452.214 359.641,452.214 359.205,451.206 358.629,450.774 358.773,450.341 "/>
+ <polyline id="polyline571" fill="#FFFFFF" points="359.781,130.52 361.51,129.942 362.949,129.942 365.973,130.52 365.973,131.669
+ 364.963,132.678 364.102,133.254 363.238,133.976 362.23,134.118 360.934,133.688 360.215,132.534 359.781,132.104 359.781,130.52
+ "/>
+ <polyline id="polyline573" fill="#FFFFFF" points="360.066,63.56 360.215,62.264 361.223,61.254 362.23,61.254 363.094,61.976
+ 363.957,62.264 365.398,62.694 366.547,63.272 366.98,63.99 367.27,64.711 367.27,65.72 366.262,66.44 365.398,67.016
+ 364.533,67.446 362.518,67.446 361.654,66.44 361.074,65.432 360.789,64.568 360.357,63.99 360.066,63.56 "/>
+ <polyline id="polyline575" fill="#FFFFFF" points="361.223,124.614 362.518,124.758 363.094,125.192 363.67,125.622
+ 364.102,126.198 364.533,126.629 364.678,127.926 363.957,128.648 363.238,129.224 361.654,129.51 360.789,129.51 359.781,128.936
+ 359.35,128.501 359.35,127.352 359.781,126.486 360.645,125.622 361.074,125.045 361.223,124.614 "/>
+ <polyline id="polyline577" fill="#FFFFFF" points="362.373,96.822 362.949,95.958 364.102,95.238 366.838,95.381 367.414,96.534
+ 367.414,100.568 366.98,101.43 366.262,101.574 365.254,101.144 364.389,100.422 363.094,98.549 362.086,97.542 362.373,96.822
+ "/>
+ <polyline id="polyline579" fill="#FFFFFF" points="362.949,356.022 363.379,355.304 363.957,354.294 365.254,352.854
+ 365.973,352.421 367.414,352.854 368.564,354.151 370.293,355.591 371.59,356.454 373.461,356.741 373.893,356.886
+ 372.453,362.214 372.453,363.655 371.014,364.085 368.854,363.798 370.438,364.663 372.311,364.663 373.605,364.808
+ 376.486,369.847 377.205,372.007 376.486,373.155 373.605,374.167 371.445,374.599 368.854,374.312 368.277,373.88 366.98,372.151
+ 365.541,369.271 363.094,364.376 361.795,360.917 361.795,359.046 362.518,356.886 362.662,356.741 362.949,356.022 "/>
+ <polyline id="polyline581" fill="#FFFFFF" points="364.389,71.48 364.678,70.614 366.547,69.608 368.564,68.454 369.43,68.166
+ 371.877,68.166 372.311,69.463 372.74,71.333 373.174,72.917 374.037,74.358 374.758,75.799 374.758,77.669 373.893,78.68
+ 372.598,79.4 371.014,79.542 369.285,78.246 368.422,76.95 367.557,75.654 366.693,74.79 365.83,73.928 365.109,73.494
+ 364.822,73.206 364.246,72.056 364.389,71.48 "/>
+ <polyline id="polyline583" fill="#FFFFFF" points="364.678,185.816 365.541,185.526 370.293,185.381 371.301,185.816
+ 372.166,185.526 374.613,184.95 376.629,184.95 376.773,188.694 375.766,189.846 374.324,190.133 372.883,189.99 372.311,192.006
+ 370.725,192.726 367.701,192.438 366.406,190.278 365.254,188.838 365.109,187.254 364.533,185.958 364.678,185.816 "/>
+ <polyline id="polyline585" fill="#FFFFFF" points="364.963,136.278 365.541,135.56 366.117,134.694 366.98,134.694
+ 367.557,135.414 368.277,136.278 368.277,138.44 367.846,139.158 367.27,139.59 366.406,140.024 365.83,140.024 365.109,139.016
+ 364.963,136.998 364.963,136.278 "/>
+ <polyline id="polyline587" fill="#FFFFFF" points="365.686,172.422 367.127,171.414 368.564,170.984 370.293,171.414
+ 371.732,172.854 373.174,173.286 374.613,174.293 376.486,177.174 376.773,179.333 376.629,181.926 371.014,182.07 369.43,180.054
+ 368.131,178.038 367.701,176.454 366.262,175.158 365.686,173.862 365.686,172.422 "/>
+ <polyline id="polyline589" fill="#FFFFFF" points="366.547,255.222 365.109,253.206 364.822,252.342 364.822,251.333
+ 366.838,251.333 368.131,250.902 374.9,249.03 378.357,247.734 381.094,246.582 382.678,245.718 383.83,244.278 384.547,242.982
+ 384.98,241.254 385.557,239.67 386.422,238.518 387.43,237.942 389.014,236.934 391.893,234.774 394.918,232.47 395.639,231.75
+ 396.934,231.461 401.398,231.461 402.98,232.038 404.131,232.47 404.709,233.19 404.709,234.198 404.131,234.917 403.27,235.782
+ 402.406,236.358 400.533,237.942 399.67,238.806 399.67,239.094 400.533,239.094 401.83,238.085 402.98,237.078 404.709,236.79
+ 405.285,237.078 406.438,238.085 406.869,238.806 407.59,239.381 408.311,240.102 408.74,240.678 408.598,241.254 407.301,242.549
+ 405.715,243.99 404.277,245.286 404.277,245.862 406.582,244.278 408.453,242.982 410.324,241.686 411.908,240.39 412.342,239.814
+ 413.35,238.95 414.213,238.518 414.646,238.085 414.934,237.942 416.518,237.942 417.814,238.23 418.102,238.95 417.814,240.246
+ 417.525,241.11 417.238,242.549 417.094,243.846 417.525,245.574 418.102,246.582 418.102,248.022 417.67,248.598 416.373,249.606
+ 414.646,250.614 413.35,251.333 412.342,252.054 412.055,252.054 411.189,252.342 409.605,252.054 407.301,252.198
+ 406.006,252.198 406.438,252.774 409.174,252.629 410.182,253.206 410.613,254.213 410.182,257.238 409.75,259.542
+ 409.605,260.549 409.029,262.278 409.174,262.998 409.174,263.718 407.59,263.142 406.006,262.134 404.564,261.846
+ 402.262,261.558 399.525,261.558 396.068,261.846 392.613,262.566 388.438,263.142 383.541,264.15 379.941,265.014
+ 375.766,265.877 374.471,265.877 373.75,265.59 372.021,262.998 370.148,259.974 368.998,258.39 366.547,255.222 "/>
+ <polyline id="polyline591" fill="#FFFFFF" points="367.557,82.568 367.99,81.848 368.564,80.984 369.285,80.118 371.156,80.264
+ 372.166,80.838 373.174,81.272 374.324,81.127 375.479,80.694 376.629,81.127 377.061,81.848 377.205,83.286 376.629,84.87
+ 375.908,86.454 374.9,87.75 374.182,88.184 372.883,88.184 371.59,87.318 371.014,87.03 370.006,86.024 368.854,85.016
+ 367.701,83.574 367.701,83.286 367.557,82.568 "/>
+ <polyline id="polyline593" fill="#FFFFFF" points="367.846,141.461 367.846,140.454 368.564,140.166 371.445,139.877
+ 373.029,141.03 373.174,142.902 372.166,144.056 368.998,143.768 367.846,142.902 367.846,141.461 "/>
+ <polyline id="polyline595" fill="#FFFFFF" points="367.99,160.326 367.99,159.461 369.572,157.59 372.021,156.006 375.334,156.006
+ 376.629,157.016 377.205,157.877 378.213,159.03 378.213,160.326 377.639,160.758 375.766,161.333 373.893,161.768
+ 372.453,162.342 371.156,162.776 370.006,162.629 367.99,161.768 367.99,160.326 "/>
+ <polyline id="polyline597" fill="#FFFFFF" points="368.131,100.856 368.277,99.846 369.285,98.549 370.582,97.254 372.883,97.254
+ 373.461,97.976 373.318,99.702 372.453,101.144 370.438,103.014 368.998,103.014 368.131,102.006 368.131,100.856 "/>
+ <polyline id="polyline599" fill="#FFFFFF" points="369.43,167.526 370.293,166.662 370.869,165.224 371.877,164.648
+ 373.75,164.213 375.621,164.213 376.629,165.224 377.639,166.085 378.068,166.662 378.213,168.104 376.629,169.542
+ 374.758,171.414 374.182,171.846 373.75,171.846 372.311,171.414 371.301,170.549 370.438,169.974 369.572,168.965 369.43,167.526
+ "/>
+ <polyline id="polyline601" fill="#FFFFFF" points="370.006,352.71 370.582,351.558 375.189,346.95 376.773,345.655
+ 377.926,345.222 379.365,346.374 379.941,347.237 380.518,348.966 381.238,350.55 381.525,350.983 381.379,352.565
+ 380.086,353.718 378.068,354.151 376.342,354.581 373.75,355.159 371.156,354.87 370.148,353.431 370.006,352.71 "/>
+ <polyline id="polyline603" fill="#FFFFFF" points="370.148,376.759 371.014,375.897 372.311,375.897 372.883,376.183
+ 375.334,376.323 376.197,375.897 378.357,375.897 379.51,376.901 380.086,378.058 380.518,379.351 380.949,380.647
+ 380.949,381.942 380.086,382.95 378.789,384.534 377.494,385.827 374.037,385.827 373.029,384.819 372.021,382.519
+ 371.445,381.077 371.014,379.206 370.148,377.622 370.148,376.759 "/>
+ <polyline id="polyline605" fill="#FFFFFF" points="372.453,103.592 374.037,102.15 374.9,101.72 376.773,101.574 378.213,103.014
+ 378.213,105.03 377.781,105.896 376.773,106.76 375.766,107.045 374.9,106.902 373.318,106.038 372.453,105.03 372.453,103.592
+ "/>
+ <polyline id="polyline607" fill="#FFFFFF" points="372.74,148.085 373.174,147.078 373.75,145.494 374.9,145.064 375.766,145.064
+ 377.639,146.936 378.213,147.942 378.068,149.816 377.205,150.678 374.758,150.678 373.318,149.669 372.74,149.238 372.74,148.085
+ "/>
+ <polyline id="polyline609" fill="#FFFFFF" points="373.605,267.461 379.223,266.31 383.686,265.302 390.311,264.006
+ 390.883,264.006 394.486,263.142 399.814,262.854 403.127,263.286 404.998,264.293 406.148,265.877 405.861,267.174
+ 405.572,268.038 405.43,268.902 404.422,269.622 403.27,270.198 401.83,270.342 402.117,271.638 401.973,272.646 401.686,273.654
+ 401.83,274.662 401.686,275.238 401.254,275.669 399.094,275.669 396.213,275.814 394.629,276.102 397.795,276.102
+ 400.389,276.534 402.262,276.965 402.262,279.702 401.686,281.574 401.254,282.293 399.525,282.726 397.51,283.014
+ 394.486,283.158 392.037,283.014 389.014,282.87 387.861,283.158 390.021,283.59 392.471,283.877 394.918,284.454 395.061,286.182
+ 393.479,290.358 393.334,292.085 392.613,293.381 391.605,294.102 390.311,293.814 387.572,293.526 390.598,294.246
+ 392.037,295.542 393.766,296.262 395.061,296.837 395.781,297.125 395.061,298.566 393.908,299.718 392.613,301.59 390.74,302.31
+ 385.701,302.742 378.789,303.174 373.461,303.894 369.861,303.174 365.83,301.59 363.094,299.862 360.934,298.134 361.074,297.125
+ 362.373,295.686 364.822,292.374 366.98,288.629 369.141,284.598 370.582,280.421 371.59,275.094 372.598,270.342 373.029,268.182
+ 373.174,267.606 373.605,267.461 "/>
+ <polyline id="polyline611" fill="#FFFFFF" points="373.75,191.717 374.471,191.286 375.334,190.854 378.502,190.854
+ 379.654,192.006 380.086,193.158 380.373,195.461 379.795,198.198 377.926,199.064 376.629,199.35 375.045,199.782
+ 374.471,199.926 373.893,198.776 373.893,196.182 373.75,192.438 373.75,191.717 "/>
+ <polyline id="polyline613" fill="#FFFFFF" points="373.893,362.358 374.613,360.917 375.189,359.909 375.766,358.472
+ 376.197,356.886 377.205,356.022 378.646,355.733 381.814,355.733 382.389,356.312 382.533,360.63 382.102,361.351
+ 381.525,364.229 381.525,367.544 380.949,368.983 380.518,369.413 379.654,370.421 378.789,370.421 377.35,369.562
+ 376.486,367.687 375.334,366.103 374.037,364.229 373.605,363.222 373.893,362.358 "/>
+ <polyline id="polyline615" fill="#FFFFFF" points="373.893,305.766 374.613,305.622 377.494,305.19 384.98,304.182
+ 392.324,303.606 397.654,298.421 400.678,294.534 402.406,293.238 403.127,293.094 402.838,296.406 402.693,298.998
+ 404.709,303.03 406.006,305.91 405.43,301.877 403.414,299.574 403.701,296.549 403.846,292.374 404.709,290.646 406.438,288.486
+ 406.725,287.478 408.74,286.326 410.613,286.614 411.766,288.054 413.781,289.638 415.076,291.51 416.373,294.965 416.662,295.686
+ 417.238,296.406 417.094,296.118 417.094,295.11 416.518,293.814 416.373,292.662 415.941,291.366 415.223,290.501
+ 414.357,289.638 414.068,288.774 413.494,288.054 412.629,286.758 412.342,286.038 412.197,285.03 412.629,283.877
+ 413.061,283.014 413.781,282.293 415.076,281.862 416.518,281.142 417.094,280.566 418.389,280.134 420.406,279.99
+ 420.262,279.846 421.414,279.702 422.277,279.846 422.998,280.421 424.725,282.438 423.861,280.854 423.715,280.421
+ 423.43,279.125 422.998,278.262 422.854,277.398 422.277,276.246 420.98,275.526 420.262,275.094 420.547,274.23 421.127,272.358
+ 421.846,270.629 422.564,269.045 423.43,267.894 424.148,266.742 425.156,265.59 426.883,264.293 427.893,264.006 428.758,263.862
+ 428.9,265.014 429.045,265.877 429.479,267.174 429.479,268.182 429.045,269.478 429.189,270.774 430.055,272.358 431.061,273.654
+ 431.061,272.934 430.197,271.494 429.479,270.054 429.908,268.614 430.486,267.75 430.629,267.606 432.357,268.614 433.795,269.19
+ 436.533,269.333 438.262,269.333 439.127,269.91 439.557,271.926 440.131,273.942 441.141,277.686 441.715,279.414
+ 442.148,281.862 443.59,287.19 443.301,282.582 441.861,277.542 440.564,273.078 439.846,269.622 439.701,268.614 439.701,268.182
+ 439.557,267.461 439.414,266.166 439.99,265.158 440.998,263.718 443.156,263.43 444.311,263.718 445.605,265.014 446.758,266.022
+ 447.766,267.461 448.342,268.614 450.789,271.35 450.068,270.054 448.918,267.894 446.758,264.87 444.311,262.134 443.877,260.549
+ 444.311,259.253 445.174,257.814 446.613,256.806 447.908,256.518 449.781,256.662 451.795,257.238 454.102,257.669
+ 457.414,257.814 454.102,257.094 450.357,256.23 450.502,256.085 452.23,253.782 453.525,250.758 452.949,248.454 452.086,246.87
+ 451.076,246.293 450.357,245.286 450.357,243.702 450.789,242.982 451.654,242.406 453.238,241.974 454.963,242.549 457.99,246.15
+ 455.398,241.83 456.117,240.965 457.701,239.381 458.998,239.094 459.861,238.95 460.293,239.526 461.877,240.822 461.156,238.806
+ 462.021,237.797 462.74,237.078 464.613,236.646 465.766,236.501 466.629,237.222 468.068,237.366 468.068,236.501
+ 471.238,236.934 473.973,238.085 476.564,239.814 477.285,241.11 477.43,243.414 476.277,245.142 473.973,246.006 471.67,246.87
+ 469.654,248.31 467.926,250.038 465.908,252.486 464.9,255.078 464.037,258.678 464.037,261.27 464.758,264.006 466.486,267.174
+ 466.918,269.045 467.35,273.51 466.629,275.094 465.334,277.253 463.75,279.27 462.311,281.286 462.311,282.726 463.75,283.877
+ 465.045,284.742 467.35,285.174 469.941,285.606 471.379,286.614 472.533,289.206 473.109,291.51 474.406,293.238 475.846,294.102
+ 477.861,293.958 479.014,294.965 479.303,296.982 479.014,300.293 479.303,301.302 480.883,303.461 483.045,306.198
+ 483.766,308.213 483.908,312.534 483.479,315.27 482.324,317.718 481.318,319.733 479.877,321.606 478.725,322.327
+ 478.006,322.038 476.131,321.894 474.547,321.894 472.678,322.327 471.67,323.622 470.373,324.774 469.51,325.927 467.639,324.774
+ 465.621,323.335 464.758,322.759 465.189,321.175 465.479,319.304 466.197,317.718 466.197,316.997 465.479,316.854 464.9,318.581
+ 464.037,319.878 463.174,321.319 462.453,321.894 460.582,320.741 458.564,319.015 456.262,318.149 455.973,315.99
+ 455.541,314.982 455.109,313.398 454.389,311.814 454.533,310.085 454.822,308.646 455.973,306.917 456.406,305.19 456.98,304.47
+ 459.141,303.318 459.861,302.166 457.414,303.461 456.262,303.75 455.109,302.886 454.389,302.022 453.525,301.014
+ 452.518,298.998 451.795,298.134 450.502,296.406 450.789,297.558 451.654,298.278 452.23,299.718 453.238,301.014 453.67,302.31
+ 454.822,303.174 455.398,304.326 455.398,305.478 455.109,306.629 454.533,307.638 453.525,308.646 453.238,309.51
+ 453.238,310.518 453.67,312.534 453.67,312.965 454.389,313.974 454.389,315.558 454.246,316.421 453.67,316.997 452.373,316.997
+ 451.223,316.566 449.926,315.99 448.197,315.558 446.182,315.27 444.883,314.262 443.156,313.686 442.006,313.83 440.131,314.406
+ 438.117,314.406 436.678,314.262 437.109,313.253 438.838,311.526 438.838,311.238 437.83,311.526 436.678,313.253
+ 435.525,314.694 433.795,315.558 431.061,316.566 432.646,316.566 434.518,315.846 435.957,314.837 436.822,314.694
+ 438.117,314.837 439.127,314.837 441.141,314.694 442.725,314.262 443.445,314.262 444.74,314.694 445.75,315.414 444.883,315.702
+ 444.74,315.99 443.732,317.431 443.445,317.862 444.74,317.142 445.75,316.566 446.182,316.421 447.334,316.134 448.773,316.566
+ 449.639,316.997 451.076,317.142 452.662,318.149 452.949,318.438 454.102,319.159 456.262,320.454 458.564,321.749
+ 460.006,323.335 460.148,324.054 459.572,325.062 458.854,325.64 458.998,326.935 458.709,328.229 457.701,329.526
+ 456.838,330.966 458.564,329.382 459.572,328.229 460.006,326.935 460.293,325.927 461.877,324.63 462.598,324.917 464.182,325.64
+ 466.918,328.374 468.068,329.237 468.646,330.245 468.213,330.679 467.205,331.831 466.197,332.694 465.621,333.271
+ 465.479,334.136 465.479,336.151 466.342,338.312 466.773,339.175 466.918,340.901 466.773,342.487 466.342,343.062
+ 465.908,343.495 465.766,344.214 465.766,344.79 465.045,345.077 464.037,345.366 462.598,345.077 461.445,344.214
+ 460.725,343.495 460.006,343.495 459.141,343.782 458.564,344.647 457.99,345.222 457.414,345.798 456.547,346.519
+ 456.117,346.808 454.822,346.663 454.389,345.655 453.957,344.647 453.379,343.782 452.373,343.062 451.51,342.054
+ 450.789,341.479 450.357,341.19 449.926,340.759 449.781,340.038 449.781,338.886 448.918,336.294 448.773,334.999 449.35,333.991
+ 448.773,332.839 448.629,331.542 448.486,330.39 447.766,330.245 448.197,331.687 448.342,333.126 448.486,334.421
+ 448.629,336.007 448.629,336.151 448.342,337.591 447.908,338.599 447.334,338.741 446.182,338.454 445.461,337.733
+ 444.311,336.726 443.301,336.438 441.861,336.151 442.148,337.591 442.293,338.312 443.732,339.319 443.732,341.19 443.59,342.198
+ 443.301,342.63 443.156,342.917 442.293,344.214 442.006,345.366 442.006,346.085 441.861,346.95 441.715,347.958 441.861,348.966
+ 443.014,350.118 443.014,351.271 442.869,351.847 442.438,352.278 441.43,352.999 440.709,353.286 439.414,353.718
+ 438.547,353.286 438.406,352.421 438.406,352.136 438.98,350.694 438.98,348.245 438.547,347.382 438.117,349.11 437.973,350.983
+ 437.686,352.999 436.246,354.581 435.814,356.312 434.949,357.894 433.941,359.622 433.365,360.774 433.223,362.358
+ 433.365,363.942 432.789,366.534 431.926,366.966 431.061,366.39 430.197,364.95 428.758,363.655 428.037,362.647 427.605,362.069
+ 428.037,364.229 428.613,364.95 429.334,365.671 430.342,366.245 431.494,367.397 432.646,368.405 433.365,369.847
+ 433.941,370.421 434.518,371.144 434.373,371.722 434.23,372.581 433.223,373.015 430.918,372.729 428.758,372.581
+ 427.029,372.296 425.301,372.729 424.725,374.167 423.572,375.319 422.854,376.472 422.277,377.479 422.854,378.917
+ 421.557,377.767 420.838,377.622 419.109,377.479 419.83,377.767 421.414,378.487 422.277,379.065 423.861,380.069 424.582,380.79
+ 426.021,381.942 426.598,382.663 426.598,383.958 426.166,384.534 425.877,385.11 425.59,385.542 425.014,385.827 423.861,385.827
+ 423.141,385.542 421.99,385.397 420.117,385.397 419.541,385.827 419.109,386.405 418.102,387.271 417.238,387.271
+ 416.662,386.839 416.662,384.966 416.086,383.958 415.795,383.095 415.223,381.942 414.789,380.935 414.646,378.63
+ 414.646,377.767 415.223,377.19 416.23,377.19 418.246,377.622 418.102,377.331 416.807,376.612 414.789,376.472 413.639,376.759
+ 412.773,376.323 411.766,375.749 411.766,373.88 411.621,373.733 411.621,372.438 411.334,371.144 411.766,369.987
+ 413.061,370.136 414.934,370.136 414.934,369.987 412.055,368.694 411.045,368.405 410.613,367.976 410.613,367.687
+ 409.461,366.39 409.461,365.671 410.037,365.095 410.9,363.942 411.908,362.214 411.908,361.782 411.766,361.065 411.908,360.343
+ 412.055,358.472 412.486,357.749 413.061,357.03 415.076,355.591 417.094,354.294 418.822,353.286 420.98,352.565 422.422,352.136
+ 424.006,351.126 424.869,350.118 425.301,349.11 425.59,347.958 425.301,347.815 425.156,348.966 424.582,349.687 423.572,350.839
+ 422.422,351.413 421.127,351.847 419.686,352.136 418.389,352.999 416.662,353.431 415.365,354.151 414.502,354.581
+ 413.781,354.726 413.061,354.87 412.486,354.438 411.621,352.999 411.479,351.413 411.479,349.831 411.045,348.534
+ 410.613,347.526 410.471,346.663 409.893,345.511 409.318,345.077 408.74,344.647 409.029,345.511 409.605,346.519 409.75,347.671
+ 409.893,348.823 410.182,349.831 409.893,350.55 408.74,350.263 408.021,350.118 406.869,350.118 406.006,349.831 405.572,349.831
+ 406.869,350.839 409.174,351.126 409.893,351.702 410.471,352.565 410.613,352.854 410.9,353.573 410.9,354.726 410.613,356.022
+ 410.613,357.319 410.758,358.472 410.758,359.909 410.324,360.63 409.893,361.351 409.029,362.79 407.732,364.229 406.438,363.942
+ 405.572,363.077 404.564,363.077 404.854,363.655 405.572,364.376 406.438,364.808 406.438,365.237 406.293,366.534
+ 405.572,367.687 404.564,369.413 402.406,370.999 398.518,371.144 395.494,371.144 393.334,371.573 392.613,370.569 392.9,370.278
+ 393.189,369.126 393.334,368.405 393.621,367.253 393.766,366.819 392.613,367.687 391.318,368.983 391.029,369.987
+ 390.598,371.431 389.732,372.438 386.422,372.438 385.414,371.431 384.838,370.999 384.693,369.847 383.541,368.983
+ 383.398,368.118 383.541,367.253 383.398,365.815 383.398,364.808 384.98,360.774 385.701,359.767 386.998,359.909
+ 388.725,359.767 389.156,360.343 389.59,361.64 389.156,363.222 390.021,361.351 390.453,360.054 390.021,358.759 390.311,358.614
+ 390.883,358.183 391.029,358.038 393.045,357.894 394.486,357.749 392.471,357.03 391.893,356.741 392.324,355.591
+ 392.324,355.733 392.613,354.87 393.045,354.438 393.621,353.718 393.766,353.286 394.486,352.71 394.342,352.278 394.629,350.983
+ 395.061,349.687 395.494,349.11 396.646,348.534 396.934,348.39 397.795,347.958 398.518,347.237 398.807,346.808 399.094,346.519
+ 398.23,346.808 396.934,347.382 396.646,348.534 396.068,347.958 395.494,347.815 394.486,347.526 394.055,346.229
+ 393.621,343.782 392.324,341.909 392.758,341.19 394.342,339.175 393.621,339.749 391.75,341.19 389.877,341.046 387.861,340.614
+ 387.43,340.038 387.285,337.015 386.709,334.854 386.564,332.55 387.572,331.831 389.301,330.39 390.453,328.808 389.445,329.526
+ 387.572,330.966 386.131,331.687 384.838,330.679 382.678,328.663 379.654,326.358 377.35,324.487 374.613,322.614
+ 372.453,321.606 372.453,321.03 373.318,319.446 374.182,316.997 374.758,314.262 374.758,311.814 374.471,308.79 374.037,306.486
+ 373.893,305.766 "/>
+ <polyline id="polyline617" fill="#FFFFFF" points="374.324,71.333 375.045,70.76 375.479,70.472 378.646,70.472 379.076,71.047
+ 379.223,71.91 378.213,73.782 377.205,74.79 374.9,74.79 374.182,73.64 374.324,72.198 374.324,71.333 "/>
+ <polyline id="polyline619" fill="#FFFFFF" points="375.189,92.213 375.479,90.776 375.766,89.622 376.918,87.608 378.646,87.608
+ 379.654,88.614 379.654,91.206 380.086,93.799 381.094,95.381 382.102,96.392 382.102,98.262 381.525,101.144 380.949,101.574
+ 379.076,101.72 377.205,99.702 375.908,97.83 375.334,96.678 375.189,92.213 "/>
+ <polyline id="polyline621" fill="#FFFFFF" points="376.773,172.854 380.518,169.11 382.963,168.965 384.406,170.406
+ 384.406,173.286 381.957,175.301 379.654,177.174 378.213,177.174 376.629,175.158 376.773,172.854 "/>
+ <polyline id="polyline623" fill="#FFFFFF" points="376.773,77.669 377.205,76.95 377.205,76.808 378.789,75.366 380.086,74.79
+ 381.67,74.79 382.963,75.799 383.398,76.808 383.83,78.104 383.973,79.83 382.822,80.406 381.094,80.838 378.068,80.551
+ 376.773,79.542 376.773,77.669 "/>
+ <polyline id="polyline625" fill="#FFFFFF" points="377.639,213.03 377.781,212.024 377.781,211.734 378.789,210.293
+ 379.51,209.717 380.086,209.717 381.67,210.87 382.533,211.301 384.262,211.877 385.846,212.598 386.422,213.03 386.277,214.182
+ 385.414,215.622 384.547,216.629 384.117,218.07 382.963,218.648 382.246,218.648 380.949,217.638 379.223,215.91 378.213,214.614
+ 377.781,213.894 377.639,213.461 377.639,213.03 "/>
+ <polyline id="polyline627" fill="#FFFFFF" points="377.639,152.694 378.357,152.118 379.076,151.686 380.086,151.686
+ 380.949,152.694 381.957,154.568 383.973,156.582 383.83,157.446 382.102,158.888 380.086,158.888 378.646,157.877
+ 378.068,157.016 377.639,155.43 377.639,152.694 "/>
+ <polyline id="polyline629" fill="#FFFFFF" points="377.926,188.262 378.357,187.542 379.223,186.534 380.23,185.816
+ 381.379,185.958 382.389,186.39 384.406,187.83 384.838,188.406 384.838,189.125 384.406,189.99 383.398,190.998 381.525,190.998
+ 379.223,190.422 378.357,189.702 378.068,188.984 377.926,188.262 "/>
+ <polyline id="polyline631" fill="#FFFFFF" points="377.926,84.44 378.646,83.144 379.223,82.422 380.086,81.702 382.389,81.56
+ 383.83,81.99 384.547,82.278 385.127,83.432 385.846,84.44 385.846,86.312 385.701,86.6 384.98,87.174 383.973,87.608
+ 380.086,87.75 379.076,86.888 378.213,85.877 377.926,84.44 "/>
+ <polyline id="polyline633" fill="#FFFFFF" points="379.076,373.304 380.086,372.438 381.525,370.999 382.533,370.999
+ 382.963,371.431 383.541,372.87 383.973,374.312 383.973,377.19 383.398,378.198 383.109,379.206 382.533,379.206 381.957,378.63
+ 381.525,377.622 381.094,376.323 380.086,375.319 379.654,374.312 379.076,373.88 379.076,373.304 "/>
+ <polyline id="polyline635" fill="#FFFFFF" points="379.076,180.629 380.086,179.766 381.525,178.614 382.389,178.326
+ 383.254,178.326 384.406,178.902 384.406,181.35 383.541,181.926 380.086,181.926 379.076,181.494 379.076,180.629 "/>
+ <polyline id="polyline637" fill="#FFFFFF" points="379.076,163.206 380.086,162.342 381.957,161.91 385.27,161.91 385.846,162.486
+ 385.846,166.085 384.838,167.094 382.389,167.094 381.094,166.662 380.086,165.654 379.51,164.213 379.076,163.64 379.076,163.206
+ "/>
+ <polyline id="polyline639" fill="#FFFFFF" points="379.223,107.48 379.654,106.614 380.518,105.03 381.525,104.166
+ 382.678,103.592 384.838,104.024 385.846,105.03 386.277,105.608 386.277,105.896 385.99,106.76 384.838,107.91 384.262,108.917
+ 380.23,108.917 379.076,108.342 379.223,107.48 "/>
+ <polyline id="polyline641" fill="#FFFFFF" points="379.654,202.232 379.941,201.51 380.373,200.79 382.678,200.79 384.262,201.942
+ 386.131,204.534 387.572,207.558 388.148,208.998 388.148,209.717 384.98,209.862 383.541,209.142 380.23,208.422 379.365,206.984
+ 379.365,206.262 380.23,204.678 380.086,202.95 379.654,202.232 "/>
+ <polyline id="polyline643" fill="#FFFFFF" points="381.525,196.902 381.67,196.182 382.246,195.318 382.963,194.024
+ 383.973,193.014 385.414,193.014 386.277,193.59 387.285,194.598 387.285,195.318 385.846,196.758 384.406,197.766
+ 383.398,198.342 382.246,198.342 381.67,197.622 381.525,196.902 "/>
+ <polyline id="polyline645" fill="#FFFFFF" points="381.957,90.917 382.678,90.198 383.109,89.768 384.406,89.622 385.27,90.198
+ 386.277,90.486 387.715,91.064 389.301,92.648 389.156,93.942 387.861,94.95 383.109,94.95 381.957,93.942 381.957,90.917 "/>
+ <polyline id="polyline647" fill="#FFFFFF" points="382.246,348.823 381.379,348.245 380.23,346.374 379.941,345.222
+ 378.789,342.917 378.934,340.901 380.518,339.175 382.533,338.312 383.973,337.446 386.131,337.304 386.854,339.175
+ 386.854,341.767 385.414,344.069 384.406,345.942 383.973,347.526 382.822,348.823 382.246,348.823 "/>
+ <polyline id="polyline649" fill="#FFFFFF" points="383.541,99.99 383.973,98.694 385.414,96.822 387.861,96.392 390.166,96.392
+ 390.453,97.4 389.732,99.846 389.156,101.144 388.293,103.014 387.572,103.592 386.998,103.592 385.701,103.014 383.973,102.15
+ 383.541,101.574 383.541,99.99 "/>
+ <polyline id="polyline651" fill="#FFFFFF" points="384.838,200.934 385.557,200.213 386.277,199.35 387.43,198.776
+ 390.598,198.776 392.471,200.79 393.045,201.797 393.045,202.518 392.613,203.526 392.037,204.534 390.74,205.974 389.877,205.974
+ 388.293,204.965 387.141,203.381 386.564,203.094 385.414,202.085 385.127,201.51 384.838,200.934 "/>
+ <polyline id="polyline653" fill="#FFFFFF" points="384.98,376.183 385.846,375.319 388.725,374.89 391.174,374.312
+ 392.613,374.312 393.621,375.319 393.908,378.198 394.055,380.647 393.479,381.511 393.908,382.085 394.055,383.958
+ 393.479,385.397 392.613,385.976 392.182,385.976 391.029,384.966 390.166,384.39 389.732,383.526 388.725,383.095
+ 386.422,381.077 385.846,380.069 385.414,379.64 384.838,376.759 384.98,376.183 "/>
+ <polyline id="polyline655" fill="#FFFFFF" points="385.27,176.454 385.701,176.024 385.99,175.734 387.43,175.301 391.029,175.301
+ 392.471,176.31 392.471,177.608 391.461,178.902 386.277,179.192 385.27,178.47 384.838,177.608 384.838,177.461 385.27,176.454
+ "/>
+ <polyline id="polyline657" fill="#FFFFFF" points="385.414,109.494 386.854,108.056 389.301,108.056 390.166,109.064
+ 390.166,112.662 389.732,113.238 388.293,113.238 387.861,112.662 386.998,112.232 385.414,110.79 385.414,109.494 "/>
+ <polyline id="polyline659" fill="#FFFFFF" points="386.564,345.942 386.998,343.062 388.148,342.343 389.014,341.622
+ 390.883,341.767 392.037,343.206 393.189,345.222 393.766,347.815 393.908,350.118 392.758,351.558 391.318,351.991
+ 389.59,351.702 387.43,349.687 386.422,348.679 386.564,345.942 "/>
+ <polyline id="polyline661" fill="#FFFFFF" points="386.709,168.678 388.148,166.232 390.166,166.085 391.029,167.526
+ 391.029,169.83 390.598,171.846 389.59,172.422 387.285,172.422 386.709,170.549 386.709,168.678 "/>
+ <polyline id="polyline663" fill="#FFFFFF" points="390.598,354.438 390.598,355.159 389.301,356.599 388.006,357.462
+ 386.854,357.894 385.557,357.894 384.406,356.022 383.541,352.565 383.686,351.702 384.547,350.405 385.557,349.831
+ 386.564,349.976 386.709,350.839 387.861,352.421 389.156,353.431 390.311,353.862 390.598,354.438 "/>
+ <polyline id="polyline665" fill="#FFFFFF" points="390.74,103.158 391.461,102.728 393.189,102.582 394.197,103.158
+ 394.486,104.454 394.486,106.472 393.045,107.48 391.605,107.333 390.598,106.326 390.74,104.024 390.74,103.158 "/>
+ <polyline id="polyline667" fill="#FFFFFF" points="391.318,220.374 390.021,218.934 389.014,218.358 389.014,216.342
+ 389.156,214.182 390.166,211.734 391.893,210.293 393.189,209.286 395.494,209.286 396.502,210.438 398.373,211.014
+ 399.67,211.301 399.094,212.454 397.941,214.326 396.646,215.622 394.773,217.638 393.189,219.222 391.318,220.374 "/>
+ <polyline id="polyline669" fill="#FFFFFF" points="391.605,391.015 392.182,390.007 392.758,388.136 394.629,386.118
+ 396.068,384.819 397.365,384.245 399.957,383.815 401.254,383.386 402.262,382.808 406.006,382.808 406.582,383.386
+ 407.014,384.245 407.445,386.263 407.445,387.126 407.014,387.562 404.998,388.136 403.701,388.136 400.678,391.015
+ 399.379,391.015 398.086,391.444 397.365,392.022 396.357,393.319 395.639,393.897 393.621,394.038 392.613,393.606
+ 391.605,392.454 391.605,391.015 "/>
+ <polyline id="polyline671" fill="#FFFFFF" points="392.471,111.366 393.189,110.358 395.061,108.486 396.068,107.768
+ 396.646,107.768 398.373,109.352 398.807,111.078 398.23,112.232 396.934,112.662 395.35,113.094 395.061,113.669 393.908,114.104
+ 393.189,114.246 392.471,113.238 392.471,111.366 "/>
+ <polyline id="polyline673" fill="#FFFFFF" points="392.613,168.965 393.045,168.678 395.781,168.534 397.654,169.974
+ 398.807,171.414 398.807,173.862 397.365,174.726 393.479,174.726 392.613,173.862 392.613,168.965 "/>
+ <polyline id="polyline675" fill="#FFFFFF" points="394.197,292.23 395.35,289.638 396.213,287.478 397.223,285.75 398.086,284.886
+ 399.525,284.598 401.973,284.598 403.27,285.894 404.564,287.333 404.564,288.486 403.127,290.358 401.109,292.23 399.379,294.102
+ 398.23,295.398 395.639,295.398 394.197,294.39 394.197,292.23 "/>
+ <polyline id="polyline677" fill="#FFFFFF" points="394.486,376.183 395.061,374.89 396.068,373.88 396.934,373.444
+ 402.262,373.444 403.557,374.89 404.564,376.323 405.141,377.767 405.141,380.647 402.262,380.499 401.254,381.511
+ 400.246,381.942 398.949,382.519 396.934,382.95 396.068,382.95 395.639,382.519 395.061,381.511 394.629,380.499 394.486,376.183
+ "/>
+ <polyline id="polyline679" fill="#FFFFFF" points="394.486,206.984 396.068,205.11 396.934,204.678 398.373,204.678
+ 398.807,205.542 398.949,208.998 398.949,209.286 396.934,208.854 394.486,208.278 394.486,206.984 "/>
+ <polyline id="polyline681" fill="#FFFFFF" points="395.926,115.11 396.646,114.534 397.076,114.246 399.379,113.816
+ 400.389,113.816 401.109,114.678 401.254,115.542 400.246,116.984 399.67,117.56 397.941,117.56 396.646,116.549 395.926,115.976
+ 395.926,115.11 "/>
+ <polyline id="polyline683" fill="#FFFFFF" points="396.357,398.358 399.238,398.358 399.814,398.935 399.814,401.237
+ 398.949,401.237 398.373,400.808 396.934,400.808 396.357,400.229 396.357,398.358 "/>
+ <polyline id="polyline685" fill="#FFFFFF" points="396.502,395.046 396.789,394.183 397.076,393.462 398.662,392.022
+ 400.246,392.022 401.83,393.175 402.262,394.183 402.117,396.343 400.678,396.343 400.246,395.909 398.949,395.909
+ 398.373,396.343 397.51,396.343 396.789,395.767 396.646,395.622 396.502,395.046 "/>
+ <polyline id="polyline687" fill="#FFFFFF" points="396.646,348.534 396.934,347.382 398.23,346.808 399.094,346.519
+ 398.807,346.808 398.518,347.237 397.795,347.958 396.934,348.39 396.646,348.534 "/>
+ <polyline id="polyline689" fill="#FFFFFF" points="401.254,205.542 402.693,204.678 406.006,204.678 407.156,205.11
+ 407.59,206.118 407.445,208.422 407.014,208.998 407.445,209.862 407.445,210.726 407.014,211.877 405.715,212.598 403.27,212.885
+ 401.398,212.454 400.246,211.301 400.389,208.998 400.822,206.984 401.254,205.542 "/>
+ <polyline id="polyline691" fill="#FFFFFF" points="403.127,276.102 403.27,274.374 403.99,272.79 405.285,271.206 406.438,269.766
+ 408.311,268.038 409.605,267.461 411.189,267.75 411.766,268.614 412.055,270.342 412.629,272.646 412.629,275.958 412.486,279.27
+ 410.9,280.566 409.605,280.709 408.166,279.99 406.438,278.837 404.709,278.118 403.701,276.965 403.127,276.102 "/>
+ <polyline id="polyline693" fill="#FFFFFF" points="403.27,279.99 404.709,278.549 406.725,279.846 408.74,281.574 409.605,282.87
+ 409.318,283.734 406.725,285.894 405.572,286.47 404.564,286.326 403.127,284.886 403.127,282.006 403.27,279.99 "/>
+ <polyline id="polyline695" fill="#FFFFFF" points="404.131,391.015 405.572,389.573 407.877,389.573 408.883,390.581
+ 408.883,395.479 407.877,396.917 405.43,396.917 405.141,395.909 404.564,393.462 404.131,392.599 404.131,391.015 "/>
+ <polyline id="polyline697" fill="#FFFFFF" points="405.572,235.782 406.148,235.062 406.725,234.486 408.598,233.045
+ 410.037,232.038 411.045,231.75 412.342,231.174 414.357,231.03 413.926,232.038 413.926,233.478 414.068,236.07 413.639,237.654
+ 412.342,238.806 410.758,239.814 409.318,239.958 408.311,239.381 407.156,238.518 406.148,237.222 405.861,236.501
+ 405.572,235.782 "/>
+ <polyline id="polyline699" fill="#FFFFFF" points="407.301,370.854 407.59,369.562 408.74,368.694 408.883,368.118
+ 409.318,368.118 409.893,368.405 410.471,369.126 410.471,373.015 410.324,374.89 410.182,376.038 409.893,377.046
+ 409.605,377.622 408.598,377.622 407.59,377.046 407.014,375.03 407.014,373.015 407.301,371.431 407.301,370.854 "/>
+ <polyline id="polyline701" fill="#FFFFFF" points="407.59,221.094 405.572,221.381 403.414,222.534 400.678,223.83 398.662,225.27
+ 396.646,226.998 395.205,225.558 393.045,223.254 392.613,222.102 393.621,220.518 396.068,218.07 398.518,215.48 399.814,213.894
+ 400.678,213.03 402.406,213.75 403.701,213.894 405.572,213.75 407.301,213.03 408.311,212.166 409.461,212.454 410.324,214.038
+ 410.613,215.622 409.461,217.35 408.453,219.222 408.166,220.374 408.311,221.094 407.59,221.094 "/>
+ <polyline id="polyline703" fill="#FFFFFF" points="408.311,222.246 409.174,223.686 410.324,226.998 411.189,228.438
+ 411.479,229.014 408.74,231.03 406.582,232.326 405.285,232.326 403.557,231.03 400.822,230.31 398.518,230.166 398.23,230.166
+ 397.654,228.87 397.223,227.43 399.67,225.702 403.414,223.4 406.438,222.534 408.311,222.246 "/>
+ <polyline id="polyline705" fill="#FFFFFF" points="408.598,379.927 409.174,379.64 409.893,379.206 412.342,379.206
+ 412.629,379.64 413.35,380.499 413.781,380.935 414.502,382.519 415.51,383.958 415.654,385.253 414.789,386.263 410.9,386.263
+ 410.037,385.253 409.461,383.815 409.029,382.374 408.453,380.935 408.453,380.79 408.598,379.927 "/>
+ <polyline id="polyline707" fill="#FFFFFF" points="409.461,220.085 410.324,218.501 411.479,216.486 412.629,215.766
+ 413.494,215.333 415.654,215.333 416.807,216.342 417.379,217.206 417.67,218.934 417.525,219.942 416.662,220.95 416.518,221.381
+ 416.807,222.246 417.814,223.254 417.814,224.838 416.373,226.133 415.654,227.43 414.213,228.293 412.918,228.293
+ 411.479,226.709 410.182,224.838 409.75,223.11 409.461,220.085 "/>
+ <polyline id="polyline709" fill="#FFFFFF" points="409.461,208.998 410.037,208.278 410.324,207.99 411.045,207.558
+ 415.654,207.558 417.238,207.99 417.525,208.568 418.533,209.862 418.533,210.726 417.957,211.734 417.67,212.885 416.086,213.894
+ 411.766,213.75 410.9,212.742 409.75,211.734 409.605,209.717 409.461,208.998 "/>
+ <polyline id="polyline711" fill="#FFFFFF" points="410.9,264.582 410.9,260.982 411.479,258.822 411.479,256.806 411.621,256.085
+ 412.342,255.366 412.629,255.366 414.213,257.238 414.934,258.534 416.086,259.398 416.086,259.974 416.23,260.837
+ 415.223,261.846 413.781,263.862 412.773,265.158 412.197,265.59 411.766,265.59 410.9,264.582 "/>
+ <polyline id="polyline713" fill="#FFFFFF" points="411.334,389.286 411.908,388.71 414.934,388.421 416.662,389.286
+ 416.662,391.591 415.654,392.022 415.223,392.599 412.342,392.599 411.334,391.591 411.334,389.286 "/>
+ <polyline id="polyline715" fill="#FFFFFF" points="413.35,254.358 414.789,252.629 416.949,250.902 418.678,249.318
+ 421.27,249.318 422.277,250.326 423.141,251.622 423.285,252.486 422.131,253.782 420.838,255.366 418.246,257.958 417.094,258.39
+ 415.941,258.39 414.934,257.238 413.639,255.51 413.35,254.358 "/>
+ <polyline id="polyline717" fill="#FFFFFF" points="413.926,274.806 414.502,273.51 416.518,274.374 417.094,274.662
+ 418.533,275.526 419.109,275.669 420.117,276.246 421.127,276.965 421.846,277.974 421.846,278.549 421.414,278.982
+ 420.117,279.27 418.822,279.558 417.238,280.134 416.086,280.278 415.076,280.709 414.213,280.854 413.781,280.421
+ 413.494,279.558 413.781,278.118 414.068,276.102 413.926,274.806 "/>
+ <polyline id="polyline719" fill="#FFFFFF" points="414.502,270.198 414.789,268.758 415.654,267.174 417.238,264.726
+ 418.963,262.709 420.547,260.837 421.414,259.398 422.131,258.534 422.709,258.246 425.014,258.246 426.166,258.965
+ 427.75,260.262 428.471,261.414 427.893,262.854 426.166,264.006 424.438,265.446 423.141,267.174 421.414,269.045 421.127,269.91
+ 420.693,271.35 420.547,272.501 419.541,273.078 418.389,273.366 416.662,273.222 415.654,272.501 414.357,271.494
+ 414.502,270.198 "/>
+ <polyline id="polyline721" fill="#FFFFFF" points="415.223,233.91 415.365,233.333 415.654,232.326 416.807,231.174
+ 419.973,231.461 421.846,232.182 423.285,233.333 423.285,234.486 421.99,234.917 420.547,235.494 418.533,235.926
+ 416.949,236.358 415.654,236.07 415.365,235.206 415.365,234.774 415.223,233.91 "/>
+ <polyline id="polyline723" fill="#FFFFFF" points="417.525,214.758 418.389,213.894 419.541,213.174 420.406,212.742
+ 420.98,212.885 421.846,213.894 421.846,215.622 421.414,216.054 419.973,216.629 417.67,216.629 417.525,214.758 "/>
+ <polyline id="polyline725" fill="#FFFFFF" points="418.533,221.094 418.822,219.942 419.83,218.358 419.973,218.213
+ 422.277,218.213 423.285,218.934 423.861,219.797 423.715,221.381 423.285,222.965 422.131,223.4 419.973,223.542 418.822,222.965
+ 418.389,221.816 418.533,221.094 "/>
+ <polyline id="polyline727" fill="#FFFFFF" points="418.678,226.422 418.822,225.702 418.963,224.694 420.406,224.406
+ 421.846,224.838 423.285,225.846 423.861,226.422 423.861,228.87 423.43,229.301 422.277,229.734 420.547,229.734 419.541,229.301
+ 418.533,228.15 418.678,227.142 418.678,226.422 "/>
+ <polyline id="polyline729" fill="#FFFFFF" points="418.963,240.246 420.406,238.374 422.564,237.51 424.725,237.51
+ 425.301,238.374 425.156,239.67 424.725,240.39 424.725,241.542 425.301,242.262 425.445,243.27 425.59,244.566 426.311,245.718
+ 426.598,247.014 426.598,248.886 425.59,249.894 424.725,250.326 424.006,250.182 422.422,249.318 420.838,248.166 419.109,246.15
+ 418.678,244.421 418.533,242.262 418.963,240.246 "/>
+ <polyline id="polyline731" fill="#FFFFFF" points="419.109,389.722 419.541,388.995 419.541,388.854 420.117,388.278
+ 420.98,387.847 422.854,387.847 423.285,388.854 423.285,389.722 422.998,390.151 422.422,391.155 421.27,392.163 420.117,392.163
+ 419.541,391.591 419.109,390.438 419.109,389.722 "/>
+ <polyline id="polyline733" fill="#FFFFFF" points="423.141,377.622 423.43,376.759 423.715,376.038 424.293,375.319
+ 425.156,374.599 425.732,373.591 426.598,373.015 427.461,373.015 428.9,373.304 430.773,373.155 432.213,373.591 432.646,374.454
+ 433.795,375.462 433.941,376.612 433.654,378.343 433.51,378.63 433.365,379.351 432.934,380.358 432.068,381.077 431.205,381.222
+ 430.197,381.366 428.758,381.511 427.461,381.366 426.311,380.647 425.59,380.069 424.725,379.351 424.006,378.63 423.141,377.622
+ "/>
+ <polyline id="polyline735" fill="#FFFFFF" points="424.582,256.085 425.301,255.366 426.453,254.07 428.758,251.19 430.486,249.75
+ 432.502,249.894 433.365,250.47 433.941,251.19 433.076,253.494 432.934,256.085 431.061,257.381 429.479,258.965 428.182,258.965
+ 427.029,258.678 425.732,258.102 424.293,256.95 424.293,256.806 424.582,256.085 "/>
+ <polyline id="polyline737" fill="#FFFFFF" points="426.021,388.421 426.166,387.562 426.311,386.405 427.174,384.39
+ 428.758,382.95 429.621,382.374 431.061,382.085 431.781,382.374 433.076,382.95 433.076,385.253 432.502,386.263 432.068,387.413
+ 431.494,388.136 430.629,389.722 429.479,390.729 428.758,391.155 427.318,391.015 426.883,390.151 426.311,389.144
+ 426.311,388.995 426.021,388.421 "/>
+ <polyline id="polyline739" fill="#FFFFFF" points="426.74,241.686 427.75,240.822 430.486,240.822 430.918,241.254
+ 431.061,243.125 429.908,245.142 428.9,246.006 428.613,246.006 427.461,244.278 426.74,243.414 426.74,241.686 "/>
+ <polyline id="polyline741" fill="#FFFFFF" points="429.479,260.982 429.766,260.262 429.766,260.118 430.486,258.822
+ 431.926,257.669 433.223,256.95 433.365,257.238 434.949,258.534 435.957,259.83 436.963,261.558 437.254,262.566 437.541,264.438
+ 437.686,265.446 437.83,266.31 437.83,267.75 437.254,268.47 434.373,268.47 433.076,268.182 431.926,267.75 431.061,266.886
+ 429.908,265.734 429.766,263.43 429.479,262.566 429.334,261.702 429.479,260.982 "/>
+ <polyline id="polyline743" fill="#FFFFFF" points="432.357,247.446 432.646,246.438 433.795,245.142 434.662,243.99
+ 435.814,243.125 436.678,243.27 437.686,243.702 438.98,244.566 439.846,245.718 439.701,247.014 438.693,248.598 436.678,249.318
+ 434.949,249.461 433.076,249.318 432.502,248.742 432.357,247.446 "/>
+ <polyline id="polyline745" fill="#FFFFFF" points="433.365,257.238 433.941,255.797 433.654,254.646 433.654,253.494
+ 434.373,251.766 434.807,250.902 436.389,250.326 437.973,250.326 439.127,251.045 439.701,252.486 439.701,253.926
+ 438.117,255.654 436.963,257.381 436.678,258.39 435.094,258.102 434.373,257.238 433.365,257.238 "/>
+ <polyline id="polyline747" fill="#FFFFFF" points="434.086,364.808 434.662,364.229 435.957,362.79 438.98,361.206
+ 442.438,360.917 447.045,361.64 448.629,363.366 450.213,366.103 450.068,368.263 449.061,370.136 446.758,371.431
+ 445.174,373.015 443.732,373.155 441.43,371.722 438.838,371.286 436.389,370.999 435.525,370.278 433.941,367.397
+ 434.086,365.671 434.086,364.808 "/>
+ <polyline id="polyline749" fill="#FFFFFF" points="434.518,379.64 435.238,379.206 436.102,379.206 436.822,379.782
+ 437.83,380.069 439.127,381.077 439.846,382.085 439.701,383.815 438.693,385.397 437.109,385.397 436.246,384.966
+ 434.949,383.958 434.373,381.942 434.518,379.64 "/>
+ <polyline id="polyline751" fill="#FFFFFF" points="435.094,361.065 435.379,359.909 435.525,359.622 436.963,357.319
+ 438.406,355.446 439.99,355.015 442.725,355.015 444.311,354.007 445.461,352.71 446.9,352.421 448.918,352.999 450.213,354.438
+ 450.502,355.591 450.068,357.462 448.918,359.622 447.189,360.487 445.174,360.487 443.156,360.054 440.709,359.909
+ 439.414,359.909 438.117,360.487 436.533,361.206 435.379,361.927 435.094,361.64 435.094,361.065 "/>
+ <polyline id="polyline753" fill="#FFFFFF" points="435.379,375.175 435.379,373.733 436.389,372.87 436.963,372.296
+ 437.541,372.151 439.27,372.007 440.131,372.438 440.709,373.304 440.709,374.89 440.131,375.462 440.131,376.612 439.701,377.622
+ 439.127,378.198 435.957,378.198 435.525,377.331 435.379,375.175 "/>
+ <polyline id="polyline755" fill="#FFFFFF" points="440.564,253.638 442.725,254.934 444.883,256.806 444.311,257.526
+ 443.301,258.965 442.582,260.837 442.725,262.134 442.582,262.709 440.422,262.566 439.27,263.43 438.406,263.718 437.686,261.27
+ 437.541,258.534 437.83,257.094 439.127,255.366 440.564,253.638 "/>
+ <polyline id="polyline757" fill="#FFFFFF" points="441.285,377.331 441.43,376.612 442.148,375.897 442.725,375.175
+ 444.021,375.319 445.029,376.183 445.461,376.759 445.318,379.64 444.74,380.499 444.021,381.511 442.582,381.511 441.141,381.077
+ 441.141,379.065 441.285,377.331 "/>
+ <polyline id="polyline759" fill="#FFFFFF" points="441.285,247.302 441.715,246.293 441.861,246.006 442.725,244.709
+ 443.301,244.133 447.621,244.133 448.773,244.998 449.35,246.15 449.205,246.87 448.055,248.166 445.893,249.174 443.59,248.886
+ 442.293,248.454 441.572,247.734 441.285,247.302 "/>
+ <polyline id="polyline761" fill="#FFFFFF" points="443.301,345.222 443.445,344.647 443.877,343.351 444.883,342.054
+ 445.893,341.19 447.189,341.335 448.197,342.487 449.494,343.351 451.365,345.366 452.373,346.663 452.373,347.671
+ 451.795,350.118 451.51,351.558 449.494,351.413 448.629,351.126 448.055,350.694 445.318,350.55 444.166,350.55 443.732,350.118
+ 443.301,348.245 443.301,345.222 "/>
+ <polyline id="polyline763" fill="#FFFFFF" points="447.045,375.175 447.334,373.733 447.334,373.444 447.908,372.438
+ 448.773,370.999 450.213,370.569 451.076,370.569 452.086,371.431 453.094,372.438 453.525,373.444 453.67,375.897
+ 453.094,377.331 452.662,377.622 451.223,378.058 449.781,377.767 448.773,377.19 447.908,376.759 447.334,376.183
+ 447.045,375.175 "/>
+ <polyline id="polyline765" fill="#FFFFFF" points="449.205,360.774 450.213,359.046 451.795,356.886 452.662,354.151
+ 453.525,352.565 454.246,351.558 455.83,351.991 458.709,355.015 461.014,357.606 461.303,358.472 461.156,360.343
+ 460.006,360.774 454.533,360.917 453.67,362.358 453.094,363.511 451.941,364.376 450.789,363.798 449.639,362.79 449.205,360.774
+ "/>
+ <polyline id="polyline767" fill="#FFFFFF" points="450.789,247.734 451.941,248.454 452.373,249.75 452.086,250.758
+ 451.223,253.494 450.068,254.79 449.061,255.942 446.9,256.085 445.029,254.934 443.877,254.358 442.293,253.638 441.141,252.342
+ 440.998,251.045 441.141,250.038 442.148,249.318 443.59,249.75 446.037,250.326 447.621,249.894 448.918,249.03 449.061,248.742
+ 450.213,247.59 450.789,247.734 "/>
+ <polyline id="polyline769" fill="#FFFFFF" points="451.51,367.253 452.086,365.958 452.949,365.095 453.67,364.229
+ 454.822,363.798 455.109,363.077 456.406,362.79 457.99,362.935 459.715,363.366 461.59,364.085 462.166,364.663 462.166,366.819
+ 461.303,368.118 460.438,369.271 459.715,370.278 459.141,371.144 458.277,372.007 457.414,372.151 454.822,371.431
+ 453.094,370.278 452.518,369.271 451.51,368.263 451.51,367.253 "/>
+ <polyline id="polyline771" fill="#FFFFFF" points="457.414,348.966 458.277,348.103 458.422,346.663 459.285,345.798
+ 460.148,345.366 461.156,345.366 462.311,346.519 466.197,346.95 467.061,348.534 467.35,349.976 467.926,351.991 467.494,353.862
+ 466.486,354.294 466.055,354.726 465.621,355.304 463.318,355.159 461.732,353.862 460.293,352.278 457.99,349.976 457.27,349.397
+ 457.414,348.966 "/>
+ <polyline id="polyline773" fill="#FFFFFF" points="465.621,362.79 466.342,362.647 466.629,362.647 468.068,362.358
+ 469.076,362.647 470.23,363.511 470.949,364.229 470.807,365.095 470.084,366.679 468.646,367.253 466.486,367.11 465.479,365.386
+ 465.621,363.511 465.621,362.79 "/>
+ <polyline id="polyline775" fill="#FFFFFF" points="466.197,358.901 466.197,357.606 468.213,355.591 469.223,355.159
+ 471.525,355.159 473.398,356.599 474.838,357.606 476.277,358.472 476.277,358.614 476.854,359.19 476.854,360.774 475.701,362.79
+ 473.83,362.79 472.822,362.214 470.949,361.206 469.51,360.917 468.213,360.487 467.205,359.909 466.197,358.901 "/>
+ <polyline id="polyline777" fill="#FFFFFF" points="467.205,335.144 467.781,334.278 469.51,332.263 471.525,332.405
+ 472.963,333.702 473.398,334.278 473.83,334.71 474.406,335.144 474.547,336.581 473.973,338.022 473.398,339.175 472.963,339.894
+ 470.807,340.472 469.223,340.472 468.646,339.894 467.639,337.878 467.205,336.581 467.205,335.144 "/>
+ <polyline id="polyline779" fill="#FFFFFF" points="467.781,345.511 468.502,344.214 469.365,343.206 473.109,343.206
+ 473.973,344.503 474.406,346.229 474.838,347.815 475.414,348.39 475.414,349.687 474.98,350.839 474.406,351.702 473.541,352.71
+ 472.533,353.431 471.094,353.286 469.654,352.136 469.223,351.271 468.502,350.263 467.781,347.671 467.35,346.663
+ 467.494,345.798 467.781,345.511 "/>
+ <polyline id="polyline781" fill="#FFFFFF" points="471.525,326.935 471.814,325.495 471.957,325.206 472.389,323.909
+ 473.541,322.901 474.98,322.472 477.43,322.614 478.438,323.479 479.156,324.054 479.732,324.917 479.732,327.222 478.293,328.085
+ 476.709,328.663 476.277,329.095 475.27,329.671 474.693,330.103 473.973,330.245 472.533,329.237 471.957,328.085
+ 471.525,327.511 471.525,326.935 "/>
+ <polyline id="polyline783" fill="#FFFFFF" points="474.693,339.175 475.127,338.312 475.701,337.304 476.709,336.726
+ 478.006,336.726 480.166,337.304 480.883,338.167 481.461,339.749 481.893,342.054 481.893,345.222 481.318,345.942
+ 476.709,345.798 476.131,345.077 475.701,344.358 475.127,343.351 474.693,342.487 474.693,339.175 "/>
+ <polyline id="polyline785" fill="#FFFFFF" points="477.141,348.245 479.445,348.245 481.605,350.405 481.461,352.278
+ 481.461,352.136 479.445,355.015 478.725,355.591 476.998,355.446 475.557,354.581 474.693,353.431 475.27,352.136
+ 476.277,351.126 476.709,350.118 477.141,348.245 "/>
+ <polyline id="polyline787" fill="#FFFFFF" points="480.74,330.245 480.74,333.991 480.166,334.136 478.725,333.413
+ 477.285,332.839 476.422,331.976 476.277,331.11 476.854,330.679 478.293,330.103 479.303,329.671 479.877,329.671 480.74,330.245
+ "/>
+ <polyline id="polyline789" fill="#7FC643" points="-251.498,681.173 -251.498,680.597 -250.923,682.038 -251.498,681.173 "/>
+ <polyline id="polyline791" fill="#7FC643" points="-250.202,445.304 -250.49,445.304 -250.635,446.741 -250.202,445.304 "/>
+ <polyline id="polyline793" fill="#7FC643" points="-246.314,437.671 -247.179,437.815 -247.608,439.253 -246.314,437.671 "/>
+ <polyline id="polyline795" fill="#7FC643" points="-236.954,419.815 -236.954,419.237 -238.395,419.386 -236.954,419.815 "/>
+ <polyline id="polyline797" fill="#7FC643" points="-234.362,-42.712 -234.362,-44.728 -235.803,-45.304 -237.242,-45.16
+ -237.387,-43.72 -235.946,-43 -234.362,-42.712 "/>
+ <polyline id="polyline799" fill="#7FC643" points="-230.618,-39.112 -230.042,-39.4 -229.467,-40.84 -230.187,-42.28
+ -231.771,-42.424 -233.211,-43.432 -233.064,-41.992 -232.057,-40.552 -230.618,-39.112 "/>
+ <polyline id="polyline801" fill="#7FC643" points="-231.626,-35.081 -232.057,-30.762 -230.473,-29.466 -229.898,-31.05
+ -230.187,-32.488 -230.042,-33.93 -229.467,-35.369 -229.898,-36.808 -230.906,-38.392 -232.347,-39.4 -232.923,-37.816
+ -231.914,-36.376 -231.626,-35.081 "/>
+ <polyline id="polyline803" fill="#7FC643" points="-231.192,422.983 -229.608,422.694 -230.473,421.827 -231.914,421.397
+ -231.192,422.983 "/>
+ <polyline id="polyline805" fill="#7FC643" points="-228.746,639.126 -230.042,638.118 -231.48,637.542 -231.771,638.981
+ -230.33,639.558 -228.746,639.126 "/>
+ <polyline id="polyline807" fill="#7FC643" points="-228.601,-38.682 -228.601,-39.688 -230.042,-38.392 -228.601,-38.682 "/>
+ <polyline id="polyline809" fill="#7FC643" points="-227.307,602.692 -228.746,602.403 -229.467,603.847 -228.024,604.421
+ -227.307,602.692 "/>
+ <polyline id="polyline811" fill="#7FC643" points="-227.595,-36.808 -226.874,-37.528 -226.73,-38.97 -228.171,-38.682
+ -229.034,-37.24 -227.595,-36.808 "/>
+ <polyline id="polyline813" fill="#7FC643" points="-227.595,-39.4 -227.162,-39.833 -227.45,-41.272 -228.889,-40.84
+ -227.595,-39.4 "/>
+ <polyline id="polyline815" fill="#7FC643" points="-226.44,597.079 -227.45,595.638 -227.45,597.222 -226.587,598.663
+ -226.44,597.079 "/>
+ <polyline id="polyline817" fill="#7FC643" points="-224.282,595.782 -224.427,597.366 -225.29,595.782 -224.57,598.95
+ -223.994,597.366 -224.282,595.782 "/>
+ <polyline id="polyline819" fill="#7FC643" points="-218.666,-35.369 -219.242,-36.52 -220.826,-37.96 -222.265,-38.824
+ -223.706,-39.256 -223.131,-37.816 -220.25,-35.944 -218.666,-35.369 "/>
+ <polyline id="polyline821" fill="#7FC643" points="-221.259,-40.696 -220.395,-41.128 -221.4,-42.568 -222.843,-41.992
+ -221.259,-40.696 "/>
+ <polyline id="polyline823" fill="#7FC643" points="-218.379,594.772 -218.379,593.333 -219.816,593.046 -222.843,593.765
+ -222.41,595.349 -222.41,596.79 -220.971,596.067 -220.681,594.63 -219.097,595.206 -218.379,594.772 "/>
+ <polyline id="polyline825" fill="#7FC643" points="-219.675,-33.496 -220.25,-35.656 -221.834,-36.376 -220.971,-34.936
+ -219.675,-33.496 "/>
+ <polyline id="polyline827" fill="#7FC643" points="-219.387,-38.104 -219.963,-40.696 -221.547,-40.266 -220.971,-38.824
+ -219.387,-38.104 "/>
+ <polyline id="polyline829" fill="#7FC643" points="-216.938,-35.656 -218.091,-37.098 -219.53,-37.816 -218.379,-36.232
+ -216.938,-35.656 "/>
+ <polyline id="polyline831" fill="#7FC643" points="-216.795,-41.128 -217.515,-39.688 -216.074,-38.537 -214.923,-37.098
+ -216.362,-38.104 -217.803,-39.544 -219.387,-39.112 -217.082,-36.232 -215.641,-34.936 -212.618,-33.93 -211.179,-34.648
+ -209.738,-34.792 -208.299,-35.656 -210.458,-38.682 -210.889,-40.121 -212.33,-40.266 -212.618,-38.824 -212.473,-37.386
+ -213.051,-39.833 -213.914,-41.272 -215.498,-41.417 -216.795,-41.128 "/>
+ <polyline id="polyline833" fill="#7FC643" points="-216.219,515.862 -216.074,514.854 -219.097,515.862 -217.658,516.438
+ -216.219,515.862 "/>
+ <polyline id="polyline835" fill="#7FC643" points="-212.763,-42.136 -212.763,-42.712 -215.786,-43.72 -217.225,-43.576
+ -218.666,-43 -217.225,-41.705 -212.763,-42.136 "/>
+ <polyline id="polyline837" fill="#7FC643" points="-212.33,434.499 -212.618,433.065 -213.339,431.622 -213.626,433.065
+ -212.33,434.499 "/>
+ <polyline id="polyline839" fill="#7FC643" points="-211.179,587.862 -212.042,586.997 -213.48,587.142 -212.473,588.726
+ -212.618,587.286 -211.179,587.862 "/>
+ <polyline id="polyline841" fill="#7FC643" points="-213.339,586.134 -212.763,586.565 -211.322,586.134 -211.755,584.692
+ -213.339,586.134 "/>
+ <polyline id="polyline843" fill="#7FC643" points="-208.154,-63.736 -208.44,-64.744 -209.883,-64.744 -209.595,-63.304
+ -208.154,-63.736 "/>
+ <polyline id="polyline845" fill="#7FC643" points="-206.856,-40.408 -206.856,-41.56 -208.299,-41.417 -209.883,-40.696
+ -208.299,-40.696 -206.856,-40.408 "/>
+ <polyline id="polyline847" fill="#7FC643" points="-206.715,-37.098 -207.866,-39.544 -209.307,-39.833 -209.595,-38.392
+ -208.154,-37.386 -206.715,-37.098 "/>
+ <polyline id="polyline849" fill="#7FC643" points="-207.433,583.397 -207.433,582.103 -208.874,582.103 -207.433,583.397 "/>
+ <polyline id="polyline851" fill="#7FC643" points="-207.29,-63.016 -205.849,-62.584 -205.706,-64.024 -202.826,-64.312
+ -201.387,-63.304 -199.946,-64.168 -196.923,-63.448 -196.49,-62.008 -195.051,-63.016 -193.61,-62.873 -192.171,-61.72
+ -192.026,-60.28 -193.61,-59.128 -192.026,-58.408 -190.587,-58.266 -189.721,-59.705 -189.578,-61.144 -187.418,-64.024
+ -186.843,-65.608 -188.282,-65.32 -189.721,-63.88 -191.162,-63.736 -190.154,-65.178 -193.177,-65.896 -192.889,-64.457
+ -194.33,-64.168 -194.33,-65.752 -198.795,-65.608 -200.232,-65.033 -201.816,-64.744 -203.259,-65.464 -204.698,-65.752
+ -207.723,-64.888 -208.154,-63.448 -207.29,-63.016 "/>
+ <polyline id="polyline853" fill="#7FC643" points="-205.849,-33.208 -205.994,-34.218 -206.57,-35.656 -208.011,-35.224
+ -207.29,-33.785 -205.849,-33.208 "/>
+ <polyline id="polyline855" fill="#7FC643" points="-204.698,-30.184 -203.547,-32.201 -203.547,-33.642 -206.427,-36.088
+ -205.272,-33.064 -205.563,-31.625 -204.698,-30.184 "/>
+ <polyline id="polyline857" fill="#7FC643" points="-195.626,-38.249 -194.187,-38.537 -193.322,-39.976 -196.347,-40.408
+ -197.641,-39.976 -198.648,-40.84 -200.091,-40.266 -201.53,-40.984 -205.994,-40.696 -205.563,-39.256 -204.41,-37.816
+ -202.971,-38.104 -201.387,-37.816 -195.626,-38.249 "/>
+ <polyline id="polyline859" fill="#7FC643" points="-205.272,312.965 -203.979,313.542 -203.834,311.958 -205.272,312.965 "/>
+ <polyline id="polyline861" fill="#7FC643" points="-202.826,-44.296 -204.41,-43.72 -204.265,-42.136 -201.387,-41.705
+ -198.219,-42.28 -195.194,-43.576 -195.482,-45.016 -198.362,-45.016 -199.946,-44.44 -202.826,-44.296 "/>
+ <polyline id="polyline863" fill="#7FC643" points="-201.242,417.655 -202.395,418.95 -201.53,420.534 -197.211,421.397
+ -195.626,422.118 -194.187,421.827 -192.601,422.118 -191.162,421.542 -189.721,420.103 -189.29,418.663 -190.587,415.782
+ -194.473,414.487 -196.057,414.487 -199.082,415.065 -200.522,416.069 -201.242,417.655 "/>
+ <polyline id="polyline865" fill="#7FC643" points="-198.648,-61 -197.931,-63.016 -199.37,-62.44 -198.648,-61 "/>
+ <polyline id="polyline867" fill="#7FC643" points="-193.322,385.11 -194.761,385.687 -196.347,386.983 -197.786,387.271
+ -197.354,388.71 -196.202,390.151 -197.064,391.591 -196.347,393.03 -194.906,394.612 -193.467,395.19 -191.883,396.774
+ -190.442,397.206 -189.433,398.647 -187.994,399.655 -184.969,399.798 -183.818,398.358 -183.53,396.917 -184.681,395.479
+ -184.538,394.038 -186.698,391.155 -185.69,389.573 -186.41,388.136 -187.994,387.562 -189.433,387.562 -190.874,386.839
+ -193.322,385.11 "/>
+ <polyline id="polyline869" fill="#7FC643" points="-191.162,517.302 -191.45,516.005 -195.914,515.573 -197.354,516.005
+ -196.49,517.589 -195.051,518.597 -193.61,519.173 -192.026,518.886 -191.162,517.302 "/>
+ <polyline id="polyline871" fill="#7FC643" points="-194.187,-40.696 -194.618,-41.417 -194.906,-42.856 -196.347,-42.568
+ -197.064,-41.128 -194.187,-40.696 "/>
+ <polyline id="polyline873" fill="#7FC643" points="-193.177,-62.008 -194.618,-62.152 -195.482,-60.712 -193.898,-59.705
+ -192.458,-60.568 -193.177,-62.008 "/>
+ <polyline id="polyline875" fill="#7FC643" points="-192.746,329.815 -192.601,329.958 -192.601,328.374 -192.746,329.815 "/>
+ <polyline id="polyline877" fill="#7FC643" points="-190.442,-38.392 -190.011,-38.537 -189.433,-39.976 -189.433,-41.56
+ -189.721,-43 -191.305,-43.144 -190.011,-41.705 -191.45,-41.417 -191.305,-39.976 -192.314,-41.417 -192.746,-39.976
+ -192.026,-38.537 -190.442,-38.392 "/>
+ <polyline id="polyline879" fill="#7FC643" points="-178.635,-62.728 -180.074,-63.88 -183.097,-62.152 -184.538,-62.008
+ -183.097,-63.304 -183.675,-64.888 -185.114,-64.168 -186.553,-63.88 -188.137,-62.584 -187.849,-61.144 -189.003,-59.56
+ -188.282,-58.121 -185.402,-55.672 -184.538,-54.088 -183.242,-52.648 -182.379,-49.625 -181.225,-48.184 -180.074,-51.064
+ -178.778,-52.648 -180.362,-53.514 -181.225,-54.953 -182.666,-56.392 -181.803,-57.833 -181.803,-59.417 -180.362,-59.417
+ -180.362,-57.976 -180.938,-56.537 -180.938,-55.098 -179.786,-53.514 -176.761,-52.936 -176.33,-54.376 -176.33,-57.4
+ -176.042,-55.96 -174.601,-55.098 -173.305,-56.682 -171.866,-57.256 -171.433,-58.696 -173.738,-61.576 -175.177,-62.44
+ -176.618,-62.296 -178.635,-62.728 "/>
+ <polyline id="polyline881" fill="#7FC643" points="-185.979,-40.266 -186.122,-40.696 -187.563,-39.976 -185.979,-40.266 "/>
+ <polyline id="polyline883" fill="#7FC643" points="-184.106,430.323 -184.681,430.323 -184.25,431.767 -184.106,430.323 "/>
+ <polyline id="polyline885" fill="#7FC643" points="-153.578,387.413 -153.146,385.976 -150.122,383.386 -149.979,380.358
+ -149.69,378.917 -148.25,378.487 -145.803,375.462 -147.242,374.89 -150.267,374.167 -148.826,372.729 -147.242,372.581
+ -146.091,371.144 -144.65,371.573 -143.066,371.573 -141.626,370.999 -140.618,369.562 -139.034,368.554 -140.042,367.11
+ -141.482,365.958 -143.066,365.237 -144.507,365.237 -146.091,364.808 -148.971,364.95 -150.41,364.663 -151.851,364.95
+ -154.874,364.519 -156.314,364.808 -160.778,363.655 -165.242,364.229 -166.681,364.663 -168.122,365.671 -169.563,364.229
+ -171.433,361.351 -172.874,360.054 -175.898,358.472 -177.339,358.759 -177.914,360.198 -177.482,361.782 -176.042,362.935
+ -176.187,365.815 -175.322,367.397 -174.889,368.839 -173.883,369.702 -175.322,370.421 -178.345,370.712 -179.786,370.569
+ -182.666,371.144 -184.106,372.581 -183.963,374.022 -180.507,378.487 -179.066,379.351 -176.042,379.927 -175.177,381.511
+ -174.026,382.95 -172.587,384.103 -171.003,384.966 -168.122,384.679 -166.681,385.542 -166.25,386.983 -165.242,388.421
+ -166.681,388.995 -168.122,388.278 -168.553,389.722 -168.267,392.741 -168.986,394.183 -170.427,394.323 -172.011,393.175
+ -172.874,394.612 -172.299,396.198 -172.73,399.077 -173.595,400.519 -173.883,402.103 -174.889,405.126 -173.45,405.987
+ -170.427,408.438 -169.418,409.878 -167.979,409.155 -167.547,407.722 -166.106,407.431 -165.385,405.987 -164.234,404.554
+ -165.675,404.554 -165.675,403.11 -165.097,401.671 -166.106,400.229 -167.259,397.206 -165.818,397.351 -164.954,398.79
+ -163.513,399.077 -162.074,397.64 -159.194,397.351 -157.898,395.767 -156.314,394.323 -155.738,392.89 -155.883,391.444
+ -155.595,390.007 -154.154,388.421 -153.578,387.413 "/>
+ <polyline id="polyline887" fill="#7FC643" points="-181.946,545.526 -181.658,542.646 -183.097,542.935 -182.954,544.374
+ -183.242,545.235 -181.946,545.526 "/>
+ <polyline id="polyline889" points="-183.097,-30.474 -182.522,-30.328 -182.954,-31.912 -183.097,-30.474 "/>
+
+ <polygon id="polygon891" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -183.097,-30.474 -182.522,-30.328 -182.954,-31.912 "/>
+ <polyline id="polyline893" fill="#CCE83A" points="-181.225,-35.944 -180.938,-36.088 -180.362,-37.672 -181.946,-38.97
+ -181.946,-37.528 -181.225,-35.944 "/>
+ <polyline id="polyline895" points="-180.219,-27.594 -180.362,-29.033 -181.803,-30.474 -181.37,-29.033 -180.219,-27.594 "/>
+
+ <polygon id="polygon897" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -180.219,-27.594 -180.362,-29.033 -181.803,-30.474 -181.37,-29.033 "/>
+ <polyline id="polyline899" fill="#7FC643" points="-178.345,542.358 -178.49,542.071 -179.929,542.071 -178.345,542.358 "/>
+ <polyline id="polyline901" fill="#7FC643" points="-175.322,456.39 -176.473,456.39 -176.761,459.413 -176.042,460.854
+ -175.467,459.413 -175.898,457.827 -175.322,456.39 "/>
+ <polyline id="polyline903" fill="#7FC643" points="-170.282,425.862 -171.146,424.421 -172.587,423.987 -175.755,428.454
+ -175.755,429.897 -174.314,431.331 -172.874,431.909 -171.433,430.612 -170.715,429.03 -170.282,427.591 -170.282,425.862 "/>
+ <polyline id="polyline905" fill="#CCE83A" points="-173.738,-35.944 -173.162,-38.104 -174.601,-37.386 -173.738,-35.944 "/>
+ <polyline id="polyline907" fill="#CCE83A" points="-169.274,-34.936 -168.41,-35.802 -171.29,-38.392 -170.57,-36.953
+ -172.011,-37.386 -172.154,-35.944 -170.715,-34.936 -169.274,-34.936 "/>
+ <polyline id="polyline909" fill="#CCE83A" points="-167.402,-35.081 -167.834,-33.642 -166.25,-33.064 -167.834,-33.064
+ -167.69,-31.625 -166.25,-30.904 -167.69,-31.192 -168.41,-32.634 -168.553,-34.072 -169.706,-32.634 -171.146,-33.785
+ -171.721,-32.201 -170.137,-29.32 -167.259,-26.728 -162.795,-25.864 -160.635,-28.744 -162.219,-28.6 -161.066,-30.041
+ -162.65,-29.32 -161.929,-30.762 -162.795,-32.346 -164.234,-32.634 -164.379,-34.218 -165.818,-35.224 -167.402,-35.081 "/>
+ <polyline id="polyline911" fill="#CCE83A" points="-164.809,-44.584 -164.809,-46.024 -166.395,-46.024 -165.963,-44.44
+ -168.843,-45.88 -170.282,-45.736 -171.721,-44.873 -171.29,-43.432 -169.849,-42.856 -168.843,-41.417 -167.547,-42.856
+ -166.826,-39.833 -165.242,-38.537 -165.53,-40.121 -164.091,-40.552 -164.234,-38.97 -162.795,-38.97 -161.354,-39.976
+ -159.914,-39.256 -159.339,-40.696 -158.763,-39.256 -160.202,-38.392 -161.641,-37.96 -160.202,-37.816 -158.618,-37.098
+ -157.179,-36.953 -155.738,-36.376 -154.154,-36.232 -151.274,-36.376 -149.69,-37.386 -148.25,-37.672 -148.25,-36.232
+ -145.082,-36.088 -143.643,-37.528 -143.211,-38.97 -144.65,-39.976 -146.091,-38.682 -146.666,-38.824 -145.803,-39.688
+ -145.37,-42.712 -146.811,-43 -147.242,-41.56 -148.395,-40.121 -147.242,-38.97 -147.53,-38.97 -149.114,-39.833
+ -150.555,-40.696 -151.706,-42.136 -151.131,-43.576 -152.57,-44.584 -154.011,-43.289 -154.587,-41.85 -155.019,-43.289
+ -156.458,-44.152 -158.042,-44.296 -156.603,-45.736 -157.179,-47.178 -158.618,-46.024 -160.057,-45.304 -161.498,-45.016
+ -161.354,-43.576 -162.795,-43.72 -164.234,-44.728 -164.809,-44.584 "/>
+ <polyline id="polyline913" fill="#7FC643" points="-167.979,437.237 -166.538,436.085 -165.963,434.647 -165.818,431.622
+ -167.259,431.19 -168.698,434.069 -169.706,435.511 -169.849,436.95 -168.41,438.103 -167.979,437.237 "/>
+ <polyline id="polyline915" fill="#7FC643" points="-165.675,485.046 -165.385,483.751 -165.53,482.312 -166.826,480.87
+ -166.25,482.312 -166.395,483.751 -167.979,483.751 -169.418,485.046 -169.131,486.63 -168.41,488.214 -166.969,487.927
+ -165.963,486.485 -165.675,485.046 "/>
+ <polyline id="polyline917" fill="#7FC643" points="-165.385,535.444 -164.809,534.005 -165.097,532.567 -165.818,530.981
+ -166.826,529.542 -168.267,530.263 -168.986,534.581 -167.979,536.165 -165.385,535.444 "/>
+ <polyline id="polyline919" fill="#7FC643" points="-166.395,510.679 -166.106,512.118 -166.538,515.142 -166.395,516.581
+ -166.538,518.022 -167.114,519.462 -167.114,520.903 -166.826,521.622 -166.106,523.062 -164.666,523.495 -164.234,521.911
+ -162.795,520.759 -163.082,522.341 -161.641,521.765 -160.923,520.325 -159.482,519.173 -161.066,519.03 -160.49,517.589
+ -159.051,517.589 -159.339,516.726 -157.898,516.005 -156.891,514.567 -156.458,513.126 -157.467,511.687 -156.026,510.679
+ -155.595,509.235 -154.587,507.653 -154.011,506.214 -155.45,505.349 -154.011,505.782 -154.587,504.341 -153.003,504.774
+ -153.435,503.333 -153.003,501.751 -153.29,500.31 -150.843,497.286 -148.683,492.821 -147.242,491.671 -145.803,492.534
+ -146.522,495.56 -146.522,496.997 -147.387,498.438 -147.818,500.022 -148.826,501.462 -147.387,501.317 -145.946,500.022
+ -144.507,499.157 -144.65,500.599 -147.387,503.333 -147.963,504.919 -148.826,506.358 -147.387,507.079 -148.826,507.798
+ -149.547,509.095 -147.963,508.95 -149.547,510.103 -150.986,511.542 -149.547,511.687 -147.963,510.821 -146.522,509.671
+ -149.402,512.263 -150.555,513.702 -150.41,515.142 -150.698,515.862 -149.259,514.71 -150.122,517.589 -148.683,518.31
+ -150.122,519.751 -150.267,521.333 -148.826,521.622 -151.706,523.062 -152.715,524.501 -151.851,525.942 -150.267,525.653
+ -148.25,522.774 -146.811,522.63 -147.53,524.071 -147.53,525.653 -146.091,526.374 -146.091,524.935 -144.65,524.79
+ -143.786,523.349 -143.786,521.911 -140.763,521.478 -140.763,520.038 -137.738,519.606 -135.723,516.581 -136.154,518.022
+ -136.73,519.606 -141.194,523.638 -141.051,525.079 -140.187,524.646 -139.034,523.206 -137.45,523.495 -136.011,522.198
+ -134.57,521.333 -134.427,518.454 -132.986,518.31 -131.547,518.886 -130.106,518.597 -131.547,517.589 -131.69,516.149
+ -130.25,514.71 -130.683,513.271 -129.242,512.839 -128.954,511.11 -128.379,512.55 -125.498,513.271 -124.49,511.829
+ -126.074,511.11 -126.507,511.11 -125.498,508.087 -123.914,508.517 -122.475,507.798 -121.61,506.358 -121.467,504.919
+ -122.906,505.495 -124.347,506.646 -123.482,505.206 -125.211,504.198 -124.49,502.759 -123.051,503.333 -122.187,501.894
+ -121.322,499.013 -122.906,499.733 -124.347,500.022 -123.339,498.438 -121.755,498.294 -122.042,497.286 -120.458,497.862
+ -121.61,496.421 -120.171,496.278 -119.883,494.839 -118.587,493.255 -117.003,493.974 -116.282,493.687 -116.715,492.247
+ -115.131,491.235 -114.267,489.653 -115.563,488.214 -117.003,487.638 -118.442,487.495 -117.003,486.774 -115.418,487.206
+ -113.979,486.774 -114.122,485.333 -112.538,484.038 -112.538,482.599 -110.954,482.022 -111.675,483.462 -110.091,483.751
+ -109.37,482.165 -109.658,479.286 -108.074,479.718 -108.938,481.157 -109.082,482.743 -110.379,484.183 -111.818,485.333
+ -110.954,488.214 -109.946,489.798 -108.507,489.222 -107.211,487.782 -106.347,484.903 -103.467,482.312 -103.467,484.47
+ -104.618,486.054 -104.187,487.495 -103.179,486.054 -103.034,487.495 -101.595,486.054 -101.162,484.47 -101.595,483.03
+ -100.442,484.47 -100.73,486.054 -100.011,487.495 -98.57,486.485 -99.003,487.638 -101.883,489.942 -100.442,491.382
+ -102.026,491.671 -103.467,492.247 -102.603,493.687 -103.755,495.126 -103.467,496.567 -102.026,497.573 -100.587,497.862
+ -98.282,497.573 -101.162,498.149 -104.187,496.997 -105.626,497.573 -105.771,498.005 -103.898,501.03 -102.314,502.181
+ -100.874,503.046 -97.994,503.046 -96.41,503.911 -99.435,503.622 -100.874,503.911 -102.314,504.774 -102.603,503.333
+ -104.042,502.181 -105.626,501.462 -107.066,501.606 -108.507,502.47 -108.074,504.054 -106.635,505.062 -108.074,504.919
+ -109.515,504.054 -109.658,505.495 -106.778,507.366 -111.099,506.071 -111.53,506.646 -110.522,508.229 -109.082,509.671
+ -111.963,508.806 -112.538,510.247 -113.979,510.679 -114.267,512.118 -112.826,512.118 -111.387,511.397 -109.946,511.687
+ -111.387,512.263 -112.826,513.271 -111.387,514.421 -112.826,513.989 -112.683,515.431 -111.099,516.005 -112.683,516.726
+ -112.395,518.165 -113.834,519.03 -112.395,519.894 -110.811,519.462 -109.37,518.597 -106.49,517.444 -106.347,515.862
+ -105.626,517.444 -105.482,515.862 -104.042,516.581 -103.322,515.142 -103.61,513.702 -102.458,515.142 -101.019,514.421
+ -99.578,513.126 -101.738,516.005 -102.458,518.743 -101.019,518.454 -101.738,519.894 -100.299,520.47 -100.011,519.03
+ -98.57,519.462 -98.282,517.878 -98.139,519.462 -97.131,520.903 -95.114,518.022 -95.69,516.581 -94.538,514.854 -95.402,516.438
+ -94.538,519.317 -93.818,520.759 -92.379,520.903 -91.803,519.317 -92.522,514.997 -91.658,516.438 -90.219,517.302
+ -89.643,515.862 -89.931,514.421 -88.635,516.005 -88.635,516.438 -89.498,518.022 -89.211,519.462 -87.771,520.903
+ -86.33,521.333 -86.763,519.894 -85.322,520.47 -84.458,518.886 -84.026,517.444 -85.179,516.005 -83.738,516.149 -83.595,517.733
+ -84.026,520.759 -82.442,521.19 -81.003,519.606 -80.57,518.022 -79.851,516.581 -80.858,515.142 -79.418,516.149 -79.418,514.567
+ -78.698,513.126 -80.139,512.403 -81.578,512.118 -83.019,513.413 -82.299,511.829 -82.011,510.39 -86.475,511.542
+ -86.763,511.255 -83.738,510.247 -82.442,508.806 -83.883,507.798 -85.467,507.366 -86.906,507.798 -85.467,506.79
+ -86.906,505.782 -85.034,505.782 -83.595,506.935 -82.154,506.358 -80.57,506.071 -79.131,506.646 -77.834,505.206
+ -80.715,504.341 -82.154,504.63 -83.595,503.765 -85.034,503.911 -83.595,503.622 -82.011,504.341 -80.57,504.054 -80.858,502.47
+ -84.891,498.294 -87.051,498.294 -85.61,497.573 -84.171,498.294 -82.587,499.733 -81.146,500.599 -83.162,497.718
+ -84.603,496.278 -83.019,497.142 -82.299,498.581 -82.011,497.142 -82.299,495.702 -81.578,497.142 -80.715,500.022
+ -79.274,499.878 -78.698,498.294 -79.563,496.854 -78.122,498.149 -76.683,497.718 -75.818,496.134 -76.395,494.694
+ -74.954,494.118 -74.954,492.679 -76.395,492.679 -76.826,491.235 -78.267,490.806 -76.826,490.806 -75.242,490.374
+ -73.803,490.95 -72.507,489.366 -74.091,488.79 -75.53,487.782 -77.114,487.927 -79.994,490.374 -77.259,487.638 -75.818,487.495
+ -75.099,485.911 -78.122,485.479 -81.003,486.198 -79.563,485.479 -77.979,485.046 -76.683,484.038 -75.242,484.183
+ -73.803,483.751 -75.242,483.896 -78.122,482.599 -79.706,483.03 -79.851,482.165 -79.706,480.728 -79.274,482.165 -77.69,482.312
+ -76.25,482.743 -75.099,479.862 -77.979,479.718 -76.538,479.573 -78.122,478.421 -75.099,477.987 -74.234,476.405 -75.53,474.966
+ -76.971,475.253 -77.547,473.815 -75.963,474.819 -74.522,474.966 -74.379,473.526 -75.818,473.382 -75.387,471.942
+ -73.946,473.237 -71.931,476.118 -71.498,474.679 -73.082,473.815 -72.362,472.229 -73.946,472.374 -72.362,471.509
+ -72.362,470.069 -73.803,470.214 -72.362,469.351 -72.795,466.472 -73.946,465.03 -73.803,463.589 -72.362,465.03 -72.219,466.472
+ -71.643,467.909 -70.635,466.472 -71.066,465.03 -71.498,460.421 -70.347,463.444 -69.194,464.886 -69.051,468.341 -68.33,465.319
+ -68.042,466.901 -67.034,465.462 -67.179,464.022 -65.595,466.901 -64.299,465.319 -64.154,463.878 -64.587,462.438
+ -66.171,461.286 -67.61,460.995 -66.026,460.569 -64.587,461.862 -64.587,459.562 -63.146,464.022 -62.715,462.438
+ -62.858,459.562 -64.011,458.118 -62.57,459.271 -62.427,460.854 -61.851,463.733 -62.57,466.759 -62.282,468.198 -61.851,469.782
+ -60.986,471.222 -59.547,472.374 -58.106,470.79 -57.242,467.909 -57.818,466.323 -57.963,464.886 -58.971,463.444
+ -58.395,460.421 -58.538,458.839 -61.131,455.958 -61.131,454.519 -62.282,452.214 -61.994,452.069 -60.986,453.509
+ -60.41,456.534 -58.826,457.542 -57.675,458.983 -57.242,460.569 -55.803,460.854 -54.362,461.573 -53.643,463.015
+ -53.786,464.454 -53.498,466.038 -51.914,465.897 -50.475,464.886 -48.026,462.151 -47.162,460.71 -46.299,457.687
+ -47.883,457.397 -49.322,457.542 -52.059,457.11 -53.498,455.671 -55.082,454.519 -56.522,454.229 -57.099,452.79 -58.538,452.069
+ -60.698,451.64 -60.122,451.351 -57.099,451.64 -56.666,453.077 -55.227,453.942 -53.786,454.374 -51.482,455.815 -50.042,455.958
+ -49.61,454.519 -49.898,452.935 -51.194,451.495 -52.778,450.341 -54.219,450.63 -54.507,450.917 -55.515,449.767 -56.954,448.901
+ -55.515,449.19 -54.65,450.487 -54.074,449.19 -53.786,449.19 -52.347,449.622 -50.906,450.487 -48.458,453.509 -47.019,454.663
+ -45.435,454.229 -44.282,455.671 -42.843,454.519 -42.843,452.935 -41.834,448.612 -43.418,447.462 -44.858,446.022
+ -45.29,446.022 -46.299,444.581 -47.738,445.015 -46.299,443.718 -45.003,445.155 -42.555,446.022 -41.979,444.87 -44.858,442.421
+ -47.883,440.983 -53.786,441.702 -55.37,441.702 -56.234,441.413 -53.211,441.271 -50.33,440.694 -49.034,439.253 -50.475,438.39
+ -53.498,438.534 -53.931,438.103 -52.347,438.245 -50.906,437.671 -49.467,438.245 -48.458,439.687 -46.874,440.263
+ -45.435,441.271 -43.994,441.271 -42.41,441.702 -40.826,441.126 -39.387,439.687 -40.826,438.39 -42.41,437.958 -43.851,438.534
+ -44.427,437.095 -47.019,434.069 -48.458,433.782 -50.042,432.917 -50.042,432.343 -48.603,433.351 -47.019,433.495
+ -46.73,432.058 -43.706,433.065 -42.267,433.065 -41.402,434.499 -41.402,435.942 -38.522,436.663 -37.082,436.229 -35.786,434.79
+ -34.778,433.206 -34.202,428.741 -35.931,427.733 -37.37,427.444 -38.811,426.729 -40.25,427.304 -41.69,426.729 -43.131,426.87
+ -44.715,426.438 -43.274,426.581 -40.25,425.573 -41.69,424.421 -43.274,424.278 -44.715,424.569 -43.274,423.987 -41.69,423.987
+ -39.818,424.421 -38.379,423.126 -36.938,422.839 -38.379,421.687 -39.963,421.687 -41.402,421.976 -42.843,421.687
+ -38.522,421.11 -36.938,421.253 -33.914,421.976 -34.202,420.534 -37.227,419.526 -35.643,419.671 -36.65,418.229 -39.675,417.366
+ -41.114,418.374 -44.139,417.655 -42.555,417.655 -41.114,417.942 -39.675,416.935 -39.818,415.927 -38.234,417.222
+ -36.795,416.935 -39.675,414.774 -38.234,415.206 -37.515,413.767 -36.795,415.351 -35.354,416.647 -34.202,418.085
+ -32.763,418.374 -31.179,418.229 -30.026,416.79 -30.314,415.351 -30.171,413.331 -34.202,411.462 -35.643,411.175 -34.059,411.03
+ -31.179,411.606 -31.179,410.163 -32.618,408.729 -34.059,408.581 -35.643,407.573 -34.202,408.151 -32.763,408.294
+ -31.322,409.444 -30.171,412.472 -28.73,413.046 -27.146,412.323 -25.706,411.319 -24.555,409.878 -24.267,408.438
+ -24.267,406.854 -25.706,406.854 -24.267,405.413 -24.267,403.827 -22.971,402.39 -22.826,400.95 -23.259,399.366 -23.979,397.927
+ -26.715,395.19 -28.154,394.612 -29.738,394.901 -30.603,396.487 -32.187,400.95 -32.042,402.39 -32.187,401.671 -33.626,400.519
+ -32.187,399.798 -31.61,398.214 -31.322,396.774 -32.763,396.198 -31.322,395.331 -31.322,393.897 -32.763,394.038
+ -36.362,398.358 -37.803,399.655 -38.522,401.095 -38.379,399.655 -36.795,398.358 -38.379,398.499 -39.242,399.942
+ -38.954,398.79 -37.515,397.351 -36.074,396.774 -34.635,395.622 -34.059,394.183 -37.082,394.612 -37.515,396.198
+ -37.658,393.175 -34.778,393.462 -33.339,393.319 -31.898,392.454 -30.746,391.015 -32.187,390.438 -33.771,390.87
+ -34.059,389.431 -32.618,389.862 -31.179,388.995 -29.738,388.569 -32.763,387.126 -34.202,388.136 -35.066,389.573
+ -34.923,388.278 -33.339,387.126 -34.923,386.694 -36.362,386.694 -37.946,386.118 -39.387,385.253 -37.946,384.679
+ -37.946,383.237 -36.795,384.679 -35.354,383.958 -33.771,384.103 -32.33,385.11 -30.891,385.11 -31.467,383.671 -34.347,382.085
+ -32.763,382.374 -31.322,382.95 -29.883,383.815 -26.858,385.11 -25.418,385.11 -23.979,383.671 -22.395,382.95 -20.954,383.095
+ -19.515,382.229 -19.082,380.79 -17.643,379.351 -16.059,379.351 -14.618,378.917 -13.034,378.198 -11.595,377.046
+ -12.026,371.286 -13.467,370.136 -13.898,368.554 -15.051,367.11 -16.49,366.39 -17.498,367.831 -19.082,368.118 -17.498,367.253
+ -17.066,365.815 -17.354,364.376 -18.795,363.222 -20.234,364.376 -19.37,362.935 -19.227,361.495 -20.811,360.774 -22.25,362.358
+ -22.971,363.798 -23.547,366.819 -24.267,368.263 -23.402,362.358 -22.683,360.774 -24.122,361.206 -22.971,359.767
+ -24.41,359.335 -25.418,362.358 -28.011,366.679 -26.57,362.358 -25.706,360.774 -25.706,359.335 -27.146,358.901 -30.171,358.901
+ -33.051,359.767 -34.635,360.917 -35.211,362.358 -33.771,363.655 -35.066,365.237 -35.354,363.655 -36.938,363.942
+ -39.818,366.679 -41.259,367.544 -37.227,363.222 -37.082,361.64 -38.522,360.487 -39.963,360.63 -41.259,359.19 -42.698,360.054
+ -44.139,361.351 -45.723,361.64 -46.73,363.077 -47.019,364.663 -48.026,366.103 -49.61,366.534 -51.051,365.671 -52.635,365.386
+ -55.515,365.671 -57.099,366.103 -58.538,365.815 -57.099,365.095 -55.946,363.942 -54.65,365.386 -54.938,363.798 -54.65,362.358
+ -55.227,360.917 -57.675,357.894 -58.25,356.454 -58.106,355.015 -56.811,358.038 -55.37,359.19 -54.219,360.63 -52.635,363.655
+ -52.49,365.237 -50.906,364.663 -49.179,361.64 -47.883,360.198 -44.858,357.749 -41.979,356.454 -38.811,355.733 -37.37,355.733
+ -34.49,356.454 -32.906,355.591 -31.467,354.151 -29.883,353.718 -28.442,353.862 -25.418,355.159 -19.515,357.03 -13.467,361.495
+ -12.026,360.487 -11.595,356.022 -11.738,354.438 -12.314,351.558 -14.042,348.534 -15.339,346.95 -16.778,345.655 -19.803,343.64
+ -21.242,343.782 -22.106,342.343 -23.547,341.909 -25.131,341.046 -28.011,340.901 -29.595,341.335 -29.883,339.894
+ -31.467,339.894 -32.906,338.741 -35.931,338.454 -37.37,337.878 -38.811,338.167 -40.395,339.175 -41.259,337.591
+ -43.994,337.446 -45.866,338.454 -47.307,338.312 -48.171,337.591 -51.051,337.591 -52.49,338.167 -53.498,339.606 -53.931,342.63
+ -54.362,344.069 -54.65,347.095 -54.219,348.534 -55.658,349.542 -56.954,351.126 -57.675,352.565 -58.971,351.126
+ -59.402,348.245 -58.971,346.663 -57.818,345.222 -57.675,343.782 -57.963,342.343 -57.099,340.759 -58.538,341.335
+ -59.979,340.614 -61.563,341.19 -64.442,343.206 -66.026,343.782 -67.179,345.222 -67.61,346.808 -68.33,348.245 -69.771,348.245
+ -70.635,349.687 -69.194,350.118 -69.051,351.558 -69.626,354.438 -66.746,354.151 -67.755,355.733 -66.891,357.319
+ -68.475,356.886 -69.914,357.03 -71.354,358.038 -73.803,361.495 -73.515,364.663 -72.795,363.222 -72.795,361.782
+ -72.074,363.222 -72.074,364.808 -72.362,366.245 -73.227,368.263 -73.082,369.413 -73.515,373.733 -72.362,376.038
+ -72.219,377.331 -73.946,380.214 -73.946,383.095 -73.227,384.679 -71.643,383.671 -70.202,381.798 -68.906,378.774
+ -67.898,377.331 -69.626,381.798 -71.354,384.103 -71.643,385.687 -75.099,390.007 -73.658,390.294 -70.778,387.562
+ -71.066,386.263 -70.202,384.819 -69.482,386.263 -69.339,389.286 -70.059,392.163 -69.914,393.749 -70.635,394.612
+ -71.354,396.198 -70.49,400.519 -69.482,401.958 -68.33,401.958 -65.307,400.663 -63.866,399.655 -63.866,398.214 -63.29,396.774
+ -61.706,396.487 -60.267,397.782 -58.826,398.069 -59.402,399.655 -60.122,398.069 -61.563,399.077 -62.427,400.519
+ -62.427,401.958 -64.011,402.39 -64.73,403.976 -63.29,405.413 -64.299,406.854 -70.202,408.151 -67.467,411.175 -69.051,410.163
+ -68.618,411.606 -68.618,413.046 -70.059,412.759 -71.498,411.462 -72.65,413.046 -72.795,414.487 -71.354,415.206
+ -70.635,416.647 -71.931,415.206 -73.37,415.495 -74.811,416.79 -74.522,418.229 -75.675,421.11 -77.259,422.405 -78.698,422.694
+ -79.851,421.11 -80.427,418.229 -81.866,417.077 -83.307,417.655 -86.33,417.942 -86.33,419.526 -83.45,421.827 -82.154,423.271
+ -80.715,423.562 -80.715,425.144 -79.274,426.294 -77.69,427.015 -78.267,428.454 -78.986,427.015 -80.427,426.87 -79.851,428.312
+ -81.29,428.163 -81.003,429.606 -82.587,429.175 -83.595,430.612 -85.034,431.909 -85.467,433.351 -85.179,434.79 -83.738,434.358
+ -82.587,432.774 -81.866,434.358 -83.307,435.655 -84.746,435.798 -86.187,435.366 -87.771,436.808 -88.202,437.958
+ -86.618,439.397 -88.059,439.253 -88.059,440.694 -89.066,442.136 -92.091,443.718 -93.242,445.155 -94.683,446.312
+ -96.122,446.886 -97.274,448.472 -98.715,448.759 -101.595,450.917 -103.034,451.065 -104.618,449.909 -106.059,448.472
+ -107.498,448.612 -108.938,448.323 -110.522,449.19 -110.666,450.63 -109.515,455.095 -109.515,457.976 -108.507,459.413
+ -105.626,459.562 -102.603,458.983 -102.746,460.421 -103.322,461.862 -104.618,463.304 -105.339,464.741 -104.906,467.767
+ -105.482,470.79 -106.635,472.229 -105.051,473.095 -108.074,471.798 -107.354,473.237 -107.354,474.679 -110.234,473.095
+ -111.818,473.237 -111.963,469.495 -113.547,468.917 -113.402,466.038 -114.843,465.171 -116.282,465.171 -117.723,464.741
+ -119.162,463.444 -116.858,462.87 -115.418,463.155 -113.979,462.581 -111.099,460.854 -110.234,459.413 -109.946,454.808
+ -110.811,451.927 -111.099,449.046 -111.963,447.462 -113.402,446.741 -114.843,446.454 -119.162,444.003 -120.746,442.71
+ -122.187,441.987 -123.626,442.71 -125.786,445.589 -126.65,447.03 -127.227,448.612 -130.106,450.487 -131.547,450.63
+ -130.971,449.19 -131.547,447.606 -132.555,446.163 -133.994,445.878 -135.435,444.438 -135.003,442.995 -135.435,441.562
+ -136.442,441.271 -137.883,439.976 -137.883,436.95 -138.458,435.511 -139.034,436.95 -140.906,439.976 -141.339,441.413
+ -142.778,440.694 -144.219,440.55 -144.507,441.271 -145.946,441.126 -144.65,439.687 -141.771,440.263 -140.618,438.819
+ -139.034,435.798 -139.034,434.358 -137.883,430.038 -138.171,427.015 -139.034,425.573 -140.475,424.71 -141.914,426.151
+ -143.354,425.573 -145.515,422.554 -147.099,421.687 -148.538,422.118 -151.418,422.263 -152.858,422.839 -155.45,424.421
+ -156.026,425.862 -155.738,427.304 -156.746,428.89 -156.746,430.323 -156.458,431.767 -157.034,434.79 -155.45,434.214
+ -154.874,435.655 -154.874,437.095 -153.29,437.815 -152.57,439.253 -152.427,440.694 -151.131,439.253 -151.131,440.694
+ -149.834,439.253 -149.259,440.839 -149.547,442.278 -150.267,443.718 -149.979,445.155 -150.41,446.599 -149.979,448.183
+ -148.395,447.897 -146.954,448.323 -145.227,445.444 -143.786,446.022 -142.347,446.022 -142.923,447.462 -144.362,446.599
+ -145.803,447.606 -146.666,449.046 -145.227,449.19 -144.507,450.63 -145.946,451.927 -147.53,451.64 -148.971,451.927
+ -147.53,452.647 -145.946,452.79 -145.658,454.229 -144.219,453.798 -144.65,455.237 -146.091,455.958 -144.65,456.819
+ -146.091,456.39 -147.675,456.39 -147.53,457.827 -149.114,457.397 -148.826,458.983 -150.122,460.421 -150.843,461.862
+ -152.282,463.304 -150.843,463.444 -152.282,464.454 -153.723,464.741 -154.442,466.183 -152.858,466.901 -152.282,468.487
+ -155.162,467.19 -154.874,468.63 -155.162,470.214 -153.723,469.782 -153.866,471.222 -155.883,474.245 -154.73,475.687
+ -154.73,475.976 -156.171,475.687 -157.61,474.39 -158.763,472.95 -159.051,471.366 -159.482,472.808 -162.507,474.966
+ -162.795,476.405 -163.658,477.847 -163.082,479.142 -161.641,480.294 -163.082,480.294 -163.946,481.733 -164.379,483.173
+ -164.234,484.759 -165.097,487.638 -164.666,489.079 -164.379,489.366 -164.091,490.806 -163.225,492.247 -162.795,493.687
+ -164.234,493.687 -165.675,494.118 -164.809,495.56 -166.25,495.847 -167.114,497.286 -167.547,498.728 -167.114,500.165
+ -167.834,501.751 -167.979,503.19 -166.826,507.653 -166.969,509.235 -166.395,510.679 "/>
+ <polyline id="polyline921" fill="#CCE83A" points="-164.954,-35.656 -164.809,-36.088 -166.25,-37.386 -167.834,-37.24
+ -167.834,-35.656 -164.954,-35.656 "/>
+ <polyline id="polyline923" fill="#CCE83A" points="-158.33,-46.744 -158.042,-47.32 -159.051,-48.762 -162.074,-50.201
+ -164.954,-50.346 -166.538,-50.776 -167.259,-49.338 -164.234,-48.617 -162.65,-48.617 -161.211,-47.608 -159.771,-47.608
+ -158.33,-46.744 "/>
+ <polyline id="polyline925" fill="#CCE83A" points="-165.675,-47.033 -164.234,-47.896 -165.675,-48.472 -167.114,-48.328
+ -165.675,-47.033 "/>
+ <polyline id="polyline927" fill="#7FC643" points="-165.53,526.229 -165.385,525.222 -166.826,524.79 -165.53,526.229 "/>
+ <polyline id="polyline929" fill="#7FC643" points="-161.929,530.263 -162.507,529.255 -163.946,530.118 -164.234,531.702
+ -163.658,533.142 -161.929,530.263 "/>
+ <polyline id="polyline931" fill="#CCE83A" points="-160.923,-45.304 -162.219,-46.312 -163.658,-46.888 -162.362,-45.304
+ -160.923,-45.304 "/>
+ <polyline id="polyline933" fill="#7FC643" points="-161.498,428.454 -160.923,428.741 -161.354,427.304 -162.795,427.015
+ -161.498,428.454 "/>
+ <polyline id="polyline935" fill="#CCE83A" points="-156.026,-47.178 -155.45,-48.472 -156.891,-49.192 -157.467,-47.608
+ -156.026,-47.178 "/>
+ <polyline id="polyline937" fill="#CCE83A" points="-150.41,-30.041 -149.547,-31.05 -150.267,-32.488 -150.41,-33.93
+ -151.851,-34.792 -153.29,-33.496 -154.73,-34.218 -156.314,-33.352 -155.883,-31.912 -154.73,-30.474 -153.29,-30.617
+ -151.706,-31.625 -150.41,-30.041 "/>
+ <polyline id="polyline939" fill="#CCE83A" points="-154.299,-47.608 -153.866,-47.752 -153.723,-49.338 -155.162,-50.488
+ -154.011,-49.048 -154.299,-47.608 "/>
+ <polyline id="polyline941" fill="#CCE83A" points="-149.114,-28.17 -149.259,-28.744 -152.282,-30.617 -155.162,-29.608
+ -155.019,-28.17 -153.578,-27.736 -151.994,-28.17 -149.114,-28.17 "/>
+ <polyline id="polyline943" fill="#7FC643" points="-150.986,531.126 -151.274,529.829 -152.858,528.39 -154.299,527.813
+ -154.299,529.255 -153.866,530.694 -152.427,531.271 -150.986,531.126 "/>
+ <polyline id="polyline945" fill="#7FC643" points="-151.563,527.095 -151.563,526.806 -153.146,526.229 -151.563,527.095 "/>
+ <polyline id="polyline947" fill="#CCE83A" points="-150.698,-42.28 -150.122,-43 -148.683,-43.72 -148.538,-45.16 -149.979,-45.16
+ -150.555,-43.72 -150.698,-42.28 "/>
+ <polyline id="polyline949" fill="#CCE83A" points="-147.099,-31.05 -145.658,-33.208 -146.234,-34.648 -147.675,-34.506
+ -149.259,-33.352 -148.538,-31.768 -147.099,-31.05 "/>
+ <polyline id="polyline951" fill="#7FC643" points="-145.37,455.382 -146.954,455.095 -148.395,455.237 -146.811,456.103
+ -145.37,455.382 "/>
+ <polyline id="polyline953" fill="#CCE83A" points="-142.635,-28.17 -141.771,-29.32 -143.211,-30.041 -144.362,-31.48
+ -145.803,-31.338 -146.522,-29.896 -145.515,-28.457 -142.635,-28.17 "/>
+ <polyline id="polyline955" fill="#7FC643" points="-137.738,372.438 -137.738,370.712 -140.618,371.144 -142.202,371.722
+ -143.066,373.155 -144.507,373.733 -143.498,375.175 -142.059,374.741 -137.738,372.438 "/>
+ <polyline id="polyline957" fill="#CCE83A" points="-144.074,-46.744 -143.643,-46.744 -142.49,-48.328 -143.931,-48.328
+ -144.074,-46.744 "/>
+ <polyline id="polyline959" fill="#CCE83A" points="-141.626,-37.24 -142.202,-35.802 -143.643,-34.506 -143.498,-33.064
+ -140.618,-31.625 -139.034,-31.625 -140.475,-31.338 -142.059,-31.625 -143.498,-31.48 -142.49,-30.041 -141.051,-29.178
+ -139.61,-27.88 -138.171,-28.17 -138.171,-29.608 -136.73,-29.466 -132.267,-32.201 -131.979,-33.642 -134.858,-33.642
+ -139.322,-35.944 -140.618,-37.386 -141.626,-37.24 "/>
+ <polyline id="polyline961" fill="#CCE83A" points="-142.778,-45.736 -140.618,-42.856 -142.059,-43.72 -141.771,-42.28
+ -140.33,-41.128 -140.042,-39.688 -138.603,-38.824 -137.595,-37.386 -139.034,-37.24 -137.595,-35.944 -136.154,-35.081
+ -136.442,-36.665 -135.003,-35.944 -133.418,-35.514 -131.979,-36.088 -133.418,-36.376 -131.979,-36.808 -132.986,-38.249
+ -131.547,-38.249 -132.986,-39.688 -134.427,-39.544 -135.866,-38.537 -135.435,-39.976 -138.458,-40.552 -138.458,-43.432
+ -141.482,-45.592 -142.778,-45.736 "/>
+ <polyline id="polyline963" fill="#7FC643" points="-136.874,379.065 -136.011,378.198 -135.723,376.759 -135.866,375.319
+ -137.307,375.897 -138.171,377.479 -139.61,378.058 -141.051,378.198 -140.763,381.077 -142.202,381.077 -142.49,384.103
+ -141.051,383.237 -140.763,381.798 -139.179,380.935 -137.738,380.647 -136.874,379.065 "/>
+ <polyline id="polyline965" fill="#7FC643" points="-139.322,383.386 -138.746,383.386 -139.467,381.942 -139.322,383.386 "/>
+ <polyline id="polyline967" fill="#7FC643" points="-134.715,523.782 -135.435,522.774 -138.458,525.653 -138.314,527.095
+ -137.595,525.653 -134.715,523.782 "/>
+ <polyline id="polyline969" fill="#CCE83A" points="-129.818,-45.736 -129.53,-44.296 -130.538,-45.736 -131.979,-46.6
+ -136.299,-47.752 -136.587,-46.312 -133.706,-43.72 -132.698,-42.28 -131.259,-40.984 -125.354,-37.528 -123.914,-36.953
+ -122.33,-36.808 -120.891,-36.376 -119.307,-36.376 -118.442,-37.96 -117.003,-37.24 -117.435,-38.682 -117.578,-40.266
+ -119.019,-41.272 -120.458,-40.552 -121.898,-40.696 -122.618,-42.136 -124.059,-41.85 -123.914,-43.289 -125.066,-44.728
+ -126.65,-44.728 -128.091,-45.592 -128.379,-44.008 -129.242,-45.592 -129.818,-45.736 "/>
+ <polyline id="polyline971" fill="#7FC643" points="-131.69,520.47 -133.274,519.606 -134.139,521.046 -134.57,522.63
+ -133.131,522.198 -132.41,520.759 -131.69,520.47 "/>
+ <polyline id="polyline973" fill="#7FC643" points="-132.267,385.397 -132.122,384.245 -131.259,382.808 -132.698,383.815
+ -132.267,385.397 "/>
+ <polyline id="polyline975" fill="#CCE83A" points="-123.051,-32.201 -123.626,-30.762 -123.339,-32.201 -124.923,-32.776
+ -126.362,-32.346 -124.923,-33.208 -126.362,-36.088 -127.803,-37.386 -129.099,-35.802 -129.242,-32.776 -127.946,-31.338
+ -129.099,-29.896 -126.219,-29.033 -127.803,-28.024 -126.362,-27.16 -124.923,-27.016 -120.458,-25.864 -118.874,-24.712
+ -120.458,-24.426 -121.898,-25.144 -123.339,-25.289 -124.778,-26.152 -126.362,-26.152 -123.339,-24.426 -120.458,-23.417
+ -118.874,-23.128 -117.435,-23.272 -114.555,-25.432 -113.114,-24.856 -111.675,-24.712 -112.25,-26.152 -115.131,-26.728
+ -116.427,-28.17 -118.011,-29.033 -119.45,-30.474 -120.891,-31.338 -123.051,-32.201 "/>
+ <polyline id="polyline977" fill="#7FC643" points="-122.33,510.247 -122.33,509.095 -123.914,508.95 -125.354,509.526
+ -123.771,510.679 -122.33,510.247 "/>
+ <polyline id="polyline979" fill="#CCE83A" points="-117.723,-41.705 -117.146,-41.85 -118.154,-43.432 -119.595,-43.72
+ -119.595,-45.16 -121.034,-45.592 -121.467,-44.152 -120.746,-42.712 -119.162,-41.56 -117.723,-41.705 "/>
+ <polyline id="polyline981" fill="#CCE83A" points="-115.994,-40.84 -114.555,-40.984 -115.994,-41.705 -117.003,-40.266
+ -117.003,-38.824 -115.563,-38.824 -114.122,-37.96 -112.538,-37.528 -114.122,-36.808 -120.026,-35.802 -121.467,-34.936
+ -120.746,-33.496 -117.866,-31.768 -115.706,-34.792 -114.122,-34.218 -109.658,-35.224 -112.683,-33.93 -115.706,-33.496
+ -117.146,-32.058 -115.706,-31.338 -114.267,-31.48 -115.706,-30.904 -115.706,-29.32 -114.122,-28.89 -111.099,-30.184
+ -111.099,-33.208 -110.091,-34.648 -109.946,-33.208 -110.234,-31.625 -108.795,-31.05 -107.354,-31.338 -105.194,-34.36
+ -106.059,-35.802 -104.618,-35.224 -104.187,-36.808 -105.771,-37.528 -108.795,-37.816 -107.354,-37.96 -106.923,-39.4
+ -108.362,-40.121 -109.803,-39.976 -111.242,-40.84 -112.826,-39.833 -114.267,-40.696 -115.994,-40.84 "/>
+ <polyline id="polyline983" fill="#7FC643" points="-117.723,303.174 -117.435,303.174 -117.723,301.734 -117.723,303.174 "/>
+ <polyline id="polyline985" fill="#7FC643" points="-103.755,359.909 -102.314,359.479 -101.738,357.894 -104.618,356.599
+ -106.202,357.462 -107.643,356.886 -109.227,357.319 -110.666,358.614 -109.658,360.054 -108.219,360.343 -103.755,359.909 "/>
+ <polyline id="polyline987" fill="#7FC643" points="-108.507,291.222 -108.362,290.79 -109.803,289.638 -108.507,291.222 "/>
+ <polyline id="polyline989" fill="#7FC643" points="-107.066,419.526 -108.65,420.245 -109.658,421.687 -109.515,423.126
+ -109.082,424.71 -108.219,426.151 -107.931,427.591 -106.923,429.175 -105.626,430.612 -102.603,432.058 -101.162,432.198
+ -98.139,431.19 -96.698,430.323 -92.234,429.749 -91.227,428.312 -91.227,426.729 -90.795,425.286 -90.938,423.847
+ -91.803,422.263 -92.234,420.819 -93.53,419.386 -94.971,418.808 -97.851,418.229 -100.874,417.655 -102.458,417.655
+ -105.339,418.808 -106.778,418.95 -107.066,419.526 "/>
+ <polyline id="polyline991" fill="#7FC643" points="-105.339,222.822 -105.339,222.534 -106.778,221.958 -105.339,222.822 "/>
+ <polyline id="polyline993" fill="#CCE83A" points="-104.33,-37.672 -104.042,-38.249 -105.194,-39.833 -106.778,-39.256
+ -105.771,-37.816 -104.33,-37.672 "/>
+ <polyline id="polyline995" fill="#7FC643" points="-102.603,225.125 -102.603,224.838 -104.042,225.846 -102.603,225.125 "/>
+ <polyline id="polyline997" fill="#99D6AA" points="-99.146,656.839 -99.146,656.55 -100.442,655.11 -101.883,654.679
+ -102.026,656.263 -100.587,657.413 -99.146,656.839 "/>
+ <polyline id="polyline999" fill="#99D6AA" points="-93.242,660.581 -94.683,660.87 -94.106,662.454 -92.522,662.597
+ -92.379,661.157 -90.938,662.31 -89.498,662.597 -87.914,662.454 -87.051,663.894 -85.61,664.757 -84.171,664.47 -83.45,663.03
+ -82.011,663.317 -83.45,664.181 -83.307,665.622 -84.746,666.054 -86.187,665.333 -87.626,666.341 -86.187,667.062
+ -84.746,667.349 -83.307,667.206 -81.866,666.63 -81.003,668.067 -84.891,668.214 -87.914,666.483 -89.354,666.772
+ -87.914,667.349 -89.354,667.206 -90.795,666.63 -90.507,668.067 -88.923,667.493 -87.482,668.214 -87.626,669.653
+ -83.162,669.222 -83.595,670.806 -85.034,670.229 -88.059,669.94 -89.498,669.511 -88.49,670.948 -90.074,670.517 -91.515,671.382
+ -90.074,671.524 -89.066,673.11 -86.187,672.39 -85.755,673.829 -87.194,673.542 -88.635,674.403 -87.194,674.694 -85.61,674.694
+ -87.194,674.839 -88.635,676.278 -87.194,676.997 -85.755,676.854 -84.314,676.278 -82.73,676.278 -84.314,676.997
+ -85.755,677.286 -87.194,678.438 -88.778,679.013 -90.219,678.87 -91.658,679.878 -88.778,680.454 -85.755,680.022
+ -82.874,679.302 -85.755,680.454 -87.339,680.597 -88.778,681.604 -90.219,680.741 -91.803,680.741 -90.507,682.325
+ -90.938,683.765 -89.643,685.062 -88.059,684.63 -89.211,685.493 -88.347,686.356 -88.059,686.646 -86.618,685.78 -87.626,684.483
+ -85.61,683.909 -84.026,683.046 -84.026,684.483 -82.587,683.478 -83.019,684.919 -84.458,686.067 -80.427,691.974
+ -78.986,691.255 -79.563,689.813 -78.122,690.821 -77.69,689.382 -77.547,687.94 -78.986,687.364 -77.547,686.214 -80.139,681.894
+ -79.994,680.31 -79.563,681.894 -78.555,683.333 -77.114,683.046 -77.547,684.483 -77.114,686.067 -76.395,687.511
+ -74.954,687.222 -71.931,687.364 -73.515,686.646 -74.091,685.206 -73.082,686.646 -71.498,687.222 -71.354,685.78
+ -72.938,682.899 -71.786,684.341 -70.347,685.493 -72.362,681.03 -71.498,682.47 -70.059,684.054 -68.618,684.341 -67.179,683.909
+ -67.755,682.47 -70.202,678.87 -66.026,683.046 -67.179,680.022 -66.026,681.462 -64.587,681.894 -64.874,680.454 -66.603,677.573
+ -65.307,679.013 -64.587,680.454 -63.146,680.886 -61.563,680.31 -60.986,678.87 -62.427,677.286 -62.715,675.847 -61.851,677.431
+ -60.41,678.726 -58.826,678.726 -57.387,677.862 -58.971,676.997 -58.826,675.558 -57.818,676.997 -56.234,677.286
+ -54.795,676.134 -53.354,675.847 -54.219,674.403 -55.803,674.403 -55.946,673.974 -53.066,673.11 -51.626,671.524
+ -51.339,670.087 -52.202,668.646 -52.202,665.622 -51.051,668.646 -49.61,669.653 -50.33,668.214 -48.891,668.067 -49.034,666.63
+ -50.042,665.046 -50.763,662.165 -49.755,663.604 -48.171,663.462 -48.891,664.899 -46.011,664.325 -46.587,662.886
+ -45.146,664.038 -45.003,665.622 -43.563,666.341 -42.122,667.638 -40.538,667.206 -40.106,665.765 -41.402,664.325
+ -41.402,662.886 -40.683,661.444 -40.826,662.886 -40.395,664.47 -39.387,665.909 -38.811,664.47 -38.954,662.886 -39.387,661.444
+ -38.522,663.03 -38.234,664.47 -36.795,664.757 -36.507,663.173 -37.082,661.733 -36.795,660.294 -35.211,659.573 -35.066,660.005
+ -36.362,660.438 -35.931,664.757 -34.49,664.899 -34.49,666.483 -33.914,664.47 -34.923,661.444 -34.923,660.294 -34.059,662.454
+ -33.914,664.038 -33.771,662.454 -34.202,661.013 -33.482,662.454 -32.618,661.013 -32.618,662.454 -33.051,663.894
+ -32.042,662.454 -31.755,663.894 -30.314,662.886 -29.738,664.325 -28.874,662.886 -29.019,661.444 -30.171,659.718
+ -30.458,658.278 -29.307,659.718 -28.587,661.157 -27.435,662.741 -25.994,663.462 -25.563,662.022 -24.41,660.438
+ -25.274,658.997 -23.834,659.718 -22.25,658.854 -22.395,657.413 -23.402,655.974 -24.843,654.966 -25.851,653.382 -25.851,651.94
+ -24.267,651.511 -23.114,652.948 -21.53,653.813 -20.091,654.103 -19.658,655.542 -18.219,655.974 -18.219,654.532
+ -17.643,652.948 -16.635,651.511 -16.202,650.067 -16.635,648.483 -16.49,645.604 -15.051,645.173 -14.763,643.733
+ -13.755,645.173 -12.314,645.749 -11.595,647.188 -11.307,648.772 -9.723,648.341 -8.715,648.919 -7.706,647.622 -6.122,647.909
+ -5.69,646.325 -4.683,644.886 -5.114,644.597 -5.834,643.157 -4.25,642.581 -3.818,644.31 -0.795,643.157 -0.938,644.597
+ -0.65,646.038 0.789,645.749 1.365,644.31 1.798,645.749 1.077,647.333 2.661,647.622 4.102,648.483 3.958,647.046 5.397,647.909
+ 4.821,649.493 6.262,649.927 7.701,648.919 8.277,647.333 8.134,645.894 9.285,644.454 9.861,645.894 11.302,646.47
+ 14.037,643.589 15.478,644.022 14.758,642.581 14.758,640.997 16.054,642.438 16.773,644.022 17.638,644.165 18.502,645.749
+ 17.062,645.604 12.598,647.046 11.302,648.483 12.741,649.638 13.317,652.517 14.901,651.94 15.621,650.356 17.062,649.493
+ 15.621,650.935 15.046,652.374 16.485,651.798 18.069,652.374 20.949,652.229 20.661,653.671 21.094,655.11 22.533,654.821
+ 23.542,653.382 24.981,654.103 26.422,653.095 26.998,651.653 26.854,650.214 27.285,651.653 28.869,654.532 29.733,653.095
+ 30.453,654.532 31.894,654.39 33.478,654.679 34.918,653.813 37.653,650.935 36.934,652.517 38.373,652.948 39.813,652.229
+ 41.254,650.79 42.693,650.214 42.693,649.349 44.71,649.206 46.149,648.63 46.438,647.188 47.878,647.333 48.453,645.894
+ 49.894,646.325 50.47,644.886 51.909,644.454 52.63,643.013 54.069,643.444 55.51,643.444 58.533,642.87 59.974,643.589
+ 61.413,642.149 62.854,641.142 61.846,638.118 63.43,638.403 63.861,636.966 62.854,635.524 63.43,634.087 64.869,633.366
+ 64.438,634.95 64.582,636.39 64.294,637.829 65.014,639.413 66.166,640.854 64.726,641.431 64.726,642.87 66.166,643.157
+ 67.029,644.597 68.47,645.03 69.909,646.038 71.493,645.317 71.493,643.878 72.214,646.757 73.653,645.894 73.222,644.454
+ 74.661,645.462 75.67,643.733 76.678,644.165 76.533,645.604 77.542,647.188 78.981,646.614 80.422,646.47 81.43,647.909
+ 82.869,648.054 84.453,647.188 85.894,646.899 86.613,648.483 88.197,647.478 88.63,648.919 90.214,648.054 91.653,649.493
+ 93.094,649.493 94.245,648.772 97.27,650.067 98.71,648.919 100.149,649.349 101.733,648.919 103.174,647.765 104.613,647.478
+ 104.901,646.038 105.621,647.478 108.646,646.181 107.493,644.741 108.934,644.165 110.086,645.604 111.525,645.173
+ 111.382,643.589 112.821,644.454 115.701,643.589 114.981,642.005 116.422,642.581 116.998,644.022 118.438,643.733
+ 119.014,642.294 118.438,640.71 119.878,641.431 121.462,641.718 121.605,640.278 122.47,641.718 122.325,640.278 123.766,639.702
+ 126.646,640.278 127.365,639.847 128.373,640.278 129.813,639.271 128.373,638.403 126.789,638.263 123.909,636.821
+ 121.029,634.95 120.166,633.509 118.582,632.214 116.854,629.333 115.413,629.188 115.989,627.604 113.109,627.462
+ 108.646,627.894 107.493,626.454 105.909,625.878 104.47,626.165 102.598,628.47 101.157,628.325 101.302,627.751 100.582,626.597
+ 98.998,626.454 98.277,624.87 96.693,623.573 98.134,623.862 101.157,625.444 102.598,625.444 104.037,624.87 105.478,624.726
+ 108.502,625.733 109.941,624.581 109.222,623.142 107.781,622.854 106.197,622.134 103.317,621.271 101.733,620.981
+ 100.294,619.687 100.006,618.103 96.981,617.095 98.565,616.95 100.006,617.524 101.445,617.671 103.029,616.95 104.47,615.942
+ 105.766,614.356 105.046,611.478 106.485,612.63 107.926,613.062 108.502,611.622 108.789,614.501 110.373,615.079
+ 111.813,616.229 114.838,616.374 118.438,615.798 119.445,614.356 120.886,614.501 121.462,613.062 120.886,611.478
+ 120.021,610.038 118.438,609.173 116.998,608.743 115.558,607.589 114.838,606.149 113.397,604.565 110.373,604.134
+ 108.934,603.126 110.373,603.702 113.397,603.989 114.838,603.126 113.974,601.687 112.966,598.806 111.525,597.798
+ 112.533,596.214 112.533,594.772 113.397,597.653 114.838,599.095 114.838,600.679 115.701,603.702 115.558,605.142
+ 115.846,606.726 117.285,607.733 118.869,607.013 121.317,610.038 122.325,612.341 122.47,613.782 123.766,615.222
+ 125.205,615.222 124.773,616.663 125.062,621.126 124.197,622.565 123.766,624.005 123.621,625.589 123.621,627.03 124.054,628.47
+ 125.638,631.495 127.077,632.356 128.661,632.935 130.102,631.782 130.966,628.899 132.405,628.325 131.829,629.188
+ 130.966,632.214 131.254,633.653 132.693,633.366 133.413,634.806 134.854,634.806 135.718,631.927 135.285,628.899
+ 136.726,628.181 137.302,626.743 135.861,626.454 137.302,625.157 135.718,624.581 137.302,624.726 138.741,623.573
+ 138.31,622.134 139.894,621.847 140.182,618.966 138.598,618.534 137.157,618.821 136.294,620.263 136.006,618.821
+ 136.438,617.382 140.901,615.079 139.317,614.214 137.878,615.509 136.438,616.087 136.869,614.646 138.31,613.927
+ 136.869,613.638 135.285,614.214 136.294,612.772 137.733,611.765 138.453,610.181 137.157,608.743 136.726,607.157
+ 135.573,605.718 134.134,605.573 135.285,604.134 133.989,602.692 133.126,601.11 132.838,599.671 131.397,598.806
+ 129.958,599.095 128.373,599.813 126.934,600.966 128.086,599.524 128.806,598.087 127.365,596.935 130.245,598.087
+ 131.829,598.087 133.27,596.79 133.846,595.349 132.693,593.765 132.117,592.325 130.678,591.317 129.094,591.894 127.653,591.751
+ 126.214,592.47 126.502,591.03 125.062,590.454 126.502,589.733 123.478,586.997 124.918,588.149 126.502,588.294 127.222,589.878
+ 128.661,590.886 130.102,590.454 133.126,590.743 134.565,590.165 134.998,588.726 133.558,587.862 131.397,584.839
+ 129.958,584.263 128.518,584.981 127.077,583.974 125.493,583.542 124.342,584.981 124.918,583.542 124.485,582.103
+ 125.926,582.534 128.806,584.118 130.39,582.821 128.806,581.671 128.086,580.229 128.661,578.79 128.806,580.229 129.525,581.671
+ 131.109,582.39 131.397,583.974 132.838,584.692 134.277,584.263 135.718,582.966 137.302,582.821 138.741,583.11 138.886,580.229
+ 138.021,577.062 138.166,575.622 139.605,580.087 139.317,581.524 140.758,582.966 141.478,581.524 142.773,580.087
+ 144.357,579.798 144.646,581.382 146.229,582.247 147.813,585.126 149.254,586.134 150.693,585.847 149.254,586.421
+ 147.813,585.989 147.094,584.403 146.086,582.966 144.646,581.671 143.205,582.821 143.493,584.263 144.214,585.847
+ 145.653,588.726 147.094,590.022 148.245,591.604 152.71,590.31 154.149,590.31 157.174,591.462 158.758,588.87 158.901,587.286
+ 160.342,586.71 160.773,585.271 159.189,584.839 155.878,580.374 154.438,581.095 154.438,582.679 153.718,585.702
+ 153.718,584.118 154.149,582.679 154.006,581.235 153.142,579.798 155.59,576.772 154.149,575.333 155.59,575.765 157.029,575.478
+ 157.75,574.038 157.605,572.597 158.037,574.038 162.502,575.911 163.798,577.495 163.653,578.935 164.806,580.517
+ 166.245,581.095 167.829,580.374 169.126,578.935 169.27,574.47 167.686,575.188 166.245,574.47 164.806,573.03 163.365,573.03
+ 161.781,572.165 163.365,572.597 164.373,571.013 165.813,566.55 164.373,565.687 161.493,566.839 160.342,565.397
+ 160.342,563.813 161.062,565.397 162.646,566.118 164.086,565.11 165.525,565.255 166.966,565.829 166.821,564.39 166.245,562.806
+ 165.237,561.366 164.949,559.927 161.926,557.622 164.949,559.495 164.806,558.054 164.086,556.47 165.525,557.911
+ 166.102,559.495 166.102,560.935 166.966,562.374 168.405,563.382 169.989,564.103 169.413,565.974 170.854,567.126
+ 172.149,565.687 172.869,564.103 173.733,561.222 174.31,556.759 174.166,555.317 173.59,554.454 172.149,554.022 170.565,552.726
+ 169.126,552.149 167.686,551.862 166.678,550.421 168.117,551.718 169.701,551.862 172.726,553.157 175.75,552.149 175.894,550.71
+ 175.317,549.413 173.878,549.558 172.582,548.118 172.438,549.558 171.573,548.118 169.989,547.255 169.846,545.813
+ 170.565,544.374 168.981,544.229 167.542,543.509 168.981,543.942 170.565,543.798 170.134,540.774 168.55,541.782 168.55,540.341
+ 168.117,538.759 169.701,538.759 169.846,537.317 171.285,538.759 171.285,540.341 172.869,540.485 174.31,539.622 175.75,539.478
+ 172.869,537.751 174.31,538.038 175.75,538.759 175.894,537.317 177.334,537.606 178.773,538.759 179.205,538.759 180.502,539.911
+ 183.094,542.935 184.533,543.222 185.542,541.638 187.27,535.878 186.117,534.294 184.678,534.005 184.245,535.444
+ 182.806,534.726 183.094,533.286 181.653,531.989 180.214,531.413 181.653,531.413 179.062,528.39 180.646,529.687
+ 181.653,528.247 180.214,526.806 181.653,526.374 183.525,527.095 185.109,529.974 186.55,529.542 186.405,528.103
+ 185.829,526.663 184.102,525.366 183.094,523.782 182.949,522.341 181.51,521.911 178.918,525.079 178.918,526.517
+ 177.334,527.382 178.485,525.942 177.046,525.222 177.478,523.782 178.918,522.341 179.35,520.903 180.934,519.751
+ 183.237,515.286 185.542,512.403 186.117,510.966 186.262,509.526 187.701,508.517 189.142,509.235 190.006,509.095
+ 190.726,507.653 191.157,505.927 191.445,505.782 192.886,505.638 194.47,504.774 194.901,503.333 193.462,503.333
+ 192.166,504.774 193.174,503.333 194.037,500.454 195.189,498.87 195.621,497.431 197.205,495.989 198.646,496.997
+ 200.229,497.431 201.67,495.989 202.966,494.263 203.542,492.821 202.102,491.526 200.661,491.671 199.222,491.382
+ 196.485,491.958 195.478,492.966 195.334,494.694 193.894,493.397 194.613,492.103 195.189,490.663 196.63,489.509
+ 197.926,488.071 199.51,488.214 200.949,489.509 202.39,490.229 205.413,490.95 206.998,490.229 207.142,488.647 208.582,488.214
+ 209.014,486.774 205.989,484.612 204.55,485.046 203.109,484.903 201.67,483.751 200.518,482.312 198.934,482.743 197.493,482.312
+ 200.373,481.589 201.958,482.886 203.397,483.606 204.838,482.886 206.422,482.454 209.302,483.896 210.741,484.038
+ 212.037,482.454 213.621,482.599 215.205,481.733 214.63,480.294 215.062,478.71 216.502,478.854 217.941,478.567 218.949,477.126
+ 220.39,476.55 221.397,475.11 222.838,474.103 223.989,472.663 222.405,469.64 218.086,465.749 216.646,465.749 215.062,465.171
+ 212.182,466.323 211.894,467.767 210.453,467.909 209.59,469.351 208.149,470.214 206.71,468.774 205.126,468.917 203.686,469.927
+ 204.838,466.901 203.254,467.19 198.934,471.366 197.493,471.942 194.613,474.245 193.174,474.819 190.582,477.847 189.142,478.71
+ 190.006,477.126 191.445,475.976 191.878,474.534 197.926,469.206 199.222,467.767 201.813,463.304 202.821,460.421
+ 203.109,458.983 201.67,457.687 200.086,457.397 198.646,458.118 197.205,461.144 192.741,462.294 189.718,462.729
+ 188.277,463.444 187.558,461.862 188.998,461.286 190.438,461.144 193.462,460.278 195.046,459.413 195.766,457.827
+ 195.909,456.39 193.029,454.519 188.565,452.647 187.126,453.366 185.542,452.499 181.077,451.927 178.197,452.499
+ 178.773,451.065 180.214,450.054 186.838,450.341 187.558,448.901 185.974,447.462 187.558,448.323 188.134,449.767
+ 189.573,450.341 191.157,450.487 192.598,451.206 195.478,453.509 198.502,454.374 201.382,453.509 202.821,454.229
+ 204.405,454.085 205.558,452.647 206.998,452.069 208.294,450.487 207.142,447.606 205.989,446.022 204.55,446.312 204.693,444.87
+ 203.109,444.151 201.67,444.729 204.405,441.702 204.838,440.263 203.397,439.253 200.373,439.11 198.934,438.245 197.781,436.663
+ 196.342,435.511 193.317,435.655 191.878,436.085 190.438,434.935 188.854,434.358 187.413,435.077 186.405,433.495
+ 184.966,433.495 183.382,434.79 184.39,433.351 185.829,433.065 187.27,433.782 188.854,433.64 190.294,434.069 190.869,432.487
+ 191.733,433.927 193.174,434.647 196.197,434.79 197.638,435.511 199.222,436.95 200.661,437.815 202.245,438.103 203.686,437.815
+ 204.693,436.374 204.117,434.79 202.966,432.917 201.382,432.198 200.373,430.759 199.941,429.175 198.357,428.312
+ 195.478,425.573 193.894,424.995 193.029,426.581 192.741,425.144 191.302,424.421 189.861,423.126 188.277,423.271
+ 187.846,424.71 187.27,423.126 184.39,422.405 183.237,423.847 183.094,425.286 183.813,426.729 182.373,426.581 182.518,428.022
+ 179.638,427.155 178.918,430.038 178.918,427.155 177.478,425.722 177.621,422.694 177.909,421.253 176.758,418.374
+ 175.317,418.229 175.317,419.671 174.021,418.229 172.582,417.077 171.285,418.519 171.718,421.397 171.142,419.958
+ 170.134,419.671 170.565,418.085 170.277,416.647 168.838,416.79 168.55,418.229 167.974,416.79 167.542,418.229 169.846,421.253
+ 172.726,423.847 173.878,425.286 174.453,426.87 174.598,428.312 175.317,429.749 172.438,432.63 173.302,431.19 173.157,428.312
+ 172.582,426.87 171.861,428.312 170.277,429.606 171.43,428.163 172.294,425.144 170.854,423.702 169.413,422.694 168.405,421.253
+ 166.821,421.976 166.533,424.854 165.382,429.319 165.67,430.901 164.806,429.462 163.51,428.022 161.926,429.03 160.918,430.472
+ 159.478,430.901 158.325,433.927 156.741,432.774 157.317,431.331 157.462,429.897 158.325,428.454 158.325,426.87
+ 158.037,425.431 158.037,423.847 158.325,422.405 157.894,420.966 158.758,419.386 158.758,417.942 157.894,416.358
+ 156.453,415.065 152.854,419.526 151.701,423.847 150.262,422.694 149.686,421.253 148.245,424.136 148.102,425.573
+ 147.813,424.136 148.39,421.11 148.102,419.671 148.102,416.647 145.222,418.519 143.638,418.663 142.197,419.095 140.758,420.103
+ 141.766,418.663 143.205,417.798 144.789,417.222 147.67,415.065 148.966,413.622 149.829,412.183 150.405,410.599
+ 148.966,409.733 147.382,410.599 147.237,409.155 145.798,409.155 145.077,407.573 142.197,405.562 139.317,404.405
+ 138.598,407.431 137.157,408.729 136.294,410.312 136.149,411.749 134.422,414.63 133.989,416.069 134.134,414.63 135.718,411.749
+ 135.43,410.163 135.718,408.729 137.302,407.573 138.021,406.136 137.733,403.687 136.149,402.819 134.565,402.39 133.126,402.679
+ 130.821,405.562 129.382,405.987 127.941,405.847 124.918,408.151 123.478,407.573 124.054,405.987 124.197,404.554
+ 123.621,402.966 122.182,402.966 117.718,406.569 120.598,403.687 120.741,402.103 119.302,401.237 116.422,400.95
+ 114.981,401.386 113.542,400.374 109.077,399.222 107.638,399.077 106.054,398.499 104.613,398.935 102.453,401.815
+ 103.317,403.253 102.741,404.839 104.182,405.562 105.046,406.995 106.485,407.722 108.069,407.573 106.485,408.151
+ 105.046,407.722 103.605,406.854 100.582,408.438 97.701,410.454 96.117,410.89 90.214,410.454 88.773,409.733 88.773,408.294
+ 88.342,406.71 86.901,405.702 85.75,404.263 84.31,402.966 82.869,402.245 81.718,403.827 80.422,402.245 79.701,400.808
+ 79.413,400.663 78.981,400.808 77.686,399.366 76.245,399.077 75.958,397.64 73.222,394.612 71.781,394.323 70.342,394.472
+ 67.317,395.19 65.878,395.767 65.59,397.206 64.149,397.927 63.573,399.511 63.573,400.95 62.422,402.39 63.142,403.976
+ 64.582,404.405 65.014,405.847 64.726,405.987 63.285,404.983 61.701,404.405 61.701,405.847 64.149,408.007 62.565,407.862
+ 61.558,407.144 60.262,407.573 59.974,410.454 61.126,411.897 62.71,411.897 61.846,413.331 62.71,414.917 64.006,416.358
+ 65.445,416.499 67.029,417.222 66.31,418.808 65.302,420.245 63.861,421.11 63.142,419.671 61.701,420.39 61.27,421.976
+ 61.126,420.39 61.701,418.95 61.413,417.511 59.974,414.487 58.533,413.046 57.094,412.759 57.525,415.782 58.39,417.222
+ 58.39,420.245 59.542,421.687 58.102,420.245 57.958,417.222 56.949,415.782 56.518,414.343 55.798,409.304 54.934,407.862
+ 53.35,407.286 52.773,405.847 51.189,405.413 49.75,406.854 50.037,408.294 48.453,408.438 48.166,410.022 49.605,410.741
+ 51.189,411.175 52.63,412.183 51.189,411.606 49.75,411.462 48.453,411.897 48.021,414.917 48.31,416.358 48.886,417.798
+ 50.037,419.386 48.453,420.103 46.869,417.077 45.285,416.935 43.989,415.351 42.55,416.214 42.262,417.798 41.397,419.237
+ 41.254,420.679 40.102,421.827 40.678,426.729 40.966,429.606 43.701,425.144 45.142,426.007 43.989,427.591 43.701,429.03
+ 45.142,428.599 46.582,429.319 47.157,430.759 45.718,430.759 44.134,431.479 45.142,432.917 46.726,432.63 46.006,434.069
+ 47.014,433.495 47.733,434.935 50.613,434.935 49.174,435.942 48.166,437.382 52.485,438.245 52.63,439.687 52.342,441.271
+ 53.205,442.71 53.062,445.589 53.638,447.171 53.638,448.612 52.054,450.054 53.493,451.206 53.205,452.647 52.63,453.077
+ 53.205,454.519 51.766,454.519 53.205,455.958 51.766,456.966 51.478,458.405 52.918,459.987 51.478,461.431 50.758,462.87
+ 49.317,463.304 47.733,462.438 47.878,463.878 46.438,465.171 46.582,466.612 45.142,466.612 44.565,468.054 44.71,469.495
+ 44.277,471.366 44.422,472.808 42.981,473.815 42.405,475.253 42.405,476.694 41.829,478.278 40.39,478.71 40.102,480.149
+ 38.518,478.997 38.229,480.438 36.789,479.862 33.766,478.136 34.63,479.573 36.069,480.728 37.51,481.157 36.069,482.022
+ 34.342,485.046 34.342,486.485 32.901,486.341 32.037,487.782 30.453,487.495 29.014,493.542 28.726,493.687 27.285,493.11
+ 26.71,494.55 25.126,494.403 23.686,493.687 23.974,496.567 24.838,498.005 23.829,499.589 22.39,500.165 21.525,501.606
+ 20.086,501.173 18.502,501.462 18.357,502.903 19.51,504.341 17.926,502.903 16.773,500.022 15.189,499.878 15.334,501.317
+ 16.197,502.759 16.485,504.198 13.605,504.485 9.142,504.341 9.285,505.782 10.149,507.366 11.59,507.798 14.47,507.509
+ 13.029,508.229 11.445,508.229 10.006,507.942 8.565,506.501 7.126,506.646 5.686,506.071 4.102,506.071 3.813,507.509
+ 2.518,508.95 1.941,510.39 2.518,511.974 3.525,510.534 3.525,511.974 2.949,513.413 4.245,514.997 5.686,516.005 7.27,516.581
+ 8.71,515.431 10.006,513.989 10.149,515.431 11.59,514.854 13.029,514.997 14.47,513.847 15.766,512.403 16.197,510.821
+ 18.502,507.942 19.941,509.382 18.502,508.95 17.062,510.39 16.054,513.271 14.613,514.567 14.182,516.005 15.766,515.862
+ 17.205,516.149 15.621,517.013 14.182,516.87 12.741,517.444 13.75,519.03 13.605,520.47 14.47,521.911 17.35,523.638
+ 15.909,523.927 12.886,521.478 11.302,520.903 9.861,521.765 10.582,523.349 13.605,524.646 15.046,525.509 15.766,526.95
+ 12.741,524.935 11.302,524.501 9.861,525.366 8.422,524.79 8.998,526.229 10.438,526.517 12.021,526.517 12.886,527.958
+ 9.861,526.806 8.422,526.806 10.149,529.687 11.59,530.694 10.149,530.55 10.294,531.989 11.302,533.431 9.861,533.142
+ 8.998,530.263 7.846,531.702 8.422,533.142 8.854,537.606 7.989,536.022 7.701,534.581 6.117,534.005 6.117,535.444 7.558,535.444
+ 7.126,536.886 7.558,538.47 5.974,537.317 6.117,538.759 4.966,537.317 4.39,538.759 4.245,540.341 5.829,540.054 4.39,540.919
+ 2.806,539.911 2.518,538.47 1.798,537.03 1.653,534.005 1.941,532.567 1.941,529.542 0.934,526.517 -0.507,525.079 -1.37,522.198
+ -2.811,520.903 -4.25,520.612 -5.69,522.054 -5.979,523.638 -6.698,525.079 -6.843,526.663 -6.267,528.103 -5.259,529.687
+ -4.826,532.71 -4.826,534.149 -5.834,537.173 -3.099,541.927 -1.515,542.214 -1.658,543.653 -2.234,542.935 -1.658,544.374
+ -0.65,544.95 0.789,545.235 1.365,546.821 -1.227,546.247 -0.795,547.687 -2.234,549.126 -3.675,547.687 -5.114,547.974
+ -4.826,549.558 -5.979,548.118 -7.418,548.981 -6.698,550.421 -5.402,552.005 -6.986,551.286 -7.851,549.702 -9.435,550.854
+ -10.874,551.286 -12.314,551.142 -11.45,552.581 -9.866,553.444 -8.427,553.157 -9.866,554.31 -8.715,555.751 -10.154,555.751
+ -11.738,555.173 -11.738,556.759 -13.179,556.47 -12.458,555.03 -13.467,553.589 -12.026,553.733 -13.179,552.149 -14.618,553.013
+ -16.059,554.454 -15.771,554.597 -17.354,554.597 -17.643,556.181 -16.202,557.046 -17.643,556.47 -18.795,557.911 -18.507,556.47
+ -19.946,557.333 -21.387,556.612 -22.826,555.173 -22.971,553.733 -24.41,552.726 -25.563,551.286 -27.003,551.862
+ -28.587,550.997 -30.026,550.854 -31.467,550.134 -30.171,551.573 -28.587,552.581 -30.026,552.438 -29.738,554.022
+ -29.45,555.462 -28.011,556.325 -24.986,559.062 -23.547,558.919 -23.69,557.478 -22.25,558.774 -20.811,559.638 -22.25,558.919
+ -23.69,560.071 -25.131,559.782 -25.131,561.222 -26.139,559.782 -25.851,561.222 -25.994,562.806 -24.843,568.567
+ -26.282,565.687 -26.858,562.806 -30.026,558.341 -30.603,555.317 -31.322,553.878 -31.898,555.317 -33.051,550.997
+ -33.771,552.438 -33.914,555.317 -32.33,558.198 -33.482,556.759 -34.059,555.317 -34.059,553.878 -35.498,552.726
+ -34.635,554.165 -36.074,553.157 -36.219,554.597 -37.658,554.022 -39.242,552.581 -40.538,554.022 -42.122,554.165
+ -43.563,554.886 -41.979,556.038 -40.538,556.325 -37.515,556.47 -36.074,557.622 -34.635,558.341 -33.051,558.774
+ -31.755,560.214 -30.171,560.79 -31.755,560.646 -33.051,559.206 -34.49,559.638 -33.914,561.079 -32.475,562.374 -31.898,563.958
+ -30.458,564.103 -30.171,562.517 -28.73,562.95 -27.29,563.813 -28.73,564.103 -30.171,564.966 -29.162,566.403 -26.282,567.413
+ -26.139,568.854 -27.723,567.413 -29.162,567.126 -30.603,566.403 -31.467,567.989 -30.026,568.997 -27.003,570.294
+ -26.57,571.733 -26.858,572.022 -27.146,570.581 -28.587,569.718 -30.171,569.142 -31.61,569.431 -31.322,570.87 -30.458,572.454
+ -31.755,570.87 -32.33,566.403 -33.194,564.966 -34.635,563.813 -34.635,562.374 -35.354,559.349 -36.795,558.054 -38.234,556.903
+ -41.259,556.903 -44.139,555.751 -45.723,555.751 -47.162,556.47 -47.307,557.911 -44.427,559.206 -43.851,560.646
+ -39.387,563.958 -38.954,565.397 -37.658,566.839 -34.778,568.997 -36.219,568.278 -37.658,569.286 -38.234,570.87 -37.658,572.31
+ -34.778,574.038 -37.658,572.597 -38.666,571.157 -37.515,568.134 -40.538,563.671 -45.003,560.358 -46.299,558.919
+ -49.322,557.478 -49.179,558.919 -47.738,560.501 -49.179,559.638 -49.322,561.079 -48.458,562.517 -50.763,559.495
+ -51.339,560.935 -48.891,563.958 -48.314,565.397 -46.73,566.694 -45.723,568.134 -47.162,569.142 -47.45,567.558 -48.458,566.118
+ -50.042,564.966 -49.322,566.55 -50.763,566.118 -49.755,567.558 -51.339,567.271 -52.347,565.687 -53.786,564.821
+ -54.362,566.263 -51.339,570.726 -52.635,569.142 -54.074,568.134 -56.234,565.11 -59.259,566.981 -58.683,568.567
+ -57.099,570.005 -60.122,568.278 -61.274,568.71 -60.555,570.149 -58.971,571.013 -57.53,571.444 -53.066,571.878 -50.187,573.03
+ -48.603,572.597 -47.162,572.597 -45.723,573.173 -44.282,573.173 -39.675,574.47 -36.795,576.054 -35.786,578.935
+ -37.803,576.054 -39.242,575.188 -40.683,575.046 -40.538,576.483 -39.387,577.927 -40.826,576.772 -41.402,575.333
+ -42.843,574.181 -45.723,573.894 -47.307,573.317 -48.746,573.173 -50.187,573.894 -51.626,573.03 -54.507,572.022
+ -56.091,572.165 -57.53,571.878 -60.41,570.726 -60.698,572.165 -62.139,571.157 -61.994,572.743 -60.555,573.173 -62.139,572.886
+ -61.851,574.325 -58.971,575.622 -59.402,577.206 -55.082,578.935 -55.515,580.517 -55.946,578.935 -57.387,578.356
+ -58.971,578.79 -59.69,577.206 -59.834,575.765 -62.715,574.612 -64.299,574.612 -62.858,575.622 -64.299,575.333 -64.442,576.772
+ -63.003,577.495 -62.57,578.935 -64.011,578.501 -65.45,579.079 -64.011,579.653 -62.57,579.509 -65.45,580.663 -66.026,582.103
+ -63.146,582.966 -61.706,583.687 -60.41,582.103 -55.946,584.55 -54.507,587.573 -53.643,588.294 -54.795,588.87 -54.795,587.431
+ -55.515,585.989 -56.954,584.403 -58.395,583.542 -59.979,583.11 -61.418,584.118 -64.299,583.255 -65.883,582.534
+ -67.322,582.534 -67.61,583.974 -66.171,584.839 -67.61,585.126 -66.171,585.702 -67.755,585.847 -69.051,587.286 -69.771,588.726
+ -71.211,589.013 -71.498,590.454 -70.059,590.743 -68.618,590.454 -67.034,590.454 -67.755,591.894 -66.171,592.612
+ -69.194,592.038 -70.635,591.173 -72.074,591.462 -73.658,591.03 -74.954,592.47 -76.395,593.622 -78.986,596.646 -77.402,597.366
+ -72.938,596.646 -71.498,595.927 -70.059,595.782 -68.618,596.214 -70.059,596.935 -67.179,598.087 -65.738,597.942
+ -64.154,596.646 -64.154,595.206 -63.146,593.765 -61.706,592.47 -61.274,593.911 -62.858,594.919 -65.307,599.235
+ -64.442,600.679 -63.003,600.534 -61.563,601.11 -62.715,600.966 -64.154,601.397 -63.578,602.839 -65.45,603.413 -66.026,604.854
+ -65.738,607.733 -66.746,606.294 -66.891,604.134 -65.45,600.966 -66.314,599.524 -67.755,598.95 -68.042,600.39 -67.61,601.829
+ -69.051,601.542 -69.051,602.981 -67.61,603.847 -69.051,604.134 -70.635,601.255 -72.074,600.966 -74.954,601.542
+ -77.114,598.663 -76.683,600.103 -78.122,599.382 -77.834,600.821 -74.811,603.271 -71.931,604.278 -70.49,604.278
+ -71.931,604.854 -70.635,606.294 -70.059,607.733 -72.938,605.286 -75.963,603.413 -77.259,601.974 -78.698,601.11
+ -78.986,600.679 -78.986,602.118 -80.427,603.413 -78.986,604.565 -77.547,605.142 -80.57,604.854 -82.011,603.702
+ -84.603,606.726 -83.883,608.165 -82.442,607.013 -81.146,608.454 -79.563,609.604 -81.003,609.03 -82.154,607.444
+ -82.874,608.886 -81.435,610.038 -82.874,609.604 -84.458,608.743 -85.034,610.181 -83.595,611.478 -82.442,612.919
+ -81.003,613.927 -82.442,613.495 -85.179,610.612 -86.618,611.478 -85.61,612.919 -87.051,613.206 -85.467,613.927
+ -84.891,614.935 -86.187,615.366 -84.746,615.222 -84.603,615.509 -83.162,616.087 -82.011,617.524 -83.45,616.517
+ -86.475,616.087 -87.482,617.524 -86.042,618.821 -87.482,619.255 -88.923,620.263 -86.042,619.687 -84.603,620.55
+ -83.162,620.839 -86.475,620.403 -87.914,620.692 -89.354,621.847 -87.914,621.702 -86.475,621.989 -86.763,622.278
+ -88.202,622.565 -89.643,622.421 -91.082,623.142 -92.234,624.581 -92.954,627.462 -91.082,631.206 -92.522,631.638
+ -91.082,633.222 -92.666,633.079 -93.963,631.638 -93.099,633.079 -94.538,633.366 -92.954,633.509 -92.811,634.95 -91.37,634.95
+ -89.931,635.382 -90.219,636.821 -93.099,635.382 -94.538,635.235 -94.826,636.679 -96.267,638.118 -94.826,637.397
+ -91.946,637.11 -90.507,638.263 -91.946,637.829 -94.826,638.55 -94.25,639.989 -95.69,639.702 -95.979,641.142 -94.538,642.581
+ -95.979,641.573 -96.843,640.134 -98.282,639.702 -98.139,641.286 -97.274,642.726 -92.811,645.03 -94.395,645.173
+ -97.274,643.157 -98.858,642.87 -97.851,644.31 -96.41,644.741 -96.267,646.325 -96.555,647.765 -97.994,647.188 -98.57,648.63
+ -97.131,649.062 -98.57,649.78 -95.69,649.206 -94.106,650.067 -95.69,649.927 -97.131,650.503 -97.274,651.94 -95.69,652.806
+ -97.131,653.382 -100.154,651.364 -98.858,652.806 -97.418,653.671 -96.41,655.11 -99.29,654.103 -100.874,654.532 -99.29,655.255
+ -98.715,656.694 -97.274,658.134 -95.834,658.565 -98.715,655.687 -95.69,657.413 -95.259,658.854 -93.818,659.142
+ -93.242,660.581 "/>
+ <polyline id="polyline1001" fill="#99D6AA" points="-98.715,645.749 -98.715,645.317 -100.154,644.886 -98.715,645.749 "/>
+ <polyline id="polyline1003" fill="#7FC643" points="-98.139,522.054 -98.139,521.478 -99.578,521.765 -99.578,523.206
+ -98.139,522.054 "/>
+ <polyline id="polyline1005" fill="#7FC643" points="-97.851,224.694 -97.851,223.4 -99.29,223.83 -97.851,224.694 "/>
+ <polyline id="polyline1007" fill="#7FC643" points="-98.139,386.839 -97.851,386.839 -98.282,385.397 -98.139,386.839 "/>
+ <polyline id="polyline1009" fill="#7FC643" points="-97.563,297.558 -97.274,299.142 -95.834,300.582 -95.259,302.022
+ -93.818,302.454 -92.954,305.478 -91.515,306.054 -91.515,304.614 -90.938,303.174 -88.059,302.166 -86.618,302.166
+ -88.059,301.158 -86.618,300.726 -85.179,301.014 -83.595,300.726 -79.274,296.694 -77.834,296.118 -78.267,294.678
+ -76.826,295.253 -73.803,292.806 -73.946,291.366 -75.387,289.926 -76.826,289.494 -78.267,289.782 -79.851,290.501
+ -78.41,289.062 -78.41,287.622 -79.851,287.333 -81.29,288.054 -82.442,286.614 -83.883,286.038 -84.314,284.598 -84.026,281.574
+ -85.467,280.566 -88.49,281.718 -88.923,283.302 -87.914,284.742 -89.354,284.31 -90.362,285.75 -89.354,287.333 -90.938,287.622
+ -92.379,288.342 -92.954,289.782 -94.395,291.222 -95.259,292.662 -96.267,295.686 -97.563,297.558 "/>
+ <polyline id="polyline1011" fill="#7FC643" points="-94.971,404.554 -95.979,404.263 -97.418,404.694 -96.843,406.136
+ -95.259,406.136 -94.971,404.554 "/>
+ <polyline id="polyline1013" fill="#7FC643" points="-94.826,224.984 -94.538,224.118 -95.979,223.974 -97.418,223.4
+ -96.41,224.838 -94.826,224.984 "/>
+ <polyline id="polyline1015" fill="#7FC643" points="-92.379,438.819 -92.379,435.798 -91.082,434.358 -92.522,433.782
+ -93.099,432.343 -94.683,432.058 -96.122,433.206 -97.131,434.647 -97.131,436.085 -96.41,437.671 -95.979,440.55 -94.395,441.413
+ -92.954,440.405 -92.091,438.966 -92.379,438.819 "/>
+ <polyline id="polyline1017" fill="#7FC643" points="-95.547,275.814 -95.547,275.526 -96.986,275.381 -95.547,275.814 "/>
+ <polyline id="polyline1019" fill="#7FC643" points="-94.395,337.591 -95.259,337.591 -93.675,338.599 -93.963,337.591
+ -94.395,337.591 "/>
+ <polyline id="polyline1021" fill="#7FC643" points="-92.666,249.174 -92.666,248.742 -94.106,248.31 -92.666,249.174 "/>
+ <polyline id="polyline1023" fill="#99D6AA" points="-89.354,665.333 -89.354,664.325 -90.795,663.749 -92.234,663.462
+ -93.818,663.604 -92.379,664.325 -90.795,664.612 -89.354,665.333 "/>
+ <polyline id="polyline1025" fill="#7FC643" points="-93.242,406.136 -92.954,406.569 -89.931,406.854 -90.219,405.413
+ -91.803,405.562 -93.242,406.136 "/>
+ <polyline id="polyline1027" fill="#99D6AA" points="-91.082,666.194 -91.082,665.909 -92.522,665.909 -91.082,666.194 "/>
+ <polyline id="polyline1029" fill="#99D6AA" points="-89.066,677.286 -89.354,676.71 -90.938,676.71 -92.091,678.149
+ -90.507,678.294 -89.066,677.286 "/>
+ <polyline id="polyline1031" fill="#99D6AA" points="-89.498,670.374 -89.498,670.087 -90.938,669.798 -89.498,670.374 "/>
+ <polyline id="polyline1033" fill="#7FC643" points="-90.074,225.99 -89.786,226.133 -90.795,224.549 -90.074,225.99 "/>
+ <polyline id="polyline1035" fill="#7FC643" points="-87.339,267.318 -86.187,266.022 -87.339,264.582 -87.914,263.142
+ -89.354,264.438 -90.362,265.877 -88.923,267.03 -87.339,267.318 "/>
+ <polyline id="polyline1037" fill="#7FC643" points="-85.322,276.102 -85.034,275.958 -85.898,274.518 -87.339,273.942
+ -88.778,273.654 -89.643,275.094 -88.202,276.39 -86.763,276.822 -85.322,276.102 "/>
+ <polyline id="polyline1039" fill="#7FC643" points="-89.498,429.319 -88.49,430.038 -87.051,430.038 -85.755,428.599
+ -84.171,427.591 -84.746,426.007 -86.187,425.862 -87.626,426.294 -88.347,427.733 -89.498,429.319 "/>
+ <polyline id="polyline1041" fill="#7FC643" points="-87.914,220.806 -87.914,219.366 -89.354,220.806 -87.914,220.806 "/>
+ <polyline id="polyline1043" fill="#99D6AA" points="-86.187,688.374 -87.194,686.935 -87.914,686.79 -89.354,687.222
+ -86.33,688.517 -86.187,688.374 "/>
+ <polyline id="polyline1045" fill="#7FC643" points="-86.33,248.886 -86.042,248.454 -85.755,246.87 -87.194,246.87
+ -88.778,247.877 -89.211,249.461 -87.771,249.894 -86.33,248.886 "/>
+ <polyline id="polyline1047" fill="#99D6AA" points="-87.914,691.397 -85.61,692.118 -85.61,690.679 -86.042,689.235
+ -87.482,689.095 -89.066,689.813 -87.914,691.397 "/>
+ <polyline id="polyline1049" fill="#7FC643" points="-86.475,432.63 -86.618,432.487 -88.059,433.206 -88.923,434.647
+ -87.482,434.214 -86.475,432.63 "/>
+ <polyline id="polyline1051" fill="#99D6AA" points="-87.194,678.149 -87.194,677.573 -88.635,678.438 -87.194,678.149 "/>
+ <polyline id="polyline1053" fill="#7FC643" points="-84.171,336.581 -84.026,335.573 -85.61,334.854 -87.051,335.718
+ -84.171,336.581 "/>
+ <polyline id="polyline1055" fill="#7FC643" points="-77.69,405.126 -79.131,403.827 -82.154,403.542 -83.162,402.103
+ -84.603,401.526 -86.187,401.095 -87.051,402.534 -86.042,403.976 -84.603,404.839 -81.578,405.562 -80.139,406.421
+ -78.555,406.569 -77.69,405.126 "/>
+ <polyline id="polyline1057" fill="#7FC643" points="-85.467,246.006 -85.322,245.286 -86.906,246.293 -85.467,246.006 "/>
+ <polyline id="polyline1059" fill="#7FC643" points="-85.034,218.501 -85.179,218.07 -86.618,218.934 -85.034,218.501 "/>
+ <polyline id="polyline1061" fill="#7FC643" points="-86.187,277.974 -85.034,278.118 -83.595,277.398 -85.034,276.678
+ -86.475,277.83 -86.187,277.974 "/>
+ <polyline id="polyline1063" fill="#99D6AA" points="-85.61,685.349 -86.33,685.493 -86.187,686.935 -85.61,685.349 "/>
+ <polyline id="polyline1065" fill="#99D6AA" points="-81.578,692.839 -81.146,693.271 -80.282,692.839 -84.026,686.935
+ -85.61,686.214 -85.322,687.798 -84.314,689.235 -85.755,688.806 -84.603,691.687 -83.162,691.255 -82.154,691.255
+ -81.578,692.839 "/>
+ <polyline id="polyline1067" fill="#7FC643" points="-83.883,429.175 -85.467,429.175 -84.746,430.612 -83.883,429.175 "/>
+ <polyline id="polyline1069" fill="#7FC643" points="-84.458,209.574 -84.171,209.574 -85.179,208.133 -84.458,209.574 "/>
+ <polyline id="polyline1071" fill="#7FC643" points="-68.763,275.526 -65.738,275.669 -66.314,272.79 -64.874,272.358
+ -63.29,272.501 -63.578,271.062 -62.139,270.198 -59.259,267.75 -56.234,266.598 -57.675,265.734 -56.522,264.293 -54.938,262.998
+ -52.059,261.558 -50.475,261.414 -47.307,259.542 -45.723,260.549 -44.282,261.125 -42.843,262.278 -39.818,262.854
+ -35.354,262.278 -33.771,261.846 -32.33,261.99 -30.891,261.702 -29.45,262.421 -24.986,261.846 -23.547,262.566 -20.522,262.134
+ -20.234,262.421 -18.795,262.854 -14.33,261.558 -12.891,260.118 -11.307,259.686 -9.866,258.678 -9.146,257.669 -10.587,257.094
+ -7.706,254.213 -7.418,252.629 -8.858,252.774 -9.29,251.19 -10.73,250.902 -12.314,250.902 -12.746,250.614 -15.626,250.326
+ -16.49,250.038 -20.954,249.75 -23.979,248.742 -25.418,248.598 -26.858,248.886 -28.299,248.598 -29.738,249.174 -31.322,248.742
+ -32.33,247.158 -34.059,245.718 -31.179,244.278 -29.595,244.566 -28.154,245.43 -27.29,244.566 -25.851,245.142 -24.41,244.854
+ -21.387,245.142 -18.362,246.438 -17.498,244.998 -16.059,245.574 -14.618,245.142 -12.746,243.558 -11.162,243.702
+ -9.723,242.549 -8.427,240.822 -7.994,239.238 -9.435,238.95 -10.73,239.238 -13.034,240.965 -14.618,241.398 -13.755,240.822
+ -13.755,239.381 -15.051,240.39 -16.49,240.534 -16.635,239.814 -17.498,239.381 -16.059,238.662 -15.914,237.222 -17.498,237.797
+ -15.914,236.79 -14.475,236.934 -15.771,235.494 -16.49,233.91 -17.931,233.766 -16.49,232.614 -17.066,231.03 -18.219,229.59
+ -16.778,230.454 -15.339,230.454 -15.051,232.038 -12.314,234.917 -11.45,235.206 -10.011,234.486 -4.106,229.446 -3.675,228.006
+ -4.538,226.568 -6.267,224.549 -7.706,224.984 -8.282,223.542 -7.131,221.958 -7.418,220.518 -7.274,218.934 -6.555,219.078
+ -6.267,220.518 -4.683,221.816 -4.826,223.254 -1.946,224.118 -0.507,225.27 0.934,225.702 2.518,225.558 3.958,225.125
+ 4.821,223.686 4.245,218.934 4.39,217.494 4.102,213.03 3.67,211.59 3.813,208.709 2.806,207.27 1.941,204.246 0.789,201.366
+ -0.507,199.926 -1.946,200.213 -3.387,200.934 -4.106,199.494 -3.818,198.054 -5.114,196.47 -5.547,195.03 -6.555,193.59
+ -7.994,192.438 -9.435,191.862 -11.019,191.862 -10.73,193.301 -12.314,194.598 -12.458,196.182 -12.891,197.622 -14.33,197.192
+ -14.33,194.166 -15.914,193.59 -17.786,196.47 -16.347,197.045 -17.786,197.48 -18.795,200.501 -19.515,206.406 -21.099,207.414
+ -21.387,208.854 -21.818,207.414 -20.379,206.118 -20.379,204.534 -21.818,205.254 -21.818,203.816 -21.099,202.374
+ -20.954,199.35 -21.242,199.35 -20.234,193.301 -20.811,190.422 -22.25,189.414 -23.834,189.558 -26.715,190.709 -28.299,190.422
+ -29.019,191.862 -30.171,193.301 -30.891,194.886 -31.179,196.326 -31.898,197.766 -33.339,199.35 -34.202,200.79 -35.643,205.254
+ -35.643,206.694 -36.219,208.278 -36.074,209.717 -37.515,210.726 -38.379,212.31 -39.818,213.318 -40.826,214.902 -43.851,217.35
+ -45.29,217.494 -46.442,219.366 -47.307,217.926 -46.299,214.902 -46.154,213.461 -45.435,212.024 -43.418,209.142
+ -42.843,207.558 -40.826,204.534 -39.242,198.629 -38.666,197.192 -37.946,192.726 -37.227,189.846 -37.37,188.406
+ -37.946,186.965 -42.267,186.246 -43.851,186.965 -45.29,186.678 -46.73,187.83 -48.314,187.11 -52.778,190.568 -53.931,192.006
+ -54.795,193.59 -55.803,196.47 -56.091,198.054 -57.53,199.494 -58.826,201.078 -61.706,200.358 -64.73,198.629 -67.755,198.776
+ -69.194,199.206 -70.635,200.07 -70.49,198.629 -72.219,201.654 -72.219,203.238 -72.507,204.678 -73.082,206.118 -73.803,209.142
+ -74.811,210.582 -74.091,212.024 -74.954,213.608 -74.811,215.045 -75.53,216.486 -76.25,219.654 -76.25,224.118 -75.242,226.998
+ -73.946,228.582 -75.242,231.461 -75.242,234.486 -74.522,235.926 -73.227,237.51 -69.051,241.542 -70.49,242.838 -71.931,242.694
+ -73.37,241.686 -74.811,242.406 -75.387,243.99 -75.387,245.43 -76.971,246.582 -77.69,248.022 -77.979,249.461 -79.131,248.022
+ -80.57,247.59 -82.011,250.614 -81.29,252.054 -82.73,253.494 -84.026,256.518 -84.314,257.958 -85.034,259.398 -84.746,262.566
+ -83.595,264.006 -83.883,266.886 -80.858,268.326 -79.418,267.606 -80.282,266.166 -78.698,266.022 -77.69,267.461 -76.106,267.75
+ -75.099,266.31 -75.963,264.726 -76.395,263.286 -77.402,261.846 -78.986,260.694 -77.547,261.414 -74.522,262.134 -71.498,259.83
+ -70.635,261.27 -72.219,261.846 -73.658,263.286 -74.091,264.726 -72.65,265.59 -71.066,265.158 -70.635,266.598 -69.194,267.75
+ -72.074,269.91 -71.643,271.494 -70.059,272.213 -71.643,272.07 -73.082,272.358 -74.234,273.797 -72.65,275.094 -71.211,275.381
+ -69.626,275.238 -68.763,275.526 "/>
+ <polyline id="polyline1073" fill="#7FC643" points="-84.171,215.192 -83.595,215.333 -84.314,213.75 -84.171,215.192 "/>
+ <polyline id="polyline1075" fill="#7FC643" points="-80.139,305.766 -79.131,304.758 -79.563,303.174 -81.146,302.598
+ -82.587,303.318 -81.146,304.614 -84.026,304.47 -83.162,305.91 -81.723,306.198 -80.139,305.766 "/>
+ <polyline id="polyline1077" fill="#99D6AA" points="-83.019,691.397 -83.738,692.263 -82.299,692.263 -83.019,691.397 "/>
+ <polyline id="polyline1079" fill="#7FC643" points="-82.73,218.501 -82.442,218.501 -83.595,216.917 -82.73,218.501 "/>
+ <polyline id="polyline1081" fill="#7FC643" points="-80.139,301.877 -79.851,301.877 -79.706,300.293 -79.994,298.854
+ -83.019,301.446 -81.578,302.022 -80.139,301.877 "/>
+ <polyline id="polyline1083" fill="#7FC643" points="-80.858,269.766 -80.858,268.614 -82.299,269.19 -80.858,269.766 "/>
+ <polyline id="polyline1085" fill="#7FC643" points="-81.003,508.374 -81.003,509.526 -79.563,509.813 -78.122,509.526
+ -81.003,508.374 "/>
+ <polyline id="polyline1087" fill="#7FC643" points="-75.242,412.612 -75.963,411.606 -78.986,411.897 -80.427,413.479
+ -80.139,414.917 -78.698,414.487 -77.259,415.206 -75.675,415.495 -75.675,414.058 -75.242,412.612 "/>
+ <polyline id="polyline1089" fill="#7FC643" points="-79.706,503.622 -78.843,503.622 -78.843,502.038 -80.282,502.038
+ -79.706,503.622 "/>
+ <polyline id="polyline1091" fill="#7FC643" points="-79.131,194.886 -78.698,194.886 -78.555,193.446 -79.131,194.886 "/>
+ <polyline id="polyline1093" fill="#7FC643" points="-77.547,207.414 -77.259,207.558 -78.267,205.974 -77.547,207.414 "/>
+ <polyline id="polyline1095" fill="#7FC643" points="-76.538,273.366 -75.963,273.366 -75.099,271.926 -77.979,272.79
+ -76.538,273.366 "/>
+ <polyline id="polyline1097" fill="#7FC643" points="-77.834,190.568 -77.547,190.568 -76.826,189.125 -77.834,190.568 "/>
+ <polyline id="polyline1099" fill="#7FC643" points="-76.538,395.622 -75.387,395.479 -75.675,396.917 -74.811,398.358
+ -73.37,398.935 -72.507,397.351 -73.658,395.909 -73.946,395.19 -73.082,393.749 -73.515,392.312 -75.099,393.03 -74.379,391.591
+ -77.259,394.472 -77.834,395.909 -76.538,395.622 "/>
+ <polyline id="polyline1101" fill="#7FC643" points="-75.675,498.294 -75.963,497.862 -77.402,498.294 -76.538,499.733
+ -75.675,498.294 "/>
+ <polyline id="polyline1103" fill="#7FC643" points="-71.786,405.702 -73.227,405.271 -73.658,403.827 -76.683,402.39
+ -75.242,405.413 -73.658,406.854 -72.219,406.71 -71.786,405.702 "/>
+ <polyline id="polyline1105" fill="#7FC643" points="-76.395,213.174 -75.387,213.174 -76.106,211.734 -76.395,213.174 "/>
+ <polyline id="polyline1107" fill="#99D6AA" points="-69.482,600.103 -69.482,599.382 -71.066,598.95 -72.507,599.382
+ -73.946,600.39 -75.387,600.679 -69.482,600.103 "/>
+ <polyline id="polyline1109" fill="#7FC643" points="-74.522,481.015 -73.227,480.581 -74.666,479.573 -74.522,481.015 "/>
+ <polyline id="polyline1111" fill="#7FC643" points="-74.234,354.581 -74.666,356.599 -74.091,357.749 -72.507,357.175
+ -72.65,355.733 -71.786,354.151 -72.507,352.71 -74.234,353.862 -74.234,354.581 "/>
+ <polyline id="polyline1113" fill="#99D6AA" points="-70.49,598.229 -70.635,597.798 -72.074,597.509 -73.515,598.806
+ -71.931,598.663 -70.49,598.229 "/>
+ <polyline id="polyline1115" fill="#7FC643" points="-69.626,465.03 -70.059,465.03 -69.914,467.909 -69.482,469.495
+ -69.626,465.03 "/>
+ <polyline id="polyline1117" fill="#99D6AA" points="-70.059,684.341 -70.059,684.772 -68.618,685.493 -70.059,684.341 "/>
+ <polyline id="polyline1119" fill="#99D6AA" points="-67.467,579.509 -67.179,579.366 -67.467,577.927 -67.467,579.509 "/>
+ <polyline id="polyline1121" fill="#99D6AA" points="-66.603,576.483 -66.171,577.782 -64.73,577.927 -65.162,576.483
+ -66.603,576.483 "/>
+ <polyline id="polyline1123" fill="#7FC643" points="-58.683,280.278 -59.402,278.837 -60.986,279.414 -61.706,280.854
+ -60.122,281.286 -58.683,280.278 "/>
+ <polyline id="polyline1125" fill="#7FC643" points="-55.658,463.015 -56.379,461.718 -57.818,462.003 -56.522,463.444
+ -55.658,463.015 -55.658,463.155 -55.082,462.729 -55.658,463.015 "/>
+ <polyline id="polyline1127" fill="#7FC643" points="-55.803,465.749 -56.091,465.319 -57.53,464.454 -57.242,466.038
+ -55.803,465.749 "/>
+ <polyline id="polyline1129" fill="#99D6AA" points="-56.522,677.718 -56.522,678.005 -54.938,677.142 -56.522,677.718 "/>
+ <polyline id="polyline1131" fill="#7FC643" points="-17.643,287.333 -19.082,286.902 -19.37,288.342 -20.811,288.342
+ -22.25,288.917 -23.402,287.333 -21.963,287.19 -24.986,287.19 -25.274,285.606 -24.843,284.598 -25.563,283.158 -21.099,280.709
+ -19.658,280.421 -18.507,278.982 -18.938,277.542 -21.818,275.814 -23.259,275.381 -24.843,275.669 -26.282,276.534
+ -27.723,277.83 -29.162,278.262 -30.171,278.118 -31.61,279.558 -31.322,281.142 -32.763,282.15 -34.059,283.59 -38.522,285.318
+ -41.402,287.045 -42.843,287.622 -44.427,287.622 -45.866,288.342 -48.746,288.629 -48.603,290.07 -50.042,290.646 -50.33,292.23
+ -47.595,294.965 -46.011,294.822 -44.57,293.814 -43.131,293.526 -41.547,294.39 -44.57,294.534 -44.858,296.118 -45.723,297.558
+ -45.723,298.998 -45.003,300.582 -43.563,301.446 -42.698,302.886 -41.114,303.318 -39.675,304.326 -39.675,302.886
+ -38.954,304.47 -35.931,304.47 -35.066,303.03 -34.923,304.47 -33.771,305.91 -32.33,306.054 -29.307,305.333 -29.019,303.75
+ -30.171,302.31 -28.73,302.598 -27.29,302.454 -25.851,301.446 -24.41,302.31 -23.114,300.726 -22.826,299.286 -23.402,297.846
+ -24.843,296.694 -23.402,296.694 -20.522,299.286 -18.938,300.293 -17.931,303.174 -16.347,303.894 -15.771,302.31 -14.33,302.742
+ -14.33,304.182 -12.746,305.478 -9.866,304.182 -9.146,302.598 -9.146,301.158 -10.154,299.718 -10.73,295.253 -6.698,291.942
+ -7.418,290.501 -8.282,291.654 -9.29,291.51 -7.851,288.629 -7.994,287.045 -9.435,286.614 -11.019,286.902 -11.738,288.342
+ -13.179,287.91 -14.763,288.486 -13.322,287.478 -11.738,286.902 -11.019,285.461 -12.026,283.877 -13.467,283.734 -15.051,284.31
+ -16.49,285.461 -16.778,286.902 -16.347,288.486 -17.786,289.782 -18.795,289.782 -17.354,288.917 -17.643,287.333 "/>
+ <polyline id="polyline1133" fill="#99D6AA" points="-48.458,669.653 -47.883,669.798 -48.171,668.214 -48.458,669.653 "/>
+ <polyline id="polyline1135" fill="#99D6AA" points="-47.45,665.909 -47.307,666.341 -45.866,666.63 -44.282,667.927
+ -44.715,666.341 -45.866,664.899 -47.45,665.909 "/>
+ <polyline id="polyline1137" fill="#7FC643" points="-44.858,216.054 -45.866,216.054 -46.442,217.494 -44.858,216.054 "/>
+ <polyline id="polyline1139" fill="#7FC643" points="-42.122,434.499 -41.834,434.069 -44.858,433.065 -46.299,434.499
+ -44.715,435.798 -43.706,437.237 -42.267,435.942 -42.122,434.499 "/>
+ <polyline id="polyline1141" fill="#7FC643" points="-43.563,310.085 -43.563,309.797 -45.003,309.942 -43.563,310.085 "/>
+ <polyline id="polyline1143" fill="#7FC643" points="-8.139,325.351 -6.843,323.909 -6.555,322.327 -6.986,317.862 -7.418,316.421
+ -8.715,313.542 -10.299,313.253 -11.162,314.694 -12.603,314.406 -14.042,315.846 -14.187,314.406 -12.603,313.398
+ -12.746,311.958 -14.187,310.95 -21.818,310.95 -23.402,310.23 -24.843,309.942 -26.282,310.085 -27.866,309.797 -29.307,310.085
+ -30.746,311.094 -32.187,311.238 -33.771,311.958 -38.091,311.238 -38.666,312.678 -39.242,311.238 -40.826,310.95
+ -41.402,312.534 -41.114,315.414 -41.547,316.854 -38.522,317.431 -37.082,318.149 -35.643,319.591 -34.202,320.312
+ -32.618,319.878 -31.179,318.726 -29.595,319.015 -29.883,317.431 -29.019,319.015 -28.73,320.454 -30.603,326.358
+ -29.162,327.798 -26.139,329.671 -21.675,331.687 -20.091,332.118 -18.65,332.839 -17.211,332.983 -16.059,334.421
+ -11.595,336.726 -10.011,333.847 -9.435,332.263 -9.29,329.382 -10.442,327.942 -9.003,326.935 -7.851,325.495 -8.139,325.351 "/>
+ <polyline id="polyline1145" fill="#7FC643" points="-40.395,426.87 -38.811,426.581 -37.37,427.015 -38.091,425.573
+ -36.65,424.854 -38.091,424.71 -39.53,425.431 -40.395,426.87 "/>
+ <polyline id="polyline1147" fill="#99D6AA" points="-36.074,667.062 -35.786,667.062 -36.938,665.622 -36.074,667.062 "/>
+ <polyline id="polyline1149" fill="#7FC643" points="-34.635,425.862 -36.074,425.722 -36.362,427.155 -34.923,427.304
+ -34.635,425.862 "/>
+ <polyline id="polyline1151" fill="#CCE83A" points="-32.187,-58.121 -31.898,-59.272 -32.042,-60.712 -32.187,-59.272
+ -32.763,-57.833 -32.187,-58.121 "/>
+ <polyline id="polyline1153" fill="#7FC643" points="-29.883,392.89 -29.883,392.454 -31.322,393.175 -29.883,392.89 "/>
+ <polyline id="polyline1155" fill="#99D6AA" points="-28.874,549.847 -30.314,549.271 -29.738,550.71 -28.874,549.847 "/>
+ <polyline id="polyline1157" fill="#7FC643" points="-25.994,305.045 -26.715,303.75 -28.299,303.606 -27.435,305.045
+ -25.994,305.045 "/>
+ <polyline id="polyline1159" fill="#99D6AA" points="-22.538,551.286 -23.69,549.702 -25.131,548.403 -26.57,547.542
+ -25.851,548.981 -24.41,550.278 -22.538,551.286 "/>
+ <polyline id="polyline1161" fill="#7FC643" points="-10.154,383.958 -10.154,380.935 -11.595,380.499 -13.179,380.358
+ -14.618,381.366 -16.059,380.79 -17.498,381.222 -18.074,382.663 -18.074,384.103 -19.658,384.819 -21.099,384.966
+ -23.979,386.405 -24.843,387.847 -25.418,389.431 -24.986,390.87 -22.395,393.897 -21.387,396.774 -21.242,398.358 -21.53,401.237
+ -20.954,404.263 -19.515,404.983 -18.65,403.542 -17.211,403.397 -16.202,401.958 -14.763,401.237 -11.019,396.774 -9.435,392.312
+ -10.299,389.431 -11.019,387.987 -11.019,386.405 -10.154,383.958 "/>
+ <polyline id="polyline1163" fill="#7FC643" points="-21.099,305.19 -20.954,304.758 -22.25,303.318 -23.834,303.174
+ -25.274,304.038 -24.122,305.622 -22.683,305.91 -21.099,305.19 "/>
+ <polyline id="polyline1165" fill="#99D6AA" points="-22.106,553.444 -22.106,553.157 -23.402,551.718 -24.843,551.573
+ -23.547,553.013 -22.106,553.444 "/>
+ <polyline id="polyline1167" fill="#99D6AA" points="-23.69,655.11 -22.971,655.397 -21.387,656.694 -20.811,655.255
+ -22.25,654.245 -23.69,655.11 "/>
+ <polyline id="polyline1169" fill="#CCE83A" points="-22.971,-56.968 -22.683,-56.968 -23.547,-58.408 -22.971,-56.968 "/>
+ <polyline id="polyline1171" fill="#99D6AA" points="-14.33,526.95 -14.187,529.542 -14.618,528.103 -16.059,526.517
+ -17.498,527.095 -17.498,528.679 -17.931,530.118 -18.219,528.679 -19.658,528.679 -20.091,530.118 -19.658,531.558
+ -18.795,533.142 -17.354,534.581 -18.795,535.013 -17.643,536.454 -16.202,536.597 -17.643,537.894 -19.082,536.454
+ -19.946,534.87 -21.387,535.013 -21.099,536.454 -21.242,538.038 -19.658,539.765 -15.194,542.358 -12.314,543.653
+ -10.874,543.653 -7.851,541.206 -8.715,538.038 -8.858,536.597 -7.274,532.278 -7.706,529.255 -8.858,526.229 -10.154,524.79
+ -11.738,524.214 -13.179,524.79 -14.33,526.229 -14.33,526.95 "/>
+ <polyline id="polyline1173" fill="#7FC643" points="-17.786,263.142 -16.923,264.726 -15.339,266.022 -14.042,267.461
+ -11.162,269.045 -8.139,270.198 -6.698,269.045 -4.683,268.182 -3.963,266.742 -4.106,265.302 -3.387,262.278 -3.675,260.837
+ -6.555,258.534 -7.851,259.974 -9.435,260.982 -12.314,261.558 -13.898,262.278 -16.778,263.142 -17.786,263.142 "/>
+ <polyline id="polyline1175" fill="#99D6AA" points="-16.635,656.118 -16.347,655.974 -15.771,654.532 -16.635,653.095
+ -14.618,650.214 -14.187,648.63 -15.339,647.188 -15.914,648.63 -15.914,650.067 -16.347,651.653 -17.498,654.532 -16.635,656.118
+ "/>
+ <polyline id="polyline1177" fill="#CCE83A" points="-16.635,-57.976 -16.347,-57.256 -13.755,-61.72 -15.194,-60.856
+ -16.635,-57.976 "/>
+ <polyline id="polyline1179" fill="#CCE83A" points="-16.059,-61.864 -16.059,-61.576 -14.618,-62.152 -13.179,-62.152
+ -11.738,-63.592 -11.883,-65.033 -13.322,-64.744 -13.898,-66.184 -14.187,-64.744 -16.059,-61.864 "/>
+ <polyline id="polyline1181" fill="#CCE83A" points="-8.139,-74.392 -7.994,-75.833 -9.29,-77.272 -9.866,-75.833 -10.442,-72.953
+ -10.299,-70.648 -10.73,-69.208 -10.299,-67.768 -8.858,-67.048 -9.29,-68.488 -9.29,-71.514 -8.139,-74.392 "/>
+ <polyline id="polyline1183" fill="#99D6AA" points="-9.003,520.903 -9.578,521.046 -8.858,522.485 -9.003,520.903 "/>
+ <polyline id="polyline1185" fill="#7FC643" points="-5.834,303.03 -5.402,301.446 -5.979,299.862 -6.555,296.982 -7.274,295.542
+ -8.715,295.398 -9.435,298.421 -9.146,299.862 -8.139,301.302 -6.698,302.742 -5.834,303.03 "/>
+ <polyline id="polyline1187" fill="#99D6AA" points="-2.811,544.374 -4.25,543.509 -5.834,544.806 -7.274,545.526 -8.427,546.966
+ -6.986,548.118 -5.402,546.821 -2.522,546.679 -2.811,544.374 "/>
+ <polyline id="polyline1189" fill="#7FC643" points="-3.675,168.534 -5.114,168.246 -6.698,168.392 -7.706,169.974 -7.131,171.414
+ -7.274,174.293 -5.979,177.318 -6.267,178.758 -7.706,179.045 -8.282,182.07 -8.282,183.654 -7.131,185.094 -5.69,186.246
+ -2.666,187.686 0.357,192.15 0.069,193.734 0.357,195.318 1.365,196.758 4.102,199.638 4.39,202.518 4.966,204.102 4.966,205.542
+ 5.686,208.568 6.262,213.03 6.693,214.47 6.838,218.934 7.701,221.816 8.998,222.246 14.901,220.662 19.365,219.942
+ 22.245,219.078 23.686,217.926 24.55,216.917 25.27,215.333 25.558,213.894 25.413,212.454 23.974,211.734 23.974,210.293
+ 25.413,211.446 26.998,210.726 26.422,209.286 25.126,207.846 26.422,208.133 27.285,209.574 28.869,208.998 29.445,208.278
+ 30.886,207.414 35.35,206.118 36.789,204.822 37.798,200.358 39.382,197.48 40.678,194.454 41.109,193.014 41.109,191.574
+ 39.67,191.286 36.646,189.99 33.621,189.125 32.182,189.99 29.014,186.534 28.869,185.094 27.573,183.654 24.838,179.192
+ 23.397,179.48 21.958,178.758 22.39,177.318 21.525,175.877 20.086,175.158 18.646,173.717 18.069,171.702 15.909,168.678
+ 15.334,167.238 13.894,166.085 13.029,164.501 12.31,166.085 11.302,167.526 8.277,167.958 3.813,169.974 -0.65,169.542
+ -3.675,168.534 "/>
+ <polyline id="polyline1191" fill="#CCE83A" points="-5.979,-75.833 -6.122,-76.696 -6.843,-75.256 -6.267,-74.249 -5.979,-75.833
+ "/>
+ <polyline id="polyline1193" fill="#CCE83A" points="-4.971,-68.488 -3.675,-67.625 -3.53,-69.208 -4.826,-70.648 -4.538,-72.088
+ -5.979,-71.369 -4.971,-68.488 "/>
+ <polyline id="polyline1195" fill="#CCE83A" points="-5.402,-76.121 -5.114,-77.417 -5.69,-75.976 -5.402,-76.121 "/>
+ <polyline id="polyline1197" fill="#99D6AA" points="-4.683,648.341 -3.818,647.909 -5.259,646.899 -4.683,648.341 "/>
+ <polyline id="polyline1199" fill="#CCE83A" points="-4.971,-76.408 -5.114,-76.266 -4.826,-74.968 -4.971,-76.408 "/>
+ <polyline id="polyline1201" fill="#CCE83A" points="-4.106,-73.528 -3.818,-73.528 -3.53,-74.968 -4.25,-76.408 -4.538,-74.968
+ -4.106,-73.528 "/>
+ <polyline id="polyline1203" fill="#7FC643" points="-4.106,256.085 -3.242,256.085 -4.106,254.501 -4.106,256.085 "/>
+ <polyline id="polyline1205" fill="#CCE83A" points="-2.954,-70.648 -2.666,-70.648 -3.242,-72.088 -2.954,-70.648 "/>
+ <polyline id="polyline1207" fill="#7FC643" points="18.934,378.774 20.229,377.331 20.229,375.897 19.798,374.454 21.237,373.733
+ 22.245,372.151 22.245,369.271 21.813,367.687 20.661,366.245 20.229,364.808 20.806,363.366 20.229,361.927 19.077,360.487
+ 17.638,357.606 16.485,356.022 16.054,354.581 14.613,354.87 13.894,356.312 13.605,353.286 12.886,351.847 14.325,352.421
+ 14.758,350.983 16.197,349.687 16.054,348.245 14.47,348.39 16.054,347.382 15.189,345.798 15.909,344.358 17.35,343.351
+ 15.909,342.487 14.325,342.917 14.47,341.335 15.909,341.046 15.621,339.606 17.062,340.759 18.502,341.046 19.941,340.183
+ 19.365,338.599 20.806,338.886 22.966,337.591 21.958,336.151 22.245,334.71 20.806,333.271 22.245,333.847 23.397,335.431
+ 23.686,336.87 25.27,333.847 25.27,332.405 26.71,331.976 25.989,333.413 25.126,336.294 25.701,337.591 25.558,339.175
+ 26.422,340.614 27.861,339.749 31.029,331.831 30.453,334.71 31.894,335.573 33.334,333.991 34.054,332.55 34.197,331.11
+ 33.189,329.671 33.046,328.085 33.334,326.647 30.31,323.767 33.334,325.206 34.773,325.495 37.798,324.054 38.518,321.175
+ 39.525,319.733 41.109,316.709 41.109,315.27 40.102,313.83 40.39,312.39 38.949,311.958 37.51,313.542 37.365,312.102
+ 35.926,311.669 35.35,313.11 33.909,313.974 33.046,315.558 31.462,314.406 30.166,315.846 29.59,317.286 29.157,318.726
+ 28.582,317.286 28.149,318.726 28.149,320.167 27.43,323.19 28.869,324.487 27.573,325.927 25.989,326.647 23.109,327.366
+ 20.086,329.095 18.646,328.808 17.205,329.237 14.182,327.798 12.741,327.366 11.157,327.222 9.718,327.511 8.422,329.095
+ 6.981,328.374 5.542,328.808 3.958,328.808 1.077,330.823 0.502,332.263 2.086,332.263 3.67,333.558 2.086,333.271 0.646,334.71
+ 0.502,336.151 -0.938,339.175 -0.219,340.614 1.222,341.622 2.661,341.909 1.077,342.63 4.102,343.495 3.094,344.935
+ 0.069,344.069 -1.37,344.069 -1.803,345.511 -1.946,348.534 -1.803,351.558 -0.362,351.847 -1.227,353.286 0.214,354.294
+ -1.227,354.87 -1.082,356.312 0.502,357.462 1.941,357.175 0.502,357.894 -0.65,359.335 2.229,359.479 0.789,359.767
+ -0.074,361.206 -0.362,362.79 0.502,364.229 0.646,365.671 2.229,366.39 3.67,366.534 5.109,365.958 5.542,367.397 2.661,367.976
+ 1.077,368.839 0.646,370.421 0.934,371.862 0.357,373.444 1.077,374.89 2.518,376.323 2.806,379.351 3.958,380.79 6.838,380.499
+ 8.134,379.065 7.558,380.79 8.277,382.374 9.718,382.808 10.869,381.222 10.149,380.358 10.149,378.917 11.733,380.069
+ 13.174,380.647 14.613,381.655 16.054,381.366 17.638,380.499 17.926,379.065 17.493,377.479 18.646,378.917 18.934,378.774 "/>
+ <polyline id="polyline1209" fill="#7FC643" points="1.941,312.965 1.365,312.39 -0.074,312.822 0.502,314.262 1.941,312.965 "/>
+ <polyline id="polyline1211" fill="#7FC643" points="2.518,305.333 1.365,304.038 -0.074,303.75 0.934,305.19 2.518,305.333 "/>
+ <polyline id="polyline1213" fill="#CCE83A" points="1.365,-66.184 1.941,-66.617 0.502,-67.625 1.365,-66.184 "/>
+ <polyline id="polyline1215" fill="#CCE83A" points="2.086,-63.448 2.086,-64.168 1.51,-65.608 0.646,-64.168 2.086,-63.448 "/>
+ <polyline id="polyline1217" fill="#7FC643" points="17.781,317.573 16.63,314.694 15.189,313.398 14.325,311.958 14.037,313.398
+ 12.886,311.958 11.445,310.662 10.006,309.797 8.565,309.51 6.981,310.23 8.277,311.669 6.838,311.238 5.254,312.246
+ 4.678,313.686 3.525,315.125 2.086,315.99 1.222,317.431 1.51,318.87 1.222,320.312 1.365,321.894 2.806,322.183 4.245,322.901
+ 5.829,322.901 7.27,322.614 8.71,322.901 10.294,322.472 11.733,322.614 16.197,320.022 17.35,318.581 17.781,317.573 "/>
+ <polyline id="polyline1219" fill="#99D6AA" points="6.117,519.317 5.254,519.03 3.813,519.03 2.229,520.325 2.374,521.765
+ 3.813,522.198 5.254,520.759 6.117,519.317 "/>
+ <polyline id="polyline1221" fill="#7FC643" points="2.661,141.75 3.813,141.75 2.661,140.312 2.661,141.75 "/>
+ <polyline id="polyline1223" fill="#99D6AA" points="4.533,534.726 4.678,534.581 4.39,533.142 4.533,534.726 "/>
+ <polyline id="polyline1225" fill="#99D6AA" points="7.126,529.397 5.686,529.397 5.829,530.839 6.838,532.278 7.27,530.839
+ 7.126,529.397 "/>
+ <polyline id="polyline1227" fill="#99D6AA" points="8.134,520.759 7.27,521.333 6.262,522.774 7.126,524.214 8.565,524.214
+ 10.149,524.79 9.573,521.911 8.134,520.759 "/>
+ <polyline id="polyline1229" fill="#99D6AA" points="8.565,505.206 6.981,504.63 7.126,506.071 8.565,505.206 "/>
+ <polyline id="polyline1231" fill="#CCE83A" points="13.894,-138.472 13.317,-136.888 11.878,-136.457 11.302,-135.016
+ 12.886,-135.448 11.445,-134.152 9.861,-134.44 8.854,-132.856 10.294,-131.85 11.878,-131.85 10.294,-131.128 7.413,-130.408
+ 7.558,-128.968 7.126,-127.528 8.565,-127.384 10.006,-127.816 10.726,-126.232 9.861,-124.792 13.029,-124.216 13.317,-125.8
+ 14.037,-127.24 14.613,-125.8 16.054,-125.656 17.638,-126.088 19.077,-126.088 16.054,-127.384 17.493,-127.24 16.63,-128.824
+ 18.214,-129.112 17.493,-130.552 18.934,-130.121 18.646,-131.705 19.798,-130.121 21.237,-129.256 22.678,-130.266
+ 22.821,-131.705 21.237,-132.568 19.798,-132.424 21.237,-133.432 19.798,-134.296 19.653,-135.736 18.357,-137.176
+ 16.918,-137.752 18.357,-137.752 19.798,-136.888 20.949,-135.448 22.39,-136.024 21.958,-134.44 23.542,-134.44 24.981,-135.448
+ 25.413,-136.888 26.565,-138.328 26.854,-139.768 26.134,-141.208 24.693,-142.072 23.254,-143.512 22.533,-144.953
+ 20.949,-145.384 19.51,-146.249 19.077,-144.808 19.222,-143.224 20.806,-142.504 21.382,-143.944 21.813,-142.504
+ 20.373,-141.785 18.934,-141.497 19.077,-143.081 17.781,-141.497 17.493,-143.081 16.054,-142.36 17.493,-146.824
+ 15.909,-146.824 14.47,-143.8 15.046,-142.36 14.758,-139.48 13.894,-138.472 "/>
+ <polyline id="polyline1233" fill="#99D6AA" points="8.422,652.806 11.157,653.524 11.157,652.087 12.741,651.94 12.453,650.503
+ 11.733,649.062 10.294,649.206 8.71,649.927 7.846,651.364 8.422,652.806 "/>
+ <polyline id="polyline1235" fill="#7FC643" points="9.573,296.406 11.014,297.702 9.573,297.702 9.573,299.142 9.142,300.582
+ 9.43,302.166 9.142,303.606 12.166,303.606 10.726,304.182 12.166,304.902 15.189,304.47 16.63,304.614 17.638,306.054
+ 16.054,306.629 17.493,307.062 18.934,307.35 20.373,306.198 21.958,306.774 24.838,307.206 27.861,308.07 29.302,307.494
+ 30.886,307.494 32.325,307.926 33.766,306.486 35.35,305.622 36.502,304.182 35.062,304.326 33.478,303.318 34.054,301.877
+ 35.493,301.302 36.357,299.574 36.646,298.134 35.781,296.694 34.342,295.686 32.758,296.262 32.758,297.702 31.462,298.709
+ 30.741,298.566 31.174,297.125 29.733,297.27 29.59,298.421 28.438,299.862 28.726,298.278 27.285,297.558 26.422,297.846
+ 25.558,299.286 24.405,297.846 26.565,296.837 28.006,295.686 29.59,295.542 31.029,294.102 32.47,294.678 33.909,293.958
+ 34.918,292.518 33.621,290.934 32.182,290.646 31.174,292.085 29.733,290.79 28.294,290.646 27.285,292.085 25.846,291.366
+ 24.405,291.942 23.974,293.381 23.254,291.942 26.134,290.07 25.989,288.629 22.966,288.774 23.829,287.333 22.39,286.182
+ 20.949,285.606 20.661,288.486 20.661,292.95 21.094,294.39 21.237,298.421 20.949,301.302 20.661,299.862 20.661,298.278
+ 19.222,296.837 19.222,296.549 18.069,296.406 17.781,293.381 16.342,293.526 14.901,294.102 14.037,295.686 14.182,294.102
+ 11.302,293.381 10.006,294.965 9.573,296.406 "/>
+ <polyline id="polyline1237" fill="#CCE83A" points="9.573,-136.744 10.438,-136.457 13.317,-138.041 13.029,-139.625
+ 11.59,-139.625 11.014,-138.184 9.573,-136.744 "/>
+ <polyline id="polyline1239" fill="#99D6AA" points="10.294,518.743 11.014,518.886 12.598,518.165 11.59,516.726 10.149,517.302
+ 10.294,518.743 "/>
+ <polyline id="polyline1241" fill="#CCE83A" points="15.478,-124.504 15.334,-122.92 14.325,-121.48 12.886,-120.762
+ 12.453,-119.32 11.014,-119.176 10.149,-117.592 10.726,-116.152 11.59,-117.736 12.021,-116.152 13.605,-116.584 15.046,-117.88
+ 16.054,-116.44 17.493,-117.592 17.35,-119.033 17.781,-120.617 19.222,-120.904 17.781,-122.058 19.365,-122.632 18.934,-124.072
+ 19.798,-124.072 20.229,-124.36 19.653,-125.8 16.773,-124.648 18.069,-124.216 15.478,-124.504 "/>
+ <polyline id="polyline1243" fill="#99D6AA" points="16.054,503.046 14.47,502.47 13.029,501.462 11.445,502.181 12.021,503.622
+ 15.046,503.622 16.054,503.046 "/>
+ <polyline id="polyline1245" fill="#CCE83A" points="13.75,-148.984 14.037,-148.984 14.901,-150.424 13.75,-148.984 "/>
+ <polyline id="polyline1247" fill="#7FC643" points="20.949,279.27 20.949,278.694 20.229,277.253 17.35,275.238 15.909,275.381
+ 14.758,276.822 14.758,279.27 16.342,280.566 17.781,280.278 19.222,280.421 20.949,279.27 "/>
+ <polyline id="polyline1249" fill="#99D6AA" points="15.046,654.532 15.621,654.39 16.485,652.806 14.901,653.095 15.046,654.532
+ "/>
+ <polyline id="polyline1251" fill="#7FC643" points="17.638,312.822 18.502,311.381 17.205,309.942 16.485,308.501 14.901,308.79
+ 15.189,310.23 16.63,310.662 15.478,312.102 16.918,313.253 17.638,312.822 "/>
+ <polyline id="polyline1253" fill="#CCE83A" points="15.766,-113.992 15.909,-113.705 17.35,-114.856 17.35,-116.296
+ 15.909,-115.432 15.766,-113.992 "/>
+ <polyline id="polyline1255" fill="#CCE83A" points="15.909,-149.128 17.493,-149.992 17.35,-151.432 15.909,-150.568
+ 15.909,-149.128 "/>
+ <polyline id="polyline1257" fill="#7FC643" points="34.918,230.31 33.478,229.446 32.037,229.734 30.598,230.598 31.894,232.038
+ 32.037,233.622 30.598,233.19 29.157,233.19 29.445,236.07 30.741,237.654 32.325,237.654 32.182,239.094 33.766,239.958
+ 32.901,242.982 32.47,241.398 31.462,239.958 30.021,239.381 28.582,238.23 27.43,242.838 29.014,244.133 28.438,245.574
+ 26.998,244.566 26.71,246.15 26.854,247.59 26.277,249.174 27.142,250.758 25.558,250.47 24.981,249.03 23.974,247.446
+ 24.117,246.006 24.838,244.566 25.27,242.982 25.413,241.542 24.405,238.662 24.693,235.638 24.117,234.198 22.678,233.766
+ 21.094,234.198 19.653,234.917 18.069,236.07 17.062,237.654 16.342,240.678 16.342,243.702 16.918,245.142 16.918,246.726
+ 17.35,248.166 18.789,251.045 19.077,252.774 18.646,254.213 19.365,255.654 19.798,257.238 20.806,258.678 19.365,259.542
+ 17.926,259.398 17.638,260.982 18.646,262.421 19.798,263.142 18.357,262.998 16.773,263.574 16.197,265.158 16.773,266.598
+ 16.918,269.478 18.069,270.917 19.653,271.206 21.094,272.501 22.533,273.366 23.974,273.797 25.558,275.238 28.438,275.814
+ 30.021,275.669 31.462,274.95 33.046,273.078 32.613,271.638 31.174,270.629 29.733,270.629 28.294,269.622 31.174,269.766
+ 31.894,268.326 31.605,266.886 33.189,267.75 34.63,267.75 34.918,266.31 36.502,265.734 37.51,267.318 40.39,267.606
+ 41.829,267.318 43.27,267.606 44.71,267.318 45.718,268.758 47.157,268.326 48.166,266.886 47.302,265.302 45.861,264.293
+ 44.134,261.846 43.701,260.262 42.262,259.83 40.678,260.262 40.245,260.406 38.949,261.846 37.365,262.278 35.926,260.982
+ 35.205,258.534 34.773,258.39 33.334,259.253 32.037,260.694 30.598,261.558 29.157,261.414 27.718,260.694 30.166,255.078
+ 31.174,253.638 31.029,252.198 32.613,251.622 34.054,252.198 35.493,252.342 36.646,250.902 38.086,252.198 40.966,250.47
+ 42.55,250.758 43.989,250.326 45.43,248.742 45.43,245.862 47.014,245.862 49.894,246.726 51.046,245.142 51.766,242.262
+ 51.334,240.678 50.037,239.238 47.014,241.974 49.317,237.51 49.029,236.07 46.149,233.766 44.71,235.062 42.838,239.526
+ 42.693,238.085 44.565,232.182 43.558,230.598 42.117,229.59 40.245,232.47 40.39,235.494 39.958,237.078 39.958,238.518
+ 39.382,236.934 38.806,234.054 38.806,232.47 40.39,229.59 40.39,228.006 39.525,226.568 38.086,225.27 36.646,225.99
+ 35.205,227.43 34.918,230.31 "/>
+ <polyline id="polyline1259" fill="#99D6AA" points="16.342,654.39 17.493,654.245 18.646,652.806 17.205,652.806 16.342,654.39
+ "/>
+ <polyline id="polyline1261" fill="#99D6AA" points="19.365,496.854 19.51,496.71 18.069,495.702 16.485,495.702 17.926,497.142
+ 19.365,496.854 "/>
+ <polyline id="polyline1263" fill="#CCE83A" points="20.229,-127.24 20.229,-128.249 18.789,-128.537 17.205,-128.249
+ 18.789,-127.384 20.229,-127.24 "/>
+ <polyline id="polyline1265" fill="#99D6AA" points="21.67,498.005 17.35,497.286 17.781,498.728 20.806,499.444 21.67,498.005 "/>
+ <polyline id="polyline1267" fill="#7FC643" points="18.646,99.127 18.357,99.127 18.934,100.709 18.646,99.127 "/>
+ <polyline id="polyline1269" fill="#CCE83A" points="18.646,-150.712 18.934,-150.712 20.229,-152.152 19.798,-153.736
+ 18.789,-152.296 18.646,-150.712 "/>
+ <polyline id="polyline1271" fill="#7FC643" points="19.365,294.534 20.518,294.534 19.798,293.094 19.365,294.534 "/>
+ <polyline id="polyline1273" fill="#7FC643" points="23.109,319.733 22.821,318.294 19.798,318.294 19.51,319.878 20.949,320.022
+ 23.109,319.733 "/>
+ <polyline id="polyline1275" fill="#99D6AA" points="23.397,495.989 23.109,497.431 23.686,495.989 23.397,495.989 "/>
+ <polyline id="polyline1277" fill="#CCE83A" points="23.974,-164.968 24.55,-165.544 24.693,-166.984 23.254,-166.552
+ 23.974,-164.968 "/>
+ <polyline id="polyline1279" fill="#7FC643" points="29.014,381.511 28.726,380.79 27.285,380.358 25.846,379.351 24.405,378.917
+ 23.397,380.358 24.838,380.935 24.838,382.374 26.134,380.935 27.573,381.655 29.014,381.511 "/>
+ <polyline id="polyline1281" fill="#7FC643" points="26.854,289.782 27.43,289.494 27.718,288.054 27.43,286.614 26.277,285.03
+ 24.838,284.31 24.981,287.19 26.422,288.342 26.854,289.782 "/>
+ <polyline id="polyline1283" fill="#CCE83A" points="26.134,-85.625 26.998,-85.48 26.422,-87.064 26.134,-85.625 "/>
+ <polyline id="polyline1285" fill="#7FC643" points="29.302,288.774 29.733,287.333 29.59,285.75 29.014,284.31 27.573,282.87
+ 27.573,284.31 28.149,287.333 29.302,288.774 "/>
+ <polyline id="polyline1287" fill="#99D6AA" points="29.445,488.358 27.718,491.382 29.157,490.087 29.445,488.358 "/>
+ <polyline id="polyline1289" fill="#7FC643" points="35.062,343.206 32.037,343.782 30.598,343.782 29.157,344.503 29.59,345.942
+ 29.302,347.382 32.325,347.382 30.886,347.671 29.302,348.966 29.59,350.55 31.029,350.839 32.47,351.847 31.029,351.558
+ 29.59,351.991 29.014,354.87 28.294,356.312 28.582,357.894 30.021,358.183 31.462,356.886 33.046,357.175 31.462,357.894
+ 31.029,359.335 34.054,360.343 32.47,360.917 31.174,362.358 31.75,363.942 33.189,363.655 34.63,362.935 36.214,362.647
+ 34.63,363.655 31.605,364.663 31.029,366.103 31.317,367.544 32.758,367.831 34.342,367.831 35.205,366.39 36.646,366.103
+ 35.205,367.397 35.926,368.839 34.485,368.405 33.046,368.983 32.901,370.421 34.485,371.431 32.901,372.87 31.462,373.304
+ 29.878,372.87 28.438,373.88 30.31,376.901 31.317,377.909 31.75,379.495 33.189,379.495 36.214,381.222 34.773,382.085
+ 36.214,383.095 37.653,383.095 39.094,383.671 40.678,383.526 43.558,382.085 43.558,380.647 41.974,380.214 40.533,378.917
+ 42.117,378.63 41.686,377.19 44.71,378.058 46.149,377.046 46.438,375.606 45.573,374.167 44.277,373.304 45.718,373.155
+ 46.294,370.278 44.998,368.694 44.854,367.253 46.294,366.245 46.294,367.831 47.59,369.271 48.021,367.831 51.046,367.11
+ 49.605,367.976 47.302,370.999 46.869,372.438 46.869,373.88 47.733,375.175 47.59,376.759 48.166,378.198 49.605,379.782
+ 51.046,380.214 54.069,380.358 55.51,379.351 56.949,379.065 57.958,377.479 59.397,378.487 59.109,379.927 59.542,381.366
+ 59.686,382.95 61.126,384.245 60.693,385.687 62.134,386.118 63.573,385.976 63.43,382.95 64.149,381.511 64.726,382.95
+ 65.157,386.118 66.598,386.118 68.037,386.554 68.613,384.966 68.613,383.526 69.766,382.085 69.478,383.526 69.909,385.11
+ 71.062,386.554 74.086,386.118 75.525,385.397 76.102,383.958 75.525,381.077 76.966,382.085 77.109,379.065 75.094,376.038
+ 72.214,375.03 76.678,375.606 76.678,374.022 76.39,372.581 76.966,374.167 77.109,377.046 78.981,380.214 79.126,378.774
+ 78.838,377.19 78.838,374.312 80.277,380.214 78.838,381.366 78.55,382.808 78.55,384.39 78.981,385.827 82.006,384.103
+ 81.142,381.222 81.43,379.782 80.565,376.759 81.43,373.88 81.573,375.319 82.582,376.759 82.294,378.343 83.157,379.782
+ 84.453,378.343 84.741,376.901 85.029,378.487 84.021,379.927 84.021,382.808 85.462,382.374 85.317,383.815 85.75,385.253
+ 87.189,385.11 87.189,386.554 88.63,387.271 90.214,386.405 91.077,384.966 91.365,383.526 90.789,382.085 92.229,382.519
+ 92.661,383.958 92.518,385.397 90.789,388.421 91.365,389.862 92.806,391.304 94.245,391.878 95.686,391.733 96.693,391.878
+ 98.854,391.878 98.998,390.438 97.558,388.995 96.838,387.562 98.422,387.562 98.998,386.118 98.998,387.562 98.565,389.144
+ 100.006,390.151 100.726,391.733 102.166,392.312 102.886,390.87 104.325,390.151 105.766,388.71 105.189,390.151 103.605,390.87
+ 103.75,392.312 105.189,393.175 106.63,393.03 109.653,393.319 116.998,395.909 119.878,396.058 122.901,397.64 124.342,398.069
+ 125.926,398.069 126.502,396.63 125.205,395.19 119.157,390.729 117.718,389.286 114.981,387.562 116.565,387.987 118.149,387.987
+ 118.869,389.431 123.189,392.163 124.63,392.454 124.485,390.87 123.334,389.431 122.758,387.987 124.197,387.562 124.918,385.976
+ 124.485,387.562 123.766,388.995 127.222,393.606 128.661,394.038 129.525,395.479 133.989,397.927 136.869,398.79 138.31,398.214
+ 139.75,399.222 141.334,398.935 142.773,398.069 143.781,396.63 143.062,394.901 141.621,393.606 143.062,393.175 144.502,392.022
+ 145.077,390.581 146.518,390.729 146.661,389.286 145.222,388.995 146.229,387.413 144.789,387.126 144.789,385.687
+ 141.909,384.245 140.47,382.663 141.909,382.808 143.35,383.815 144.934,384.39 145.798,384.245 145.941,382.808 145.365,381.366
+ 145.51,379.782 145.077,378.343 146.229,376.901 145.653,375.319 144.069,374.167 142.63,375.175 142.918,373.733 144.502,373.444
+ 144.357,372.007 142.918,370.854 141.334,370.278 139.894,371.144 138.886,372.581 139.029,370.999 141.909,368.405
+ 141.909,366.966 141.478,365.386 140.758,363.942 140.613,362.499 139.174,363.077 137.733,364.663 137.302,366.103
+ 135.861,366.103 134.422,367.544 132.981,366.679 134.565,366.679 135.43,365.095 136.869,363.942 138.166,362.499
+ 137.302,361.065 138.741,360.487 138.886,359.046 138.166,357.606 136.726,357.462 135.142,358.614 134.565,360.198
+ 134.565,361.64 134.134,360.198 134.422,358.614 135.718,357.03 135.861,355.591 134.422,355.733 131.542,357.606 133.126,354.726
+ 131.542,354.007 130.678,355.591 129.382,353.573 127.941,353.862 124.197,358.183 123.478,359.767 122.47,361.206 121.029,361.64
+ 122.47,360.487 123.766,357.462 126.069,354.581 126.214,353.144 124.773,353.862 123.334,355.015 123.766,353.573 125.205,352.71
+ 126.789,352.136 129.237,348.534 129.094,347.095 126.069,347.958 125.062,346.374 124.918,344.935 123.478,345.077
+ 123.046,346.519 121.605,349.397 120.166,349.253 120.021,347.815 121.605,346.808 122.182,345.366 120.886,343.927
+ 122.325,342.774 122.325,341.335 120.886,339.894 119.445,339.319 118.006,339.175 119.157,337.591 118.726,336.007
+ 117.142,335.144 116.422,333.558 114.981,332.983 114.405,333.847 114.117,335.286 115.558,336.151 114.838,337.591
+ 113.829,337.591 113.254,336.87 112.821,336.294 111.382,336.151 111.525,337.591 113.686,340.472 113.829,341.909
+ 113.109,343.495 113.397,342.054 112.102,340.614 111.094,339.03 109.653,338.022 108.069,339.175 108.646,337.591
+ 108.069,337.159 106.63,337.015 105.189,337.591 104.901,338.886 105.909,341.909 105.766,343.351 106.197,344.935
+ 106.773,346.374 108.357,347.526 109.51,348.966 110.086,350.405 105.621,346.95 104.47,344.069 104.758,342.63 104.613,341.046
+ 103.75,339.606 102.31,339.462 99.718,342.343 98.854,343.927 99.573,345.366 101.157,345.798 105.621,348.534 107.781,354.294
+ 107.781,355.878 105.334,349.976 103.894,348.39 99.43,346.663 97.989,346.95 97.27,348.39 98.854,349.542 97.413,349.976
+ 97.413,352.854 98.565,354.438 101.59,354.007 102.453,355.591 101.014,356.167 102.166,357.606 102.598,359.046 99.718,356.167
+ 98.277,356.167 98.565,357.749 100.149,360.774 102.886,363.655 104.325,364.808 105.766,365.095 107.35,364.95 108.789,365.386
+ 109.798,364.519 109.222,366.103 110.661,366.103 113.686,367.397 114.405,368.983 112.821,367.544 111.382,367.544
+ 106.918,366.245 105.478,367.253 106.342,368.839 106.63,370.278 105.909,371.722 104.613,368.694 103.317,367.11 102.021,365.671
+ 100.582,365.237 101.302,368.118 101.157,369.702 100.582,368.694 99.142,364.229 97.701,362.79 95.542,358.183 94.245,356.741
+ 89.781,360.343 88.485,361.64 85.317,362.647 85.029,365.526 85.894,366.966 85.029,367.11 83.445,365.386 84.021,363.942
+ 83.733,362.358 85.174,361.351 86.613,360.774 88.197,359.767 90.357,357.462 93.237,354.87 93.525,353.286 93.237,351.847
+ 93.382,350.405 94.102,348.966 93.094,347.382 91.51,347.237 90.069,347.237 88.63,347.815 88.342,349.397 87.189,350.839
+ 87.766,349.397 87.189,347.815 84.31,348.966 84.021,350.405 83.014,351.991 80.134,353.431 78.693,354.581 77.109,354.87
+ 76.39,356.312 74.949,356.741 73.365,357.606 74.518,356.167 75.094,354.581 73.653,354.007 72.357,355.446 71.926,358.472
+ 72.214,359.909 71.493,361.351 74.373,364.229 71.493,363.366 70.773,361.927 69.478,360.343 68.037,361.927 66.598,362.358
+ 68.037,361.065 69.766,358.183 70.342,356.741 70.342,355.304 70.918,353.862 70.485,352.278 69.621,350.839 69.189,349.253
+ 67.75,347.815 66.31,347.382 64.726,347.671 63.43,346.229 61.989,345.942 60.405,346.085 57.525,347.237 57.813,348.823
+ 59.397,349.397 59.974,350.839 61.558,351.558 60.117,351.413 58.533,350.405 57.094,350.405 57.382,351.847 58.245,353.286
+ 61.27,354.294 64.294,354.581 65.733,355.159 64.294,354.87 61.27,354.87 59.829,355.304 59.397,356.741 59.109,355.304
+ 57.67,354.438 57.237,356.022 57.237,354.581 55.653,352.999 54.214,353.718 54.646,355.159 54.789,356.741 54.502,355.304
+ 53.062,353.718 53.638,355.159 52.054,354.294 50.613,354.294 49.894,355.733 51.478,357.03 49.894,356.312 48.453,357.03
+ 48.886,360.054 50.325,360.917 54.789,362.069 57.67,363.222 54.789,363.222 51.766,362.358 48.886,361.206 47.878,359.767
+ 46.438,360.054 46.726,358.614 46.438,357.03 44.998,357.462 46.006,356.022 46.294,354.581 47.302,352.999 50.325,352.136
+ 51.766,351.271 53.205,349.976 53.926,348.534 54.069,347.095 53.35,345.511 52.342,344.069 49.462,344.358 48.166,345.942
+ 46.582,345.655 45.142,346.229 45.285,349.11 44.277,347.671 42.838,348.245 42.405,349.687 42.405,348.245 41.109,346.808
+ 41.542,345.222 41.397,343.782 38.373,341.335 37.222,339.749 34.342,339.749 32.758,339.175 29.878,340.759 30.741,342.343
+ 32.325,342.774 30.741,343.206 32.182,343.351 33.621,342.917 35.062,343.206 "/>
+ <polyline id="polyline1291" fill="#7FC643" points="33.046,288.342 33.478,288.054 33.621,286.47 33.334,282.006 32.758,281.142
+ 31.317,280.854 30.021,283.014 29.733,284.454 30.021,287.333 31.605,288.486 33.046,288.342 "/>
+ <polyline id="polyline1293" fill="#CCE83A" points="29.878,-106.792 30.166,-106.792 30.021,-108.232 29.878,-106.792 "/>
+ <polyline id="polyline1295" fill="#7FC643" points="30.598,337.591 30.598,337.878 32.037,338.312 33.621,338.312 35.062,338.741
+ 36.502,337.733 36.357,336.87 34.918,335.431 30.598,337.591 "/>
+ <polyline id="polyline1297" fill="#99D6AA" points="31.317,485.046 32.901,485.911 32.901,484.47 32.325,482.886 30.886,483.462
+ 31.317,485.046 "/>
+ <polyline id="polyline1299" points="33.334,84.582 33.621,86.312 34.773,84.87 33.334,84.582 "/>
+
+ <polygon id="polygon1301" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 33.334,84.582 33.621,86.312 34.773,84.87 "/>
+ <polyline id="polyline1303" fill="#7FC643" points="40.39,284.31 40.245,283.158 39.525,282.006 36.646,282.293 35.205,282.006
+ 34.197,284.31 34.342,285.894 35.205,287.333 36.789,286.902 38.229,285.894 38.949,284.31 40.39,284.31 "/>
+ <polyline id="polyline1305" fill="#7FC643" points="38.086,298.709 38.806,297.99 38.806,296.549 37.653,295.11 36.214,294.39
+ 38.086,298.709 "/>
+ <polyline id="polyline1307" fill="#7FC643" points="37.941,299.862 37.798,301.446 38.373,299.862 37.941,299.862 "/>
+ <polyline id="polyline1309" fill="#99D6AA" points="38.661,474.679 38.373,474.966 39.382,476.55 40.966,477.562 40.102,476.118
+ 38.661,474.679 "/>
+ <polyline id="polyline1311" fill="#CCE83A" points="42.838,-161.8 42.838,-162.665 41.397,-161.224 42.838,-161.8 "/>
+ <polyline id="polyline1313" fill="#7FC643" points="43.413,333.702 43.27,333.413 41.829,333.413 41.829,334.854 43.413,333.702
+ "/>
+ <polyline id="polyline1315" fill="#7FC643" points="48.166,337.591 49.462,336.151 49.894,334.71 48.453,333.413 46.869,333.413
+ 45.43,333.558 43.989,334.71 42.981,336.151 42.693,337.591 44.134,338.741 45.718,338.741 47.157,338.454 48.166,337.591 "/>
+ <polyline id="polyline1317" fill="#7FC643" points="50.613,232.038 50.325,230.598 49.605,229.158 49.75,227.574 49.317,226.133
+ 48.31,224.694 47.733,223.254 46.294,221.816 44.71,222.965 43.989,224.406 45.43,227.43 46.869,228.87 49.174,231.75
+ 50.613,232.038 "/>
+ <polyline id="polyline1319" fill="#99D6AA" points="45.573,412.901 45.142,413.046 45.43,414.63 45.861,413.046 45.573,412.901
+ "/>
+ <polyline id="polyline1321" fill="#7FC643" points="51.046,326.503 51.909,325.64 51.766,324.198 52.63,321.319 52.197,319.878
+ 53.205,318.438 52.63,316.854 51.046,315.558 49.605,315.414 48.166,316.134 47.59,319.159 47.59,320.741 46.726,323.767
+ 48.021,325.206 49.462,325.64 51.046,326.503 "/>
+ <polyline id="polyline1323" fill="#7FC643" points="58.821,283.446 59.397,282.582 57.813,282.15 51.909,281.862 50.325,282.293
+ 48.021,283.734 48.31,285.174 49.894,285.75 52.773,285.03 55.798,284.598 58.821,283.446 "/>
+ <polyline id="polyline1325" fill="#7FC643" points="49.462,354.438 48.598,354.581 48.453,356.022 49.462,354.438 "/>
+ <polyline id="polyline1327" fill="#7FC643" points="68.037,231.174 65.733,228.15 64.726,223.83 63.573,222.39 62.998,220.95
+ 63.718,219.366 64.006,217.926 63.285,216.486 61.126,213.461 61.558,214.902 60.117,215.192 58.821,213.608 57.813,215.192
+ 58.102,216.629 56.661,217.494 55.222,217.638 55.798,219.078 57.237,220.374 57.094,221.816 55.653,220.662 54.214,221.094
+ 52.773,220.085 51.334,221.526 52.342,224.549 55.365,225.27 56.806,226.133 55.365,226.854 53.926,226.422 53.926,227.862
+ 55.365,229.014 55.51,230.454 56.949,230.885 58.39,230.31 57.958,231.894 58.821,233.333 60.405,233.478 61.27,234.917
+ 61.27,236.358 59.829,236.07 58.245,234.486 56.806,233.478 55.365,232.902 53.926,233.045 52.485,233.766 52.342,235.35
+ 53.781,236.501 55.222,236.934 55.798,238.374 55.222,239.958 55.51,241.398 56.949,242.549 58.533,242.694 59.974,242.262
+ 59.109,243.702 60.55,244.421 61.989,243.702 63.43,244.421 64.006,247.446 65.445,248.31 68.47,247.302 69.766,245.718
+ 69.189,244.278 67.75,244.133 66.886,242.694 68.325,241.254 69.766,240.246 70.485,237.222 70.485,235.782 69.189,234.198
+ 68.901,232.758 67.894,231.318 68.037,231.174 "/>
+ <polyline id="polyline1329" fill="#7FC643" points="54.214,219.222 52.485,216.486 52.63,217.926 54.214,219.222 "/>
+ <polyline id="polyline1331" fill="#7FC643" points="53.35,248.742 52.918,249.894 53.35,251.333 54.789,251.19 56.086,249.75
+ 56.518,248.31 56.086,246.87 54.502,247.302 53.35,248.742 "/>
+ <polyline id="polyline1333" fill="#7FC643" points="53.493,313.686 54.502,315.125 54.646,316.566 55.365,318.007 55.798,319.591
+ 57.237,321.03 58.821,320.454 60.262,319.591 61.413,321.175 62.854,321.319 64.438,319.878 64.726,318.438 67.605,316.709
+ 68.901,315.27 70.054,313.686 70.63,312.102 69.334,310.662 66.31,311.381 64.726,310.085 61.846,311.381 59.254,314.262
+ 58.39,312.822 58.102,311.381 56.518,312.39 53.493,313.686 "/>
+ <polyline id="polyline1335" fill="#99D6AA" points="56.373,400.519 54.934,400.085 54.357,401.526 54.789,403.11 56.229,403.397
+ 56.373,400.519 "/>
+ <polyline id="polyline1337" fill="#7FC643" points="57.958,297.414 58.245,295.974 57.813,294.534 56.373,294.39 54.934,295.398
+ 54.646,296.837 54.934,298.421 56.373,298.998 57.958,297.414 "/>
+ <polyline id="polyline1339" fill="#CCE83A" points="55.51,-189.448 55.798,-189.448 55.222,-190.888 55.077,-192.472
+ 54.934,-190.888 55.51,-189.448 "/>
+ <polyline id="polyline1341" fill="#7FC643" points="68.47,305.19 70.342,305.622 71.781,304.758 71.781,303.174 73.222,302.454
+ 74.806,302.742 76.966,301.158 76.533,299.43 74.949,298.709 76.39,298.134 77.974,298.421 80.854,297.846 82.294,296.406
+ 83.014,294.822 82.869,291.942 82.294,290.358 80.854,289.638 79.413,289.35 78.55,290.79 77.109,291.366 75.525,290.213
+ 75.525,291.654 76.966,293.094 75.525,294.102 74.373,292.662 73.51,292.806 73.222,294.246 71.781,294.246 71.781,292.806
+ 70.773,294.246 69.189,293.814 69.478,292.23 70.773,290.79 70.773,289.35 70.054,288.629 67.174,289.062 65.59,290.07
+ 65.302,290.79 66.021,292.23 66.453,295.253 64.869,295.11 64.006,298.134 62.565,299.574 61.126,300.582 56.518,301.158
+ 55.653,302.598 55.222,302.886 55.222,304.47 55.51,305.91 58.533,307.062 61.413,306.054 64.438,305.333 65.878,305.478
+ 67.317,306.342 68.47,305.19 "/>
+ <polyline id="polyline1343" fill="#99D6AA" points="57.525,403.827 57.237,403.976 56.661,405.413 57.958,406.854 58.245,405.413
+ 57.525,403.827 "/>
+ <polyline id="polyline1345" fill="#7FC643" points="75.958,336.438 75.237,334.999 75.094,333.413 74.373,330.39 74.949,327.511
+ 73.51,326.358 72.646,324.917 71.205,324.487 69.766,325.206 69.334,326.647 67.894,327.798 68.613,326.358 67.174,326.069
+ 65.59,326.79 66.021,328.374 65.302,329.815 65.014,331.397 63.861,328.374 62.422,328.229 60.981,329.095 59.397,330.534
+ 57.813,334.999 57.813,336.438 59.397,336.438 60.838,335.144 60.981,336.581 58.678,338.886 60.117,339.03 61.558,338.599
+ 63.142,337.591 64.582,337.304 65.445,337.591 62.565,338.741 61.126,339.749 59.686,340.183 58.245,341.335 59.686,342.054
+ 62.565,342.487 64.006,341.909 65.59,341.622 64.006,343.062 64.294,344.503 65.878,344.358 67.317,343.64 68.901,343.351
+ 71.781,343.495 73.365,344.647 68.901,344.069 67.462,344.358 67.462,345.798 69.046,346.374 70.485,347.237 71.926,347.095
+ 73.222,348.534 75.094,351.558 76.533,352.999 78.117,352.854 80.998,351.126 79.558,349.831 82.582,348.823 82.582,347.382
+ 81.142,347.382 80.422,345.798 81.861,345.511 83.302,346.229 86.47,346.374 85.75,344.935 87.189,345.798 88.485,345.798
+ 89.638,344.214 94.102,344.214 95.397,342.774 94.533,341.335 93.094,341.335 91.653,342.487 90.069,342.774 90.357,341.335
+ 91.798,340.038 93.237,339.749 94.678,340.183 96.117,340.038 96.981,338.454 96.981,337.733 97.27,337.015 97.701,336.151
+ 99.142,336.007 100.582,334.71 103.605,333.702 108.069,332.694 109.51,331.253 110.806,329.526 110.661,327.077 109.222,326.647
+ 108.357,328.229 107.926,329.671 106.485,329.671 106.485,328.085 106.918,326.647 105.334,327.511 104.613,326.069
+ 106.197,325.206 104.613,324.054 103.174,324.054 101.59,324.487 100.582,325.782 99.142,325.351 98.277,326.79 97.846,325.351
+ 98.565,323.909 98.565,322.327 97.126,321.03 95.686,322.038 95.397,320.599 93.813,319.446 92.373,320.886 92.518,322.327
+ 91.077,322.327 91.222,323.767 91.798,325.206 90.357,324.054 88.773,325.062 88.773,324.487 89.781,321.606 90.934,320.022
+ 91.51,318.581 89.35,318.726 87.909,319.878 86.325,319.159 84.886,319.446 83.445,320.312 83.014,321.749 83.445,323.19
+ 84.741,324.774 83.302,324.487 82.294,323.046 81.861,321.462 80.422,320.454 77.397,321.606 77.542,323.046 78.981,324.054
+ 78.55,325.495 76.966,324.917 77.254,326.358 78.693,327.222 79.413,330.103 77.974,330.534 77.542,332.118 78.117,333.558
+ 77.109,332.118 76.966,330.679 75.525,330.534 75.958,336.438 "/>
+ <polyline id="polyline1347" fill="#CCE83A" points="59.109,-193.625 58.533,-193.48 58.678,-192.041 59.254,-190.457
+ 59.686,-192.041 60.693,-193.768 60.117,-195.208 59.974,-196.648 59.397,-195.208 59.109,-193.625 "/>
+ <polyline id="polyline1349" fill="#7FC643" points="60.693,322.472 60.693,321.894 59.254,323.046 60.693,322.472 "/>
+ <polyline id="polyline1351" fill="#7FC643" points="69.046,270.917 69.621,269.478 69.334,267.894 70.197,266.454 69.909,265.014
+ 70.342,261.99 69.478,258.965 65.157,257.238 63.718,257.669 62.134,258.534 60.693,258.534 59.686,260.118 59.974,262.998
+ 59.829,266.022 60.693,267.461 63.573,268.614 64.438,267.174 65.878,266.454 66.166,268.038 66.166,269.91 66.886,271.35
+ 68.325,271.926 69.046,270.917 "/>
+ <polyline id="polyline1353" fill="#7FC643" points="62.854,344.069 62.854,343.782 59.974,343.64 62.854,344.069 "/>
+ <polyline id="polyline1355" fill="#CCE83A" points="63.573,-190.6 64.006,-190.457 64.582,-191.896 63.142,-192.041 63.573,-190.6
+ "/>
+ <polyline id="polyline1357" fill="#7FC643" points="64.726,294.678 64.869,294.246 63.285,294.39 64.726,294.678 "/>
+ <polyline id="polyline1359" fill="#CCE83A" points="67.174,-191.033 67.605,-191.176 68.182,-192.617 67.75,-194.056
+ 66.886,-195.64 64.006,-193.336 65.445,-192.472 66.021,-191.033 66.598,-192.472 67.174,-191.033 "/>
+ <polyline id="polyline1361" fill="#7FC643" points="74.086,257.094 73.077,253.782 68.613,254.646 68.325,256.085 69.766,257.526
+ 72.646,256.806 74.086,257.094 "/>
+ <polyline id="polyline1363" fill="#7FC643" points="73.222,350.405 71.781,349.253 70.342,349.253 71.926,352.136 73.365,351.991
+ 73.222,350.405 "/>
+ <polyline id="polyline1365" fill="#7FC643" points="77.974,274.085 79.413,273.366 79.413,271.782 79.126,270.342 78.262,268.758
+ 78.262,265.877 77.974,264.293 77.397,262.854 75.958,261.846 75.525,263.286 75.813,264.726 74.949,266.166 73.365,266.886
+ 74.661,268.47 73.077,269.478 72.069,270.917 72.357,272.07 71.638,273.654 73.077,274.806 74.518,275.238 77.542,274.518
+ 77.974,274.085 "/>
+ <polyline id="polyline1367" fill="#7FC643" points="74.806,386.694 73.798,386.694 74.373,388.136 74.806,386.694 "/>
+ <polyline id="polyline1369" fill="#99D6AA" points="74.518,645.894 74.086,646.614 75.525,647.478 75.237,646.038 74.518,645.894
+ "/>
+ <polyline id="polyline1371" fill="#CCE83A" points="75.67,-198.088 76.821,-198.808 75.237,-199.528 75.67,-198.088 "/>
+ <polyline id="polyline1373" fill="#CCE83A" points="79.413,-202.264 80.565,-202.696 80.71,-204.136 79.27,-203.705
+ 79.413,-202.264 "/>
+ <polyline id="polyline1375" fill="#CCE83A" points="82.149,-211.048 82.006,-212.201 80.565,-211.048 82.149,-211.048 "/>
+ <polyline id="polyline1377" fill="#CCE83A" points="87.766,-143.8 86.901,-145.24 85.462,-143.8 85.317,-142.36 85.605,-140.92
+ 87.046,-142.36 87.766,-143.8 "/>
+ <polyline id="polyline1379" fill="#B28765" points="98.565,706.087 100.006,705.222 100.438,706.806 101.878,707.235
+ 100.438,707.235 100.726,708.679 102.166,707.958 102.886,709.397 104.325,709.829 102.021,709.974 100.582,710.403 98.998,710.55
+ 97.558,711.126 98.277,712.565 99.718,713.862 101.157,713.862 102.598,713.431 101.445,714.87 100.006,715.302 97.126,713.862
+ 95.686,714.438 94.245,713.286 92.806,712.997 91.222,713.142 89.781,712.421 88.342,712.708 86.901,711.558 85.462,711.847
+ 85.462,713.286 86.758,714.726 88.197,714.294 89.638,714.581 94.102,717.462 95.542,717.894 95.397,719.333 96.838,719.188
+ 94.821,720.485 95.397,721.927 95.254,723.364 97.558,722.501 100.438,722.067 100.726,722.214 100.006,722.935 99.142,722.356
+ 98.422,722.935 96.838,723.222 95.829,724.661 95.829,726.245 97.27,725.813 98.854,725.813 100.294,726.532 98.565,726.103
+ 95.542,727.253 96.405,728.694 94.678,728.118 93.67,729.7 92.229,729.413 90.789,729.847 89.926,728.403 88.485,728.837
+ 88.054,730.278 88.773,731.718 90.214,731.862 93.094,733.157 94.245,733.013 95.686,734.165 97.126,734.597 98.422,733.444
+ 99.861,734.022 98.854,733.878 99.142,735.317 100.438,736.757 101.878,736.038 102.31,738.194 103.029,741.077 104.901,742.806
+ 105.909,743.095 108.789,745.397 109.653,746.263 111.094,747.124 113.974,748.278 115.413,748.134 116.998,746.837
+ 117.573,748.278 119.157,748.134 120.598,746.981 119.878,746.403 121.029,746.55 121.174,745.11 122.613,745.54 127.653,745.687
+ 128.373,744.245 128.949,745.687 130.39,745.829 131.829,745.54 133.27,744.532 133.27,744.245 134.71,743.813 136.294,742.806
+ 137.733,742.806 139.174,742.229 140.758,742.229 141.621,740.788 142.197,741.798 143.638,742.806 146.086,741.511
+ 146.661,741.511 148.102,740.935 148.533,740.214 148.678,738.772 150.117,737.478 150.117,736.038 150.693,737.478
+ 152.134,737.622 153.573,736.612 154.006,736.757 154.726,736.038 153.861,734.597 155.302,734.597 154.149,733.157
+ 152.71,732.438 154.149,732.294 155.157,733.878 156.741,733.735 156.598,730.708 154.438,730.421 154.869,730.278 156.31,730.565
+ 157.75,729.847 156.453,729.124 155.014,728.837 157.894,726.821 156.31,723.94 154.869,723.077 153.43,723.222 151.846,724.517
+ 153.142,723.222 154.149,721.78 153.861,720.341 150.981,720.485 150.981,719.909 152.422,718.612 153.573,717.173
+ 152.277,715.735 150.838,714.87 151.701,713.431 152.277,712.997 152.71,711.558 154.149,710.694 152.71,710.403 151.27,711.558
+ 149.829,711.558 149.109,713.142 147.525,709.974 148.102,708.532 145.941,705.653 144.502,705.653 143.062,706.517
+ 142.773,709.397 141.621,710.118 141.046,711.558 140.47,710.55 138.886,710.694 138.886,709.255 138.021,708.679 136.582,709.829
+ 135.43,711.271 133.846,712.421 133.558,710.118 132.693,708.679 131.397,707.382 129.813,707.524 129.67,710.55 130.102,711.989
+ 129.237,715.444 128.949,713.431 129.382,711.989 128.949,710.55 127.941,709.11 128.229,707.671 127.798,706.229 126.357,705.222
+ 125.205,705.364 125.062,705.653 122.182,706.661 121.605,708.103 121.462,709.542 120.741,711.126 119.878,710.694
+ 119.445,708.103 118.582,706.661 118.726,705.077 118.294,703.638 117.285,703.493 115.701,704.356 115.701,707.235
+ 114.838,710.118 113.254,711.989 113.542,710.839 112.678,712.278 112.245,711.847 111.525,709.11 109.941,709.829
+ 108.502,712.708 108.357,711.271 107.926,712.708 107.062,714.149 106.63,715.735 106.773,713.286 107.35,711.7 106.342,710.263
+ 107.781,708.821 106.773,707.382 106.485,705.94 107.926,705.653 109.365,704.503 109.365,703.062 107.926,702.483
+ 109.365,701.909 107.926,701.333 108.069,698.454 105.909,693.847 104.901,692.403 103.317,691.974 101.878,691.974
+ 100.438,692.403 101.733,693.847 103.174,694.421 104.037,695.862 102.453,694.997 101.014,695.862 102.31,697.302
+ 103.029,698.741 103.029,700.181 102.021,701.622 102.021,700.181 100.582,701.765 101.878,699.462 101.302,698.022 99.861,699.03
+ 99.861,697.589 99.43,696.005 98.565,694.565 97.126,694.134 97.413,695.573 94.533,696.438 95.109,697.878 96.405,699.462
+ 93.382,697.302 93.094,698.741 94.102,700.181 95.686,701.046 94.245,700.899 94.821,702.194 93.382,702.054 93.382,700.612
+ 92.229,699.173 90.789,698.741 90.934,700.181 91.798,701.765 90.214,700.612 90.357,702.054 89.35,700.612 86.47,701.333
+ 89.35,703.062 89.926,704.503 92.806,704.646 94.245,705.077 95.686,704.503 97.27,704.356 98.134,704.646 98.134,706.087
+ 98.998,704.503 98.565,706.087 "/>
+ <polyline id="polyline1381" fill="#7FC643" points="88.773,308.79 87.909,310.662 86.325,310.518 85.75,312.102 87.189,312.534
+ 90.214,312.534 92.373,311.669 93.094,310.085 92.373,309.366 90.789,308.646 88.918,308.501 88.773,308.79 "/>
+ <polyline id="polyline1383" fill="#CCE83A" points="103.174,-215.224 103.029,-216.665 101.445,-217.96 100.006,-217.816
+ 98.565,-217.096 97.27,-215.512 96.981,-214.072 95.542,-212.776 92.518,-211.768 91.077,-211.625 89.638,-210.472
+ 89.493,-209.033 86.613,-209.033 88.054,-208.312 89.493,-208.168 90.357,-206.728 91.798,-205.432 93.237,-205.289
+ 94.678,-205.72 99.142,-209.32 100.582,-209.464 101.733,-213.785 103.174,-215.224 "/>
+ <polyline id="polyline1385" fill="#7FC643" points="100.006,324.198 100.294,322.614 98.854,323.622 100.006,324.198 "/>
+ <polyline id="polyline1387" fill="#CCE83A" points="102.021,-222.568 103.462,-223.864 102.021,-222.856 102.021,-222.568 "/>
+ <polyline id="polyline1389" fill="#99D6AA" points="118.149,616.95 113.686,617.235 112.102,617.095 110.661,616.374
+ 109.222,616.374 106.197,617.524 103.317,617.813 102.166,619.255 102.741,620.692 108.646,621.989 110.086,622.71
+ 111.525,622.565 113.109,623.862 116.134,623.718 117.573,623.142 117.142,621.558 118.438,620.118 118.006,617.235
+ 118.149,616.95 "/>
+ <polyline id="polyline1391" fill="#CCE83A" points="104.901,-224.873 104.758,-224.008 106.342,-224.728 104.901,-224.873 "/>
+ <polyline id="polyline1393" fill="#99D6AA" points="109.077,615.798 109.222,615.653 107.781,614.935 106.342,615.222
+ 106.054,616.806 107.638,616.517 109.077,615.798 "/>
+ <polyline id="polyline1395" fill="#CCE83A" points="107.781,-224.44 106.63,-222.712 108.069,-221.56 108.502,-223
+ 107.781,-224.44 "/>
+ <polyline id="polyline1397" fill="#CCE83A" points="110.661,-226.457 110.518,-226.024 109.077,-224.584 111.958,-223.72
+ 113.254,-225.16 112.245,-226.744 110.661,-226.457 "/>
+ <polyline id="polyline1399" fill="#99D6AA" points="112.245,624.005 112.245,623.718 110.806,624.005 112.245,624.005 "/>
+ <polyline id="polyline1401" fill="#CCE83A" points="112.678,-232.216 111.958,-229.768 113.397,-230.776 112.678,-232.216 "/>
+ <polyline id="polyline1403" fill="#CCE83A" points="125.638,-242.296 125.35,-242.44 123.909,-242.008 122.901,-240.568
+ 121.462,-239.272 118.438,-237.256 116.998,-237.4 117.718,-235.96 116.134,-236.392 115.846,-234.953 114.55,-233.512
+ 114.405,-232.072 115.989,-232.216 115.126,-230.776 113.686,-229.768 113.974,-228.328 115.413,-228.328 115.989,-229.912
+ 117.43,-230.056 118.006,-228.617 120.886,-230.056 122.182,-231.497 121.462,-233.081 120.021,-232.936 118.582,-234.376
+ 120.166,-233.944 120.166,-235.384 121.605,-235.816 120.598,-237.256 123.621,-239.272 126.646,-240.856 127.077,-242.296
+ 125.638,-242.296 "/>
+ <polyline id="polyline1405" fill="#CCE83A" points="121.894,-72.376 122.182,-72.088 123.621,-72.232 123.334,-73.672
+ 121.894,-72.376 "/>
+ <polyline id="polyline1407" fill="#CCE83A" points="127.653,-238.984 127.941,-238.696 130.821,-238.696 132.262,-239.417
+ 133.413,-240.856 133.413,-242.44 133.989,-243.88 135.43,-244.312 136.438,-245.752 136.294,-247.336 138.598,-251.8
+ 137.157,-250.648 135.718,-249.928 134.565,-248.488 133.126,-247.336 132.405,-245.896 132.117,-244.457 129.094,-242.008
+ 127.941,-240.568 127.653,-238.984 "/>
+ <polyline id="polyline1409" fill="#CCE83A" points="142.773,-137.32 140.325,-138.617 138.886,-138.904 137.302,-138.472
+ 134.422,-139.336 135.285,-137.896 133.846,-136.888 130.966,-136.168 132.693,-131.705 132.981,-130.266 134.422,-129.833
+ 136.006,-130.552 137.445,-129.688 139.029,-130.84 141.909,-132.424 142.197,-133.864 145.077,-134.152 146.661,-135.448
+ 145.365,-136.888 143.926,-137.608 142.773,-137.32 "/>
+ <polyline id="polyline1411" fill="#99D6AA" points="134.998,592.038 133.846,591.604 132.405,592.038 133.701,593.478
+ 134.998,592.038 "/>
+ <polyline id="polyline1413" fill="#99D6AA" points="141.909,604.997 141.046,603.413 142.485,603.413 143.926,604.565
+ 144.069,601.687 142.773,600.247 141.909,597.222 141.046,595.638 139.605,594.919 138.166,593.765 136.726,593.478
+ 135.573,594.919 134.998,596.501 135.142,597.942 136.438,600.966 138.741,603.847 138.886,605.431 139.605,606.87 140.901,608.31
+ 142.342,608.31 143.062,606.87 141.909,604.997 "/>
+ <polyline id="polyline1415" fill="#99D6AA" points="137.014,585.413 139.75,586.997 141.189,588.581 142.63,589.589
+ 144.069,589.733 141.909,586.71 139.029,584.263 137.59,583.829 136.006,583.829 137.014,585.413 "/>
+ <polyline id="polyline1417" fill="#99D6AA" points="147.958,597.366 147.958,597.079 146.806,595.638 143.926,593.333
+ 142.342,592.47 140.758,592.325 137.878,591.462 136.438,591.317 137.014,592.759 138.453,593.188 139.894,594.63 141.478,595.349
+ 142.918,596.356 143.493,599.382 144.934,599.813 146.518,599.671 146.518,598.229 147.958,597.366 "/>
+ <polyline id="polyline1419" fill="#CCE83A" points="148.102,-253.816 147.958,-254.104 146.518,-253.528 145.077,-253.816
+ 145.222,-252.376 146.661,-252.665 148.245,-253.384 148.102,-253.816 "/>
+ <polyline id="polyline1421" fill="#99D6AA" points="149.686,420.103 150.262,419.386 150.693,417.798 150.693,416.358
+ 151.701,414.774 150.981,413.331 149.542,414.198 148.678,415.64 148.678,418.519 149.686,420.103 "/>
+ <polyline id="polyline1423" fill="#7FC643" points="151.126,912.437 151.846,912.294 151.413,910.708 149.686,911.286
+ 151.126,912.437 "/>
+ <polyline id="polyline1425" fill="#CCE83A" points="155.59,-259.576 155.302,-258.856 153.861,-258.28 154.582,-256.84
+ 156.021,-258.136 155.59,-259.576 "/>
+ <polyline id="polyline1427" fill="#CCE83A" points="154.294,-195.785 154.294,-194.632 155.878,-195.208 154.294,-195.785 "/>
+ <polyline id="polyline1429" fill="#99D6AA" points="161.205,575.765 159.766,575.046 158.325,575.333 156.741,575.911
+ 155.59,577.349 157.75,580.374 159.334,580.95 162.214,581.095 162.789,578.071 162.069,576.63 161.205,575.765 "/>
+ <polyline id="polyline1431" fill="#99D6AA" points="162.069,421.253 161.205,422.694 160.773,424.136 160.918,427.155
+ 160.485,428.599 164.806,427.015 165.237,425.573 165.525,423.987 165.382,421.11 163.941,419.815 162.502,420.245
+ 162.069,421.253 "/>
+ <polyline id="polyline1433" fill="#CCE83A" points="162.357,-188.008 161.781,-185.992 163.222,-186.568 162.357,-188.008 "/>
+ <polyline id="polyline1435" fill="#99D6AA" points="163.941,416.499 164.086,416.79 165.525,417.077 165.382,415.64
+ 163.941,416.499 "/>
+ <polyline id="polyline1437" fill="#99D6AA" points="167.829,570.005 168.405,568.567 166.966,567.413 164.661,570.438
+ 164.949,572.022 166.39,573.173 168.405,571.733 168.117,570.149 167.829,570.005 "/>
+ <polyline id="polyline1439" fill="#CCE83A" points="176.47,-92.968 174.886,-94.121 176.325,-92.824 174.741,-93.4 174.31,-94.984
+ 172.869,-95.128 172.726,-93.544 171.861,-92.104 170.422,-91.528 168.838,-91.24 167.397,-90.376 167.109,-88.936 168.55,-88.648
+ 170.134,-89.369 171.573,-88.792 173.014,-89.224 174.453,-88.216 176.037,-88.072 177.478,-87.642 179.062,-85.768
+ 180.646,-85.048 182.086,-85.625 183.67,-86.776 185.109,-87.352 186.55,-87.208 187.989,-87.497 189.573,-86.632 191.014,-85.48
+ 190.726,-86.92 191.302,-88.36 191.157,-89.8 190.294,-91.24 188.854,-91.816 187.413,-91.816 185.829,-90.376 184.39,-89.8
+ 181.51,-90.376 184.678,-89.656 181.653,-89.944 178.63,-91.24 177.909,-92.682 176.47,-92.968 "/>
+ <polyline id="polyline1441" fill="#99D6AA" points="171.573,576.63 170.134,575.911 170.565,577.349 171.573,576.63 "/>
+ <polyline id="polyline1443" fill="#CCE83A" points="173.157,-266.632 171.718,-265.625 172.294,-264.184 173.733,-265.192
+ 173.157,-266.632 "/>
+ <polyline id="polyline1445" fill="#99D6AA" points="178.773,565.397 177.334,566.55 176.325,565.11 174.886,565.397
+ 173.878,568.278 173.014,569.718 174.453,571.157 177.478,571.444 178.054,572.886 179.493,572.022 180.069,570.581
+ 178.485,570.726 177.334,569.286 176.901,567.702 178.342,567.558 178.773,565.397 "/>
+ <polyline id="polyline1447" fill="#99D6AA" points="178.485,426.151 178.773,424.71 177.909,423.126 177.766,424.71
+ 178.485,426.151 "/>
+ <polyline id="polyline1449" fill="#CCE83A" points="182.949,-271.384 178.63,-269.656 182.949,-270.088 184.533,-269.656
+ 185.974,-270.088 187.413,-270.088 188.998,-270.52 187.413,-271.384 184.39,-271.096 182.949,-271.384 "/>
+ <polyline id="polyline1451" fill="#99D6AA" points="179.062,426.294 179.35,426.294 180.214,424.854 179.205,423.413
+ 179.062,426.294 "/>
+ <polyline id="polyline1453" fill="#99D6AA" points="180.069,552.726 181.365,548.263 182.518,545.235 182.229,543.798
+ 180.069,546.679 179.062,555.606 179.926,554.165 180.069,552.726 "/>
+ <polyline id="polyline1455" fill="#99D6AA" points="181.51,521.333 180.646,521.333 180.214,522.919 181.51,521.333 "/>
+ <polyline id="polyline1457" fill="#99D6AA" points="181.365,425.722 181.941,425.722 181.653,424.136 181.941,422.694
+ 180.646,421.11 181.077,422.694 180.789,424.136 181.365,425.722 "/>
+ <polyline id="polyline1459" fill="#FECC2E" points="182.806,869.093 183.094,869.093 183.094,867.653 182.806,869.093 "/>
+ <polyline id="polyline1461" fill="#99D6AA" points="184.966,523.062 183.382,522.63 184.245,524.79 185.829,526.229
+ 184.821,523.638 184.966,523.062 "/>
+ <polyline id="polyline1463" fill="#FECC2E" points="185.254,866.933 185.254,863.333 184.678,861.892 183.813,864.772
+ 183.813,866.214 185.254,866.933 "/>
+ <polyline id="polyline1465" fill="#FECC2E" points="186.117,860.597 185.829,859.589 187.413,859.444 187.126,858.005
+ 185.542,857.571 184.102,857.862 184.678,859.302 186.117,860.597 "/>
+ <polyline id="polyline1467" fill="#FECC2E" points="185.397,862.181 186.262,861.317 184.821,860.741 185.397,862.181 "/>
+ <polyline id="polyline1469" points="187.558,-140.632 188.134,-139.768 189.718,-139.625 191.157,-139.192 192.598,-138.472
+ 194.182,-137.32 193.462,-138.76 190.582,-140.632 188.998,-140.344 187.558,-140.632 "/>
+ <polygon id="polygon1471" fill="none" stroke="#CCE83A" stroke-width="0.44" stroke-miterlimit="1" points="187.558,-140.632
+ 188.134,-139.768 189.718,-139.625 191.157,-139.192 192.598,-138.472 194.182,-137.32 193.462,-138.76 190.582,-140.632
+ 188.998,-140.344 "/>
+ <polyline id="polyline1473" fill="#FECC2E" points="190.582,854.837 191.878,854.548 191.878,852.964 193.174,854.403
+ 194.613,853.54 194.325,852.101 192.741,852.101 194.325,851.813 195.046,850.372 196.485,850.948 196.054,849.364
+ 196.918,847.925 197.35,846.485 195.766,846.485 192.886,847.925 191.445,849.077 191.878,850.517 190.294,850.806
+ 189.285,849.364 188.277,850.806 189.142,853.685 190.582,854.837 187.846,855.845 189.285,856.997 190.726,856.278
+ 190.582,854.837 "/>
+ <polyline id="polyline1475" fill="#99D6AA" points="188.565,517.444 188.277,517.302 188.277,518.886 188.565,517.444 "/>
+ <polyline id="polyline1477" fill="#CCE83A" points="194.325,-270.808 198.646,-271.96 200.086,-272.968 201.525,-273.4
+ 199.941,-273.4 198.502,-272.824 195.478,-272.537 193.894,-271.528 192.453,-270.953 191.014,-271.096 189.43,-270.376
+ 190.726,-268.936 189.285,-268.216 188.998,-266.776 190.438,-266.201 191.878,-266.776 192.886,-268.216 191.445,-268.936
+ 194.325,-270.808 "/>
+ <polyline id="polyline1479" fill="#99D6AA" points="192.31,526.95 191.302,527.095 190.149,528.534 189.718,530.118
+ 191.157,529.829 192.166,528.39 192.31,526.95 "/>
+ <polyline id="polyline1481" fill="#FECC2E" points="191.445,891.845 193.462,890.837 193.894,889.397 193.029,886.517
+ 191.59,886.806 190.149,888.101 190.582,889.54 192.021,888.821 191.445,891.845 "/>
+ <polyline id="polyline1483" fill="#FECC2E" points="196.485,869.38 197.926,868.517 199.365,867.222 199.51,865.78
+ 198.069,865.925 196.63,865.062 196.054,863.478 196.054,860.597 195.334,859.157 193.894,859.735 193.317,861.173
+ 191.878,860.741 191.733,862.181 190.294,862.325 191.445,863.765 192.886,863.478 192.741,864.917 193.75,866.356
+ 196.773,866.646 198.214,867.077 196.773,867.94 196.485,869.38 "/>
+ <polyline id="polyline1485" fill="#99D6AA" points="191.302,511.397 192.741,509.958 191.157,510.103 190.582,511.542
+ 192.021,511.829 191.302,511.397 "/>
+ <polyline id="polyline1487" fill="#FECC2E" points="193.462,870.388 193.894,870.245 194.037,868.806 192.598,868.948
+ 193.462,870.388 "/>
+ <polyline id="polyline1489" fill="#99D6AA" points="194.182,514.278 193.605,513.847 192.598,515.286 194.182,514.278 "/>
+ <polyline id="polyline1491" fill="#FECC2E" points="192.741,881.046 197.926,880.181 198.934,878.741 197.493,877.589
+ 196.054,876.87 195.189,875.286 193.75,875.571 193.605,877.013 194.325,878.454 194.325,879.892 192.741,881.046 "/>
+ <polyline id="polyline1493" fill="#FECC2E" points="194.758,888.677 197.062,885.222 197.205,883.78 195.766,884.788
+ 195.334,886.229 193.75,887.235 194.758,888.677 "/>
+ <polyline id="polyline1495" points="195.334,789.462 196.773,788.741 195.334,787.157 193.894,788.022 195.334,789.462 "/>
+
+ <polygon id="polygon1497" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 195.334,789.462 196.773,788.741 195.334,787.157 193.894,788.022 "/>
+ <polyline id="polyline1499" fill="#99D6AA" points="195.621,511.542 195.046,511.542 194.901,512.981 195.621,511.542 "/>
+ <polyline id="polyline1501" points="197.205,786.438 195.766,785.862 195.621,787.302 197.062,788.454 197.781,789.894
+ 198.934,791.333 199.077,790.899 198.357,789.462 198.357,787.878 199.653,789.462 200.229,788.022 199.077,786.438
+ 198.357,784.997 196.918,784.854 197.205,786.438 "/>
+
+ <polygon id="polygon1503" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 197.205,786.438 195.766,785.862 195.621,787.302 197.062,788.454 197.781,789.894 198.934,791.333 199.077,790.899
+ 198.357,789.462 198.357,787.878 199.653,789.462 200.229,788.022 199.077,786.438 198.357,784.997 196.918,784.854 "/>
+ <polyline id="polyline1505" points="198.502,799.974 198.214,797.093 196.773,796.517 196.918,797.956 197.926,799.54
+ 198.502,799.974 "/>
+
+ <polygon id="polygon1507" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 198.502,799.974 198.214,797.093 196.773,796.517 196.918,797.956 197.926,799.54 "/>
+ <polyline id="polyline1509" fill="#FFFF7F" points="199.941,-70.936 198.502,-71.081 197.062,-70.072 198.502,-68.776
+ 199.653,-70.216 199.941,-70.936 "/>
+ <polyline id="polyline1511" fill="#99D6AA" points="198.789,506.358 197.638,507.366 197.35,508.806 198.789,507.798
+ 198.789,506.358 "/>
+ <polyline id="polyline1513" fill="#99D6AA" points="199.653,490.519 199.798,490.229 199.077,488.647 197.493,489.366
+ 198.069,490.806 199.653,490.519 "/>
+ <polyline id="polyline1515" fill="#FECC2E" points="201.958,895.157 202.821,895.013 202.533,893.571 202.678,892.132
+ 201.67,890.548 200.229,891.413 200.518,894.294 201.958,895.157 "/>
+ <polyline id="polyline1517" points="200.949,787.735 201.958,786.294 200.949,784.854 200.949,787.735 "/>
+
+ <polygon id="polygon1519" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 200.949,787.735 201.958,786.294 200.949,784.854 "/>
+ <polyline id="polyline1521" fill="#99D6AA" points="203.109,647.765 203.397,647.765 204.838,646.47 206.277,645.604
+ 207.861,645.604 209.302,644.165 208.726,642.726 207.285,643.444 206.422,644.886 203.542,646.325 203.109,647.765 "/>
+ <polyline id="polyline1523" fill="#FECC2E" points="203.974,916.899 205.27,916.899 206.71,916.181 208.006,914.741
+ 208.726,913.157 208.149,911.716 206.71,912.581 205.846,914.021 204.55,915.462 203.974,916.899 "/>
+ <polyline id="polyline1525" fill="#FECC2E" points="207.285,931.731 207.285,931.444 209.302,930.294 210.453,929.14
+ 209.014,928.997 208.294,927.413 206.854,926.979 205.413,927.702 205.126,929.14 205.846,930.294 207.285,931.731 "/>
+ <polyline id="polyline1527" fill="#99D6AA" points="206.422,462.729 207.573,462.581 207.573,459.702 206.854,458.118
+ 206.277,459.702 206.422,462.729 "/>
+ <polyline id="polyline1529" fill="#99D6AA" points="208.869,467.767 209.59,467.767 208.294,466.323 208.869,467.767 "/>
+ <polyline id="polyline1531" fill="#CCE83A" points="209.014,-276.424 209.014,-276.136 210.453,-275.992 209.014,-276.424 "/>
+ <polyline id="polyline1533" fill="#CCE83A" points="210.166,-274.696 210.166,-272.68 211.605,-273.833 210.166,-274.696 "/>
+ <polyline id="polyline1535" fill="#CCE83A" points="210.886,-277.72 210.166,-276.424 211.75,-276.28 210.886,-277.72 "/>
+ <polyline id="polyline1537" fill="#CCE83A" points="212.901,-278.728 212.182,-277.72 213.621,-277.144 212.901,-278.728 "/>
+ <polyline id="polyline1539" fill="#CCE83A" points="219.382,-281.176 218.229,-279.592 216.789,-279.592 213.909,-278.44
+ 214.63,-276.856 216.069,-276.28 216.069,-274.84 217.51,-275.272 217.077,-276.856 219.382,-279.736 219.382,-281.176 "/>
+ <polyline id="polyline1541" fill="#CCE83A" points="227.014,-280.6 224.422,-279.304 222.981,-280.024 221.542,-279.16
+ 221.686,-277.72 220.821,-276.28 222.405,-276.568 222.55,-278.008 225.573,-279.016 227.014,-280.6 "/>
+ <polyline id="polyline1543" fill="#FECC2E" points="223.846,843.749 224.134,842.454 222.693,842.31 223.846,843.749 "/>
+ <polyline id="polyline1545" fill="#FECC2E" points="227.59,842.31 228.31,841.013 226.869,840.438 225.43,840.581 226.006,839.142
+ 224.565,837.989 223.126,839.142 223.989,840.726 223.989,841.302 225.43,841.302 226.869,842.165 227.59,842.31 "/>
+ <polyline id="polyline1547" fill="#FECC2E" points="227.302,836.837 227.302,835.974 225.861,835.397 227.302,836.837 "/>
+ <polyline id="polyline1549" fill="#FECC2E" points="226.438,844.612 226.726,844.47 226.726,843.03 226.006,843.173
+ 226.438,844.612 "/>
+ <polyline id="polyline1551" fill="#CCE83A" points="229.75,-281.608 229.75,-281.32 228.741,-279.88 228.741,-278.44
+ 227.302,-277.576 228.741,-277.72 230.325,-276.568 231.766,-276.568 233.35,-277.432 230.325,-279.016 231.334,-280.457
+ 229.75,-281.608 "/>
+ <polyline id="polyline1553" fill="#FECC2E" points="229.029,837.558 229.75,836.837 231.189,835.974 229.75,836.118
+ 229.029,837.558 "/>
+ <polyline id="polyline1555" fill="#FECC2E" points="242.277,825.173 242.422,823.589 243.43,819.271 242.422,817.253
+ 241.413,815.813 239.974,816.821 240.405,818.261 241.846,819.558 238.966,820.132 238.678,821.571 240.117,822.581
+ 240.55,821.142 241.558,822.581 241.558,824.022 240.693,826.612 242.277,825.173 "/>
+ <polyline id="polyline1557" fill="#FFFF7F" points="252.502,26.694 248.901,25.4 247.317,25.543 244.149,26.984 242.565,27.272
+ 240.981,27.99 239.397,29.286 238.966,30.728 240.405,32.454 244.869,36.056 246.453,36.486 249.478,35.91 250.918,35.91
+ 252.502,35.48 258.262,30.44 259.27,28.998 259.846,27.56 259.129,24.534 257.686,24.534 256.102,24.967 254.518,24.967
+ 252.502,26.694 "/>
+ <polyline id="polyline1559" fill="#FECC2E" points="243.142,817.397 244.006,815.956 244.149,814.517 242.71,814.948
+ 242.71,816.39 243.142,817.397 "/>
+ <polyline id="polyline1561" fill="#CCE83A" points="256.246,-277.72 255.238,-277.144 255.525,-275.56 256.965,-275.56
+ 257.686,-277 256.246,-277.72 "/>
+ <polyline id="polyline1563" fill="#CCE83A" points="260.563,-285.64 259.27,-284.92 260.711,-284.488 262.148,-283.48
+ 263.445,-282.041 264.883,-281.464 266.473,-281.608 263.445,-283.048 260.563,-285.64 "/>
+ <polyline id="polyline1565" fill="#CCE83A" points="281.301,-277.72 279.861,-275.992 278.277,-276.28 278.133,-274.84
+ 277.27,-273.4 278.711,-274.121 281.59,-276.28 281.301,-277.72 "/>
+ <polyline id="polyline1567" fill="#8FB5BE" points="298.148,495.271 298.293,496.278 297.861,497.862 298.148,499.302
+ 299.879,502.325 300.883,505.206 303.334,509.671 303.334,511.11 302.473,509.671 301.029,509.235 301.029,507.798 299.73,506.358
+ 297.43,501.751 296.133,500.31 294.693,499.878 294.547,501.317 294.838,502.903 293.828,504.341 294.693,505.927 294.693,507.366
+ 293.686,505.927 292.246,505.349 292.533,503.911 290.949,504.198 289.51,505.062 291.67,502.038 293.254,500.599 292.246,499.013
+ 290.66,500.165 289.223,501.606 287.781,501.03 287.641,502.47 286.197,501.317 285.189,502.903 286.197,504.341 285.047,507.222
+ 285.334,508.663 286.773,511.687 288.066,512.403 288.215,510.821 287.781,509.382 289.223,509.671 288.934,512.694
+ 290.949,515.573 288.789,514.997 287.35,514.997 288.502,516.438 288.934,517.878 289.797,519.462 290.949,520.903
+ 293.828,521.911 292.391,522.341 293.109,523.927 296.133,526.229 297.57,524.935 299.156,524.358 299.014,522.919
+ 300.021,521.333 298.869,518.454 299.445,516.87 300.598,518.454 301.174,515.573 301.605,517.013 301.174,518.454
+ 301.895,519.894 303.334,520.038 304.484,518.597 304.918,517.157 306.066,515.718 305.492,518.597 306.789,520.181
+ 308.373,519.894 306.934,521.333 305.35,521.333 303.906,522.485 304.342,523.927 302.898,524.935 302.613,526.374 301.174,526.95
+ 298.148,528.821 299.156,531.847 300.021,533.286 302.898,531.989 304.342,530.981 305.641,529.397 307.074,529.687
+ 310.102,527.958 310.533,529.397 309.094,529.829 306.066,531.558 304.629,532.71 304.342,534.149 307.365,534.005
+ 308.809,535.157 307.365,534.726 304.484,535.302 303.766,536.454 302.182,535.302 301.174,536.743 301.605,538.325
+ 304.055,541.349 305.492,541.349 308.518,543.366 309.957,543.079 310.678,541.638 311.686,543.079 310.246,544.087
+ 310.533,545.671 314.998,548.839 316.438,547.397 316.582,545.958 315.141,544.95 315.861,541.927 315.43,540.341 315.43,538.903
+ 314.711,536.022 315.141,532.997 316.582,532.421 315.715,527.958 314.854,526.374 314.711,523.495 316.148,522.485
+ 314.711,519.462 314.277,516.581 315.715,514.997 316.293,513.56 317.014,512.55 319.895,510.39 319.895,508.95 318.453,507.798
+ 315.43,507.653 313.988,507.222 312.838,505.782 311.398,505.349 309.957,505.927 308.949,504.485 308.23,501.606 307.074,500.165
+ 305.641,499.444 305.492,500.886 305.781,502.325 305.063,503.765 305.063,502.325 304.484,500.743 304.484,497.862
+ 301.461,495.56 300.021,496.567 298.869,494.839 298.148,495.271 "/>
+ <polyline id="polyline1569" fill="#8FB5BE" points="292.391,525.079 290.66,523.062 289.223,522.054 288.502,520.47
+ 288.215,519.03 287.492,517.589 286.055,517.589 286.342,519.03 287.35,520.47 288.789,523.349 290.23,524.071 293.109,526.517
+ 292.391,525.079 "/>
+ <polyline id="polyline1571" fill="#8FB5BE" points="293.543,793.349 291.957,793.062 291.957,794.501 293.398,794.356
+ 293.543,793.349 "/>
+ <polyline id="polyline1573" fill="#8FB5BE" points="293.828,805.444 293.686,804.726 292.102,805.013 292.391,806.454
+ 293.828,805.444 "/>
+ <polyline id="polyline1575" fill="#8FB5BE" points="293.686,791.478 292.533,790.899 293.543,792.341 293.686,791.478 "/>
+ <polyline id="polyline1577" fill="#8FB5BE" points="294.693,813.222 295.988,813.653 294.693,812.067 293.254,811.78
+ 294.693,813.222 "/>
+ <polyline id="polyline1579" fill="#8FB5BE" points="295.701,817.687 295.27,817.54 294.262,815.956 294.547,817.54
+ 294.406,818.981 295.846,819.124 295.701,817.687 "/>
+ <polyline id="polyline1581" fill="#8FB5BE" points="294.406,814.948 295.846,816.103 294.547,814.661 294.406,814.948 "/>
+ <polyline id="polyline1583" fill="#8FB5BE" points="294.406,813.94 294.547,814.372 295.988,814.229 294.406,813.94 "/>
+ <polyline id="polyline1585" fill="#8FB5BE" points="298.438,786.294 296.998,786.294 296.854,787.878 298.293,787.589
+ 298.438,786.294 "/>
+ <polyline id="polyline1587" fill="#8FB5BE" points="297.57,825.894 297.43,827.478 296.998,828.917 297.57,827.333 297.57,825.894
+ "/>
+ <polyline id="polyline1589" fill="#8FB5BE" points="297.861,832.517 297.715,835.397 298.727,833.956 298.438,832.948
+ 297.861,832.517 "/>
+ <polyline id="polyline1591" fill="#8FB5BE" points="299.301,827.046 299.879,825.462 298.869,824.022 298.148,823.589
+ 297.861,825.03 298.438,826.47 299.301,827.046 "/>
+ <polyline id="polyline1593" fill="#8FB5BE" points="299.879,784.278 298.869,785.716 300.313,785.286 299.879,784.278 "/>
+ <polyline id="polyline1595" fill="#8FB5BE" points="301.029,822.726 300.453,821.429 299.301,823.013 299.879,824.454
+ 301.029,822.726 "/>
+ <polyline id="polyline1597" points="302.037,933.462 303.189,932.021 302.613,930.581 301.75,932.021 302.037,933.462 "/>
+ <polygon id="polygon1599" fill="none" stroke="#B28765" stroke-width="0.44" stroke-miterlimit="1" points="302.037,933.462
+ 303.189,932.021 302.613,930.581 301.75,932.021 "/>
+ <polyline id="polyline1601" fill="#8FB5BE" points="327.379,483.751 326.809,482.312 325.365,481.878 323.926,482.022
+ 322.484,483.173 319.461,482.454 318.021,481.878 317.879,483.462 316.727,486.341 315.285,485.479 315.43,483.896
+ 314.711,482.454 313.129,481.589 313.559,483.03 312.98,484.47 314.133,487.495 314.998,489.079 314.854,489.509 314.422,489.653
+ 312.262,486.774 310.82,487.495 309.379,487.782 307.941,486.198 306.502,485.911 305.063,484.612 304.773,486.054
+ 306.215,486.919 306.357,488.358 304.773,487.638 304.773,489.079 306.357,489.942 306.215,491.382 304.629,490.374
+ 303.189,490.806 301.75,491.813 303.334,492.247 305.205,493.11 304.773,493.255 304.055,494.839 304.918,496.278 306.357,497.286
+ 307.941,496.997 309.379,496.421 311.398,494.403 314.422,492.821 315.861,492.679 315.141,494.118 312.117,495.989
+ 313.701,497.142 312.262,497.862 310.82,497.431 310.533,497.573 309.957,499.013 312.693,500.022 314.277,500.165
+ 317.156,499.733 318.598,498.581 321.621,500.743 323.063,500.599 324.502,500.022 325.223,496.997 326.809,496.278
+ 327.525,494.839 327.67,493.255 327.094,490.374 328.391,485.911 327.379,483.751 "/>
+ <polyline id="polyline1603" fill="#8FB5BE" points="303.047,489.798 303.477,488.358 301.895,488.214 303.047,489.798 "/>
+ <polyline id="polyline1605" points="306.066,927.556 307.652,926.837 309.094,925.829 307.51,926.403 306.066,927.556 "/>
+ <polygon id="polygon1607" fill="none" stroke="#B28765" stroke-width="0.44" stroke-miterlimit="1" points="306.066,927.556
+ 307.652,926.837 309.094,925.829 307.51,926.403 "/>
+ <polyline id="polyline1609" fill="#8FB5BE" points="310.965,774.054 311.686,773.046 311.254,771.462 309.813,772.612
+ 309.525,774.054 310.965,774.054 "/>
+ <polyline id="polyline1611" fill="#8FB5BE" points="314.563,767.142 314.277,766.421 312.838,765.847 311.543,767.286
+ 313.129,767.862 314.563,767.142 "/>
+ <polyline id="polyline1613" fill="#8FB5BE" points="312.406,771.462 312.117,772.899 312.693,772.612 312.406,771.462 "/>
+ <polyline id="polyline1615" fill="#FFFF7F" points="318.021,17.192 319.605,17.48 321.189,16.614 322.342,15.176 320.898,13.879
+ 320.182,12.44 318.738,11.144 317.156,9.99 315.715,9.704 314.277,10.711 313.988,12.15 312.838,13.734 314.277,14.888
+ 318.021,17.192 "/>
+ <polyline id="polyline1617" fill="#8FB5BE" points="315.141,507.079 315.57,506.646 315.43,505.206 313.846,505.638
+ 315.141,507.079 "/>
+ <polyline id="polyline1619" fill="#8FB5BE" points="318.453,760.372 317.014,760.517 315.141,761.669 316.869,761.813
+ 318.453,761.095 318.453,760.372 "/>
+ <polyline id="polyline1621" fill="#8FB5BE" points="315.285,765.271 316.148,765.847 320.613,763.829 320.473,762.39
+ 319.029,762.245 317.59,763.397 316.006,763.829 315.285,765.271 "/>
+ <polyline id="polyline1623" fill="#8FB5BE" points="315.57,769.302 317.156,769.878 317.014,768.294 315.57,768.294
+ 315.57,769.302 "/>
+ <polyline id="polyline1625" fill="#8FB5BE" points="317.445,515.431 319.029,515.573 319.461,517.013 320.613,518.597
+ 322.055,518.454 323.492,517.013 324.934,516.438 324.789,514.997 323.205,511.974 321.766,511.542 320.324,511.687
+ 319.75,513.126 318.313,514.278 317.445,515.431 "/>
+ <polyline id="polyline1627" fill="#CCE83A" points="319.605,-266.488 318.738,-265.625 318.021,-264.184 319.461,-264.184
+ 320.898,-265.048 322.484,-265.336 319.605,-266.488 "/>
+ <polyline id="polyline1629" fill="#CCE83A" points="326.518,-259.432 324.934,-258.424 323.35,-258.568 321.906,-258.28
+ 322.918,-256.84 324.357,-255.976 325.941,-255.833 327.525,-255.112 328.965,-255.112 330.406,-256.264 328.965,-257.128
+ 327.379,-257.128 327.957,-258.568 326.518,-259.432 "/>
+ <polyline id="polyline1631" fill="#8FB5BE" points="325.652,529.974 327.094,529.542 328.533,528.39 329.828,526.95
+ 331.414,525.942 331.27,527.526 331.701,530.403 333.285,530.403 333.285,528.821 334.727,527.382 335.301,525.798
+ 335.156,522.919 335.879,521.333 337.029,519.894 334.148,518.597 333.141,520.038 331.701,519.751 330.117,519.03
+ 329.109,517.589 329.828,516.149 328.246,515.286 326.809,515.862 325.223,517.013 323.781,517.733 322.484,519.173
+ 322.197,520.612 325.223,521.765 325.51,523.206 325.652,526.229 325.365,529.11 325.652,529.974 "/>
+ <polyline id="polyline1633" points="322.918,920.788 324.357,920.214 322.773,920.646 322.918,920.788 "/>
+ <polygon id="polygon1635" fill="none" stroke="#CCE83A" stroke-width="0.44" stroke-miterlimit="1" points="322.918,920.788
+ 324.357,920.214 322.773,920.646 "/>
+ <polyline id="polyline1637" fill="#8FB5BE" points="330.262,738.63 329.109,740.214 330.547,739.062 330.262,738.63 "/>
+ <polyline id="polyline1639" fill="#8FB5BE" points="330.262,739.493 331.701,740.214 332.854,738.63 331.414,738.341
+ 330.262,739.493 "/>
+ <polyline id="polyline1641" fill="#8FB5BE" points="334.148,745.397 333.715,743.956 332.277,743.095 332.854,744.679
+ 334.148,745.397 "/>
+ <polyline id="polyline1643" fill="#8FB5BE" points="333.285,687.653 332.998,690.679 334.438,689.095 334.293,688.661
+ 334.582,687.364 334.293,685.927 333.285,687.364 333.285,687.653 "/>
+ <polyline id="polyline1645" fill="#8FB5BE" points="333.861,726.679 335.156,726.966 335.301,725.524 333.861,726.679 "/>
+ <polyline id="polyline1647" fill="#8FB5BE" points="336.453,504.341 335.879,502.903 334.293,501.894 335.014,503.478
+ 336.453,504.341 "/>
+ <polyline id="polyline1649" fill="#8FB5BE" points="335.879,685.78 335.879,684.919 334.438,686.503 334.727,687.222
+ 335.879,685.78 "/>
+ <polyline id="polyline1651" fill="#8FB5BE" points="336.021,580.229 336.453,579.079 335.156,577.638 334.582,579.079
+ 336.021,580.229 "/>
+ <polyline id="polyline1653" fill="#CCE83A" points="337.461,902.646 337.461,901.638 336.021,902.646 337.461,902.646 "/>
+ <polyline id="polyline1655" fill="#8FB5BE" points="336.598,683.188 336.021,684.63 336.598,684.341 336.166,685.78
+ 337.605,685.493 337.895,683.909 339.334,682.612 339.621,681.894 336.598,681.894 336.598,683.188 "/>
+ <polyline id="polyline1657" fill="#8FB5BE" points="337.75,717.317 336.313,718.47 337.75,718.325 337.75,717.317 "/>
+ <polyline id="polyline1659" fill="#8FB5BE" points="338.182,721.349 339.189,719.909 338.324,719.333 337.461,720.772
+ 338.037,721.493 338.182,721.349 "/>
+ <polyline id="polyline1661" fill="#FFFF7F" points="337.75,476.55 339.477,474.966 340.342,473.526 340.197,472.085
+ 338.182,475.11 337.75,476.55 "/>
+ <polyline id="polyline1663" fill="#8FB5BE" points="338.898,499.589 339.334,498.149 340.773,497.286 342.215,495.989
+ 340.773,496.854 339.334,496.71 338.324,498.149 338.898,499.589 "/>
+ <polyline id="polyline1665" fill="#8FB5BE" points="342.357,673.397 343.365,672.821 342.645,674.403 342.645,675.7
+ 344.518,674.403 345.094,673.11 342.502,668.646 341.926,670.087 343.074,671.671 341.781,671.235 340.918,673.11 339.477,673.255
+ 339.766,676.134 341.205,674.839 342.357,673.397 "/>
+ <polyline id="polyline1667" fill="#8FB5BE" points="339.766,680.741 339.766,681.894 340.055,681.749 339.766,680.741 "/>
+ <polyline id="polyline1669" fill="#8FB5BE" points="344.086,679.444 343.51,677.718 342.934,679.157 342.645,678.149
+ 341.063,679.157 341.063,680.597 340.342,682.038 341.781,682.325 342.645,680.741 344.086,679.444 "/>
+ <polyline id="polyline1671" fill="#8FB5BE" points="343.223,676.421 343.074,675.989 342.066,675.847 342.066,677.431
+ 343.223,676.421 "/>
+ <polyline id="polyline1673" fill="#8FB5BE" points="343.51,699.317 343.365,700.47 344.809,700.757 343.51,699.317 "/>
+ <polyline id="polyline1675" fill="#8FB5BE" points="346.965,663.173 345.525,663.604 345.379,665.046 344.373,666.63
+ 344.373,669.511 345.525,668.356 346.391,666.919 346.82,665.478 346.965,663.173 "/>
+ <polyline id="polyline1677" fill="#8FB5BE" points="346.82,668.214 345.67,668.79 345.379,669.364 345.813,672.532 345.238,673.11
+ 345.957,674.55 344.518,675.558 345.238,676.997 344.66,678.438 344.949,680.022 345.67,678.581 346.965,677.142 346.965,678.726
+ 348.406,678.438 348.838,676.997 348.693,675.413 349.846,676.997 350.711,673.974 352.148,673.397 352.293,672.245
+ 351.57,669.222 349.988,668.935 348.547,670.229 348.838,672.245 347.973,673.829 347.828,675.271 347.543,673.687 348.406,672.39
+ 348.117,670.806 346.82,668.214 "/>
+ <polyline id="polyline1679" fill="#8FB5BE" points="345.813,686.067 347.109,685.206 345.67,685.493 345.813,686.067 "/>
+ <polyline id="polyline1681" fill="#8FB5BE" points="346.391,539.333 346.533,536.165 346.102,534.726 346.246,536.31
+ 345.957,537.751 346.391,539.333 "/>
+ <polyline id="polyline1683" fill="#99D6AA" points="350.277,892.565 351.43,892.565 352.148,894.005 355.174,894.149
+ 357.906,892.565 358.055,890.981 357.477,889.397 357.766,889.11 356.473,887.669 354.883,887.524 356.473,886.372
+ 355.029,884.933 355.029,887.093 353.59,887.813 353.73,886.229 352.293,885.509 349.27,887.093 348.406,887.813 346.82,887.813
+ 346.678,888.101 348.693,890.694 349.27,892.132 350.422,893.571 350.277,892.565 "/>
+ <polyline id="polyline1685" fill="#99D6AA" points="351.141,897.604 351.43,896.597 350.854,895.735 349.129,895.013
+ 347.686,895.302 348.693,895.878 348.838,897.03 351.141,897.604 "/>
+ <polyline id="polyline1687" fill="#8FB5BE" points="350.711,668.503 350.711,667.493 349.27,667.927 350.711,668.503 "/>
+ <polyline id="polyline1689" fill="#8FB5BE" points="350.422,675.7 351.861,675.989 352.148,674.55 350.563,674.694 350.422,675.7
+ "/>
+ <polyline id="polyline1691" fill="#8FB5BE" points="351.715,661.444 351.43,663.03 352.869,662.741 352.006,664.325
+ 353.445,664.325 354.598,662.741 356.037,662.31 357.621,661.444 356.898,658.997 357.047,657.413 355.461,657.413
+ 355.605,655.974 354.166,655.542 354.313,656.981 352.869,655.687 354.021,657.271 352.438,656.981 352.148,658.421
+ 353.73,658.421 352.869,659.142 351.285,659.718 350.998,661.157 351.715,661.444 "/>
+ <polyline id="polyline1693" fill="#99D6AA" points="354.738,880.612 354.166,880.612 353.301,879.173 354.598,882.054
+ 354.738,880.612 "/>
+ <polyline id="polyline1695" fill="#8FB5BE" points="354.738,669.653 355.029,668.79 353.59,668.79 353.301,670.374
+ 354.738,669.653 "/>
+ <polyline id="polyline1697" fill="#99D6AA" points="353.73,859.444 354.453,858.87 355.174,857.429 353.73,858.005 353.73,859.444
+ "/>
+ <polyline id="polyline1699" fill="#99D6AA" points="355.316,897.604 355.316,896.741 353.73,896.741 355.316,897.604 "/>
+ <polyline id="polyline1701" fill="#8FB5BE" points="354.313,667.638 355.895,668.214 355.895,666.772 354.313,666.772
+ 354.313,667.638 "/>
+ <polyline id="polyline1703" fill="#FB9A85" points="356.898,842.165 355.461,843.462 355.75,844.899 358.629,843.604
+ 358.342,842.165 356.898,841.444 356.898,842.165 "/>
+ <polyline id="polyline1705" fill="#8FB5BE" points="359.781,652.087 360.502,651.077 359.781,649.493 358.342,649.062
+ 358.773,650.503 358.773,652.087 358.342,650.503 356.758,651.222 357.189,652.661 356.473,654.103 357.189,655.687
+ 360.215,653.671 359.781,652.087 "/>
+ <polyline id="polyline1707" fill="#FB9A85" points="357.047,845.333 356.613,846.772 358.055,845.765 357.047,845.333 "/>
+ <polyline id="polyline1709" fill="#8FB5BE" points="357.477,647.478 357.766,647.333 357.621,647.046 358.484,645.462
+ 357.047,646.038 357.477,647.478 "/>
+ <polyline id="polyline1711" fill="#99D6AA" points="358.629,894.005 357.189,897.03 358.773,898.325 359.063,895.302
+ 359.492,893.862 359.063,892.565 358.629,894.005 "/>
+ <polyline id="polyline1713" fill="#FFFF7F" points="359.926,18.631 358.484,18.631 357.766,21.654 359.926,18.631 "/>
+ <polyline id="polyline1715" fill="#99D6AA" points="369.715,891.845 370.293,892.132 371.877,891.413 370.725,888.677
+ 373.605,886.229 372.166,884.933 370.725,884.501 370.725,883.062 371.732,881.765 373.029,880.899 373.461,879.462
+ 372.166,875.862 372.598,874.708 371.156,873.989 369.715,873.845 368.277,874.421 365.686,877.444 367.127,877.013
+ 367.846,878.454 368.709,881.188 367.701,880.757 367.846,879.317 366.98,877.878 366.838,879.317 365.973,882.054
+ 365.541,880.612 364.102,880.612 364.963,877.589 363.525,878.021 362.086,878.021 361.223,878.454 362.662,879.03
+ 360.789,882.054 359.35,882.054 357.766,882.63 359.35,883.493 357.906,883.638 359.35,883.78 359.926,885.222 361.074,886.806
+ 360.357,888.245 360.502,888.388 361.654,888.821 363.238,889.972 366.406,889.253 367.846,889.972 367.414,891.413
+ 368.998,891.989 368.277,894.294 369.715,895.735 370.006,896.886 370.869,898.325 371.301,898.181 370.869,896.741
+ 371.445,895.157 372.311,893.716 370.869,893.286 369.43,891.845 369.715,891.845 "/>
+ <polyline id="polyline1717" fill="#8FB5BE" points="362.086,645.894 361.074,646.181 359.641,644.741 359.35,646.325
+ 358.055,647.188 359.063,648.772 360.645,649.78 362.086,648.63 362.23,647.046 362.807,645.604 362.086,645.894 "/>
+ <polyline id="polyline1719" fill="#FFFF7F" points="362.373,10.568 361.365,12.008 361.51,13.592 360.789,16.472 359.641,19.494
+ 361.074,20.215 361.654,18.631 361.795,17.192 362.518,15.751 362.949,14.167 361.795,12.728 361.941,11.288 362.373,10.568 "/>
+ <polyline id="polyline1721" fill="#FFFF7F" points="361.074,446.599 363.379,446.741 364.246,445.304 365.686,445.878
+ 365.541,442.995 365.109,441.413 365.973,439.976 367.414,438.819 365.973,437.815 364.533,438.819 363.094,439.253
+ 363.379,440.694 362.807,442.136 362.662,443.573 361.074,446.599 "/>
+ <polyline id="polyline1723" fill="#99D6AA" points="361.074,896.886 361.941,897.462 363.379,897.604 365.254,898.47
+ 366.838,898.181 369.715,897.173 369.572,895.735 368.131,894.294 367.127,894.005 366.693,895.446 365.254,895.157
+ 363.814,894.149 362.23,894.005 361.074,895.446 361.074,896.886 "/>
+ <polyline id="polyline1725" fill="#8FB5BE" points="363.379,642.87 361.654,641.862 361.941,643.302 363.379,644.31
+ 363.814,644.165 363.379,642.87 "/>
+ <polyline id="polyline1727" fill="#CCE83A" points="364.533,902.214 364.246,900.917 363.814,900.772 362.373,901.062
+ 363.238,902.501 364.533,902.214 "/>
+ <polyline id="polyline1729" fill="#8FB5BE" points="363.238,645.462 362.518,646.757 362.662,648.194 363.814,646.614
+ 363.814,645.173 363.238,645.462 "/>
+ <polyline id="polyline1731" fill="#FFFF7F" points="367.27,150.965 364.533,149.669 363.094,150.822 364.533,151.542
+ 366.547,151.542 367.27,150.965 "/>
+ <polyline id="polyline1733" fill="#FFFF7F" points="365.83,431.479 366.117,431.046 365.973,429.606 364.389,429.897
+ 365.83,431.479 "/>
+ <polyline id="polyline1735" fill="#8FB5BE" points="365.686,642.005 366.117,643.013 367.557,642.87 367.846,641.431
+ 367.414,639.989 365.973,640.421 365.686,642.005 "/>
+ <polyline id="polyline1737" fill="#FFFF7F" points="368.277,409.878 368.854,406.569 367.414,406.136 366.838,407.722
+ 366.838,409.155 368.277,409.878 "/>
+ <polyline id="polyline1739" fill="#FFFF7F" points="372.598,447.171 373.174,445.733 373.029,444.294 374.471,443.862
+ 373.029,442.569 371.59,441.987 372.74,440.405 371.877,437.526 372.883,436.085 372.598,433.065 371.156,432.343 370.293,433.927
+ 369.43,432.343 367.99,433.206 366.838,434.647 366.838,436.229 367.27,437.671 368.709,436.519 368.998,437.958 370.148,439.397
+ 368.709,440.55 367.846,441.987 367.701,443.573 369.285,442.421 368.854,443.862 370.293,443.718 370.006,445.155
+ 368.564,445.304 368.131,446.741 369.572,447.319 370.869,445.878 372.598,447.171 "/>
+ <polyline id="polyline1741" fill="#8FB5BE" points="369.141,646.47 368.998,644.886 368.422,646.47 369.141,646.47 "/>
+ <polyline id="polyline1743" fill="#8FB5BE" points="370.293,642.726 368.564,643.444 370.148,643.013 370.293,642.726 "/>
+ <polyline id="polyline1745" fill="#FFFF7F" points="372.74,412.612 372.453,411.175 371.014,411.749 369.572,411.749
+ 369.43,413.19 369.861,414.63 371.301,413.331 372.74,412.612 "/>
+ <polyline id="polyline1747" fill="#FFFF7F" points="371.301,419.237 372.311,418.229 373.174,416.647 373.318,413.767
+ 370.293,415.927 371.301,417.366 369.861,418.519 371.301,419.237 "/>
+ <polyline id="polyline1749" fill="#FFFF7F" points="372.311,423.413 374.9,422.263 376.486,421.976 380.807,419.958
+ 380.23,418.374 378.789,418.663 377.35,419.526 375.766,419.386 372.883,421.397 371.445,421.976 372.311,423.413 "/>
+ <polyline id="polyline1751" fill="#FFFF7F" points="380.518,123.174 379.223,122.454 376.197,122.312 374.758,122.024
+ 373.174,122.454 371.877,123.896 371.445,125.333 372.883,125.768 373.029,127.206 375.766,130.232 377.205,130.374
+ 378.789,131.526 377.494,132.965 380.086,135.99 381.525,136.278 383.109,135.846 383.83,137.286 382.822,138.728 383.83,140.312
+ 385.414,138.87 387.572,135.846 386.277,132.965 385.99,131.381 384.98,129.942 384.406,128.501 384.117,126.917 383.398,125.48
+ 380.518,123.174 "/>
+ <polyline id="polyline1753" fill="#8FB5BE" points="377.639,626.454 376.629,625.589 375.621,628.47 374.182,628.47
+ 374.758,629.911 373.318,628.899 371.59,632.067 373.029,631.206 373.893,632.646 375.189,631.206 376.629,630.772
+ 377.494,627.894 377.639,626.454 "/>
+ <polyline id="polyline1755" fill="#CCE83A" points="376.197,-217.384 375.621,-218.824 374.471,-220.264 372.883,-221.705
+ 371.877,-223.144 372.166,-221.705 375.908,-217.384 376.197,-217.384 "/>
+ <polyline id="polyline1757" fill="#99D6AA" points="375.189,891.413 375.334,890.548 374.324,890.403 372.021,891.556
+ 372.598,892.997 373.75,891.556 375.189,891.413 "/>
+ <polyline id="polyline1759" fill="#99D6AA" points="374.182,880.47 373.174,881.188 374.037,881.909 374.182,880.47 "/>
+ <polyline id="polyline1761" fill="#FFFF7F" points="373.174,401.386 374.182,401.095 375.766,399.798 375.621,398.358
+ 374.182,398.499 373.318,399.942 373.174,401.386 "/>
+ <polyline id="polyline1763" fill="#FFFF7F" points="373.605,412.038 374.758,411.606 374.9,410.163 373.318,410.599
+ 373.605,412.038 "/>
+ <polyline id="polyline1765" fill="#FFFF7F" points="373.75,419.095 376.055,418.374 379.076,418.229 379.365,416.79
+ 376.486,416.647 374.9,417.655 373.75,419.095 "/>
+ <polyline id="polyline1767" fill="#FFFF7F" points="374.037,416.358 374.9,416.358 374.182,414.917 374.037,416.358 "/>
+ <polyline id="polyline1769" fill="#FFFF7F" points="374.324,426.151 375.766,425.573 377.205,424.278 376.629,422.694
+ 375.189,423.126 374.324,426.151 "/>
+ <polyline id="polyline1771" fill="#FFFF7F" points="377.205,442.854 377.205,442.136 376.629,440.694 375.189,441.271
+ 375.766,442.71 377.205,442.854 "/>
+ <polyline id="polyline1773" fill="#8FB5BE" points="377.781,635.382 378.068,633.942 376.629,633.366 375.621,634.806
+ 377.061,635.524 377.781,635.382 "/>
+ <polyline id="polyline1775" fill="#FFFF7F" points="377.061,415.927 378.934,415.782 378.357,414.198 376.918,414.487
+ 377.061,415.927 "/>
+ <polyline id="polyline1777" fill="#8FB5BE" points="379.795,628.899 378.934,629.478 378.789,630.919 377.35,631.349
+ 376.918,632.79 378.357,632.214 378.646,633.653 380.23,633.366 380.086,631.782 380.807,630.341 379.795,628.899 "/>
+ <polyline id="polyline1779" fill="#FFFF7F" points="378.357,429.749 379.223,429.897 379.076,428.312 377.494,428.312
+ 378.357,429.749 "/>
+ <polyline id="polyline1781" fill="#FFFF7F" points="377.926,423.987 379.223,424.278 380.662,422.839 380.807,421.253
+ 379.365,420.966 378.213,422.554 377.926,423.987 "/>
+ <polyline id="polyline1783" fill="#FFFF7F" points="379.51,435.798 379.654,435.942 381.094,434.935 381.957,433.351
+ 381.094,431.909 379.654,432.198 378.068,432.917 379.51,435.798 "/>
+ <polyline id="polyline1785" fill="#8FB5BE" points="378.646,622.134 380.086,622.421 378.646,621.271 378.646,622.134 "/>
+ <polyline id="polyline1787" fill="#FFFF7F" points="379.365,441.847 378.789,443.431 381.814,440.694 378.934,440.405
+ 379.365,441.847 "/>
+ <polyline id="polyline1789" fill="#8FB5BE" points="382.102,628.038 381.814,626.597 380.373,626.022 379.51,627.604
+ 380.662,629.046 382.102,628.759 382.102,628.038 "/>
+ <polyline id="polyline1791" fill="#FFFF7F" points="380.086,417.511 380.518,418.085 381.957,416.647 381.525,415.206
+ 379.941,416.069 380.086,417.511 "/>
+ <polyline id="polyline1793" fill="#FFFF7F" points="380.518,411.319 381.379,411.319 382.963,409.878 382.389,408.438
+ 380.949,406.854 380.086,408.294 380.086,409.878 380.518,411.319 "/>
+ <polyline id="polyline1795" fill="#FFFF7F" points="385.99,416.935 386.854,417.077 388.293,416.358 388.869,414.774
+ 390.311,413.909 389.156,412.472 388.582,411.03 388.438,409.591 386.998,408.438 385.414,407.862 383.973,408.87 384.117,410.454
+ 383.83,411.897 382.678,413.331 383.254,414.917 384.547,416.358 385.99,416.935 "/>
+ <polyline id="polyline1797" fill="#FFFF7F" points="385.846,406.995 387.572,406.995 389.014,406.71 389.014,405.126
+ 389.59,403.687 388.869,400.808 387.285,399.366 385.846,398.79 384.406,398.647 382.963,400.085 384.117,401.526 385.557,402.534
+ 384.838,403.976 385.846,406.995 "/>
+ <polyline id="polyline1799" fill="#CCE83A" points="383.398,899.478 384.547,900.196 385.99,900.054 386.998,898.612
+ 388.293,898.612 389.445,899.046 389.156,897.604 387.572,896.886 388.006,895.446 387.43,894.437 385.99,895.013 384.547,893.716
+ 383.83,895.157 383.83,895.735 385.27,895.878 383.83,896.597 384.262,898.038 383.398,899.478 "/>
+ <polyline id="polyline1801" fill="#FFFF7F" points="389.59,424.569 389.014,423.126 389.445,421.687 388.006,421.687
+ 387.861,420.103 388.293,418.663 386.709,419.095 385.27,420.103 384.262,421.542 383.686,422.983 385.127,422.983
+ 388.148,424.854 389.59,424.569 "/>
+ <polyline id="polyline1803" fill="#CCE83A" points="385.846,-207.592 388.869,-206.296 390.311,-206.873 389.014,-208.457
+ 388.438,-209.896 388.438,-211.336 387.861,-212.92 387.141,-214.36 385.701,-215.656 385.127,-217.24 383.973,-215.656
+ 385.701,-212.632 386.277,-211.048 386.422,-209.608 385.701,-208.168 385.846,-207.592 "/>
+ <polyline id="polyline1805" fill="#FFFF7F" points="386.564,428.741 386.854,429.175 388.293,427.733 389.156,426.294
+ 387.715,424.995 386.277,424.136 384.693,424.421 384.117,425.862 386.564,428.741 "/>
+ <polyline id="polyline1807" fill="#8FB5BE" points="388.725,617.382 389.732,615.798 388.293,616.374 386.854,614.935
+ 386.998,616.517 385.557,616.517 385.127,618.103 386.564,617.671 388.006,617.958 388.725,617.382 "/>
+ <polyline id="polyline1809" fill="#FFFF7F" points="398.373,-151.432 398.23,-153.016 396.789,-151.72 390.883,-149.417
+ 386.277,-149.56 385.127,-146.682 385.27,-145.24 386.854,-144.232 388.293,-145.098 389.877,-145.384 391.461,-145.528
+ 392.9,-145.24 393.189,-146.682 394.197,-148.266 396.934,-151 398.373,-151.432 "/>
+ <polyline id="polyline1811" fill="#FFFF7F" points="411.908,147.51 412.342,147.078 412.197,146.936 406.148,144.486
+ 404.564,144.198 403.127,143.192 404.564,142.038 404.277,140.6 402.838,140.6 399.957,138.728 398.518,139.016 399.525,141.896
+ 400.678,143.333 399.814,146.358 399.67,147.797 397.941,150.678 396.502,151.686 395.061,151.83 393.621,150.392 394.629,148.95
+ 396.068,149.094 397.654,148.374 398.518,147.078 398.949,145.64 399.094,142.614 396.934,139.734 395.494,138.582 392.471,139.59
+ 391.461,141.174 390.166,142.614 387.141,142.472 387.285,144.056 388.006,145.494 389.59,150.104 392.471,152.118
+ 393.479,153.702 393.334,156.728 393.621,158.166 394.486,159.608 395.061,158.166 395.926,159.608 397.51,159.174
+ 399.814,156.438 401.398,154.998 401.973,156.582 400.678,158.024 401.83,159.608 401.83,160.038 400.963,161.48 401.541,164.501
+ 401.541,165.942 401.109,167.526 402.547,167.816 404.131,166.518 404.131,168.104 405.572,167.381 407.014,167.958
+ 408.453,167.816 409.75,164.936 410.471,166.374 411.908,166.232 412.486,164.79 413.639,163.206 415.076,162.342 415.223,160.902
+ 416.662,162.342 417.525,160.758 418.102,159.318 418.246,157.734 417.814,156.293 418.246,154.709 418.963,153.272
+ 418.822,151.686 416.807,147.366 415.365,147.51 413.781,148.374 413.061,149.816 411.479,148.95 411.908,147.51 "/>
+ <polyline id="polyline1813" fill="#FFFF7F" points="392.9,422.554 393.334,422.554 394.773,421.397 394.486,419.958 392.9,419.671
+ 392.182,421.11 392.9,422.554 "/>
+ <polyline id="polyline1815" fill="#FFFF7F" points="416.23,326.79 414.068,324.774 413.781,323.335 412.629,321.894
+ 411.908,318.87 410.758,317.286 409.318,317.862 406.293,318.581 404.709,318.007 403.27,316.566 401.83,317.286 401.109,318.726
+ 399.957,320.312 398.518,320.886 395.061,323.046 395.061,324.487 396.502,324.774 397.941,326.069 399.525,329.095
+ 401.109,329.382 402.547,330.534 403.99,330.534 403.557,328.95 405.141,329.958 408.021,330.245 408.453,331.687 409.893,331.542
+ 410.471,333.126 411.908,333.126 411.334,330.103 411.908,328.663 411.479,330.103 412.055,331.687 413.494,330.245
+ 413.781,331.687 414.068,330.245 416.23,327.222 416.23,326.79 "/>
+ <polyline id="polyline1817" fill="#99D6AA" points="399.238,884.788 399.67,884.646 399.957,883.78 399.67,882.341
+ 396.934,881.622 395.494,881.478 395.494,882.917 396.068,884.356 399.238,884.788 "/>
+ <polyline id="polyline1819" fill="#FFFF7F" points="396.789,337.446 398.23,337.878 398.949,336.294 399.238,334.854
+ 397.795,333.702 396.502,335.144 396.789,337.446 "/>
+ <polyline id="polyline1821" fill="#FFFF7F" points="398.373,365.386 399.814,366.39 400.822,364.95 400.678,363.366
+ 399.094,362.499 398.373,363.942 398.373,365.386 "/>
+ <polyline id="polyline1823" fill="#FB9A85" points="404.422,794.214 405.141,793.925 403.557,792.772 404.422,794.214 "/>
+ <polyline id="polyline1825" fill="#FB9A85" points="406.006,859.302 406.869,861.749 408.021,860.31 408.021,852.821
+ 408.166,849.796 408.598,846.917 408.598,843.894 407.301,845.333 407.445,848.356 407.014,849.94 407.014,851.524
+ 406.293,852.964 405.861,854.548 405.572,857.429 406.006,859.302 "/>
+ <polyline id="polyline1827" fill="#4DB47E" points="411.045,744.821 412.342,743.669 409.318,743.669 411.045,744.821 "/>
+ <polyline id="polyline1829" fill="#FB9A85" points="410.613,807.604 411.621,806.165 410.037,807.462 410.613,807.604 "/>
+ <polyline id="polyline1831" fill="#FB9A85" points="411.334,813.653 410.758,815.093 411.621,813.653 411.334,813.653 "/>
+ <polyline id="polyline1833" fill="#FFFF7F" points="415.076,314.982 413.926,314.837 412.486,316.278 412.918,317.862
+ 413.781,319.304 414.502,323.767 416.086,324.198 417.67,325.351 419.109,324.198 419.973,325.64 422.998,327.222 423.861,328.663
+ 425.301,327.655 423.861,326.358 425.301,326.069 425.877,324.487 428.9,324.054 430.342,323.335 431.639,321.894 430.629,320.312
+ 432.068,319.304 432.068,316.278 433.51,314.837 434.23,313.253 434.662,310.374 433.076,307.35 431.639,306.629 430.197,306.774
+ 428.613,307.35 427.174,308.79 425.732,309.654 425.59,308.213 421.127,308.79 418.102,308.501 416.807,308.646 414.357,310.95
+ 413.781,312.102 414.789,313.542 415.365,313.253 416.518,314.694 418.102,314.982 419.541,315.99 418.102,315.414
+ 415.076,314.982 "/>
+ <polyline id="polyline1835" fill="#FFFF7F" points="426.74,129.942 428.324,130.662 428.324,129.224 427.75,128.79
+ 424.582,128.213 423.43,126.776 422.422,123.608 420.117,120.728 418.678,119.43 417.67,117.99 416.086,117.125 413.494,120.15
+ 413.205,121.59 413.639,127.494 414.357,129.078 415.51,130.52 418.533,131.958 419.973,131.526 422.998,129.654 424.438,129.224
+ 425.877,129.366 426.74,129.942 "/>
+ <polyline id="polyline1837" fill="#FFFF7F" points="420.693,166.808 419.254,165.654 417.814,166.808 416.23,167.238
+ 415.795,168.822 414.357,171.702 415.795,170.838 418.678,168.246 420.693,166.808 "/>
+ <polyline id="polyline1839" fill="#FFFF7F" points="420.406,134.262 416.949,134.118 415.365,135.56 414.934,136.998
+ 415.795,138.582 417.379,139.158 418.822,138.728 419.973,137.286 420.406,135.702 420.406,134.262 "/>
+ <polyline id="polyline1841" fill="#4DB47E" points="417.67,791.478 418.102,790.899 418.533,792.485 419.973,791.765
+ 418.678,790.325 415.654,790.181 416.949,791.765 416.662,793.204 415.223,792.63 416.23,794.214 417.67,794.501 418.533,794.067
+ 418.678,793.204 417.67,791.765 417.67,791.478 "/>
+ <polyline id="polyline1843" fill="#FFFF7F" points="416.518,334.278 419.541,333.558 419.686,332.118 421.27,331.976
+ 421.99,330.39 421.27,328.95 419.83,327.655 418.246,326.647 416.807,328.085 416.373,328.808 415.51,334.854 416.518,334.278 "/>
+ <polyline id="polyline1845" fill="#FB9A85" points="420.98,845.333 420.693,844.757 420.838,843.173 422.422,840.294
+ 422.854,838.854 422.131,835.974 421.414,834.39 421.27,832.948 422.709,831.94 422.564,830.356 421.127,829.925 420.406,831.509
+ 418.963,831.653 417.814,833.235 417.094,836.118 416.373,837.558 416.662,839.429 417.814,840.87 417.957,842.454
+ 419.109,843.894 420.693,846.772 420.98,845.333 "/>
+ <polyline id="polyline1847" fill="#8FB5BE" points="417.379,623.286 416.807,622.278 416.662,623.862 417.67,623.862
+ 417.379,623.286 "/>
+ <polyline id="polyline1849" fill="#4DB47E" points="418.533,730.278 417.525,731.718 418.963,731.286 418.822,729.847
+ 418.533,730.278 "/>
+ <polyline id="polyline1851" fill="#FFFF7F" points="419.398,377.331 420.547,375.897 419.109,376.183 417.814,377.622
+ 419.254,378.058 419.398,377.331 "/>
+ <polyline id="polyline1853" fill="#4DB47E" points="420.547,795.222 421.127,795.077 420.693,793.925 418.678,794.646
+ 420.262,795.364 420.547,795.222 "/>
+ <polyline id="polyline1855" fill="#FFFF7F" points="418.963,308.358 420.547,308.358 420.406,308.07 418.963,308.358 "/>
+ <polyline id="polyline1857" fill="#FFFF7F" points="424.869,300.87 424.293,302.598 425.877,303.174 427.318,303.03
+ 428.758,303.318 429.479,301.877 430.486,303.461 432.068,303.461 433.51,302.454 433.365,304.038 434.949,304.326
+ 439.414,304.614 441.285,304.47 445.893,305.622 447.334,304.902 447.045,303.318 442.438,299.286 441.43,296.262 441.715,294.822
+ 440.277,294.102 439.846,292.518 439.127,291.078 437.686,289.782 437.254,288.342 434.23,287.333 432.789,287.478
+ 429.766,289.062 429.189,290.501 430.629,290.934 427.605,292.23 426.883,293.669 425.445,294.534 426.311,295.974
+ 427.605,297.414 429.045,297.414 430.486,298.278 424.438,298.278 422.998,297.558 422.277,299.142 421.99,300.582 424.869,300.87
+ "/>
+ <polyline id="polyline1859" fill="#4DB47E" points="424.582,706.806 424.438,706.517 422.854,706.806 422.131,708.39
+ 422.422,708.532 424.006,707.524 424.582,706.806 "/>
+ <polyline id="polyline1861" fill="#FB9A85" points="422.564,829.925 424.006,828.63 422.564,828.63 422.564,829.925 "/>
+ <polyline id="polyline1863" fill="#4DB47E" points="426.883,782.837 427.029,783.7 428.037,783.124 426.883,782.837 "/>
+ <polyline id="polyline1865" fill="#4DB47E" points="432.646,783.7 431.205,782.981 431.35,784.421 432.789,784.854 432.646,783.7
+ "/>
+ <polyline id="polyline1867" fill="#FFFF7F" points="433.654,153.846 434.518,152.406 435.238,147.942 433.795,148.232
+ 433.365,151.254 433.365,152.838 433.654,153.846 "/>
+ <polyline id="polyline1869" fill="#4DB47E" points="435.525,784.997 436.246,783.989 434.518,784.421 435.525,784.997
+ 435.67,785.571 436.246,785.862 435.525,784.997 "/>
+ <polyline id="polyline1871" fill="#FFFF7F" points="438.693,283.877 437.254,283.302 437.686,284.742 438.693,283.877 "/>
+ <polyline id="polyline1873" fill="#FFFF7F" points="439.557,279.125 438.117,278.694 437.686,280.134 438.262,281.574
+ 439.414,279.99 439.557,279.125 "/>
+ <polyline id="polyline1875" fill="#FFFF7F" points="441.715,616.087 441.715,617.382 443.301,616.229 441.715,616.087 "/>
+ <polyline id="polyline1877" fill="#4DB47E" points="441.715,787.013 443.014,788.022 443.877,786.005 441.715,787.013 "/>
+ <polyline id="polyline1879" fill="#D3B570" points="445.75,801.124 444.883,802.421 444.311,803.862 442.725,805.444
+ 444.311,805.013 445.75,805.735 446.758,807.173 448.197,806.022 449.494,804.581 450.213,802.997 448.773,801.558
+ 447.189,801.845 445.75,801.124 "/>
+ <polyline id="polyline1881" fill="#D3B570" points="447.766,820.278 448.629,818.837 448.629,817.253 448.197,815.813
+ 449.205,814.229 452.23,812.356 453.379,809.333 454.822,808.47 453.379,807.462 451.365,806.886 449.926,807.462 448.342,808.181
+ 446.9,809.188 446.182,810.63 445.029,812.067 443.59,811.638 444.74,814.661 446.182,816.103 447.621,816.245 447.045,819.124
+ 447.766,820.278 "/>
+ <polyline id="polyline1883" fill="#FFFF7F" points="463.318,483.462 464.758,483.317 464.613,484.759 466.197,484.038
+ 467.639,484.325 466.055,485.479 465.189,486.919 465.479,488.501 466.918,489.653 466.342,491.235 467.205,494.118
+ 467.061,495.56 469.941,495.126 470.373,493.687 470.084,492.247 471.525,490.663 471.094,492.103 471.238,493.687
+ 472.533,495.126 473.973,496.278 474.406,494.403 474.547,497.431 473.541,498.87 472.963,501.894 473.686,503.478 475.27,504.198
+ 476.422,505.638 475.557,507.222 475.846,508.663 476.998,510.103 480.021,507.798 480.598,510.821 481.461,512.263 482.9,512.263
+ 482.758,513.702 483.045,515.142 484.486,516.438 483.621,517.878 482.182,518.022 482.324,519.606 483.045,521.046
+ 484.197,522.485 485.639,523.782 488.662,525.366 490.246,525.079 491.686,523.927 492.117,522.485 492.262,520.903
+ 493.846,521.333 495.285,521.046 495.141,518.022 496.438,519.462 497.877,519.03 497.877,517.444 498.453,519.03 499.459,520.47
+ 501.045,519.173 502.486,519.03 502.627,520.47 501.045,521.765 502.627,521.911 504.068,522.341 504.646,523.782 506.086,522.774
+ 507.67,522.198 510.547,520.325 508.963,519.751 510.547,520.038 511.99,519.462 513.43,519.462 512.277,518.022 512.709,516.438
+ 513.572,516.149 514.148,516.438 515.732,514.997 514.148,514.997 515.732,513.989 517.174,513.847 517.459,512.263
+ 516.021,513.271 514.438,512.839 515.156,511.255 516.74,511.542 518.182,510.966 519.479,509.382 518.037,510.39 516.598,510.534
+ 518.037,509.526 519.479,508.087 518.758,506.501 517.318,506.646 514.438,508.087 511.414,508.517 507.094,508.663
+ 502.627,507.653 501.045,507.509 496.582,505.638 494.998,505.206 493.557,503.911 492.838,502.47 491.398,502.325 489.814,501.03
+ 488.373,501.462 488.949,500.022 487.51,499.444 487.51,498.005 487.076,496.567 485.494,496.567 486.502,495.126 485.639,493.687
+ 484.197,492.679 483.334,494.118 483.621,491.235 482.182,492.679 482.758,491.235 481.893,489.653 480.453,490.229
+ 477.43,492.679 475.99,493.11 474.406,494.403 474.693,493.255 476.131,492.821 477.572,491.958 478.869,490.519 477.285,489.509
+ 478.869,490.229 480.311,489.653 481.75,488.501 481.461,486.919 480.883,485.479 479.877,484.038 478.438,484.325
+ 476.854,484.183 478.438,483.896 479.014,482.454 478.148,481.015 476.709,480.728 475.127,481.302 473.686,482.312
+ 474.838,480.87 477.861,479.718 476.709,478.278 475.27,477.702 473.83,477.847 470.807,477.271 472.246,476.983 473.83,476.983
+ 475.27,475.827 474.117,474.39 473.686,472.95 472.822,471.509 468.357,470.358 469.941,469.64 471.379,468.487 469.941,467.622
+ 468.934,466.183 467.35,466.038 470.373,465.319 469.365,463.733 467.781,463.878 469.365,462.87 469.365,461.286 467.926,460.854
+ 468.357,459.271 466.773,459.271 465.621,460.71 465.334,460.569 466.055,459.702 465.334,458.263 465.479,456.819
+ 464.182,453.798 464.758,452.358 463.318,449.479 463.461,446.454 463.029,444.87 463.461,443.431 462.311,441.847 463.75,441.702
+ 463.318,440.263 463.174,437.237 463.605,435.655 463.029,434.214 463.029,431.331 462.453,428.454 462.453,426.87
+ 461.303,422.405 460.725,420.966 459.572,419.526 458.854,418.085 457.27,417.077 455.83,415.782 452.807,415.927 449.926,417.942
+ 449.494,419.526 450.068,423.847 450.934,425.431 451.223,426.87 452.807,427.155 454.246,427.733 452.949,429.175 453.67,430.612
+ 453.094,432.058 454.246,435.222 453.379,436.663 453.814,439.687 452.949,441.126 453.094,442.569 450.068,444.294
+ 449.781,445.733 450.213,447.319 451.795,447.462 452.086,448.901 452.23,450.487 450.789,449.331 450.357,450.774
+ 451.795,451.206 451.51,452.647 451.654,453.222 451.076,454.808 451.365,456.245 451.076,457.827 451.941,460.71 451.654,462.294
+ 453.094,462.581 452.949,464.163 453.525,465.606 454.963,466.759 453.525,467.909 453.67,469.351 455.109,469.64 455.83,471.077
+ 456.117,472.519 454.533,472.229 453.525,473.815 454.963,474.679 456.406,474.819 456.98,473.382 458.422,474.534
+ 458.131,475.976 459.141,477.413 460.725,475.976 462.166,475.827 460.725,477.271 459.861,478.854 460.438,480.294
+ 462.021,480.87 462.453,479.286 464.037,478.997 462.598,482.022 463.318,483.462 "/>
+ <polyline id="polyline1885" fill="#FFFF7F" points="449.926,457.253 450.213,457.253 449.926,455.815 449.926,457.253 "/>
+ <polyline id="polyline1887" fill="#D3B570" points="450.357,799.829 451.076,800.837 451.941,799.397 450.357,799.829 "/>
+ <polyline id="polyline1889" fill="#FFFF7F" points="452.518,275.381 451.076,274.374 450.646,275.958 452.086,275.669
+ 452.518,275.381 "/>
+ <polyline id="polyline1891" fill="#D3B570" points="453.238,805.013 452.373,805.444 453.238,807.03 454.678,805.735
+ 453.238,805.013 "/>
+ <polyline id="polyline1893" fill="#FFFF7F" points="455.109,112.808 454.822,114.392 456.406,115.688 457.846,116.262
+ 458.422,114.822 457.414,113.238 455.83,112.662 455.109,112.808 "/>
+ <polyline id="polyline1895" fill="#FFFF7F" points="456.117,255.366 457.846,252.342 456.262,252.486 455.109,253.926
+ 455.686,255.366 456.117,255.366 "/>
+ <polyline id="polyline1897" fill="#FFFF7F" points="463.029,340.759 462.453,340.614 462.166,339.03 460.582,339.319
+ 461.59,340.759 463.029,340.759 "/>
+ <polyline id="polyline1899" fill="#FFFF7F" points="461.014,313.83 462.453,315.125 464.471,318.007 464.471,315.125
+ 463.029,313.686 461.014,313.83 "/>
+ <polyline id="polyline1901" fill="#FFFF7F" points="466.918,173.717 466.197,172.133 466.629,173.574 466.918,173.717 "/>
+ <polyline id="polyline1903" fill="#FFFF7F" points="471.094,175.446 473.686,172.568 472.963,174.293 471.525,175.446
+ 472.822,175.446 477.572,174.15 478.006,174.44 479.014,175.877 480.883,176.454 482.471,175.158 483.045,173.717 482.471,172.133
+ 482.758,171.558 482.613,172.422 483.189,173.862 482.613,175.301 481.174,176.454 484.055,182.358 484.055,182.79
+ 482.471,179.333 481.174,177.894 480.598,176.598 479.014,176.024 477.861,174.44 471.814,175.877 471.957,176.886 470.373,177.03
+ 470.084,178.47 473.109,180.054 471.67,181.494 471.814,182.934 471.379,184.374 471.67,187.4 473.109,187.83 473.109,189.27
+ 474.547,188.262 475.99,188.694 474.838,190.133 477.861,189.99 478.725,188.406 480.166,187.83 481.893,184.806 482.9,185.816
+ 484.486,184.95 485.926,184.518 486.789,185.958 486.502,187.542 487.795,188.118 487.51,185.238 486.789,183.654 486.934,181.926
+ 486.213,180.342 486.213,178.758 486.502,177.318 485.639,176.024 486.068,174.44 485.926,172.998 486.646,171.414
+ 486.789,169.254 486.357,167.816 484.918,166.662 484.486,166.662 483.621,168.104 483.045,170.406 483.479,168.246
+ 482.037,168.822 480.883,170.118 479.445,170.406 480.311,169.974 481.75,168.678 482.037,167.958 481.605,166.95 481.174,166.518
+ 478.148,165.942 474.406,164.07 472.963,164.07 471.525,163.64 468.646,162.486 467.205,163.64 468.646,163.926 467.926,164.07
+ 466.486,164.936 466.629,166.518 467.781,167.958 466.918,169.4 466.629,170.984 466.197,171.702 467.35,173.142 467.205,174.15
+ 468.068,175.59 469.654,175.014 471.094,175.446 "/>
+ <polyline id="polyline1905" fill="#FFFF7F" points="469.076,313.11 469.941,314.549 469.365,313.11 469.076,313.11 "/>
+ <polyline id="polyline1907" fill="#FFFF7F" points="470.662,187.686 469.076,188.406 470.662,188.984 470.662,187.686 "/>
+ <polyline id="polyline1909" fill="#FFFF7F" points="471.814,163.494 473.686,163.064 475.127,164.213 476.709,164.501
+ 478.148,165.51 476.709,163.926 476.277,162.776 476.422,160.326 475.127,158.742 473.109,159.318 472.246,158.312
+ 472.102,159.461 472.533,160.902 470.373,160.614 470.807,162.056 471.814,163.494 "/>
+ <polyline id="polyline1911" fill="#FFFF7F" points="476.709,160.038 476.709,162.198 477.285,163.64 478.725,164.79
+ 480.166,165.51 481.605,165.797 483.189,165.797 481.461,163.782 480.453,162.198 481.029,157.734 480.74,155.717 481.318,155.717
+ 481.318,154.278 480.453,152.838 478.293,152.549 476.854,153.702 475.414,153.99 475.414,155.43 474.98,155.717 475.557,157.158
+ 476.564,158.6 476.709,160.038 "/>
+ <polyline id="polyline1913" fill="#FFFF7F" points="479.014,312.39 477.572,312.678 476.131,311.958 475.99,314.982
+ 476.422,316.421 477.861,316.566 478.293,313.686 479.014,312.39 "/>
+ <polyline id="polyline1915" fill="#FFFF7F" points="481.75,366.245 481.75,364.808 480.598,366.245 480.453,367.831
+ 481.75,366.245 "/>
+ <polyline id="polyline1917" fill="#FFFF7F" points="492.693,236.646 491.254,236.646 489.67,235.926 486.789,236.213
+ 486.068,237.797 486.646,239.238 487.076,242.262 488.518,242.549 489.957,241.974 490.678,243.414 492.262,243.125
+ 492.406,241.542 492.98,240.102 492.693,236.646 "/>
+ <polyline id="polyline1919" fill="#FFFF7F" points="488.518,188.262 488.949,185.381 488.23,183.797 488.23,182.358
+ 487.223,183.797 488.086,185.381 488.518,188.262 "/>
+ <polyline id="polyline1921" fill="#FFFF7F" points="487.941,370.136 489.525,371.144 489.094,372.581 490.678,373.015
+ 492.117,371.862 490.533,370.999 489.094,370.712 487.941,370.136 "/>
+ <polyline id="polyline1923" fill="#FFFF7F" points="490.533,668.646 491.254,667.927 489.957,666.483 488.518,666.772
+ 488.949,668.356 490.533,668.646 "/>
+ <polyline id="polyline1925" fill="#FFFF7F" points="491.83,664.038 491.541,664.038 490.246,665.478 491.83,664.038 "/>
+ <polyline id="polyline1927" fill="#FFFF7F" points="492.98,198.776 492.838,198.342 491.398,198.198 491.254,199.782
+ 491.541,200.213 492.98,200.213 492.98,198.776 "/>
+ <polyline id="polyline1929" fill="#FFFF7F" points="501.045,524.935 501.334,524.214 499.75,523.638 499.029,522.198
+ 497.59,522.198 496.148,521.765 494.564,522.198 493.99,523.782 495.141,525.222 496.582,524.214 498.021,524.214 501.045,524.935
+ "/>
+ <polyline id="polyline1931" fill="#FFFF7F" points="500.471,-100.024 499.029,-100.6 497.59,-100.024 499.029,-99.448
+ 500.471,-100.024 "/>
+ <polyline id="polyline1933" fill="#FFFF7F" points="498.166,350.405 499.459,353.431 500.471,351.991 499.893,350.55
+ 498.166,350.405 "/>
+ <polyline id="polyline1935" fill="#FFFF7F" points="500.182,385.11 501.766,384.245 500.182,384.103 500.182,385.11 "/>
+ <polyline id="polyline1937" fill="#FFFF7F" points="500.613,357.319 501.334,358.901 502.197,357.319 500.613,357.319 "/>
+ <polyline id="polyline1939" fill="#FFFF7F" points="506.518,-243.88 504.934,-242.584 504.213,-241 505.654,-240.424
+ 507.094,-240.856 508.246,-242.296 506.518,-243.88 "/>
+ <polyline id="polyline1941" fill="#FFFF7F" points="505.076,356.886 504.357,358.472 505.795,358.901 505.654,357.462
+ 505.076,356.886 "/>
+ <polyline id="polyline1943" fill="#FFFF7F" points="506.807,356.022 505.795,354.581 504.646,356.022 506.086,356.886
+ 506.807,356.022 "/>
+ <polyline id="polyline1945" fill="#FFFF7F" points="514.293,557.478 514.293,555.894 515.732,556.759 514.725,555.317
+ 513.141,554.886 506.949,556.181 505.51,557.19 504.789,558.774 504.646,560.214 505.51,563.235 509.686,567.558 512.709,567.558
+ 514.293,566.403 515.59,561.942 515.445,560.358 514.293,557.478 "/>
+ <polyline id="polyline1947" fill="#FFFF7F" points="505.365,361.206 505.941,362.647 507.094,361.065 505.654,360.198
+ 505.365,361.206 "/>
+ <polyline id="polyline1949" fill="#FFFF7F" points="508.963,431.046 510.117,431.19 511.557,431.909 512.131,432.63
+ 513.715,432.774 513.861,430.183 513.572,428.599 514.006,427.155 513.572,425.722 512.709,424.136 511.27,424.278
+ 512.131,425.722 510.547,426.151 509.109,424.854 507.525,426.151 507.379,429.175 507.814,430.612 508.963,431.046 "/>
+ <polyline id="polyline1951" fill="#FFFF7F" points="508.678,616.806 508.678,617.813 510.117,616.806 508.678,616.806 "/>
+ <polyline id="polyline1953" fill="#FFFF7F" points="509.541,-240.136 511.127,-240.568 514.006,-243.304 515.445,-243.88
+ 518.471,-243.16 519.908,-243.304 522.068,-246.472 520.627,-247.336 517.605,-246.617 516.164,-247.192 513.141,-246.184
+ 510.117,-244.457 509.109,-242.873 508.822,-241.432 509.541,-240.136 "/>
+ <polyline id="polyline1955" fill="#FFFF7F" points="511.127,370.278 511.701,368.839 511.557,367.253 510.406,368.839
+ 511.127,370.278 "/>
+ <polyline id="polyline1957" fill="#FFFF7F" points="514.438,-235.96 514.006,-237.544 512.422,-237.4 512.564,-235.96
+ 514.148,-235.672 514.438,-235.96 "/>
+ <polyline id="polyline1959" fill="#FFFF7F" points="512.709,365.095 514.006,363.655 512.564,363.366 512.854,364.808
+ 512.709,365.095 "/>
+ <polyline id="polyline1961" fill="#FFFF7F" points="515.156,406.569 515.59,406.569 515.014,403.687 513.572,403.542
+ 513.715,404.983 515.156,406.569 "/>
+ <polyline id="polyline1963" fill="#FFFF7F" points="514.293,402.534 515.014,401.237 516.453,399.798 514.869,401.095
+ 514.293,402.534 "/>
+ <polyline id="polyline1965" fill="#FFFF7F" points="520.197,511.11 520.197,510.103 518.613,511.255 520.197,511.11 "/>
+ <polyline id="polyline1967" fill="#FFFF7F" points="519.766,413.909 520.197,413.909 521.639,413.19 522.357,411.606
+ 519.332,410.89 518.613,412.323 519.766,413.909 "/>
+ <polyline id="polyline1969" fill="#FFFF7F" points="526.963,392.599 528.406,393.03 529.846,391.733 530.564,390.294
+ 530.422,388.71 527.398,388.569 525.814,388.854 524.373,389.722 526.963,392.599 "/>
+ <polyline id="polyline1971" fill="#FFFF7F" points="525.957,560.501 526.389,560.501 526.822,559.062 526.678,557.478
+ 525.957,558.919 525.957,560.501 "/>
+ <polyline id="polyline1973" fill="#FFFF7F" points="536.471,500.022 534.311,500.454 531.285,501.751 528.262,501.606
+ 526.822,502.181 526.246,503.622 527.109,505.062 528.693,505.062 527.541,506.501 530.422,507.509 531.861,507.653
+ 534.883,507.222 535.174,505.782 536.613,504.919 538.197,505.495 539.639,504.485 539.639,503.478 540.646,502.038
+ 540.068,500.454 538.627,499.878 536.471,500.022 "/>
+ <polyline id="polyline1975" fill="#FFFF7F" points="533.59,-254.249 532.006,-255.112 530.564,-253.96 529.99,-252.52
+ 528.547,-251.512 529.99,-250.792 531.285,-252.232 532.725,-253.096 533.59,-254.249 "/>
+ <polyline id="polyline1977" fill="#FFFF7F" points="534.021,403.397 535.174,402.819 535.605,399.798 534.311,396.917
+ 533.156,395.331 531.715,396.058 530.709,397.64 530.422,399.077 531.572,400.519 533.014,401.815 534.021,403.397 "/>
+ <polyline id="polyline1979" fill="#FFFF7F" points="543.67,-258.856 540.646,-258.424 542.084,-258.28 543.525,-258.568
+ 543.67,-258.856 "/>
+ <polyline id="polyline1981" fill="#FFFF7F" points="545.541,512.118 544.102,511.542 542.518,512.118 545.541,512.118 "/>
+ <polyline id="polyline1983" fill="#FFFF7F" points="569.877,-270.232 568.438,-270.52 569.877,-269.369 569.877,-270.232 "/>
+ <polyline id="polyline1985" fill="#FFFF7F" points="573.479,-271.384 574.916,-271.528 576.502,-272.249 579.379,-272.968
+ 580.822,-272.537 579.379,-273.688 574.916,-272.68 573.332,-271.816 573.479,-271.384 "/>
+ <polyline id="polyline1987" fill="#FFFF7F" points="604.869,-272.824 606.453,-273.112 607.893,-273.833 609.479,-273.544
+ 610.916,-273.833 613.941,-275.417 612.502,-276.136 608.037,-275.705 605.014,-275.705 603.572,-275.417 601.99,-274.696
+ 598.963,-274.264 599.83,-272.824 601.414,-272.68 602.998,-273.256 604.869,-272.824 "/>
+ <polyline id="polyline1989" fill="#FFFF7F" points="607.029,-136.024 607.459,-134.584 606.883,-133.144 605.877,-131.56
+ 605.59,-130.121 603.715,-127.098 602.277,-126.52 601.557,-124.936 601.27,-122.058 600.838,-120.472 602.422,-120.904
+ 603.861,-121.768 605.014,-120.184 605.59,-121.768 605.732,-126.52 607.174,-127.672 608.613,-128.392 607.174,-128.104
+ 607.029,-129.544 608.613,-130.121 609.479,-128.537 610.916,-129.544 609.766,-131.128 611.35,-130.984 612.789,-131.56
+ 614.373,-130.84 614.084,-129.4 614.662,-127.96 617.686,-127.528 619.125,-128.537 620.277,-130.408 620.422,-131.85
+ 626.324,-137.752 627.766,-138.617 629.35,-138.76 630.789,-140.776 632.23,-142.216 632.949,-143.656 634.102,-145.098
+ 633.525,-146.537 634.963,-146.824 634.678,-151.289 634.389,-152.728 635.109,-154.168 636.406,-158.488 637.846,-159.642
+ 639.43,-160.072 643.748,-163.96 644.613,-166.984 646.486,-169.864 649.076,-172.6 649.941,-174.041 652.678,-177.064
+ 654.117,-178.072 656.422,-180.665 659.445,-182.968 662.471,-184.408 662.9,-185.848 663.479,-190.312 663.908,-191.896
+ 666.789,-196.216 668.229,-196.648 671.252,-198.376 672.693,-199.528 674.854,-202.552 675.143,-203.992 675.861,-205.432
+ 677.301,-206.728 681.766,-209.176 683.205,-209.896 684.068,-211.48 685.365,-214.36 687.236,-217.384 687.236,-219.256
+ 685.795,-219.4 684.211,-219.112 682.773,-218.249 681.334,-216.808 676.869,-214.36 675.43,-214.072 673.99,-214.504
+ 673.125,-217.528 670.244,-219.833 669.67,-221.272 669.525,-222.856 670.389,-224.296 670.822,-225.736 672.693,-228.76
+ 668.373,-226.024 667.365,-224.584 666.068,-221.56 665.205,-220.121 666.646,-218.68 667.51,-217.24 667.365,-218.68
+ 666.789,-220.121 668.373,-218.968 668.662,-217.528 668.229,-215.944 667.223,-214.504 667.076,-213.064 665.926,-211.625
+ 665.639,-210.184 665.35,-208.6 665.926,-207.16 666.211,-205.576 665.781,-202.696 665.205,-201.112 664.342,-199.672
+ 663.043,-198.232 661.605,-197.081 651.094,-190.457 649.795,-189.016 648.211,-187.72 646.773,-187.432 644.758,-187.576
+ 641.156,-189.16 642.598,-188.152 643.748,-186.712 642.311,-186.856 641.877,-188.296 640.869,-189.016 640.006,-190.457
+ 638.422,-192.041 637.414,-193.48 636.98,-195.064 636.693,-197.944 636.117,-199.384 635.973,-200.968 635.973,-202.408
+ 636.838,-205.289 634.963,-202.264 635.83,-199.384 635.973,-197.8 635.398,-194.92 633.379,-190.457 633.094,-189.016
+ 632.23,-187.576 631.076,-183.544 630.357,-179.081 629.926,-177.64 623.732,-164.392 624.311,-162.953 622.869,-162.232
+ 622.148,-160.648 621.861,-159.208 623.303,-160.36 623.303,-158.92 621.861,-157.625 620.854,-156.184 621.141,-155.176
+ 620.854,-153.736 616.102,-147.976 614.662,-146.968 616.102,-148.266 614.662,-148.266 611.926,-145.384 610.916,-143.8
+ 610.342,-142.36 610.773,-140.776 610.486,-139.336 608.613,-136.312 608.758,-137.752 608.471,-139.336 609.766,-141.497
+ 610.627,-143.512 608.9,-140.632 607.459,-137.608 607.029,-136.024 "/>
+ <polyline id="polyline1991" fill="#FFFF7F" points="612.934,468.917 612.789,468.054 611.205,468.054 609.766,467.767
+ 608.324,469.065 608.471,470.647 606.883,470.935 607.029,472.519 607.459,470.935 609.043,470.79 610.486,471.222
+ 611.926,470.358 612.934,468.917 "/>
+ <polyline id="polyline1993" fill="#FFFF7F" points="611.35,464.022 611.639,465.606 613.076,465.749 614.373,464.163
+ 614.518,462.729 613.076,463.155 611.35,464.022 "/>
+ <polyline id="polyline1995" fill="#FFFF7F" points="621.861,-272.249 623.303,-271.528 624.883,-271.384 627.908,-272.104
+ 629.35,-272.104 630.789,-271.24 632.084,-269.8 631.654,-268.36 633.238,-268.36 633.67,-269.8 635.109,-269.656
+ 638.131,-270.232 639.572,-269.944 641.014,-270.52 642.598,-270.665 645.479,-270.376 645.766,-271.816 647.35,-272.392
+ 650.23,-272.537 650.949,-273.976 649.51,-273.544 647.926,-273.544 646.486,-274.121 645.043,-273.4 643.605,-273.112
+ 640.582,-272.968 639.141,-271.672 637.701,-272.68 636.117,-273.112 634.678,-273.256 633.094,-272.824 630.211,-272.68
+ 627.189,-273.4 625.748,-273.4 624.164,-274.408 622.725,-274.696 621.572,-273.256 621.861,-272.249 "/>
+ <polyline id="polyline1997" fill="#FFFF7F" points="632.373,-82.457 630.789,-82.168 631.941,-79.289 633.525,-78.568
+ 634.963,-79.289 635.973,-79.144 637.557,-79.576 638.998,-80.44 637.414,-81.016 636.98,-82.457 637.701,-85.336 633.238,-85.336
+ 631.795,-84.328 630.646,-84.041 632.373,-82.457 "/>
+ <polyline id="polyline1999" fill="#FFFF7F" points="638.277,-77.128 636.838,-76.84 638.277,-75.544 640.293,-75.112
+ 641.732,-75.256 640.293,-76.266 639.43,-77.705 638.277,-77.128 "/>
+ <polyline id="polyline2001" fill="#FFFF7F" points="640.582,-88.072 639.141,-86.488 640.725,-87.064 640.582,-88.072 "/>
+ <polyline id="polyline2003" fill="#FFFF7F" points="658.006,-267.352 659.59,-267.497 661.029,-268.216 665.494,-269.369
+ 666.934,-270.088 671.252,-270.376 672.406,-271.816 671.686,-273.4 670.244,-271.816 668.662,-271.384 667.223,-271.816
+ 665.781,-271.096 662.758,-270.52 659.732,-270.52 658.293,-271.24 656.854,-270.953 655.414,-271.672 655.99,-270.088
+ 657.43,-268.648 658.006,-267.352 "/>
+ <polyline id="polyline2005" fill="#FFFF7F" points="655.846,-280.457 657.861,-279.736 659.445,-279.592 658.869,-281.176
+ 657.285,-281.176 655.846,-280.457 "/>
+ <polyline id="polyline2007" fill="#FB9A85" points="668.949,-263.608 670.533,-264.041 677.877,-264.617 679.318,-263.464
+ 681.908,-260.584 681.766,-259 682.486,-257.56 683.926,-256.121 685.365,-255.688 686.807,-254.249 686.518,-252.808
+ 688.244,-249.64 688.389,-248.201 689.686,-245.32 690.838,-239.848 690.98,-236.968 690.693,-234.088 691.414,-228.041
+ 691.846,-226.6 691.846,-225.016 692.709,-223.576 694.15,-224.008 695.301,-222.568 696.598,-223.72 698.182,-224.296
+ 699.043,-225.736 699.479,-228.76 700.342,-231.064 701.205,-232.648 702.646,-234.088 704.229,-235.24 705.67,-235.816
+ 707.109,-237.112 708.117,-238.696 709.557,-240.136 710.854,-240.568 712.438,-240.424 713.877,-239.992 716.613,-242.873
+ 716.758,-244.312 717.766,-245.752 719.205,-246.184 721.795,-246.041 723.957,-243.016 725.398,-242.152 726.838,-237.688
+ 728.277,-237.256 729.715,-237.833 729.572,-240.712 730.15,-242.152 733.174,-242.44 734.613,-243.016 735.479,-241.576
+ 736.916,-241.72 738.357,-241.432 739.654,-240.568 741.094,-241.432 742.389,-242.873 743.83,-243.448 744.838,-245.033
+ 743.686,-248.201 743.686,-249.64 744.117,-251.224 745.557,-252.52 746.998,-252.808 748.582,-253.528 749.59,-254.824
+ 749.732,-255.4 749.301,-256.984 747.861,-257.705 747.143,-257.56 745.701,-258.28 744.117,-257.417 742.678,-257.128
+ 739.795,-257.992 739.795,-258.424 738.211,-259.576 737.494,-261.16 736.051,-261.448 734.613,-261.016 735.766,-257.992
+ 736.051,-255.112 737.061,-253.528 738.502,-252.088 738.789,-250.648 739.51,-249.064 738.502,-247.625 737.061,-246.904
+ 735.479,-246.617 734.037,-247.048 732.598,-248.201 731.877,-249.785 731.732,-251.224 732.021,-252.665 731.59,-254.249
+ 730.006,-254.104 726.98,-254.392 724.102,-254.968 722.373,-255.688 720.934,-256.84 720.068,-258.424 719.061,-261.304
+ 718.197,-262.744 717.189,-265.768 714.883,-270.088 712.15,-274.552 712.006,-275.992 710.564,-276.424 709.125,-275.56
+ 707.973,-274.121 706.533,-272.968 705.094,-272.392 700.627,-271.384 695.156,-271.096 693.572,-271.384 690.693,-272.392
+ 690.262,-272.824 689.686,-274.408 686.662,-276.568 685.223,-275.56 684.789,-277 683.205,-277.864 681.766,-277.864
+ 680.326,-277.289 678.883,-277.72 675.861,-279.16 674.277,-278.728 671.398,-279.16 672.838,-277.864 675.572,-278.008
+ 675.861,-278.296 676.582,-276.568 676.725,-275.128 676.293,-273.544 674.854,-272.68 676.006,-271.24 676.15,-269.656
+ 674.998,-268.216 673.414,-266.92 669.094,-265.192 668.949,-263.608 "/>
+ <polyline id="polyline2009" fill="#FFFF7F" points="702.068,-221.128 703.365,-221.848 702.789,-223.289 701.35,-222.568
+ 702.068,-221.128 "/>
+ <polyline id="polyline2011" fill="#FFFF7F" points="701.781,-217.24 702.068,-217.24 701.926,-218.68 701.781,-217.24 "/>
+ <polyline id="polyline2013" fill="#FFFF7F" points="748.438,-242.152 749.59,-242.584 750.021,-244.024 748.438,-243.592
+ 748.438,-242.152 "/>
+ <polyline id="polyline2015" fill="#7FC643" points="-251.498,680.31 -251.498,676.134 -250.635,680.454 -251.498,680.31 "/>
+ <polyline id="polyline2017" fill="#7FC643" points="-251.498,675.126 -251.498,638.839 -250.778,639.271 -250.347,639.558
+ -248.906,638.839 -246.024,639.989 -241.563,643.733 -239.114,646.614 -240.265,643.733 -241.706,642.87 -241.418,641.431
+ -239.979,641.862 -238.826,643.302 -235.803,649.349 -237.387,652.229 -237.387,653.671 -238.538,655.11 -239.979,655.687
+ -243.003,653.958 -243.578,654.39 -243.578,655.829 -245.162,656.263 -243.723,656.981 -242.282,657.271 -239.259,657.271
+ -237.53,660.149 -235.946,660.726 -237.53,660.87 -237.816,662.31 -236.809,663.894 -235.803,666.919 -236.954,665.333
+ -237.675,668.356 -237.675,670.374 -239.114,670.948 -239.4,672.39 -242.427,672.39 -243.146,670.806 -242.856,672.245
+ -243.146,673.829 -244.587,674.839 -246.024,673.974 -246.314,672.39 -246.889,675.413 -246.024,676.854 -247.467,676.278
+ -247.755,674.839 -249.192,674.839 -250.49,673.255 -251.211,671.095 -250.49,673.974 -249.339,675.413 -249.051,676.997
+ -248.618,677.862 -248.618,679.302 -250.057,679.013 -250.923,677.573 -251.498,675.126 "/>
+ <polyline id="polyline2019" fill="#7FC643" points="-251.498,634.374 -251.498,449.909 -251.064,449.19 -250.778,448.472
+ -249.48,444.003 -248.618,443.431 -248.042,441.987 -246.746,440.55 -247.034,439.11 -244.011,438.819 -242.57,437.958
+ -241.272,439.542 -239.834,439.687 -238.25,440.839 -236.809,440.839 -235.658,442.278 -234.219,443.144 -232.49,441.847
+ -231.051,442.854 -229.608,442.136 -228.458,443.573 -230.042,445.015 -228.601,444.438 -227.017,444.294 -225.578,445.155
+ -224.139,444.438 -223.131,445.304 -222.41,443.862 -222.843,442.421 -221.259,443.431 -218.379,440.839 -216.938,439.976
+ -215.354,440.839 -215.064,439.397 -213.626,438.679 -212.042,439.687 -210.601,440.263 -211.608,438.819 -211.898,437.237
+ -211.467,437.237 -212.042,435.798 -210.601,435.222 -209.017,435.942 -207.578,437.095 -204.698,437.095 -203.114,436.663
+ -201.675,435.942 -200.954,437.382 -199.515,436.808 -198.219,435.366 -198.074,433.927 -196.635,432.917 -195.194,432.058
+ -192.314,431.046 -189.29,430.323 -187.706,430.759 -186.265,432.198 -183.385,434.358 -183.53,435.942 -183.675,437.382
+ -183.242,438.819 -183.242,440.263 -184.395,446.312 -184.538,449.331 -186.986,448.612 -184.106,451.065 -183.675,452.499
+ -183.675,454.519 -185.114,457.542 -183.675,456.679 -182.954,458.263 -181.946,459.702 -180.362,461.144 -178.923,462.003
+ -177.626,463.444 -178.923,465.03 -178.635,466.472 -179.066,467.909 -180.362,469.351 -180.938,470.79 -180.507,472.374
+ -181.946,473.671 -184.969,473.526 -185.402,473.237 -185.402,474.679 -183.963,474.103 -183.53,475.542 -183.53,476.983
+ -184.395,478.421 -185.69,480.005 -187.274,479.862 -187.563,478.421 -187.563,479.862 -185.979,480.728 -185.402,482.165
+ -185.834,483.606 -187.274,482.743 -188.282,482.599 -189.003,484.183 -190.442,483.173 -191.162,484.612 -192.601,485.911
+ -191.738,490.229 -192.171,491.813 -192.171,493.829 -191.595,495.271 -190.154,496.421 -190.154,497.862 -193.177,499.302
+ -193.034,499.878 -191.595,501.03 -190.154,501.462 -188.715,501.462 -189.146,502.903 -190.587,504.341 -192.026,504.919
+ -193.61,503.478 -195.051,503.333 -196.635,503.911 -198.074,503.765 -202.538,506.79 -204.986,506.214 -207.433,499.589
+ -207.433,496.567 -207.723,495.847 -207.723,500.31 -207.003,501.751 -206.427,504.63 -205.706,506.214 -206.57,507.653
+ -207.866,509.095 -209.45,510.103 -212.33,509.095 -213.771,510.39 -215.211,510.247 -213.626,513.126 -214.347,514.567
+ -215.786,513.989 -217.37,512.981 -216.938,514.421 -219.963,514.567 -221.4,514.421 -221.979,512.981 -220.538,512.55
+ -219.816,511.11 -221.259,511.829 -222.698,511.687 -224.715,508.95 -224.427,511.255 -226.154,513.56 -223.272,514.421
+ -221.834,515.431 -220.25,516.149 -219.387,517.733 -219.242,519.173 -218.091,520.612 -217.946,522.054 -218.379,523.495
+ -221.4,525.798 -221.688,527.235 -223.131,527.813 -224.715,528.103 -229.179,528.247 -233.211,524.071 -234.795,522.774
+ -236.954,521.911 -234.074,523.782 -231.339,526.517 -230.33,527.958 -228.889,528.821 -227.45,528.534 -224.57,528.534
+ -222.986,528.103 -221.547,528.966 -222.698,530.403 -224.139,531.558 -227.162,530.55 -224.139,531.989 -222.698,531.413
+ -223.994,532.854 -225.433,533.718 -226.874,534.438 -228.458,534.581 -229.179,535.013 -226.874,534.438 -226.154,534.294
+ -223.272,534.87 -221.688,536.165 -220.826,537.606 -219.242,537.894 -217.082,540.63 -215.641,539.911 -211.179,540.198
+ -211.322,541.638 -212.473,544.663 -213.914,545.526 -215.354,545.958 -216.795,545.813 -217.515,546.247 -215.931,546.679
+ -214.49,545.958 -213.051,546.103 -211.898,544.663 -211.179,543.222 -209.738,543.079 -209.45,544.517 -209.017,544.95
+ -209.017,543.509 -207.578,543.942 -207.29,545.382 -205.849,544.374 -205.994,545.813 -204.555,547.255 -204.41,545.813
+ -204.698,544.374 -203.259,543.079 -203.259,544.517 -201.816,544.663 -200.379,544.517 -198.938,543.079 -198.219,544.517
+ -198.074,545.958 -198.507,547.397 -197.641,545.958 -197.641,544.517 -197.211,543.079 -195.771,541.782 -194.33,541.638
+ -192.889,542.214 -193.034,545.095 -192.601,543.509 -191.162,542.935 -188.282,542.646 -186.843,542.79 -185.402,542.501
+ -183.963,542.646 -183.242,544.087 -183.385,545.235 -183.675,546.679 -183.818,545.235 -185.259,544.087 -184.106,545.526
+ -184.538,546.966 -185.979,546.821 -188.858,545.095 -188.57,545.671 -186.986,546.821 -185.547,547.542 -187.131,548.263
+ -187.563,547.687 -189.003,548.118 -187.563,548.839 -186.553,549.702 -186.41,550.134 -187.849,550.567 -190.299,551.862
+ -190.874,552.149 -190.299,553.589 -191.738,553.733 -190.874,555.173 -192.314,554.886 -191.45,556.325 -193.034,557.046
+ -194.042,555.462 -194.042,557.333 -195.482,558.341 -194.042,558.485 -194.187,559.927 -194.761,561.509 -196.347,561.798
+ -197.786,560.646 -198.507,559.062 -199.946,557.765 -199.946,559.349 -198.507,560.501 -196.057,563.382 -195.771,564.821
+ -197.354,564.247 -198.795,565.255 -197.786,566.694 -198.362,568.134 -199.803,568.421 -200.232,569.862 -201.816,569.573
+ -203.259,568.567 -204.698,567.126 -206.139,567.271 -207.723,566.55 -206.139,567.558 -204.698,567.989 -204.122,569.431
+ -205.706,569.431 -204.122,569.718 -201.675,572.597 -204.555,574.038 -205.994,572.597 -205.418,574.038 -206.856,573.751
+ -208.011,572.31 -210.171,571.302 -211.755,570.87 -210.889,572.31 -209.307,572.454 -207.866,573.317 -207.003,574.903
+ -205.563,576.341 -207.003,576.772 -206.57,578.214 -209.45,576.483 -208.44,578.071 -208.73,579.509 -207.29,580.374
+ -208.73,581.524 -209.162,582.966 -210.314,584.55 -213.192,583.829 -214.635,582.679 -215.211,581.235 -215.641,582.679
+ -214.202,583.974 -213.771,585.558 -213.914,586.997 -216.795,588.581 -215.354,590.022 -215.931,591.462 -215.498,592.899
+ -217.803,594.63 -217.946,593.188 -219.53,592.899 -220.971,593.046 -222.265,591.604 -223.706,592.038 -222.555,593.478
+ -224.139,593.478 -223.994,591.894 -224.715,590.454 -225.003,589.013 -225.003,587.431 -223.563,587.862 -222.986,589.302
+ -223.272,587.862 -224.139,586.278 -225.29,587.718 -225.29,590.743 -224.856,592.181 -226.299,589.733 -225.003,594.054
+ -226.44,593.478 -227.162,592.038 -227.738,593.478 -227.45,595.062 -228.024,596.501 -230.042,593.478 -230.618,594.919
+ -229.755,596.356 -229.898,596.79 -229.034,598.663 -227.883,600.103 -229.322,600.247 -229.898,601.687 -231.339,600.39
+ -231.48,601.829 -230.906,603.271 -230.763,606.149 -230.473,606.87 -230.187,607.733 -231.771,608.165 -232.49,607.013
+ -231.771,608.597 -230.33,609.03 -231.771,610.325 -233.354,610.612 -230.33,610.612 -229.034,612.054 -230.618,612.198
+ -232.057,611.622 -232.778,613.062 -235.658,614.067 -234.219,614.067 -232.635,614.646 -234.219,615.079 -238.681,614.501
+ -237.242,615.079 -238.681,615.509 -240.843,614.79 -241.418,615.079 -238.395,615.798 -235.515,617.235 -234.648,618.679
+ -237.675,618.534 -239.114,618.103 -239.259,618.247 -236.232,618.966 -234.938,618.966 -233.354,619.687 -233.064,621.271
+ -234.507,621.271 -236.091,619.974 -235.658,621.558 -234.507,622.997 -233.064,623.286 -234.507,624.581 -238.971,623.142
+ -240.41,623.718 -238.971,623.718 -233.064,625.589 -231.48,625.589 -233.064,626.454 -234.507,626.31 -231.626,627.751
+ -233.064,629.046 -233.211,630.483 -234.648,630.198 -234.648,631.638 -234.507,633.079 -233.641,634.517 -233.211,635.958
+ -231.914,637.542 -232.057,638.981 -231.192,640.421 -230.763,641.862 -231.192,643.444 -229.898,644.886 -230.33,646.325
+ -231.771,646.899 -232.778,645.462 -233.498,645.03 -232.347,646.47 -233.786,646.325 -237.097,641.862 -238.681,641.718
+ -240.122,640.854 -241.563,639.558 -243.146,638.692 -244.011,637.255 -247.034,634.517 -248.187,633.079 -249.192,632.935
+ -248.187,634.229 -245.307,637.11 -240.986,640.854 -243.866,640.565 -245.738,637.687 -247.179,637.829 -248.618,636.247
+ -250.778,634.806 -251.498,634.374 "/>
+ <polyline id="polyline2021" fill="#7FC643" points="-251.498,295.974 -251.498,221.094 -251.064,221.816 -250.635,222.534
+ -249.192,221.958 -248.906,223.4 -247.467,224.262 -246.024,222.965 -245.595,223.254 -245.017,222.246 -244.73,220.806
+ -246.171,219.222 -245.883,217.782 -245.45,217.638 -246.889,216.776 -248.473,216.342 -249.914,215.622 -250.778,214.182
+ -250.778,215.622 -251.498,216.054 -251.498,-38.104 -250.778,-37.386 -250.202,-36.665 -250.057,-38.104 -247.322,-42.568
+ -245.738,-43.864 -244.44,-45.304 -243.003,-45.88 -241.849,-44.44 -242.427,-43 -244.299,-40.84 -244.874,-39.256
+ -243.866,-40.696 -241.131,-43.72 -240.555,-42.856 -240.265,-41.417 -239.259,-39.976 -239.259,-38.392 -239.834,-36.953
+ -240.843,-35.369 -243.433,-32.488 -243.578,-31.912 -243.723,-31.05 -242.139,-30.474 -243.578,-31.912 -240.555,-34.936
+ -238.826,-37.816 -237.53,-36.232 -237.53,-37.816 -237.242,-39.256 -238.395,-39.544 -239.688,-41.128 -239.4,-42.568
+ -237.963,-42.712 -236.232,-41.992 -233.354,-40.266 -232.923,-38.824 -233.354,-37.24 -232.202,-35.802 -232.202,-34.36
+ -232.635,-35.802 -233.498,-34.36 -232.347,-32.92 -232.635,-31.48 -232.347,-29.896 -233.786,-28.6 -235.225,-29.033
+ -238.25,-28.6 -239.688,-28.744 -238.25,-28.312 -236.666,-28.312 -235.225,-28.6 -233.786,-27.88 -234.074,-26.296
+ -233.354,-27.16 -232.923,-28.6 -231.48,-29.466 -230.042,-28.744 -229.322,-27.306 -229.467,-25.722 -229.034,-24.28
+ -227.595,-23.56 -226.154,-23.705 -227.595,-24.138 -228.889,-25.576 -228.889,-28.457 -229.755,-29.896 -229.467,-31.48
+ -229.755,-32.92 -229.034,-35.944 -229.179,-36.808 -227.738,-36.52 -227.017,-35.081 -225.578,-34.072 -226.874,-35.514
+ -225.433,-36.376 -224.57,-34.936 -224.57,-33.496 -223.994,-34.936 -224.856,-37.96 -225.578,-39.4 -224.139,-39.112
+ -223.849,-37.672 -222.41,-36.52 -220.538,-33.496 -219.675,-33.064 -219.53,-31.48 -219.242,-34.506 -217.803,-35.656
+ -216.219,-35.081 -213.339,-33.352 -211.898,-33.496 -212.042,-33.93 -210.458,-34.506 -209.017,-34.36 -207.578,-33.352
+ -205.994,-33.064 -206.427,-31.625 -207.866,-31.625 -209.307,-30.904 -210.889,-30.762 -210.601,-29.32 -211.608,-27.88
+ -213.051,-27.016 -214.635,-26.873 -216.074,-27.306 -214.635,-26.728 -211.608,-27.016 -210.314,-28.457 -210.024,-30.328
+ -205.563,-30.762 -204.122,-29.32 -203.979,-27.736 -205.272,-26.296 -203.834,-27.016 -202.25,-25.722 -201.963,-26.01
+ -202.681,-27.594 -202.826,-29.033 -201.387,-29.466 -202.826,-30.617 -202.681,-32.058 -202.971,-33.642 -203.834,-35.081
+ -205.706,-36.953 -204.265,-37.386 -201.242,-37.672 -195.339,-37.96 -193.467,-37.816 -192.026,-36.52 -191.595,-35.081
+ -193.177,-34.648 -194.618,-34.792 -193.177,-34.36 -192.026,-32.92 -193.467,-31.912 -193.61,-31.625 -193.755,-31.48
+ -194.042,-30.041 -193.61,-31.625 -192.171,-32.488 -191.305,-33.93 -191.305,-34.648 -189.866,-36.088 -188.858,-36.088
+ -187.418,-34.648 -186.986,-36.088 -185.547,-36.232 -183.385,-33.208 -186.41,-33.496 -189.721,-33.352 -188.137,-33.208
+ -187.418,-31.338 -187.706,-32.92 -186.265,-33.064 -183.242,-32.776 -183.385,-31.338 -184.969,-30.328 -184.395,-30.328
+ -182.954,-29.754 -182.666,-28.17 -181.803,-26.728 -182.666,-25.289 -183.963,-23.85 -183.818,-23.56 -182.666,-25
+ -181.225,-26.01 -179.929,-23.128 -178.923,-20.104 -179.066,-18.52 -178.49,-20.104 -175.467,-18.808 -176.906,-19.816
+ -177.771,-21.258 -179.211,-22.266 -181.082,-27.016 -179.641,-27.016 -178.923,-25.432 -178.635,-23.992 -178.345,-23.85
+ -178.202,-23.705 -175.898,-21.976 -174.458,-21.688 -173.017,-20.249 -171.578,-19.674 -171.433,-19.098 -171.146,-17.944
+ -170.427,-17.081 -171.003,-18.376 -170.427,-17.369 -168.843,-16.072 -167.259,-16.36 -165.818,-17.656 -164.234,-17.514
+ -162.65,-18.232 -161.066,-18.232 -159.482,-18.808 -158.042,-19.96 -153.723,-21.258 -152.139,-21.976 -150.698,-23.128
+ -150.41,-22.696 -148.826,-22.266 -147.242,-21.976 -145.803,-22.121 -144.938,-20.682 -143.354,-20.824 -141.914,-21.258
+ -141.339,-19.816 -138.458,-18.953 -135.435,-18.665 -129.53,-17.081 -126.65,-16.792 -125.066,-16.072 -120.746,-15.496
+ -120.171,-14.488 -116.715,-14.488 -113.402,-14.058 -110.234,-15.064 -108.65,-14.922 -105.771,-13.625 -104.187,-14.058
+ -102.746,-13.625 -101.162,-14.634 -99.578,-14.488 -98.139,-14.058 -97.563,-12.474 -95.979,-11.896 -92.811,-12.184
+ -91.227,-13.338 -90.362,-16.218 -89.354,-17.656 -88.635,-19.24 -90.074,-20.392 -89.354,-21.833 -91.515,-24.856
+ -91.658,-26.296 -90.219,-27.736 -90.074,-29.178 -89.066,-32.201 -89.066,-33.785 -87.626,-33.208 -84.458,-31.192
+ -72.938,-30.904 -71.354,-30.474 -69.914,-29.754 -67.034,-30.617 -65.307,-30.328 -63.578,-26.728 -62.139,-27.594
+ -60.555,-29.033 -59.547,-30.474 -58.971,-33.496 -55.803,-34.218 -55.227,-35.802 -53.786,-36.52 -52.202,-37.098
+ -50.763,-36.665 42.405,78.246 42.981,78.967 39.958,80.406 38.661,81.848 36.502,83.144 33.621,84.006 29.157,83.574
+ 24.262,83.862 22.821,84.295 19.798,84.728 16.918,86.024 15.478,86.454 14.758,87.896 11.59,89.48 10.149,89.333 7.126,90.198
+ 6.838,90.056 6.55,90.486 7.989,90.342 10.869,90.917 10.294,92.358 8.71,93.51 8.422,93.654 8.422,93.942 7.846,94.95
+ 3.382,93.942 2.949,94.662 1.798,94.232 0.789,92.79 -0.65,92.213 -0.795,89.622 -3.099,86.166 -4.538,85.592 -5.979,84.44
+ -6.555,85.158 -7.563,83.72 -8.715,82.856 -10.587,83.286 -13.61,82.998 -14.906,83.574 -16.347,83.144 -17.786,83.72
+ -19.37,83.72 -20.811,84.582 -21.387,87.463 -22.683,90.486 -23.402,93.51 -26.139,96.534 -27.578,95.958 -29.019,96.822
+ -30.746,97.11 -32.187,96.392 -34.347,94.808 -36.65,93.654 -38.091,93.799 -40.538,95.381 -43.418,95.526 -44.858,95.958
+ -46.442,95.526 -47.162,95.669 -49.322,96.104 -50.042,95.238 -49.467,93.078 -49.755,91.782 -50.763,90.776 -52.347,89.768
+ -53.786,89.48 -55.37,89.91 -57.099,89.045 -58.538,89.622 -59.259,90.342 -61.274,92.501 -65.738,93.654 -67.322,93.654
+ -70.347,95.094 -72.219,96.392 -71.931,96.534 -73.37,96.822 -74.666,97.4 -76.25,97.11 -77.69,97.254 -78.843,97.688
+ -81.146,99.702 -81.866,100.709 -83.45,101.144 -84.891,100.568 -85.755,101.144 -86.475,100.998 -87.051,99.99 -88.49,99.56
+ -89.931,99.846 -88.49,99.99 -87.051,100.998 -86.475,100.998 -86.33,101.43 -85.755,101.144 -84.171,101.286 -82.73,101.862
+ -81.146,100.568 -80.427,99.56 -78.986,98.262 -77.547,97.4 -74.522,97.688 -71.643,96.822 -67.179,94.232 -63.146,93.51
+ -61.274,92.501 -60.122,91.782 -59.259,90.342 -57.675,89.91 -56.234,90.198 -53.354,90.198 -50.475,91.926 -50.042,93.366
+ -50.187,94.808 -50.042,95.238 -49.755,96.246 -48.314,96.534 -47.162,95.669 -44.715,96.246 -40.395,95.669 -38.811,94.662
+ -37.658,94.232 -34.635,95.238 -31.755,97.254 -30.314,97.688 -28.73,97.4 -27.29,96.246 -25.851,96.822 -23.259,93.942
+ -22.538,91.064 -21.963,89.48 -21.099,88.038 -20.666,86.6 -20.666,85.158 -19.227,84.15 -16.059,83.574 -14.618,84.15
+ -13.179,83.432 -10.154,83.574 -8.715,84.295 -7.274,85.446 -5.69,85.734 -4.25,86.312 -2.954,87.75 -2.522,89.333 -1.515,90.776
+ -1.37,92.213 0.502,94.232 4.102,95.238 6.981,95.958 8.422,97.254 8.422,100.133 8.998,101.574 8.422,103.014 8.134,106.038
+ 6.981,107.48 7.126,108.917 8.422,110.358 7.846,111.942 6.55,113.381 7.989,113.094 7.846,114.678 6.405,114.534 5.974,117.414
+ 6.405,118.998 6.262,120.44 4.821,120.87 5.109,122.454 6.405,124.472 5.397,127.352 3.958,126.917 3.094,128.358 3.237,129.797
+ 3.958,131.381 2.518,130.808 1.077,130.662 0.214,129.366 0.934,123.318 0.357,121.877 0.646,120.44 0.069,118.856 1.51,118.568
+ 1.653,117.125 2.949,115.542 3.382,114.104 2.949,112.662 2.086,111.224 2.229,109.64 1.941,108.198 3.382,107.768 2.806,106.326
+ 1.798,104.888 2.518,103.304 1.51,101.862 1.941,100.278 0.502,99.272 -0.938,99.56 -2.522,100.422 0.502,99.846 -0.507,101.286
+ -2.091,102.44 -2.954,103.877 -2.954,104.312 -1.515,104.6 -1.803,103.158 -0.219,103.304 1.222,104.454 0.934,107.48
+ 1.365,108.917 -0.074,108.486 0.789,110.07 0.789,112.95 1.653,114.534 0.214,114.678 0.502,116.118 -0.938,115.83 -1.227,114.246
+ -1.37,115.83 0.214,116.984 -1.37,116.118 -0.219,117.56 1.365,117.846 -0.219,117.702 -1.658,116.262 -0.795,117.702
+ -2.234,116.262 -5.114,114.104 -3.675,115.4 -2.811,118.278 -0.65,122.742 -1.37,124.184 -2.091,127.64 -2.811,129.078
+ -2.954,130.662 -3.53,129.078 -5.114,128.07 -5.979,128.936 -4.971,131.958 -4.826,133.4 -4.25,134.838 -2.811,135.702
+ -2.666,137.144 -3.675,140.024 -2.234,139.446 -0.795,139.301 0.789,139.734 1.941,141.174 0.502,142.472 -3.963,142.758
+ -8.427,141.75 -13.034,139.877 -17.498,139.734 -20.522,140.166 -21.963,141.318 -22.538,144.198 -21.242,142.758 -21.242,144.198
+ -19.803,144.776 -18.795,146.213 -19.227,147.654 -17.643,146.79 -17.786,148.232 -16.778,149.669 -16.635,151.686
+ -15.482,149.958 -15.771,148.518 -14.906,149.094 -14.763,149.816 -15.914,152.838 -14.475,152.984 -15.914,153.702
+ -20.091,150.392 -21.53,150.246 -23.114,151.254 -24.267,148.232 -25.563,146.79 -27.003,148.085 -27.723,149.526 -28.442,150.392
+ -28.587,151.976 -27.578,153.56 -27.435,154.998 -24.555,157.446 -25.418,158.888 -28.154,163.206 -29.595,164.79 -31.034,165.654
+ -34.059,166.95 -35.643,167.094 -38.522,167.958 -39.963,168.822 -44.57,173.862 -46.011,174.726 -47.595,175.014 -50.475,176.598
+ -53.211,179.48 -54.65,180.342 -57.53,184.662 -58.826,186.102 -57.387,185.816 -55.946,186.102 -56.234,187.542 -57.387,188.984
+ -61.851,192.15 -64.874,193.446 -67.755,194.024 -69.339,193.59 -70.778,193.877 -72.219,192.726 -71.786,191.142 -70.778,189.702
+ -70.347,188.118 -71.066,187.974 -70.778,186.534 -71.354,185.094 -72.938,185.094 -73.082,182.07 -74.522,183.222
+ -76.395,184.085 -76.538,185.669 -79.274,188.406 -81.29,191.286 -82.442,194.31 -83.45,195.75 -84.746,198.776 -84.458,200.213
+ -85.898,201.654 -85.179,202.806 -85.467,204.246 -85.322,205.83 -86.475,207.27 -86.475,208.709 -85.61,210.15 -85.322,211.734
+ -85.755,213.174 -85.61,214.614 -87.482,213.894 -88.202,215.045 -89.643,215.192 -91.082,215.91 -91.082,217.35 -92.234,218.79
+ -93.675,218.648 -95.547,217.638 -96.986,218.934 -95.547,219.654 -94.106,221.094 -98.57,220.518 -98.57,221.958
+ -100.011,222.822 -101.45,223.11 -102.891,222.965 -103.61,221.526 -103.755,220.085 -102.171,218.648 -105.194,220.374
+ -106.635,219.366 -108.074,220.95 -109.515,221.526 -111.099,221.526 -113.979,222.39 -115.418,223.542 -113.979,222.965
+ -109.515,221.958 -108.074,222.534 -105.051,223.254 -105.482,224.694 -107.066,223.4 -108.507,224.406 -107.066,225.558
+ -108.507,226.278 -107.066,226.278 -105.482,225.558 -104.042,226.422 -102.603,225.558 -99.723,225.558 -98.139,226.568
+ -96.698,226.278 -94.395,225.125 -92.811,225.414 -90.938,228.438 -89.498,227.142 -89.354,228.582 -89.786,230.166
+ -89.498,231.606 -90.074,234.486 -88.347,234.774 -88.49,236.213 -89.931,236.79 -88.347,236.79 -86.906,237.654 -86.618,239.094
+ -86.618,240.678 -86.906,242.118 -85.322,242.262 -83.883,242.694 -83.45,241.254 -85.034,236.934 -86.475,236.07 -85.61,234.629
+ -86.763,233.045 -84.746,230.166 -85.755,228.582 -87.339,229.158 -87.339,227.717 -86.475,226.133 -86.763,224.694
+ -83.883,225.125 -83.45,223.686 -79.418,228.006 -79.851,230.885 -79.994,233.91 -79.131,236.934 -79.418,238.374 -78.267,241.398
+ -79.418,242.838 -80.858,244.133 -82.442,244.709 -83.883,244.133 -85.322,244.421 -86.906,243.414 -88.347,244.133
+ -89.786,245.43 -89.931,246.87 -91.37,246.293 -92.234,247.877 -93.675,247.446 -95.114,248.31 -95.834,249.75 -95.69,250.902
+ -96.267,252.198 -96.122,253.638 -95.114,255.078 -96.698,254.79 -98.139,255.654 -99.578,256.95 -101.162,257.814
+ -101.883,259.253 -103.034,260.694 -102.746,262.134 -104.763,265.158 -103.898,269.478 -104.187,271.062 -103.755,271.782
+ -103.755,273.222 -104.475,274.662 -104.618,275.958 -105.194,277.542 -106.49,278.982 -106.923,280.421 -106.923,282.006
+ -106.49,283.446 -106.49,284.886 -103.61,283.014 -102.171,284.454 -103.61,285.318 -106.49,286.326 -108.074,287.333
+ -109.515,288.774 -110.234,290.213 -110.091,291.654 -109.227,292.662 -108.219,292.23 -106.778,292.518 -105.339,292.085
+ -104.187,289.206 -104.475,287.622 -105.051,286.182 -100.587,284.31 -101.45,285.75 -100.011,285.461 -98.427,284.742
+ -96.986,284.742 -97.274,286.182 -98.282,287.622 -97.418,289.206 -94.971,289.206 -95.979,292.085 -99.003,294.534
+ -100.442,295.11 -101.45,296.549 -100.011,297.99 -102.891,296.262 -104.33,295.83 -103.755,297.27 -102.314,297.558
+ -101.595,298.998 -101.45,300.582 -102.026,300.293 -103.467,300.15 -107.786,298.421 -109.37,298.421 -112.395,296.549
+ -113.834,297.27 -113.979,298.709 -117.003,297.125 -117.146,298.709 -115.851,300.15 -115.131,301.59 -116.57,301.59
+ -118.154,301.014 -118.587,302.454 -120.746,302.598 -122.187,301.734 -121.755,300.293 -121.61,298.709 -120.171,298.709
+ -121.322,297.27 -120.458,295.686 -123.339,297.414 -124.923,298.854 -126.362,299.286 -127.803,298.854 -126.65,300.293
+ -123.626,298.134 -122.042,298.854 -122.763,300.293 -122.763,301.734 -122.475,303.174 -119.162,302.886 -117.578,303.606
+ -114.698,303.174 -113.114,303.606 -111.675,302.886 -110.234,301.734 -108.65,302.454 -107.211,302.742 -104.33,304.182
+ -104.187,305.622 -105.194,307.206 -101.738,311.526 -100.299,311.669 -98.858,312.965 -98.282,314.549 -97.274,315.99
+ -96.267,316.709 -94.971,315.27 -92.091,315.846 -90.65,315.702 -89.931,314.118 -91.37,313.398 -92.811,313.974 -93.963,312.39
+ -94.395,310.95 -93.242,309.797 -91.803,310.23 -90.219,311.381 -89.066,312.822 -87.626,313.398 -87.339,311.958 -85.898,312.246
+ -84.458,313.253 -84.458,314.837 -84.171,316.278 -85.61,314.982 -87.051,315.125 -84.171,317.718 -83.162,317.142
+ -81.723,316.997 -82.874,313.974 -82.73,312.534 -81.29,311.669 -79.851,310.23 -79.851,308.79 -78.986,307.206 -76.395,304.326
+ -75.675,302.886 -74.091,302.742 -72.65,301.59 -71.354,301.014 -68.33,300.726 -66.891,301.158 -65.45,302.454 -63.866,303.03
+ -63.578,304.47 -62.139,304.326 -62.139,302.886 -59.259,301.59 -56.234,302.598 -51.914,303.03 -50.187,305.91 -51.339,306.629
+ -52.059,308.07 -50.618,308.501 -49.179,308.358 -48.171,306.774 -46.73,307.35 -45.578,308.79 -45.435,310.23 -43.851,310.518
+ -43.563,313.398 -43.563,311.958 -42.698,310.518 -41.547,311.958 -41.402,314.406 -42.843,314.549 -44.282,313.542
+ -44.57,314.982 -46.154,315.125 -45.003,316.566 -45.29,318.007 -48.171,318.294 -49.467,319.733 -52.49,321.749 -55.37,322.327
+ -59.834,321.749 -61.274,322.183 -61.706,322.901 -63.29,323.335 -64.011,324.774 -65.595,325.062 -67.034,325.927 -70.059,326.79
+ -69.482,328.229 -70.923,328.519 -72.362,328.374 -72.507,326.935 -71.643,325.495 -71.643,323.909 -73.227,323.767
+ -73.082,325.351 -74.522,326.214 -76.971,323.767 -77.834,322.327 -79.274,322.472 -79.706,321.03 -79.563,324.054
+ -81.003,324.917 -82.299,326.358 -81.578,328.229 -79.994,329.095 -80.858,330.534 -82.442,329.815 -83.019,332.839
+ -82.442,334.278 -83.883,335.286 -83.883,333.702 -85.322,332.839 -86.763,332.839 -86.475,331.397 -85.034,331.831 -86.33,330.39
+ -89.066,333.126 -94.25,334.854 -98.715,334.565 -100.154,334.278 -101.595,335.718 -103.034,336.726 -101.595,337.015
+ -100.874,337.591 -100.011,337.591 -99.723,338.167 -98.282,338.886 -96.986,338.022 -95.547,338.886 -96.986,339.175
+ -94.106,339.462 -92.522,339.175 -91.082,339.319 -86.618,342.054 -86.618,343.495 -89.643,345.511 -92.234,348.534
+ -93.675,349.542 -95.114,350.118 -96.698,350.263 -99.578,350.983 -102.458,351.126 -102.891,350.839 -102.891,349.397
+ -101.883,347.958 -104.906,348.39 -106.347,347.958 -107.786,347.958 -112.25,349.542 -113.547,350.983 -116.57,353.431
+ -118.011,354.151 -120.891,353.862 -121.179,355.446 -119.019,355.733 -118.299,357.175 -116.858,357.319 -116.139,358.759
+ -116.57,360.198 -110.666,360.054 -109.082,360.63 -105.914,362.79 -102.891,363.655 -96.986,363.655 -93.963,364.229
+ -94.106,365.815 -93.675,367.253 -92.234,368.694 -92.522,367.253 -91.082,367.253 -89.211,367.831 -88.923,369.271
+ -88.202,367.831 -86.763,366.966 -87.194,365.526 -85.755,364.808 -84.314,364.519 -82.874,364.808 -81.29,363.798
+ -79.851,363.798 -76.971,364.519 -76.538,363.077 -76.25,363.077 -76.106,364.519 -77.114,365.958 -75.818,367.397 -75.53,368.839
+ -75.675,370.421 -77.259,373.444 -77.547,374.89 -77.402,377.909 -77.114,379.351 -77.69,382.374 -78.41,380.935 -79.851,380.935
+ -80.139,378.058 -80.139,379.495 -80.858,381.942 -82.299,383.237 -83.883,383.958 -83.162,385.542 -83.738,388.421
+ -85.179,389.286 -88.059,387.271 -89.498,385.827 -88.923,387.271 -89.931,390.151 -92.811,390.581 -94.25,389.286
+ -95.259,387.847 -96.698,386.983 -95.547,385.687 -96.267,384.103 -95.979,382.663 -97.563,383.095 -97.563,383.815
+ -99.003,383.958 -100.154,385.397 -101.595,385.827 -101.162,387.271 -102.603,386.839 -104.042,386.983 -105.626,387.847
+ -109.515,392.312 -110.954,393.462 -116.715,393.462 -118.154,393.03 -119.738,391.878 -119.883,390.438 -122.763,389.431
+ -124.202,389.573 -124.347,388.136 -125.786,387.271 -127.946,384.245 -129.387,383.526 -130.826,382.374 -131.259,380.935
+ -129.818,380.647 -128.379,379.351 -127.803,377.767 -126.362,378.343 -124.778,377.622 -123.339,377.622 -124.923,377.046
+ -124.778,375.462 -121.755,373.155 -121.61,373.88 -121.322,372.438 -121.322,370.854 -121.898,372.438 -122.042,370.999
+ -122.906,369.413 -124.347,369.847 -122.906,370.999 -123.339,372.438 -124.635,374.022 -126.074,375.03 -126.362,376.472
+ -127.803,376.323 -129.242,377.767 -130.683,378.774 -132.843,379.782 -134.282,379.782 -133.563,378.343 -132.122,376.901
+ -132.555,375.462 -131.834,374.022 -133.274,374.89 -134.858,375.175 -132.843,370.712 -132.698,369.271 -129.675,368.405
+ -128.954,366.966 -130.25,365.526 -130.25,363.942 -129.818,361.065 -130.826,359.479 -132.267,359.622 -133.563,361.065
+ -134.57,364.085 -135.578,365.526 -137.019,365.095 -138.458,364.229 -140.475,362.214 -143.354,361.64 -144.938,360.343
+ -146.091,358.901 -148.971,357.175 -149.69,355.733 -149.834,352.71 -149.402,351.271 -147.963,349.687 -144.938,347.237
+ -145.082,348.679 -144.795,348.103 -144.219,345.077 -143.354,343.64 -141.771,342.198 -140.33,339.175 -140.187,337.591
+ -140.618,338.741 -142.059,339.175 -141.194,337.591 -141.339,336.438 -140.763,334.999 -140.906,333.413 -139.898,329.095
+ -140.042,327.511 -141.914,330.534 -140.475,330.245 -141.051,333.126 -142.49,337.591 -144.795,340.183 -149.114,343.782
+ -149.979,345.222 -150.698,349.687 -150.267,354.007 -150.698,356.886 -151.418,358.472 -152.858,359.19 -157.322,357.175
+ -158.763,356.886 -159.482,355.446 -160.923,355.591 -162.074,355.015 -163.082,353.573 -166.106,352.854 -168.986,351.413
+ -169.706,349.831 -170.858,348.39 -171.721,346.808 -171.433,345.366 -170.282,343.927 -168.843,343.062 -170.282,343.64
+ -171.721,343.782 -170.715,342.343 -170.715,340.901 -172.299,341.479 -170.715,340.472 -169.563,339.03 -168.122,339.175
+ -168.843,337.591 -169.274,336.87 -169.418,337.591 -170.137,338.022 -171.578,337.591 -172.442,336.87 -173.883,337.591
+ -174.889,337.591 -175.61,337.159 -177.051,335.862 -177.482,334.421 -176.187,332.839 -177.771,332.694 -178.345,331.253
+ -177.482,329.815 -177.051,328.374 -175.898,326.79 -175.755,325.495 -174.746,322.614 -174.314,319.591 -173.883,318.726
+ -173.595,318.149 -172.442,316.709 -170.282,312.246 -168.843,310.95 -167.259,309.942 -170.715,311.381 -170.57,309.797
+ -171.146,309.797 -171.29,310.374 -172.874,311.238 -172.442,312.678 -171.003,312.246 -172.299,314.118 -173.595,317.142
+ -173.883,318.726 -175.177,320.167 -176.042,321.606 -176.761,320.022 -178.202,319.733 -177.194,321.175 -175.61,324.198
+ -176.906,325.64 -178.49,326.503 -179.211,328.085 -181.082,330.966 -182.522,331.976 -183.818,332.405 -186.843,332.263
+ -188.282,330.966 -188.282,329.526 -189.721,328.085 -190.587,326.503 -189.866,323.479 -189.29,322.038 -189.721,320.599
+ -190.587,319.015 -192.171,320.022 -193.034,323.046 -194.618,321.606 -193.898,320.167 -194.33,318.726 -192.889,317.431
+ -194.33,317.862 -195.771,317.862 -195.771,316.278 -197.211,315.846 -198.074,317.286 -199.658,316.997 -198.074,315.558
+ -197.064,312.678 -198.074,314.118 -199.515,314.837 -199.946,313.398 -201.387,314.118 -202.395,312.678 -201.816,311.238
+ -201.963,310.518 -203.4,311.814 -203.834,310.374 -203.4,308.79 -204.843,309.366 -205.418,310.806 -205.706,310.23
+ -206.139,311.669 -207.29,310.23 -208.011,308.79 -210.314,305.91 -211.755,305.478 -213.339,305.766 -212.906,304.182
+ -214.202,304.902 -215.641,304.614 -218.666,302.886 -220.106,301.734 -225.29,299.574 -225.003,298.134 -225.578,297.558
+ -226.011,298.566 -227.45,298.998 -229.034,298.134 -231.914,297.846 -233.354,296.837 -236.091,296.837 -238.971,296.262
+ -243.433,296.837 -244.874,296.118 -246.458,295.974 -247.898,295.398 -248.187,293.958 -248.906,295.542 -250.057,296.406
+ -251.498,295.974 "/>
+ <polyline id="polyline2023" fill="#7FC643" points="-241.563,217.926 -241.272,216.486 -242.427,215.766 -243.866,217.064
+ -241.563,217.926 "/>
+ <polyline id="polyline2025" fill="#7FC643" points="-251.498,221.094 -251.064,220.518 -251.064,220.374 -251.498,218.934
+ -251.498,216.054 -250.778,215.622 -250.778,214.182 -249.914,215.622 -248.473,216.342 -246.889,216.776 -245.45,217.638
+ -245.883,217.782 -246.171,219.222 -244.73,220.806 -245.017,222.246 -245.595,223.254 -246.024,222.965 -247.467,224.262
+ -248.906,223.4 -249.192,221.958 -250.635,222.534 -251.064,221.816 -251.498,221.094 "/>
+ <polyline id="polyline2027" fill="#7FC643" points="-251.498,221.094 -251.498,218.934 -251.064,220.374 -251.064,220.518
+ -251.498,221.094 "/>
+ <polyline id="polyline2029" fill="#7FC643" points="-251.498,-38.104 -251.498,-40.984 -250.057,-42.28 -251.498,-41.417
+ -251.498,-42.856 -248.618,-44.584 -245.738,-44.728 -248.187,-41.705 -249.914,-38.824 -250.778,-38.537 -251.354,-38.249
+ -251.498,-38.104 "/>
+ <polyline id="polyline2031" fill="#7FC643" points="-251.498,-40.984 -251.498,-41.417 -250.057,-42.28 -251.498,-40.984 "/>
+ <polyline id="polyline2033" fill="#7FC643" points="-251.498,-46.744 -251.498,-48.904 -250.778,-49.625 -248.763,-51.785
+ -250.202,-50.776 -250.778,-52.216 -249.914,-53.656 -249.48,-55.098 -247.898,-55.672 -245.017,-55.384 -243.578,-55.528
+ -243.433,-54.088 -243.866,-52.506 -245.883,-49.625 -247.322,-48.472 -248.906,-47.608 -250.347,-47.752 -250.778,-47.32
+ -251.498,-46.744 "/>
+ <polyline id="polyline2035" fill="#7FC643" points="-251.498,-51.496 -251.498,-55.528 -250.778,-54.808 -250.202,-54.088
+ -251.498,-51.496 "/>
+ <polyline id="polyline2037" fill="#7FC643" points="-243.578,-31.912 -242.139,-30.474 -243.723,-31.05 -243.578,-31.912 "/>
+ <polyline id="polyline2039" fill="#7FC643" points="-230.473,606.87 -229.034,607.013 -229.034,607.302 -230.473,606.87 "/>
+ <polyline id="polyline2041" fill="#7FC643" points="-226.874,534.438 -229.179,535.013 -228.458,534.581 -226.874,534.438 "/>
+ <polyline id="polyline2043" fill="#7FC643" points="-212.473,-37.386 -210.889,-37.528 -212.33,-36.808 -212.473,-37.386 "/>
+ <polyline id="polyline2045" fill="#7FC643" points="-193.61,-31.625 -194.042,-30.041 -193.755,-31.48 -193.61,-31.625 "/>
+ <polyline id="polyline2047" fill="#7FC643" points="-190.299,551.862 -188.858,551.573 -188.137,552.005 -189.578,553.302
+ -190.299,551.862 "/>
+ <polyline id="polyline2049" fill="#CCE83A" points="-180.074,-29.608 -180.219,-32.634 -179.929,-34.072 -178.49,-33.208
+ -179.066,-34.648 -177.482,-35.224 -176.042,-33.93 -174.601,-33.352 -174.889,-31.768 -175.467,-30.328 -175.322,-28.744
+ -174.889,-27.306 -175.322,-30.328 -174.458,-31.768 -173.017,-33.064 -172.299,-31.625 -172.442,-30.041 -173.595,-28.6
+ -172.154,-29.754 -169.131,-27.16 -167.69,-26.296 -166.25,-25.722 -163.225,-25.289 -162.219,-23.85 -161.929,-25.289
+ -161.354,-26.728 -160.345,-28.17 -159.339,-31.192 -160.923,-31.48 -162.074,-34.36 -162.938,-35.802 -161.498,-36.232
+ -160.057,-36.232 -158.475,-35.514 -157.61,-31.05 -156.171,-29.754 -155.45,-28.312 -157.322,-25.289 -156.171,-26.586
+ -154.587,-27.736 -153.146,-27.16 -151.706,-27.736 -150.122,-27.306 -148.683,-27.736 -147.53,-26.296 -146.811,-27.736
+ -145.37,-27.16 -145.227,-25.576 -143.786,-27.016 -142.347,-27.306 -140.763,-27.306 -140.475,-25.722 -137.595,-26.873
+ -136.154,-26.44 -135.866,-28.024 -134.427,-28.6 -132.986,-28.024 -134.139,-25.144 -134.427,-23.56 -133.851,-25
+ -132.41,-26.296 -131.834,-24.856 -130.25,-25.576 -129.53,-24.138 -127.946,-25 -127.082,-23.417 -131.547,-22.121
+ -129.963,-21.976 -127.082,-22.554 -125.643,-21.688 -125.786,-20.249 -127.227,-19.386 -125.786,-19.96 -124.778,-21.4
+ -125.786,-22.984 -124.202,-22.984 -122.763,-22.554 -123.051,-21.112 -121.61,-19.816 -121.755,-21.258 -121.179,-22.696
+ -119.738,-22.554 -118.154,-21.258 -117.723,-19.816 -116.57,-18.232 -115.994,-16.792 -116.57,-15.785 -115.563,-17.369
+ -115.994,-18.808 -117.866,-21.688 -116.427,-22.266 -114.843,-22.408 -113.979,-22.696 -113.402,-22.842 -111.818,-23.705
+ -110.379,-22.554 -107.498,-21.976 -106.635,-20.537 -105.194,-21.112 -100.73,-18.376 -97.706,-17.081 -96.41,-15.208
+ -96.986,-16.648 -96.986,-17.944 -100.011,-18.808 -98.57,-18.665 -100.011,-19.528 -101.45,-21.112 -102.891,-21.833
+ -104.475,-22.266 -107.498,-23.85 -106.778,-23.705 -108.219,-24.712 -109.803,-25.432 -111.099,-26.873 -110.666,-28.457
+ -109.227,-28.6 -107.786,-27.736 -106.202,-27.16 -106.059,-28.744 -105.339,-30.184 -103.755,-30.184 -103.467,-28.744
+ -100.587,-27.449 -99.003,-27.016 -99.003,-25.576 -97.563,-25.576 -96.122,-25 -96.698,-26.44 -98.282,-26.728 -98.858,-28.17
+ -97.418,-29.033 -95.834,-29.178 -94.395,-27.88 -92.954,-28.6 -94.395,-29.178 -92.954,-29.754 -91.37,-30.041 -89.931,-29.896
+ -91.37,-30.474 -91.658,-31.912 -93.099,-31.05 -96.122,-29.754 -97.563,-30.904 -99.003,-31.05 -100.442,-30.328
+ -102.026,-30.617 -103.467,-31.338 -103.755,-32.92 -100.73,-34.072 -102.171,-34.218 -100.73,-35.514 -102.026,-36.953
+ -101.595,-37.528 -100.154,-36.953 -98.715,-36.808 -95.69,-38.249 -91.37,-38.824 -91.515,-37.386 -90.65,-38.97 -89.211,-38.392
+ -87.626,-38.392 -86.187,-37.528 -81.866,-37.24 -80.282,-37.816 -79.706,-36.808 -78.41,-38.392 -75.53,-38.824 -73.946,-39.4
+ -72.507,-39.112 -71.066,-40.121 -68.042,-40.266 -66.603,-40.552 -67.322,-39.112 -67.467,-37.528 -66.314,-36.088
+ -64.874,-35.224 -64.587,-33.785 -66.026,-33.352 -68.906,-35.944 -68.042,-34.506 -67.898,-33.064 -69.482,-32.346
+ -66.603,-32.92 -64.73,-32.634 -63.578,-33.496 -63.866,-36.52 -62.57,-39.976 -61.706,-41.417 -58.683,-43.289 -52.635,-45.016
+ -53.066,-43.576 -52.635,-42.568 -51.194,-41.992 -51.339,-43.432 -50.33,-45.304 -45.723,-46.888 -44.282,-47.896
+ -41.259,-49.338 -40.106,-50.776 -35.643,-55.098 -35.211,-55.96 -34.49,-56.537 -32.763,-57.256 -31.179,-55.96 -29.738,-56.104
+ -28.299,-57.256 -26.858,-56.682 -25.274,-57.256 -24.122,-54.232 -23.114,-52.792 -23.69,-51.352 -23.402,-50.488
+ -22.826,-52.072 -22.395,-54.953 -22.538,-56.537 -22.25,-57.976 -20.811,-58.84 -19.37,-58.552 -17.931,-58.984 -17.066,-57.544
+ -16.923,-56.104 -15.771,-57.544 -14.33,-57.112 -13.61,-58.552 -13.179,-56.968 -11.738,-58.408 -10.874,-59.85 -9.29,-60.136
+ -9.723,-58.696 -12.171,-55.96 -10.73,-55.816 -10.442,-57.256 -9.003,-58.121 -7.563,-58.121 -6.555,-56.537 -6.41,-55.098
+ -7.851,-53.944 -6.41,-54.232 -5.547,-57.256 -4.683,-58.696 -3.242,-59.128 -2.954,-60.712 -1.515,-60.424 -0.219,-58.984
+ 0.069,-60.424 -1.082,-61.864 0.357,-62.44 -0.219,-63.88 1.222,-63.304 2.229,-61.72 2.518,-60.28 2.374,-58.84 2.949,-57.4
+ 3.237,-60.424 2.949,-61.864 4.39,-61.289 5.397,-62.873 5.542,-64.312 4.821,-62.873 4.533,-64.312 3.382,-65.752 4.821,-66.904
+ 4.678,-69.785 4.39,-68.346 2.949,-67.336 2.806,-68.92 2.374,-67.336 0.934,-68.058 0.934,-69.642 2.374,-70.216 2.806,-71.656
+ 1.365,-70.504 -0.074,-70.648 0.069,-69.208 -1.37,-68.632 -2.522,-70.072 -1.946,-71.656 -1.37,-74.537 -2.811,-73.816
+ -3.099,-75.4 -2.666,-76.84 -2.954,-77.705 -2.091,-78.136 -1.946,-79.72 2.086,-80.728 2.806,-81.16 2.229,-82.6 4.966,-80.296
+ 4.678,-81.736 4.245,-82.024 4.533,-84.904 3.094,-86.058 4.533,-85.768 5.397,-84.328 5.542,-85.768 4.678,-87.208 6.981,-87.497
+ 5.829,-89.369 6.55,-92.537 7.701,-91.098 7.989,-89.514 7.989,-93.976 8.998,-92.392 8.998,-95.417 9.718,-96.856 9.573,-98.44
+ 12.598,-99.304 11.157,-99.592 12.598,-100.888 14.037,-101.608 14.758,-103.05 17.781,-102.904 18.069,-101.466 17.926,-100.024
+ 16.63,-98.584 15.189,-98.008 15.478,-96.568 14.325,-95.128 14.325,-92.104 15.766,-93.544 16.485,-94.984 18.069,-96.136
+ 19.51,-96.28 20.949,-95.417 21.525,-91.816 21.525,-90.232 20.949,-87.352 21.382,-85.912 21.237,-84.762 21.813,-83.32
+ 24.55,-80.584 23.974,-79 22.533,-77.992 20.806,-73.528 19.798,-71.944 18.357,-72.52 16.918,-72.376 16.054,-71.8 14.901,-70.36
+ 13.462,-70.216 8.854,-68.776 10.438,-68.058 11.878,-68.92 13.462,-69.208 14.901,-69.352 17.638,-68.92 18.214,-68.058
+ 17.638,-65.033 17.205,-63.592 16.054,-62.152 17.638,-62.296 18.502,-63.88 18.789,-65.32 18.214,-66.762 18.502,-67.48
+ 19.941,-68.058 21.525,-69.064 22.966,-68.776 23.542,-68.058 23.686,-69.497 24.262,-71.081 25.27,-72.52 25.413,-73.96
+ 25.989,-75.4 27.43,-76.696 28.438,-79.72 27.142,-81.16 28.438,-82.744 29.302,-85.625 29.59,-87.208 28.438,-88.648
+ 29.59,-91.528 31.029,-92.537 32.47,-92.104 33.909,-93.112 32.47,-92.682 29.59,-93.688 28.294,-95.128 28.294,-96.856
+ 31.317,-99.304 29.878,-99.16 29.445,-100.744 29.878,-102.184 31.462,-103.192 32.613,-101.752 32.182,-103.192 33.766,-104.488
+ 32.901,-107.514 34.054,-108.953 34.485,-110.392 34.773,-113.417 33.766,-114.712 32.325,-113.705 30.741,-112.984
+ 27.861,-112.984 26.277,-113.272 25.558,-114.712 25.413,-116.296 26.854,-119.176 28.006,-120.762 28.438,-122.201
+ 27.43,-123.642 28.869,-124.792 29.59,-126.232 28.006,-125.369 27.718,-126.808 27.861,-128.249 29.445,-128.682 29.733,-130.121
+ 30.886,-131.56 32.47,-132.136 33.046,-133.576 33.046,-135.16 34.63,-136.457 33.909,-138.041 35.35,-138.184 35.638,-139.768
+ 36.502,-141.208 36.069,-142.216 37.653,-143.224 37.941,-144.665 39.382,-144.953 40.966,-147.833 41.254,-149.272
+ 39.813,-147.976 39.958,-149.417 39.382,-151 39.67,-152.44 41.109,-153.304 41.254,-154.744 42.693,-155.033 43.558,-157.912
+ 44.998,-158.632 45.718,-160.072 45.285,-161.512 46.869,-162.953 48.31,-162.376 50.47,-165.256 49.029,-164.537 49.894,-165.976
+ 51.478,-167.128 52.485,-168.568 52.918,-170.152 51.478,-170.152 49.894,-169.576 50.901,-171.016 49.462,-171.016
+ 50.758,-173.896 50.613,-174.904 52.054,-173.752 51.621,-172.312 52.63,-173.752 51.909,-175.192 53.35,-176.058 53.926,-177.497
+ 55.365,-177.928 56.806,-179.081 57.813,-180.52 59.254,-180.088 58.39,-181.528 58.39,-184.552 59.109,-183.112 59.542,-181.528
+ 61.126,-181.384 61.989,-182.824 62.854,-183.112 62.998,-184.552 64.438,-185.705 66.021,-186.424 66.021,-189.304
+ 67.317,-187.864 68.613,-189.304 70.054,-190.168 70.485,-191.608 71.781,-193.048 74.661,-194.056 74.949,-192.472
+ 74.518,-191.033 73.077,-190.888 74.518,-190.024 75.958,-190.168 76.821,-191.608 76.678,-194.632 77.542,-197.656
+ 77.542,-199.096 78.981,-199.96 79.701,-201.4 81.142,-201.688 82.726,-201.4 82.869,-199.96 84.31,-198.808 84.598,-200.249
+ 83.878,-201.833 82.582,-203.272 84.021,-203.417 85.462,-204.568 87.046,-203.272 88.485,-202.84 88.918,-204.28 87.334,-204.568
+ 87.766,-206.152 88.918,-207.592 89.062,-206.008 90.357,-203.128 88.918,-201.688 87.478,-201.4 85.605,-198.52 84.166,-197.512
+ 84.166,-194.632 83.014,-191.752 79.846,-187.289 75.382,-183.976 73.941,-184.121 72.502,-183.256 72.789,-184.696
+ 69.909,-186.568 70.054,-185.128 68.613,-183.833 67.029,-184.408 65.59,-184.264 67.029,-182.824 68.47,-182.537 69.046,-181.096
+ 68.758,-179.656 68.901,-178.072 68.613,-176.632 67.894,-175.192 66.453,-173.32 65.878,-171.88 64.726,-170.296 61.701,-167.848
+ 61.126,-166.266 59.109,-163.384 59.829,-164.824 56.806,-163.816 57.958,-160.936 57.525,-158.056 56.518,-155.033
+ 55.365,-153.592 54.069,-150.712 52.918,-149.128 51.909,-150.28 50.47,-149.705 50.182,-148.121 51.189,-149.85 52.054,-148.266
+ 53.493,-147.4 53.926,-145.96 54.069,-144.376 55.077,-141.497 55.222,-140.058 53.926,-138.617 52.485,-138.184 53.205,-138.041
+ 54.646,-138.76 56.086,-137.896 56.518,-136.457 56.518,-134.873 54.789,-130.552 53.638,-129.256 55.077,-127.96 55.222,-126.376
+ 54.646,-124.936 54.934,-122.776 55.222,-124.216 55.222,-125.8 55.653,-127.24 56.518,-128.824 58.102,-130.266 61.989,-134.584
+ 63.43,-135.448 64.582,-135.16 66.021,-133.864 67.605,-133.289 67.462,-131.85 67.605,-130.408 66.021,-129.688 64.582,-129.833
+ 63.285,-130.408 64.726,-129.256 67.75,-129.4 69.189,-128.249 67.75,-129.688 68.758,-132.712 70.197,-131.992 68.901,-134.873
+ 69.334,-136.312 67.462,-138.328 66.886,-139.912 68.325,-140.92 69.189,-140.776 73.51,-137.32 75.094,-136.6 76.533,-136.744
+ 76.678,-135.304 77.542,-136.744 77.974,-138.184 79.558,-137.176 80.998,-137.32 82.582,-137.033 83.157,-135.592
+ 84.741,-136.888 86.182,-139.768 87.766,-140.201 89.926,-143.224 90.069,-144.665 91.51,-145.96 92.949,-145.816 94.39,-146.537
+ 95.974,-146.968 94.533,-146.249 94.102,-144.665 93.094,-143.224 94.533,-142.504 94.966,-141.064 94.245,-138.041
+ 95.829,-138.904 97.27,-139.048 98.565,-137.32 97.846,-134.296 96.838,-132.856 98.422,-131.705 99.43,-130.121 102.166,-127.24
+ 103.317,-126.52 104.47,-123.642 105.909,-123.352 106.485,-121.768 106.054,-118.888 106.197,-117.448 104.758,-116.296
+ 104.325,-115.144 105.766,-116.296 106.773,-115.289 106.197,-116.728 107.062,-119.752 107.062,-121.192 108.214,-122.632
+ 106.773,-124.072 105.909,-127.384 107.35,-128.104 107.926,-127.96 108.646,-129.4 110.086,-130.984 111.525,-131.992
+ 114.55,-133.289 117.43,-133.864 118.869,-133.289 119.157,-131.85 119.014,-131.272 122.037,-130.552 122.758,-129.4
+ 124.342,-128.824 124.773,-127.528 125.35,-128.249 126.789,-128.104 128.373,-127.528 128.373,-125.944 129.813,-125.8
+ 131.254,-126.232 130.821,-124.792 129.813,-123.352 128.806,-120.472 129.67,-119.033 128.229,-119.176 126.646,-119.896
+ 123.766,-119.608 122.758,-121.05 123.766,-122.488 124.054,-123.352 121.029,-118.888 119.59,-120.328 118.006,-121.336
+ 116.998,-119.896 116.998,-118.312 118.438,-117.592 120.021,-117.592 118.438,-116.44 120.021,-116.152 121.462,-117.592
+ 126.069,-119.176 127.51,-118.312 128.949,-118.457 130.533,-119.464 131.254,-118.024 130.245,-116.584 131.686,-116.873
+ 131.974,-115.432 133.558,-115.72 133.126,-114.28 132.693,-111.256 131.254,-109.96 130.821,-108.52 131.109,-107.8
+ 131.397,-109.24 133.558,-112.266 134.134,-115.144 133.701,-116.584 135.285,-117.592 136.149,-116.152 137.445,-114.712
+ 138.886,-114.28 138.741,-112.84 139.029,-111.4 141.909,-111.688 142.197,-110.249 140.758,-109.816 139.174,-108.953
+ 140.613,-108.953 142.197,-107.656 139.174,-106.216 140.325,-103.336 140.182,-101.752 138.021,-95.992 137.157,-94.408
+ 135.718,-93.976 134.277,-94.984 133.27,-94.696 134.71,-94.408 135.285,-92.968 134.277,-91.528 133.701,-89.944 132.262,-90.52
+ 130.821,-90.376 129.382,-91.674 127.51,-94.552 127.51,-97.576 126.069,-98.728 123.189,-98.296 121.605,-98.44 120.741,-99.448
+ 119.59,-99.736 119.302,-99.88 117.861,-98.873 116.422,-98.873 114.981,-98.152 113.397,-98.008 111.958,-98.584 110.518,-99.88
+ 109.51,-101.32 109.222,-102.328 108.069,-101.178 105.621,-99.88 104.901,-97.864 105.621,-96.856 104.613,-95.417
+ 103.029,-94.121 98.71,-92.104 97.126,-91.816 96.693,-91.24 96.838,-89.8 95.397,-87.785 96.117,-86.92 96.262,-86.632
+ 96.405,-86.632 96.55,-86.488 97.989,-85.336 98.998,-83.752 99.43,-83.608 100.869,-82.312 101.157,-79.289 101.733,-76.408
+ 101.445,-75.4 100.438,-73.96 101.302,-70.936 101.014,-69.497 99.718,-68.058 101.014,-66.617 101.157,-63.448 100.726,-62.152
+ 100.582,-59.992 98.854,-56.968 98.998,-54.088 100.149,-52.648 100.149,-51.208 99.285,-48.184 99.285,-46.6 98.422,-45.16
+ 98.134,-43.72 98.277,-42.28 98.422,-43.72 99.573,-46.744 99.861,-49.625 100.438,-51.064 100.582,-52.648 99.573,-54.088
+ 99.285,-55.528 99.573,-57.4 100.149,-58.84 101.157,-59.992 101.157,-62.008 101.59,-65.178 101.445,-66.617 100.869,-68.058
+ 101.445,-71.081 100.869,-73.96 101.878,-75.976 101.445,-78.856 101.59,-80.44 101.302,-81.88 100.582,-83.32 98.565,-85.048
+ 97.846,-86.632 96.405,-86.632 96.117,-86.92 95.686,-88.072 96.838,-89.656 97.126,-91.098 98.565,-91.816 101.59,-92.824
+ 104.47,-94.984 105.909,-96.568 105.334,-98.008 105.766,-99.448 108.646,-101.466 112.102,-97.289 113.542,-96.712
+ 115.126,-96.568 119.59,-99.736 121.029,-98.296 124.054,-98.008 125.638,-98.44 127.077,-97.576 127.222,-97 126.934,-96.28
+ 127.222,-93.258 128.229,-91.816 128.806,-91.384 131.686,-89.656 133.126,-89.514 133.846,-89.944 134.71,-91.384
+ 136.149,-91.528 136.726,-90.09 136.006,-89.8 137.014,-88.36 136.726,-86.92 135.285,-85.625 133.558,-85.625 135.142,-84.762
+ 135.43,-83.32 134.277,-81.88 132.838,-81.304 130.102,-81.304 128.661,-82.024 128.949,-83.464 129.67,-84.904 128.661,-83.464
+ 127.222,-82.744 125.781,-82.744 124.342,-81.448 122.613,-78.568 121.174,-74.104 119.59,-73.098 118.149,-73.528
+ 113.686,-71.514 112.821,-69.93 111.813,-67.048 111.67,-65.608 112.533,-64.024 113.829,-62.584 114.693,-61.144 115.27,-59.56
+ 118.149,-57.688 119.59,-57.544 120.021,-55.96 119.878,-55.672 118.294,-55.816 116.998,-54.376 116.422,-52.792 116.998,-51.352
+ 118.582,-50.201 120.021,-49.625 119.302,-48.762 120.886,-50.201 121.174,-51.642 122.758,-52.648 124.197,-52.36 124.485,-53.8
+ 126.069,-55.24 126.502,-56.682 127.798,-58.121 128.229,-61.144 129.67,-60.424 131.109,-59.128 132.55,-58.266 133.989,-59.272
+ 132.55,-59.56 131.397,-61 132.981,-60.712 134.422,-60.136 136.006,-60.136 137.445,-60.424 138.886,-61.144 140.47,-61.576
+ 141.909,-62.728 143.35,-63.16 144.069,-64.6 145.51,-64.744 152.854,-64.744 154.438,-64.457 155.878,-63.304 156.31,-61.864
+ 156.021,-60.424 158.037,-59.417 160.918,-56.968 161.062,-55.528 160.773,-56.968 159.334,-57.4 157.894,-56.249 157.605,-54.665
+ 155.014,-54.376 156.598,-53.514 158.037,-53.656 159.621,-53.369 161.062,-53.514 159.478,-53.8 165.382,-53.8 168.405,-52.36
+ 169.846,-52.216 170.71,-50.776 169.701,-49.192 169.126,-48.904 170.134,-50.488 167.254,-49.192 167.254,-47.752
+ 166.245,-46.312 164.806,-46.457 163.365,-45.016 163.077,-43.432 162.214,-41.992 160.773,-40.696 159.189,-39.976
+ 157.75,-40.408 156.166,-40.266 156.021,-38.824 157.462,-38.682 157.462,-37.24 156.31,-35.656 154.726,-34.506 153.285,-34.218
+ 151.558,-31.912 149.974,-30.617 148.39,-29.896 146.949,-29.32 145.51,-29.178 145.077,-30.617 145.51,-32.058 145.077,-34.936
+ 146.518,-36.088 145.077,-35.944 143.638,-36.953 142.054,-36.808 140.613,-36.232 139.174,-36.088 137.59,-35.224 134.71,-34.936
+ 131.686,-33.93 130.245,-34.792 130.39,-33.208 129.958,-31.768 129.958,-30.184 126.934,-29.178 126.357,-30.762 126.069,-29.32
+ 127.365,-27.88 128.949,-27.594 130.39,-27.736 131.829,-28.457 132.262,-29.896 132.838,-28.457 132.981,-27.016 136.006,-24.568
+ 137.445,-24.426 138.886,-23.417 139.605,-21.976 138.166,-20.824 135.285,-23.705 134.565,-25.289 133.126,-26.44
+ 131.686,-26.873 130.245,-26.586 129.237,-25.144 127.798,-25.432 126.357,-26.296 124.773,-26.296 123.334,-25.576
+ 122.325,-23.992 123.046,-22.554 124.485,-21.833 125.926,-22.842 127.51,-22.266 128.949,-22.984 129.813,-25.289
+ 131.254,-25.432 133.846,-23.85 134.565,-22.408 134.565,-20.682 134.277,-19.674 135.861,-18.52 137.302,-19.24 138.453,-19.098
+ 139.029,-20.537 139.174,-18.665 139.894,-17.944 139.605,-19.528 142.485,-20.824 146.949,-21.112 148.39,-19.674
+ 148.966,-18.232 149.974,-16.792 151.126,-15.352 152.565,-14.058 154.149,-13.48 157.029,-11.754 156.741,-12.184
+ 158.325,-11.466 161.205,-9.736 162.789,-9.16 165.67,-8.873 167.254,-7.576 168.693,-6.856 171.573,-6.856 171.142,-6.426
+ 169.989,-5.992 169.27,-4.408 169.126,-2.97 169.413,-0.09 169.846,1.494 168.405,2.648 165.525,3.224 160.918,5.526
+ 159.621,5.959 158.182,7.11 157.029,8.694 156.166,10.136 155.302,13.016 154.869,16.04 155.157,22.088 154.006,24.967
+ 153.718,27.272 152.422,31.446 151.27,30.295 152.71,28.856 151.126,29.862 149.829,31.304 148.678,32.166 148.39,32.312
+ 147.094,33.896 144.934,38.215 143.781,39.224 142.918,36.917 142.918,35.333 142.485,35.768 141.046,34.472 142.197,37.352
+ 140.901,38.79 142.342,38.648 143.781,40.085 144.069,39.942 144.214,40.52 142.918,43.4 141.621,44.984 141.621,43.542
+ 140.182,43.542 138.741,44.694 135.718,46.422 134.277,47.862 132.981,50.742 131.829,56.79 131.109,58.232 129.958,56.79
+ 128.518,57.078 126.934,56.79 125.493,57.224 124.342,55.64 124.63,54.198 126.214,53.047 126.069,52.038 124.63,51.608
+ 124.773,51.176 123.334,51.896 122.901,55.064 123.046,56.501 121.605,56.501 120.021,57.366 118.869,55.782 118.149,54.344
+ 115.126,55.494 114.838,56.936 113.397,57.512 111.813,59.096 110.373,59.383 108.934,59.096 107.35,60.246 106.342,58.808
+ 106.485,57.224 105.046,56.79 103.605,56.936 105.046,56.215 103.605,56.501 102.166,57.366 102.166,55.928 99.142,56.501
+ 97.701,56.358 97.989,57.366 96.262,58.95 94.821,60.104 94.39,59.526 92.949,60.534 91.798,62.118 89.205,63.414 88.918,63.56
+ 87.334,63.272 86.182,63.702 85.894,63.848 84.453,63.56 83.014,64.568 82.149,64.422 81.285,64.856 80.277,64.422 78.838,64.422
+ 75.813,65.432 74.373,66.87 72.789,67.879 71.35,68.166 69.909,69.03 66.166,68.742 65.59,69.176 64.149,69.608 62.71,70.902
+ 62.71,71.192 61.701,72.631 60.405,72.776 60.55,74.358 59.109,75.799 57.67,76.085 56.229,77.238 54.789,77.816 52.197,77.526
+ 50.758,76.95 49.317,77.383 48.741,77.816 44.134,77.816 42.981,78.967 42.405,78.246 -50.763,-36.665 -52.202,-37.098
+ -53.786,-36.52 -55.227,-35.802 -55.803,-34.218 -58.971,-33.496 -59.547,-30.474 -60.555,-29.033 -62.139,-27.594
+ -63.578,-26.728 -65.307,-30.328 -67.034,-30.617 -69.914,-29.754 -71.354,-30.474 -72.938,-30.904 -84.458,-31.192
+ -87.626,-33.208 -89.066,-33.785 -89.066,-32.201 -90.074,-29.178 -90.219,-27.736 -91.658,-26.296 -91.515,-24.856
+ -89.354,-21.833 -90.074,-20.392 -88.635,-19.24 -89.354,-17.656 -90.362,-16.218 -91.227,-13.338 -92.811,-12.184
+ -95.979,-11.896 -97.563,-12.474 -98.139,-14.058 -99.578,-14.488 -101.162,-14.634 -102.746,-13.625 -104.187,-14.058
+ -105.771,-13.625 -108.65,-14.922 -110.234,-15.064 -113.402,-14.058 -116.715,-14.488 -120.171,-14.488 -120.746,-15.496
+ -125.066,-16.072 -126.65,-16.792 -129.53,-17.081 -135.435,-18.665 -138.458,-18.953 -141.339,-19.816 -141.914,-21.258
+ -143.354,-20.824 -144.938,-20.682 -145.803,-22.121 -147.242,-21.976 -148.826,-22.266 -150.41,-22.696 -150.698,-23.128
+ -152.139,-21.976 -153.723,-21.258 -158.042,-19.96 -159.482,-18.808 -161.066,-18.232 -162.65,-18.232 -164.234,-17.514
+ -165.818,-17.656 -167.259,-16.36 -168.843,-16.072 -170.427,-17.369 -171.003,-18.376 -171.433,-19.528 -171.721,-20.249
+ -174.746,-22.121 -178.202,-23.705 -178.345,-25.144 -179.641,-28.024 -180.074,-29.608 "/>
+ <polyline id="polyline2051" points="-178.202,-23.705 -176.187,-22.408 -174.746,-21.976 -171.866,-20.104 -171.578,-19.674
+ -173.017,-20.249 -174.458,-21.688 -175.898,-21.976 -178.202,-23.705 "/>
+
+ <polygon id="polygon2053" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -178.202,-23.705 -176.187,-22.408 -174.746,-21.976 -171.866,-20.104 -171.578,-19.674 -173.017,-20.249 -174.458,-21.688
+ -175.898,-21.976 "/>
+ <polyline id="polyline2055" points="-178.202,-23.705 -174.746,-22.121 -171.721,-20.249 -171.433,-19.528 -171.578,-19.674
+ -171.866,-20.104 -174.746,-21.976 -176.187,-22.408 -178.202,-23.705 "/>
+
+ <polygon id="polygon2057" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -178.202,-23.705 -174.746,-22.121 -171.721,-20.249 -171.433,-19.528 -171.578,-19.674 -171.866,-20.104 -174.746,-21.976
+ -176.187,-22.408 "/>
+ <polyline id="polyline2059" fill="#7FC643" points="-173.883,318.726 -173.595,317.142 -172.299,314.118 -171.003,312.246
+ -172.442,312.678 -172.874,311.238 -171.29,310.374 -171.146,309.797 -170.57,309.797 -170.715,311.381 -167.259,309.942
+ -168.843,310.95 -170.282,312.246 -172.442,316.709 -173.595,318.149 -173.883,318.726 "/>
+ <polyline id="polyline2061" points="-171.578,-19.674 -171.433,-19.528 -171.433,-19.098 -171.578,-19.674 "/>
+
+ <polygon id="polygon2063" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -171.578,-19.674 -171.433,-19.528 -171.433,-19.098 "/>
+ <polyline id="polyline2065" points="-171.433,-19.098 -171.433,-19.528 -171.003,-18.376 -171.433,-19.098 "/>
+
+ <polygon id="polygon2067" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -171.433,-19.098 -171.433,-19.528 -171.003,-18.376 "/>
+ <polyline id="polyline2069" points="-171.433,-19.098 -171.003,-18.376 -170.427,-17.081 -171.146,-17.944 -171.433,-19.098 "/>
+
+ <polygon id="polygon2071" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -171.433,-19.098 -171.003,-18.376 -170.427,-17.081 -171.146,-17.944 "/>
+ <polyline id="polyline2073" fill="#CCE83A" points="-147.242,-38.97 -148.395,-40.121 -147.242,-41.56 -146.811,-43
+ -145.37,-42.712 -145.803,-39.688 -146.666,-38.824 -147.242,-38.97 "/>
+ <polyline id="polyline2075" fill="#CCE83A" points="-147.242,-38.97 -146.666,-38.824 -146.954,-38.537 -147.242,-38.97 "/>
+ <polyline id="polyline2077" fill="#CCE83A" points="-113.979,-22.696 -116.858,-22.408 -115.418,-23.705 -113.979,-24.28
+ -113.979,-22.696 "/>
+ <polyline id="polyline2079" points="-89.931,99.846 -88.49,99.56 -87.051,99.99 -86.475,100.998 -87.051,100.998 -88.49,99.99
+ -89.931,99.846 "/>
+
+ <polygon id="polygon2081" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -89.931,99.846 -88.49,99.56 -87.051,99.99 -86.475,100.998 -87.051,100.998 -88.49,99.99 "/>
+ <polyline id="polyline2083" fill="#99D6AA" points="-88.347,686.356 -89.211,685.493 -88.059,684.63 -87.626,684.483
+ -86.618,685.78 -88.059,686.646 -88.347,686.356 "/>
+ <polyline id="polyline2085" fill="#99D6AA" points="-88.059,684.63 -87.771,684.341 -87.626,684.483 -88.059,684.63 "/>
+ <polyline id="polyline2087" points="-86.475,100.998 -85.755,101.144 -86.33,101.43 -86.475,100.998 "/>
+
+ <polygon id="polygon2089" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -86.475,100.998 -85.755,101.144 -86.33,101.43 "/>
+ <polyline id="polyline2091" points="-85.755,101.144 -84.891,100.568 -83.45,101.144 -81.866,100.709 -81.146,99.702
+ -78.843,97.688 -77.69,97.254 -76.25,97.11 -74.666,97.4 -73.37,96.822 -71.931,96.534 -72.219,96.392 -70.347,95.094
+ -67.322,93.654 -65.738,93.654 -61.274,92.501 -63.146,93.51 -67.179,94.232 -71.643,96.822 -74.522,97.688 -77.547,97.4
+ -78.986,98.262 -80.427,99.56 -81.146,100.568 -82.73,101.862 -84.171,101.286 -85.755,101.144 "/>
+
+ <polygon id="polygon2093" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -85.755,101.144 -84.891,100.568 -83.45,101.144 -81.866,100.709 -81.146,99.702 -78.843,97.688 -77.69,97.254 -76.25,97.11
+ -74.666,97.4 -73.37,96.822 -71.931,96.534 -72.219,96.392 -70.347,95.094 -67.322,93.654 -65.738,93.654 -61.274,92.501
+ -63.146,93.51 -67.179,94.232 -71.643,96.822 -74.522,97.688 -77.547,97.4 -78.986,98.262 -80.427,99.56 -81.146,100.568
+ -82.73,101.862 -84.171,101.286 "/>
+ <polyline id="polyline2095" fill="#99D6AA" points="-84.891,614.935 -84.746,614.935 -84.746,615.222 -84.891,614.935 "/>
+ <polyline id="polyline2097" fill="#99D6AA" points="-84.891,614.935 -84.746,615.222 -86.187,615.366 -84.891,614.935 "/>
+ <polyline id="polyline2099" points="-61.274,92.501 -59.259,90.342 -60.122,91.782 -61.274,92.501 "/>
+
+ <polygon id="polygon2101" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -61.274,92.501 -59.259,90.342 -60.122,91.782 "/>
+ <polyline id="polyline2103" points="-59.259,90.342 -58.538,89.622 -57.099,89.045 -55.37,89.91 -53.786,89.48 -52.347,89.768
+ -50.763,90.776 -49.755,91.782 -49.467,93.078 -50.042,95.238 -50.187,94.808 -50.042,93.366 -50.475,91.926 -53.354,90.198
+ -56.234,90.198 -57.675,89.91 -59.259,90.342 "/>
+
+ <polygon id="polygon2105" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -59.259,90.342 -58.538,89.622 -57.099,89.045 -55.37,89.91 -53.786,89.48 -52.347,89.768 -50.763,90.776 -49.755,91.782
+ -49.467,93.078 -50.042,95.238 -50.187,94.808 -50.042,93.366 -50.475,91.926 -53.354,90.198 -56.234,90.198 -57.675,89.91 "/>
+ <polyline id="polyline2107" fill="#7FC643" points="-55.658,463.015 -55.082,462.729 -55.658,463.155 -55.658,463.015 "/>
+ <polyline id="polyline2109" fill="#7FC643" points="-55.658,463.015 -56.522,463.444 -57.818,462.003 -56.379,461.718
+ -55.658,463.015 "/>
+ <polyline id="polyline2111" points="-50.042,95.238 -49.322,96.104 -47.162,95.669 -48.314,96.534 -49.755,96.246 -50.042,95.238
+ "/>
+
+ <polygon id="polygon2113" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -50.042,95.238 -49.322,96.104 -47.162,95.669 -48.314,96.534 -49.755,96.246 "/>
+ <polyline id="polyline2115" fill="#7FC643" points="-47.162,95.669 -46.442,95.526 -44.858,95.958 -43.418,95.526 -40.538,95.381
+ -38.091,93.799 -36.65,93.654 -34.347,94.808 -32.187,96.392 -30.746,97.11 -29.019,96.822 -27.578,95.958 -26.139,96.534
+ -23.402,93.51 -22.683,90.486 -21.387,87.463 -20.811,84.582 -19.37,83.72 -17.786,83.72 -16.347,83.144 -14.906,83.574
+ -13.61,82.998 -10.587,83.286 -8.715,82.856 -7.563,83.72 -6.555,85.158 -5.979,84.44 -4.538,85.592 -3.099,86.166 -0.795,89.622
+ -0.65,92.213 0.789,92.79 1.798,94.232 2.949,94.662 4.102,95.238 0.502,94.232 -1.37,92.213 -1.515,90.776 -2.522,89.333
+ -2.954,87.75 -4.25,86.312 -5.69,85.734 -7.274,85.446 -8.715,84.295 -10.154,83.574 -13.179,83.432 -14.618,84.15 -16.059,83.574
+ -19.227,84.15 -20.666,85.158 -20.666,86.6 -21.099,88.038 -21.963,89.48 -22.538,91.064 -23.259,93.942 -25.851,96.822
+ -27.29,96.246 -28.73,97.4 -30.314,97.688 -31.755,97.254 -34.635,95.238 -37.658,94.232 -38.811,94.662 -40.395,95.669
+ -44.715,96.246 -47.162,95.669 "/>
+ <polyline id="polyline2117" fill="#99D6AA" points="-35.066,660.005 -34.923,660.005 -34.923,660.294 -35.066,660.005 "/>
+ <polyline id="polyline2119" fill="#99D6AA" points="-35.066,660.005 -34.923,660.294 -34.923,661.444 -33.914,664.47
+ -34.49,666.483 -34.49,664.899 -35.931,664.757 -36.362,660.438 -35.066,660.005 "/>
+ <polyline id="polyline2121" fill="#CCE83A" points="8.277,-95.705 8.565,-97.144 9.142,-95.705 8.277,-95.705 "/>
+ <polyline id="polyline2123" fill="#7FC643" points="8.422,93.942 8.71,93.51 11.302,92.79 11.878,90.631 13.174,90.631
+ 12.166,93.078 13.75,92.358 15.189,92.501 16.054,93.942 14.47,93.799 13.029,94.374 14.613,94.085 16.054,94.374 16.197,95.816
+ 14.758,95.381 14.901,96.822 13.317,97.11 14.325,97.542 15.766,98.694 15.478,100.133 13.605,102.295 14.758,105.318
+ 11.733,104.888 10.294,105.318 9.718,102.44 8.71,99.56 8.998,97.976 8.565,96.534 8.277,96.246 5.397,95.238 3.813,94.232
+ 8.277,95.526 8.854,95.381 8.422,93.942 "/>
+ <polyline id="polyline2125" fill="#7FC643" points="8.422,93.942 8.422,93.654 8.71,93.51 8.422,93.942 "/>
+ <polyline id="polyline2127" fill="#CCE83A" points="15.478,-124.504 18.069,-124.216 18.357,-124.072 18.934,-124.072
+ 19.365,-122.632 17.781,-122.058 19.222,-120.904 17.781,-120.617 17.35,-119.033 17.493,-117.592 16.054,-116.44 15.046,-117.88
+ 13.605,-116.584 12.021,-116.152 11.59,-117.736 10.726,-116.152 10.149,-117.592 11.014,-119.176 12.453,-119.32 12.886,-120.762
+ 14.325,-121.48 15.334,-122.92 15.478,-124.504 "/>
+ <polyline id="polyline2129" fill="#CCE83A" points="18.069,-124.216 16.773,-124.648 19.653,-125.8 20.229,-124.36
+ 19.798,-124.072 18.934,-124.072 18.069,-124.216 "/>
+ <polyline id="polyline2131" fill="#CCE83A" points="18.069,-124.216 18.934,-124.072 18.357,-124.072 18.069,-124.216 "/>
+ <polyline id="polyline2133" fill="#CCE83A" points="86.182,63.702 87.334,63.272 88.918,63.56 89.205,63.414 89.205,63.99
+ 87.621,64.136 86.182,63.702 "/>
+ <polyline id="polyline2135" fill="#CCE83A" points="96.117,-86.92 95.397,-87.785 96.838,-89.8 96.693,-91.24 97.126,-91.816
+ 98.71,-92.104 103.029,-94.121 104.613,-95.417 105.621,-96.856 104.901,-97.864 105.621,-99.88 108.069,-101.178
+ 109.222,-102.328 109.51,-101.32 110.518,-99.88 111.958,-98.584 113.397,-98.008 114.981,-98.152 116.422,-98.873
+ 117.861,-98.873 119.302,-99.88 119.59,-99.736 115.126,-96.568 113.542,-96.712 112.102,-97.289 108.646,-101.466
+ 105.766,-99.448 105.334,-98.008 105.909,-96.568 104.47,-94.984 101.59,-92.824 98.565,-91.816 97.126,-91.098 96.838,-89.656
+ 95.686,-88.072 96.117,-86.92 "/>
+ <polyline id="polyline2137" fill="#CCE83A" points="96.117,-86.92 96.405,-86.632 96.262,-86.632 96.117,-86.92 "/>
+ <polyline id="polyline2139" fill="#CCE83A" points="96.405,-86.632 97.846,-86.632 98.565,-85.048 100.582,-83.32 101.302,-81.88
+ 101.59,-80.44 101.445,-78.856 101.878,-75.976 100.869,-73.96 101.445,-71.081 100.869,-68.058 101.445,-66.617 101.59,-65.178
+ 101.157,-62.008 101.157,-59.992 100.149,-58.84 99.573,-57.4 99.285,-55.528 99.573,-54.088 100.582,-52.648 100.438,-51.064
+ 99.861,-49.625 99.573,-46.744 98.422,-43.72 98.277,-42.28 98.134,-43.72 98.422,-45.16 99.285,-46.6 99.285,-48.184
+ 100.149,-51.208 100.149,-52.648 98.998,-54.088 98.854,-56.968 100.582,-59.992 100.726,-62.152 101.157,-63.448 101.014,-66.617
+ 99.718,-68.058 101.014,-69.497 101.302,-70.936 100.438,-73.96 101.445,-75.4 101.733,-76.408 101.157,-79.289 100.869,-82.312
+ 99.43,-83.608 98.998,-83.752 97.989,-85.336 96.55,-86.488 96.405,-86.632 "/>
+ <polyline id="polyline2141" points="102.31,738.194 103.75,737.188 103.605,737.622 103.894,739.062 102.31,738.194 "/>
+
+ <polygon id="polygon2143" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 102.31,738.194 103.75,737.188 103.605,737.622 103.894,739.062 "/>
+ <polyline id="polyline2145" fill="#7FC643" points="149.686,935.188 150.262,934.47 150.838,933.749 155.59,934.038
+ 158.47,933.462 160.773,933.604 159.334,933.028 158.901,931.589 156.021,933.604 154.582,933.749 151.701,932.886
+ 148.533,933.462 151.558,931.589 152.998,931.157 154.006,929.716 153.861,928.132 156.598,925.253 158.037,925.972
+ 159.334,925.829 159.621,924.245 158.901,923.813 154.438,923.813 153.43,922.229 150.405,921.653 151.126,920.214
+ 149.686,920.501 148.245,919.78 149.686,919.062 148.245,917.765 149.686,917.622 150.117,918.054 150.262,917.046
+ 151.846,917.046 151.413,915.604 152.998,914.597 154.438,914.886 155.302,913.446 153.861,913.013 152.422,913.302
+ 151.846,912.581 153.285,912.581 152.854,911.14 152.998,909.702 152.134,908.261 151.989,907.54 150.838,909.124 151.27,907.685
+ 152.134,906.245 152.277,907.685 153.718,906.964 154.294,907.397 155.733,906.677 158.613,907.397 159.909,908.837
+ 160.342,910.278 161.35,908.403 162.789,908.403 164.229,908.837 165.67,909.702 167.109,909.124 165.67,907.972 168.55,906.388
+ 169.558,906.388 170.422,905.956 170.998,904.517 169.558,903.94 168.117,904.085 166.678,903.653 165.237,902.788
+ 166.533,901.349 167.974,901.638 169.413,900.63 168.981,899.188 169.126,897.892 170.565,897.462 170.998,896.021
+ 172.582,896.021 174.021,895.302 175.174,896.741 175.75,895.302 176.758,896.741 176.47,895.302 177.909,895.589 178.342,897.173
+ 178.054,898.612 177.334,899.046 177.621,899.188 179.062,898.47 178.773,895.589 181.653,894.149 183.094,895.589
+ 184.533,896.308 181.51,897.892 181.077,898.47 179.781,898.899 178.197,902.067 176.182,903.222 174.741,902.933 174.166,904.372
+ 175.605,904.806 175.605,905.093 174.166,905.813 172.726,905.813 171.43,906.532 170.71,906.677 172.582,909.556 173.302,909.845
+ 173.59,911.286 174.886,911.429 176.613,912.87 177.478,912.724 178.485,913.302 178.485,913.013 179.205,912.724 180.214,910.997
+ 180.214,909.989 181.653,909.124 182.661,909.269 183.382,910.565 183.382,911.429 184.39,912.87 185.397,913.013 185.109,914.454
+ 185.542,915.173 186.981,914.886 187.989,915.173 188.277,914.454 188.998,914.741 190.438,916.325 188.998,916.47
+ 187.558,917.478 188.71,918.917 188.565,920.501 188.854,922.085 190.006,923.524 189.142,924.677 189.43,925.685 188.277,926.548
+ 189.43,928.853 189.718,930.294 189.43,931.731 189.573,933.173 188.71,934.47 188.134,935.188 149.686,935.188 "/>
+ <polyline id="polyline2147" fill="#CCE83A" points="171.142,-6.426 171.43,-6.568 169.846,-5.272 171.142,-6.426 "/>
+ <polyline id="polyline2149" fill="#FECC2E" points="181.077,898.47 181.077,898.899 181.941,898.899 183.525,898.325
+ 184.102,897.03 185.254,897.462 186.262,897.462 189.718,896.886 191.302,897.604 192.741,897.892 193.029,899.333
+ 193.462,900.196 193.462,901.062 194.325,902.501 194.758,903.94 195.909,904.948 193.894,906.101 193.462,906.677
+ 193.894,906.964 195.334,906.388 196.773,906.388 197.493,907.972 197.926,909.556 197.638,910.997 196.773,911.429
+ 196.918,909.845 196.342,908.403 195.189,911.286 196.63,911.429 196.197,912.87 193.174,913.302 193.174,913.878 192.598,915.317
+ 191.157,916.038 189.573,914.886 188.998,914.741 188.277,914.454 187.989,915.173 186.981,914.886 185.542,915.173
+ 185.109,914.454 185.397,913.013 184.39,912.87 183.382,911.429 183.382,910.565 182.661,909.269 181.653,909.124 180.214,909.989
+ 180.214,910.997 179.205,912.724 178.485,913.013 178.485,913.302 177.478,912.724 176.613,912.87 174.886,911.429 173.59,911.286
+ 173.302,909.845 172.582,909.556 170.71,906.677 171.43,906.532 172.726,905.813 174.166,905.813 175.605,905.093 175.605,904.806
+ 174.166,904.372 174.741,902.933 176.182,903.222 178.197,902.067 179.781,898.899 181.077,898.47 "/>
+ <polyline id="polyline2151" fill="#FECC2E" points="190.582,854.837 189.142,853.685 188.277,850.806 189.285,849.364
+ 190.294,850.806 191.878,850.517 191.445,849.077 192.886,847.925 195.766,846.485 197.35,846.485 196.918,847.925
+ 196.054,849.364 196.485,850.948 195.046,850.372 194.325,851.813 192.741,852.101 194.325,852.101 194.613,853.54
+ 193.174,854.403 191.878,852.964 191.878,854.548 190.582,854.837 "/>
+ <polyline id="polyline2153" fill="#FECC2E" points="190.582,854.837 190.726,856.278 189.285,856.997 187.846,855.845
+ 190.582,854.837 "/>
+ <polyline id="polyline2155" points="197.205,786.438 196.918,784.854 198.357,784.997 199.077,786.438 200.229,788.022
+ 199.653,789.462 198.357,787.878 197.205,786.438 "/>
+
+ <polygon id="polygon2157" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 197.205,786.438 196.918,784.854 198.357,784.997 199.077,786.438 200.229,788.022 199.653,789.462 198.357,787.878 "/>
+ <polyline id="polyline2159" points="197.205,786.438 198.357,787.878 198.357,789.462 199.077,790.899 198.934,791.333
+ 197.781,789.894 197.062,788.454 195.621,787.302 195.766,785.862 197.205,786.438 "/>
+
+ <polygon id="polygon2161" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 197.205,786.438 198.357,787.878 198.357,789.462 199.077,790.899 198.934,791.333 197.781,789.894 197.062,788.454
+ 195.621,787.302 195.766,785.862 "/>
+ <polyline id="polyline2163" fill="#FFFF7F" points="201.237,-70.936 202.245,-72.376 199.222,-73.384 197.781,-74.104
+ 197.062,-75.544 198.646,-76.266 200.086,-75.833 200.661,-74.392 202.102,-75.256 200.806,-76.696 201.237,-78.28 202.678,-79
+ 204.55,-77.85 203.686,-76.408 203.829,-74.968 204.981,-73.384 204.262,-75.544 204.981,-77.128 206.565,-77.992 208.006,-77.417
+ 209.59,-76.266 210.166,-74.824 211.317,-73.528 212.47,-73.528 215.35,-72.088 216.934,-70.648 217.222,-72.088 218.661,-72.088
+ 220.245,-71.224 221.829,-69.93 223.126,-68.488 222.693,-66.904 223.989,-62.44 225.573,-61.432 227.014,-61.289 228.453,-60.424
+ 231.478,-59.85 232.918,-59.992 234.357,-61.576 235.798,-62.008 241.701,-62.152 242.134,-60.568 241.846,-59.128
+ 243.142,-57.688 244.149,-56.104 245.302,-53.081 243.861,-53.8 243.43,-52.216 242.71,-50.776 242.422,-47.896 244.438,-50.776
+ 245.878,-50.92 246.453,-49.48 246.453,-48.041 247.894,-48.762 247.605,-50.346 248.182,-51.785 249.621,-52.072 251.205,-53.8
+ 251.205,-55.24 250.63,-56.682 249.621,-58.266 248.037,-59.417 247.75,-61 248.325,-62.44 249.909,-63.16 252.502,-63.592
+ 252.502,-64.744 250.918,-63.88 249.189,-63.736 249.189,-65.178 249.621,-66.762 251.062,-68.346 253.365,-69.352 255.957,-72.52
+ 258.838,-73.672 261.861,-75.833 263.301,-76.552 262.293,-74.968 263.73,-75.256 265.174,-74.968 266.758,-75.112
+ 268.197,-74.537 271.074,-72.232 270.789,-70.792 272.23,-70.216 273.379,-68.776 274.82,-68.201 276.262,-68.776 277.701,-68.632
+ 276.262,-69.352 274.82,-68.776 273.238,-69.785 272.23,-71.224 272.23,-72.808 273.813,-73.098 275.254,-71.944 276.838,-71.8
+ 278.277,-71.369 279.715,-70.36 281.301,-70.504 279.43,-71.224 278.277,-74.249 279.715,-75.256 278.277,-74.682 276.838,-74.968
+ 275.254,-75.833 274.246,-74.249 271.223,-73.24 270.789,-74.682 271.365,-76.266 271.365,-77.705 270.502,-79.576 269.35,-81.016
+ 267.906,-82.024 266.324,-81.592 264.883,-80.44 263.879,-83.464 263.879,-86.488 262.438,-86.632 261.715,-90.953
+ 262.006,-92.537 265.029,-92.104 264.883,-93.544 263.445,-92.682 262.006,-93.976 262.869,-95.56 261.43,-94.552 261.57,-92.968
+ 261.285,-94.552 259.988,-97 261.43,-95.85 260.422,-97.289 258.838,-98.44 257.398,-99.16 256.965,-100.6 258.262,-102.184
+ 257.686,-103.625 256.246,-104.201 255.525,-107.081 256.965,-108.52 257.973,-110.104 259.414,-110.968 260.422,-112.408
+ 266.324,-109.96 267.766,-109.098 270.789,-108.52 272.23,-108.52 273.67,-107.8 273.094,-106.36 272.949,-104.776
+ 274.391,-105.208 275.686,-103.625 275.254,-105.208 276.262,-106.792 275.398,-108.232 273.813,-108.376 276.838,-108.953
+ 278.422,-108.665 279.43,-110.249 282.313,-112.266 285.477,-113.128 286.918,-113.85 288.502,-114.568 289.941,-114.712
+ 290.949,-116.296 293.828,-116.873 295.414,-116.584 295.129,-117.016 295.27,-118.457 296.711,-119.033 297.141,-118.744
+ 300.313,-118.6 301.029,-120.184 302.613,-120.041 304.055,-119.176 304.773,-120.762 305.063,-122.201 306.502,-122.632
+ 307.652,-124.072 309.094,-123.93 310.533,-123.064 310.102,-124.504 310.533,-125.944 311.973,-124.936 311.828,-126.376
+ 313.414,-126.953 314.854,-126.52 315.715,-127.96 314.711,-129.4 316.148,-129.4 317.73,-128.104 316.582,-129.544
+ 318.313,-131.85 318.598,-130.408 319.461,-131.992 320.898,-131.705 322.342,-133.144 323.781,-133.432 324.934,-134.873
+ 327.957,-135.736 330.838,-137.176 331.129,-138.617 332.711,-140.058 333.57,-143.081 334.006,-143.8 335.445,-144.088
+ 336.166,-142.648 336.883,-141.642 337.174,-141.642 337.75,-140.058 337.029,-138.617 338.473,-137.608 338.473,-136.024
+ 339.334,-134.584 340.773,-133.432 341.063,-131.992 342.502,-132.424 347.109,-131.417 348.547,-130.696 350.133,-130.552
+ 356.182,-131.56 357.621,-130.84 358.918,-132.28 360.357,-131.128 361.365,-132.568 368.422,-138.328 369.861,-137.176
+ 368.709,-134.44 367.27,-132.856 367.127,-131.417 366.117,-129.976 366.693,-128.392 368.277,-128.682 369.861,-129.833
+ 371.301,-130.552 377.205,-132.28 376.918,-133.72 379.654,-135.736 381.238,-135.592 381.094,-134.152 381.67,-131.992
+ 382.389,-130.552 383.83,-130.408 383.973,-131.85 385.414,-131.85 386.998,-132.712 386.131,-131.128 386.709,-130.552
+ 388.148,-129.976 389.732,-130.121 389.59,-130.408 390.021,-131.85 391.461,-131.417 392.9,-132.856 393.334,-134.296
+ 394.342,-135.736 395.926,-136.457 395.205,-137.896 395.494,-139.48 396.934,-139.625 397.941,-141.208 397.941,-142.648
+ 399.379,-141.497 400.246,-144.376 401.83,-144.808 403.414,-145.96 404.854,-146.392 406.438,-147.256 409.461,-149.705
+ 410.613,-151.144 413.205,-155.608 413.061,-157.192 412.486,-158.776 411.045,-160.072 410.758,-161.656 408.74,-158.632
+ 407.301,-158.488 404.564,-161.369 403.127,-162.376 403.557,-163.96 406.148,-166.84 407.732,-166.984 409.318,-167.992
+ 409.75,-168.856 410.037,-170.44 410.037,-172.024 410.471,-173.464 411.334,-174.904 411.621,-176.488 411.189,-177.928
+ 408.166,-178.36 409.174,-182.824 408.74,-184.408 409.174,-185.848 410.471,-187.432 411.908,-187.72 413.35,-188.584
+ 414.934,-187.289 415.51,-185.848 416.662,-184.264 415.076,-183.976 413.494,-182.968 412.055,-182.392 410.471,-181.096
+ 412.055,-181.96 413.494,-180.953 415.076,-181.24 416.518,-182.537 417.094,-183.976 417.67,-184.408 419.254,-184.408
+ 420.693,-184.696 423.572,-187.576 424.438,-189.016 426.021,-190.168 427.893,-193.048 428.613,-197.512 428.324,-199.096
+ 427.605,-200.537 427.318,-202.121 426.74,-203.56 427.75,-205 429.334,-206.152 430.918,-206.584 432.357,-207.592
+ 433.941,-207.016 436.963,-206.008 437.398,-204.568 438.838,-204.136 440.422,-203.992 441.861,-203.992 447.908,-206.44
+ 449.35,-206.584 450.789,-207.448 451.941,-208.6 453.094,-210.041 453.957,-211.625 454.533,-213.064 454.102,-214.504
+ 454.389,-216.088 455.83,-216.953 455.83,-218.537 455.398,-219.976 455.541,-220.984 456.262,-222.424 457.414,-221.128
+ 458.277,-219.544 459.861,-218.824 461.445,-219.112 465.766,-219.112 468.646,-220.264 470.084,-220.552 469.941,-219.112
+ 470.949,-217.672 472.389,-218.104 472.102,-219.688 470.662,-219.976 471.525,-221.417 472.963,-221.992 472.678,-223.576
+ 474.117,-224.296 474.406,-227.32 474.98,-228.76 476.422,-229.048 477.572,-230.488 479.156,-231.64 480.166,-233.081
+ 486.213,-235.96 489.238,-236.392 490.822,-237.688 492.262,-237.833 493.701,-238.696 499.174,-240.136 500.613,-240.856
+ 502.197,-241 500.613,-239.992 499.893,-237.112 500.758,-235.672 500.9,-234.232 500.037,-231.064 497.877,-226.744
+ 496.582,-222.28 496.148,-219.256 494.998,-217.816 495.715,-214.792 495.572,-211.768 490.678,-195.352 489.238,-187.864
+ 486.789,-178.792 485.205,-174.184 479.156,-163.96 471.957,-155.176 470.518,-154.888 469.076,-153.88 467.639,-153.736
+ 466.055,-153.16 464.9,-151.72 463.318,-152.584 462.021,-151.144 458.998,-148.552 458.131,-145.672 458.277,-144.088
+ 457.701,-142.648 456.117,-143.369 454.678,-144.52 453.094,-144.808 451.654,-144.232 450.068,-142.792 447.189,-143.944
+ 445.75,-144.088 444.311,-145.24 444.311,-143.8 441.285,-142.792 439.846,-141.928 438.262,-141.785 435.379,-140.776
+ 433.795,-140.92 432.934,-139.336 431.494,-138.472 429.908,-137.896 426.883,-135.592 426.453,-134.008 425.014,-132.856
+ 419.541,-130.696 418.102,-129.256 416.662,-128.682 415.223,-128.682 413.781,-128.249 412.197,-127.24 410.758,-126.665
+ 407.877,-124.504 403.27,-122.632 402.262,-121.05 401.83,-119.608 398.807,-118.457 397.365,-118.744 395.781,-118.024
+ 394.342,-118.168 392.9,-117.16 391.318,-116.728 389.877,-116.584 388.293,-117.16 386.854,-116.728 385.414,-116.873
+ 385.414,-115.432 386.277,-113.992 384.838,-112.696 381.957,-111.976 380.807,-110.537 380.807,-109.098 382.389,-108.665
+ 380.949,-105.785 379.365,-105.208 378.357,-103.768 378.068,-102.328 377.781,-100.888 376.629,-97.864 375.766,-96.28
+ 374.324,-95.85 371.445,-94.408 366.838,-97.144 366.693,-95.705 363.67,-96.856 365.83,-95.56 367.27,-94.984 370.293,-92.537
+ 371.014,-90.953 372.453,-90.232 374.037,-90.52 375.479,-90.376 381.525,-90.665 382.102,-92.104 381.957,-93.544
+ 383.398,-94.121 384.117,-95.705 384.406,-97.144 386.277,-100.024 386.709,-101.608 385.127,-102.472 384.98,-103.912
+ 386.422,-104.058 388.006,-105.064 388.582,-103.48 388.438,-102.041 389.877,-102.041 389.59,-103.625 391.174,-101.896
+ 392.758,-102.184 395.781,-104.488 401.541,-106.792 403.127,-107.944 407.445,-109.672 408.598,-111.112 410.037,-110.824
+ 413.061,-111.4 414.646,-111.112 413.35,-109.672 412.918,-108.232 411.479,-107.081 410.9,-105.642 412.342,-105.208
+ 413.781,-105.642 415.223,-105.208 413.781,-103.912 413.205,-102.472 414.213,-101.033 412.773,-101.178 410.9,-98.584
+ 409.318,-98.008 408.453,-96.568 406.869,-95.128 406.148,-92.249 409.318,-92.968 410.758,-94.266 413.781,-93.4 412.773,-91.96
+ 414.213,-91.384 414.213,-89.8 415.654,-89.224 417.238,-89.081 418.678,-89.514 420.262,-89.369 421.701,-88.504 423.285,-88.936
+ 424.725,-88.648 426.166,-87.208 427.75,-86.346 432.213,-87.064 433.795,-87.93 435.238,-87.93 436.678,-89.081 437.109,-90.52
+ 438.547,-91.96 440.131,-91.96 441.572,-92.682 443.156,-93.112 446.037,-94.984 447.334,-96.568 448.773,-97.144 450.357,-97.289
+ 451.795,-98.008 453.238,-98.008 454.822,-98.728 456.406,-98.728 460.725,-101.178 462.311,-102.472 463.174,-103.912
+ 464.758,-103.192 466.055,-104.634 466.342,-107.656 467.781,-107.224 468.934,-108.808 467.494,-109.384 466.055,-108.665
+ 464.613,-109.384 463.75,-110.824 462.166,-111.256 461.445,-114.28 462.166,-115.864 463.75,-116.008 465.334,-115.289
+ 466.773,-115.432 467.494,-113.992 469.076,-113.128 470.373,-114.568 471.957,-114.28 473.398,-112.696 473.973,-111.256
+ 475.27,-109.672 476.854,-108.953 477.572,-110.392 479.156,-110.249 480.598,-109.816 482.182,-111.112 483.621,-110.968
+ 484.918,-109.528 485.494,-108.09 486.934,-107.656 488.373,-108.376 489.957,-108.232 492.98,-107.224 494.422,-106.216
+ 494.998,-104.776 495.141,-101.752 493.557,-102.184 492.117,-101.896 487.654,-104.634 486.068,-104.634 485.781,-103.192
+ 487.223,-102.762 488.807,-101.466 488.373,-100.024 488.373,-98.44 488.949,-97 491.83,-94.552 493.27,-94.552 494.854,-95.417
+ 495.572,-93.976 494.131,-93.833 495.572,-93.112 496.006,-91.674 497.445,-90.232 500.324,-86.632 501.766,-85.625
+ 504.789,-85.336 506.23,-86.058 507.094,-87.497 508.678,-87.208 508.533,-85.625 509.973,-86.201 510.693,-87.642
+ 509.254,-88.792 510.693,-89.514 513.715,-87.93 513.43,-86.488 513.572,-85.048 515.014,-84.184 516.598,-83.608 518.037,-84.617
+ 519.479,-83.464 520.916,-83.608 521.35,-82.168 525.379,-77.992 525.814,-76.408 527.398,-75.976 528.838,-77.128
+ 529.557,-78.568 532.582,-77.705 532.869,-76.266 531.572,-73.384 534.598,-71.514 536.037,-70.216 537.621,-69.785
+ 539.061,-68.632 540.502,-67.912 544.822,-64.024 546.406,-63.304 547.846,-63.016 549.285,-62.152 550.293,-60.712
+ 551.732,-60.568 556.197,-59.128 560.662,-58.984 563.686,-59.705 566.709,-61 569.732,-61.432 572.9,-61.289 574.342,-60.712
+ 575.926,-60.712 578.949,-61.144 584.854,-65.033 586.438,-65.178 587.877,-64.312 589.318,-63.88 590.613,-64.168
+ 592.055,-65.033 593.494,-64.457 595.076,-64.6 596.518,-65.178 598.102,-64.744 599.541,-64.024 600.98,-64.6 602.564,-64.457
+ 604.006,-65.178 605.445,-64.457 608.324,-64.744 609.908,-65.32 611.35,-65.178 614.373,-65.896 614.949,-67.336 616.533,-67.336
+ 617.973,-67.048 619.414,-67.625 620.854,-67.768 623.877,-67.625 625.318,-68.201 628.197,-67.625 629.639,-67.912
+ 631.223,-67.192 632.662,-67.336 637.125,-66.328 641.59,-67.192 643.029,-66.762 646.197,-66.472 647.639,-65.464 649.076,-65.32
+ 652.389,-65.32 653.83,-66.328 654.547,-67.768 652.246,-70.936 652.533,-72.52 651.238,-73.96 648.211,-75.976 646.916,-77.56
+ 645.479,-78.136 644.037,-79.144 644.471,-80.584 645.908,-81.88 647.35,-82.168 648.211,-83.752 649.51,-85.192 652.533,-86.346
+ 653.686,-87.785 653.398,-89.224 652.678,-89.081 651.094,-89.8 650.373,-91.24 647.35,-89.8 647.639,-88.36 646.773,-86.92
+ 645.332,-87.352 643.893,-87.208 642.453,-88.216 641.732,-89.656 643.318,-89.944 644.9,-89.224 646.342,-90.09 644.9,-92.968
+ 643.459,-94.408 644.9,-94.552 646.486,-94.266 649.365,-95.272 650.807,-94.266 652.389,-94.842 651.238,-96.424 646.773,-99.304
+ 645.189,-99.304 643.748,-99.88 642.164,-99.736 640.725,-98.584 639.141,-98.728 637.701,-99.16 638.998,-100.6 640.438,-101.178
+ 641.877,-101.178 644.758,-102.472 643.318,-103.625 641.732,-103.336 638.854,-101.896 635.83,-99.88 635.686,-98.44
+ 634.246,-97.432 632.807,-97 632.23,-98.584 630.068,-101.466 627.189,-102.617 625.605,-103.912 625.318,-106.792
+ 624.598,-108.09 624.74,-109.528 624.453,-110.968 626.037,-112.266 625.318,-115.289 625.605,-116.728 625.029,-118.312
+ 623.445,-121.192 624.883,-121.05 624.021,-122.632 623.732,-124.072 622.582,-125.656 623.156,-127.098 624.74,-127.96
+ 627.621,-127.96 628.627,-125.081 629.781,-123.497 630.211,-123.352 631.365,-121.912 631.654,-120.472 632.373,-119.033
+ 635.686,-116.873 638.854,-118.457 639.572,-118.888 639.141,-120.762 638.422,-122.344 638.422,-123.208 639.285,-124.648
+ 639.715,-126.088 638.564,-127.528 639.572,-130.552 641.877,-132.28 644.613,-132.712 645.908,-134.152 646.627,-135.592
+ 649.51,-135.592 651.525,-136.168 654.547,-134.44 655.99,-134.152 657.43,-134.873 659.014,-134.296 660.453,-133.289
+ 660.74,-132.568 661.029,-132.136 662.471,-132.568 664.197,-132.568 665.061,-132.136 668.084,-131.85 675.572,-131.56
+ 678.164,-130.984 679.605,-130.266 682.197,-128.104 683.205,-127.816 686.229,-127.816 686.949,-129.112 688.389,-129.976
+ 688.102,-130.696 690.838,-130.552 693.715,-131.705 696.164,-134.152 696.598,-135.736 697.459,-136.888 699.043,-136.312
+ 699.189,-136.457 700.627,-136.168 702.211,-135.304 700.627,-135.304 702.068,-134.873 703.223,-135.736 704.807,-136.312
+ 706.389,-136.312 707.109,-138.041 708.693,-138.328 710.133,-138.041 710.564,-137.608 713.59,-137.608 715.029,-137.32
+ 716.182,-136.744 716.9,-135.448 717.766,-135.016 719.205,-133.576 723.236,-133 724.389,-134.008 724.963,-134.873
+ 725.686,-134.152 727.701,-133.432 727.846,-133.144 727.99,-132.568 728.854,-131.272 732.883,-128.537 739.51,-125.8
+ 740.949,-125.512 742.533,-123.352 743.973,-122.201 745.557,-122.201 748.582,-120.904 749.301,-120.472 749.445,-120.328
+ 751.029,-120.904 752.471,-121.05 752.471,-121.625 754.197,-119.608 754.916,-119.033 755.781,-118.6 756.502,-118.312
+ 756.502,-94.266 754.916,-93.833 754.627,-93.112 756.502,-90.665 756.502,-46.024 756.068,-45.304 754.916,-43.144
+ 754.916,-41.56 753.479,-38.537 751.893,-37.96 752.326,-36.376 750.74,-36.808 750.74,-35.224 749.301,-33.785 748.293,-32.346
+ 746.854,-29.033 746.564,-27.594 745.125,-26.728 743.541,-26.586 744.117,-23.56 742.678,-23.992 741.814,-22.554
+ 740.662,-19.528 740.662,-18.09 739.365,-16.648 738.646,-13.768 739.223,-12.184 737.926,-10.744 738.646,-4.842 739.654,-3.544
+ 741.094,-2.97 742.102,-1.528 741.957,-0.09 742.678,1.352 742.678,2.936 741.814,4.375 742.822,5.816 742.533,8.694
+ 743.252,10.278 743.398,11.72 744.547,13.158 744.693,13.879 746.277,15.03 747.43,16.472 748.869,17.48 750.74,20.358
+ 751.174,21.942 752.471,23.383 753.766,24.104 754.627,25.688 756.068,26.984 756.502,27.127 756.502,409.591 755.781,409.878
+ 755.494,410.022 755.35,410.312 754.916,410.599 754.916,411.175 754.773,411.606 753.334,411.175 747.861,414.487
+ 748.006,415.206 747.861,415.495 748.293,416.358 748.006,417.511 746.564,418.519 745.557,419.671 744.693,419.815
+ 743.83,419.671 743.252,421.11 743.541,422.554 742.102,422.405 741.379,423.847 740.518,426.87 738.934,427.878 738.068,429.319
+ 736.486,430.183 735.043,429.749 733.605,430.612 732.021,431.046 731.014,430.472 728.133,432.487 726.838,434.069
+ 723.957,434.499 723.094,435.942 722.807,437.526 721.365,438.679 718.486,439.976 718.051,441.413 716.326,444.151
+ 715.174,445.589 714.164,445.733 712.725,447.03 712.582,448.472 709.846,451.206 708.693,452.79 709.414,454.229 707.83,455.382
+ 706.822,456.819 706.389,458.405 704.084,461.286 702.934,464.312 703.365,465.897 702.068,468.774 700.916,470.214
+ 700.916,471.798 699.908,474.679 699.043,476.118 699.189,477.562 697.748,478.136 697.318,478.997 697.174,481.878
+ 696.453,483.317 695.877,486.341 696.021,487.782 694.582,488.935 693.572,490.374 693.43,491.958 692.709,493.397
+ 692.422,494.839 692.564,496.278 691.99,497.573 690.693,499.157 690.547,500.599 689.973,501.606 689.973,501.751 689.83,502.181
+ 690.406,503.333 689.973,504.485 689.973,504.63 689.398,505.927 690.262,507.366 690.117,508.95 688.678,509.958 687.094,510.679
+ 685.654,509.235 684.211,508.95 681.189,510.247 678.311,513.126 676.869,512.694 673.99,512.839 672.117,512.55 669.236,513.413
+ 667.654,514.854 666.789,516.438 665.35,517.157 663.908,517.444 661.459,520.325 656.998,521.333 655.557,521.911
+ 654.117,521.911 651.094,522.774 650.084,521.333 648.646,520.325 648.068,518.886 647.781,517.302 646.197,517.157
+ 646.197,515.573 645.621,514.134 642.74,513.56 642.598,512.118 640.725,512.263 637.846,510.103 637.701,508.663 631.795,507.798
+ 630.357,508.517 628.486,507.798 627.043,508.229 625.459,507.366 624.598,505.927 623.156,505.782 622.725,507.222
+ 621.285,507.509 619.701,506.501 618.547,504.919 617.973,503.478 615.094,501.317 613.51,500.454 612.357,499.013
+ 609.332,497.142 607.893,497.431 606.74,495.847 606.598,494.403 606.021,492.966 603.285,490.087 602.854,489.942
+ 602.709,489.366 604.006,487.927 605.445,486.774 604.725,485.333 605.445,483.751 608.324,481.157 608.471,479.718
+ 608.037,478.136 606.021,475.11 606.453,473.671 606.311,473.526 607.318,473.095 608.9,473.815 610.342,473.237 611.781,471.942
+ 612.934,470.499 615.957,467.767 616.678,466.323 617.109,463.304 618.547,460.278 621.572,457.687 620.998,454.808
+ 619.414,454.085 617.973,454.374 617.109,452.935 616.678,451.495 616.678,449.909 615.67,448.472 615.238,445.444
+ 613.941,443.862 613.654,442.421 612.068,441.413 609.189,440.55 607.605,439.397 606.453,437.958 604.869,434.79 603.572,433.351
+ 600.547,432.058 599.541,431.909 596.518,431.767 595.076,432.058 593.494,432.774 592.055,432.774 590.613,431.622
+ 589.174,431.622 587.59,430.759 587.014,429.319 586.582,426.294 586.582,423.271 586.148,421.827 586.148,418.808
+ 586.869,417.366 588.311,417.222 589.893,417.942 594.357,414.917 595.795,415.351 597.379,415.495 598.822,416.358
+ 600.406,415.927 603.285,417.366 604.725,417.077 605.445,418.663 606.883,418.374 609.908,415.64 610.773,414.487
+ 611.639,411.606 611.639,408.729 611.061,410.163 609.621,410.599 609.766,412.038 608.471,413.767 607.893,415.206
+ 606.453,416.358 601.99,415.206 600.547,413.909 600.262,411.03 598.822,410.741 597.238,411.319 595.795,411.03 594.357,412.038
+ 592.916,411.606 589.893,411.319 585.715,415.64 584.131,416.358 583.846,417.942 582.262,419.237 580.822,422.118
+ 582.406,426.729 581.83,428.163 580.822,429.606 580.963,431.19 580.533,432.63 578.949,432.774 576.068,431.046 574.486,430.901
+ 571.459,431.622 570.021,431.622 567.141,429.606 563.398,428.163 562.246,426.581 560.807,425.431 559.51,423.987
+ 556.486,423.126 553.459,424.421 552.021,424.136 550.438,424.569 547.414,424.421 542.949,426.151 541.941,424.71
+ 540.502,423.271 539.061,422.554 537.621,421.397 537.045,419.958 537.045,418.519 536.471,416.358 535.605,414.198
+ 534.166,412.901 532.582,412.183 529.701,411.462 526.678,411.175 525.238,411.462 523.654,411.175 524.084,409.591
+ 525.67,408.438 527.252,409.015 528.693,408.294 530.131,409.155 533.156,409.155 534.598,410.163 537.766,411.749 539.35,413.046
+ 540.789,413.767 542.23,413.331 545.252,413.622 546.547,415.206 547.99,414.917 550.438,411.897 552.453,407.431 553.893,407.573
+ 552.453,406.71 554.182,402.819 557.205,402.39 558.068,400.95 558.789,397.927 557.35,396.774 558.357,398.214 557.061,399.655
+ 555.621,400.519 554.182,400.229 552.598,400.374 552.311,401.815 550.869,401.386 551.732,402.819 550.869,404.263
+ 549.43,405.271 548.277,406.71 546.693,407.862 545.398,409.304 543.814,409.015 540.934,409.155 539.35,408.007 538.773,406.569
+ 538.627,405.126 539.639,403.542 541.654,402.39 543.094,401.095 542.949,399.655 541.941,398.069 540.502,398.069
+ 538.918,398.647 538.773,400.085 538.197,401.671 536.613,400.808 537.045,399.366 535.461,398.069 535.174,395.19 534.74,395.046
+ 535.605,393.462 536.182,390.438 537.766,389.573 539.926,387.562 541.795,384.679 543.379,384.966 543.67,384.534
+ 545.109,383.526 546.693,382.95 548.131,381.655 548.854,380.214 549.141,378.63 548.709,377.19 548.564,375.606 549.715,372.729
+ 551.303,373.155 552.74,374.454 554.182,374.454 555.334,377.479 556.197,378.917 558.646,378.774 560.084,379.64 564.547,379.351
+ 565.99,380.647 567.572,381.366 572.037,381.222 570.598,380.935 567.572,381.077 566.998,379.64 565.414,378.917 563.973,378.774
+ 562.533,378.058 561.67,376.612 562.963,375.03 570.453,376.612 571.893,378.058 573.332,379.065 574.055,379.206 575.639,378.058
+ 576.502,376.472 577.365,375.606 578.807,375.319 580.246,375.897 581.83,374.167 581.973,372.729 583.557,372.007
+ 584.998,370.712 584.277,369.271 582.98,367.831 582.117,366.245 582.693,364.808 584.422,363.655 585.715,362.214
+ 587.303,361.065 588.74,361.351 590.037,362.79 591.479,362.647 592.773,361.065 594.357,361.495 595.941,362.79 597.379,362.647
+ 600.262,360.63 601.846,360.343 604.869,360.487 606.311,359.335 607.748,359.19 609.189,360.343 609.908,360.63 611.35,360.63
+ 612.934,359.622 614.373,360.917 617.398,361.927 620.422,360.917 621.861,360.054 623.303,360.487 626.324,359.767
+ 627.766,360.054 629.35,359.622 630.789,359.622 632.23,362.069 633.67,362.935 634.822,361.495 633.957,359.909 634.246,358.472
+ 637.125,355.878 638.709,355.304 639.861,356.741 641.303,356.454 643.174,351.991 644.613,353.286 646.055,353.286
+ 647.494,352.854 648.934,351.413 650.373,351.413 651.957,351.991 654.98,352.278 656.422,352.854 658.006,352.71 661.029,353.573
+ 662.471,353.718 663.908,354.151 665.35,355.446 666.789,355.878 668.229,356.022 669.814,355.591 671.252,355.591
+ 674.277,356.167 676.293,355.446 680.471,357.749 682.051,357.462 683.494,357.749 685.076,358.614 686.084,358.038
+ 686.518,357.894 688.822,354.438 690.693,352.71 692.133,352.136 693.715,351.126 694.725,349.687 696.311,349.687
+ 697.748,348.966 699.334,347.958 702.357,345.366 700.916,345.511 700.051,346.95 698.613,347.958 697.029,348.966 694.15,349.687
+ 693.285,351.126 690.406,352.278 688.963,353.573 686.662,356.599 686.084,358.038 681.621,357.03 680.037,357.175
+ 678.598,356.022 677.014,355.304 675.572,355.304 674.133,355.733 671.109,355.159 668.084,355.159 665.061,354.581
+ 663.621,353.573 662.037,353.144 652.389,351.413 650.949,350.983 649.365,350.839 647.781,350.983 647.494,351.271
+ 645.189,346.808 644.9,345.222 645.332,344.069 648.068,341.046 649.941,338.022 651.379,337.733 652.963,338.167 655.846,338.167
+ 658.725,337.591 660.311,336.151 661.748,335.862 663.189,335.144 664.773,332.118 666.211,331.253 668.518,328.229
+ 668.662,325.206 669.814,322.472 668.373,325.062 668.229,328.085 665.926,331.11 664.486,331.687 662.9,334.71 659.877,336.007
+ 658.438,337.159 654.117,337.733 652.533,337.733 650.807,337.304 649.654,337.591 647.781,340.614 645.332,343.64
+ 644.758,344.069 644.471,345.655 644.758,347.237 645.766,348.679 647.061,351.702 645.621,352.136 644.182,351.413
+ 642.74,351.413 642.021,352.854 641.877,354.294 640.869,355.878 639.572,354.294 638.131,354.007 636.98,355.446 634.246,357.462
+ 633.379,359.046 634.102,361.927 632.662,360.774 631.654,359.19 630.068,358.901 628.627,359.19 625.605,358.759 624.021,359.335
+ 622.438,358.901 620.998,359.19 619.846,360.63 618.406,361.065 616.822,361.206 615.379,360.63 613.941,359.335 612.357,359.335
+ 609.479,359.909 607.605,358.614 606.164,358.759 604.582,359.909 601.557,359.622 600.117,360.198 598.533,361.495
+ 597.094,361.927 594.068,360.774 592.627,360.63 591.189,361.782 589.605,361.065 588.164,360.054 585.285,361.782
+ 582.406,363.077 581.398,364.519 581.686,367.544 583.125,368.983 581.83,372.007 580.389,372.729 578.949,373.88 576.502,375.03
+ 575.061,376.183 573.479,376.759 572.037,376.323 572.324,374.741 571.318,373.304 569.877,372.296 568.293,372.296
+ 560.807,373.444 557.926,374.167 552.021,371.144 550.438,371.431 547.414,372.438 546.693,374.022 546.693,375.462
+ 545.252,375.749 543.814,376.759 540.789,376.759 538.627,379.64 538.197,380.935 537.334,382.374 535.893,383.386
+ 534.311,383.815 531.43,383.671 529.846,382.663 528.406,382.229 526.822,382.374 525.379,383.671 523.941,384.245
+ 523.654,382.808 522.068,383.671 520.627,382.663 519.189,381.511 518.037,379.927 518.037,378.487 517.605,376.901
+ 517.748,372.438 518.182,370.854 518.324,367.687 518.037,366.245 518.037,364.663 517.459,361.782 518.471,360.054
+ 518.182,358.614 516.74,357.319 516.164,355.733 515.877,352.71 516.311,351.271 517.893,351.558 520.055,354.438 520.773,356.022
+ 522.211,357.462 523.795,357.606 524.807,357.175 525.238,357.03 526.102,355.591 527.686,354.87 529.125,353.573 530.564,353.286
+ 528.693,353.431 525.814,355.733 524.807,357.175 523.365,357.319 521.781,356.454 521.205,355.015 521.061,353.573
+ 520.055,350.55 518.613,349.976 517.029,350.118 516.021,350.694 513.572,351.126 513.861,349.542 513.141,350.983
+ 511.846,352.565 510.406,352.71 509.83,354.151 509.541,355.733 508.102,355.878 508.389,354.294 506.949,353.862 507.814,352.421
+ 508.822,351.558 508.678,349.976 507.094,350.839 506.518,352.278 505.076,352.854 504.068,354.294 503.781,355.878
+ 502.197,355.591 501.908,354.007 503.35,352.565 503.926,351.126 502.486,350.55 501.045,350.55 499.459,349.397 498.021,349.542
+ 499.029,347.958 497.59,347.526 497.445,348.966 496.582,350.405 496.725,350.839 495.285,349.687 496.438,346.663
+ 495.715,345.222 494.277,344.647 492.693,343.495 491.254,342.054 490.389,340.614 489.957,337.591 488.949,337.733
+ 487.941,333.991 488.086,332.405 486.646,330.966 485.926,328.085 483.908,323.479 482.9,322.038 482.613,323.622 483.479,323.909
+ 482.037,324.487 483.045,325.927 481.461,326.069 480.021,325.062 481.029,323.622 479.445,322.614 479.59,321.175
+ 480.453,319.733 479.303,318.294 479.156,316.709 478.725,315.27 479.014,313.83 481.893,313.974 480.74,312.534 480.883,310.95
+ 482.471,311.381 480.74,308.358 479.156,307.638 478.869,306.054 477.43,305.622 475.846,304.182 475.99,302.742 475.557,301.158
+ 476.998,301.302 476.564,299.862 478.006,298.854 479.445,298.998 481.029,298.709 482.471,300.006 485.35,300.293
+ 486.789,298.854 487.223,297.558 488.086,297.125 488.807,296.982 489.814,295.83 491.686,294.678 489.525,295.83 488.518,296.837
+ 488.086,297.125 487.365,297.27 487.223,297.558 487.076,297.702 486.357,299.286 484.918,300.006 483.479,299.718
+ 482.037,298.709 479.445,297.99 477.861,298.566 476.564,298.998 475.127,300.006 472.533,302.886 471.094,303.606
+ 471.238,300.726 469.795,295.542 470.23,290.934 469.365,293.958 468.213,295.398 465.334,295.542 464.037,296.982
+ 462.598,297.125 461.156,296.262 459.572,296.262 457.27,295.11 455.686,295.398 454.246,294.246 452.807,293.814 451.365,292.95
+ 449.781,291.942 449.639,290.501 448.197,289.494 448.773,288.054 447.908,286.614 449.35,285.174 449.494,283.734 449.061,282.15
+ 450.502,281.574 451.941,280.278 452.662,281.718 454.102,282.15 457.99,286.47 457.414,285.03 456.693,280.421 458.277,280.709
+ 455.83,276.39 455.973,274.806 457.27,273.366 461.732,274.806 463.174,274.806 464.613,275.669 464.758,274.518 463.461,271.638
+ 462.453,270.054 461.014,270.054 459.43,270.486 459.285,269.045 457.846,266.166 457.557,263.142 455.83,261.558 455.254,259.974
+ 455.686,258.534 456.693,257.094 456.838,255.51 458.277,254.07 459.861,254.213 458.422,252.774 459.43,251.19 461.014,251.333
+ 461.59,249.75 463.029,248.598 461.59,247.59 460.148,248.598 461.156,247.158 464.182,245.43 464.324,243.99 467.205,243.125
+ 468.789,243.414 467.926,243.558 468.068,244.998 466.918,248.022 467.061,249.461 467.926,248.022 470.23,245.142
+ 468.789,244.566 470.23,243.125 471.094,241.686 472.678,241.254 474.117,241.254 478.582,241.974 480.021,242.406
+ 481.461,243.702 484.486,244.421 485.926,245.142 487.223,246.582 488.807,247.014 494.998,251.333 494.709,249.75 496.148,249.75
+ 497.59,250.326 499.174,251.91 500.613,252.629 506.662,254.358 508.102,255.797 508.389,257.381 509.686,258.822 511.27,258.822
+ 514.148,259.398 514.725,260.837 515.877,262.278 517.459,261.99 518.9,262.566 520.486,262.134 522.068,262.566 523.51,263.43
+ 524.949,264.87 525.957,266.454 527.541,266.886 528.693,268.326 531.141,269.045 532.148,270.486 532.582,271.926
+ 534.166,273.366 535.605,273.366 538.486,274.95 540.068,275.238 541.365,276.822 542.518,277.542 544.102,278.118
+ 545.109,279.702 545.973,282.726 547.701,285.606 549.141,286.902 550.293,288.342 551.877,287.19 551.014,287.478
+ 549.572,286.758 548.131,285.461 546.117,282.438 545.252,279.414 544.246,277.974 542.807,276.965 543.814,276.39 544.678,274.95
+ 546.117,273.797 547.414,270.774 545.686,273.797 542.807,276.534 542.373,276.678 540.934,275.238 539.494,274.518
+ 538.055,274.518 535.029,272.934 533.59,272.646 532.006,269.622 530.854,268.182 529.846,268.182 528.117,266.886
+ 526.533,266.166 525.238,264.87 524.949,263.718 523.795,262.278 520.916,260.549 519.908,260.406 518.324,260.982 516.74,260.549
+ 517.029,258.965 516.164,257.526 515.877,255.942 515.303,254.501 513.861,253.062 512.422,252.198 510.406,249.174
+ 508.963,248.166 507.525,248.31 507.957,246.726 506.518,245.286 503.35,243.846 502.055,242.406 500.9,242.838 501.189,244.133
+ 502.627,244.998 503.35,246.438 504.502,247.302 503.35,248.742 498.74,248.166 497.877,246.15 498.166,244.566 497.59,242.982
+ 496.006,242.982 495.715,241.398 497.156,242.262 498.883,241.686 499.605,240.534 499.893,237.366 499.174,235.638
+ 497.877,234.054 494.854,234.774 497.303,231.75 498.883,230.742 500.613,231.174 502.055,230.31 502.627,228.87 504.068,228.293
+ 507.379,226.998 509.254,226.709 510.838,227.43 512.277,226.422 513.141,224.694 512.709,221.381 512.709,225.414
+ 511.414,226.854 508.533,226.278 503.926,228.006 501.766,227.142 501.621,228.582 500.324,230.022 497.445,227.286
+ 497.014,225.846 493.99,223.4 492.693,220.518 491.83,217.494 491.398,214.47 488.662,208.568 489.957,207.125 490.822,208.568
+ 493.701,207.27 494.277,205.83 494.422,204.39 494.422,202.806 493.99,201.222 494.854,198.342 493.846,194.742 494.131,191.717
+ 492.98,190.133 493.99,188.694 494.564,187.254 496.006,181.206 496.006,179.622 496.725,176.598 496.725,175.158 499.75,173.286
+ 500.758,171.846 503.639,171.99 505.223,172.854 509.686,172.854 510.406,172.568 511.99,172.133 512.422,171.99 512.854,171.846
+ 514.293,170.984 512.422,171.99 511.27,172.133 510.406,172.568 505.941,172.568 504.502,171.846 503.061,171.558 501.479,171.702
+ 500.758,171.846 500.037,172.133 498.883,173.717 497.445,174.15 496.293,175.59 496.148,177.03 495.572,178.47 495.285,183.078
+ 494.422,186.102 493.557,187.542 492.547,190.422 493.846,192.006 493.27,193.446 494.422,197.91 494.131,199.494 493.414,198.486
+ 492.406,195.894 492.262,194.454 491.254,192.87 489.957,191.43 489.238,189.846 489.814,188.406 489.379,186.822 489.379,185.381
+ 488.807,182.501 487.365,180.917 486.934,179.48 487.076,178.038 486.357,173.574 486.934,172.133 486.934,170.549 487.365,169.11
+ 486.934,167.669 485.35,166.374 485.061,166.374 487.365,162.056 488.518,160.614 488.949,159.174 493.125,154.854 497.59,151.4
+ 499.318,148.518 500.758,147.797 501.621,146.213 504.646,146.648 506.086,146.358 507.67,147.224 508.389,148.808 509.83,150.104
+ 511.27,150.965 512.854,150.534 513.285,149.094 514.293,147.51 515.877,147.078 517.318,147.654 522.068,148.518 524.949,147.224
+ 527.973,146.648 529.557,146.07 530.998,145.926 534.021,146.358 535.605,146.358 537.045,146.07 541.51,143.333 545.973,141.318
+ 548.998,141.03 550.582,141.75 552.021,142.038 557.639,139.016 559.654,138.293 561.094,137.286 564.547,132.965 569.014,129.078
+ 572.471,124.614 576.646,120.582 577.795,118.998 578.373,116.118 579.379,114.822 581.541,113.958 582.98,113.094
+ 584.277,111.078 585.715,110.07 587.156,108.629 588.164,105.318 588.164,103.877 587.59,103.304 587.59,100.278 587.877,99.56
+ 589.318,97.976 589.605,97.254 589.318,96.246 589.029,96.104 588.311,94.662 588.883,91.64 588.453,90.198 589.459,89.333
+ 590.9,88.614 595.365,88.614 596.807,89.333 599.83,91.782 600.547,93.224 600.98,95.094 600.98,96.965 600.838,97.688
+ 602.564,100.709 603.861,103.734 605.303,104.312 608.324,105.03 609.043,106.472 609.479,106.902 609.479,107.333 610.342,107.91
+ 611.639,109.494 613.654,112.52 614.518,113.094 616.678,114.534 617.541,115.688 617.83,116.406 618.117,116.406 618.547,116.984
+ 620.131,118.133 621.715,118.568 622.438,120.006 623.877,119.43 625.318,119.286 625.318,122.454 625.748,123.318
+ 626.758,124.472 628.342,125.622 629.061,127.064 630.502,128.213 629.061,126.629 628.197,125.192 626.758,124.184
+ 625.318,122.312 625.459,119.286 625.318,119.286 624.021,118.709 622.438,119.72 621.715,118.278 620.131,117.99 619.27,116.549
+ 618.117,116.406 617.541,115.688 617.252,114.965 616.102,113.381 614.518,113.094 611.061,108.486 610.342,107.91
+ 609.479,106.902 609.332,105.75 608.037,104.6 606.598,104.312 603.715,103.158 603.572,101.72 602.564,100.278 600.98,97.254
+ 600.98,96.965 601.125,96.246 600.98,95.094 600.838,92.648 599.83,91.782 596.23,88.76 595.365,88.614 593.205,88.326
+ 590.182,88.326 588.74,89.48 588.453,89.48 588.74,86.024 589.605,84.44 589.748,83.144 590.758,80.264 591.043,78.68
+ 590.182,74.215 590.9,71.192 590.9,69.608 590.037,68.024 586.869,63.56 587.877,60.68 588.598,59.526 590.9,58.232
+ 591.189,56.648 592.916,54.631 594.211,52.614 594.789,52.184 595.365,50.742 595.365,49.879 596.084,48.87 597.957,47.72
+ 598.533,47.862 600.117,47.286 601.557,46.422 602.422,45.56 603.861,45.56 605.59,44.694 607.174,44.406 608.613,44.406
+ 610.197,44.838 611.781,44.694 616.246,45.702 617.686,46.856 618.693,48.295 621.715,50.454 626.182,53.047 627.621,54.486
+ 628.342,56.07 631.941,59.526 637.99,61.976 639.43,62.984 640.725,64.422 643.893,65.862 644.9,67.304 646.342,68.742
+ 647.926,69.176 651.814,75.224 653.973,78.246 655.414,79.688 656.854,82.709 659.014,85.592 659.303,87.174 659.156,88.614
+ 660.021,90.198 661.605,90.917 664.486,92.79 666.068,92.648 668.949,95.094 671.973,95.381 672.838,98.406 673.846,99.99
+ 675.43,100.422 678.74,100.568 680.326,101.574 681.766,103.014 683.205,103.734 684.646,103.446 686.229,104.312 686.373,105.75
+ 685.941,107.192 685.795,108.776 685.941,110.213 684.934,114.822 684.357,116.262 682.916,117.702 681.908,119.144
+ 681.479,120.728 682.051,123.75 682.342,128.07 682.051,128.648 681.334,129.797 681.479,131.238 681.908,132.678 683.205,134.262
+ 683.781,135.702 685.223,137.286 686.807,138.582 688.244,139.158 689.686,139.446 692.709,139.301 694.293,139.877
+ 695.877,141.174 697.318,141.174 698.758,141.608 699.908,141.608 702.934,142.614 705.814,144.917 706.822,146.501
+ 709.846,147.51 711.285,146.936 712.869,146.79 714.598,147.654 713.732,146.936 712.438,146.501 710.998,146.79 710.854,145.206
+ 710.422,146.79 708.98,146.79 707.398,146.213 706.102,144.629 703.076,142.326 700.051,141.461 695.732,140.742 694.15,139.301
+ 692.564,139.016 689.686,139.158 688.102,138.87 685.076,136.998 683.926,135.56 683.205,133.976 682.197,132.534 681.766,130.95
+ 681.908,129.366 682.051,128.648 682.342,128.358 682.342,128.07 682.773,126.486 682.342,124.902 681.908,120.293
+ 682.486,118.856 685.223,115.83 685.076,114.246 685.51,113.669 686.084,110.648 686.084,107.768 686.662,106.184 686.662,104.6
+ 685.365,103.158 683.781,103.304 682.342,102.87 679.318,100.422 678.164,100.133 675.285,99.99 673.846,99.414 672.262,95.238
+ 669.236,94.808 667.795,93.654 666.934,92.358 668.084,90.917 666.211,90.198 666.211,88.038 667.365,86.6 668.807,86.166
+ 667.365,86.166 665.926,87.608 665.494,89.045 666.357,90.631 666.646,92.07 665.061,92.358 663.479,91.782 662.037,90.776
+ 660.453,90.056 659.59,88.472 659.732,87.03 659.303,85.446 657.141,82.568 655.701,79.542 652.246,75.224 650.23,72.198
+ 649.51,70.614 648.357,69.176 646.486,68.312 643.748,65.286 642.311,64.856 639.285,62.406 637.846,61.4 634.678,59.958
+ 632.807,59.526 629.781,56.936 628.627,55.494 627.766,53.91 626.324,52.614 620.277,48.728 619.701,47.144 618.262,45.848
+ 615.379,44.838 613.795,44.694 612.357,44.264 610.342,44.264 608.613,43.688 605.732,44.118 604.869,44.838 603.285,44.838
+ 602.277,45.127 599.973,46.998 598.389,47.286 596.949,47.862 595.51,49.016 594.068,52.038 591.189,55.928 590.324,57.942
+ 588.883,58.662 587.445,60.246 586.148,63.127 585.861,61.542 584.854,60.104 584.564,59.096 583.99,58.232 583.701,56.648
+ 581.973,54.776 581.83,53.333 580.678,51.75 580.246,51.463 578.807,51.608 577.223,50.6 576.789,49.016 576.068,47.862
+ 575.926,46.998 575.205,45.414 573.766,44.694 570.74,42.392 569.59,41.816 568.869,40.374 570.311,39.078 571.748,38.936
+ 572.037,37.494 571.029,35.91 568.006,34.76 569.303,31.879 568.869,30.44 569.303,28.856 568.725,27.414 568.869,25.976
+ 568.582,24.392 567.861,22.95 566.709,21.366 566.131,20.648 564.547,19.782 566.131,16.902 566.564,13.879 569.59,13.446
+ 570.883,11.862 572.324,11.862 573.908,10.568 575.35,11.72 576.934,10.711 577.076,9.127 576.502,7.83 576.789,7.688
+ 577.941,7.83 578.662,7.256 579.379,6.68 579.238,5.238 579.957,4.95 580.102,4.662 580.822,4.232 581.973,2.792 584.998,1.208
+ 586.582,1.352 588.021,1.064 589.459,1.494 591.043,0.198 590.9,-1.24 591.332,-2.682 592.916,-2.97 593.35,-0.09 594.934,0.486
+ 593.494,-0.665 593.639,-2.104 592.627,-3.688 591.189,-3.112 590.758,-1.528 590.758,-0.09 589.318,1.352 587.732,0.776
+ 586.582,1.064 584.998,0.776 583.557,1.782 582.117,2.358 580.533,3.512 580.102,4.662 579.238,5.238 578.373,5.672 578.662,7.256
+ 577.223,7.4 576.789,7.688 576.357,7.688 576.502,7.83 575.639,8.406 576.646,9.848 575.639,11.432 574.055,10.278 572.613,11.432
+ 569.59,11.72 569.303,13.304 567.861,13.158 566.277,13.734 565.846,16.76 564.117,19.64 565.125,21.224 566.709,21.366
+ 568.148,24.392 568.438,25.83 568.293,27.414 568.869,28.856 568.006,30.295 568.293,31.734 567.285,34.614 568.725,35.768
+ 570.311,35.768 571.748,37.206 571.174,38.79 569.732,39.078 568.293,40.52 569.303,42.104 570.74,42.822 573.766,44.984
+ 575.205,46.422 575.781,48.006 576.646,49.446 576.934,50.888 578.084,51.75 580.246,51.896 581.541,53.333 581.686,54.917
+ 583.125,56.358 584.131,59.526 585.285,60.967 586.293,65.72 589.605,68.6 590.471,70.326 590.324,71.91 589.318,73.782
+ 589.605,75.942 589.318,77.383 589.893,78.822 589.174,81.702 589.174,82.709 588.311,85.877 588.164,88.902 587.877,90.342
+ 588.453,91.926 587.877,93.366 587.732,94.95 588.598,96.534 588.021,98.118 587.014,99.127 586.725,101.144 587.156,104.166
+ 586.006,105.608 585.285,108.629 584.422,110.213 582.98,111.224 582.406,112.808 578.518,114.965 576.211,117.99 575.494,119.43
+ 571.605,123.75 570.74,125.768 569.732,127.206 568.293,127.926 566.709,129.366 565.27,130.085 563.973,131.526 563.109,133.83
+ 560.807,136.709 559.365,138.006 557.926,138.44 554.9,140.312 553.459,140.888 550.438,140.6 548.998,139.877 547.557,140.454
+ 545.973,140.6 543.094,142.184 541.223,142.902 539.781,143.91 535.318,145.926 530.854,145.494 527.83,145.782 526.246,146.358
+ 524.807,146.501 521.781,148.085 518.758,146.79 517.893,146.648 516.453,146.501 513.43,147.224 512.564,148.662 512.422,150.104
+ 510.838,150.392 509.398,149.094 507.238,146.07 505.795,145.926 504.213,146.213 501.189,145.926 500.613,147.51 499.174,148.085
+ 498.021,149.526 497.445,150.965 496.006,152.406 494.422,153.272 492.98,154.422 491.686,156.006 490.102,157.158
+ 488.662,157.734 487.51,159.318 487.223,160.758 484.486,163.494 483.479,165.224 482.324,163.782 481.318,160.758
+ 482.182,159.318 482.324,156.438 483.766,153.99 484.197,152.549 485.35,150.965 483.908,149.526 482.471,150.678 481.318,152.118
+ 482.324,149.381 483.908,148.518 485.35,149.526 486.789,148.374 486.213,146.79 488.518,143.91 488.662,142.326 489.379,140.888
+ 490.822,140.024 489.67,138.582 489.814,136.998 490.389,135.56 490.246,134.118 488.662,134.262 489.238,132.822 490.389,131.381
+ 488.949,129.942 485.926,130.374 482.324,131.958 480.883,132.104 477.861,134.262 476.422,134.984 470.373,137.286
+ 472.533,131.238 472.533,129.797 472.389,128.213 471.094,125.333 469.51,124.038 470.23,122.6 468.789,123.608 468.213,123.461
+ 466.773,123.896 462.453,122.312 461.014,120.87 460.582,119.286 460.725,118.133 459.715,116.694 459.141,110.648
+ 459.861,109.206 458.422,110.358 456.838,108.917 456.547,110.358 456.98,111.797 455.398,112.232 453.957,113.238
+ 452.518,112.662 452.23,111.078 450.789,111.942 450.502,110.358 451.223,107.48 449.781,107.333 447.334,105.318 446.9,106.038
+ 446.758,107.48 446.182,108.917 444.166,111.797 444.598,113.381 443.156,112.808 441.715,114.104 439.27,113.381 439.414,114.822
+ 440.277,115.542 441.861,115.542 443.301,116.549 442.582,118.133 441.141,118.856 439.557,119.286 438.117,119.286
+ 436.533,117.414 434.949,116.549 433.51,116.118 432.068,116.262 430.773,117.702 430.773,119.286 429.766,120.728
+ 428.613,119.286 427.893,117.702 427.605,116.262 426.74,114.822 425.445,113.381 420.98,109.782 419.973,108.198 418.533,107.045
+ 417.525,105.608 415.223,103.158 412.055,98.694 411.045,95.669 415.51,99.127 417.525,102.006 418.963,102.295 421.414,100.709
+ 422.277,102.15 422.564,101.862 422.422,100.278 417.957,98.984 413.494,96.822 412.055,95.816 411.334,94.374 415.795,92.358
+ 418.822,91.64 417.379,93.078 415.941,93.654 414.789,95.094 416.23,95.238 416.518,96.822 417.957,95.669 417.957,94.232
+ 419.398,92.936 420.838,93.51 422.422,94.662 422.709,93.224 424.148,93.51 424.006,92.07 422.564,90.917 420.98,90.486
+ 417.957,90.631 416.373,91.064 411.766,93.51 410.182,94.085 408.74,94.085 405.715,92.213 404.277,91.064 401.973,88.184
+ 400.246,85.158 400.246,80.838 401.686,80.118 403.27,79.976 403.414,82.856 404.854,81.99 406.438,81.848 406.869,80.406
+ 405.285,79.542 403.846,78.104 403.414,76.662 404.709,75.224 402.693,75.078 401.109,74.215 401.541,72.776 402.98,71.91
+ 406.006,71.48 411.479,68.6 413.061,69.03 415.654,69.176 417.094,68.166 418.678,68.312 420.117,69.03 421.414,68.6
+ 423.141,68.024 424.582,67.304 426.021,66.15 426.883,64.711 428.324,63.272 428.037,61.688 430.197,59.526 430.773,58.085
+ 431.781,56.501 431.926,55.064 433.223,53.48 434.807,53.192 434.949,51.75 436.963,48.728 435.525,50.024 434.807,51.608
+ 434.662,53.047 433.223,53.333 431.926,54.776 431.205,56.215 430.918,57.654 430.197,59.238 427.893,61.542 428.182,63.127
+ 426.74,64.568 425.732,66.15 424.293,67.158 421.414,68.6 419.83,68.454 418.246,67.879 416.807,67.734 415.223,69.03
+ 413.781,68.454 412.342,68.742 410.758,68.024 410.182,68.6 410.182,68.888 408.74,69.75 407.156,69.75 406.148,71.192
+ 401.398,71.91 402.838,70.614 401.254,71.192 399.814,71.047 398.518,69.608 397.941,68.024 398.086,66.582 397.654,63.702
+ 398.662,62.694 400.102,63.848 397.51,59.958 395.926,58.95 394.486,58.232 393.045,57.942 391.461,56.936 387.861,57.078
+ 383.254,56.215 380.373,55.352 378.789,55.206 374.324,53.333 370.006,50.888 368.422,49.734 364.389,45.414 363.379,43.976
+ 362.086,40.95 361.795,39.366 362.086,34.76 364.246,32.024 364.533,31.158 364.678,30.728 365.541,30.15 366.547,29.432
+ 366.547,27.99 365.686,26.551 364.963,25.83 364.533,24.392 363.379,24.534 361.941,23.383 361.074,21.799 362.23,20.358
+ 362.949,15.751 363.525,15.176 363.238,13.734 361.941,12.295 364.102,9.272 364.822,7.688 366.117,6.246 368.709,6.822
+ 369.141,6.967 373.605,9.272 376.629,11.72 376.486,12.15 375.334,12.872 375.766,13.158 377.061,13.879 378.502,14.024
+ 379.941,15.318 381.67,14.167 383.109,14.312 383.398,13.734 384.693,11.144 386.277,10.278 387.572,8.84 388.293,7.256
+ 389.732,6.68 391.318,7.11 395.781,7.11 397.223,8.12 398.662,8.12 399.094,6.534 398.518,5.526 399.238,4.232 400.822,3.942
+ 402.262,4.088 405.572,6.534 408.883,6.68 409.75,6.822 410.471,6.967 412.055,7.83 412.629,7.83 412.773,7.976 413.205,7.83
+ 413.494,7.83 413.926,7.543 413.205,7.83 412.629,7.83 411.334,6.967 409.75,6.822 408.166,6.104 406.725,6.392 405.285,6.246
+ 402.262,3.799 400.678,3.654 399.238,3.942 397.654,4.662 398.518,6.104 398.518,7.543 397.076,7.83 395.639,6.68 392.613,6.967
+ 389.59,6.534 388.006,7.256 387.285,8.694 385.846,10.278 384.406,10.856 383.398,12.295 383.398,13.879 381.814,13.734
+ 380.373,14.312 378.934,13.734 377.205,13.592 375.766,13.158 376.486,12.15 376.773,11.862 376.629,11.72 376.773,11.574
+ 373.75,8.984 371.59,7.83 370.148,6.534 368.709,6.822 367.127,5.816 366.693,5.816 366.117,6.246 365.109,6.822 361.223,11.144
+ 360.789,15.896 360.066,17.335 357.047,19.494 355.605,19.928 354.166,20.792 352.148,20.648 350.711,19.782 349.129,20.07
+ 347.543,19.782 346.102,18.919 344.66,19.208 343.074,19.064 342.502,17.624 341.35,16.184 339.906,15.463 335.301,14.456
+ 333.861,13.592 332.422,12.295 330.98,12.008 329.398,11.288 327.813,11.432 326.373,12.008 323.492,14.167 321.906,13.592
+ 321.906,12.008 320.758,10.568 320.898,9.127 321.477,7.688 321.477,6.104 320.473,4.662 319.029,4.375 316.006,1.928
+ 315.43,0.344 315.715,-1.24 315.57,-2.682 314.133,-3.688 310.533,-3.544 309.094,-4.842 309.957,-3.4 308.373,-2.682
+ 308.373,-4.266 308.23,-3.112 305.926,-0.09 306.215,1.352 305.926,2.792 306.645,7.256 308.086,8.84 309.525,9.56 308.086,11
+ 306.645,12.008 306.066,15.751 306.066,17.192 304.484,16.326 301.461,15.318 298.438,13.879 293.686,12.295 292.391,10.856
+ 291.379,9.272 289.941,10.278 290.809,11.72 289.365,11.288 287.781,10.278 286.342,10.424 281.73,9.414 278.711,9.272
+ 277.129,9.848 275.686,9.704 274.246,8.694 271.365,5.816 269.926,4.95 268.484,4.808 267.047,4.232 264.021,2.358 261.141,1.928
+ 259.701,1.064 258.838,-0.376 260.277,0.631 260.277,-0.808 257.254,-1.098 254.23,-3.976 253.51,-5.56 254.949,-4.266
+ 253.941,-5.85 252.502,-5.992 250.485,-7 248.901,-7.289 247.462,-8.728 246.021,-9.306 243.43,-12.184 244.726,-11.466
+ 244.438,-13.05 241.413,-14.201 240.117,-15.642 239.829,-17.224 238.678,-15.642 241.558,-13.338 236.949,-16.792
+ 238.533,-17.224 237.67,-18.52 236.229,-17.514 235.222,-18.953 233.781,-18.953 229.317,-21.976 227.733,-22.696 222.693,-26.152
+ 222.693,-26.728 222.117,-28.17 221.974,-29.754 222.55,-31.192 221.109,-30.762 220.245,-29.32 218.949,-30.762 219.382,-32.201
+ 219.382,-35.224 219.094,-36.665 218.229,-38.104 217.798,-39.688 218.806,-41.128 218.086,-42.568 216.502,-43 215.35,-44.44
+ 215.493,-45.88 214.773,-47.32 213.909,-44.296 212.47,-45.449 212.47,-47.033 212.037,-48.472 211.605,-46.6 210.741,-45.016
+ 211.75,-43.576 213.334,-43.289 214.342,-42.568 212.901,-41.272 212.758,-39.833 213.621,-36.808 215.062,-36.232
+ 216.069,-34.792 217.51,-35.081 216.069,-34.506 213.046,-34.36 211.605,-33.93 210.166,-34.792 208.582,-35.369 208.869,-36.953
+ 207.43,-37.528 207.142,-35.944 205.701,-36.376 204.117,-35.081 205.701,-34.936 207.142,-34.218 202.533,-35.081
+ 198.069,-34.936 197.926,-36.376 196.485,-37.24 195.478,-38.682 194.037,-39.833 191.014,-41.272 189.573,-42.712
+ 188.134,-43.576 189.43,-45.016 187.846,-43.72 186.405,-44.44 186.405,-46.024 184.821,-45.736 184.966,-45.16 184.102,-45.304
+ 182.518,-46.457 182.949,-47.896 184.533,-47.464 187.413,-50.201 187.27,-54.232 188.71,-55.098 193.174,-53.656 191.733,-55.098
+ 190.294,-55.96 191.445,-57.544 193.029,-56.968 194.613,-57.544 199.077,-57.256 199.653,-55.816 201.094,-55.672
+ 202.533,-56.249 201.094,-56.824 199.653,-58.266 199.51,-59.705 198.069,-59.705 198.214,-61.144 197.926,-62.728
+ 198.357,-62.296 199.798,-63.16 198.214,-63.016 197.35,-65.896 198.357,-67.336 199.941,-68.346 201.382,-69.208 202.821,-69.352
+ 203.542,-70.792 201.958,-69.497 201.237,-70.936 "/>
+ <polyline id="polyline2165" fill="#FECC2E" points="202.102,866.788 201.525,865.78 199.653,865.638 201.094,864.63
+ 199.653,864.485 198.934,863.046 198.789,861.604 201.67,861.892 200.229,861.317 199.653,859.013 199.653,857.571
+ 201.094,858.005 201.237,856.565 202.678,856.853 205.558,856.708 204.981,855.269 203.397,854.118 204.693,852.677
+ 204.262,851.235 205.701,850.806 207.573,851.093 207.573,850.661 207.285,850.948 206.134,849.364 206.998,847.925
+ 207.718,848.067 207.285,846.485 208.006,845.046 211.029,846.485 210.021,847.925 211.462,846.917 212.901,846.63
+ 212.613,847.493 212.901,847.638 216.069,846.772 219.094,846.63 220.533,846.054 221.109,846.485 222.55,846.63 222.693,845.765
+ 225.573,845.909 224.998,847.493 225.142,848.935 224.277,850.372 219.958,853.829 216.646,856.132 215.493,856.278
+ 215.062,857.862 213.621,857.571 212.613,856.853 212.758,857.142 213.621,857.571 215.638,858.581 217.077,858.581
+ 216.357,860.165 214.918,860.021 213.478,860.597 211.894,861.604 213.478,860.886 214.918,860.886 213.621,863.478
+ 213.478,863.909 212.325,865.062 209.014,868.661 208.294,869.38 207.285,870.532 202.966,874.853 200.086,877.157
+ 198.646,877.735 197.205,877.013 195.766,875.429 197.35,875.716 198.789,874.853 200.229,875.14 198.789,874.708 195.766,874.853
+ 194.325,874.565 195.766,873.556 197.205,873.7 197.493,873.989 198.214,872.548 197.638,870.964 199.077,869.669 200.518,870.388
+ 199.077,869.524 200.518,868.517 202.245,868.661 200.806,868.229 200.086,866.501 201.67,866.501 202.102,866.788 "/>
+ <polyline id="polyline2167" fill="#FECC2E" points="202.533,888.245 202.821,887.524 203.829,889.11 203.829,890.694
+ 202.821,889.11 202.533,888.245 "/>
+ <polyline id="polyline2169" fill="#FECC2E" points="202.533,888.245 202.245,887.669 202.821,887.524 202.533,888.245 "/>
+ <polyline id="polyline2171" fill="#FECC2E" points="202.533,888.245 202.245,888.821 201.094,887.38 201.382,885.94
+ 202.533,884.501 204.693,882.63 200.373,885.796 200.229,887.38 200.806,888.821 199.222,891.7 199.077,893.14 198.357,894.724
+ 198.357,896.165 196.054,896.741 195.909,895.302 196.63,893.862 196.918,892.278 197.493,890.837 198.934,889.397
+ 197.926,887.956 198.069,886.517 198.357,885.077 199.653,883.349 200.806,878.886 202.966,879.317 204.262,877.878
+ 202.821,879.03 201.525,878.886 202.821,877.302 201.382,877.589 201.525,877.157 202.533,876.005 205.413,875.14 203.829,875.429
+ 204.117,873.845 204.405,873.413 207.285,870.532 208.294,869.38 209.014,868.661 211.317,866.501 212.325,865.062
+ 213.478,863.909 213.621,863.478 216.502,862.181 217.941,861.749 219.525,861.604 219.67,861.317 221.109,860.454 222.55,860.597
+ 223.989,861.317 225.573,861.03 227.014,861.03 230.037,861.604 232.918,861.317 234.357,861.749 235.798,862.899 235.941,864.341
+ 235.653,865.78 234.214,867.222 233.493,868.661 232.773,871.54 231.909,872.981 231.478,874.421 229.605,876.294 228.741,878.454
+ 227.302,879.749 222.693,880.899 221.254,881.909 220.821,881.765 220.966,882.054 221.397,882.054 224.565,880.899
+ 225.718,882.341 227.302,882.917 227.014,884.356 225.573,884.788 224.134,884.501 222.262,886.085 219.958,887.235
+ 218.373,886.661 216.789,886.517 215.638,885.509 216.646,886.517 216.789,886.517 218.086,887.235 221.542,887.956
+ 222.981,888.532 224.422,888.101 225.861,886.806 227.302,887.093 229.75,888.821 231.189,889.253 232.63,890.694 234.357,893.14
+ 235.798,894.294 236.806,895.735 237.67,901.925 238.966,905.093 239.254,906.532 240.55,909.124 240.838,910.278 242.277,910.278
+ 243.718,910.708 244.582,910.997 246.166,912.005 247.605,913.446 248.182,914.886 250.342,917.333 250.485,920.356
+ 251.062,921.796 253.51,924.964 253.797,926.403 252.502,925.397 250.918,925.253 249.478,923.813 247.894,924.245
+ 246.453,923.956 245.014,924.532 245.302,924.677 248.758,924.388 254.086,928.132 255.094,929.571 256.102,932.454
+ 255.957,934.038 254.949,934.757 254.23,935.188 203.686,935.188 204.405,934.757 206.71,933.462 207.285,932.021 209.445,930.294
+ 210.886,930.147 213.621,929.286 215.062,929.86 218.086,928.997 220.39,930.87 220.39,930.437 219.525,928.708 220.678,927.845
+ 221.397,928.276 222.117,929.86 223.558,930.147 224.134,929.429 224.422,929.429 223.989,929.286 223.413,929.716
+ 221.974,928.997 221.542,928.421 220.966,926.837 220.821,925.253 221.829,923.813 222.838,923.235 221.397,922.806
+ 221.397,920.356 222.838,919.78 223.126,918.341 223.989,916.899 223.558,916.325 223.989,915.892 222.117,916.325
+ 221.686,915.462 221.542,916.038 220.533,917.478 220.533,917.909 219.813,916.47 220.102,915.028 218.373,915.028
+ 218.086,913.589 216.069,910.565 217.365,907.685 219.237,904.661 220.102,904.806 222.55,904.229 222.55,903.796 219.382,903.653
+ 217.222,903.222 217.077,904.661 214.197,905.235 212.613,906.388 212.182,906.245 212.037,905.38 210.598,905.524
+ 209.157,904.517 208.869,903.94 209.014,906.821 207.573,906.964 206.277,905.524 204.838,904.372 203.397,904.806
+ 203.974,907.829 201.525,904.372 201.094,902.788 201.382,901.78 202.245,901.925 202.678,903.364 202.966,903.364
+ 202.678,901.925 203.254,899.765 204.693,898.612 205.126,897.03 207.43,894.149 206.854,892.708 205.27,891.556 205.27,888.532
+ 206.277,887.235 209.302,887.956 208.438,887.669 206.998,886.517 205.989,885.077 206.998,883.493 205.558,883.638
+ 205.701,885.222 205.413,886.661 204.693,888.101 204.262,888.388 203.686,886.948 202.821,887.38 202.821,887.524
+ 202.245,887.669 202.533,888.245 "/>
+ <polyline id="polyline2173" fill="#FECC2E" points="209.014,868.661 212.325,865.062 211.317,866.501 209.014,868.661 "/>
+ <polyline id="polyline2175" fill="#FECC2E" points="213.621,857.571 212.758,857.142 212.613,856.853 213.621,857.571 "/>
+ <polyline id="polyline2177" fill="#FECC2E" points="216.789,886.517 216.646,886.517 215.638,885.509 216.789,886.517 "/>
+ <polyline id="polyline2179" fill="#8FB5BE" points="295.129,801.845 298.006,801.124 296.422,801.271 295.129,801.845
+ 294.838,801.989 293.254,800.981 296.422,799.54 297.861,800.118 299.301,799.11 297.861,799.687 294.838,799.11 296.277,798.39
+ 294.693,797.956 296.133,797.956 294.693,797.669 293.109,798.103 295.846,796.948 294.406,797.235 292.82,796.229
+ 293.686,794.788 295.27,793.925 296.133,792.485 297.57,792.63 299.014,793.493 300.453,793.493 300.313,794.935 303.334,793.062
+ 304.773,793.204 306.357,792.194 301.895,792.917 298.869,792.917 300.453,792.341 295.701,792.341 294.262,792.917
+ 293.828,792.341 295.27,790.757 293.686,789.749 293.109,788.31 294.693,788.597 295.988,790.038 296.133,790.899 296.711,789.462
+ 295.988,788.022 297.43,788.31 298.869,787.589 299.73,789.173 299.156,790.612 300.021,789.173 301.461,789.317 300.021,787.735
+ 300.021,786.294 301.461,784.854 303.047,785.286 304.484,788.31 304.197,786.581 303.621,785.862 304.342,784.278 305.35,782.837
+ 306.789,783.847 307.797,785.429 308.23,788.454 309.67,787.878 308.23,786.87 308.518,785.286 309.957,784.997 308.373,784.997
+ 307.365,784.421 306.789,782.981 305.205,782.55 303.766,783.271 301.75,783.124 303.334,782.403 304.918,782.261 301.895,780.821
+ 304.773,779.956 306.502,779.669 307.941,780.39 309.525,779.956 311.109,780.821 312.547,780.103 310.82,780.39 310.965,778.806
+ 314.711,776.501 311.543,778.085 310.102,778.229 311.109,776.788 308.23,778.085 306.502,777.511 307.941,776.356
+ 306.502,776.214 306.645,774.63 308.086,773.622 309.525,774.341 312.547,774.341 313.988,773.478 315.141,775.204
+ 318.313,776.646 318.738,777.364 318.738,776.646 315.57,775.062 314.711,773.478 313.27,773.188 313.559,771.604 316.293,772.899
+ 317.73,774.341 319.316,774.772 317.73,773.909 317.59,772.038 316.148,772.47 314.998,770.886 319.75,768.87 318.166,769.302
+ 317.014,767.862 318.738,766.854 318.598,765.558 321.621,765.413 321.477,766.854 322.918,765.847 323.063,764.403
+ 321.621,764.403 322.773,762.821 324.215,762.39 325.074,760.948 327.525,763.687 327.67,764.403 326.809,765.989 327.813,765.271
+ 329.398,765.413 328.533,763.974 330.117,762.966 330.693,763.397 332.277,762.821 333.715,762.821 334.006,762.532
+ 333.43,760.948 333.43,759.511 334.582,757.927 336.166,756.917 337.029,755.333 335.301,755.622 335.445,754.038 336.883,753.03
+ 337.174,752.454 335.59,752.454 334.148,754.038 332.998,755.478 331.559,756.63 332.998,755.765 334.582,755.909 334.148,757.349
+ 332.711,758.501 331.559,760.085 330.117,761.382 327.379,762.966 326.086,761.382 325.941,759.94 326.809,759.364 326.66,758.935
+ 325.223,759.94 323.781,759.077 327.813,755.478 326.23,756.341 326.086,755.478 326.518,753.894 327.67,750.87 329.686,747.847
+ 331.129,747.847 329.973,746.403 331.414,746.263 331.414,744.679 332.854,745.253 334.438,747.124 335.879,745.54 336.883,745.11
+ 335.879,745.397 335.59,743.956 337.174,743.095 335.59,743.095 334.148,742.661 335.014,741.077 336.453,740.214 335.73,739.78
+ 335.879,738.772 336.021,738.485 337.461,737.478 338.898,736.757 340.484,736.757 338.898,736.612 337.75,737.046
+ 336.313,738.194 336.021,738.485 335.879,738.63 335.879,738.772 335.156,739.638 333.715,740.935 333.43,739.493 334.869,738.772
+ 333.285,738.63 334.869,738.485 334.869,736.899 337.029,735.317 335.73,735.749 336.598,734.165 338.037,734.31 338.037,732.87
+ 339.477,734.165 338.037,735.317 339.621,734.597 341.063,733.444 342.066,732.005 342.789,730.421 340.484,733.444
+ 339.334,733.157 339.621,731.718 339.334,730.134 338.324,731.718 337.605,730.134 338.182,728.694 337.461,727.253
+ 340.342,728.837 339.906,727.253 338.473,727.397 337.895,725.813 338.324,724.372 339.906,725.235 338.613,723.798
+ 339.334,722.214 339.047,720.772 340.484,720.194 341.35,720.485 342.789,721.493 341.926,720.054 340.484,719.765
+ 340.197,718.325 338.473,719.046 339.189,717.604 340.629,716.741 342.934,714.87 343.797,716.31 344.949,715.444 345.67,715.589
+ 345.238,715.302 344.949,715.444 344.23,715.302 346.965,712.565 346.965,711.989 345.67,713.431 344.086,714.294 342.645,714.726
+ 341.063,715.735 341.492,714.294 342.934,713.571 339.906,714.005 340.342,712.565 338.898,711.126 339.189,710.55
+ 340.629,711.126 342.215,709.829 340.629,710.118 340.918,708.532 340.773,707.671 342.066,707.095 341.641,706.661
+ 343.074,705.364 341.641,704.067 340.918,704.067 342.357,702.772 343.941,702.341 343.51,700.757 345.094,701.622
+ 345.379,700.325 346.82,700.181 345.238,700.181 345.094,698.741 346.533,698.022 346.82,697.444 348.406,696.87 348.547,696.581
+ 348.838,697.444 349.27,696.581 350.711,696.726 352.148,697.444 351.715,695.862 353.445,695.718 351.285,695.718
+ 349.846,696.005 348.406,695.862 347.254,696.87 346.533,696.294 345.094,696.87 346.246,693.989 347.828,693.7 347.686,693.271
+ 346.246,692.839 347.254,691.397 348.406,691.255 347.543,692.839 349.129,691.974 350.563,691.974 351.715,693.413
+ 352.582,693.126 351.141,691.829 352.006,690.39 350.563,691.397 348.98,691.397 348.693,688.374 350.133,688.948 351.715,688.087
+ 350.277,687.077 348.693,686.503 348.406,687.94 346.82,690.103 346.391,688.229 345.525,688.517 346.102,687.077 345.957,686.503
+ 347.398,686.067 350.422,683.909 349.988,683.622 350.854,682.899 349.414,683.188 348.838,682.757 347.398,683.909
+ 347.543,682.325 348.547,680.886 348.98,682.47 350.277,681.462 349.988,680.022 351.57,679.878 351.861,681.462 353.59,684.341
+ 355.174,684.483 353.59,683.765 353.301,682.325 354.883,683.478 354.453,680.454 352.869,680.741 353.445,679.302
+ 353.301,678.726 351.861,679.157 351.861,677.718 353.59,677.862 355.029,678.87 353.445,677.573 351.861,677.286 352.869,675.847
+ 354.453,675.413 356.037,675.847 357.477,675.413 357.621,675.847 358.918,677.286 357.621,675.413 358.484,674.263
+ 359.781,673.397 359.781,673.11 358.342,673.255 356.758,673.829 355.316,673.397 353.879,674.694 352.293,674.55 352.582,673.542
+ 353.014,673.687 352.438,672.245 352.582,671.958 354.021,670.517 355.461,669.798 356.898,669.653 356.758,669.077
+ 355.895,668.79 356.324,667.927 357.906,668.067 357.189,666.483 355.75,665.046 356.473,663.462 357.621,661.878 358.055,660.438
+ 357.477,660.294 357.477,657.271 358.918,657.271 360.066,658.854 360.357,659.862 361.365,658.854 362.086,657.271
+ 360.645,657.271 359.063,655.974 359.781,654.532 361.223,654.966 362.518,656.403 364.102,656.118 365.686,657.413
+ 364.678,655.974 363.238,656.118 361.795,654.966 362.807,653.382 361.223,653.813 360.934,651.94 361.223,650.356
+ 364.246,648.341 364.389,649.78 365.109,651.222 365.109,652.806 365.541,654.245 365.686,652.806 366.547,651.077
+ 365.541,650.646 365.109,649.062 365.254,647.478 365.83,648.194 366.838,645.173 367.414,646.614 367.557,648.054
+ 368.277,649.638 368.564,652.517 368.131,655.542 368.277,655.974 369.285,652.806 369.141,651.364 370.725,650.935
+ 369.285,649.638 368.998,648.054 369.572,646.47 369.43,645.03 370.293,643.444 370.006,645.03 371.156,646.181 370.869,644.741
+ 371.156,643.157 371.014,642.438 372.453,642.005 373.893,643.157 375.479,643.444 376.918,644.454 375.621,643.444
+ 374.758,642.005 375.334,640.854 374.037,639.989 372.453,640.421 371.014,639.558 369.43,639.126 371.014,638.839
+ 370.582,637.255 372.166,637.829 372.74,636.39 375.621,638.118 377.205,637.974 375.621,637.687 375.334,636.247 378.357,635.813
+ 378.789,637.397 377.205,638.55 378.789,637.687 381.094,638.403 381.379,639.558 382.963,637.542 383.109,637.11 381.525,636.247
+ 380.373,634.663 381.238,633.222 380.807,631.782 381.379,630.198 382.246,628.759 383.973,628.47 382.822,626.886
+ 382.963,625.444 384.693,625.013 381.67,623.718 383.109,623.286 383.398,621.847 381.957,620.839 383.398,620.55 384.838,621.271
+ 386.277,621.126 386.277,619.542 389.156,618.966 389.301,620.55 389.014,621.989 387.572,626.31 387.861,626.743 389.445,627.317
+ 389.014,628.759 389.301,630.198 389.301,631.782 390.74,631.638 391.174,630.198 391.318,628.759 390.74,627.317 390.883,625.733
+ 391.605,622.71 391.174,621.271 391.893,616.663 393.479,617.813 394.055,619.397 393.189,620.839 394.629,620.55 395.205,622.134
+ 395.781,624.87 397.654,621.989 396.646,620.403 398.23,619.829 396.789,619.542 396.213,617.958 396.502,616.374 397.941,615.942
+ 396.502,615.366 395.061,615.509 395.205,614.067 396.789,613.782 395.639,612.198 397.076,611.911 398.662,611.188
+ 401.686,611.622 401.254,614.501 399.814,615.509 401.254,615.653 401.109,617.235 402.547,615.798 402.547,617.524
+ 401.973,618.966 402.262,620.55 402.693,619.11 404.131,618.679 404.131,620.263 404.854,621.702 404.422,619.255 404.564,617.813
+ 403.414,614.79 403.557,611.765 404.998,611.188 406.438,611.478 408.021,612.63 409.318,611.188 410.037,612.63 410.324,611.046
+ 413.061,611.765 412.773,613.206 413.926,611.765 415.365,612.054 416.949,611.911 418.533,612.919 418.533,614.356
+ 417.094,615.653 416.518,617.095 416.518,618.534 415.51,620.118 410.613,621.558 409.174,622.997 412.197,622.71 413.639,622.278
+ 414.213,623.718 415.654,622.997 416.373,624.438 416.373,625.878 417.814,624.726 417.957,624.294 418.389,625.013
+ 419.398,625.013 418.963,623.573 419.254,621.989 420.693,623.286 420.547,621.847 421.99,621.413 422.709,622.134 423.43,622.71
+ 424.148,624.294 422.709,625.589 421.27,625.589 420.117,625.157 419.83,625.302 420.406,625.733 421.127,628.759 420.838,629.478
+ 418.963,631.927 418.822,633.366 419.541,635.382 419.398,636.821 418.822,637.687 417.238,636.966 416.518,635.095
+ 417.094,631.062 415.941,629.333 414.357,627.751 411.189,628.038 409.318,627.894 406.148,626.454 404.854,625.444
+ 403.701,626.886 403.127,628.038 402.838,629.333 401.254,630.341 399.814,630.63 399.094,632.214 398.807,635.235 398.23,636.821
+ 398.807,637.255 399.094,640.421 399.525,640.854 400.102,644.022 401.83,646.899 401.973,648.341 400.678,649.349
+ 399.957,650.935 400.389,652.517 400.389,653.958 400.102,654.245 400.102,655.255 397.223,654.39 395.781,654.532
+ 394.342,653.958 392.613,654.103 392.471,655.542 390.021,658.71 387.861,658.71 385.127,659.142 384.262,657.558 382.678,656.694
+ 377.494,652.517 375.479,652.806 374.613,655.11 375.045,657.271 373.605,656.981 373.174,658.278 370.293,659.573
+ 372.311,660.726 373.029,662.454 373.029,664.899 372.311,667.206 374.182,667.493 373.318,670.087 366.693,669.653
+ 364.963,670.517 363.379,669.653 361.795,670.806 362.23,672.679 363.814,676.134 363.238,680.022 361.365,679.444
+ 358.773,679.589 357.621,681.749 356.758,684.194 356.473,688.948 354.883,690.532 355.75,692.403 357.906,694.71 358.484,697.157
+ 357.477,698.597 356.613,701.046 355.895,704.214 355.461,705.798 354.598,707.524 355.895,710.694 353.445,713.431
+ 350.277,714.581 352.293,719.478 352.293,721.78 353.156,726.103 352.869,728.694 353.014,730.997 350.277,740.214
+ 352.727,741.077 354.598,742.806 355.461,745.397 355.029,747.558 352.293,748.565 350.563,748.565 348.117,749.142
+ 346.533,750.438 345.379,752.597 344.086,755.909 344.086,756.485 343.223,758.067 343.941,759.653 343.223,762.245
+ 343.941,764.403 345.67,767.286 344.949,768.87 345.525,770.31 345.957,773.188 346.82,775.349 348.406,777.511 348.838,778.517
+ 349.414,787.302 351.141,788.454 353.445,789.03 355.605,791.046 356.613,793.349 356.182,794.935 356.037,796.948
+ 355.029,797.093 353.445,797.813 353.156,799.397 354.738,802.421 357.047,805.302 357.477,806.741 357.047,808.325
+ 357.766,811.493 357.334,812.935 356.037,814.948 353.156,816.532 353.73,817.687 354.021,819.124 352.727,820.708
+ 352.869,822.294 354.738,826.038 354.738,831.509 354.598,831.796 353.156,832.661 352.582,831.077 351.285,829.638
+ 350.711,829.638 350.277,829.78 350.133,830.214 350.277,829.493 348.838,829.638 347.398,828.63 346.391,828.917 345.094,827.478
+ 344.66,826.038 344.66,824.454 344.086,823.589 343.652,822.005 342.934,820.565 343.652,819.124 344.23,820.565 344.23,819.124
+ 342.934,818.261 342.357,818.548 342.066,820.132 343.365,822.438 343.365,823.878 341.926,823.157 342.066,823.878
+ 341.641,825.317 343.074,826.612 343.652,828.054 341.641,830.935 341.781,832.661 340.197,832.661 339.906,833.956
+ 338.473,833.093 337.174,832.806 336.453,831.94 337.174,833.093 337.316,834.39 334.438,836.403 335.445,837.845 334.293,838.421
+ 332.854,838.708 333.43,840.294 331.988,841.157 331.701,842.597 330.406,844.038 330.406,845.046 329.109,846.485 326.23,848.935
+ 325.074,849.222 323.35,850.948 321.906,850.661 320.898,852.245 317.879,852.245 314.998,851.669 313.559,852.245 311.973,851.38
+ 312.98,849.796 314.563,848.646 312.838,849.509 309.813,849.222 307.074,848.067 305.926,846.63 304.484,846.63 302.898,845.478
+ 301.75,844.038 301.174,842.454 302.182,839.571 301.461,838.132 302.898,838.997 303.334,840.438 304.342,838.854
+ 306.357,840.294 307.941,840.294 306.502,839.862 307.223,838.421 310.391,836.837 307.074,838.132 305.926,839.571
+ 305.641,837.989 304.197,837.271 306.357,834.39 307.652,833.38 309.238,832.661 307.652,833.093 306.215,833.956 307.074,833.235
+ 305.781,831.796 306.789,829.925 308.373,829.062 306.934,828.772 305.641,831.653 304.197,832.661 304.484,831.077
+ 305.926,830.356 304.342,830.646 302.898,830.067 303.189,831.509 303.189,833.093 301.605,834.103 301.605,832.661
+ 300.883,831.222 301.316,832.661 300.166,834.245 300.021,832.372 298.582,832.948 298.293,832.517 298.293,830.935
+ 298.006,830.067 299.59,829.349 300.166,827.765 300.166,829.349 298.869,830.788 299.156,830.788 300.598,829.78 300.883,827.909
+ 302.473,828.194 303.477,826.325 304.918,826.325 305.926,824.886 304.484,826.325 303.047,826.038 302.758,826.181
+ 301.174,825.462 301.895,823.878 303.477,822.726 303.334,822.438 304.197,820.997 305.641,820.421 304.197,819.558
+ 306.066,816.677 307.365,815.093 308.23,816.677 307.941,819.7 308.518,816.677 309.238,815.235 310.678,813.94 312.262,813.509
+ 310.678,813.796 311.109,812.214 310.246,813.796 308.809,814.806 308.66,813.364 307.223,814.806 305.641,815.813
+ 304.629,817.397 303.189,818.837 302.613,820.421 302.758,822.005 302.473,822.581 301.605,822.726 301.174,822.005
+ 301.316,820.565 299.879,817.54 299.445,819.124 298.582,820.708 297.141,819.271 296.277,817.829 297.43,814.806 298.293,816.245
+ 299.73,815.813 299.879,815.524 300.453,815.093 300.453,814.372 300.313,812.788 300.738,811.204 298.869,811.78 298.148,813.364
+ 296.563,814.229 295.27,812.646 294.693,811.204 296.133,811.204 297.43,812.646 296.998,809.765 298.438,809.046 296.998,809.046
+ 296.422,810.054 294.693,809.909 293.973,808.47 294.838,809.188 295.414,807.749 294.262,806.31 295.701,806.165 297.43,806.741
+ 298.869,805.735 301.895,804.726 305.641,804.87 306.789,803.429 308.23,803.571 309.813,804.294 310.246,805.878 309.238,807.317
+ 310.678,806.022 311.398,807.462 310.391,804.581 311.828,802.997 313.414,803.571 313.988,802.132 315.43,801.271
+ 313.988,801.845 312.98,801.989 312.547,799.829 313.27,798.245 312.262,799.687 312.406,802.854 311.828,802.997 310.965,803.286
+ 309.525,803.286 310.678,801.7 309.67,802.997 306.502,802.708 307.074,801.271 307.223,799.829 306.066,801.413 306.066,802.997
+ 304.773,804.438 303.189,803.862 301.605,803.716 298.582,804.726 297.141,805.878 295.27,805.157 294.838,803.716
+ 293.398,802.997 295.129,801.845 "/>
+ <polyline id="polyline2181" fill="#FFFFFF" points="295.129,801.845 296.422,801.271 298.006,801.124 295.129,801.845 "/>
+ <polyline id="polyline2183" fill="#8FB5BE" points="299.445,815.813 298.006,814.948 298.148,813.509 299.445,812.067
+ 300.313,813.653 300.453,814.517 299.879,815.524 299.445,815.813 "/>
+ <polyline id="polyline2185" fill="#8FB5BE" points="299.879,815.524 300.453,814.517 300.453,815.093 299.879,815.524 "/>
+ <polyline id="polyline2187" fill="#B28765" points="301.75,935.188 302.473,934.899 303.189,934.757 306.066,933.173
+ 308.66,930.294 309.525,928.708 312.406,926.692 314.711,925.829 317.301,925.54 321.621,924.101 323.205,924.532 324.215,926.118
+ 326.949,926.837 327.094,927.556 327.379,930.87 326.518,933.173 326.518,935.188 311.686,935.188 312.262,934.899 310.82,935.188
+ 309.379,935.046 308.518,932.021 307.074,932.454 305.641,933.892 305.063,934.181 305.35,934.47 305.926,935.188 301.75,935.188
+ "/>
+ <polyline id="polyline2189" fill="#FFFFFF" points="304.484,826.325 305.926,824.886 304.918,826.325 304.484,826.325 "/>
+ <polyline id="polyline2191" fill="#FFFFFF" points="305.35,934.47 305.063,934.181 305.641,933.892 307.074,932.454
+ 308.518,932.021 309.379,935.046 310.82,935.188 305.926,935.188 305.35,934.47 "/>
+ <polyline id="polyline2193" fill="#B28765" points="310.82,935.188 312.262,934.899 311.686,935.188 310.82,935.188 "/>
+ <polyline id="polyline2195" fill="#FFFFFF" points="311.828,802.997 312.406,802.854 312.262,799.687 313.27,798.245
+ 312.547,799.829 312.98,801.989 313.988,801.845 315.43,801.271 313.988,802.132 313.414,803.571 311.828,802.997 "/>
+ <polyline id="polyline2197" fill="#CCE83A" points="326.518,935.188 326.518,933.173 327.379,930.87 327.094,927.556
+ 326.949,926.837 328.391,925.829 327.67,925.54 326.086,925.54 324.645,924.964 324.645,923.524 326.086,920.646 327.525,919.78
+ 328.965,919.78 333.285,918.63 336.166,920.933 335.879,922.372 337.316,922.948 337.75,921.509 336.883,920.067 338.324,920.067
+ 339.766,920.933 339.621,922.372 339.766,923.093 340.055,923.38 339.906,922.229 340.197,920.788 339.047,918.054
+ 339.766,915.028 342.215,915.462 345.238,914.454 346.678,914.308 349.414,917.188 350.854,918.054 353.014,918.485
+ 353.014,918.196 350.277,917.622 349.414,916.181 346.533,914.021 344.086,914.165 342.502,913.589 342.066,912.149 343.51,911.86
+ 342.645,910.421 341.35,910.421 341.35,908.981 341.063,908.403 338.898,908.548 338.898,907.11 341.781,905.956 342.066,904.517
+ 340.629,903.509 339.334,902.067 338.037,900.485 337.895,899.478 335.014,900.054 334.582,901.493 334.438,900.054
+ 334.727,898.038 335.156,898.038 335.014,899.478 336.453,899.622 338.037,899.333 338.037,899.046 338.758,899.188
+ 339.766,898.757 340.342,898.757 343.365,899.046 344.66,899.622 345.525,899.046 345.813,899.188 347.254,898.899
+ 348.838,899.046 350.277,899.333 351.285,899.765 351.57,899.909 351.57,900.341 351.141,900.772 351.715,900.485 352.148,901.493
+ 352.148,902.933 350.711,903.94 352.869,903.364 354.313,903.509 353.879,904.948 354.313,905.524 354.883,904.085
+ 356.037,903.653 360.502,904.806 361.795,903.222 363.379,902.788 363.67,903.077 363.67,906.101 360.934,908.981 362.662,909.845
+ 364.102,908.837 365.398,908.548 366.838,909.413 368.277,909.702 368.709,907.685 369.285,906.245 370.725,905.235 373.75,903.94
+ 373.893,904.372 373.893,904.517 374.324,905.38 373.893,904.372 374.471,903.077 375.908,901.638 376.773,898.757
+ 380.086,899.046 378.646,899.333 377.061,900.054 376.486,900.917 377.061,902.356 377.35,900.917 377.781,900.054
+ 379.223,899.622 380.662,899.765 382.102,898.325 383.541,900.341 385.127,900.63 388.006,902.356 388.293,901.638 389.732,900.63
+ 389.732,900.917 391.893,903.364 391.893,904.948 392.037,905.093 392.758,905.524 397.076,906.388 400.533,912.437
+ 400.246,914.165 400.389,915.462 400.102,916.325 399.094,917.478 399.094,919.349 403.27,921.653 404.854,922.085
+ 405.141,922.517 405.43,923.524 405.141,924.532 405.141,925.972 405.572,926.548 407.301,927.269 407.301,928.708
+ 408.453,929.716 408.166,931.302 408.453,931.589 408.453,932.021 407.732,933.462 408.453,934.47 409.029,935.188
+ 326.518,935.188 "/>
+ <polyline id="polyline2199" fill="#99D6AA" points="332.422,870.964 332.422,870.821 333.43,869.524 333.141,868.517
+ 334.582,867.796 335.301,869.235 334.869,870.677 333.715,871.685 332.422,870.964 "/>
+ <polyline id="polyline2201" points="332.422,870.964 332.277,870.964 332.422,870.821 332.422,870.964 "/>
+
+ <polygon id="polygon2203" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 332.422,870.964 332.277,870.964 332.422,870.821 "/>
+ <polyline id="polyline2205" fill="#99D6AA" points="332.422,870.964 332.563,871.397 331.559,871.972 332.998,871.54
+ 332.998,873.269 331.414,872.118 329.973,870.677 329.828,869.235 332.133,864.917 332.711,864.63 334.148,864.772 335.59,863.622
+ 337.605,863.622 339.047,863.188 340.484,862.038 342.215,857.716 343.365,855.556 345.238,855.124 346.678,853.974
+ 347.828,852.532 347.828,855.413 349.129,856.853 349.129,858.437 349.701,860.021 348.693,861.462 348.547,863.046
+ 347.109,864.194 345.094,863.188 344.518,863.765 343.074,863.478 338.758,865.638 337.174,865.062 337.029,865.493
+ 335.59,866.067 334.148,867.222 332.854,868.517 331.988,869.956 332.422,870.821 332.277,870.964 332.422,870.964 "/>
+ <polyline id="polyline2207" fill="#8FB5BE" points="335.879,738.772 335.879,738.63 336.021,738.485 335.879,738.772 "/>
+ <polyline id="polyline2209" fill="#8FB5BE" points="336.021,738.485 336.313,738.194 337.75,737.046 338.898,736.612
+ 340.484,736.757 338.898,736.757 337.461,737.478 336.021,738.485 "/>
+ <polyline id="polyline2211" fill="#99D6AA" points="338.037,899.046 338.037,898.325 337.605,897.749 337.461,896.165
+ 336.021,896.886 335.59,895.446 337.029,895.589 337.029,892.708 336.738,892.132 335.301,890.837 333.715,890.261 332.998,889.11
+ 333.285,890.694 331.701,890.118 331.27,888.677 331.414,887.093 330.693,884.356 332.277,885.222 333.141,884.067 332.133,882.63
+ 330.547,881.188 330.406,882.772 329.828,881.333 329.973,879.749 329.109,873.845 329.254,872.403 330.547,873.845
+ 332.998,873.413 334.438,874.708 334.869,873.556 334.727,871.972 335.301,870.532 336.738,869.235 338.324,870.101 337.75,871.54
+ 339.189,871.397 340.197,872.981 339.766,870.388 338.324,869.093 338.037,867.653 338.473,866.214 338.758,865.78
+ 340.197,865.062 341.781,865.638 342.934,864.194 344.518,863.765 345.094,863.333 346.533,864.194 347.109,864.194
+ 347.973,864.341 348.547,867.222 348.117,868.661 347.398,868.806 344.809,870.388 346.246,869.813 347.398,869.093
+ 347.398,868.806 347.828,868.948 349.27,868.661 349.559,869.956 348.693,871.253 348.547,871.397 348.547,872.548
+ 348.693,871.253 348.693,871.11 350.277,870.964 351.715,871.253 353.156,870.677 354.598,870.532 355.75,871.972 355.605,873.556
+ 354.738,874.997 354.598,876.437 353.156,875.716 353.156,877.157 352.869,877.589 351.43,876.87 352.006,875.429 350.422,876.149
+ 349.846,876.87 350.277,878.31 350.563,881.333 348.406,881.909 348.838,884.646 347.398,885.364 344.949,885.222 344.949,885.509
+ 346.391,886.229 346.533,887.813 344.949,888.532 347.254,892.708 345.813,893.716 346.102,895.157 347.686,896.021
+ 348.547,896.886 348.838,898.47 346.965,897.604 345.813,899.188 345.525,899.046 344.66,899.622 343.365,899.046 340.342,898.757
+ 339.766,898.757 338.758,899.188 338.037,899.046 "/>
+ <polyline id="polyline2213" fill="#FFFFFF" points="344.518,863.765 345.094,863.188 347.109,864.194 346.533,864.194
+ 345.094,863.333 344.518,863.765 "/>
+ <polyline id="polyline2215" fill="#8FB5BE" points="344.949,715.444 345.238,715.302 345.67,715.589 344.949,715.444 "/>
+ <polyline id="polyline2217" fill="#FFFFFF" points="347.398,868.806 347.398,869.093 346.246,869.813 344.809,870.388
+ 347.398,868.806 "/>
+ <polyline id="polyline2219" fill="#FFFFFF" points="348.693,871.253 348.547,872.548 348.547,871.397 348.693,871.253 "/>
+ <polyline id="polyline2221" points="349.27,683.188 349.414,683.188 349.988,683.622 349.414,683.909 349.27,683.188 "/>
+
+ <polygon id="polygon2223" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 349.27,683.188 349.414,683.188 349.988,683.622 349.414,683.909 "/>
+ <polyline id="polyline2225" fill="#8FB5BE" points="349.414,683.188 350.854,682.899 349.988,683.622 349.414,683.188 "/>
+ <polyline id="polyline2227" fill="#FB9A85" points="350.133,830.214 350.277,829.78 350.711,829.638 351.285,829.638
+ 352.582,831.077 353.156,832.661 354.598,831.796 354.738,831.509 354.738,826.038 352.869,822.294 352.727,820.708
+ 354.021,819.124 353.73,817.687 353.156,816.532 356.037,814.948 357.334,812.935 357.766,811.493 357.047,808.325
+ 357.477,806.741 357.047,805.302 354.738,802.421 353.156,799.397 353.445,797.813 355.029,797.093 356.037,796.948
+ 356.182,794.935 356.613,793.349 355.605,791.046 353.445,789.03 351.141,788.454 349.414,787.302 348.838,778.517
+ 348.406,777.511 346.82,775.349 345.957,773.188 345.525,770.31 344.949,768.87 345.67,767.286 343.941,764.403 343.223,762.245
+ 343.941,759.653 343.223,758.067 344.086,756.485 344.086,755.909 345.379,752.597 346.533,750.438 348.117,749.142
+ 350.563,748.565 352.293,748.565 355.029,747.558 355.461,745.397 354.598,742.806 352.727,741.077 350.277,740.214
+ 353.014,730.997 352.869,728.694 353.156,726.103 352.293,721.78 352.293,719.478 350.277,714.581 353.445,713.431
+ 355.895,710.694 354.598,707.524 355.461,705.798 355.895,704.214 356.613,701.046 357.477,698.597 358.484,697.157
+ 357.906,694.71 355.75,692.403 354.883,690.532 356.473,688.948 356.758,684.194 357.621,681.749 358.773,679.589 361.365,679.444
+ 363.238,680.022 363.814,676.134 362.23,672.679 361.795,670.806 363.379,669.653 364.963,670.517 366.693,669.653
+ 373.318,670.087 374.182,667.493 372.311,667.206 373.029,664.899 373.029,662.454 372.311,660.726 370.293,659.573
+ 373.174,658.278 374.9,658.421 375.334,659.431 376.773,659.718 379.654,661.302 382.822,662.31 384.262,663.173 385.846,663.173
+ 385.846,662.886 388.582,663.173 391.605,663.894 392.758,665.478 394.197,665.765 395.639,666.919 397.076,667.638
+ 397.223,668.214 396.789,669.653 398.086,672.245 398.373,673.829 398.949,675.271 400.533,674.981 401.973,676.278
+ 401.254,677.718 401.541,679.302 406.438,683.333 406.438,684.772 407.014,686.356 407.156,687.94 406.725,689.382
+ 407.877,691.974 410.9,694.134 412.197,695.718 413.781,697.157 414.357,698.022 414.068,697.733 412.486,699.03 411.045,698.741
+ 409.605,699.173 409.75,700.612 407.732,700.038 409.174,701.333 407.732,701.909 404.709,700.757 405.141,702.194
+ 403.701,702.483 402.98,703.927 403.99,705.222 403.846,706.661 402.262,706.374 401.254,708.245 402.693,708.532 402.262,709.974
+ 400.822,710.263 399.67,711.847 400.246,712.134 401.686,711.7 401.109,713.286 402.117,715.878 400.822,718.612 400.963,720.194
+ 401.83,721.638 401.541,722.356 402.98,723.364 404.422,723.364 405.43,726.39 403.701,730.708 403.557,732.149 403.846,733.735
+ 403.557,736.757 401.973,737.046 401.973,738.63 401.109,738.341 400.822,740.067 398.518,743.235 398.518,744.679
+ 397.076,743.956 397.223,745.397 395.781,745.11 395.35,745.687 395.639,747.124 395.061,748.565 395.061,750.005 393.479,749.286
+ 393.908,750.149 392.471,750.438 391.75,753.317 390.598,754.757 392.037,754.612 392.471,756.054 390.883,756.63 391.029,758.067
+ 389.59,758.646 386.854,756.054 386.277,755.046 386.709,756.485 388.006,757.78 389.59,759.94 389.877,762.966 388.438,764.55
+ 386.422,764.263 386.564,765.124 386.422,765.124 386.564,765.413 386.564,765.7 387.285,767.718 388.869,768.149 389.156,771.604
+ 388.869,773.046 389.156,774.485 389.877,776.067 391.318,777.364 389.877,776.935 388.438,777.222 388.725,780.103
+ 389.156,780.245 389.732,781.687 391.029,783.271 390.453,784.132 391.029,786.581 391.461,788.022 393.189,790.899
+ 393.621,792.341 395.061,792.917 397.223,792.772 398.086,794.356 399.094,792.917 400.533,792.485 401.541,794.067
+ 406.148,795.796 405.861,797.235 407.014,797.813 407.877,797.524 409.318,797.524 410.9,799.974 412.342,801.124 410.9,800.261
+ 412.342,801.558 412.342,802.997 411.045,804.005 410.758,805.589 409.029,808.47 408.453,809.909 406.869,809.478
+ 407.445,810.917 408.883,810.194 410.471,810.341 409.893,808.757 411.479,809.478 411.766,810.917 410.324,810.917
+ 411.908,811.062 410.9,811.638 409.461,811.925 410.9,813.077 409.461,814.085 408.74,815.235 408.453,816.677 407.301,818.261
+ 407.59,819.7 406.293,818.261 406.006,816.677 404.709,815.235 405.572,816.677 404.277,819.558 405.141,821.142 403.701,821.286
+ 403.127,822.726 401.686,822.438 402.547,823.878 401.109,825.173 397.365,825.604 395.781,826.899 397.223,826.038
+ 398.807,825.749 401.83,827.188 400.246,828.485 397.223,828.485 399.67,828.917 401.109,829.493 400.822,830.935 402.262,832.229
+ 402.547,833.669 401.254,835.397 402.693,836.694 400.389,836.981 403.127,839.142 403.127,840.726 403.846,843.604
+ 403.701,845.333 403.127,846.772 403.414,846.917 403.846,848.356 404.564,848.935 404.709,849.364 404.131,850.948
+ 404.564,852.388 405.43,853.829 404.131,856.708 404.131,858.294 403.846,858.724 403.557,861.749 403.846,862.899 403.27,864.341
+ 401.83,865.349 400.389,864.917 400.246,865.349 397.223,866.214 395.781,866.933 394.342,867.077 392.324,867.796
+ 392.471,868.948 392.037,870.388 390.598,869.956 388.725,873.124 388.725,874.708 389.156,876.149 390.598,877.589
+ 390.883,879.03 390.311,880.47 389.59,881.188 388.006,880.899 386.422,881.188 382.678,883.349 381.238,883.638 379.654,883.638
+ 378.213,882.917 377.35,881.333 378.213,879.892 377.061,878.454 376.342,877.013 374.9,875.862 371.732,872.261 370.869,870.821
+ 373.75,871.253 373.318,870.101 371.877,868.948 372.598,867.509 374.037,867.364 374.037,865.925 372.883,864.485
+ 372.166,864.772 370.725,863.765 369.572,862.181 365.83,859.013 364.822,857.429 363.67,854.548 362.23,854.981 361.51,853.54
+ 361.365,851.956 360.357,850.229 358.918,850.229 359.926,848.788 358.342,847.78 358.918,843.462 358.629,840.438
+ 357.047,841.157 355.605,841.444 355.605,840.005 355.461,841.444 354.021,841.013 354.453,839.571 353.014,840.149
+ 351.43,834.245 349.846,831.364 350.133,830.214 "/>
+ <polyline id="polyline2229" fill="#FFFF7F" points="366.117,6.246 366.693,5.816 367.127,5.816 368.709,6.822 366.117,6.246 "/>
+ <polyline id="polyline2231" fill="#FFFF7F" points="368.709,6.822 370.148,6.534 371.59,7.83 373.75,8.984 376.773,11.574
+ 376.629,11.72 373.605,9.272 369.141,6.967 368.709,6.822 "/>
+ <polyline id="polyline2233" fill="#4DB47E" points="373.174,658.278 373.605,656.981 375.045,657.271 374.613,655.11
+ 375.479,652.806 377.494,652.517 382.678,656.694 384.262,657.558 385.127,659.142 387.861,658.71 390.021,658.71 392.471,655.542
+ 392.613,654.103 394.342,653.958 395.781,654.532 397.223,654.39 400.102,655.255 400.102,654.245 400.389,653.958
+ 400.389,652.517 399.957,650.935 400.678,649.349 401.973,648.341 401.83,646.899 400.102,644.022 399.525,640.854
+ 399.094,640.421 398.807,637.255 398.23,636.821 398.807,635.235 399.094,632.214 399.814,630.63 401.254,630.341 402.838,629.333
+ 403.127,628.038 403.701,626.886 404.854,625.444 406.148,626.454 409.318,627.894 411.189,628.038 414.357,627.751
+ 415.941,629.333 417.094,631.062 416.518,635.095 417.238,636.966 418.822,637.687 417.814,639.126 416.949,640.997
+ 415.51,640.997 414.789,639.413 415.654,637.974 415.223,636.534 414.357,635.095 414.789,633.509 413.639,635.095 413.35,636.534
+ 411.908,636.534 412.773,637.974 410.9,640.997 411.045,641.286 410.613,642.87 409.893,644.31 411.334,644.165 412.918,644.741
+ 412.197,645.604 413.781,645.317 414.068,645.749 413.639,644.31 415.223,644.31 415.365,642.87 413.926,642.726 415.51,642.581
+ 417.094,641.431 416.807,641.142 418.533,640.421 419.541,642.005 419.541,644.886 419.83,646.325 422.998,649.638
+ 424.725,650.067 428.037,649.78 432.502,652.661 434.518,653.095 434.807,653.382 435.67,656.403 435.379,657.847 435.238,660.87
+ 435.379,666.483 436.246,667.927 439.27,669.653 441.141,671.095 443.445,673.542 446.471,675.271 450.068,678.726
+ 451.654,680.741 450.789,681.173 449.494,682.757 450.646,684.194 451.941,687.077 451.795,688.517 452.373,688.806
+ 453.814,688.374 454.389,689.813 453.525,691.255 453.814,692.118 455.398,693.558 456.838,694.278 457.99,693.558 459.43,694.134
+ 460.006,695.718 459.572,696.438 461.445,698.886 464.324,698.886 465.766,699.173 466.918,700.612 467.781,702.054
+ 467.205,706.661 466.342,708.103 466.486,708.39 468.646,709.255 470.084,709.397 471.67,709.974 474.547,709.974 476.131,710.55
+ 477.572,710.55 482.037,712.565 483.479,713.431 483.766,716.31 484.342,717.894 484.486,720.772 483.766,725.235 483.334,726.679
+ 482.037,737.478 482.037,738.917 481.75,740.356 481.029,741.511 481.029,743.095 480.453,746.263 479.156,749.142
+ 478.725,750.726 478.725,752.31 478.293,752.31 477.861,752.886 475.99,760.229 475.846,761.235 475.99,762.245 474.547,762.966
+ 472.963,763.54 471.525,763.54 471.238,763.253 470.23,764.837 468.789,765.989 467.494,767.431 466.486,767.142 466.629,768.581
+ 463.75,769.735 464.613,771.173 463.174,771.317 463.75,772.757 462.311,773.046 461.156,771.604 460.869,773.333 459.285,774.63
+ 458.564,776.214 457.127,776.501 455.973,778.085 454.533,778.948 454.822,780.39 454.678,781.253 453.238,781.974
+ 453.094,780.679 449.781,783.558 449.205,784.854 446.182,786.438 446.9,784.997 446.9,784.708 446.613,784.854 445.461,788.31
+ 444.021,789.03 444.883,787.589 445.461,786.005 445.461,785.429 445.029,786.87 444.311,785.862 444.74,785.716 444.021,784.997
+ 442.582,784.997 442.582,784.565 440.998,783.413 440.998,783.124 441.141,782.55 440.998,782.694 440.854,781.829
+ 439.846,783.413 438.406,784.132 437.398,783.7 437.541,782.261 436.389,782.403 436.102,782.55 434.23,782.837 432.646,782.694
+ 432.068,782.261 430.629,782.981 429.189,781.397 428.324,782.694 428.324,782.261 427.605,782.694 426.166,781.54
+ 426.021,780.103 425.014,778.661 425.014,777.222 424.006,774.194 424.582,772.757 423.861,771.317 423.572,769.735
+ 421.99,769.302 422.277,767.862 423.861,767.862 421.99,766.565 419.973,763.687 417.957,762.39 417.238,757.927 416.807,757.638
+ 415.795,756.194 414.789,756.054 414.213,754.612 412.918,753.173 412.918,750.149 413.781,748.565 413.639,745.54
+ 415.076,745.687 413.639,744.679 412.629,743.235 412.629,742.229 414.213,742.806 414.646,742.806 416.086,741.94
+ 415.795,742.372 417.238,741.364 417.525,739.927 418.246,739.349 416.23,737.622 417.67,737.765 417.238,734.886 417.67,733.302
+ 419.398,733.444 419.109,732.005 419.541,730.421 419.398,728.981 419.973,729.124 421.414,727.829 420.547,726.103
+ 421.99,725.382 421.701,723.511 421.99,723.077 422.709,718.47 423.861,715.735 423.43,714.149 423.715,712.708 423.285,711.271
+ 424.438,709.687 425.445,708.821 426.883,708.245 428.471,708.532 426.883,707.382 427.75,705.653 426.311,704.646
+ 425.156,703.062 424.438,701.765 424.148,700.325 422.998,698.886 420.547,698.165 419.109,698.454 417.525,698.022
+ 416.807,697.302 416.807,696.87 416.662,697.157 414.357,698.022 413.781,697.157 412.197,695.718 410.9,694.134 407.877,691.974
+ 406.725,689.382 407.156,687.94 407.014,686.356 406.438,684.772 406.438,683.333 401.541,679.302 401.254,677.718
+ 401.973,676.278 400.533,674.981 398.949,675.271 398.373,673.829 398.086,672.245 396.789,669.653 397.223,668.214
+ 397.076,667.638 395.639,666.919 394.197,665.765 392.758,665.478 391.605,663.894 388.582,663.173 385.846,662.886
+ 385.846,663.173 384.262,663.173 382.822,662.31 379.654,661.302 376.773,659.718 375.334,659.431 374.9,658.421 373.174,658.278
+ "/>
+ <polyline id="polyline2235" fill="#FFFFFF" points="373.893,904.372 374.324,905.38 373.893,904.517 373.893,904.372 "/>
+ <polyline id="polyline2237" fill="#FFFF7F" points="375.766,13.158 375.334,12.872 376.486,12.15 375.766,13.158 "/>
+ <polyline id="polyline2239" fill="#FFFF7F" points="375.766,13.158 377.205,13.592 378.934,13.734 380.373,14.312 381.814,13.734
+ 383.398,13.879 383.109,14.312 381.67,14.167 379.941,15.318 378.502,14.024 377.061,13.879 375.766,13.158 "/>
+ <polyline id="polyline2241" fill="#FFFF7F" points="376.486,12.15 376.629,11.72 376.773,11.862 376.486,12.15 "/>
+ <polyline id="polyline2243" fill="#FFFF7F" points="383.398,13.734 383.398,12.295 384.406,10.856 385.846,10.278 387.285,8.694
+ 388.006,7.256 389.59,6.534 392.613,6.967 395.639,6.68 397.076,7.83 398.518,7.543 398.518,6.104 397.654,4.662 399.238,3.942
+ 400.678,3.654 402.262,3.799 405.285,6.246 406.725,6.392 408.166,6.104 409.75,6.822 408.883,6.68 405.572,6.534 402.262,4.088
+ 400.822,3.942 399.238,4.232 398.518,5.526 399.094,6.534 398.662,8.12 397.223,8.12 395.781,7.11 391.318,7.11 389.732,6.68
+ 388.293,7.256 387.572,8.84 386.277,10.278 384.693,11.144 383.398,13.734 "/>
+ <polyline id="polyline2245" points="386.422,765.124 386.564,765.124 386.564,765.413 386.422,765.124 "/>
+
+ <polygon id="polygon2247" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 386.422,765.124 386.564,765.124 386.564,765.413 "/>
+ <polyline id="polyline2249" fill="#FB9A85" points="386.564,765.413 386.564,765.124 387.285,765.124 387.141,766.708
+ 386.564,765.413 "/>
+ <polyline id="polyline2251" fill="#CCE83A" points="392.037,905.093 392.9,904.372 392.471,902.788 393.908,903.222
+ 392.471,901.638 391.029,902.214 391.318,901.062 392.9,901.493 395.781,902.933 395.926,903.653 395.926,903.94 395.35,903.94
+ 392.471,905.235 392.037,905.093 "/>
+ <polyline id="polyline2253" fill="#7FC643" points="395.781,902.933 397.365,902.788 400.246,900.341 404.854,897.317
+ 410.758,893.862 413.639,892.565 415.365,887.956 416.807,886.806 418.389,886.085 421.127,883.204 422.564,882.054
+ 424.006,881.478 428.324,878.886 431.35,877.878 435.67,878.597 437.109,879.749 435.67,878.741 434.23,878.454 432.646,879.173
+ 434.086,880.181 435.238,881.909 436.678,883.062 438.117,883.349 439.701,883.062 441.572,882.485 444.453,880.612
+ 445.461,879.173 445.461,879.03 445.75,879.173 444.74,880.612 442.582,882.485 442.869,883.062 443.445,882.917 446.324,880.47
+ 447.334,878.886 447.766,878.886 456.406,876.87 461.877,875.286 468.357,872.694 475.701,869.093 476.277,868.085
+ 480.311,868.806 481.029,868.661 482.613,869.235 484.055,870.245 484.918,872.261 488.807,877.444 491.109,879.462
+ 493.846,882.341 493.846,882.917 494.854,883.925 495.141,884.933 495.715,885.653 496.582,887.669 496.293,889.11
+ 493.414,891.989 492.693,893.429 491.973,897.462 492.547,898.038 493.99,897.749 495.572,897.749 497.877,898.325
+ 498.598,900.054 499.318,903.077 499.029,903.364 499.459,904.806 500.471,906.245 500.9,906.388 502.486,907.972 503.494,909.556
+ 506.086,911.14 507.525,912.437 509.109,913.302 510.547,913.446 510.547,913.878 509.109,915.317 511.557,916.899 511.99,917.622
+ 512.131,918.63 511.846,919.638 509.109,922.517 508.533,924.388 506.662,927.989 504.934,933.749 504.502,934.181 504.502,934.47
+ 504.357,935.188 409.029,935.188 408.453,934.47 407.732,933.462 408.453,932.021 408.453,931.589 408.166,931.302
+ 408.453,929.716 407.301,928.708 407.301,927.269 405.572,926.548 405.141,925.972 405.141,924.532 405.43,923.524
+ 405.141,922.517 404.854,922.085 403.27,921.653 399.094,919.349 399.094,917.478 400.102,916.325 400.389,915.462
+ 400.246,914.165 400.533,912.437 397.076,906.388 397.795,905.956 399.238,906.245 400.678,907.11 399.814,904.661
+ 400.102,903.222 397.365,903.364 397.795,903.509 397.365,904.517 395.926,903.94 395.926,903.653 395.781,902.933 "/>
+ <polyline id="polyline2255" fill="#FFFF7F" points="409.75,6.822 411.334,6.967 412.629,7.83 412.055,7.83 410.471,6.967
+ 409.75,6.822 "/>
+ <polyline id="polyline2257" fill="#4DB47E" points="411.045,641.286 410.9,640.997 412.773,637.974 411.908,636.534
+ 413.35,636.534 413.639,635.095 414.789,633.509 414.357,635.095 415.223,636.534 415.654,637.974 414.789,639.413 415.51,640.997
+ 416.949,640.997 416.807,641.142 417.094,641.431 415.51,642.581 413.926,642.726 415.365,642.87 415.223,644.31 413.639,644.31
+ 414.068,645.749 413.781,645.317 412.197,645.604 412.918,644.741 411.334,644.165 409.893,644.31 410.613,642.87 411.045,641.286
+ "/>
+ <polyline id="polyline2259" fill="#FFFF7F" points="412.629,7.83 413.205,7.83 412.773,7.976 412.629,7.83 "/>
+ <polyline id="polyline2261" fill="#FFFF7F" points="413.205,7.83 413.926,7.543 413.494,7.83 413.205,7.83 "/>
+ <polyline id="polyline2263" fill="#FFFF7F" points="416.807,641.142 416.949,640.997 417.814,639.126 418.822,637.687
+ 419.398,636.821 419.541,635.382 418.822,633.366 418.963,631.927 420.838,629.478 421.127,628.759 420.406,625.733
+ 419.83,625.302 420.117,625.157 421.27,625.589 422.709,625.589 424.148,624.294 423.43,622.71 422.709,622.134 421.99,621.413
+ 423.861,620.839 425.301,620.839 425.732,622.421 426.021,620.839 427.461,619.829 426.021,618.534 427.029,616.95
+ 426.021,615.509 427.461,615.798 428.9,615.653 430.486,616.229 431.926,615.366 433.365,615.222 434.23,616.663 433.223,618.103
+ 430.197,619.11 428.758,618.534 428.758,619.974 430.197,619.974 432.213,620.55 432.068,621.989 432.646,620.55 434.086,619.542
+ 435.525,619.974 436.102,621.413 436.389,619.829 437.109,618.39 438.547,618.966 438.693,620.403 440.277,621.702
+ 439.846,623.142 438.98,624.581 439.99,626.165 439.27,624.726 440.131,623.286 440.564,621.847 439.99,620.403 439.99,618.821
+ 441.43,617.813 443.014,617.095 444.453,616.95 448.629,615.653 448.486,614.214 451.51,613.349 454.102,613.206 455.541,613.495
+ 457.127,613.062 461.59,613.062 463.174,613.349 466.055,613.206 467.639,613.495 469.076,614.214 470.662,614.067
+ 472.102,615.079 473.686,613.638 475.127,613.495 478.148,613.927 481.174,613.782 481.893,613.349 481.75,611.911
+ 483.334,612.772 485.35,612.919 486.789,613.638 488.23,612.919 489.814,613.062 491.254,612.483 493.99,615.222 495.572,615.942
+ 496.582,617.524 498.166,616.95 499.605,618.39 501.189,621.126 501.766,622.565 501.908,627.03 502.342,628.47 502.342,629.911
+ 501.479,634.374 499.605,637.829 499.174,639.271 497.877,640.71 496.869,642.294 495.43,643.733 492.406,645.462 489.525,646.47
+ 488.086,646.325 486.502,646.614 484.055,647.765 482.613,648.772 476.422,651.364 473.541,651.511 471.525,651.077
+ 470.084,652.374 468.502,653.235 468.502,651.653 466.918,652.374 465.479,652.229 464.471,653.671 462.883,652.948
+ 461.445,653.095 461.732,654.532 460.293,654.532 457.27,653.813 455.83,653.235 455.686,651.653 451.365,653.382 449.639,654.39
+ 451.223,653.958 451.654,653.524 453.238,654.103 454.678,654.821 454.822,656.263 457.701,656.118 459.285,656.981
+ 460.725,657.271 459.861,658.71 461.156,658.134 462.021,656.839 463.461,657.413 461.877,657.989 462.166,658.134
+ 463.605,658.278 465.189,657.271 466.055,659.142 464.758,660.726 466.629,659.718 469.51,658.854 470.949,659.142
+ 472.533,658.997 473.973,659.286 476.998,660.438 478.438,661.733 478.293,663.173 479.59,664.612 479.877,666.194
+ 479.445,667.638 479.732,669.077 482.613,670.948 484.055,671.235 484.773,672.679 484.773,673.11 485.35,672.966 488.373,674.55
+ 488.518,674.694 487.795,676.278 489.379,676.997 489.525,678.581 492.98,679.157 494.564,679.013 495.715,677.573
+ 497.303,676.854 498.74,677.718 500.324,677.142 501.766,677.431 502.773,678.87 506.518,678.438 507.957,677.286 509.398,676.71
+ 510.98,677.142 512.422,675.7 511.99,674.118 513.861,672.39 513.572,670.948 511.99,669.364 510.547,669.077 510.547,667.638
+ 508.963,667.493 507.525,666.919 507.525,668.503 506.23,669.94 504.646,670.229 498.74,668.067 497.303,668.067 495.861,667.062
+ 497.014,664.181 496.006,662.454 495.715,661.013 497.156,660.149 498.74,659.718 501.766,659.718 503.494,660.581
+ 505.076,660.438 506.518,659.431 506.518,661.013 507.238,662.454 507.67,661.013 507.67,659.573 510.693,658.134 513.715,657.7
+ 515.303,657.7 516.74,657.271 517.893,655.829 518.324,654.532 519.766,654.532 522.211,653.235 524.662,652.661 526.102,652.806
+ 527.686,652.517 529.125,651.364 532.006,650.214 533.445,651.222 533.156,652.661 534.453,654.245 535.029,657.126
+ 535.605,658.71 537.189,659.142 538.627,658.421 540.213,658.565 541.223,660.149 542.662,660.438 545.541,663.03 547.125,662.886
+ 548.564,661.878 550.006,661.444 551.445,662.31 553.029,662.165 554.471,661.589 560.373,660.87 561.957,660.87 563.398,661.302
+ 564.98,661.013 569.445,657.989 570.883,658.134 572.324,657.558 575.35,659.142 573.908,657.989 572.037,657.271 570.598,657.7
+ 569.014,657.558 567.572,658.997 564.547,660.87 563.109,660.581 560.084,660.581 554.182,661.302 552.598,661.878
+ 551.156,662.022 549.715,661.013 546.693,662.597 545.252,662.022 544.102,660.581 541.076,659.573 540.213,658.134
+ 538.773,658.134 537.334,658.854 535.75,658.421 534.883,655.397 534.74,653.958 533.445,652.374 533.877,651.077 532.438,650.067
+ 532.006,650.214 529.414,650.79 527.973,651.798 526.533,652.374 524.949,652.374 521.926,652.806 520.486,652.087
+ 519.621,650.646 516.74,648.919 516.021,648.63 514.582,648.63 512.709,647.765 509.686,646.899 508.246,645.749 507.525,644.31
+ 507.67,641.862 508.533,638.981 508.246,636.103 508.389,634.517 510.117,631.638 510.547,630.198 510.693,627.03 509.83,622.565
+ 510.406,621.126 511.99,620.692 513.43,621.271 515.59,618.39 518.613,617.813 520.055,617.958 520.197,620.981 521.781,621.702
+ 520.486,620.263 521.061,618.679 522.502,618.103 523.941,618.39 525.525,619.542 526.963,620.118 525.379,619.11 524.23,617.671
+ 522.789,616.95 521.781,615.366 520.627,612.198 519.766,610.759 519.766,609.317 518.182,608.886 517.318,607.444
+ 515.877,606.149 512.854,605.431 511.414,605.718 509.973,606.438 508.389,604.997 506.373,600.534 506.23,599.095
+ 504.789,597.798 504.213,596.356 502.773,595.638 502.918,594.198 501.479,593.622 500.324,592.181 499.174,591.751
+ 497.732,591.604 494.854,592.038 491.83,591.894 493.414,590.454 496.438,589.589 497.732,588.149 499.318,585.847
+ 501.479,583.829 504.502,582.534 505.941,582.966 507.525,583.542 508.963,583.687 510.406,583.397 511.846,583.542
+ 513.285,584.692 514.869,584.981 516.164,586.565 514.582,587.431 514.006,589.013 511.846,591.894 511.27,593.478
+ 512.564,594.919 512.131,596.356 512.131,597.366 512.998,598.806 514.293,599.524 515.877,599.382 517.318,598.806 518.9,598.517
+ 520.342,599.382 523.223,600.534 524.807,600.39 526.533,597.366 527.398,598.806 527.686,597.366 529.27,594.341 529.701,592.759
+ 531.141,592.325 529.557,589.444 528.117,588.581 525.525,584.118 524.084,583.829 523.795,582.247 524.518,580.806
+ 526.678,577.782 528.117,577.349 525.094,576.341 523.654,576.198 525.238,575.478 526.102,573.894 526.678,569.573
+ 526.533,567.989 526.678,567.702 527.109,568.134 526.678,566.55 526.533,562.087 527.252,560.646 528.117,557.622
+ 527.973,556.181 528.693,554.597 528.98,553.013 530.422,552.581 531.285,554.165 532.869,554.597 532.869,551.573 531.43,550.854
+ 529.846,550.567 528.98,549.126 529.125,543.653 529.414,542.214 529.846,540.63 531.285,537.751 531.43,539.19 529.99,542.214
+ 531.43,541.062 533.732,544.087 536.758,544.806 537.908,546.39 536.471,547.11 536.324,548.55 536.613,550.134 537.189,550.421
+ 538.197,548.839 539.494,547.397 540.068,547.397 540.213,545.958 541.076,545.958 542.807,549.126 542.949,550.567
+ 542.373,553.589 543.814,556.038 543.238,557.622 541.654,559.062 541.365,562.663 542.518,563.382 543.379,563.671
+ 544.533,564.679 544.963,565.397 547.414,566.118 548.854,566.118 549.141,566.55 550.582,567.413 553.459,570.005 554.9,570.149
+ 557.926,572.743 559.365,573.462 562.389,575.622 563.541,575.911 563.973,577.349 563.973,578.501 564.98,579.942
+ 567.572,582.966 569.156,583.687 570.598,582.247 572.182,581.235 573.621,580.663 573.621,579.942 574.773,578.501
+ 575.061,577.927 575.494,577.062 575.35,575.622 575.926,574.038 577.51,571.157 575.926,568.134 576.211,566.694 576.068,565.255
+ 574.486,561.798 572.9,560.646 572.324,557.622 572.324,556.181 572.471,554.597 573.332,553.157 574.486,551.718 577.51,552.005
+ 578.949,552.438 580.533,552.149 580.963,552.294 583.27,555.173 587.732,555.03 589.174,556.181 587.732,554.886 583.27,554.886
+ 580.963,551.718 578.807,552.005 577.223,551.573 574.197,551.573 572.324,554.454 572.037,555.894 572.037,557.478
+ 572.471,558.919 572.324,560.501 573.908,561.798 574.916,563.235 575.205,564.534 575.926,565.974 575.494,567.413
+ 575.926,568.997 576.789,570.438 576.789,571.878 576.068,573.462 575.061,574.903 575.061,577.927 573.621,579.222
+ 572.613,580.663 571.029,581.382 569.877,582.821 568.438,583.11 565.557,580.229 564.693,578.79 563.973,575.765 562.533,575.333
+ 559.51,573.173 557.926,572.454 556.627,571.013 555.043,569.718 553.605,569.862 548.854,565.542 547.414,565.829
+ 544.533,564.679 543.957,563.813 543.379,563.671 543.094,563.382 541.51,562.374 541.941,559.349 543.379,557.911 544.102,556.47
+ 542.662,553.302 543.094,551.862 543.238,548.839 541.365,545.813 541.223,544.374 542.662,543.653 543.525,542.214
+ 541.941,541.206 541.076,539.765 540.789,536.743 541.654,535.302 541.795,533.718 542.518,532.278 544.822,529.397
+ 546.262,528.679 547.27,527.235 546.117,524.358 546.406,522.774 545.686,521.333 545.686,519.894 547.125,520.038 545.83,518.597
+ 546.117,515.718 546.838,514.278 548.422,514.71 551.445,514.278 551.445,515.862 552.166,517.302 553.605,517.733
+ 555.189,518.886 558.068,516.005 557.639,514.567 556.197,513.56 554.758,513.413 553.459,511.829 554.037,511.687
+ 555.189,508.806 553.605,505.638 552.021,504.198 550.582,503.622 550.006,505.062 546.98,504.054 544.102,504.054
+ 542.518,503.765 541.223,502.181 542.084,500.743 540.646,499.444 540.068,498.005 544.389,493.829 546.117,490.95
+ 548.564,487.782 553.029,483.896 556.055,482.022 559.076,480.728 559.365,482.165 560.807,482.886 560.949,482.599
+ 559.654,480.728 562.533,478.71 563.83,477.271 565.27,477.126 568.293,474.966 571.174,472.085 572.613,472.519 578.518,470.069
+ 579.957,468.917 581.398,468.917 582.98,469.351 582.547,466.612 580.963,466.323 579.814,464.741 578.373,463.304
+ 573.908,459.847 573.479,461.286 573.621,462.729 572.037,463.878 570.598,463.733 566.277,464.163 563.254,462.581
+ 562.678,464.163 561.238,464.599 559.795,466.183 558.211,467.046 558.646,468.63 560.23,468.63 558.789,469.065 553.318,466.183
+ 554.037,464.312 552.598,463.304 551.014,463.589 545.109,460.421 543.67,459.271 542.084,458.983 541.51,460.421 541.365,461.862
+ 539.781,462.003 538.773,460.569 537.189,459.126 538.055,460.71 536.471,459.987 535.029,458.55 534.311,456.966 533.156,452.499
+ 532.582,451.065 530.422,448.038 528.98,446.741 525.379,444.294 522.357,442.278 519.332,440.839 516.453,438.534 515.156,436.95
+ 513.572,435.942 514.006,434.499 515.445,435.077 516.164,431.767 516.883,430.323 517.174,428.741 518.471,425.722
+ 519.908,425.431 520.197,423.847 521.639,422.405 523.076,421.827 524.662,422.263 526.102,422.118 527.541,422.839
+ 529.125,422.983 530.564,423.987 532.148,424.71 533.59,426.007 534.883,426.581 536.037,428.163 537.621,428.312 539.061,429.749
+ 539.35,431.19 540.789,432.487 543.814,431.909 546.693,429.897 549.715,430.183 551.156,430.038 555.766,432.058 557.205,432.198
+ 558.646,433.495 559.941,435.077 561.379,434.647 562.963,435.077 564.406,435.942 566.277,435.655 567.861,436.085
+ 569.303,437.095 570.74,437.671 572.182,437.815 573.766,438.819 575.205,438.679 576.646,439.976 578.23,440.405 581.252,440.694
+ 582.693,440.263 588.74,436.663 590.182,436.808 590.471,438.245 593.35,441.271 594.789,441.847 596.373,441.702 597.814,441.987
+ 599.398,443.286 600.838,443.144 600.838,444.729 601.414,446.163 603.141,448.901 604.582,449.046 605.445,450.487
+ 605.732,452.069 607.318,452.069 608.758,453.366 609.621,454.95 609.908,457.976 609.766,459.413 610.342,460.854
+ 610.342,460.995 610.197,461.718 610.342,462.151 610.342,462.294 611.061,465.319 609.908,466.759 607.174,467.622
+ 607.459,469.065 606.021,472.085 605.877,473.526 605.445,474.966 605.445,476.983 606.598,478.421 606.74,476.983
+ 608.037,480.149 606.598,481.589 605.59,483.03 604.148,483.896 604.006,484.325 604.725,485.911 604.006,487.351 602.422,488.79
+ 602.422,490.229 605.732,493.829 606.74,496.854 607.459,498.294 609.043,497.431 612.068,499.157 613.223,500.743
+ 616.246,502.759 617.686,504.054 619.846,507.079 621.43,508.087 622.869,507.653 624.311,506.214 625.318,507.653
+ 626.758,508.517 628.342,508.374 629.781,508.95 633.238,508.517 637.557,508.95 637.701,510.39 639.141,511.687 640.582,512.694
+ 642.164,512.403 642.453,512.55 642.311,513.989 645.189,514.567 645.908,517.589 647.35,517.878 648.502,520.759 649.941,521.765
+ 650.807,523.206 651.379,523.495 654.262,522.341 655.701,522.485 657.285,521.911 657.715,521.478 660.598,521.046
+ 662.182,520.038 663.332,518.454 664.773,517.444 666.357,517.589 667.51,516.294 667.941,515.286 669.379,513.847
+ 670.963,513.271 676.869,513.271 678.311,513.56 682.773,510.247 684.211,509.526 685.654,509.958 687.236,511.255
+ 688.678,510.679 690.117,509.958 690.838,508.663 691.125,507.079 692.854,506.214 692.998,506.214 693.143,506.071
+ 693.43,505.927 694.582,504.485 696.021,503.765 698.9,503.478 699.908,502.612 700.773,502.47 701.926,503.622 703.365,503.765
+ 704.807,504.63 706.389,504.774 707.398,506.214 708.838,505.495 710.277,505.206 711.43,506.358 712.582,506.214 713.445,507.653
+ 712.869,509.095 713.732,510.679 713.877,512.118 714.453,513.56 715.605,515.142 715.605,516.581 718.486,518.31 720.068,518.597
+ 720.934,520.181 722.373,520.181 723.525,521.622 725.109,521.911 725.398,523.349 728.277,524.501 727.557,525.942
+ 729.43,527.382 729.285,528.966 730.725,528.821 732.164,529.397 730.725,528.534 729.715,527.095 728.277,525.798 727.99,525.798
+ 728.564,524.358 727.125,523.349 725.686,523.206 725.252,521.765 723.814,521.478 722.949,520.038 721.51,520.038
+ 720.211,518.454 718.773,518.165 715.748,516.294 715.748,514.854 715.174,513.413 714.021,511.974 714.021,510.39 713.301,508.95
+ 713.59,507.509 713.301,505.927 711.572,506.071 710.422,504.919 707.398,505.495 706.963,504.054 702.502,503.478
+ 701.061,502.325 700.773,502.47 700.486,502.181 699.908,502.612 699.479,502.759 696.598,503.046 695.156,503.333
+ 693.143,506.071 692.854,506.214 691.557,506.358 690.98,506.646 690.547,506.646 689.973,504.63 690.547,503.622 690.406,503.333
+ 690.547,503.046 689.973,501.751 690.547,500.599 690.838,500.022 692.133,498.581 692.422,497.862 692.854,496.278
+ 692.709,494.839 693.861,491.813 693.861,490.229 695.156,488.79 696.598,488.214 696.164,486.774 696.453,485.767
+ 696.453,484.325 697.748,481.444 697.318,479.862 698.037,478.421 699.479,477.702 699.334,476.263 701.35,471.798
+ 701.494,470.214 703.654,466.472 703.51,464.454 704.373,461.573 705.67,460.136 706.678,458.55 707.109,457.11 709.701,454.229
+ 709.125,452.79 713.014,448.612 713.301,447.171 716.326,445.015 718.486,441.562 718.773,440.118 720.211,439.827
+ 721.654,438.966 723.094,437.671 723.379,436.229 724.102,434.647 726.98,434.499 727.99,433.065 730.869,431.19 732.164,431.479
+ 733.605,431.046 735.043,430.183 736.627,430.612 739.51,429.03 740.229,427.444 741.67,426.87 741.236,425.431 742.244,422.839
+ 743.686,422.983 743.83,421.542 744.406,419.958 744.693,419.815 745.27,419.958 745.557,419.671 745.846,419.526 747.43,418.663
+ 747.43,418.374 748.006,417.511 748.438,416.935 748.293,416.358 748.293,416.069 748.006,415.206 749.156,414.058
+ 750.598,412.901 752.037,412.472 753.621,411.462 755.061,412.183 754.916,411.175 755.35,410.312 755.781,410.022
+ 756.502,409.591 756.502,707.671 755.781,707.813 755.205,707.958 753.766,706.948 750.74,708.245 748.869,710.981
+ 748.438,712.421 746.998,713.862 746.133,715.302 745.125,715.589 743.541,715.157 740.662,714.87 740.229,716.31 740.373,717.749
+ 738.934,719.188 739.076,720.63 740.518,721.78 740.229,723.222 738.646,723.798 738.789,724.085 737.926,725.524 736.342,725.524
+ 735.766,723.94 734.326,724.948 732.883,726.532 730.293,727.829 730.725,728.263 732.164,728.694 732.311,730.134
+ 730.869,730.708 731.877,732.149 732.311,733.589 732.021,735.03 732.74,736.612 731.301,739.493 731.301,741.798 730.725,743.235
+ 729.43,744.679 729.285,746.118 730.869,747.413 731.59,748.854 730.725,751.735 730.869,753.317 730.582,754.757 729.861,756.194
+ 728.277,756.772 729.715,757.062 731.301,758.356 735.621,760.806 737.205,760.517 737.639,760.661 737.926,761.524
+ 737.781,763.11 736.773,765.989 735.334,767.286 733.748,767.718 732.311,767.571 731.59,767.142 730.15,766.854 724.102,766.997
+ 722.662,768.005 722.807,770.886 723.525,772.325 724.963,773.046 725.686,774.917 725.541,776.356 724.963,777.798
+ 724.822,779.382 728.854,784.854 730.006,785.429 731.59,784.997 733.029,784.997 734.182,786.438 734.326,787.878
+ 733.893,789.894 737.205,797.38 738.789,797.235 743.252,794.646 744.406,794.356 745.846,795.796 746.854,797.235
+ 750.453,798.532 752.326,798.103 751.748,796.517 751.318,796.229 751.605,795.796 753.479,794.935 754.916,793.638
+ 755.926,792.485 756.502,791.765 756.502,889.685 755.781,890.403 754.916,891.269 754.197,892.708 753.334,893.571
+ 751.748,894.437 748.869,896.886 745.846,897.317 744.406,898.325 742.822,898.899 741.379,900.054 736.916,900.917
+ 735.908,902.356 731.59,904.661 730.725,906.101 731.301,907.972 731.59,908.694 730.15,908.837 728.709,908.548 727.125,908.837
+ 724.244,908.548 722.807,908.694 719.781,908.261 714.021,908.261 712.438,908.694 710.998,908.403 708.117,909.269
+ 703.654,911.571 700.773,910.708 699.334,911.14 697.748,910.421 697.459,911.86 696.021,912.437 694.582,913.446 693.143,913.589
+ 691.557,913.302 690.117,912.149 688.678,912.149 683.205,913.589 681.766,914.454 680.326,914.308 682.627,911.716
+ 683.35,910.278 681.908,910.997 680.471,910.421 680.037,911.86 679.748,911.716 679.893,911.14 680.037,910.278 681.479,908.981
+ 682.916,908.837 684.502,908.261 684.646,909.845 686.084,908.694 684.934,908.261 686.373,907.11 687.236,906.821 687.957,905.38
+ 689.398,905.093 690.117,903.653 687.236,901.349 688.244,902.788 686.807,901.925 687.236,900.485 687.525,897.462
+ 686.084,894.581 686.518,892.997 688.102,893.716 688.389,895.157 688.389,893.716 687.814,892.278 687.957,891.989
+ 687.67,890.403 689.109,890.118 690.693,890.118 691.701,888.532 690.262,888.388 687.379,888.677 684.502,888.388 683.061,889.11
+ 681.479,889.397 680.037,888.821 678.598,887.813 680.037,887.093 681.479,885.796 681.908,884.214 684.789,882.772
+ 686.373,881.478 684.789,881.188 683.35,882.054 683.061,880.612 685.223,878.31 686.807,875.429 687.236,873.845 688.678,872.403
+ 688.963,870.821 689.398,870.101 690.693,868.661 691.701,866.501 694.006,863.909 694.869,863.478 696.164,862.038
+ 696.021,861.749 694.725,863.188 693.861,863.622 691.99,865.78 690.547,867.653 689.973,868.806 689.973,869.38 689.398,869.956
+ 688.102,870.677 687.379,869.524 686.949,869.38 685.51,869.956 684.068,871.54 684.068,872.981 681.479,875.862 680.758,875.429
+ 681.334,873.989 682.627,872.548 681.189,873.989 680.037,877.013 678.883,878.31 678.74,878.597 678.021,878.165 677.59,877.444
+ 677.877,876.005 676.438,876.005 676.15,874.421 675.143,872.981 675.143,871.54 676.725,870.101 677.301,868.372 678.021,867.796
+ 677.445,866.356 677.301,864.917 678.883,863.622 680.182,863.188 681.479,861.749 682.916,860.886 685.941,858.149
+ 685.795,857.716 684.502,856.278 684.646,855.269 684.357,855.124 683.781,853.685 683.926,851.956 683.494,851.235
+ 682.627,852.101 681.766,852.101 682.051,851.093 679.029,849.364 677.59,850.372 677.156,849.796 676.582,847.638
+ 677.014,846.194 678.453,845.478 678.453,844.038 678.021,843.894 677.732,844.47 675.285,845.909 674.133,845.622
+ 674.277,844.181 675.43,842.741 674.998,841.302 675.285,839.716 674.998,838.278 671.973,836.403 671.686,834.964
+ 670.389,835.829 670.389,836.403 669.379,837.845 667.941,838.132 665.061,837.845 663.621,838.997 662.037,839.142
+ 660.598,838.421 660.311,840.005 659.303,841.013 657.861,840.87 654.838,841.444 653.398,842.454 652.246,842.886
+ 650.807,842.741 650.807,844.038 650.23,846.341 648.211,845.622 646.773,845.909 644.037,845.478 642.598,844.181 641.156,844.47
+ 639.715,844.181 637.99,847.062 636.547,848.214 635.83,849.222 634.963,851.093 632.084,852.245 631.223,853.397 628.486,852.677
+ 625.893,854.548 625.174,856.565 623.732,856.708 623.445,856.278 621.861,856.278 620.422,855.269 620.422,853.685
+ 616.678,851.38 616.246,851.38 616.102,849.94 614.662,850.806 612.789,849.94 611.205,849.94 609.332,852.101 607.748,851.956
+ 605.445,853.11 603.715,854.403 604.006,853.829 603.572,852.388 603.285,852.532 600.693,850.372 599.252,849.94 599.541,849.077
+ 601.414,847.204 600.117,845.765 596.662,845.622 593.781,843.173 590.758,842.454 589.318,843.462 588.74,845.046 587.732,844.47
+ 585.572,845.765 584.998,846.341 583.414,849.364 581.973,850.085 579.67,850.517 578.084,851.235 578.807,852.532
+ 579.094,853.829 578.949,855.269 577.51,856.708 576.068,857.429 574.627,857.571 574.055,856.708 572.613,855.845
+ 571.174,855.413 569.156,852.245 567.715,850.948 566.998,849.509 565.557,849.222 562.678,847.78 562.533,844.757
+ 563.973,843.749 565.414,843.317 566.854,843.749 569.732,842.454 570.74,841.013 570.74,840.149 571.748,837.271 572.758,836.118
+ 572.037,834.677 569.014,834.677 567.572,833.956 567.285,832.517 563.254,833.235 561.957,834.677 560.518,835.253
+ 560.373,833.813 559.795,831.94 559.076,831.364 557.639,831.364 556.197,831.796 553.318,831.653 552.021,830.214
+ 550.582,829.349 548.854,829.204 548.854,827.765 548.422,827.046 546.98,827.622 546.693,827.188 543.814,826.612
+ 543.525,825.173 544.102,822.726 542.807,821.286 541.365,820.565 540.068,819.124 539.781,817.687 539.494,817.253
+ 539.781,816.964 538.627,815.524 537.621,816.245 537.045,816.245 534.166,815.38 531.141,815.38 529.701,816.39 528.547,816.821
+ 528.117,818.261 526.678,819.7 526.246,821.142 524.518,820.854 523.941,819.845 524.084,818.403 522.502,818.118 519.621,818.694
+ 518.613,820.132 517.459,821.142 516.598,820.278 515.156,819.845 513.715,820.854 513.572,821.429 513.141,821.862
+ 512.709,821.571 511.27,821.142 511.414,820.854 511.127,819.271 509.686,817.829 509.398,817.11 508.246,815.669 506.807,815.524
+ 505.941,814.372 504.502,813.94 503.205,812.501 501.766,813.653 501.766,812.067 500.613,809.188 501.045,808.757 500.9,807.749
+ 499.75,806.31 496.869,806.022 495.285,804.87 494.564,805.302 494.277,805.013 493.99,803.571 493.701,803.286 494.277,801.7
+ 494.277,800.261 494.709,799.829 494.998,798.532 493.414,797.38 493.125,796.661 491.686,796.085 490.246,795.077
+ 489.379,792.194 485.926,787.735 485.639,786.294 486.789,783.413 486.357,780.39 486.213,779.813 485.926,778.948
+ 487.223,777.364 487.654,776.501 487.223,775.927 486.068,775.638 485.35,775.349 485.061,773.909 483.479,772.47 483.334,771.03
+ 484.918,771.03 486.357,771.462 486.357,769.878 486.068,768.438 489.238,767.862 489.957,766.278 489.67,764.837 490.102,763.397
+ 490.533,763.11 494.998,761.669 497.156,761.524 498.598,760.948 498.598,760.085 497.303,759.222 496.148,759.653
+ 493.125,758.356 491.541,758.935 490.102,760.372 488.518,761.095 487.076,761.095 485.639,760.517 483.189,760.372
+ 481.605,759.364 482.037,757.927 481.174,756.485 481.461,755.478 480.74,755.188 479.156,758.214 479.014,759.653 477.43,760.661
+ 475.846,761.235 475.99,760.229 477.861,752.886 478.293,752.31 478.725,752.31 478.725,750.726 479.156,749.142 480.453,746.263
+ 481.029,743.095 481.029,741.511 481.75,740.356 482.037,738.917 482.037,737.478 483.334,726.679 483.766,725.235
+ 484.486,720.772 484.342,717.894 483.766,716.31 483.479,713.431 482.037,712.565 477.572,710.55 476.131,710.55 474.547,709.974
+ 471.67,709.974 470.084,709.397 468.646,709.255 466.486,708.39 466.342,708.103 467.205,706.661 467.781,702.054 466.918,700.612
+ 465.766,699.173 464.324,698.886 461.445,698.886 459.572,696.438 460.006,695.718 459.43,694.134 457.99,693.558 456.838,694.278
+ 455.398,693.558 453.814,692.118 453.525,691.255 454.389,689.813 453.814,688.374 452.373,688.806 451.795,688.517
+ 451.941,687.077 450.646,684.194 449.494,682.757 450.789,681.173 451.654,680.741 450.068,678.726 446.471,675.271
+ 443.445,673.542 441.141,671.095 439.27,669.653 436.246,667.927 435.379,666.483 435.238,660.87 435.379,657.847 435.67,656.403
+ 434.807,653.382 434.518,653.095 432.502,652.661 428.037,649.78 424.725,650.067 422.998,649.638 419.83,646.325 419.541,644.886
+ 419.541,642.005 418.533,640.421 416.807,641.142 "/>
+ <polyline id="polyline2265" points="659.445,608.454 662.037,608.31 665.061,609.173 666.211,610.759 667.654,610.612
+ 667.51,615.079 668.229,616.229 670.678,619.11 669.236,620.118 668.373,622.134 669.379,620.692 670.822,619.687 672.262,619.255
+ 673.701,620.403 673.701,623.286 672.262,627.751 673.125,626.31 674.133,623.286 677.014,623.142 676.869,621.702
+ 678.453,621.702 679.893,622.421 680.326,623.862 681.766,623.431 683.639,625.157 683.35,626.597 682.627,628.325
+ 682.773,629.765 681.334,629.188 680.9,630.63 682.197,633.653 680.758,634.517 680.613,634.806 681.189,635.382 681.621,635.235
+ 682.051,635.524 683.639,635.235 685.076,636.247 686.518,635.813 687.236,637.255 688.678,637.397 688.389,638.839
+ 686.807,640.134 686.229,641.431 686.949,641.862 688.822,644.597 688.533,646.038 686.949,647.188 687.094,649.493
+ 686.229,650.935 687.236,652.374 688.678,653.524 688.389,652.087 687.379,650.646 687.814,649.206 687.814,647.765
+ 689.109,646.181 689.686,643.733 687.379,640.854 690.262,638.118 688.822,636.821 685.941,635.235 684.502,635.524
+ 684.068,634.95 682.627,634.95 681.621,635.235 683.639,625.157 682.773,624.149 682.773,623.431 684.646,622.421 686.662,621.989
+ 686.807,623.142 687.094,623.142 687.094,623.431 689.973,624.149 691.557,624.294 689.686,623.286 688.244,622.997
+ 687.094,623.142 686.807,621.989 686.662,621.989 686.518,621.558 684.789,621.989 684.357,621.558 684.211,619.974
+ 685.654,619.687 686.229,618.247 684.934,619.687 683.35,619.255 682.916,620.839 683.35,622.278 682.342,623.718 681.766,623.431
+ 680.758,622.854 680.326,621.413 678.74,620.981 677.156,621.126 675.715,621.847 674.422,618.821 673.414,617.382
+ 673.701,615.942 675.285,615.653 673.701,615.366 672.693,616.806 671.252,616.663 669.67,617.095 669.67,615.509 668.229,615.653
+ 668.518,612.772 669.236,611.333 666.211,609.317 663.479,608.022 659.877,608.022 659.445,608.454 "/>
+
+ <polygon id="polygon2267" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 659.445,608.454 662.037,608.31 665.061,609.173 666.211,610.759 667.654,610.612 667.51,615.079 668.229,616.229 670.678,619.11
+ 669.236,620.118 668.373,622.134 669.379,620.692 670.822,619.687 672.262,619.255 673.701,620.403 673.701,623.286
+ 672.262,627.751 673.125,626.31 674.133,623.286 677.014,623.142 676.869,621.702 678.453,621.702 679.893,622.421
+ 680.326,623.862 681.766,623.431 683.639,625.157 683.35,626.597 682.627,628.325 682.773,629.765 681.334,629.188 680.9,630.63
+ 682.197,633.653 680.758,634.517 680.613,634.806 681.189,635.382 681.621,635.235 682.051,635.524 683.639,635.235
+ 685.076,636.247 686.518,635.813 687.236,637.255 688.678,637.397 688.389,638.839 686.807,640.134 686.229,641.431
+ 686.949,641.862 688.822,644.597 688.533,646.038 686.949,647.188 687.094,649.493 686.229,650.935 687.236,652.374
+ 688.678,653.524 688.389,652.087 687.379,650.646 687.814,649.206 687.814,647.765 689.109,646.181 689.686,643.733
+ 687.379,640.854 690.262,638.118 688.822,636.821 685.941,635.235 684.502,635.524 684.068,634.95 682.627,634.95 681.621,635.235
+ 683.639,625.157 682.773,624.149 682.773,623.431 684.646,622.421 686.662,621.989 686.807,623.142 687.094,623.142
+ 687.094,623.431 689.973,624.149 691.557,624.294 689.686,623.286 688.244,622.997 687.094,623.142 686.807,621.989
+ 686.662,621.989 686.518,621.558 684.789,621.989 684.357,621.558 684.211,619.974 685.654,619.687 686.229,618.247
+ 684.934,619.687 683.35,619.255 682.916,620.839 683.35,622.278 682.342,623.718 681.766,623.431 680.758,622.854 680.326,621.413
+ 678.74,620.981 677.156,621.126 675.715,621.847 674.422,618.821 673.414,617.382 673.701,615.942 675.285,615.653
+ 673.701,615.366 672.693,616.806 671.252,616.663 669.67,617.095 669.67,615.509 668.229,615.653 668.518,612.772 669.236,611.333
+ 666.211,609.317 663.479,608.022 659.877,608.022 "/>
+ <polyline id="polyline2269" fill="#4DB47E" points="435.525,784.997 434.518,784.421 436.246,783.989 435.525,784.997 "/>
+ <polyline id="polyline2271" fill="#4DB47E" points="435.525,784.997 436.246,785.862 435.67,785.571 435.525,784.997 "/>
+ <polyline id="polyline2273" fill="#4DB47E" points="436.102,782.55 436.389,782.403 436.102,782.981 436.102,782.55 "/>
+ <polyline id="polyline2275" fill="#4DB47E" points="438.838,788.165 438.262,788.454 438.117,788.165 438.262,785.142
+ 440.998,782.694 440.998,783.124 440.709,783.989 441.285,785.429 440.422,787.013 438.838,788.165 "/>
+ <polyline id="polyline2277" fill="#4DB47E" points="440.998,783.124 440.998,782.694 441.141,782.55 440.998,783.124 "/>
+ <polyline id="polyline2279" fill="#FFFF7F" points="445.461,879.03 446.9,876.149 447.045,874.278 446.037,871.397
+ 446.471,870.677 449.35,869.669 450.789,868.661 451.365,868.085 451.941,866.933 453.238,862.47 453.525,862.325 453.238,863.622
+ 453.094,865.062 451.51,867.94 451.365,868.806 455.83,868.085 457.27,867.222 457.414,865.638 455.973,862.757 456.262,861.892
+ 456.406,861.892 457.27,860.886 458.709,861.749 460.148,861.462 461.59,861.892 464.613,862.181 466.055,861.173 469.654,859.589
+ 470.373,860.454 473.254,861.604 473.686,862.757 473.254,864.341 473.83,866.788 474.406,868.229 475.701,869.093
+ 468.357,872.694 461.877,875.286 456.406,876.87 447.766,878.886 447.334,878.886 448.197,877.735 448.486,876.294
+ 449.205,876.294 450.502,874.853 451.365,873.269 449.061,874.278 447.479,874.278 447.189,876.294 446.613,877.735
+ 445.75,879.173 445.461,879.03 "/>
+ <polyline id="polyline2281" fill="#B28765" points="449.781,850.517 450.357,849.796 451.076,848.935 451.51,847.349
+ 452.949,845.765 457.701,841.589 463.461,840.005 465.045,838.854 466.486,839.862 467.35,838.421 467.781,838.132
+ 469.365,837.989 471.094,836.981 472.678,836.548 474.117,836.261 475.557,836.403 477.285,835.11 478.725,835.11 479.877,832.948
+ 481.318,831.509 481.174,830.788 482.324,831.653 483.189,832.661 484.918,833.524 490.102,831.94 492.98,833.093 494.709,833.235
+ 496.148,833.669 498.311,834.964 501.479,834.677 502.197,836.118 501.908,836.837 502.342,838.278 502.342,839.716
+ 503.781,839.571 505.365,838.997 505.365,842.165 503.205,843.03 502.342,844.47 502.342,846.341 500.9,847.638 499.893,849.077
+ 499.893,851.093 501.479,853.54 500.9,854.837 501.334,856.278 501.045,857.716 502.486,857.716 504.068,858.149 504.502,859.589
+ 503.061,860.597 501.479,859.157 499.893,860.165 498.883,861.173 498.883,861.749 497.877,863.188 497.445,863.188
+ 496.006,863.909 496.725,865.349 496.148,866.788 494.709,867.509 493.701,869.093 492.262,869.669 491.686,869.235
+ 490.246,870.101 487.795,871.11 486.357,872.261 484.918,872.261 484.055,870.245 482.613,869.235 481.029,868.661
+ 480.311,868.806 476.277,868.085 475.701,869.093 474.406,868.229 473.83,866.788 473.254,864.341 473.686,862.757
+ 473.254,861.604 470.373,860.454 469.654,859.589 466.055,861.173 464.613,862.181 461.59,861.892 460.148,861.462
+ 458.709,861.749 457.27,860.886 456.406,861.892 456.262,861.892 456.406,861.462 455.83,860.597 455.254,859.013 451.223,854.118
+ 450.213,851.235 449.781,850.517 "/>
+ <polyline id="polyline2283" fill="#99D6AA" points="449.781,850.517 448.629,849.077 447.334,846.054 447.045,844.325
+ 447.766,845.765 447.479,844.325 446.9,844.181 446.324,841.157 445.605,839.716 447.479,835.397 446.471,832.372 446.324,830.935
+ 447.045,826.47 449.926,824.022 452.662,821.142 454.102,822.294 455.541,823.013 457.127,823.444 458.564,824.165 460.006,824.31
+ 461.445,825.604 462.598,827.046 464.037,828.054 465.479,827.909 466.918,828.194 468.502,827.622 469.795,826.181
+ 469.941,825.173 471.094,823.735 471.67,822.294 471.814,820.854 469.365,816.532 467.205,813.509 467.061,812.646
+ 467.639,812.501 468.789,810.485 471.67,807.749 471.957,807.173 474.117,807.173 475.557,806.454 476.998,806.886 478.582,806.31
+ 480.021,806.886 481.461,806.454 481.75,807.173 483.479,807.604 484.918,808.47 487.795,808.899 491.254,805.735 491.686,806.022
+ 494.564,805.302 495.285,804.87 496.869,806.022 499.75,806.31 500.9,807.749 501.045,808.757 500.613,809.188 501.766,812.067
+ 501.766,813.653 503.205,812.501 504.502,813.94 505.941,814.372 506.807,815.524 508.246,815.669 509.398,817.11 509.686,817.829
+ 511.127,819.271 511.414,820.854 511.27,821.142 509.83,822.438 509.254,825.317 508.533,826.757 509.109,828.63 507.525,829.349
+ 506.662,829.204 503.781,830.646 502.773,833.669 502.486,833.956 501.908,833.956 501.479,834.677 498.311,834.964
+ 496.148,833.669 494.709,833.235 492.98,833.093 490.102,831.94 484.918,833.524 483.189,832.661 482.324,831.653 481.174,830.788
+ 481.318,831.509 479.877,832.948 478.725,835.11 477.285,835.11 475.557,836.403 474.117,836.261 472.678,836.548 471.094,836.981
+ 469.365,837.989 467.781,838.132 467.35,838.421 466.486,839.862 465.045,838.854 463.461,840.005 457.701,841.589
+ 452.949,845.765 451.51,847.349 451.076,848.935 450.357,849.796 449.781,850.517 "/>
+ <polyline id="polyline2285" fill="#B28765" points="453.238,862.47 453.525,860.165 453.379,858.724 452.373,855.7
+ 453.525,858.005 453.957,861.03 453.525,862.325 453.238,862.47 "/>
+ <polyline id="polyline2287" fill="#FFFF7F" points="463.318,483.462 462.598,482.022 464.037,478.997 462.453,479.286
+ 462.021,480.87 460.438,480.294 459.861,478.854 460.725,477.271 462.166,475.827 460.725,475.976 459.141,477.413
+ 458.131,475.976 458.422,474.534 456.98,473.382 456.406,474.819 454.963,474.679 453.525,473.815 454.533,472.229
+ 456.117,472.519 455.83,471.077 455.109,469.64 453.67,469.351 453.525,467.909 454.963,466.759 453.525,465.606 452.949,464.163
+ 453.094,462.581 451.654,462.294 451.941,460.71 451.076,457.827 451.365,456.245 451.076,454.808 451.654,453.222 451.51,452.647
+ 451.795,451.206 450.357,450.774 450.789,449.331 452.23,450.487 452.086,448.901 451.795,447.462 450.213,447.319
+ 449.781,445.733 450.068,444.294 453.094,442.569 452.949,441.126 453.814,439.687 453.379,436.663 454.246,435.222
+ 453.094,432.058 453.67,430.612 452.949,429.175 454.246,427.733 452.807,427.155 451.223,426.87 450.934,425.431 450.068,423.847
+ 449.494,419.526 449.926,417.942 452.807,415.927 455.83,415.782 457.27,417.077 458.854,418.085 459.572,419.526 460.725,420.966
+ 461.303,422.405 462.453,426.87 462.453,428.454 463.029,431.331 463.029,434.214 463.605,435.655 463.174,437.237
+ 463.318,440.263 463.75,441.702 462.311,441.847 463.461,443.431 463.029,444.87 463.461,446.454 463.318,449.479 464.758,452.358
+ 464.182,453.798 465.479,456.819 465.334,458.263 466.055,459.702 465.334,460.569 465.621,460.71 466.773,459.271
+ 468.357,459.271 467.926,460.854 469.365,461.286 469.365,462.87 467.781,463.878 469.365,463.733 470.373,465.319 467.35,466.038
+ 468.934,466.183 469.941,467.622 471.379,468.487 469.941,469.64 468.357,470.358 472.822,471.509 473.686,472.95 474.117,474.39
+ 475.27,475.827 473.83,476.983 472.246,476.983 470.807,477.271 473.83,477.847 475.27,477.702 476.709,478.278 477.861,479.718
+ 474.838,480.87 473.686,482.312 475.127,481.302 476.709,480.728 478.148,481.015 479.014,482.454 478.438,483.896
+ 476.854,484.183 478.438,484.325 479.877,484.038 480.883,485.479 481.461,486.919 481.75,488.501 480.311,489.653
+ 478.869,490.229 477.285,489.509 478.869,490.519 477.572,491.958 476.131,492.821 474.693,493.255 474.406,494.403
+ 473.973,496.278 472.533,495.126 471.238,493.687 471.094,492.103 471.525,490.663 470.084,492.247 470.373,493.687
+ 469.941,495.126 467.061,495.56 467.205,494.118 466.342,491.235 466.918,489.653 465.479,488.501 465.189,486.919
+ 466.055,485.479 467.639,484.325 466.197,484.038 464.613,484.759 464.758,483.317 463.318,483.462 "/>
+ <polyline id="polyline2289" fill="#D3B570" points="466.773,811.204 466.918,809.765 466.629,808.181 465.908,806.741
+ 466.055,805.157 464.613,804.87 463.029,807.749 460.148,807.604 458.564,807.173 457.701,805.735 456.262,805.157 455.83,805.589
+ 455.254,804.005 455.973,802.565 457.414,802.278 455.973,801.845 454.389,802.708 453.525,801.271 454.246,799.687
+ 452.662,799.54 452.518,798.103 451.654,796.517 452.807,795.077 454.246,793.925 455.686,793.204 454.963,791.909
+ 456.406,791.909 456.838,790.47 459.861,788.31 460.006,787.302 463.174,785.716 464.758,785.571 465.621,784.132 464.471,782.694
+ 465.908,783.124 466.197,781.687 467.781,782.694 468.502,781.253 470.084,781.397 471.525,780.821 472.963,780.679
+ 474.547,779.669 475.99,780.103 477.43,780.103 480.453,778.517 484.918,776.788 485.35,775.349 486.068,775.638 487.223,775.927
+ 487.654,776.501 485.926,778.948 486.213,779.813 486.357,780.39 486.789,783.413 485.639,786.294 485.926,787.735
+ 489.379,792.194 490.246,795.077 491.686,796.085 493.125,796.661 493.414,797.38 494.998,798.532 494.709,799.829
+ 494.277,800.261 494.277,801.7 493.701,803.286 493.99,803.571 494.277,805.013 494.564,805.302 491.686,806.022 491.254,805.735
+ 487.795,808.899 484.918,808.47 483.479,807.604 481.75,807.173 481.461,806.454 480.021,806.886 478.582,806.31 476.998,806.886
+ 475.557,806.454 474.117,807.173 471.957,807.173 471.67,807.749 468.789,810.485 467.639,812.501 467.061,812.646
+ 466.773,811.204 "/>
+ <polyline id="polyline2291" fill="#FFFF7F" points="471.094,175.446 469.654,175.014 468.068,175.59 467.205,174.15
+ 467.35,173.142 466.197,171.702 466.629,170.984 466.918,169.4 467.781,167.958 466.629,166.518 466.486,164.936 467.926,164.07
+ 468.646,163.926 467.205,163.64 468.646,162.486 471.525,163.64 472.963,164.07 474.406,164.07 478.148,165.942 481.174,166.518
+ 481.605,166.95 482.037,167.958 481.75,168.678 480.311,169.974 479.445,170.406 478.725,170.694 477.285,171.702 475.846,171.414
+ 474.262,171.846 473.686,172.568 471.094,175.446 "/>
+ <polyline id="polyline2293" fill="#FFFF7F" points="471.525,175.446 472.963,174.293 473.686,172.568 475.127,171.99
+ 476.709,171.702 478.148,171.99 479.445,170.406 480.883,170.118 482.037,168.822 483.479,168.246 483.045,170.406
+ 482.758,171.558 482.471,172.133 483.045,173.717 482.471,175.158 480.883,176.454 479.014,175.877 478.006,174.44 477.572,174.15
+ 472.822,175.446 471.525,175.446 "/>
+ <polyline id="polyline2295" fill="#FFFF7F" points="471.814,175.877 477.861,174.44 479.014,176.024 480.598,176.598
+ 481.174,177.894 482.471,179.333 484.055,182.79 482.9,184.374 482.9,185.238 482.758,185.381 482.9,185.816 481.893,184.806
+ 480.166,187.83 478.725,188.406 477.861,189.99 474.838,190.133 475.99,188.694 474.547,188.262 473.109,189.27 473.109,187.83
+ 471.67,187.4 471.379,184.374 471.814,182.934 471.67,181.494 473.109,180.054 470.084,178.47 470.373,177.03 471.957,176.886
+ 471.814,175.877 "/>
+ <polyline id="polyline2297" fill="#FFFF7F" points="472.963,501.894 473.541,498.87 474.547,497.431 474.406,494.403
+ 475.99,493.11 477.43,492.679 480.453,490.229 481.893,489.653 482.758,491.235 482.182,492.679 483.621,491.235 483.334,494.118
+ 484.197,492.679 485.639,493.687 486.502,495.126 485.494,496.567 487.076,496.567 487.51,498.005 487.51,499.444 488.949,500.022
+ 488.373,501.462 489.814,501.03 491.398,502.325 492.838,502.47 493.557,503.911 494.998,505.206 496.582,505.638 501.045,507.509
+ 502.627,507.653 507.094,508.663 511.414,508.517 514.438,508.087 517.318,506.646 518.758,506.501 519.479,508.087
+ 518.037,509.526 516.598,510.534 518.037,510.39 519.479,509.382 518.182,510.966 516.74,511.542 515.156,511.255 514.438,512.839
+ 516.021,513.271 517.459,512.263 517.174,513.847 515.732,513.989 514.148,514.997 515.732,514.997 514.148,516.438
+ 513.572,516.149 514.148,515.862 512.709,515.573 513.572,516.149 512.709,516.438 512.277,518.022 513.43,519.462 511.99,519.462
+ 510.547,520.038 508.963,519.751 510.547,520.325 507.67,522.198 506.086,522.774 504.646,523.782 504.068,522.341
+ 502.627,521.911 501.045,521.765 502.627,520.47 502.486,519.03 501.045,519.173 499.459,520.47 498.453,519.03 497.877,517.444
+ 497.877,519.03 496.438,519.462 495.141,518.022 495.285,521.046 493.846,521.333 492.262,520.903 492.117,522.485
+ 491.686,523.927 490.246,525.079 488.662,525.366 485.639,523.782 484.197,522.485 483.045,521.046 482.324,519.606
+ 482.182,518.022 483.621,517.878 484.486,516.438 483.045,515.142 482.758,513.702 482.9,512.263 481.461,512.263 480.598,510.821
+ 480.021,507.798 476.998,510.103 475.846,508.663 475.557,507.222 476.422,505.638 475.27,504.198 473.686,503.478
+ 472.963,501.894 "/>
+ <polyline id="polyline2299" fill="#FFFF7F" points="473.686,172.568 474.262,171.846 475.846,171.414 477.285,171.702
+ 478.725,170.694 479.445,170.406 478.148,171.99 476.709,171.702 475.127,171.99 473.686,172.568 "/>
+ <polyline id="polyline2301" fill="#FFFF7F" points="482.758,171.558 482.9,171.414 483.045,170.406 483.621,168.104
+ 484.486,166.662 484.918,166.662 486.357,167.816 486.789,169.254 486.646,171.414 485.926,172.998 486.068,174.44
+ 485.639,176.024 486.502,177.318 486.213,178.758 486.213,180.342 486.934,181.926 486.789,183.654 487.51,185.238
+ 487.795,188.118 486.502,187.542 486.789,185.958 485.926,184.518 484.486,184.95 482.9,185.816 482.9,185.238 484.055,183.942
+ 484.055,182.358 481.174,176.454 482.613,175.301 483.189,173.862 482.613,172.422 482.758,171.558 "/>
+ <polyline id="polyline2303" fill="#FFFF7F" points="482.758,171.558 483.045,170.406 482.9,171.414 482.758,171.558 "/>
+ <polyline id="polyline2305" fill="#FFFF7F" points="482.9,185.816 482.758,185.381 482.9,185.238 482.9,185.816 "/>
+ <polyline id="polyline2307" fill="#FFFF7F" points="482.9,185.238 482.9,184.374 484.055,182.79 484.055,183.942 482.9,185.238
+ "/>
+ <polyline id="polyline2309" fill="#B3B136" points="484.918,872.261 486.357,872.261 487.795,871.11 490.246,870.101
+ 491.686,869.235 492.262,869.669 493.701,869.093 494.709,867.509 496.148,866.788 496.725,865.349 496.006,863.909
+ 497.445,863.188 497.877,863.188 498.883,861.749 498.883,861.173 499.893,860.165 501.479,859.157 503.061,860.597
+ 504.502,859.589 504.068,858.149 502.486,857.716 501.045,857.716 501.334,856.278 500.9,854.837 501.479,853.54 499.893,851.093
+ 499.893,849.077 500.9,847.638 502.342,846.341 502.342,844.47 503.205,843.03 505.365,842.165 505.365,838.997 503.781,839.571
+ 502.342,839.716 502.342,838.278 501.908,836.837 502.197,836.118 501.479,834.677 501.908,833.956 502.486,833.956
+ 502.773,833.669 503.781,830.646 506.662,829.204 507.525,829.349 509.109,828.63 508.533,826.757 509.254,825.317 509.83,822.438
+ 511.27,821.142 512.709,821.571 513.141,821.862 513.572,821.429 513.715,820.854 515.156,819.845 516.598,820.278
+ 517.459,821.142 518.613,820.132 519.621,818.694 522.502,818.118 524.084,818.403 523.941,819.845 524.518,820.854
+ 526.246,821.142 526.678,819.7 528.117,818.261 528.547,816.821 529.701,816.39 531.141,815.38 534.166,815.38 537.045,816.245
+ 537.621,816.245 538.627,815.524 539.781,816.964 539.494,817.253 539.781,817.687 540.068,819.124 541.365,820.565
+ 542.807,821.286 544.102,822.726 543.525,825.173 543.814,826.612 546.693,827.188 546.98,827.622 548.422,827.046
+ 548.854,827.765 548.854,829.204 550.582,829.349 552.021,830.214 553.318,831.653 556.197,831.796 557.639,831.364
+ 559.076,831.364 559.795,831.94 560.373,833.813 560.518,835.253 561.957,834.677 563.254,833.235 567.285,832.517
+ 567.572,833.956 569.014,834.677 572.037,834.677 572.758,836.118 571.748,837.271 570.74,840.149 570.74,841.013 569.732,842.454
+ 566.854,843.749 565.414,843.317 563.973,843.749 562.533,844.757 562.678,847.78 565.557,849.222 566.998,849.509
+ 567.715,850.948 569.156,852.245 571.174,855.413 572.613,855.845 574.055,856.708 574.627,857.571 570.74,859.735
+ 570.311,861.173 568.869,861.462 567.141,862.612 567.572,863.622 566.709,866.788 566.998,871.253 568.438,872.261
+ 570.311,874.278 570.021,875.862 568.148,876.005 567.285,875.286 565.557,874.708 564.547,874.708 563.109,875.716
+ 561.238,877.589 559.795,877.444 557.781,880.612 556.342,880.038 554.471,878.454 553.459,878.454 553.029,878.741
+ 550.582,883.204 549.141,882.054 547.701,882.917 544.822,883.062 544.533,884.501 543.094,885.222 541.654,885.222
+ 541.941,886.661 538.342,886.661 537.621,887.669 536.182,887.38 534.598,886.661 533.156,886.948 531.715,887.956
+ 528.547,888.388 527.109,889.253 525.67,889.11 524.23,889.829 522.789,889.54 520.342,890.548 517.459,892.132 513.572,893.286
+ 512.131,894.724 506.373,898.038 506.086,899.046 506.23,900.485 504.934,903.077 503.494,903.653 501.334,904.085
+ 500.613,904.806 501.045,905.813 500.9,906.388 500.471,906.245 499.459,904.806 499.029,903.364 499.318,903.077 498.598,900.054
+ 497.877,898.325 495.572,897.749 493.99,897.749 492.547,898.038 491.973,897.462 492.693,893.429 493.414,891.989 496.293,889.11
+ 496.582,887.669 495.715,885.653 495.141,884.933 494.854,883.925 493.846,882.917 493.846,882.341 491.109,879.462
+ 488.807,877.444 484.918,872.261 "/>
+ <polyline id="polyline2311" points="485.926,778.948 487.654,776.501 487.223,777.364 485.926,778.948 "/>
+
+ <polygon id="polygon2313" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 485.926,778.948 487.654,776.501 487.223,777.364 "/>
+ <polyline id="polyline2315" fill="#FFFF7F" points="486.357,299.286 487.076,297.702 487.223,297.558 486.789,298.854
+ 486.357,299.286 "/>
+ <polyline id="polyline2317" fill="#FFFF7F" points="487.223,297.558 487.365,297.27 488.086,297.125 487.223,297.558 "/>
+ <polyline id="polyline2319" fill="#FFFF7F" points="488.086,297.125 488.518,296.837 489.525,295.83 491.686,294.678
+ 489.814,295.83 488.807,296.982 488.086,297.125 "/>
+ <polyline id="polyline2321" fill="#FECC2E" points="500.9,906.388 501.045,905.813 500.613,904.806 501.334,904.085
+ 503.494,903.653 504.934,903.077 506.23,900.485 506.086,899.046 506.373,898.038 512.131,894.724 513.572,893.286
+ 517.459,892.132 520.342,890.548 522.789,889.54 524.23,889.829 525.67,889.11 527.109,889.253 528.547,888.388 531.715,887.956
+ 533.156,886.948 534.598,886.661 536.182,887.38 537.621,887.669 538.342,886.661 541.941,886.661 541.654,885.222
+ 543.094,885.222 544.533,884.501 544.822,883.062 547.701,882.917 549.141,882.054 550.582,883.204 553.029,878.741
+ 553.459,878.454 554.471,878.454 556.342,880.038 557.781,880.612 559.795,877.444 561.238,877.589 563.109,875.716
+ 564.547,874.708 565.557,874.708 567.285,875.286 568.148,876.005 570.021,875.862 570.311,874.278 568.438,872.261
+ 566.998,871.253 566.709,866.788 567.572,863.622 567.141,862.612 568.869,861.462 570.311,861.173 570.74,859.735
+ 574.627,857.571 576.068,857.429 577.51,856.708 578.949,855.269 579.094,853.829 578.807,852.532 578.084,851.235 579.67,850.517
+ 581.973,850.085 583.414,849.364 584.998,846.341 585.572,845.765 587.732,844.47 588.74,845.046 589.318,843.462 590.758,842.454
+ 593.781,843.173 596.662,845.622 600.117,845.765 601.414,847.204 599.541,849.077 599.252,849.94 600.693,850.372
+ 603.285,852.532 603.572,852.388 604.006,853.829 603.715,854.403 605.445,853.11 607.748,851.956 609.332,852.101 611.205,849.94
+ 612.789,849.94 614.662,850.806 616.102,849.94 616.246,851.38 616.678,851.38 620.422,853.685 620.422,855.269 621.861,856.278
+ 623.445,856.278 623.732,856.708 625.174,856.565 625.893,854.548 628.486,852.677 631.223,853.397 632.084,852.245
+ 634.963,851.093 635.83,849.222 636.547,848.214 637.99,847.062 639.715,844.181 641.156,844.47 642.598,844.181 644.037,845.478
+ 646.773,845.909 648.211,845.622 650.23,846.341 650.807,844.038 650.807,842.741 652.246,842.886 653.398,842.454
+ 654.838,841.444 657.861,840.87 659.303,841.013 660.311,840.005 660.598,838.421 662.037,839.142 663.621,838.997
+ 665.061,837.845 667.941,838.132 669.379,837.845 670.389,836.403 670.389,835.829 671.686,834.964 671.973,836.403
+ 674.998,838.278 675.285,839.716 674.998,841.302 675.43,842.741 674.277,844.181 674.133,845.622 675.285,845.909 677.732,844.47
+ 678.021,843.894 678.453,844.038 678.453,845.478 677.014,846.194 676.582,847.638 677.156,849.796 677.59,850.372
+ 679.029,849.364 682.051,851.093 681.766,852.101 682.627,852.101 683.494,851.235 683.926,851.956 683.781,853.685
+ 684.357,855.124 684.646,855.269 684.502,856.278 685.795,857.716 685.941,858.149 682.916,860.886 681.479,861.749
+ 680.182,863.188 678.883,863.622 677.301,864.917 677.445,866.356 678.021,867.796 677.301,868.372 676.725,870.101
+ 675.143,871.54 675.143,872.981 676.15,874.421 676.438,876.005 677.877,876.005 677.59,877.444 678.021,878.165 678.74,878.597
+ 678.164,879.892 675.143,881.622 672.406,884.501 672.262,886.372 671.83,887.956 670.389,888.821 669.094,890.837
+ 668.662,892.278 668.807,895.157 667.654,893.716 666.211,894.581 664.486,897.462 660.164,901.638 659.445,903.222
+ 659.303,904.661 658.148,907.54 657.572,913.302 656.564,914.741 656.277,914.454 656.422,913.589 657.572,912.005 657.43,908.981
+ 655.99,908.403 654.547,908.261 655.846,909.702 655.701,911.286 655.125,912.724 653.973,913.589 653.83,915.028 655.27,916.47
+ 659.59,919.204 665.781,921.222 667.223,921.222 668.662,920.788 669.957,919.204 670.389,917.765 670.244,916.325
+ 671.686,916.899 673.125,915.604 673.557,914.021 674.998,912.87 678.021,911.86 679.459,911.86 678.598,912.724 678.164,914.165
+ 678.598,915.604 680.037,916.612 676.15,920.933 674.422,922.085 672.838,921.796 671.398,922.085 669.957,923.38 669.67,924.964
+ 670.389,924.964 668.662,927.989 668.518,929.429 664.486,933.028 663.479,934.47 662.9,935.188 638.422,935.188 638.854,934.47
+ 640.293,932.308 641.59,930.87 642.311,929.429 645.043,926.548 643.605,925.397 642.598,923.956 642.164,923.669 641.303,925.108
+ 641.59,925.54 640.148,925.972 638.709,925.829 635.83,927.124 634.963,928.563 633.525,929.286 630.646,932.021 629.205,932.454
+ 627.621,932.308 626.182,932.597 624.74,932.454 624.021,932.741 622.582,932.741 623.445,931.302 622.006,930.724
+ 620.564,931.013 619.125,932.308 617.686,931.731 619.125,930.724 620.854,930.294 623.877,928.708 625.318,928.276
+ 626.758,926.979 626.324,926.548 627.766,923.669 629.061,922.229 629.926,920.788 631.365,919.349 634.102,917.333
+ 634.963,915.749 636.547,914.165 636.406,913.013 635.83,911.429 636.406,907.11 636.117,905.669 637.414,904.661 637.27,904.517
+ 635.83,905.38 636.117,903.94 637.27,903.077 637.846,901.638 640.582,898.899 643.459,898.899 644.9,898.181 645.766,896.741
+ 647.205,895.589 646.773,894.149 642.021,891.7 641.59,890.694 641.156,890.261 640.293,889.253 640.438,887.813 639.715,886.661
+ 636.838,884.356 636.838,883.638 637.27,882.772 636.547,880.899 636.262,881.478 636.262,882.194 636.693,883.638
+ 636.547,884.214 635.398,884.501 633.379,885.796 631.941,885.94 630.789,886.372 629.35,886.085 624.453,886.085 623.014,885.222
+ 621.43,886.372 616.963,887.093 613.076,888.388 610.197,887.669 607.318,886.517 605.877,886.229 604.869,886.372
+ 604.725,885.509 604.148,886.948 605.59,887.813 604.148,888.821 601.27,888.821 598.822,889.685 597.094,889.397 595.654,890.694
+ 594.211,890.403 592.773,890.694 590.9,890.261 591.043,889.54 590.758,887.956 589.318,886.806 588.74,887.235 587.877,887.235
+ 586.438,888.677 584.998,889.397 582.117,888.821 580.533,888.821 575.494,885.509 575.494,885.222 575.061,885.077
+ 574.916,884.646 574.055,883.349 573.621,881.765 571.459,877.878 570.021,876.437 570.021,878.741 569.59,880.181
+ 571.029,880.181 571.893,881.622 572.182,883.062 573.479,884.501 575.061,885.077 575.494,885.509 575.926,886.229
+ 576.646,886.517 579.094,888.532 579.957,889.11 581.398,889.397 582.98,889.397 584.709,889.972 586.148,889.54 587.59,888.677
+ 589.029,888.677 590.613,890.548 590.758,890.403 592.773,890.694 595.51,890.981 597.094,890.694 598.963,891.124
+ 606.164,890.548 607.748,890.694 609.189,891.269 609.332,890.981 612.211,889.685 612.502,890.403 613.223,888.677
+ 615.814,887.669 618.262,888.101 619.701,887.524 623.445,887.235 624.883,886.806 626.324,887.093 630.646,886.806
+ 633.814,885.94 635.252,884.788 636.117,884.646 638.277,885.94 639.572,887.38 638.998,888.964 641.156,890.261 642.164,892.565
+ 643.459,893.286 643.748,894.724 643.605,896.165 642.883,896.886 641.156,897.749 639.715,898.181 638.277,899.188 636.98,900.63
+ 635.541,900.917 635.398,902.501 633.957,902.646 633.379,904.085 635.109,905.38 635.541,906.821 635.109,911.14 635.109,912.724
+ 635.398,914.165 634.389,915.604 633.814,917.046 631.223,918.917 629.926,920.356 627.621,923.669 626.037,926.261
+ 624.598,926.837 623.014,927.845 621.572,927.845 620.131,926.837 619.557,926.692 619.27,925.253 618.838,924.821
+ 618.838,924.677 618.547,924.532 617.973,923.813 617.686,923.813 616.246,922.806 615.957,922.661 615.094,921.796
+ 613.654,921.509 613.795,922.085 615.957,922.661 616.963,923.813 617.686,923.813 618.547,924.532 618.838,924.821
+ 618.406,926.261 619.701,927.702 619.701,929.14 618.117,929.716 616.678,931.013 615.67,931.157 615.957,929.716 615.67,928.276
+ 614.518,929.716 615.379,931.157 614.662,932.597 612.934,933.173 611.494,934.47 610.773,935.188 591.332,935.188 590.9,934.47
+ 590.324,933.604 589.029,935.046 586.438,933.892 584.998,933.892 584.564,932.741 583.99,929.571 582.547,928.421
+ 580.963,927.556 579.814,928.997 578.373,928.708 576.789,927.556 575.205,927.989 573.766,928.708 573.621,930.147
+ 573.189,930.005 571.748,928.708 570.164,929.716 568.725,930.005 567.285,929.286 565.701,929.429 563.686,928.853
+ 562.533,929.571 561.094,930.005 560.662,930.581 559.795,931.013 558.357,933.028 556.773,933.604 556.342,934.181
+ 555.043,934.757 554.324,935.188 504.357,935.188 504.502,934.47 504.502,934.181 504.934,933.749 506.662,927.989
+ 508.533,924.388 509.109,922.517 511.846,919.638 512.131,918.63 511.99,917.622 511.557,916.899 509.109,915.317 510.547,913.878
+ 510.547,913.446 509.109,913.302 507.525,912.437 506.086,911.14 503.494,909.556 502.486,907.972 500.9,906.388 "/>
+ <polyline id="polyline2323" fill="#FFFF7F" points="513.572,516.149 512.709,515.573 514.148,515.862 513.572,516.149 "/>
+ <polyline id="polyline2325" fill="#FFFF7F" points="524.807,357.175 525.814,355.733 528.693,353.431 530.564,353.286
+ 529.125,353.573 527.686,354.87 526.102,355.591 525.238,357.03 524.807,357.175 "/>
+ <polyline id="polyline2327" points="532.006,650.214 532.438,650.067 533.877,651.077 533.445,652.374 534.74,653.958
+ 534.883,655.397 535.75,658.421 537.334,658.854 538.773,658.134 540.213,658.134 541.076,659.573 544.102,660.581
+ 545.252,662.022 546.693,662.597 549.715,661.013 551.156,662.022 552.598,661.878 554.182,661.302 560.084,660.581
+ 563.109,660.581 564.547,660.87 567.572,658.997 569.014,657.558 570.598,657.7 572.037,657.271 573.908,657.989 575.35,659.142
+ 572.324,657.558 570.883,658.134 569.445,657.989 564.98,661.013 563.398,661.302 561.957,660.87 560.373,660.87 554.471,661.589
+ 553.029,662.165 551.445,662.31 550.006,661.444 548.564,661.878 547.125,662.886 545.541,663.03 542.662,660.438 541.223,660.149
+ 540.213,658.565 538.627,658.421 537.189,659.142 535.605,658.71 535.029,657.126 534.453,654.245 533.156,652.661
+ 533.445,651.222 532.006,650.214 "/>
+
+ <polygon id="polygon2329" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 532.006,650.214 532.438,650.067 533.877,651.077 533.445,652.374 534.74,653.958 534.883,655.397 535.75,658.421 537.334,658.854
+ 538.773,658.134 540.213,658.134 541.076,659.573 544.102,660.581 545.252,662.022 546.693,662.597 549.715,661.013
+ 551.156,662.022 552.598,661.878 554.182,661.302 560.084,660.581 563.109,660.581 564.547,660.87 567.572,658.997
+ 569.014,657.558 570.598,657.7 572.037,657.271 573.908,657.989 575.35,659.142 572.324,657.558 570.883,658.134 569.445,657.989
+ 564.98,661.013 563.398,661.302 561.957,660.87 560.373,660.87 554.471,661.589 553.029,662.165 551.445,662.31 550.006,661.444
+ 548.564,661.878 547.125,662.886 545.541,663.03 542.662,660.438 541.223,660.149 540.213,658.565 538.627,658.421
+ 537.189,659.142 535.605,658.71 535.029,657.126 534.453,654.245 533.156,652.661 533.445,651.222 "/>
+ <polyline id="polyline2331" fill="#FFFF7F" points="543.379,563.671 543.957,563.813 544.533,564.679 543.379,563.671 "/>
+ <polyline id="polyline2333" fill="#FFFF7F" points="544.533,564.679 547.414,565.829 548.854,565.542 553.605,569.862
+ 555.043,569.718 556.627,571.013 557.926,572.454 559.51,573.173 562.533,575.333 563.973,575.765 564.693,578.79 565.557,580.229
+ 568.438,583.11 569.877,582.821 571.029,581.382 572.613,580.663 573.621,579.222 575.061,577.927 574.773,578.501
+ 573.621,579.942 573.621,580.663 572.182,581.235 570.598,582.247 569.156,583.687 567.572,582.966 564.98,579.942
+ 563.973,578.501 563.973,577.349 563.541,575.911 562.389,575.622 559.365,573.462 557.926,572.743 554.9,570.149 553.459,570.005
+ 550.582,567.413 549.141,566.55 548.854,566.118 547.414,566.118 544.963,565.397 544.533,564.679 "/>
+ <polyline id="polyline2335" fill="#8FB5BE" points="554.324,935.188 555.043,934.757 556.342,934.181 556.773,933.604
+ 558.357,933.028 559.795,931.013 560.662,930.581 561.094,930.005 562.533,929.571 563.686,928.853 565.701,929.429
+ 567.285,929.286 568.725,930.005 570.164,929.716 571.748,928.708 573.189,930.005 573.621,930.147 573.766,928.708
+ 575.205,927.989 576.789,927.556 578.373,928.708 579.814,928.997 580.963,927.556 582.547,928.421 583.99,929.571
+ 584.564,932.741 584.998,933.892 586.438,933.892 589.029,935.046 590.324,933.604 590.9,934.47 591.332,935.188 554.324,935.188
+ "/>
+ <polyline id="polyline2337" fill="#FFFF7F" points="566.709,21.366 565.125,21.224 564.117,19.64 565.846,16.76 566.277,13.734
+ 567.861,13.158 569.303,13.304 569.59,11.72 572.613,11.432 574.055,10.278 575.639,11.432 576.646,9.848 575.639,8.406
+ 576.502,7.83 577.076,9.127 576.934,10.711 575.35,11.72 573.908,10.568 572.324,11.862 570.883,11.862 569.59,13.446
+ 566.564,13.879 566.131,16.902 564.547,19.782 566.131,20.648 566.709,21.366 "/>
+ <polyline id="polyline2339" points="575.061,885.077 575.494,885.222 575.494,885.509 575.061,885.077 "/>
+
+ <polygon id="polygon2341" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 575.061,885.077 575.494,885.222 575.494,885.509 "/>
+ <polyline id="polyline2343" fill="#FFFF7F" points="575.061,577.927 575.061,574.903 576.068,573.462 576.789,571.878
+ 576.789,570.438 575.926,568.997 575.494,567.413 575.926,565.974 575.205,564.534 574.916,563.235 573.908,561.798
+ 572.324,560.501 572.471,558.919 572.037,557.478 572.037,555.894 572.324,554.454 574.197,551.573 577.223,551.573
+ 578.807,552.005 580.963,551.718 583.27,554.886 587.732,554.886 589.174,556.181 587.732,555.03 583.27,555.173 580.963,552.294
+ 580.533,552.149 578.949,552.438 577.51,552.005 574.486,551.718 573.332,553.157 572.471,554.597 572.324,556.181
+ 572.324,557.622 572.9,560.646 574.486,561.798 576.068,565.255 576.211,566.694 575.926,568.134 577.51,571.157 575.926,574.038
+ 575.35,575.622 575.494,577.062 575.061,577.927 "/>
+ <polyline id="polyline2345" fill="#FFFF7F" points="576.502,7.83 576.357,7.688 576.789,7.688 576.502,7.83 "/>
+ <polyline id="polyline2347" fill="#FFFF7F" points="576.789,7.688 577.223,7.4 578.662,7.256 577.941,7.83 576.789,7.688 "/>
+ <polyline id="polyline2349" fill="#FFFF7F" points="578.662,7.256 578.373,5.672 579.238,5.238 579.379,6.68 578.662,7.256 "/>
+ <polyline id="polyline2351" fill="#FFFF7F" points="579.238,5.238 580.102,4.662 579.957,4.95 579.238,5.238 "/>
+ <polyline id="polyline2353" fill="#FFFF7F" points="580.102,4.662 580.533,3.512 582.117,2.358 583.557,1.782 584.998,0.776
+ 586.582,1.064 587.732,0.776 589.318,1.352 590.758,-0.09 590.758,-1.528 591.189,-3.112 592.627,-3.688 593.639,-2.104
+ 593.494,-0.665 594.934,0.486 593.35,-0.09 592.916,-2.97 591.332,-2.682 590.9,-1.24 591.043,0.198 589.459,1.494 588.021,1.064
+ 586.582,1.352 584.998,1.208 581.973,2.792 580.822,4.232 580.102,4.662 "/>
+ <polyline id="polyline2355" points="590.758,890.403 590.9,890.261 592.773,890.694 590.758,890.403 "/>
+
+ <polygon id="polygon2357" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 590.758,890.403 590.9,890.261 592.773,890.694 "/>
+ <polyline id="polyline2359" points="595.365,88.614 596.23,88.76 599.83,91.782 596.807,89.333 595.365,88.614 "/>
+
+ <polygon id="polygon2361" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 595.365,88.614 596.23,88.76 599.83,91.782 596.807,89.333 "/>
+ <polyline id="polyline2363" points="599.83,91.782 600.838,92.648 600.98,95.094 600.547,93.224 599.83,91.782 "/>
+
+ <polygon id="polygon2365" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 599.83,91.782 600.838,92.648 600.98,95.094 600.547,93.224 "/>
+ <polyline id="polyline2367" points="600.98,96.965 600.98,95.094 601.125,96.246 600.98,96.965 "/>
+
+ <polygon id="polygon2369" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 600.98,96.965 600.98,95.094 601.125,96.246 "/>
+ <polyline id="polyline2371" points="600.98,96.965 600.98,97.254 602.564,100.278 603.572,101.72 603.715,103.158 606.598,104.312
+ 608.037,104.6 609.332,105.75 609.479,106.902 609.043,106.472 608.324,105.03 605.303,104.312 603.861,103.734 602.564,100.709
+ 600.838,97.688 600.98,96.965 "/>
+
+ <polygon id="polygon2373" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 600.98,96.965 600.98,97.254 602.564,100.278 603.572,101.72 603.715,103.158 606.598,104.312 608.037,104.6 609.332,105.75
+ 609.479,106.902 609.043,106.472 608.324,105.03 605.303,104.312 603.861,103.734 602.564,100.709 600.838,97.688 "/>
+ <polyline id="polyline2375" points="609.479,106.902 610.342,107.91 609.479,107.333 609.479,106.902 "/>
+
+ <polygon id="polygon2377" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 609.479,106.902 610.342,107.91 609.479,107.333 "/>
+ <polyline id="polyline2379" fill="#FFFF7F" points="610.342,462.151 610.342,460.995 610.486,460.278 609.908,458.839
+ 610.486,457.397 613.51,457.976 613.223,459.413 613.654,460.854 613.654,462.438 612.211,463.444 610.627,462.87 610.342,462.151
+ "/>
+ <polyline id="polyline2381" fill="#FFFF7F" points="610.342,462.151 610.197,461.718 610.342,460.995 610.342,462.151 "/>
+ <polyline id="polyline2383" points="610.342,107.91 611.061,108.486 614.518,113.094 613.654,112.52 611.639,109.494
+ 610.342,107.91 "/>
+
+ <polygon id="polygon2385" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 610.342,107.91 611.061,108.486 614.518,113.094 613.654,112.52 611.639,109.494 "/>
+ <polyline id="polyline2387" fill="#FECC2E" points="636.838,929.286 636.838,928.853 632.373,931.302 636.838,929.286 "/>
+ <polyline id="polyline2389" points="614.518,113.094 616.102,113.381 617.252,114.965 617.541,115.688 616.678,114.534
+ 614.518,113.094 "/>
+
+ <polygon id="polygon2391" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 614.518,113.094 616.102,113.381 617.252,114.965 617.541,115.688 616.678,114.534 "/>
+ <polyline id="polyline2393" points="615.957,922.661 613.795,922.085 613.654,921.509 615.094,921.796 615.957,922.661 "/>
+
+ <polygon id="polygon2395" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 615.957,922.661 613.795,922.085 613.654,921.509 615.094,921.796 "/>
+ <polyline id="polyline2397" points="615.957,922.661 616.246,922.806 617.686,923.813 616.963,923.813 615.957,922.661 "/>
+
+ <polygon id="polygon2399" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 615.957,922.661 616.246,922.806 617.686,923.813 616.963,923.813 "/>
+ <polyline id="polyline2401" points="617.541,115.688 618.117,116.406 617.83,116.406 617.541,115.688 "/>
+
+ <polygon id="polygon2403" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 617.541,115.688 618.117,116.406 617.83,116.406 "/>
+ <polyline id="polyline2405" points="617.686,923.813 617.973,923.813 618.547,924.532 617.686,923.813 "/>
+
+ <polygon id="polygon2407" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 617.686,923.813 617.973,923.813 618.547,924.532 "/>
+ <polyline id="polyline2409" points="618.117,116.406 619.27,116.549 620.131,117.99 621.715,118.278 622.438,119.72
+ 624.021,118.709 625.318,119.286 623.877,119.43 622.438,120.006 621.715,118.568 620.131,118.133 618.547,116.984
+ 618.117,116.406 "/>
+
+ <polygon id="polygon2411" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 618.117,116.406 619.27,116.549 620.131,117.99 621.715,118.278 622.438,119.72 624.021,118.709 625.318,119.286 623.877,119.43
+ 622.438,120.006 621.715,118.568 620.131,118.133 618.547,116.984 "/>
+ <polyline id="polyline2413" points="618.547,924.532 618.838,924.677 618.838,924.821 618.547,924.532 "/>
+
+ <polygon id="polygon2415" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 618.547,924.532 618.838,924.677 618.838,924.821 "/>
+ <polyline id="polyline2417" fill="#FECC2E" points="620.422,935.188 626.471,933.173 626.9,933.173 620.998,935.188
+ 620.422,935.188 "/>
+ <polyline id="polyline2419" points="625.318,122.312 625.318,119.286 625.459,119.286 625.318,122.312 "/>
+
+ <polygon id="polygon2421" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 625.318,122.312 625.318,119.286 625.459,119.286 "/>
+ <polyline id="polyline2423" points="625.318,122.312 626.758,124.184 628.197,125.192 629.061,126.629 630.502,128.213
+ 629.061,127.064 628.342,125.622 626.758,124.472 625.748,123.318 625.318,122.454 625.318,122.312 "/>
+
+ <polygon id="polygon2425" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 625.318,122.312 626.758,124.184 628.197,125.192 629.061,126.629 630.502,128.213 629.061,127.064 628.342,125.622
+ 626.758,124.472 625.748,123.318 625.318,122.454 "/>
+ <polyline id="polyline2427" fill="#FFFF7F" points="629.926,-123.642 629.35,-124.936 629.061,-126.376 629.205,-127.816
+ 628.773,-129.4 629.205,-130.84 629.205,-132.424 630.502,-133.864 631.941,-134.296 633.379,-135.448 632.949,-138.472
+ 631.795,-139.912 632.807,-140.201 634.246,-140.058 635.83,-141.064 636.406,-142.504 637.99,-142.36 639.43,-143.081
+ 640.869,-143.369 642.311,-142.936 645.332,-145.384 646.773,-145.384 648.357,-146.104 651.094,-148.84 652.533,-149.128
+ 653.973,-150.136 655.557,-150.712 655.99,-152.152 657.43,-152.584 657.715,-154.168 658.438,-155.608 660.74,-158.488
+ 660.311,-159.928 662.9,-159.928 664.486,-160.936 664.197,-162.376 665.494,-163.816 666.357,-165.256 667.795,-165.833
+ 669.379,-166.84 670.822,-166.984 670.389,-167.417 671.83,-168.856 673.414,-169.72 674.133,-169.432 673.27,-170.873
+ 676.293,-171.88 677.732,-172.744 679.318,-174.041 680.326,-175.48 681.766,-175.336 683.205,-175.625 686.518,-175.625
+ 690.98,-176.201 692.422,-175.912 695.301,-176.488 696.74,-177.352 698.326,-177.64 699.766,-178.216 701.205,-179.081
+ 704.518,-179.224 705.957,-179.512 708.98,-179.512 711.861,-180.953 713.301,-181.384 714.883,-182.249 716.326,-183.4
+ 717.766,-183.256 719.35,-183.688 722.229,-185.272 723.814,-185.128 728.277,-185.848 729.715,-186.28 732.74,-186.28
+ 734.182,-185.992 738.646,-186.568 743.109,-185.992 745.99,-186.424 747.572,-186.424 749.014,-186.856 750.453,-186.856
+ 752.037,-186.424 753.479,-187 754.916,-186.856 755.781,-187.289 756.502,-187.72 756.502,-146.392 754.051,-145.672
+ 753.043,-145.816 751.605,-144.953 750.453,-143.8 748.869,-142.792 747.861,-142.504 746.422,-142.792 745.125,-141.208
+ 743.686,-140.058 742.244,-140.058 740.807,-141.064 739.365,-141.642 737.781,-141.497 734.758,-140.776 734.182,-137.464
+ 733.459,-136.024 730.582,-135.304 728.998,-134.584 729.715,-133.144 729.285,-132.136 730.293,-130.84 728.854,-131.992
+ 727.846,-133.144 727.846,-133.289 727.701,-133.432 726.838,-134.296 725.252,-135.16 724.244,-135.448 723.957,-134.152
+ 722.373,-133.576 720.357,-133.864 715.029,-137.896 713.59,-138.184 712.15,-138.041 708.547,-138.904 706.963,-138.184
+ 706.102,-136.744 705.379,-136.888 704.084,-137.033 704.084,-137.608 703.654,-137.033 702.211,-136.024 699.189,-137.896
+ 697.318,-137.176 696.164,-136.024 695.445,-134.008 693.143,-132.28 691.701,-131.992 688.822,-132.28 687.379,-131.128
+ 686.518,-132.712 686.518,-134.152 685.076,-132.856 686.518,-131.56 686.807,-130.121 686.373,-128.682 686.084,-128.392
+ 684.502,-128.392 683.061,-128.104 681.621,-128.968 680.9,-129.976 679.459,-131.272 677.156,-132.28 674.277,-131.705
+ 672.838,-132.136 668.373,-132.136 666.934,-132.568 665.35,-132.424 663.908,-133.144 662.471,-132.568 661.029,-132.712
+ 660.164,-134.296 657.285,-135.304 655.846,-134.584 652.102,-136.457 651.379,-136.6 648.789,-136.024 647.35,-136.024
+ 645.908,-135.304 645.332,-134.296 643.893,-132.856 642.164,-133 639.141,-131.417 638.709,-129.976 638.422,-126.953
+ 638.998,-125.512 638.131,-124.072 638.277,-121.912 639.141,-120.184 638.854,-118.457 637.414,-118.457 635.973,-117.448
+ 634.533,-117.736 633.094,-119.033 631.941,-120.472 632.084,-122.058 630.789,-123.497 629.926,-123.642 "/>
+ <polyline id="polyline2429" fill="#FFFF7F" points="638.854,-118.457 639.141,-120.184 638.277,-121.912 638.131,-124.072
+ 638.998,-125.512 638.422,-126.953 638.709,-129.976 639.141,-131.417 642.164,-133 643.893,-132.856 645.332,-134.296
+ 645.908,-135.304 647.35,-136.024 648.789,-136.024 651.379,-136.6 652.102,-136.457 655.846,-134.584 657.285,-135.304
+ 660.164,-134.296 661.029,-132.712 662.471,-132.568 661.029,-132.136 660.74,-132.568 660.453,-133.289 659.014,-134.296
+ 657.43,-134.873 655.99,-134.152 654.547,-134.44 651.525,-136.168 649.51,-135.592 646.627,-135.592 645.908,-134.152
+ 644.613,-132.712 641.877,-132.28 639.572,-130.552 638.564,-127.528 639.715,-126.088 639.285,-124.648 638.422,-123.208
+ 638.422,-122.344 639.141,-120.762 639.572,-118.888 638.854,-118.457 "/>
+ <polyline id="polyline2431" points="641.445,725.095 641.59,724.661 641.732,724.517 641.445,725.095 "/>
+
+ <polygon id="polygon2433" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 641.445,725.095 641.59,724.661 641.732,724.517 "/>
+ <polyline id="polyline2435" points="645.043,720.194 645.189,719.333 645.332,719.333 645.189,720.054 645.043,720.194 "/>
+
+ <polygon id="polygon2437" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 645.043,720.194 645.189,719.333 645.332,719.333 645.189,720.054 "/>
+ <polyline id="polyline2439" points="648.211,712.854 648.934,711.847 649.654,711.847 648.211,712.854 "/>
+
+ <polygon id="polygon2441" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 648.211,712.854 648.934,711.847 649.654,711.847 "/>
+ <polyline id="polyline2443" points="659.445,608.454 659.877,608.022 663.479,608.022 666.211,609.317 669.236,611.333
+ 668.518,612.772 668.229,615.653 669.67,615.509 669.67,617.095 671.252,616.663 672.693,616.806 673.701,615.366 675.285,615.653
+ 673.701,615.942 673.414,617.382 674.422,618.821 675.715,621.847 677.156,621.126 678.74,620.981 680.326,621.413
+ 680.758,622.854 681.766,623.431 680.326,623.862 679.893,622.421 678.453,621.702 676.869,621.702 677.014,623.142
+ 674.133,623.286 673.125,626.31 672.262,627.751 673.701,623.286 673.701,620.403 672.262,619.255 670.822,619.687
+ 669.379,620.692 668.373,622.134 669.236,620.118 670.678,619.11 668.229,616.229 667.51,615.079 667.654,610.612 666.211,610.759
+ 665.061,609.173 662.037,608.31 659.445,608.454 "/>
+
+ <polygon id="polygon2445" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 659.445,608.454 659.877,608.022 663.479,608.022 666.211,609.317 669.236,611.333 668.518,612.772 668.229,615.653
+ 669.67,615.509 669.67,617.095 671.252,616.663 672.693,616.806 673.701,615.366 675.285,615.653 673.701,615.942 673.414,617.382
+ 674.422,618.821 675.715,621.847 677.156,621.126 678.74,620.981 680.326,621.413 680.758,622.854 681.766,623.431
+ 680.326,623.862 679.893,622.421 678.453,621.702 676.869,621.702 677.014,623.142 674.133,623.286 673.125,626.31
+ 672.262,627.751 673.701,623.286 673.701,620.403 672.262,619.255 670.822,619.687 669.379,620.692 668.373,622.134
+ 669.236,620.118 670.678,619.11 668.229,616.229 667.51,615.079 667.654,610.612 666.211,610.759 665.061,609.173 662.037,608.31
+ "/>
+ <polyline id="polyline2447" fill="#FFFF7F" points="662.471,-132.568 663.908,-133.144 665.35,-132.424 666.934,-132.568
+ 668.373,-132.136 672.838,-132.136 674.277,-131.705 677.156,-132.28 679.459,-131.272 680.9,-129.976 681.621,-128.968
+ 683.061,-128.104 684.502,-128.392 686.084,-128.392 686.373,-128.682 686.807,-130.121 686.518,-131.56 685.076,-132.856
+ 686.518,-134.152 686.518,-132.712 687.379,-131.128 688.822,-132.28 691.701,-131.992 693.143,-132.28 695.445,-134.008
+ 696.164,-136.024 697.318,-137.176 699.189,-137.896 702.211,-136.024 703.654,-137.033 704.084,-137.608 704.084,-137.033
+ 705.379,-136.888 706.102,-136.744 706.963,-138.184 708.547,-138.904 712.15,-138.041 713.59,-138.184 715.029,-137.896
+ 720.357,-133.864 722.373,-133.576 723.957,-134.152 724.244,-135.448 725.252,-135.16 726.838,-134.296 727.701,-133.432
+ 725.686,-134.152 724.963,-134.873 724.389,-134.008 723.236,-133 719.205,-133.576 717.766,-135.016 716.9,-135.448
+ 716.182,-136.744 715.029,-137.32 713.59,-137.608 710.564,-137.608 710.133,-138.041 708.693,-138.328 707.109,-138.041
+ 706.389,-136.312 704.807,-136.312 703.223,-135.736 702.068,-134.873 700.627,-135.304 702.211,-135.304 700.627,-136.168
+ 699.189,-136.457 699.043,-136.312 697.459,-136.888 696.598,-135.736 696.164,-134.152 693.715,-131.705 690.838,-130.552
+ 688.102,-130.696 688.389,-129.976 686.949,-129.112 686.229,-127.816 683.205,-127.816 682.197,-128.104 679.605,-130.266
+ 678.164,-130.984 675.572,-131.56 668.084,-131.85 665.061,-132.136 664.197,-132.568 662.471,-132.568 "/>
+ <polyline id="polyline2449" points="680.613,634.806 681.621,635.235 681.189,635.382 680.613,634.806 "/>
+
+ <polygon id="polygon2451" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 680.613,634.806 681.621,635.235 681.189,635.382 "/>
+ <polyline id="polyline2453" points="681.621,635.235 682.627,634.95 684.068,634.95 684.502,635.524 685.941,635.235
+ 688.822,636.821 690.262,638.118 687.379,640.854 689.686,643.733 689.109,646.181 687.814,647.765 687.814,649.206
+ 687.379,650.646 688.389,652.087 688.678,653.524 687.236,652.374 686.229,650.935 687.094,649.493 686.949,647.188
+ 688.533,646.038 688.822,644.597 686.949,641.862 686.229,641.431 686.807,640.134 688.389,638.839 688.678,637.397
+ 687.236,637.255 686.518,635.813 685.076,636.247 683.639,635.235 682.051,635.524 681.621,635.235 "/>
+
+ <polygon id="polygon2455" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 681.621,635.235 682.627,634.95 684.068,634.95 684.502,635.524 685.941,635.235 688.822,636.821 690.262,638.118 687.379,640.854
+ 689.686,643.733 689.109,646.181 687.814,647.765 687.814,649.206 687.379,650.646 688.389,652.087 688.678,653.524
+ 687.236,652.374 686.229,650.935 687.094,649.493 686.949,647.188 688.533,646.038 688.822,644.597 686.949,641.862
+ 686.229,641.431 686.807,640.134 688.389,638.839 688.678,637.397 687.236,637.255 686.518,635.813 685.076,636.247
+ 683.639,635.235 682.051,635.524 "/>
+ <polyline id="polyline2457" points="681.766,623.431 682.342,623.718 683.35,622.278 682.916,620.839 683.35,619.255
+ 684.934,619.687 686.229,618.247 685.654,619.687 684.211,619.974 684.357,621.558 684.789,621.989 686.518,621.558
+ 686.662,621.989 684.646,622.421 682.773,623.431 682.773,624.149 683.639,625.157 681.766,623.431 "/>
+
+ <polygon id="polygon2459" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 681.766,623.431 682.342,623.718 683.35,622.278 682.916,620.839 683.35,619.255 684.934,619.687 686.229,618.247 685.654,619.687
+ 684.211,619.974 684.357,621.558 684.789,621.989 686.518,621.558 686.662,621.989 684.646,622.421 682.773,623.431
+ 682.773,624.149 683.639,625.157 "/>
+ <polyline id="polyline2461" points="682.051,128.648 682.342,128.07 682.342,128.358 682.051,128.648 "/>
+
+ <polygon id="polygon2463" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 682.051,128.648 682.342,128.07 682.342,128.358 "/>
+ <polyline id="polyline2465" points="682.051,128.648 681.908,129.366 681.766,130.95 682.197,132.534 683.205,133.976
+ 683.926,135.56 685.076,136.998 688.102,138.87 689.686,139.158 692.564,139.016 694.15,139.301 695.732,140.742 700.051,141.461
+ 703.076,142.326 706.102,144.629 707.398,146.213 708.98,146.79 710.422,146.79 710.854,145.206 710.998,146.79 712.438,146.501
+ 713.732,146.936 714.598,147.654 712.869,146.79 711.285,146.936 709.846,147.51 706.822,146.501 705.814,144.917 702.934,142.614
+ 699.908,141.608 698.758,141.608 697.318,141.174 695.877,141.174 694.293,139.877 692.709,139.301 689.686,139.446
+ 688.244,139.158 686.807,138.582 685.223,137.286 683.781,135.702 683.205,134.262 681.908,132.678 681.479,131.238
+ 681.334,129.797 682.051,128.648 "/>
+
+ <polygon id="polygon2467" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 682.051,128.648 681.908,129.366 681.766,130.95 682.197,132.534 683.205,133.976 683.926,135.56 685.076,136.998 688.102,138.87
+ 689.686,139.158 692.564,139.016 694.15,139.301 695.732,140.742 700.051,141.461 703.076,142.326 706.102,144.629
+ 707.398,146.213 708.98,146.79 710.422,146.79 710.854,145.206 710.998,146.79 712.438,146.501 713.732,146.936 714.598,147.654
+ 712.869,146.79 711.285,146.936 709.846,147.51 706.822,146.501 705.814,144.917 702.934,142.614 699.908,141.608 698.758,141.608
+ 697.318,141.174 695.877,141.174 694.293,139.877 692.709,139.301 689.686,139.446 688.244,139.158 686.807,138.582
+ 685.223,137.286 683.781,135.702 683.205,134.262 681.908,132.678 681.479,131.238 681.334,129.797 "/>
+ <polyline id="polyline2469" points="686.084,358.038 686.662,356.599 688.963,353.573 690.406,352.278 693.285,351.126
+ 694.15,349.687 697.029,348.966 698.613,347.958 700.051,346.95 700.916,345.511 702.357,345.366 699.334,347.958 697.748,348.966
+ 696.311,349.687 694.725,349.687 693.715,351.126 692.133,352.136 690.693,352.71 688.822,354.438 686.518,357.894
+ 686.084,358.038 "/>
+
+ <polygon id="polygon2471" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 686.084,358.038 686.662,356.599 688.963,353.573 690.406,352.278 693.285,351.126 694.15,349.687 697.029,348.966
+ 698.613,347.958 700.051,346.95 700.916,345.511 702.357,345.366 699.334,347.958 697.748,348.966 696.311,349.687
+ 694.725,349.687 693.715,351.126 692.133,352.136 690.693,352.71 688.822,354.438 686.518,357.894 "/>
+ <polyline id="polyline2473" points="686.662,621.989 686.807,621.989 687.094,623.142 686.807,623.142 686.662,621.989 "/>
+
+ <polygon id="polygon2475" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 686.662,621.989 686.807,621.989 687.094,623.142 686.807,623.142 "/>
+ <polyline id="polyline2477" points="687.094,623.142 688.244,622.997 689.686,623.286 691.557,624.294 689.973,624.149
+ 687.094,623.431 687.094,623.142 "/>
+
+ <polygon id="polygon2479" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 687.094,623.142 688.244,622.997 689.686,623.286 691.557,624.294 689.973,624.149 687.094,623.431 "/>
+ <polyline id="polyline2481" points="689.109,688.661 689.541,688.661 689.83,689.524 689.109,688.661 "/>
+
+ <polygon id="polygon2483" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 689.109,688.661 689.541,688.661 689.83,689.524 "/>
+ <polyline id="polyline2485" points="689.973,504.63 689.973,504.485 690.406,503.333 690.547,503.622 689.973,504.63 "/>
+
+ <polygon id="polygon2487" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 689.973,504.63 689.973,504.485 690.406,503.333 690.547,503.622 "/>
+ <polyline id="polyline2489" points="689.973,501.751 689.973,501.606 690.547,500.599 689.973,501.751 "/>
+
+ <polygon id="polygon2491" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 689.973,501.751 689.973,501.606 690.547,500.599 "/>
+ <polyline id="polyline2493" points="689.973,501.751 690.547,503.046 690.406,503.333 689.83,502.181 689.973,501.751 "/>
+
+ <polygon id="polygon2495" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 689.973,501.751 690.547,503.046 690.406,503.333 689.83,502.181 "/>
+ <polyline id="polyline2497" points="690.547,500.599 690.693,499.157 691.99,497.573 692.564,496.278 692.422,494.839
+ 692.709,493.397 693.43,491.958 693.572,490.374 694.582,488.935 696.021,487.782 695.877,486.341 696.453,483.317
+ 697.174,481.878 697.318,478.997 697.748,478.136 699.189,477.562 699.043,476.118 699.908,474.679 700.916,471.798
+ 700.916,470.214 702.068,468.774 703.365,465.897 702.934,464.312 704.084,461.286 706.389,458.405 706.822,456.819
+ 707.83,455.382 709.414,454.229 708.693,452.79 709.846,451.206 712.582,448.472 712.725,447.03 714.164,445.733 715.174,445.589
+ 716.326,444.151 718.051,441.413 718.486,439.976 721.365,438.679 722.807,437.526 723.094,435.942 723.957,434.499
+ 726.838,434.069 728.133,432.487 731.014,430.472 732.021,431.046 733.605,430.612 735.043,429.749 736.486,430.183
+ 738.068,429.319 738.934,427.878 740.518,426.87 741.379,423.847 742.102,422.405 743.541,422.554 743.252,421.11 743.83,419.671
+ 744.693,419.815 744.406,419.958 743.83,421.542 743.686,422.983 742.244,422.839 741.236,425.431 741.67,426.87 740.229,427.444
+ 739.51,429.03 736.627,430.612 735.043,430.183 733.605,431.046 732.164,431.479 730.869,431.19 727.99,433.065 726.98,434.499
+ 724.102,434.647 723.379,436.229 723.094,437.671 721.654,438.966 720.211,439.827 718.773,440.118 718.486,441.562
+ 716.326,445.015 713.301,447.171 713.014,448.612 709.125,452.79 709.701,454.229 707.109,457.11 706.678,458.55 705.67,460.136
+ 704.373,461.573 703.51,464.454 703.654,466.472 701.494,470.214 701.35,471.798 699.334,476.263 699.479,477.702 698.037,478.421
+ 697.318,479.862 697.748,481.444 696.453,484.325 696.453,485.767 696.164,486.774 696.598,488.214 695.156,488.79
+ 693.861,490.229 693.861,491.813 692.709,494.839 692.854,496.278 692.422,497.862 692.133,498.581 690.838,500.022
+ 690.547,500.599 "/>
+
+ <polygon id="polygon2499" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 690.547,500.599 690.693,499.157 691.99,497.573 692.564,496.278 692.422,494.839 692.709,493.397 693.43,491.958 693.572,490.374
+ 694.582,488.935 696.021,487.782 695.877,486.341 696.453,483.317 697.174,481.878 697.318,478.997 697.748,478.136
+ 699.189,477.562 699.043,476.118 699.908,474.679 700.916,471.798 700.916,470.214 702.068,468.774 703.365,465.897
+ 702.934,464.312 704.084,461.286 706.389,458.405 706.822,456.819 707.83,455.382 709.414,454.229 708.693,452.79 709.846,451.206
+ 712.582,448.472 712.725,447.03 714.164,445.733 715.174,445.589 716.326,444.151 718.051,441.413 718.486,439.976
+ 721.365,438.679 722.807,437.526 723.094,435.942 723.957,434.499 726.838,434.069 728.133,432.487 731.014,430.472
+ 732.021,431.046 733.605,430.612 735.043,429.749 736.486,430.183 738.068,429.319 738.934,427.878 740.518,426.87
+ 741.379,423.847 742.102,422.405 743.541,422.554 743.252,421.11 743.83,419.671 744.693,419.815 744.406,419.958 743.83,421.542
+ 743.686,422.983 742.244,422.839 741.236,425.431 741.67,426.87 740.229,427.444 739.51,429.03 736.627,430.612 735.043,430.183
+ 733.605,431.046 732.164,431.479 730.869,431.19 727.99,433.065 726.98,434.499 724.102,434.647 723.379,436.229 723.094,437.671
+ 721.654,438.966 720.211,439.827 718.773,440.118 718.486,441.562 716.326,445.015 713.301,447.171 713.014,448.612
+ 709.125,452.79 709.701,454.229 707.109,457.11 706.678,458.55 705.67,460.136 704.373,461.573 703.51,464.454 703.654,466.472
+ 701.494,470.214 701.35,471.798 699.334,476.263 699.479,477.702 698.037,478.421 697.318,479.862 697.748,481.444
+ 696.453,484.325 696.453,485.767 696.164,486.774 696.598,488.214 695.156,488.79 693.861,490.229 693.861,491.813
+ 692.709,494.839 692.854,496.278 692.422,497.862 692.133,498.581 690.838,500.022 "/>
+ <polyline id="polyline2501" points="692.854,506.214 693.143,506.071 692.998,506.214 692.854,506.214 "/>
+
+ <polygon id="polygon2503" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 692.854,506.214 693.143,506.071 692.998,506.214 "/>
+ <polyline id="polyline2505" points="693.143,506.071 695.156,503.333 696.598,503.046 699.479,502.759 699.908,502.612
+ 698.9,503.478 696.021,503.765 694.582,504.485 693.43,505.927 693.143,506.071 "/>
+
+ <polygon id="polygon2507" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 693.143,506.071 695.156,503.333 696.598,503.046 699.479,502.759 699.908,502.612 698.9,503.478 696.021,503.765 694.582,504.485
+ 693.43,505.927 "/>
+ <polyline id="polyline2509" points="699.908,502.612 700.486,502.181 700.773,502.47 699.908,502.612 "/>
+
+ <polygon id="polygon2511" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 699.908,502.612 700.486,502.181 700.773,502.47 "/>
+ <polyline id="polyline2513" points="700.773,502.47 701.061,502.325 702.502,503.478 706.963,504.054 707.398,505.495
+ 710.422,504.919 711.572,506.071 713.301,505.927 713.59,507.509 713.301,508.95 714.021,510.39 714.021,511.974 715.174,513.413
+ 715.748,514.854 715.748,516.294 718.773,518.165 720.211,518.454 721.51,520.038 722.949,520.038 723.814,521.478
+ 725.252,521.765 725.686,523.206 727.125,523.349 728.564,524.358 727.99,525.798 728.277,525.798 729.715,527.095
+ 730.725,528.534 732.164,529.397 730.725,528.821 729.285,528.966 729.43,527.382 727.557,525.942 728.277,524.501
+ 725.398,523.349 725.109,521.911 723.525,521.622 722.373,520.181 720.934,520.181 720.068,518.597 718.486,518.31
+ 715.605,516.581 715.605,515.142 714.453,513.56 713.877,512.118 713.732,510.679 712.869,509.095 713.445,507.653
+ 712.582,506.214 711.43,506.358 710.277,505.206 708.838,505.495 707.398,506.214 706.389,504.774 704.807,504.63 703.365,503.765
+ 701.926,503.622 700.773,502.47 "/>
+
+ <polygon id="polygon2515" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 700.773,502.47 701.061,502.325 702.502,503.478 706.963,504.054 707.398,505.495 710.422,504.919 711.572,506.071
+ 713.301,505.927 713.59,507.509 713.301,508.95 714.021,510.39 714.021,511.974 715.174,513.413 715.748,514.854 715.748,516.294
+ 718.773,518.165 720.211,518.454 721.51,520.038 722.949,520.038 723.814,521.478 725.252,521.765 725.686,523.206
+ 727.125,523.349 728.564,524.358 727.99,525.798 728.277,525.798 729.715,527.095 730.725,528.534 732.164,529.397
+ 730.725,528.821 729.285,528.966 729.43,527.382 727.557,525.942 728.277,524.501 725.398,523.349 725.109,521.911
+ 723.525,521.622 722.373,520.181 720.934,520.181 720.068,518.597 718.486,518.31 715.605,516.581 715.605,515.142 714.453,513.56
+ 713.877,512.118 713.732,510.679 712.869,509.095 713.445,507.653 712.582,506.214 711.43,506.358 710.277,505.206
+ 708.838,505.495 707.398,506.214 706.389,504.774 704.807,504.63 703.365,503.765 701.926,503.622 "/>
+ <polyline id="polyline2517" fill="#FFFF7F" points="727.701,-133.432 727.846,-133.289 727.846,-133.144 727.701,-133.432 "/>
+ <polyline id="polyline2519" fill="#FFFF7F" points="727.846,-133.144 728.854,-131.992 730.293,-130.84 730.293,-130.552
+ 731.732,-129.544 732.453,-129.4 734.037,-128.249 734.9,-128.249 736.486,-127.384 736.916,-126.953 737.205,-126.953
+ 738.502,-126.665 739.941,-126.088 741.094,-126.232 741.525,-126.088 742.102,-124.792 743.252,-123.352 744.838,-122.344
+ 745.557,-122.201 743.973,-122.201 742.533,-123.352 740.949,-125.512 739.51,-125.8 732.883,-128.537 728.854,-131.272
+ 727.99,-132.568 727.846,-133.144 "/>
+ <polyline id="polyline2521" fill="#FECC2E" points="730.293,-130.84 729.285,-132.136 729.715,-133.144 728.998,-134.584
+ 730.582,-135.304 733.459,-136.024 734.182,-137.464 734.758,-140.776 737.781,-141.497 739.365,-141.642 740.807,-141.064
+ 742.244,-140.058 743.686,-140.058 745.125,-141.208 746.422,-142.792 747.861,-142.504 748.869,-142.792 750.453,-143.8
+ 751.605,-144.953 753.043,-145.816 754.051,-145.672 756.502,-146.392 756.502,-122.058 755.781,-122.488 754.916,-122.344
+ 754.197,-121.48 752.613,-122.058 749.59,-121.05 747.861,-121.625 747.715,-121.768 747.143,-121.912 744.98,-122.632
+ 743.973,-123.064 741.814,-125.944 741.525,-126.088 741.379,-126.232 741.094,-126.232 740.373,-126.52 737.205,-126.953
+ 736.486,-127.384 735.479,-128.249 734.9,-128.249 734.613,-128.392 734.182,-128.392 732.74,-129.544 730.293,-130.84 "/>
+ <polyline id="polyline2523" fill="#FFFF7F" points="730.293,-130.84 732.74,-129.544 734.182,-128.392 734.613,-128.392
+ 734.9,-128.249 734.037,-128.249 732.453,-129.4 731.732,-129.544 730.293,-130.552 730.293,-130.84 "/>
+ <polyline id="polyline2525" fill="#CCE83A" points="731.59,908.694 731.301,907.972 730.725,906.101 731.59,904.661
+ 735.908,902.356 736.916,900.917 741.379,900.054 742.822,898.899 744.406,898.325 745.846,897.317 748.869,896.886
+ 751.748,894.437 753.334,893.571 754.197,892.708 754.916,891.269 755.781,890.403 756.502,889.685 756.502,906.388
+ 755.781,905.813 753.479,904.229 752.037,903.796 750.453,904.517 749.014,905.524 747.572,905.38 746.133,904.661 744.693,905.38
+ 743.109,905.093 741.67,905.813 740.229,907.253 737.205,908.118 735.766,908.261 734.326,907.54 731.59,908.694 "/>
+ <polyline id="polyline2527" fill="#FFFF7F" points="734.9,-128.249 735.479,-128.249 736.486,-127.384 734.9,-128.249 "/>
+ <polyline id="polyline2529" fill="#CCE83A" points="736.342,725.524 737.926,725.524 738.789,724.085 738.646,723.798
+ 740.229,723.222 740.518,721.78 739.076,720.63 738.934,719.188 740.373,717.749 740.229,716.31 740.662,714.87 743.541,715.157
+ 745.125,715.589 746.133,715.302 746.998,713.862 748.438,712.421 748.869,710.981 750.74,708.245 753.766,706.948
+ 755.205,707.958 755.781,707.813 756.502,707.671 756.502,791.765 755.926,792.485 754.916,793.638 753.479,794.935
+ 751.605,795.796 751.318,796.229 751.748,796.517 752.326,798.103 750.453,798.532 746.854,797.235 745.846,795.796
+ 744.406,794.356 743.252,794.646 738.789,797.235 737.205,797.38 733.893,789.894 734.326,787.878 734.182,786.438
+ 733.029,784.997 731.59,784.997 730.006,785.429 728.854,784.854 724.822,779.382 724.963,777.798 725.541,776.356
+ 725.686,774.917 724.963,773.046 723.525,772.325 722.807,770.886 722.662,768.005 724.102,766.997 730.15,766.854 731.59,767.142
+ 732.311,767.571 733.748,767.718 735.334,767.286 736.773,765.989 737.781,763.11 737.926,761.524 737.639,760.661
+ 737.205,760.517 735.621,760.806 731.301,758.356 729.715,757.062 728.277,756.772 729.861,756.194 730.582,754.757
+ 730.869,753.317 730.725,751.735 731.59,748.854 730.869,747.413 729.285,746.118 729.43,744.679 730.725,743.235 731.301,741.798
+ 731.301,739.493 732.74,736.612 732.021,735.03 732.311,733.589 731.877,732.149 730.869,730.708 732.311,730.134 732.164,728.694
+ 730.725,728.263 730.293,727.829 732.883,726.532 734.326,724.948 735.766,723.94 736.342,725.524 "/>
+ <polyline id="polyline2531" fill="#FFFF7F" points="736.486,-127.384 737.205,-126.953 736.916,-126.953 736.486,-127.384 "/>
+ <polyline id="polyline2533" fill="#FFFF7F" points="737.205,-126.953 740.373,-126.52 741.094,-126.232 739.941,-126.088
+ 738.502,-126.665 737.205,-126.953 "/>
+ <polyline id="polyline2535" fill="#FFFF7F" points="741.094,-126.232 741.379,-126.232 741.525,-126.088 741.094,-126.232 "/>
+ <polyline id="polyline2537" fill="#FFFF7F" points="741.525,-126.088 741.814,-125.944 743.973,-123.064 744.98,-122.632
+ 747.143,-121.912 745.557,-122.201 744.838,-122.344 743.252,-123.352 742.102,-124.792 741.525,-126.088 "/>
+ <polyline id="polyline2539" fill="#FB9A85" points="743.541,-288.808 756.502,-288.808 756.502,-264.041 755.781,-264.472
+ 754.916,-265.048 753.479,-265.192 751.893,-264.184 750.453,-263.896 750.311,-262.457 748.869,-261.016 748.438,-261.016
+ 748.15,-262.457 746.564,-263.033 746.277,-264.617 747.572,-266.056 748.438,-267.497 748.582,-268.936 748.15,-269.512
+ 746.709,-269.512 745.125,-268.792 744.262,-271.816 742.822,-272.104 739.795,-270.232 739.51,-268.648 743.973,-266.488
+ 744.406,-265.048 739.941,-262.6 738.502,-265.48 738.357,-266.92 736.916,-268.504 735.479,-268.504 736.916,-269.944
+ 738.357,-270.953 740.662,-273.833 742.963,-278.44 742.244,-280.024 741.957,-283.192 742.102,-284.632 743.686,-287.512
+ 743.686,-288.088 743.541,-288.808 "/>
+ <polyline id="polyline2541" points="744.693,419.815 745.557,419.671 745.27,419.958 744.693,419.815 "/>
+
+ <polygon id="polygon2543" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 744.693,419.815 745.557,419.671 745.27,419.958 "/>
+ <polyline id="polyline2545" points="745.557,419.671 746.564,418.519 748.006,417.511 747.43,418.374 747.43,418.663
+ 745.846,419.526 745.557,419.671 "/>
+
+ <polygon id="polygon2547" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 745.557,419.671 746.564,418.519 748.006,417.511 747.43,418.374 747.43,418.663 745.846,419.526 "/>
+ <polyline id="polyline2549" fill="#FFFF7F" points="745.557,-122.201 747.143,-121.912 747.861,-121.625 749.301,-120.472
+ 748.582,-120.904 745.557,-122.201 "/>
+ <polyline id="polyline2551" fill="#FFFF7F" points="747.143,-121.912 747.715,-121.768 747.861,-121.625 747.143,-121.912 "/>
+ <polyline id="polyline2553" fill="#FFFF7F" points="747.861,-121.625 749.59,-121.05 752.613,-122.058 754.197,-121.48
+ 754.051,-121.336 754.486,-119.896 756.211,-119.033 756.502,-118.312 755.781,-118.744 755.494,-118.888 754.051,-120.041
+ 753.334,-121.48 752.471,-121.625 752.182,-121.625 749.301,-120.472 747.861,-121.625 "/>
+ <polyline id="polyline2555" points="748.006,417.511 748.293,416.358 748.438,416.935 748.006,417.511 "/>
+
+ <polygon id="polygon2557" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 748.006,417.511 748.293,416.358 748.438,416.935 "/>
+ <polyline id="polyline2559" points="748.006,415.206 747.861,414.487 753.334,411.175 754.773,411.606 754.916,411.175
+ 755.061,412.183 753.621,411.462 752.037,412.472 750.598,412.901 749.156,414.058 748.006,415.206 "/>
+
+ <polygon id="polygon2561" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 748.006,415.206 747.861,414.487 753.334,411.175 754.773,411.606 754.916,411.175 755.061,412.183 753.621,411.462
+ 752.037,412.472 750.598,412.901 749.156,414.058 "/>
+ <polyline id="polyline2563" points="748.006,415.206 748.293,416.069 748.293,416.358 747.861,415.495 748.006,415.206 "/>
+
+ <polygon id="polygon2565" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 748.006,415.206 748.293,416.069 748.293,416.358 747.861,415.495 "/>
+ <polyline id="polyline2567" fill="#FFFF7F" points="749.301,-120.472 752.182,-121.625 752.471,-121.625 752.471,-121.05
+ 751.029,-120.904 749.445,-120.328 749.301,-120.472 "/>
+ <polyline id="polyline2569" fill="#FFFF7F" points="752.471,-121.625 753.334,-121.48 754.051,-120.041 755.494,-118.888
+ 755.781,-118.744 756.502,-118.312 755.781,-118.6 754.916,-119.033 754.197,-119.608 752.471,-121.625 "/>
+ <polyline id="polyline2571" fill="#FFFF7F" points="754.197,-121.48 754.916,-121.912 755.781,-122.058 756.502,-122.058
+ 756.502,-118.312 756.211,-119.033 754.486,-119.896 754.051,-121.336 754.197,-121.48 "/>
+ <polyline id="polyline2573" fill="#FFFF7F" points="754.197,-121.48 754.916,-122.344 755.781,-122.488 756.502,-122.058
+ 755.781,-122.058 754.916,-121.912 754.197,-121.48 "/>
+ <polyline id="polyline2575" fill="#FFFF7F" points="754.627,-93.112 756.502,-94.266 756.502,-90.665 755.781,-92.249
+ 754.627,-93.112 "/>
+ <polyline id="polyline2577" fill="#FFFF7F" points="754.627,-93.112 754.916,-93.833 756.502,-94.266 754.627,-93.112 "/>
+ <polyline id="polyline2579" fill="#FFFF7F" points="754.627,-93.112 755.781,-92.249 756.502,-90.665 754.627,-93.112 "/>
+ <polyline id="polyline2581" points="754.916,411.175 754.916,410.599 755.35,410.312 754.916,411.175 "/>
+
+ <polygon id="polygon2583" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 754.916,411.175 754.916,410.599 755.35,410.312 "/>
+ <polyline id="polyline2585" points="755.35,410.312 755.494,410.022 755.781,409.878 756.502,409.591 755.781,410.022
+ 755.35,410.312 "/>
+
+ <polygon id="polygon2587" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 755.35,410.312 755.494,410.022 755.781,409.878 756.502,409.591 755.781,410.022 "/>
+ <polyline id="polyline2589" fill="#FECC2E" points="756.068,-45.304 756.502,-46.024 756.502,27.127 756.068,26.984
+ 754.627,25.688 753.766,24.104 752.471,23.383 751.174,21.942 750.74,20.358 748.869,17.48 747.43,16.472 746.277,15.03
+ 744.693,13.879 744.547,13.158 743.398,11.72 743.252,10.278 742.533,8.694 742.822,5.816 741.814,4.375 742.678,2.936
+ 742.678,1.352 741.957,-0.09 742.102,-1.528 741.094,-2.97 739.654,-3.544 738.646,-4.842 737.926,-10.744 739.223,-12.184
+ 738.646,-13.768 739.365,-16.648 740.662,-18.09 740.662,-19.528 741.814,-22.554 742.678,-23.992 744.117,-23.56 743.541,-26.586
+ 745.125,-26.728 746.564,-27.594 746.854,-29.033 748.293,-32.346 749.301,-33.785 750.74,-35.224 750.74,-36.808 752.326,-36.376
+ 751.893,-37.96 753.479,-38.537 754.916,-41.56 754.916,-43.144 756.068,-45.304 "/>
+ <polyline id="polyline2591" fill="#FFFF7F" points="412.111,72.16 412.543,71.01 418.879,54.306 449.84,41.776 442.496,71.152
+ 428.096,78.642 412.111,72.16 "/>
+ <polyline id="polyline2593" fill="#FFFF7F" points="641.445,344.214 648.068,333.991 661.174,330.39 669.814,318.87
+ 675.143,324.487 667.365,334.854 658.582,340.038 650.23,340.759 647.061,346.085 647.781,350.263 647.494,351.126
+ 647.061,351.702 644.613,349.253 641.445,344.214 "/>
+ <polyline id="polyline2595" points="-251.498,681.173 -251.498,680.597 -250.923,682.038 -251.498,681.173 "/>
+
+ <polygon id="polygon2597" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -251.498,681.173 -251.498,680.597 -250.923,682.038 "/>
+ <polyline id="polyline2599" points="-250.202,445.304 -250.49,445.304 -250.635,446.741 -250.202,445.304 "/>
+
+ <polygon id="polygon2601" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -250.202,445.304 -250.49,445.304 -250.635,446.741 "/>
+ <polyline id="polyline2603" points="-246.314,437.671 -247.179,437.815 -247.608,439.253 -246.314,437.671 "/>
+
+ <polygon id="polygon2605" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -246.314,437.671 -247.179,437.815 -247.608,439.253 "/>
+ <polyline id="polyline2607" points="-228.746,639.126 -230.042,638.118 -231.48,637.542 -231.771,638.981 -230.33,639.558
+ -228.746,639.126 "/>
+
+ <polygon id="polygon2609" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -228.746,639.126 -230.042,638.118 -231.48,637.542 -231.771,638.981 -230.33,639.558 "/>
+ <polyline id="polyline2611" points="-227.307,602.692 -228.746,602.403 -229.467,603.847 -228.024,604.421 -227.307,602.692 "/>
+
+ <polygon id="polygon2613" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -227.307,602.692 -228.746,602.403 -229.467,603.847 -228.024,604.421 "/>
+ <polyline id="polyline2615" points="-226.44,597.079 -227.45,595.638 -227.45,597.222 -226.587,598.663 -226.44,597.079 "/>
+
+ <polygon id="polygon2617" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -226.44,597.079 -227.45,595.638 -227.45,597.222 -226.587,598.663 "/>
+ <polyline id="polyline2619" points="-224.282,595.782 -224.427,597.366 -225.29,595.782 -224.57,598.95 -223.994,597.366
+ -224.282,595.782 "/>
+
+ <polygon id="polygon2621" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -224.282,595.782 -224.427,597.366 -225.29,595.782 -224.57,598.95 -223.994,597.366 "/>
+ <polyline id="polyline2623" points="-218.379,594.772 -218.379,593.333 -219.816,593.046 -222.843,593.765 -222.41,595.349
+ -222.41,596.79 -220.971,596.067 -220.681,594.63 -219.097,595.206 -218.379,594.772 "/>
+
+ <polygon id="polygon2625" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -218.379,594.772 -218.379,593.333 -219.816,593.046 -222.843,593.765 -222.41,595.349 -222.41,596.79 -220.971,596.067
+ -220.681,594.63 -219.097,595.206 "/>
+ <polyline id="polyline2627" points="-216.219,515.862 -216.074,514.854 -219.097,515.862 -217.658,516.438 -216.219,515.862 "/>
+
+ <polygon id="polygon2629" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -216.219,515.862 -216.074,514.854 -219.097,515.862 -217.658,516.438 "/>
+ <polyline id="polyline2631" points="-211.179,587.862 -212.042,586.997 -213.48,587.142 -212.473,588.726 -212.618,587.286
+ -211.179,587.862 "/>
+
+ <polygon id="polygon2633" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -211.179,587.862 -212.042,586.997 -213.48,587.142 -212.473,588.726 -212.618,587.286 "/>
+ <polyline id="polyline2635" points="-213.339,586.134 -212.763,586.565 -211.322,586.134 -211.755,584.692 -213.339,586.134 "/>
+
+ <polygon id="polygon2637" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -213.339,586.134 -212.763,586.565 -211.322,586.134 -211.755,584.692 "/>
+ <polyline id="polyline2639" points="-207.433,583.397 -207.433,582.103 -208.874,582.103 -207.433,583.397 "/>
+
+ <polygon id="polygon2641" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -207.433,583.397 -207.433,582.103 -208.874,582.103 "/>
+ <polyline id="polyline2643" points="151.126,912.437 151.846,912.294 151.413,910.708 149.686,911.286 151.126,912.437 "/>
+
+ <polygon id="polygon2645" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 151.126,912.437 151.846,912.294 151.413,910.708 149.686,911.286 "/>
+ <polyline id="polyline2647" points="199.941,-70.936 198.502,-71.081 197.062,-70.072 198.502,-68.776 199.653,-70.216
+ 199.941,-70.936 "/>
+
+ <polygon id="polygon2649" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 199.941,-70.936 198.502,-71.081 197.062,-70.072 198.502,-68.776 199.653,-70.216 "/>
+ <polyline id="polyline2651" points="411.045,744.821 412.342,743.669 409.318,743.669 411.045,744.821 "/>
+
+ <polygon id="polygon2653" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 411.045,744.821 412.342,743.669 409.318,743.669 "/>
+ <polyline id="polyline2655" points="418.533,730.278 417.525,731.718 418.963,731.286 418.822,729.847 418.533,730.278 "/>
+
+ <polygon id="polygon2657" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 418.533,730.278 417.525,731.718 418.963,731.286 418.822,729.847 "/>
+ <polyline id="polyline2659" points="-251.498,680.31 -251.498,676.134 -250.635,680.454 -251.498,680.31 "/>
+
+ <polygon id="polygon2661" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -251.498,680.31 -251.498,676.134 -250.635,680.454 "/>
+ <polyline id="polyline2663" fill="#E6F6ED" points="-215.931,167.238 -217.658,162.776 -217.515,161.333 -220.826,156.87
+ -221.259,155.43 -219.816,153.846 -221.259,153.272 -222.265,153.846 -224.715,153.846 -223.563,155.286 -225.003,155.862
+ -225.723,155.43 -224.282,156.728 -224.427,158.312 -225.003,159.75 -223.563,160.184 -222.265,161.622 -221.547,163.064
+ -220.681,166.808 -221.114,169.83 -221.114,171.414 -221.834,172.854 -222.555,175.734 -223.706,184.662 -222.122,185.816
+ -223.272,187.254 -223.418,188.694 -223.994,190.278 -225.29,192.438 -226.44,195.461 -227.307,199.926 -226.587,198.486
+ -226.587,197.045 -224.139,192.582 -223.272,189.702 -221.688,188.262 -220.538,185.238 -218.809,182.358 -218.091,179.48
+ -218.666,178.038 -218.232,176.454 -217.082,177.894 -216.362,176.454 -214.923,175.446 -213.48,174.006 -213.192,172.568
+ -214.49,169.686 -215.641,168.246 -215.931,167.238 "/>
+ <polyline id="polyline2665" fill="#E6F6ED" points="-165.675,185.526 -164.522,182.501 -164.234,184.085 -164.666,185.816
+ -165.53,187.4 -164.234,185.958 -163.225,183.078 -164.522,181.494 -163.513,178.614 -163.513,177.03 -163.225,175.59
+ -164.809,172.568 -163.37,174.006 -162.507,175.59 -162.219,180.054 -162.65,181.494 -162.219,182.934 -164.379,187.686
+ -165.818,189.27 -166.681,190.709 -168.122,190.709 -168.267,192.15 -167.259,193.734 -167.259,192.15 -166.538,193.734
+ -164.954,192.006 -164.379,190.568 -162.938,189.125 -162.219,187.542 -161.641,186.965 -160.345,183.942 -160.057,181.638
+ -160.202,178.614 -160.635,177.174 -162.362,174.293 -163.513,172.854 -164.954,171.558 -167.834,164.358 -166.395,159.896
+ -166.106,158.6 -166.106,157.158 -165.242,155.717 -163.803,155.144 -162.362,154.998 -160.778,154.278 -159.339,152.984
+ -156.746,152.694 -157.034,151.254 -156.314,149.669 -154.874,149.094 -153.435,147.942 -151.994,147.51 -150.41,146.648
+ -149.402,145.206 -146.379,143.91 -145.946,143.333 -147.53,142.614 -148.971,143.48 -150.41,143.768 -151.851,144.342
+ -152.282,145.782 -156.746,145.352 -159.771,145.782 -161.211,146.648 -162.65,146.79 -164.091,146.07 -164.522,144.629
+ -163.946,143.045 -162.362,140.024 -164.379,137.144 -165.818,135.99 -166.106,134.406 -167.547,134.118 -168.122,132.678
+ -166.826,131.238 -166.106,129.654 -164.666,128.79 -164.234,127.206 -165.675,127.352 -165.53,124.326 -160.49,121.304
+ -159.339,121.014 -155.019,118.422 -155.883,116.838 -157.322,115.976 -157.322,114.534 -156.891,113.094 -156.746,111.51
+ -156.314,110.07 -155.45,108.629 -154.154,107.045 -152.715,106.038 -151.274,104.6 -155.45,107.48 -156.314,108.917
+ -157.322,111.942 -157.755,114.822 -157.898,116.262 -157.322,117.702 -158.906,118.856 -159.051,120.293 -160.49,121.304
+ -161.211,121.304 -160.923,120.728 -162.362,121.734 -165.385,122.166 -166.538,122.742 -168.122,125.768 -169.274,127.206
+ -170.715,127.494 -173.595,129.797 -176.042,134.262 -176.761,138.87 -177.626,140.312 -177.771,143.333 -178.923,146.213
+ -179.211,147.797 -178.345,149.238 -176.906,148.808 -175.034,150.246 -174.601,152.549 -174.026,153.99 -174.601,156.006
+ -175.61,155.862 -176.187,158.024 -175.322,162.486 -174.026,163.926 -171.578,169.974 -170.137,169.4 -169.994,170.838
+ -169.131,172.278 -167.979,175.301 -167.114,176.742 -168.986,179.766 -169.418,181.206 -168.553,182.648 -168.267,184.518
+ -167.979,184.662 -168.122,183.222 -167.259,181.782 -167.402,180.198 -166.969,181.638 -166.826,180.198 -166.395,181.782
+ -166.681,183.222 -167.402,184.662 -167.402,186.39 -165.818,186.246 -165.675,185.526 "/>
+ <polyline id="polyline2667" fill="#E6F6ED" points="-141.051,102.295 -139.755,100.856 -138.314,99.702 -130.826,95.238
+ -129.387,93.799 -127.658,90.917 -124.635,89.622 -123.051,90.776 -121.179,93.799 -119.738,94.808 -115.994,96.246
+ -117.435,95.094 -119.019,94.374 -121.898,91.782 -123.051,90.342 -124.635,89.333 -127.515,90.631 -128.954,92.07 -129.53,93.51
+ -130.826,94.95 -132.267,95.669 -133.851,96.965 -135.29,97.542 -136.73,98.549 -138.171,99.272 -139.755,99.702 -140.187,101.144
+ -141.051,102.295 "/>
+ <polyline id="polyline2669" fill="#E6F6ED" points="-92.091,138.728 -92.091,140.6 -90.938,142.184 -92.234,145.064
+ -93.242,146.648 -94.683,146.936 -96.267,147.654 -97.131,149.094 -97.706,150.678 -97.563,152.984 -96.122,152.838 -95.69,151.4
+ -94.106,152.262 -92.666,153.702 -93.099,155.144 -91.658,154.854 -90.938,157.734 -89.498,158.888 -88.059,159.608
+ -87.051,158.166 -86.33,159.608 -84.891,160.038 -85.179,157.158 -86.618,155.574 -86.906,154.133 -86.33,151.254 -85.467,149.669
+ -84.171,148.232 -84.026,146.79 -82.587,146.358 -81.146,144.629 -80.57,143.192 -79.131,142.614 -78.41,144.056 -77.69,147.078
+ -77.979,148.518 -77.979,150.104 -77.402,154.422 -74.379,151.686 -72.938,151.542 -72.507,150.104 -72.362,147.51 -71.786,146.07
+ -71.498,143.045 -71.066,141.608 -71.643,138.582 -71.211,137.144 -70.923,134.262 -70.059,132.822 -70.202,131.238
+ -69.051,129.797 -69.482,128.358 -68.763,126.917 -68.33,125.333 -68.042,122.454 -66.603,119.43 -66.603,117.99 -64.73,114.965
+ -66.171,113.526 -67.61,113.381 -69.051,114.246 -69.771,115.688 -68.187,116.262 -68.475,117.702 -69.482,119.286 -70.923,119.72
+ -72.074,122.742 -73.37,124.184 -74.811,124.472 -73.082,127.352 -75.818,131.669 -77.259,133.11 -80.139,133.688 -81.146,135.125
+ -82.587,133.83 -82.442,132.392 -81.723,130.95 -80.139,129.942 -78.698,128.648 -77.69,125.768 -79.131,126.342 -80.57,127.352
+ -82.154,127.494 -83.307,124.472 -83.019,121.446 -85.898,120.15 -86.475,118.568 -86.187,117.125 -85.467,115.542 -85.61,114.104
+ -86.906,114.678 -91.227,118.709 -93.675,121.734 -93.675,123.174 -92.954,124.614 -89.931,127.352 -89.498,133.254
+ -89.931,134.694 -91.37,135.99 -92.811,135.56 -94.106,134.118 -94.971,132.678 -95.547,129.654 -96.698,128.07 -96.843,126.629
+ -95.69,125.192 -96.843,123.608 -98.282,123.896 -98.715,125.622 -97.994,127.064 -98.427,130.085 -98.282,131.526
+ -97.706,132.965 -97.563,134.406 -96.698,136.709 -97.131,139.734 -95.69,139.877 -94.25,138.87 -92.666,138.44 -92.091,138.728
+ "/>
+ <polyline id="polyline2671" points="-251.498,221.094 -251.498,218.934 -251.064,220.374 -251.064,220.518 -251.498,221.094 "/>
+
+ <polygon id="polygon2673" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -251.498,221.094 -251.498,218.934 -251.064,220.374 -251.064,220.518 "/>
+ <polyline id="polyline2675" points="-230.473,606.87 -229.034,607.013 -229.034,607.302 -230.473,606.87 "/>
+
+ <polygon id="polygon2677" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -230.473,606.87 -229.034,607.013 -229.034,607.302 "/>
+ <polyline id="polyline2679" points="-226.874,534.438 -229.179,535.013 -228.458,534.581 -226.874,534.438 "/>
+
+ <polygon id="polygon2681" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -226.874,534.438 -229.179,535.013 -228.458,534.581 "/>
+ <polyline id="polyline2683" points="-190.299,551.862 -188.858,551.573 -188.137,552.005 -189.578,553.302 -190.299,551.862 "/>
+
+ <polygon id="polygon2685" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -190.299,551.862 -188.858,551.573 -188.137,552.005 -189.578,553.302 "/>
+ <polyline id="polyline2687" points="-173.883,318.726 -173.595,317.142 -172.299,314.118 -171.003,312.246 -172.442,312.678
+ -172.874,311.238 -171.29,310.374 -171.146,309.797 -170.57,309.797 -170.715,311.381 -167.259,309.942 -168.843,310.95
+ -170.282,312.246 -172.442,316.709 -173.595,318.149 -173.883,318.726 "/>
+
+ <polygon id="polygon2689" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -173.883,318.726 -173.595,317.142 -172.299,314.118 -171.003,312.246 -172.442,312.678 -172.874,311.238 -171.29,310.374
+ -171.146,309.797 -170.57,309.797 -170.715,311.381 -167.259,309.942 -168.843,310.95 -170.282,312.246 -172.442,316.709
+ -173.595,318.149 "/>
+ <polyline id="polyline2691" fill="#E6F6ED" points="-172.587,161.91 -173.305,160.472 -171.866,160.326 -172.154,161.768
+ -172.587,161.91 "/>
+ <polyline id="polyline2693" fill="#E6F6ED" points="-172.442,163.926 -173.162,162.486 -174.601,160.902 -174.458,159.461
+ -172.874,162.342 -172.442,163.926 "/>
+ <polyline id="polyline2695" fill="#E6F6ED" points="-170.715,168.392 -172.154,165.51 -171.003,166.95 -170.715,168.392 "/>
+ <polyline id="polyline2697" fill="#E6F6ED" points="-170.57,167.094 -171.003,164.07 -171.433,162.629 -171.146,159.75
+ -170.282,162.629 -170.282,165.654 -170.57,167.094 "/>
+ <polyline id="polyline2699" fill="#E6F6ED" points="-170.427,161.768 -170.427,160.326 -169.706,157.301 -170.137,161.768
+ -170.427,161.768 "/>
+ <polyline id="polyline2701" fill="#E6F6ED" points="-169.418,170.118 -169.994,168.534 -169.994,167.094 -169.131,168.534
+ -169.131,170.118 -169.418,170.118 "/>
+ <polyline id="polyline2703" fill="#E6F6ED" points="-169.131,166.518 -169.274,162.056 -167.834,161.48 -168.267,164.501
+ -167.979,165.942 -168.267,167.381 -168.41,165.942 -169.131,166.518 "/>
+ <polyline id="polyline2705" fill="#E6F6ED" points="-166.538,127.206 -167.979,128.358 -168.122,126.917 -166.969,125.333
+ -166.25,126.917 -166.538,127.206 "/>
+ <polyline id="polyline2707" fill="#E6F6ED" points="-166.395,171.846 -167.979,171.272 -168.267,169.83 -166.681,170.838
+ -166.395,171.846 "/>
+ <polyline id="polyline2709" fill="#E6F6ED" points="-166.106,176.31 -167.547,173.286 -166.395,174.726 -165.818,176.166
+ -166.106,176.31 "/>
+ <polyline id="polyline2711" fill="#E6F6ED" points="-165.675,185.526 -165.818,186.246 -167.402,186.39 -167.402,184.662
+ -166.681,183.222 -166.395,181.782 -166.826,180.198 -166.969,181.638 -167.402,180.198 -167.259,181.782 -168.122,183.222
+ -167.979,184.662 -168.267,184.518 -168.553,182.648 -169.418,181.206 -168.986,179.766 -167.114,176.742 -167.979,175.301
+ -169.131,172.278 -169.994,170.838 -170.137,169.4 -171.578,169.974 -174.026,163.926 -175.322,162.486 -176.187,158.024
+ -175.61,155.862 -174.601,156.006 -174.026,153.99 -174.601,152.549 -175.034,150.246 -176.906,148.808 -178.345,149.238
+ -179.211,147.797 -178.923,146.213 -177.771,143.333 -177.626,140.312 -176.761,138.87 -176.042,134.262 -173.595,129.797
+ -170.715,127.494 -169.274,127.206 -168.122,125.768 -166.538,122.742 -165.385,122.166 -162.362,121.734 -160.923,120.728
+ -161.211,121.304 -165.53,124.326 -165.675,127.352 -164.234,127.206 -164.666,128.79 -166.106,129.654 -166.826,131.238
+ -168.122,132.678 -167.547,134.118 -166.106,134.406 -165.818,135.99 -164.379,137.144 -162.362,140.024 -163.946,143.045
+ -164.522,144.629 -164.091,146.07 -162.65,146.79 -161.211,146.648 -159.771,145.782 -156.746,145.352 -152.282,145.782
+ -151.851,144.342 -150.41,143.768 -148.971,143.48 -147.53,142.614 -145.946,143.333 -146.379,143.91 -149.402,145.206
+ -150.41,146.648 -151.994,147.51 -153.435,147.942 -154.874,149.094 -156.314,149.669 -157.034,151.254 -156.746,152.694
+ -159.339,152.984 -160.778,154.278 -162.362,154.998 -163.803,155.144 -165.242,155.717 -166.106,157.158 -166.106,158.6
+ -166.395,159.896 -167.834,164.358 -164.954,171.558 -163.513,172.854 -162.362,174.293 -160.635,177.174 -160.202,178.614
+ -160.057,181.638 -160.345,183.942 -161.641,186.965 -162.219,187.542 -162.938,189.125 -164.379,190.568 -164.954,192.006
+ -166.538,193.734 -167.259,192.15 -167.259,193.734 -168.267,192.15 -168.122,190.709 -166.681,190.709 -165.818,189.27
+ -164.379,187.686 -162.219,182.934 -162.65,181.494 -162.219,180.054 -162.507,175.59 -163.37,174.006 -164.809,172.568
+ -163.225,175.59 -163.513,177.03 -163.513,178.614 -164.522,181.494 -163.225,183.078 -164.234,185.958 -165.53,187.4
+ -164.666,185.816 -164.234,184.085 -164.522,182.501 -165.675,185.526 "/>
+ <polyline id="polyline2713" fill="#E6F6ED" points="-160.49,121.304 -159.051,120.293 -158.906,118.856 -157.322,117.702
+ -157.898,116.262 -157.755,114.822 -157.322,111.942 -156.314,108.917 -155.45,107.48 -151.274,104.6 -152.715,106.038
+ -154.154,107.045 -155.45,108.629 -156.314,110.07 -156.746,111.51 -156.891,113.094 -157.322,114.534 -157.322,115.976
+ -155.883,116.838 -155.019,118.422 -159.339,121.014 -160.49,121.304 "/>
+ <polyline id="polyline2715" fill="#E6F6ED" points="-76.538,152.118 -77.259,152.262 -76.971,153.702 -76.538,152.118 "/>
+ <polyline id="polyline2717" fill="#E6F6ED" points="-89.931,99.846 -88.49,99.56 -87.051,99.99 -86.475,100.998 -87.051,100.998
+ -88.49,99.99 -89.931,99.846 "/>
+ <polyline id="polyline2719" fill="#E6F6ED" points="-86.475,100.998 -85.755,101.144 -86.33,101.43 -86.475,100.998 "/>
+ <polyline id="polyline2721" fill="#E6F6ED" points="-85.755,101.144 -84.891,100.568 -83.45,101.144 -81.866,100.709
+ -81.146,99.702 -78.843,97.688 -77.69,97.254 -76.25,97.11 -74.666,97.4 -73.37,96.822 -71.931,96.534 -72.219,96.392
+ -70.347,95.094 -67.322,93.654 -65.738,93.654 -61.274,92.501 -63.146,93.51 -67.179,94.232 -71.643,96.822 -74.522,97.688
+ -77.547,97.4 -78.986,98.262 -80.427,99.56 -81.146,100.568 -82.73,101.862 -84.171,101.286 -85.755,101.144 "/>
+ <polyline id="polyline2723" fill="#E6F6ED" points="-61.274,92.501 -59.259,90.342 -60.122,91.782 -61.274,92.501 "/>
+ <polyline id="polyline2725" fill="#E6F6ED" points="-59.259,90.342 -58.538,89.622 -57.099,89.045 -55.37,89.91 -53.786,89.48
+ -52.347,89.768 -50.763,90.776 -49.755,91.782 -49.467,93.078 -50.042,95.238 -50.187,94.808 -50.042,93.366 -50.475,91.926
+ -53.354,90.198 -56.234,90.198 -57.675,89.91 -59.259,90.342 "/>
+ <polyline id="polyline2727" fill="#E6F6ED" points="-50.042,95.238 -49.322,96.104 -47.162,95.669 -48.314,96.534 -49.755,96.246
+ -50.042,95.238 "/>
+ <polyline id="polyline2729" fill="#E6F6ED" points="-47.162,95.669 -46.442,95.526 -44.858,95.958 -43.418,95.526 -40.538,95.381
+ -38.091,93.799 -36.65,93.654 -34.347,94.808 -32.187,96.392 -30.746,97.11 -29.019,96.822 -27.578,95.958 -26.139,96.534
+ -23.402,93.51 -22.683,90.486 -21.387,87.463 -20.811,84.582 -19.37,83.72 -17.786,83.72 -16.347,83.144 -14.906,83.574
+ -13.61,82.998 -10.587,83.286 -8.715,82.856 -7.563,83.72 -6.555,85.158 -5.979,84.44 -4.538,85.592 -3.099,86.166 -0.795,89.622
+ -0.65,92.213 0.789,92.79 1.798,94.232 2.949,94.662 4.102,95.238 0.502,94.232 -1.37,92.213 -1.515,90.776 -2.522,89.333
+ -2.954,87.75 -4.25,86.312 -5.69,85.734 -7.274,85.446 -8.715,84.295 -10.154,83.574 -13.179,83.432 -14.618,84.15 -16.059,83.574
+ -19.227,84.15 -20.666,85.158 -20.666,86.6 -21.099,88.038 -21.963,89.48 -22.538,91.064 -23.259,93.942 -25.851,96.822
+ -27.29,96.246 -28.73,97.4 -30.314,97.688 -31.755,97.254 -34.635,95.238 -37.658,94.232 -38.811,94.662 -40.395,95.669
+ -44.715,96.246 -47.162,95.669 "/>
+ <polyline id="polyline2731" fill="#E6F6ED" points="8.422,93.942 8.422,93.654 8.71,93.51 8.422,93.942 "/>
+ <polyline id="polyline2733" points="86.182,63.702 87.334,63.272 88.918,63.56 89.205,63.414 89.205,63.99 87.621,64.136
+ 86.182,63.702 "/>
+
+ <polygon id="polygon2735" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 86.182,63.702 87.334,63.272 88.918,63.56 89.205,63.414 89.205,63.99 87.621,64.136 "/>
+ <polyline id="polyline2737" points="96.117,-86.92 95.397,-87.785 96.838,-89.8 96.693,-91.24 97.126,-91.816 98.71,-92.104
+ 103.029,-94.121 104.613,-95.417 105.621,-96.856 104.901,-97.864 105.621,-99.88 108.069,-101.178 109.222,-102.328
+ 109.51,-101.32 110.518,-99.88 111.958,-98.584 113.397,-98.008 114.981,-98.152 116.422,-98.873 117.861,-98.873 119.302,-99.88
+ 119.59,-99.736 115.126,-96.568 113.542,-96.712 112.102,-97.289 108.646,-101.466 105.766,-99.448 105.334,-98.008
+ 105.909,-96.568 104.47,-94.984 101.59,-92.824 98.565,-91.816 97.126,-91.098 96.838,-89.656 95.686,-88.072 96.117,-86.92 "/>
+
+ <polygon id="polygon2739" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 96.117,-86.92 95.397,-87.785 96.838,-89.8 96.693,-91.24 97.126,-91.816 98.71,-92.104 103.029,-94.121 104.613,-95.417
+ 105.621,-96.856 104.901,-97.864 105.621,-99.88 108.069,-101.178 109.222,-102.328 109.51,-101.32 110.518,-99.88
+ 111.958,-98.584 113.397,-98.008 114.981,-98.152 116.422,-98.873 117.861,-98.873 119.302,-99.88 119.59,-99.736 115.126,-96.568
+ 113.542,-96.712 112.102,-97.289 108.646,-101.466 105.766,-99.448 105.334,-98.008 105.909,-96.568 104.47,-94.984
+ 101.59,-92.824 98.565,-91.816 97.126,-91.098 96.838,-89.656 95.686,-88.072 "/>
+ <polyline id="polyline2741" points="96.117,-86.92 96.405,-86.632 96.262,-86.632 96.117,-86.92 "/>
+
+ <polygon id="polygon2743" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 96.117,-86.92 96.405,-86.632 96.262,-86.632 "/>
+ <polyline id="polyline2745" points="96.405,-86.632 97.846,-86.632 98.565,-85.048 100.582,-83.32 101.302,-81.88 101.59,-80.44
+ 101.445,-78.856 101.878,-75.976 100.869,-73.96 101.445,-71.081 100.869,-68.058 101.445,-66.617 101.59,-65.178 101.157,-62.008
+ 101.157,-59.992 100.149,-58.84 99.573,-57.4 99.285,-55.528 99.573,-54.088 100.582,-52.648 100.438,-51.064 99.861,-49.625
+ 99.573,-46.744 98.422,-43.72 98.277,-42.28 98.134,-43.72 98.422,-45.16 99.285,-46.6 99.285,-48.184 100.149,-51.208
+ 100.149,-52.648 98.998,-54.088 98.854,-56.968 100.582,-59.992 100.726,-62.152 101.157,-63.448 101.014,-66.617 99.718,-68.058
+ 101.014,-69.497 101.302,-70.936 100.438,-73.96 101.445,-75.4 101.733,-76.408 101.157,-79.289 100.869,-82.312 99.43,-83.608
+ 98.998,-83.752 97.989,-85.336 96.55,-86.488 96.405,-86.632 "/>
+
+ <polygon id="polygon2747" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 96.405,-86.632 97.846,-86.632 98.565,-85.048 100.582,-83.32 101.302,-81.88 101.59,-80.44 101.445,-78.856 101.878,-75.976
+ 100.869,-73.96 101.445,-71.081 100.869,-68.058 101.445,-66.617 101.59,-65.178 101.157,-62.008 101.157,-59.992 100.149,-58.84
+ 99.573,-57.4 99.285,-55.528 99.573,-54.088 100.582,-52.648 100.438,-51.064 99.861,-49.625 99.573,-46.744 98.422,-43.72
+ 98.277,-42.28 98.134,-43.72 98.422,-45.16 99.285,-46.6 99.285,-48.184 100.149,-51.208 100.149,-52.648 98.998,-54.088
+ 98.854,-56.968 100.582,-59.992 100.726,-62.152 101.157,-63.448 101.014,-66.617 99.718,-68.058 101.014,-69.497 101.302,-70.936
+ 100.438,-73.96 101.445,-75.4 101.733,-76.408 101.157,-79.289 100.869,-82.312 99.43,-83.608 98.998,-83.752 97.989,-85.336
+ 96.55,-86.488 "/>
+ <polyline id="polyline2749" points="171.142,-6.426 171.43,-6.568 169.846,-5.272 171.142,-6.426 "/>
+
+ <polygon id="polygon2751" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 171.142,-6.426 171.43,-6.568 169.846,-5.272 "/>
+ <polyline id="polyline2753" fill="#E6F6ED" points="658.582,169.542 657.572,170.984 657.43,172.568 655.846,173.862
+ 654.406,174.006 654.547,175.59 657.572,172.854 659.014,172.568 660.453,171.272 661.893,171.702 661.318,173.286
+ 659.877,173.862 658.293,173.574 657.285,175.014 657.141,178.038 658.582,176.742 659.732,176.742 660.164,177.174
+ 660.164,179.766 658.725,180.629 657.285,181.064 658.725,181.35 660.164,180.917 661.174,179.333 662.758,180.198
+ 664.055,179.333 663.332,180.776 663.043,182.213 661.605,181.494 660.164,182.79 661.029,184.232 659.59,185.238 658.006,185.094
+ 657.141,186.534 657.572,187.974 657.715,189.558 656.277,189.27 657.861,190.133 659.156,190.133 659.445,190.709
+ 659.445,191.717 659.877,192.726 660.021,192.582 659.59,191.142 659.445,190.709 659.445,190.133 659.156,190.133
+ 658.582,188.406 659.014,186.965 661.893,185.669 662.037,188.549 662.182,188.549 662.471,188.406 662.324,187.83 663.043,184.95
+ 662.037,183.51 663.479,184.085 664.916,184.232 664.055,182.79 664.486,179.91 664.055,178.47 667.51,176.742 668.807,178.182
+ 668.084,176.742 669.67,177.174 670.963,178.758 670.244,177.174 670.389,175.734 671.973,174.582 673.414,173.862 674.854,174.87
+ 675.572,173.286 677.014,173.574 676.725,175.158 677.301,176.598 677.156,179.622 677.59,181.064 678.598,182.501
+ 679.605,183.078 680.182,183.078 681.043,184.95 683.926,184.232 685.51,183.222 683.205,183.942 681.043,183.222 678.021,181.206
+ 677.59,173.862 676.869,172.422 675.43,172.709 673.99,173.43 673.701,171.99 672.693,173.574 671.252,173.286 671.398,171.702
+ 669.957,171.846 670.822,173.43 670.533,174.87 669.094,175.158 667.51,175.158 664.627,176.166 663.766,177.608 663.621,178.614
+ 662.182,179.045 660.164,177.174 660.164,176.742 659.732,176.742 659.303,176.31 657.715,176.598 657.715,175.158 659.156,174.44
+ 660.74,175.734 663.621,176.598 663.189,175.158 663.479,173.717 662.613,172.278 663.332,170.838 661.893,169.4 659.014,170.406
+ 658.582,169.542 "/>
+ <polyline id="polyline2755" points="305.35,934.47 305.063,934.181 305.641,933.892 307.074,932.454 308.518,932.021
+ 309.379,935.046 310.82,935.188 305.926,935.188 305.35,934.47 "/>
+
+ <polygon id="polygon2757" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 305.35,934.47 305.063,934.181 305.641,933.892 307.074,932.454 308.518,932.021 309.379,935.046 310.82,935.188 305.926,935.188
+ "/>
+ <polyline id="polyline2759" points="310.82,935.188 312.262,934.899 311.686,935.188 310.82,935.188 "/>
+
+ <polygon id="polygon2761" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 310.82,935.188 312.262,934.899 311.686,935.188 "/>
+ <polyline id="polyline2763" points="366.117,6.246 366.693,5.816 367.127,5.816 368.709,6.822 366.117,6.246 "/>
+
+ <polygon id="polygon2765" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 366.117,6.246 366.693,5.816 367.127,5.816 368.709,6.822 "/>
+ <polyline id="polyline2767" points="368.709,6.822 370.148,6.534 371.59,7.83 373.75,8.984 376.773,11.574 376.629,11.72
+ 373.605,9.272 369.141,6.967 368.709,6.822 "/>
+
+ <polygon id="polygon2769" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 368.709,6.822 370.148,6.534 371.59,7.83 373.75,8.984 376.773,11.574 376.629,11.72 373.605,9.272 369.141,6.967 "/>
+ <polyline id="polyline2771" points="375.766,13.158 375.334,12.872 376.486,12.15 375.766,13.158 "/>
+
+ <polygon id="polygon2773" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 375.766,13.158 375.334,12.872 376.486,12.15 "/>
+ <polyline id="polyline2775" points="375.766,13.158 377.205,13.592 378.934,13.734 380.373,14.312 381.814,13.734 383.398,13.879
+ 383.109,14.312 381.67,14.167 379.941,15.318 378.502,14.024 377.061,13.879 375.766,13.158 "/>
+
+ <polygon id="polygon2777" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 375.766,13.158 377.205,13.592 378.934,13.734 380.373,14.312 381.814,13.734 383.398,13.879 383.109,14.312 381.67,14.167
+ 379.941,15.318 378.502,14.024 377.061,13.879 "/>
+ <polyline id="polyline2779" points="376.486,12.15 376.629,11.72 376.773,11.862 376.486,12.15 "/>
+
+ <polygon id="polygon2781" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 376.486,12.15 376.629,11.72 376.773,11.862 "/>
+ <polyline id="polyline2783" points="383.398,13.734 383.398,12.295 384.406,10.856 385.846,10.278 387.285,8.694 388.006,7.256
+ 389.59,6.534 392.613,6.967 395.639,6.68 397.076,7.83 398.518,7.543 398.518,6.104 397.654,4.662 399.238,3.942 400.678,3.654
+ 402.262,3.799 405.285,6.246 406.725,6.392 408.166,6.104 409.75,6.822 408.883,6.68 405.572,6.534 402.262,4.088 400.822,3.942
+ 399.238,4.232 398.518,5.526 399.094,6.534 398.662,8.12 397.223,8.12 395.781,7.11 391.318,7.11 389.732,6.68 388.293,7.256
+ 387.572,8.84 386.277,10.278 384.693,11.144 383.398,13.734 "/>
+
+ <polygon id="polygon2785" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 383.398,13.734 383.398,12.295 384.406,10.856 385.846,10.278 387.285,8.694 388.006,7.256 389.59,6.534 392.613,6.967
+ 395.639,6.68 397.076,7.83 398.518,7.543 398.518,6.104 397.654,4.662 399.238,3.942 400.678,3.654 402.262,3.799 405.285,6.246
+ 406.725,6.392 408.166,6.104 409.75,6.822 408.883,6.68 405.572,6.534 402.262,4.088 400.822,3.942 399.238,4.232 398.518,5.526
+ 399.094,6.534 398.662,8.12 397.223,8.12 395.781,7.11 391.318,7.11 389.732,6.68 388.293,7.256 387.572,8.84 386.277,10.278
+ 384.693,11.144 "/>
+ <polyline id="polyline2787" points="409.75,6.822 411.334,6.967 412.629,7.83 412.055,7.83 410.471,6.967 409.75,6.822 "/>
+
+ <polygon id="polygon2789" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 409.75,6.822 411.334,6.967 412.629,7.83 412.055,7.83 410.471,6.967 "/>
+ <polyline id="polyline2791" points="412.629,7.83 413.205,7.83 412.773,7.976 412.629,7.83 "/>
+
+ <polygon id="polygon2793" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 412.629,7.83 413.205,7.83 412.773,7.976 "/>
+ <polyline id="polyline2795" points="413.205,7.83 413.926,7.543 413.494,7.83 413.205,7.83 "/>
+
+ <polygon id="polygon2797" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 413.205,7.83 413.926,7.543 413.494,7.83 "/>
+ <polyline id="polyline2799" fill="#E6F6ED" points="507.67,753.03 506.807,751.589 506.662,750.005 507.67,748.565
+ 509.109,747.847 512.131,747.7 512.998,746.55 513.141,744.966 512.422,743.382 511.27,741.94 512.564,741.364 512.131,738.341
+ 509.686,736.612 506.662,735.03 505.223,733.878 502.342,733.589 499.318,733.878 497.732,733.589 493.27,732.149 491.83,732.005
+ 490.389,732.726 489.238,732.149 487.795,732.149 487.51,735.03 487.941,736.47 486.357,737.765 486.789,742.085 486.213,742.517
+ 487.076,744.103 485.639,743.813 485.926,744.245 488.662,744.532 490.246,744.966 491.686,745.397 493.125,746.263 493.99,747.7
+ 495.141,748.997 496.582,748.997 498.021,750.294 499.605,750.87 501.045,752.31 502.627,753.03 504.213,754.325 504.646,754.899
+ 504.357,756.194 507.238,755.188 508.102,753.604 507.67,753.03 "/>
+ <polyline id="polyline2801" fill="#E6F6ED" points="507.814,704.067 507.238,703.638 508.102,702.772 509.254,703.349
+ 510.838,702.054 513.861,703.638 515.303,704.935 515.303,706.374 514.869,707.813 513.43,707.958 511.846,707.671
+ 513.285,708.532 514.438,709.974 512.998,709.829 511.846,709.397 508.822,706.948 507.379,706.229 505.795,706.374
+ 508.822,707.524 510.262,708.679 507.379,708.103 510.406,710.118 508.822,709.974 511.846,711.847 507.379,711.413
+ 507.094,710.263 505.51,710.118 504.068,709.397 502.486,709.397 503.926,709.687 505.51,710.403 507.094,711.413 508.102,712.565
+ 510.98,713.142 512.422,714.294 512.131,715.735 510.547,716.022 515.156,717.317 516.598,717.462 518.037,717.03 520.773,716.886
+ 522.211,717.317 523.795,717.462 526.533,720.054 526.533,721.493 524.23,721.493 522.789,722.214 522.646,720.772
+ 519.766,721.927 520.197,723.364 521.781,724.661 522.357,723.222 523.795,723.511 524.807,722.067 526.102,721.638
+ 526.533,721.78 527.109,722.501 529.125,722.067 529.99,720.63 528.98,720.917 529.846,719.333 529.414,717.894 530.564,716.454
+ 530.854,715.013 529.701,713.571 528.838,711.989 527.252,711.7 524.373,710.694 522.789,709.687 521.35,709.11 519.766,707.671
+ 518.324,707.524 517.174,706.087 516.883,704.646 515.303,701.622 513.715,700.899 510.838,701.188 509.398,700.757
+ 506.949,701.188 506.373,700.612 504.789,700.757 504.357,701.622 502.918,702.194 505.795,703.638 507.814,704.067
+ 509.686,705.077 508.246,704.067 507.814,704.067 "/>
+ <polyline id="polyline2803" fill="#E6F6ED" points="540.357,786.726 541.365,788.165 542.518,788.454 541.51,787.013
+ 540.357,786.726 "/>
+ <polyline id="polyline2805" fill="#E6F6ED" points="544.533,787.302 545.973,786.438 546.98,786.149 545.541,786.149
+ 544.533,787.302 "/>
+ <polyline id="polyline2807" fill="#E6F6ED" points="557.494,740.788 558.934,741.94 561.957,742.372 563.398,742.948
+ 564.838,743.095 565.414,743.382 566.854,743.382 568.293,743.813 571.459,742.517 572.471,743.956 574.055,744.532
+ 575.061,744.245 573.621,743.956 574.055,742.517 576.068,741.511 574.486,740.935 576.068,740.501 575.205,738.917
+ 574.916,737.478 576.068,736.612 574.486,736.038 574.773,734.597 573.189,735.604 571.748,736.038 565.701,734.886
+ 562.678,734.022 561.238,734.454 560.949,733.302 562.389,732.87 563.83,732.005 563.541,729.124 563.254,730.854 562.246,730.997
+ 561.525,732.87 560.662,732.87 559.795,733.735 558.357,734.31 557.35,734.454 559.365,735.173 560.084,736.612 559.654,738.194
+ 560.949,736.757 563.973,736.181 565.27,737.333 565.414,738.63 566.854,738.485 567.43,739.927 564.547,740.356 563.83,742.229
+ 562.389,742.085 561.238,740.646 559.795,741.077 558.211,740.646 557.35,740.646 557.494,740.788 "/>
+ <polyline id="polyline2809" fill="#E6F6ED" points="569.445,718.038 567.861,718.038 568.293,716.454 567.43,718.038
+ 565.99,717.317 562.963,718.181 561.525,717.604 560.949,717.894 562.533,718.612 568.438,719.188 569.445,718.038 "/>
+ <polyline id="polyline2811" fill="#E6F6ED" points="577.941,767.286 576.789,767.142 575.35,767.431 574.342,768.87
+ 575.205,770.31 574.055,771.749 572.471,772.325 574.055,772.325 574.055,772.899 573.043,773.909 572.324,775.349
+ 573.908,773.909 575.061,771.604 575.494,770.165 575.061,768.726 577.941,767.718 577.941,767.286 "/>
+ <polyline id="polyline2813" fill="#E6F6ED" points="578.518,750.438 578.807,751.589 578.518,753.173 578.662,755.046
+ 578.084,756.63 577.223,757.062 578.518,756.917 578.949,755.478 578.807,753.173 579.094,751.735 578.518,750.438 "/>
+ <polyline id="polyline2815" fill="#E6F6ED" points="659.445,608.454 662.037,608.31 665.061,609.173 666.211,610.759
+ 667.654,610.612 667.51,615.079 668.229,616.229 670.678,619.11 669.236,620.118 668.373,622.134 669.379,620.692 670.822,619.687
+ 672.262,619.255 673.701,620.403 673.701,623.286 672.262,627.751 673.125,626.31 674.133,623.286 677.014,623.142
+ 676.869,621.702 678.453,621.702 679.893,622.421 680.326,623.862 681.766,623.431 683.639,625.157 683.35,626.597
+ 682.627,628.325 682.773,629.765 681.334,629.188 680.9,630.63 682.197,633.653 680.758,634.517 680.613,634.806 681.189,635.382
+ 681.621,635.235 682.051,635.524 683.639,635.235 685.076,636.247 686.518,635.813 687.236,637.255 688.678,637.397
+ 688.389,638.839 686.807,640.134 686.229,641.431 686.949,641.862 688.822,644.597 688.533,646.038 686.949,647.188
+ 687.094,649.493 686.229,650.935 687.236,652.374 688.678,653.524 688.389,652.087 687.379,650.646 687.814,649.206
+ 687.814,647.765 689.109,646.181 689.686,643.733 687.379,640.854 690.262,638.118 688.822,636.821 685.941,635.235
+ 684.502,635.524 684.068,634.95 682.627,634.95 681.621,635.235 683.639,625.157 682.773,624.149 682.773,623.431 684.646,622.421
+ 686.662,621.989 686.807,623.142 687.094,623.142 687.094,623.431 689.973,624.149 691.557,624.294 689.686,623.286
+ 688.244,622.997 687.094,623.142 686.807,621.989 686.662,621.989 686.518,621.558 684.789,621.989 684.357,621.558
+ 684.211,619.974 685.654,619.687 686.229,618.247 684.934,619.687 683.35,619.255 682.916,620.839 683.35,622.278 682.342,623.718
+ 681.766,623.431 680.758,622.854 680.326,621.413 678.74,620.981 677.156,621.126 675.715,621.847 674.422,618.821
+ 673.414,617.382 673.701,615.942 675.285,615.653 673.701,615.366 672.693,616.806 671.252,616.663 669.67,617.095 669.67,615.509
+ 668.229,615.653 668.518,612.772 669.236,611.333 666.211,609.317 663.479,608.022 659.877,608.022 659.445,608.454 "/>
+ <polyline id="polyline2817" fill="#E6F6ED" points="701.639,810.194 703.223,810.341 706.102,812.356 707.541,810.917
+ 708.98,811.349 709.99,812.788 709.846,814.229 708.406,815.669 708.98,817.11 708.547,818.694 710.564,821.429 710.998,823.444
+ 709.414,824.741 708.262,824.741 706.678,825.604 708.117,825.604 709.701,826.181 710.564,827.765 710.422,829.204
+ 709.557,830.646 710.998,832.229 711.715,833.669 712.006,835.11 711.285,836.694 709.846,837.558 708.262,836.261
+ 706.822,837.413 707.973,837.271 708.547,838.708 707.973,840.294 709.27,843.03 710.709,843.173 711.572,840.149 712.725,838.708
+ 712.725,837.271 713.301,835.974 714.453,834.532 715.893,834.103 715.605,832.661 714.164,832.085 713.59,830.646
+ 711.572,827.622 711.715,824.597 711.43,823.444 712.006,821.716 712.725,820.997 712.582,820.708 711.861,821.429
+ 711.285,820.421 712.15,818.981 712.438,817.54 710.709,819.7 709.414,819.7 708.98,818.837 709.125,817.397 708.693,815.813
+ 710.133,814.372 710.422,812.935 709.27,811.493 708.838,810.054 707.398,810.485 706.244,812.067 704.807,810.772
+ 703.365,810.194 701.639,810.194 "/>
+ <polyline id="polyline2819" fill="#E6F6ED" points="445.75,879.173 446.613,877.735 447.189,876.294 447.479,874.278
+ 449.061,874.278 451.365,873.269 450.502,874.853 449.205,876.294 448.486,876.294 448.197,877.735 447.334,878.886
+ 446.324,880.47 443.445,882.917 442.869,883.062 442.582,882.485 444.74,880.612 445.75,879.173 "/>
+ <polyline id="polyline2821" points="453.238,862.47 453.525,860.165 453.379,858.724 452.373,855.7 453.525,858.005
+ 453.957,861.03 453.525,862.325 453.238,862.47 "/>
+
+ <polygon id="polygon2823" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 453.238,862.47 453.525,860.165 453.379,858.724 452.373,855.7 453.525,858.005 453.957,861.03 453.525,862.325 "/>
+ <polyline id="polyline2825" fill="#E6F6ED" points="485.926,778.948 487.654,776.501 487.223,777.364 485.926,778.948 "/>
+ <polyline id="polyline2827" fill="#E6F6ED" points="660.021,919.78 656.131,917.909 654.547,916.757 653.109,917.046
+ 653.686,915.604 652.246,915.892 652.822,917.333 652.963,918.772 652.246,919.925 650.807,918.63 651.67,917.046 650.23,917.622
+ 648.789,917.765 649.365,919.204 647.926,918.341 646.486,917.909 647.494,919.349 646.055,920.646 644.613,920.356
+ 643.174,921.077 641.877,922.085 643.318,922.661 646.342,922.661 646.342,921.796 647.926,921.509 649.365,922.229
+ 647.926,921.364 649.365,921.077 650.807,920.067 651.67,921.509 652.246,920.356 653.252,919.204 653.83,920.646 653.83,922.229
+ 655.414,919.349 655.414,920.788 656.854,920.933 659.877,920.067 660.453,920.501 661.893,920.933 662.613,922.372
+ 664.055,923.235 666.934,922.229 665.494,921.364 660.021,919.78 "/>
+ <polyline id="polyline2829" fill="#E6F6ED" points="507.814,704.067 508.246,704.067 509.686,705.077 507.814,704.067 "/>
+ <polyline id="polyline2831" points="510.406,172.568 511.27,172.133 512.422,171.99 511.99,172.133 510.406,172.568 "/>
+
+ <polygon id="polygon2833" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 510.406,172.568 511.27,172.133 512.422,171.99 511.99,172.133 "/>
+ <polyline id="polyline2835" points="512.422,171.99 514.293,170.984 512.854,171.846 512.422,171.99 "/>
+
+ <polygon id="polygon2837" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 512.422,171.99 514.293,170.984 512.854,171.846 "/>
+ <polyline id="polyline2839" points="532.006,650.214 532.438,650.067 533.877,651.077 533.445,652.374 534.74,653.958
+ 534.883,655.397 535.75,658.421 537.334,658.854 538.773,658.134 540.213,658.134 541.076,659.573 544.102,660.581
+ 545.252,662.022 546.693,662.597 549.715,661.013 551.156,662.022 552.598,661.878 554.182,661.302 560.084,660.581
+ 563.109,660.581 564.547,660.87 567.572,658.997 569.014,657.558 570.598,657.7 572.037,657.271 573.908,657.989 575.35,659.142
+ 572.324,657.558 570.883,658.134 569.445,657.989 564.98,661.013 563.398,661.302 561.957,660.87 560.373,660.87 554.471,661.589
+ 553.029,662.165 551.445,662.31 550.006,661.444 548.564,661.878 547.125,662.886 545.541,663.03 542.662,660.438 541.223,660.149
+ 540.213,658.565 538.627,658.421 537.189,659.142 535.605,658.71 535.029,657.126 534.453,654.245 533.156,652.661
+ 533.445,651.222 532.006,650.214 "/>
+
+ <polygon id="polygon2841" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 532.006,650.214 532.438,650.067 533.877,651.077 533.445,652.374 534.74,653.958 534.883,655.397 535.75,658.421 537.334,658.854
+ 538.773,658.134 540.213,658.134 541.076,659.573 544.102,660.581 545.252,662.022 546.693,662.597 549.715,661.013
+ 551.156,662.022 552.598,661.878 554.182,661.302 560.084,660.581 563.109,660.581 564.547,660.87 567.572,658.997
+ 569.014,657.558 570.598,657.7 572.037,657.271 573.908,657.989 575.35,659.142 572.324,657.558 570.883,658.134 569.445,657.989
+ 564.98,661.013 563.398,661.302 561.957,660.87 560.373,660.87 554.471,661.589 553.029,662.165 551.445,662.31 550.006,661.444
+ 548.564,661.878 547.125,662.886 545.541,663.03 542.662,660.438 541.223,660.149 540.213,658.565 538.627,658.421
+ 537.189,659.142 535.605,658.71 535.029,657.126 534.453,654.245 533.156,652.661 533.445,651.222 "/>
+ <polyline id="polyline2843" points="544.533,564.679 547.414,565.829 548.854,565.542 553.605,569.862 555.043,569.718
+ 556.627,571.013 557.926,572.454 559.51,573.173 562.533,575.333 563.973,575.765 564.693,578.79 565.557,580.229 568.438,583.11
+ 569.877,582.821 571.029,581.382 572.613,580.663 573.621,579.222 575.061,577.927 574.773,578.501 573.621,579.942
+ 573.621,580.663 572.182,581.235 570.598,582.247 569.156,583.687 567.572,582.966 564.98,579.942 563.973,578.501
+ 563.973,577.349 563.541,575.911 562.389,575.622 559.365,573.462 557.926,572.743 554.9,570.149 553.459,570.005 550.582,567.413
+ 549.141,566.55 548.854,566.118 547.414,566.118 544.963,565.397 544.533,564.679 "/>
+
+ <polygon id="polygon2845" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 544.533,564.679 547.414,565.829 548.854,565.542 553.605,569.862 555.043,569.718 556.627,571.013 557.926,572.454
+ 559.51,573.173 562.533,575.333 563.973,575.765 564.693,578.79 565.557,580.229 568.438,583.11 569.877,582.821 571.029,581.382
+ 572.613,580.663 573.621,579.222 575.061,577.927 574.773,578.501 573.621,579.942 573.621,580.663 572.182,581.235
+ 570.598,582.247 569.156,583.687 567.572,582.966 564.98,579.942 563.973,578.501 563.973,577.349 563.541,575.911
+ 562.389,575.622 559.365,573.462 557.926,572.743 554.9,570.149 553.459,570.005 550.582,567.413 549.141,566.55 548.854,566.118
+ 547.414,566.118 544.963,565.397 "/>
+ <polyline id="polyline2847" points="566.709,21.366 565.125,21.224 564.117,19.64 565.846,16.76 566.277,13.734 567.861,13.158
+ 569.303,13.304 569.59,11.72 572.613,11.432 574.055,10.278 575.639,11.432 576.646,9.848 575.639,8.406 576.502,7.83
+ 577.076,9.127 576.934,10.711 575.35,11.72 573.908,10.568 572.324,11.862 570.883,11.862 569.59,13.446 566.564,13.879
+ 566.131,16.902 564.547,19.782 566.131,20.648 566.709,21.366 "/>
+
+ <polygon id="polygon2849" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 566.709,21.366 565.125,21.224 564.117,19.64 565.846,16.76 566.277,13.734 567.861,13.158 569.303,13.304 569.59,11.72
+ 572.613,11.432 574.055,10.278 575.639,11.432 576.646,9.848 575.639,8.406 576.502,7.83 577.076,9.127 576.934,10.711
+ 575.35,11.72 573.908,10.568 572.324,11.862 570.883,11.862 569.59,13.446 566.564,13.879 566.131,16.902 564.547,19.782
+ 566.131,20.648 "/>
+ <polyline id="polyline2851" fill="#E6F6ED" points="570.021,876.437 571.459,877.878 573.621,881.765 574.055,883.349
+ 574.916,884.646 573.479,884.501 572.182,883.062 571.893,881.622 571.029,880.181 569.59,880.181 570.021,878.741
+ 570.021,876.437 "/>
+ <polyline id="polyline2853" fill="#E6F6ED" points="575.061,885.077 575.494,885.222 575.494,885.509 575.061,885.077 "/>
+ <polyline id="polyline2855" points="575.061,577.927 575.061,574.903 576.068,573.462 576.789,571.878 576.789,570.438
+ 575.926,568.997 575.494,567.413 575.926,565.974 575.205,564.534 574.916,563.235 573.908,561.798 572.324,560.501
+ 572.471,558.919 572.037,557.478 572.037,555.894 572.324,554.454 574.197,551.573 577.223,551.573 578.807,552.005
+ 580.963,551.718 583.27,554.886 587.732,554.886 589.174,556.181 587.732,555.03 583.27,555.173 580.963,552.294 580.533,552.149
+ 578.949,552.438 577.51,552.005 574.486,551.718 573.332,553.157 572.471,554.597 572.324,556.181 572.324,557.622 572.9,560.646
+ 574.486,561.798 576.068,565.255 576.211,566.694 575.926,568.134 577.51,571.157 575.926,574.038 575.35,575.622 575.494,577.062
+ 575.061,577.927 "/>
+
+ <polygon id="polygon2857" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 575.061,577.927 575.061,574.903 576.068,573.462 576.789,571.878 576.789,570.438 575.926,568.997 575.494,567.413
+ 575.926,565.974 575.205,564.534 574.916,563.235 573.908,561.798 572.324,560.501 572.471,558.919 572.037,557.478
+ 572.037,555.894 572.324,554.454 574.197,551.573 577.223,551.573 578.807,552.005 580.963,551.718 583.27,554.886
+ 587.732,554.886 589.174,556.181 587.732,555.03 583.27,555.173 580.963,552.294 580.533,552.149 578.949,552.438 577.51,552.005
+ 574.486,551.718 573.332,553.157 572.471,554.597 572.324,556.181 572.324,557.622 572.9,560.646 574.486,561.798 576.068,565.255
+ 576.211,566.694 575.926,568.134 577.51,571.157 575.926,574.038 575.35,575.622 575.494,577.062 "/>
+ <polyline id="polyline2859" points="576.502,7.83 576.357,7.688 576.789,7.688 576.502,7.83 "/>
+
+ <polygon id="polygon2861" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 576.502,7.83 576.357,7.688 576.789,7.688 "/>
+ <polyline id="polyline2863" points="576.789,7.688 577.223,7.4 578.662,7.256 577.941,7.83 576.789,7.688 "/>
+
+ <polygon id="polygon2865" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 576.789,7.688 577.223,7.4 578.662,7.256 577.941,7.83 "/>
+ <polyline id="polyline2867" points="578.662,7.256 578.373,5.672 579.238,5.238 579.379,6.68 578.662,7.256 "/>
+
+ <polygon id="polygon2869" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 578.662,7.256 578.373,5.672 579.238,5.238 579.379,6.68 "/>
+ <polyline id="polyline2871" fill="#E6F6ED" points="579.094,888.532 580.533,888.821 582.117,888.821 584.998,889.397
+ 586.438,888.677 587.877,887.235 588.74,887.235 589.318,886.806 590.758,887.956 591.043,889.54 590.9,890.261 590.758,890.403
+ 590.613,890.548 589.029,888.677 587.59,888.677 586.148,889.54 584.709,889.972 582.98,889.397 581.398,889.397 579.957,889.11
+ 579.094,888.532 "/>
+ <polyline id="polyline2873" points="579.238,5.238 580.102,4.662 579.957,4.95 579.238,5.238 "/>
+
+ <polygon id="polygon2875" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 579.238,5.238 580.102,4.662 579.957,4.95 "/>
+ <polyline id="polyline2877" points="580.102,4.662 580.533,3.512 582.117,2.358 583.557,1.782 584.998,0.776 586.582,1.064
+ 587.732,0.776 589.318,1.352 590.758,-0.09 590.758,-1.528 591.189,-3.112 592.627,-3.688 593.639,-2.104 593.494,-0.665
+ 594.934,0.486 593.35,-0.09 592.916,-2.97 591.332,-2.682 590.9,-1.24 591.043,0.198 589.459,1.494 588.021,1.064 586.582,1.352
+ 584.998,1.208 581.973,2.792 580.822,4.232 580.102,4.662 "/>
+
+ <polygon id="polygon2879" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 580.102,4.662 580.533,3.512 582.117,2.358 583.557,1.782 584.998,0.776 586.582,1.064 587.732,0.776 589.318,1.352 590.758,-0.09
+ 590.758,-1.528 591.189,-3.112 592.627,-3.688 593.639,-2.104 593.494,-0.665 594.934,0.486 593.35,-0.09 592.916,-2.97
+ 591.332,-2.682 590.9,-1.24 591.043,0.198 589.459,1.494 588.021,1.064 586.582,1.352 584.998,1.208 581.973,2.792 580.822,4.232
+ "/>
+ <polyline id="polyline2881" fill="#E6F6ED" points="590.758,890.403 590.9,890.261 592.773,890.694 590.758,890.403 "/>
+ <polyline id="polyline2883" fill="#E6F6ED" points="590.758,740.646 591.332,736.181 592.342,734.741 592.486,734.165
+ 592.055,733.589 590.613,733.302 591.189,732.581 591.043,731.142 592.627,730.565 592.486,732.149 593.926,732.87
+ 595.076,732.581 596.518,733.013 597.525,732.87 598.963,734.022 599.686,734.022 600.547,733.302 601.99,732.581 602.564,732.581
+ 604.006,731.286 604.725,729.847 605.156,729.558 604.725,731.571 603.285,732.581 600.838,733.735 599.541,734.741
+ 594.934,732.87 594.211,733.157 592.773,734.454 591.766,736.325 591.479,737.765 591.621,739.204 590.758,740.646 "/>
+ <polyline id="polyline2885" fill="#E6F6ED" points="592.773,890.694 594.211,890.403 595.654,890.694 597.094,889.397
+ 598.822,889.685 601.27,888.821 604.148,888.821 605.59,887.813 604.148,886.948 604.725,885.509 604.869,886.372 605.877,886.229
+ 607.318,886.517 610.197,887.669 613.076,888.388 616.963,887.093 621.43,886.372 623.014,885.222 624.453,886.085 629.35,886.085
+ 630.789,886.372 631.941,885.94 633.379,885.796 635.398,884.501 636.547,884.214 636.693,883.638 636.262,882.194
+ 636.262,881.478 636.547,880.899 637.27,882.772 636.838,883.638 636.838,884.356 639.715,886.661 640.438,887.813
+ 640.293,889.253 641.156,890.261 638.998,888.964 639.572,887.38 638.277,885.94 636.117,884.646 635.252,884.788 633.814,885.94
+ 630.646,886.806 626.324,887.093 624.883,886.806 623.445,887.235 619.701,887.524 618.262,888.101 615.814,887.669
+ 613.223,888.677 612.502,890.403 612.211,889.685 609.332,890.981 609.189,891.269 607.748,890.694 606.164,890.548
+ 598.963,891.124 597.094,890.694 595.51,890.981 592.773,890.694 "/>
+ <polyline id="polyline2887" points="595.365,88.614 596.23,88.76 599.83,91.782 596.807,89.333 595.365,88.614 "/>
+
+ <polygon id="polygon2889" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 595.365,88.614 596.23,88.76 599.83,91.782 596.807,89.333 "/>
+ <polyline id="polyline2891" points="599.83,91.782 600.838,92.648 600.98,95.094 600.547,93.224 599.83,91.782 "/>
+
+ <polygon id="polygon2893" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 599.83,91.782 600.838,92.648 600.98,95.094 600.547,93.224 "/>
+ <polyline id="polyline2895" points="600.98,96.965 600.98,95.094 601.125,96.246 600.98,96.965 "/>
+
+ <polygon id="polygon2897" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 600.98,96.965 600.98,95.094 601.125,96.246 "/>
+ <polyline id="polyline2899" points="600.98,96.965 600.98,97.254 602.564,100.278 603.572,101.72 603.715,103.158 606.598,104.312
+ 608.037,104.6 609.332,105.75 609.479,106.902 609.043,106.472 608.324,105.03 605.303,104.312 603.861,103.734 602.564,100.709
+ 600.838,97.688 600.98,96.965 "/>
+
+ <polygon id="polygon2901" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 600.98,96.965 600.98,97.254 602.564,100.278 603.572,101.72 603.715,103.158 606.598,104.312 608.037,104.6 609.332,105.75
+ 609.479,106.902 609.043,106.472 608.324,105.03 605.303,104.312 603.861,103.734 602.564,100.709 600.838,97.688 "/>
+ <polyline id="polyline2903" fill="#E6F6ED" points="605.156,729.558 606.311,728.837 607.748,727.54 609.189,726.966
+ 610.627,725.524 610.627,723.94 612.068,725.382 613.51,723.798 613.365,722.356 612.068,720.917 613.51,722.067 614.373,722.788
+ 613.941,721.349 614.084,716.165 614.662,718.47 614.373,718.612 615.094,723.077 616.822,726.532 621.285,727.974
+ 622.148,729.124 623.732,729.989 624.598,730.134 626.182,730.134 627.621,730.421 630.934,729.989 632.518,729.413 633.957,729.7
+ 635.398,729.271 636.838,729.413 638.422,728.981 639.43,727.54 640.869,726.103 641.445,725.095 641.014,726.245 638.709,729.124
+ 637.27,729.558 635.686,729.558 634.246,730.278 632.807,729.7 631.365,730.421 629.35,730.421 627.766,730.854 623.732,730.134
+ 622.293,731.431 622.148,732.294 621.861,732.438 622.293,730.854 621.715,730.997 621.715,730.708 620.277,729.124
+ 618.838,729.558 619.125,728.118 617.541,728.263 616.102,727.11 614.662,727.253 614.373,724.372 612.934,725.382 612.211,726.39
+ 612.357,727.829 611.926,726.39 610.486,726.39 606.598,728.981 605.156,729.558 "/>
+ <polyline id="polyline2905" points="609.479,106.902 610.342,107.91 609.479,107.333 609.479,106.902 "/>
+
+ <polygon id="polygon2907" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 609.479,106.902 610.342,107.91 609.479,107.333 "/>
+ <polyline id="polyline2909" points="610.342,462.151 610.197,461.718 610.342,460.995 610.342,462.151 "/>
+
+ <polygon id="polygon2911" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 610.342,462.151 610.197,461.718 610.342,460.995 "/>
+ <polyline id="polyline2913" points="610.342,107.91 611.061,108.486 614.518,113.094 613.654,112.52 611.639,109.494
+ 610.342,107.91 "/>
+
+ <polygon id="polygon2915" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 610.342,107.91 611.061,108.486 614.518,113.094 613.654,112.52 611.639,109.494 "/>
+ <polyline id="polyline2917" points="636.838,929.286 636.838,928.853 632.373,931.302 636.838,929.286 "/>
+
+ <polygon id="polygon2919" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 636.838,929.286 636.838,928.853 632.373,931.302 "/>
+ <polyline id="polyline2921" points="614.518,113.094 616.102,113.381 617.252,114.965 617.541,115.688 616.678,114.534
+ 614.518,113.094 "/>
+
+ <polygon id="polygon2923" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 614.518,113.094 616.102,113.381 617.252,114.965 617.541,115.688 616.678,114.534 "/>
+ <polyline id="polyline2925" points="615.957,922.661 613.795,922.085 613.654,921.509 615.094,921.796 615.957,922.661 "/>
+
+ <polygon id="polygon2927" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 615.957,922.661 613.795,922.085 613.654,921.509 615.094,921.796 "/>
+ <polyline id="polyline2929" points="615.957,922.661 616.246,922.806 617.686,923.813 616.963,923.813 615.957,922.661 "/>
+
+ <polygon id="polygon2931" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 615.957,922.661 616.246,922.806 617.686,923.813 616.963,923.813 "/>
+ <polyline id="polyline2933" points="617.541,115.688 618.117,116.406 617.83,116.406 617.541,115.688 "/>
+
+ <polygon id="polygon2935" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 617.541,115.688 618.117,116.406 617.83,116.406 "/>
+ <polyline id="polyline2937" points="617.686,923.813 617.973,923.813 618.547,924.532 617.686,923.813 "/>
+
+ <polygon id="polygon2939" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 617.686,923.813 617.973,923.813 618.547,924.532 "/>
+ <polyline id="polyline2941" points="618.117,116.406 619.27,116.549 620.131,117.99 621.715,118.278 622.438,119.72
+ 624.021,118.709 625.318,119.286 623.877,119.43 622.438,120.006 621.715,118.568 620.131,118.133 618.547,116.984
+ 618.117,116.406 "/>
+
+ <polygon id="polygon2943" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 618.117,116.406 619.27,116.549 620.131,117.99 621.715,118.278 622.438,119.72 624.021,118.709 625.318,119.286 623.877,119.43
+ 622.438,120.006 621.715,118.568 620.131,118.133 618.547,116.984 "/>
+ <polyline id="polyline2945" points="618.547,924.532 618.838,924.677 618.838,924.821 618.547,924.532 "/>
+
+ <polygon id="polygon2947" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 618.547,924.532 618.838,924.677 618.838,924.821 "/>
+ <polyline id="polyline2949" points="620.422,935.188 626.471,933.173 626.9,933.173 620.998,935.188 620.422,935.188 "/>
+
+ <polygon id="polygon2951" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 620.422,935.188 626.471,933.173 626.9,933.173 620.998,935.188 "/>
+ <polyline id="polyline2953" points="625.318,122.312 625.318,119.286 625.459,119.286 625.318,122.312 "/>
+
+ <polygon id="polygon2955" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 625.318,122.312 625.318,119.286 625.459,119.286 "/>
+ <polyline id="polyline2957" points="625.318,122.312 626.758,124.184 628.197,125.192 629.061,126.629 630.502,128.213
+ 629.061,127.064 628.342,125.622 626.758,124.472 625.748,123.318 625.318,122.454 625.318,122.312 "/>
+
+ <polygon id="polygon2959" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 625.318,122.312 626.758,124.184 628.197,125.192 629.061,126.629 630.502,128.213 629.061,127.064 628.342,125.622
+ 626.758,124.472 625.748,123.318 625.318,122.454 "/>
+ <polyline id="polyline2961" points="638.854,-118.457 639.141,-120.184 638.277,-121.912 638.131,-124.072 638.998,-125.512
+ 638.422,-126.953 638.709,-129.976 639.141,-131.417 642.164,-133 643.893,-132.856 645.332,-134.296 645.908,-135.304
+ 647.35,-136.024 648.789,-136.024 651.379,-136.6 652.102,-136.457 655.846,-134.584 657.285,-135.304 660.164,-134.296
+ 661.029,-132.712 662.471,-132.568 661.029,-132.136 660.74,-132.568 660.453,-133.289 659.014,-134.296 657.43,-134.873
+ 655.99,-134.152 654.547,-134.44 651.525,-136.168 649.51,-135.592 646.627,-135.592 645.908,-134.152 644.613,-132.712
+ 641.877,-132.28 639.572,-130.552 638.564,-127.528 639.715,-126.088 639.285,-124.648 638.422,-123.208 638.422,-122.344
+ 639.141,-120.762 639.572,-118.888 638.854,-118.457 "/>
+
+ <polygon id="polygon2963" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 638.854,-118.457 639.141,-120.184 638.277,-121.912 638.131,-124.072 638.998,-125.512 638.422,-126.953 638.709,-129.976
+ 639.141,-131.417 642.164,-133 643.893,-132.856 645.332,-134.296 645.908,-135.304 647.35,-136.024 648.789,-136.024
+ 651.379,-136.6 652.102,-136.457 655.846,-134.584 657.285,-135.304 660.164,-134.296 661.029,-132.712 662.471,-132.568
+ 661.029,-132.136 660.74,-132.568 660.453,-133.289 659.014,-134.296 657.43,-134.873 655.99,-134.152 654.547,-134.44
+ 651.525,-136.168 649.51,-135.592 646.627,-135.592 645.908,-134.152 644.613,-132.712 641.877,-132.28 639.572,-130.552
+ 638.564,-127.528 639.715,-126.088 639.285,-124.648 638.422,-123.208 638.422,-122.344 639.141,-120.762 639.572,-118.888 "/>
+ <polyline id="polyline2965" fill="#E6F6ED" points="641.445,725.095 641.59,724.661 641.732,724.517 641.445,725.095 "/>
+ <polyline id="polyline2967" fill="#E6F6ED" points="641.732,724.517 642.311,723.511 643.318,723.222 643.029,723.798
+ 641.732,724.517 "/>
+ <polyline id="polyline2969" fill="#E6F6ED" points="643.318,723.222 643.748,722.501 643.748,723.077 643.318,723.222 "/>
+ <polyline id="polyline2971" fill="#E6F6ED" points="643.748,722.501 643.605,721.638 645.043,720.194 645.043,720.772
+ 643.748,722.356 643.748,722.501 "/>
+ <polyline id="polyline2973" fill="#E6F6ED" points="645.043,720.194 645.189,719.333 645.332,719.333 645.189,720.054
+ 645.043,720.194 "/>
+ <polyline id="polyline2975" fill="#E6F6ED" points="645.332,719.333 645.479,718.612 646.916,717.749 646.773,716.31
+ 647.639,714.726 647.926,713.286 648.211,712.854 647.781,714.87 646.916,716.31 647.205,717.749 646.916,719.046 645.332,719.333
+ "/>
+ <polyline id="polyline2977" fill="#E6F6ED" points="648.211,712.854 648.934,711.847 649.654,711.847 648.211,712.854 "/>
+ <polyline id="polyline2979" fill="#E6F6ED" points="658.582,169.542 659.014,170.406 661.893,169.4 663.332,170.838
+ 662.613,172.278 663.479,173.717 663.189,175.158 663.621,176.598 660.74,175.734 659.156,174.44 657.715,175.158 657.715,176.598
+ 659.303,176.31 659.732,176.742 658.582,176.742 657.141,178.038 657.285,175.014 658.293,173.574 659.877,173.862
+ 661.318,173.286 661.893,171.702 660.453,171.272 659.014,172.568 657.572,172.854 654.547,175.59 654.406,174.006
+ 655.846,173.862 657.43,172.568 657.572,170.984 658.582,169.542 "/>
+ <polyline id="polyline2981" fill="#E6F6ED" points="659.156,190.133 659.445,190.133 659.445,190.709 659.156,190.133 "/>
+ <polyline id="polyline2983" fill="#E6F6ED" points="659.156,190.133 657.861,190.133 656.277,189.27 657.715,189.558
+ 657.572,187.974 657.141,186.534 658.006,185.094 659.59,185.238 661.029,184.232 660.164,182.79 661.605,181.494 663.043,182.213
+ 663.332,180.776 664.055,179.333 662.758,180.198 661.174,179.333 660.164,180.917 658.725,181.35 657.285,181.064
+ 658.725,180.629 660.164,179.766 660.164,177.174 662.182,179.045 663.621,178.614 663.766,177.608 664.627,176.166
+ 667.51,175.158 669.094,175.158 670.533,174.87 670.822,173.43 669.957,171.846 671.398,171.702 671.252,173.286 672.693,173.574
+ 673.701,171.99 673.99,173.43 675.43,172.709 676.869,172.422 677.59,173.862 678.021,181.206 681.043,183.222 683.205,183.942
+ 685.51,183.222 683.926,184.232 681.043,184.95 680.182,183.078 679.605,183.078 678.598,182.501 677.59,181.064 677.156,179.622
+ 677.301,176.598 676.725,175.158 677.014,173.574 675.572,173.286 674.854,174.87 673.414,173.862 671.973,174.582
+ 670.389,175.734 670.244,177.174 670.963,178.758 669.67,177.174 668.084,176.742 668.807,178.182 667.51,176.742 664.055,178.47
+ 664.486,179.91 664.055,182.79 664.916,184.232 663.479,184.085 662.037,183.51 663.043,184.95 662.324,187.83 662.471,188.406
+ 662.182,188.549 662.037,188.549 661.893,185.669 659.014,186.965 658.582,188.406 659.156,190.133 "/>
+ <polyline id="polyline2985" fill="#E6F6ED" points="659.445,608.454 659.877,608.022 663.479,608.022 666.211,609.317
+ 669.236,611.333 668.518,612.772 668.229,615.653 669.67,615.509 669.67,617.095 671.252,616.663 672.693,616.806 673.701,615.366
+ 675.285,615.653 673.701,615.942 673.414,617.382 674.422,618.821 675.715,621.847 677.156,621.126 678.74,620.981
+ 680.326,621.413 680.758,622.854 681.766,623.431 680.326,623.862 679.893,622.421 678.453,621.702 676.869,621.702
+ 677.014,623.142 674.133,623.286 673.125,626.31 672.262,627.751 673.701,623.286 673.701,620.403 672.262,619.255
+ 670.822,619.687 669.379,620.692 668.373,622.134 669.236,620.118 670.678,619.11 668.229,616.229 667.51,615.079 667.654,610.612
+ 666.211,610.759 665.061,609.173 662.037,608.31 659.445,608.454 "/>
+ <polyline id="polyline2987" fill="#E6F6ED" points="659.445,190.709 659.59,191.142 660.021,192.582 659.877,192.726
+ 659.445,191.717 659.445,190.709 "/>
+ <polyline id="polyline2989" fill="#E6F6ED" points="659.732,176.742 660.164,176.742 660.164,177.174 659.732,176.742 "/>
+ <polyline id="polyline2991" fill="#E6F6ED" points="662.471,-132.568 663.908,-133.144 665.35,-132.424 666.934,-132.568
+ 668.373,-132.136 672.838,-132.136 674.277,-131.705 677.156,-132.28 679.459,-131.272 680.9,-129.976 681.621,-128.968
+ 683.061,-128.104 684.502,-128.392 686.084,-128.392 686.373,-128.682 686.807,-130.121 686.518,-131.56 685.076,-132.856
+ 686.518,-134.152 686.518,-132.712 687.379,-131.128 688.822,-132.28 691.701,-131.992 693.143,-132.28 695.445,-134.008
+ 696.164,-136.024 697.318,-137.176 699.189,-137.896 702.211,-136.024 703.654,-137.033 704.084,-137.608 704.084,-137.033
+ 705.379,-136.888 706.102,-136.744 706.963,-138.184 708.547,-138.904 712.15,-138.041 713.59,-138.184 715.029,-137.896
+ 720.357,-133.864 722.373,-133.576 723.957,-134.152 724.244,-135.448 725.252,-135.16 726.838,-134.296 727.701,-133.432
+ 725.686,-134.152 724.963,-134.873 724.389,-134.008 723.236,-133 719.205,-133.576 717.766,-135.016 716.9,-135.448
+ 716.182,-136.744 715.029,-137.32 713.59,-137.608 710.564,-137.608 710.133,-138.041 708.693,-138.328 707.109,-138.041
+ 706.389,-136.312 704.807,-136.312 703.223,-135.736 702.068,-134.873 700.627,-135.304 702.211,-135.304 700.627,-136.168
+ 699.189,-136.457 699.043,-136.312 697.459,-136.888 696.598,-135.736 696.164,-134.152 693.715,-131.705 690.838,-130.552
+ 688.102,-130.696 688.389,-129.976 686.949,-129.112 686.229,-127.816 683.205,-127.816 682.197,-128.104 679.605,-130.266
+ 678.164,-130.984 675.572,-131.56 668.084,-131.85 665.061,-132.136 664.197,-132.568 662.471,-132.568 "/>
+ <polyline id="polyline2993" fill="#E6F6ED" points="680.613,634.806 681.621,635.235 681.189,635.382 680.613,634.806 "/>
+ <polyline id="polyline2995" fill="#E6F6ED" points="681.621,635.235 682.627,634.95 684.068,634.95 684.502,635.524
+ 685.941,635.235 688.822,636.821 690.262,638.118 687.379,640.854 689.686,643.733 689.109,646.181 687.814,647.765
+ 687.814,649.206 687.379,650.646 688.389,652.087 688.678,653.524 687.236,652.374 686.229,650.935 687.094,649.493
+ 686.949,647.188 688.533,646.038 688.822,644.597 686.949,641.862 686.229,641.431 686.807,640.134 688.389,638.839
+ 688.678,637.397 687.236,637.255 686.518,635.813 685.076,636.247 683.639,635.235 682.051,635.524 681.621,635.235 "/>
+ <polyline id="polyline2997" fill="#E6F6ED" points="681.766,623.431 682.342,623.718 683.35,622.278 682.916,620.839
+ 683.35,619.255 684.934,619.687 686.229,618.247 685.654,619.687 684.211,619.974 684.357,621.558 684.789,621.989
+ 686.518,621.558 686.662,621.989 684.646,622.421 682.773,623.431 682.773,624.149 683.639,625.157 681.766,623.431 "/>
+ <polyline id="polyline2999" points="682.051,128.648 682.342,128.07 682.342,128.358 682.051,128.648 "/>
+
+ <polygon id="polygon3001" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 682.051,128.648 682.342,128.07 682.342,128.358 "/>
+ <polyline id="polyline3003" points="682.051,128.648 681.908,129.366 681.766,130.95 682.197,132.534 683.205,133.976
+ 683.926,135.56 685.076,136.998 688.102,138.87 689.686,139.158 692.564,139.016 694.15,139.301 695.732,140.742 700.051,141.461
+ 703.076,142.326 706.102,144.629 707.398,146.213 708.98,146.79 710.422,146.79 710.854,145.206 710.998,146.79 712.438,146.501
+ 713.732,146.936 714.598,147.654 712.869,146.79 711.285,146.936 709.846,147.51 706.822,146.501 705.814,144.917 702.934,142.614
+ 699.908,141.608 698.758,141.608 697.318,141.174 695.877,141.174 694.293,139.877 692.709,139.301 689.686,139.446
+ 688.244,139.158 686.807,138.582 685.223,137.286 683.781,135.702 683.205,134.262 681.908,132.678 681.479,131.238
+ 681.334,129.797 682.051,128.648 "/>
+
+ <polygon id="polygon3005" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 682.051,128.648 681.908,129.366 681.766,130.95 682.197,132.534 683.205,133.976 683.926,135.56 685.076,136.998 688.102,138.87
+ 689.686,139.158 692.564,139.016 694.15,139.301 695.732,140.742 700.051,141.461 703.076,142.326 706.102,144.629
+ 707.398,146.213 708.98,146.79 710.422,146.79 710.854,145.206 710.998,146.79 712.438,146.501 713.732,146.936 714.598,147.654
+ 712.869,146.79 711.285,146.936 709.846,147.51 706.822,146.501 705.814,144.917 702.934,142.614 699.908,141.608 698.758,141.608
+ 697.318,141.174 695.877,141.174 694.293,139.877 692.709,139.301 689.686,139.446 688.244,139.158 686.807,138.582
+ 685.223,137.286 683.781,135.702 683.205,134.262 681.908,132.678 681.479,131.238 681.334,129.797 "/>
+ <polyline id="polyline3007" points="686.084,358.038 686.662,356.599 688.963,353.573 690.406,352.278 693.285,351.126
+ 694.15,349.687 697.029,348.966 698.613,347.958 700.051,346.95 700.916,345.511 702.357,345.366 699.334,347.958 697.748,348.966
+ 696.311,349.687 694.725,349.687 693.715,351.126 692.133,352.136 690.693,352.71 688.822,354.438 686.518,357.894
+ 686.084,358.038 "/>
+
+ <polygon id="polygon3009" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 686.084,358.038 686.662,356.599 688.963,353.573 690.406,352.278 693.285,351.126 694.15,349.687 697.029,348.966
+ 698.613,347.958 700.051,346.95 700.916,345.511 702.357,345.366 699.334,347.958 697.748,348.966 696.311,349.687
+ 694.725,349.687 693.715,351.126 692.133,352.136 690.693,352.71 688.822,354.438 686.518,357.894 "/>
+ <polyline id="polyline3011" fill="#E6F6ED" points="686.662,621.989 686.807,621.989 687.094,623.142 686.807,623.142
+ 686.662,621.989 "/>
+ <polyline id="polyline3013" fill="#E6F6ED" points="687.094,623.142 688.244,622.997 689.686,623.286 691.557,624.294
+ 689.973,624.149 687.094,623.431 687.094,623.142 "/>
+ <polyline id="polyline3015" points="689.973,504.63 689.973,504.485 690.406,503.333 690.547,503.622 689.973,504.63 "/>
+
+ <polygon id="polygon3017" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 689.973,504.63 689.973,504.485 690.406,503.333 690.547,503.622 "/>
+ <polyline id="polyline3019" points="689.973,501.751 689.973,501.606 690.547,500.599 689.973,501.751 "/>
+
+ <polygon id="polygon3021" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 689.973,501.751 689.973,501.606 690.547,500.599 "/>
+ <polyline id="polyline3023" points="689.973,501.751 690.547,503.046 690.406,503.333 689.83,502.181 689.973,501.751 "/>
+
+ <polygon id="polygon3025" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 689.973,501.751 690.547,503.046 690.406,503.333 689.83,502.181 "/>
+ <polyline id="polyline3027" points="690.547,500.599 690.693,499.157 691.99,497.573 692.564,496.278 692.422,494.839
+ 692.709,493.397 693.43,491.958 693.572,490.374 694.582,488.935 696.021,487.782 695.877,486.341 696.453,483.317
+ 697.174,481.878 697.318,478.997 697.748,478.136 699.189,477.562 699.043,476.118 699.908,474.679 700.916,471.798
+ 700.916,470.214 702.068,468.774 703.365,465.897 702.934,464.312 704.084,461.286 706.389,458.405 706.822,456.819
+ 707.83,455.382 709.414,454.229 708.693,452.79 709.846,451.206 712.582,448.472 712.725,447.03 714.164,445.733 715.174,445.589
+ 716.326,444.151 718.051,441.413 718.486,439.976 721.365,438.679 722.807,437.526 723.094,435.942 723.957,434.499
+ 726.838,434.069 728.133,432.487 731.014,430.472 732.021,431.046 733.605,430.612 735.043,429.749 736.486,430.183
+ 738.068,429.319 738.934,427.878 740.518,426.87 741.379,423.847 742.102,422.405 743.541,422.554 743.252,421.11 743.83,419.671
+ 744.693,419.815 744.406,419.958 743.83,421.542 743.686,422.983 742.244,422.839 741.236,425.431 741.67,426.87 740.229,427.444
+ 739.51,429.03 736.627,430.612 735.043,430.183 733.605,431.046 732.164,431.479 730.869,431.19 727.99,433.065 726.98,434.499
+ 724.102,434.647 723.379,436.229 723.094,437.671 721.654,438.966 720.211,439.827 718.773,440.118 718.486,441.562
+ 716.326,445.015 713.301,447.171 713.014,448.612 709.125,452.79 709.701,454.229 707.109,457.11 706.678,458.55 705.67,460.136
+ 704.373,461.573 703.51,464.454 703.654,466.472 701.494,470.214 701.35,471.798 699.334,476.263 699.479,477.702 698.037,478.421
+ 697.318,479.862 697.748,481.444 696.453,484.325 696.453,485.767 696.164,486.774 696.598,488.214 695.156,488.79
+ 693.861,490.229 693.861,491.813 692.709,494.839 692.854,496.278 692.422,497.862 692.133,498.581 690.838,500.022
+ 690.547,500.599 "/>
+
+ <polygon id="polygon3029" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 690.547,500.599 690.693,499.157 691.99,497.573 692.564,496.278 692.422,494.839 692.709,493.397 693.43,491.958 693.572,490.374
+ 694.582,488.935 696.021,487.782 695.877,486.341 696.453,483.317 697.174,481.878 697.318,478.997 697.748,478.136
+ 699.189,477.562 699.043,476.118 699.908,474.679 700.916,471.798 700.916,470.214 702.068,468.774 703.365,465.897
+ 702.934,464.312 704.084,461.286 706.389,458.405 706.822,456.819 707.83,455.382 709.414,454.229 708.693,452.79 709.846,451.206
+ 712.582,448.472 712.725,447.03 714.164,445.733 715.174,445.589 716.326,444.151 718.051,441.413 718.486,439.976
+ 721.365,438.679 722.807,437.526 723.094,435.942 723.957,434.499 726.838,434.069 728.133,432.487 731.014,430.472
+ 732.021,431.046 733.605,430.612 735.043,429.749 736.486,430.183 738.068,429.319 738.934,427.878 740.518,426.87
+ 741.379,423.847 742.102,422.405 743.541,422.554 743.252,421.11 743.83,419.671 744.693,419.815 744.406,419.958 743.83,421.542
+ 743.686,422.983 742.244,422.839 741.236,425.431 741.67,426.87 740.229,427.444 739.51,429.03 736.627,430.612 735.043,430.183
+ 733.605,431.046 732.164,431.479 730.869,431.19 727.99,433.065 726.98,434.499 724.102,434.647 723.379,436.229 723.094,437.671
+ 721.654,438.966 720.211,439.827 718.773,440.118 718.486,441.562 716.326,445.015 713.301,447.171 713.014,448.612
+ 709.125,452.79 709.701,454.229 707.109,457.11 706.678,458.55 705.67,460.136 704.373,461.573 703.51,464.454 703.654,466.472
+ 701.494,470.214 701.35,471.798 699.334,476.263 699.479,477.702 698.037,478.421 697.318,479.862 697.748,481.444
+ 696.453,484.325 696.453,485.767 696.164,486.774 696.598,488.214 695.156,488.79 693.861,490.229 693.861,491.813
+ 692.709,494.839 692.854,496.278 692.422,497.862 692.133,498.581 690.838,500.022 "/>
+ <polyline id="polyline3031" points="692.854,506.214 693.143,506.071 692.998,506.214 692.854,506.214 "/>
+
+ <polygon id="polygon3033" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 692.854,506.214 693.143,506.071 692.998,506.214 "/>
+ <polyline id="polyline3035" points="693.143,506.071 695.156,503.333 696.598,503.046 699.479,502.759 699.908,502.612
+ 698.9,503.478 696.021,503.765 694.582,504.485 693.43,505.927 693.143,506.071 "/>
+
+ <polygon id="polygon3037" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 693.143,506.071 695.156,503.333 696.598,503.046 699.479,502.759 699.908,502.612 698.9,503.478 696.021,503.765 694.582,504.485
+ 693.43,505.927 "/>
+ <polyline id="polyline3039" points="699.908,502.612 700.486,502.181 700.773,502.47 699.908,502.612 "/>
+
+ <polygon id="polygon3041" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 699.908,502.612 700.486,502.181 700.773,502.47 "/>
+ <polyline id="polyline3043" points="700.773,502.47 701.061,502.325 702.502,503.478 706.963,504.054 707.398,505.495
+ 710.422,504.919 711.572,506.071 713.301,505.927 713.59,507.509 713.301,508.95 714.021,510.39 714.021,511.974 715.174,513.413
+ 715.748,514.854 715.748,516.294 718.773,518.165 720.211,518.454 721.51,520.038 722.949,520.038 723.814,521.478
+ 725.252,521.765 725.686,523.206 727.125,523.349 728.564,524.358 727.99,525.798 728.277,525.798 729.715,527.095
+ 730.725,528.534 732.164,529.397 730.725,528.821 729.285,528.966 729.43,527.382 727.557,525.942 728.277,524.501
+ 725.398,523.349 725.109,521.911 723.525,521.622 722.373,520.181 720.934,520.181 720.068,518.597 718.486,518.31
+ 715.605,516.581 715.605,515.142 714.453,513.56 713.877,512.118 713.732,510.679 712.869,509.095 713.445,507.653
+ 712.582,506.214 711.43,506.358 710.277,505.206 708.838,505.495 707.398,506.214 706.389,504.774 704.807,504.63 703.365,503.765
+ 701.926,503.622 700.773,502.47 "/>
+
+ <polygon id="polygon3045" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 700.773,502.47 701.061,502.325 702.502,503.478 706.963,504.054 707.398,505.495 710.422,504.919 711.572,506.071
+ 713.301,505.927 713.59,507.509 713.301,508.95 714.021,510.39 714.021,511.974 715.174,513.413 715.748,514.854 715.748,516.294
+ 718.773,518.165 720.211,518.454 721.51,520.038 722.949,520.038 723.814,521.478 725.252,521.765 725.686,523.206
+ 727.125,523.349 728.564,524.358 727.99,525.798 728.277,525.798 729.715,527.095 730.725,528.534 732.164,529.397
+ 730.725,528.821 729.285,528.966 729.43,527.382 727.557,525.942 728.277,524.501 725.398,523.349 725.109,521.911
+ 723.525,521.622 722.373,520.181 720.934,520.181 720.068,518.597 718.486,518.31 715.605,516.581 715.605,515.142 714.453,513.56
+ 713.877,512.118 713.732,510.679 712.869,509.095 713.445,507.653 712.582,506.214 711.43,506.358 710.277,505.206
+ 708.838,505.495 707.398,506.214 706.389,504.774 704.807,504.63 703.365,503.765 701.926,503.622 "/>
+ <polyline id="polyline3047" fill="#E6F6ED" points="702.646,756.917 702.934,757.78 702.357,760.661 701.205,762.245
+ 699.621,762.679 699.189,764.118 700.051,765.7 700.051,767.142 699.621,768.581 700.773,771.173 700.916,772.612 702.068,774.054
+ 704.949,774.054 706.389,775.062 707.252,776.501 706.102,778.372 706.244,779.956 707.686,780.821 710.564,781.397
+ 712.006,782.55 713.732,780.39 715.174,779.956 715.893,778.517 716.471,779.956 715.318,781.397 713.732,781.54 712.293,782.981
+ 712.006,783.989 711.143,785.429 711.285,786.87 710.709,788.454 711.715,791.046 713.156,792.341 714.021,795.364
+ 714.021,796.806 714.883,798.245 715.174,799.687 716.037,801.271 717.334,802.565 717.479,804.149 717.908,805.589
+ 717.908,807.03 718.773,810.054 718.773,811.493 719.061,812.788 720.502,812.935 720.068,813.364 718.627,813.222 718.197,811.78
+ 717.766,808.612 717.043,807.604 717.043,804.581 716.758,803.142 715.459,801.7 714.311,798.677 713.156,798.39 712.582,797.813
+ 713.59,796.372 713.014,793.493 710.998,790.612 710.277,788.741 710.277,787.302 710.709,785.862 710.133,784.421
+ 710.277,782.981 708.693,781.687 706.678,781.54 705.236,780.532 705.094,778.948 705.957,777.511 706.389,776.067
+ 704.949,775.062 703.365,774.485 701.926,774.63 700.486,773.622 699.479,772.181 699.621,770.31 699.189,768.87 699.621,766.997
+ 698.471,764.118 699.189,762.679 699.334,761.235 700.773,761.235 702.068,759.798 702.646,756.917 "/>
+ <polyline id="polyline3049" points="727.701,-133.432 727.846,-133.289 727.846,-133.144 727.701,-133.432 "/>
+
+ <polygon id="polygon3051" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 727.701,-133.432 727.846,-133.289 727.846,-133.144 "/>
+ <polyline id="polyline3053" points="727.846,-133.144 728.854,-131.992 730.293,-130.84 730.293,-130.552 731.732,-129.544
+ 732.453,-129.4 734.037,-128.249 734.9,-128.249 736.486,-127.384 736.916,-126.953 737.205,-126.953 738.502,-126.665
+ 739.941,-126.088 741.094,-126.232 741.525,-126.088 742.102,-124.792 743.252,-123.352 744.838,-122.344 745.557,-122.201
+ 743.973,-122.201 742.533,-123.352 740.949,-125.512 739.51,-125.8 732.883,-128.537 728.854,-131.272 727.99,-132.568
+ 727.846,-133.144 "/>
+
+ <polygon id="polygon3055" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 727.846,-133.144 728.854,-131.992 730.293,-130.84 730.293,-130.552 731.732,-129.544 732.453,-129.4 734.037,-128.249
+ 734.9,-128.249 736.486,-127.384 736.916,-126.953 737.205,-126.953 738.502,-126.665 739.941,-126.088 741.094,-126.232
+ 741.525,-126.088 742.102,-124.792 743.252,-123.352 744.838,-122.344 745.557,-122.201 743.973,-122.201 742.533,-123.352
+ 740.949,-125.512 739.51,-125.8 732.883,-128.537 728.854,-131.272 727.99,-132.568 "/>
+ <polyline id="polyline3057" points="730.293,-130.84 732.74,-129.544 734.182,-128.392 734.613,-128.392 734.9,-128.249
+ 734.037,-128.249 732.453,-129.4 731.732,-129.544 730.293,-130.552 730.293,-130.84 "/>
+
+ <polygon id="polygon3059" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 730.293,-130.84 732.74,-129.544 734.182,-128.392 734.613,-128.392 734.9,-128.249 734.037,-128.249 732.453,-129.4
+ 731.732,-129.544 730.293,-130.552 "/>
+ <polyline id="polyline3061" points="734.9,-128.249 735.479,-128.249 736.486,-127.384 734.9,-128.249 "/>
+
+ <polygon id="polygon3063" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 734.9,-128.249 735.479,-128.249 736.486,-127.384 "/>
+ <polyline id="polyline3065" points="736.486,-127.384 737.205,-126.953 736.916,-126.953 736.486,-127.384 "/>
+
+ <polygon id="polygon3067" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 736.486,-127.384 737.205,-126.953 736.916,-126.953 "/>
+ <polyline id="polyline3069" points="737.205,-126.953 740.373,-126.52 741.094,-126.232 739.941,-126.088 738.502,-126.665
+ 737.205,-126.953 "/>
+
+ <polygon id="polygon3071" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 737.205,-126.953 740.373,-126.52 741.094,-126.232 739.941,-126.088 738.502,-126.665 "/>
+ <polyline id="polyline3073" points="741.094,-126.232 741.379,-126.232 741.525,-126.088 741.094,-126.232 "/>
+
+ <polygon id="polygon3075" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 741.094,-126.232 741.379,-126.232 741.525,-126.088 "/>
+ <polyline id="polyline3077" points="741.525,-126.088 741.814,-125.944 743.973,-123.064 744.98,-122.632 747.143,-121.912
+ 745.557,-122.201 744.838,-122.344 743.252,-123.352 742.102,-124.792 741.525,-126.088 "/>
+
+ <polygon id="polygon3079" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 741.525,-126.088 741.814,-125.944 743.973,-123.064 744.98,-122.632 747.143,-121.912 745.557,-122.201 744.838,-122.344
+ 743.252,-123.352 742.102,-124.792 "/>
+ <polyline id="polyline3081" points="744.693,419.815 745.557,419.671 745.27,419.958 744.693,419.815 "/>
+
+ <polygon id="polygon3083" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 744.693,419.815 745.557,419.671 745.27,419.958 "/>
+ <polyline id="polyline3085" points="745.557,419.671 746.564,418.519 748.006,417.511 747.43,418.374 747.43,418.663
+ 745.846,419.526 745.557,419.671 "/>
+
+ <polygon id="polygon3087" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 745.557,419.671 746.564,418.519 748.006,417.511 747.43,418.374 747.43,418.663 745.846,419.526 "/>
+ <polyline id="polyline3089" points="745.557,-122.201 747.143,-121.912 747.861,-121.625 749.301,-120.472 748.582,-120.904
+ 745.557,-122.201 "/>
+
+ <polygon id="polygon3091" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 745.557,-122.201 747.143,-121.912 747.861,-121.625 749.301,-120.472 748.582,-120.904 "/>
+ <polyline id="polyline3093" points="747.143,-121.912 747.715,-121.768 747.861,-121.625 747.143,-121.912 "/>
+
+ <polygon id="polygon3095" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 747.143,-121.912 747.715,-121.768 747.861,-121.625 "/>
+ <polyline id="polyline3097" points="747.861,-121.625 749.59,-121.05 752.613,-122.058 754.197,-121.48 754.051,-121.336
+ 754.486,-119.896 756.211,-119.033 756.502,-118.312 755.781,-118.744 755.494,-118.888 754.051,-120.041 753.334,-121.48
+ 752.471,-121.625 752.182,-121.625 749.301,-120.472 747.861,-121.625 "/>
+
+ <polygon id="polygon3099" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 747.861,-121.625 749.59,-121.05 752.613,-122.058 754.197,-121.48 754.051,-121.336 754.486,-119.896 756.211,-119.033
+ 756.502,-118.312 755.781,-118.744 755.494,-118.888 754.051,-120.041 753.334,-121.48 752.471,-121.625 752.182,-121.625
+ 749.301,-120.472 "/>
+ <polyline id="polyline3101" points="748.006,417.511 748.293,416.358 748.438,416.935 748.006,417.511 "/>
+
+ <polygon id="polygon3103" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 748.006,417.511 748.293,416.358 748.438,416.935 "/>
+ <polyline id="polyline3105" points="748.006,415.206 747.861,414.487 753.334,411.175 754.773,411.606 754.916,411.175
+ 755.061,412.183 753.621,411.462 752.037,412.472 750.598,412.901 749.156,414.058 748.006,415.206 "/>
+
+ <polygon id="polygon3107" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 748.006,415.206 747.861,414.487 753.334,411.175 754.773,411.606 754.916,411.175 755.061,412.183 753.621,411.462
+ 752.037,412.472 750.598,412.901 749.156,414.058 "/>
+ <polyline id="polyline3109" points="748.006,415.206 748.293,416.069 748.293,416.358 747.861,415.495 748.006,415.206 "/>
+
+ <polygon id="polygon3111" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 748.006,415.206 748.293,416.069 748.293,416.358 747.861,415.495 "/>
+ <polyline id="polyline3113" points="749.301,-120.472 752.182,-121.625 752.471,-121.625 752.471,-121.05 751.029,-120.904
+ 749.445,-120.328 749.301,-120.472 "/>
+
+ <polygon id="polygon3115" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 749.301,-120.472 752.182,-121.625 752.471,-121.625 752.471,-121.05 751.029,-120.904 749.445,-120.328 "/>
+ <polyline id="polyline3117" points="752.471,-121.625 753.334,-121.48 754.051,-120.041 755.494,-118.888 755.781,-118.744
+ 756.502,-118.312 755.781,-118.6 754.916,-119.033 754.197,-119.608 752.471,-121.625 "/>
+
+ <polygon id="polygon3119" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 752.471,-121.625 753.334,-121.48 754.051,-120.041 755.494,-118.888 755.781,-118.744 756.502,-118.312 755.781,-118.6
+ 754.916,-119.033 754.197,-119.608 "/>
+ <polyline id="polyline3121" points="754.197,-121.48 754.916,-122.344 755.781,-122.488 756.502,-122.058 755.781,-122.058
+ 754.916,-121.912 754.197,-121.48 "/>
+
+ <polygon id="polygon3123" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 754.197,-121.48 754.916,-122.344 755.781,-122.488 756.502,-122.058 755.781,-122.058 754.916,-121.912 "/>
+ <polyline id="polyline3125" points="754.627,-93.112 754.916,-93.833 756.502,-94.266 754.627,-93.112 "/>
+
+ <polygon id="polygon3127" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 754.627,-93.112 754.916,-93.833 756.502,-94.266 "/>
+ <polyline id="polyline3129" points="754.627,-93.112 755.781,-92.249 756.502,-90.665 754.627,-93.112 "/>
+
+ <polygon id="polygon3131" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 754.627,-93.112 755.781,-92.249 756.502,-90.665 "/>
+ <polyline id="polyline3133" points="754.916,411.175 754.916,410.599 755.35,410.312 754.916,411.175 "/>
+
+ <polygon id="polygon3135" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 754.916,411.175 754.916,410.599 755.35,410.312 "/>
+ <polyline id="polyline3137" points="755.35,410.312 755.494,410.022 755.781,409.878 756.502,409.591 755.781,410.022
+ 755.35,410.312 "/>
+
+ <polygon id="polygon3139" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 755.35,410.312 755.494,410.022 755.781,409.878 756.502,409.591 755.781,410.022 "/>
+ <polyline id="polyline3141" fill="#E6F6ED" points="-213.48,44.264 -213.192,43.976 -211.608,43.542 -210.171,42.246
+ -210.024,40.808 -209.45,39.366 -208.73,37.782 -209.162,36.344 -208.011,34.902 -206.57,33.608 -205.272,32.166 -206.57,30.582
+ -208.154,30.582 -209.595,30.15 -211.034,30.44 -212.473,30.728 -214.057,30.728 -215.498,30.87 -216.938,30.87 -218.379,30.15
+ -219.963,29.574 -218.379,29.72 -216.938,30.008 -215.498,30.295 -213.914,30.295 -212.473,30.44 -211.034,30.008 -209.595,29.432
+ -208.011,29.286 -206.57,29.432 -208.154,28.856 -206.57,28.856 -205.131,28.711 -203.688,29.432 -202.971,27.848 -201.53,27.127
+ -200.091,26.406 -201.675,27.414 -202.826,28.998 -201.242,29.144 -199.803,28.998 -198.362,28.856 -196.923,28.998
+ -195.482,29.574 -193.898,29.72 -192.458,29.574 -191.017,29.574 -189.866,29.862 -190.154,29.862 -191.595,30.15 -193.034,30.008
+ -194.618,30.582 -196.057,30.295 -197.498,29.72 -198.938,29.862 -200.379,30.295 -200.666,31.734 -201.675,30.295
+ -203.114,30.295 -204.555,31.592 -205.563,33.03 -207.003,34.472 -208.44,35.622 -208.587,37.064 -208.299,38.648 -209.162,40.085
+ -209.45,41.526 -210.314,42.967 -211.898,44.406 -213.339,44.264 -213.48,44.264 "/>
+ <polyline id="polyline3143" fill="#E6F6ED" points="545.398,722.356 545.686,720.917 546.98,719.333 548.564,718.47
+ 548.854,718.47 550.293,719.046 551.303,720.485 552.021,720.772 550.869,722.214 549.285,723.364 547.701,724.085
+ 546.262,724.085 545.398,722.501 545.398,722.356 "/>
+ <line id="line3145" fill="#E6F6ED" x1="702.58" y1="720.938" x2="704.807" y2="717.894"/>
+ <polyline id="polyline3147" fill="#E6F6ED" points="703.223,718.899 701.35,721.062 698.182,723.798 696.74,723.364
+ 694.582,720.485 697.605,719.909 696.021,719.765 693.861,718.325 694.438,716.886 694.293,715.302 693.861,713.862
+ 695.014,712.421 695.156,711.7 694.006,711.989 693.715,712.278 692.564,716.597 692.564,719.622 690.98,720.485 689.541,720.63
+ 688.102,720.341 686.662,720.917 685.223,720.485 684.502,720.194 683.926,718.612 684.502,717.173 685.941,716.31 685.076,714.87
+ 683.639,713.718 685.076,712.854 683.639,712.854 682.916,711.413 683.205,710.403 681.766,711.413 680.326,710.55 680.471,709.11
+ 682.486,706.229 681.621,702.483 682.486,700.757 682.342,699.173 682.773,698.741 684.934,694.278 685.941,693.413
+ 686.229,691.974 686.084,690.39 689.109,688.661 689.83,689.524 689.541,688.661 689.109,688.661 687.957,688.517 689.109,687.077
+ 689.686,685.638 689.252,684.194 689.83,682.757 689.109,681.173 688.678,682.325 688.678,683.765 688.389,684.341
+ 686.949,684.194 686.662,683.478 684.934,682.038 686.373,684.054 689.252,685.349 688.533,686.79 685.365,691.11 684.789,692.694
+ 682.916,695.573 681.334,696.294 681.766,697.878 681.189,699.317 679.748,699.604 679.029,701.046 677.445,702.054
+ 676.006,701.478 679.029,703.206 679.459,704.356 674.564,703.638 672.98,702.772 671.541,701.333 669.814,701.909
+ 668.229,703.062 666.357,704.935 662.9,706.374 661.459,706.517 659.732,705.364 658.148,706.517 652.533,712.134 651.957,712.278
+ 650.373,711.847 648.934,711.847 648.211,712.854 647.926,713.286 647.639,714.726 646.773,716.31 646.916,717.749
+ 645.479,718.612 645.332,719.333 645.189,719.333 645.043,720.194 643.605,721.638 643.748,722.501 643.318,723.222
+ 642.311,723.511 641.732,724.517 641.59,724.661 641.445,725.095 640.869,726.103 639.43,727.54 638.422,728.981 636.838,729.413
+ 635.398,729.271 633.957,729.7 632.518,729.413 630.934,729.989 627.621,730.421 626.182,730.134 624.598,730.134 623.732,729.989
+ 622.148,729.124 621.285,727.974 616.822,726.532 615.094,723.077 614.373,718.612 614.662,718.47 614.084,716.165
+ 613.941,721.349 614.373,722.788 613.51,722.067 612.068,720.917 613.365,722.356 613.51,723.798 612.068,725.382 610.627,723.94
+ 610.627,725.524 609.189,726.966 607.748,727.54 606.311,728.837 605.156,729.558 604.725,729.847 604.006,731.286
+ 602.564,732.581 601.99,732.581 600.547,733.302 599.686,734.022 598.963,734.022 597.525,732.87 596.518,733.013 595.076,732.581
+ 593.926,732.87 592.486,732.149 592.627,730.565 591.043,731.142 591.189,732.581 590.613,733.302 592.055,733.589
+ 592.486,734.165 592.342,734.741 591.332,736.181 590.758,740.646 591.621,739.204 591.479,737.765 591.766,736.325
+ 592.773,734.454 594.211,733.157 594.934,732.87 599.541,734.741 600.838,733.735 603.285,732.581 604.725,731.571
+ 605.156,729.558 606.598,728.981 610.486,726.39 611.926,726.39 612.357,727.829 612.211,726.39 612.934,725.382 614.373,724.372
+ 614.662,727.253 616.102,727.11 617.541,728.263 619.125,728.118 618.838,729.558 620.277,729.124 621.715,730.708
+ 621.715,730.997 622.293,730.854 621.861,732.438 622.148,732.294 622.293,731.431 623.732,730.134 627.766,730.854
+ 629.35,730.421 631.365,730.421 632.807,729.7 634.246,730.278 635.686,729.558 637.27,729.558 638.709,729.124 641.014,726.245
+ 641.445,725.095 641.732,724.517 643.029,723.798 643.318,723.222 643.748,723.077 643.748,722.356 645.043,720.772
+ 645.043,720.194 645.189,720.054 645.332,719.333 646.916,719.046 647.205,717.749 646.916,716.31 647.781,714.87 648.211,712.854
+ 649.654,711.847 651.814,712.565 653.252,712.134 654.262,710.694 655.701,709.255 657.285,708.103 658.725,706.517
+ 660.164,706.087 661.605,706.948 663.189,706.806 666.068,705.94 667.223,704.503 668.807,704.214 668.949,707.095
+ 669.379,704.067 670.102,702.194 671.541,702.483 673.125,703.638 674.564,703.927 676.006,704.935 677.445,704.79
+ 679.029,705.222 679.605,706.661 679.029,710.403 680.9,711.847 681.479,713.286 682.916,714.294 681.621,715.589 680.9,717.03
+ 681.189,718.181 682.627,719.622 684.357,720.917 684.357,721.204 685.51,722.646 687.094,722.356 688.533,721.493
+ 689.973,721.493 691.557,721.062 692.998,722.067 694.15,723.653 695.156,724.517 696.74,724.661 698.182,725.669 699.621,724.517
+ 701.205,724.806 699.621,727.829 698.182,728.55 699.621,727.974 701.781,725.095 700.627,723.511 701.205,722.067
+ 703.223,719.478 "/>
+ <polyline id="polyline3149" fill="#E6F6ED" points="702.789,725.524 701.35,726.821 700.627,728.263 700.342,729.558
+ 698.9,732.581 700.486,733.878 701.926,734.022 702.502,734.886 702.211,736.47 702.502,737.765 702.357,739.204 704.662,743.524
+ 705.67,746.55 705.236,747.989 702.646,756.917 702.068,759.798 700.773,761.235 699.334,761.235 699.189,762.679 698.471,764.118
+ 699.621,766.997 699.189,768.87 699.621,770.31 699.479,772.181 700.486,773.622 701.926,774.63 703.365,774.485 704.949,775.062
+ 706.389,776.067 705.957,777.511 705.094,778.948 705.236,780.532 706.678,781.54 708.693,781.687 710.277,782.981
+ 710.133,784.421 710.709,785.862 710.277,787.302 710.277,788.741 710.998,790.612 713.014,793.493 713.59,796.372
+ 712.582,797.813 713.156,798.39 714.311,798.677 715.459,801.7 716.758,803.142 717.043,804.581 717.043,807.604 717.766,808.612
+ 718.197,811.78 718.627,813.222 720.068,813.364 720.502,812.935 719.061,812.788 718.773,811.493 718.773,810.054 717.908,807.03
+ 717.908,805.589 717.479,804.149 717.334,802.565 716.037,801.271 715.174,799.687 714.883,798.245 714.021,796.806
+ 714.021,795.364 713.156,792.341 711.715,791.046 710.709,788.454 711.285,786.87 711.143,785.429 712.006,783.989
+ 712.293,782.981 713.732,781.54 715.318,781.397 716.471,779.956 715.893,778.517 715.174,779.956 713.732,780.39 712.006,782.55
+ 710.564,781.397 707.686,780.821 706.244,779.956 706.102,778.372 707.252,776.501 706.389,775.062 704.949,774.054
+ 702.068,774.054 700.916,772.612 700.773,771.173 699.621,768.581 700.051,767.142 700.051,765.7 699.189,764.118 699.621,762.679
+ 701.205,762.245 702.357,760.661 702.934,757.78 702.646,756.917 702.646,755.333 703.365,752.454 704.373,751.013
+ 705.814,749.718 705.814,749.571 706.533,744.245 704.949,743.095 703.252,737.817 701.914,734.386 700.393,733.903
+ 698.877,732.317 700.666,728.556 701.002,723.817 "/>
+ <polyline id="polyline3151" fill="#FECF6D" points="756.588,-289.058 756.627,-315.642 -251.33,-315.476 -251.372,-288.892
+ 756.588,-289.058 "/>
+
+ <path id="path3153" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M705.379-136.888l0.723,0.145l0.861-1.44l1.584-0.72l1.445,0.29l0.717,0.288l1.443,0.287l1.439-0.144l1.439,0.288l1.584,1.152
+ l1.295,1.151l1.441,1.008l1.008,0.721l1.584,0.144h0.143l0.289,0.145l1.584-0.576l0.289-1.296l1.008,0.288v0.144l1.586,0.72
+ l1.439,1.44l0.576,0.864l1.439,1.151l1.008,0.433l1.441,0.863l1.441,1.152h0.432l1.438,0.72l1.154,0.72l1.443,0.145l1.438,0.288
+ h0.289l1.443,0.576l1.008,1.439l1.15,1.44l1.008,0.432l1.01,0.288l1.439,0.433l1.584,0.575l0.576,0.286l0.863-0.43l1.584-0.288
+ l0.576-0.29l1.584,0.578l0.719-0.864l1.586-0.144 M705.379-136.888l-1.293-0.145 M705.379-136.888l-1.293-0.145v-0.575l-0.43,0.575
+ l-1.445,1.009l-1.584-0.864l-1.438-1.008l-0.289,0.144l-1.582,0.576l-0.291,0.288l-0.865,0.864l-0.432,0.864l-0.289,1.151
+ l-1.584,1.296l-0.719,0.433l-1.441,0.288h-1.439l-0.291-0.145l-1.148-0.144l-1.445,1.151l-0.861-1.584v-1.439l-1.441,1.296
+ l1.441,1.296l0.289,1.439l-0.434,1.297v0.142l-0.289,0.29h-1.582l-1.443,0.288l-1.439-0.864l-0.721-1.008l-1.441-1.296
+ l-0.717-0.433l-1.584-0.575l-1.443,0.288l-1.438,0.287l-1.439-0.432h-4.465l-1.439-0.432l-1.584,0.144l-1.441-0.72l-1.439,0.576
+ l-1.441-0.145l-0.865-1.584l-1.441-0.432l-1.439-0.576l-1.439,0.72l-0.432-0.144l-1.443-0.864l-1.439-0.576l-0.432-0.288
+ l-0.723-0.144l-1.148,0.144l-1.441,0.433h-1.439l-1.443,0.72l-0.574,1.008l-1.441,1.44h-1.439L642.148-133l-1.441,0.864
+ l-1.584,0.72l-0.432,1.44l-0.145,1.439l-0.141,1.584l0.576,1.44l-0.869,1.44v1.584l0.146,0.43v0.146l0.145,0.287l0.717,1.44v0.144
+ l-0.287,1.584h-1.441l-1.441,1.009l-1.439-0.288l-1.439-1.297l-1.152-1.439l0.141-1.586l-1.293-1.438l-0.863-0.146"/>
+
+ <path id="path3155" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M756.502-118.312l-1.586-0.721l-0.719-0.575l-0.432-0.72l-1.295-1.297v0.574l-1.441,0.146l-1.584,0.576l-0.863-0.576l-1.584-0.576
+ l-1.443-0.721h-1.584l-1.439-1.151l-1.008-1.152l-0.576-1.008l-1.439-0.288l-1.584-0.72l-1.439-0.578l-1.445-0.574l-1.438-0.576
+ l-0.146-0.144l-0.576-0.145l-1.582-1.151l-1.008-0.72l-1.439-0.864l-0.863-1.296l-0.145-0.721l-1.584-0.575l-0.291-0.145
+ l-0.287-0.144l-0.723-0.721l-0.43,0.433l-0.145,0.432l-0.143,0.145L723.232-133h-0.143l-1.584-0.144l-1.152-0.288l-1.008-0.144
+ h-0.145l-1.439-1.44l-0.432-0.144l-0.434-0.288l-0.719-1.296l-1.152-0.576l-1.439-0.288h-3.025l-0.434-0.433l-1.439-0.287
+ l-1.584,0.287l-0.576,1.44l-0.145,0.288l-0.572,0.144l-1.01-0.144l-1.584,0.576l-1.152,0.863l-1.443-0.432h1.584l-1.584-0.864
+ l-1.438-0.288l-0.146,0.145l-1.584-0.576l-0.285,0.576l-0.576,0.576l-0.434,1.296v0.288l-1.295,1.439l-0.717,0.576l-0.438,0.432
+ l-1.438,0.721l-1.439,0.432h-1.152l-1.584-0.144l0.287,0.72l-1.439,0.864l-0.287,0.72l-0.436,0.576l-1.439-0.145l-1.584,0.145
+ l-1.008-0.288l-1.154-1.008l-1.438-1.154l-1.441-0.718h-0.143l-1.008-0.145l-1.441-0.432h-1.582l-1.445-0.145l-1.438-0.146h-3.025
+ l-1.582-0.142l-1.443-0.145l-0.863-0.432h-1.439l-0.289,0.144l-1.441,0.288l-0.291-0.432l-0.287-0.721l-1.439-1.008l-1.584-0.576
+ l-1.441,0.721l-1.443-0.288l-1.584-1.008l-1.438-0.721l-1.441,0.433l-0.574,0.144h-2.883l-0.719,1.44l-1.293,1.439l-1.154,0.145
+ l-1.582,0.288l-1.439,1.008l-0.867,0.72l-0.572,1.44l-0.436,1.584l1.15,1.439l-0.43,1.44l-0.863,1.439v0.864l0.717,1.582
+ l0.432,1.442v0.432l-1.441,0.864l-1.438,0.576l-1.008,0.575l-1.297-0.72l-1.439-1.151l-0.576-0.289l-0.719-1.439l-0.289-1.439
+ l-1.154-1.44l-0.43-0.145 M756.502-122.058l-1.586,0.146l-0.867,0.575l0.438,1.44l0.717,0.432l0.434,0.145l0.865,0.432
+ M756.502-90.665l-0.721-1.584l-1.154-0.863l1.443-1.009l0.434-0.146"/>
+
+ <path id="path3157" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M709.27,843.03l1.439,0.141l0.291-1.439l0.574-1.584l1.15-1.441v-1.439l0.576-1.295l1.152-1.441l1.439-0.432l-0.287-1.441
+ l-1.441-0.576l-0.574-1.439l-1.152-1.584l-0.865-1.439v-1.443l0.141-1.584l-0.285-1.15l0.432-1.441l0.145-0.289l0.717-0.719
+ l-0.141-0.289l-0.721,0.719l-0.576-1.008l0.867-1.439l0.287-1.441l-0.432,0.719l-1.297,1.441h-1.293l-0.434-0.865l0.143-1.439
+ l-0.432-1.584l1.439-1.441l0.291-1.439l-1.152-1.443l-0.432-1.438l-1.439,0.43l-1.154,1.584l-1.439-1.295l-1.441-0.576h-1.727
+ l-1.295,1.443l0.285,1.584l-0.43,1.438l-1.439,1.297h-1.439l-1.443,0.289l-1.584-1.01l-0.287,0.434l-1.441,1.295l-1.441,1.439
+ l-0.717,0.434l-1.584,1.295l-1.445,0.721l-0.715,1.441l-1.441,0.717h-0.145l-1.439,1.297l-0.865,1.438l-1.439,0.723l-1.586-1.152
+ l-1.295,0.287l-1.008,0.436l-1.439,0.141l-1.443-0.287l-1.439,1.439l-1.152-0.576h-0.141l-1.443-0.576l-1.582-0.141l-0.289,0.141
+ l0.719,1.443l-1.443,0.572l-1.006,1.443l-1.008,0.576l-0.432-0.434l-0.434-1.441l-0.863-0.145l-0.865-1.008l-0.291-1.441
+ l-1.008-0.715h-0.434l-1.582,0.432l-1.439-0.867l-1.439-0.432l0.287-1.439l-1.439-0.432h-1.439l-1.445,1.008h-0.141l-0.434,0.287
+ l-1.439,0.721l-1.008,1.008l-1.439-1.008l0.574-1.439l-1.439-0.293l-1.584-1.15l-1.441-0.141l-0.865-1.443v-0.143l-1.439-1.582
+ l-0.434-0.293l-0.721-1.438l-0.432-1.441l-1.439-1.441h-0.145l-0.141-0.143l-0.436-1.297l-1.008-0.43l-1.584-0.146l-1.293-0.574
+ l-1.441,0.574l0.576-1.15l-1.15-1.441l-0.721-1.15l-0.432-0.863l-1.008-1.584v-1.008l-0.576-1.299l-0.145-1.438v-0.576
+ l-1.584-1.154l-0.576-1.438l-0.432-0.146l-1.008-1.584l-0.723-0.574l-0.43-0.145l-1.439-0.432l-0.145-0.143l-1.439,0.432h-1.443
+ l-1.008,0.287l-1.584,0.291l-1.15-1.297l-1.443-0.43l-0.572-0.432l-0.289-0.291h-0.434l-0.863-0.143l-0.576-0.143 M756.502,805.157
+ l-1.008,0.432l-1.586-1.293h-1.439l-1.15,0.863l-0.578,0.145l-1.441-0.432h-0.143l-1.584,0.141h-0.432l-1.441-0.287l-1.584,0.863
+ l-1.439-0.432l-0.721,0.145l-1.439,0.719l-1.441-0.434l-0.289-0.287l-0.863-1.586l-0.145-0.143l-0.865-0.145l-1.582,0.576
+ l-1.443-0.289l-1.439,0.434l-1.295,1.006l-1.443,0.291l-1.438,1.01l-0.432,1.584l-1.439,0.574l-0.291,0.287l-0.865,1.586
+ l-1.439,0.576l-1.586,0.863l-1.439,0.432l-0.287,0.578"/>
+
+ <path id="path3159" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M720.502,812.935l-1.441-0.145l-0.289-1.295v-1.439l-0.432-1.441l-0.145-0.143l-0.289-1.439v-1.443l-0.432-1.439l-0.143-1.441
+ v-0.143l-0.721-0.721l-0.576-0.574l-0.863-1.584l-0.293-1.441l-0.861-1.439v-1.441l-0.432-1.584l-0.434-1.441l-1.443-1.293
+ l-0.43-1.152l-0.576-1.439l0.576-1.584l-0.143-1.443l0.865-1.441l0.287-1.006l1.441-1.441l1.586-0.143l1.15-1.441l-0.578-1.441
+ l-0.717,1.441l-1.441,0.434l-1.295,1.439l-0.432,0.721l-1.443-1.152l-1.439-0.432l-1.439-0.146l-1.441-0.863l-0.143-1.584
+ l0.432-0.434l0.719-1.439l-0.865-1.439l-1.439-1.008l-1.439-0.146l-1.443,0.146l-1.15-1.441l-0.143-1.441l-0.576-1.293
+ l-0.576-1.297l0.43-1.439v-1.441l-0.861-1.582l0.432-1.441l1.584-0.434l1.152-1.586l0.289-1.438l0.289-1.441l-0.289-0.865
+ M720.502,812.935v0.143l-0.434,0.289l-1.443-0.143l-0.43-1.441l-0.146-1.441l-0.285-1.441v-0.287l-0.723-1.01v-3.023l-0.285-1.439
+ l-1.299-1.441l-0.576-1.582l-0.57-1.443l-1.154-0.287l-0.574-0.576l1.008-1.441l-0.434-1.439l-0.143-1.443l-1.008-1.438
+ l-1.008-1.441v-0.291l-0.721-1.584v-1.438l0.432-1.439l-0.576-1.443l0.145-1.439l-1.584-1.295l-1.441-0.145h-0.574l-1.441-1.008
+ l-0.143-1.584l0.863-1.439l0.432-1.443l-1.439-1.006l-1.584-0.578l-1.439,0.146l-1.439-1.008l-1.008-1.443l0.141-1.441v-0.43
+ l-0.432-1.439l0.145-0.293l0.287-1.584l-0.432-1.438l-0.719-1.439l0.719-1.441l0.145-1.443h1.439l1.295-1.438l0.289-1.443
+ l0.291-1.441 M709.27,843.03l-0.723-1.295l-0.574-1.441l0.574-1.586l-0.574-1.439l-1.439,0.143h0.291l1.439-1.152l1.584,1.297
+ l1.439-0.865l0.721-1.441v-0.143l-0.293-1.441L711,832.226l-1.443-1.584l0.867-1.441l0.143-1.441l-0.865-1.584l-1.584-0.576h-1.439
+ l1.584-0.863h1.152l1.584-1.295l-0.145-0.574l-0.289-1.443l-1.15-1.441l-0.869-1.293l0.436-1.584l-0.574-1.441l1.439-1.439
+ l0.145-1.441l-1.01-1.441l-1.441-0.432l-1.439,1.439l-1.439-1.15l-1.441-0.865h-0.145l-1.439-0.145"/>
+
+ <path id="path3161" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M590.758,890.403l0.432,0.145l1.438,0.145h1.443l1.441,0.289l1.584-0.289l1.439,0.289h0.145l0.285,0.143l1.299-0.143h1.584
+ l1.439-0.289h1.441l1.439-0.145l1.584,0.145l1.441,0.574l0.143-0.287l1.441-0.721l1.438-0.576l0.293,0.721l0.432-1.152l0.143-0.434
+ l0.146-0.143l0.432-0.143l0.43-0.289l1.293-0.432l0.438-0.145l0.863,0.145l1.439,0.287h0.145l1.439-0.576h0.43l1.584-0.287h1.73
+ l1.438-0.432l1.443,0.287l1.441-0.143l1.439-0.143h1.443l0.287-0.145l1.439-0.289l1.443-0.434l1.438-1.15h0.289l0.576-0.143h0.145
+ l0.576,0.287l1.439,1.008l1.295,1.441l-0.574,1.584l0.715,0.434l1.443,0.863l0.576,1.441v0.143l0.432,0.721l1.293,0.721
+ l0.291,1.438l-0.143,1.441l-0.721,0.721l-0.287,0.145l-1.441,0.717l-1.443,0.432l-1.438,1.008l-1.295,1.443l-1.441,0.287
+ l-0.141,1.584l-1.443,0.145l-0.578,1.439l0.293,0.289l1.439,1.008l0.432,1.441l-0.289,1.439v1.443l-0.143,1.438v1.584l0.291,1.441
+ l-1.01,1.439l-0.574,1.443l-0.145,0.141l-0.863,0.721l-1.584,1.008l-1.297,1.439l-0.865,1.441l-0.436,0.436l-1.006,1.438
+ M696.021,861.749v-0.432l0.432-1.439v-1.443l-0.143-1.439l0.572-1.584l1.445-1.439l0.432-1.441l0.721-1.01l1.438-0.574
+ l1.152-0.434l1.008-1.441l1.152-1.582l1.586-1.297l1.438-0.717l1.441-0.721l0.432-1.584l0.145-0.141 M696.021,861.749l0.143,0.291
+ l-1.295,1.439l-0.863,0.432l-1.152,1.295l-0.721,0.865l-0.287,0.287l-0.145,0.145l-0.287,0.576l-0.145,0.145l-0.576,1.439
+ l-1.293,1.439 M696.021,861.749l-1.297,1.439l-0.863,0.436l-1.152,1.439l-0.717,0.719l-0.291,0.434l-0.145,0.141l-0.432,0.576
+ v0.145l-0.578,0.576l-0.574,1.152v0.574l-0.572,0.576"/>
+
+ <path id="path3163" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M756.502-46.024l-0.721,1.439l-0.865,1.44v1.584l-0.574,1.439l-0.863,1.584l-1.588,0.576l0.436,1.584l-1.586-0.432v1.584
+ l-1.441,1.439l-1.008,1.438l-0.141,0.435l-0.578,1.438l-0.719,1.441l-0.289,1.438l-1.441,0.866l-1.584,0.142l0.145,1.442
+ l0.432,1.584l-1.439-0.432l-0.865,1.438l-0.719,1.584l-0.432,1.442v1.438l-1.297,1.442l-0.289,1.439l-0.432,1.44l0.576,1.584
+ l-1.295,1.44l0.285,1.438l0.146,1.442L738.5-6.28l0.143,1.438l1.01,1.298l1.439,0.574l1.008,1.442l-0.145,1.438l0.721,1.442v1.584
+ l-0.865,1.439l1.01,1.44l-0.291,1.44v1.438l0.719,1.584l0.145,1.442l1.148,1.438l0.146,0.722l1.584,1.15l1.152,1.442l1.439,1.008
+ l0.865,1.439l1.008,1.438l0.434,1.584l1.295,1.441l1.295,0.721l0.861,1.584l1.443,1.296l0.434,0.144 M590.758,890.403v-0.143h0.143
+ l0.141-0.719l-0.285-1.584l-1.439-1.15l-0.291,0.287l-0.289,0.145h-0.865l-1.439,1.439l-1.439,0.721l-1.443-0.289l-1.439-0.289
+ h-1.584l-1.439-0.289 M590.758,890.403l-0.145,0.145l-1.154-1.439l-0.43-0.434h-1.439l-1.441,0.865l-1.441,0.432l-0.287-0.143
+ l-1.441-0.432h-1.582l-1.443-0.289l-0.863-0.576 M590.9,890.261l0.432,0.143l1.441,0.291l1.438-0.291l1.445,0.291l1.439-1.295
+ l1.584,0.287h0.145l0.863-0.287l1.584-0.578l1.439,0.145l1.441-0.145l1.441-1.006l-1.441-0.865l0.576-1.441l0.143,0.865
+ l1.008-0.143l1.443,0.287l1.439,0.576l1.439,0.576l1.441,0.289l1.439,0.432l0.434-0.143l0.285-0.145l1.584-0.576h0.293l1.291-0.432
+ l1.584-0.143l1.445-0.434l1.439-0.143l1.584-1.15l1.439,0.863h4.896l1.439,0.289l1.152-0.434l1.438-0.143l0.578-0.432l1.443-0.865
+ l0.574-0.145h0.289l0.285-0.141l0.146-0.576l-0.432-1.443v-0.725l0.285-0.578v0.289l0.723,1.584l-0.432,0.867v0.717l1.439,1.152
+ l1.438,1.152l0.723,1.152l-0.145,1.439l1.297,1.441l0.432,0.863v0.145l0.291,0.289l1.582,0.719l1.439,0.719l1.441,0.721
+ l0.432,1.439l-1.439,1.152l-0.865,1.439l-1.443,0.719l-1.438-0.143l-1.439,0.143l-1.441,1.297l-1.295,1.441l-0.576,1.439
+ l-1.152,0.863l-0.287,1.441l1.439-0.865l0.145,0.145l-0.145,0.289l-1.152,0.719l0.291,1.441l-0.291,2.879l-0.287,1.439l0.576,1.584
+ v0.145l0.139,0.721v0.287l-0.285,0.143l-1.299,1.441l-0.861,1.439v0.145l-1.152,0.865l-1.584,1.15l-1.439,1.441l-0.865,1.441
+ l-1.295,1.439"/>
+
+ <path id="path3165" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M714.598,147.654l0.861,0.578l1.299,1.584l0.432,1.438l1.438,0.722l1.443,0.286l1.586,1.01l1.439,1.15h1.584l1.439,0.432
+ l0.43,1.439l1.445-0.576l0.432,1.584l0.863,1.587l0.721,1.438l1.15,1.442l0.434,1.438v0.145l1.008,1.439l1.584-0.142l1.584-0.435
+ l1.439,0.288l1.443,0.723l0.863,1.438l-0.576,1.584l1.439,1.44l1.584,0.863l1.443,1.152l1.439,0.576l1.584,0.72l1.439,0.433
+ l1.441,0.287l0.432,1.584l0.865,0.433l1.439,0.864l1.584,0.432l-0.141-1.439l1.438,0.434l1.586,1.294 M704.807,34.902l-0.289,1.442
+ l0.719,1.438l0.289,1.584l0.719,1.442l0.434,1.438l-1.584,0.576l-1.584,0.146l-1.441,1.15l-1.443,0.434l-1.584,0.143l-1.438-0.143
+ l-1.584-0.146l-1.439,0.146l-1.441,0.433l-1.441,0.576l-0.432,1.438l-1.584,0.576l-0.723-1.438l-1.584-0.146l-1.15,1.584
+ l-1.439,1.296l-1.439,1.01l-1.584-0.434l-1.439,0.146l-1.586,0.432l-1.441-1.008l-1.586-0.576l-1.438,0.43l-1.439,0.576
+ l-1.586,0.288l-1.439-0.43l-1.586-0.576l-1.439-1.296l-1.439-0.146l-1.584,0.576l-1.441-0.576l-1.443,0.864l-1.438,0.578
+ l-0.432-1.442v-1.584l0.576-1.584l-0.289-1.584l-0.434-1.438l-0.145-1.442l0.145-0.288l-0.287-1.584l0.141-1.438l-0.717-1.442
+ l-0.434-1.438v-1.584l-0.289-0.575l-0.576-0.146l-1.439-0.288l-0.723-1.584l-1.584-0.718v-1.584l0.723-1.44l-1.439-0.576
+ l-1.584-0.863l-0.721-1.584l-0.576,1.584l-0.432-1.584l1.008-1.442v-1.584l0.865-1.438l-1.152-1.442l-0.289-1.438l-1.439-0.721
+ l-1.152-1.439l-0.576-1.442l-1.439-1.584l-1.441-0.286l-1.586,0.145l-0.576-1.584l-0.863-1.442l-1.584-0.43L637.4,7.83
+ l-1.443,0.435l-1.439-0.721l-1.584-1.151l-0.576-1.584l-1.584,0.142l-0.432-1.584L628.9,3.224l-1.439-1.296l-1.586,0.142
+ l-0.574,0.146l-1.152-1.008l-1.441,0.145l-1.439-0.576l-1.584-0.866l-1.439,0.288l-1.299-1.438l-1.438-0.288l-1.441,0.72
+ l-1.582,1.152l-1.443-1.152l-1.439,0.288l-1.584-0.145l-1.584,0.433l-1.439,0.142l-0.721,0.288h-1.439l-1.441,0.578h-1.582
+ l-1.443-0.29h-3.455"/>
+
+ <polyline id="polyline3167" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 714.598,147.654 713.732,146.936 712.725,146.648 712.438,146.501 710.998,146.79 710.998,146.648 710.854,145.206 710.422,146.79
+ 708.98,146.79 707.398,146.213 706.102,144.629 704.662,143.622 703.076,142.326 701.639,142.038 700.051,141.461 698.613,141.174
+ 697.174,140.888 695.732,140.742 694.15,139.301 692.564,139.016 691.125,139.016 689.686,139.158 688.102,138.87 686.662,137.862
+ 685.076,136.998 683.926,135.56 683.205,133.976 682.197,132.534 681.766,130.95 681.908,129.366 682.486,127.926 682.773,126.486
+ 682.342,124.902 682.342,123.461 682.197,121.877 681.908,120.293 682.486,118.856 683.926,117.414 685.223,115.83
+ 685.076,114.246 685.51,113.669 685.795,112.085 686.084,110.648 686.229,109.206 686.084,107.768 686.662,106.184 686.662,104.6
+ 685.365,103.158 683.781,103.304 682.342,102.87 680.9,101.862 679.318,100.422 678.164,100.133 676.725,100.133 675.285,99.99
+ 673.846,99.414 673.125,97.83 672.547,96.392 672.262,95.238 670.822,94.95 669.236,94.808 667.795,93.654 666.934,92.358
+ 668.084,90.917 666.646,90.342 666.211,90.198 666.068,89.622 666.211,88.038 667.365,86.6 668.807,86.166 667.365,86.166
+ 665.926,87.608 665.494,89.045 666.357,90.631 666.646,92.07 666.502,92.07 665.061,92.358 663.479,91.782 662.037,90.776
+ 660.453,90.056 659.59,88.472 659.732,87.03 659.303,85.446 658.148,84.006 657.141,82.568 656.564,81.127 655.701,79.542
+ 654.547,78.104 653.398,76.662 652.246,75.224 651.379,73.782 650.23,72.198 649.51,70.614 648.357,69.176 647.926,68.888
+ 646.486,68.312 645.043,66.87 643.748,65.286 642.311,64.856 640.869,63.848 639.285,62.406 637.846,61.4 636.406,60.822
+ 634.678,59.958 632.807,59.526 631.223,58.085 629.781,56.936 628.627,55.494 627.766,53.91 626.324,52.614 624.74,51.75
+ 623.303,50.742 621.715,49.734 620.277,48.728 619.701,47.144 618.262,45.848 616.822,45.272 615.379,44.838 613.795,44.694
+ 612.357,44.264 610.916,44.118 610.342,44.264 608.9,43.83 608.613,43.688 607.174,43.976 605.732,44.118 604.869,44.838
+ 603.285,44.838 602.277,45.127 600.838,46.278 599.973,46.998 598.533,47.286 598.389,47.286 596.949,47.862 595.51,49.016
+ 594.789,50.454 594.646,50.888 594.068,52.038 593.35,53.047 592.342,54.486 591.189,55.928 590.471,57.512 590.324,57.942
+ 588.883,58.662 587.445,60.246 586.869,61.688 586.148,63.127 585.861,61.542 584.854,60.104 584.564,59.096 584.277,58.52
+ 583.99,58.232 583.701,56.648 583.557,56.358 582.117,54.917 581.973,54.776 581.83,53.333 580.678,51.75 580.246,51.463
+ 578.807,51.608 577.223,50.6 576.789,49.016 576.068,47.862 575.926,46.998 575.205,45.414 573.766,44.694 572.182,43.4
+ 570.74,42.392 569.59,41.816 568.869,40.374 570.311,39.078 571.748,38.936 572.037,37.494 571.029,35.91 569.59,35.48
+ 568.006,34.76 568.582,33.318 569.303,31.879 568.869,30.44 569.303,28.856 568.725,27.414 568.869,25.976 568.582,24.392
+ 567.861,22.95 567.285,22.088 566.131,20.648 564.547,19.782 565.414,18.344 566.131,16.902 566.277,15.463 566.564,13.879
+ 568.148,13.734 569.59,13.446 570.883,11.862 572.324,11.862 573.908,10.568 575.35,11.72 576.934,10.711 577.076,9.127
+ 576.357,7.688 577.941,7.83 579.379,6.68 579.238,5.238 580.822,4.232 581.973,2.792 583.557,2.07 584.998,1.208 586.582,1.352
+ 588.021,1.064 589.459,1.494 591.043,0.198 590.9,-1.24 591.332,-2.682 592.916,-2.97 593.205,-1.528 593.35,-0.09 594.934,0.486
+ "/>
+
+ <polyline id="polyline3169" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 714.598,147.654 713.014,146.936 712.869,146.79 711.285,146.936 709.846,147.51 708.406,146.936 706.822,146.501 705.814,144.917
+ 704.373,143.91 702.934,142.614 701.35,142.184 699.908,141.608 698.758,141.608 697.318,141.174 695.877,141.174 694.293,139.877
+ 692.709,139.301 691.27,139.301 689.686,139.446 688.244,139.158 686.807,138.582 685.223,137.286 683.781,135.702
+ 683.205,134.262 681.908,132.678 681.479,131.238 681.334,129.797 682.342,128.358 682.197,126.917 682.197,125.192
+ 682.051,123.75 681.766,122.312 681.479,120.728 681.908,119.144 682.916,117.702 684.357,116.262 684.934,114.822
+ 685.223,113.238 685.51,111.797 685.941,110.213 685.795,108.776 685.941,107.192 686.373,105.75 686.229,104.312 684.646,103.446
+ 683.205,103.734 681.766,103.014 680.326,101.574 678.74,100.568 678.453,100.568 676.869,100.422 675.43,100.422 673.846,99.99
+ 672.838,98.406 672.547,96.965 672.117,95.526 671.973,95.381 670.533,95.381 668.949,95.094 667.51,93.942 666.068,92.648
+ 664.486,92.79 663.043,91.782 661.605,90.917 660.021,90.198 659.156,88.614 659.303,87.174 659.014,85.592 658.006,84.15
+ 656.854,82.709 656.131,81.127 655.414,79.688 653.973,78.246 652.963,76.808 651.814,75.224 650.807,73.782 649.795,72.198
+ 648.934,70.76 647.926,69.176 646.342,68.742 644.9,67.304 643.893,65.862 642.311,65.286 640.725,64.422 639.43,62.984
+ 637.99,61.976 636.547,61.4 634.963,60.68 633.525,60.104 631.941,59.526 630.502,58.085 629.639,57.512 628.342,56.07
+ 627.621,54.486 626.182,53.047 624.74,52.184 623.156,51.318 621.715,50.454 620.277,49.446 618.693,48.295 617.686,46.856
+ 616.246,45.702 614.662,45.272 613.223,44.984 611.781,44.694 610.197,44.838 608.613,44.406 607.174,44.406 605.59,44.694
+ 604.148,45.414 603.861,45.56 602.422,45.56 601.557,46.422 600.117,47.286 598.533,47.862 597.957,47.72 596.518,48.582
+ 596.084,48.87 595.365,49.879 595.365,50.742 594.789,52.184 594.211,52.614 593.639,53.333 593.494,53.622 592.916,54.631
+ 592.342,55.206 591.189,56.648 590.9,58.232 589.459,59.096 588.598,59.526 587.877,60.68 587.445,62.118 586.869,63.56
+ 588.021,65.144 588.883,66.582 590.037,68.024 590.9,69.608 590.9,71.192 590.471,72.631 590.182,74.215 590.471,75.799
+ 590.9,77.238 591.043,78.68 590.758,80.264 590.324,81.702 589.748,83.144 589.605,84.44 588.74,86.024 588.74,87.463
+ 588.598,89.045 588.453,89.48 588.74,89.48 590.182,88.326 593.205,88.326 594.789,88.472 596.23,88.76 597.814,90.056
+ 599.252,91.352 600.838,92.648 600.838,94.232 600.98,95.669 600.98,97.254 601.701,98.694 602.564,100.278 603.572,101.72
+ 603.715,103.158 605.156,103.734 606.598,104.312 608.037,104.6 609.332,105.75 609.479,107.333 611.061,108.486 612.357,110.07
+ 613.365,111.51 614.518,113.094 616.102,113.381 617.252,114.965 617.83,116.406 619.27,116.549 620.131,117.99 621.715,118.278
+ 622.438,119.72 624.021,118.709 625.459,119.286 625.318,120.87 625.318,122.312 625.748,123.03 626.758,124.184 628.197,125.192
+ 629.061,126.629 630.502,128.213 "/>
+
+ <path id="path3171" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M756.502,409.591l-1.586,1.008l0.145,1.584l-1.441-0.719l-1.584,1.012l-1.439,0.43l-1.441,1.152l-1.295,1.438l0.576,1.441
+ l-1.008,1.441v0.289l-1.584,0.863l-1.439,0.434l-0.576,1.584l-0.145,1.439l-1.441-0.143l-0.432,1.15l-0.576,1.441l0.434,1.441
+ l-1.443,0.574l-0.717,1.586l-1.441,0.867l-1.443,0.715l-1.584-0.432l-1.438,0.865l-1.441,0.434l-1.295-0.291l-1.439,1.01
+ l-1.439,0.867l-1.012,1.436l-1.439,0.146h-1.439l-0.723,1.582l-0.285,1.441l-1.439,1.297l-1.445,0.859l-1.438,0.293l-0.287,1.441
+ l-1.01,1.438l-0.719,1.441l-0.432,0.576l-1.445,1.15l-1.582,1.008l-0.287,1.441l-1.299,1.441l-1.438,1.295l-1.152,1.443
+ l0.576,1.438l-1.439,1.441l-1.152,1.439l-0.432,1.443l-1.008,1.582l-1.297,1.438l-0.578,1.443l-0.285,1.443v0.574l0.143,1.441
+ l-0.432,0.717l-0.865,1.584l-0.863,1.441l-0.145,1.586l-0.723,1.438l-0.43,1.441l-0.863,1.584l0.143,1.443l-1.441,0.715
+ l-0.719,1.443l0.432,1.582l-0.719,1.441l-0.576,1.439v1.441l-0.289,1.008l0.434,1.441l-1.443,0.576l-1.293,1.441v1.584
+ l-0.576,1.439l-0.576,1.584l0.145,1.439l-0.432,1.443v0.143l-0.291,0.717l-1.293,1.441l-0.867,1.584l0.574,1.441l-0.574,1.441
+ l0.145,1.008l0.43,1.152h0.434l0.576-0.291l1.443-0.143l1.008-1.441l1.148-1.441l1.443-0.287l1.439-0.143l1.441-0.145l1.582-0.434
+ l1.443,1.154l1.439,0.143l1.438,0.141l1.584,0.293l0.436,1.439l1.441-0.289l1.584-0.289l1.15,1.152h0.141l1.586-0.145l0.291,1.582
+ l-0.291,1.443l0.721,1.441v1.584l1.152,1.438l0.574,1.441v1.441l1.441,0.863l1.584,1.008l1.438,0.291l1.299,1.584h1.439
+ l0.865,1.441l1.439,0.285l0.434,1.443l1.439,0.141l1.439,1.01l-0.572,1.443h0.287l1.438,1.293l1.01,1.441l1.441,0.865
+ M756.502,260.549l-0.865-1.151l-0.289-0.433l-1.152-1.439l0.145-1.584l1.008-1.44l0.861-1.584l-0.285-1.439l0.576-1.44
+ M756.502,244.709l-0.293-0.144l-1.438,0.72l-0.723,0.145l-1.58-1.152l-0.865-1.439l-1.293-1.297l-1.443-0.144l-1.584-1.152v-0.144
+ l-0.287-1.584l-0.436-1.584l-0.432-1.44l-0.141-0.864l-0.145-1.439v-0.576l-0.291-1.439l0.721-1.584l0.721-1.584l0.143-0.576
+ l0.719-0.721l0.291-0.287l0.717-0.433l1.441-1.006l1.439-0.866l0.143-0.144l1.443-0.574l1.582-0.29l1.586-0.145"/>
+
+ <polyline id="polyline3173" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 756.502,409.304 755.494,410.022 754.773,411.606 753.334,411.175 751.893,411.897 750.74,412.759 749.301,413.622
+ 747.861,414.487 748.293,416.069 748.006,417.511 746.564,418.519 745.27,419.958 743.83,419.671 743.252,421.11 743.541,422.554
+ 742.102,422.405 741.379,423.847 740.949,425.431 740.518,426.87 738.934,427.878 738.068,429.319 736.486,430.183
+ 735.043,429.749 733.605,430.612 732.021,431.046 731.014,430.472 729.572,431.622 728.133,432.487 726.838,434.069
+ 725.398,434.214 723.957,434.499 723.094,435.942 722.807,437.526 721.365,438.679 719.926,439.253 718.486,439.976
+ 718.051,441.413 717.043,442.854 716.326,444.151 715.174,445.589 714.164,445.733 712.725,447.03 712.582,448.472
+ 711.285,449.909 709.846,451.206 708.693,452.79 709.414,454.229 707.83,455.382 706.822,456.819 706.389,458.405 705.236,459.847
+ 704.084,461.286 703.365,462.87 702.934,464.312 703.365,465.897 702.646,467.331 702.068,468.774 700.916,470.214
+ 700.916,471.798 700.342,473.095 699.908,474.679 699.043,476.118 699.189,477.562 697.748,478.136 697.318,478.997
+ 697.174,480.438 697.174,481.878 696.453,483.317 696.164,484.903 695.877,486.341 696.021,487.782 694.582,488.935
+ 693.572,490.374 693.43,491.958 692.709,493.397 692.422,494.839 692.564,496.278 691.99,497.573 690.693,499.157 690.547,500.599
+ 689.83,502.181 690.547,503.622 689.686,505.062 689.398,505.927 690.262,507.366 690.117,508.95 688.678,509.958 687.094,510.679
+ 685.654,509.235 684.211,508.95 682.627,509.671 681.189,510.247 679.748,511.687 678.311,513.126 676.869,512.694 675.43,512.694
+ 673.99,512.839 672.406,512.55 672.117,512.55 670.678,512.981 669.236,513.413 667.654,514.854 666.789,516.438 665.35,517.157
+ 663.908,517.444 662.613,518.886 661.459,520.325 660.021,520.759 658.438,521.046 656.998,521.333 655.557,521.911
+ 654.117,521.911 652.678,522.341 651.094,522.774 650.084,521.333 648.646,520.325 648.068,518.886 647.781,517.302
+ 646.197,517.157 646.197,515.573 645.621,514.134 644.182,513.989 642.74,513.56 642.598,512.118 642.164,512.118 640.725,512.263
+ 639.285,511.11 637.846,510.103 637.701,508.663 636.117,508.374 634.678,508.087 633.238,507.942 631.795,507.798
+ 630.357,508.517 630.068,508.517 628.486,507.798 627.043,508.229 625.459,507.366 624.598,505.927 623.156,505.782
+ 622.725,507.222 621.285,507.509 619.701,506.501 618.547,504.919 617.973,503.478 616.533,502.325 615.094,501.317
+ 613.51,500.454 612.357,499.013 610.916,498.149 609.332,497.142 607.893,497.431 606.74,495.847 606.598,494.403 606.021,492.966
+ 604.725,491.526 603.285,490.087 602.854,489.942 602.709,489.366 604.006,487.927 605.445,486.774 604.725,485.333
+ 605.445,483.751 606.883,482.312 608.324,481.157 608.471,479.718 608.037,478.136 607.029,476.694 606.021,475.11
+ 606.453,473.671 606.311,473.526 "/>
+
+ <polyline id="polyline3175" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 756.502,493.974 755.926,494.839 754.486,495.989 753.621,497.431 753.479,499.013 752.613,500.454 751.893,502.038
+ 750.453,502.759 750.311,504.198 748.725,504.774 748.582,506.214 747.861,507.222 746.422,508.087 746.422,509.671
+ 744.838,510.821 744.117,512.403 743.973,512.55 742.389,511.829 742.244,512.263 741.525,513.847 740.518,515.286
+ 740.084,515.573 739.941,517.013 739.795,518.597 738.211,519.606 738.211,521.046 737.205,522.63 737.061,524.071
+ 736.486,525.509 735.043,525.653 733.605,526.663 732.74,528.247 732.164,529.397 730.725,528.821 729.285,528.966 729.43,527.382
+ 727.99,526.374 727.557,525.942 728.277,524.501 726.838,523.782 725.398,523.349 725.109,521.911 723.525,521.622
+ 722.373,520.181 720.934,520.181 720.068,518.597 718.486,518.31 717.043,517.302 715.605,516.581 715.605,515.142 714.453,513.56
+ 713.877,512.118 713.732,510.679 712.869,509.095 713.445,507.653 712.582,506.214 711.43,506.358 710.277,505.206
+ 708.838,505.495 707.398,506.214 706.389,504.774 704.807,504.63 703.365,503.765 701.926,503.622 700.486,502.181 698.9,503.478
+ 697.459,503.478 696.021,503.765 694.582,504.485 693.43,505.927 691.99,506.79 691.125,507.079 690.838,508.663 690.117,509.958
+ 688.678,510.679 687.236,511.255 685.654,509.958 684.211,509.526 682.773,510.247 681.189,511.397 679.748,512.55 678.311,513.56
+ 676.869,513.271 673.99,513.271 672.406,513.126 670.963,513.271 669.379,513.847 667.941,515.286 667.51,516.294 666.357,517.589
+ 664.773,517.444 663.332,518.454 662.182,520.038 660.598,521.046 659.156,521.333 657.715,521.478 657.285,521.911
+ 655.701,522.485 654.262,522.341 652.822,522.774 651.379,523.495 650.807,523.206 649.941,521.765 648.502,520.759
+ 647.781,519.317 647.35,517.878 645.908,517.589 645.621,516.005 645.189,514.567 643.748,514.278 642.311,513.989 642.453,512.55
+ 642.164,512.403 640.582,512.694 639.141,511.687 637.701,510.39 637.557,508.95 636.117,508.806 634.678,508.663 633.238,508.517
+ 631.795,508.663 630.357,508.95 629.781,508.95 628.342,508.374 626.758,508.517 625.318,507.653 624.311,506.214 622.869,507.653
+ 621.43,508.087 619.846,507.079 618.693,505.495 617.686,504.054 616.246,502.759 614.807,501.894 613.223,500.743
+ 612.068,499.157 610.486,498.294 609.043,497.431 607.459,498.294 606.74,496.854 606.164,495.271 605.732,493.829
+ 604.438,492.247 603.141,490.806 602.422,490.229 602.422,488.79 604.006,487.351 604.725,485.911 604.006,484.325
+ 604.148,483.896 605.59,483.03 606.598,481.589 608.037,480.149 607.459,478.567 606.74,476.983 606.598,478.421 605.445,476.983
+ 605.445,474.966 605.877,473.526 "/>
+
+ <path id="path3177" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M659.445,608.454h1.152l1.439-0.145l1.584,0.576l1.439,0.287l1.15,1.586l1.445-0.145l-0.145,1.441l0.145,1.584l-0.145,1.441
+ l0.719,1.15l1.148,1.441l1.299,1.439l-1.441,1.01l-0.289,0.572l-0.576,1.443l1.006-1.443l1.445-1.006l1.439-0.432l1.439,1.15v2.881
+ l-0.432,1.439l-0.432,1.584l-0.576,1.441l0.863-1.441l0.432-1.439l0.576-1.584l1.441-0.145h1.441l-0.145-1.439h1.584l1.441,0.717
+ l0.434,1.443l1.439-0.434l1.439,1.295l0.434,0.432 M683.639,625.157l-0.434-0.719l-0.432-0.289v-0.719l0.432-0.289l1.443-0.721
+ h0.141l1.584-0.287l0.434-0.145l0.289,1.441l1.439,0.289l1.439,0.434l1.586,0.143l-0.289-0.143l-1.584-0.865l-1.441-0.291
+ l-1.439,0.145l-0.289-1.584l-0.145,0.145l-1.584,0.287l-0.432-0.432l-0.146-1.584l1.445-0.289l0.574-1.439l-1.295,1.439
+ l-1.584-0.432l-0.434,1.584l0.434,1.439l-0.863,1.01v0.143l-0.145,0.289l-1.584-0.865l-0.432-1.441l-1.586-0.432l-1.584,0.145
+ l-1.443,0.719l-0.572-1.584l-0.719-1.443l-1.008-1.438l0.287-1.441l1.584-0.291l-1.584-0.285l-1.008,1.439l-1.441-0.143
+ l-1.582,0.432v-1.586l-1.441,0.143v-1.438l0.289-1.443l0.719-1.439l-1.582-1.152l-1.445-0.863l-1.438-0.721l-1.293-0.574
+ l-1.588-0.143l-1.439,0.143h-0.576l-0.432,0.434l-1.439-0.291l-1.008-0.576l-1.584,0.145l-1.443-0.863l-1.439-0.721h-1.439
+ l-1.584,0.576l-0.576,1.439l1.297,1.439l0.287,1.443l-0.145,1.584l-0.141,0.289l-0.291,1.438v0.578l-1.584,0.717l-0.719,1.443
+ l-1.441,1.584l-1.439,0.432l-1.439,0.576l-0.721,1.441l0.576,1.439l0.145,1.584l-0.291,1.439l-0.289,1.154v3.021l-0.289,1.297
+ v1.439l1.295,1.441l0.143,1.582v1.443l1.441,0.576l1.441-0.145l1.584-0.143l1.438,0.865l1.445,0.285h1.439l0.432,0.289l1.438-0.43
+ l1.445,0.865l1.293,1.439l1.152,0.289h1.584l1.438,0.143l1.584,0.434l1.012,1.582l0.289-0.141l1.584-1.01l1.439,1.01h1.441"/>
+
+ <path id="path3179" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M680.613,634.806l0.576,0.576l1.438-0.432h1.443l0.434,0.572l1.439-0.289l1.438,0.867l1.445,0.717l1.439,1.299l-1.439,1.293
+ l-1.445,1.441l1.154,1.441l1.152,1.439l-0.287,1.008l-0.291,1.439l-1.293,1.584v1.443l-0.438,1.439l1.01,1.441l0.291,1.438v0.146
+ l-0.721,1.295h-0.141l-1.443,0.289l1.152,1.439l1.438,0.576l1.445,1.008l1.439,0.434h0.576l1.439-0.721h1.584l1.295,0.289v0.865
+ l1.008,1.584l-1.15,1.439l-0.576,0.867l0.143,1.439l0.434,1.439l-0.287,0.863l-0.436,1.443l-0.287,0.432l-1.584,1.441l-1.441,0.863
+ l-1.441,0.721l-0.143,1.439v1.441l-0.574,1.584l1.439,0.434l0.287,0.287v0.434l-1.008,1.584l-1.293,0.574v0.291l-0.721,1.438
+ l0.721,1.584l-0.578,1.439l0.434,1.445l-0.576,1.438l-1.152,1.439l1.584,0.145l0.291,0.863l-0.578-0.715l-0.143-0.146l-1.439,0.721
+ l-1.586,1.01l0.145,1.584l-0.289,1.438l-0.146,0.289l-0.865,0.561l-0.576,1.441l-0.863,1.439l-0.721,1.584l-0.432,0.432
+ l0.145,1.584l-0.867,1.727l0.289,1.443l0.289,0.865l0.291,1.439l-0.145,0.287l-1.008,1.154l-0.865,1.439l-0.143,1.441l1.439,0.863
+ l1.439-1.008l-0.289,1.008l0.721,1.441h1.439l-1.439,0.865l1.439,1.152l0.865,1.439l-1.439,0.863l-0.576,1.441l0.576,1.582h0.145
+ l0.574,0.291l1.441,0.432l1.439-0.576l1.439,0.291l1.441-0.145l1.584-0.863v-3.027l0.289-1.439l0.432-1.439l0.426-1.449
+ l0.293-0.289l1.15-0.289v0.145l-0.143,0.574l-1.152,1.443l0.432,1.439l0.145,1.584l-0.576,1.439l1.439,1.008l0.721,0.432
+ l1.584,0.145l-1.584,0.287l-1.439,0.289l1.15,1.443l1.008,1.439l1.441,0.434l1.584-1.297l1.439-1.439h0.145l0.576-0.576
+ l1.295-1.586l1.584-1.006 M680.613,634.806l1.438,0.717l1.445-0.289h0.143l1.439,1.012l1.441-0.434l0.719,1.441l1.441,0.143
+ l-0.291,1.441l-1.582,1.295l-0.576,1.295l0.289,0.141l0.432,0.291l0.867,1.15l1.008,1.584l-0.291,1.443l-1.584,1.148v1.584
+ l0.145,0.721l-0.865,1.441l1.008,1.441l1.441,1.148 M680.613,634.806l0.145-0.291l1.439-0.865l-0.717-1.584l-0.578-1.438
+ l0.434-1.443l1.439,0.576l-0.146-1.439l0.578-1.582l0.145-0.146l0.289-1.439"/>
+
+ <polyline id="polyline3181" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 689.83,679.444 689.398,680.886 688.678,682.325 688.678,683.765 688.389,684.341 686.949,684.194 686.662,683.478
+ 685.076,682.181 684.934,682.038 685.51,682.612 686.373,684.054 687.236,684.483 688.678,685.062 689.252,685.349 688.533,686.79
+ 687.525,688.229 686.373,689.671 685.365,691.11 684.789,692.694 683.781,694.134 682.916,695.573 681.334,696.294
+ 681.766,697.878 681.189,699.317 679.748,699.604 679.029,701.046 677.445,702.054 676.006,701.478 677.59,702.483
+ 679.029,703.206 679.459,704.356 678.021,704.214 676.293,703.78 674.564,703.638 672.98,702.772 671.541,701.333 669.814,701.909
+ 668.229,703.062 667.076,704.067 666.934,704.214 666.357,704.935 664.627,705.653 662.9,706.374 661.459,706.517 659.732,705.364
+ 658.148,706.517 656.998,707.813 655.414,709.11 653.973,710.55 652.533,712.134 651.957,712.278 650.373,711.847 648.934,711.847
+ 647.926,713.286 647.639,714.726 646.773,716.31 646.916,717.749 645.479,718.612 645.189,720.054 643.605,721.638
+ 643.748,723.077 642.311,723.511 641.445,724.948 640.869,726.103 639.43,727.54 638.422,728.981 636.838,729.413 635.398,729.271
+ 633.957,729.7 632.518,729.413 630.934,729.989 630.646,729.989 629.061,730.134 627.621,730.421 626.182,730.134 624.598,730.134
+ 623.732,729.989 622.148,729.124 621.285,727.974 619.701,727.397 618.262,726.966 616.822,726.532 615.379,723.653
+ 615.094,723.077 614.807,721.493 614.518,720.054 614.373,718.612 614.662,718.47 614.518,718.181 614.373,717.894 614.23,716.454
+ 614.084,716.165 614.084,717.749 613.941,718.47 614.084,719.909 613.941,721.349 614.373,722.788 613.51,722.067 612.068,720.917
+ 613.365,722.356 613.51,723.798 612.068,725.382 610.627,723.94 610.627,725.524 609.189,726.966 607.748,727.54 606.311,728.837
+ 604.725,729.847 604.006,731.286 602.564,732.581 601.99,732.581 600.547,733.302 599.686,734.022 598.963,734.022 597.525,732.87
+ 597.238,732.87 596.518,733.013 595.076,732.581 594.934,732.581 593.926,732.87 592.486,732.149 592.627,730.565 591.043,731.142
+ 591.189,732.149 591.189,732.581 590.613,733.302 592.055,733.589 592.486,734.165 592.342,734.741 591.332,736.181
+ 591.043,737.765 591.043,739.204 590.758,740.646 "/>
+
+ <path id="path3183" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M704.807,717.894l-1.584,1.584l-1.152,1.439l-0.574,0.576l-0.291,0.574l-0.578,1.443l1.154,1.584l-1.154,1.439l-1.006,1.441
+ l-1.439,0.576l1.439-0.721l0.721-1.584l0.863-1.439l-1.584-0.291l-1.439,1.152l-1.441-1.008l-1.584-0.145l-1.006-0.863
+ l-1.152-1.586l-1.443-1.006l-1.584,0.432h-1.439l-1.439,0.863l-1.584,0.291l-1.152-1.441v-0.289l-0.289-0.145l-1.443-1.148
+ l-1.438-1.443l-0.289-1.148l0.719-1.443l1.295-1.293l-1.439-1.008l-0.578-1.441l-1.441-1.008l-0.43-0.436v-0.861l0.576-2.881
+ l-0.576-1.439l-1.584-0.432l-1.439,0.143l-1.443-1.008l-1.439-0.289l-1.584-1.154l-1.439-0.289l-0.289,0.436l-0.436,1.438
+ l-0.285,1.584l-0.145,1.443l-0.143-1.443v-1.438l-1.441,0.289h-0.143l-0.576,0.863l-0.578,0.574l-1.441,0.436l-1.438,0.432
+ l-1.584,0.143l-1.441-0.863l-1.441,0.43l-1.439,1.586l-1.584,1.152l-1.439,1.439l-1.01,1.441l-1.439,0.432l-0.561-0.287
+ l-1.584-0.432l-1.445,1.008v0.434l-0.43,1.584l-0.865,1.439l0.289,1.439l-0.289,1.297h-0.291l-1.438,0.287l-0.146,1.439
+ l-1.293,1.584l-0.719,1.443l-1.439,0.863l-0.576,1.584l-1.299,1.441l-1.006,1.439l-1.439,0.434h-1.584l-1.439,0.719l-1.441-0.576
+ l-1.441,0.719h-2.016l-1.584,0.434l-1.441-0.287l-1.438-0.293l-1.148-0.143l-1.441,1.295l-0.143,0.865l-0.289,0.143l0.432-1.584
+ l-0.578,0.143v-0.289l-1.291-1.439l-0.145-0.145l-1.439,0.434l0.287-1.439l-1.584,0.143l-1.439-1.152l-1.439,0.143v-1.439
+ l-0.291-1.441l-1.439,1.01l-0.723,1.008l0.146,1.439l-0.432-1.439h-1.439l-1.586,1.008l-1.443,0.865l-0.861,0.719l-1.441,0.576
+ l-0.143,0.43l-0.291,1.586l-1.439,1.008l-1.439,0.574l-0.291,0.146l-0.717,0.432l-0.867,0.576l-0.432,0.432l-1.584-0.576
+ l-1.439-0.719l-1.584-0.574h-0.145l-0.578,0.287l-1.438,1.297l-0.146,0.432l-0.861,1.439l-0.289,1.439l0.143,1.441l-0.863,1.441
+ M705.814,749.571l0.141-0.863l0.576-1.439l-0.289-1.441l0.289-1.584l-1.584-1.15l-0.432-1.443l-1.008-1.438l-0.145-1.443
+ l0.145-1.439l-0.576,0.145l-0.289-1.584l-0.436-1.439 M705.814,749.571v0.146"/>
+
+ <path id="path3185" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M572.471,772.325h-0.289l-1.441-0.432l-1.439,0.576l-1.441-0.145l-0.432,0.289l-0.291,0.289l-0.576,0.721l-0.717,0.572v1.586
+ l-1.152,1.441v1.439l-0.146,1.584l-1.438,1.008l0.145,1.297l0.432,0.863l0.721,1.441l0.287,1.441l-0.721,1.584l-1.439,0.863
+ l-1.439,0.432h-0.289l-0.143-0.141h-0.432l-1.586,0.572l-1.441,0.145l-1.584-1.152l-0.432-1.439l-1.441-0.576l-1.439,0.145
+ l-1.441-0.863h-1.439l-1.439,0.287h-1.012 M569.445,718.038l1.295-1.008h1.441l0.719-0.291l1.586,1.297l1.439-1.443l0.863-1.439
+ l0.289-1.586l1.441-0.863l1.584-1.15l1.439-1.584l0.432-1.441l1.152-1.439l-0.432-1.584l0.289-1.443l1.148-1.438l0.578-1.584
+ l0.291-1.443l-0.576-1.582l-0.432-1.441l-0.145-0.143v-0.289l1.152-1.439l-0.148-0.424l0.432-1.439l0.865-1.441l0.719-1.439
+ l0.145-1.584l0.719-1.441l0.289-1.441l-0.289-1.584l0.289-1.439l0.143-0.432l0.289-1.443l1.152-1.584l0.719-1.441l0.289-1.584
+ v-0.141l1.152-1.584l1.295-1.584l0.719-1.443v-1.438l1.295-1.443l0.578-1.584l0.576-0.576h0.287l-0.145-1.439l-0.863-1.439
+ l-0.721-1.439l-1.15-1.441l-1.012-1.008l-0.861-0.719h-4.463l-1.441,0.143l-1.584,0.865l-1.584,0.287l-1.441,0.291l-1.582-0.145
+ l-1.439-0.289l-1.586-0.291l-1.295-0.43 M556.627,721.204l0.291-0.434l0.865-1.439l0.145-0.287l1.439-1.297l1.584,0.145
+ M590.758,740.646l-0.145,0.143l-1.439-0.289l-0.434-0.145l-1.008-0.141l-1.584-0.576l-1.441-0.291l-1.439,0.145l-1.439,0.289
+ h-1.443l-1.439,0.719l-1.439,0.865l-1.441,0.145 M702.211,734.454l-0.285-0.434l-1.439-0.143l-1.586-1.297l0.719-1.439l0.721-1.584
+ l0.285-1.295l0.723-1.441l1.439-1.297l1.441-0.43l1.441-1.295l0.287-1.443l0.721-1.439l1.584-0.576v-2.736l-1.584-0.572
+ l-1.441,0.572l-0.432,0.291 M705.814,749.718v-0.146 M702.211,734.454v2.016l0.293,1.293l-0.145,1.441l0.719,1.441l0.865,1.439
+ l0.721,1.439l0.432,1.586l0.576,1.441l-0.434,1.439l0.578,1.584 M705.814,749.718l-1.443,1.293l-1.008,1.443l-0.289,1.439
+ l-0.432,1.439v1.584"/>
+
+ <path id="path3187" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M574.916,884.646l-0.863-1.297l-0.434-1.584l-0.719-1.439l-0.865-1.439l-0.578-1.008l-1.438-1.443v-1.008l0.291-1.15l-0.578-0.721
+ l-1.295-1.295l-1.439-1.008l-0.291-1.584l0.291-1.439l-0.291-1.441l0.291-1.441v-0.143l-1.443-1.01l-1.584-0.863l-1.439-0.719
+ l-1.154-0.865h-1.006l-1.439-0.863l-1.439-0.432l-0.436-0.291l-1.582-1.441l-1.441-1.008l-1.295-1.15l-0.432-0.434l-1.152-1.584
+ v-0.43l1.441-0.867l-0.289-1.584l-0.576-0.719v-0.143l0.576-1.297l-1.441-1.584l-1.008-1.008l-0.863-1.439l-0.869-1.439
+ l-0.861-1.443l0.145-1.15l0.287-0.143l-0.863-1.439l-1.008-1.443l-1.443-1.008l-0.863-1.293l0.145-1.443l-0.432-1.441v-0.43
+ l1.008-1.154l0.141-0.143l0.291-0.863l0.574-1.441l1.441-1.441l0.287-0.141l1.443-0.867l1.439-1.439l1.441-0.432l0.719-1.441
+ l1.295-1.441l1.441-1.295v-0.143l0.285-0.289l0.293-0.145l1.008,0.145h0.574l1.441,0.143l1.008-0.289l-0.143-1.439v-0.145
+ l0.572-1.439l-0.43-1.441v-0.434l0.719-1.584l0.578-0.717l0.576-0.434l1.439-0.287h1.439l0.145-0.146l-0.145-1.438l-0.287-1.443
+ l-0.291-1.008v-0.432l-0.143-1.439l-0.719-1.439l-1.299-1.443l-0.139-1.584l0.863-1.441v-1.584l-1.439-0.287l-1.297-1.152
+ M574.916,884.646l-1.438-0.145l-1.297-1.439l-0.291-1.439l-0.863-1.443h-1.439l0.432-1.439l-0.145-1.439l0.145-0.867
+ M574.916,884.646l0.145,0.432 M579.094,888.532l-0.721-0.576l-1.439-1.15l-0.287-0.291h-0.145l-0.576-0.287l-0.432-0.721v-0.287
+ l-0.434-0.145l0.434,0.432 M563.541,729.124v-0.143l-1.293-1.441l-1.152-1.584l-1.152-1.441l-0.287-1.439l-1.445,0.574l-0.715-0.43
+ l-0.869,0.143l-1.438-1.15l-1.584-0.146l-0.146-0.43v-0.434l-0.43-0.434 M575.061,744.245l0.578,0.434l1.01,0.719l0.863,1.584
+ l0.145,0.576l0.576,1.439l0.287,1.441 M577.223,757.062l0.143,0.432l0.145,0.289l0.145,0.434l0.139,1.438l-0.139,1.586l0.863,1.441
+ l0.145,1.584l-0.291,1.439l-0.432,1.441"/>
+
+ <path id="path3189" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M354.166,20.792l1.439-0.863l1.441-0.435l1.441-1.008l1.582-1.15l0.719-1.439l0.145-1.584v-1.584l0.289-1.584l1.441-1.44
+ l1.293-1.439l1.152-1.442l1.584-1.006h0.434l1.582,1.006l1.441-0.288l1.441,1.296l0.719,0.435l1.441,0.72l1.439,1.294l1.584,1.296
+ l-1.008,1.584l1.439,0.435l1.443,0.142h0.287l1.439,0.578l1.443-0.578l1.584,0.146v-1.584l1.008-1.439l1.439-0.578l1.439-1.584
+ l0.721-1.438l1.584-0.723l1.439,0.288l1.584,0.146l1.441-0.146l1.586-0.142l1.438,1.149l1.441-0.286V6.104l-0.863-1.442l1.584-0.72
+ l1.439-0.288l1.584,0.146l1.439,1.009l1.584,1.438l1.441,0.146l1.441-0.288l1.584,0.718l1.584,0.146l1.439,1.009l1.152-0.433
+ M361.074,21.799l1.156-1.441v-0.43l0.141-0.721l0.145-1.439l0.145-0.433l0.287-1.584l0.576-0.575l-0.287-1.442l-1.297-1.438
+ l1.008-1.584l1.152-1.439l0.721-1.584l1.293-1.442l1.584,0.435l1.439,0.287l1.584,0.721l1.443,0.863l1.439,0.721l1.584,1.439
+ l1.584,1.15l-1.439,1.01l1.725,1.008l1.443,0.145l1.439,1.294l1.729-1.15l1.439,0.145l0.721-1.729l0.863-1.439l1.584-0.866
+ l1.295-1.438l0.719-1.584l1.441-0.576l1.586,0.43h4.461l1.441,1.01h1.441l0.432-1.586l-0.576-1.008l0.721-1.294l1.584-0.29
+ l1.439,0.146l1.584,1.295l1.727,1.15h1.584l1.725,0.146l1.588,0.287l1.584,0.862h1.441l0.432-0.286 M213.621,863.478l-0.144,0.145
+ v0.287l-1.152,1.152 M205.989,871.829l2.305-2.305l0.575-0.863h0.145 M205.989,871.829l1.296-1.152v-0.143 M205.989,871.829
+ l-0.288,0.432l-0.863,0.721l-0.145,0.143l-0.288,0.289 M498.598,760.085l0.285-0.432v-0.289l0.146-0.289l0.721-0.143l0.287,0.143
+ l0.865,0.289h0.143l1.582,0.289l1.154-0.865l0.145-0.143l0.287-0.578l-0.143-1.438l0.143-0.436h0.145 M539.639,786.438l0.719,0.289
+ M542.518,788.454h0.145 M544.246,787.589l0.287-0.287"/>
+
+ <polyline id="polyline3191" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 413.926,7.543 415.941,7.543 417.379,7.11 417.379,5.672 418.533,4.088 419.973,4.52 421.414,4.95 422.709,3.512 424.148,2.936
+ 425.732,2.792 427.174,1.782 428.613,1.064 429.766,-0.52 431.205,-0.232 432.789,-0.232 434.23,-1.098 435.525,-2.537
+ 437.109,-2.97 438.693,-3.258 440.131,-1.816 441.572,-3.112 443.014,-2.682 443.877,-4.121 444.453,-5.56 445.029,-7.144
+ 444.883,-8.586 444.598,-10.024 444.74,-11.608 444.453,-13.192 444.74,-14.634 444.453,-16.072 444.598,-17.656 444.021,-19.098
+ 443.59,-20.537 443.59,-21.976 442.869,-23.56 442.438,-25 441.572,-26.586 440.709,-27.16 439.414,-28.6 438.693,-30.041
+ 437.541,-31.625 436.102,-31.625 434.662,-31.48 433.076,-32.634 433.223,-33.496 433.795,-34.936 434.518,-36.376 434.662,-37.96
+ 433.654,-39.544 433.51,-40.984 433.365,-42.568 434.807,-43.289 436.389,-43.72 437.83,-43.72 439.27,-44.152 440.854,-43.864
+ 442.438,-43.864 443.877,-44.44 445.318,-45.016 446.9,-45.449 448.342,-46.17 449.926,-47.608 451.365,-48.041 452.949,-48.184
+ 453.67,-49.625 454.678,-51.064 455.254,-52.506 456.838,-53.8 456.693,-54.665 457.557,-56.249 458.998,-57.112 460.582,-57.976
+ 461.014,-59.417 461.445,-58.84 462.883,-59.56 463.318,-58.121 462.166,-56.682 463.605,-56.537 465.045,-56.537 465.189,-54.953
+ 466.486,-53.514 467.639,-52.072 469.076,-51.064 470.662,-52.216 471.379,-53.8 472.246,-55.24 472.678,-56.249 474.117,-57.4
+ 475.701,-57.833 477.141,-57.544 478.725,-56.249 480.166,-56.824 481.605,-56.682 483.045,-57.112 484.486,-57.688
+ 485.781,-59.128 487.223,-59.128 488.662,-57.544 490.102,-57.4 491.686,-56.392 490.822,-54.953 490.822,-53.369 489.67,-51.93
+ 489.379,-50.346 490.822,-48.762 492.406,-48.904 492.406,-46.024 493.27,-44.44 494.131,-43 495.572,-42.136 496.148,-42.424
+ 497.59,-43.289 498.598,-44.728 498.453,-46.312 498.74,-47.752 499.318,-48.617 500.182,-50.058 501.334,-51.642 502.773,-51.785
+ 504.357,-52.072 505.795,-51.064 507.379,-51.352 508.246,-50.346 508.246,-50.201 508.533,-48.617 508.822,-45.736
+ 508.533,-44.296 509.254,-42.712 509.541,-41.272 511.127,-39.833 512.564,-39.256 514.006,-38.249 515.59,-38.104
+ 517.029,-38.104 "/>
+
+ <polyline id="polyline3193" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 594.934,0.486 593.494,-0.665 593.639,-2.104 592.627,-3.688 591.189,-3.112 590.758,-1.528 590.758,-0.09 589.318,1.352
+ 587.732,0.776 586.582,1.064 584.998,0.776 583.557,1.782 582.117,2.358 580.533,3.512 579.957,4.95 578.373,5.672 578.662,7.256
+ 577.223,7.4 575.639,8.406 576.646,9.848 575.639,11.432 574.055,10.278 572.613,11.432 571.174,11.574 569.59,11.72
+ 569.303,13.304 567.861,13.158 566.277,13.734 565.99,15.318 565.846,16.76 564.98,18.198 564.117,19.64 564.117,19.782
+ 565.125,21.224 566.709,21.366 567.285,22.808 568.148,24.392 568.438,25.83 568.293,27.414 568.869,28.856 568.006,30.295
+ 568.293,31.734 567.715,33.176 567.285,34.614 568.725,35.768 570.311,35.768 571.748,37.206 571.174,38.79 569.732,39.078
+ 568.293,40.52 569.303,42.104 570.74,42.822 572.182,43.976 573.766,44.984 575.205,46.422 575.781,48.006 576.646,49.446
+ 576.934,50.888 578.084,51.75 578.807,51.75 580.246,51.896 581.541,53.333 581.686,54.917 583.125,56.358 583.557,57.942
+ 584.131,59.383 584.131,59.526 585.285,60.967 585.572,62.551 586.006,63.99 586.006,64.136 586.293,65.72 587.732,67.158
+ 589.174,68.166 589.605,68.6 590.037,69.463 590.471,70.326 590.324,71.91 589.605,73.064 589.318,73.782 589.318,74.358
+ 589.605,75.942 589.318,77.383 589.893,78.822 589.459,80.264 589.174,81.702 589.174,82.709 588.74,84.295 588.311,85.877
+ 588.311,87.318 588.164,88.902 587.877,90.342 588.453,91.926 587.877,93.366 587.732,94.95 588.453,96.392 588.598,96.534
+ 588.021,98.118 587.014,99.127 587.014,99.56 586.725,101.144 587.014,102.728 587.156,104.166 586.006,105.608 585.572,107.192
+ 585.285,108.629 584.422,110.213 582.98,111.224 582.406,112.808 580.963,113.526 579.525,114.246 578.518,114.965
+ 577.365,116.406 576.211,117.99 575.494,119.43 574.342,120.87 572.758,122.312 571.605,123.75 570.883,125.333 570.74,125.768
+ 569.732,127.206 568.293,127.926 566.709,129.366 565.27,130.085 563.973,131.526 563.398,132.965 563.109,133.83 561.814,135.414
+ 560.807,136.709 559.365,138.006 557.926,138.44 556.342,139.301 554.9,140.312 553.459,140.888 551.877,140.742 550.438,140.6
+ 548.998,139.877 547.557,140.454 545.973,140.6 544.533,141.461 543.094,142.184 541.51,142.902 541.223,142.902 539.781,143.91
+ 538.342,144.629 536.758,145.352 535.318,145.926 533.877,145.782 532.293,145.64 530.854,145.494 529.27,145.782 527.83,145.782
+ 526.246,146.358 524.807,146.501 523.223,147.366 521.781,148.085 520.197,147.366 518.758,146.79 517.893,146.648
+ 516.453,146.501 515.014,146.936 513.43,147.224 512.564,148.662 512.422,150.104 510.838,150.392 509.398,149.094
+ 508.533,147.654 507.238,146.07 505.795,145.926 504.213,146.213 502.627,146.07 501.189,145.926 500.613,147.51 499.174,148.085
+ 498.021,149.526 497.445,150.965 496.006,152.406 494.422,153.272 492.98,154.422 491.686,156.006 490.102,157.158
+ 488.662,157.734 487.51,159.318 487.223,160.758 485.926,162.198 484.486,163.494 483.766,164.936 483.479,165.224
+ 482.324,163.782 481.893,162.198 481.318,160.758 482.182,159.318 482.182,157.734 482.324,156.438 "/>
+
+ <path id="path3195" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M658.582,169.542l0.432,0.864l1.439-0.432l1.439-0.574l1.441,1.438l-0.719,1.439l0.867,1.439l-0.291,1.44l0.432,1.44l-1.439-0.433
+ l-1.441-0.432l-1.584-1.294l-1.443,0.718v1.44l1.588-0.288l1.439,1.298l1.441,1.438l1.439-0.432l0.145-1.006l0.861-1.442
+ l1.443-0.432l1.441-0.576h1.584l1.439-0.288l0.291-1.439l-0.867-1.584l1.443-0.145l-0.146,1.584l1.441,0.288l1.008-1.584
+ l0.291,1.44l1.439-0.721l1.439-0.287l0.721,1.439l0.143,1.439l0.143,1.585l-0.143,1.439l0.143,1.44l0.145,1.439l1.438,1.008h0.146
+ l1.438,1.009l0.723,0.288l1.439,0.432l0.721-0.145l1.584-0.575l-1.584,1.01l-1.439,0.286l-1.445,0.432l-0.572-1.439l-0.289-0.433
+ h-0.576l-1.008-0.576l-1.008-1.438l-0.434-1.442l0.143-1.584v-1.439l-0.574-1.44l0.289-1.584l-1.441-0.288l-0.719,1.584
+ l-1.439-1.008l-1.443,0.72l-1.584,1.152l-0.143,1.44l0.717,1.584l-1.291-1.584l-1.586-0.433l0.723,1.44l-1.297-1.44l-1.441,0.866
+ l-1.443,0.43l-0.572,0.433l0.434,1.439l-0.291,1.44l-0.143,1.439l0.863,1.442l-1.438-0.146l-1.443-0.575l1.006,1.439l-0.43,1.44
+ l-0.289,1.439l0.145,0.576l-0.434,0.144v-1.439l-0.145-1.44l-1.439,0.576l-1.439,0.72l-0.432,1.44l0.432,1.296l0.576,1.44
+ l0.432,1.439l-0.145,0.145 M658.582,169.542v-0.432l-0.721-1.584l-1.439-1.152l0.717-1.438l1.152-1.442l-0.143-1.584l-1.441,1.008
+ l-1.439,0.433l-1.439-0.433l-1.584-0.288l-1.008-1.438l-0.291-1.584l0.721-1.442l-1.297-1.438l-0.141-1.442l1.439-1.439
+ l-0.293-1.584l-1.293-1.44l1.154-1.584h1.584l0.717-1.44l1.441-1.296l0.434-1.584l-0.576-1.438l1.584-0.435l1.008-1.438
+ l0.143-1.584v-0.146l0.289-1.438h0.145l1.584-1.01l0.287-1.44l0.289-1.584v-1.44l-0.719-1.439l-0.289-1.44l-1.295-1.584
+ l-1.439-0.72l-1.441-1.006l-1.582,0.142h-0.146l-1.006,1.44l-1.152,1.439l-1.439,0.576l-0.578,1.584l-1.582,0.576l-1.441,0.288
+ l-1.584,1.008l-1.441,0.288l-1.439,0.576l-1.584,0.29l-1.443-0.578l-1.439-0.864l-0.578-1.584l-1.293-1.296l-1.439-1.584
+ l-1.582-1.151l-1.443,1.01l-0.287-0.723"/>
+
+ <path id="path3197" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M630.502,128.213l-1.441-1.149l-0.719-1.442l-1.584-1.149l-1.01-1.154l-0.43-0.864l-0.145-1.584l0.145-1.584l-1.443,0.145
+ l-1.439,0.576l-0.723-1.438l-1.584-0.435l-1.584-1.149l-1.293-1.584l-0.574-0.866l-1.584-1.152l-1.439-0.861l-1.008-1.584
+ l-1.01-1.442l-1.295-1.438l-1.299-1.584l-0.717-1.442l-1.443-0.288l-1.58-0.43l-1.441-0.578l-0.576-1.438l-0.719-1.586
+ l-0.865-1.438l-0.863-1.584l0.287-1.442l-0.287-1.438l-0.293-1.584l-0.715-1.442l-1.443-1.15l-1.582-1.298l-1.441-0.72
+ l-1.439,0.146l-1.584-0.146h-1.441l-1.443,0.72l-1.006,0.864l0.289,1.442h0.141l-0.43,1.584l-0.143,1.438l0.719,1.442l0.291,0.142
+ l0.287,1.009l-0.287,0.722l-1.443,1.584l-0.283,0.718l-0.145,1.442l0.145,1.584l0.574,0.573v1.44l-0.143,0.29l-0.432,1.584
+ l-0.434,1.438l-1.443,1.44l-1.438,1.008l-1.008,1.442l-0.289,0.574l-1.441,0.863l-0.717,0.146l-1.445,0.718l-1.006,1.296
+ l-0.141,1.442l-0.438,1.438l-1.148,1.584l-1.295,1.442l-1.441,1.294l-1.439,1.296l-1.15,1.584l-1.297,1.442l-1.008,1.438
+ l-1.584,1.296l-1.439,1.296l-1.445,1.296l-1.146,1.44l-2.305,2.88l-1.439,1.008l-2.018,0.723l-1.441,0.718l-1.154,0.578
+ l-1.438,0.862l-1.584,0.863l-1.439-0.288l-1.584-0.72l-1.443,0.145l-1.584,0.144l-1.439,0.578l-1.439,0.718l-1.584,0.72
+ l-1.443,1.009l-1.441,0.722l-1.582,1.006l-1.439,0.288h-1.584l-1.439-0.145l-1.584-0.287l-1.443,0.144l-1.584,0.578l-1.584,0.288
+ l-1.439,0.288l-1.439,0.573l-1.443,0.721l-1.582-0.145l-1.443-0.432h-0.143l-1.582-0.288l-1.441-0.576l-1.584,0.433l-1.008,1.584
+ l-0.432,1.439l-1.584,0.432l-1.439-0.861l-1.443-1.296l-0.717-1.584l-1.584-0.866l-1.441,0.29l-1.586-0.146l-1.439-0.288
+ l-0.863,1.584l-1.441,0.721l-1.008,1.439l-0.719,1.442l-1.443,1.294l-1.439,1.008l-1.584,1.152l-1.293,1.439l-1.443,1.44
+ l-1.439,1.44l-0.432,1.439l-1.152,1.442l-0.719,1.438l-0.865,1.584l-0.721,1.296h0.291l1.584,1.296l0.432,1.44l-0.432,1.439v1.584
+ l-0.576,1.44l0.145,1.44l0.287,1.584l0.289,1.439l-0.143,1.442l0.432,1.438l1.441,1.584l0.143,1.44l0.43,1.439v1.44l0.436,1.584
+ l-0.574,1.44 M658.582,169.542l-1.01,1.442l-0.143,1.584l-1.584,1.294l-1.439,0.145l0.139,1.584l1.445-1.297l1.582-1.439
+ l1.441-0.286l1.439-1.296l1.439,0.43l-0.572,1.584l-1.443,0.576l-1.584-0.288l-1.008,1.44l-0.145,1.584v1.439l1.443-1.296h1.582
+ v3.024l-1.441,0.863l-1.439,0.435l1.439,0.286l1.441-0.433l1.01-1.584l1.584,0.864l1.295-0.864l-0.721,1.442l-0.291,1.438
+ l-1.438-0.72l-1.441,1.296l0.865,1.442l-1.439,1.006l-1.584-0.144l-0.867,1.439l0.434,1.44l0.141,1.584l-1.438-0.288l1.438,0.72
+ l0.146,0.144h1.584v1.584l0.432,1.009 M662.324,188.549h-0.143"/>
+
+ <path id="path3199" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M702.357,345.366l-1.584,1.297l-1.439,1.295l-1.586,1.008l-1.438,0.721h-1.588l-1.01,1.439l-1.582,1.01l-1.439,0.574l-1.441,1.297
+ l-0.43,0.432l-1.152,1.584l-1.008,1.439l-0.145,0.432l-1.441,0.721l-1.582-0.865l-1.445-0.287l-1.58,0.287l-1.441-0.719
+ l-1.295-0.863l-1.441-0.721l-1.729,0.576l-0.287,0.145l-1.439-0.289l-1.586-0.287h-1.438l-1.588,0.432l-1.439-0.145l-1.439-0.432
+ l-1.441-1.295l-1.439-0.434l-1.441-0.145l-1.584-0.43l-1.439-0.434l-1.584,0.145l-1.434-0.576l-1.582-0.143l-1.443-0.145
+ l-1.584-0.578h-1.439l-1.439,1.441l-1.441,0.432h-1.441l-1.439-1.295l-0.721,1.439l-0.432,1.584l-0.719,1.439l-1.441,0.287
+ l-1.152-1.438l-1.584,0.574l-2.877,2.594l-0.291,1.438l0.867,1.586l-1.152,1.439l-1.439-0.865l-0.721-1.439l-0.721-1.008h-1.439
+ l-1.584,0.432l-1.441-0.287l-1.443,0.287l-1.58,0.434l-1.441-0.434l-1.439,0.863l-1.584,0.434l-1.441,0.576l-1.441-0.432
+ l-1.584-0.578l-1.439-1.295l-1.584,1.008h-1.441l-0.719-0.287l-1.441-1.152l-1.439,0.145l-1.441,1.152h-1.584l-1.439-0.145
+ l-1.584,0.287l-1.439,1.154l-1.445,0.867l-1.438,0.141l-1.584-1.297l-1.584-0.43l-1.295,1.586l-1.441,0.141l-1.295-1.441
+ l-1.439-0.285l-1.588,1.148l-1.291,1.441l-1.443,0.863l-0.287,0.289l-0.576,1.441l0.863,1.582l1.297,1.441l0.721,1.443
+ l-1.443,1.293l-1.584,0.721l-0.141,1.438l-1.297,1.441l-0.287,0.293l-1.441-0.578l-1.441,0.287l-0.863,0.869l-0.865,1.438v0.145
+ l-1.584,1.15l-0.721-0.143l-1.441-1.008l-1.439-1.443L569,376.187l-1.584-0.143l-1.441-0.291l-1.443-0.43l-1.584-0.289
+ l-1.291,1.582l0.863,1.445l1.439,0.715l1.443,0.145l1.584,0.719l0.574,1.441l1.441-0.145h1.584l1.439,0.289h-3.023l-1.441,0.145
+ l-1.582-0.719l-1.445-1.297l-1.438,0.145l-1.584,0.145h-1.441l-1.439-0.867l-1.441,0.145h-1.008l-0.863-1.438l-0.576-1.443
+ l-0.576-1.584h-1.443l-1.438-1.297l-1.588-0.43l-0.43,1.438l-0.721,1.441 M659.877,192.726l-0.574,1.439l-1.295,1.442l-1.441-0.146
+ l-1.584-0.144l-1.441-0.288l-1.008,1.44l-1.584,0.722l-1.439-0.434v1.439l1.295,1.584l-1.441,0.432l-1.584,0.288l-0.287-1.438
+ l-1.441-0.146l-1.584,1.152l-1.441-1.006l-1.008,1.438v0.576l-1.439,0.576l-1.443-0.576l-1.439,0.288l-0.863,1.44l-1.008,1.584
+ v1.439l0.863,1.44l-1.008,1.439l-0.434,1.44l-0.719,1.584l1.297,1.44l-1.443,1.296l-1.439,0.575l-1.008,1.584l-0.146,1.584
+ l0.291,1.44l1.154,1.44l1.148,1.584h0.145l1.439,0.432l1.152,1.439l0.145,1.584l0.721,1.44l-1.445,0.433l-1.293,1.584l-1.439,1.439
+ l-0.289,1.584l1.438,0.72l1.299,1.44l0.285,1.152l-0.139,1.439l-0.145,1.44l-0.432,1.584l-0.578,1.439l-1.439,1.296l-1.008,1.44
+ l0.572,1.584"/>
+
+ <polyline id="polyline3201" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 642.164,567.702 642.598,569.286 644.037,570.581 642.598,572.022 642.311,573.462 641.014,574.903 639.572,575.765
+ 639.285,577.206 639.285,578.79 639.43,580.229 640.869,581.524 640.293,582.966 640.438,584.55 640.148,585.989 639.572,587.431
+ 638.131,588.438 636.547,588.726 635.109,588.005 633.67,587.286 632.23,587.142 630.789,586.421 629.35,584.981 627.908,583.974
+ 626.471,583.255 624.883,582.966 623.303,583.687 621.861,584.692 620.277,583.687 618.838,583.11 617.398,582.966 615.957,583.11
+ 614.373,582.821 614.807,581.382 614.518,579.942 614.23,578.356 613.076,576.919 611.639,575.765 611.494,574.325
+ 610.486,572.886 609.332,571.444 609.479,569.862 610.773,568.278 610.627,566.839 609.621,565.255 609.621,563.813
+ 608.037,564.103 606.74,562.663 606.453,561.079 604.869,559.927 604.582,559.927 602.998,558.485 601.99,557.046 600.547,556.038
+ 599.109,556.759 597.67,556.612 596.23,556.903 594.789,557.911 593.205,558.198 592.916,558.341 591.479,557.333 589.893,556.47
+ 589.174,556.181 587.732,554.886 586.293,554.743 584.854,554.886 583.27,554.886 581.252,552.005 580.963,551.718
+ 580.533,551.718 580.389,551.862 578.949,552.005 578.807,552.005 577.223,551.573 574.197,551.573 573.189,553.013
+ 572.324,554.454 572.037,555.894 572.037,557.478 572.471,558.919 572.324,560.501 573.908,561.798 574.916,563.235
+ 574.916,563.526 575.205,564.534 575.926,565.974 575.494,567.413 575.926,568.997 576.789,570.438 576.789,571.878
+ 576.068,573.462 575.061,574.903 575.205,576.341 575.061,577.927 573.621,579.222 572.613,580.663 571.029,581.382
+ 569.877,582.821 568.438,583.11 566.854,581.671 565.557,580.229 564.693,578.79 564.406,577.206 563.973,575.765 562.533,575.333
+ 560.949,574.181 559.51,573.173 557.926,572.454 556.627,571.013 555.043,569.718 553.605,569.862 552.021,568.567
+ 550.582,566.981 549.141,565.829 548.854,565.542 547.414,565.829 545.973,565.11 544.533,564.679 543.094,563.382 541.51,562.374
+ 541.795,560.79 541.941,559.349 543.379,557.911 544.102,556.47 543.525,554.886 542.662,553.302 543.094,551.862 543.238,550.421
+ 543.238,548.839 542.373,547.397 541.365,545.813 "/>
+
+ <path id="path3203" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M575.35,659.142l-1.441-1.152l-1.439-0.576l-0.434-0.143l-1.439,0.432l-1.584-0.143l-1.441,1.439l-1.443,1.008l-1.584,0.867
+ l-1.438-0.291h-3.025l-1.439,0.145l-1.586,0.145l-1.439,0.287l-1.439,0.145l-1.584,0.576l-1.441,0.143l-1.443-1.01l-1.584,0.721
+ l-1.438,0.863l-1.441-0.574l-1.15-1.441l-1.439-0.576l-1.586-0.432l-0.865-1.439h-1.439l-1.439,0.719l-1.584-0.434l-0.291-1.439
+ l-0.578-1.584l-0.141-1.439l-1.295-1.584l0.432-1.297l-1.439-1.01l-1.439,0.289l-1.584,0.436l-1.443,1.008l-1.439,0.576h-1.584
+ l-1.439,0.287l-1.443,0.145h-0.141 M575.35,659.142l-1.441-0.863l-1.439-0.719h-0.145l-1.443,0.576l-1.438-0.145l-1.439,1.008
+ l-1.584,1.154l-1.441,0.861l-1.582,0.291l-1.443-0.432h-1.584l-1.439,0.141l-1.439,0.145l-1.586,0.289l-1.439,0.143l-1.441,0.576
+ l-1.584,0.145L550,661.446l-1.443,0.434l-1.439,1.008l-1.584,0.145l-2.877-2.594l-1.441-0.289l-1.01-1.584l-1.586-0.145
+ l-1.438,0.721l-1.584-0.432l-0.576-1.584l-0.289-1.441l-0.289-1.441l-1.295-1.584l0.289-1.439l-1.439-1.008l-1.443,0.719
+ l-1.439,0.432l-1.439,1.15l-1.584,0.291l-1.439-0.145l-1.586,0.434h-0.867v0.141 M589.174,556.181l-1.441-1.148l-1.584,0.141
+ l-1.441-0.141l-1.439,0.141l-2.307-2.877l-0.43-0.143l-1.584,0.287l-1.439-0.434h-1.441l-1.582-0.287l-1.154,1.439l-0.863,1.439
+ l-0.145,1.584v1.443l0.289,1.584l0.289,1.439l1.586,1.152l0.574,1.439l0.143,0.434l0.865,1.584l0.141,1.439l-0.285,1.441
+ l0.719,1.584l0.865,1.439l-0.721,1.439l-0.863,1.443l-0.576,1.584l0.145,1.441l-0.721,1.438l-1.152,1.441v0.721l-1.439,0.574
+ l-1.584,1.01l-1.441,1.439l-1.584-0.719l-1.295-1.443l-1.295-1.582l-1.01-1.441v-1.152l-0.432-1.438l-1.152-0.289l-1.582-1.152
+ l-1.441-1.008l-1.439-0.719l-1.584-1.441l-1.441-1.15l-1.443-0.146l-1.438-1.15l-1.439-1.441l-1.443-0.863l-0.287-0.432h-1.439
+ l-1.584-0.576l-0.869-0.143l-1.006-1.584l-1.439-0.434l-1.152-0.719v-1.592l0.145-1.441l0.145-0.576l1.584-1.439l0.574-1.584
+ l-0.719-1.443l-0.721-1.008l0.291-1.584l0.287-1.438l-0.143-1.441l-0.721-1.441l-0.863-1.584l-0.145-0.143"/>
+
+ <path id="path3205" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-113.979,6.534l1.44,0.723l1.439,0.573l1.584,0.722l1.44,0.433l0.288,0.144l1.584-0.144l1.439-0.29l1.44-0.143l1.439-0.146
+ l1.584,0.146h2.881 M516.311,351.271l1.582,0.287l1.15,1.441l1.012,1.439l0.719,1.584l1.438,1.439l1.584,0.145l1.445-0.576
+ l0.863-1.439l1.584-0.721l1.439-1.297l1.441-0.287h-0.289l-1.584,0.145l-1.441,1.295l-1.438,1.008l-1.01,1.441l-1.441,0.145
+ l-1.584-0.865l-0.576-1.439l-0.145-1.441l-0.434-1.438l-0.572-1.586l-1.441-0.574l-1.584,0.143l-1.008,0.576 M471.094,175.446
+ l0.576-0.72l1.291-1.44l1.299-1.439l1.584-0.433l1.439,0.288l1.439-1.008l1.588-0.72l1.439-1.296l0.287-0.721l-0.432-1.008
+ l-0.432-0.432l-1.441-0.286l-1.584-0.29l-1.441-0.864l-1.439-0.576l-0.863-0.432h-1.445l-1.438-0.43 M481.029,157.734l-0.146,1.154
+ l-0.285,1.296l-0.145,1.584v0.43l1.008,1.584l1.152,1.154l0.576,0.861h-1.584l-1.439-0.287l-1.443-0.721l-1.439-1.149l-0.576-1.442
+ l0.145-1.152l-0.145-1.008 M471.814,175.877l1.439-0.432l1.584-0.432l1.439-0.145l1.584-0.43l1.152,1.584l1.584,0.574l0.576,1.296
+ l1.295,1.439l0.719,1.442l0.719,1.582l0.145,0.432l-1.152,1.584v1.442l-0.143-0.435l1.295-1.439v-1.584l-0.719-1.44l-0.576-1.438
+ l-1.008-1.586l-0.576-1.44l1.439-1.152l0.576-1.439l-0.432-1.152l-0.145-0.287l0.432-1.438l0.291-1.298l0.287-1.582l0.867-1.442
+ h0.432l1.439,1.154l0.432,1.438v0.72l-0.141,1.439l-0.721,1.584l0.143,1.442l-0.432,1.584l0.865,1.294l-0.291,1.44v1.584
+ l0.721,1.584v1.439l-0.145,0.288l0.721,1.584l0.285,1.44v1.439 M471.814,163.494l1.439-0.288l0.432-0.142l1.441,1.149l1.582,0.288
+ l1.441,1.009l-1.295-1.584h-0.145l-0.432-1.15v-0.578l0.145-1.584v-0.288"/>
+
+ <path id="path3207" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-115.994,96.246l1.439,0.72l1.584,0.435l1.44-0.29l1.439-0.432l1.584,0.432l1.44,0.72l1.44,0.433l1.439,0.289l1.584,0.289
+ l1.44,0.289h2.447l1.44-0.722l1.44,0.144l1.439,1.44l1.44,0.145l0.432-0.145l0.864-0.43l1.151,0.142l0.576,0.145l1.44,0.144
+ l1.439,1.008l1.44,0.288h1.439l1.44,0.576l1.584-1.294l0.72-1.008l1.44-1.298l1.439-0.862l1.584,0.142l1.44,0.146l1.44-0.434
+ l1.439-0.433l1.44-0.718l1.584-1.154l1.439-0.718l0.864-0.29h0.72l0.145-0.143l0.863-0.146l1.44-0.144l1.44-0.721l1.584-1.008
+ l0.863-1.439l1.584-0.433l1.44,0.288h2.88l1.44,0.866l1.439,0.862l0.433,1.439l-0.145,1.442l0.432,1.438l1.44,0.288l1.152-0.863
+ l0.863,0.287l1.584,0.288l1.44-0.142l1.44-0.288l1.439-0.146l1.584-1.009l1.152-0.43l1.439,0.43l1.584,0.576l2.88,2.017l1.44,0.434
+ l1.584-0.288l1.44-1.154l1.439,0.576l1.152-1.44l1.439-1.439l0.433-1.439l0.288-1.438l0.575-1.584l0.864-1.442l0.433-1.438V85.16
+ l1.439-1.008l1.44-0.288h0.288l1.439-0.288l1.44,0.576l1.439-0.718l1.584,0.142h1.44l1.439,0.722l1.44,1.15l1.44,0.288h0.144
+ l1.44,0.578l1.296,1.438l0.432,1.584l1.008,1.442l0.145,1.438l0.863,1.011l1.009,1.008l1.439,0.288l1.008,0.288 M-115.994,96.246
+ l-1.44-1.151l-1.584-0.721l-2.88-2.592l-1.152-1.439l-1.584-1.009l-1.439,0.576l-1.44,0.722l-1.439,1.438l-0.576,1.44l-1.296,1.439
+ l-1.44,0.72l-1.584,1.296l-1.439,0.576l-1.44,1.008l-1.44,0.723l-1.584,0.43 M-139.755,99.702l-0.432,1.442l-0.864,1.151
+ M-151.274,104.6l1.44-0.576l1.439-1.296l1.584-0.722l1.44-0.433l1.439,0.866l1.44,1.006l1.584-1.006l-0.145-0.145
+ M-141.051,102.295l1.296-1.439l1.44-1.154l1.584-1.008l1.44-0.718l1.439-0.866l1.584-1.152l1.44-0.72l1.439-1.438l0.721-1.441
+ l1.008-1.44l1.584-0.575l1.439-0.721l1.584,1.154l1.009,1.582l0.863,1.441l1.44,1.009l1.439,0.43l1.44,0.578l0.864,0.43
+ M-151.274,104.6l-1.296,0.861l-1.44,1.152l-1.439,0.866l-0.864,1.438l-0.576,1.584l-0.432,1.44l-0.145,1.439l-0.288,1.44
+ l-0.144,1.44l0.576,1.439l-1.584,1.154l-0.145,1.438l-1.439,1.011 M-151.274,104.6l-1.44,1.438l-1.439,1.008l-1.296,1.584
+ l-0.864,1.44l-0.432,1.44l-0.145,1.584l-0.432,1.439v1.442l1.439,0.862l0.864,1.584l-1.439,1.008l-1.44,0.72l-1.44,0.864
+ l-1.151,0.29 M-161.211,121.304h0.721 M-124.778,8.551l-0.576-1.441l0.864-1.584l1.439-0.864l1.44-1.149l1.584,0.43l1.439,0.146
+ l1.44,1.008l1.44,0.287l1.439,1.15h0.288l1.44,0.146l1.584,0.72l1.439,0.288l1.44,0.576l0.72,0.287h1.584l2.88-0.575l1.44-0.146
+ l1.439,0.29l1.44,0.145l1.152,0.287"/>
+
+ <path id="path3209" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-97.418,8.551l1.439,0.143h2.88l1.44,0.29l1.439-0.144h1.584l1.44,0.287l1.439,0.286h1.584l1.44,0.29h1.44l1.584-0.144L-78.41,11
+ l1.584-0.144L-75.387,11h0.145l0.72,1.44l1.44,0.432l1.296,1.584l1.439-0.144l1.584-0.866l1.44-0.718h1.439l0.721-1.44l1.584-0.72
+ l1.439-0.29l1.44-0.718l1.584,1.151l1.439,0.862l1.44-0.43l1.584,0.288l1.439,0.43l1.44-0.142l1.584-0.146l1.44-0.142l0.575,0.288
+ l1.44-0.433l1.44-1.01l0.863-1.438l1.44-1.011l1.152-1.438l1.439-0.433l1.44-0.434l1.584-0.864l1.439-0.72l1.44-0.143l1.584-0.289
+ l1.439,1.296l0.721,0.288l0.288,1.438l0.287,0.866l1.44,0.144l1.584,0.286l1.44,1.154l1.151,1.44l1.152,1.438l1.008,1.584
+ l0.432,1.442l-0.432,1.584l1.44,0.863l1.584,0.721l1.439-0.576l1.296-0.433l1.584-0.863l1.44-0.433l1.296,1.44l1.44-0.145
+ l1.439,0.288h1.44l0.72-0.434l1.44,0.722l1.439,1.008l1.584-0.287l1.296,1.438h2.88l1.44-0.288l1.584,0.576l1.439-0.142l1.44-1.152
+ l1.584,0.144v-1.584l1.584-0.722l1.44-1.006l1.584-0.72l1.439,0.142l1.584,1.01l1.44-0.432l1.439,0.576l0.864,1.439l0.432,0.862
+ l0.721,0.866l0.288,0.142l1.439,0.576l0.72,0.146l0.721-0.146l0.288,0.288l1.439,0.29l1.44,0.43l1.584,0.576h0.576l1.439,0.866
+ l1.296,0.142l1.584,0.146l0.433,0.288l1.439-0.576l1.44-0.578l0.432-0.288l1.152-1.438l0.72-1.296l1.296-0.863l0.72-0.864
+ l1.152-1.584v-0.145l0.288-1.151l0.144-0.145V13.59l1.44-1.442l-0.144-1.438l0.432-0.144l1.152-1.44l1.584-0.863l0.575-1.154
+ l0.864-0.288l0.145-0.288l-0.145-1.438l1.296-1.442l0.145-1.584l1.008-1.438L51.621-0.81l1.44-0.578l1.44-1.006l0.72-1.584
+ l-0.433-0.721L53.35-4.556l0.72-1.438l0.72-1.009l-1.151-1.439l1.151-1.44l1.584-0.863l1.152-2.881l0.433-1.439l1.439-1.584
+ l0.145-1.442l1.584-0.574l1.296-1.439v-0.145l1.439-0.722l0.864-1.438h1.44l1.584,0.142l1.439-1.006l0.288-1.44l1.584-0.863
+ l1.44-1.011l1.151-1.584l1.008-1.438l0.145-0.288l0.288-0.866l1.151-0.43l1.44-0.576l1.296-1.584l2.448-3.168l1.728-0.866
+ l1.44-1.438l2.16-1.584l0.288-0.433l1.584-1.01l1.439,0.722l1.44-0.288l0.432,0.576l0.432,0.288l0.288-0.145l0.576-0.432
+ l0.288-0.144l1.44-0.288l0.72,0.432l1.44-0.576l1.151-0.576 M-89.931,99.846l1.44-0.286l1.439,0.43l0.721,1.44l1.439-0.862
+ l1.44,0.576l1.584-0.435l0.144-0.287l0.576-0.721l1.44-1.296l0.863-0.718l1.152-0.434l1.44-0.145l1.584,0.29l1.296-0.578
+ l1.439-0.288l-0.288-0.142l1.152-0.723l0.72-0.575l1.584-0.862l1.44-0.578h1.584l0.72-0.288l1.44-0.142l0.863-0.435l1.44-0.288
+ l1.44-1.438l1.296-1.442l1.439-0.576l0.864,0.435l0.864,0.43l0.72-0.142l0.864-0.288l1.439,0.288l1.584,1.008l1.008,1.006
+ l0.288,1.296l-0.432,1.584l-0.144,0.576l0.72,0.866l1.439-0.146l1.44-0.432l1.584,0.432l1.44-0.432l1.439-0.145h1.44l1.584-1.149
+ l0.863-0.433l1.44-0.146l1.439,0.866l0.864,0.288l1.152,0.861l1.008,0.723l1.44,0.718h0.144l1.584-0.288l1.44-0.864l1.439,0.576
+ l1.44-1.584l1.296-1.439l0.288-1.584l0.432-1.44l0.576-1.44l0.72-1.582l0.576-2.882l1.44-0.861h1.584l1.439-0.576l1.44,0.43
+ l1.296-0.576l1.584,0.288h1.439l1.44-0.43h0.432l1.152,0.864l1.008,1.438l0.288-0.142l0.288-0.576l1.44,1.152l1.439,0.573
+ l0.145,0.435l1.151,1.584l1.008,1.438v1.584l0.145,1.008l1.439,0.576l1.009,1.442l1.151,0.43"/>
+
+ <path id="path3211" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M98.277-42.28l0.145-1.44l0.576-1.439l0.575-1.584l0.288-1.44v-1.44l0.576-1.439l0.145-1.584l-1.009-1.44l-0.288-1.439l0.288-1.872
+ l0.576-1.44l1.008-1.151v-2.017l0.288-1.584l0.145-1.586l-0.145-1.438l-0.576-1.441l0.288-1.438l0.288-1.584l-0.432-1.439
+ l-0.145-1.44l0.864-1.439l0.145-0.576l-0.145-1.44l-0.288-1.439l0.145-1.584l-0.288-1.44l-0.72-1.439l-1.44-1.152l-0.288-0.432
+ l-0.288-0.145l-0.72-1.584h-1.584l-0.576-1.439l1.008-1.442l0.145-0.142l0.288-1.442l1.439-0.718l1.584-0.576l1.44-0.432
+ l1.439-1.152l1.44-1.008l1.439-1.584l-0.575-1.44l0.432-1.439l1.439-1.009l1.44-1.01l1.008,1.442l1.44,1.296l1.008,1.439
+ l1.44,0.576l1.584,0.145l1.439-1.152l1.44-0.72l1.584-1.296l1.439,1.439l1.44,0.145l1.584,0.144l1.584-0.432l1.439,0.864
+ L127.222-97l-0.288,0.721l0.144,1.584l0.145,1.438l1.008,1.442l0.576,0.432 M98.277-42.28l-0.144-1.44l0.288-1.439l0.863-1.44
+ v-1.584l0.288-1.44l0.576-1.584v-1.439l-1.151-1.44l-0.145-1.439v-1.44l0.864-1.584l0.864-1.439l0.144-2.16l0.432-1.296
+ l-0.144-1.44v-1.729l-1.296-1.441l1.296-1.438l0.288-1.439l-0.576-1.584l-0.288-1.44l1.008-1.439l0.288-1.008l-0.144-1.442
+ l-0.433-1.438l-0.144-1.584l-0.145-1.439l-1.439-1.296l-0.432-0.145l-1.009-1.584l-1.439-1.151l-1.152-1.295l0.864-1.439
+ l0.576-0.576l-0.145-1.439l0.433-0.576l1.584-0.288l1.439-0.578l1.44-0.862l1.439-0.576l1.584-1.296l1.008-1.439l-0.72-1.008
+ l0.288-1.152l0.432-0.864l1.009-0.432l1.439-0.866l1.152-1.149l0.288,1.008l1.008,1.439l1.44,1.296l1.439,0.576l1.584-0.144
+ l1.44-0.721h1.439l1.44-1.008l1.439,0.433l0.864,1.008l1.584,0.144l1.44-0.288l1.439-0.144l1.44,1.152v3.023l0.863,1.44
+ l1.009,1.438l1.439,1.298l1.44-0.144l1.439,0.576"/>
+
+ <path id="path3213" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-213.339,133.11l-0.287,1.439l-0.145,1.44l0.578,1.584v1.442l0.862,1.438l1.008,1.442l1.298,1.584l0.286,1.438l-1.44,1.152
+ l-0.72,1.44l-1.152,1.584l-1.439-0.721l-1.008,0.435l0.144,1.584l-0.286,0.142l-0.29,0.576l-1.151,0.576l0.434,0.576l0.286,1.439
+ l0.144,0.145l1.44,0.722l1.586,0.862l1.438,0.576l1.44-0.145l1.44,0.576l1.584,1.008l1.441-0.145l1.438,0.145 M-203.259,157.59
+ l1.584-0.145l1.442-0.718l1.294-1.584v-0.866l0.144-0.145l1.44-0.144h1.584l1.44-0.144l1.441-1.44l0.574,1.44l1.44,0.144
+ l1.584-0.864l1.441-0.863l1.438,0.432h1.584l-0.143-1.439l1.584-0.862l1.438,0.573l1.008,1.44h1.44l1.441,0.433l0.286,0.722
+ l0.576-1.011l1.152-1.439l0.144-0.145v-1.296 M725.686,339.606l-1.297,0.432l-1.582,0.434l-0.434,0.143l-1.439,0.287l-1.584-0.574
+ l-1.152-0.145l-1.008-1.584l-0.432-1.008l-1.01-1.439l-1.008,0.574l-0.43,0.865l0.717,1.584l-1.439,0.287l-1.584,0.432
+ l-1.008,1.441l-0.867,1.582l-1.439,0.578l-1.584,0.574l-1.439,0.578l-1.443,0.574l-1.439,0.289l-0.432-0.145 M756.502,322.327
+ l-1.152,0.574l-1.441,1.441l-1.008,1.584l-1.582,0.143l-1.297,1.441l-1.439,1.008l-1.584,1.439l-1.443,0.287l-1.439,0.578h-1.439
+ l-1.584,1.008l-1.152,0.287l-0.719,0.576 M471.525,175.446h1.297l3.168-0.864l1.582-0.432l0.434,0.29l1.008,1.438l1.439,0.576h0.43
+ l1.588-1.296l0.574-1.44l-0.574-1.584l0.143-0.287l0.289-0.433l0.289-1.584l0.291-1.584l-1.443,0.576l-1.154,1.296l-1.438,0.288
+ l-1.295,1.584l-1.441-0.288l-1.582,0.288l-1.441,0.578l-0.723,1.726L471.525,175.446 M-237.097-288.808h-14.401v14.4
+ M742.102,935.188h14.4V920.79 M756.502-274.408v-14.4h-14.4 M131.542-86.776l-0.721-1.584l-1.439-1.44l-0.576-1.584
+ M128.806-91.384l1.439,1.008l1.44,0.721l1.44,0.142l0.72-0.286v-0.144"/>
+
+ <path id="path3215" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-212.33,132.392l-0.143-1.298l0.574-1.584l-0.432-1.44l-0.143-1.44l-0.146-1.438l-0.433-1.442l-0.288-1.438l0.721-1.442
+ l0.288-1.439l0.575-1.44l0.288-0.144l0.866-0.721l0.862-0.576l0.288-1.584l1.439-1.008l-0.144-1.584l0.288-1.438l-0.288-1.442
+ l0.432-1.584l-1.294-1.438l-1.441-0.723l1.008-1.584l0.288-1.438l-0.145-1.442l-1.439-1.152l-1.584,0.289l-1.296-1.438
+ l-1.438-0.578l-1.442,0.722l-1.008-1.439l-1.008-1.442l-1.584-0.142l-1.44-1.442l-1.008-1.438l-1.439-1.011l-1.438-1.008
+ l-1.441,0.146l-1.44-0.435l-1.44-0.142l-1.584-1.008l-1.008-1.584l-1.008-1.442l-0.72-0.576l-0.145-1.438l-0.288-1.584
+ l-0.142-1.442l-0.576-1.438v-1.442l0.718-1.438l1.009-1.441l0.434-1.584l1.294-1.44l1.44-0.861l1.441-0.576l1.438,0.864l1.439,0.72
+ l1.584-1.296l0.288-1.442l0.145-1.438v-1.584l0.576-1.442v-1.439l0.72-1.009h0.144v-1.438l0.866-1.442l1.15-1.438l1.441-1.442
+ l0.288-0.288l1.006-0.43l1.296-1.442l1.442-1.584l0.43-1.438V51.03l-0.144-1.438l0.432-1.586l-0.432-1.438v-1.44l1.439-0.863
+ M-213.339,133.11l-0.287,1.439l-0.145,1.44l0.578,1.584v1.442l0.862,1.438l1.008,1.442l1.298,1.584l0.286,1.438l-1.44,1.152
+ l-0.72,1.44l-1.152,1.584l-1.439-0.721l-1.008,0.435l0.144,1.584l-0.286,0.142l-0.29,0.576l-1.151,0.576l0.434,0.576l0.286,1.439
+ l0.144,0.145l1.44,0.722l1.586,0.862l1.438,0.576l1.44-0.145l1.44,0.576l1.584,1.008l1.441-0.145l1.438,0.145 M-203.259,157.59
+ l-1.151-0.145 M-213.339,133.11l-0.287,1.439l-0.145,1.44l0.578,1.584v1.442l0.862,1.438l1.008,1.442l1.298,1.584l0.286,1.438
+ l-1.44,1.152l-0.72,1.44l-1.152,1.584l-1.439-0.721l-1.008,0.435l0.144,1.584l-0.286,0.142l-0.29,0.576l-1.151,0.576l0.434,0.576
+ l0.286,1.439l0.144,0.145l1.44,0.722l1.586,0.862l1.438,0.576l1.44-0.145l1.44,0.576l1.584,1.008l1.441-0.145l1.438,0.145"/>
+
+ <path id="path3217" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M552.021,720.772l-1.152,1.443l-1.584,1.15l-1.584,0.719h-1.439l-0.863-1.584v-0.145l0.287-1.439l1.295-1.584l1.584-0.863h0.289
+ l1.439,0.576l1.01,1.439L552.021,720.772 M516.021,733.157l-0.289,0.578l-0.289,0.287l-1.152,1.01v1.439l-0.578,1.584l0.146,1.439
+ l-1.152,1.441 M521.781,724.661l-1.154,1.441l-1.438,1.295l-1.008,1.439l-0.434,0.289l-0.143,0.145 M-213.339,133.11l1.009-0.718
+ M-219.816,153.846l0.862,0.576l1.584,0.146l1.151-0.722 M-213.48,44.264l0.288-0.288l1.584-0.435l1.438-1.296l0.146-1.438
+ l0.574-1.442l0.72-1.584l-0.432-1.438l1.151-1.442l1.44-1.294l1.298-1.442l-1.298-1.584h-1.584l-1.44-0.432l-1.439,0.29
+ l-1.438,0.288h-1.584l-1.441,0.142h-1.44l-1.44-0.72l-1.584-0.576l1.584,0.146l1.44,0.288l1.44,0.287h1.584l1.441,0.145
+ l1.438-0.432l1.439-0.576l1.584-0.146l1.44,0.146l-1.584-0.576h1.584l1.439-0.145l1.442,0.721l0.718-1.584l1.44-0.721l1.439-0.722
+ l-1.584,1.008l-1.151,1.584l1.584,0.146l1.439-0.146l1.44-0.142l1.439,0.142l1.44,0.576l1.584,0.146l1.44-0.146h1.441l1.006,0.288
+ M-213.339,44.264l1.44,0.142l1.584-1.438l0.864-1.441l0.288-1.44l0.863-1.438l-0.288-1.584l0.146-1.442l1.438-1.149l1.44-1.442
+ l1.008-1.438l1.44-1.297h1.439l1.009,1.438l0.287-1.438l1.44-0.434l1.44-0.142l1.441,0.575l1.438,0.286l1.584-0.573l1.439,0.142
+ l1.44-0.288h0.288 M-176.042,9.848l0.144,1.439l-0.432,1.44v1.439l-0.288,1.44l1.584,1.294l1.296,1.584l0.288,1.442v1.438
+ l1.439,1.442l1.44,1.151l0.576,1.44l-0.864,1.44l-1.584,0.861h-1.44l-1.439,0.146l-1.438,1.584l-1.441,0.576l-1.438,0.142
+ l-1.441-0.288l-1.44,0.288h-1.44l-1.584-0.142l-1.439,0.432l-1.44-0.432l-1.439-0.146"/>
+
+ <path id="path3219" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M647.061,351.702l-1.439,0.434l-1.439-0.723h-1.441l-0.719,1.441l-0.145,1.439l-1.008,1.584l-1.295-1.584l-1.443-0.287
+ l-1.148,1.439l-1.15,0.721l-1.584,1.295l-0.869,1.584l0.438,1.441l0.287,1.439l-1.439-1.152l-1.008-1.584l-1.586-0.289
+ l-1.443,0.289l-1.584-0.289l-1.438-0.143l-1.584,0.576l-1.584-0.434l-1.439,0.289l-1.152,1.439l-1.439,0.436l-1.584,0.141
+ l-1.445-0.578l-1.438-1.297h-1.584l-1.441,0.434l-1.439,0.145l-0.145-0.145l-0.143-0.145l-0.146-0.145l-1.438-0.863l-1.441,0.145
+ l-1.582,1.152l-1.584-0.145l-1.443-0.145l-1.439,0.576l-1.584,1.295l-1.439,0.434l-1.439-0.576l-1.586-0.576l-1.443-0.145
+ l-1.438,1.154l-1.584-0.717l-1.441-1.012l-1.441,0.721l-1.439,1.008l-1.439,0.574l-1.439,0.721l-1.01,1.439l0.143,1.584
+ l0.145,1.443l1.439,1.439l-0.717,1.586l-0.576,1.438l-1.443,0.723l-1.439,1.15l-1.439,0.717l-1.008,0.434l-1.443,1.15l-1.582,0.576
+ l-1.441-0.434l0.289-1.582l-1.008-1.438l-1.441-1.01h-1.584l-1.439,0.287l-1.439,0.145l-1.584,0.287l-1.443,0.291l-1.582,0.141
+ l-1.441,0.436l-1.439,0.287l-1.441-0.721l-1.443-0.717l-1.584-0.865l-1.438-0.721l-1.584,0.289l-1.439,0.434l-1.584,0.574
+ l-0.721,1.584v1.441 M717.621,816.245l1.006,2.158 M720.502,813.077l0.287,0.145l0.576,0.574l-1.439,1.439l-1.152,0.434
+ l-1.439,0.721l-1.443-0.434l-1.58,0.145l-1.443,1.295h-0.145l-0.287,0.143 M547.414,727.829v-3.313 M535.461,720.054l-0.287-3.313
+ M529.99,720.63l0.139-0.291v-1.441l0.869-1.438l1.439-0.432l1.152,0.432l1.439-0.721l1.441-0.145l1.439-0.287l1.441,0.576
+ l0.576,0.576l1.295,1.438l0.572,1.584l1.445,1.297l1.439,1.008l0.285,0.434l1.445,1.439h1.584l1.439-0.863l1.584-1.152l1.439-1.441
+ l0.576-0.434l-0.717-0.141l-0.291,0.141 M515.732,732.294l4.176-1.297 M512.564,741.364l0.143-0.432l1.152-1.441l-0.146-1.439
+ l0.578-1.584v-1.439l1.152-1.01l0.289-0.289l0.289-0.576l-0.432-1.439l0.143-1.441l1.441-0.865l0.432-0.143l0.143-0.145
+ l0.434-0.289l1.008-1.439l1.438-1.295l1.154-1.443 M556.627,721.204l0.869,2.018"/>
+
+ <polyline id="polyline3221" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 702.357,345.366 700.916,345.511 700.051,346.95 698.613,347.958 697.029,348.966 695.59,349.253 694.15,349.687 693.285,351.126
+ 690.406,352.278 688.963,353.573 687.814,355.159 686.662,356.599 686.084,358.038 684.646,357.749 683.061,357.319
+ 681.621,357.03 680.037,357.175 678.598,356.022 677.014,355.304 675.572,355.304 674.133,355.733 672.547,355.304
+ 671.109,355.159 668.084,355.159 666.502,354.87 665.061,354.581 663.621,353.573 662.037,353.144 660.598,352.999
+ 659.877,352.854 658.438,352.421 656.854,352.278 655.414,351.991 653.973,351.702 652.389,351.413 650.949,350.983
+ 649.365,350.839 647.781,350.983 647.061,351.702 "/>
+ <path id="path3223" fill="none" stroke="#00809E" stroke-width="0.3" d="M252.502,10.568h-7.345 M252.502,173.43h-7.345
+ M252.502,337.591h-7.345H252.502"/>
+
+ <line id="line3225" fill="none" stroke="#00809E" stroke-width="0.3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" x1="252.502" y1="-149.85" x2="245.157" y2="-149.85"/>
+ <path id="path3227" fill="none" stroke="#00809E" stroke-width="0.3" d="M252.502,337.591v7.344 M252.502,337.591v7.344
+ M252.502,337.591v7.344 M252.502,337.591v7.344 M252.502,337.591v7.344 M252.502,337.591v7.344 M252.502,337.591v7.344
+ M252.502,337.591v7.344 M252.502,337.591v7.344 M252.502,337.591v7.344 M252.502,337.591v7.344 M252.502,337.591v7.344
+ M252.502,337.591v7.344"/>
+
+ <polyline id="polyline3229" fill="none" stroke="#00809E" stroke-width="0.3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 403.127,-288.808 404.998,-288.232 407.156,-287.8 409.318,-287.224 411.621,-286.648 415.941,-285.497 418.102,-284.92
+ 424.582,-283.192 426.74,-282.617 428.9,-281.896 431.061,-281.32 433.223,-280.744 435.379,-280.024 437.541,-279.448
+ 439.701,-278.728 441.861,-278.152 444.021,-277.432 446.182,-276.856 448.342,-276.136 450.502,-275.417 452.662,-274.696
+ 454.678,-273.976 456.838,-273.256 458.998,-272.537 461.156,-271.816 463.318,-271.096 465.334,-270.376 467.494,-269.656
+ 469.654,-268.936 471.67,-268.072 473.83,-267.352 475.99,-266.632 478.006,-265.768 480.166,-265.048 482.324,-264.184
+ 484.342,-263.464 486.502,-262.6 488.518,-261.736 490.678,-261.016 492.693,-260.152 494.854,-259.289 496.869,-258.424
+ 499.029,-257.56 501.045,-256.696 503.205,-255.833 505.223,-254.968 507.238,-254.104 509.398,-253.24 511.414,-252.232
+ 513.43,-251.369 515.445,-250.504 517.605,-249.497 519.621,-248.632 521.639,-247.625 523.654,-246.76 525.67,-245.752
+ 527.83,-244.888 533.877,-241.864 535.893,-240.856 537.908,-239.992 539.926,-238.984 543.957,-236.968 545.973,-235.816
+ 547.99,-234.808 549.861,-233.8 551.877,-232.792 553.893,-231.785 555.908,-230.632 557.926,-229.625 559.795,-228.472
+ 561.814,-227.464 563.83,-226.312 565.701,-225.304 567.715,-224.152 569.732,-223.144 571.605,-221.992 573.621,-220.84
+ 575.494,-219.688 577.51,-218.537 579.379,-217.528 581.398,-216.376 583.27,-215.224 585.285,-214.072 587.156,-212.776
+ 589.029,-211.625 591.043,-210.472 592.916,-209.32 594.789,-208.168 596.662,-206.873 598.533,-205.72 600.547,-204.568
+ 602.422,-203.272 604.293,-202.121 606.164,-200.824 608.037,-199.528 609.908,-198.376 611.781,-197.081 613.654,-195.785
+ 615.525,-194.632 619.27,-192.041 620.998,-190.744 622.869,-189.448 624.74,-188.152 626.613,-186.856 628.342,-185.56
+ 630.211,-184.264 632.084,-182.968 633.814,-181.528 635.686,-180.232 637.414,-178.936 639.285,-177.497 641.014,-176.201
+ 642.883,-174.904 644.613,-173.464 646.486,-172.168 648.211,-170.728 649.941,-169.289 651.67,-167.992 653.541,-166.552
+ 656.998,-163.672 658.725,-162.376 660.453,-160.936 662.182,-159.497 663.908,-158.056 665.639,-156.617 670.822,-152.296
+ 672.547,-150.856 674.277,-149.272 676.006,-147.833 677.59,-146.392 679.318,-144.808 681.043,-143.369 682.627,-141.928
+ 684.357,-140.344 686.084,-138.904 687.67,-137.32 689.398,-135.88 690.98,-134.296 692.709,-132.712 694.293,-131.272
+ 695.877,-129.688 697.605,-128.104 699.189,-126.52 700.773,-125.081 703.941,-121.912 705.67,-120.328 707.252,-118.744
+ 708.838,-117.16 710.422,-115.576 712.006,-113.85 715.174,-110.682 716.613,-109.098 718.197,-107.514 719.781,-105.785
+ 721.365,-104.201 722.807,-102.617 724.389,-100.888 725.973,-99.304 727.414,-97.576 728.998,-95.992 730.438,-94.266
+ 732.021,-92.537 733.459,-90.953 734.9,-89.224 736.486,-87.497 737.926,-85.912 739.365,-84.184 740.949,-82.457 742.389,-80.728
+ 743.83,-79 752.471,-68.632 753.766,-66.904 755.205,-65.178 756.502,-63.736 "/>
+
+ <polyline id="polyline3231" fill="none" stroke="#00809E" stroke-width="0.3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 11.733,935.188 10.006,934.612 7.989,933.749 5.829,932.886 3.813,932.021 1.798,931.157 -0.362,930.294 -2.379,929.429
+ -4.538,928.563 -6.555,927.556 -10.587,925.829 -12.746,924.821 -14.763,923.956 -16.778,922.948 -18.795,922.085 -20.811,921.077
+ -22.971,920.214 -24.986,919.204 -31.034,916.181 -33.051,915.317 -35.066,914.308 -37.082,913.302 -39.099,912.294
+ -41.114,911.14 -43.131,910.132 -45.003,909.124 -47.019,908.118 -49.034,907.11 -51.051,905.956 -53.066,904.948 -54.938,903.796
+ -56.954,902.788 -58.971,901.638 -60.843,900.63 -62.858,899.478 -64.874,898.47 -66.746,897.317 -68.763,896.165 -70.635,895.013
+ -72.65,893.862 -74.522,892.853 -76.538,891.7 -78.41,890.548 -80.427,889.397 -82.299,888.101 -84.171,886.948 -86.187,885.796
+ -88.059,884.646 -89.931,883.493 -91.803,882.194 -93.675,881.046 -95.69,879.892 -97.563,878.597 -99.435,877.444
+ -101.307,876.149 -103.179,874.853 -105.051,873.7 -106.923,872.403 -108.795,871.11 -110.666,869.956 -114.41,867.364
+ -116.139,866.067 -118.011,864.772 -119.883,863.478 -121.755,862.181 -123.482,860.886 -125.354,859.589 -127.227,858.294
+ -128.954,856.853 -130.826,855.556 -132.555,854.261 -134.427,852.821 -136.154,851.524 -138.026,850.229 -139.755,848.788
+ -141.626,847.493 -143.354,846.054 -145.082,844.612 -146.811,843.317 -148.683,841.878 -150.41,840.438 -152.139,838.997
+ -153.866,837.7 -162.507,830.501 -164.234,829.062 -165.963,827.622 -167.69,826.181 -169.418,824.597 -171.146,823.157
+ -172.73,821.716 -174.458,820.132 -176.187,818.694 -177.771,817.253 -179.498,815.669 -181.225,814.229 -182.809,812.646
+ -184.538,811.204 -186.122,809.622 -187.849,808.038 -189.433,806.597 -191.017,805.013 -192.746,803.429 -194.33,801.845
+ -195.914,800.403 -199.082,797.235 -200.809,795.653 -205.563,790.899 -207.146,789.173 -210.314,786.005 -211.755,784.421
+ -213.339,782.837 -214.923,781.11 -216.507,779.524 -217.946,777.94 -219.53,776.214 -221.114,774.63 -222.555,772.899
+ -224.139,771.317 -225.578,769.589 -227.162,767.862 -228.601,766.278 -230.042,764.55 -231.626,762.821 -233.064,761.235
+ -234.507,759.511 -236.091,757.78 -237.53,756.054 -238.971,754.325 -240.41,752.597 -243.29,749.142 -244.73,747.413
+ -246.171,745.687 -247.608,743.956 -248.906,742.229 -250.347,740.501 -251.498,739.062 "/>
+
+ <path id="path3233" fill="none" stroke="#00809E" stroke-width="0.3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-237.097-288.808h-14.401v14.4 M-251.498,920.788v14.398h14.401 M742.102,935.188h14.4V920.79 M756.502-274.408v-14.4h-14.4
+ M743.83-288.808l2.016,1.728l2.16,1.729l2.158,1.728l2.162,1.729l2.16,1.728l2.016,1.584 M-251.498-278.584l1.872-1.584
+ l2.159-1.728l2.16-1.729l4.32-3.456l2.016-1.728"/>
+ <path id="path3235" fill="none" stroke="#00809E" stroke-width="0.3" d="M496.869,43.11l0.576,0.432l1.584,1.297l1.441,1.298
+ l3.168,2.592l1.439,1.296l1.441,1.439l1.008,0.862 M482.037,31.446l1.297,0.866l1.584,1.296l1.584,1.152l1.584,1.296l1.584,1.149
+ l1.584,1.296l1.584,1.298l0.287,0.286 M466.629,20.358l0.432,0.29l1.588,1.151l1.725,1.15l1.584,1.154l1.729,1.152l1.584,1.149
+ l1.584,1.154l1.295,0.864 M450.789,10.136l1.152,0.72l1.584,1.152l1.729,1.008l1.727,1.008l1.727,1.152l1.584,1.008l1.729,1.151
+ l0.576,0.433 M434.23,0.776l0.287,0.144l1.729,1.009l1.725,0.863l1.729,1.008l1.873,1.009l1.727,1.008l1.729,1.006l1.441,0.866
+ M417.379-7.864l1.01,0.575l1.875,0.862l1.729,0.866l1.871,1.006l1.729,0.866l1.871,0.864l1.729,1.008l0.719,0.43 M400.102-15.496
+ L400.102-15.496l1.871,0.72l1.875,0.864l1.869,0.72l1.877,0.864l1.729,0.861l1.871,0.723l1.729,0.863 M382.389-22.408l1.012,0.287
+ l1.871,0.721l1.871,0.718l1.875,0.722l1.869,0.721l1.877,0.72l1.871,0.718l1.012,0.434 M364.533-28.457l1.729,0.576l1.869,0.721
+ l2.02,0.573l1.873,0.576l1.873,0.722l1.873,0.576l1.873,0.574l0.143,0.146 M346.246-33.496l0.715,0.287l2.02,0.433l1.873,0.575
+ l1.873,0.433l2.016,0.576l1.873,0.575l2.018,0.433l1.15,0.43 M327.813-37.672l1.586,0.286l2.016,0.434l1.871,0.433l2.016,0.432
+ l1.875,0.433l2.016,0.432l2.016,0.576h0.291 M309.094-40.984l0.576,0.144l2.016,0.288l2.016,0.286l1.873,0.434l2.018,0.288
+ l2.016,0.288l1.873,0.433l1.441,0.142 M290.373-43.289l1.443,0.145l2.016,0.288l1.871,0.144l2.016,0.288l2.016,0.288l2.02,0.145
+ l2.016,0.287l0.576,0.145 M271.365-44.584h2.451l2.016,0.145l2.016,0.144l2.016,0.145l1.871,0.144l2.02,0.145l1.727,0.144
+ M252.502-45.16h5.326l2.018,0.144h3.885l2.02,0.144h0.863"/>
+ <path id="path3237" fill="none" stroke="#00809E" stroke-width="0.3" d="M572.324,127.494l0.434,0.576l1.15,1.728l1.008,1.584
+ l1.152,1.729l1.008,1.729l1.008,1.729l1.154,1.582l0.717,1.151 M561.67,111.942l0.863,1.296l2.305,3.168l1.152,1.728l1.148,1.587
+ l1.152,1.726l1.152,1.584l0.289,0.432 M550.006,96.965l0.287,0.289l1.297,1.584l1.291,1.584l1.154,1.584l1.297,1.586l1.152,1.582
+ l1.293,1.586l0.865,1.296 M537.766,82.568l0.861,1.006l1.443,1.442l1.295,1.438l2.592,3.168l1.295,1.442l1.293,1.584l0.436,0.576
+ M524.807,68.742l1.15,1.154l1.875,1.872l1.293,1.438l1.441,1.442l1.441,1.438l1.295,1.44l1.15,1.441 M511.127,55.64l1.439,1.149
+ l1.441,1.296l1.439,1.44l1.438,1.441l1.443,1.297l1.873,1.872l1.152,1.149"/>
+
+ <path id="path3239" fill="none" stroke="#00809E" stroke-width="0.3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M626.758,417.655v0.287l-0.434,1.873l-0.867,4.033l-0.43,1.877l-0.576,2.012l-0.432,1.873l-0.432,1.725 M630.211,399.077
+ l-0.141,1.152l-0.289,1.873l-0.432,2.018l-0.289,2.016l-0.289,2.016l-0.432,1.873l-0.434,2.018l-0.143,0.863 M632.807,380.214
+ v0.143l-0.143,2.018l-0.291,1.871l-0.289,2.018l-0.143,2.016l-0.576,4.037l-0.289,1.869 M634.389,361.351v1.008l-0.141,2.02
+ l-0.432,6.043l-0.145,1.877l-0.145,2.018l-0.146,1.148 M635.252,342.487l-0.143,1.871v4.031l-0.146,2.016v2.016l-0.139,1.873v2.16
+ M634.963,323.479v0.863l0.146,2.016v3.887l0.143,2.018v5.328 M633.814,304.614l0.141,1.729l0.145,2.016l0.145,1.872l0.141,2.016
+ l0.145,2.017l0.145,2.016v2.448 M631.654,285.75l0.139,0.576l0.291,2.017l0.146,2.016l0.574,4.032l0.143,1.872l0.291,2.016
+ l0.139,1.44 M628.773,267.174l0.143,1.439l0.434,1.872l0.576,4.032l0.432,1.872l0.576,4.031l0.143,0.576 M624.74,248.598v0.288
+ l0.578,2.016l0.43,2.016l0.434,1.872l0.432,2.017l0.43,1.872l0.438,2.016l0.287,1.584 M619.846,230.31l0.432,1.151l0.432,2.017
+ l0.576,1.872l0.576,2.016l0.432,1.872l0.576,1.872l0.434,2.016l0.289,0.721 M614.084,212.31l0.146,0.144l0.574,1.872l0.572,1.872
+ l0.723,1.872l0.576,1.872l0.574,2.016l0.719,1.872l0.574,1.729 M607.459,194.454l0.434,1.008l0.721,1.872l0.719,1.872l0.721,1.872
+ l1.441,3.744l0.715,1.872l0.293,1.008 M599.973,177.174l0.867,1.728l0.717,1.874l0.867,1.726l0.863,1.872l0.721,1.872l0.863,1.872
+ l0.721,1.872 M591.479,160.184l0.43,0.718l1.008,1.728l0.865,1.872l0.867,1.73l1.008,1.872l0.863,1.726l0.861,1.872l0.578,1.008
+ M582.406,143.622l0.863,1.442l1.008,1.726l1.008,1.729l1.008,1.874l1.01,1.726l0.863,1.729l1.01,1.728l0.145,0.288"/>
+
+ <path id="path3241" fill="none" stroke="#00809E" stroke-width="0.3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M587.014,523.638l-0.432,0.719l-1.01,1.873l-2.018,3.457l-1.01,1.727l-1.006,1.729l-1.008,1.729l-0.576,0.863 M595.795,506.935
+ l-0.717,1.582l-1.008,1.73l-0.865,1.873l-0.863,1.727l-1.01,1.727l-0.863,1.873l-1.012,1.727l-0.139,0.145 M603.715,489.653
+ l-0.285,0.721l-0.721,1.727l-0.863,1.873l-0.865,1.873l-0.719,1.727l-0.863,1.873l-0.867,1.875l-0.576,1.15 M610.916,472.085
+ l-0.574,1.586l-0.721,1.873l-0.719,1.727l-0.865,1.873l-2.16,5.617l-0.143,0.432 M617.109,454.229l-0.146,0.434l-0.715,1.873
+ l-0.576,2.018l-0.576,1.867l-0.721,1.877l-0.717,1.869l-0.578,1.877l-0.574,1.443 M622.438,436.085l-0.432,1.297l-0.576,1.871
+ l-0.432,2.018l-0.576,1.873l-0.576,2.016l-1.152,3.746l-0.146,0.719"/>
+ <path id="path3243" fill="none" stroke="#00809E" stroke-width="0.3" d="M391.174,694.421l-0.863,0.434l-1.875,0.719l-2.016,0.721
+ l-1.877,0.576l-1.869,0.717l-1.873,0.721l-1.873,0.576l-1.008,0.432 M408.598,687.077l-1.729,0.863l-1.729,0.721l-1.871,0.863
+ l-1.871,0.721l-1.875,0.865l-1.871,0.719l-1.875,0.721h-0.143 M425.732,679.013l-0.719,0.291l-1.729,1.008l-1.871,0.863
+ l-1.729,0.867l-1.871,0.861l-1.729,0.865l-1.875,0.867l-1.15,0.576 M442.438,669.94l-1.439,0.867l-1.873,1.008l-1.727,1.008
+ l-1.729,0.865l-1.729,1.008l-1.729,1.008l-1.871,0.867l-0.289,0.143 M458.709,660.294l-0.578,0.287l-1.723,1.008l-1.729,1.008
+ l-1.729,1.152l-1.584,1.008l-1.727,1.008l-1.729,1.008l-1.295,0.721 M474.262,649.638l-1.152,0.865l-1.73,1.15l-1.584,1.152
+ l-1.582,1.152l-1.725,1.008l-1.729,1.152l-1.584,1.15l-0.434,0.289 M489.525,638.263l-0.432,0.289l-1.584,1.152l-1.584,1.293
+ l-1.584,1.152l-1.584,1.295l-1.584,1.15l-1.584,1.152l-1.297,1.008 M504.068,626.165l-1.008,0.867l-1.582,1.293l-1.443,1.297
+ l-1.584,1.295l-1.439,1.295l-1.584,1.293l-1.584,1.297l-0.576,0.43 M518.037,613.349l-0.145,0.146l-1.439,1.439l-1.439,1.295
+ l-1.441,1.441l-1.582,1.295l-1.445,1.438l-1.438,1.299l-1.439,1.15 M531.285,599.958l-0.287,0.289l-1.297,1.439l-4.752,4.752
+ l-1.873,1.873l-1.582,1.584 M543.957,585.847l-0.863,0.865l-1.299,1.584l-1.291,1.584l-1.443,1.441l-1.293,1.439l-1.295,1.582
+ l-1.295,1.443l-0.576,0.572 M555.908,571.013l-0.143,0.145l-1.295,1.586l-1.15,1.582l-1.297,1.586l-1.295,1.584l-1.152,1.584
+ l-1.295,1.584l-1.152,1.439 M566.998,555.751l-0.576,0.863l-1.152,1.727l-1.152,1.586l-1.154,1.727l-1.291,1.582l-2.305,3.168
+ l-0.576,0.723 M577.365,539.911l-2.016,3.457l-1.152,1.727l-1.154,1.584l-1.006,1.725l-1.154,1.586l-1.148,1.729"/>
+
+ <path id="path3245" fill="none" stroke="#00809E" stroke-width="0.3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M149.542,706.374l-1.297-0.436l-2.016-0.43l-1.872-0.576l-1.872-0.578l-2.016-0.574l-1.872-0.574l-1.872-0.723l-0.72-0.143
+ M167.829,710.981h-0.144l-2.016-0.432l-2.017-0.576l-1.872-0.432l-2.016-0.434l-1.872-0.576l-2.016-0.432l-1.729-0.578
+ M186.405,714.726l-1.151-0.145l-1.872-0.432l-2.017-0.287l-2.016-0.434l-1.872-0.434l-2.016-0.289l-2.017-0.428l-0.863-0.143
+ M205.126,717.462L205.126,717.462l-2.017-0.145l-2.016-0.287l-1.872-0.291l-2.017-0.287l-2.016-0.291l-2.016-0.287l-2.017-0.291
+ M223.989,719.333h-0.863l-2.017-0.145l-2.016-0.141l-2.017-0.291l-2.016-0.143l-2.016-0.143l-2.017-0.291l-1.008-0.141
+ M242.854,720.341h-1.728l-2.017-0.145h-2.016l-2.017-0.141l-2.016-0.145h-2.016l-2.017-0.145h-0.144 M261.861,720.341h-2.732
+ l-2.02,0.145h-9.359 M280.727,719.333l-1.586,0.145l-2.012,0.145l-2.02,0.141l-2.016,0.145l-2.02,0.145h-2.016l-1.871,0.141h-0.432
+ M299.59,717.462l-0.576,0.141l-1.873,0.291l-2.016,0.145l-2.018,0.287l-2.016,0.145l-2.018,0.287l-2.016,0.143l-1.441,0.146
+ M318.313,714.726l-1.443,0.287l-1.871,0.291l-2.018,0.287l-2.02,0.434l-2.014,0.289l-1.873,0.287l-2.016,0.291l-0.574,0.145
+ M336.883,711.126h-0.285l-2.016,0.432l-1.875,0.432l-2.016,0.432l-2.016,0.289l-1.871,0.434l-2.02,0.432l-1.727,0.291
+ M355.316,706.374l-1.295,0.287l-1.873,0.574l-1.873,0.578l-2.016,0.432l-1.873,0.576l-2.018,0.434l-1.871,0.432l-0.865,0.289
+ M373.318,700.899L373.318,700.899l-2.02,0.578l-1.871,0.717l-1.875,0.576l-1.871,0.576l-2.016,0.578l-1.877,0.576l-1.869,0.574"/>
+ <path id="path3247" fill="none" stroke="#00809E" stroke-width="0.3" d="M-72.65,539.765l-0.576-1.006l-1.152-1.586l-1.008-1.727
+ l-1.008-1.727l-1.008-1.729l-1.008-1.727l-1.008-1.727l-0.433-0.721 M-62.282,555.606L-62.282,555.606l-1.152-1.727l-1.152-1.584
+ l-1.151-1.725l-1.008-1.588l-2.305-3.457l-1.008-1.584 M-51.051,571.013l-0.575-0.863l-1.297-1.582l-1.151-1.586l-1.152-1.584
+ l-1.296-1.584l-1.152-1.727l-1.151-1.586l-0.576-0.863 M-39.099,585.702l-1.296-1.441l-2.592-3.168l-1.296-1.443l-1.152-1.582
+ l-1.296-1.586l-1.296-1.582v-0.143 M-26.57,599.813l-0.576-0.578l-1.296-1.438l-1.296-1.584l-1.44-1.443l-1.296-1.439l-1.296-1.582
+ l-2.304-2.305 M-13.179,613.206l-0.288-0.145l-1.872-1.875l-2.016-1.871l-1.872-1.873l-1.872-2.016l-1.872-1.873l-0.144-0.289
+ M0.646,626.165l-0.864-0.863l-1.439-1.439l-1.584-1.297l-1.44-1.295l-1.439-1.441l-1.584-1.293l-1.44-1.297l-0.576-0.574
+ M15.334,638.118h-0.145l-1.584-1.297l-1.584-1.297l-1.584-1.148l-1.439-1.295l-1.585-1.295l-1.584-1.297l-1.439-1.297
+ M30.453,649.493l-0.863-0.574l-1.584-1.154l-1.729-1.148l-1.584-1.295l-1.584-1.154l-1.584-1.152l-1.584-1.293l-0.72-0.576
+ M46.149,660.149l-1.584-1.008l-1.728-1.152l-1.729-1.15l-1.584-1.01l-1.728-1.15l-1.584-1.154l-1.729-1.148 M62.277,669.94
+ l-0.72-0.43l-1.729-1.008l-1.728-1.01l-1.729-1.01l-1.728-1.006l-1.728-1.008l-1.584-1.152l-1.009-0.576 M78.981,678.87
+ l-1.584-0.721l-1.728-1.008l-1.729-0.863l-1.872-0.865l-1.728-1.01l-1.729-1.006l-1.728-0.865l-0.288-0.143 M96.117,687.077
+ l-0.575-0.287l-1.872-0.723l-1.872-0.861l-1.729-0.867l-1.872-0.863l-1.728-0.865l-1.872-0.865l-1.296-0.576 M113.542,694.421
+ l-1.44-0.574l-1.872-0.719l-1.872-0.721l-1.872-0.863l-1.728-0.721l-1.872-0.719l-1.872-0.865l-0.432-0.143 M131.397,700.757
+ l-0.432-0.143l-1.872-0.574l-1.872-0.576l-2.017-0.721l-1.871-0.719l-1.872-0.576l-1.872-0.719l-1.44-0.576"/>
+ <path id="path3249" fill="none" stroke="#00809E" stroke-width="0.3" d="M-114.986,230.166l1.152-3.743l0.575-2.017l1.152-3.744
+ l0.72-1.872l0.576-2.014 M-119.883,248.454l0.288-0.863l0.433-1.872l0.432-2.017l0.576-1.872l0.432-2.016l1.152-3.744l0.288-1.152
+ M-123.771,267.03l0.288-1.728l0.432-2.017l0.433-1.872l0.288-2.016l0.432-2.017l0.432-1.871l0.433-2.017v-0.288 M-126.938,285.606
+ l0.144-0.576l0.288-2.016l0.288-1.872l0.288-2.017l0.433-2.016l0.287-2.016l0.288-1.872l0.288-1.44 M-128.954,304.47l0.144-1.44
+ l0.145-2.016l0.287-2.017l0.145-2.016l0.288-2.017l0.144-2.016l0.288-1.872l0.145-0.576 M-130.106,323.335v-0.434l0.144-1.871
+ v-2.016l0.576-8.065l0.145-1.584 M-130.395,342.343v-9.359l0.145-2.018v-2.736 M-129.675,361.206v-0.141l-0.144-2.02v-2.016
+ l-0.288-4.031v-2.016l-0.144-2.018v-1.729 M-127.946,380.069l-0.433-3.023l-0.287-4.033l-0.288-2.018l-0.288-4.031v-0.865
+ M-125.498,398.935l-1.152-8.063l-0.288-1.877l-0.288-2.012l-0.144-2.018 M-122.042,417.511l-0.145-0.863l-0.432-2.018
+ l-0.288-2.018l-0.433-1.871l-0.432-2.016l-0.288-2.018l-0.432-1.873l-0.145-1.152 M-117.435,435.942l-0.576-1.727l-0.432-2.016
+ l-0.576-1.877l-0.432-2.012l-0.433-1.875l-0.575-2.016l-0.433-2.02v-0.141 M-112.25,454.085l-0.145-0.717l-0.72-1.873l-0.576-1.873
+ l-0.576-2.018l-1.151-3.742l-0.433-2.018l-0.432-1.295 M-106.059,471.942l-0.576-1.443l-0.72-1.869l-0.576-1.873l-0.72-1.871
+ l-0.72-2.018l-0.576-1.877l-0.576-1.869l-0.144-0.434 M-99.003,489.509l-0.144-0.43l-0.864-1.873l-0.72-1.875l-0.72-1.727
+ l-0.864-1.873l-1.44-3.744l-0.575-1.439 M-91.082,506.79l-0.576-1.295l-0.864-1.873l-0.864-1.729l-0.863-1.873l-0.864-1.727
+ l-0.864-1.875l-0.72-1.871l-0.288-0.576 M-82.299,523.495l-1.008-2.018l-2.016-3.457l-0.864-1.873l-0.864-1.729l-1.008-1.727
+ l-0.72-1.584"/>
+ <path id="path3251" fill="none" stroke="#00809E" stroke-width="0.3" d="M70.773,0.776l0.72-0.432l1.872-1.009l1.729-0.863
+ l1.728-1.009L78.693-3.4l1.729-0.866l1.728-1.006l1.008-0.433 M54.357,10.136l1.44-1.009l1.728-1.008l1.729-1.01l1.728-1.006
+ l3.456-2.016l1.872-0.864l0.144-0.146 M38.373,20.358l0.576-0.43l1.584-1.152l1.729-1.008l1.728-1.154l1.584-1.15l1.729-1.008
+ l1.728-1.01l1.152-0.718 M22.966,31.304l1.296-1.009l1.584-1.151l1.584-1.154l1.584-1.149l1.728-1.152l1.584-1.154l1.584-1.15
+ l0.433-0.287 M7.989,42.967l0.433-0.287l1.584-1.297l1.584-1.151l1.439-1.296l1.584-1.296l1.584-1.154l1.584-1.294l1.152-1.008
+ M-6.267,55.494l1.008-1.008l1.584-1.294l1.44-1.296l1.439-1.442l1.584-1.296l1.44-1.296l1.584-1.294l0.432-0.432 M-19.803,68.6
+ l0.145-0.146l1.872-2.014l1.872-1.872l2.016-1.874l1.44-1.294l1.439-1.442l1.296-1.149 M-32.763,82.422l1.152-1.438l1.296-1.442
+ l1.44-1.438l1.296-1.442l1.439-1.584l1.296-1.438l1.44-1.442l0.144-0.142 M-45.146,96.822l0.432-0.576l2.593-3.168l1.296-1.438
+ l1.296-1.584l1.296-1.442l1.296-1.584l0.864-1.006 M-56.666,111.797l1.008-1.296l2.304-3.168l1.296-1.584l1.152-1.584l1.296-1.584
+ l1.152-1.584l0.287-0.288 M-67.467,127.352l0.288-0.435l1.152-1.584l1.152-1.726l1.008-1.73l2.304-3.168l1.152-1.726l0.863-1.154
+ M-77.402,143.48l0.72-1.296l1.008-1.73l1.009-1.726l1.008-1.584l1.151-1.73l1.009-1.726l1.008-1.73l0.288-0.432 M-86.618,160.038
+ l0.144-0.288l0.864-1.872l2.016-3.455l0.864-1.729l1.008-1.729l1.008-1.871l0.864-1.44 M-95.114,177.03l0.576-1.152l0.863-1.871
+ l0.864-1.729l0.864-1.872l0.864-1.728l0.863-1.87l1.008-1.73l0.288-0.72 M-102.458,194.454v-0.144l1.439-3.742l0.864-1.874
+ l0.72-1.872l0.864-1.872l0.72-1.728l0.864-1.729 M-109.227,212.166l0.432-1.008l0.576-1.872l1.44-3.744l0.576-1.871l0.72-2.017
+ l0.72-1.872l0.433-0.864"/>
+ <path id="path3253" fill="none" stroke="#00809E" stroke-width="0.3" d="M229.894,337.591h22.608 M252.502,373.88v0.432
+ M252.502,337.591v22.607 M275.828,337.591h-23.326 M252.502,337.591v-23.042 M233.638-44.728h0.72l2.016-0.145h2.017l2.016-0.144
+ h4.032l2.016-0.144h1.152 M214.63-43.289l1.728-0.144l2.016-0.144l2.017-0.288l2.016-0.145l2.017-0.144l2.016-0.145l2.016-0.144
+ h0.288 M195.909-40.84l0.576-0.144l2.017-0.288l2.016-0.288l2.016-0.29l1.872-0.286l2.017-0.288l2.016-0.144l1.44-0.145
+ M177.189-37.672l1.584-0.288l1.872-0.432l2.016-0.29l2.017-0.43l1.872-0.288l2.016-0.433l2.017-0.288h0.432 M158.758-33.496
+ l0.432-0.146l1.872-0.43l2.016-0.435l1.872-0.574l2.017-0.434l2.016-0.43l1.872-0.433l1.584-0.288 M140.47-28.312l1.296-0.432
+ l1.872-0.576l2.016-0.576l1.872-0.578l2.017-0.576l1.871-0.574l1.872-0.434l0.721-0.288 M122.613-22.408l0.145-0.146l1.872-0.574
+ l1.872-0.722l1.871-0.718l2.017-0.576l1.872-0.578l1.872-0.718l1.728-0.576 M104.901-15.642l1.008-0.43l1.872-0.721l1.872-0.722
+ l1.872-0.718l1.872-0.721l1.872-0.722l1.872-0.718l0.864-0.29 M87.621-7.864L87.621-7.864l1.872-0.864l1.729-0.866l1.872-0.862
+ l1.872-0.722l1.728-0.862l1.872-0.863l1.872-0.721"/>
+
+ <polyline id="polyline3255" fill="none" stroke="#00809E" stroke-width="0.3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -251.498,337.733 -249.339,337.733 -247.755,337.591 -244.154,337.591 "/>
+ <path id="path3257" fill="none" stroke="#00809E" stroke-width="0.3" d="M206.71,311.238l-5.473-3.168l-2.88-1.584l-2.88-1.728
+ l-2.88-1.584l-2.736-1.729l-5.76-3.168l-2.88-1.729l-2.736-1.584l-2.88-1.728l-5.76-3.168l-2.736-1.728l-2.88-1.584l-2.88-1.729
+ l-2.88-1.584l-2.736-1.584l-2.88-1.728l-2.88-1.585l-2.88-1.728l-2.736-1.584l-2.88-1.584l-2.88-1.728l-2.736-1.584l-2.88-1.729
+ l-5.76-3.168l-2.736-1.728l-5.76-3.169l-2.736-1.728l-2.88-1.584l-2.88-1.728l-2.88-1.584l-2.736-1.584l-2.88-1.729l-2.88-1.584
+ l-2.736-1.584l-2.88-1.728l-2.88-1.585l-2.736-1.584l-2.88-1.728l-2.88-1.584l-2.735-1.728l-5.761-3.168l-2.735-1.729l-5.761-3.168
+ l-2.735-1.729l-5.761-3.168l-2.735-1.728l-2.88-1.584l-2.736-1.584l-2.88-1.728l-2.88-1.584l-2.736-1.584l-2.88-1.729l-2.736-1.584
+ l-5.76-3.168l-2.736-1.729l-2.88-1.584l-2.735-1.584l-2.88-1.728l-2.736-1.584l-2.88-1.584l-2.88-1.728l-2.736-1.584l-2.88-1.584
+ l-2.736-1.584l-2.88-1.729l-2.736-1.584l-2.88-1.584l-2.735-1.729l-2.88-1.584l-2.736-1.584l-2.88-1.584l-2.736-1.728l-2.88-1.584
+ l-2.736-1.584l-2.88-1.584l-2.735-1.728l-2.881-1.584l-2.735-1.584l-2.88-1.585l-2.736-1.584l-2.736-1.728l-2.88-1.582
+ l-2.736-1.584l-2.88-1.584l-2.735-1.73l-2.88-1.584l-5.473-3.168l-2.88-1.584l-2.736-1.726l-2.88-1.584l-5.472-3.168l-2.88-1.584
+ l-2.736-1.584l-2.735-1.73l-2.881-1.584l-5.472-3.168l-2.88-1.584l-5.472-3.168l-2.736-1.726l-2.88-1.584l-8.208-4.752l-2.88-1.586
+ l-5.473-3.168l-2.735-1.729l-2.88-1.584l-10.944-6.336l-2.88-1.584l-16.416-9.504l-2.88-1.584l-2.734-1.584l-2.738-1.584
+ l-2.735-1.582l-2.734-1.584l-5.474-3.168l-2.734-1.584l-5.474-3.168l-2.734-1.584l-5.474-3.168l-2.734-1.584l-5.474-3.168
+ l-2.734-1.584l-16.418-9.504l-1.439-0.864 M-217.082,337.591h416.447"/>
+
+ <path id="path3259" fill="none" stroke="#00809E" stroke-width="0.3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-109.227-288.808l1.152,2.16l1.584,2.592l1.584,2.736l0.144,0.287 M-244.011,51.03l-2.304-1.296l-2.736-1.584l-2.447-1.438"/>
+ <polyline id="polyline3261" fill="none" stroke="#00809E" stroke-width="0.3" points="-98.858,-270.665 -97.418,-268.216
+ -95.834,-265.48 -94.25,-262.888 -92.811,-260.296 -91.227,-257.56 -89.643,-254.968 -88.202,-252.232 -86.618,-249.64
+ -85.179,-246.904 -83.595,-244.312 -82.011,-241.576 -80.57,-238.984 -78.986,-236.392 -75.818,-230.92 -74.379,-228.328
+ -72.795,-225.592 -71.211,-223 -69.771,-220.264 -68.187,-217.672 -65.019,-212.201 -63.578,-209.608 -61.994,-206.873
+ -60.41,-204.28 -58.826,-201.544 -57.387,-198.808 -55.803,-196.216 -51.051,-188.008 -49.61,-185.417 -44.858,-177.208
+ -43.274,-174.617 -41.69,-171.88 -40.25,-169.144 -38.666,-166.408 -37.082,-163.816 -29.162,-150.136 -27.723,-147.4
+ -26.139,-144.808 10.294,-81.88 11.878,-79 13.462,-76.266 16.63,-70.792 18.214,-68.058 21.382,-62.584 22.966,-59.705
+ 29.302,-48.762 30.886,-45.88 32.613,-43.144 35.781,-37.672 37.365,-34.792 38.949,-32.058 40.533,-29.32 42.117,-26.586
+ 43.701,-23.705 45.43,-20.97 48.598,-15.496 50.182,-12.617 53.35,-7.144 54.934,-4.266 56.661,-1.528 58.245,1.208 59.829,4.088
+ 61.413,6.822 62.998,9.56 64.582,12.44 66.31,15.176 67.894,18.056 71.062,23.526 72.646,26.406 74.373,29.144 75.958,32.024
+ 77.542,34.76 79.126,37.64 80.854,40.374 82.438,43.11 84.021,45.99 85.605,48.728 87.189,51.608 88.918,54.344 90.502,57.224
+ 92.086,59.958 93.67,62.838 95.397,65.574 96.981,68.454 98.565,71.192 100.149,74.07 101.878,76.808 103.462,79.688
+ 105.046,82.422 106.773,85.304 108.357,88.038 109.941,90.917 111.525,93.654 113.254,96.534 114.838,99.414 116.422,102.15
+ 118.149,105.03 119.733,107.768 121.317,110.648 123.046,113.381 126.214,119.144 127.798,121.877 129.525,124.758
+ 131.109,127.494 132.693,130.374 134.422,133.254 136.006,135.99 137.59,138.87 139.317,141.608 142.485,147.366 144.214,150.104
+ 147.382,155.862 149.109,158.6 152.277,164.358 154.006,167.094 155.59,169.974 157.317,172.854 158.901,175.59 160.485,178.47
+ 162.214,181.35 163.798,184.085 165.382,186.965 167.109,189.846 168.693,192.582 170.277,195.461 172.006,198.342 173.59,201.222
+ 175.317,203.958 178.485,209.717 180.214,212.454 183.382,218.213 185.109,221.094 186.693,223.83 188.422,226.709 190.006,229.59
+ 191.59,232.326 193.317,235.206 194.901,238.085 196.63,240.965 198.214,243.702 199.798,246.582 201.525,249.461 203.109,252.342
+ 204.838,255.078 208.006,260.837 209.733,263.718 211.317,266.454 213.046,269.333 216.214,275.094 217.941,277.83
+ 219.525,280.709 221.254,283.59 222.838,286.47 224.422,289.206 225.718,291.366 "/>
+ <line id="line3263" fill="none" stroke="#00809E" stroke-width="0.3" x1="252.502" y1="284.31" x2="252.502" y2="-271.384"/>
+
+ <path id="path3265" fill="none" stroke="#00809E" stroke-width="0.3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M614.084-288.808l-1.15,2.16l-1.584,2.592l-1.584,2.736l-0.287,0.432 M252.502-281.608v-7.2"/>
+ <polyline id="polyline3267" fill="none" stroke="#00809E" stroke-width="0.3" points="603.572,-270.52 602.277,-268.216
+ 600.693,-265.48 599.109,-262.888 597.67,-260.296 596.084,-257.56 594.502,-254.968 593.061,-252.232 591.479,-249.64
+ 590.037,-246.904 588.453,-244.312 586.869,-241.576 585.43,-238.984 583.846,-236.392 580.678,-230.92 579.238,-228.328
+ 577.654,-225.592 576.068,-223 574.627,-220.264 573.043,-217.672 571.459,-214.936 569.877,-212.201 568.438,-209.608
+ 566.854,-206.873 565.27,-204.28 563.686,-201.544 562.246,-198.808 560.662,-196.216 559.076,-193.48 557.494,-190.744
+ 555.908,-188.008 554.471,-185.417 552.883,-182.68 551.303,-179.944 549.715,-177.208 548.131,-174.617 546.547,-171.88
+ 545.109,-169.144 543.525,-166.408 541.941,-163.816 534.021,-150.136 532.582,-147.4 530.998,-144.808 524.662,-133.864
+ 523.076,-131.128 521.494,-128.392 519.908,-125.656 513.572,-114.712 511.99,-111.976 510.406,-109.24 508.822,-106.506
+ 505.654,-101.033 504.068,-98.296 502.486,-95.56 500.9,-92.824 499.318,-90.09 494.564,-81.88 492.98,-79 488.23,-70.792
+ 485.061,-65.32 483.479,-62.584 481.893,-59.705 480.311,-56.968 478.725,-54.232 475.557,-48.762 473.973,-45.88 472.246,-43.144
+ 470.662,-40.408 469.076,-37.672 467.494,-34.792 465.908,-32.058 464.324,-29.32 462.74,-26.586 461.156,-23.705 459.43,-20.97
+ 456.262,-15.496 454.678,-12.617 451.51,-7.144 449.926,-4.266 448.197,-1.528 446.613,1.208 445.029,4.088 443.445,6.822
+ 441.861,9.56 440.277,12.44 438.547,15.176 436.963,18.056 433.795,23.526 432.213,26.406 430.486,29.144 428.9,32.024
+ 427.318,34.76 425.732,37.64 424.006,40.374 422.422,43.11 420.838,45.99 419.254,48.728 417.67,51.608 415.941,54.344
+ 414.357,57.224 412.773,59.958 411.189,62.838 409.461,65.574 407.877,68.454 406.293,71.192 404.709,74.07 402.98,76.808
+ 401.398,79.688 399.814,82.422 398.086,85.304 396.502,88.038 394.918,90.917 393.334,93.654 391.605,96.534 390.021,99.414
+ 388.438,102.15 386.709,105.03 385.127,107.768 383.541,110.648 381.814,113.381 378.646,119.144 377.061,121.877 375.334,124.758
+ 373.75,127.494 372.166,130.374 370.438,133.254 368.854,135.99 367.27,138.87 365.541,141.608 362.373,147.366 360.645,150.104
+ 359.063,152.984 357.477,155.862 355.75,158.6 352.582,164.358 350.854,167.094 349.27,169.974 347.543,172.854 345.957,175.59
+ 344.373,178.47 342.645,181.35 341.063,184.085 339.477,186.965 337.75,189.846 336.166,192.582 334.582,195.461 332.854,198.342
+ 331.27,201.222 329.543,203.958 326.373,209.717 324.645,212.454 323.063,215.333 321.477,218.213 319.75,221.094 318.166,223.83
+ 316.438,226.709 314.854,229.59 313.27,232.326 311.543,235.206 309.957,238.085 308.23,240.965 306.645,243.702 305.063,246.582
+ 303.334,249.461 301.75,252.342 300.021,255.078 296.854,260.837 295.129,263.718 293.543,266.454 291.813,269.333
+ 288.645,275.094 286.918,277.83 285.334,280.709 283.605,283.59 282.021,286.47 280.438,289.206 279.141,291.366 "/>
+ <polyline id="polyline3269" fill="none" stroke="#00809E" stroke-width="0.3" points="299.014,310.806 300.883,309.654
+ 303.621,308.07 306.502,306.486 309.379,304.758 312.262,303.174 314.998,301.446 320.758,298.278 323.641,296.549
+ 326.373,294.965 329.254,293.238 332.133,291.654 335.014,290.07 337.75,288.342 340.629,286.758 343.51,285.03 346.391,283.446
+ 349.129,281.862 352.006,280.134 354.883,278.549 357.766,276.822 360.502,275.238 363.379,273.654 366.262,271.926
+ 368.998,270.342 371.877,268.614 377.639,265.446 380.373,263.718 383.254,262.134 386.131,260.549 388.869,258.822
+ 391.75,257.238 394.629,255.51 397.51,253.926 400.246,252.342 403.127,250.614 406.006,249.03 408.74,247.446 411.621,245.718
+ 414.502,244.133 417.238,242.549 420.117,240.822 422.998,239.238 425.732,237.51 428.613,235.926 431.494,234.342 434.23,232.614
+ 439.99,229.446 442.725,227.717 445.605,226.133 448.486,224.549 451.223,222.822 454.102,221.238 456.838,219.654
+ 459.715,217.926 462.598,216.342 465.334,214.758 468.213,213.03 470.949,211.446 476.709,208.278 479.445,206.549
+ 482.324,204.965 485.061,203.381 487.941,201.654 490.678,200.07 493.557,198.486 496.438,196.758 499.174,195.174 502.055,193.59
+ 504.789,192.006 507.67,190.278 510.406,188.694 513.285,187.11 516.021,185.381 518.9,183.797 521.639,182.213 524.518,180.629
+ 527.252,178.902 530.131,177.318 532.869,175.734 535.75,174.15 538.486,172.422 541.365,170.838 544.102,169.254 546.98,167.669
+ 549.715,166.085 552.453,164.358 555.334,162.776 558.068,161.192 560.949,159.608 563.686,157.877 566.564,156.293
+ 569.303,154.709 572.037,153.125 574.916,151.542 577.654,149.816 580.533,148.232 586.006,145.064 588.883,143.48
+ 591.621,141.896 594.357,140.166 597.238,138.582 599.973,136.998 602.709,135.414 605.59,133.83 608.324,132.246 611.061,130.662
+ 613.795,128.936 616.678,127.352 619.414,125.768 622.148,124.184 624.883,122.6 627.766,121.014 633.238,117.846 635.973,116.118
+ 638.854,114.534 641.59,112.95 644.324,111.366 649.795,108.198 652.678,106.614 655.414,105.03 658.148,103.446 660.883,101.862
+ 663.621,100.278 669.094,97.11 671.973,95.526 674.709,93.942 677.445,92.358 680.182,90.776 682.916,89.192 685.654,87.608
+ 688.389,86.024 691.125,84.44 699.334,79.688 702.068,78.104 704.807,76.52 713.014,71.768 715.748,70.184 718.486,68.6
+ 729.43,62.264 732.164,60.68 733.174,60.104 "/>
+
+ <path id="path3271" fill="none" stroke="#00809E" stroke-width="0.3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M756.502,337.591h-7.346 M748.438,51.318L748.438,51.318l2.736-1.584l2.734-1.584l2.594-1.438"/>
+ <path id="path3273" fill="none" stroke="#00809E" stroke-width="0.3" d="M298.438,364.229l2.445,1.441l2.738,1.582l2.881,1.586
+ l2.877,1.73l2.881,1.582l2.736,1.729l2.877,1.582l2.881,1.584l2.879,1.727l2.734,1.584l2.881,1.729l2.875,1.582l2.883,1.586
+ l2.736,1.727l2.877,1.586l2.881,1.727l2.879,1.584l2.736,1.584l2.877,1.727l2.877,1.584l2.883,1.725l2.736,1.586l2.875,1.586
+ l2.883,1.727l2.736,1.586l2.877,1.727l5.762,3.168l2.734,1.727l2.881,1.584l2.875,1.584l2.738,1.727l2.881,1.586l2.877,1.727
+ l2.881,1.586l2.734,1.582l2.881,1.729l2.879,1.584l2.732,1.584l2.881,1.727l2.879,1.584l2.736,1.584l2.879,1.725l2.879,1.586
+ l2.734,1.73l2.881,1.582l2.879,1.586l2.736,1.727l5.76,3.168l2.734,1.727l2.881,1.584l2.879,1.584l2.736,1.727l2.879,1.586
+ l2.734,1.582l2.877,1.73l2.881,1.582l2.736,1.586l2.879,1.727l2.736,1.584l5.76,3.168l2.736,1.727l2.877,1.584l2.736,1.584
+ l2.881,1.729l2.734,1.582l2.879,1.586l2.881,1.729l2.734,1.582l2.881,1.584l2.734,1.584l2.879,1.729l2.736,1.584l2.879,1.584
+ l2.734,1.727l2.879,1.584l2.738,1.584l2.877,1.584l2.734,1.727l2.879,1.584l2.738,1.584l2.879,1.584l2.736,1.729l2.879,1.584
+ l2.734,1.584l2.879,1.584l2.734,1.582l2.738,1.73l2.879,1.584l2.734,1.584l2.879,1.584l2.736,1.727l2.879,1.586l2.738,1.582
+ l2.734,1.586l2.877,1.584l2.738,1.725l2.877,1.586l5.473,3.168l2.877,1.584l2.738,1.584l2.734,1.725l2.881,1.586l2.734,1.582
+ l2.736,1.586l2.879,1.584l2.734,1.584l2.736,1.584l2.734,1.729l2.881,1.584l2.736,1.584l2.734,1.584l2.734,1.584l2.881,1.584
+ l5.473,3.168l2.734,1.729l2.879,1.584l2.736,1.584l2.734,1.584l5.469,3.168l2.883,1.584l2.736,1.584l2.734,1.584l2.734,1.584
+ l2.736,1.584l5.473,3.168l2.879,1.584l2.734,1.584l5.473,3.168l2.734,1.584l2.738,1.584l2.732,1.584l2.736,1.584l8.209,4.752
+ l2.734,1.584l2.738,1.584l8.207,4.752l2.734,1.584l2.738,1.584l10.943,6.336l2.734,1.584l2.736,1.584l1.873,1.152 M726.838,337.591
+ H305.926"/>
+
+ <path id="path3275" fill="none" stroke="#00809E" stroke-width="0.3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M597.525,935.188l-1.441-2.301l-1.582-2.592l-1.441-2.738 M748.582,624.149l2.592,1.439l2.734,1.584l2.594,1.441"/>
+ <polyline id="polyline3277" fill="none" stroke="#00809E" stroke-width="0.3" points="588.164,919.204 586.869,916.899
+ 585.43,914.308 583.846,911.716 582.262,908.981 580.678,906.245 579.238,903.653 577.654,900.917 576.068,898.325
+ 574.627,895.589 573.043,892.997 571.459,890.261 569.877,887.524 568.438,884.933 566.854,882.194 565.27,879.604 563.686,876.87
+ 562.246,874.132 560.662,871.54 559.076,868.806 557.494,866.067 555.908,863.333 554.471,860.741 552.883,858.005
+ 551.303,855.269 549.715,852.532 548.131,849.94 546.547,847.204 545.109,844.47 543.525,841.735 541.941,839.142 538.773,833.669
+ 537.189,830.935 535.605,828.194 534.021,825.462 532.582,822.726 530.998,820.132 529.414,817.397 524.662,809.188
+ 523.076,806.454 521.494,803.716 519.908,800.981 515.156,792.772 513.572,790.038 511.99,787.302 508.822,781.829
+ 507.238,779.095 505.654,776.356 504.068,773.622 502.486,770.886 500.9,768.149 499.318,765.413 497.732,762.679 494.564,757.204
+ 492.98,754.325 491.398,751.589 486.646,743.382 485.061,740.646 483.479,737.909 481.893,735.03 480.311,732.294 478.725,729.558
+ 475.557,724.085 473.973,721.204 472.246,718.47 469.076,712.997 467.494,710.118 465.908,707.382 462.74,701.909 461.156,699.03
+ 459.43,696.294 456.262,690.821 454.678,687.94 451.51,682.47 449.926,679.589 448.197,676.854 446.613,674.118 445.029,671.235
+ 443.445,668.503 441.861,665.765 440.277,662.886 438.547,660.149 436.963,657.271 435.379,654.532 433.795,651.798
+ 432.213,648.919 430.486,646.181 428.9,643.302 427.318,640.565 425.732,637.687 424.006,634.95 422.422,632.214 420.838,629.333
+ 419.254,626.597 417.67,623.718 415.941,620.981 414.357,618.103 412.773,615.366 411.189,612.483 409.461,609.751 407.877,606.87
+ 406.293,604.134 404.709,601.255 402.98,598.517 401.398,595.638 399.814,592.899 398.086,590.022 396.502,587.286
+ 394.918,584.403 393.334,581.671 391.605,578.79 390.021,575.911 388.438,573.173 386.709,570.294 385.127,567.558
+ 383.541,564.679 381.814,561.942 378.646,556.181 377.061,553.444 375.334,550.567 373.75,547.829 372.166,544.95 370.438,542.071
+ 368.854,539.333 367.27,536.454 365.541,533.718 362.373,527.958 360.645,525.222 359.063,522.341 357.477,519.462 355.75,516.726
+ 352.582,510.966 350.854,508.229 349.27,505.349 347.543,502.47 345.957,499.733 344.373,496.854 342.645,493.974 341.063,491.235
+ 339.477,488.358 337.75,485.479 336.166,482.743 334.582,479.862 332.854,476.983 331.27,474.103 329.543,471.366 326.373,465.606
+ 324.645,462.87 323.063,459.987 321.477,457.11 319.75,454.229 318.166,451.495 316.438,448.612 314.854,445.733 313.27,442.995
+ 311.543,440.118 309.957,437.237 308.23,434.358 306.645,431.622 305.063,428.741 303.334,425.862 301.75,422.983 300.021,420.245
+ 296.854,414.487 295.129,411.606 293.543,408.87 291.813,405.987 288.645,400.229 286.918,397.495 285.334,394.612
+ 283.605,391.733 282.021,388.854 280.438,386.118 279.141,383.958 "/>
+ <line id="line3279" fill="none" stroke="#00809E" stroke-width="0.3" x1="252.502" y1="390.729" x2="252.502" y2="917.478"/>
+
+ <path id="path3281" fill="none" stroke="#00809E" stroke-width="0.3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-92.666,935.188l1.439-2.301l1.584-2.592l1.008-1.875 M252.502,927.845v7.344"/>
+ <polyline id="polyline3283" fill="none" stroke="#00809E" stroke-width="0.3" points="-83.307,919.204 -82.011,916.899
+ -80.427,914.308 -78.986,911.716 -77.402,908.981 -75.818,906.245 -74.379,903.653 -72.795,900.917 -71.211,898.325
+ -69.771,895.589 -68.187,892.997 -65.019,887.524 -63.578,884.933 -61.994,882.194 -60.41,879.604 -58.826,876.87 -57.387,874.132
+ -55.803,871.54 -54.219,868.806 -51.051,863.333 -49.61,860.741 -44.858,852.532 -43.274,849.94 -41.69,847.204 -40.25,844.47
+ -38.666,841.735 -37.082,839.142 -33.914,833.669 -32.33,830.935 -30.746,828.194 -29.162,825.462 -27.723,822.726
+ -26.139,820.132 -24.555,817.397 -19.803,809.188 -18.219,806.454 -16.635,803.716 -15.051,800.981 -10.299,792.772
+ -5.547,784.565 -3.963,781.829 -2.379,779.095 -0.795,776.356 3.958,768.149 5.542,765.413 7.126,762.679 10.294,757.204
+ 11.878,754.325 19.798,740.646 21.382,737.909 22.966,735.03 29.302,724.085 30.886,721.204 32.613,718.47 35.781,712.997
+ 37.365,710.118 42.117,701.909 43.701,699.03 45.43,696.294 48.598,690.821 50.182,687.94 53.35,682.47 54.934,679.589
+ 56.661,676.854 58.245,674.118 59.829,671.235 61.413,668.503 62.998,665.765 64.582,662.886 66.31,660.149 67.894,657.271
+ 69.478,654.532 71.062,651.798 72.646,648.919 74.373,646.181 75.958,643.302 77.542,640.565 79.126,637.687 80.854,634.95
+ 82.438,632.214 84.021,629.333 85.605,626.597 87.189,623.718 88.918,620.981 90.502,618.103 92.086,615.366 93.67,612.483
+ 95.397,609.751 96.981,606.87 98.565,604.134 100.149,601.255 101.878,598.517 103.462,595.638 105.046,592.899 106.773,590.022
+ 108.357,587.286 109.941,584.403 111.525,581.671 113.254,578.79 114.838,575.911 116.422,573.173 118.149,570.294
+ 119.733,567.558 121.317,564.679 123.046,561.942 126.214,556.181 127.798,553.444 129.525,550.567 131.109,547.829
+ 132.693,544.95 134.422,542.071 136.006,539.333 137.59,536.454 139.317,533.718 142.485,527.958 144.214,525.222 145.798,522.341
+ 147.382,519.462 149.109,516.726 152.277,510.966 154.006,508.229 155.59,505.349 157.317,502.47 158.901,499.733 160.485,496.854
+ 162.214,493.974 163.798,491.235 165.382,488.358 167.109,485.479 168.693,482.743 170.277,479.862 172.006,476.983
+ 173.59,474.103 175.317,471.366 178.485,465.606 180.214,462.87 181.798,459.987 183.382,457.11 185.109,454.229 186.693,451.495
+ 188.422,448.612 190.006,445.733 191.59,442.995 193.317,440.118 194.901,437.237 196.63,434.358 198.214,431.622 199.798,428.741
+ 201.525,425.862 203.109,422.983 204.838,420.245 208.006,414.487 209.733,411.606 211.317,408.87 213.046,405.987
+ 216.214,400.229 217.941,397.495 219.525,394.612 221.254,391.733 222.838,388.854 224.422,386.118 225.718,383.815 "/>
+ <polyline id="polyline3285" fill="none" stroke="#00809E" stroke-width="0.3" points="206.422,364.229 203.974,365.671
+ 201.237,367.253 198.357,368.839 195.478,370.569 192.598,372.151 189.861,373.88 186.981,375.462 184.102,377.046
+ 181.222,378.774 178.485,380.358 175.605,382.085 169.846,385.253 167.109,386.983 164.229,388.569 161.35,390.294 158.47,391.878
+ 155.733,393.462 152.854,395.19 149.974,396.774 147.094,398.499 144.357,400.085 141.478,401.671 138.598,403.397
+ 135.861,404.983 132.981,406.71 127.222,409.878 124.485,411.606 118.726,414.774 115.989,416.499 113.109,418.085
+ 110.229,419.815 107.35,421.397 104.613,422.983 101.733,424.71 98.854,426.294 96.117,427.878 93.237,429.606 90.357,431.19
+ 87.621,432.774 84.741,434.499 81.861,436.085 79.126,437.815 73.365,440.983 70.63,442.71 64.869,445.878 62.134,447.606
+ 56.373,450.774 53.638,452.499 50.758,454.085 48.021,455.671 45.142,457.397 42.262,458.983 39.525,460.569 36.646,462.294
+ 33.909,463.878 28.149,467.046 25.413,468.774 22.533,470.358 19.798,471.942 16.918,473.671 14.182,475.253 11.302,476.839
+ 8.422,478.567 5.686,480.149 2.806,481.733 0.069,483.317 -2.811,485.046 -5.547,486.63 -8.427,488.214 -11.162,489.942
+ -14.042,491.526 -16.778,493.11 -19.658,494.694 -22.395,496.421 -25.274,498.005 -28.011,499.589 -30.891,501.173
+ -33.626,502.903 -36.507,504.485 -39.242,506.071 -42.122,507.653 -44.858,509.235 -47.595,510.966 -50.475,512.55
+ -53.211,514.134 -56.091,515.718 -58.826,517.444 -61.706,519.03 -67.179,522.198 -70.059,523.782 -72.795,525.509
+ -75.675,527.095 -81.146,530.263 -84.026,531.847 -86.763,533.431 -89.498,535.157 -92.379,536.743 -95.114,538.325
+ -97.851,539.911 -100.73,541.495 -106.202,544.663 -108.938,546.39 -111.818,547.974 -120.026,552.726 -122.906,554.31
+ -128.379,557.478 -131.114,559.206 -133.994,560.79 -144.938,567.126 -147.818,568.71 -164.234,578.214 -167.114,579.798
+ -175.322,584.55 -178.057,586.134 -183.53,589.302 -186.265,590.886 -191.738,594.054 -194.473,595.638 -199.946,598.806
+ -202.681,600.39 -208.154,603.558 -210.889,605.142 -216.362,608.31 -219.097,609.894 -230.042,616.229 -230.906,616.806 "/>
+
+ <path id="path3287" fill="none" stroke="#00809E" stroke-width="0.3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-251.498-63.736l1.151-1.442l1.44-1.726l1.298-1.729l2.878-3.456l2.882-3.456l2.878-3.456l2.88-3.456l1.584-1.728l1.442-1.728
+ l1.438-1.585l1.584-1.728l1.441-1.729l1.438-1.584l1.584-1.729l1.439-1.726l1.584-1.584l1.44-1.729l1.584-1.584l1.584-1.729
+ l1.439-1.584l1.584-1.584l1.584-1.729l1.584-1.584l1.44-1.584l3.168-3.168l1.584-1.726l4.754-4.752l1.727-1.584l3.168-3.169
+ l1.584-1.439l1.584-1.584l1.729-1.584l1.584-1.584l1.584-1.44l1.727-1.584l1.584-1.584l1.729-1.439l1.584-1.584l1.727-1.44
+ l1.728-1.584l1.584-1.44l1.729-1.439l1.728-1.584l1.584-1.44l1.729-1.439l1.728-1.584l1.728-1.44l1.729-1.439l1.728-1.44l8.641-7.2
+ l1.728-1.296l3.456-2.88l1.872-1.439l1.729-1.297l3.456-2.88l1.871-1.296l1.729-1.439l1.872-1.294l1.728-1.296l1.872-1.44
+ l1.729-1.296l1.872-1.296l1.728-1.44l3.744-2.592l1.728-1.296l5.616-3.888l1.729-1.297l3.744-2.592l1.871-1.152l3.744-2.592
+ l1.872-1.151l3.744-2.593l1.872-1.151l1.872-1.296l2.016-1.152l1.872-1.152l1.872-1.296l3.744-2.304l2.016-1.152l1.872-1.151
+ l1.872-1.296l2.017-1.152l1.872-1.152l2.016-1.151l1.872-1.009l2.016-1.151l1.872-1.152l2.017-1.151l1.872-1.152l2.016-1.008
+ l2.016-1.152l1.872-1.008l2.017-1.152l2.016-1.008l1.872-1.152l2.016-1.008l2.017-1.152l4.031-2.016l1.872-1.008l2.017-1.008
+ l2.016-1.152l6.048-3.023l2.017-0.864l8.063-4.032l2.16-0.864l2.016-1.008l2.017-0.864l2.016-1.008l2.017-0.863l2.159-1.009
+ l2.017-0.864l2.016-0.863l2.017-1.008l2.159-0.864l2.017-0.864l2.016-0.864l2.16-0.863l2.016-0.864l2.16-0.864l2.017-0.864
+ l2.16-0.863l2.016-0.864l2.16-0.72l1.439-0.576 M-244.299,624.438l-2.016,1.15l-2.736,1.584l-2.447,1.441"/>
+
+ <path id="path3289" fill="none" stroke="#00809E" stroke-width="0.3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M252.502-149.85h-10.225l-1.728,0.146h-3.456l-1.729,0.145h-1.584l-1.728,0.144h-1.729l-1.728,0.145h-1.729l-1.584,0.144
+ l-1.728,0.145h-1.729l-1.728,0.144l-1.729,0.145l-1.584,0.144l-1.728,0.145l-1.728,0.142l-1.729,0.146l-1.728,0.145l-1.584,0.144
+ l-5.185,0.433l-1.584,0.144l-1.728,0.288l-1.729,0.145l-1.728,0.142l-1.584,0.29l-3.456,0.288l-1.729,0.288l-1.584,0.144
+ l-1.728,0.288l-1.729,0.286l-1.584,0.146l-1.728,0.288l-1.729,0.288l-1.584,0.288l-1.728,0.145l-1.729,0.288l-1.584,0.287
+ l-1.728,0.288l-1.729,0.288l-1.584,0.288l-1.728,0.288l-1.729,0.288l-1.584,0.432l-1.728,0.288l-1.728,0.288l-1.584,0.288
+ l-1.729,0.432l-1.584,0.289l-1.728,0.287l-1.584,0.433l-1.729,0.288l-1.728,0.432l-1.584,0.288l-1.729,0.432l-1.584,0.433
+ l-1.728,0.287l-1.584,0.433l-1.729,0.432l-1.584,0.288l-1.728,0.433l-1.584,0.432l-1.729,0.432l-3.168,0.864l-1.728,0.432
+ l-1.584,0.433l-1.729,0.432l-1.584,0.433l-1.584,0.575l-1.728,0.433l-3.168,0.863l-1.729,0.576l-1.584,0.433l-1.584,0.575
+ l-1.728,0.433l-1.584,0.576l-1.584,0.43l-1.729,0.578l-1.584,0.432l-1.584,0.576l-1.584,0.576l-1.584,0.576l-1.728,0.43
+ l-1.584,0.578l-3.168,1.151l-1.584,0.576 M33.189-268.072l2.016-0.864l2.16-0.72l2.16-0.721l2.017-0.72l2.159-0.72l2.16-0.721
+ l2.16-0.72l2.16-0.72l2.016-0.72l2.16-0.721l2.16-0.72l2.16-0.72l2.16-0.576l2.16-0.72l2.159-0.576l2.16-0.72l2.16-0.576l2.16-0.72
+ l2.16-0.576l2.16-0.576l2.159-0.721l2.16-0.575l6.48-1.729l2.16-0.576l4.319-1.151l2.305-0.576l2.159-0.576l2.16-0.432l1.872-0.576
+ "/>
+ <path id="path3291" fill="none" stroke="#00809E" stroke-width="0.3" d="M72.646-115.432L71.35-115l-1.584,0.576l-1.584,0.72
+ l-1.584,0.576l-1.584,0.721l-1.584,0.575l-1.44,0.721l-1.584,0.72l-1.584,0.576l-1.584,0.718l-1.584,0.722l-1.584,0.576
+ l-1.439,0.72l-1.584,0.721l-1.584,0.718l-1.584,0.722l-1.44,0.72l-1.584,0.721l-1.584,0.718l-1.44,0.722l-3.168,1.44l-1.439,0.864
+ l-3.168,1.439l-1.44,0.721l-1.584,0.863l-1.439,0.721l-1.584,0.863l-1.44,0.721l-1.584,0.863l-1.439,0.721l-1.44,0.863
+ l-1.584,0.721l-1.44,0.863l-1.584,0.862l-1.439,0.722l-1.44,0.862l-1.584,0.866l-1.439,0.863l-1.44,0.721L8.71-84.617l-1.584,0.864
+ l-7.2,4.32l-1.584,1.008l-5.76,3.456l-4.32,2.88l-2.017,1.296l-6.479,4.32l-2.016,1.439l-4.32,2.881l-2.017,1.439l-2.159,1.44
+ l-2.017,1.439l-2.016,1.584l-2.16,1.44l-2.016,1.584l-2.017,1.582l-2.016,1.441l-14.112,11.089l-1.872,1.584l-2.016,1.726
+ l-1.872,1.584l-2.016,1.73l-1.872,1.584l-2.017,1.726l-1.872,1.729l-1.872,1.585l-1.872,1.726l-2.016,1.73l-1.872,1.726
+ l-1.872,1.729l-1.872,1.729l-1.728,1.872l-3.744,3.456l-3.6,3.6l-1.872,1.87l-1.729,1.73l-1.872,1.872l-1.728,1.871l-3.601,3.601
+ l-8.64,9.36l-1.584,2.016l-3.456,3.744l-1.584,2.014l-1.728,1.872l-1.584,2.019l-1.729,1.871l-1.584,2.017l-1.584,2.014
+ l-1.584,1.872l-1.728,2.018l-1.584,2.017l-1.584,2.014l-1.44,2.019l-1.584,2.014l-1.584,2.016l-1.584,2.019l-1.44,2.16
+ l-1.584,2.014l-1.439,2.016l-1.44,2.16l-1.584,2.019l-1.439,2.157l-1.44,2.019l-1.439,2.16l-1.44,2.014l-1.44,2.162l-2.88,4.32
+ l-1.296,2.016l-1.439,2.16l-1.296,2.16l-1.009,1.438l-0.863,1.442l-0.864,1.438l-0.862,1.442l-0.866,1.584l-1.006,1.438
+ l-0.866,1.44l-0.863,1.442l-0.864,1.438l-0.862,1.442l-0.865,1.584l-0.864,1.438l-0.721,1.442l-0.863,1.438l-0.864,1.586
+ l-0.864,1.44l-0.863,1.438l-0.719,1.586l-0.865,1.438l-0.864,1.442l-0.72,1.584l-0.864,1.438l-0.721,1.584l-0.863,1.442
+ l-0.721,1.584l-0.863,1.438l-0.721,1.584l-0.718,1.442l-0.866,1.582l-0.718,1.44l-0.722,1.584l-0.72,1.584l-0.721,1.439
+ l-0.72,1.584l-0.864,1.584l-0.72,1.442l-0.72,1.584l-0.576,1.584l-0.72,1.438l-1.438,3.168l-0.722,1.584l-0.72,1.584l-0.576,1.442
+ l-0.721,1.584l-0.718,1.582l-0.578,1.584l-1.439,3.168l-0.574,1.584l-0.722,1.584l-1.152,3.168l-0.72,1.584l-0.574,1.584
+ l-0.578,1.584l-0.576,1.584l-0.718,1.584l-4.034,11.088l-0.576,1.729l-1.151,3.168l-0.433,1.584l-0.575,1.584l-0.576,1.728
+ l-0.433,1.584l-1.151,3.168l-0.433,1.729l-0.575,1.584l-0.431,1.584l-0.434,1.728l-0.574,1.584l-0.434,1.584l-0.433,1.729
+ l-0.576,1.584l-0.432,1.584l-0.432,1.728l-0.433,1.584l-0.43,1.584l-0.434,1.729l-0.431,1.584l-0.434,1.728l-0.433,1.584
+ l-0.432,1.729l-0.432,1.584l-0.433,1.728l-0.43,1.584l-0.29,1.729l-0.432,1.584l-0.433,1.728l-0.288,1.584l-0.432,1.729
+ l-0.432,1.584l-0.288,1.728l-0.288,1.584l-0.433,1.729l-0.287,1.584l-0.433,1.728l-0.288,1.729l-0.288,1.584l-0.288,1.728
+ l-0.43,1.584l-0.29,1.729l-0.288,1.728l-0.288,1.584l-0.575,3.456l-0.288,1.584l-0.288,1.728l-0.145,1.729l-0.288,1.584
+ l-0.575,3.456l-0.145,1.584l-0.286,1.728l-0.29,1.729l-0.144,1.728l-0.286,1.584l-0.146,1.729l-0.287,1.728l-0.145,1.584
+ l-0.144,1.729l-0.288,1.728l-0.145,1.729l-0.144,1.584l-0.288,1.728l-0.286,3.456l-0.146,1.729l-0.144,1.584l-0.432,5.184
+ l-0.145,1.584v1.729l-0.432,5.184v1.584l-0.145,1.728v1.729l-0.288,3.456v3.313l-0.144,1.729v3.457l-0.144,1.727v1.584
+ M252.502,173.43h-1.729l-1.728,0.144h-3.456l-1.729,0.144l-1.728,0.145h-1.729l-1.728,0.145l-1.729,0.144l-1.728,0.29
+ l-1.729,0.142l-1.584,0.145l-1.728,0.288l-1.729,0.287l-1.728,0.145l-1.728,0.288l-1.585,0.29l-1.728,0.43l-1.728,0.288
+ l-1.729,0.288l-1.584,0.432l-1.728,0.288l-1.584,0.433l-3.456,0.863l-1.584,0.435l-1.729,0.574l-1.584,0.432l-1.584,0.578
+ l-1.728,0.43l-0.288,0.145"/>
+ <line id="line3293" fill="none" stroke="#00809E" stroke-width="0.3" x1="252.502" y1="10.568" x2="245.157" y2="10.568"/>
+
+ <path id="path3295" fill="none" stroke="#00809E" stroke-width="0.3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-237.097-288.808h-14.401v14.4 M-251.498,920.788v14.398h14.401 M742.102,935.188h14.4V920.79 M756.502-274.408v-14.4h-14.4
+ M743.83-288.808l2.016,1.728l2.16,1.729l2.158,1.728l2.162,1.729l2.16,1.728l2.016,1.584 M-251.498-278.584l1.872-1.584
+ l2.159-1.728l2.16-1.729l4.32-3.456l2.016-1.728 M252.502-149.85h-7.345"/>
+ <path id="path3297" fill="none" stroke="#00809E" stroke-width="0.3" d="M148.102,27.702L148.102,27.702l1.584-0.574l1.728-0.576
+ l1.585-0.575l1.584-0.433l1.728-0.576l1.584-0.434l1.584-0.574l1.728-0.434l1.584-0.43l1.729-0.435l1.584-0.573l1.728-0.435
+ l1.584-0.43l1.729-0.433l1.584-0.434l1.728-0.43l1.584-0.288l1.729-0.433l1.584-0.432l1.728-0.29l1.729-0.43l1.584-0.288
+ l1.728-0.433l1.729-0.288l1.584-0.434l1.728-0.288l1.729-0.286l1.584-0.288l3.456-0.575l1.584-0.288l1.728-0.288l1.729-0.288
+ l1.728-0.288l1.584-0.145l1.729-0.287l1.728-0.288l1.729-0.146l1.728-0.286l1.584-0.144l1.729-0.145l1.728-0.288l1.729-0.146
+ l1.728-0.142l1.728-0.146l1.585-0.142l1.728-0.146l1.728-0.142l1.729-0.145l1.728-0.144h1.729L235.365,11l1.584-0.144h1.729
+ l1.728-0.145h3.456l1.729-0.144h13.104l1.729,0.144h3.457l1.727,0.145h1.729L268.918,11h1.727l1.727,0.145l1.729,0.144l1.729,0.145
+ l1.727,0.142l1.727,0.146l1.584,0.142l1.729,0.146l1.727,0.142l1.73,0.146l1.725,0.145l1.729,0.288l1.584,0.144l1.729,0.145
+ l1.723,0.288l1.73,0.142l1.729,0.288l1.584,0.29l1.727,0.144l1.727,0.288l1.729,0.286l1.584,0.288l1.727,0.288l1.73,0.29
+ l1.725,0.288l1.586,0.288l1.727,0.43l1.729,0.288l1.582,0.29l1.727,0.432l1.729,0.286l1.584,0.435l1.729,0.287l1.584,0.433
+ l1.727,0.43l1.586,0.435l1.727,0.289l1.727,0.433l1.584,0.43l1.729,0.435l1.584,0.43l1.725,0.578l1.586,0.43l1.582,0.435
+ l1.73,0.432l1.582,0.576l1.729,0.43l1.584,0.578l1.584,0.43l1.729,0.576l1.582,0.578l1.586,0.43l1.727,0.576l1.586,0.578
+ l1.582,0.576l1.584,0.576l1.586,0.575l1.725,0.574l1.584,0.576l1.584,0.578l1.584,0.718l1.586,0.576l1.582,0.578l1.586,0.718
+ l1.582,0.578l1.586,0.718l1.584,0.576l1.584,0.72l1.584,0.723l1.582,0.72l1.584,0.718l1.584,0.576l1.443,0.72l1.584,0.723
+ l1.584,0.72l1.584,0.864l1.439,0.72l1.584,0.718l1.584,0.722l1.439,0.862l1.584,0.722l1.443,0.862l1.584,0.722l1.439,0.862
+ l1.584,0.722l1.439,0.862l1.584,0.866l1.441,0.864l1.582,0.72l1.443,0.864l1.439,0.861l1.439,0.864l1.584,0.866l1.443,0.864
+ l1.439,1.008l1.439,0.864l1.439,0.861l1.443,0.864l1.439,1.008l1.441,0.866l2.016,1.294l1.873,1.296l1.873,1.154l1.873,1.296
+ l1.871,1.294l1.875,1.442l5.615,3.888l1.729,1.438l1.873,1.439l1.873,1.296l1.729,1.442l1.871,1.438l1.729,1.442l1.727,1.438
+ l1.873,1.442l3.457,2.878l1.727,1.584l1.729,1.44l1.727,1.439l1.586,1.584l1.729,1.584l1.727,1.442l1.582,1.584l1.729,1.584
+ l1.584,1.584l1.729,1.584l1.584,1.584l1.584,1.726l3.168,3.168l1.584,1.73l1.584,1.584l1.584,1.726l1.584,1.73l1.439,1.584
+ l1.584,1.726l1.438,1.73l1.588,1.726l1.439,1.73l1.441,1.726l1.439,1.872l2.881,3.456l1.439,1.874l1.438,1.726l1.445,1.872
+ l1.293,1.73l1.439,1.872l1.297,1.872l1.438,1.87l1.299,1.728l1.295,1.872l1.295,1.874l1.295,1.872l1.295,2.014l1.297,1.872
+ l1.148,1.872l1.297,1.872l0.861,1.44l1.01,1.439l0.867,1.442l0.863,1.584l1.008,1.438l0.865,1.44l0.865,1.439l0.861,1.442
+ l0.869,1.582l1.727,2.88l0.719,1.584l0.863,1.44l0.867,1.584l0.719,1.439l0.865,1.584l0.863,1.44l0.721,1.584l0.863,1.439
+ l0.721,1.584l0.721,1.44l0.717,1.584l0.865,1.584l0.719,1.584l0.721,1.44l0.717,1.584l0.721,1.584l1.441,3.168l0.719,1.439
+ l0.576,1.584l1.439,3.168l0.576,1.584l0.721,1.584l0.574,1.584l0.717,1.584l0.578,1.584l0.576,1.584l0.576,1.729l0.719,1.584
+ l0.578,1.584l1.15,3.168l0.572,1.584l0.578,1.728l0.432,1.584l0.574,1.585l0.578,1.728l0.576,1.584l0.43,1.584l0.578,1.728
+ l0.432,1.584l0.574,1.584l0.434,1.729l0.436,1.584l0.432,1.728l0.576,1.584l0.432,1.729l0.432,1.584l0.434,1.728l0.43,1.584
+ l0.434,1.729l0.289,1.584l0.43,1.728l0.438,1.584l0.287,1.729l0.432,1.728l0.289,1.584l0.434,1.729l0.285,1.728l0.438,1.584
+ l0.574,3.456l0.289,1.584l0.285,1.729l0.291,1.728l0.289,1.584l0.576,3.456l0.289,1.729l0.141,1.584l0.293,1.728l0.287,1.729
+ l0.145,1.728l0.291,1.729l0.141,1.584l0.145,1.728l0.285,1.728l0.146,1.729l0.143,1.728l0.146,1.729l0.141,1.584l0.576,6.912v1.729
+ l0.145,1.729l0.145,1.584v1.729l0.139,1.727v3.457l0.146,1.727v13.68l-0.146,1.73v3.455l-0.139,1.729v1.727l-0.145,1.586
+ l-0.145,1.727v1.729l-0.576,6.912l-0.141,1.584l-0.146,1.725l-0.143,1.73l-0.146,1.729l-0.285,1.727l-0.145,1.729l-0.141,1.582
+ l-0.291,1.729l-0.145,1.727l-0.287,1.729l-0.293,1.727l-0.141,1.586l-0.289,1.727l-0.576,3.453l-0.289,1.586l-0.291,1.73
+ l-0.285,1.727l-0.289,1.584l-0.574,3.455l-0.438,1.586l-0.285,1.727l-0.434,1.729l-0.289,1.584l-0.432,1.727l-0.287,1.727
+ l-0.438,1.582l-0.43,1.734l-0.289,1.582l-0.434,1.727l-0.43,1.584l-0.434,1.725l-0.432,1.586l-0.432,1.727l-0.576,1.582
+ l-0.432,1.732l-0.436,1.584l-0.434,1.725l-0.574,1.586l-0.432,1.584l-0.578,1.727l-0.43,1.582l-0.576,1.586l-0.578,1.727
+ l-0.574,1.582l-0.432,1.586l-0.578,1.729l-0.572,1.584l-1.15,3.168l-0.578,1.584l-0.719,1.584l-0.576,1.729l-0.576,1.584
+ l-0.578,1.584l-0.717,1.584l-0.574,1.584l-0.721,1.584l-0.576,1.584l-1.439,3.168l-0.576,1.584l-0.719,1.441l-0.719,1.582
+ l-0.721,1.586l-0.721,1.582l-0.717,1.586l-0.721,1.438l-0.719,1.584l-0.865,1.584l-0.717,1.584l-0.721,1.441l-0.721,1.586
+ l-0.863,1.439l-0.721,1.584l-0.863,1.441l-0.863,1.584l-0.721,1.439l-0.865,1.584l-0.865,1.441l-0.717,1.584l-0.867,1.439
+ l-0.863,1.439l-0.869,1.586l-0.861,1.441l-0.865,1.439l-0.865,1.441l-1.008,1.438l-0.863,1.586l-0.867,1.441l-1.01,1.439
+ l-0.861,1.439l-1.297,1.875l-1.148,1.871l-1.297,1.875l-1.295,2.016l-3.887,5.617l-1.299,1.729l-1.438,1.871l-1.297,1.873
+ l-1.439,1.871l-1.293,1.73l-1.445,1.871l-1.438,1.727l-1.439,1.875l-2.881,3.457l-1.439,1.873l-1.441,1.727l-1.439,1.727
+ l-1.588,1.729l-1.438,1.729l-1.584,1.725l-1.439,1.584l-1.584,1.73l-1.584,1.727l-1.584,1.584l-1.584,1.729l-2.16,2.158
+ M147.813,27.848l0.288-0.146l1.584-0.574l1.728-0.576l1.585-0.575l1.584-0.433l1.728-0.576l1.584-0.434l1.584-0.574l1.728-0.434
+ l1.584-0.43l1.729-0.435l1.584-0.573l1.728-0.435l1.584-0.43l1.729-0.433l1.584-0.434l1.728-0.43l1.584-0.288l1.729-0.433
+ l1.584-0.432l1.728-0.29l1.729-0.43l1.584-0.288l1.728-0.433l1.729-0.288l1.584-0.434l1.728-0.288l1.729-0.286l1.584-0.288
+ l3.456-0.575l1.584-0.288l1.728-0.288l1.729-0.288l1.728-0.288l1.584-0.145l1.729-0.287l1.728-0.288l1.729-0.146l1.728-0.286
+ l1.584-0.144l1.729-0.145l1.728-0.288l1.729-0.146l1.728-0.142l1.728-0.146l1.585-0.142l1.728-0.146l1.728-0.142l1.729-0.145
+ l1.728-0.144h1.729L235.365,11l1.584-0.144h1.729l1.728-0.145h3.456l1.729-0.144h6.912"/>
+ <polyline id="polyline3299" fill="none" stroke="#00809E" stroke-width="0.3" points="474.838,577.638 473.398,578.79
+ 471.67,580.374 470.084,581.958 468.357,583.397 466.629,584.839 464.9,586.421 463.174,587.862 461.445,589.302 459.572,590.743
+ 457.846,592.181 456.117,593.622 454.246,595.062 452.518,596.501 450.646,597.798 448.773,599.235 447.045,600.679
+ 441.43,604.565 439.557,606.005 437.686,607.302 435.814,608.597 433.941,609.751 432.068,611.046 430.055,612.341
+ 428.613,613.206 427.174,614.214 425.732,615.079 424.293,615.942 422.854,616.806 421.414,617.813 419.973,618.679
+ 418.389,619.542 416.949,620.403 415.51,621.271 414.068,622.134 412.486,622.854 411.045,623.718 409.461,624.581
+ 408.021,625.444 406.438,626.165 404.998,627.03 403.414,627.751 401.973,628.612 400.389,629.333 398.949,630.198
+ 395.781,631.638 394.342,632.356 392.758,633.222 389.59,634.663 388.148,635.382 386.564,635.958 384.98,636.679 383.398,637.397
+ 380.23,638.839 378.646,639.413 377.061,640.134 375.479,640.71 373.893,641.431 372.311,642.005 370.725,642.581 369.141,643.302
+ 367.557,643.878 365.973,644.454 364.246,645.03 362.662,645.604 361.074,646.181 359.492,646.757 357.906,647.333
+ 356.182,647.909 354.598,648.341 353.014,648.919 351.285,649.493 349.701,649.927 348.117,650.503 346.391,650.935
+ 344.809,651.511 343.074,651.94 341.492,652.374 339.906,652.806 338.182,653.382 336.598,653.813 334.869,654.245
+ 333.285,654.679 331.559,655.11 329.973,655.397 328.246,655.829 326.518,656.263 324.934,656.694 323.205,656.981
+ 321.621,657.413 319.895,657.7 318.166,658.134 316.582,658.421 314.854,658.71 313.129,659.142 311.543,659.431 309.813,659.718
+ 308.086,660.005 306.357,660.294 304.773,660.581 303.047,660.87 301.316,661.157 299.59,661.302 298.006,661.589 296.277,661.878
+ 294.547,662.022 292.82,662.31 291.094,662.454 289.51,662.597 287.781,662.886 286.055,663.03 284.324,663.173 282.598,663.317
+ 280.869,663.462 279.285,663.604 277.559,663.749 275.828,663.894 274.102,664.038 272.373,664.181 270.645,664.325
+ 268.918,664.325 267.334,664.47 265.605,664.47 263.879,664.612 260.422,664.612 258.693,664.757 245.014,664.757 243.285,664.612
+ 241.558,664.612 239.829,664.47 238.102,664.47 236.518,664.325 234.789,664.325 233.062,664.181 231.334,664.038 229.605,664.038
+ 227.878,663.894 226.149,663.749 224.422,663.604 222.838,663.462 221.109,663.317 219.382,663.03 217.653,662.886
+ 215.926,662.741 214.197,662.597 212.613,662.31 210.886,662.165 209.157,661.878 207.43,661.733 205.846,661.444 204.117,661.157
+ 202.39,660.87 200.661,660.581 198.934,660.438 197.35,660.149 195.621,659.862 193.894,659.431 192.31,659.142 190.582,658.854
+ 188.854,658.565 187.27,658.134 185.542,657.847 183.813,657.558 182.229,657.126 180.502,656.839 178.918,656.403
+ 177.189,655.974 175.462,655.542 173.878,655.255 172.149,654.821 170.565,654.39 168.838,653.958 167.254,653.524
+ 165.525,653.095 163.941,652.517 162.214,652.087 160.63,651.653 159.046,651.077 157.317,650.646 155.733,650.214
+ 154.006,649.638 152.422,649.062 150.838,648.63 149.109,648.054 147.525,647.478 145.941,646.899 144.357,646.325 142.63,645.749
+ 141.046,645.173 139.462,644.597 137.878,644.022 134.71,642.87 133.126,642.149 131.542,641.573 129.958,640.997 128.373,640.278
+ 126.789,639.702 123.621,638.263 122.037,637.687 118.869,636.247 117.285,635.524 115.701,634.806 114.117,634.087
+ 112.678,633.366 109.51,631.927 108.069,631.206 106.485,630.341 104.901,629.622 103.462,628.899 101.878,628.038
+ 100.438,627.317 98.854,626.454 97.413,625.733 95.829,624.87 94.39,624.005 92.806,623.142 91.365,622.421 89.926,621.558
+ 88.342,620.692 86.901,619.829 85.462,618.966 84.021,618.103 82.438,617.095 79.558,615.366 78.117,614.501 76.678,613.495
+ 75.237,612.63 73.365,611.333 71.35,610.181 69.478,608.886 67.605,607.589 65.733,606.294 63.861,604.997 61.989,603.702
+ 60.117,602.263 58.245,600.966 56.518,599.524 54.646,598.229 52.918,596.79 51.046,595.495 49.317,594.054 47.445,592.612
+ 45.718,591.173 43.989,589.733 42.117,588.294 40.39,586.71 38.661,585.271 36.934,583.829 35.205,582.247 33.621,580.806
+ 28.438,576.054 26.854,574.612 18.789,566.55 17.062,564.821 15.478,563.235 14.037,561.653 9.285,556.47 7.846,554.886
+ 6.262,553.157 4.821,551.431 3.382,549.702 1.798,547.974 0.357,546.103 -2.522,542.646 -3.963,540.774 -5.402,539.046
+ -6.698,537.317 -8.139,535.444 -9.435,533.573 -10.874,531.847 -12.171,529.974 -13.61,528.103 -20.091,518.743 -21.242,516.726
+ -22.538,514.854 -23.402,513.413 -24.41,511.974 -27.003,507.653 -28.011,506.071 -30.603,501.751 -31.467,500.165 -32.33,498.728
+ -33.051,497.286 -33.914,495.702 -34.778,494.263 -35.643,492.679 -36.362,491.235 -37.227,489.653 -37.946,488.214
+ -38.811,486.63 -39.53,485.19 -40.25,483.606 -41.114,482.022 -41.834,480.581 -43.274,477.413 -43.994,475.976 -47.595,468.054
+ -48.171,466.472 -49.61,463.304 -50.187,461.718 -50.906,460.136 -52.059,456.966 -52.778,455.382 -55.658,447.462
+ -56.234,445.733 -57.387,442.569 -57.963,440.983 -58.538,439.253 -58.971,437.671 -59.547,436.085 -59.979,434.358
+ -60.555,432.774 -60.986,431.046 -61.563,429.462 -61.994,427.878 -62.427,426.151 -63.003,424.569 -63.435,422.839
+ -63.866,421.253 -64.299,419.526 -64.73,417.942 -65.162,416.214 -65.45,414.63 -66.314,411.175 -66.746,409.591 -67.034,407.862
+ -67.467,406.278 -67.755,404.554 -68.042,402.819 -68.475,401.237 -69.051,397.782 -69.339,396.198 -69.771,394.472
+ -70.059,392.741 -70.347,391.155 -70.49,389.431 -71.354,384.245 -71.643,382.663 -71.786,380.935 -72.074,379.206
+ -72.219,377.479 -72.507,375.897 -72.938,370.712 -73.227,368.983 -73.37,367.253 -73.515,365.671 -73.946,360.487
+ -73.946,358.759 -74.234,355.304 -74.234,353.573 -74.379,351.991 -74.379,350.263 -74.522,348.534 -74.522,346.808
+ -74.666,345.077 -74.666,331.397 -74.522,329.671 -74.522,326.214 -74.379,324.487 -74.379,322.759 -74.234,321.175
+ -74.234,319.446 -73.515,310.806 -73.37,309.222 -72.795,302.31 -72.507,300.582 -72.362,298.998 -72.219,297.27 -71.931,295.542
+ -71.786,293.814 -71.498,292.085 -71.211,290.501 -71.066,288.774 -70.49,285.318 -70.202,283.734 -69.339,278.549
+ -69.051,276.965 -68.618,275.238 -68.33,273.51 -68.042,271.926 -67.61,270.198 -67.322,268.47 -66.891,266.886 -66.603,265.158
+ -66.171,263.574 -65.738,261.846 -65.307,260.262 -65.019,258.534 -64.587,256.806 -64.154,255.222 -63.723,253.494 -63.29,251.91
+ -62.715,250.182 -61.851,247.014 -61.418,245.286 -60.843,243.702 -60.41,241.974 -59.834,240.39 -59.402,238.806 -58.826,237.078
+ -58.25,235.494 -57.818,233.91 -57.242,232.182 -54.938,225.846 -54.362,224.118 -53.211,220.95 -52.49,219.366 -51.339,216.198
+ -50.618,214.614 -50.042,213.03 -49.322,211.446 -48.746,209.862 -45.866,203.526 -45.29,201.942 -44.57,200.501 -43.131,197.333
+ -42.267,195.75 -41.547,194.31 -40.106,191.142 -39.242,189.702 -38.522,188.118 -37.658,186.678 -36.938,185.094 -36.074,183.654
+ -35.354,182.07 -34.49,180.629 -33.626,179.045 -32.763,177.608 -32.042,176.024 -31.179,174.582 -29.45,171.702 -28.587,170.118
+ -27.723,168.678 -26.715,167.238 -24.122,162.917 -23.114,161.48 -22.25,160.038 -20.954,158.024 -19.658,156.15 -18.507,154.278
+ -15.914,150.534 -14.475,148.662 -10.587,143.045 -9.146,141.318 -7.706,139.446 -6.41,137.574 -4.971,135.846 -3.53,133.976
+ -2.091,132.246 -0.65,130.52 0.789,128.648 2.229,126.917 3.67,125.192 5.254,123.461 8.134,120.006 9.718,118.422 11.302,116.694
+ 12.741,114.965 14.325,113.381 15.909,111.654 17.493,110.07 19.077,108.342 20.661,106.76 22.39,105.174 23.974,103.592
+ 25.558,102.006 27.285,100.422 28.869,98.838 32.325,95.669 33.909,94.232 35.638,92.648 37.365,91.206 39.094,89.622
+ 40.821,88.184 42.55,86.742 44.422,85.304 46.149,83.862 47.878,82.422 49.75,80.984 51.478,79.542 53.35,78.104 55.077,76.808
+ 56.949,75.366 58.821,74.07 60.693,72.631 62.422,71.333 68.037,67.446 70.054,66.15 71.926,64.856 73.798,63.702 75.67,62.406
+ 77.109,61.542 78.55,60.534 79.989,59.669 81.573,58.808 83.014,57.799 84.453,56.936 85.894,56.07 87.334,55.206 88.918,54.344
+ 90.357,53.48 91.798,52.614 93.382,51.896 94.821,51.03 96.405,50.166 97.846,49.446 99.43,48.582 100.869,47.72 102.453,46.998
+ 103.894,46.136 105.478,45.414 106.918,44.694 108.502,43.976 110.086,43.11 111.67,42.392 113.109,41.669 114.693,40.95
+ 116.277,40.232 117.861,39.512 119.445,38.79 120.886,38.07 122.47,37.494 124.054,36.776 125.638,36.056 127.222,35.48
+ 128.806,34.76 129.525,34.472 "/>
+ <polyline id="polyline3301" fill="none" stroke="#00809E" stroke-width="0.3" points="188.854,186.246 180.934,189.846
+ 179.493,190.568 177.909,191.43 176.325,192.15 174.886,193.014 173.302,193.734 171.861,194.598 170.277,195.461 168.838,196.326
+ 167.397,197.192 165.958,198.198 164.518,199.064 163.077,199.926 161.35,201.078 159.621,202.232 158.037,203.381
+ 156.453,204.534 154.726,205.686 153.142,206.838 151.558,208.133 149.974,209.286 148.39,210.582 146.949,211.877
+ 145.365,213.174 143.926,214.47 142.342,215.91 139.462,218.501 138.021,219.942 136.294,221.526 134.71,223.254 133.27,224.694
+ 130.678,227.574 129.237,229.158 127.941,230.598 126.646,232.182 125.35,233.622 124.054,235.206 122.901,236.79 121.605,238.374
+ 120.453,239.958 119.302,241.686 116.998,244.854 114.693,248.31 112.966,251.19 111.958,252.629 110.229,255.51 109.365,257.094
+ 108.502,258.534 107.781,260.118 106.918,261.558 106.197,263.142 105.334,264.726 104.613,266.166 101.014,274.085
+ 100.438,275.669 99.718,277.253 97.989,282.006 97.413,283.734 96.262,286.902 95.829,288.629 95.254,290.213 94.821,291.797
+ 94.245,293.526 93.813,295.11 92.949,298.566 92.518,300.15 92.229,301.877 91.798,303.461 91.222,306.917 90.789,308.646
+ 90.502,310.23 90.214,311.958 90.069,313.686 89.493,317.142 89.35,318.726 89.205,320.454 88.918,322.183 88.63,325.64
+ 88.63,327.366 88.342,330.823 88.342,334.278 88.197,336.007 88.197,339.319 88.342,341.046 88.342,344.503 88.63,347.958
+ 88.63,349.687 88.918,353.144 89.205,354.87 89.35,356.599 89.493,358.183 90.069,361.64 90.214,363.366 90.502,365.095
+ 90.789,366.679 91.222,368.405 91.798,371.862 92.229,373.444 92.518,375.175 92.949,376.759 93.813,380.214 94.245,381.798
+ 94.821,383.526 95.254,385.11 95.829,386.694 96.262,388.421 97.413,391.591 97.989,393.319 99.718,398.069 100.438,399.655
+ 101.014,401.237 104.613,409.155 105.334,410.599 106.197,412.183 106.918,413.767 107.781,415.206 108.502,416.79
+ 109.365,418.229 110.229,419.815 111.958,422.694 112.966,424.136 113.829,425.573 114.693,427.015 115.846,428.741
+ 116.998,430.472 118.149,432.058 119.302,433.64 120.453,435.366 121.605,436.95 122.901,438.534 124.054,440.118 125.35,441.702
+ 126.646,443.144 127.941,444.729 129.237,446.163 130.678,447.749 133.27,450.63 134.71,452.069 136.294,453.798 138.021,455.382
+ 139.462,456.819 140.901,458.118 142.342,459.413 143.926,460.854 145.365,462.151 146.949,463.444 148.39,464.741
+ 149.974,466.038 151.558,467.19 153.142,468.487 154.726,469.64 156.453,470.79 159.621,473.095 163.077,475.397 165.958,477.126
+ 167.397,478.136 168.838,478.997 170.277,479.862 171.861,480.728 173.302,481.589 174.886,482.312 176.325,483.173
+ 177.909,483.896 179.493,484.759 180.934,485.479 182.518,486.198 188.854,489.079 190.438,489.653 192.021,490.374
+ 196.773,492.103 198.502,492.679 200.086,493.255 201.67,493.829 203.397,494.263 204.981,494.839 206.565,495.271
+ 208.294,495.847 209.878,496.278 213.334,497.142 214.918,497.573 216.646,497.862 218.229,498.294 219.958,498.581
+ 221.686,498.87 223.413,499.302 224.998,499.589 226.726,499.878 228.453,500.022 230.182,500.31 231.909,500.599 233.493,500.743
+ 235.222,500.886 236.949,501.173 238.678,501.317 240.405,501.462 242.134,501.462 245.59,501.751 249.046,501.751
+ 250.773,501.894 254.086,501.894 255.813,501.751 259.27,501.751 260.998,501.606 262.727,501.462 264.453,501.462
+ 266.182,501.317 267.906,501.173 269.641,500.886 271.365,500.743 272.949,500.599 274.678,500.31 276.406,500.022
+ 278.133,499.878 279.861,499.589 281.445,499.302 283.174,498.87 284.898,498.581 286.629,498.294 288.215,497.862
+ 289.941,497.573 291.525,497.142 293.254,496.71 294.98,496.278 296.563,495.847 298.293,495.271 299.879,494.839 301.461,494.263
+ 303.189,493.829 304.773,493.255 306.357,492.679 308.086,492.103 312.838,490.374 314.422,489.653 316.006,489.079
+ 322.342,486.198 323.926,485.479 325.365,484.759 326.949,483.896 328.533,483.173 329.973,482.312 331.559,481.589
+ 332.998,480.728 334.582,479.862 336.021,478.997 337.461,478.136 338.898,477.126 340.342,476.263 341.781,475.397
+ 345.238,473.095 348.406,470.79 350.133,469.64 351.715,468.487 353.301,467.19 354.883,466.038 356.473,464.741 357.906,463.444
+ 359.35,462.294 "/>
+ <polyline id="polyline3303" fill="none" stroke="#00809E" stroke-width="0.3" points="370.725,451.495 371.59,450.63
+ 372.883,449.19 374.182,447.749 375.621,446.163 376.918,444.729 378.213,443.144 379.51,441.702 380.807,440.118 381.957,438.534
+ 383.254,436.95 384.406,435.366 385.557,433.64 386.709,432.058 387.861,430.472 389.014,428.741 390.166,427.015 391.893,424.136
+ 392.9,422.694 393.766,421.253 394.629,419.815 395.494,418.229 396.357,416.79 397.076,415.206 397.941,413.767 398.662,412.183
+ 399.525,410.599 400.246,409.155 400.963,407.573 401.686,405.987 402.406,404.405 403.127,402.819 403.846,401.237
+ 404.422,399.655 405.141,398.069 405.715,396.487 406.293,394.901 406.869,393.319 407.445,391.591 408.598,388.421
+ 409.029,386.694 409.605,385.11 410.037,383.526 410.613,381.798 411.045,380.214 411.479,378.487 411.908,376.759
+ 412.342,375.175 412.629,373.444 413.061,371.862 413.35,370.136 413.639,368.405 414.068,366.679 414.357,365.095
+ 414.646,363.366 414.789,361.64 415.076,359.909 415.365,358.183 415.51,356.599 415.654,354.87 415.941,353.144 416.23,349.687
+ 416.23,347.958 416.518,344.503 416.518,341.046 416.662,339.319 416.662,336.007 416.518,334.278 416.518,330.823 416.23,327.366
+ 416.23,325.64 415.941,322.183 415.654,320.454 415.51,318.726 415.365,317.142 415.076,315.414 414.789,313.686 414.646,311.958
+ 414.357,310.23 414.068,308.646 413.639,306.917 413.35,305.19 413.061,303.461 412.629,301.877 412.342,300.15 411.908,298.566
+ 411.479,296.837 411.045,295.11 410.613,293.526 410.037,291.797 409.605,290.213 409.029,288.629 408.598,286.902
+ 407.445,283.734 406.869,282.006 406.293,280.421 405.715,278.837 405.141,277.253 404.422,275.669 403.846,274.085
+ 403.127,272.501 402.406,270.917 401.686,269.333 400.963,267.75 400.246,266.166 399.525,264.726 398.662,263.142
+ 397.941,261.558 397.076,260.118 396.357,258.534 395.494,257.094 394.629,255.51 393.766,254.07 392.9,252.629 391.893,251.19
+ 391.029,249.75 390.166,248.31 387.861,244.854 386.709,243.27 385.557,241.686 384.406,239.958 383.254,238.374 381.957,236.79
+ 380.807,235.206 379.51,233.622 378.213,232.182 376.918,230.598 375.621,229.158 374.182,227.574 372.883,226.133 371.59,224.694
+ 370.148,223.254 368.564,221.526 366.838,219.942 365.398,218.501 362.518,215.91 360.934,214.47 359.492,213.174 357.906,211.877
+ 356.473,210.582 354.883,209.286 353.301,208.133 351.715,206.838 350.133,205.686 348.406,204.534 346.82,203.381
+ 345.238,202.232 343.51,201.078 341.781,199.926 340.342,199.064 338.898,198.198 337.461,197.192 336.021,196.326
+ 334.582,195.461 332.998,194.598 331.559,193.734 329.973,193.014 328.533,192.15 326.949,191.43 325.365,190.568 323.926,189.846
+ 316.006,186.246 314.422,185.669 312.838,184.95 308.086,183.222 306.357,182.648 304.773,182.07 303.189,181.494 301.461,181.064
+ 299.879,180.486 298.293,180.054 296.563,179.48 294.98,179.045 293.254,178.614 291.525,178.182 289.941,177.75 288.215,177.461
+ 286.629,177.03 284.898,176.742 283.174,176.454 281.445,176.024 279.861,175.734 278.133,175.446 276.406,175.301
+ 274.678,175.014 272.949,174.726 271.365,174.582 269.641,174.44 267.906,174.15 266.182,174.006 264.453,173.862 262.727,173.862
+ 260.998,173.717 259.27,173.574 255.813,173.574 254.086,173.43 252.502,173.43 "/>
+ <polyline id="polyline3305" fill="none" stroke="#00809E" stroke-width="0.3" points="-235.082,345.222 -235.082,346.95
+ -234.938,348.679 -234.938,352.136 -234.795,353.862 -234.795,357.175 -234.507,360.63 -234.507,362.358 -234.362,364.085
+ -234.362,365.671 -233.931,370.854 -233.931,372.581 -233.786,374.167 -233.354,379.351 -233.211,380.935 -233.064,382.663
+ -232.778,386.118 -232.49,387.847 -232.347,389.431 -232.202,391.155 -231.914,392.89 -231.771,394.612 -231.626,396.198
+ -231.339,397.927 -231.192,399.655 -230.906,401.237 -230.763,402.966 -230.473,404.694 -230.187,406.421 -230.042,408.007
+ -229.467,411.462 -229.179,413.046 -229.034,414.774 -228.746,416.499 -228.458,418.085 -227.883,421.542 -227.595,423.126
+ -227.307,424.854 -227.017,426.581 -226.587,428.163 -226.299,429.897 -226.011,431.479 -225.723,433.206 -225.29,434.935
+ -225.003,436.519 -224.57,438.245 -224.282,439.827 -223.994,441.562 -223.563,443.144 -223.131,444.87 -222.843,446.454
+ -222.41,448.183 -221.979,449.767 -221.688,451.495 -221.259,453.077 -220.826,454.808 -220.395,456.39 -219.963,458.118
+ -219.53,459.702 -219.097,461.431 -218.666,463.015 -218.232,464.741 -217.37,467.909 -216.938,469.64 -216.507,471.222
+ -215.931,472.808 -215.498,474.534 -215.064,476.118 -214.49,477.702 -214.057,479.431 -213.626,481.015 -213.051,482.599
+ -212.618,484.325 -211.467,487.495 -211.034,489.079 -210.458,490.806 -209.883,492.39 -209.45,493.974 -208.874,495.56
+ -208.299,497.142 -207.723,498.87 -203.688,509.958 -202.971,511.542 -202.395,513.126 -201.816,514.71 -201.242,516.294
+ -200.522,517.878 -199.37,521.046 -198.648,522.63 -198.074,524.214 -196.635,527.382 -196.057,528.966 -194.618,532.134
+ -194.042,533.573 -192.601,536.743 -191.883,538.325 -191.162,539.911 -190.442,541.349 -189.866,542.935 -189.146,544.517
+ -188.427,545.958 -187.563,547.542 -186.843,549.126 -186.122,550.567 -184.681,553.733 -183.963,555.173 -183.097,556.759
+ -182.379,558.198 -181.658,559.782 -180.795,561.222 -180.074,562.806 -179.211,564.247 -178.49,565.829 -177.626,567.271
+ -176.906,568.854 -175.177,571.733 -174.458,573.317 -173.595,574.759 -172.73,576.198 -171.866,577.782 -171.003,579.222
+ -170.282,580.663 -169.418,582.103 -168.553,583.687 -167.69,585.126 -166.826,586.565 -165.963,588.005 -165.097,589.444
+ -164.091,590.886 -163.225,592.47 -162.362,593.911 -161.498,595.349 -160.635,596.79 -159.626,598.229 -158.33,600.39
+ -156.891,602.55 -155.595,604.565 -151.274,611.046 -149.834,613.062 -148.395,615.222 -146.954,617.235 -145.515,619.397
+ -143.931,621.413 -142.49,623.573 -141.051,625.589 -139.467,627.604 -138.026,629.765 -136.442,631.782 -133.274,635.813
+ -131.834,637.829 -130.25,639.847 -128.666,641.862 -126.938,643.878 -125.354,645.749 -122.187,649.78 -120.458,651.653
+ -118.874,653.671 -117.146,655.542 -115.563,657.558 -112.106,661.302 -110.522,663.317 -108.795,665.188 -107.066,667.062
+ -101.883,672.679 -98.282,676.278 -96.555,678.149 -94.683,680.022 -92.954,681.749 -91.082,683.622 -89.354,685.349
+ -87.482,687.222 -85.61,688.948 -83.738,690.679 -82.011,692.55 -80.139,694.278 -78.267,696.005 -76.395,697.733 -74.379,699.462
+ -72.507,701.188 -70.635,702.772 -68.763,704.503 -66.746,706.229 -64.874,707.813 -62.858,709.542 -60.986,711.126
+ -58.971,712.854 -57.099,714.438 -55.082,716.022 -53.066,717.604 -42.986,725.524 -40.971,726.966 -36.938,730.134
+ -34.778,731.571 -32.763,733.157 -30.746,734.597 -28.587,736.038 -26.57,737.478 -24.41,738.917 -22.25,740.356 -20.234,741.798
+ -18.074,743.235 -15.914,744.679 -13.755,746.118 -11.738,747.413 -9.578,748.854 -7.418,750.294 -5.979,751.157 -4.538,752.022
+ -3.099,752.886 -1.658,753.749 -0.074,754.757 1.365,755.622 2.806,756.485 4.245,757.349 5.686,758.214 7.126,759.077
+ 8.71,759.94 10.149,760.806 11.59,761.524 13.029,762.39 14.613,763.253 16.054,764.118 17.493,764.837 19.077,765.7
+ 20.518,766.565 22.102,767.286 23.542,768.149 24.981,768.87 26.565,769.735 28.006,770.454 29.59,771.317 31.029,772.038
+ 32.613,772.899 34.054,773.622 35.638,774.341 37.222,775.062 38.661,775.927 40.245,776.646 41.829,777.364 43.27,778.085
+ 44.854,778.806 46.438,779.524 47.878,780.245 49.462,780.966 51.046,781.687 52.63,782.403 54.069,783.124 55.653,783.7
+ 57.237,784.421 58.821,785.142 60.405,785.716 61.989,786.438 63.43,787.157 65.014,787.735 66.598,788.454 68.182,789.03
+ 69.766,789.749 72.934,790.899 74.518,791.622 76.102,792.194 77.686,792.772 79.27,793.493 80.854,794.067 82.438,794.646
+ 84.021,795.222 85.75,795.796 90.502,797.524 92.086,798.103 93.67,798.677 95.254,799.253 96.981,799.687 98.565,800.261
+ 100.149,800.837 101.733,801.413 103.317,801.845 105.046,802.421 106.63,802.854 108.214,803.429 109.941,803.862
+ 111.525,804.438 113.109,804.87 114.838,805.444 116.422,805.878 118.006,806.31 119.733,806.741 121.317,807.317 122.901,807.749
+ 124.63,808.181 126.214,808.612 127.941,809.046 129.525,809.478 131.109,809.909 132.838,810.341 134.422,810.772
+ 136.149,811.204 137.733,811.493 139.462,811.925 141.046,812.356 142.773,812.646 144.357,813.077 146.086,813.509
+ 147.67,813.796 149.397,814.229 151.126,814.517 152.71,814.948 154.438,815.235 156.021,815.524 157.75,815.956 159.334,816.245
+ 161.062,816.532 162.789,816.821 164.373,817.253 166.102,817.54 167.829,817.829 169.413,818.118 171.142,818.403
+ 172.869,818.694 174.453,818.981 176.182,819.271 177.909,819.413 179.493,819.7 181.222,819.989 182.949,820.278 184.533,820.421
+ 186.262,820.708 187.989,820.997 189.573,821.142 191.302,821.429 193.029,821.571 194.758,821.716 196.342,822.005
+ 198.069,822.149 199.798,822.294 201.525,822.581 203.109,822.726 204.838,822.87 206.565,823.013 208.294,823.157
+ 209.878,823.302 211.605,823.444 213.334,823.589 215.062,823.735 216.789,823.878 218.373,824.022 220.102,824.165
+ 221.829,824.31 223.558,824.31 225.285,824.454 226.869,824.597 228.598,824.597 230.325,824.741 232.054,824.741 233.781,824.886
+ 235.365,824.886 237.094,825.03 240.55,825.03 242.277,825.173 262.582,825.173 264.313,825.03 267.766,825.03 269.492,824.886
+ 271.074,824.886 272.809,824.741 274.533,824.741 276.262,824.597 277.988,824.597 279.57,824.454 281.301,824.31 283.029,824.31
+ 284.758,824.165 286.484,824.022 288.066,823.878 289.797,823.735 291.525,823.589 293.254,823.444 294.98,823.302
+ 296.563,823.157 298.293,823.013 300.021,822.87 301.75,822.726 303.334,822.581 305.063,822.294 306.789,822.149 308.518,822.005
+ 310.102,821.716 311.828,821.571 313.559,821.429 315.285,821.142 316.869,820.997 318.598,820.708 320.324,820.421
+ 321.906,820.278 323.641,819.989 325.365,819.7 326.949,819.413 328.678,819.271 330.406,818.981 331.988,818.694 333.715,818.403
+ 335.445,818.118 337.029,817.829 338.758,817.54 340.484,817.253 342.066,816.821 343.797,816.532 345.525,816.245
+ 347.109,815.956 348.838,815.524 350.422,815.235 352.148,814.948 353.73,814.517 355.461,814.229 357.189,813.796
+ 358.773,813.509 360.502,813.077 362.086,812.646 363.814,812.356 365.398,811.925 367.127,811.493 368.709,811.204
+ 370.438,810.772 372.021,810.341 373.75,809.909 375.334,809.478 376.918,809.046 378.646,808.612 380.23,808.181 381.957,807.749
+ 383.541,807.317 385.127,806.741 386.854,806.31 388.438,805.878 390.021,805.444 391.75,804.87 393.334,804.438 394.918,803.862
+ 396.646,803.429 398.23,802.854 399.814,802.421 401.541,801.845 403.127,801.413 404.709,800.837 406.293,800.261
+ 407.877,799.687 409.605,799.253 411.189,798.677 412.773,798.103 414.357,797.524 419.109,795.796 420.838,795.222
+ 422.422,794.646 424.006,794.067 425.59,793.493 427.174,792.772 428.758,792.194 430.342,791.622 431.926,790.899
+ 435.094,789.749 436.678,789.03 438.262,788.454 439.846,787.735 441.43,787.157 442.869,786.438 444.453,785.716 446.037,785.142
+ 447.621,784.421 449.205,783.7 450.789,783.124 452.23,782.403 453.814,781.687 455.398,780.966 456.98,780.245 458.422,779.524
+ 460.006,778.806 461.59,778.085 463.029,777.364 464.613,776.646 466.197,775.927 467.639,775.062 469.223,774.341
+ 470.807,773.622 472.246,772.899 473.83,772.038 475.27,771.317 476.854,770.454 478.293,769.735 479.877,768.87 481.318,768.149
+ 482.758,767.286 484.342,766.565 485.781,765.7 487.365,764.837 488.807,764.118 490.246,763.253 491.83,762.39 493.27,761.524
+ 494.709,760.806 496.148,759.94 497.732,759.077 499.174,758.214 500.613,757.349 502.055,756.485 503.494,755.622
+ 504.934,754.757 506.518,753.749 507.957,752.886 509.398,752.022 510.838,751.157 512.277,750.294 514.438,748.854
+ 516.598,747.413 518.613,746.118 520.773,744.679 522.934,743.235 525.094,741.798 527.109,740.356 529.27,738.917 531.43,737.478
+ 533.445,736.038 535.605,734.597 537.621,733.157 539.639,731.571 541.795,730.134 543.814,728.55 545.83,726.966 547.846,725.524
+ 551.877,722.356 553.893,720.772 555.908,719.188 559.941,716.022 561.957,714.438 563.83,712.708 565.846,711.126
+ 567.715,709.542 569.732,707.813 571.605,706.229 573.621,704.503 575.494,702.772 577.365,701.188 579.238,699.462
+ 581.252,697.733 583.125,696.005 584.998,694.278 586.869,692.55 587.732,691.542 "/>
+ <polyline id="polyline3307" fill="none" stroke="#00809E" stroke-width="0.3" points="600.693,679.013 601.414,678.149
+ 603.141,676.278 604.869,674.55 606.74,672.679 608.471,670.806 611.926,667.062 613.654,665.188 615.379,663.317 616.963,661.302
+ 618.693,659.431 620.422,657.558 622.006,655.542 623.732,653.671 625.318,651.653 627.043,649.78 630.211,645.749
+ 631.795,643.878 633.525,641.862 635.109,639.847 636.693,637.829 638.131,635.813 639.715,633.798 641.303,631.782
+ 642.883,629.765 644.324,627.604 645.908,625.589 647.35,623.573 648.789,621.413 650.373,619.397 651.814,617.235
+ 653.252,615.222 654.693,613.062 656.131,611.046 657.572,608.886 659.014,606.726 660.453,604.565 661.748,602.55 663.189,600.39
+ 664.486,598.229 665.494,596.79 666.357,595.349 667.223,593.911 668.084,592.47 668.949,590.886 669.957,589.444 670.822,588.005
+ 671.686,586.565 672.547,585.126 673.414,583.687 674.277,582.103 675.143,580.663 675.861,579.222 676.725,577.782
+ 677.59,576.198 679.318,573.317 680.037,571.733 680.9,570.294 681.766,568.854 682.486,567.271 683.35,565.829 684.068,564.247
+ 684.934,562.806 685.654,561.222 686.518,559.782 687.236,558.198 687.957,556.759 688.822,555.173 689.541,553.733
+ 690.262,552.149 690.98,550.567 691.701,549.126 692.422,547.542 693.285,545.958 694.006,544.517 694.725,542.935
+ 695.301,541.349 696.021,539.911 696.74,538.325 698.182,535.157 698.9,533.573 699.479,532.134 700.197,530.55 700.916,528.966
+ 701.494,527.382 702.211,525.798 702.934,524.214 703.51,522.63 704.229,521.046 704.807,519.462 705.379,517.878 706.102,516.294
+ 706.678,514.71 707.252,513.126 707.83,511.542 708.547,509.958 709.125,508.374 712.582,498.87 713.156,497.142 714.311,493.974
+ 714.74,492.39 715.318,490.806 715.893,489.079 716.326,487.495 716.9,485.911 717.479,484.325 717.908,482.599 718.486,481.015
+ 718.916,479.431 719.35,477.702 719.926,476.118 720.357,474.534 720.789,472.808 721.365,471.222 721.795,469.64 722.229,467.909
+ 722.662,466.323 723.094,464.741 723.525,463.015 723.957,461.431 724.389,459.702 724.822,458.118 725.252,456.39
+ 725.686,454.808 726.117,453.077 726.547,451.495 726.838,449.767 727.27,448.183 727.701,446.454 727.99,444.87 728.422,443.144
+ 728.854,441.562 729.143,439.827 729.43,438.245 729.861,436.519 730.15,434.935 730.582,433.206 730.869,431.479 731.156,429.897
+ 731.445,428.163 731.877,426.581 732.164,424.854 732.453,423.126 732.74,421.542 733.029,419.815 733.318,418.085
+ 733.605,416.499 733.893,414.774 734.037,413.046 734.326,411.462 734.613,409.733 734.9,408.007 735.043,406.421 735.334,404.694
+ 735.621,402.966 735.766,401.237 736.051,399.655 736.197,397.927 736.486,396.198 736.627,394.612 736.773,392.89
+ 737.061,391.155 737.205,389.431 737.35,387.847 737.639,386.118 737.926,382.663 738.068,380.935 738.211,379.351
+ 738.357,377.622 738.646,374.167 738.789,372.581 738.789,370.854 738.934,369.126 739.076,367.397 739.223,365.671
+ 739.223,364.085 739.51,360.63 739.51,358.901 739.654,357.175 739.654,353.862 739.795,352.136 739.795,348.679 739.941,346.95
+ 739.941,328.374 739.795,326.647 739.795,323.19 739.654,321.462 739.654,318.149 739.51,316.421 739.51,314.694 739.223,311.238
+ 739.223,309.654 739.076,307.926 738.934,306.198 738.789,304.47 738.789,302.742 738.646,301.158 738.357,297.702
+ 738.211,295.974 738.068,294.39 737.926,292.662 737.639,289.206 737.35,287.478 737.205,285.894 737.061,284.166 736.773,282.438
+ 736.627,280.709 736.486,279.125 736.197,277.398 736.051,275.669 735.766,274.085 735.621,272.358 735.334,270.629
+ 735.043,268.902 734.9,267.318 734.613,265.59 734.326,263.862 734.037,262.278 733.893,260.549 733.605,258.822 733.318,257.238
+ 733.029,255.51 732.74,253.782 732.453,252.198 732.164,250.47 731.877,248.742 731.445,247.158 731.156,245.43 730.869,243.846
+ 730.582,242.118 730.15,240.39 729.861,238.806 729.43,237.078 729.143,235.494 728.854,233.766 728.422,232.182 727.99,230.454
+ 727.701,228.87 727.27,227.142 726.838,225.558 726.547,223.83 726.117,222.246 725.686,220.518 725.252,218.934 724.822,217.206
+ 724.389,215.622 723.957,213.894 723.525,212.31 723.094,210.582 722.662,208.998 722.229,207.414 721.795,205.686
+ 721.365,204.102 720.789,202.518 720.357,200.79 719.926,199.206 719.35,197.622 718.916,195.894 718.486,194.31 717.908,192.726
+ 717.479,190.998 716.9,189.414 716.326,187.83 715.893,186.246 715.318,184.518 714.74,182.934 714.311,181.35 713.732,179.766
+ 713.156,178.182 712.582,176.454 709.125,166.95 708.547,165.366 707.83,163.782 707.252,162.198 706.678,160.614 706.102,159.03
+ 705.379,157.446 704.807,155.862 704.229,154.278 703.51,152.694 702.934,151.11 702.211,149.526 701.494,147.942 700.916,146.358
+ 700.197,144.776 699.479,143.192 698.9,141.75 698.182,140.166 697.459,138.582 696.74,136.998 696.021,135.414 695.301,133.976
+ 694.725,132.392 694.006,130.808 693.285,129.366 692.422,127.782 691.701,126.198 690.98,124.758 690.262,123.174 689.541,121.59
+ 688.822,120.15 687.957,118.568 687.236,117.125 686.518,115.542 685.654,114.104 684.934,112.52 684.068,111.078 683.35,109.494
+ 682.486,108.056 681.766,106.472 680.9,105.03 680.037,103.592 679.318,102.006 678.453,100.568 677.59,99.127 676.725,97.542
+ 675.861,96.104 675.143,94.662 674.277,93.224 673.414,91.64 672.547,90.198 670.822,87.318 669.957,85.877 668.949,84.44
+ 668.084,82.856 667.223,81.414 666.357,79.976 665.494,78.534 664.486,77.096 663.189,74.936 661.748,72.776 660.453,70.76
+ 659.014,68.6 657.572,66.44 656.131,64.278 654.693,62.264 653.252,60.104 651.814,58.085 650.373,55.928 648.789,53.91
+ 647.35,51.75 645.908,49.734 644.324,47.72 642.883,45.56 641.303,43.542 638.131,39.512 636.693,37.494 635.109,35.48
+ 633.525,33.463 631.795,31.446 630.211,29.574 628.627,27.56 627.043,25.543 625.318,23.672 623.732,21.654 622.006,19.782
+ 620.422,17.768 618.693,15.896 616.963,14.024 615.379,12.008 613.654,10.136 608.471,4.52 606.74,2.648 604.869,0.776
+ 603.141,-0.953 601.414,-2.824 599.541,-4.696 597.814,-6.426 594.211,-10.024 592.342,-11.896 588.598,-15.352 586.869,-17.224
+ 584.998,-18.953 583.125,-20.682 581.252,-22.408 579.238,-24.138 577.365,-25.864 575.494,-27.449 573.621,-29.178
+ 571.605,-30.904 569.732,-32.488 567.715,-34.218 565.846,-35.802 563.83,-37.528 561.957,-39.112 557.926,-42.28 555.908,-43.864
+ 553.893,-45.449 551.877,-47.033 547.846,-50.201 545.83,-51.642 541.795,-54.808 539.639,-56.249 537.621,-57.833
+ 535.605,-59.272 533.445,-60.712 531.43,-62.152 527.109,-65.033 525.094,-66.472 518.613,-70.792 516.598,-72.088
+ 512.277,-74.968 506.518,-78.424 504.934,-79.432 499.174,-82.888 497.732,-83.752 496.148,-84.617 494.709,-85.48 493.27,-86.201
+ 491.83,-87.064 490.246,-87.93 488.807,-88.792 487.365,-89.514 485.781,-90.376 484.342,-91.24 482.758,-91.96 481.318,-92.824
+ 479.877,-93.544 478.293,-94.408 476.854,-95.128 475.27,-95.992 473.83,-96.712 472.246,-97.576 470.807,-98.296 467.639,-99.736
+ 466.197,-100.6 463.029,-102.041 461.59,-102.762 460.006,-103.48 458.422,-104.201 456.98,-104.92 455.398,-105.642
+ 453.814,-106.36 452.23,-107.081 450.789,-107.8 449.205,-108.376 447.621,-109.098 446.037,-109.816 444.453,-110.392
+ 442.869,-111.112 441.43,-111.833 439.846,-112.408 438.262,-113.128 436.678,-113.705 435.094,-114.424 431.926,-115.576
+ 430.342,-116.296 428.758,-116.873 427.174,-117.448 425.59,-118.168 422.422,-119.32 420.838,-119.896 419.109,-120.472
+ 417.525,-121.05 415.941,-121.625 411.189,-123.352 409.605,-123.93 407.877,-124.36 406.293,-124.936 404.709,-125.512
+ 403.127,-126.088 401.541,-126.52 399.814,-127.098 398.23,-127.528 396.646,-128.104 394.918,-128.537 393.334,-129.112
+ 391.75,-129.544 390.021,-130.121 386.854,-130.984 385.127,-131.417 383.541,-131.992 381.957,-132.424 380.23,-132.856
+ 378.646,-133.289 376.918,-133.72 373.75,-134.584 372.021,-135.016 370.438,-135.448 368.709,-135.88 367.127,-136.168
+ 365.398,-136.6 363.814,-137.033 362.086,-137.32 360.502,-137.752 358.773,-138.184 357.189,-138.472 355.461,-138.904
+ 353.73,-139.192 352.148,-139.625 350.422,-139.912 348.838,-140.201 347.109,-140.632 345.525,-140.92 343.797,-141.208
+ 342.066,-141.497 340.484,-141.928 338.758,-142.216 337.029,-142.504 335.445,-142.792 333.715,-143.081 331.988,-143.369
+ 330.406,-143.656 328.678,-143.944 326.949,-144.088 325.365,-144.376 323.641,-144.665 321.906,-144.953 320.324,-145.098
+ 318.598,-145.384 316.869,-145.672 315.285,-145.816 313.559,-146.104 311.828,-146.249 310.102,-146.392 308.518,-146.682
+ 306.789,-146.824 305.063,-146.968 303.334,-147.256 301.75,-147.4 298.293,-147.688 296.563,-147.833 294.98,-147.976
+ 293.254,-148.121 291.525,-148.266 289.797,-148.408 288.066,-148.552 286.484,-148.696 284.758,-148.84 283.029,-148.984
+ 281.301,-148.984 279.57,-149.128 277.988,-149.272 276.262,-149.272 274.533,-149.417 272.809,-149.417 271.074,-149.56
+ 269.492,-149.56 267.766,-149.705 264.313,-149.705 262.582,-149.85 252.502,-149.85 "/>
+
+ <path id="path3309" fill="none" stroke="#00809E" stroke-width="0.3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M699.043,801.989l-1.438,1.439l-1.729,1.584l-1.584,1.584l-1.584,1.443l-1.727,1.584l-1.582,1.582l-1.729,1.441l-1.586,1.584
+ l-1.727,1.439l-1.73,1.584l-1.584,1.441l-1.723,1.439l-1.729,1.584l-1.584,1.441l-1.729,1.439l-1.73,1.584l-1.723,1.443
+ l-1.729,1.439l-1.729,1.439l-1.725,1.439l-1.73,1.441l-1.727,1.441l-1.729,1.439l-1.727,1.441l-1.727,1.295l-1.729,1.441
+ l-1.729,1.441l-1.871,1.441l-1.729,1.293l-3.455,2.879l-1.875,1.295l-1.73,1.443l-1.869,1.291l-1.729,1.297l-1.871,1.439
+ l-1.729,1.295l-1.871,1.295l-1.73,1.443l-1.875,1.293l-1.869,1.297l-1.729,1.293l-1.873,1.297l-1.873,1.293l-1.871,1.295
+ l-1.729,1.297l-3.744,2.592l-1.871,1.152l-1.875,1.295l-1.873,1.295l-1.873,1.15l-1.873,1.297l-1.873,1.295l-1.871,1.15
+ l-1.877,1.295l-2.014,1.154l-1.871,1.148l-1.875,1.297l-1.873,1.152l-1.875,1.15l-2.014,1.152l-1.873,1.15l-1.873,1.297
+ l-2.016,1.15l-1.873,1.152l-2.02,1.15l-1.869,1.012l-2.016,1.148l-1.875,1.152l-2.016,1.152l-1.875,1.152l-2.018,1.008
+ l-2.014,1.152l-1.871,1.008l-2.018,1.15l-2.02,1.008l-1.869,1.152l-2.02,1.008l-2.016,1.152l-2.016,1.01l-2.016,1.006l-1.873,1.008
+ l-2.018,1.008l-2.016,1.154l-2.016,1.008l-2.016,1.006l-2.02,1.01l-2.016,0.863l-2.016,1.008l-4.031,2.018l-2.018,1.01
+ l-2.158,0.861l-2.018,1.01l-2.016,0.865l-2.018,1.008l-2.016,0.863l-2.16,1.01l-4.033,1.727l-2.016,1.008l-2.16,0.865l-2.016,0.867
+ l-2.018,0.861l-2.16,0.865l-2.016,0.867l-2.16,0.863l-2.016,0.865l-1.584,0.574 M756.502,739.062l-1.297,1.439l-1.439,1.729
+ l-1.295,1.727l-1.441,1.729l-1.439,1.727l-1.439,1.729l-1.443,1.729l-1.439,1.725l-4.32,5.186l-1.584,1.729l-1.439,1.725
+ l-1.439,1.584l-1.586,1.73l-1.439,1.732l-1.438,1.586l-1.584,1.725l-1.439,1.729l-1.584,1.582l-1.443,1.73l-1.584,1.584
+ l-1.582,1.725l-1.441,1.584l-1.584,1.586l-1.584,1.727l-1.584,1.584l-1.439,1.584l-3.168,3.168l-0.576,0.721"/>
+
+ <path id="path3311" fill="none" stroke="#FC4E32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M331.559-287.656l13.967,5.042l10.225,5.903l10.943,7.633l4.752,3.888l7.344,8.208l7.342,9.647l5.043,8.064l4.23,7.936l1.34,8.032
+ l-0.676,7.792l-0.719,3.024l-2.16,6.336l-4.607,9.359l-5.043,8.208l-2.447,4.32l-4.607,7.056l-4.32,6.48l-6.768,10.943
+ l-1.875,3.313l-6.768,9.504l-4.617,5.57l-5.186,6.292l-2.791,3.41l-3.123,3.456l-3.455,3.458l-4.449,4.168l-2.596,2.447
+ l-4.605,3.168l-3.168,2.305l-2.451,1.728l-1.871,1.008l-6.768,3.889l-6.768,2.447l-6.336,2.305l-7.633,2.88l-5.76,2.16
+ l-4.896,2.014l-6.914,2.882l-4.891,3.601l-4.32,3.456l-2.16,4.319l-1.008,1.152l-2.453,5.04l-0.141,4.464l1.586,5.472l3.023,5.76
+ l5.473,6.625l3.598,3.455l4.609,4.896l5.328,4.752l4.607,1.872l2.16,1.006l2.451,1.442l3.023,1.438l3.887,1.296l4.895,2.16
+ l5.473,1.872l3.887,0.72l7.201,0.723l5.619,1.008l6.191,1.872l5.902,3.023l5.758,2.881l3.119,1.871l4.258,4.068l5.443,5.868
+ l4.754,4.752l7.199,8.208l5.904,6.624l3.309,5.04l1.152,1.296l2.018,2.878l2.158,3.602l3.313,4.318l3.168,5.33l4.176,6.624
+ l2.594,3.598l3.887,5.616l5.473,6.482l3.219,3.031l3.547,4.454l1.646,1.98l2.529,2.052l2.387,2.008l1.342,1.011l11.68,8.357
+ l6.047,5.04l5.326,4.176l5.043,3.603l-1.008-0.722l2.16,1.151l19.008,13.104l9.072,6.479l5.184,3.601l5.184,4.607l5.615,5.184
+ l1.875,1.873l3.168,3.023l4.986,6.624l4.949,7.776 M-232.49,339.749l-4.032,6.049l-5.326,7.201l-4.897,7.775l-4.318,2.736
+ M172.438-288.376l-41.472,2.736l-8.353,1.872l-10.08,2.592l-12.096,5.185l-8.64,5.184l-5.904,4.032l-7.056,4.464l-8.641,8.063
+ l-8.208,9.648l-5.472,9.216l-5.328,13.968l-2.016,7.057l-1.584,7.632l-0.721,8.496v6.912l1.44,6.624l2.16,3.168l4.752,3.168
+ l6.479,1.439l9.36-0.576h6.912l10.368,1.729l10.368,3.456l6.048,2.304l2.88,2.304l6.768,6.48l3.313,4.607l9.216,13.248l6.479,9.648
+ l3.456,9.216l1.872,4.752l2.88,7.776l1.872,9.648l0.288,2.88l0.433,4.605l1.008,8.21l-0.433,10.8l0.433,3.744v4.32l-0.72,8.063
+ l-2.16,12.526l-3.313,14.69l-2.88,8.496l-4.464,10.224l-3.744,7.776l-1.008,1.871l-4.608,7.774l-3.888,5.04l-2.448,2.738
+ l-4.752,5.04l-6.336,5.04l-8.64,6.336L88.054,32.6l-9.937,6.336l-12.239,7.2L54.069,53.48l-7.92,4.319l-8.063,4.752l-4.608,5.183
+ l-5.904,6.048l-4.031,3.602l-5.473,5.326L6.838,93.366l-4.464,4.322l-9.217,8.062l-7.92,6.192l-9.647,7.344l-14.256,9.792
+ l-9.505,8.353l-6.479,8.063l-4.608,3.888l-3.312,3.168l-5.328,5.328l-2.448,1.872l-5.184,6.192l-4.752,4.607l-10.08,8.931
+ l-9.792,8.062l-5.185,5.328l-7.056,5.906l-8.496,9.934l-6.191,7.488l-3.601,5.473l-7.344,12.384l-4.464,7.487l-2.88,5.761
+ l-7.92,10.224l-6.624,6.768l-3.311,4.608l-7.778,7.488l-6.479,6.048l-3.888,3.744l-10.513,6.912l-12.096,7.056l-5.038,3.312
+ l-5.906,6.769l-4.752,6.048l-2.88,5.76l-3.168,5.617l-5.04,9.359"/>
+
+ <polyline id="polyline3313" fill="none" stroke="#FC4E32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 507.957,147.51 510.547,152.549 513.43,159.318 515.877,166.374 517.318,171.846 519.479,182.07 520.486,189.27 522.211,199.926
+ 523.223,209.574 523.365,216.776 523.654,222.534 523.654,237.942 523.51,243.558 523.076,250.758 522.646,258.39 522.357,267.174
+ 522.934,275.526 523.365,282.87 525.238,289.638 525.67,293.094 530.564,306.774 535.174,316.709 540.213,326.358 541.365,328.519
+ 542.949,331.253 548.131,339.894 552.74,349.11 557.494,358.038 561.379,366.245 564.262,372.438 568.148,380.647 572.324,390.007
+ 576.211,400.519 577.654,403.827 579.814,408.151 582.406,414.487 586.582,422.983 588.021,430.183 588.021,444.729
+ 587.303,449.479 586.293,454.808 584.564,461.144 583.172,465.183 580.867,472.958 576.781,481.733 570.883,491.813
+ 567.285,499.589 564.557,504.478 560.518,511.397 556.627,518.454 550.582,526.087 546.262,530.694 540.646,537.173
+ 536.037,542.214 530.277,549.413 525.957,557.911 523.365,563.958 520.916,572.31 519.908,580.087 518.9,588.294 517.748,594.772
+ 517.029,597.653 516.311,602.839 515.303,608.022 514.869,613.206 513.572,618.39 511.27,624.726 507.379,628.612 501.324,632.495
+ 493.557,634.374 483.766,634.663 472.822,634.374 465.334,632.79 456.98,629.765 453.094,628.612 448.197,626.165 443.732,623.286
+ 439.127,620.839 432.357,618.39 423.715,616.663 415.654,617.813 406.438,619.829 398.807,622.71 391.75,625.589 387.43,627.03
+ 384.838,628.181 382.389,629.478 375.621,633.509 363.525,642.005 356.324,647.765 348.838,655.542 339.189,664.038
+ 333.43,667.493 324.502,673.397 316.438,679.013 310.678,683.046 303.047,689.095 291.379,697.013 283.75,701.478 "/>
+ <path id="path3315" fill="none" stroke="#FC4E32" stroke-width="1.5" stroke-miterlimit="1" d="M-246.889,471.509l-4.275-2.734
+ M283.75,701.478l-7.344,3.6l-8.641,4.609l-8.207,4.463l-7.919,3.168l-13.392,3.168l-13.969,2.879l-13.527,2.949l-16.856,4.252
+ l-14.136,3.41l-10.2,2.063l-6.746,1.059l-5.782,0.666l-16.128,3.17l-6.768-0.719l-5.328-1.729l-8.064-4.75l-6.191-5.332
+ l-3.889-8.207l-4.752-7.199l-3.168-3.742l-9.504-6.914l-10.034-0.551l-10.688,2.045l-6.206,1.818l-3.888,1.229l-5.616,2.373
+ l-8.208,4.316l-8.368,4.344l-8.912,4.299l-11.808,5.76l-14.256,6.768l-11.208,5.32l-11.688,4.76l-9.504,3.6l-6.048,2.451
+ l-9.36,2.877l-8.496,1.875l-8.533,1.197l-8.314,0.385l-11.232,0.434h-15.119l-11.809-1.008l-10.224-1.443l-9.362-1.975
+ l-7.766-1.576l-10.354-2.516l-9.958-2.715l-15.408-4.176l-10.51-3.291l-8.93-3.477l-5.328-2.018l-4.896-2.592l-8.353-4.896
+ l-4.454-3.424l-4.214-4.549l-4.428-5.395l-3.267-7.291l-0.098-6.299l1.318-4.721l2.325-2.592l2.448-2.162l3.313-3.598l3.602-4.178
+ l4.895-7.199l1.441-4.768l0.864-5.604l0.286-4.318l-0.286-3.887l-1.872-9.504l-2.16-7.92l-1.729-7.203l-3.168-10.367l-2.372-7.609
+ l-2.956-8.641l-1.826-5.35l-2.16-5.041l-2.494-7.775l-1.728-7.486l-2.017-6.77l-0.863-9.215l0.432-8.93l0.72-3.744l0.721-2.447
+ l2.735-8.785l1.874-5.76l2.448-8.639l0.72-3.887l0.431-4.609v-4.033l-0.221-2.879l-0.939-4.451l-1.508-4.143l-1.977-3.061
+ l-2.988-3.898l-3.121-3.621l-4.032-4.611l-6.048-6.07l-4.223-3.984l-3.666-4.367"/>
+
+ <line id="line3317" fill="none" stroke="#FC4E32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" x1="331.988" y1="-287.656" x2="322.918" y2="-288.665"/>
+ <rect id="rect3319" x="-115.706" y="-206.728" fill="#E6F6ED" width="19.584" height="25.775"/>
+ <rect id="rect3321" x="-66.458" y="-207.592" fill="#E6F6ED" width="23.472" height="27.36"/>
+ <rect id="rect3323" x="-150.843" y="-174.76" fill="#E6F6ED" width="21.024" height="25.92"/>
+ <rect id="rect3325" x="516.598" y="-170.152" fill="#E6F6ED" width="30.672" height="37.728"/>
+ <rect id="rect3327" x="-243.146" y="363.222" fill="#E6F6ED" width="19.729" height="33.266"/>
+ <rect id="rect3329" x="-124.635" y="539.478" fill="#E6F6ED" width="22.32" height="19.152"/>
+ <rect id="rect3331" x="241.731" y="576.501" fill="#E6F6ED" width="12.671" height="16.707"/>
+ <rect id="rect3333" x="35.493" y="682.181" fill="#E6F6ED" width="17.568" height="19.152"/>
+ <rect id="rect3335" x="-16.347" y="771.317" fill="#E6F6ED" width="56.305" height="15.84"/>
+ <rect id="rect3337" x="-222.555" y="193.877" fill="#7FC643" width="12.24" height="22.032"/>
+ <rect id="rect3339" x="243.142" y="217.064" fill="#FFFFFF" width="15.552" height="53.998"/>
+ <rect id="rect3341" x="289.797" y="261.702" fill="#FFFFFF" width="6.049" height="9.36"/>
+ <rect id="rect3343" x="626.324" y="114.822" fill="#FFFF7F" width="7.631" height="7.92"/>
+ <rect id="rect3345" x="521.926" y="733.013" fill="#FFFF7F" width="14.543" height="10.801"/>
+ <rect id="rect3347" x="514.006" y="743.382" fill="#FFFF7F" width="10.799" height="8.207"/>
+ <rect id="rect3349" x="-61.274" y="823.735" fill="#E6F6ED" width="34.56" height="57.598"/>
+ <rect id="rect3351" x="-181.225" y="819.124" fill="#E6F6ED" width="77.76" height="61.775"/>
+ <rect id="rect3353" x="563.686" y="115.688" fill="#FFFF7F" width="6.479" height="8.35"/>
+ <rect id="rect3355" x="-89.354" y="880.47" fill="#E6F6ED" width="71.568" height="35.855"/>
+ <rect id="rect3357" x="-77.69" y="538.325" fill="#E6F6ED" width="22.32" height="19.152"/>
+ <rect id="rect3359" x="246.166" y="671.813" fill="#E6F6ED" width="13.822" height="14.689"/>
+ <polyline id="polyline3361" fill="#CCE83A" points="46.869,-16.506 55.365,-16.506 53.178,-8.758 53.865,-6.512 52.18,-6.451
+ 46.869,-6.138 46.869,-16.506 "/>
+ <rect id="rect3363" x="572.037" y="694.997" fill="#FFFF7F" width="11.664" height="10.656"/>
+ <rect id="rect3365" x="-243.866" y="324.917" fill="#E6F6ED" width="20.016" height="22.465"/>
+
+ <path id="path3367" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M203.686,935.188l1.44-0.717l1.584-1.008l0.575-1.443l1.44-1.008l0.144-0.432l0.576-0.287l1.44-0.146l1.439-0.432l1.296-0.43
+ l1.44,0.572l1.584-0.572l1.44-0.291l1.439,1.15l0.864,0.723v-0.436l-0.864-1.727l1.152-0.865l0.72,0.432v0.145l0.145,0.143
+ l0.575,1.295l1.44,0.289l0.576-0.719h0.288l-0.145-0.141h-0.288l-0.576,0.43l-1.439-0.719l-0.432-0.576v-0.145l-0.576-1.439
+ l-0.145-1.584l1.008-1.439l0.433-0.145l0.576-0.432l-1.44-0.432l-0.144-1.01l0.144-1.441l1.44-0.574l0.288-1.441l0.863-1.441
+ l-0.432-0.574l0.144-0.287l0.288-0.146h-0.432l-1.44,0.434l-0.288-0.287l-0.144-0.576l-0.144,0.576l-1.009,1.439v0.43l-0.72-1.438
+ l0.288-1.443l-0.288,0.145l-1.44-0.145l-0.287-1.439l-1.009-1.584l-1.008-1.439l0.72-1.441l0.576-1.441l1.008-1.584l0.864-1.439
+ l0.864,0.145l1.584-0.434l0.864-0.143v-0.434l-0.288-0.145h-2.88l-1.44-0.43h-0.72l-0.145,1.439l-1.439,0.289l-1.44,0.287
+ l-1.584,1.152l-0.432-0.143l-0.145-0.865l-1.439,0.143l-1.44-1.008l-0.288-0.576l0.145,1.441v1.439l-1.44,0.145l-1.296-1.441
+ l-1.439-1.15l-1.44,0.434l0.145,1.439l0.432,1.582l-0.864-1.439l-0.432-0.574l-1.152-1.441l-0.432-1.584l0.288-1.008l0.863,0.143
+ l0.433,1.441h0.288v-0.576l-0.288-0.721v-0.143l0.288-1.441l0.288-0.719l1.439-1.15l0.433-1.582l1.151-1.443l1.152-1.439
+ l-0.576-1.441l-1.584-1.152l0.144-1.438l-0.144-1.586l1.008-1.297l1.44,0.434l1.584,0.289l-0.864-0.289l-1.439-1.152l-1.009-1.439
+ l1.009-1.586l-1.44,0.146l0.144,1.584l-0.288,1.438l-0.72,1.441l-0.432,0.289l-0.576-1.439l-0.864,0.432l-0.576,1.439l-1.151-1.439
+ l0.288-1.441l1.151-1.439l2.16-1.729v-0.141l-1.439,1.15l-2.881,2.016l-0.144,1.584l0.576,1.439l-0.72,1.441l-0.864,1.441
+ l-0.145,1.439l-0.72,1.584v1.441l-1.439,0.432l-0.864,0.145l-0.145-1.439l0.721-1.439l0.288-1.586l0.575-1.441l1.44-1.439
+ l-1.008-1.441l0.144-1.441l0.288-1.439l0.288-0.289l1.008-1.441l0.433-1.441l0.287-1.438l0.433-1.584l0.72,0.145l1.44,0.287
+ l1.296-1.439l-1.44,1.152l-1.296-0.145l1.296-1.584l-1.439,0.287l0.144-0.434l1.008-1.15l1.44-0.434l1.439-0.432l-1.439,0.289
+ h-0.145l0.288-1.584l0.288-0.434l-1.439,1.441l-1.44,1.012l-1.439,1.291l-1.44,0.578l-1.44-0.721l-1.439-1.584l1.584,0.289
+ l1.439-0.865l1.44,0.289l-1.44-0.432l-1.584,0.143h-1.439l-1.44-0.287l1.44-1.01l1.439,0.145l0.288,0.287l0.721-1.439l-0.576-1.584
+ l1.439-1.295l1.44,0.719l-1.44-0.865l1.44-1.008l1.44,0.143h0.287l-1.439-0.43l-0.576-1.441l-0.144-0.289h1.584l0.432,0.289
+ l-0.576-1.008h-0.432l-1.44-0.143l1.44-1.008l-1.44-0.146l-0.72-1.438l-0.145-1.443l1.44,0.289h1.44l-1.44-0.574l-0.288-0.721
+ l-0.288-1.584v-1.441l1.44,0.434l0.144-1.439l1.44,0.287h1.439l1.44-0.143l-0.576-1.441l-1.584-1.148l1.296-1.443l-0.432-1.441
+ l1.439-0.43l1.44,0.287h0.432v-0.434l-0.288,0.291l-1.151-1.584l0.864-1.441l0.72,0.143v-0.143l-0.433-1.441l0.721-1.438
+ l1.439,0.576l1.584,0.861l-1.008,1.441l1.44-1.008l1.439-0.287l-0.288,0.861l0.288,0.146l1.44-0.434h0.288l1.439-0.434h1.44
+ l1.584-0.141l1.439-0.576l0.576,0.43l1.44,0.146l0.144-0.867h1.44l1.439,0.143l-0.575,1.584l0.144,1.443l-0.864,1.439l-1.439,1.15
+ l-1.44,1.01l-1.439,1.293l-0.433,0.293l-1.439,0.863l-1.44,1.15l-0.288,0.156h-0.864l-0.144,0.143l-0.288,1.443l-1.44-0.293
+ l-0.72-0.43l-0.288-0.291v0.145l0.145,0.145l1.439,0.721l1.44,0.717h1.439l-0.72,1.584l-1.439-0.145l-1.44,0.576l-1.584,1.008
+ l1.584-0.717h1.44l-0.864,1.584l-0.433,1.008l1.44-0.721l1.44-0.576l1.439-0.432h0.145l1.439-0.145l0.145-0.287l1.439-0.863
+ l1.44,0.141l1.439,0.721h0.145l1.439-0.287h1.44l1.439,0.287l1.584,0.287l1.44-0.287h1.44l1.439,0.432l1.44,1.15l0.144,1.441
+ l-0.288,1.441l-1.439,1.441l-0.721,1.439l-0.288,1.439l-0.432,1.441l-0.864,1.441l-0.432,1.439l-1.44,1.295l-0.432,0.578
+ l-0.288,0.576v0.141l-0.576,1.443l-1.439,1.293l-1.44,0.432l-1.439,0.291l-0.288,0.143l-1.44,0.287l-1.439,1.01l-0.433-0.145v0.145
+ l0.145,0.145h0.432l1.44-0.576l1.296-0.432l0.432-0.146l1.152,1.441l1.584,0.576l-0.288,1.439l-1.44,0.434l-1.439-0.289
+ l-0.433,0.432l-1.439,1.152l-1.44,0.721l-0.863,0.43h-0.145l-1.44-0.574l-1.584-0.145v-0.143l-0.287-0.289l-0.864-0.576
+ l1.008,1.008l1.44,0.719l0.575,0.145l1.152,0.289h0.145l1.584,0.289l1.439,0.576l1.44-0.434l1.439-1.293l1.44,0.287l1.584,1.008
+ l0.864,0.719l1.439,0.434l1.44,1.441l0.288,0.432l0.287,0.576l1.152,1.439l1.44,1.154l1.008,1.441l0.288,1.438v1.441l0.144,0.143
+ l0.145,1.441l0.288,1.441v0.287l0.432,0.865l0.288,1.008v0.143l0.576,1.152l0.288,1.441l0.575,1.439l0.145,0.289l0.576,0.865
+ l0.288,1.152h1.439l1.44,0.432l0.864,0.289l1.584,1.008l1.439,1.443l0.576,1.439l1.439,1.439l0.721,1.008v1.584l0.144,1.439
+ l0.576,1.441l1.152,1.441l0.288,0.287l1.008,1.441l0.287,1.441l-1.295-1.006l-1.584-0.146l-1.44-1.438l-0.72,0.141l-0.864,0.289
+ l-1.44-0.289l-1.439,0.576l0.288,0.143h1.439l1.152-0.143l0.864-0.145l1.584,1.152l1.439,1.008l0.721,0.576l0.144,0.143l1.44,0.865
+ l1.008,1.441l0.576,1.439l0.432,1.443l-0.145,1.584l-1.439,1.008l-0.287,0.141 M209.878,935.188l-1.44-0.141l-1.152,0.141"/>
+
+ <path id="path3369" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M658.006-267.352l1.584-0.145l1.439-0.72l1.441-0.432l1.439-0.433l1.586-0.288l1.439-0.72l1.439-0.144h1.443l1.438-0.145
+ l1.154-1.439l-0.721-1.584l-1.441,1.584l-1.582,0.432l-1.441-0.432l-1.441,0.72l-1.439,0.288l-1.584,0.288l-1.439,0.144
+ l-1.586-0.144l-1.441-0.72l-1.439,0.287l-1.439-0.72l0.576,1.584l1.439,1.44L658.006-267.352 M756.502-264.041l-1.586-1.008
+ l-1.438-0.144l-1.588,1.008l-1.439,0.288l-0.141,1.439l-1.443,1.44h-0.432l-0.287-1.44l-1.588-0.576l-0.287-1.584l1.295-1.439
+ l0.865-1.44l0.145-1.439l-0.432-0.576h-1.443l-1.584,0.72l-0.287-1.439l-0.576-1.584l-1.439-0.288l-1.586,0.864l-1.443,1.008
+ l-0.285,1.584l1.439,0.576l1.584,0.863l1.439,0.721l0.436,1.439l-1.584,1.008l-1.445,0.721l-1.438,0.72l-1.439-2.88l-0.145-1.44
+ l-1.441-1.584h-1.439l1.439-1.439l1.441-1.009l1.008-1.439l1.297-1.44v-0.288l1.008-1.439l0.717-1.44l0.574-1.439l-0.717-1.584
+ l-0.143-1.44l-0.145-0.144v-1.584l0.145-1.44l0.861-1.439l0.723-1.44l-0.145-1.296 M521.061-247.912l-0.572-0.289 M532.438-247.192
+ l-0.576,1.439L532.438-247.192 M533.59-254.249l-1.584-0.863l-1.441,1.151l-0.574,1.44l-1.445,1.008l1.445,0.72l1.293-1.439
+ l1.439-0.864L533.59-254.249 M535.75-255.256l0.141-1.439l-0.287,1.439H535.75 M543.67-258.856l-1.586,0.144l-1.438,0.288
+ l1.438,0.145l1.441-0.288L543.67-258.856 M556.055-264.328v1.439V-264.328 M561.094-267.497l-1.584-0.144L561.094-267.497
+ M569.877-270.232l-1.439-0.288l1.439,1.151V-270.232 M573.479-271.384l1.438-0.144l1.586-0.721l1.439-0.288l1.438-0.432
+ l1.445,0.432l-1.445-1.151l-1.584,0.288l-1.438,0.432l-1.441,0.288l-1.584,0.864L573.479-271.384 M748.438-242.152v-1.44
+ l1.584-0.432l-0.432,1.439L748.438-242.152 M203.974,916.899l0.576-1.438l1.296-1.443l0.864-1.439l1.439-0.865l0.576,1.439
+ l-0.72,1.586l-1.296,1.439l-1.44,0.719h-1.296"/>
+
+ <path id="path3371" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M385.846-207.592l1.584,0.576l1.439,0.72l1.441-0.576l-1.295-1.584l-0.576-1.439v-1.44l-0.576-1.584l-0.721-1.439l-1.439-1.296
+ l-0.574-1.584l-1.154,1.584l0.867,1.584l0.863,1.439l0.576,1.584l0.145,1.44l-0.721,1.439L385.846-207.592 M376.197-217.384
+ l-0.576-1.439l-1.15-1.44l-1.588-1.44l-1.006-1.439l0.291,1.439l2.592,2.881l1.15,1.439H376.197 M326.518-259.432l1.439,0.864
+ l-0.578,1.439h1.586l1.441,0.864l-1.441,1.152h-1.439l-1.584-0.721l-1.584-0.144l-1.439-0.864l-1.012-1.439l1.443-0.288
+ l1.584,0.144l1.439-1.008H326.518 M319.605-266.488l1.441,0.72l1.441,0.432l-1.586,0.288l-1.441,0.864h-1.439l0.717-1.44
+ L319.605-266.488 M268.197-277.144l0.576,1.584L268.197-277.144 M281.301-277.72l0.291,1.44l-1.443,1.008l-1.438,1.151
+ l-1.441,0.721l0.863-1.44l0.145-1.439l1.584,0.288l1.152-1.44L281.301-277.72 M269.781-279.016l1.584,0.72l-1.584-0.576V-279.016
+ M260.563-285.64l1.443,1.296l1.439,1.296l1.584,0.864l1.443,0.576l-1.59,0.144l-1.438-0.576l-1.297-1.439l-1.438-1.008
+ l-1.441-0.433L260.563-285.64 M701.781-217.24l0.145-1.44l0.143,1.44H701.781 M702.068-221.128l-0.719-1.439l1.439-0.721
+ l0.576,1.44L702.068-221.128 M655.846-280.457l1.439-0.72h1.584l0.576,1.584l-1.584-0.144l-1.439-0.433L655.846-280.457
+ M621.861-272.249l1.441,0.721l1.58,0.144l1.443-0.288l1.584-0.432h1.441l1.439,0.864l1.295,1.439l-0.43,1.44h1.584l0.432-1.44
+ l1.439,0.145l1.438-0.288l1.584-0.288l1.443,0.288l1.441-0.576l1.584-0.145l1.439,0.145l1.443,0.144l0.287-1.439l1.584-0.576
+ l1.439-0.145h1.443l0.717-1.439l-1.439,0.432h-1.584l-1.439-0.576l-1.445,0.721l-1.438,0.288h-1.584l-1.439,0.144l-1.443,1.296
+ l-1.439-1.008l-1.584-0.432l-1.439-0.145l-1.584,0.433l-1.439,0.144h-1.445l-1.438-0.432l-1.584-0.288h-1.441l-1.584-1.008
+ l-1.441-0.288l-1.15,1.439L621.861-272.249"/>
+
+ <path id="path3373" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M149.686,935.188l1.152-1.439l1.439,0.143h1.872v0.146h1.44l1.439-0.146l1.44-0.43h1.584l0.72,0.141v-0.141l-1.439-0.436
+ l-0.433-1.439l-1.439,1.152l-1.44,0.863l-1.439,0.145l-1.44-0.576l-1.44-0.287h-0.288l-1.439,0.43l-1.44,0.146l1.44-1.008
+ l1.584-0.867l1.44-0.432l1.008-1.441l-0.145-1.584l1.44-1.441l1.296-1.439l1.439,0.719l1.297-0.145l0.287-1.582l-0.72-0.432h-4.464
+ l-1.008-1.584l-1.44-0.145l-1.584-0.434l0.721-1.438l-1.44,0.287l-1.44-0.719l1.44-0.719l-1.44-1.297l1.44-0.141l0.432,0.432
+ v-0.432l0.145-0.576h1.439l1.584,0.576l-1.439-0.576l-0.433-1.443l1.585-1.008l1.439,0.291l0.864-1.439l-1.44-0.436l-1.439,0.291
+ l-0.576-0.721h1.439l-0.432-1.441l0.145-1.438l-0.864-1.443l-0.145-0.719l-1.151,1.584l0.432-1.441l0.864-1.439l0.144,1.439
+ l1.44-0.719l0.576,0.434l1.439-0.721l1.44,0.289l1.439,0.434l1.296,1.439l0.433,1.441l0.144-0.289l0.864-1.586h1.439l1.44,0.434
+ l1.44,0.867l1.439-0.578l-1.439-1.152l1.439-0.863l1.44-0.721h1.008l0.864-0.432l0.576-1.441l-1.44-0.576l-1.44,0.145l-1.439-0.432
+ l-1.44-0.865l1.296-1.441l1.44,0.291l1.439-1.008l-0.432-1.443l0.145-1.295l1.439-0.43l0.433-1.443h1.584l1.439-0.717l1.152,1.439
+ l0.576-1.439l1.008,1.439l-0.288-1.439l1.439,0.287l0.433,1.584l-0.288,1.441l-0.72,0.434l0.287,0.141l1.44-0.717l-0.288-2.881
+ l1.44-0.717l1.439-0.721l1.44,1.439l1.439,0.719l-1.584,0.865l-1.439,0.719l-0.433,0.578v0.43h0.864l1.584-0.574l0.576-1.293
+ l1.152,0.432h1.008l1.439-0.291l0.576-0.141l1.44-0.145l1.584,0.717l1.439,0.289l0.288,1.441l0.433,0.865v0.867l0.863,1.438
+ l0.433,1.439l1.151,1.01l-1.439,0.867l-0.576,0.285l-0.432,0.576l0.432,0.289l1.44-0.576h1.439l0.145,0.145l0.575,1.441
+ l0.433,1.582l-0.288,1.441l-0.864,0.432l0.145-1.584l-0.576-1.439l-0.433,1.439l-0.72,1.443l1.44,0.141l-0.433,1.443l-1.439,0.141
+ l-1.584,0.291v0.576l-0.576,1.441l-1.44,0.719l-1.584-1.152l-0.575-0.145v0.145h0.144l1.296,1.439l-1.439,0.146l-1.44,1.008
+ l1.152,1.438l-0.145,1.439v0.145l0.288,1.439v0.145l1.152,1.439l-0.864,1.152v0.289l0.288,0.719l-1.152,0.865l0.288,0.434
+ l0.72,1.584l0.145,0.287l0.288,1.443l-0.288,1.439l0.144,1.439l-1.151,1.584l-0.288,0.432 M227.302,836.837l-1.44-1.439l1.44,0.576
+ V836.837 M229.029,837.558l0.721-1.439l1.439-0.145l-1.439,0.863L229.029,837.558 M228.021,838.278v-1.441l0.145,1.441H228.021
+ M223.846,843.749l-1.152-1.439l1.44,0.145L223.846,843.749 M514.438-235.96l-0.432-1.584l-1.584,0.145l0.143,1.439l1.584,0.288
+ L514.438-235.96 M506.518-243.88l-1.584,1.296L504.213-241l1.443,0.576l1.439-0.432l1.152-1.44l-1.441-1.296L506.518-243.88
+ M509.541-240.136l1.586-0.432l1.439-1.44l1.441-1.296l1.439-0.576l1.584,0.433l1.441,0.288l1.439-0.145l1.152-1.584l1.008-1.584
+ l-1.443-0.864l-1.584,0.433l-1.438,0.29l-1.441-0.576l-1.582,0.432l-1.443,0.576l-1.584,0.864l-1.439,0.863l-1.008,1.584
+ l-0.287,1.44L509.541-240.136 M398.373-151.432l-0.141-1.584l-1.443,1.296l-1.439,0.576l-1.584,0.72l-1.441,0.433l-1.443,0.575
+ h-3.021l-1.584-0.144l-0.576,1.439l-0.574,1.438l0.143,1.442l1.584,1.008l1.439-0.866l1.584-0.286l1.584-0.144l1.441,0.288
+ l0.289-1.442l1.008-1.584l1.297-1.438l1.439-1.296L398.373-151.432"/>
+
+ <path id="path3375" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M198.502,799.974v-1.441l-0.288-1.441l-1.44-0.576l0.145,1.441l1.008,1.584L198.502,799.974 M245.445,814.517l0.288-1.439
+ L245.445,814.517 M243.142,817.397l0.864-1.441l0.144-1.441l-1.439,0.434v1.441L243.142,817.397 M190.582,854.837l-1.44-1.152
+ l-0.288-1.439l-0.576-1.439l1.008-1.441l1.009,1.441l1.584-0.291l-0.433-1.439l1.44-1.152l1.439-0.576l1.44-0.865h1.584
+ l-0.432,1.441l-0.864,1.441l0.432,1.584l-1.439-0.576l-0.721,1.441l-1.584,0.287h1.584l0.288,1.441l-1.439,0.865l-1.296-1.441
+ v1.584L190.582,854.837 M186.117,860.597l-1.439-1.293l-0.576-1.439l1.44-0.293l1.584,0.434l0.287,1.441l-1.584,0.143
+ L186.117,860.597 M185.397,862.181l-0.576-1.439l1.44,0.576L185.397,862.181 M196.63,864.63l-0.145-1.443l0.288,1.443H196.63
+ M185.254,866.933l-1.44-0.717v-1.443l0.864-2.879l0.576,1.441v1.439l-0.145,1.443L185.254,866.933 M182.806,869.093l0.288-1.439
+ v1.439H182.806 M193.462,870.388l-0.864-1.439l1.439-0.143l-0.144,1.439L193.462,870.388 M189.43,876.005l1.152-1.439
+ L189.43,876.005 M192.741,881.046l1.584-1.154v-1.438l-0.72-1.443l0.145-1.439l1.439-0.287l0.864,1.584l1.439,0.717l1.44,1.15
+ l-1.008,1.441l-1.44,0.291l-1.439,0.287h-1.44L192.741,881.046 M187.126,877.589l1.296-1.439l-1.152,1.439H187.126
+ M194.758,888.677l-1.008-1.441l1.584-1.006l0.432-1.441l1.439-1.008l-0.144,1.441l-1.008,1.584l-1.008,1.439L194.758,888.677
+ M191.445,891.845l0.433-1.584l0.144-1.439l-1.439,0.719l-0.433-1.441l1.44-1.293l1.439-0.291l0.576,1.441l0.288,1.441
+ l-0.432,1.439l-1.44,0.576L191.445,891.845 M201.958,895.157l-1.44-0.863l-0.288-2.881l1.44-0.865l1.008,1.584l-0.145,1.439
+ l0.288,1.441L201.958,895.157 M190.582,854.837l0.144,1.441l-1.44,0.719l-1.439-1.152l1.439-0.576L190.582,854.837"/>
+
+ <path id="path3377" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-227.595-36.808l-1.439-0.432l0.863-1.442l1.44-0.288l-0.144,1.442L-227.595-36.808 M-227.307-41.272l1.584,0.144h-1.439
+ L-227.307-41.272 M-228.601-38.682l-1.441,0.29l1.441-1.296V-38.682 M-227.595-39.4l-1.294-1.44l1.438-0.432l0.288,1.439
+ L-227.595-39.4 M-230.618-39.112l-1.438-1.44l-1.008-1.439l-0.146-1.44l1.44,1.008l1.584,0.145l0.72,1.439l-0.575,1.44
+ L-230.618-39.112 M-234.362-42.712L-235.946-43l-1.44-0.72l0.145-1.439l1.439-0.145l1.44,0.576l0.144,1.439L-234.362-42.712
+ M-216.795-41.128l-0.72,1.44l1.44,1.151l1.151,1.438l-1.439-1.006l-1.44-1.44l-1.584,0.433l1.296,1.439l1.009,1.44l1.441,1.296
+ l1.584,0.576l1.438,0.43l1.439-0.718l1.44-0.145l1.439-0.863l-0.863-1.442l-1.296-1.584l-0.431-1.438l-1.441-0.146l-0.288,1.442
+ l0.146,1.438l1.584-0.142l-1.441,0.72l-0.288-1.584l-0.433-1.44l-0.863-1.439l-1.584-0.145L-216.795-41.128 M-231.626-35.081v1.438
+ l-0.145,1.441l-0.286,1.438l1.584,1.296l0.574-1.584l-0.288-1.438l0.145-1.442l0.575-1.438l-0.432-1.439l-1.008-1.584l-1.44-1.008
+ l-0.576,1.584l1.009,1.439L-231.626-35.081 M-251.498-55.528l1.296,1.439l-0.721,1.582l-0.575,1.011 M-251.498-48.904l1.441-1.442
+ l1.294-1.438l-1.439,1.009l-0.576-1.44l0.864-1.439l0.434-1.442l1.582-0.574l1.44,0.145l1.441,0.144l1.438-0.144l0.146,1.439
+ l-0.434,1.582l-0.864,1.442l-1.152,1.439l-1.439,1.152l-1.584,0.864l-1.44-0.145l-1.151,1.009 M200.949,787.735v-2.881l1.009,1.441
+ L200.949,787.735 M199.653,789.462l0.576-1.441l-1.152-1.584l-0.72-1.441l-1.439-0.143l0.287,1.584l1.297,1.441l1.008,1.439
+ L199.653,789.462 M195.334,789.462l-1.44-1.441l1.44-0.867l1.439,1.586L195.334,789.462 M198.934,791.333l-1.152-1.439l-0.72-1.439
+ l-1.44-1.152l0.145-1.439l1.439,0.574l1.152,1.441v1.584l0.72,1.438L198.934,791.333 M199.222,794.356l-0.864-1.439
+ L199.222,794.356"/>
+
+ <path id="path3379" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-164.809-44.584v-1.439h-1.586l0.432,1.584l-1.439-0.576l-1.44-0.864l-1.439,0.145l-1.438,0.863l0.431,1.44l1.441,0.576
+ l1.006,1.439l1.296-1.439l0.433,1.584l0.288,1.439l1.584,1.296l-0.288-1.584l1.439-0.432l-0.144,1.582h1.439l1.44-1.006l1.44,0.72
+ l0.575-1.439l0.576,1.439l-1.439,0.864l-1.438,0.432l1.438,0.145l1.584,0.718l1.439,0.146l1.44,0.576l1.584,0.145h1.439l1.44-0.145
+ l1.584-1.01l1.44-0.286v1.44l1.584,0.144h1.584l1.439-1.439l0.432-1.442l-1.439-1.006l-1.44,1.294l-1.439-0.288l-1.584-0.862
+ l-1.44-0.863l-1.151-1.44l0.575-1.439l-1.439-1.009l-1.44,1.296l-0.576,1.438l-0.432-1.438l-1.439-0.863l-1.584-0.145l1.439-1.439
+ l-0.576-1.442l-1.439,1.154l-1.438,0.72l-1.441,0.288l0.144,1.44l-1.44-0.145l-1.439-1.008L-164.809-44.584 M-167.402-35.081
+ l-0.432,1.438l1.584,0.578h-1.584l0.144,1.439l1.44,0.721l-1.44-0.288l-0.72-1.442l-0.143-1.438l-1.153,1.438l-1.44-1.15
+ l-0.574,1.584l0.862,1.438l0.722,1.442l1.438,1.149l1.439,1.442l1.44,0.288l1.584,0.43l1.439,0.146l1.154-1.442l1.006-1.438
+ l-1.584,0.144l1.152-1.44l-1.584,0.721l0.722-1.442l-0.866-1.584l-1.439-0.288l-0.145-1.584l-1.439-1.006l-1.44,0.144H-167.402
+ M-203.834-63.736v1.439V-63.736 M-193.177-62.008l-1.441-0.144l-0.864,1.439l1.584,1.008l1.44-0.863L-193.177-62.008
+ M-204.698-30.184l-0.864-1.44l0.29-1.439l-0.576-1.442l-0.578-1.582l1.44,1.152l1.439,1.294v1.441l-0.718,1.438L-204.698-30.184
+ M-205.849-33.208l-1.441-0.576l-0.721-1.439l1.44-0.432l0.576,1.438L-205.849-33.208 M-206.715-37.098l-1.439-0.288l-1.44-1.006
+ l0.288-1.44l1.44,0.288l0.72,1.44L-206.715-37.098 M-206.856-40.408l-1.442-0.288h-1.584l1.584-0.721l1.442-0.144V-40.408
+ M-216.938-35.656l-1.44-0.576l-1.151-1.584l1.439,0.718L-216.938-35.656 M-219.675-33.496l-1.296-1.44l-0.863-1.44l1.584,0.721
+ l0.434,1.584L-219.675-33.496 M-212.763-42.136l-1.439,0.145l-1.584,0.142l-1.438,0.146L-218.666-43l1.441-0.575l1.438-0.145
+ l1.439,0.432l1.584,0.576V-42.136 M-219.387-38.104l-1.584-0.72l-0.576-1.442l1.584-0.43l0.433,1.439L-219.387-38.104
+ M-218.666-35.369l-1.584-0.575l-1.438-1.009l-1.442-0.863l-0.575-1.44l1.441,0.433l1.438,0.863l1.584,1.44L-218.666-35.369
+ M-221.259-40.696l-1.584-1.296l1.442-0.576l1.006,1.439L-221.259-40.696"/>
+
+ <path id="path3381" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-123.051-32.201l-0.575,1.438l0.287-1.438l-1.584-0.575l-1.439,0.43l1.439-0.862l-0.575-1.439l-0.864-1.44l-1.44-1.298
+ l-1.296,1.584l-0.144,1.442v1.584l1.296,1.438l-1.152,1.442l1.44,0.576l1.439,0.287l-1.584,1.009l1.44,0.864l1.439,0.144
+ l1.584,0.43l1.44,0.29l1.44,0.433l1.584,1.151l-1.584,0.286l-1.44-0.718l-1.44-0.145l-1.439-0.863h-1.584l1.584,1.008l1.439,0.718
+ l1.44,0.576l1.44,0.434l1.584,0.288l1.439-0.144l1.44-1.008l1.439-1.152l1.44,0.576l1.439,0.144l-0.575-1.439l-1.44-0.435
+ l-1.44-0.142l-1.296-1.442l-1.584-0.862l-1.439-1.441l-1.44-0.864l-1.439-0.573L-123.051-32.201 M-141.626-37.24l-0.576,1.438
+ l-1.44,1.296l0.145,1.442l1.439,0.718l1.44,0.722h1.584l-1.44,0.286l-1.584-0.286l-1.439,0.145l1.008,1.439l1.439,0.862l1.44,1.298
+ l1.439-0.29v-1.438l1.44,0.142l1.44-1.008l1.584-0.718l1.439-1.009l0.288-1.441l-1.439-0.143l-1.44,0.143l-1.44-0.718l-1.439-0.721
+ l-1.584-0.863l-1.296-1.442L-141.626-37.24 M-129.818-45.736l0.288,1.439l-1.008-1.439l-1.44-0.864l-1.439-0.433l-1.44-0.287
+ l-1.44-0.433l-0.288,1.44l1.44,1.439l1.44,1.152l1.008,1.44l1.439,1.296l1.44,0.718l1.584,1.01l2.88,1.729l1.44,0.575l1.584,0.145
+ l1.439,0.432h1.584l0.864-1.584l1.439,0.721l-0.432-1.442l-0.144-1.584l-1.44-1.006l-1.439,0.72l-1.44-0.144l-0.72-1.44
+ l-1.44,0.286l0.145-1.438l-1.152-1.439h-1.584l-1.44-0.864l-0.288,1.584l-0.863-1.584L-129.818-45.736 M-142.778-45.736
+ l1.008,1.439l1.152,1.44l-1.44-0.864l0.288,1.44l1.44,1.151l0.288,1.44l1.439,0.864l1.008,1.438l-1.439,0.146l1.439,1.296
+ l1.44,0.863l-0.288-1.584l1.439,0.721l1.585,0.43l1.439-0.574l-1.439-0.288l1.439-0.432l-1.008-1.44h1.439l-1.439-1.439
+ l-1.44,0.144l-1.439,1.008l0.432-1.439l-1.584-0.432l-1.439-0.145l-0.145-1.439l0.145-1.44l-1.584-1.152l-1.44-1.008
+ L-142.778-45.736"/>
+
+ <path id="path3383" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-178.635-62.728l-1.439-1.152l-1.584,0.864l-1.438,0.864l-1.441,0.144l1.441-1.296l-0.578-1.584l-1.439,0.72l-1.438,0.288
+ l-1.584,1.296l0.288,1.44l-1.154,1.584l0.721,1.439l1.439,1.297l1.44,1.151l0.864,1.584l1.296,1.44l0.288,1.439l0.575,1.584
+ l1.154,1.44l0.718-1.44l0.433-1.439l1.296-1.584l-1.584-0.866l-0.862-1.438l-1.441-1.439l0.863-1.44v-1.584h1.44v1.44l-0.576,1.439
+ v1.438l1.152,1.584l1.441,0.146l1.584,0.433l0.431-1.44V-57.4l0.288,1.439l1.441,0.862l1.296-1.584l1.438-0.574l0.434-1.439
+ l-2.306-2.88l-1.438-0.864l-1.441,0.144l-1.584-0.288L-178.635-62.728 M-207.29-63.016l1.441,0.432l0.143-1.439h1.441l1.438-0.288
+ l1.439,1.008l1.44-0.864l1.439,0.288l1.584,0.433l0.433,1.439l1.439-1.008l1.44,0.144l1.439,1.152l0.145,1.44l-1.584,1.151
+ l1.584,0.721l1.439,0.142l0.866-1.438l0.143-1.439l1.151-1.44l1.009-1.439l0.575-1.584l-1.439,0.288l-1.438,1.439l-1.441,0.145
+ l1.008-1.442l-1.584-0.286l-1.438-0.432l0.288,1.439l-1.441,0.288v-1.584l-1.44,0.145l-1.44-0.145l-1.584,0.145l-1.438,0.575
+ l-1.584,0.289l-1.442-0.721l-1.439-0.288l-1.584,0.433l-1.44,0.432l-0.432,1.44L-207.29-63.016 M-115.994-40.84l1.439-0.144
+ l-1.439-0.721l-1.009,1.438v1.442h1.44l1.44,0.863l1.584,0.433l-1.584,0.72l-1.44,0.144l-1.44,0.433l-1.439,0.144l-1.584,0.286
+ l-1.44,0.866l0.721,1.44l1.439,1.008l1.44,0.72l0.863-1.44l1.297-1.584l1.584,0.574l1.439-0.288l1.584-0.43l1.44-0.288l-1.44,0.718
+ l-1.584,0.576l-1.439,0.288l-1.584,0.146l-1.44,1.438l1.44,0.72l1.439-0.142l-1.439,0.576v1.584l1.584,0.43l1.439-0.576
+ l1.584-0.718l0.145-1.44l-0.145-1.584l1.008-1.439l0.145,1.439l-0.288,1.584l1.439,0.574l1.44-0.288l1.152-1.438l1.008-1.584
+ l-0.864-1.442l1.44,0.578l0.432-1.584l-1.584-0.72l-1.44-0.145l-1.584-0.144l1.44-0.145l0.432-1.439l-1.439-0.721l-1.44,0.145
+ l-1.439-0.864l-1.584,1.008l-1.44-0.863h-1.439L-115.994-40.84"/>
+
+ <path id="path3385" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-144.074-46.744l0.144-1.584h1.44l-1.152,1.584H-144.074 M-150.698-42.28l0.144-1.44l0.576-1.439h1.44l-0.145,1.439l-1.439,0.72
+ L-150.698-42.28 M-152.427-48.472l1.44,0.288l-1.44-0.144V-48.472 M-152.715-46.6l-0.288-1.44L-152.715-46.6 M-154.299-47.608
+ l0.288-1.44l-1.151-1.439l1.439,1.149l-0.144,1.586L-154.299-47.608 M-156.026-47.178l-1.44-0.43l0.576-1.584l1.44,0.72
+ L-156.026-47.178 M-164.954-35.656h-2.88v-1.584l1.584-0.146l1.441,1.298L-164.954-35.656 M-160.923-45.304h-1.439l-1.296-1.584
+ l1.439,0.576L-160.923-45.304 M-169.274-34.936h-1.44l-1.439-1.008l0.144-1.442l1.44,0.434l-0.72-1.439l1.441,1.439l1.438,1.15
+ L-169.274-34.936 M-173.738-35.944l-0.862-1.442l1.438-0.718l-0.288,1.439L-173.738-35.944 M-180.219-27.594l-1.151-1.438
+ l-0.433-1.441l1.44,1.441l0.288,1.438H-180.219 M-165.675-47.033l-1.439-1.295l1.439-0.145l1.44,0.576L-165.675-47.033
+ M-180.938-31.912l-0.864-1.44l1.008,1.44H-180.938 M-183.097-30.474l0.143-1.438l0.432,1.584L-183.097-30.474 M-158.33-46.744
+ l-1.44-0.864h-1.44l-1.439-1.009h-1.584l-1.44-0.432l-1.584-0.29l0.721-1.438l1.584,0.43h1.441l1.438,0.146l1.439,0.721
+ l1.584,0.718l1.009,1.442L-158.33-46.744 M-181.225-35.944l-0.722-1.584v-1.442l1.584,1.298l-0.576,1.584L-181.225-35.944
+ M-188.282-36.953h1.584H-188.282 M-185.979-40.266l-1.584,0.29l1.44-0.72L-185.979-40.266 M-190.442-38.392l-1.584-0.145
+ l-0.72-1.439l0.432-1.44l1.01,1.44l-0.146-1.44l1.439-0.288l-1.294-1.439l1.584,0.144l0.288,1.44v1.584l-0.578,1.439
+ L-190.442-38.392 M-194.187-40.696l-1.439-0.288l-1.438-0.145l0.718-1.439l1.44-0.288l0.288,1.439L-194.187-40.696 M-198.648-61
+ l-0.722-1.439l1.439-0.576l-0.432,1.44L-198.648-61 M-208.154-63.736l-1.44,0.432l-0.288-1.439h1.442L-208.154-63.736"/>
+
+ <path id="path3387" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M125.638-242.296h1.439l-0.432,1.44l-1.44,0.864l-1.584,0.72l-1.439,1.008l-1.584,1.008l1.008,1.44l-1.439,0.432v1.44l-1.584-0.433
+ l1.439,1.44l1.44-0.145l0.72,1.584l-1.296,1.44l-1.44,0.864l-1.439,0.575l-0.576-1.439l-1.44,0.145l-0.576,1.584h-1.439
+ l-0.288-1.44l1.44-1.008l0.863-1.44l-1.584,0.145l0.145-1.44l1.296-1.44l0.288-1.439l1.584,0.432l-0.72-1.439l1.439,0.144
+ l1.44-1.008l1.584-1.008l1.439-1.296l1.008-1.44l1.44-0.432L125.638-242.296 M127.653-238.984l0.288-1.584l1.152-1.44l1.584-1.296
+ l1.439-1.152l0.288-1.439l0.721-1.44l1.439-1.151l1.152-1.44l1.439-0.72l1.44-1.152l-0.72,1.44l-0.864,1.584l-0.72,1.439
+ l0.144,1.584l-1.008,1.44l-1.44,0.432l-0.576,1.44v1.584l-1.151,1.439l-1.44,0.721l-1.439-0.145l-1.44,0.145L127.653-238.984
+ M145.653-251.369l0.145,1.44L145.653-251.369 M-113.979-22.696l-1.439,0.142l-1.44,0.146l1.44-1.297l1.439-0.575l0.145,1.438
+ L-113.979-22.696 M-104.33-37.672l-1.44-0.144l-1.008-1.44l1.584-0.576l1.152,1.584L-104.33-37.672 M-117.723-41.705l-1.439,0.145
+ l-1.584-1.152l-0.721-1.439l0.433-1.44l1.439,0.433v1.439l1.44,0.288l1.008,1.582L-117.723-41.705 M-142.635-28.17l-1.439-0.286
+ h-1.44l-1.008-1.439l0.72-1.442l1.44-0.142l1.151,1.439l1.44,0.721L-142.635-28.17 M-147.099-31.05l-1.439-0.718l-0.721-1.584
+ l1.584-1.154l1.44-0.142l0.576,1.439l-1.008,1.44L-147.099-31.05 M-149.114-28.17l-1.44,0.146l-1.439-0.146l-1.584,0.435
+ l-1.44-0.435l-0.144-1.438l1.439-0.576l1.44-0.433l1.439,1.009l1.584,0.864L-149.114-28.17 M-150.41-30.041l-1.296-1.584
+ l-1.584,1.008l-1.44,0.143l-1.152-1.438l-0.432-1.44l1.584-0.866l1.44,0.723l1.439-1.297l1.44,0.862l0.144,1.442l0.72,1.438
+ L-150.41-30.041 M-146.954-38.537l-1.44-1.584l1.152-1.439l0.432-1.44l1.44,0.288l-0.288,1.44l-0.145,1.584L-146.954-38.537"/>
+
+ <path id="path3389" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M194.325-270.808l-1.439,0.864l-1.44,1.008l1.44,0.72l-1.008,1.44l-1.44,0.575l-1.439-0.575l0.287-1.44l1.44-0.72l-1.296-1.44
+ l1.584-0.72l1.439,0.144l1.44-0.575l1.584-1.009l1.44-0.144l1.584-0.144l1.439-0.576h1.584l-1.439,0.432l-1.44,1.008l-1.584,0.288
+ l-1.44,0.433L194.325-270.808 M210.166-274.696l1.439,0.863l-1.439,1.152l-0.145-1.44L210.166-274.696 M209.014-276.424
+ l1.439,0.433l-1.439-0.145V-276.424 M210.886-277.72l0.864,1.44l-1.584-0.145L210.886-277.72 M212.901-278.728l0.72,1.584
+ l-1.439-0.576L212.901-278.728 M227.014-280.6l-1.44,1.584l-1.584,0.432l-1.439,0.576l-0.145,1.44l-1.584,0.288l0.864-1.44
+ l-0.144-1.439l1.439-0.864l1.44,0.72l1.439-0.576L227.014-280.6 M229.75-281.608l1.584,1.151l-1.009,1.44l1.584,0.864l1.44,0.72
+ l-1.584,0.864h-1.44l-1.584-1.152l-1.439,0.145l1.439-0.864v-1.44l1.009-1.439V-281.608 M219.382-281.176v1.44l-2.305,2.88
+ l0.433,1.584l-1.44,0.432v-1.439l-1.439-0.576l-0.721-1.584l1.44-0.72l1.439-0.433h1.44l1.008-1.584H219.382 M241.27-286.36
+ l-0.144,1.439L241.27-286.36 M103.174-215.224l-0.145-1.44l-1.584-1.296l-1.439,0.145l-1.44,0.72l-1.296,1.584l-0.288,1.44
+ l-1.439,1.296l-1.584,0.575l-1.44,0.433l-1.44,0.144l-1.439,1.152l-0.145,1.439l-1.439-0.144l-1.44,0.144l1.44,0.721l1.439,0.144
+ l0.864,1.44l1.44,1.296l1.439,0.144l1.44-0.432l1.439-1.296l1.584-1.008l1.44-1.296l1.44-0.145l0.432-1.439l0.288-1.44l0.432-1.44
+ l1.44-1.296V-215.224 M154.294-195.785l1.584,0.576l-1.584,0.576V-195.785 M107.781-224.44l0.721,1.439l-0.433,1.44l-1.439-1.152
+ l1.008-1.439L107.781-224.44 M102.021-222.568l1.44-1.296l-1.44,1.008V-222.568 M104.901-224.873l1.44,0.145l-1.584,0.72
+ L104.901-224.873 M110.661-226.457l1.584-0.287l1.009,1.584l-1.296,1.439l-2.881-0.864l1.44-1.439L110.661-226.457
+ M112.678-232.216l0.72,1.44l-1.439,1.008l0.575-1.584L112.678-232.216"/>
+
+ <path id="path3391" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M756.502-187.72l-1.586,0.864L753.479-187l-1.443,0.576l-1.584-0.432h-1.439l-1.441,0.432h-1.582l-1.445,0.145l-1.438,0.288
+ l-1.584-0.145l-1.441-0.144l-1.439-0.288l-1.441,0.144l-1.439,0.288l-1.584,0.145l-1.441-0.288h-3.027l-1.438,0.432l-1.584,0.288
+ l-1.441,0.144l-1.439,0.288l-1.586-0.144l-1.439,0.72l-1.439,0.864l-1.584,0.432l-1.439-0.144l-1.445,1.151l-1.582,0.864
+ l-1.439,0.432l-1.439,0.721l-1.443,0.72h-3.023l-1.439,0.288h-1.584l-1.439,0.144h-0.291l-1.439,0.864l-1.439,0.576l-1.588,0.288
+ l-1.439,0.864l-1.439,0.29l-1.439,0.288l-1.443-0.288l-1.439,0.142l-1.584,0.146l-1.439,0.287h-3.313l-1.439,0.288l-1.441-0.144
+ l-1.008,1.439l-1.586,1.297l-1.439,0.863l-1.439,0.433l-1.584,0.575l0.863,1.44l-0.719-0.288l-1.582,0.864l-1.443,1.439
+ l0.434,0.433l-1.443,0.144l-1.584,1.008l-1.438,0.576l-0.865,1.44l-1.295,1.439l0.289,1.44l-1.586,1.008h-2.59l0.43,1.44
+ l-1.008,1.439l-1.293,1.44l-0.723,1.439l-0.285,1.584l-1.441,0.433l-0.434,1.439l-1.584,0.576l-1.439,1.008l-1.439,0.288
+ l-1.299,1.44l-1.438,1.296l-1.584,0.72h-1.441l-1.441,1.296l-1.582,1.152l-1.441-0.433l-1.439,0.289l-1.441,0.72l-1.584-0.145
+ l-0.576,1.44l-1.584,1.006l-1.439-0.142l-1.012,0.288l1.154,1.439l0.289,1.584l0.141,1.44l-1.438,1.151l-1.441,0.433l-1.295,1.439
+ v1.584l-0.432,1.44l0.432,1.584l-0.145,1.439l0.291,1.44l0.576,1.294 M162.357-188.008l0.864,1.44l-1.44,0.576l0.433-1.584
+ L162.357-188.008 M155.59-259.576l0.432,1.439l-1.439,1.296l-0.721-1.439l1.44-0.576L155.59-259.576 M173.157-266.632l0.576,1.44
+ l-1.439,1.008l-0.576-1.44L173.157-266.632 M182.949-271.384l1.44,0.288l1.584-0.144l1.439-0.145l1.585,0.864l-1.585,0.432h-1.439
+ l-1.44,0.433l-1.584-0.433h-1.439l-1.44,0.288l-1.439,0.145l1.439-0.576l1.44-0.721L182.949-271.384"/>
+
+ <polyline id="polyline3393" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 629.781,-123.497 628.627,-125.081 628.197,-126.52 627.621,-127.96 626.182,-128.104 624.74,-127.96 623.156,-127.098
+ 622.582,-125.656 623.732,-124.072 624.021,-122.632 624.883,-121.05 623.445,-121.192 624.311,-119.752 625.029,-118.312
+ 625.605,-116.728 625.318,-115.289 625.748,-113.85 626.037,-112.266 624.453,-110.968 624.74,-109.528 624.598,-108.09
+ 625.318,-106.792 625.459,-105.352 625.605,-103.912 627.189,-102.617 628.627,-102.184 630.068,-101.466 631.223,-100.024
+ 632.23,-98.584 632.807,-97 634.246,-97.432 635.686,-98.44 635.83,-99.88 637.27,-100.744 638.854,-101.896 640.293,-102.762
+ 641.732,-103.336 643.318,-103.625 644.758,-102.472 643.318,-101.896 641.877,-101.178 640.438,-101.178 638.998,-100.6
+ 637.701,-99.16 639.141,-98.728 640.725,-98.584 642.164,-99.736 643.748,-99.88 645.189,-99.304 646.773,-99.304 648.211,-98.44
+ 649.795,-97.432 651.238,-96.424 652.389,-94.842 650.807,-94.266 649.365,-95.272 647.926,-94.842 646.486,-94.266 644.9,-94.552
+ 643.459,-94.408 644.9,-92.968 645.766,-91.528 646.342,-90.09 644.9,-89.224 643.318,-89.944 641.732,-89.656 642.453,-88.216
+ 643.893,-87.208 645.332,-87.352 646.773,-86.92 647.639,-88.36 647.35,-89.8 648.789,-90.52 650.373,-91.24 651.094,-89.8
+ 652.678,-89.081 653.398,-89.224 653.686,-87.785 652.533,-86.346 651.094,-85.768 649.51,-85.192 648.211,-83.752 647.35,-82.168
+ 645.908,-81.88 644.471,-80.584 644.037,-79.144 645.479,-78.136 646.916,-77.56 648.211,-75.976 649.795,-74.968 651.238,-73.96
+ 652.533,-72.52 652.246,-70.936 653.252,-69.497 654.406,-68.058 654.547,-67.768 653.83,-66.328 652.389,-65.32 650.949,-65.178
+ 650.662,-65.178 649.076,-65.32 647.639,-65.464 646.197,-66.472 644.613,-66.617 643.029,-66.762 641.59,-67.192 640.148,-67.048
+ 638.564,-66.617 637.125,-66.328 635.541,-66.617 634.102,-66.904 632.662,-67.336 631.223,-67.192 629.639,-67.912
+ 628.197,-67.625 625.318,-68.201 623.877,-67.625 622.438,-67.768 620.854,-67.768 619.414,-67.625 617.973,-67.048
+ 616.533,-67.336 614.949,-67.336 614.373,-65.896 612.789,-65.608 611.35,-65.178 609.908,-65.32 608.324,-64.744 606.883,-64.6
+ 605.445,-64.457 604.006,-65.178 602.564,-64.457 600.98,-64.6 599.541,-64.024 598.102,-64.744 596.518,-65.178 595.076,-64.6
+ 593.494,-64.457 592.055,-65.033 590.613,-64.168 589.318,-63.88 587.877,-64.312 586.438,-65.178 584.854,-65.033
+ 583.414,-64.024 581.83,-63.016 580.389,-62.152 578.949,-61.144 577.365,-60.856 575.926,-60.712 574.342,-60.712 572.9,-61.289
+ 571.318,-61.289 569.732,-61.432 568.293,-61.289 566.709,-61 565.27,-60.424 563.686,-59.705 562.246,-59.272 560.662,-58.984
+ 557.639,-58.984 556.197,-59.128 554.758,-59.56 553.174,-60.136 551.732,-60.568 550.293,-60.712 549.285,-62.152
+ 547.846,-63.016 546.406,-63.304 544.822,-64.024 543.379,-65.32 541.941,-66.472 540.502,-67.912 539.061,-68.632
+ 537.621,-69.785 536.037,-70.216 534.598,-71.514 533.014,-72.376 531.572,-73.384 532.148,-74.824 532.869,-76.266
+ 532.582,-77.705 531.141,-77.992 529.557,-78.568 528.838,-77.128 527.398,-75.976 525.814,-76.408 525.379,-77.992
+ 524.23,-79.144 522.789,-80.728 521.35,-82.168 520.916,-83.608 519.479,-83.464 518.037,-84.617 516.598,-83.608 515.014,-84.184
+ 513.572,-85.048 513.43,-86.488 513.715,-87.93 512.131,-88.648 510.693,-89.514 509.254,-88.792 510.693,-87.642 509.973,-86.201
+ 508.533,-85.625 508.678,-87.208 507.094,-87.497 506.23,-86.058 504.789,-85.336 503.35,-85.336 501.766,-85.625 500.324,-86.632
+ 499.029,-88.072 498.598,-88.648 498.453,-88.792 497.445,-90.232 496.006,-91.674 495.572,-93.112 494.131,-93.833
+ 495.572,-93.976 494.854,-95.417 493.27,-94.552 491.83,-94.552 490.389,-95.705 488.949,-97 488.373,-98.44 488.373,-100.024
+ 488.807,-101.466 487.223,-102.762 485.781,-103.192 486.068,-104.634 487.654,-104.634 489.094,-103.912 490.533,-102.762
+ 492.117,-101.896 493.557,-102.184 495.141,-101.752 494.998,-103.336 494.998,-104.776 494.422,-106.216 492.98,-107.224
+ 491.541,-107.656 489.957,-108.232 488.373,-108.376 486.934,-107.656 485.494,-108.09 484.918,-109.528 483.621,-110.968
+ 482.182,-111.112 480.598,-109.816 479.156,-110.249 477.572,-110.392 476.854,-108.953 475.27,-109.672 473.973,-111.256
+ 473.398,-112.696 471.957,-114.28 470.373,-114.568 469.076,-113.128 467.494,-113.992 466.773,-115.432 465.334,-115.289
+ 463.75,-116.008 462.166,-115.864 461.445,-114.28 461.877,-112.84 462.166,-111.256 463.75,-110.824 464.613,-109.384
+ 466.055,-108.665 467.494,-109.384 468.934,-108.808 467.781,-107.224 466.342,-107.656 466.342,-106.216 466.055,-104.634
+ 464.758,-103.192 463.174,-103.912 462.311,-102.472 460.725,-101.178 459.285,-100.312 457.846,-99.448 456.406,-98.728
+ 454.822,-98.728 453.238,-98.008 451.795,-98.008 450.357,-97.289 448.773,-97.144 447.334,-96.568 446.037,-94.984
+ 444.598,-93.976 443.156,-93.112 441.572,-92.682 440.131,-91.96 438.547,-91.96 437.109,-90.52 436.678,-89.081 435.238,-87.93
+ 433.795,-87.93 432.213,-87.064 430.773,-86.776 429.189,-86.488 427.75,-86.346 426.166,-87.208 424.725,-88.648 423.285,-88.936
+ 421.701,-88.504 420.262,-89.369 418.678,-89.514 417.238,-89.081 415.654,-89.224 414.213,-89.8 414.213,-91.384 412.773,-91.96
+ 413.781,-93.4 412.342,-93.833 410.758,-94.266 409.318,-92.968 409.174,-92.968 407.59,-92.682 406.148,-92.249 406.438,-93.688
+ 406.869,-95.128 408.453,-96.568 409.318,-98.008 410.9,-98.584 411.621,-99.736 412.773,-101.178 414.213,-101.033
+ 413.205,-102.472 413.781,-103.912 415.223,-105.208 413.781,-105.642 412.342,-105.208 410.9,-105.642 411.479,-107.081
+ 412.918,-108.232 413.35,-109.672 414.646,-111.112 413.061,-111.4 411.621,-111.112 410.037,-110.824 408.598,-111.112
+ 407.445,-109.672 406.006,-108.953 404.564,-108.52 403.127,-107.944 401.541,-106.792 400.102,-106.36 398.662,-105.642
+ 397.223,-104.92 395.781,-104.488 394.197,-103.336 392.758,-102.184 391.174,-101.896 391.029,-102.041 389.59,-103.625
+ 389.877,-102.041 388.438,-102.041 388.582,-103.48 388.006,-105.064 386.422,-104.058 384.98,-103.912 385.127,-102.472
+ 386.709,-101.608 386.277,-100.024 385.414,-98.584 384.406,-97.144 384.117,-95.705 383.398,-94.121 381.957,-93.544
+ 382.102,-92.104 381.525,-90.665 380.086,-90.52 377.061,-90.52 375.479,-90.376 374.037,-90.52 372.453,-90.232 371.014,-90.953
+ 370.293,-92.537 368.709,-93.833 367.27,-94.984 365.83,-95.56 364.246,-96.424 363.67,-96.856 365.254,-96.28 366.693,-95.705
+ 366.838,-97.144 368.422,-96.136 370.006,-95.417 371.445,-94.408 372.883,-94.984 374.324,-95.85 375.766,-96.28 376.629,-97.864
+ 377.061,-99.304 377.781,-100.888 378.068,-102.328 378.357,-103.768 379.365,-105.208 380.949,-105.785 381.67,-107.224
+ 382.389,-108.665 380.807,-109.098 380.807,-110.537 381.957,-111.976 383.398,-112.408 384.838,-112.696 386.277,-113.992
+ 385.414,-115.432 385.414,-116.873 386.854,-116.728 388.293,-117.16 389.877,-116.584 391.318,-116.728 392.9,-117.16
+ 394.342,-118.168 395.781,-118.024 397.365,-118.744 398.807,-118.457 400.389,-119.176 401.83,-119.608 402.262,-121.05
+ 403.27,-122.632 404.854,-123.352 406.293,-123.93 407.877,-124.504 409.318,-125.656 410.758,-126.665 412.197,-127.24
+ 413.781,-128.249 415.223,-128.682 416.662,-128.682 418.102,-129.256 419.541,-130.696 420.98,-131.128 422.422,-131.85
+ 423.43,-132.28 425.014,-132.856 426.453,-134.008 426.883,-135.592 428.471,-136.744 429.908,-137.896 431.494,-138.472
+ 432.934,-139.336 433.795,-140.92 435.379,-140.776 436.822,-141.208 438.262,-141.785 439.846,-141.928 441.285,-142.792
+ 442.869,-143.224 444.311,-143.8 444.311,-145.24 445.75,-144.088 447.189,-143.944 448.629,-143.224 450.068,-142.792
+ 451.654,-144.232 453.094,-144.808 454.678,-144.52 456.117,-143.369 457.701,-142.648 458.277,-144.088 458.131,-145.672
+ 458.422,-147.112 458.998,-148.552 460.438,-149.85 462.021,-151.144 463.318,-152.584 464.9,-151.72 466.055,-153.16
+ 467.639,-153.736 469.076,-153.88 470.518,-154.888 471.957,-155.176 473.254,-156.617 474.406,-158.201 475.557,-159.642
+ 476.709,-161.081 477.861,-162.52 479.156,-163.96 480.166,-165.544 480.883,-166.84 481.75,-168.424 482.758,-169.864
+ 484.486,-172.744 485.205,-174.184 485.639,-175.768 486.213,-177.352 486.789,-178.792 487.076,-180.232 487.654,-181.816
+ 488.086,-183.256 488.518,-184.84 488.807,-186.28 489.238,-187.864 489.525,-189.304 489.814,-190.888 489.957,-192.328
+ 490.389,-193.768 490.678,-195.352 491.109,-196.936 491.541,-198.376 491.973,-199.816 492.406,-201.256 492.98,-202.696
+ 493.27,-204.28 493.701,-205.72 494.131,-207.304 494.564,-208.744 495.285,-210.328 495.572,-211.768 495.715,-213.352
+ 495.715,-214.792 495.43,-216.232 494.998,-217.816 496.148,-219.256 496.293,-220.84 496.582,-222.28 497.014,-223.72
+ 497.445,-225.304 497.877,-226.744 498.453,-228.184 499.318,-229.625 500.037,-231.064 500.471,-232.648 500.9,-234.232
+ 500.758,-235.672 499.893,-237.112 500.324,-238.552 500.613,-239.992 502.197,-241 500.613,-240.856 499.174,-240.136
+ 497.732,-239.848 496.148,-239.272 495.141,-239.128 493.701,-238.696 492.262,-237.833 490.822,-237.688 489.238,-236.392
+ 487.654,-236.249 486.213,-235.96 484.773,-235.384 483.189,-234.376 481.75,-233.8 480.166,-233.081 479.156,-231.64
+ 477.572,-230.488 476.422,-229.048 474.98,-228.76 474.406,-227.32 474.262,-225.736 474.117,-224.296 472.678,-223.576
+ 472.963,-221.992 471.525,-221.417 470.662,-219.976 472.102,-219.688 472.389,-218.104 470.949,-217.672 469.941,-219.112
+ 470.084,-220.552 468.646,-220.264 465.766,-219.112 464.324,-219.112 462.883,-218.968 461.445,-219.112 459.861,-218.824
+ 458.277,-219.544 457.414,-221.128 456.262,-222.424 455.541,-220.984 455.398,-219.976 455.83,-218.537 455.83,-216.953
+ 454.389,-216.088 454.102,-214.504 454.533,-213.064 453.957,-211.625 453.094,-210.041 451.941,-208.6 450.789,-207.448
+ 449.35,-206.584 447.908,-206.44 446.324,-205.72 444.883,-205.144 443.301,-204.424 441.861,-203.992 440.422,-203.992
+ 438.838,-204.136 437.398,-204.568 436.963,-206.008 435.379,-206.584 433.941,-207.016 432.357,-207.592 430.918,-206.584
+ 429.334,-206.152 427.75,-205 426.74,-203.56 427.318,-202.121 427.605,-200.537 428.324,-199.096 428.613,-197.512
+ 428.471,-196.072 428.182,-194.488 427.893,-193.048 427.029,-191.608 426.021,-190.168 424.438,-189.016 423.572,-187.576
+ 422.131,-186.136 420.693,-184.696 419.254,-184.408 417.67,-184.408 417.094,-183.976 416.518,-182.537 415.076,-181.24
+ 413.494,-180.953 412.055,-181.96 410.471,-181.096 412.055,-182.392 413.494,-182.968 415.076,-183.976 416.662,-184.264
+ 415.51,-185.848 414.934,-187.289 413.35,-188.584 411.908,-187.72 410.471,-187.432 409.174,-185.848 408.74,-184.408
+ 409.174,-182.824 408.74,-181.384 408.453,-179.944 408.166,-178.36 409.75,-178.072 411.189,-177.928 411.621,-176.488
+ 411.334,-174.904 410.471,-173.464 410.037,-172.024 410.037,-170.44 409.75,-168.856 409.318,-167.992 407.732,-166.984
+ 406.148,-166.84 404.709,-165.4 403.557,-163.96 403.127,-162.376 404.564,-161.369 405.861,-159.928 407.301,-158.488
+ 408.74,-158.632 409.75,-160.216 410.758,-161.656 411.045,-160.072 412.486,-158.776 413.061,-157.192 413.205,-155.608
+ 412.486,-154.168 411.479,-152.728 410.613,-151.144 409.461,-149.705 408.021,-148.552 406.438,-147.256 404.854,-146.392
+ 403.414,-145.96 401.83,-144.808 400.246,-144.376 399.67,-142.936 399.379,-141.497 397.941,-142.648 397.941,-141.208
+ 396.934,-139.625 395.494,-139.48 395.205,-137.896 395.926,-136.457 394.342,-135.736 393.334,-134.296 392.9,-132.856
+ 391.461,-131.417 390.021,-131.85 389.59,-130.408 389.732,-130.121 388.148,-129.976 386.709,-130.552 386.131,-131.128
+ 386.998,-132.712 385.414,-131.85 383.973,-131.85 383.83,-130.408 382.389,-130.552 381.67,-131.992 381.379,-132.568
+ 381.094,-134.152 381.238,-135.592 379.654,-135.736 378.068,-134.728 376.918,-133.72 377.205,-132.28 375.766,-131.85
+ 374.324,-131.417 372.74,-130.984 371.301,-130.552 369.861,-129.833 368.277,-128.682 366.693,-128.392 366.117,-129.976
+ 367.127,-131.417 367.27,-132.856 368.709,-134.44 369.141,-135.736 369.861,-137.176 368.422,-138.328 366.98,-137.176
+ 365.973,-136.457 364.389,-135.16 362.949,-133.864 361.365,-132.568 360.357,-131.128 358.918,-132.28 357.621,-130.84
+ 356.182,-131.56 354.738,-131.272 351.57,-130.696 350.133,-130.552 348.547,-130.696 347.109,-131.417 345.525,-131.705
+ 344.086,-132.136 342.502,-132.424 341.063,-131.992 340.773,-133.432 339.334,-134.584 338.473,-136.024 338.473,-137.608
+ 337.029,-138.617 337.75,-140.058 337.174,-141.642 336.883,-141.642 336.166,-142.648 335.445,-144.088 334.006,-143.8
+ 333.57,-143.081 333.141,-141.497 332.711,-140.058 331.129,-138.617 330.838,-137.176 329.398,-136.6 327.957,-135.736
+ 326.518,-135.304 324.934,-134.873 323.781,-133.432 322.342,-133.144 320.898,-131.705 319.461,-131.992 318.598,-130.408
+ 318.313,-131.85 317.59,-131.128 316.582,-129.544 317.73,-128.104 316.148,-129.4 314.711,-129.4 315.715,-127.96
+ 314.854,-126.52 313.414,-126.953 311.828,-126.376 311.973,-124.936 310.533,-125.944 310.102,-124.504 310.533,-123.064
+ 309.094,-123.93 307.652,-124.072 306.502,-122.632 305.063,-122.201 304.773,-120.762 304.055,-119.176 302.613,-120.041
+ 301.029,-120.184 300.313,-118.6 298.727,-118.744 297.141,-118.744 296.711,-119.033 295.27,-118.457 295.129,-117.016
+ 295.414,-116.584 293.828,-116.873 292.391,-116.728 290.949,-116.296 289.941,-114.712 288.502,-114.568 286.918,-113.85
+ 285.477,-113.128 283.895,-112.696 282.313,-112.266 280.869,-111.256 279.43,-110.249 278.422,-108.665 276.838,-108.953
+ 275.398,-108.665 273.813,-108.376 275.398,-108.232 276.262,-106.792 275.254,-105.208 275.686,-103.768 275.686,-103.625
+ 274.391,-105.208 272.949,-104.776 273.094,-106.36 273.67,-107.8 272.23,-108.52 270.789,-108.52 269.35,-108.808
+ 267.766,-109.098 266.324,-109.96 264.738,-110.537 263.301,-111.256 261.861,-111.833 260.422,-112.408 259.414,-110.968
+ 257.973,-110.104 256.965,-108.52 255.525,-107.081 255.813,-105.642 256.246,-104.201 257.686,-103.625 258.262,-102.184
+ 256.965,-100.6 257.398,-99.16 258.838,-98.44 260.422,-97.289 261.43,-95.85 259.988,-97 260.563,-95.992 261.285,-94.552
+ 261.57,-92.968 261.43,-94.552 262.869,-95.56 262.006,-93.976 263.445,-92.682 264.883,-93.544 265.029,-92.104 263.59,-92.249
+ 262.006,-92.537 261.715,-90.953 262.006,-89.514 262.148,-88.072 262.438,-86.632 263.879,-86.488 263.73,-84.904
+ 263.879,-83.464 264.313,-81.88 264.883,-80.44 266.324,-81.592 267.906,-82.024 269.35,-81.016 270.502,-79.576 270.645,-79.289
+ 271.365,-77.705 271.365,-76.266 270.789,-74.682 271.223,-73.24 272.66,-73.816 274.246,-74.249 275.254,-75.833 276.838,-74.968
+ 278.277,-74.682 279.715,-75.256 278.277,-74.249 278.998,-72.665 279.43,-71.224 281.014,-70.648 281.301,-70.504 279.715,-70.36
+ 278.277,-71.369 276.838,-71.8 275.254,-71.944 273.813,-73.098 272.23,-72.808 272.23,-71.224 273.238,-69.785 274.82,-68.776
+ 276.262,-69.352 277.701,-68.632 276.262,-68.776 274.82,-68.201 273.379,-68.776 272.23,-70.216 270.789,-70.792 271.074,-72.232
+ 269.641,-73.528 268.197,-74.537 266.758,-75.112 265.174,-74.968 263.73,-75.256 262.293,-74.968 263.301,-76.552
+ 261.861,-75.833 260.422,-74.824 258.838,-73.672 257.398,-73.098 255.957,-72.52 254.518,-70.936 253.365,-69.352 252.502,-68.92
+ 251.062,-68.346 249.621,-66.762 249.189,-65.178 249.189,-63.736 250.918,-63.88 252.502,-64.744 252.502,-63.592 251.35,-63.304
+ 249.909,-63.16 248.325,-62.44 247.75,-61 248.037,-59.417 249.621,-58.266 250.63,-56.682 251.205,-55.24 251.205,-53.8
+ 249.621,-52.072 248.182,-51.785 247.605,-50.346 247.894,-48.762 246.453,-48.041 246.453,-49.48 245.878,-50.92 244.438,-50.776
+ 243.573,-49.338 242.422,-47.896 242.422,-49.338 242.71,-50.776 243.43,-52.216 243.861,-53.8 245.302,-53.081 244.726,-54.665
+ 244.149,-56.104 243.142,-57.688 241.846,-59.128 242.134,-60.568 241.701,-62.152 237.237,-62.152 235.798,-62.008
+ 234.357,-61.576 232.918,-59.992 231.478,-59.85 230.037,-60.136 228.453,-60.424 227.014,-61.289 225.573,-61.432 223.989,-62.44
+ 223.558,-64.024 222.693,-66.904 223.126,-68.488 221.829,-69.93 220.245,-71.224 218.661,-72.088 217.222,-72.088
+ 216.934,-70.648 215.35,-72.088 212.47,-73.528 211.317,-73.528 210.166,-74.824 209.59,-76.266 208.006,-77.417 206.565,-77.992
+ 204.981,-77.128 204.262,-75.544 204.838,-74.104 204.981,-73.384 203.829,-74.968 203.686,-76.408 204.55,-77.85 203.109,-78.856
+ 202.678,-79 201.237,-78.28 200.806,-76.696 202.102,-75.256 200.661,-74.392 200.086,-75.833 198.646,-76.266 197.062,-75.544
+ 197.781,-74.104 199.222,-73.384 200.806,-72.808 202.245,-72.376 201.237,-70.936 201.958,-69.497 203.542,-70.792
+ 202.821,-69.352 201.382,-69.208 199.941,-68.346 198.357,-67.336 197.35,-65.896 197.638,-64.457 198.214,-63.016 199.798,-63.16
+ 198.357,-62.296 197.926,-62.728 198.214,-61.144 198.069,-59.705 199.51,-59.705 199.653,-58.266 201.094,-56.824
+ 202.533,-56.249 201.094,-55.672 199.653,-55.816 199.077,-57.256 197.638,-57.256 196.054,-57.544 194.613,-57.544
+ 193.029,-56.968 191.445,-57.544 190.294,-55.96 191.733,-55.098 193.174,-53.656 191.733,-54.232 190.149,-54.52 188.71,-55.098
+ 187.27,-54.232 187.27,-53.224 187.413,-51.785 187.413,-50.201 185.974,-48.762 184.533,-47.464 182.949,-47.896 182.518,-46.457
+ 184.102,-45.304 184.966,-45.16 184.821,-45.736 186.405,-46.024 186.405,-44.44 187.846,-43.72 189.43,-45.016 188.134,-43.576
+ 189.573,-42.712 191.014,-41.272 192.598,-40.552 194.037,-39.833 195.478,-38.682 196.485,-37.24 197.926,-36.376
+ 198.069,-34.936 199.51,-34.936 201.094,-35.081 202.533,-35.081 204.117,-34.792 205.701,-34.36 207.142,-34.218 205.701,-34.936
+ 204.117,-35.081 205.701,-36.376 207.142,-35.944 207.43,-37.528 208.869,-36.953 208.582,-35.369 210.166,-34.792 211.605,-33.93
+ 213.046,-34.36 214.63,-34.36 216.069,-34.506 217.51,-35.081 216.069,-34.792 215.062,-36.232 213.621,-36.808 213.189,-38.249
+ 212.758,-39.833 212.901,-41.272 214.342,-42.568 213.334,-43.289 211.75,-43.576 210.741,-45.016 211.605,-46.6 212.037,-48.041
+ 212.037,-48.472 212.47,-47.033 212.47,-45.449 213.909,-44.296 214.342,-45.88 214.773,-47.32 215.493,-45.88 215.35,-44.44
+ 216.502,-43 218.086,-42.568 218.806,-41.128 217.798,-39.688 218.229,-38.104 219.094,-36.665 219.382,-35.224 219.382,-32.201
+ 218.949,-30.762 220.245,-29.32 221.109,-30.762 222.55,-31.192 221.974,-29.754 222.117,-28.17 222.693,-26.728 222.693,-26.152
+ 223.413,-25.576 224.854,-24.568 226.294,-23.705 227.733,-22.696 229.317,-21.976 230.758,-20.97 232.197,-19.96 233.781,-18.953
+ 235.222,-18.953 236.229,-17.514 237.67,-18.52 238.533,-17.224 236.949,-16.792 238.533,-15.496 239.974,-14.488 241.558,-13.338
+ 240.117,-14.634 238.678,-15.642 239.829,-17.224 240.117,-15.642 241.413,-14.201 242.998,-13.48 244.438,-13.05 244.726,-11.466
+ 243.43,-12.184 244.582,-10.744 246.021,-9.306 247.462,-8.728 248.901,-7.289 250.485,-7 251.926,-6.28 252.502,-5.992
+ 253.941,-5.85 254.949,-4.266 253.51,-5.56 254.23,-3.976 255.67,-2.537 257.254,-1.098 258.693,-0.953 260.277,-0.808
+ 260.277,0.631 258.838,-0.376 259.701,1.064 261.141,1.928 262.582,2.215 264.021,2.358 265.461,3.224 267.047,4.232
+ 268.484,4.808 269.926,4.95 271.365,5.816 272.809,7.11 274.246,8.694 275.686,9.704 277.129,9.848 278.711,9.272 280.148,9.272
+ 281.73,9.414 283.316,9.704 284.758,10.136 286.342,10.424 287.781,10.278 289.365,11.288 290.809,11.72 289.941,10.278
+ 291.379,9.272 292.391,10.856 293.686,12.295 295.129,12.728 296.563,13.158 298.006,13.734 298.438,13.879 300.021,14.6
+ 301.461,15.318 303.047,15.896 304.484,16.326 306.066,17.192 306.066,15.751 306.215,15.03 306.357,13.446 306.645,12.008
+ 308.086,11 309.525,9.56 308.086,8.84 306.645,7.256 306.502,5.816 306.215,4.375 305.926,2.792 306.215,1.352 305.926,-0.09
+ 306.934,-1.528 308.23,-3.112 308.373,-4.266 308.373,-2.682 309.957,-3.4 309.094,-4.842 310.533,-3.544 311.973,-3.688
+ 314.133,-3.688 315.57,-2.682 315.715,-1.24 315.43,0.344 316.006,1.928 317.445,2.936 319.029,4.375 320.473,4.662 321.477,6.104
+ 321.477,7.688 320.898,9.127 320.758,10.568 321.906,12.008 321.906,13.592 323.492,14.167 324.934,13.016 326.373,12.008
+ 327.813,11.432 329.398,11.288 330.98,12.008 332.422,12.295 333.861,13.592 335.301,14.456 336.883,14.742 338.324,15.176
+ 339.906,15.463 341.35,16.184 342.502,17.624 343.074,19.064 344.66,19.208 346.102,18.919 347.543,19.782 349.129,20.07
+ 350.711,19.782 352.148,20.648 352.727,20.648 354.166,20.792 "/>
+
+ <polyline id="polyline3395" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -251.498,295.974 -250.057,296.406 -248.906,295.542 -248.187,294.102 -248.187,293.958 -247.898,295.398 -246.458,295.974
+ -244.874,296.118 -243.433,296.837 -241.994,296.549 -240.555,296.406 -238.971,296.262 -237.53,296.549 -236.091,296.837
+ -234.507,296.694 -233.354,296.837 -231.914,297.846 -230.473,298.134 -229.034,298.134 -227.45,298.998 -226.011,298.566
+ -225.578,297.558 -225.003,298.134 -225.29,299.574 -223.706,300.293 -223.272,300.293 -221.834,301.158 -220.681,301.446
+ -220.106,301.734 -218.666,302.886 -217.225,303.75 -215.641,304.614 -214.202,304.902 -212.906,304.182 -213.339,305.766
+ -211.898,305.622 -211.755,305.478 -210.314,305.91 -209.307,307.35 -208.011,308.79 -207.29,310.23 -206.139,311.669
+ -205.706,310.23 -205.418,310.806 -204.843,309.366 -203.4,308.79 -203.834,310.374 -203.4,311.814 -201.963,310.518
+ -201.816,311.238 -202.395,312.678 -201.387,314.118 -199.946,313.398 -199.515,314.837 -198.074,314.118 -197.064,312.678
+ -197.498,314.118 -198.074,315.558 -199.658,316.997 -198.074,317.286 -197.211,315.846 -195.771,316.278 -195.771,317.862
+ -194.33,317.862 -192.889,317.431 -194.33,318.726 -193.898,320.167 -194.473,321.606 -194.618,321.606 -193.034,323.046
+ -192.601,321.462 -192.171,320.022 -190.587,319.015 -189.721,320.599 -189.29,322.038 -189.866,323.479 -190.299,325.062
+ -190.587,326.503 -189.721,328.085 -188.282,329.526 -188.282,330.966 -186.843,332.263 -185.259,332.405 -183.818,332.405
+ -182.522,331.976 -181.082,330.966 -180.074,329.526 -179.211,328.085 -178.49,326.503 -176.906,325.64 -175.61,324.198
+ -176.473,322.759 -177.194,321.175 -178.202,319.733 -176.761,320.022 -176.042,321.606 -175.177,320.167 -173.883,318.726
+ -173.595,317.142 -173.017,315.702 -172.299,314.118 -172.154,313.686 -171.003,312.246 -172.442,312.678 -172.874,311.238
+ -171.29,310.374 -171.146,309.797 -170.57,309.797 -170.715,311.381 -169.131,310.806 -167.69,310.23 -167.259,309.942
+ -168.843,310.95 -170.282,312.246 -171.003,313.686 -171.721,315.27 -172.442,316.709 -173.595,318.149 -174.314,319.591
+ -174.601,321.175 -174.746,322.614 -175.322,324.054 -175.755,325.495 -175.898,326.79 -177.051,328.374 -177.482,329.815
+ -178.345,331.253 -177.771,332.694 -176.187,332.839 -177.482,334.421 -177.051,335.862 -175.61,337.159 -174.889,337.591
+ -173.883,337.591 -172.442,336.87 -171.578,337.591 -170.137,338.022 -169.418,337.591 -169.274,336.87 -168.843,337.591
+ -168.122,339.175 -169.563,339.03 -170.715,340.472 -172.154,341.335 -172.299,341.479 -170.715,340.901 -170.715,342.343
+ -171.721,343.782 -170.282,343.64 -168.843,343.062 -170.282,343.927 -171.433,345.366 -171.721,346.808 -170.858,348.39
+ -169.706,349.831 -168.986,351.413 -167.547,351.991 -166.106,352.854 -164.522,353.286 -163.082,353.573 -162.074,355.015
+ -160.923,355.591 -159.482,355.446 -158.763,356.886 -157.322,357.175 -155.738,357.894 -154.299,358.614 -152.858,359.19
+ -151.418,358.472 -150.698,356.886 -150.555,355.446 -150.267,354.007 -150.555,352.565 -150.698,351.126 -150.698,349.687
+ -150.41,348.245 -150.267,346.663 -149.979,345.222 -149.114,343.782 -147.675,342.487 -146.234,341.479 -144.795,340.183
+ -143.354,338.741 -142.49,337.591 -141.914,336.151 -141.482,334.565 -141.051,333.126 -140.475,330.245 -141.914,330.534
+ -141.051,329.095 -140.042,327.511 -139.898,329.095 -140.475,331.976 -140.906,333.413 -140.763,334.999 -141.339,336.438
+ -141.194,337.591 -142.059,339.175 -140.618,338.741 -140.187,337.591 -140.33,339.175 -140.906,340.614 -141.771,342.198
+ -143.354,343.64 -144.219,345.077 -144.507,346.519 -144.795,348.103 -145.082,348.679 -144.938,347.237 -146.379,348.534
+ -147.963,349.687 -149.402,351.271 -149.834,352.71 -149.69,354.151 -149.69,355.733 -148.971,357.175 -147.53,357.894
+ -146.091,358.901 -144.938,360.343 -143.354,361.64 -141.914,362.069 -140.475,362.214 -140.042,362.79 -138.458,364.229
+ -137.019,365.095 -135.578,365.526 -134.57,364.085 -133.994,362.499 -133.563,361.065 -132.267,359.622 -130.826,359.479
+ -129.818,361.065 -130.106,362.499 -130.25,363.942 -130.25,365.526 -128.954,366.966 -129.675,368.405 -131.259,368.983
+ -132.698,369.271 -132.843,370.712 -133.418,372.151 -134.139,373.733 -134.858,375.175 -133.274,374.89 -131.834,374.022
+ -132.555,375.462 -132.122,376.901 -133.563,378.343 -134.282,379.782 -132.843,379.782 -132.122,379.495 -130.683,378.774
+ -129.242,377.767 -127.803,376.323 -126.362,376.472 -126.074,375.03 -124.635,374.022 -123.339,372.438 -122.906,370.999
+ -124.347,369.847 -122.906,369.413 -122.042,370.999 -121.898,372.438 -121.322,370.854 -121.322,372.438 -121.61,373.88
+ -121.755,373.155 -123.339,374.454 -124.778,375.462 -124.923,377.046 -123.339,377.622 -124.778,377.622 -126.362,378.343
+ -127.803,377.767 -128.379,379.351 -129.818,380.647 -131.259,380.935 -130.826,382.374 -129.387,383.526 -127.946,384.245
+ -127.082,385.687 -125.786,387.271 -124.347,388.136 -124.202,389.573 -122.763,389.431 -121.322,389.862 -119.883,390.438
+ -119.738,391.878 -118.154,393.03 -116.715,393.462 -113.834,393.462 -112.395,393.606 -110.954,393.462 -109.515,392.312
+ -108.362,390.87 -107.066,389.286 -105.626,387.847 -104.042,386.983 -102.603,386.839 -101.162,387.271 -101.595,385.827
+ -100.154,385.397 -99.003,383.958 -97.563,383.815 -97.563,383.095 -95.979,382.663 -96.267,384.103 -95.547,385.687
+ -96.698,386.983 -95.259,387.847 -94.25,389.286 -92.811,390.581 -91.37,390.438 -89.931,390.151 -89.354,388.71 -88.923,387.271
+ -89.498,385.827 -88.059,387.271 -85.179,389.286 -83.738,388.421 -83.307,386.983 -83.162,385.542 -83.883,383.958
+ -82.299,383.237 -80.858,381.942 -80.57,381.077 -80.139,379.495 -80.139,378.058 -79.851,379.495 -79.851,380.935 -78.41,380.935
+ -77.69,382.374 -77.402,380.935 -77.114,379.351 -77.402,377.909 -77.402,376.323 -77.547,374.89 -77.259,373.444 -76.538,371.862
+ -75.675,370.421 -75.53,368.839 -75.818,367.397 -77.114,365.958 -76.106,364.519 -76.25,363.077 -76.538,363.077 -76.971,364.519
+ -78.41,364.085 -79.851,363.798 -81.29,363.798 -82.874,364.808 -84.314,364.519 -85.755,364.808 -87.194,365.526 -86.763,366.966
+ -88.202,367.831 -88.923,369.271 -89.211,367.831 -89.498,367.687 -91.082,367.253 -92.522,367.253 -92.234,368.694
+ -93.675,367.253 -94.106,365.815 -93.963,364.229 -95.547,363.798 -96.986,363.655 -98.57,363.798 -100.011,363.798
+ -101.45,363.655 -102.891,363.655 -104.475,363.222 -105.914,362.79 -107.498,361.782 -108.938,360.774 -109.082,360.63
+ -110.666,360.054 -112.106,360.054 -113.547,360.198 -116.57,360.198 -116.139,358.759 -116.858,357.319 -118.299,357.175
+ -119.019,355.733 -120.458,355.446 -121.179,355.446 -120.891,353.862 -119.45,354.151 -118.011,354.151 -116.57,353.431
+ -115.131,352.278 -113.547,350.983 -112.25,349.542 -110.811,349.11 -109.37,348.39 -107.786,347.958 -106.347,347.958
+ -104.906,348.39 -103.467,348.103 -101.883,347.958 -102.891,349.397 -102.891,350.839 -102.458,351.126 -101.019,351.126
+ -99.578,350.983 -98.139,350.55 -96.698,350.263 -95.114,350.118 -93.675,349.542 -92.234,348.534 -90.938,346.95 -89.643,345.511
+ -88.059,344.358 -86.618,343.495 -86.618,342.054 -88.059,341.046 -89.643,340.327 -91.082,339.319 -92.522,339.175
+ -94.106,339.462 -96.986,339.175 -95.547,338.886 -96.986,338.022 -98.282,338.886 -99.723,338.167 -100.011,337.591
+ -100.874,337.591 -101.595,337.015 -103.034,336.726 -101.595,335.718 -100.154,334.278 -98.715,334.565 -97.274,334.565
+ -95.69,334.71 -94.25,334.854 -93.53,334.565 -91.946,334.136 -90.507,333.558 -89.066,333.126 -87.626,331.831 -86.33,330.39
+ -85.034,331.831 -86.475,331.397 -86.763,332.839 -85.322,332.839 -83.883,333.702 -83.883,335.286 -82.442,334.278
+ -83.019,332.839 -82.587,331.253 -82.442,329.815 -80.858,330.534 -79.994,329.095 -81.578,328.229 -81.723,327.798
+ -82.299,326.358 -81.003,324.917 -79.563,324.054 -79.563,322.472 -79.706,321.03 -79.274,322.472 -77.834,322.327
+ -76.971,323.767 -74.522,326.214 -73.082,325.351 -73.227,323.767 -71.643,323.909 -71.643,325.495 -72.507,326.935
+ -72.362,328.374 -70.923,328.519 -69.482,328.229 -70.059,326.79 -68.618,326.503 -67.034,325.927 -65.595,325.062
+ -64.011,324.774 -63.29,323.335 -61.706,322.901 -61.274,322.183 -59.834,321.749 -58.395,321.894 -56.811,322.038 -55.37,322.327
+ -53.931,321.894 -52.49,321.749 -51.051,320.741 -49.467,319.733 -48.171,318.294 -46.73,318.007 -45.29,318.007 -45.003,316.566
+ -46.154,315.125 -44.57,314.982 -44.282,313.542 -42.843,314.549 -41.402,314.406 -41.402,313.542 -41.547,311.958
+ -42.698,310.518 -43.563,311.958 -43.563,313.398 -43.851,310.518 -45.435,310.23 -45.578,308.79 -46.73,307.35 -48.171,306.774
+ -49.179,308.358 -50.618,308.501 -52.059,308.07 -51.339,306.629 -50.187,305.91 -50.906,304.47 -51.914,303.03 -53.354,303.03
+ -54.795,302.598 -56.234,302.598 -57.675,302.166 -59.259,301.59 -60.698,302.31 -62.139,302.886 -62.139,304.326 -63.578,304.47
+ -63.866,303.03 -65.45,302.454 -66.891,301.158 -68.33,300.726 -69.771,300.726 -71.354,301.014 -72.65,301.59 -74.091,302.742
+ -75.675,302.886 -76.395,304.326 -78.986,307.206 -79.851,308.79 -79.851,310.23 -81.29,311.669 -82.73,312.534 -82.874,313.974
+ -82.442,315.414 -81.723,316.997 -83.162,317.142 -84.171,317.718 -85.61,316.278 -87.051,315.125 -85.61,314.982 -84.171,316.278
+ -84.458,314.837 -84.458,313.253 -85.898,312.246 -87.339,311.958 -87.626,313.398 -89.066,312.822 -90.219,311.381
+ -91.803,310.23 -93.242,309.797 -94.395,310.95 -93.963,312.39 -92.811,313.974 -91.37,313.398 -89.931,314.118 -90.65,315.702
+ -92.091,315.846 -93.53,315.702 -94.971,315.27 -96.267,316.709 -97.274,315.99 -98.282,314.549 -98.858,312.965 -100.299,311.669
+ -101.738,311.526 -102.746,310.085 -104.042,308.646 -105.194,307.206 -104.187,305.622 -104.33,304.182 -105.771,303.461
+ -107.211,302.742 -108.65,302.454 -110.234,301.734 -111.675,302.886 -113.114,303.606 -114.698,303.174 -116.139,303.318
+ -117.578,303.606 -119.162,302.886 -119.45,302.886 -120.891,303.03 -122.475,303.174 -122.763,301.734 -122.763,300.293
+ -122.042,298.854 -123.626,298.134 -125.066,299.142 -126.65,300.293 -127.803,298.854 -126.362,299.286 -124.923,298.854
+ -123.339,297.414 -120.458,295.686 -121.322,297.27 -120.171,298.709 -121.61,298.709 -121.755,300.293 -122.187,301.734
+ -120.746,302.598 -120.026,302.454 -118.587,302.454 -118.154,301.014 -116.57,301.59 -115.131,301.59 -115.851,300.15
+ -117.146,298.709 -117.003,297.125 -115.418,297.846 -113.979,298.709 -113.834,297.27 -112.395,296.549 -110.811,297.414
+ -109.37,298.421 -107.786,298.421 -106.347,298.998 -103.467,300.15 -102.026,300.293 -101.45,300.582 -101.595,298.998
+ -102.314,297.558 -103.755,297.27 -104.33,295.83 -102.891,296.262 -101.45,297.27 -100.011,297.99 -101.45,296.549
+ -100.442,295.11 -99.003,294.534 -97.418,293.381 -95.979,292.085 -95.547,290.646 -94.971,289.206 -97.418,289.206
+ -98.282,287.622 -97.274,286.182 -96.986,284.742 -98.427,284.742 -100.011,285.461 -101.45,285.75 -100.587,284.31
+ -102.026,285.03 -103.61,285.606 -105.051,286.182 -104.475,287.622 -104.187,289.206 -105.339,292.085 -106.778,292.518
+ -108.219,292.23 -109.227,292.662 -110.091,291.654 -110.234,290.213 -109.515,288.774 -108.074,287.333 -106.49,286.326
+ -105.051,285.894 -103.61,285.318 -102.171,284.454 -103.61,283.014 -105.051,284.022 -106.49,284.886 -106.49,283.446
+ -106.923,282.006 -106.923,280.421 -106.49,278.982 -105.194,277.542 -104.618,275.958 -104.475,274.662 -103.755,273.222
+ -103.755,271.782 -104.187,271.062 -103.898,269.478 -104.33,268.038 -104.475,266.598 -104.763,265.158 -103.898,263.718
+ -102.746,262.134 -103.034,260.694 -101.883,259.253 -101.162,257.814 -99.578,256.95 -98.139,255.654 -96.698,254.79
+ -95.114,255.078 -96.122,253.638 -96.267,252.198 -95.69,250.902 -95.834,249.75 -95.114,248.31 -93.675,247.446 -92.234,247.877
+ -91.37,246.293 -89.931,246.87 -89.786,245.43 -88.347,244.133 -86.906,243.414 -85.322,244.421 -83.883,244.133 -82.442,244.709
+ -80.858,244.133 -79.418,242.838 -78.267,241.398 -78.843,239.814 -79.418,238.374 -79.131,236.934 -79.563,235.35 -79.994,233.91
+ -79.851,232.47 -79.851,230.885 -79.563,229.446 -79.418,228.006 -80.57,226.568 -82.154,225.125 -83.45,223.686 -83.883,225.125
+ -85.322,224.984 -86.763,224.694 -86.475,226.133 -87.339,227.717 -87.339,229.158 -85.755,228.582 -84.746,230.166
+ -85.61,231.606 -86.763,233.045 -85.61,234.629 -86.475,236.07 -85.034,236.934 -83.883,239.814 -83.45,241.254 -83.883,242.694
+ -85.322,242.262 -86.906,242.118 -86.618,240.678 -86.618,239.094 -86.906,237.654 -88.347,236.79 -89.931,236.79 -88.49,236.213
+ -88.347,234.774 -89.786,234.629 -90.074,234.486 -89.498,231.606 -89.786,230.166 -89.354,228.582 -89.498,227.142
+ -90.938,228.438 -91.803,226.854 -92.811,225.414 -94.395,225.125 -96.698,226.278 -98.139,226.568 -99.723,225.558
+ -101.162,225.702 -102.603,225.558 -104.042,226.422 -105.482,225.558 -107.066,226.278 -108.507,226.278 -107.066,225.558
+ -108.507,224.406 -107.066,223.4 -105.482,224.694 -105.051,223.254 -106.635,222.822 -108.074,222.534 -109.515,221.958
+ -110.954,222.39 -112.538,222.678 -113.979,222.965 -115.418,223.542 -113.979,222.39 -111.099,221.526 -109.515,221.526
+ -108.074,220.95 -106.778,219.51 -106.635,219.366 -105.194,220.374 -103.61,219.366 -102.171,218.648 -103.755,220.085
+ -103.61,221.526 -102.891,222.965 -101.45,223.11 -100.011,222.822 -98.57,221.958 -98.57,220.518 -96.986,220.662 -95.547,220.95
+ -94.106,221.094 -95.547,219.654 -96.986,218.934 -95.547,217.638 -95.259,217.782 -93.675,218.648 -92.234,218.79 -91.082,217.35
+ -91.082,215.91 -89.643,215.192 -88.202,215.045 -87.482,213.894 -87.194,214.038 -85.755,214.614 -85.61,214.614 -85.755,213.174
+ -85.322,211.734 -85.61,210.15 -86.475,208.709 -86.475,207.27 -85.322,205.83 -85.467,204.246 -85.179,202.806 -85.898,201.654
+ -84.458,200.213 -84.746,198.776 -84.171,197.192 -83.45,195.75 -82.442,194.31 -81.866,192.87 -81.29,191.286 -79.274,188.406
+ -77.834,187.11 -76.538,185.669 -76.395,184.085 -75.963,183.797 -74.522,183.222 -73.082,182.07 -73.082,183.654 -72.938,185.094
+ -71.354,185.094 -70.778,186.534 -71.066,187.974 -70.347,188.118 -70.778,189.702 -71.786,191.142 -72.219,192.726
+ -70.778,193.877 -69.339,193.59 -67.755,194.024 -66.314,193.59 -64.874,193.446 -63.29,192.726 -61.851,192.15 -60.41,190.998
+ -58.971,189.99 -57.387,188.984 -56.234,187.542 -55.946,186.102 -57.387,185.816 -58.826,186.102 -57.53,184.662 -55.515,181.782
+ -54.65,180.342 -53.211,179.48 -51.914,178.038 -50.475,176.598 -49.034,175.877 -47.595,175.014 -46.011,174.726 -44.57,173.862
+ -43.131,172.422 -41.979,170.984 -40.538,169.542 -39.963,168.822 -38.522,167.958 -37.082,167.526 -35.643,167.094
+ -34.059,166.95 -32.618,166.232 -31.034,165.654 -29.595,164.79 -28.154,163.206 -27.29,161.768 -26.282,160.326 -25.418,158.888
+ -24.555,157.446 -25.994,156.15 -27.435,154.998 -27.578,153.56 -28.587,151.976 -28.442,150.534 -28.442,150.392 -27.723,149.526
+ -27.003,148.085 -25.563,146.79 -24.267,148.232 -23.834,149.669 -23.114,151.254 -21.53,150.246 -20.091,150.392 -18.65,151.542
+ -17.354,152.694 -15.914,153.702 -14.475,152.984 -15.914,152.838 -15.194,151.254 -14.763,149.816 -14.906,149.094
+ -15.771,148.518 -15.482,149.958 -15.626,150.246 -15.771,150.392 -16.202,150.965 -16.49,151.4 -16.635,151.686 -16.778,151.254
+ -16.778,149.669 -17.786,148.232 -17.643,146.79 -19.227,147.654 -18.795,146.213 -19.803,144.776 -21.242,144.198
+ -21.242,142.758 -22.538,144.198 -22.395,142.758 -21.963,141.318 -20.522,140.166 -19.082,139.877 -17.498,139.734
+ -16.059,139.734 -14.618,139.877 -13.034,139.877 -11.595,140.312 -10.154,141.174 -9.29,141.318 -8.427,141.75 -6.986,142.038
+ -5.402,142.472 -3.963,142.758 -2.522,142.758 -1.082,142.614 0.502,142.472 1.941,141.174 0.789,139.734 -0.795,139.301
+ -2.234,139.446 -3.675,140.024 -3.099,138.582 -2.666,137.144 -2.811,135.702 -4.25,134.838 -4.826,133.4 -4.971,131.958
+ -5.547,130.374 -5.979,128.936 -5.114,128.07 -3.53,129.078 -2.954,130.662 -2.811,129.078 -2.091,127.64 -1.803,126.198
+ -1.37,124.614 -1.37,124.184 -0.65,122.742 -1.37,121.304 -1.946,119.862 -2.811,118.278 -3.675,115.4 -5.114,114.104
+ -3.675,115.11 -2.234,116.262 -0.795,117.702 -1.658,116.262 -0.219,117.702 1.365,117.846 -0.219,117.56 -1.37,116.118
+ 0.214,116.984 -1.37,115.83 -1.227,114.246 -0.938,115.83 0.502,116.118 0.214,114.678 1.653,114.534 0.789,112.95 0.646,111.51
+ 0.789,110.07 -0.074,108.486 1.365,108.917 0.934,107.48 1.077,105.896 1.222,104.454 -0.219,103.304 -1.803,103.158 -1.515,104.6
+ -2.954,104.312 -2.954,103.877 -2.091,102.44 -0.507,101.286 0.502,99.846 -0.938,99.99 -2.522,100.422 -0.938,99.56 0.502,99.272
+ 1.941,100.278 1.51,101.862 2.518,103.304 1.798,104.888 2.806,106.326 3.382,107.768 1.941,108.198 2.229,109.64 2.086,111.224
+ 2.949,112.662 3.382,114.104 2.949,115.542 1.653,117.125 1.51,118.568 0.069,118.856 0.646,120.44 0.357,121.877 0.934,123.318
+ 0.789,124.758 0.502,126.198 0.502,126.342 0.357,127.782 0.214,129.366 1.077,130.662 2.518,130.808 3.958,131.381 3.237,129.797
+ 3.094,128.358 3.958,126.917 5.397,127.352 5.974,125.91 6.405,124.472 5.542,123.03 5.109,122.454 4.821,120.87 6.262,120.44
+ 6.405,118.998 5.974,117.414 6.262,115.976 6.405,114.534 7.846,114.678 7.989,113.094 6.55,113.381 7.846,111.942 8.422,110.358
+ 7.126,108.917 6.981,107.48 8.134,106.038 8.134,104.6 8.422,103.014 8.998,101.574 8.422,100.133 8.277,98.694 8.422,97.254
+ 6.981,95.958 5.542,95.669 4.102,95.238 2.949,94.808 2.949,94.662 3.382,93.942 4.821,94.374 6.262,94.662 7.846,94.95
+ 8.71,93.51 10.294,92.358 10.869,90.917 9.43,90.631 7.989,90.342 6.55,90.486 6.838,90.056 7.126,90.198 8.565,89.768
+ 10.149,89.333 11.59,89.48 11.878,89.333 13.317,88.76 14.758,87.896 15.478,86.454 16.918,86.024 18.357,85.304 19.798,84.728
+ 21.382,84.44 22.821,84.295 24.262,83.862 25.701,83.72 27.142,83.574 29.157,83.574 30.598,83.72 32.182,83.862 33.621,84.006
+ 35.062,83.574 36.502,83.144 38.086,82.278 38.661,81.848 39.958,80.406 41.542,79.542 42.981,78.967 44.134,77.816 45.573,77.816
+ 47.157,77.958 47.302,77.958 48.741,77.816 49.317,77.383 50.758,76.95 52.197,77.526 53.638,77.816 54.789,77.816 56.229,77.238
+ 57.67,76.085 59.109,75.799 60.55,74.358 60.405,72.917 60.405,72.776 61.701,72.631 62.71,71.192 62.71,70.902 64.149,69.608
+ 65.59,69.176 65.878,69.03 66.166,68.742 66.886,68.888 68.325,68.888 69.909,69.03 71.35,68.166 72.789,67.879 74.373,66.87
+ 75.813,65.432 77.397,64.998 78.838,64.422 80.277,64.422 81.285,64.856 82.149,64.422 83.014,64.568 84.453,63.56 85.894,63.848
+ 87.334,63.272 88.918,63.56 90.357,62.838 91.798,62.118 92.949,60.534 94.39,59.526 94.821,60.104 96.262,58.95 97.27,58.085
+ 97.989,57.366 97.701,56.358 99.142,56.501 100.726,56.07 102.166,55.928 102.166,57.366 103.605,56.501 105.046,56.215
+ 103.605,56.936 105.046,56.79 106.485,57.224 106.342,58.808 107.35,60.246 108.934,59.096 110.373,59.383 111.813,59.096
+ 113.397,57.512 114.838,56.936 115.126,55.494 116.565,54.917 118.149,54.344 118.869,55.782 120.021,57.366 121.605,56.501
+ 123.046,56.501 122.901,55.064 123.046,54.776 123.046,53.333 123.334,51.896 124.773,51.176 124.63,51.608 126.069,52.038
+ 126.214,53.047 124.63,54.198 124.342,55.64 125.493,57.224 126.934,56.79 128.518,57.078 129.958,56.79 131.109,58.232
+ 131.829,56.79 132.117,55.352 132.405,53.768 132.55,52.326 132.981,50.742 133.558,49.304 134.277,47.862 135.718,46.422
+ 137.157,45.56 138.741,44.694 140.182,43.542 141.621,43.542 141.621,44.984 142.918,43.4 143.493,41.958 144.214,40.52
+ 144.069,39.942 143.781,40.085 142.342,38.648 140.901,38.79 142.197,37.352 141.621,35.91 141.046,34.472 142.485,35.768
+ 142.918,35.333 142.918,36.917 143.205,37.494 143.35,38.215 143.781,39.224 144.934,38.215 145.653,36.776 146.373,35.333
+ 147.094,33.896 148.39,32.312 149.829,31.304 151.126,29.862 152.71,28.856 151.27,30.295 152.422,31.592 152.854,30.15
+ 153.718,27.272 154.006,25.688 154.006,24.967 154.582,23.526 155.157,22.088 155.157,19.064 155.014,17.48 154.869,16.04
+ 155.014,14.6 155.302,13.016 155.733,11.574 156.166,10.136 157.029,8.694 158.182,7.11 159.621,5.959 160.918,5.526
+ 162.502,4.662 163.941,3.942 165.525,3.224 166.966,2.792 168.405,2.648 169.846,1.494 169.413,-0.09 169.126,-2.97 169.27,-4.408
+ 169.989,-5.992 171.43,-6.568 169.846,-5.272 171.573,-6.856 170.134,-6.712 168.693,-6.856 167.254,-7.576 165.67,-8.873
+ 164.229,-9.16 162.789,-9.16 161.205,-9.736 159.766,-10.6 158.325,-11.466 156.741,-12.184 157.029,-11.754 155.59,-12.617
+ 154.149,-13.48 152.565,-14.058 151.126,-15.352 149.974,-16.792 148.966,-18.232 148.39,-19.674 146.949,-21.112 145.51,-21.112
+ 144.069,-20.97 142.485,-20.824 141.046,-20.249 139.605,-19.528 139.605,-19.386 139.894,-17.944 139.174,-18.665
+ 139.174,-18.953 139.029,-20.537 138.453,-19.098 137.302,-19.24 135.861,-18.52 134.277,-19.674 134.565,-20.682 134.565,-22.408
+ 133.846,-23.85 132.981,-24.426 131.542,-25.289 131.254,-25.432 129.813,-25.289 129.525,-24.138 128.949,-22.984 127.51,-22.266
+ 125.926,-22.842 124.485,-21.833 123.046,-22.554 122.325,-23.992 123.334,-25.576 124.773,-26.296 126.357,-26.296
+ 127.798,-25.432 129.237,-25.144 130.245,-26.586 131.686,-26.873 133.126,-26.44 134.565,-25.289 135.285,-23.705
+ 136.726,-22.266 138.166,-20.824 139.605,-21.976 138.886,-23.417 137.445,-24.426 136.006,-24.568 134.565,-25.864
+ 132.981,-27.016 132.838,-28.457 132.262,-29.896 131.829,-28.457 130.39,-27.736 128.949,-27.594 127.365,-27.88 126.069,-29.32
+ 126.357,-30.762 126.934,-29.178 128.518,-29.754 129.958,-30.184 129.958,-31.768 130.39,-33.208 130.245,-33.352
+ 130.245,-34.792 131.686,-33.93 133.126,-34.506 134.71,-34.936 136.149,-35.224 137.59,-35.224 139.174,-36.088 140.613,-36.232
+ 142.054,-36.808 143.638,-36.953 145.077,-35.944 146.518,-36.088 145.077,-34.936 145.222,-33.496 145.51,-32.058
+ 145.077,-30.617 145.51,-29.178 146.949,-29.32 148.39,-29.896 149.974,-30.617 151.558,-31.912 152.71,-33.352 153.285,-34.218
+ 154.726,-34.506 156.31,-35.656 157.462,-37.24 157.462,-38.682 156.021,-38.824 156.166,-40.266 157.75,-40.408 159.189,-39.976
+ 160.773,-40.696 162.214,-41.992 163.077,-43.432 163.365,-45.016 164.806,-46.457 166.245,-46.312 167.254,-47.752
+ 167.254,-49.192 168.693,-49.912 170.134,-50.488 169.126,-48.904 169.701,-49.192 170.71,-50.776 169.846,-52.216 168.405,-52.36
+ 166.966,-52.936 165.382,-53.8 163.941,-53.656 162.502,-53.656 161.062,-53.8 159.478,-53.8 161.062,-53.514 159.621,-53.369
+ 158.037,-53.656 156.598,-53.514 155.014,-54.376 156.021,-54.376 157.605,-54.665 157.894,-56.249 159.334,-57.4 160.773,-56.968
+ 161.062,-55.528 160.918,-56.968 159.478,-58.121 158.037,-59.417 156.598,-60.28 156.021,-60.424 156.31,-61.864 155.878,-63.304
+ 154.438,-64.457 152.854,-64.744 151.413,-64.744 149.974,-64.6 146.949,-64.6 145.51,-64.744 144.069,-64.6 143.35,-63.16
+ 141.909,-62.728 140.47,-61.576 138.886,-61.144 137.445,-60.424 136.006,-60.136 134.422,-60.136 132.981,-60.712 131.397,-61
+ 132.55,-59.56 133.989,-59.272 132.55,-58.266 131.109,-59.128 129.67,-60.424 128.229,-61.144 128.086,-59.705 127.798,-58.121
+ 126.502,-56.682 126.069,-55.24 124.485,-53.8 124.197,-52.36 122.758,-52.648 121.174,-51.642 120.886,-50.201 119.302,-48.762
+ 120.021,-49.625 118.582,-50.201 116.998,-51.352 116.422,-52.792 116.998,-54.376 118.294,-55.816 119.878,-55.672
+ 120.021,-55.96 119.59,-57.544 118.149,-57.688 116.71,-58.696 115.27,-59.56 114.693,-61.144 113.829,-62.584 112.533,-64.024
+ 111.67,-65.608 111.813,-67.048 112.245,-68.488 112.821,-69.93 113.686,-71.514 115.126,-72.232 116.565,-72.665 118.149,-73.528
+ 119.59,-73.098 121.174,-74.104 121.605,-75.544 122.037,-77.128 122.613,-78.568 124.342,-81.448 125.781,-82.744
+ 127.222,-82.744 128.661,-83.464 129.67,-84.904 128.949,-83.464 128.661,-82.024 130.102,-81.304 132.838,-81.304 134.277,-81.88
+ 135.43,-83.32 135.142,-84.762 133.558,-85.625 135.285,-85.625 136.726,-86.92 137.014,-88.36 136.006,-89.8 136.726,-90.09
+ 136.149,-91.528 134.71,-91.384 133.846,-89.944 133.701,-89.944 133.701,-90.09 134.277,-91.528 135.285,-92.968 134.71,-94.408
+ 133.27,-94.696 134.277,-94.984 135.718,-93.976 137.157,-94.408 138.021,-95.992 138.453,-97.432 140.182,-101.752
+ 140.325,-103.336 139.894,-104.776 139.174,-106.216 140.613,-106.936 142.197,-107.656 140.613,-108.953 139.174,-108.953
+ 140.758,-109.816 142.197,-110.249 141.909,-111.688 140.47,-111.544 139.029,-111.4 138.741,-112.84 138.886,-114.28
+ 137.445,-114.712 136.149,-116.152 135.285,-117.592 133.701,-116.584 134.134,-115.144 133.558,-112.266 132.55,-110.682
+ 131.397,-109.24 131.109,-107.8 130.821,-108.52 131.254,-109.96 132.693,-111.256 132.981,-112.696 133.126,-114.28
+ 133.558,-115.72 131.974,-115.432 131.686,-116.873 130.245,-116.584 131.254,-118.024 130.533,-119.464 128.949,-118.457
+ 127.51,-118.312 126.069,-119.176 122.901,-118.024 121.462,-117.592 120.021,-116.152 118.438,-116.44 120.021,-117.592
+ 118.438,-117.592 116.998,-118.312 116.998,-119.896 118.006,-121.336 119.59,-120.328 121.029,-118.888 122.037,-120.472
+ 124.054,-123.352 123.766,-122.488 122.758,-121.05 123.766,-119.608 125.205,-119.608 126.646,-119.896 128.229,-119.176
+ 129.67,-119.033 128.806,-120.472 129.237,-121.912 129.813,-123.352 130.821,-124.792 131.254,-126.232 129.813,-125.8
+ 128.373,-125.944 128.518,-127.384 128.373,-127.528 126.789,-128.104 125.35,-128.249 124.773,-127.528 124.342,-128.824
+ 122.758,-129.4 122.037,-130.552 120.453,-130.84 119.014,-131.272 119.157,-131.85 118.869,-133.289 117.43,-133.864
+ 115.989,-133.72 114.55,-133.289 112.966,-132.712 111.525,-131.992 110.086,-130.984 108.646,-129.4 107.926,-127.96
+ 107.781,-127.96 107.35,-128.104 105.909,-127.384 105.909,-126.953 106.773,-124.072 108.214,-122.632 107.062,-121.192
+ 107.062,-119.752 106.773,-118.312 106.197,-116.728 106.773,-115.289 105.766,-116.296 104.325,-115.144 104.758,-116.296
+ 106.197,-117.448 106.054,-118.888 106.342,-120.328 106.485,-121.768 105.909,-123.352 104.47,-123.642 104.037,-125.081
+ 103.317,-126.52 102.166,-127.24 100.869,-128.682 99.43,-130.121 98.422,-131.705 96.838,-132.856 97.846,-134.296
+ 98.277,-135.736 98.565,-137.32 98.422,-137.464 97.27,-139.048 95.829,-138.904 94.245,-138.041 94.533,-139.48 94.966,-141.064
+ 94.533,-142.504 93.094,-143.224 94.102,-144.665 94.533,-146.249 95.974,-146.968 94.39,-146.537 92.949,-145.816 91.51,-145.96
+ 90.069,-144.665 89.926,-143.224 88.918,-141.642 87.766,-140.201 86.182,-139.768 85.605,-138.328 84.741,-136.888
+ 83.157,-135.592 82.582,-137.033 80.998,-137.32 79.558,-137.176 79.413,-137.32 77.974,-138.184 77.542,-136.744 76.678,-135.304
+ 76.533,-136.744 75.094,-136.6 73.51,-137.32 72.069,-138.617 70.63,-139.768 69.189,-140.776 68.325,-140.92 66.886,-139.912
+ 67.462,-138.328 68.901,-136.888 69.334,-136.312 68.901,-134.873 69.478,-133.432 70.197,-131.992 68.758,-132.712
+ 68.325,-131.272 67.75,-129.688 69.189,-128.249 67.75,-129.4 66.31,-129.256 64.726,-129.256 63.285,-130.408 64.582,-129.833
+ 66.021,-129.688 67.605,-130.408 67.462,-131.85 67.605,-133.289 66.021,-133.864 64.582,-135.16 63.43,-135.448 61.989,-134.584
+ 59.397,-131.705 58.102,-130.266 56.518,-128.824 55.653,-127.24 55.222,-125.8 55.222,-124.216 54.934,-122.776 54.934,-123.352
+ 54.646,-124.936 55.222,-126.376 55.077,-127.96 53.638,-129.256 54.789,-130.552 55.365,-131.992 55.798,-133.432
+ 56.518,-134.873 56.518,-136.457 56.086,-137.896 54.646,-138.76 53.205,-138.041 51.766,-138.328 52.485,-138.184
+ 53.926,-138.617 55.222,-140.058 55.077,-141.497 54.646,-142.936 54.069,-144.376 53.926,-145.96 53.493,-147.4 52.054,-148.266
+ 51.189,-149.85 51.046,-149.56 50.182,-148.121 50.182,-148.266 50.47,-149.705 51.909,-150.28 52.918,-149.128 54.069,-150.712
+ 54.646,-152.152 55.365,-153.592 56.518,-155.033 57.094,-156.617 57.525,-158.056 57.813,-159.497 57.958,-160.936
+ 56.806,-163.816 58.245,-164.392 59.829,-164.824 59.109,-163.384 59.974,-164.824 61.126,-166.266 61.701,-167.848 63.142,-169
+ 64.726,-170.296 65.878,-171.88 66.453,-173.32 66.741,-173.608 67.894,-175.192 68.613,-176.632 68.901,-178.072 68.758,-179.656
+ 69.046,-181.096 68.47,-182.537 67.029,-182.824 65.59,-184.264 67.029,-184.408 68.613,-183.833 70.054,-185.128 69.909,-186.568
+ 71.35,-185.705 72.789,-184.696 72.502,-183.256 73.941,-184.121 75.382,-183.976 76.966,-185.128 78.405,-186.28 79.846,-187.289
+ 81.861,-190.168 83.014,-191.752 84.166,-194.632 84.166,-197.512 85.605,-198.52 86.613,-199.96 87.478,-201.4 88.918,-201.688
+ 90.357,-203.128 89.638,-204.568 89.062,-206.008 88.918,-207.592 87.766,-206.152 87.334,-204.568 88.918,-204.28 88.485,-202.84
+ 87.046,-203.272 85.462,-204.568 84.021,-203.417 82.582,-203.272 83.878,-201.833 84.598,-200.249 84.31,-198.808 82.869,-199.96
+ 82.726,-201.4 81.142,-201.688 79.701,-201.4 78.981,-199.96 77.542,-199.096 77.542,-197.656 77.109,-196.072 76.678,-194.632
+ 76.821,-193.192 76.821,-191.608 75.958,-190.168 74.518,-190.024 73.077,-190.888 74.518,-191.033 74.949,-192.472
+ 74.661,-194.056 73.222,-193.48 71.781,-193.048 70.485,-191.608 70.054,-190.168 68.613,-189.304 67.317,-187.864
+ 66.021,-189.304 65.878,-187.864 66.021,-186.424 64.438,-185.705 62.998,-184.552 62.854,-183.112 61.989,-182.824
+ 61.126,-181.384 59.542,-181.528 59.109,-183.112 58.39,-184.552 58.245,-182.968 58.39,-181.528 59.254,-180.088 57.813,-180.52
+ 56.806,-179.081 55.365,-177.928 53.926,-177.497 53.35,-176.058 51.909,-175.192 52.63,-173.752 51.621,-172.312 52.054,-173.752
+ 50.613,-174.904 50.758,-173.896 50.037,-172.457 49.462,-171.016 50.901,-171.016 49.894,-169.576 51.478,-170.152
+ 52.918,-170.152 52.485,-168.568 51.478,-167.128 49.894,-165.976 49.029,-164.537 50.47,-165.256 49.317,-163.816 48.31,-162.376
+ 46.869,-162.953 45.285,-161.512 45.718,-160.072 44.998,-158.632 43.558,-157.912 42.981,-156.472 42.693,-155.033
+ 41.254,-154.744 41.109,-153.304 39.67,-152.44 39.382,-151 39.958,-149.417 39.813,-147.976 41.254,-149.272 40.966,-147.833
+ 40.245,-146.392 39.382,-144.953 37.941,-144.665 37.653,-143.224 36.069,-142.216 36.502,-141.208 35.638,-139.768
+ 35.35,-138.184 33.909,-138.041 34.63,-136.457 33.046,-135.16 33.046,-133.576 32.47,-132.136 30.886,-131.56 29.733,-130.121
+ 29.445,-128.682 27.861,-128.249 27.718,-126.808 28.006,-125.369 29.59,-126.232 28.869,-124.792 27.43,-123.642 28.438,-122.201
+ 28.006,-120.762 26.854,-119.176 25.413,-116.296 25.558,-114.712 26.277,-113.272 27.861,-112.984 30.741,-112.984
+ 32.325,-113.705 33.766,-114.712 34.773,-113.417 34.63,-111.833 34.485,-110.392 34.054,-108.953 32.901,-107.514 33.478,-105.93
+ 33.766,-104.488 32.182,-103.192 32.613,-101.752 31.462,-103.192 29.878,-102.184 29.445,-100.744 29.878,-99.16 31.317,-99.304
+ 29.878,-98.296 28.294,-96.856 28.438,-95.417 28.294,-95.128 29.59,-93.688 31.029,-93.258 32.47,-92.682 33.909,-93.112
+ 32.47,-92.104 31.029,-92.537 29.59,-91.528 28.869,-90.09 28.438,-88.648 29.59,-87.208 29.302,-85.625 28.438,-82.744
+ 27.142,-81.16 28.438,-79.72 28.006,-78.28 27.43,-76.696 25.989,-75.4 25.413,-73.96 25.27,-72.52 24.262,-71.081 23.686,-69.497
+ 23.542,-68.058 22.966,-68.776 21.525,-69.064 19.941,-68.058 18.502,-67.48 18.214,-66.762 18.789,-65.32 18.502,-63.88
+ 17.638,-62.296 16.054,-62.152 17.205,-63.592 17.638,-65.033 17.926,-66.617 18.214,-68.058 17.638,-68.92 16.342,-69.064
+ 14.901,-69.352 13.462,-69.208 11.878,-68.92 10.438,-68.058 8.854,-68.776 10.438,-69.208 11.878,-69.642 13.462,-70.216
+ 14.901,-70.36 16.054,-71.8 16.918,-72.376 18.357,-72.52 19.798,-71.944 20.806,-73.528 21.958,-76.408 22.533,-77.992
+ 23.974,-79 24.55,-80.584 23.109,-81.88 21.813,-83.32 21.237,-84.762 21.382,-85.912 20.949,-87.352 21.094,-88.792
+ 21.525,-90.232 21.525,-91.816 21.382,-92.392 21.237,-93.976 20.949,-95.417 19.51,-96.28 18.069,-96.136 16.485,-94.984
+ 15.766,-93.544 14.325,-92.104 14.47,-93.688 14.325,-95.128 15.478,-96.568 15.189,-98.008 16.63,-98.584 17.926,-100.024
+ 18.069,-101.466 17.781,-102.904 16.342,-103.05 14.758,-103.05 14.037,-101.608 12.598,-100.888 11.157,-99.592 12.598,-99.304
+ 11.157,-99.016 9.573,-98.44 9.718,-96.856 8.998,-95.417 9.142,-93.976 8.998,-92.392 7.989,-93.976 8.134,-92.392 8.134,-90.953
+ 7.989,-89.514 7.701,-91.098 6.55,-92.537 6.262,-91.098 5.829,-89.514 5.829,-89.369 6.693,-87.93 6.981,-87.497 6.117,-87.352
+ 4.678,-87.208 5.542,-85.768 5.397,-84.328 4.533,-85.768 3.094,-86.058 4.533,-84.904 4.533,-83.464 4.245,-82.024 4.678,-81.736
+ 4.966,-80.296 3.525,-81.592 2.229,-82.6 2.806,-81.16 2.086,-80.728 0.934,-80.584 -1.946,-79.72 -2.091,-78.136 -2.379,-77.992
+ -2.954,-77.705 -2.666,-76.84 -3.099,-75.4 -2.811,-73.816 -1.37,-74.537 -1.658,-73.098 -1.946,-71.656 -2.522,-70.072
+ -1.37,-68.632 0.069,-69.208 -0.074,-70.648 1.365,-70.504 2.806,-71.656 2.374,-70.216 0.934,-69.642 0.934,-68.058
+ 2.374,-67.336 2.806,-68.92 2.949,-67.336 4.39,-68.346 4.678,-69.785 4.821,-68.346 4.821,-66.904 3.382,-65.752 4.533,-64.312
+ 4.821,-62.873 5.542,-64.312 5.397,-62.873 4.39,-61.289 2.949,-61.864 3.237,-60.424 2.949,-58.84 2.949,-57.4 2.374,-58.84
+ 2.518,-60.28 2.229,-61.72 1.222,-63.304 -0.219,-63.88 0.357,-62.44 -1.082,-61.864 0.069,-60.424 -0.219,-58.984 -1.515,-60.424
+ -2.954,-60.712 -3.242,-59.128 -4.683,-58.696 -5.547,-57.256 -5.979,-55.672 -6.41,-54.232 -7.851,-53.944 -6.41,-55.098
+ -6.555,-56.537 -7.563,-58.121 -9.003,-58.121 -10.442,-57.256 -10.73,-55.816 -12.171,-55.96 -11.019,-57.256 -9.723,-58.696
+ -9.29,-60.136 -10.874,-59.85 -11.738,-58.408 -13.179,-56.968 -13.61,-58.552 -14.33,-57.112 -15.771,-57.544 -16.923,-56.104
+ -17.066,-57.544 -17.931,-58.984 -19.37,-58.552 -20.811,-58.84 -22.25,-57.976 -22.538,-56.537 -22.395,-54.953 -22.683,-53.514
+ -22.826,-52.072 -23.402,-50.488 -23.69,-51.352 -23.114,-52.792 -24.122,-54.232 -24.698,-55.816 -25.274,-57.256
+ -26.858,-56.682 -28.299,-57.256 -29.738,-56.104 -31.179,-55.96 -32.763,-57.256 -34.49,-56.537 -35.211,-55.96 -35.643,-55.098
+ -37.082,-53.656 -38.666,-52.216 -40.106,-50.776 -41.259,-49.338 -42.843,-48.472 -44.282,-47.896 -45.723,-46.888
+ -47.307,-46.312 -48.746,-45.736 -48.891,-45.736 -50.33,-45.304 -51.194,-43.864 -51.339,-43.432 -51.194,-41.992
+ -52.635,-42.568 -53.066,-43.576 -52.635,-45.016 -54.074,-44.584 -55.658,-44.152 -57.099,-43.864 -58.683,-43.289
+ -60.122,-42.424 -61.706,-41.417 -62.57,-39.976 -63.146,-38.537 -63.435,-37.96 -63.866,-36.52 -63.723,-35.081 -63.578,-33.496
+ -64.73,-32.634 -65.162,-32.634 -66.603,-32.92 -68.042,-32.634 -69.482,-32.346 -67.898,-33.064 -68.042,-34.506 -68.906,-35.944
+ -67.467,-34.792 -66.026,-33.352 -64.587,-33.785 -64.874,-35.224 -66.314,-36.088 -67.467,-37.528 -67.322,-39.112
+ -66.603,-40.552 -68.042,-40.266 -69.626,-40.121 -71.066,-40.121 -72.507,-39.112 -73.946,-39.4 -75.53,-38.824 -76.971,-38.537
+ -78.41,-38.392 -79.706,-36.808 -80.282,-37.816 -81.866,-37.24 -83.307,-37.24 -84.746,-37.386 -86.187,-37.528 -87.626,-38.392
+ -89.211,-38.392 -90.65,-38.97 -91.515,-37.386 -91.37,-38.824 -92.811,-38.682 -94.25,-38.537 -95.69,-38.249 -97.274,-37.528
+ -98.715,-36.808 -100.154,-36.953 -101.595,-37.528 -102.026,-36.953 -100.73,-35.514 -102.171,-34.218 -100.73,-34.072
+ -102.314,-33.352 -103.755,-32.92 -103.467,-31.338 -102.026,-30.617 -100.442,-30.328 -99.003,-31.05 -97.563,-30.904
+ -96.122,-29.754 -94.683,-30.328 -93.099,-31.05 -91.658,-31.912 -91.37,-30.474 -89.931,-29.896 -91.37,-30.041 -92.954,-29.754
+ -94.395,-29.178 -92.954,-28.6 -94.395,-27.88 -95.834,-29.178 -97.418,-29.033 -98.858,-28.17 -98.282,-26.728 -96.698,-26.44
+ -96.122,-25 -97.563,-25.576 -99.003,-25.576 -99.003,-27.016 -100.587,-27.449 -102.026,-28.17 -103.467,-28.744
+ -103.755,-30.184 -105.339,-30.184 -106.059,-28.744 -106.202,-27.16 -107.786,-27.736 -109.227,-28.6 -110.666,-28.457
+ -111.099,-26.873 -109.803,-25.432 -108.219,-24.712 -106.778,-23.705 -107.498,-23.85 -105.914,-23.128 -104.475,-22.266
+ -102.891,-21.833 -101.45,-21.112 -100.011,-19.528 -98.57,-18.665 -100.011,-18.808 -98.427,-18.232 -96.986,-17.944
+ -96.986,-16.648 -96.41,-15.208 -96.698,-15.496 -97.706,-17.081 -99.29,-17.802 -100.73,-18.376 -102.171,-19.386
+ -103.61,-20.249 -105.194,-21.112 -106.635,-20.537 -107.498,-21.976 -108.938,-22.408 -110.379,-22.554 -111.818,-23.705
+ -113.402,-22.842 -114.843,-22.408 -116.427,-22.266 -117.866,-21.688 -116.858,-20.249 -115.994,-18.808 -115.563,-17.369
+ -116.57,-15.785 -115.994,-16.792 -116.57,-18.232 -117.723,-19.816 -118.154,-21.258 -119.738,-22.554 -121.179,-22.696
+ -121.755,-21.258 -121.61,-19.816 -123.051,-21.112 -122.763,-22.554 -124.202,-22.984 -125.786,-22.984 -124.778,-21.4
+ -125.786,-19.96 -127.227,-19.386 -125.786,-20.249 -125.643,-21.688 -127.082,-22.554 -128.522,-22.266 -129.963,-21.976
+ -131.547,-22.121 -130.106,-22.554 -128.522,-22.984 -127.082,-23.417 -127.946,-25 -129.53,-24.138 -130.25,-25.576
+ -131.834,-24.856 -132.41,-26.296 -133.851,-25 -134.427,-23.56 -134.139,-25.144 -133.418,-26.586 -132.986,-28.024
+ -134.427,-28.6 -135.866,-28.024 -136.154,-26.44 -137.595,-26.873 -139.034,-26.152 -140.475,-25.722 -140.763,-27.306
+ -142.347,-27.306 -143.786,-27.016 -145.227,-25.576 -145.37,-27.16 -146.811,-27.736 -147.53,-26.296 -148.683,-27.736
+ -150.122,-27.306 -151.706,-27.736 -153.146,-27.16 -154.587,-27.736 -156.171,-26.586 -157.322,-25.289 -156.458,-26.873
+ -155.45,-28.312 -156.171,-29.754 -157.61,-31.05 -158.042,-32.634 -158.33,-34.072 -158.475,-35.514 -160.057,-36.232
+ -161.498,-36.232 -162.938,-35.802 -162.074,-34.36 -160.923,-31.48 -159.339,-31.192 -159.914,-29.754 -160.345,-28.17
+ -161.354,-26.728 -161.929,-25.289 -162.219,-23.85 -163.225,-25.289 -164.666,-25.432 -166.25,-25.722 -167.69,-26.296
+ -169.131,-27.16 -170.715,-28.6 -172.154,-29.754 -173.595,-28.6 -172.442,-30.041 -172.299,-31.625 -173.017,-33.064
+ -174.458,-31.768 -175.322,-30.328 -175.177,-28.744 -174.889,-27.306 -175.322,-28.744 -175.467,-30.328 -174.889,-31.768
+ -174.601,-33.352 -176.042,-33.93 -177.482,-35.224 -179.066,-34.648 -178.49,-33.208 -179.929,-34.072 -180.219,-32.634
+ -180.219,-31.05 -180.074,-29.608 -179.641,-28.024 -179.066,-26.586 -178.345,-25.144 -178.202,-23.705 -177.914,-23.417
+ -177.626,-23.417 -176.187,-22.696 -174.746,-22.121 -173.162,-21.112 -171.721,-20.249 -171.003,-18.808 -170.427,-17.369
+ -170.427,-17.081 -170.858,-17.514 -171.146,-17.944 -171.433,-19.528 -173.017,-20.249 -174.458,-21.688 -175.898,-21.976
+ -177.339,-22.984 -178.635,-23.992 -178.923,-25.432 -179.641,-27.016 -181.082,-27.016 -180.362,-25.576 -180.362,-25.144
+ -179.211,-22.266 -177.771,-21.258 -176.906,-19.816 -175.467,-18.808 -176.906,-19.528 -178.49,-20.104 -179.066,-18.52
+ -178.923,-20.104 -179.498,-21.544 -179.929,-23.128 -180.507,-24.568 -181.225,-26.01 -182.666,-25 -183.818,-23.56
+ -183.963,-23.85 -182.666,-25.289 -181.803,-26.728 -182.666,-28.17 -182.954,-29.754 -184.395,-30.328 -185.979,-30.184
+ -186.122,-30.328 -184.969,-30.328 -183.385,-31.338 -183.242,-32.776 -184.826,-32.92 -186.265,-33.064 -187.706,-32.92
+ -187.418,-31.338 -187.563,-31.625 -188.137,-33.208 -189.578,-33.208 -189.721,-33.352 -189.29,-33.496 -186.41,-33.496
+ -184.969,-33.352 -183.385,-33.208 -184.538,-34.648 -185.547,-36.232 -186.986,-36.088 -187.418,-34.648 -188.858,-36.088
+ -189.866,-36.088 -191.305,-34.648 -191.305,-33.93 -192.171,-32.488 -193.755,-31.48 -194.042,-30.041 -193.898,-30.474
+ -193.467,-31.912 -192.026,-32.92 -193.177,-34.36 -194.618,-34.792 -193.177,-34.648 -191.738,-34.936 -191.595,-35.081
+ -192.026,-36.52 -193.467,-37.816 -195.051,-37.816 -195.339,-37.96 -196.778,-37.816 -198.362,-37.672 -201.242,-37.672
+ -202.681,-37.528 -204.265,-37.386 -205.706,-36.953 -205.272,-36.376 -203.834,-35.081 -202.971,-33.642 -202.681,-32.058
+ -202.826,-30.617 -201.387,-29.466 -202.826,-29.033 -202.681,-27.594 -201.963,-26.01 -202.25,-25.722 -203.834,-27.016
+ -205.272,-26.296 -203.979,-27.736 -204.122,-29.32 -205.563,-30.762 -207.003,-30.762 -208.587,-30.474 -210.024,-30.328
+ -210.171,-29.896 -210.314,-28.457 -211.608,-27.016 -213.051,-26.873 -214.635,-26.728 -216.074,-27.306 -214.635,-26.873
+ -213.051,-27.016 -211.608,-27.88 -210.601,-29.32 -210.889,-30.762 -209.307,-30.904 -207.866,-31.625 -206.427,-31.625
+ -205.994,-33.064 -207.578,-33.352 -209.017,-34.36 -210.458,-34.506 -212.042,-33.93 -211.898,-33.496 -213.339,-33.352
+ -214.778,-34.218 -216.219,-35.081 -217.803,-35.656 -219.242,-34.506 -219.242,-33.064 -219.53,-31.48 -219.675,-33.064
+ -220.538,-33.496 -221.4,-35.081 -222.41,-36.52 -223.849,-37.672 -224.139,-39.112 -225.578,-39.4 -224.856,-37.96
+ -224.427,-36.376 -223.994,-34.936 -224.57,-33.496 -224.57,-34.936 -225.433,-36.376 -226.874,-35.514 -225.578,-34.072
+ -227.017,-35.081 -227.738,-36.52 -229.179,-36.808 -229.034,-35.944 -229.322,-34.36 -229.755,-32.92 -229.467,-31.48
+ -229.755,-29.896 -228.889,-28.457 -228.889,-25.576 -227.595,-24.138 -226.154,-23.705 -227.595,-23.56 -229.034,-24.28
+ -229.467,-25.722 -229.322,-27.306 -230.042,-28.744 -231.48,-29.466 -232.923,-28.6 -233.354,-27.16 -234.507,-25.722
+ -234.219,-26.01 -234.074,-26.296 -233.786,-27.88 -235.225,-28.6 -236.666,-28.312 -238.25,-28.312 -239.688,-28.744
+ -238.25,-28.6 -236.666,-28.744 -235.225,-29.033 -233.786,-28.6 -232.347,-29.896 -232.635,-31.48 -232.347,-32.92
+ -233.498,-34.36 -232.635,-35.802 -232.202,-34.36 -232.202,-35.802 -233.354,-37.24 -232.923,-38.824 -233.354,-40.266
+ -234.795,-41.272 -236.232,-41.992 -236.522,-41.992 -237.963,-42.712 -239.4,-42.568 -239.688,-41.128 -238.395,-39.544
+ -237.242,-39.256 -237.53,-37.816 -237.53,-36.232 -238.826,-37.816 -239.834,-36.376 -240.555,-34.936 -241.994,-33.352
+ -243.578,-31.912 -242.139,-30.474 -243.723,-31.05 -243.433,-32.488 -242.282,-33.93 -240.843,-35.369 -239.834,-36.953
+ -239.259,-38.392 -239.259,-39.976 -240.265,-41.417 -240.555,-42.856 -241.131,-43.72 -242.57,-42.136 -243.866,-40.696
+ -244.874,-39.256 -244.299,-40.84 -243.866,-41.417 -242.427,-43 -241.849,-44.44 -243.003,-45.88 -244.44,-45.304
+ -245.738,-43.864 -247.322,-42.568 -248.187,-40.984 -249.192,-39.544 -250.057,-38.104 -250.202,-36.665 -251.498,-38.104 "/>
+
+ <path id="path3397" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M748.582-253.528l1.008-1.296l0.143-0.576l-0.434-1.584l-1.439-0.721l-0.719,0.145l-1.441-0.72l-1.584,0.863l-1.439,0.288
+ l-1.441-0.432l-1.443-0.432v-0.433l-1.584-1.151l-0.715-1.584l-1.445-0.288l-1.438,0.432l0.721,1.584l0.432,1.44l0.285,1.439v1.44
+ l1.01,1.584l1.443,1.439l0.287,1.44l0.721,1.584l-1.008,1.439l-1.443,0.721l-1.582,0.29l-1.441-0.433l-1.439-1.151l-0.721-1.585
+ l-0.143-1.439l0.289-1.439l-0.432-1.585l-1.584,0.145l-1.443-0.145l-1.582-0.144l-1.441-0.288l-1.439-0.288l-1.729-0.72
+ l-1.439-1.152l-0.865-1.584l-0.432-1.439l-0.578-1.44l-0.863-1.439l-0.432-1.584l-0.576-1.44l-0.719-1.44l-0.865-1.439l-0.723-1.44
+ l-1.006-1.439l-0.863-1.584l-0.865-1.44L712-275.99l-1.443-0.433l-1.439,0.864l-1.152,1.439l-1.439,1.152l-1.439,0.576
+ l-1.439,0.432l-1.445,0.288l-1.584,0.288h-2.445l-1.584,0.288h-1.441l-1.586-0.288l-1.439-0.432l-1.439-0.576l-0.432-0.432
+ l-0.576-1.584l-1.441-0.864l-1.582-1.296l-1.441,1.008l-0.434-1.44l-1.584-0.863h-1.439l-1.441,0.575l-1.443-0.432l-1.582-0.864
+ l-1.439-0.575l-1.584,0.432l-1.439-0.145l-1.441-0.287l1.441,1.296h1.439l1.293-0.145l0.143-0.288h0.146l0.145,0.288l0.576,1.44
+ l0.141,1.439l-0.432,1.584l-1.439,0.864l1.152,1.44l0.143,1.584l-1.15,1.439l-1.586,1.296l-1.441,0.433l-1.439,0.863l-1.439,0.433
+ l-0.145,1.584l1.584-0.433l1.439-0.144h1.441l1.441-0.288l1.584-0.144h1.439l1.441,1.151l1.441,1.44l1.148,1.439l-0.141,1.584
+ l0.719,1.44l1.441,1.439l1.439,0.433l1.441,1.439l-0.289,1.44l0.861,1.584l0.867,1.584l0.143,1.44l0.574,1.439l0.723,1.44
+ l0.287,1.584l0.291,1.439l0.285,1.44l0.293,1.008l0.141,1.44v1.439l-0.141,1.44l-0.145,1.439l0.287,1.584l0.145,1.44l0.145,1.439
+ l0.145,1.584l0.432,1.44v1.584l0.863,1.44l1.441-0.433l1.15,1.44l1.297-1.152l1.584-0.576l0.861-1.439l0.146-1.44l0.289-1.584
+ l0.289-0.864l0.576-1.439l0.863-1.584l1.441-1.44l1.582-1.151l1.443-0.576l1.439-1.296l1.008-1.584l1.439-1.44l1.297-0.432
+ l1.584,0.144l1.439,0.433l1.443-1.44l1.293-1.44l0.145-1.439l1.008-1.44l1.439-0.432h2.018l0.572,0.144l1.154,1.44l1.008,1.584
+ l1.441,0.864l0.574,1.584l0.291,1.439l0.576,1.44l1.439,0.432l1.438-0.576v-1.439l-0.141-1.44l0.576-1.439h1.441l1.584-0.288
+ l1.439-0.576l0.865,1.44l1.439-0.145l1.441,0.288l1.297,0.864l1.439-0.864l1.293-1.44l1.443-0.575l1.008-1.584l-0.576-1.44
+ l-0.432-1.439l-0.145-0.288v-1.44l0.432-1.584l1.439-1.296l1.443-0.288L748.582-253.528 M204.981,929.716v-0.719V929.716
+ M207.285,931.731v-0.289l1.44-0.863l0.576-0.287l1.151-1.154l-1.439-0.143l-0.72-1.584l-1.44-0.434l-1.44,0.723l-0.144,1.438
+ h-0.144l0.72,1.154L207.285,931.731 M212.325,865.062l-0.72,0.719l-1.152,1.441l-1.439,1.439l0.864-0.721l1.439-1.439
+ L212.325,865.062 M-237.097-288.808h-14.401v14.4 M742.102,935.188h14.4V920.79 M756.502-274.408v-14.4h-14.4 M-251.498-39.976
+ v-0.576 M-251.498-40.984l1.441-1.296l-1.441,0.863 M-251.498-42.856l1.441-0.72l1.438-1.009l1.439-0.144h1.44l-1.296,1.584
+ l-1.152,1.439l-0.864,1.438l-0.863,1.442l-1.44,0.575l-0.144-0.144"/>
+
+ <polyline id="polyline3399" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 631.076,-183.544 631.51,-184.552 631.941,-186.136 632.23,-187.576 633.094,-189.016 633.379,-190.457 634.102,-192.041
+ 634.822,-193.48 635.398,-194.92 635.686,-196.36 635.973,-197.8 635.83,-199.384 635.398,-200.824 634.963,-202.264
+ 635.973,-203.85 636.838,-205.289 636.547,-203.85 635.973,-202.408 635.973,-200.968 636.117,-199.384 636.693,-197.944
+ 636.838,-196.504 636.98,-195.064 637.414,-193.48 638.422,-192.041 640.006,-190.457 640.869,-189.016 641.877,-188.296
+ 642.311,-186.856 643.748,-186.712 642.598,-188.152 641.156,-189.16 641.732,-189.016 643.318,-188.152 644.758,-187.576
+ 646.197,-187.432 646.773,-187.432 648.211,-187.72 649.795,-189.016 651.094,-190.457 652.533,-191.32 654.117,-192.328
+ 655.557,-193.192 657.141,-194.201 658.582,-195.208 660.021,-196.072 661.605,-197.081 663.043,-198.232 664.342,-199.672
+ 665.205,-201.112 665.781,-202.696 666.068,-204.136 666.211,-205.576 665.926,-207.16 665.35,-208.6 665.639,-210.184
+ 665.926,-211.625 667.076,-213.064 667.223,-214.504 668.229,-215.944 668.662,-217.528 668.373,-218.968 666.789,-220.121
+ 667.365,-218.68 667.51,-217.24 666.646,-218.68 665.205,-220.121 666.068,-221.56 666.789,-223.144 667.365,-224.584
+ 668.373,-226.024 669.814,-226.888 671.252,-227.752 672.693,-228.76 671.686,-227.176 670.822,-225.736 670.389,-224.296
+ 669.525,-222.856 669.67,-221.272 670.244,-219.833 671.686,-218.68 673.125,-217.528 673.557,-215.944 673.99,-214.504
+ 675.43,-214.072 676.869,-214.36 678.311,-215.224 679.748,-216.088 681.334,-216.808 682.773,-218.249 684.211,-219.112
+ 685.795,-219.4 687.236,-219.256 687.094,-218.824 687.236,-217.384 686.229,-215.944 685.365,-214.36 684.789,-212.92
+ 684.068,-211.48 683.205,-209.896 681.766,-209.176 680.182,-208.312 678.74,-207.448 677.301,-206.728 675.861,-205.432
+ 675.143,-203.992 674.854,-202.552 673.846,-200.968 672.693,-199.528 671.252,-198.376 669.814,-197.656 668.229,-196.648
+ 666.789,-196.216 665.926,-194.776 664.916,-193.336 663.908,-191.896 663.479,-190.312 663.332,-188.873 663.189,-187.432
+ 662.9,-185.848 662.471,-184.408 660.883,-183.688 659.445,-182.968 658.006,-181.816 656.422,-180.665 655.557,-179.512
+ 654.117,-178.072 652.678,-177.064 651.238,-175.48 649.941,-174.041 649.076,-172.6 647.781,-171.16 646.486,-169.864
+ 645.621,-168.424 644.613,-166.984 644.037,-165.4 643.748,-163.96 642.311,-162.52 640.869,-161.224 639.43,-160.072
+ 637.846,-159.642 636.406,-158.488 635.83,-157.048 635.541,-155.608 635.109,-154.168 634.389,-152.728 634.678,-151.289
+ 634.678,-149.705 634.822,-148.266 634.963,-146.824 633.525,-146.537 634.102,-145.098 632.949,-143.656 632.23,-142.216
+ 630.789,-140.776 630.357,-140.201 629.35,-138.76 627.766,-138.617 626.324,-137.752 624.883,-136.312 623.303,-134.873
+ 621.861,-133.432 620.422,-131.85 620.277,-130.408 619.846,-129.976 619.125,-128.537 617.686,-127.528 616.246,-127.672
+ 614.662,-127.96 614.084,-129.4 614.373,-130.84 612.789,-131.56 611.35,-130.984 609.766,-131.128 610.916,-129.544
+ 609.479,-128.537 608.613,-130.121 607.029,-129.544 607.174,-128.104 608.613,-128.392 607.174,-127.672 605.732,-126.52
+ 605.732,-123.352 605.59,-121.768 605.014,-120.184 603.861,-121.768 602.422,-120.904 600.838,-120.472 601.27,-122.058
+ 601.27,-123.497 601.557,-124.936 602.277,-126.52 603.715,-127.098 604.725,-128.682 605.59,-130.121 605.877,-131.56
+ 606.883,-133.144 607.459,-134.584 607.029,-136.024 607.459,-137.608 608.182,-139.048 608.9,-140.632 609.766,-142.072
+ 610.627,-143.512 609.766,-141.497 608.471,-139.336 608.758,-137.752 608.613,-136.312 609.479,-137.896 610.486,-139.336
+ 610.773,-140.776 610.342,-142.36 610.916,-143.8 611.926,-145.384 613.223,-146.824 614.662,-148.266 616.102,-148.266
+ 614.662,-146.968 616.102,-147.976 617.109,-149.417 618.547,-150.856 619.846,-152.296 620.854,-153.736 621.141,-155.176
+ 620.854,-156.184 621.861,-157.625 623.303,-158.92 623.303,-160.36 621.861,-159.208 622.148,-160.648 622.869,-162.232
+ 624.311,-162.953 623.732,-164.392 624.453,-165.833 625.174,-167.272 625.893,-168.712 626.471,-170.296 627.043,-171.736
+ 627.766,-173.176 628.627,-174.76 629.35,-176.201 629.926,-177.64 630.357,-179.081 630.502,-180.665 630.789,-182.104
+ 631.076,-183.544 "/>
+
+ <path id="path3401" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M148.102-253.816l-0.144-0.288l-1.44,0.576l-1.44-0.288l0.145,1.439l1.439-0.288l1.584-0.72L148.102-253.816 M-187.706-35.224
+ l-0.864-1.008L-187.706-35.224 M-202.826-44.296h-0.145l-1.439,0.576l0.146,1.584l1.438,0.145l1.439,0.287l1.44-0.146l0.288-0.142
+ l1.439-0.288l1.584-0.576l1.44-0.72l-0.288-1.44l-1.44,0.144l-1.439-0.144l-1.584,0.576l-1.44,0.144H-202.826 M-195.626-38.249
+ l-1.438,0.145l-1.442,0.144h-1.439l-1.44,0.145l-1.584-0.288l-1.439,0.288l-1.152-1.44l-0.432-1.439l1.439-0.145l1.584-0.144h1.44
+ l1.439,0.718l1.442-0.574l0.718,0.574l0.29,0.29l1.294-0.432l1.586,0.142l1.438,0.29l-0.864,1.439L-195.626-38.249 M196.485,869.38
+ l1.44-0.865l1.439-1.293l0.145-1.441l-1.44,0.143l-1.439-0.863l-0.576-1.584v-2.881l-0.72-1.441l-1.44,0.578l-0.576,1.439
+ l-1.439-0.432l-0.145,1.439l-1.439,0.143l1.151,1.441l1.44-0.287l-0.145,1.439l1.009,1.439l1.584,0.145l1.439,0.145l1.44,0.432
+ l-1.44,0.863L196.485,869.38 M203.829,890.694l0.145-0.145l-0.145-1.439l-1.008-1.586l-0.576,0.145l0.576,1.441L203.829,890.694
+ M168.262,897.892h0.432H168.262 M151.126,912.437l0.72-0.141l-0.433-1.586h-0.287l-1.44,0.578L151.126,912.437 M242.277,825.173
+ l-0.144,0.291l-1.44,1.15l0.433-1.582l0.432-1.01v-1.441l-1.008-1.439l-0.433,1.439l-1.439-1.01l0.288-1.439l1.439-0.143
+ l1.44-0.432l-1.44-1.297l-0.432-1.439l1.439-1.008l1.009,1.439l0.144,0.576l0.864,1.441l-0.288,1.439l-0.432,1.443l-0.288,1.438
+ L242.277,825.173 M227.59,842.31l0.72-1.297l-1.44-0.574l-1.439,0.143l0.576-1.439l-1.44-1.152l-1.439,1.152l0.72,1.584h0.144
+ v0.576h1.44l1.439,0.863L227.59,842.31 M226.438,844.612l0.288-0.143v-1.439l-0.72,0.141L226.438,844.612"/>
+
+ <path id="path3403" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M113.974,337.591h0.864l0.72-1.439l-1.44-0.865l0.288-1.439l0.576-0.863l1.44,0.574l0.72,1.586l1.584,0.863l0.432,1.584
+ l-1.151,1.584l1.439,0.145l1.44,0.574l1.439,1.441v1.439l-1.439,1.152l1.296,1.439l-0.576,1.441l-1.584,1.008l0.145,1.438
+ l1.439,0.145l0.576-1.439l0.864-1.439l0.432-1.441l1.44-0.143l0.144,1.439l1.008,1.584l1.584-0.576l1.44-0.287l0.144,1.439
+ l-0.432,0.719l-2.017,2.883l-1.584,0.574l-1.439,0.863l-0.432,1.441l1.439-1.152l1.44-0.719l-0.145,1.438l-1.296,1.441
+ l-1.008,1.439l-0.72,1.584l-0.576,1.441l-1.44,1.152l1.44-0.434l1.008-1.439l0.72-1.584l1.296-1.441l1.152-1.438l1.296-1.441
+ l1.44-0.289l1.008,1.441v0.289l0.288,0.287l0.864-1.584l1.584,0.719l-0.864,1.441l-0.72,1.439l1.439-0.865l1.44-1.008l1.439-0.143
+ l-0.144,1.439l-1.296,1.584l-0.288,1.584l0.432,1.441v-1.441l0.576-1.584l1.584-1.152l1.44,0.145l0.72,1.439l-0.145,1.441
+ l-1.439,0.578l0.864,1.434l-1.297,1.443l-1.439,1.152l-0.864,1.584h-1.584l1.44,0.867l1.439-1.443h1.44l0.432-1.439l1.44-1.586
+ l1.439-0.578l0.145,1.443l0.72,1.443l0.432,1.582v1.438l-1.439,1.443l-1.44,1.15l-0.144,1.586l1.008-1.441l1.44-0.865l1.584,0.576
+ l1.439,1.152l0.145,1.439l-1.584,0.291l-0.288,1.439l1.439-1.01l1.584,1.152l0.576,1.586l-1.152,1.439l0.433,1.441l-0.145,1.584
+ l0.576,1.441l-0.144,1.438l-0.864,0.145l-1.584-0.574l-1.44-1.008l-1.439-0.145l1.439,1.582l2.88,1.441v1.441l1.44,0.285
+ l-1.008,1.586l1.439,0.291l-0.144,1.443l-1.44-0.148l-0.575,1.441l-1.44,1.152l-1.44,0.432l1.44,1.295l0.72,1.441v0.289
+ l-1.008,1.441l-1.439,0.863l-1.584,0.289l-1.44-1.008l-1.44,0.578l-2.88-0.867l-1.439-0.863l-1.584-0.721l-1.44-0.861l-0.864-1.443
+ l-1.439-0.434l-1.296-1.584l-0.864-1.441l-1.296-1.586l0.72-1.434l0.433-1.586l-0.721,1.586l-1.439,0.426l0.576,1.443l1.151,1.441
+ l0.145,1.584l-1.44-0.293l-1.439-0.859l-1.44-1.008l-1.44-0.867l-0.72-1.441h-1.584l-1.584-0.43l1.296,0.717l1.44,1.01l1.439,1.441
+ l1.584,1.008l1.44,1.152l1.584,1.293l1.439,1.008l1.297,1.441l-0.576,1.441h-1.584l-1.44-0.434l-1.439-0.719l-1.584-0.863
+ l-1.44-0.145h-1.439l-1.44-0.578l-1.44-0.574l-1.584-0.434l-1.439-0.574l-1.44-0.434l-1.439-0.143l-1.584-0.143l-1.44,0.143
+ l-1.439-0.861l-0.145-1.443l1.584-0.721l0.576-1.439l-1.44,1.439l-1.439,0.721l-0.72,1.443l-1.44-0.578l-0.72-1.586l-1.44-1.008
+ l0.433-1.582v-1.441l-0.576,1.441h-1.584l0.72,1.438l1.44,1.441l-0.145,1.441h-1.44 M396.789,337.446l1.443,0.432l0.717-1.584
+ l0.291-1.439l-1.445-1.152l-1.291,1.441l0.145,1.582L396.789,337.446 M487.654,776.501l-0.434,0.865l-1.295,1.584l0.143,0.145
+ l0.289,1.439 M577.941,767.286v-0.145v0.576l-1.439,0.576l-1.441,0.432l0.434,1.439l-0.434,1.439l-0.719,1.584l-0.434,0.721
+ l-1.584,1.439l0.717-1.439l1.012-1.01v-0.574h-1.584l1.584-0.576l1.15-1.439l-0.863-1.439l1.008-1.441l1.439-0.289L577.941,767.286
+ M148.39-252.665v0.288V-252.665"/>
+
+ <path id="path3405" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M96.981,337.591v0.863l-0.864,1.584l-1.439,0.145l-1.44-0.434l-1.439,0.289l-1.44,1.297l-0.288,1.439l1.584-0.287l1.44-1.152h1.439
+ l0.864,1.439l-1.296,1.439l-1.44,0.145h-1.584l-1.439-0.145l-1.152,1.584h-1.296l-1.439-0.863l0.72,1.439l-1.584-0.145h-1.584
+ l-1.44-0.719l-1.439,0.287l0.72,1.584h1.44v1.441l-1.584,0.574l-1.44,0.434l1.44,1.295l-1.44,0.721l-1.44,1.008l-1.584,0.145
+ l-1.439-1.441l-1.008-1.439l-0.864-1.584l-1.296-1.439l-1.44,0.143l-1.439-0.863l-1.584-0.576v-1.439l1.439-0.289l1.584,0.145
+ l1.44,0.289l1.439,0.145l-1.584-1.152h-1.439l-1.44-0.145l-1.584,0.289l-1.439,0.719l-1.584,0.145l-0.288-1.441l1.584-1.439
+ l-1.584,0.287l-1.44,0.578l-1.439-0.289l-1.44-0.145l-1.44-0.719l1.44-1.152l1.44-0.434l1.439-1.008l2.88-1.15l-0.863-0.287
+ l-1.44,0.287l-0.144,0.143l-1.44,0.865l-1.44,0.432l-1.439-0.145l1.439-1.295l0.864-1.01l-0.144-1.438l-1.44,1.295h-1.584v-1.439
+ l0.432-1.586l0.721-1.438l0.432-1.441l1.584-1.439l1.44-0.865l1.439,0.145l0.433,1.441l0.72,1.582l0.288-1.582l0.72-1.441
+ l-0.432-1.584l1.584-0.721l1.439,0.289l-0.72,1.439l1.44-1.15l0.432-1.441l1.439-0.719l1.44,0.43l0.864,1.441l1.439,1.152
+ l-0.432,1.439l-0.145,1.439l0.288,1.441l0.433,1.582l0.144,1.586l0.721,1.439v-1.439l-0.288-1.441l-0.145-1.582v-1.441l1.44,0.145
+ l0.144,1.439l1.008,1.439l-0.575-1.439l0.432-1.584l1.439-0.432l-0.432-1.439l-0.288-1.441l-1.439-0.863l-0.288-1.441l1.584,0.578
+ l0.432-1.441l-1.439-1.008l-0.145-1.439l1.44-0.576l1.584-0.576l1.439,1.008l0.433,1.584l1.008,1.441l1.439,0.287l-1.296-1.584
+ l-0.432-1.441l0.432-1.438l1.44-0.865l1.439-0.287l1.584,0.719l1.44-1.152h0.72l1.44-0.145l-0.576,1.441l-1.152,1.584l-0.432,1.439
+ l-0.576,1.441v0.574l0.145-0.145l1.439-0.863l1.44,1.152l-0.576-1.439l-0.145-1.439h1.44l-0.145-1.441l1.44-1.439l1.584,1.152
+ l0.288,1.439l1.44-1.008l1.439,1.297v1.582l-0.72,1.441l0.432,1.439l0.864-1.439l1.44,0.432l1.008-1.295l1.584-0.434h1.439
+ l1.584,1.152l-1.584,0.863l0.721,1.441l1.584-0.863l-0.433,1.438v1.586h1.44l0.432-1.441l0.864-1.582l1.439,0.43v1.008l0.145,1.441
+ l-0.145,0.289l-1.151,1.438l-1.44,1.441l-1.439,0.289l-1.584,0.43l-1.44,0.289l-1.439,0.576l-1.584,0.432l-1.44,1.297l-1.44,0.145
+ l-0.72,1.582 M181.365,425.722l-0.576-1.586l0.288-1.443l-0.432-1.584l1.296,1.584l-0.288,1.443l0.288,1.586H181.365
+ M179.062,426.294l0.144-1.441v-1.443l1.009,1.443l-0.864,1.441H179.062 M178.485,426.151l-0.72-1.441l0.144-1.584l0.864,1.584
+ L178.485,426.151 M163.941,416.499l1.44-0.859l0.144,1.438l-1.439-0.287L163.941,416.499 M149.686,420.103l-1.008-1.584
+ l0.144-1.441l-0.144-1.438l0.864-1.441l1.439-0.867l0.72,1.441l-1.008,1.584v1.441l-0.432,1.588L149.686,420.103 M206.422,462.729
+ l-0.145-1.586v-1.441l0.576-1.584l0.72,1.584v2.875L206.422,462.729 M208.869,467.767l-0.575-1.443l1.296,1.443H208.869
+ M199.653,490.519l-1.584,0.289l-0.576-1.439l1.584-0.719l0.721,1.582L199.653,490.519 M162.069,421.253l-0.864,1.441l-0.432,1.441
+ l0.145,1.586v1.438l-0.433,1.441l2.88-1.152l1.44-0.432l0.432-1.443l0.288-1.582v-1.438l-0.144-1.443l-1.44-1.295l-1.439,0.434
+ L162.069,421.253"/>
+
+ <path id="path3407" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M445.75,801.124l1.439,0.719l1.584-0.287l1.439,1.439l-0.717,1.584l-1.297,1.441l-1.439,1.15l-1.008-1.439l-1.441-0.721
+ l-1.586,0.434l1.586-1.582l0.572-1.443L445.75,801.124 M640.582-88.072l-1.443,1.584l1.584-0.576L640.582-88.072 M640.006-88.648
+ l-1.441-0.145L640.006-88.648 M500.471-100.024l-1.441-0.576l-1.439,0.576l1.439,0.576L500.471-100.024 M618.98,935.188h0.434
+ M620.422,935.188l1.584-0.432l1.439-0.576l1.438-0.576l1.588-0.432h0.432l-1.443,0.432l-1.438,0.436l-1.439,0.717l-1.584,0.432
+ M636.838,929.286l-1.586,0.861l-1.438,0.576l-1.443,0.578l1.443-0.721l1.584-1.01l1.439-0.719V929.286 M342.066,904.517
+ l-0.287,0.145 M337.461,902.646h-1.439l1.439-1.008V902.646 M335.59,904.085l-0.289-1.439L335.59,904.085 M328.82,919.062
+ l1.441-0.576L328.82,919.062 M325.51,919.925l1.584-0.719l-1.441,0.719H325.51 M315.57,924.964l1.443-1.15L315.57,924.964
+ M310.965,925.829l1.441-0.721L310.965,925.829 M306.066,927.556l1.443-1.152l1.584-0.574l-1.441,1.008L306.066,927.556
+ M355.316,897.604l-1.586-0.863h1.586V897.604 M382.389,897.604v-1.439V897.604"/>
+
+ <path id="path3409" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M610.627,462.87l1.584,0.574l1.445-1.008v-1.584l-0.434-1.443l0.289-1.438l-1.441-0.289l-1.582-0.289l-0.578,1.441l0.578,1.439
+ l-0.291,1.441L610.627,462.87 M359.926,18.631h-1.441l-0.43,1.584l-0.291,1.438l1.295-1.584l1.008-1.438H359.926 M362.373,10.568
+ l-1.008,1.44l0.145,1.584l-0.436,1.438l-0.287,1.442l-0.576,1.584l-0.574,1.438l1.438,0.722l0.58-1.584l0.139-1.439l0.723-1.44
+ l0.432-1.584l-1.154-1.439l0.146-1.44L362.373,10.568 M334.869,892.708l-1.008-1.441l1.152,1.441H334.869 M297.57,825.894
+ l-0.141,1.584l-0.432,1.439l0.572-1.584V825.894 M304.197,833.956l1.443,0.289L304.197,833.956 M301.461,836.403l1.586,0.867
+ L301.461,836.403 M302.037,933.462l-0.287-1.443l0.863-1.439l0.576,1.439L302.037,933.462 M353.73,859.444v-1.441l1.443-0.576
+ l-0.721,1.443L353.73,859.444 M354.738,880.612l-0.141,1.441l-0.719-1.441l-0.578-1.441l0.867,1.441H354.738 M344.23,824.454
+ l-0.291,1.439l0.432-1.439H344.23 M356.898,842.165l-1.438,1.297l0.289,1.438l1.439-0.719l1.439-0.576l-0.287-1.439l-1.443-0.719
+ V842.165 M357.047,845.333l-0.434,1.439l1.441-1.008L357.047,845.333 M411.334,813.653l-0.576,1.439l0.863-1.439H411.334
+ M410.613,807.604l1.008-1.439l-1.584,1.297L410.613,807.604 M398.949,811.78l1.439,1.008l-1.439-1.15V811.78 M402.406,811.638
+ l1.584,1.295l1.439-0.145l-1.439-0.289l-1.584-1.295V811.638 M420.98,845.333l-0.289,1.439l-0.721-1.439l-0.863-1.439l-1.152-1.439
+ l-0.141-1.584l-1.152-1.443l-0.291-1.871l0.721-1.439l0.432-1.443l0.291-1.441l1.146-1.584l1.445-0.143l0.719-1.584l1.439,0.432
+ l0.143,1.584l-1.439,1.01l0.145,1.441l0.715,1.584l0.434,1.439l0.291,1.441l-0.432,1.441l-0.721,1.441l-0.863,1.438l-0.145,1.584
+ L420.98,845.333 M422.564,829.925l1.441-1.293h-1.441V829.925 M450.357,799.829l1.584-0.432l-0.865,1.439L450.357,799.829"/>
+
+ <path id="path3411" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M334.148,745.397l-0.434-1.441l-1.439-0.863l0.576,1.584L334.148,745.397 M330.262,738.63l-1.152,1.584l1.438-1.152L330.262,738.63
+ M330.262,739.493l1.439,0.721l1.152-1.584l-1.439-0.291L330.262,739.493 M349.27,683.188l1.584-0.289l-1.439,1.01L349.27,683.188
+ M354.738,669.653l-1.438,0.721l0.289-1.584h1.439L354.738,669.653 M354.313,667.638l1.582,0.576v-1.443h-1.582V667.638
+ M350.422,675.7l1.439,0.289l0.287-1.439l-1.582,0.143L350.422,675.7 M350.711,668.503l-1.441-0.576l1.441-0.434V668.503
+ M359.781,652.087l0.434,1.584l-1.586,1.15l-1.439,0.865l-0.717-1.584l0.717-1.441l-0.432-1.439l1.584-0.719l0.432,1.584v-1.584
+ l-0.432-1.441l1.439,0.432l0.721,1.584L359.781,652.087 M414.646,792.341l-0.145,1.441L414.646,792.341 M404.422,794.214
+ l-0.867-1.443l1.584,1.152L404.422,794.214 M386.422,765.124l0.717,1.584l0.145-1.584H386.422 M369.141,646.47L369,644.886
+ l-0.576,1.584H369.141 M432.646,783.7l-1.443-0.719l0.145,1.439l1.439,0.434L432.646,783.7 M435.525,784.997l0.721-1.008h-0.291
+ l-1.439,0.432L435.525,784.997l0.145,0.574l0.576,0.293L435.525,784.997 M411.045,744.821l-1.725-1.152l1.582,0.145l1.441-0.145
+ L411.045,744.821 M416.949,739.493l-0.717,1.441L416.949,739.493 M418.533,730.278l-1.008,1.441l1.438-0.432l-0.139-1.441
+ L418.533,730.278 M462.166,774.341l-1.01-1.441L462.166,774.341 M465.045,771.317l-1.584-0.287L465.045,771.317 M441.715,616.087
+ l1.586,0.143l-1.586,1.152V616.087 M491.83,664.038l-1.584,1.439l1.293-1.439H491.83 M508.678,616.806h1.439l-1.439,1.008V616.806
+ M525.957,560.501v-1.582l0.721-1.441l0.145,1.584l-0.436,1.439H525.957 M545.541,512.118l-1.439-0.576l-1.584,0.576l1.584,0.143
+ L545.541,512.118 M611.35,464.022l0.289,1.584l1.439,0.143l1.295-1.586l0.145-1.434l-1.441,0.426l-1.439,0.723L611.35,464.022"/>
+
+ <path id="path3413" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M380.518,123.174l1.439,1.01l1.443,1.296l0.717,1.438l0.291,1.584l0.574,1.44l1.01,1.439l0.287,1.584l0.576,1.44l0.719,1.44
+ l-0.865,1.439l-1.293,1.584l-1.584,1.442l-1.008-1.584l1.008-1.442l-0.721-1.439l-1.586,0.432l-1.439-0.288l-1.297-1.44
+ l-1.293-1.584l1.293-1.439l-1.584-1.152l-1.439-0.142l-1.441-1.442l-1.295-1.584l-0.146-1.438l-1.438-0.435l0.432-1.438
+ l1.297-1.442l1.584-0.43l1.439,0.288h1.584l1.441,0.142L380.518,123.174 M356.037,41.383l0.145,1.438v-1.438H356.037
+ M351.43,38.648l0.285,1.438l-0.141-1.438H351.43 M295.701,817.687l0.145,1.439l-1.439-0.141l0.141-1.443l-0.287-1.584l1.008,1.584
+ L295.701,817.687 M294.406,814.948l1.439,1.152l-1.299-1.441L294.406,814.948 M294.406,813.94l1.582,0.291l-1.441,0.143
+ L294.406,813.94 M294.693,813.222l-1.439-1.441l1.439,0.287l1.295,1.586L294.693,813.222 M299.445,815.813l-1.439-0.865
+ l0.143-1.441l1.295-1.441l0.865,1.584l0.143,1.441L299.445,815.813 M293.828,808.325l0.434,1.439l-0.576-1.439H293.828
+ M293.828,805.444l-1.441,1.01l-0.287-1.443l1.584-0.287L293.828,805.444 M293.543,793.349l-1.586-0.287v1.439l1.441-0.145
+ L293.543,793.349 M298.438,786.294h-1.439l-0.145,1.584l1.439-0.291L298.438,786.294 M299.879,784.278l-1.01,1.439l1.443-0.43
+ L299.879,784.278 M301.461,782.694l1.441-0.434L301.461,782.694 M310.965,774.054h-1.439l0.291-1.441l1.439-1.15l0.432,1.584
+ L310.965,774.054 M312.406,771.462h-1.008H312.406l0.287,1.15l-0.576,0.287L312.406,771.462 M314.133,770.597l0.145-1.439v1.439
+ H314.133 M315.57,769.302l1.586,0.576l-0.143-1.584h-1.443V769.302 M314.563,767.142l-1.438,0.721l-1.586-0.576l1.297-1.441
+ l1.439,0.574L314.563,767.142 M315.285,765.271l0.721-1.441l1.584-0.432l1.439-1.152l1.443,0.145l0.141,1.439l-1.439,0.721
+ l-1.443,0.432l-1.582,0.865L315.285,765.271 M318.453,760.372l-1.439,0.143l-1.873,1.152l1.727,0.145l1.584-0.719v-0.721
+ M335.73,734.597l-1.008,1.443L335.73,734.597 M333.861,726.679l1.439-1.154l-0.145,1.443L333.861,726.679 M337.75,717.317
+ l-1.441,1.152l1.441-0.145V717.317 M340.055,705.798l1.441-0.721L340.055,705.798 M343.51,699.317l1.295,1.439l-1.441-0.287
+ L343.51,699.317"/>
+
+ <path id="path3415" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M470.662,308.79l-1.441,0.433L470.662,308.79 M471.525,322.472l0.576-1.441L471.525,322.472 M477.572,310.95l-1.582-0.144
+ l1.582,0.288V310.95 M479.014,312.39l-1.441,0.288l-1.443-0.721v1.44l-0.139,1.584l0.432,1.439l1.439,0.145l0.145-1.44l0.287-1.439
+ L479.014,312.39 M478.438,308.501l1.152,1.584l-1.008-1.439L478.438,308.501 M424.148,334.854l1.295-1.441L424.148,334.854
+ M438.693,283.877l-1.439-0.575l0.432,1.439L438.693,283.877 M439.557,279.125l-1.439-0.432l-0.432,1.44l0.576,1.439l1.152-1.584
+ L439.557,279.125 M450.934,279.125l-1.439-1.151L450.934,279.125 M452.518,275.381l-1.441-1.008l-0.43,1.584l1.439-0.288
+ L452.518,275.381 M456.117,255.366l0.721-1.439l1.008-1.584l-1.584,0.144l-1.152,1.44l0.576,1.439H456.117 M492.693,236.646h-1.439
+ l-1.584-0.72h-1.439l-1.443,0.287l-0.719,1.584l0.578,1.44l0.287,1.44l0.143,1.584l1.441,0.287l1.439-0.575l0.721,1.439
+ l1.584-0.288l0.145-1.584l0.574-1.439v-1.584l-0.143-1.44L492.693,236.646 M420.693,166.808l-1.439-1.154l-1.439,1.154l-1.584,0.43
+ l-0.438,1.584l-0.717,1.44l-0.719,1.439l1.438-0.863l1.445-1.152l1.439-1.44l1.439-1.008L420.693,166.808 M433.654,153.846
+ l0.863-1.44l0.289-1.44l0.143-1.584l0.291-1.439l-1.445,0.29l-0.285,1.584l-0.145,1.438v1.584L433.654,153.846 M470.662,187.686
+ l-1.586,0.72l1.586,0.578V187.686 M466.918,173.717l-0.721-1.584l0.432,1.44L466.918,173.717 M488.518,188.262l0.289-1.44
+ l0.143-1.44l-0.717-1.584v-1.439l-1.01,1.439l0.865,1.584l0.287,1.44L488.518,188.262 M455.109,112.808l-0.287,1.584l1.584,1.296
+ l1.439,0.574l0.576-1.44l-1.008-1.584l-1.584-0.576L455.109,112.808 M420.406,134.262v1.439l-0.436,1.584l-1.148,1.442l-1.445,0.43
+ l-1.584-0.576l-0.861-1.584l0.432-1.438l1.584-1.442h2.881L420.406,134.262"/>
+
+ <path id="path3417" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M515.156,406.569l-1.443-1.586l-0.141-1.441l1.441,0.143l0.143,1.441l0.434,1.443H515.156 M520.055,403.542l0.143-1.584
+ L520.055,403.542 M519.766,413.909l-1.152-1.586l0.719-1.434l1.441,0.285l1.584,0.432l-0.719,1.584l-1.441,0.719H519.766
+ M526.963,392.599l-1.291-1.443l-1.297-1.434l1.443-0.869l1.584-0.287l1.439,0.143h1.584l0.143,1.584l-0.719,1.441l-1.439,1.295
+ L526.963,392.599 M534.021,403.397l-1.008-1.582l-1.441-1.297l-1.15-1.441l0.287-1.438l1.006-1.582l1.443-0.727l1.152,1.586
+ l0.719,1.441l0.576,1.441l-0.287,1.586l-0.145,1.438L534.021,403.397 M481.75,366.245v-1.438l-1.152,1.438l-0.145,1.586
+ L481.75,366.245 M480.74,371.286l1.15-1.441L480.74,371.286 M487.941,370.136l1.584,1.008l-0.432,1.438l1.584,0.434l1.439-1.15
+ l-1.584-0.865l-1.439-0.287L487.941,370.136 M505.365,361.206l0.576,1.441l1.152-1.582l-1.439-0.867L505.365,361.206
+ M509.83,371.286l1.439,0.436L509.83,371.286 M511.127,370.278l0.574-1.439l-0.145-1.586l-1.148,1.586l0.574,1.439H511.127
+ M512.709,365.095l1.297-1.439l-1.441-0.289l0.289,1.441L512.709,365.095 M463.029,340.759h-1.439l-1.008-1.439l1.584-0.289
+ l0.287,1.584L463.029,340.759 M463.318,341.622l1.439,1.008L463.318,341.622 M498.166,350.405l0.574,1.586l0.717,1.439l1.012-1.439
+ l-0.578-1.441l-1.58-0.145H498.166 M500.613,357.319l0.721,1.582l0.863-1.582l-1.584-0.145V357.319 M505.076,356.886l-0.719,1.586
+ l1.438,0.43l-0.139-1.439L505.076,356.886 M506.807,356.022l-1.012-1.441l-1.146,1.441l1.439,0.863L506.807,356.022
+ M519.189,352.136l0.576,1.582l-0.434-1.439L519.189,352.136 M426.166,332.118l0.287-1.439L426.166,332.118 M430.773,330.823
+ l0.865-1.441l-1.01,1.441H430.773 M461.014,313.83l1.439,1.296l2.018,2.881l0.143-1.441l-0.143-1.44l-1.441-1.439h-1.584
+ L461.014,313.83 M469.076,313.11l0.865,1.439l-0.576-1.439H469.076"/>
+
+ <path id="path3419" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M325.652,529.974l1.441-0.432l1.439-1.152l1.295-1.439l1.586-1.01l-0.145,1.584l0.289,1.441l0.143,1.438h1.584v-1.582l1.441-1.439
+ l0.574-1.584v-1.441l-0.145-1.439l0.723-1.586l1.15-1.439l-1.439-0.576l-1.441-0.721l-1.008,1.443l-1.441-0.289l-1.584-0.719
+ l-1.008-1.443l0.721-1.439l-1.586-0.863l-1.438,0.576l-1.586,1.148l-1.441,0.721l-1.293,1.439l-0.291,1.441l1.584,0.719
+ l1.441,0.432l0.289,1.443v1.439l0.145,1.584v1.441l-0.291,1.439L325.652,529.974 M388.725,617.382l1.01-1.584l-1.441,0.576
+ l-1.439-1.441l0.145,1.582h-1.443l-0.43,1.586l1.439-0.432l1.441,0.289L388.725,617.382 M378.646,622.134l1.439,0.287l-1.439-1.15
+ V622.134 M377.639,626.454l-0.143,1.439l-0.436,1.439l-0.432,1.439l-1.439,0.436l-1.297,1.439l-0.863-1.439l-1.439,0.863
+ l0.721-1.586l1.008-1.582l1.439,1.01l-0.576-1.441h1.439l0.576-1.439l0.432-1.443L377.639,626.454 M379.795,628.899l1.012,1.441
+ l-0.719,1.443l0.145,1.584l-1.584,0.285l-0.291-1.438l-1.439,0.576l0.432-1.443l1.439-0.43l0.145-1.441L379.795,628.899
+ M377.781,635.382l0.289-1.441l-1.441-0.574l-1.008,1.439l1.439,0.717L377.781,635.382 M371.301,635.813l0.867,1.441
+ L371.301,635.813 M365.686,642.005l0.287-1.584l1.443-0.432l0.432,1.441l-0.291,1.441l-1.439,0.141L365.686,642.005
+ M449.926,457.253v-1.438l0.287,1.438H449.926 M501.045,524.935l-1.439-0.434l-1.584-0.287h-1.439l-1.443,1.008l-1.148-1.439
+ l0.574-1.584l1.584-0.436l1.441,0.436h1.439l0.721,1.439l1.584,0.576L501.045,524.935 M520.197,511.11l-1.584,0.145l1.584-1.152
+ V511.11 M419.398,377.331l1.146-1.434l-1.438,0.285l-1.293,1.441l1.439,0.434L419.398,377.331 M500.182,385.11l1.584-0.865
+ l-1.584-0.143V385.11 M514.293,402.534l0.576-1.441l1.584-1.295l-1.439,1.439L514.293,402.534"/>
+
+ <path id="path3421" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M298.148,495.271l0.145,1.008l-0.434,1.586l0.289,1.439l0.719,1.441l1.008,1.582l0.434,1.439l0.574,1.443l0.867,1.439l0.719,1.584
+ l0.865,1.441v1.439l-0.865-1.439l-1.441-0.434v-1.439l-1.297-1.441l-0.717-1.584l-0.865-1.441l-0.719-1.582l-1.297-1.441
+ l-1.439-0.432l-0.146,1.441l0.293,1.582l-1.008,1.439l0.863,1.586v1.441l-1.008-1.441l-1.439-0.578l0.287-1.438l-1.584,0.289
+ l-1.439,0.863l0.863-1.439l1.297-1.584l1.584-1.441l-1.008-1.586l-1.584,1.152l-1.441,1.441l-1.441-0.574l-0.141,1.439l-1.443-1.15
+ l-1.008,1.584l1.008,1.438l-0.576,1.443l-0.574,1.439l0.289,1.441l0.719,1.439l0.719,1.584l1.293,0.719l0.145-1.584l-0.432-1.439
+ l1.443,0.289l-0.148,1.439l-0.141,1.584l1.008,1.441l1.008,1.439l-1.439-0.287l-0.721-0.291h-1.439l1.152,1.441l0.432,1.441
+ l0.863,1.584l1.152,1.441l1.441,0.574l1.441,0.434l-1.441,0.43l0.719,1.586l1.584,1.152l1.439,1.152l1.441-1.297l1.582-0.576
+ l-0.141-1.439l1.008-1.586l-0.719-1.438l-0.434-1.441l0.576-1.584l1.152,1.584l0.287-1.443l0.291-1.439l0.432,1.439l-0.432,1.443
+ l0.717,1.441l1.443,0.143l1.15-1.443l0.434-1.439l1.148-1.439l-0.287,1.439l-0.287,1.439l1.293,1.584l1.584-0.287l-1.439,1.439
+ h-1.584l-1.443,1.154l0.436,1.439l-1.443,1.008l-0.287,1.441l-1.439,0.576l-1.584,1.008l-1.443,0.863l0.434,1.441l0.574,1.584
+ l0.867,1.441l1.441-0.717l1.438-0.58l1.443-1.006l1.295-1.584l1.438,0.287l1.443-0.719l1.584-1.008l0.432,1.441l-1.439,0.43
+ l-1.584,0.865l-1.443,0.867l-1.438,1.15l-0.289,1.441l1.439-0.146h1.584l1.441,1.152l-1.441-0.43l-1.439,0.285l-1.439,0.291
+ l-0.721,1.152l-1.584-1.152l-1.008,1.441l0.432,1.582l1.152,1.439l1.295,1.584h1.441l1.439,1.01l1.584,1.01l1.439-0.289
+ l0.721-1.441l1.008,1.441l-1.441,1.008l0.289,1.584l1.441,1.15l1.441,1.008l1.584,1.01l1.439-1.439l0.145-1.441l-1.441-1.008
+ l0.43-1.584l0.291-1.441l-0.432-1.586v-1.438l-0.289-1.441l-0.434-1.441l0.145-1.584l0.289-1.441l1.441-0.576l-0.434-1.582
+ l-0.289-1.439l-0.145-1.441l-0.863-1.584v-1.441l-0.145-1.439l1.441-1.008l-0.719-1.584l-0.719-1.441l-0.145-1.441l-0.289-1.441
+ l1.438-1.584l0.578-1.438l0.721-1.01l1.439-1.008l1.441-1.152v-1.439l-1.441-1.152h-1.584l-1.439-0.143l-1.441-0.434l-1.15-1.439
+ l-1.439-0.436l-1.443,0.578l-1.008-1.439l-0.287-1.441l-0.434-1.441l-1.152-1.441l-1.438-0.719l-0.145,1.441l0.287,1.439
+ l-0.721,1.439v-1.439l-0.574-1.582v-2.879l-1.586-1.293l-1.438-1.01l-1.441,1.01l-1.008-1.443l-0.145-0.289l-1.439,0.721
+ M315.141,507.079l-1.293-1.441l1.584-0.432l0.143,1.439L315.141,507.079 M338.898,499.589l-0.574-1.439l1.01-1.439l1.439,0.143
+ l1.441-0.867l-1.441,1.299l-1.439,0.863L338.898,499.589 M336.453,504.341l-1.439-0.863l-0.721-1.584l1.586,1.01L336.453,504.341
+ M346.391,539.333l-0.434-1.582l0.291-1.441l-0.145-1.584l0.432,1.439l-0.145,1.586l0.145,1.439L346.391,539.333 M317.445,515.431
+ l1.584,0.143l0.432,1.439l1.152,1.584l1.441-0.141l1.441-1.443l1.439-0.574l-0.143-1.441l-0.723-1.438l-0.863-1.586l-1.439-0.432
+ l-1.443,0.143l-0.572,1.441l-1.439,1.15L317.445,515.431"/>
+
+ <path id="path3423" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M378.357,429.749l-0.863-1.438h1.582l0.145,1.586L378.357,429.749 M385.99,416.935l-1.445-0.576l-1.291-1.441l-0.576-1.586
+ l1.152-1.434l0.287-1.443l-0.145-1.584l1.443-1.008l1.584,0.574l1.439,1.152l0.145,1.441l0.574,1.441l1.152,1.438l-1.441,0.865
+ l-0.576,1.584l-1.439,0.719L385.99,416.935 M379.51,435.798l-0.576-1.441l-0.865-1.439l1.586-0.719l1.439-0.289l0.863,1.439
+ l-0.863,1.584l-1.439,1.008L379.51,435.798 M389.59,424.569l-1.441,0.285l-1.584-0.867l-1.439-1.004h-1.441l0.576-1.441
+ l1.008-1.441l1.439-1.008l1.584-0.434l-0.432,1.441l0.145,1.584h1.439l-0.432,1.441L389.59,424.569 M386.564,428.741l-1.295-1.438
+ l-1.152-1.441l0.576-1.441l1.584-0.289l1.438,0.863l1.443,1.297l-0.865,1.441l-1.439,1.438L386.564,428.741 M377.205,442.854
+ l-1.439-0.143l-0.576-1.441l1.439-0.576l0.576,1.441V442.854 M372.598,447.171l0.576-1.438l-0.145-1.439l1.441-0.432l-1.441-1.293
+ l-1.439-0.582l1.15-1.582l-0.43-1.439l-0.436-1.441l1.006-1.439l-0.285-1.586v-1.438l-1.441-0.721l-0.865,1.584l-0.863-1.584
+ l-1.439,0.865l-1.152,1.441v1.582l0.432,1.441l1.439-1.152l0.291,1.441l1.15,1.441l-1.441,1.152l-0.863,1.438l-0.145,1.582
+ l1.584-1.152l-0.432,1.445l1.439-0.145l-0.287,1.438l-1.441,0.148l-0.436,1.438l1.443,0.578l1.295-1.441l1.441,1.008
+ L372.598,447.171 M203.109,647.765l0.433-1.439l1.439-0.576l1.44-0.863l0.863-1.441l1.44-0.719l0.576,1.439l-1.44,1.439h-1.584
+ l-1.439,0.867l-1.44,1.293H203.109 M292.391,525.079l0.719,1.438l-1.439-1.148l-1.439-1.295l-1.443-0.723l-0.721-1.438
+ l-0.717-1.441l-1.008-1.439l-0.287-1.443h1.438l0.719,1.443l0.291,1.439l0.721,1.584l1.438,1.008l1.295,1.439L292.391,525.079
+ M336.021,580.229l-1.439-1.15l0.574-1.441l1.295,1.441L336.021,580.229"/>
+
+ <path id="path3425" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M372.74,412.612l-1.441,0.719l-1.439,1.297l-0.432-1.441l0.143-1.441h1.441l1.439-0.574L372.74,412.612 M373.605,412.038
+ l-0.287-1.441l1.582-0.434l-0.143,1.441L373.605,412.038 M371.301,419.237l-1.439-0.719l1.439-1.15l-1.008-1.441l1.584-1.295
+ l1.443-0.865l-0.145,1.441v1.443l-0.865,1.582L371.301,419.237 M374.037,416.358l0.145-1.441l0.719,1.441H374.037 M365.83,431.479
+ l-1.443-1.582l1.584-0.293l0.145,1.441L365.83,431.479 M377.061,415.927l-0.141-1.439l1.439-0.289l0.576,1.584l-1.584,0.143h-0.291
+ M380.518,411.319l-0.432-1.441v-1.584l0.863-1.441l1.439,1.584l0.574,1.441l-1.584,1.441H380.518 M373.75,419.095l1.15-1.439
+ l1.586-1.008l1.439,0.143h1.439l-0.289,1.439h-1.582l-1.441,0.145l-1.441,0.576L373.75,419.095 M398.373,365.386l1.443,1.004
+ l1.008-1.439l-0.145-1.584l-1.584-0.867l-0.721,1.441v1.445 M380.086,417.511l-0.145-1.441l1.584-0.863l0.432,1.441l-1.439,1.438
+ L380.086,417.511 M374.324,426.151l0.434-1.441l0.432-1.584l1.439-0.434l0.576,1.584l-1.439,1.293L374.324,426.151
+ M372.311,423.413l-0.865-1.438l1.438-0.578l1.443-0.863l1.441-1.148l1.584,0.139l1.439-0.865l1.443-0.287l0.576,1.584
+ l-1.443,0.719l-1.439,0.574l-1.439,0.723l-1.586,0.287l-1.441,0.576L372.311,423.413 M385.846,406.995l-0.576-1.582l-0.432-1.438
+ l0.717-1.441l-1.439-1.01l-1.154-1.439l1.445-1.438l1.439,0.141l1.439,0.576l1.584,1.439l0.432,1.441l0.291,1.439l-0.576,1.441
+ v1.584l-1.441,0.285l-1.582,0.148L385.846,406.995 M377.926,423.987l0.287-1.434l1.152-1.588l1.441,0.287l-0.143,1.586
+ l-1.441,1.439L377.926,423.987 M361.074,446.599l0.719-1.443l0.869-1.582l0.143-1.438l0.572-1.443l-0.285-1.439l1.439-0.434
+ l1.439-1.008l1.443,1.008l-1.443,1.152l-0.863,1.438l0.432,1.586l0.145,1.441v1.441l-1.439-0.574l-0.869,1.438l-1.438-0.143
+ H361.074"/>
+
+ <path id="path3427" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M13.894-138.472l-0.576,1.584l-1.439,0.432l-0.576,1.44l1.584-0.432l-1.44,1.296l-1.584-0.288l-1.008,1.584l1.44,1.006h1.584
+ l-1.584,0.722l-1.44,0.288l-1.44,0.433l0.145,1.439l-0.432,1.44l1.439,0.144l1.44-0.432l0.72,1.584l-0.864,1.439l1.584,0.288
+ l1.584,0.288l0.288-1.584l0.72-1.439l0.576,1.439l1.44,0.145l1.584-0.433h1.439l-1.439-0.72l-1.584-0.576l1.439,0.145l-0.863-1.584
+ l1.584-0.288l-0.721-1.44l1.44,0.432l-0.288-1.584l1.152,1.584l1.439,0.864l1.44-1.01l0.144-1.438l-1.584-0.863l-1.439,0.144
+ l1.439-1.008l-1.439-0.864l-0.145-1.439l-1.296-1.44l-1.439-0.576h1.439l1.44,0.864l1.151,1.44l1.44-0.576l-0.432,1.584h1.584
+ l1.439-1.008l0.432-1.44l1.152-1.439l0.288-1.44l-0.72-1.44l-1.44-0.863l-1.439-1.44l-0.721-1.44l-1.584-0.432l-1.439-0.864
+ l-0.433,1.44l0.145,1.584l1.584,0.72l0.576-1.439l0.432,1.439l-1.44,0.72l-1.439,0.288l0.144-1.584l-1.296,1.584l-0.288-1.584
+ l-1.439,0.721l0.432-1.44l0.576-1.439l0.432-1.584h-1.584l-0.575,1.439L14.47-143.8l0.576,1.44l-0.288,1.439v1.44L13.894-138.472
+ M-236.954,419.815l-1.44-0.43l1.44-0.148V419.815 M-246.314,437.671l-1.294,1.582l0.43-1.438L-246.314,437.671 M-250.202,445.304
+ l-0.433,1.438l0.145-1.438H-250.202 M-188.137,552.005l-1.441,1.297l-0.721-1.439l1.44-0.291L-188.137,552.005 M-216.219,515.862
+ l-1.439,0.574l-1.438-0.574l1.438-0.434l1.584-0.576L-216.219,515.862 M-207.433,583.397l-1.441-1.295h1.441V583.397
+ M-207.723,585.847l-0.576-1.443L-207.723,585.847 M-213.339,586.134l1.584-1.443l0.433,1.443l-1.44,0.432L-213.339,586.134
+ M-211.179,587.862l-1.439-0.576l0.146,1.439l-1.008-1.584l1.438-0.145L-211.179,587.862 M-218.379,594.772v-1.439l-1.438-0.287
+ l-1.442,0.432l-1.584,0.287l0.433,1.584v1.443l1.439-0.721l0.29-1.439l1.584,0.576L-218.379,594.772 M-222.265,598.517h1.584
+ H-222.265 M-226.44,597.079l-0.146,1.584l-0.863-1.441v-1.584L-226.44,597.079 M-229.034,607.302l-1.438-0.432l1.438,0.141V607.302
+ M-224.282,595.782l-0.145,1.584l-0.863-1.584l0.287,1.584l0.433,1.584l0.576-1.584l-0.145-1.441L-224.282,595.782
+ M-227.307,602.692l-1.439-0.289l-0.721,1.443l1.442,0.574l0.718-1.582V602.692 M-228.746,639.126l-1.584,0.432l-1.44-0.576
+ l0.29-1.439l1.438,0.576L-228.746,639.126 M-87.914,691.397l-1.152-1.584l1.584-0.719l1.44,0.141l0.432,1.443v1.441l-1.44-0.434
+ L-87.914,691.397 M303.047,489.798l-1.152-1.584l1.586,0.143L303.047,489.798 M337.75,476.55l0.432-1.441l1.008-1.584l1.008-1.439
+ l0.145,1.439l-0.865,1.441l-1.441,1.295L337.75,476.55 M368.277,409.878l-1.439-0.723v-1.434l0.576-1.586l1.439,0.434l-0.289,1.582
+ l-0.289,1.439v0.287 M373.174,401.386l0.145-1.445l0.863-1.441l1.439-0.143l0.145,1.441l-1.584,1.295L373.174,401.386"/>
+
+ <path id="path3429" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M82.149-211.048h-1.584l1.44-1.152L82.149-211.048 M29.878-106.792l0.144-1.439l0.145,1.439H29.878 M8.277-95.705l0.288-1.439
+ l0.576,1.439H8.277 M16.918-108.232l1.439-0.433L16.918-108.232 M15.766-113.992l0.144-1.44l1.44-0.864v1.44l-1.44,1.151
+ L15.766-113.992 M19.798-124.072h-1.44l-1.584-0.576l1.44-0.721l1.439-0.432l0.576,1.44L19.798-124.072 M20.229-127.24l-1.44-0.145
+ l-1.584-0.864l1.584-0.288l1.44,0.288V-127.24 M9.573-136.744l1.44-1.44l0.576-1.44h1.439l0.288,1.584l-1.439,0.721l-1.44,0.863
+ L9.573-136.744 M42.838-161.8l-1.44,0.576l1.44-1.44V-161.8 M13.75-148.984l1.151-1.44l-0.864,1.44H13.75 M15.909-149.128v-1.439
+ l1.44-0.864l0.144,1.44L15.909-149.128 M18.646-150.712l0.144-1.584l1.009-1.439l0.432,1.584l-1.296,1.439H18.646 M52.773-177.497
+ v-1.439l0.145,1.439H52.773 M23.974-164.968l-0.72-1.584l1.439-0.432l-0.144,1.439L23.974-164.968 M55.51-189.448l-0.576-1.44
+ l0.144-1.584l0.145,1.584l0.576,1.44H55.51 M53.205-191.752l-0.575-1.439l0.863,1.439H53.205 M15.478-124.504l-0.144,1.584
+ l-1.009,1.44l-1.439,0.718l-0.433,1.442l-1.439,0.144l-0.864,1.584l0.576,1.44l0.864-1.584l0.432,1.584l1.584-0.433l1.44-1.296
+ l1.008,1.44l1.439-1.152l-0.144-1.44l0.432-1.584l1.44-0.289l-1.44-1.154l1.584-0.574l-0.432-1.439l-1.584-0.288l-1.44-0.145
+ h-0.432"/>
+
+ <path id="path3431" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-48.458,669.653l0.287-1.439l0.288,1.584L-48.458,669.653 M-56.522,677.718l1.584-0.576l-1.584,0.863V677.718 M-96.698,646.325
+ l-1.44-1.152l1.44,1.008V646.325 M-98.715,645.749l-1.439-0.863l1.439,0.432V645.749 M-70.059,684.341l1.44,1.152l-1.44-0.721
+ V684.341 M-89.354,665.333l-1.44-0.721l-1.584-0.287l-1.439-0.721l1.584-0.141l1.439,0.287l1.44,0.576V665.333 M-99.146,656.839
+ l-1.44,0.574l-1.439-1.15l0.144-1.584l1.44,0.432l1.296,1.441V656.839 M-91.082,666.194l-1.44-0.287h1.44V666.194 M-89.786,668.935
+ l-1.584-0.143l1.439,0.143H-89.786 M-89.498,670.374l-1.44-0.576l1.44,0.289V670.374 M-87.194,678.149l-1.44,0.289l1.44-0.865
+ V678.149 M-89.066,677.286l-1.44,1.008l-1.584-0.145l1.152-1.439h1.584L-89.066,677.286 M-85.61,685.349l-0.576,1.586l-0.144-1.441
+ L-85.61,685.349 M18.502,655.397l1.439-0.865L18.502,655.397 M16.342,654.39l0.863-1.584h1.44l-1.152,1.439L16.342,654.39
+ M15.046,654.532l-0.145-1.439l1.584-0.289l-0.864,1.584L15.046,654.532 M12.598,655.687l-0.145-1.441l0.288,1.441H12.598
+ M8.422,652.806l-0.576-1.441l0.864-1.439l1.584-0.719l1.439-0.145l0.72,1.441l0.288,1.438l-1.584,0.146v1.438l-1.439-0.289
+ L8.422,652.806 M-4.683,648.341l-0.576-1.441l1.44,1.01L-4.683,648.341 M121.462,642.294l-1.44,0.717L121.462,642.294
+ M87.766-143.8l-0.72,1.44l-1.44,1.439l-0.288-1.439l0.145-1.44l1.439-1.439L87.766-143.8 M62.422-188.728l1.439-1.152
+ L62.422-188.728 M63.573-190.6l-0.432-1.44l1.44,0.145l-0.576,1.439L63.573-190.6 M67.174-191.033l-0.576-1.439l-0.576,1.439
+ l-0.576-1.439l-1.439-0.864l2.88-2.304l0.864,1.584l0.432,1.439l-0.576,1.44L67.174-191.033 M75.67-198.088l-0.433-1.439
+ l1.584,0.72L75.67-198.088 M79.413-202.264l-0.144-1.44l1.44-0.432l-0.145,1.44L79.413-202.264"/>
+
+ <path id="path3433" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-165.385,535.444l0.576-1.441l-0.288-1.438l-0.722-1.586l-1.008-1.439l-1.44,0.719l-0.286,1.441l-0.29,1.439l-0.144,1.439
+ l1.008,1.584l1.584-0.432L-165.385,535.444 M-131.69,520.47l-1.584-0.865l-0.864,1.441l-0.432,1.584l1.439-0.432l0.721-1.441
+ L-131.69,520.47 M-22.106,553.444l-1.44-0.434l-1.296-1.439l1.44,0.145l1.296,1.438V553.444 M-28.299,549.271l-1.439,1.441
+ l-0.576-1.441l1.44,0.576L-28.299,549.271 M-66.603,576.483h1.44l0.432,1.443l-1.44-0.143L-66.603,576.483 M-70.49,598.229
+ l-1.44,0.434l-1.584,0.143l1.44-1.297l1.439,0.291L-70.49,598.229 M-69.482,600.103l-1.44,0.145l-1.584,0.143l-1.439,0.289h-1.44
+ l1.44-0.289l1.439-1.008l1.44-0.432l1.584,0.432V600.103 M-84.026,608.022l-1.44-0.576L-84.026,608.022 M-84.746,615.222
+ l-1.44,0.145l1.44-0.434V615.222 M-85.898,614.067l-1.44,0.723l1.44-0.865V614.067 M-2.811,544.374l-1.439-0.867l-1.584,1.297
+ l-1.44,0.719l-1.152,1.441l1.44,1.152l1.584-1.299h1.439l1.44-0.141l-0.144-1.584L-2.811,544.374 M-22.538,551.286l-1.152-1.584
+ l-1.44-1.299l-1.439-0.861l0.72,1.439l1.44,1.295l1.439,0.865L-22.538,551.286 M-67.467,579.509v-1.582l0.288,1.441
+ L-67.467,579.509 M-16.635,656.118l-0.863-1.586l0.432-1.439l0.72-1.443l0.433-1.584v-1.438l0.575-1.443l1.152,1.443l-0.432,1.584
+ l-0.864,1.438l-1.152,1.443l0.864,1.439l-0.576,1.441L-16.635,656.118 M-23.69,655.11l1.44-0.865l1.439,1.01l-0.576,1.439
+ l-1.584-1.295L-23.69,655.11 M-34.49,666.483v-1.584l-1.44-0.143v-1.439l-0.144-1.439l-0.288-1.441l1.439-0.434v1.441l0.433,1.441
+ l0.576,1.584l-0.288,1.439L-34.49,666.483 M-36.074,667.062l-0.864-1.439l1.152,1.439H-36.074 M-40.683,668.214l1.008-1.443
+ L-40.683,668.214 M-47.45,665.909l1.584-1.01l1.151,1.441l0.433,1.586l-1.584-1.295l-1.44-0.291L-47.45,665.909"/>
+
+ <path id="path3435" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-165.675,485.046l-0.288,1.439l-1.006,1.441l-1.441,0.289l-0.721-1.584l-0.287-1.584l1.439-1.295h1.584l0.145-1.439l-0.576-1.441
+ l1.296,1.441l0.146,1.439L-165.675,485.046 M-92.379,438.819l-0.144-1.582l0.144-1.439l1.297-1.441l-1.44-0.574l-0.576-1.441
+ l-1.584-0.287l-1.439,1.15l-1.009,1.443v1.438l0.721,1.582l0.144,1.441l0.288,1.441l1.584,0.863l1.44-1.008l0.863-1.439
+ L-92.379,438.819 M-145.37,455.382l-1.584-0.289l-1.44,0.141l1.584,0.867L-145.37,455.382 M-55.082,462.729l-1.44,0.715
+ l-1.296-1.441l1.439-0.287l0.721,1.439L-55.082,462.729 M-55.803,465.749l-1.439,0.291l-0.288-1.584l1.439,0.863L-55.803,465.749
+ M-69.626,465.03l0.144,1.582v2.879l-0.432-1.582v-1.441l-0.145-1.439h0.433 M-74.522,481.015l-0.144-1.441l1.439,1.008
+ L-74.522,481.015 M-75.675,498.294l-0.863,1.439l-0.864-1.439l1.439-0.432L-75.675,498.294 M-79.706,503.622l-0.576-1.584h1.439
+ v1.584H-79.706 M-81.003,508.374l1.44,0.719l1.44,0.432l-1.44,0.289l-1.44-0.289V508.374 M-98.139,522.054l-1.439,1.152v-1.443
+ l1.439-0.287V522.054 M-122.33,510.247l-1.44,0.432l-1.584-1.152l1.44-0.574l1.584,0.143V510.247 M-134.715,523.782l-1.439,1.008
+ l-1.44,0.863l-0.72,1.441l-0.144-1.441l1.584-1.439l1.439-1.441L-134.715,523.782 M-151.563,527.095l-1.584-0.865l1.584,0.576
+ V527.095 M-150.986,531.126l-1.44,0.143l-1.439-0.576l-0.433-1.439v-1.441l1.44,0.576l1.584,1.439L-150.986,531.126
+ M-165.53,526.229l-1.296-1.439l1.441,0.432L-165.53,526.229 M-161.929,530.263l-1.729,2.879l-0.576-1.439l0.288-1.584l1.439-0.865
+ L-161.929,530.263 M-178.345,542.358l-1.584-0.287h1.438L-178.345,542.358 M-191.162,517.302l-0.864,1.584l-1.584,0.287
+ l-1.44-0.576l-1.439-1.008l-0.864-1.584l1.44-0.432h1.441l1.584,0.291l1.438,0.141L-191.162,517.302"/>
+
+ <path id="path3437" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-161.498,428.454l-1.297-1.441l1.44,0.291l0.432,1.438L-161.498,428.454 M-184.106,430.323l-0.144,1.443l-0.431-1.443H-184.106
+ M-71.786,405.702l-1.44-0.434l-0.432-1.441l-1.44-0.574l-1.584-0.863l0.72,1.438l0.721,1.582l1.584,1.443l1.439-0.143
+ L-71.786,405.702 M-77.69,405.126l-1.44-1.299l-1.584-0.141l-1.439-0.143l-1.008-1.441l-1.44-0.576l-1.584-0.432l-0.864,1.441
+ l1.009,1.439l1.439,0.865l1.584,0.432l1.44,0.293l1.439,0.861l1.584,0.146L-77.69,405.126 M-107.066,419.526l-1.584,0.719
+ l-1.008,1.441l0.144,1.441l0.433,1.584l0.863,1.439l0.288,1.441l1.008,1.584l1.297,1.439l1.439,0.719l1.584,0.723l1.44,0.143
+ l1.439-0.576l1.584-0.434l1.44-0.867l1.584-0.285h1.439l1.44-0.289l1.008-1.438v-1.586l0.432-1.441l-0.144-1.441l-0.864-1.584
+ l-0.432-1.443l-1.296-1.436l-1.44-0.576l-1.439-0.291l-1.44-0.287l-1.584-0.291l-1.439-0.287h-1.584l-1.44,0.43l-1.44,0.721
+ l-1.439,0.145L-107.066,419.526 M-170.282,425.862l-0.864-1.441l-1.44-0.434l-0.863,1.441l-1.296,1.441l-1.009,1.584v1.443
+ l1.44,1.434l1.44,0.578l1.441-1.295l0.718-1.582l0.433-1.441l-0.145-1.439L-170.282,425.862 M-167.979,437.237l1.44-1.152
+ l0.575-1.438v-1.441l0.145-1.584l-1.44-0.434l-0.72,1.441l-0.72,1.439l-1.008,1.441l-0.143,1.441l1.438,1.15L-167.979,437.237
+ M-212.33,434.499l-0.288-1.434l-0.721-1.443l-0.287,1.443L-212.33,434.499 M-83.883,429.175l-0.863,1.439l-0.721-1.439l1.44-0.143
+ L-83.883,429.175 M-89.498,429.319l1.151-1.586l0.721-1.439l1.439-0.432l1.44,0.141l0.575,1.586l-1.584,1.008l-1.296,1.441h-1.439
+ L-89.498,429.319 M-86.475,432.63l-1.008,1.584l-1.44,0.434l0.864-1.441l1.44-0.719L-86.475,432.63 M-156.171,466.759l-1.151-1.588
+ L-156.171,466.759 M-175.322,456.39l-0.576,1.438l0.432,1.586l-0.575,1.441l-0.719-1.441l0.143-1.586l0.146-1.438H-175.322"/>
+
+ <path id="path3439" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-97.563,297.558l0.288,1.584l1.44,1.439l0.575,1.44l1.44,0.432l0.432,1.584l0.433,1.44l1.439,0.576v-1.44l0.576-1.439l1.44-0.576
+ l1.439-0.433h1.44l-1.44-1.008l1.44-0.432l1.439,0.288l1.584-0.288l1.44-1.152l2.88-2.88l1.44-0.576l-0.433-1.439l1.44,0.575
+ l1.439-1.151l1.584-1.296l-0.144-1.44l-1.44-1.439l-1.439-0.433l-1.44,0.288l-1.584,0.72l1.44-1.439v-1.44l-1.44-0.288
+ l-1.439,0.721l-1.152-1.44l-1.44-0.576l-0.432-1.439l0.144-1.44l0.145-1.584l-1.44-1.008l-1.439,0.576l-1.584,0.576l-0.433,1.584
+ l1.009,1.439l-1.44-0.432l-1.008,1.439l1.008,1.584l-1.584,0.288l-1.44,0.721l-0.575,1.439l-1.44,1.44l-0.864,1.439l-0.575,1.44
+ l-0.433,1.584l-1.008,1.439L-97.563,297.558 M-76.106,374.599l-0.72-1.443l0.863,1.586L-76.106,374.599 M-98.139,386.839
+ l-0.144-1.441l0.432,1.441H-98.139 M-103.755,359.909l-1.439,0.145l-1.584,0.289h-1.44l-1.439-0.289l-1.008-1.439l1.439-1.295
+ l1.584-0.434l1.44,0.576l1.584-0.863l1.439,0.576l1.44,0.719l-0.576,1.586L-103.755,359.909 M-132.267,385.397l-0.432-1.582
+ l1.439-1.008l-0.863,1.438L-132.267,385.397 M-139.322,383.386l-0.145-1.445l0.721,1.445H-139.322 M-136.874,379.065l-0.864,1.582
+ l-1.44,0.287l-1.584,0.865l-0.288,1.438l-1.439,0.867l0.288-1.584v-1.439h1.439v-1.441l-0.288-1.439l1.44-0.143l1.439-0.574
+ l0.864-1.586l1.44-0.578l0.144,1.441l-0.288,1.441L-136.874,379.065 M-137.738,372.438l-1.44,0.717l-1.439,0.867l-1.44,0.719
+ l-1.439,0.434l-1.009-1.441l1.44-0.578l0.864-1.434l1.584-0.578l1.439-0.145l1.44-0.287l0.144,1.439L-137.738,372.438
+ M-193.322,385.11l-1.438,0.576l-1.586,1.297l-1.439,0.287l0.432,1.441l1.152,1.439l-0.862,1.441l0.718,1.441l1.44,1.582
+ l1.439,0.576l1.584,1.584l1.44,0.434l1.01,1.441l1.438,1.008l1.441,0.145h1.584l1.15-1.443l0.288-1.439l-1.15-1.438l0.143-1.443
+ l-1.152-1.441l-1.008-1.443l1.008-1.582l-0.72-1.438l-1.584-0.574h-1.438l-1.441-0.723l-1.584-1.012L-193.322,385.11
+ M-75.242,379.065l-1.296,1.434L-75.242,379.065 M-75.242,412.612l-0.433,1.445v1.438l-1.584-0.289l-1.439-0.719l-1.44,0.43
+ l-0.288-1.438l1.44-1.582l1.584-0.148l1.439-0.143L-75.242,412.612 M-93.242,406.136l1.439-0.574l1.584-0.148l0.288,1.441
+ l-1.584-0.285h-1.439L-93.242,406.136 M-94.971,404.554l-0.288,1.582h-1.584l-0.575-1.443l1.439-0.432L-94.971,404.554"/>
+
+ <path id="path3441" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-85.322,276.102l-1.44,0.72l-1.439-0.432l-1.44-1.296l0.864-1.44l1.439,0.288l1.44,0.576l0.864,1.439L-85.322,276.102
+ M-87.339,267.318l-1.584-0.288l-1.439-1.152l1.008-1.439l1.44-1.296l0.575,1.439l1.152,1.44L-87.339,267.318 M-85.467,246.006
+ l-1.439,0.287l1.584-1.008L-85.467,246.006 M-86.33,248.886l-1.44,1.008l-1.44-0.433l0.433-1.584l1.584-1.008h1.439l-0.287,1.584
+ L-86.33,248.886 M-95.547,275.814l-1.439-0.433l1.439,0.145V275.814 M-82.73,218.501l-0.864-1.584l1.152,1.584H-82.73
+ M-92.666,249.174l-1.44-0.864l1.44,0.432V249.174 M-85.034,218.501l-1.584,0.433l1.439-0.864L-85.034,218.501 M-90.074,225.99
+ l-0.721-1.44l1.009,1.584L-90.074,225.99 M-87.914,220.806h-1.44l1.44-1.44V220.806 M-94.826,224.984l-1.584-0.146l-1.008-1.438
+ l1.439,0.574l1.44,0.144L-94.826,224.984 M-95.69,223.254h-1.44l1.44-0.145V223.254 M-97.851,224.694l-1.439-0.864l1.439-0.43
+ V224.694 M-102.603,225.125l-1.439,0.721l1.439-1.008V225.125 M-105.339,222.822l-1.439-0.864l1.439,0.576V222.822
+ M-104.187,221.094l-1.439-0.145L-104.187,221.094 M-78.986,328.808l1.439-0.578L-78.986,328.808 M-80.139,301.877l-1.439,0.145
+ l-1.44-0.576l1.44-1.152l1.584-1.439l0.288,1.439l-0.145,1.584H-80.139 M-80.139,305.766l-1.584,0.432l-1.439-0.288l-0.864-1.439
+ h1.439l1.44,0.144l-1.44-1.296l1.44-0.72l1.584,0.576l0.432,1.584L-80.139,305.766 M-84.171,336.581l-1.439-0.287l-1.44-0.576
+ l1.44-0.863l1.584,0.719L-84.171,336.581 M-87.626,334.278l1.439-0.721L-87.626,334.278 M-108.507,291.222l-1.296-1.584l1.44,1.151
+ L-108.507,291.222 M-117.723,303.174v-1.44l0.288,1.44H-117.723 M-178.635,332.263l-0.144-1.584L-178.635,332.263
+ M-192.746,329.815l0.146-1.441v1.584L-192.746,329.815 M-196.778,320.741l-0.433-1.438l0.576,1.438H-196.778 M-205.272,312.965
+ l1.438-1.008l-0.145,1.584L-205.272,312.965"/>
+
+ <path id="path3443" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M18.646,99.127l0.288,1.582l-0.576-1.582H18.646 M33.334,84.582l1.439,0.288l-1.152,1.442l-0.287-1.442V84.582 M14.47,97.11h1.439
+ H14.47 M-73.803,129.366l0.288,1.584L-73.803,129.366 M-76.395,213.174l0.288-1.44l0.72,1.44H-76.395 M-77.547,207.414l-0.72-1.439
+ l1.008,1.584L-77.547,207.414 M-79.418,195.894l-0.288,1.439L-79.418,195.894 M-79.131,194.886l0.576-1.44l-0.144,1.44H-79.131
+ M-77.834,190.568l1.008-1.442l-0.721,1.442H-77.834 M-84.458,209.574l-0.721-1.44l1.008,1.44H-84.458 M-76.538,152.118
+ l-0.433,1.584l-0.288-1.439L-76.538,152.118 M-96.122,148.374l1.008,1.584L-96.122,148.374 M-105.626,143.622l-0.721-1.438
+ L-105.626,143.622 M-166.106,176.31l-0.862-1.584l-0.578-1.44l1.152,1.44l0.576,1.439L-166.106,176.31 M-166.395,171.846
+ l-1.584-0.574l-0.288-1.442l1.586,1.009L-166.395,171.846 M-169.418,170.118l-0.576-1.584v-1.439l0.863,1.439v1.584H-169.418
+ M-169.131,166.518l-0.144-1.582v-2.88l1.44-0.576l-0.145,1.584l-0.288,1.438l0.288,1.44l-0.288,1.439l-0.144-1.439
+ L-169.131,166.518 M-170.715,168.392l-0.863-1.442l-0.576-1.439l1.151,1.439l0.433,1.442H-170.715 M-170.427,161.768v-1.442
+ l0.29-1.438l0.431-1.587v1.44l-0.288,1.584l-0.143,1.442H-170.427 M-170.57,167.094l-0.145-1.44l-0.288-1.584l-0.43-1.44v-1.438
+ l0.286-1.442l0.864,2.88l-0.145,1.44l0.145,1.584l-0.145,1.44H-170.57 M-172.587,161.91l-0.718-1.438l1.438-0.146l-0.288,1.442
+ L-172.587,161.91 M-172.442,163.926l-0.72-1.44l-1.438-1.584l0.143-1.44l0.863,1.44l0.721,1.44l0.575,1.584H-172.442
+ M-166.538,127.206l-1.44,1.152l-0.144-1.44l1.153-1.584l0.719,1.584L-166.538,127.206 M-76.538,273.366l-1.44-0.576l2.88-0.863
+ l-0.864,1.439H-76.538 M-80.858,269.766l-1.44-0.576l1.44-0.576V269.766"/>
+
+ <path id="path3445" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M180.069,552.726l0.576-1.584l0.288-1.439l0.432-1.441l0.576-1.584l0.576-1.443l-0.288-1.438l-1.008,1.438l-1.152,1.443
+ l-0.144,1.584l-0.145,1.441l-0.288,1.439l-0.144,1.584l-0.288,2.879l0.864-1.441L180.069,552.726 M178.773,565.397l-1.439,1.152
+ l-1.009-1.441l-1.439,0.289l-0.433,1.441l-0.575,1.439l-0.864,1.441l1.439,1.439h1.44l1.584,0.289l0.576,1.441l1.439-0.865
+ l0.576-1.441l-1.584,0.145l-1.151-1.439l-0.433-1.584l1.44-0.145l0.432-1.584V565.397 M171.573,576.63l-1.439-0.719l0.432,1.438
+ L171.573,576.63 M199.941-70.936l-1.439-0.145l-1.44,1.009l1.44,1.296l1.151-1.44L199.941-70.936 M187.558-140.632l1.44,0.288
+ l1.584-0.288l1.439,1.008l1.44,0.864l0.72,1.44l-1.584-1.152l-1.44-0.72l-1.439-0.433l-1.584-0.144L187.558-140.632
+ M155.445,24.246l-0.288,1.154l-0.288,1.44v0.144 M156.021,19.928v1.584l-0.288,1.438l-0.144,1.01 M155.302,16.472l0.432,1.584
+ l0.288,1.438v0.146 M121.894-72.376l1.44-1.296l0.287,1.44l-1.439,0.144L121.894-72.376 M26.134-85.625l0.288-1.439l0.576,1.584
+ L26.134-85.625 M48.741,77.958l-1.439,0.288h-1.584l-0.576-0.142 M2.086-63.448l-1.44-0.721l0.864-1.439l0.576,1.439V-63.448
+ M1.365-66.184l-0.863-1.44l1.439,1.008L1.365-66.184 M-16.635-57.976l1.44-2.88l1.439-0.864l-1.728,2.88l-0.864,1.584
+ L-16.635-57.976 M-22.971-56.968l-0.576-1.439l0.864,1.439H-22.971 M-2.954-70.648l-0.288-1.44l0.576,1.44H-2.954 M-16.059-61.864
+ l1.008-1.44l0.864-1.439l0.288-1.44l0.576,1.44l1.439-0.289l0.145,1.44l-1.44,1.44h-1.439l-1.44,0.576V-61.864 M-4.971-68.488
+ l-0.576-1.442l-0.432-1.438l1.44-0.72l-0.288,1.44l1.296,1.439l-0.145,1.584L-4.971-68.488 M-4.106-73.528l-0.432-1.44l0.288-1.439
+ l0.72,1.439l-0.288,1.44H-4.106"/>
+
+ <path id="path3447" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M147.958,597.366l-1.44,0.863v1.441l-1.584,0.143l-1.44-0.432l-0.288-1.441l-0.287-1.586l-1.44-1.008l-1.584-0.717l-1.44-1.443
+ l-1.439-0.43l-0.576-1.441l1.44,0.145l1.439,0.432l1.44,0.432l1.584,0.145l1.584,0.863l1.439,1.15l1.44,1.154l1.152,1.441V597.366
+ M109.077,615.798l-1.439,0.717l-1.584,0.291l0.288-1.584l1.439-0.289l1.44,0.717L109.077,615.798 M112.245,624.005h-1.439
+ l1.439-0.287V624.005 M161.205,575.765l-1.439-0.717l-1.44,0.287l-1.584,0.578l-1.151,1.438l1.151,1.586l1.009,1.441l1.584,0.576
+ l1.439,0.143h1.44l0.432-1.586l0.144-1.438l-0.72-1.441L161.205,575.765 M137.014,585.413l-1.008-1.584h1.584l1.439,0.434
+ l1.44,1.15l1.439,1.297l1.296,1.584l0.864,1.439l-1.439-0.145l-1.44-1.008l-1.439-1.584l-1.44-0.863L137.014,585.413
+ M141.909,604.997l-0.863-1.584h1.439l1.44,1.152l0.144-1.439v-1.441l-1.296-1.439l-0.432-1.584l-0.433-1.441l-0.863-1.584
+ l-1.44-0.719l-1.439-1.154l-1.44-0.287l-1.152,1.441l-0.575,1.582l0.144,1.441l0.72,1.582l0.576,1.443l1.296,1.438l1.008,1.443
+ l0.145,1.584l0.72,1.441l1.296,1.439h1.44l0.72-1.439l-0.864-1.441L141.909,604.997 M118.149,616.95h-1.439l-1.584,0.143
+ l-1.44,0.141l-1.584-0.141l-1.44-0.719h-1.439l-1.584,0.576l-1.44,0.572l-1.439,0.291h-1.44l-1.151,1.441l0.575,1.438l1.584,0.291
+ l1.44,0.432l1.439,0.291l1.44,0.287l1.44,0.721l1.439-0.143l1.584,1.295l1.44-0.145h1.584l1.439-0.576l-0.432-1.584l1.296-1.439
+ l-0.288-1.441l-0.144-1.441L118.149,616.95 M119.445,616.806v1.584V616.806 M198.789,506.358v1.441l-1.439,1.008l0.288-1.439
+ L198.789,506.358 M195.621,511.542l-0.72,1.439l0.145-1.439H195.621 M194.182,514.278l-1.584,1.01l1.008-1.441L194.182,514.278
+ M188.565,517.444l-0.288,1.441v-1.584L188.565,517.444 M192.31,526.95l-0.144,1.439l-1.009,1.439l-1.439,0.291l0.432-1.584
+ l1.152-1.441L192.31,526.95 M191.302,511.397l1.439-1.439l-1.584,0.143l-0.575,1.441l1.439,0.287L191.302,511.397"/>
+
+ <path id="path3449" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M97.558,392.022l-0.432-0.143l-1.44-0.143l-1.44,0.143l-1.439-0.572l-1.44-1.443l-0.576-1.443l0.864-1.582l0.864-1.441l0.144-1.439
+ l-0.432-1.441l-1.44-0.432l0.576,1.439l-0.288,1.441l-0.863,1.439l-1.584,0.865l-1.44-0.717v-1.443l-1.439,0.143l-0.433-1.438
+ l0.145-1.441l-1.44,0.434l-0.144-1.441l0.144-1.441l1.008-1.441l-0.288-1.582l-0.288,1.439l-1.296,1.441l-0.863-1.441l0.288-1.584
+ l-1.009-1.441l-0.144-1.438l-0.288,1.438l-0.576,1.441l0.576,1.584l0.288,1.441l-0.288,1.439l0.864,2.879l-1.44,0.719l-1.584,1.008
+ l-0.432-1.438v-1.586l0.288-1.439l1.439-1.152l-0.432-1.441l-0.433-1.584l-0.144-1.441l-0.432-1.438v2.877l0.288,1.584
+ l-0.145,1.441l-1.008-1.584l-0.864-1.584l-0.144-1.441v-1.441l-0.576-1.582l0.288,1.439v1.584l-1.44-0.143l-1.584-0.291
+ l-1.439-0.141l1.439,0.574l1.44,0.434l1.008,1.441l1.008,1.586v1.434l-0.144,1.586l-1.44-1.008l0.145,1.441l0.432,1.441
+ l-0.576,1.441l-1.439,0.719l-1.584,0.285l-1.44,0.148l-1.152-1.443l-0.432-1.584l0.288-1.441l-1.152,1.441v1.441l-0.576,1.586
+ l-1.439-0.434h-1.44l-0.144-1.584l-0.288-1.584l-0.576-1.441l-0.72,1.441v1.584l0.144,1.439l-1.439,0.145l-1.44-0.434l0.433-1.441
+ l-1.44-1.293l-0.144-1.584l-0.433-1.443l0.288-1.438l-1.439-1.008l-1.009,1.586l-1.439,0.285l-1.44,1.008l-1.584-0.143h-1.439
+ l-1.44-0.432l-1.439-1.584l-0.576-1.443l0.144-1.582l-0.864-1.293v-1.443l0.433-1.439l1.151-1.586l1.152-1.438l1.44-0.867
+ l-1.44,0.289l-1.584,0.434l-0.432,1.439l-1.296-1.439v-1.586l-1.44,1.008l0.145,1.441l1.296,1.584l-0.288,1.443l-0.288,1.438
+ l-1.44,0.148l1.296,0.859l0.864,1.441l-0.288,1.441l-1.439,1.012l-1.584-0.578l-1.44-0.291l0.432,1.441l-1.584,0.287l1.44,1.297
+ l1.584,0.434v1.438l-1.44,0.867l-1.439,0.574l-1.584,0.145l-1.44-0.576h-1.439l-1.44-1.01l1.44-0.863l-1.44-0.865l-1.584-0.865
+ H31.75l-0.433-1.582l-1.008-1.008l-1.008-1.586l-0.864-1.438l1.44-1.01l1.584,0.436l1.439-0.436l1.584-1.441l-1.584-1.01
+ l0.145-1.438l1.439-0.578l1.44,0.434l-0.721-1.441l1.44-1.295l-1.44,0.291l-0.863,1.438h-1.584l-1.44-0.285l-0.288-1.443
+ l0.576-1.439l1.584-0.434l1.44-0.574l1.584-1.008l-1.584,0.287l-1.44,0.721l-1.439,0.287l-0.576-1.584l1.296-1.441l1.584-0.574
+ l-1.584-0.576l-1.44-0.432l0.433-1.441l1.584-0.719l-1.584-0.289l-1.44,1.297l-1.439-0.289l-0.288-1.582l0.72-1.441l0.432-1.439
+ l0.145-1.439l1.439-0.434l1.44,0.289l-1.44-1.008l-1.439-0.289l-0.288-1.584l1.584-1.295l1.439-0.289l-1.584-0.145l-1.439,0.145
+ l0.288-1.439l-0.433-1.439l1.44-0.721h1.439l1.584-0.287l1.44-0.289l-1.44-0.289l-1.439,0.434l-1.44-0.145l1.584-0.432
+ l-1.584-0.432l-0.863-1.586l1.439-0.863l1.44-0.719l1.584,0.574l1.439-0.143l1.44,0.143l1.151,1.586l1.585,1.295l1.439,1.152
+ l0.145,1.439l-0.433,1.586l1.296,1.438v1.441l0.433-1.441l1.439-0.574l1.008,1.439v-1.439l-0.144-1.441l1.44-0.574l1.584,0.287
+ l1.296-1.584l1.439-0.289h1.44l1.008,1.441l0.72,1.584l-0.144,1.439l-0.721,1.441l-1.439,1.295l-1.44,0.863l-1.584,0.432
+ l-1.439,0.434l-1.008,1.582l-0.288,1.441l-1.008,1.439l1.439-0.432l0.288,1.584l-0.288,1.439l1.44-0.287l1.008,1.439l1.439,0.576
+ l1.44,0.574l1.439,0.434l1.584,0.432h2.881l-1.44-0.574l-1.44-0.578l-1.584-0.43l-1.439-0.291l-1.44-0.432l-1.439-0.865
+ l-0.288-1.584l-0.145-1.439l1.44-0.721l1.584,0.721l-1.584-1.295l0.72-1.441h1.44l1.584,0.863l-0.576-1.439l1.44,1.584l0.287,1.441
+ l-0.144-1.586l-0.432-1.439l1.439-0.721l1.584,1.586v1.439l0.433-1.584l1.439,0.863l0.288,1.441l0.432-1.441l1.44-0.432h3.024
+ l1.439,0.287l-1.439-0.574l-1.584-0.145l-1.44-0.145l-1.44-0.432l-1.584-0.576l-0.863-1.439l-0.288-1.439h1.439l1.584,1.008
+ l1.44,0.145l-1.584-0.723l-0.576-1.438l-1.584-0.578l-0.288-1.582l1.44-0.434l1.439-0.719l1.584-0.145l1.44,0.289l1.296,1.438
+ l1.584-0.287l1.44,0.432l1.439,1.441l0.432,1.582l0.864,1.441l0.433,1.584l-0.576,1.439v1.441l-0.576,1.439l-1.008,1.439
+ l-0.721,1.441l-1.439,1.293l1.439-0.434l1.44-1.582l1.296,1.582l0.72,1.443l2.88,0.865l-2.88-2.881l0.721-1.439l-0.288-1.441
+ l0.288-1.584l0.144-1.439l1.296-1.441l1.44,0.578l-0.576,1.582l-1.152,1.441l1.584-0.863l1.44-0.434l0.72-1.439l1.584-0.287
+ l1.44-1.152l2.88-1.441l1.008-1.582l0.288-1.441l1.44-0.719l1.439-0.434l0.576,1.586l-0.576,1.438l1.152-1.438l0.288-1.586
+ l1.439-0.574h1.44l1.584,0.143l1.008,1.584l-0.72,1.441l-0.145,1.439l0.288,1.439l-0.288,1.584l-2.88,2.592l-0.864,0.863
+ l-1.296,1.441l-1.584,1.008l-1.439,0.576l-1.44,1.008l0.288,1.584l-0.576,1.443l1.44,1.436l0.144,0.291l0.864-0.143l-0.864-1.441
+ v-1.441l0.288-1.438l1.584-0.434l1.584-0.574l1.296-1.297l1.584-1.297l2.88-2.305l1.297,1.441l0.863,1.584l0.433,1.439l0.863,1.584
+ l1.44,1.439l0.432,1.441l0.576,1.582l0.433,1.441l0.575,1.01l0.145-1.584l-0.288-1.441l-0.432-1.441l1.439,0.434l1.296,1.439
+ l1.296,1.584l0.721,1.441l0.575,1.586l0.721-1.443l-0.288-1.439l-0.864-1.586l1.44-1.008l1.439,0.291l1.44,0.432l1.584,0.578h1.439
+ l1.584,1.438l-0.72-1.582l-1.44-0.721l-1.584-0.576h-1.439l0.576-1.584l-1.009,0.869l-1.439-0.436l-1.584,0.143l-1.44-0.289
+ l-1.439-1.152l-1.44-1.439l-1.296-1.439l-0.864-1.441l-0.72-1.582l-0.288-1.586h1.44l2.88,2.881l-0.432-1.439l-1.152-1.441
+ l1.439-0.574l-0.863-1.586l-1.584,0.289l-1.44,0.145l-1.152-1.584v-2.881l1.44-0.432l-1.584-1.15l0.72-1.441l1.44-0.289
+ l1.439,0.434l1.584,0.863l1.44,0.434l1.44,1.582l0.575,1.441l0.721,1.439l0.575,1.584l0.576,1.439v-1.584l-1.728-4.32l-0.433-1.439
+ l-1.439-1.008l-1.584-0.865l-1.44-0.863l-1.584-0.432l-0.72-1.439l0.864-1.584l1.439-1.439l1.152-1.441l1.44,0.145l0.863,1.439
+ l0.145,1.584l-0.288,1.441l0.432,1.439l0.72,1.439l1.584,1.297l1.44,1.152l1.44,1.008l-0.576-1.441l-1.152-1.439l-1.584-1.152
+ l-0.576-1.439l-0.432-1.584l0.144-1.439l-0.432-1.441l-0.576-1.582l0.288-1.297l1.44-0.576l1.439,0.143l0.576,0.434l-0.576,1.582
+ l1.584-1.15l1.44,1.008l1.008,1.584l1.296,1.441l-0.288,1.438l0.72-1.582l-0.144-1.441l-1.152-1.582l-1.008-1.297l-0.144-1.441
+ l1.439,0.145l1.008,1.297 M38.661,474.679l1.44,1.441l0.864,1.441l-1.584-1.008l-1.009-1.586L38.661,474.679 M31.317,485.046
+ l-0.432-1.584l1.439-0.576l0.576,1.584v1.441l-1.439-0.721L31.317,485.046 M23.397,495.989l-0.288,1.441l0.576-1.441H23.397
+ M19.365,496.854l-1.439,0.289l-1.44-1.439h1.584l1.44,1.008L19.365,496.854 M8.565,505.206l-1.439,0.865l-0.145-1.441l1.584,0.432
+ V505.206 M10.294,518.743l-0.145-1.441l1.44-0.576l1.008,1.439l-1.584,0.721L10.294,518.743 M8.134,520.759l1.439,1.152
+ l0.433,1.438l0.144,1.443l-1.584-0.576H7.126l-0.864-1.441l1.008-1.441L8.134,520.759 M6.117,519.317l-0.863,1.441l-1.44,1.441
+ l-1.439-0.436l-0.145-1.439l1.584-1.293h1.44L6.117,519.317 M7.126,529.397l0.144,1.441l-0.432,1.439l-1.009-1.439l-0.144-1.441
+ l1.44-0.143V529.397 M4.533,534.726l-0.144-1.584l0.288,1.439L4.533,534.726 M-9.003,520.903l0.145,1.582l-0.72-1.439
+ L-9.003,520.903 M29.445,488.358l-0.863,1.441l-0.864,1.584l1.439-1.295l0.145-1.439L29.445,488.358 M21.67,498.005l-1.44-0.287
+ l-1.44-0.145l-1.439-0.287l0.432,1.441l1.584,0.43l1.44,0.289L21.67,498.005 M16.054,503.046l-1.584-0.576l-1.44-1.008
+ l-1.584,0.717l0.576,1.443l1.584-0.145l1.44,0.145L16.054,503.046 M181.51,521.333l-1.296,1.586l0.432-1.586H181.51
+ M134.998,592.038l-1.297,1.439l-1.296-1.439l1.44-0.436L134.998,592.038"/>
+
+ <path id="path3451" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-30.171,389.722l-1.439,0.715l1.439-0.867V389.722 M-29.883,392.89l-1.439,0.285l1.439-0.719V392.89 M74.806,386.694l-0.433,1.441
+ l-0.575-1.441H74.806 M57.525,403.827l0.72,1.586l-0.287,1.441l-1.297-1.441l0.576-1.438L57.525,403.827 M56.373,400.519v1.441
+ l-0.144,1.441l-1.44-0.291l-0.432-1.584l0.576-1.441l1.439,0.291V400.519 M-34.635,425.862l-0.288,1.441l-1.439-0.148l0.288-1.434
+ L-34.635,425.862 M-40.395,426.87l0.864-1.441l1.439-0.719l1.44,0.143l-1.44,0.717l0.721,1.443l-1.44-0.436L-40.395,426.87
+ M-42.122,434.499l-0.145,1.443l-1.439,1.295l-1.009-1.439l-1.584-1.299l1.44-1.434l1.44,0.574l1.584,0.43L-42.122,434.499"/>
+
+ <path id="path3453" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-8.139,325.351l1.296-1.441l0.288-1.582v-1.441l-0.288-1.439l-0.144-1.584l-0.432-1.441l-0.721-1.439l-0.576-1.44l-1.584-0.288
+ l-0.863,1.44l-1.44-0.288l-1.439,1.44l-0.145-1.44l1.584-1.008l-0.144-1.44l-1.44-1.008h-1.439l-1.585-0.144l-1.439,0.288
+ l-1.584-0.145h-1.584l-1.584-0.72l-1.44-0.288l-1.439,0.144l-1.584-0.288l-1.44,0.288l-1.439,1.009l-1.44,0.144l-1.584,0.72
+ l-1.44-0.288l-1.439-0.288l-1.44-0.144l-0.575,1.44l-0.576-1.44l-1.584-0.288l-0.576,1.584l0.288,1.44v1.439l-0.433,1.44
+ l1.44,0.143l1.584,0.434l1.44,0.719l1.439,1.441l1.44,0.721l1.584-0.434l1.439-1.152l1.584,0.289l-0.288-1.584l0.864,1.584
+ l0.288,1.439l-0.432,1.439l-0.576,1.441l-0.433,1.582l-0.432,1.441l1.44,1.439l1.584,1.01l1.439,0.863l1.584,0.574l2.88,1.441
+ l1.584,0.432l1.44,0.721l1.439,0.145l1.152,1.438l1.584,0.865l2.88,1.439l0.864-1.439l0.72-1.439l0.576-1.584l0.145-1.439v-1.441
+ l-1.152-1.439l1.439-1.008l1.152-1.439L-8.139,325.351 M23.109,319.733l-0.288-1.439l-1.439-0.145l-1.584,0.145l-0.288,1.584
+ l1.439,0.145l1.44-0.289H23.109 M17.638,312.822l0.864-1.44l-1.297-1.439l-0.72-1.44l-1.584,0.288l0.288,1.44l1.44,0.432
+ l-1.152,1.44l1.44,1.151L17.638,312.822 M-24.555,309.797l-1.584-0.432L-24.555,309.797 M73.222,350.405l0.144,1.586l-1.439,0.145
+ l-0.864-1.441l-0.72-1.441h1.439L73.222,350.405 M62.854,344.069l-1.44-0.287l-1.439-0.143h1.439l1.44,0.143V344.069
+ M49.462,354.438l-1.009,1.584l0.145-1.441L49.462,354.438 M57.958,380.214l-1.585-0.289l1.44,0.145L57.958,380.214
+ M29.014,381.511l-1.44,0.145l-1.439-0.721l-1.296,1.441v-1.441l-1.44-0.576l1.008-1.441l1.44,0.434l1.439,1.008l1.44,0.434
+ L29.014,381.511"/>
+
+ <path id="path3455" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M60.693,322.472l-1.439,0.574l1.439-1.152V322.472 M51.046,326.503l-1.584-0.863l-1.44-0.434l-1.296-1.439l0.576-1.584l0.288-1.441
+ v-1.582l0.288-1.441l0.288-1.583l1.439-0.721l1.44,0.145l1.584,1.296l0.575,1.584l-1.008,1.439l0.433,1.441l-0.288,1.439
+ l-0.576,1.439l0.144,1.441L51.046,326.503 M43.413,333.702l-1.584,1.152v-1.441h1.44L43.413,333.702 M1.941,312.965l-1.439,1.297
+ l-0.576-1.44l1.439-0.432L1.941,312.965 M2.518,305.333l-1.584-0.144l-1.008-1.44l1.439,0.288L2.518,305.333 M-21.099,305.19
+ l-1.584,0.72l-1.439-0.288l-1.152-1.584l1.44-0.863l1.584,0.144l1.296,1.44L-21.099,305.19 M-25.994,305.045h-1.44l-0.864-1.439
+ l1.584,0.144L-25.994,305.045 M-43.563,310.085l-1.44-0.144l1.44-0.145V310.085 M53.493,313.686l1.009,1.439l0.144,1.44l0.72,1.441
+ l0.433,1.584l1.439,1.439l1.584-0.576l1.44-0.863l1.151,1.584l1.44,0.145l1.584-1.441l0.288-1.439l1.44-1.008l1.439-0.721
+ l1.296-1.439l1.152-1.584l0.576-1.584l-1.296-1.44l-1.584,0.288l-1.44,0.432l-1.584-1.296l-1.44,0.721l-1.439,0.575l-2.592,2.881
+ l-0.864-1.44l-0.288-1.44l-1.584,1.009l-1.44,0.72l-1.584,0.432V313.686 M17.781,317.573l-0.72-1.439l-0.432-1.44l-1.44-1.296
+ l-0.864-1.44l-0.288,1.44l-1.151-1.44l-1.44-1.296l-1.439-0.864l-1.44-0.287l-1.584,0.72l1.296,1.439l-1.439-0.432l-1.584,1.008
+ l-0.576,1.44l-1.152,1.439l-1.439,0.864l-0.864,1.441l0.288,1.439l-0.288,1.441l0.144,1.582l1.44,0.289l1.439,0.719h1.584
+ l1.44-0.287l1.44,0.287l1.584-0.43l1.439,0.143l1.44-0.865l1.584-0.863l1.439-0.863l1.152-1.441L17.781,317.573 M-5.834,303.03
+ l0.432-1.584l-0.576-1.584l-0.576-2.88l-0.72-1.44l-1.44-0.144l-0.288,1.439l-0.432,1.584l0.288,1.44l1.008,1.44l1.44,1.439
+ L-5.834,303.03"/>
+
+ <path id="path3457" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M100.006,324.198l0.288-1.584l-1.44,1.008L100.006,324.198 M152.71,31.304l-1.44,0.861l-1.44,0.146l-0.432,0.142 M154.869,27.127
+ l-0.287,1.584l-0.721,1.438l-0.288,0.29 M89.926,63.848l-1.44,0.142l-1.439,0.288h-0.145 M2.661,141.75v-1.438l1.152,1.438H2.661
+ M54.214,219.222l-1.584-1.296l-0.145-1.44l0.864,1.44L54.214,219.222 M53.35,248.742l1.152-1.439l1.584-0.433l0.432,1.44
+ l-0.432,1.439l-1.297,1.44l-1.439,0.144l-0.432-1.439L53.35,248.742 M50.613,232.038l-1.439-0.288l-2.305-2.88l-1.439-1.439
+ l-0.72-1.44l-0.721-1.584l0.721-1.44l1.584-1.149l1.439,1.438l0.576,1.439l1.008,1.439l0.433,1.44l-0.145,1.584l0.72,1.44
+ L50.613,232.038 M-30.746,192.15l-0.433,1.584L-30.746,192.15 M-44.858,216.054l-1.584,1.439l0.576-1.439H-44.858 M74.086,257.094
+ l-1.44-0.288l-1.44,0.288l-1.439,0.432l-1.44-1.44l0.288-1.439l1.44-0.288l1.584-0.432l1.439-0.145l0.576,1.44l0.433,1.439V257.094
+ M64.726,294.678l-1.44-0.288l1.584-0.145L64.726,294.678 M48.166,286.47l-1.009-1.584L48.166,286.47 M38.086,298.709l-0.721-1.439
+ l-1.151-2.88l1.439,0.72l1.152,1.439v1.44L38.086,298.709 M29.302,288.774l-1.152-1.44l-0.288-1.439l-0.288-1.584v-1.44l1.44,1.44
+ l0.576,1.439l0.144,1.584l-0.288,1.44H29.302 M26.854,289.782l-0.432-1.439l-1.44-1.152l-0.144-1.44v-1.439l1.439,0.72l1.152,1.584
+ l0.288,1.44l-0.288,1.439L26.854,289.782 M19.365,294.534l0.433-1.439l0.72,1.439H19.365 M-4.106,256.085v-1.584l0.864,1.584
+ H-4.106 M-58.683,280.278l-1.439,1.008l-1.584-0.432l0.72-1.44l1.584-0.576L-58.683,280.278 M57.958,297.414l0.287-1.439
+ l-0.432-1.44l-1.44-0.144l-1.439,1.008l-0.288,1.439l0.288,1.584l1.439,0.576L57.958,297.414 M26.998,284.31l0.287-1.44
+ L26.998,284.31"/>
+
+ <polyline id="polyline3459" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 195.046,491.526 195.046,490.806 196.63,489.509 197.926,488.071 199.51,488.214 200.949,489.509 202.39,490.229 203.974,490.519
+ 205.413,490.95 206.998,490.229 207.142,488.647 208.582,488.214 209.014,486.774 207.573,485.767 205.989,484.612 204.55,485.046
+ 203.109,484.903 201.67,483.751 200.518,482.312 198.934,482.743 197.493,482.312 198.934,481.878 200.373,481.589
+ 201.958,482.886 203.397,483.606 204.838,482.886 206.422,482.454 207.861,483.03 209.302,483.896 210.741,484.038
+ 212.037,482.454 213.621,482.599 215.205,481.733 214.63,480.294 215.062,478.71 216.502,478.854 217.941,478.567 218.949,477.126
+ 220.39,476.55 221.397,475.11 222.838,474.103 223.989,472.663 223.126,471.222 222.405,469.64 220.966,468.198 219.525,467.19
+ 218.086,465.749 216.646,465.749 215.062,465.171 213.621,465.749 212.182,466.323 211.894,467.767 210.453,467.909
+ 209.59,469.351 208.149,470.214 206.71,468.774 205.126,468.917 203.686,469.927 204.262,468.487 204.838,466.901 203.254,467.19
+ 201.813,468.487 200.518,469.927 198.934,471.366 197.493,471.942 194.613,474.245 193.174,474.819 191.878,476.405
+ 190.582,477.847 189.142,478.71 190.006,477.126 191.445,475.976 191.878,474.534 193.462,473.237 194.901,471.798
+ 196.342,470.499 197.926,469.206 199.222,467.767 200.229,466.183 200.949,464.741 201.813,463.304 202.245,461.862
+ 202.821,460.421 203.109,458.983 201.67,457.687 200.086,457.397 198.646,458.118 197.781,459.702 197.205,461.144
+ 195.766,461.431 194.182,461.862 192.741,462.294 191.302,462.581 189.718,462.729 188.277,463.444 187.558,461.862
+ 188.998,461.286 190.438,461.144 192.021,460.71 193.462,460.278 195.046,459.413 195.766,457.827 195.909,456.39 194.47,455.526
+ 193.029,454.519 191.59,453.798 190.006,453.222 188.565,452.647 187.126,453.366 185.542,452.499 184.102,452.358
+ 182.518,452.069 181.077,451.927 179.638,452.214 178.197,452.499 178.773,451.065 180.214,450.054 181.653,450.054
+ 183.237,450.198 183.813,450.341 186.838,450.341 187.558,448.901 185.974,447.462 187.558,448.323 188.134,449.767
+ 189.573,450.341 191.157,450.487 192.598,451.206 194.037,452.358 195.478,453.509 197.062,454.085 198.502,454.374
+ 199.941,453.942 201.382,453.509 202.821,454.229 204.405,454.085 205.558,452.647 206.998,452.069 208.294,450.487
+ 207.861,449.046 207.142,447.606 205.989,446.022 204.55,446.312 204.693,444.87 203.109,444.151 201.67,444.729 202.966,443.144
+ 204.405,441.702 204.838,440.263 203.397,439.253 201.958,439.253 200.373,439.11 198.934,438.245 197.781,436.663
+ 196.342,435.511 194.758,435.655 193.317,435.655 191.878,436.085 190.438,434.935 188.854,434.358 187.413,435.077
+ 186.405,433.495 184.966,433.495 183.382,434.79 184.39,433.351 185.829,433.065 187.27,433.782 188.854,433.64 190.294,434.069
+ 190.869,432.487 191.733,433.927 193.174,434.647 194.758,434.647 196.197,434.79 197.638,435.511 199.222,436.95 200.661,437.815
+ 202.245,438.103 203.686,437.815 204.693,436.374 204.117,434.79 203.254,433.351 202.966,432.917 201.382,432.198
+ 200.373,430.759 199.941,429.175 198.357,428.312 196.918,427.015 195.478,425.573 193.894,424.995 193.029,426.581
+ 192.741,425.144 191.302,424.421 189.861,423.126 188.277,423.271 187.846,424.71 187.27,423.126 185.829,422.694 184.39,422.405
+ 183.237,423.847 183.094,425.286 183.813,426.729 182.373,426.581 182.518,428.022 181.077,427.591 179.638,427.155
+ 179.35,428.599 178.918,430.038 178.773,428.599 178.918,427.155 177.478,425.722 177.478,424.278 177.621,422.694
+ 177.909,421.253 177.478,419.815 176.758,418.374 175.317,418.229 175.317,419.671 174.021,418.229 172.582,417.077
+ 171.285,418.519 171.43,419.958 171.718,421.397 171.142,419.958 170.134,419.671 170.565,418.085 170.277,416.647 168.838,416.79
+ 168.55,418.229 167.974,416.79 167.542,418.229 168.693,419.815 169.846,421.253 171.285,422.694 172.726,423.847 173.878,425.286
+ 174.453,426.87 174.598,428.312 175.317,429.749 172.438,432.63 173.302,431.19 173.157,429.749 173.157,428.312 172.582,426.87
+ 171.861,428.312 170.277,429.606 171.43,428.163 171.861,426.729 172.294,425.144 170.854,423.702 169.413,422.694
+ 168.405,421.253 166.821,421.976 166.533,424.854 166.102,426.438 165.67,427.878 165.382,429.319 165.67,430.901 164.806,429.462
+ 163.51,428.022 161.926,429.03 160.918,430.472 159.478,430.901 159.046,432.343 158.325,433.927 156.741,432.774 157.317,431.331
+ 157.462,429.897 158.325,428.454 158.325,426.87 158.037,425.431 158.037,423.847 158.325,422.405 157.894,420.966
+ 158.758,419.386 158.758,417.942 157.894,416.358 156.453,415.065 155.302,416.499 154.006,418.085 152.854,419.526
+ 151.989,422.405 151.701,423.847 150.262,422.694 149.686,421.253 148.821,422.694 148.245,424.136 148.102,425.573
+ 147.813,424.136 148.102,422.554 148.39,421.11 148.102,419.671 148.102,416.647 146.661,417.511 145.222,418.519 143.638,418.663
+ 142.197,419.095 140.758,420.103 141.766,418.663 143.205,417.798 144.789,417.222 146.229,416.214 147.67,415.065
+ 148.966,413.622 149.829,412.183 150.405,410.599 148.966,409.733 147.382,410.599 147.237,409.155 145.798,409.155
+ 145.077,407.573 143.638,406.569 142.197,405.562 139.317,404.405 139.029,405.847 138.598,407.431 137.157,408.729
+ 136.294,410.312 136.149,411.749 135.43,413.19 134.422,414.63 133.989,416.069 134.134,414.63 134.854,413.19 135.718,411.749
+ 135.43,410.163 135.718,408.729 137.302,407.573 138.021,406.136 137.733,404.694 137.733,403.687 137.59,403.542 136.149,402.819
+ 134.565,402.39 133.126,402.679 131.829,404.118 130.821,405.562 129.382,405.987 127.941,405.847 126.357,407.144
+ 124.918,408.151 123.478,407.573 124.054,405.987 124.197,404.554 123.621,402.966 122.182,402.966 120.741,403.976
+ 119.302,405.413 117.718,406.569 119.157,405.126 120.598,403.687 120.741,402.103 119.302,401.237 117.861,401.095
+ 116.422,400.95 114.981,401.386 113.542,400.374 112.102,399.942 110.518,399.655 109.077,399.222 107.638,399.077
+ 106.054,398.499 104.613,398.935 103.462,400.374 102.453,401.815 103.317,403.253 102.741,404.839 104.182,405.562
+ 105.046,406.995 106.485,407.722 108.069,407.573 106.485,408.151 105.046,407.722 103.605,406.854 102.166,407.722
+ 100.582,408.438 97.701,410.454 96.117,410.89 94.678,410.741 91.798,410.454 90.214,410.454 88.773,409.733 88.773,408.294
+ 88.342,406.71 86.901,405.702 85.75,404.263 84.31,402.966 82.869,402.245 81.718,403.827 80.422,402.245 79.701,400.808
+ 79.413,400.663 79.27,400.663 78.981,400.808 77.686,399.366 76.245,399.077 75.958,397.64 74.518,396.198 73.222,394.612
+ 71.781,394.323 70.342,394.472 68.758,394.901 67.317,395.19 65.878,395.767 65.59,397.206 64.149,397.927 63.573,399.511
+ 63.573,400.95 62.422,402.39 63.142,403.976 64.582,404.405 65.014,405.847 64.726,405.987 63.285,404.983 61.701,404.405
+ 61.701,405.847 62.565,406.71 64.149,408.007 62.565,407.862 61.558,407.144 60.262,407.573 60.262,409.015 59.974,410.454
+ 61.126,411.897 62.71,411.897 61.846,413.331 62.71,414.917 64.006,416.358 65.445,416.499 67.029,417.222 66.31,418.808
+ 65.302,420.245 63.861,421.11 63.142,419.671 61.701,420.39 61.27,421.976 61.126,420.39 61.701,418.95 61.413,417.511
+ 60.838,416.069 59.974,414.487 58.533,413.046 57.094,412.759 57.237,414.198 57.525,415.782 58.39,417.222 58.39,420.245
+ 59.542,421.687 58.102,420.245 57.958,418.808 57.958,417.222 56.949,415.782 56.518,414.343 56.373,412.759 55.798,409.878
+ 55.798,409.304 54.934,407.862 53.35,407.286 52.773,405.847 51.189,405.413 49.75,406.854 50.037,408.294 48.453,408.438
+ 48.166,410.022 49.605,410.741 50.758,411.03 51.189,411.175 52.63,412.183 51.189,411.606 49.75,411.462 48.453,411.897
+ 48.31,413.331 48.021,414.917 48.31,416.358 48.886,417.798 50.037,419.386 48.453,420.103 47.59,418.519 46.869,417.077
+ 45.285,416.935 43.989,415.351 42.55,416.214 42.262,417.798 41.397,419.237 41.254,420.679 40.102,421.827 40.245,422.263
+ 40.533,425.144 40.678,426.729 40.678,428.163 40.966,429.606 41.686,428.163 42.693,426.581 43.701,425.144 45.142,426.007
+ 43.989,427.591 43.701,429.03 45.142,428.599 46.582,429.319 47.157,430.759 45.718,430.759 44.134,431.479 45.142,432.917
+ 46.726,432.63 46.006,434.069 47.014,433.495 47.733,434.935 49.174,435.077 50.613,434.935 49.174,435.942 48.166,437.382
+ 49.605,437.815 51.046,437.815 52.485,438.245 52.63,439.687 52.342,441.271 53.205,442.71 53.205,444.151 53.062,445.589
+ 53.638,447.171 53.638,448.612 52.054,450.054 53.493,451.206 53.205,452.647 52.918,452.935 52.63,453.077 53.205,454.519
+ 51.766,454.519 53.205,455.958 51.766,456.966 51.478,458.405 52.918,459.987 51.478,461.431 50.758,462.87 49.317,463.304
+ 47.733,462.438 47.878,463.878 46.438,465.171 46.582,466.612 45.142,466.612 44.565,468.054 44.71,469.495 44.565,469.782
+ 44.277,471.366 44.422,472.808 42.981,473.815 42.405,475.253 42.405,476.694 41.829,478.278 40.39,478.71 40.102,480.149
+ 38.518,478.997 38.229,480.438 36.789,479.862 35.205,478.997 33.766,478.136 34.63,479.573 36.069,480.728 37.51,481.157
+ 36.069,482.022 35.35,483.462 34.342,485.046 34.342,486.485 32.901,486.341 32.037,487.782 30.453,487.495 30.021,488.935
+ 29.733,490.519 29.302,491.958 29.014,493.542 28.726,493.687 27.285,493.11 26.71,494.55 25.126,494.403 23.686,493.687
+ 23.974,495.126 23.974,496.567 24.838,498.005 23.829,499.589 22.39,500.165 21.525,501.606 20.086,501.173 18.502,501.462
+ 18.357,502.903 19.51,504.341 17.926,502.903 16.773,500.022 15.189,499.878 15.334,501.317 16.197,502.759 16.485,504.198
+ 15.046,504.198 13.605,504.485 12.021,504.485 10.582,504.341 9.142,504.341 9.285,505.782 10.149,507.366 11.59,507.798
+ 13.029,507.509 14.47,507.509 13.029,508.229 11.445,508.229 10.006,507.942 8.565,506.501 7.126,506.646 5.686,506.071
+ 4.102,506.071 3.813,507.509 2.518,508.95 1.941,510.39 2.518,511.974 3.525,510.534 3.525,511.974 2.949,513.413 4.245,514.997
+ 5.686,516.005 7.27,516.581 8.71,515.431 10.006,513.989 10.149,515.431 11.59,514.854 13.029,514.997 14.47,513.847
+ 15.766,512.403 16.197,510.821 17.493,509.382 18.502,507.942 19.941,509.382 18.502,508.95 17.062,510.39 16.63,511.829
+ 16.054,513.271 14.613,514.567 14.182,516.005 15.766,515.862 17.205,516.149 15.621,517.013 14.182,516.87 12.741,517.444
+ 13.75,519.03 13.605,520.47 14.47,521.911 15.909,522.919 17.35,523.638 15.909,523.927 14.47,522.919 12.886,521.478
+ 11.302,520.903 9.861,521.765 10.582,523.349 12.166,524.071 13.605,524.646 15.046,525.509 15.766,526.95 14.182,525.942
+ 12.741,524.935 11.302,524.501 9.861,525.366 8.422,524.79 8.998,526.229 10.438,526.517 12.021,526.517 12.886,527.958
+ 11.445,527.526 9.861,526.806 8.422,526.806 10.149,529.687 11.59,530.694 10.149,530.55 10.294,531.989 11.302,533.431
+ 9.861,533.142 8.998,530.263 7.846,531.702 8.422,533.142 8.71,536.022 8.854,537.606 7.989,536.022 7.701,534.581 6.117,534.005
+ 6.117,535.444 7.558,535.444 7.126,536.886 7.558,538.47 5.974,537.317 6.117,538.759 4.966,537.317 4.39,538.759 4.245,540.341
+ 5.829,540.054 4.39,540.919 2.806,539.911 2.518,538.47 1.798,537.03 1.653,535.589 1.653,534.005 1.941,532.567 1.798,531.126
+ 1.941,529.542 1.51,528.103 0.934,526.517 -0.507,525.079 -0.795,523.638 -1.37,522.198 -2.811,520.903 -4.25,520.612
+ -5.69,522.054 -5.979,523.638 -6.698,525.079 -6.843,526.663 -6.267,528.103 -5.259,529.687 -5.114,531.126 -4.826,532.71
+ -4.826,534.149 -5.259,535.589 -5.834,537.173 -5.114,538.612 -4.25,540.198 -3.099,541.927 -2.954,541.927 -1.515,542.214
+ -1.658,543.653 -1.803,543.509 -2.234,542.935 -1.658,544.374 -0.65,544.95 0.789,545.235 1.365,546.821 0.934,546.821
+ 0.214,546.679 -1.227,546.247 -0.795,547.687 -2.234,549.126 -3.675,547.687 -5.114,547.974 -4.826,549.558 -5.979,548.118
+ -7.418,548.981 -6.698,550.421 -5.402,552.005 -6.986,551.286 -7.851,549.702 -9.435,550.854 -10.874,551.286 -12.314,551.142
+ -11.45,552.581 -9.866,553.444 -8.427,553.157 -9.866,554.31 -8.715,555.751 -10.154,555.751 -11.738,555.173 -11.738,556.759
+ -13.179,556.47 -12.458,555.03 -13.467,553.589 -12.026,553.733 -13.179,552.149 -14.618,553.013 -16.059,554.454 -15.771,554.597
+ -17.354,554.597 -17.643,556.181 -16.202,557.046 -17.643,556.47 -18.795,557.911 -18.507,556.47 -19.946,557.333 -21.387,556.612
+ -22.826,555.173 -22.971,553.733 -24.41,552.726 -25.563,551.286 -27.003,551.862 -28.587,550.997 -30.026,550.854
+ -31.467,550.134 -30.171,551.573 -28.587,552.581 -30.026,552.438 -29.738,554.022 -29.45,555.462 -28.011,556.325
+ -26.427,557.622 -24.986,559.062 -23.547,558.919 -23.69,557.478 -22.25,558.774 -20.811,559.638 -22.25,558.919 -23.69,560.071
+ -25.131,559.782 -25.131,561.222 -26.139,559.782 -25.851,561.222 -25.994,562.806 -25.418,565.687 -25.274,567.126
+ -24.843,568.567 -25.706,567.126 -26.282,565.687 -26.715,564.247 -26.858,562.806 -27.866,561.222 -29.019,559.782
+ -30.026,558.341 -30.314,556.759 -30.603,555.317 -31.322,553.878 -31.898,555.317 -32.187,553.878 -33.051,550.997
+ -33.771,552.438 -33.771,553.878 -33.914,555.317 -33.194,556.759 -32.33,558.198 -33.482,556.759 -34.059,555.317
+ -34.059,553.878 -35.498,552.726 -34.635,554.165 -36.074,553.157 -36.219,554.597 -37.658,554.022 -39.242,552.581
+ -40.538,554.022 -42.122,554.165 -43.563,554.886 -41.979,556.038 -40.538,556.325 -39.099,556.325 -37.515,556.47
+ -36.074,557.622 -34.635,558.341 -33.051,558.774 -31.755,560.214 -30.171,560.79 -31.755,560.646 -33.051,559.206 -34.49,559.638
+ -33.914,561.079 -32.475,562.374 -31.898,563.958 -30.458,564.103 -30.171,562.517 -28.73,562.95 -27.29,563.813 -28.73,564.103
+ -30.171,564.966 -29.162,566.403 -27.723,566.981 -26.282,567.413 -26.139,568.854 -27.723,567.413 -29.162,567.126
+ -30.603,566.403 -31.467,567.989 -30.026,568.997 -28.442,569.573 -27.003,570.294 -26.57,571.733 -26.858,572.022
+ -27.146,570.581 -28.587,569.718 -30.171,569.142 -31.61,569.431 -31.322,570.87 -30.458,572.454 -31.755,570.87 -32.042,569.431
+ -32.042,567.989 -32.33,566.403 -33.194,564.966 -34.635,563.813 -34.635,562.374 -35.066,560.79 -35.354,559.349 -36.795,558.054
+ -38.234,556.903 -39.818,557.046 -41.259,556.903 -42.698,556.325 -44.139,555.751 -45.723,555.751 -47.162,556.47
+ -47.307,557.911 -45.866,558.63 -44.427,559.206 -43.851,560.646 -42.41,561.653 -40.826,562.806 -39.387,563.958 -38.954,565.397
+ -37.658,566.839 -36.219,567.989 -34.778,568.997 -36.219,568.278 -37.658,569.286 -38.234,570.87 -37.658,572.31 -36.219,573.03
+ -34.778,574.038 -36.219,573.317 -37.658,572.597 -38.666,571.157 -38.091,569.573 -37.515,568.134 -38.379,566.694 -39.53,565.11
+ -40.538,563.671 -41.979,562.517 -43.418,561.653 -45.003,560.358 -46.299,558.919 -47.738,558.341 -49.322,557.478
+ -49.179,558.919 -47.738,560.501 -49.179,559.638 -49.322,561.079 -48.458,562.517 -49.755,560.935 -50.763,559.495
+ -51.339,560.935 -50.187,562.517 -48.891,563.958 -48.314,565.397 -46.73,566.694 -45.723,568.134 -47.162,569.142 -47.45,567.558
+ -48.458,566.118 -50.042,564.966 -49.322,566.55 -50.763,566.118 -49.755,567.558 -51.339,567.271 -52.347,565.687
+ -53.786,564.821 -54.362,566.263 -53.354,567.702 -52.202,569.286 -51.339,570.726 -52.635,569.142 -54.074,568.134
+ -55.227,566.694 -56.234,565.11 -57.818,566.118 -59.259,566.981 -58.683,568.567 -57.099,570.005 -58.683,568.997
+ -60.122,568.278 -61.274,568.71 -60.555,570.149 -58.971,571.013 -57.53,571.444 -56.091,571.589 -54.65,571.589 -53.066,571.878
+ -51.626,572.454 -50.187,573.03 -48.603,572.597 -47.162,572.597 -45.723,573.173 -44.282,573.173 -42.698,573.606
+ -41.259,573.894 -39.675,574.47 -38.234,575.333 -36.795,576.054 -36.362,577.495 -35.786,578.935 -36.65,577.495 -37.803,576.054
+ -39.242,575.188 -40.683,575.046 -40.538,576.483 -39.387,577.927 -40.826,576.772 -41.402,575.333 -42.843,574.181
+ -44.282,574.038 -45.723,573.894 -47.307,573.317 -48.746,573.173 -50.187,573.894 -51.626,573.03 -53.066,572.454
+ -54.507,572.022 -56.091,572.165 -57.53,571.878 -60.41,570.726 -60.698,572.165 -62.139,571.157 -61.994,572.743 -60.555,573.173
+ -62.139,572.886 -61.851,574.325 -60.41,575.046 -58.971,575.622 -59.402,577.206 -57.963,577.927 -56.522,578.214
+ -55.082,578.935 -55.515,580.517 -55.946,578.935 -57.387,578.356 -58.971,578.79 -59.69,577.206 -59.834,575.765 -61.274,575.333
+ -62.715,574.612 -64.299,574.612 -62.858,575.622 -64.299,575.333 -64.442,576.772 -63.003,577.495 -62.57,578.935
+ -64.011,578.501 -65.45,579.079 -64.011,579.653 -62.57,579.509 -64.011,580.087 -65.45,580.663 -66.026,582.103 -64.587,582.679
+ -63.146,582.966 -61.706,583.687 -60.41,582.103 -58.826,583.11 -57.387,583.829 -55.946,584.55 -55.082,586.134 -54.507,587.573
+ -53.643,588.294 -54.795,588.87 -54.795,587.431 -55.515,585.989 -56.954,584.403 -58.395,583.542 -59.979,583.11 -61.418,584.118
+ -62.858,583.687 -64.299,583.255 -65.883,582.534 -67.322,582.534 -67.61,583.974 -66.171,584.839 -67.61,585.126 -66.171,585.702
+ -67.755,585.847 -69.051,587.286 -69.771,588.726 -71.211,589.013 -71.498,590.454 -70.059,590.743 -68.618,590.454
+ -67.034,590.454 -67.755,591.894 -66.171,592.612 -67.61,592.47 -69.194,592.038 -70.635,591.173 -72.074,591.462 -73.658,591.03
+ -74.954,592.47 -76.395,593.622 -77.69,595.062 -78.986,596.646 -77.402,597.366 -74.522,596.79 -72.938,596.646 -71.498,595.927
+ -70.059,595.782 -68.618,596.214 -70.059,596.935 -68.618,597.653 -67.179,598.087 -65.738,597.942 -64.154,596.646
+ -64.154,595.206 -63.146,593.765 -61.706,592.47 -61.274,593.911 -62.858,594.919 -63.578,596.356 -64.442,597.798
+ -65.307,599.235 -64.442,600.679 -63.003,600.534 -61.563,601.11 -62.715,600.966 -64.154,601.397 -63.578,602.839
+ -63.723,602.981 -63.866,602.981 -65.45,603.413 -66.026,604.854 -65.738,607.733 -66.746,606.294 -66.746,605.573
+ -66.891,604.134 -66.026,602.55 -65.45,600.966 -66.314,599.524 -67.755,598.95 -68.042,600.39 -67.61,601.829 -69.051,601.542
+ -69.051,602.981 -67.61,603.847 -69.051,604.134 -69.771,602.692 -70.635,601.255 -72.074,600.966 -73.515,601.255
+ -74.954,601.542 -76.106,600.103 -77.114,598.663 -76.683,600.103 -78.122,599.382 -77.834,600.821 -76.395,602.118
+ -74.811,603.271 -73.37,603.702 -71.931,604.278 -70.49,604.278 -71.931,604.854 -70.635,606.294 -70.059,607.733 -71.498,606.581
+ -72.938,605.286 -74.379,604.278 -75.963,603.413 -77.259,601.974 -78.698,601.11 -78.986,600.679 -78.986,602.118
+ -80.427,603.413 -78.986,604.565 -77.547,605.142 -79.131,604.854 -80.57,604.854 -82.011,603.702 -83.307,605.286
+ -84.603,606.726 -83.883,608.165 -82.442,607.013 -81.146,608.454 -79.563,609.604 -81.003,609.03 -82.154,607.444
+ -82.874,608.886 -81.435,610.038 -82.874,609.604 -84.458,608.743 -85.034,610.181 -83.595,611.478 -82.442,612.919
+ -81.003,613.927 -82.442,613.495 -83.883,612.054 -85.179,610.612 -86.618,611.478 -85.61,612.919 -87.051,613.206
+ -85.467,613.927 -84.603,615.509 -83.162,616.087 -82.011,617.524 -83.45,616.517 -84.891,616.374 -86.475,616.087
+ -87.482,617.524 -86.042,618.821 -87.482,619.255 -88.923,620.263 -87.482,620.118 -86.042,619.687 -84.603,620.55
+ -83.162,620.839 -84.603,620.692 -84.746,620.692 -84.891,620.55 -86.475,620.403 -87.914,620.692 -89.354,621.847
+ -87.914,621.702 -86.475,621.989 -86.763,622.278 -88.202,622.565 -89.643,622.421 -91.082,623.142 -92.234,624.581
+ -92.522,626.022 -92.954,627.462 -92.666,628.325 -91.946,629.765 -91.082,631.206 -92.522,631.638 -91.082,633.222
+ -92.666,633.079 -93.963,631.638 -93.099,633.079 -94.538,633.366 -92.954,633.509 -92.811,634.95 -91.37,634.95 -89.931,635.382
+ -90.219,636.821 -91.658,636.103 -93.099,635.382 -94.538,635.235 -94.826,636.679 -96.267,638.118 -94.826,637.397
+ -93.387,637.255 -91.946,637.11 -90.507,638.263 -91.946,637.829 -93.387,638.263 -94.826,638.55 -94.25,639.989 -95.69,639.702
+ -95.979,641.142 -94.538,642.581 -95.979,641.573 -96.843,640.134 -98.282,639.702 -98.139,641.286 -97.274,642.726
+ -95.834,643.589 -94.395,644.31 -92.811,645.03 -94.395,645.173 -97.274,643.157 -98.858,642.87 -97.851,644.31 -96.41,644.741
+ -96.41,646.181 -96.267,646.325 -96.555,647.765 -97.994,647.188 -98.57,648.63 -97.131,649.062 -98.57,649.78 -97.131,649.493
+ -95.69,649.206 -94.106,650.067 -95.69,649.927 -97.131,650.503 -97.274,651.94 -95.69,652.806 -97.131,653.382 -98.715,652.374
+ -100.154,651.364 -98.858,652.806 -97.418,653.671 -96.41,655.11 -97.851,654.679 -99.29,654.103 -100.874,654.532 -99.29,655.255
+ -98.715,656.694 -97.274,658.134 -95.834,658.565 -98.715,655.687 -97.131,656.55 -95.69,657.413 -95.259,658.854 -93.818,659.142
+ -93.242,660.581 -94.683,660.87 -94.106,662.454 -92.522,662.597 -92.379,661.157 -90.938,662.31 -89.498,662.597 -87.914,662.454
+ -87.051,663.894 -85.61,664.757 -84.171,664.47 -83.45,663.03 -82.011,663.317 -83.45,664.181 -83.307,665.622 -84.746,666.054
+ -86.187,665.333 -87.626,666.341 -86.187,667.062 -84.746,667.349 -83.307,667.206 -81.866,666.63 -81.003,668.067
+ -82.587,668.214 -84.891,668.214 -86.475,667.206 -87.914,666.483 -89.354,666.772 -87.914,667.349 -89.354,667.206
+ -90.795,666.63 -90.507,668.067 -88.923,667.493 -87.482,668.214 -87.626,669.653 -86.187,669.653 -84.746,669.364
+ -83.162,669.222 -83.595,670.806 -85.034,670.229 -86.618,670.087 -88.059,669.94 -89.498,669.511 -88.49,670.948 -90.074,670.517
+ -91.515,671.382 -90.074,671.524 -89.066,673.11 -87.626,672.821 -86.187,672.39 -85.755,673.829 -87.194,673.542 -88.635,674.403
+ -87.194,674.694 -85.61,674.694 -87.194,674.839 -88.635,676.278 -87.194,676.997 -85.755,676.854 -84.314,676.278 -82.73,676.278
+ -84.314,676.997 -85.755,677.286 -87.194,678.438 -88.778,679.013 -90.219,678.87 -91.658,679.878 -90.219,680.165
+ -88.778,680.454 -87.339,680.165 -85.755,680.022 -84.314,679.589 -82.874,679.302 -84.314,679.878 -85.755,680.454
+ -87.339,680.597 -88.778,681.604 -90.219,680.741 -91.803,680.741 -90.507,682.325 -90.938,683.765 -90.219,684.483
+ -89.643,685.062 -88.49,684.63 -87.051,684.194 -85.61,683.909 -84.026,683.046 -84.026,684.483 -82.587,683.478 -83.019,684.919
+ -84.458,686.067 -83.45,687.511 -82.299,689.095 -81.435,690.532 -80.427,691.974 -78.986,691.255 -79.563,689.813
+ -78.122,690.821 -77.69,689.382 -77.547,687.94 -78.986,687.364 -77.547,686.214 -78.267,684.772 -79.418,683.333 -80.139,681.894
+ -79.994,680.31 -79.563,681.894 -78.555,683.333 -77.114,683.046 -77.547,684.483 -77.114,686.067 -76.395,687.511
+ -74.954,687.222 -73.515,687.364 -71.931,687.364 -73.515,686.646 -74.091,685.206 -73.082,686.646 -71.498,687.222
+ -71.354,685.78 -72.219,684.341 -72.938,682.899 -71.786,684.341 -70.347,685.493 -71.066,684.054 -71.786,682.612 -72.362,681.03
+ -71.498,682.47 -70.059,684.054 -68.618,684.341 -67.179,683.909 -67.755,682.47 -68.763,680.886 -69.194,680.31 -70.202,678.87
+ -68.763,680.31 -67.467,681.749 -66.026,683.046 -66.603,681.604 -67.179,680.022 -66.026,681.462 -64.587,681.894
+ -64.874,680.454 -65.738,679.013 -66.603,677.573 -65.307,679.013 -64.587,680.454 -63.146,680.886 -61.563,680.31 -60.986,678.87
+ -62.427,677.286 -62.715,675.847 -61.851,677.431 -60.41,678.726 -58.826,678.726 -57.387,677.862 -58.971,676.997
+ -58.826,675.558 -57.818,676.997 -56.234,677.286 -54.795,676.134 -53.354,675.847 -54.219,674.403 -55.803,674.403
+ -55.946,673.974 -54.507,673.542 -53.066,673.11 -51.626,671.524 -51.339,670.087 -52.202,668.646 -52.347,667.062
+ -52.202,665.622 -51.482,667.206 -51.051,668.646 -49.61,669.653 -50.33,668.214 -48.891,668.067 -49.034,666.63 -50.042,665.046
+ -50.475,663.604 -50.763,662.165 -49.755,663.604 -48.171,663.462 -48.891,664.899 -47.45,664.612 -46.011,664.325
+ -46.587,662.886 -45.146,664.038 -45.003,665.622 -43.563,666.341 -42.122,667.638 -40.538,667.206 -40.106,665.765
+ -41.402,664.325 -41.402,662.886 -40.683,661.444 -40.826,662.886 -40.395,664.47 -39.387,665.909 -38.811,664.47 -38.954,662.886
+ -39.387,661.444 -38.522,663.03 -38.234,664.47 -36.795,664.757 -36.507,663.173 -37.082,661.733 -36.795,660.294 -35.211,659.573
+ -34.635,661.013 -34.059,662.454 -33.914,664.038 -33.771,662.454 -34.202,661.013 -33.482,662.454 -32.618,661.013
+ -32.618,662.454 -33.051,663.894 -32.042,662.454 -31.755,663.894 -30.314,662.886 -29.738,664.325 -28.874,662.886
+ -29.019,661.444 -29.162,661.157 -30.171,659.718 -30.458,658.278 -29.307,659.718 -28.587,661.157 -27.435,662.741
+ -25.994,663.462 -25.563,662.022 -24.41,660.438 -25.274,658.997 -23.834,659.718 -22.25,658.854 -22.395,657.413 -23.402,655.974
+ -24.843,654.966 -25.851,653.382 -25.851,651.94 -24.267,651.511 -23.114,652.948 -21.53,653.813 -20.091,654.103 -19.658,655.542
+ -18.219,655.974 -18.219,654.532 -17.643,652.948 -16.635,651.511 -16.202,650.067 -16.635,648.483 -16.49,647.046 -16.49,645.604
+ -15.051,645.173 -14.763,643.733 -13.755,645.173 -12.314,645.749 -11.595,647.188 -11.307,648.772 -9.723,648.341 -8.715,648.919
+ -8.57,648.772 -8.139,648.194 -7.851,647.909 -7.706,647.622 -6.122,647.909 -5.69,646.325 -4.683,644.886 -5.114,644.597
+ -5.834,643.157 -4.25,642.581 -3.963,643.157 -3.818,644.31 -2.379,643.733 -0.795,643.157 -0.938,644.597 -0.65,646.038
+ 0.789,645.749 1.365,644.31 1.798,645.749 1.077,647.333 2.661,647.622 4.102,648.483 3.958,647.046 5.397,647.909 4.821,649.493
+ 6.262,649.927 7.701,648.919 8.277,647.333 8.134,645.894 9.285,644.454 9.861,645.894 11.302,646.47 12.598,645.03
+ 14.037,643.589 15.478,644.022 14.758,642.581 14.758,640.997 16.054,642.438 16.773,644.022 17.638,644.165 18.502,645.749
+ 17.062,645.604 15.621,646.038 14.037,646.614 12.598,647.046 11.302,648.483 12.741,649.638 12.886,651.077 13.317,652.517
+ 14.901,651.94 15.621,650.356 17.062,649.493 15.621,650.935 15.046,652.374 16.485,651.798 18.069,652.374 19.51,652.374
+ 20.949,652.229 20.661,653.671 21.094,655.11 22.533,654.821 23.542,653.382 24.981,654.103 26.422,653.095 26.998,651.653
+ 26.854,650.214 27.285,651.653 28.149,653.095 28.869,654.532 29.733,653.095 30.453,654.532 31.894,654.39 33.478,654.679
+ 34.918,653.813 36.357,652.374 37.653,650.935 36.934,652.517 38.373,652.948 39.813,652.229 41.254,650.79 42.693,650.214
+ 42.693,649.349 43.27,649.206 44.71,649.206 46.149,648.63 46.438,647.188 47.878,647.333 48.453,645.894 49.894,646.325
+ 50.47,644.886 51.909,644.454 52.63,643.013 54.069,643.444 55.51,643.444 57.094,643.013 58.533,642.87 59.974,643.589
+ 61.413,642.149 62.854,641.142 62.422,639.558 61.846,638.118 63.43,638.403 63.861,636.966 62.854,635.524 63.43,634.087
+ 64.869,633.366 64.438,634.95 64.582,636.39 64.294,637.829 65.014,639.413 66.166,640.854 64.726,641.431 64.726,642.87
+ 66.166,643.157 67.029,644.597 68.47,645.03 69.909,646.038 71.493,645.317 71.493,643.878 71.926,645.317 72.214,646.757
+ 73.653,645.894 73.222,644.454 74.661,645.462 74.806,645.317 75.67,643.733 76.678,644.165 76.533,645.604 77.542,647.188
+ 78.981,646.614 80.422,646.47 81.43,647.909 82.869,648.054 84.453,647.188 85.894,646.899 86.613,648.483 88.197,647.478
+ 88.63,648.919 90.214,648.054 91.653,649.493 93.094,649.493 94.245,648.772 95.829,649.349 97.27,650.067 98.71,648.919
+ 100.149,649.349 101.733,648.919 103.174,647.765 104.613,647.478 104.901,646.038 105.621,647.478 107.205,646.757
+ 108.646,646.181 107.493,644.741 108.934,644.165 110.086,645.604 111.525,645.173 111.382,643.589 112.821,644.454
+ 114.262,644.022 115.701,643.589 114.981,642.005 116.422,642.581 116.998,644.022 118.438,643.733 119.014,642.294
+ 118.438,640.71 119.878,641.431 121.462,641.718 121.605,640.278 122.47,641.718 122.325,640.278 123.766,639.702 125.205,639.847
+ 126.646,640.278 127.365,639.847 127.653,639.989 128.373,640.278 129.813,639.271 128.373,638.403 126.789,638.263
+ 125.35,637.542 123.909,636.821 122.47,635.958 121.029,634.95 120.166,633.509 118.582,632.214 117.861,630.772 116.854,629.333
+ 115.413,629.188 115.989,627.604 114.55,627.462 113.109,627.462 111.67,627.604 110.086,627.751 108.646,627.894 107.493,626.454
+ 105.909,625.878 104.47,626.165 103.317,627.604 102.598,628.47 101.157,628.325 101.302,627.751 100.582,626.597 98.998,626.454
+ 98.277,624.87 96.693,623.573 98.134,623.862 99.718,624.726 101.157,625.444 102.598,625.444 104.037,624.87 105.478,624.726
+ 107.062,625.302 108.502,625.733 109.941,624.581 109.222,623.142 107.781,622.854 106.197,622.134 104.758,621.702
+ 103.317,621.271 101.733,620.981 100.294,619.687 100.006,618.103 98.565,617.671 96.981,617.095 98.565,616.95 100.006,617.524
+ 101.445,617.671 103.029,616.95 104.47,615.942 105.766,614.356 105.478,612.919 105.046,611.478 106.485,612.63 107.926,613.062
+ 108.502,611.622 108.502,613.062 108.789,614.501 110.373,615.079 111.813,616.229 113.254,616.374 114.838,616.374
+ 116.277,616.229 117.718,615.942 118.438,615.798 119.445,614.356 120.886,614.501 121.462,613.062 120.886,611.478
+ 120.021,610.038 118.438,609.173 116.998,608.743 115.558,607.589 114.838,606.149 113.397,604.565 111.958,604.278
+ 110.373,604.134 108.934,603.126 110.373,603.702 111.813,603.847 113.397,603.989 114.838,603.126 113.974,601.687
+ 113.397,600.247 112.966,598.806 111.525,597.798 112.533,596.214 112.533,594.772 112.966,596.214 113.397,597.653
+ 114.838,599.095 114.838,600.679 115.27,602.263 115.701,603.702 115.558,605.142 115.846,606.726 117.285,607.733
+ 118.869,607.013 119.878,608.454 121.317,610.038 121.75,610.899 122.325,612.341 122.47,613.782 123.766,615.222 125.205,615.222
+ 124.773,616.663 124.773,618.103 125.062,619.542 125.062,621.126 124.197,622.565 123.766,624.005 123.621,625.589
+ 123.621,627.03 124.054,628.47 124.918,630.054 125.638,631.495 127.077,632.356 128.661,632.935 130.102,631.782 130.678,630.341
+ 130.966,628.899 132.405,628.325 131.829,629.188 131.542,630.63 130.966,632.214 131.254,633.653 132.693,633.366
+ 133.413,634.806 134.854,634.806 135.43,633.366 135.718,631.927 135.43,630.483 135.285,628.899 136.726,628.181 137.302,626.743
+ 135.861,626.454 137.302,625.157 135.718,624.581 137.302,624.726 138.741,623.573 138.31,622.134 139.894,621.847
+ 140.182,618.966 138.598,618.534 137.157,618.821 136.294,620.263 136.006,618.821 136.438,617.382 137.878,616.517
+ 139.317,615.798 140.901,615.079 139.317,614.214 137.878,615.509 136.438,616.087 136.869,614.646 138.31,613.927
+ 136.869,613.638 135.285,614.214 136.294,612.772 137.733,611.765 138.453,610.181 137.157,608.743 136.726,607.157
+ 135.573,605.718 134.134,605.573 135.285,604.134 133.989,602.692 133.126,601.11 132.838,599.671 131.397,598.806 130.39,599.095
+ 129.958,599.095 128.373,599.813 126.934,600.966 128.086,599.524 128.806,598.087 127.365,596.935 128.806,597.366
+ 130.245,598.087 131.829,598.087 133.27,596.79 133.846,595.349 132.693,593.765 132.117,592.325 130.678,591.317 129.094,591.894
+ 127.653,591.751 126.214,592.47 126.502,591.03 125.062,590.454 126.502,589.733 124.918,588.438 123.478,586.997 124.918,588.149
+ 126.502,588.294 127.222,589.878 128.661,590.886 130.102,590.454 131.542,590.454 133.126,590.743 134.565,590.165
+ 134.998,588.726 133.558,587.862 132.405,586.278 131.397,584.839 129.958,584.263 128.518,584.981 127.077,583.974
+ 125.493,583.542 124.342,584.981 124.918,583.542 124.485,582.103 125.926,582.534 127.365,583.397 128.806,584.118
+ 130.39,582.821 128.806,581.671 128.086,580.229 128.661,578.79 128.806,580.229 129.525,581.671 131.109,582.39 131.397,583.974
+ 132.838,584.692 134.277,584.263 135.718,582.966 137.302,582.821 138.741,583.11 138.886,581.671 138.886,580.229
+ 138.598,578.646 138.021,577.062 138.166,575.622 139.029,578.501 139.605,580.087 139.317,581.524 140.758,582.966
+ 141.478,581.524 142.773,580.087 144.357,579.798 144.646,581.382 146.229,582.247 146.949,583.687 147.813,585.126
+ 149.254,586.134 150.693,585.847 149.254,586.421 147.813,585.989 147.094,584.403 146.086,582.966 144.646,581.671
+ 143.205,582.821 143.493,584.263 144.214,585.847 144.789,587.286 145.653,588.726 147.094,590.022 148.245,591.604
+ 149.829,591.173 151.27,590.743 152.71,590.31 154.149,590.31 155.59,590.743 157.174,591.462 158.037,590.022 158.758,588.87
+ 158.901,587.286 160.342,586.71 160.773,585.271 159.189,584.839 158.037,583.397 157.029,581.813 155.878,580.374
+ 154.438,581.095 154.438,582.679 154.006,584.118 153.718,585.702 153.718,584.118 154.149,582.679 154.006,581.235
+ 153.142,579.798 154.294,578.214 155.59,576.772 154.149,575.333 155.59,575.765 157.029,575.478 157.75,574.038 157.605,572.597
+ 158.037,574.038 159.621,574.759 161.062,575.333 162.502,575.911 163.798,577.495 163.653,578.935 164.229,579.942
+ 164.806,580.517 166.245,581.095 167.829,580.374 169.126,578.935 169.126,576.054 169.27,574.47 167.686,575.188 166.245,574.47
+ 164.806,573.03 163.365,573.03 161.781,572.165 163.365,572.597 164.373,571.013 164.806,569.573 165.237,567.989 165.813,566.55
+ 164.373,565.687 162.934,566.403 161.493,566.839 160.342,565.397 160.342,563.813 161.062,565.397 162.646,566.118
+ 164.086,565.11 165.525,565.255 166.966,565.829 166.821,564.39 166.245,562.806 165.237,561.366 164.949,559.927 163.51,558.774
+ 161.926,557.622 163.365,558.63 164.949,559.495 164.806,558.054 164.086,556.47 165.525,557.911 166.102,559.495 166.102,560.935
+ 166.966,562.374 168.405,563.382 169.989,564.103 169.989,564.247 169.413,565.974 170.854,567.126 172.149,565.687
+ 172.869,564.103 173.733,561.222 173.878,559.638 174.021,558.198 174.31,556.759 174.166,555.317 173.59,554.454 172.149,554.022
+ 170.565,552.726 169.126,552.149 167.686,551.862 166.678,550.421 168.117,551.718 169.701,551.862 171.285,552.581
+ 172.726,553.157 174.166,552.581 175.75,552.149 175.894,550.71 175.317,549.413 173.878,549.558 172.582,548.118 172.438,549.558
+ 171.573,548.118 169.989,547.255 169.846,545.813 170.565,544.374 168.981,544.229 167.542,543.509 168.981,543.942
+ 170.565,543.798 170.422,542.358 170.134,540.774 168.55,541.782 168.55,540.341 168.117,538.759 169.701,538.759 169.846,537.317
+ 171.285,538.759 171.285,540.341 172.869,540.485 174.31,539.622 175.75,539.478 174.31,538.47 172.869,537.751 174.31,538.038
+ 175.75,538.759 175.894,537.317 177.334,537.606 178.773,538.759 179.205,538.759 180.502,539.911 181.653,541.349
+ 183.094,542.935 184.533,543.222 185.542,541.638 186.117,540.198 186.55,538.759 186.838,537.317 187.27,535.878 186.117,534.294
+ 184.678,534.005 184.245,535.444 182.806,534.726 183.094,533.286 181.653,531.989 180.214,531.413 181.653,531.413
+ 180.357,529.974 179.062,528.39 180.646,529.687 181.653,528.247 180.214,526.806 181.653,526.374 183.094,526.806
+ 183.525,527.095 184.245,528.534 185.109,529.974 186.55,529.542 186.405,528.103 185.829,526.663 184.39,525.509 184.102,525.366
+ 183.094,523.782 182.949,522.341 181.51,521.911 179.926,523.638 178.918,525.079 178.918,526.517 177.334,527.382
+ 178.485,525.942 177.046,525.222 177.478,523.782 178.918,522.341 179.35,520.903 180.934,519.751 181.653,518.31 182.373,516.726
+ 183.237,515.286 184.245,513.847 185.542,512.403 186.117,510.966 186.262,509.526 187.701,508.517 189.142,509.235
+ 190.006,509.095 190.726,507.653 190.869,506.935 191.157,505.927 191.445,505.782 192.886,505.638 194.47,504.774
+ 194.901,503.333 193.462,503.333 192.166,504.774 193.174,503.333 193.75,501.894 194.037,500.454 195.189,498.87 195.621,497.431
+ 197.205,495.989 198.646,496.997 200.229,497.431 201.67,495.989 202.821,494.403 202.966,494.263 203.542,492.821
+ 202.102,491.526 200.661,491.671 199.222,491.382 197.638,491.813 196.485,491.958 196.197,492.103 195.478,492.966
+ 195.334,494.403 195.334,494.694 193.894,493.397 194.758,491.958 194.901,491.382 "/>
+
+ <path id="path3461" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M342.066,904.517l-1.438-1.008l-1.295-1.441l-1.297-1.582l-0.143-1.008l-1.441,0.287l-1.439,0.291l-0.432,1.439l-0.145-1.439
+ l0.145-1.441l0.141-0.574h0.434l-0.143,1.439l1.439,0.145l1.584-0.291v-1.008l-0.432-0.576l-0.145-1.584l-1.439,0.721l-0.432-1.439
+ l1.439,0.141l0.145-1.439l-0.145-1.441l-0.291-0.576l-1.438-1.295l-1.586-0.576l-0.717-1.15l0.287,1.584l-1.584-0.574l-0.432-1.443
+ l0.145-1.584l-0.289-1.152l-0.434-1.584l1.584,0.867l0.865-1.154l-1.012-1.438l-1.582-1.443l-0.141,1.584l-0.578-1.439l0.145-1.584
+ l-0.289-1.439l-0.289-1.586l-0.289-2.879l0.145-1.439l1.293,1.439l1.441-0.289h1.008v-0.143l1.441,1.295l0.432-1.152l-0.143-1.584
+ l0.574-1.439l1.441-1.295l1.582,0.863l-0.572,1.441l1.439-0.143l1.008,1.584l-0.289-1.584l-0.143-1.01l-1.443-1.295l-0.287-1.439
+ l0.436-1.439l0.287-0.434l1.439-0.719l1.584,0.576l1.152-1.443l1.439-0.287l0.145-0.145 M342.066,904.517l-0.287,1.441
+ l-1.439,0.576l-1.441,0.576v1.439h1.441l0.719-0.143l0.289,0.578v1.438h1.297l0.863,1.439l-1.441,0.291l0.434,1.439l1.584,0.576
+ h1.008l1.439-0.145l1.441,1.008l1.441,1.152l0.863,1.443l1.584,0.432h0.145l1.008,0.143v0.289l-0.576-0.145l-1.584-0.287
+ l-1.439-0.867l-1.441-1.439l-1.295-1.441l-1.439,0.146l-1.586,0.572l-1.441,0.436l-1.008-0.291l-1.439-0.145l-0.432,1.586
+ l-0.289,1.441l0.434,1.15l0.717,1.584l-0.291,1.443l0.148,1.006v0.143l-0.291-0.289l-0.145-0.719l0.145-1.441l-1.443-0.863h-1.441
+ l0.867,1.439l-0.43,1.441l-1.443-0.576l0.291-1.441l-1.441-1.293l-1.441-1.008l-1.293,0.287l-1.586,0.432l-1.443,0.434h-1.438
+ l-1.439,0.867l-0.863,1.438l-0.578,1.439v1.441l1.441,0.576h1.582l0.719,0.289l-1.439,1.008l-1.439-0.432l-1.297-0.287
+ l-0.145-0.146l-0.863-1.439l-1.584-0.434l-1.439,0.576l-1.441,0.289l-1.441,0.576h-1.152l-1.439,0.289l-1.295,0.432l-1.008,0.432
+ l-1.443,0.865l-1.438,1.152l-0.865,1.441v0.145l-1.15,1.439l-1.443,1.439l-1.439,0.867l-1.439,0.717l-1.441,0.291v0.141
+ M305.926,935.188l-0.867-1.008l0.578-0.289l1.438-1.438l1.443-0.436l0.432,1.584l0.43,1.443l1.445,0.141l1.439-0.289l-0.576,0.289
+ "/>
+
+ <path id="path3463" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M662.9,935.188l0.578-0.717l1.008-1.443l1.439-1.439l1.439-1.293l1.152-0.867l0.145-1.439l0.715-1.441l1.01-1.584h-0.717
+ l0.287-1.584l1.443-1.295l1.439-0.289l1.584,0.289l1.008-0.719l0.143-0.143h0.141l0.438-0.291l1.439-1.439l1.291-1.439l1.154-1.441
+ l-1.439-1.01l-0.434-1.439l0.434-1.441l0.861-0.865h-1.438l-1.439,0.576l-1.584,0.436l-1.443,1.148l-0.432,1.584l-1.439,1.295
+ l-1.441-0.574l0.143,1.439l-0.432,1.441l-1.15,1.441l-0.143,0.143l-1.441,0.434h-1.441l-1.439-0.434l-1.441-0.574l-1.443-0.434
+ l-1.582-0.576h-0.287l-0.434-0.289l-1.443-0.863l-1.438-0.867l-1.008-0.717l-1.439-1.443l0.141-1.439l1.152-0.865l0.576-1.438
+ l0.145-1.584l-1.299-1.443l1.445,0.143l1.439,0.578l0.143,1.439v1.584l-1.15,1.584l-0.145,0.867l0.287,0.287l1.01-1.439
+ l0.141-1.443v-1.293l0.146-1.584l0.287-1.441l0.436-1.441l0.719-1.439l0.143-1.439l0.719-1.584l1.441-1.441l1.438-1.15l1.445-1.584
+ l0.717-1.443l1.006-1.439l1.445-0.865l1.15,1.439v-1.439l-0.143-1.439l0.432-1.441l0.432-0.576l0.863-1.441l1.443-0.863
+ l0.432-1.584v-1.441l0.145-0.434l1.439-1.438l1.295-1.439l1.582-1.01l1.441-0.721l0.576-1.295l0.141-0.287l1.154-1.297l0.434-1.441
+ l0.719-1.584l1.438-1.439l-1.291,1.439l-0.576,1.441l0.719,0.436l1.295-1.443l1.293-1.439v-1.441l1.443-1.584l1.439-0.576
+ l0.43,0.143l0.146,0.291l0.576,0.863l1.295-0.719 M756.502,906.388l-1.586-1.295l-1.438-0.863l-1.443-0.434l-1.584,0.719
+ l-1.439,1.008l-1.441-0.143l-1.441-0.719l-1.439,0.719l-1.584-0.289l-1.439,0.721l-1.443,1.439l-1.439,0.289l-1.584,0.578
+ l-1.439,0.141l-1.439-0.719l-1.445,0.578l-1.291,0.574l-1.441,0.143l-1.441-0.289l-1.584,0.289l-1.439-0.143l-1.441-0.145
+ l-1.439,0.145l-1.441-0.289l-1.584-0.145h-1.439l-1.443,0.145l-1.441-0.145h-1.438l-1.584,0.434l-1.439-0.289l-1.443,0.432
+ l-1.439,0.432l-1.584,0.865l-2.879,1.439l-1.443-0.574l-1.438-0.289l-1.439,0.432l-1.586-0.719l-0.291,1.439l-1.438,0.576
+ l-1.439,1.012l-1.441,0.141l-1.586-0.287l-1.439-1.152h-1.439l-1.008,0.145l-1.443,0.43l-1.582,0.434l-1.441,0.432l-1.439,0.867
+ l-1.441-0.146l1.152-1.15l1.148-1.441l0.723-1.439l-1.443,0.719l-1.438-0.576l-0.434,1.439l-0.291-0.143l0.291-1.439l1.441-1.293
+ l1.438-0.146l1.588-0.576l0.143,0.145v1.439l1.438-1.15l-1.148-0.434l1.439-1.15l0.863-0.291l0.721-1.439l1.441-0.289l0.719-1.439
+ l-1.439-1.297l-1.443-1.008l1.008,1.441l-1.438-0.865l0.43-1.439v-1.439l0.291-1.584l-0.719-1.443l-0.721-1.439l0.434-1.584
+ l1.584,0.719l0.287,1.439v-1.439l-0.574-1.439l0.143-0.289l-0.287-1.586l1.439-0.285h1.584l1.008-1.586l-1.439-0.145l-1.441,0.289
+ h-1.443l-1.438-0.289h-1.439l-1.443,0.721l-1.582,0.289l-1.441-0.578l-1.439-1.006l1.439-0.721l1.441-1.295l0.43-1.582l1.443-0.867
+ l1.439-0.576l1.584-1.293l-1.584-0.291l-1.439,0.867l-0.291-1.441l1.443-1.582l0.719-0.721l0.861-1.439l0.723-1.443l0.43-1.584
+ l1.443-1.441l0.285-1.584l0.436-0.719"/>
+
+ <path id="path3465" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M347.398,868.806l0.43,0.143l1.441-0.289l0.289,1.295l-1.012,1.441v1.15l0.146-1.439l1.584-0.145l1.438,0.289l1.441-0.576
+ l1.443-0.143l1.152,1.439l-0.145,1.584l-0.865,1.441l-0.143,1.439l-1.443-0.719v1.441l-0.287,0.432l-1.439-0.717l0.576-1.443
+ l-1.584,0.723l-0.576,0.719l0.432,1.439l0.145,1.582l0.141,1.441l-1.582,0.432l-0.289,0.145h-0.289l0.141,0.863l0.293,1.584v0.291
+ l-1.441,0.719l-1.441-0.143h-1.008v0.287l1.441,0.723l0.143,1.438v0.145l-1.584,0.719l0.721,1.295l0.863,1.439l0.721,1.441
+ l-1.441,1.008l0.289,1.441l1.439,0.863h0.145l0.861,0.867l0.293,1.584l-1.584-0.578v-0.143l-0.291-0.145l-1.148,1.443v0.141
+ l1.439-0.287l1.584,0.145l1.439,0.287l1.295,0.576v0.432l-0.434,0.432l0.574-0.287l0.434,1.008v1.439l-1.439,1.008l1.584-0.287
+ l0.576-0.289l1.443,0.143l-0.436,1.441l0.145,0.143l0.291,0.432l0.57-1.439l1.154-0.432l1.443,0.432l1.582,0.432l1.441,0.291
+ l1.291-1.584l1.445-0.291l0.139-0.143l0.293,0.289l-0.145,1.584l0.145,1.439l-1.439,1.441l-1.297,1.443l1.439,0.861h0.291
+ l1.439-1.008l1.297-0.289l1.439,0.865l1.439,0.291l0.145-0.578l0.287-1.441l0.576-1.439l1.439-1.008l1.586-0.576l1.441-0.721
+ l0.574,1.441l-0.434-0.865l0.578-1.439l1.439-1.439l0.434-1.441l0.432-1.441h0.432l1.443,0.145l1.439,0.145l-1.439,0.287
+ l-1.586,0.721l-0.574,0.863l0.574,1.439l0.289-1.439l0.432-0.863l1.443-0.432l1.439,0.141l1.439-1.439l1.152,1.439l0.145,0.145
+ l0.141,0.432l1.586,0.291l1.439,0.717l1.441,1.008l0.287-0.717l1.441-1.008v0.287l1.148,1.439l1.012,1.01l0.143,1.441l-0.143,0.143
+ l0.865,0.574l1.439,0.434l1.443,0.143l1.438,0.289l0.717-0.432l1.445,0.289l1.439,0.865l-0.432-1.01l-0.432-1.439l0.287-1.439
+ h-0.145l-1.148,0.143h-1.443l0.291,0.143h0.139l-0.43,1.008l-1.439-0.576h-0.576l-1.441,0.721l-1.438,0.576l-0.436-0.145v-0.143
+ l0.865-0.576l-0.43-1.584l1.438,0.434l-1.438-1.584l-1.443,0.576l0.291-1.15l1.582,0.43l1.441,0.721l1.439,0.717h0.576l1.008-0.143
+ l1.443-1.295l1.439-1.152l1.008-0.576l1.584-1.008l0.576-0.432l1.439-1.006l1.439-0.865l1.441-0.867l1.586-0.717l1.439-1.008
+ l1.439-0.723l1.443-0.572l0.43-1.443l0.578-1.441l0.576-1.439l0.141-0.145v-0.143l1.443-1.15l1.582-0.721l1.441-1.439l1.295-1.441
+ l1.439-1.15l1.441-0.576l1.584-1.008l1.293-0.867l1.441-0.717l1.584-0.432l1.441-0.576l1.439,0.287l1.297,0.291l1.584,0.141
+ l1.439,1.152l-1.439-1.008l-1.439-0.287l-1.584,0.717l1.439,1.008l0.145,0.145l1.008,1.584l1.439,1.152l1.439,0.287l0.145-0.143
+ l1.439-0.141h0.432l1.441-0.578l1.441-0.863l1.439-1.01l1.01-1.441l0.863-1.584l0.576-1.438v-0.436l0.145-1.439l-0.434-1.441
+ l-0.576-1.438l0.436-0.723l1.438-0.432l1.441-0.576l1.441-1.008l0.574-0.576l0.576-1.152l0.576-1.584l0.291-1.439l0.432-1.439
+ l0.141-0.867l0.145-1.439l-0.145-1.441l-0.432-1.438l-0.576-1.586l0.576,0.865l0.576,1.439l0.145,1.584l0.289,1.443l-0.289,1.439
+ l-0.432,1.152l-0.145,1.439l-0.721,1.439l-0.863,1.439l-0.145,0.867l1.443-0.291l1.582-0.285l1.441-0.146l1.439-0.863l0.145-1.584
+ l-0.721-1.443l-0.719-1.439l0.434-0.865v-0.43l-0.576-0.867l-0.576-1.584l-2.305-2.879l-0.574-0.576l-1.15-1.438l-0.576-1.443
+ l-0.434-1.441l-0.434-0.719l-1.15-1.439l-0.574-1.439l-0.721-1.584l-0.289-1.441v-0.291l0.719,1.441l-0.287-1.441l-0.578-0.143
+ l-0.289-1.584l-0.289-1.441l-0.719-1.439l0.719-1.439l0.576-1.441l0.578-1.439l-0.434-1.584l-0.574-1.441l-0.146-1.439l0.146-1.443
+ l0.287-1.438l0.289-1.584l1.441-1.152l1.439-1.295l1.439-1.441l1.297-1.439l1.439,1.152l1.441,0.717l1.586,0.434l1.438,0.719
+ l1.441,0.145l1.439,1.293l1.152,1.443l1.441,1.008l1.441-0.146l1.439,0.289l1.584-0.572l1.293-1.443l0.145-1.008l1.152-1.439
+ l0.576-1.439l0.145-1.441l-0.867-1.441l-0.865-1.439l-0.719-1.441l-1.15-1.441l-1.008-1.584l-0.145-0.863l-0.289-1.441l0.145-1.441
+ l-0.289-1.584l-0.721-1.441l0.146-1.584l-1.443-0.285l-0.719,1.439l-0.865,1.439l-1.439-0.145h-1.441l-1.584-0.432l-0.865-1.439
+ l-1.439-0.578l-0.432,0.434l-0.576-1.584l0.719-1.439l1.441-0.289l-1.441-0.434l-1.584,0.865l-0.865-1.439l0.721-1.584
+ l-1.584-0.145l-0.145-1.439l-0.863-1.586l1.152-1.441l1.439-1.15l1.439-0.719l-0.721-1.297h1.443l0.432-1.438l1.584-1.152
+ l1.439-1.008l0.145-1.008l1.439-0.576l0.289-0.146l1.441-0.863l1.584-0.145l0.863-1.439l-1.148-1.439l1.438,0.432l0.289-1.439
+ l1.584,1.008l0.721-1.443l1.582,0.146l1.441-0.578l1.439-0.141l1.584-1.01l1.443,0.434h1.439l1.584-0.719l1.441-0.867l1.439-0.434
+ l1.586-0.717l1.439-0.576l0.432-1.441l-0.289-1.441l-1.582-1.438l-0.145-1.439h1.584l1.439,0.432v-1.568l-0.289-1.441l1.586-0.434
+ l1.584-0.141l0.719-1.586l-0.289-1.441l0.432-1.439l0.434-0.289L492,762.53l1.584-0.432l1.441-0.434l1.584-0.145h0.574l1.441-0.574
+ v-0.865l-1.293-0.863l-1.154,0.43l-1.439-0.576l-1.584-0.719l-1.584,0.578l-1.441,1.439l-1.584,0.721h-1.441l-1.438-0.578
+ l-1.443-0.143h-1.008l-1.584-1.008l0.434-1.439l-0.865-1.443l0.289-1.006l-0.578-0.291h-0.143l-0.863,1.443l-0.721,1.584
+ l-0.143,1.438l-1.584,1.01l-1.439,0.574h-0.145l0.145,1.01l-1.443,0.721l-1.584,0.574h-1.439l-0.287-0.289l-0.145,0.145
+ l-0.863,1.439l-1.441,1.15l-1.295,1.443l-1.008-0.289l0.143,1.439l-1.441,0.721l-1.439,0.432l0.863,1.439l-1.439,0.145l0.576,1.439
+ l-1.439,0.291l-1.154-1.443l-0.143,0.291l-0.145,1.439l-1.582,1.297l-0.721,1.584l-1.438,0.287l-1.154,1.584l-1.295,0.721
+ l-0.143,0.143l0.289,1.441l-0.145,0.863l-0.576,0.289l-0.721,0.289l-0.141,0.145l-0.145-1.295l-2.879,2.592l-0.289,0.143
+ l-0.145,0.145l-0.574,1.295l-1.584,0.717l-1.441,0.867l0.719-1.441v-0.289l-0.289,0.145v0.434l-0.719,1.584l-0.432,1.439
+ l-1.441,0.721l0.863-1.443l0.578-1.584v-0.576h-0.143l-0.291,1.443l-0.717-1.008l0.287-0.146h0.143l-0.719-0.719h-1.439v-0.432
+ l-1.584-1.152l-0.145-1.584l-1.008,1.584l-1.439,0.719l-1.008-0.432l0.143-1.441l-1.441,0.143l-0.287,0.291l-1.584,0.143
+ l-1.584-0.143l-0.578-0.434l-1.439,0.721l-1.441-1.584l-0.143,0.143l-0.721,1.152l0.146-0.291l-0.146-0.143l-0.719,0.434
+ l-1.439-1.152l-0.145-1.439l-1.008-1.441v-1.439l-0.432-1.441l-0.576-1.586l0.576-1.439l-0.721-1.439l-0.289-1.584l-1.582-0.432
+ l0.287-1.439h1.584l-0.289-0.293l-1.582-1.006l-1.152-1.441L420,763.673l-1.584-0.867l-0.432-0.43l-0.143-1.441l-0.291-1.439
+ l-0.287-1.584l-0.432-0.289l-1.012-1.443h-0.141l-0.865-0.141l-0.576-1.441l-1.295-1.443l0.143-1.438l-0.143-1.584l0.863-1.584
+ l-0.141-1.584v-1.441l1.438,0.145l-1.438-1.008l-1.01-1.443v-1.006l1.584,0.576h0.434l1.439-0.867l-0.291,0.434l1.443-1.008
+ l0.287-1.441l0.721-0.576l-0.576-0.434l-1.439-1.291l1.439,0.141l-0.145-1.441l-0.287-1.438l0.432-1.584l1.584,0.143h0.145
+ l-0.291-1.443l0.434-1.584l-0.143-1.438l0.574,0.143l1.441-1.297l-0.867-1.725l1.443-0.719v-0.434l-0.289-1.441l0.289-0.434
+ l0.287-1.584l0.289-1.584l0.145-1.438l0.576-1.299l0.574-1.438l-0.432-1.584l0.287-1.441l-0.43-1.439l1.15-1.584l1.008-0.867
+ l1.439-0.576l1.588,0.291l-1.588-1.15l0.721-1.443v-0.141l0.145-0.146l-1.439-1.006l-1.154-1.584l-0.719-1.297l-0.289-1.441
+ l-1.15-1.438l-1.441-0.432l-1.01-0.293l-1.439,0.293l-1.439-0.434h-0.145l-0.717-0.719v-0.432h-0.145v0.285l-1.439,0.578
+ l-0.867,0.289l-0.289-0.289l-1.582,1.297l-1.441-0.293l-1.441,0.432l0.145,1.443l-1.584-0.436l-0.434-0.139l1.441,1.291
+ l-1.441,0.576l-1.439-0.43l-1.584-0.723l0.432,1.441l-1.441,0.289l-0.719,1.443l1.01,1.295l-0.145,1.438l-1.584-0.285v0.285
+ l-1.008,1.584l1.439,0.291l-0.432,1.441l-1.439,0.289l-1.152,1.584l0.576,0.289l1.439-0.434l-0.576,1.586l0.576,1.439l0.432,1.152
+ l-0.717,1.291l-0.576,1.443l0.141,1.582l0.867,1.443l-0.289,0.717l1.439,1.01h1.441l0.576,1.441l0.432,1.584l-0.432,1.438
+ l-0.721,1.443l-0.574,1.439l-0.145,1.441l0.289,1.584l-0.143,1.584l-0.145,1.439l-1.584,0.291v1.584l-0.865-0.293l-0.287,1.729
+ l-1.152,1.443l-0.145,0.289l-1.008,1.438v1.443l-1.441-0.721l0.146,1.441l-1.443-0.289l-0.432,0.576l0.291,1.439l-0.578,1.441
+ v1.439l-1.582-0.717l0.43,0.863l-1.438,0.289l-0.434,1.441l-0.289,1.439l-1.152,1.439l1.441-0.143l0.434,1.441l-1.588,0.576
+ l0.145,1.438l-1.439,0.578l-1.295-1.297l-1.441-1.293l-0.576-1.008l0.434,1.438l1.295,1.297l0.432,0.719l1.152,1.439l0.143,1.584
+ l0.145,1.443l-1.441,1.584l-1.439-0.146l-0.576-0.141l0.143,1.439l0.434,1.441l0.289,0.576l1.582,0.432l0.145,1.873l0.143,1.582
+ l-0.289,1.443l0.289,1.438l0.721,1.584l1.441,1.297l-1.441-0.432l-1.441,0.289v1.439l0.289,1.441l0.432,0.143l0.576,1.441
+ l1.295,1.584l-0.576,0.863l0.145,0.865l0.432,1.584l0.434,1.441l0.863,1.441l0.865,1.439l0.434,1.439l1.439,0.576h0.578
+ l1.584-0.145l0.863,1.584l1.008-1.439l1.441-0.434l1.008,1.586l1.586,0.719l1.438,0.289l1.584,0.719l-0.289,1.441l1.152,0.576
+ l0.865-0.291h1.441l0.863,1.441l0.719,1.01l1.441,1.15l-1.441-0.865l1.441,1.297v1.439l-0.287,0.145l-1.01,0.863l-0.289,1.584
+ l-0.719,1.443l-1.01,1.439l-0.574,1.439l-1.584-0.432l0.574,1.439l1.439-0.721l1.588,0.145l-0.578-1.584l1.586,0.721l0.287,1.439
+ h-1.441l1.584,0.145l-1.008,0.576l-1.439,0.287l1.439,1.152l-1.439,1.008l-0.721,1.152l-0.287,1.439l-1.152,1.584l0.289,1.441
+ l-1.295-1.441l-0.289-1.584l-1.295-1.439l0.863,1.439l-0.574,1.584l-0.721,1.297l0.865,1.584l-1.439,0.145l-0.574,1.439
+ l-1.443-0.289l0.863,1.441l-1.439,1.293l-1.439,0.145l-0.719,0.145l-1.584,0.141l-1.586,1.295l1.443-0.861l1.584-0.291l1.439,0.576
+ l1.584,0.863l-1.584,1.295h-3.023l0.863,0.146l1.584,0.287l1.439,0.576l-0.287,1.441l1.439,1.295l0.287,1.439l-1.006,1.584
+ l-0.289,0.145l1.439,1.295h-0.863l-1.441,0.289l0.434,0.289l1.439,1.008l0.867,0.865v1.584l0.287,1.439l0.432,1.439l-0.143,1.729
+ l-0.574,1.439l0.287,0.145l0.432,1.439l0.287,0.291l0.434,0.289l0.145,0.432l-0.578,1.441v0.143l0.434,1.439l0.865,1.441
+ l-0.719,1.439l-0.578,1.441v1.586l-0.287,0.43l-0.143,1.441l-0.145,1.584l0.289,1.15l-0.574,1.441l-1.441,1.008l-1.441-0.432
+ l-0.143,0.432l-1.584,0.434l-1.439,0.434l-1.441,0.717l-1.441,0.145l-0.576,0.289l-1.441,0.432l0.146,1.152l-0.434,1.439
+ l-1.441-0.432l-0.576,0.719l-0.865,1.584l-0.432,0.865v1.584l0.432,1.443l1.441,1.438l0.287,1.443l-0.572,1.439l-0.145,0.143
+ l-0.576,0.574l-1.584-0.287l-1.584,0.287l-0.719,0.291l-1.441,0.863l-1.584,1.008l-1.439,0.291h-1.584l-1.441-0.721l-0.865-1.584
+ l0.865-1.439l-1.152-1.439l-0.719-1.443l-1.441-1.148l-1.332-1.594l-0.432-0.576l-1.441-1.441l-0.865-1.439l1.443,0.143
+ l1.439,0.289l-0.432-1.152l-1.443-1.15l0.721-1.441l1.439-0.143v-1.441l-1.154-1.439l-0.715,0.287l-1.443-1.008l-1.15-1.584
+ l-0.719-0.576h-0.145l-1.439-1.439l-1.439-1.152l-1.008-1.584l-0.436-1.439l-0.717-1.441l-1.439,0.434l-0.721-1.441l-0.145-1.584
+ l-0.291-0.289l-0.717-1.439h-1.439l1.008-1.441l-1.584-1.008l0.287-1.441l0.291-2.877l-0.291-1.584v-1.441l-1.582,0.719
+ l-1.441,0.289v-1.441l-0.145,1.441l-1.439-0.434l0.432-1.441l-1.439,0.578l-0.432-1.441l-0.289-1.584l-0.434-1.439l-0.432-1.441
+ l-0.721-1.439l-0.863-1.441l0.432-1.584v-0.289l-1.439,0.145l-1.441-1.008l-1.008,0.287l-1.295-1.439l-0.432-1.439v-1.584
+ l-0.576-0.867l-0.432-1.584l-0.721-1.439l0.721-1.441l0.574,1.441v-1.441l-1.295-0.865l-0.576,0.289l-0.289,1.584l0.289,0.721
+ l1.008,1.584v1.441l-1.439-0.723l0.143,0.723l-0.43,1.439l1.438,1.295l0.578,1.441l-1.152,1.438l-0.863,1.443l0.141,1.725h-1.584
+ l-0.291,1.297l-1.438-0.865l-1.295-0.287l-0.721-0.867l0.721,1.152l0.143,1.297l-1.441,1.15l-1.439,0.863l1.008,1.441l-1.152,0.576
+ l-1.439,0.289l0.576,1.586l-1.439,0.861l-0.291,1.441l-1.295,1.443v1.008l-1.295,1.438l-1.439,1.297l-1.441,1.152l-1.008,0.289
+ h-0.145l-1.727,1.727l-1.441-0.291l-1.008,1.584l-1.441-0.143l-1.584,0.143l-1.439-0.287l-1.441-0.291l-1.441,0.576l-1.582-0.863
+ l1.008-1.584l1.582-1.15l-0.287,0.143l-1.439,0.719h-1.441l-1.582-0.287l-1.297-0.576l-1.441-0.578l-1.15-1.438h-1.439
+ l-1.586-1.152l-1.152-1.439l-0.574-1.584l0.432-1.443l0.576-1.441l-0.721-1.439l1.439,0.863l0.434,1.443l1.01-1.584l1.439,1.01
+ l0.576,0.432h1.584l-1.441-0.432l0.723-1.443l1.438-0.719l1.727-0.867l-1.727,0.576l-1.586,0.721l-1.148,1.439l-0.145-0.143
+ l-0.141-1.441l-1.443-0.717l1.152-1.443l1.008-1.438l1.295-1.01l1.586-0.721l-1.586,0.434l-1.441,0.865l0.863-0.721l-1.293-1.439
+ l0.867-1.441l0.141-0.432l1.584-0.863l-1.439-0.291l-0.721,1.443l-0.572,1.438l-1.443,1.008l0.291-1.584l1.439-0.719l-1.584,0.291
+ l-1.441-0.578l0.289,1.441v1.584l-1.584,1.01v-1.443l-0.721-1.438l0.434,1.438l-1.152,1.584v-0.141l-0.143-1.729l-1.439,0.576
+ l-0.291-0.434v-1.582L298,830.052l1.584-0.719l0.576-1.584v1.584l-1.297,1.441h0.289l1.441-1.008l0.141-0.291l0.145-1.584
+ l1.586,0.289l1.008-1.582v-0.291h1.441l1.008-1.438l-1.441,1.438l-1.441-0.285l-0.287,0.141l-1.439-0.717h-0.145l0.719-1.584
+ l1.586-1.152l-0.145-0.289l0.863-1.443l1.441-0.574l-1.441-0.863l0.863-1.439l1.008-1.443l1.297-1.586l0.867,1.586l-0.145,1.443
+ l-0.145,1.582l0.432-1.582l0.145-1.443l0.721-1.441l1.439-1.295l1.584-0.432l-1.584,0.289l0.432-1.582l-0.863,1.582l-1.441,1.01
+ l-0.145-1.441l-1.438,1.441l-1.586,1.008l-1.01,1.584l-1.439,1.438l-0.576,1.586l0.145,1.582l-0.287,0.576l-0.436,0.146h-0.432
+ l-0.432-0.723l0.143-1.438l-0.719-1.584l-0.721-1.441l-0.432,1.584l-0.863,1.584l-1.441-1.439l-0.865-1.443l0.721-1.584
+ l0.432-1.438l0.863,1.438l1.439-0.43l0.721-1.441l-0.143-1.584l0.43-1.584l-1.871,0.576l-0.719,1.584l-1.441,0.865h-0.145
+ l-1.293-1.584l-0.576-1.441h1.438l1.299,1.441l-0.145-1.441l-0.289-1.441l1.441-0.717h-1.441l-0.574,1.008l-1.586-0.146h-0.143
+ l-0.721-1.438l0.867,0.717l0.141-0.574l0.434-0.867l-1.15-1.438l1.439-0.146l1.729,0.576l1.439-1.006l1.441-0.578l1.582-0.43h2.305
+ l1.441,0.145l1.15-1.445l1.443,0.145l1.582,0.723l0.434,1.584l-1.008,1.439l1.439-1.295l0.721,1.441l-0.438-1.441l-0.574-1.443
+ l1.441-1.584h0.145l1.441,0.576l0.574-1.439l1.441-0.863l-1.441,0.572l-1.008,0.145l-0.143-0.576l-0.291-1.584l0.721-1.584
+ l-1.008,1.443v1.439l0.143,1.729l-1.443,0.434h-1.438l1.152-1.586h-0.145l-0.865,1.293l-1.438-0.141l-1.443-0.145h-0.287
+ l0.574-1.439l0.145-1.443l-1.152,1.584l-0.143,1.443l0.143,0.141l-1.295,1.443l-1.584-0.574l-1.584-0.146l-1.439,0.434
+ l-1.586,0.576l-1.441,1.152l-0.287-0.145l-1.584-0.578l-0.434-1.439l-1.438-0.721l1.727-1.15l1.438-0.434l1.441-0.287l-1.582,0.145
+ l-1.586,0.717l-1.582-1.006l1.582-0.863l1.586-0.578l1.439,0.578l1.439-1.01l-1.439,0.576l-1.584-0.289l-1.441-0.289l1.441-0.719
+ l-1.584-0.434h1.438l-1.438-0.291l-1.584,0.434l1.584-0.719l0.721-0.145l0.432-0.287l-1.439,0.287l-1.586-1.006l0.865-1.441
+ l1.584-0.867l0.861-1.439l1.443,0.146l1.441,0.861h1.439l-0.143,1.441l1.441-0.865l1.582-1.006l1.441,0.143l1.584-1.01
+ l-1.439,0.143l-1.441,0.434l-1.586,0.143l-1.582-0.143l-1.441,0.143l1.584-0.576l-1.584-0.143l-1.584,0.143h-1.584l-1.439,0.576
+ l-0.432-0.576l1.439-1.584l-1.584-1.008l-0.576-1.438l1.584,0.285l1.297,1.445l0.139,0.861l0.578-1.438l-0.717-1.441l1.439,0.289
+ l1.439-0.723l0.863,1.584l-0.574,1.443l0.865-1.443l1.439,0.146l-1.439-1.584v-1.439l1.439-1.443l1.584,0.436l0.721,1.439
+ l0.719,1.584l-0.289-1.584v-0.146l-0.576-0.715l0.721-1.586l1.008-1.443l1.439,1.01l1.006,1.582l0.293,1.445l0.145,1.584
+ l1.438-0.576l-1.438-1.008l0.287-1.584l1.439-0.293h-1.584l-1.008-0.576l-0.576-1.438l-1.584-0.432l-1.439,0.719l-1.584-0.145
+ h-0.432l0.141-0.143l1.441-0.578l1.586-0.145l-1.441-0.572l-1.586-0.867l1.441-0.287l1.441-0.576l1.727-0.291l1.441,0.723
+ l1.584-0.434l1.584,0.863l1.438-0.717h-0.285l-1.441,0.289l0.141-1.584l0.723-0.434l1.441-0.865l1.582-1.01l-1.582,0.723
+ l-1.586,0.861l-1.439,0.146l1.008-1.441l-1.439,0.719l-1.441,0.574l-1.727-0.574l1.439-1.154l-1.439-0.139l0.145-1.584l1.438-1.008
+ l1.441,0.715l1.438-0.143l1.584,0.143l1.443-0.861l1.152,1.727l1.582,0.863l1.586,0.578l0.43,0.719v-0.719l-1.582-0.721
+ l-1.586-0.863l-0.863-1.584l-1.439-0.291l0.287-1.586l1.152,0.576l1.584,0.721l1.439,1.439l1.586,0.432l-1.586-0.863l-0.141-0.285
+ v-1.584l-1.441,0.432l-1.152-1.584l1.441-0.576l1.439-0.576l1.443-0.578l0.43-0.285l-1.582,0.432l-1.152-1.439l1.727-1.012
+ l-0.143-1.293l1.439-0.146h1.584l-0.143,1.441l1.441-1.008l0.141-1.441h-1.439l1.152-1.584l1.439-0.43l0.863-1.441l1.156,1.441
+ l1.293,1.293l0.145,0.576v0.143l-0.863,1.584l1.008-0.719l1.582,0.143l-0.865-1.438l1.584-1.008l0.576,0.432l1.584-0.578h1.438
+ l0.293-0.287l-0.576-1.584v-1.441l1.15-1.584l1.586-1.01l0.863-1.584l-1.727,0.293l0.143-1.584l1.439-1.008l0.291-0.576h-1.584
+ l-1.441,1.584l-1.152,1.439l-1.441,1.152l1.441-0.869l1.586,0.145l-0.434,1.439l-1.441,1.152l-1.152,1.584l-1.439,1.299
+ l-1.154,0.717h-0.141l-1.443,0.867l-1.291-1.584l-0.145-1.445l0.867-0.572l-0.145-0.434l-1.441,1.006l-1.441-0.863l1.584-1.293
+ l1.008-1.15l1.443-1.152l-1.586,0.861v-0.143l-0.143-0.572v-0.107l0.143-0.145l0.289-1.439l0.719-1.584l0.434-1.439l1.008-1.584
+ l1.008-1.441h1.441l-1.152-1.441l1.441-0.143v-1.582l1.439,0.574l0.432,0.434l1.152,1.439l1.441-1.439v-0.145l1.004-0.432
+ l-1.004,0.289l-0.289-1.441l1.584-0.863h-1.584l-1.441-0.434l0.865-1.584l1.439-0.863l-0.719-0.434l0.145-1.15l1.582-1.152
+ l1.441-0.721h1.586l-1.586-0.143l-1.15,0.434l-1.439,1.148l-1.156,1.443l-1.441,1.295l-0.285-1.441l1.439-0.721l-1.584-0.141
+ l1.584-0.146v-1.582l0.576-0.432l1.584-1.15h-0.291l-1.008,0.43l0.867-1.584l1.439,0.145v-1.439l1.443,1.293l-1.297,1.008
+ l-0.145,0.145l1.584-0.721l1.439-1.15l1.008-1.441l0.723-1.584l-1.01,1.443l-1.295,1.582l-1.15-0.289l0.287-1.439l-0.287-1.584
+ l-1.01,1.584l-0.719-1.584l0.576-1.441l-0.721-1.441l1.441,0.867l1.441,0.717v-0.143l-0.434-1.441l-1.438,0.145l-0.578-1.584
+ l0.43-1.441l1.586,0.865l-1.295-1.439l0.721-1.584l-0.289-1.443l1.441-0.576l0.863,0.289l1.441,1.01l-0.865-1.439l-1.439-0.291
+ l-0.291-1.439l-1.439,0.574l-0.289,0.146l0.719-1.443l1.441-0.863l0.865-0.719l1.439-1.15l0.863,1.439l1.441-1.008l0.434,0.287
+ l-1.441-0.287l1.441-1.297l1.293-1.439v-0.576l-1.293,1.441l-1.584,0.865l-1.439,0.432l-1.586,1.008l0.434-1.439l1.439-0.721
+ l-1.584,0.291l-1.441,0.141l0.434-1.439l-1.441-1.439l0.289-0.576l1.441,0.576l1.582-1.297l-1.582,0.291l0.289-1.586l-0.145-0.863
+ l1.441-0.436l1.441-0.719l-1.586,0.578l-0.43-0.434l1.438-1.295l-1.438-1.297h-0.721l1.439-1.295l1.584-0.432l-0.432-1.584
+ l1.584,0.867l0.287-1.297l1.443-0.145h-1.584l-0.145-1.439l1.441-0.719l0.289-0.576l1.584-0.574l0.139-0.291l0.146,0.291
+ l0.287,1.439l0.148,0.145l-0.148-0.719l-0.141-0.291l0.432-0.865l1.439,0.145l1.441,0.719l-0.434-1.582h0.145l1.586-0.145h-2.16
+ l-1.441,0.287l-1.439-0.141l-1.152,1.008l-0.721-0.576l-1.439,0.576l0.721-1.441l0.432-1.441l1.584-0.289l-0.145-0.432v0.143
+ l-1.439-0.574l1.008-1.441l1.152-0.143l-0.865,1.439v0.145l1.586-0.865h1.438l1.148,1.439l0.869-0.287v-0.145l-1.443-1.152
+ l0.867-1.439l-1.441,1.008h-1.586l-0.141-1.439l-0.145-1.584l1.438,0.574l1.586-0.863l-1.438-1.01l-1.586-0.574l-0.287,1.438
+ l-1.01,1.443l-0.574,0.719l-0.289-1.295l-0.145-0.576l-0.865,0.287l0.576-1.439l-0.145-0.143v-0.432l1.441-0.436l1.441-1.006
+ l1.584-1.152l-1.584-1.152l-1.441,1.152l0.145-1.584l1.004-1.439l0.434,1.584l0.723-0.432l0.574-0.576l-0.287-1.441l1.582-0.143
+ l0.289,1.584l1.01,1.438l0.719,1.441l1.584,0.143l-1.584-0.719l-0.289-1.439l1.582,1.152l-0.143-1.439l-0.287-1.584l-1.586,0.287
+ l0.576-1.439l-0.143-0.576l-1.441,0.432v-1.439l1.441,0.145h0.289l1.441,1.008l-1.586-1.297l-1.584-0.287l1.01-1.441l1.582-0.434
+ l1.586,0.434l1.441-0.434l0.141,0.434l1.297,1.441l-1.152-1.441l-0.145-0.434l0.867-1.008v-0.143l1.293-0.865v-0.289l-1.439,0.145
+ l-1.584,0.574l-1.441-0.432l-1.441,1.295l-1.582-0.143l0.289-1.008l0.432,0.143l-0.576-1.441l0.145-0.287l1.439-1.443l1.439-0.717
+ l1.441-0.146l-0.143-0.574l-0.865-0.287l0.432-0.865l1.584,0.141l-0.719-1.584l-1.439-1.438l0.721-1.584l1.148-1.584l0.434-1.441
+ l-0.574-0.143v-3.025h1.439l1.15,1.584l0.289,1.008l1.008-1.008l0.721-1.584h-1.439l-1.586-1.295l0.719-1.441l1.441,0.434
+ l1.295,1.438l1.584-0.285l1.584,1.293l-1.008-1.439l-1.439,0.145l-1.445-1.152l1.014-1.584l-1.584,0.432l-0.291-1.584v-0.291h0.143
+ l0.145-1.584l1.441-1.008l1.584-1.008l0.143,1.441l0.719,1.441v1.584l0.432,1.438l0.145-1.438l0.861-1.584v-0.146l-1.006-0.43
+ l-0.432-1.584l0.145-1.584l0.576,0.717l0.576-1.58l0.432-1.443l0.576,1.443l0.143,1.439l0.719,1.584v1.438l0.289,1.441
+ l-0.143,1.586l-0.293,1.441v0.432h0.146l0.432-1.584l0.576-1.584l-0.143-1.441l1.584-0.432l-1.441-1.295l-0.287-1.584l0.574-1.584
+ l-0.143-1.439l0.863-1.586l-0.287,1.586l1.15,1.148l-0.289-1.441l0.289-1.584l-0.143-0.717l1.439-0.434l1.441,1.15l1.441,0.291
+ h0.145l1.439,1.01l-1.297-1.01l-0.863-1.441l0.576-1.15l-1.297-0.867l-1.584,0.434l-1.439-0.863l-1.584-0.432l1.584-0.289
+ l-0.432-1.584l1.584,0.572l0.574-1.438l1.441,0.719l1.439,1.01l1.584-0.145l-1.584-0.289l-0.287-1.441l1.439-0.143l1.584-0.289
+ l0.432,1.584l-1.584,1.152l1.584-0.865l1.443,0.576l0.863,0.141l0.285,1.154l1.012-1.439l0.572-0.576l0.146-0.434l-1.584-0.865
+ l-1.152-1.584l0.867-1.439l-0.432-1.439l0.57-1.584l0.869-1.441h0.287l1.441-0.289l-1.15-1.584l0.139-1.441l1.73-0.434
+ l-1.584-0.717l-1.439-0.576l1.439-0.432l0.291-1.441l-1.443-1.01l1.443-0.287l1.439,0.719l1.439-0.143v-1.584l1.439-0.291
+ l1.441-0.287l0.145,1.584l-0.289,1.438l-0.576,1.443l-0.289,1.441l-0.576,1.439l0.289,0.432l1.584,0.576l-0.432,1.439l0.289,1.443
+ v1.584l1.439-0.145l0.434-1.439l0.145-1.443l-0.578-1.439l0.143-1.584l0.291-1.439l0.432-1.584l-0.432-1.441l0.289-1.443
+ l0.143-1.438l0.289-1.729l1.586,1.152l0.576,1.584l-0.867,1.439l1.441-0.287l0.574,1.584l0.291,1.152l0.287,1.584l0.867-1.443
+ l1.008-1.441l-1.008-1.584l1.584-0.576l-1.443-0.285l-0.574-1.584l0.289-1.584l1.439-0.434l-1.439-0.574l-1.441,0.139l0.143-1.439
+ l1.584-0.285l-1.148-1.584l1.438-0.291l1.586-0.721l1.439,0.291l1.584,0.145l-0.287,1.439l-0.145,1.438l-0.432,0.293l-1.008,0.715
+ l1.439,0.145l-0.145,1.584l1.439-1.438v1.725l-0.574,1.443l0.289,1.584l0.432-1.441l1.439-0.434v1.584l0.721,1.443l-0.143-1.012
+ l-0.289-1.439l0.143-1.439l-0.719-1.584l-0.432-1.439v-1.445l0.143-1.584l1.441-0.574l1.439,0.291l1.584,1.152l1.297-1.443
+ l0.717,1.443l0.289-1.584l1.154,0.285l1.582,0.432l-0.289,1.445l1.152-1.445l1.439,0.293l1.584-0.145l1.584,1.008v1.439
+ l-1.439,1.295l-0.576,1.441v1.443l-1.008,1.584l-0.145,0.141l-1.439,0.291l-1.729,0.576l-1.584,0.432l-1.439,1.438l1.584-0.285
+ h1.439l1.443-0.434l0.574,1.441l1.441-0.723l0.717,1.443v1.441l1.443-1.152l0.143-0.432l0.289,0.576l0.143,0.139h1.01l-0.436-1.439
+ l0.291-1.584l1.439,1.299l-0.145-1.443l1.443-0.434l0.432-0.141l1.439-0.434h1.441l0.432,1.582l0.289-1.582l1.441-1.01
+ l-1.441-1.291l1.008-1.584l-1.008-1.445l1.441,0.293l1.439-0.146l1.586,0.578l1.439-0.863l1.439-0.145l0.867,1.439l-1.008,1.441
+ l-1.584,0.434l-1.443,0.574l-1.439-0.574v1.439h1.439l1.443,0.289l0.574,0.289l-0.145,1.438l0.578-1.438l1.439-1.008l1.439,0.432
+ l0.576,1.438l0.289-1.584l0.719-1.438l1.439,0.576l0.145,1.438l1.584,1.299l-0.432,1.439l-0.865,1.438l1.01,1.584l-0.721-1.438
+ l0.863-1.439l0.434-1.441l-0.574-1.443v-1.584l1.439-1.006l1.584-0.719l1.441-0.143l1.439-0.436l1.441-0.432l1.295-0.434
+ l-0.143-1.438l1.439-0.432l1.584-0.436l1.008-0.141h1.584l1.441,0.287l1.586-0.432l1.438,0.145h1.584l1.441-0.145l1.584,0.287
+ h1.441l1.441-0.141l1.584,0.287l1.438,0.721l1.586-0.146l1.439,1.01l1.584-1.439l1.443-0.145l1.438,0.291l1.584,0.141h1.441
+ l1.584-0.141l0.719-0.436l-0.143-1.439l1.584,0.863h0.574l1.441,0.145l1.441,0.721l1.441-0.721l1.584,0.145l1.439-0.578
+ l1.441,1.299l1.295,1.439l1.582,0.719l1.01,1.582l1.584-0.572l1.441,1.439l0.717,1.438l0.867,1.299l0.574,1.439v1.438l0.143,1.443
+ v1.586l0.434,1.439v1.439l-0.287,1.439l-0.434,1.586l-0.143,1.441l-0.289,0.432l-0.576,1.439l-1.008,1.582l-0.434,1.443
+ l-1.295,1.441l-1.008,1.584l-1.441,1.439l-1.439,0.863l-1.584,0.867l-1.443,0.432l-1.438,0.576l-1.441-0.146l-1.584,0.293
+ l-1.584,0.715l-0.863,0.434l-1.441,1.008l-1.584,0.576l-1.441,0.719l-1.584,0.578l-1.584,0.719h-1.441l-1.439,0.145l-1.584-0.289
+ l-0.432-0.146l-1.443,1.299l-1.582,0.861v-1.584l-1.584,0.723l-1.439-0.145l-1.008,1.439l-1.588-0.719l-1.438,0.145l0.287,1.439
+ h-1.439l-1.441-0.291l-1.584-0.43l-1.439-0.578l-0.145-1.584l-1.584,0.578l-1.439,0.576l-1.295,0.576l-0.291,0.141l-1.438,0.867
+ l1.584-0.432l0.287-0.289l0.145-0.146l1.584,0.578l1.439,0.717l0.145,1.443l1.439-0.143h1.441l1.584,0.863l1.439,0.289
+ l-0.865,1.441l1.295-0.576l0.865-1.295l1.441,0.572l-1.584,0.576l0.289,0.146l1.439,0.143l1.584-1.008l0.719,1.441l0.146,0.432
+ l-1.297,1.584l0.289-0.289l1.584-0.719l1.439-0.289l1.441-0.576l1.441,0.289l1.584-0.146l1.439,0.293l1.441,0.432l1.584,0.719
+ l1.439,1.295l-0.143,1.439l1.295,1.439l0.289,1.584l-0.432,1.443l0.287,1.438l1.441,0.865l1.441,1.01l1.441,0.287l0.719,1.443
+ v0.432l0.574-0.143l1.584,0.863l1.441,0.721l0.143,0.143l-0.762,1.594l1.584,0.719l0.146,1.584h0.432l1.443,0.432l1.582,0.145
+ l1.584-0.145l1.148-1.439l1.588-0.719l1.439,0.865l1.584-0.576l1.441,0.289l1.008,1.441l1.584-0.145l0.576-0.145l1.584-0.143
+ l1.439-1.15l1.443-0.576l1.582,0.432l1.441-1.441l-0.432-1.582l1.439-1.152l0.432-0.576l-0.289-1.441l-1.582-1.584l-1.445-0.289
+ v-1.439l-1.584-0.145l-1.438-0.574v1.584l-1.293,1.438l-1.584,0.291l-1.443-0.432l-1.584-0.576l-1.439-0.574l-1.441-0.578h-1.439
+ l-1.441-1.008l0.721-1.439l0.432-1.443l-0.145-0.141l-0.863-1.584l-0.293-1.443l1.443-0.863l1.584-0.432h3.025l0.289,0.287
+ l1.441,0.576l1.582-0.143l1.441-1.008v1.582l0.721,1.443l0.432-1.443v-1.439l1.584-0.719l1.439-0.719l1.584-0.145l1.438-0.289
+ h1.588l1.439-0.432l1.152-1.441l0.432-1.295h1.441l1.439-0.863l1.006-0.434 M638.422,935.188l0.863-1.439l1.008-1.441l1.297-1.438
+ l0.721-1.443l1.293-1.441l1.438-1.439l-1.438-1.15l-1.008-1.441l-0.289-0.143l-0.145-0.145l-0.863,1.439l0.289,0.434l-1.441,0.432
+ l-1.441-0.143l-1.439,0.574l-1.439,0.721l-0.869,1.439l-1.438,0.723l-1.441,1.293l-1.439,1.439l-1.441,0.436l-1.584-0.146
+ l-1.439,0.289l-1.441-0.141l-0.719,0.287h-1.439l0.863-1.439l-1.439-0.578l-1.443,0.289l-1.439,1.295l-1.439-0.574l1.439-1.01
+ l1.439-0.43h0.291l1.439-0.721l1.584-0.865l1.441-0.434l1.441-1.295l-0.434-0.432l0.717-1.441l0.723-1.439 M627.621,923.669
+ l-0.719,1.008l-0.865,1.584l-1.439,0.576l-1.584,1.008h-1.441l-1.443-1.008l-0.574-0.145l-0.287-1.439l-1.297-1.439h-1.01
+ l-1.438-1.441l-0.432-0.576l-1.439-0.289l0.139,0.576l1.445,0.432l0.863,0.291h0.145l1.439,1.008l1.152,0.863l-0.432,1.584
+ l1.293,1.443v1.438l-1.584,0.576l-1.439,1.295l-1.008,0.145l0.287-1.441l-0.287-1.441l-1.152,1.441l0.861,1.441l-0.715,1.439
+ h-0.291l-1.439,0.576l-0.723,0.576l-1.438,1.439"/>
+
+ <path id="path3467" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M606.311,473.526l1.01-0.432l1.582,0.721l1.441-0.578l1.439-1.295l1.152-1.443l1.439-1.148l1.584-1.584l0.721-1.443l0.285-1.582
+ l0.146-1.438l0.576-1.441l0.861-1.586l1.584-1.441l1.443-1.15l-0.289-1.295L621,454.808l-1.584-0.723l-1.443,0.291l-0.863-1.441
+ l-0.432-1.439v-1.586l-1.008-1.438l-0.293-1.441l-0.139-1.586l-1.297-1.582l-0.287-1.445l-1.586-1.008l-1.443-0.574l-1.438-0.287
+ l-1.584-1.15l-1.152-1.441l-0.719-1.584l-0.865-1.584l-1.295-1.441l-1.443-0.719l-1.584-0.574l-1.006-0.145H598.1l-1.584-0.145
+ l-1.441,0.293l-1.582,0.715h-1.441l-1.441-1.15h-1.439l-1.584-0.865l-0.576-1.441l-0.145-1.582l-0.287-1.441l-0.145-1.584
+ l0.145-1.441l-0.436-1.443v-3.02l0.721-1.441l1.441-0.145l1.582,0.719l1.441-1.008l1.584-1.008l1.441-1.008l1.438,0.432
+ l1.584,0.143l1.445,0.865l1.584-0.432l1.439,0.865l1.439,0.576l1.439-0.289l0.721,1.582l1.438-0.287l1.443-1.441l1.584-1.295
+ l0.865-1.152l0.865-2.879l-0.143-1.441l0.143-1.438l-0.578,1.438l-1.439,0.434l0.145,1.441l-1.008,1.584l-0.289,0.143l-0.578,1.441
+ l-1.439,1.15l-1.584-0.287l-2.877-0.865l-1.445-1.295l-0.285-1.439v-1.441l-1.439-0.291l-1.584,0.578l-1.445-0.289l-1.438,1.008
+ l-1.441-0.434l-1.584-0.143l-1.441-0.143l-1.293,1.438l-1.441,1.586l-1.443,1.295l-1.584,0.719l-0.285,1.584l-1.584,1.293
+ l-0.576,1.441l-0.863,1.443l0.43,1.584l0.578,1.441l0.576,1.586l-0.576,1.434l-1.008,1.443l0.139,1.584l-0.43,1.441l-1.584,0.143
+ l-1.439-0.865l-1.441-0.863l-1.582-0.145l-1.445,0.289l-1.584,0.434h-1.438l-1.439-1.15l-1.443-0.867l-0.717-0.143l-1.443-0.719
+ l-1.582-0.578l-1.15-1.586l-1.441-1.148l-1.295-1.441l-1.584-0.578l-1.441-0.285l-1.443,0.719l-1.584,0.574l-1.438-0.287
+ l-1.584,0.436h-1.439l-1.584-0.148l-1.443,0.434l-1.584,0.867l-1.439,0.43l-1.008-1.439l-1.439-1.441l-1.443-0.717l-1.439-1.152
+ l-0.576-1.441v-1.441l-0.432-1.441l-0.143-0.719l-0.289-0.574l-0.576-1.584l-1.439-1.295l-1.584-0.721l-1.443-0.432l-1.439-0.289
+ l-1.584-0.145l-1.439-0.145l-1.441,0.291l-1.584-0.291l0.432-1.582l1.586-1.152l1.582,0.576l1.441-0.719l1.438,0.861l1.584,0.148
+ l1.441-0.148l1.443,1.008l1.584,0.727l1.439,0.859h0.145l1.584,1.297l1.439,0.719l1.441-0.434l1.584,0.291h1.439l1.293,1.584
+ l1.443-0.289l1.441-1.586l1.008-1.438l0.717-1.441l0.436-1.441l0.863-1.586l1.439,0.145l-1.439-0.863l0.721-1.441l0.432-1.441
+ l0.576-1.008l1.584-0.145l1.439-0.287l0.863-1.439l0.436-1.441l0.287-1.586l-1.439-1.15l1.008,1.441l-1.297,1.439l-1.439,0.865
+ l-1.439-0.287l-1.584,0.143l-0.289,1.439l-1.441-0.43l0.863,1.438l-0.863,1.441l-1.439,1.008l-1.152,1.441l-1.584,1.152
+ l-1.295,1.441l-1.584-0.293l-1.441,0.145h-1.439l-1.584-1.152l-0.576-1.438l-0.146-1.441l1.012-1.584l0.43-0.291l1.586-0.863
+ l1.441-1.297l-0.145-1.438l-1.008-1.586h-1.439l-1.584,0.578l-0.145,1.438l-0.576,1.586l-1.584-0.865l0.432-1.439l-1.584-1.297
+ l-0.287-1.439v-1.441h-0.434v-0.143l0.865-1.584l0.287-1.441l0.291-1.584l1.584-0.867l1.439-1.293l0.721-0.717l0.863-1.441
+ l1.006-1.443l1.584,0.291l0.293-0.432l1.439-1.01l1.584-0.574l1.438-1.295l0.723-1.441l0.287-1.584l-0.432-1.441l-0.145-1.584
+ M361.074,21.799l0.867,1.584l1.438,1.15l1.154-0.142l0.43,1.438l0.723,0.722l0.861,1.438v1.442l-1.438,1.008l-0.146,0.142
+ M347.398,868.806v0.287l-1.152,0.721l-1.008,0.432l-0.434,0.143l1.441-0.865L347.398,868.806l0.717-0.145l0.432-1.439
+ l-0.432-1.441l-0.143-1.441l-1.441-0.145l-1.439-0.863l-0.287,0.291l-0.291,0.141l-1.443-0.287l-1.438,0.863l-1.441,0.432
+ l-1.439,0.867l-1.439-0.434l-0.145-0.143l-0.145,0.143v0.289l-1.439,0.574l-1.443,1.154l-1.293,1.293l-0.863,1.441l0.574,1.441
+ l-1.008,0.574l1.441-0.432l-0.145,1.441l0.145,0.287h-0.145l-1.441-1.148l-1.441-1.443l-0.141-1.441l0.715-1.439l0.867-1.441
+ l0.717-1.439l0.578-0.287l1.439,0.141l1.443-1.148h2.016l1.439-0.436l1.441-1.148l0.719-1.443l0.576-1.439l0.432-1.441l0.863-1.584
+ l0.291-0.576l0.291-0.143l1.582-0.289l1.441-1.15l1.152-1.441v2.879l1.295,1.439v1.584l0.432,1.443l0.143,0.141l-1.008,1.443
+ l-0.146,1.584l-1.438,1.148l-1.439-0.717l-0.576-0.291l-0.434,0.436l-0.143,0.141"/>
+
+ <polyline id="polyline3469" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 605.877,473.526 606.021,472.085 606.883,470.499 607.459,469.065 607.174,467.622 608.471,467.19 609.908,466.759
+ 611.061,465.319 610.627,463.878 610.342,462.294 610.342,460.854 609.766,459.413 609.908,457.976 609.766,456.39 609.621,454.95
+ 608.758,453.366 607.318,452.069 605.732,452.069 605.445,450.487 604.582,449.046 603.141,448.901 602.422,447.749
+ 601.414,446.163 600.838,444.729 600.838,443.144 599.398,443.286 597.814,441.987 596.373,441.702 594.789,441.847
+ 593.35,441.271 591.908,439.687 590.471,438.245 590.182,436.808 588.74,436.663 587.156,437.671 585.715,438.39 584.277,439.397
+ 582.693,440.263 581.252,440.694 579.67,440.55 578.23,440.405 576.646,439.976 575.205,438.679 573.766,438.819 572.182,437.815
+ 570.74,437.671 569.303,437.095 567.861,436.085 566.277,435.655 564.838,435.942 564.406,435.942 562.963,435.077
+ 561.379,434.647 559.941,435.077 558.646,433.495 557.205,432.198 555.766,432.058 554.182,431.331 552.74,430.612
+ 551.156,430.038 549.715,430.183 548.131,430.038 546.693,429.897 545.252,431.046 543.814,431.909 542.23,432.198
+ 540.789,432.487 539.35,431.19 539.061,429.749 537.621,428.312 536.037,428.163 534.883,426.581 533.59,426.007 532.148,424.71
+ 530.564,423.987 529.125,422.983 527.541,422.839 526.102,422.118 524.662,422.263 523.076,421.827 521.639,422.405
+ 520.197,423.847 519.908,425.431 518.471,425.722 517.748,427.304 517.174,428.741 516.883,430.323 516.164,431.767
+ 515.877,433.351 515.732,433.495 515.445,435.077 514.006,434.499 513.572,435.942 515.156,436.95 516.453,438.534
+ 517.893,439.687 519.332,440.839 520.916,441.562 522.357,442.278 523.941,443.286 525.379,444.294 526.822,445.304
+ 527.398,445.589 528.98,446.741 530.422,448.038 531.572,449.622 532.582,451.065 533.156,452.499 533.59,454.085 534.021,455.526
+ 534.311,456.966 535.029,458.55 536.471,459.987 538.055,460.71 537.189,459.126 538.773,460.569 539.781,462.003 541.365,461.862
+ 541.51,460.421 542.084,458.983 543.67,459.271 545.109,460.421 546.693,461.144 548.131,462.003 549.572,462.87 551.014,463.589
+ 552.598,463.304 554.037,464.312 553.459,465.606 553.318,466.183 554.324,466.759 555.766,467.622 557.205,468.341
+ 558.789,469.065 560.23,468.63 558.646,468.63 558.211,467.046 559.795,466.183 561.238,464.599 562.678,464.163 563.254,462.581
+ 564.693,463.304 566.277,464.163 567.715,464.163 569.156,464.022 570.598,463.733 572.037,463.878 573.621,462.729
+ 573.479,461.286 573.908,459.847 575.494,461.144 576.934,462.294 578.373,463.304 579.814,464.741 580.963,466.323
+ 582.547,466.612 582.838,467.767 582.98,469.351 581.398,468.917 579.957,468.917 578.518,470.069 577.076,470.647
+ 575.639,471.222 574.197,471.798 572.613,472.519 571.174,472.085 569.59,473.526 568.293,474.966 566.854,475.976 565.27,477.126
+ 563.83,477.271 562.533,478.71 561.094,479.862 559.654,480.728 560.518,481.878 560.949,482.599 560.807,482.886 559.365,482.165
+ 559.076,480.728 557.639,481.444 556.055,482.022 554.613,482.886 553.029,483.896 551.59,485.19 550.006,486.341 548.564,487.782
+ 547.557,489.222 547.27,489.509 546.117,490.95 545.398,492.39 544.389,493.829 542.949,495.413 541.51,496.567 540.068,498.005
+ 540.646,499.444 542.084,500.743 541.223,502.181 542.518,503.765 544.102,504.054 545.541,503.911 546.98,504.054
+ 548.422,504.485 550.006,505.062 550.582,503.622 552.021,504.198 553.605,505.638 554.471,507.222 555.189,508.806
+ 554.758,510.247 554.037,511.687 553.459,511.829 554.758,513.413 556.197,513.56 557.639,514.567 558.068,516.005
+ 556.627,517.589 555.189,518.886 553.605,517.733 552.166,517.302 551.445,515.862 551.445,514.278 550.006,514.421
+ 548.422,514.71 546.838,514.278 546.117,515.718 545.973,517.157 545.83,518.597 547.125,520.038 545.686,519.894 545.686,521.333
+ 546.406,522.774 546.117,524.358 546.838,525.798 547.27,527.235 546.262,528.679 544.822,529.397 542.518,532.278
+ 541.795,533.718 541.654,535.302 540.789,536.743 541.076,538.325 541.076,539.765 541.941,541.206 543.525,542.214
+ 542.662,543.653 541.223,544.374 541.365,545.813 "/>
+
+ <polyline id="polyline3471" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 541.076,545.958 540.213,545.958 540.068,547.397 539.494,547.397 538.197,548.839 537.189,550.421 536.613,550.134
+ 536.324,548.55 536.471,547.11 537.908,546.39 536.758,544.806 535.174,544.517 533.732,544.087 532.725,542.646 531.43,541.062
+ 529.99,542.214 530.854,540.63 531.43,539.19 531.285,537.751 530.564,539.19 529.846,540.63 529.414,542.214 529.125,543.653
+ 529.125,546.103 528.98,547.542 528.98,549.126 529.846,550.567 531.43,550.854 532.869,551.573 532.869,554.597 531.285,554.165
+ 530.422,552.581 528.98,553.013 528.693,554.597 527.973,556.181 528.117,557.622 527.686,559.206 527.252,560.646
+ 526.533,562.087 526.678,563.671 526.678,566.55 527.109,568.134 526.963,567.989 526.678,567.702 526.533,567.989
+ 526.678,569.573 526.533,571.013 526.246,572.454 526.102,573.894 525.238,575.478 523.654,576.198 525.094,576.341
+ 526.678,576.919 528.117,577.349 526.678,577.782 525.814,579.222 524.518,580.806 523.795,582.247 524.084,583.829
+ 525.525,584.118 526.389,585.558 527.252,586.997 528.117,588.581 529.557,589.444 530.422,590.886 531.141,592.325
+ 529.701,592.759 529.27,594.341 528.547,595.782 527.686,597.366 527.398,598.806 526.533,597.366 525.814,598.806 524.807,600.39
+ 523.223,600.534 521.781,599.958 520.342,599.382 518.9,598.517 517.318,598.806 515.877,599.382 514.293,599.524 512.998,598.806
+ 512.131,597.366 512.131,596.356 512.564,594.919 511.27,593.478 511.846,591.894 512.998,590.454 514.006,589.013
+ 514.582,587.431 516.164,586.565 514.869,584.981 513.285,584.692 511.846,583.542 510.406,583.397 508.963,583.687
+ 507.525,583.542 505.941,582.966 504.502,582.534 503.061,583.255 501.479,583.829 500.037,585.271 499.318,585.847
+ 498.311,587.286 497.732,588.149 496.438,589.589 494.854,590.022 493.414,590.454 491.83,591.894 493.27,592.038 494.854,592.038
+ 496.293,591.894 497.732,591.604 499.174,591.751 500.324,592.181 501.479,593.622 502.918,594.198 502.773,595.638
+ 504.213,596.356 504.789,597.798 506.23,599.095 506.373,600.534 507.094,602.118 507.67,603.558 508.389,604.997 509.973,606.438
+ 511.414,605.718 512.854,605.431 514.293,605.862 515.877,606.149 517.318,607.444 518.182,608.886 519.766,609.317
+ 519.766,610.759 520.627,612.198 521.061,613.638 521.061,613.782 521.781,615.366 522.789,616.95 524.23,617.671 525.379,619.11
+ 526.963,620.118 525.525,619.542 523.941,618.39 522.502,618.103 521.061,618.679 520.486,620.263 521.781,621.702
+ 520.197,620.981 520.197,619.397 520.055,617.958 518.613,617.813 517.174,618.103 515.59,618.39 514.438,619.829 513.43,621.271
+ 511.99,620.692 510.406,621.126 509.83,622.565 510.262,624.149 510.547,625.589 510.693,627.03 510.693,628.612 510.547,630.198
+ 510.117,631.638 509.398,633.079 508.389,634.517 508.246,636.103 508.533,637.542 508.533,638.981 508.246,640.421
+ 507.67,641.862 507.525,642.726 507.525,644.31 508.246,645.749 509.686,646.899 511.27,647.333 512.709,647.765 513.141,648.054
+ 514.582,648.63 516.021,648.63 516.74,648.919 518.182,649.78 519.621,650.646 520.486,652.087 521.926,652.806 "/>
+
+ <path id="path3473" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M406.006,71.48l-1.584,0.288l-1.441,0.142l-1.441,0.866l-0.432,1.439l1.584,0.862l1.438,0.146h0.578l-1.293,1.438l0.432,1.442
+ l1.439,1.438l1.584,0.864l-0.432,1.442l-1.584,0.142l-1.439,0.866l-0.145-1.296v-1.584l-1.584,0.142l-1.439,0.721l-0.145,1.439
+ v1.442l0.145,1.438l0.863,1.584l0.863,1.442l1.297,1.438l1.008,1.442l1.438,1.149l1.586,1.011l1.441,0.861h1.441l1.584-0.575
+ l3.168-1.584l1.439-0.862l1.584-0.433l1.584-0.146h1.441l1.584,0.432l1.441,1.152l0.143,1.44l-1.441-0.286l-0.287,1.438
+ l-1.584-1.151l-1.439-0.574l-1.443,1.296v1.438l-1.439,1.152l-0.287-1.584l-1.443-0.144l1.152-1.44l1.438-0.576l1.445-1.438
+ l-1.445,0.286l-1.584,0.432l-1.438,0.72l-1.439,0.576l-1.584,0.72l0.719,1.442l1.441,1.006l1.439,0.72l1.584,0.721l1.439,0.722
+ l1.584,0.576l1.441,0.43l1.441,0.288l0.143,1.584l-0.289,0.288l-0.863-1.44l-1.584,1.011l-0.869,0.575l-1.438-0.289l-0.863-1.438
+ l-1.152-1.44l-1.441-1.151l-1.441-1.011l-1.584-1.296l0.434,1.585l0.576,1.439l1.15,1.439l0.865,1.44l1.152,1.584l0.865,1.008
+ l1.439,1.442l1.008,1.438l1.439,1.152l1.01,1.584l1.441,1.008l1.584,1.442l1.439,1.149l1.295,1.44l0.865,1.44l0.287,1.439
+ l0.721,1.584l1.152,1.442l1.008-1.442v-1.584l1.295-1.439l1.441-0.145l1.439,0.432l1.584,0.864l0.291,0.433l1.293,1.439h1.439
+ l1.584-0.43l1.443-0.723l0.717-1.584l-1.439-1.008h-1.584l-0.863-0.72l-0.145-1.44l1.008,0.435l1.438,0.288l1.443-1.296
+ l1.441,0.573l-0.432-1.584l2.016-2.88l0.576-1.438l0.143-1.442l0.289-0.43l0.145-0.29l1.008,0.72l1.439,1.296l1.441,0.146
+ l-0.434,1.438l-0.287,1.44l0.287,1.584l1.443-0.864l0.287,1.584l1.439,0.576l1.443-1.006l1.582-0.435l-0.436-1.439l0.293-1.44
+ l1.584,1.44l1.439-1.152l-0.719,1.442l0.289,1.584l-0.145,1.438l0.289,1.585l0.141,1.439l1.012,1.439l-0.143,1.152l0.432,1.584
+ l1.439,1.442l1.441,0.576l1.441,0.43l1.439,0.578l1.439-0.435l0.576,0.146l1.443-1.008l-0.721,1.438l1.584,1.296l0.721,1.442
+ l0.574,1.438l0.143,1.584v1.44l-0.576,1.584l-0.432,1.44l-0.717,1.439l-0.436,1.584l1.443-0.43l1.584-0.578l1.439-0.576
+ l1.584-0.718l1.439-0.722l1.443-1.008l1.58-1.15l1.441-0.146l1.441-0.576l0.721-0.287l1.439-0.721l1.584-0.288l1.439-0.144
+ l1.441,1.439l-1.15,1.44l-0.576,1.44l1.584-0.145l0.143,1.442l-0.574,1.438l-0.145,1.584l1.152,1.442l-1.445,0.864l-0.715,1.438
+ l-0.145,1.584l-1.293,1.442l-1.01,1.438l0.574,1.584l-1.439,1.152l-1.441-1.008l-1.584,0.863l-0.574,1.584l-0.432,1.152
+ l1.152-1.439l1.438-1.152l1.441,1.439l-1.152,1.584l-0.432,1.44l-1.008,1.44l-0.434,1.008 M406.148,71.192h-0.289l-1.584,0.288
+ l-1.439,0.142l-1.439,0.288l1.439-1.296l-1.584,0.578l-1.441-0.145l-1.295-1.439l-0.576-1.584l0.145-1.442l-0.293-1.438
+ l-0.139-1.442l1.008-1.008l1.439,1.154l-0.576-0.864l-0.863-1.442l-1.152-1.584l-1.584-1.008l-1.439-0.718l-1.443-0.29
+ l-1.584-1.006h-2.16l-1.439,0.142l-1.584-0.43l-1.439-0.146l-1.584-0.286l-1.439-0.434l-1.443-0.43l-1.584-0.146l-1.439-0.574
+ l-1.441-0.722l-1.584-0.576l-1.443-0.861l-1.438-0.723l-1.439-0.861l-1.584-1.154l-1.295-1.438l-1.441-1.439l-1.297-1.442
+ l-1.01-1.438l-0.715-1.584l-0.576-1.442l-0.293-1.584v-1.584l0.146-0.864v-0.72l0.145-1.438l1.152-1.584l1.008-1.152l0.576-1.584"
+ />
+
+ <path id="path3475" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M504.068,228.293l-1.443,0.576l-0.572,1.44l-1.441,0.864l-1.73-0.433l-1.58,1.008l-1.295,1.584l-1.152,1.44l1.439-0.288
+ l1.584-0.432l1.297,1.584l0.717,1.728l-0.141,1.584l-0.145,1.584l-0.723,1.152l-1.725,0.576l-1.443-0.864l0.293,1.584h1.584
+ l0.576,1.584l-0.291,1.584l0.721,1.584l0.143,0.432l1.584,0.145l1.441,0.288l1.584,0.144l1.152-1.439l-1.152-0.864l-0.723-1.44
+ l-1.438-0.864l-0.289-1.295l1.152-0.433l1.295,1.44l1.584,0.863l1.439,0.576h0.145l1.439,1.44l-0.432,1.584l1.438-0.145
+ l1.445,1.009l1.148,1.584l0.867,1.439l1.439,0.864l1.441,1.439l0.574,1.44l0.289,1.584l0.865,1.439l-0.289,1.584l1.584,0.433
+ l1.584-0.576l1.008,0.144l1.441,1.009l1.438,0.72l1.154,1.44l0.291,1.008v0.144 M489.238,189.846l0.717,1.584l1.297,1.439
+ l1.008,1.584l0.145,1.44l0.574,1.439l0.434,1.152l0.715,1.008 M481.029,157.734l-0.146-0.576l-0.141-1.44h0.578v-1.439
+ l-0.867-1.439l-1.439-0.289h-0.721l-1.439,1.152l-1.152,0.145l-0.287,0.144v1.44l-0.434,0.287l0.574,1.44l1.01,1.442l0.143,1.438
+ M476.422,160.326v-0.142l-1.295-1.442l-1.441,0.433l-0.576,0.144l-0.863-1.006l-0.145,1.149l0.432,1.44h-0.717l-1.443-0.288
+ l0.434,1.442l1.01,1.438 M471.525,163.64l-1.293-0.576l-1.584-0.578l-1.443,1.154l1.443,0.286l-0.721,0.144l-1.439,0.866
+ l0.141,1.582l1.152,1.439h-0.143l-0.719,1.442l-0.291,1.584l-0.432,0.718l1.152,1.44l-0.145,1.008l0.865,1.44l1.586-0.576
+ l1.439,0.432 M487.795,188.118l-1.291-0.576l0.287-1.584l-0.863-1.439l-1.439,0.432l-1.586,0.866l-1.01-1.01l-0.863,1.439
+ l-0.863,1.584l-1.443,0.576l-0.863,1.584l-1.584,0.144h-1.439l1.152-1.439l-1.445-0.432l-1.438,1.008v-1.44l-1.439-0.43
+ l-0.145-1.442l-0.146-1.584l0.436-1.439l-0.143-1.44l1.439-1.439l-1.439-0.721l-1.586-0.863l0.289-1.44l1.584-0.144l-0.141-1.009"
+ />
+
+ <path id="path3477" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M524.949,264.87l-1.439-1.439l-1.441-0.864l-1.582-0.432l-1.586,0.432l-1.443-0.576l-1.58,0.288l-1.152-1.44l-0.574-1.439
+ l-1.441-0.288l-1.439-0.288h-1.584l-1.297-1.44l-0.287-1.584l-1.439-1.439l-2.881-0.864l-1.584-0.288l-1.584-0.576l-1.439-0.72
+ l-1.584-1.584l-1.441-0.576h-1.441l0.291,1.584l-1.443-1.151h-0.287l-1.584-1.296l-1.439-0.721l-1.441-1.151l-1.584-0.433
+ l-1.295-1.439l-1.439-0.721l-1.443-0.288l-1.584-0.432l-1.439-1.296l-1.439-0.432l-1.584-0.145l-1.443-0.432l-1.439-0.144h-1.439
+ l-1.584,0.432l-0.865,1.439l-1.441,1.44l1.441,0.576l-1.152,1.439l-1.15,1.44l-0.867,1.439l-0.141-1.439l0.719-1.584l0.43-1.44
+ l-0.141-1.439l0.863-0.145l-1.584-0.288l-1.439,0.288l-1.441,0.576l-0.143,1.44l-1.441,0.72l-1.584,1.008l-1.01,1.44l1.443-1.008
+ l1.439,1.008l-1.439,1.151l-0.576,1.584l-1.584-0.144l-1.008,1.584l1.439,1.439l-1.584-0.144l-1.439,1.44l-0.145,1.584
+ l-1.008,1.439l-0.432,1.44l0.576,1.584l1.439,1.151l0.287,0.433l0.145,1.439l0.145,1.584l0.863,1.44l0.576,1.439l0.145,1.44
+ l1.584-0.432h1.439l1.008,1.584l0.721,1.439l0.576,1.44l-0.145,1.151l-1.439-0.863h-1.443l-1.439-0.576l-1.584-0.433l-1.439-0.432
+ l-1.297,1.44l-0.141,1.584l0.715,1.439l1.01,1.44l0.721,1.439l-1.584-0.288l0.287,1.44v0.145l0.291,1.439l0.145,1.584l0.576,1.44
+ l-1.445-1.44l-1.006-1.439l-1.439-1.44l-1.439-0.432l-0.721-1.44l-1.439,1.296l-1.443,0.576l0.436,1.584l-0.145,1.44l-1.441,1.439
+ l0.865,1.44l-0.576,1.439l1.441,1.008l0.143,1.44l1.584,1.008l1.441,0.864l1.441,0.432l1.439,1.152l1.584-0.288l0.861,0.576
+ l1.443,0.576h1.584l1.441,0.863l1.439-0.144l1.297-1.44h1.439l1.439-0.144l1.152-1.44l0.291-1.439l0.576-1.584l-0.146,1.584
+ l-0.143,1.439l-0.146,1.584l0.438,1.44l0.287,1.584l0.145,0.576l0.576,1.584l-0.145,1.439v1.44l1.439-0.72l1.152-1.44l1.441-1.439
+ l1.439-1.009l1.295-0.432 M494.422,199.782l-0.432,1.44l0.432,1.584v1.584l-0.145,1.439l-0.576,1.44l-1.439,0.576l-1.439,0.722
+ l-0.867-1.442l-1.293,1.442l0.715,1.438l0.578,1.584l0.867,1.439l0.576,1.44l0.287,1.584l0.145,1.439l0.576,1.584l0.287,1.44
+ l0.576,1.439l0.721,1.442l1.582,1.149l1.441,1.297l0.432,1.439l1.438,1.296l1.443,1.44l1.295-1.44l0.145-1.439l1.439,0.575
+ l0.721,0.289"/>
+
+ <path id="path3479" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M488.949,337.591h0.576 M516.311,351.271l-0.434,1.439l0.289,1.584v1.439l0.576,1.586l1.441,1.295l0.289,1.439l-0.434,0.863
+ l-0.578,0.867l0.291,1.441l0.289,1.438v1.586l0.289,1.439v1.584l-0.143,1.584l-0.434,1.584v3.025l-0.143,1.439l0.432,1.586v1.439
+ l1.152,1.584l1.438,1.152l1.443,1.008l1.586-0.863l0.287,1.438l1.438-0.574l1.445-1.295l1.584-0.143l1.439,0.43l1.584,1.01h1.439
+ l1.443,0.143l1.582-0.43l1.441-1.01l0.863-1.441l0.43-1.295l1.014-1.439l1.148-1.441h3.027l1.438-1.01l1.441-0.287
+ M489.525,337.733l0.432-0.143l0.291,1.584l0.141,1.439l0.867,1.439l1.439,1.441l1.584,1.152l1.438,0.574l0.723,1.441l-0.723,1.582
+ l-0.43,1.441l1.441,1.152l-0.143-0.434l0.863-1.439l0.145-1.439l1.439,0.432l-1.008,1.584l1.438-0.145l1.586,1.152h1.443
+ l1.439,0.576l-0.576,1.439l-1.441,1.441l0.289,1.584l1.584,0.287l0.289-1.584l1.008-1.439l1.441-0.576l0.576-1.439l1.584-0.863
+ l0.145,1.582l-1.008,0.863l-0.867,1.441l1.441,0.432l-0.289,1.584l1.439-0.145l0.291-1.582l0.576-1.441l1.439-0.145l1.295-1.582
+ l0.719-1.441l-0.289,1.584l1.441-0.143l1.008-0.289 M488.949,337.733l-0.287-0.863l-0.291-1.439l-0.432-1.439l0.145-1.586
+ l-1.441-1.439l-0.289-1.439l-0.432-1.441l-0.721-1.582l-0.576-1.441l-0.719-1.582l-1.008-1.441l-0.289,1.584l0.865,0.287
+ l-1.441,0.578l1.008,1.439l-1.584,0.143l-1.439-1.008l1.008-1.439l-1.584-1.008l0.145-1.439l0.863-1.441l-1.15-1.439l-0.145-1.584
+ l-0.434-1.439l0.291-1.44h1.439l1.439,0.145l-1.15-1.44l0.141-1.584l1.588,0.432l-1.01-1.584l-0.719-1.439l-1.584-0.72
+ l-0.289-1.584l-1.439-0.433l-1.584-1.439l0.145-1.44l-0.436-1.584l1.443,0.145l-0.436-1.44l1.443-1.008"/>
+
+ <path id="path3481" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-251.498,634.374l1.441,1.008l1.438,0.865l1.439,1.582l1.44-0.143l0.864,1.441l1.008,1.439h1.439l1.44,0.289l-1.44-1.295
+ l-1.439-1.152l-1.44-1.295l-2.88-2.879l-0.864-1.008l-0.142-0.289l1.006,0.145l1.152,1.438l1.439,1.297l1.584,1.441l0.864,1.438
+ l1.584,0.867l1.44,1.295l1.441,0.865l1.584,0.143l1.006,1.441l1.152,1.439l1.152,1.584l1.439,0.145l-1.151-1.439l0.72,0.432
+ l1.008,1.439l1.44-0.576l0.432-1.439l-1.294-1.441l0.43-1.584l-0.43-1.441l-0.864-1.439l0.143-1.439l-1.297-1.584l-0.43-1.443
+ l-0.866-1.439l-0.142-1.441v-1.439l1.438,0.285l0.146-1.438l1.438-1.295l-1.438-0.865l-1.442-0.576l1.442,0.145l1.584-0.867h-1.584
+ l-1.442-0.434l-1.439-0.43l-1.584-0.432l-1.44-0.576h-1.439l1.439-0.576l1.44,0.576l1.439,0.432l1.584,0.432l1.442-1.293
+ l-1.442-0.291l-1.151-1.439l-0.433-1.584l1.584,1.295h1.442l-0.29-1.584l-1.584-0.719h-1.294l-1.584-0.285l-1.442-0.432
+ l0.145-0.145l1.439,0.434l1.442,0.143h1.584l-0.866-1.443l-1.439-0.719l-1.44-0.717l-1.584-0.291l-1.439-0.43 M-251.498,675.126
+ l0.287,0.863l0.288,1.584l0.866,1.439l1.438,0.291v-1.439l-0.433-0.867l-0.288-1.584l-1.151-1.439l-0.288-1.441l-0.433-1.439
+ l0.146,0.719l0.574,1.441l1.298,1.584h1.438l0.288,1.441l1.442,0.576l-0.864-1.441l0.288-1.584l0.286-1.439l0.29,1.584l1.438,0.865
+ l1.44-1.01l0.29-1.584l-0.29-1.439l0.72,1.584l1.584,0.143l1.442-0.143l0.286-1.441l1.439-0.574l0.145-0.436l-0.145-1.584
+ l0.288-1.584l0.433-1.439l1.151,1.586l-0.576-1.586l-0.43-1.439l-1.008-1.584l0.286-1.439l1.584-0.145l-1.584-0.576l-0.72-1.439
+ l-1.009-1.441h-3.023l-1.44-0.289l-1.439-0.719l1.584-0.434v-1.439l0.575-0.432l1.44,0.861l1.584,0.867l1.44-0.576l1.151-1.439
+ v-1.441l0.864-1.439l0.72-1.443l-0.863-1.584l-1.44-2.877l-0.72-1.584l-1.152-1.441l-1.439-0.432l-0.288,1.441l1.441,0.863
+ l0.576,1.439l0.574,1.443l-1.15-1.443l-1.298-1.439l-2.878-2.592l-1.584-1.154l-1.442-0.574l-1.439-0.574l-1.44,0.719l-1.151-0.719
+ M-251.498,676.134l0.434,1.439l0.142,1.439l0.288,1.443l-0.863-0.145 M-251.498,680.597l0.575,1.443l-0.575-0.867"/>
+
+ <polyline id="polyline3483" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -241.418,615.079 -241.563,615.079 -241.418,615.079 -240.843,614.79 -240.122,614.935 -238.681,615.509 -237.242,615.079
+ -238.681,614.501 -237.097,614.646 -235.658,614.935 -234.219,615.079 -232.635,614.646 -234.219,614.067 -235.658,614.067
+ -234.219,613.638 -232.778,613.062 -232.057,611.622 -230.618,612.198 -229.034,612.054 -230.33,610.612 -231.914,610.759
+ -233.354,610.612 -231.771,610.325 -230.33,609.03 -231.771,608.597 -232.49,607.013 -231.771,608.165 -230.187,607.733
+ -230.763,606.149 -230.906,604.71 -230.906,603.271 -231.48,601.829 -231.339,600.39 -229.898,601.687 -229.322,600.247
+ -227.883,600.103 -229.034,598.663 -229.608,597.079 -229.898,596.79 -229.755,596.356 -230.618,594.919 -230.042,593.478
+ -229.179,594.919 -228.024,596.501 -227.45,595.062 -227.738,593.478 -227.162,592.038 -226.44,593.478 -225.003,594.054
+ -225.29,592.612 -226.011,591.173 -226.299,589.733 -225.723,590.743 -224.856,592.181 -225.29,590.743 -225.29,587.718
+ -224.139,586.278 -223.272,587.862 -222.986,589.302 -223.563,587.862 -225.003,587.431 -225.003,589.013 -224.715,590.454
+ -223.994,591.894 -224.139,593.478 -222.555,593.478 -223.706,592.038 -222.265,591.604 -220.971,593.046 -219.53,592.899
+ -217.946,593.188 -217.803,594.63 -216.938,594.054 -215.498,592.899 -215.931,591.462 -215.354,590.022 -216.795,588.581
+ -215.354,587.862 -213.914,586.997 -213.771,585.558 -214.202,583.974 -215.641,582.679 -215.211,581.235 -214.635,582.679
+ -213.192,583.829 -211.755,584.118 -210.314,584.55 -209.162,582.966 -208.73,581.524 -207.29,580.374 -208.73,579.509
+ -208.44,578.071 -209.45,576.483 -208.011,577.349 -206.57,578.214 -207.003,576.772 -205.563,576.341 -207.003,574.903
+ -207.003,574.759 -207.866,573.317 -209.307,572.454 -210.889,572.31 -211.755,570.87 -210.171,571.302 -209.45,571.733
+ -208.011,572.31 -206.856,573.751 -205.418,574.038 -205.994,572.597 -204.555,574.038 -203.114,573.462 -201.675,572.597
+ -202.971,571.157 -204.122,569.718 -205.706,569.431 -204.122,569.431 -204.698,567.989 -206.139,567.558 -207.723,566.55
+ -206.139,567.271 -204.698,567.126 -203.259,568.567 -201.816,569.573 -200.232,569.862 -199.803,568.421 -198.362,568.134
+ -197.786,566.694 -198.795,565.255 -197.354,564.247 -195.771,564.821 -196.057,563.382 -197.354,561.942 -198.507,560.501
+ -199.946,559.349 -199.946,557.765 -198.507,559.062 -197.786,560.646 -196.347,561.798 -194.761,561.509 -194.187,559.927
+ -194.042,558.485 -195.482,558.341 -194.042,557.333 -194.042,555.462 -193.034,557.046 -191.45,556.325 -192.314,554.886
+ -190.874,555.173 -191.738,553.733 -190.299,553.589 -190.874,552.149 -189.29,551.431 -187.849,550.567 -186.41,550.134
+ -186.553,549.702 -187.563,548.839 -189.003,548.118 -187.563,547.687 -187.131,548.263 -185.547,547.542 -186.986,546.821
+ -188.57,545.671 -188.858,545.095 -187.418,545.958 -185.979,546.821 -184.538,546.966 -184.106,545.526 -185.259,544.087
+ -183.818,545.235 -183.675,546.679 -183.385,545.235 -183.242,544.087 -183.963,542.646 -185.402,542.501 -186.843,542.79
+ -188.282,542.646 -189.866,542.935 -191.162,542.935 -192.601,543.509 -193.034,545.095 -192.889,543.653 -192.889,542.214
+ -194.33,541.638 -195.771,541.782 -197.211,543.079 -197.641,544.517 -197.641,545.958 -198.507,547.397 -198.074,545.958
+ -198.219,544.517 -198.938,543.079 -200.379,544.517 -201.816,544.663 -203.259,544.517 -203.259,543.079 -204.698,544.374
+ -204.41,545.813 -204.555,547.255 -205.994,545.813 -205.849,544.374 -207.29,545.382 -207.578,543.942 -209.017,543.509
+ -209.017,544.95 -209.45,544.517 -209.738,543.079 -211.179,543.222 -211.898,544.663 -213.051,546.103 -214.49,545.958
+ -215.931,546.679 -217.515,546.247 -216.795,545.813 -215.354,545.958 -213.914,545.526 -212.473,544.663 -211.898,543.222
+ -211.322,541.638 -211.179,540.198 -212.763,540.054 -214.202,539.911 -215.641,539.911 -217.082,540.63 -218.379,539.046
+ -219.242,537.894 -220.826,537.606 -221.688,536.165 -223.272,534.87 -224.715,534.438 -226.154,534.294 -227.595,534.726
+ -229.179,535.013 -228.458,534.581 -226.874,534.438 -225.433,533.718 -223.994,532.854 -222.698,531.413 -224.139,531.989
+ -225.723,531.271 -227.162,530.55 -225.723,531.126 -224.139,531.558 -222.698,530.403 -221.547,528.966 -222.986,528.103
+ -224.57,528.534 -226.011,528.679 -227.45,528.534 -228.889,528.821 -230.33,527.958 -231.339,526.517 -232.635,525.079
+ -234.074,523.782 -235.515,522.919 -236.954,521.911 -236.232,522.198 -234.795,522.774 -233.211,524.071 -231.771,525.509
+ -230.618,526.95 -229.179,528.247 -227.595,528.247 -226.154,528.103 -224.715,528.103 -223.131,527.813 -221.688,527.235
+ -221.4,525.798 -219.963,524.79 -218.379,523.495 -217.946,522.054 -218.091,520.612 -219.242,519.173 -219.387,517.733
+ -220.25,516.149 -221.834,515.431 -223.272,514.421 -224.715,513.989 -226.154,513.56 -225.003,512.118 -224.427,511.255
+ -224.427,510.534 -224.715,508.95 -224.427,509.382 -223.418,510.821 -222.698,511.687 -221.259,511.829 -219.816,511.11
+ -220.538,512.55 -221.979,512.981 -221.4,514.421 -219.963,514.567 -218.379,514.421 -216.938,514.421 -217.37,512.981
+ -215.786,513.989 -214.347,514.567 -213.626,513.126 -214.347,511.687 -215.211,510.247 -213.771,510.39 -212.33,509.095
+ -210.889,509.671 -209.45,510.103 -207.866,509.095 -206.57,507.653 -205.706,506.214 -206.427,504.63 -207.003,501.751
+ -207.723,500.31 -207.723,495.847 -207.433,496.567 -207.433,499.589 -207.003,501.03 -206.715,501.317 -206.139,502.903
+ -205.563,504.341 -205.418,505.206 -204.986,506.214 -203.979,506.501 -202.538,506.79 -201.097,505.782 -199.515,504.63
+ -198.074,503.765 -196.635,503.911 -195.051,503.333 -193.61,503.478 -192.026,504.919 -190.587,504.341 -189.146,502.903
+ -188.715,501.462 -190.154,501.462 -191.595,501.03 -193.034,499.878 -193.177,499.302 -191.595,498.581 -190.154,497.862
+ -190.154,496.421 -191.595,495.271 -192.171,493.829 -192.026,492.247 -192.171,491.813 -191.738,490.229 -192.314,487.351
+ -192.601,485.911 -191.162,484.612 -190.442,483.173 -189.003,484.183 -188.282,482.599 -187.274,482.743 -185.834,483.606
+ -185.402,482.165 -185.979,480.728 -187.563,479.862 -187.563,478.421 -187.274,479.862 -185.69,480.005 -184.395,478.421
+ -183.53,476.983 -183.53,475.542 -183.963,474.103 -185.402,474.679 -185.402,473.237 -184.969,473.526 -183.53,473.526
+ -181.946,473.671 -180.507,472.374 -180.938,470.79 -180.362,469.351 -179.066,467.909 -178.635,466.472 -178.923,465.03
+ -177.626,463.444 -178.923,462.003 -180.362,461.144 -181.946,459.702 -182.954,458.263 -183.675,456.679 -185.114,457.542
+ -184.395,455.958 -183.675,454.519 -183.818,453.942 -183.675,452.499 -184.106,451.065 -185.547,449.909 -186.986,448.612
+ -185.979,448.901 -184.538,449.331 -184.538,447.749 -184.395,446.312 -184.106,444.87 -183.963,443.286 -183.675,441.847
+ -183.242,440.263 -183.242,438.819 -183.675,437.382 -183.53,435.942 -183.385,434.358 -184.826,433.351 -186.265,432.198
+ -187.706,430.759 -189.29,430.323 -190.73,430.612 -192.314,431.046 -193.755,431.622 -195.194,432.058 -196.635,432.917
+ -198.074,433.927 -198.219,435.366 -199.515,436.808 -200.954,437.382 -201.675,435.942 -203.114,436.663 -204.698,437.095
+ -206.139,436.95 -207.578,437.095 -209.017,435.942 -210.601,435.222 -212.042,435.798 -211.467,437.237 -211.898,437.237
+ -211.608,438.819 -210.601,440.263 -212.042,439.687 -213.626,438.679 -215.064,439.397 -215.354,440.839 -216.938,439.976
+ -218.379,440.839 -219.816,442.278 -221.259,443.431 -222.843,442.421 -222.41,443.862 -223.131,445.304 -224.139,444.438
+ -225.578,445.155 -227.017,444.294 -228.601,444.438 -230.042,445.015 -228.458,443.573 -229.608,442.136 -231.051,442.854
+ -232.49,441.847 -234.074,442.854 -234.219,443.144 -235.658,442.278 -236.809,440.839 -238.25,440.839 -239.834,439.687
+ -241.272,439.542 -242.57,437.958 -244.011,438.819 -245.595,438.966 -247.034,439.11 -246.746,440.55 -248.042,441.987
+ -248.618,443.431 -249.48,444.003 -249.914,445.444 -250.347,447.03 -250.778,448.472 -251.498,449.909 "/>
+
+ <path id="path3485" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M507.67,753.03l0.432,0.572l-0.863,1.584l-1.445,0.576l-1.438,0.432l0.291-1.295l-0.436-0.574l-1.586-1.293l-1.582-0.721
+ l-1.439-1.439l-1.584-0.576l-1.439-1.297h-1.443l-1.148-1.295l-0.867-1.439l-1.439-0.865l-1.439-0.432l-1.584-0.434l-1.441-0.143
+ l-1.295-0.145l-0.289-0.432l1.439,0.289l-0.289-0.578l-0.576-1.008l0.576-0.432l-0.143-1.439l-0.289-1.441v-1.441l1.584-1.293
+ l-0.432-1.439v-1.443l0.285-1.439h1.445l1.148,0.576l1.443-0.721l1.439,0.145l1.584,0.576l1.439,0.432l1.441,0.432l1.586,0.291
+ l1.439-0.145l1.584-0.145h1.439l1.441,0.291l1.441,1.152l1.439,0.717l1.584,0.865l1.441,1.15l1.004,0.576l0.146,1.441l0.289,1.584
+ l-1.295,0.574l1.152,1.443l0.717,1.584L513,746.554l-0.869,1.15h-1.584l-1.438,0.145l-1.439,0.719l-1.008,1.439l0.143,1.584
+ L507.67,753.03 M542.518,788.454l-1.152-0.291l-1.008-1.439l1.152,0.287L542.518,788.454 M542.662,788.454l1.584-0.867
+ L542.662,788.454 M546.98,786.149l-1.01,0.289l-1.439,0.865l1.008-1.15h1.441 M557.494,740.788l-0.145-0.143h0.861l1.584,0.432
+ l1.445-0.432l1.148,1.439l1.443,0.145l0.432-1.441l0.285-0.434l1.445-0.141l1.439-0.289l-0.576-1.443l-1.439,0.146v-0.146
+ l-0.145-0.43v-0.721l-1.295-1.152l-1.586,0.434l-1.439,0.143l-1.293,1.439l0.43-1.582l-0.719-1.441l-1.439-0.576h-0.145
+ l-0.432-0.141h0.145l0.863-0.145l1.438-0.574l0.578-0.578l0.291-0.287h0.863l0.576-1.441l0.145-0.434l1.008-0.143l0.145-1.441
+ l0.141-0.289v0.289l0.291,1.152v1.439l-1.441,0.867l-1.441,0.432l0.291,1.152l1.439-0.434l1.584,0.434l1.439,0.432l1.441,0.287
+ l1.441,0.291h0.143l1.586,0.287l1.438,0.291l1.441-0.436l1.584-1.008l-0.287,1.443l1.582,0.574v0.143l-1.152,0.721l0.289,1.439
+ l0.865,1.584l-1.582,0.434l1.582,0.576l-0.574,0.141l-1.439,0.865l-0.436,1.441l1.441,0.289l-1.006,0.289l-1.584-0.576
+ l-1.014-1.441l-1.438,0.721l-1.439,0.432l-0.291,0.145l-1.439-0.432h-1.439l-0.576-0.289l-1.439-0.145l-1.443-0.576l-1.584-0.141
+ l-1.439-0.293L557.494,740.788 M569.445,718.038l-1.008,1.148l-1.439-0.141l-1.584-0.146l-1.443-0.143l-1.439-0.143l-1.584-0.719
+ l0.576-0.291l1.438,0.576l1.584-0.576l1.445-0.287l1.439,0.721l0.863-1.584l-0.432,1.584H569.445 M578.518,750.438l0.289,0.574
+ l0.289,0.723l-0.289,1.438v1.441l0.143,0.865l-0.432,1.439l-1.295,0.145l0.863-0.432l0.578-1.584l-0.145-0.434v-1.441l0.291-1.584
+ l-0.145-0.287L578.518,750.438 M-251.498,297.414v-1.151"/>
+
+ <path id="path3487" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-215.931,167.238l0.29,1.008l1.15,1.44l0.72,1.439l0.578,1.442l-0.288,1.438l-1.442,1.439l-1.439,1.008l-0.72,1.44l-1.15-1.44
+ l-0.434,1.584l0.575,1.442l-0.288,1.438l-0.43,1.44l-0.722,1.439l-1.008,1.44l-0.576,1.44l-0.574,1.584l-1.584,1.439l-0.576,1.44
+ l-0.29,1.439l-0.718,1.442l-1.01,1.584l-0.721,1.438v1.44l-0.72,1.44v-0.145l0.29-1.439l0.286-1.44l0.29-1.44l0.574-1.438
+ l0.576-1.586l0.575-0.721l0.721-1.439l0.576-1.584l0.146-1.439l1.15-1.438l-1.584-1.154l0.288-1.439v-1.44l0.146-1.439l0.286-1.584
+ l0.288-1.44l0.144-1.584l0.433-1.44l0.288-1.439l0.72-1.44v-1.584l0.288-1.438l0.146-1.584l-0.434-1.442l-0.145-0.718l-0.288-1.584
+ l-0.718-1.442l-1.298-1.438l-1.44-0.435l0.576-1.438l0.145-1.584l-1.44-1.298l0.72,0.432l1.44-0.576l-1.152-1.439l1.009,0.144
+ l1.441-0.144l0.576-0.286l0.43-0.288l1.442,0.574l-1.442,1.584l0.433,1.439l1.151,1.442l1.009,1.584l1.151,1.438l-0.144,1.442
+ l0.434,1.438l0.718,1.44l0.433,1.44L-215.931,167.238 M527.109,722.501h0.432l1.441-0.434h0.143l0.867-1.438l-1.01,0.287
+ l0.865-1.584l-0.432-1.439l1.15-1.439l0.289-1.443l-1.152-1.439l-0.863-1.586l-1.586-0.287l-1.438-0.432l-1.443-0.576l-1.584-1.008
+ l-1.439-0.576l-1.584-1.439l-1.441-0.146l-1.15-1.438l-0.293-1.441l-0.717-1.584l-0.863-1.439l-1.588-0.723l-1.438,0.146
+ l-1.439,0.141l-1.439-0.432l-1.443,0.143l-1.008,0.289l-0.143-0.141l-0.143-0.291l-0.291-0.143l-1.584,0.143l-0.432,0.867
+ l-1.439,0.572l1.439,0.867l1.438,0.576h0.146l1.008,0.289l1.297,0.141l1.439,1.01l-0.145-0.143l-0.863-0.578l-1.439-0.717
+ l0.863-0.867l1.152,0.576l1.584-1.293l1.439,0.717l1.584,0.867l1.441,1.295v1.441l-0.434,1.439l-1.439,0.145l-1.584-0.289
+ l1.439,0.863l1.152,1.441l-1.439-0.145l-1.152-0.432l-1.584-1.295l-1.439-1.152l-1.445-0.719l-1.584,0.145l1.584,0.719l1.445,0.43
+ l1.439,1.154l-1.439-0.434l-1.445-0.143l1.445,0.865l1.584,1.152l-1.584-0.145l1.584,0.865l1.439,1.008l-1.439-0.145h-1.445
+ l-1.584-0.289l-0.139-0.287l-0.145-0.865l-1.584-0.143l-1.441-0.721h-1.582l1.439,0.289l1.584,0.717l1.584,1.01l0.145,0.145
+ l0.863,1.008l1.295,0.143l1.582,0.434l1.443,1.152l-0.293,1.441l-1.584,0.287l1.445,0.434l1.582,0.432l1.584,0.434l1.441,0.143
+ l1.439-0.432l1.152-0.145h1.584l1.438,0.434l1.584,0.143l1.445,1.293l1.293,1.297v1.439l-0.432-0.145h-0.432l-1.441,0.145
+ l-1.441,0.721l-0.143-1.443l-1.441,0.721l-1.439,0.434l0.432,1.439l1.584,1.295l0.576-1.439l1.438,0.289l1.012-1.443l1.295-0.43
+ l0.432,0.143L527.109,722.501"/>
+
+ <polyline id="polyline3489" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -165.675,185.526 -165.818,186.246 -167.402,186.39 -167.402,184.662 -166.681,183.222 -166.395,181.782 -166.826,180.198
+ -166.969,181.638 -167.402,180.198 -167.259,181.782 -168.122,183.222 -167.979,184.662 -168.267,184.518 -168.267,184.085
+ -168.553,182.648 -169.418,181.206 -168.986,179.766 -167.979,178.182 -167.114,176.742 -167.979,175.301 -168.553,173.862
+ -169.131,172.278 -169.994,170.838 -170.137,169.4 -171.578,169.974 -172.154,168.392 -172.874,166.95 -173.45,165.51
+ -174.026,163.926 -175.322,162.486 -175.61,161.045 -175.898,159.461 -176.187,158.024 -175.898,157.446 -175.61,155.862
+ -174.601,156.006 -174.171,154.568 -174.026,153.99 -174.601,152.549 -174.889,151.11 -175.034,150.246 -175.898,149.669
+ -176.906,148.808 -178.345,149.238 -179.211,147.797 -178.923,146.213 -178.202,144.776 -177.771,143.333 -177.626,141.75
+ -177.626,140.312 -176.761,138.87 -176.618,137.43 -176.618,137.286 -176.33,135.846 -176.042,134.262 -175.177,132.822
+ -174.314,131.381 -174.314,131.238 -173.595,129.797 -172.154,128.501 -170.715,127.494 -169.274,127.206 -168.122,125.768
+ -167.259,124.326 -166.538,122.742 -165.385,122.166 -163.803,122.024 -162.362,121.734 -160.923,120.728 -161.211,121.304
+ -162.65,122.312 -164.091,123.174 -165.53,124.326 -165.53,125.768 -165.675,127.352 -164.234,127.206 -164.666,128.79
+ -166.106,129.654 -166.826,131.238 -168.122,132.678 -167.547,134.118 -166.106,134.406 -165.818,135.99 -164.379,137.144
+ -163.225,138.582 -162.362,140.024 -163.082,141.608 -163.946,143.045 -164.522,144.629 -164.091,146.07 -162.65,146.79
+ -161.211,146.648 -159.771,145.782 -158.187,145.64 -156.746,145.352 -155.307,145.494 -153.866,145.64 -152.282,145.782
+ -151.851,144.342 -150.41,143.768 -148.971,143.48 -147.53,142.614 -145.946,143.333 -146.379,143.768 -146.379,143.91
+ -147.963,144.629 -149.402,145.206 -150.41,146.648 -151.994,147.51 -153.435,147.942 -154.874,149.094 -156.314,149.669
+ -157.034,151.254 -156.746,152.694 -157.898,152.838 -159.339,152.984 -160.778,154.278 -162.362,154.998 -163.803,155.144
+ -165.242,155.717 -166.106,157.158 -166.106,158.6 -166.395,159.896 -166.969,161.333 -167.402,162.917 -167.834,164.358
+ -167.114,165.797 -166.538,167.238 -166.106,168.678 -164.954,171.558 -163.513,172.854 -162.362,174.293 -161.354,175.734
+ -160.635,177.174 -160.202,178.614 -160.202,180.054 -160.057,181.638 -160.202,183.078 -160.345,183.942 -161.066,185.526
+ -161.641,186.965 -162.219,187.542 -162.938,189.125 -164.379,190.568 -164.954,192.006 -165.242,192.15 -166.538,193.734
+ -167.259,192.15 -167.259,193.734 -168.267,192.15 -168.122,190.709 -166.681,190.709 -165.818,189.27 -164.379,187.686
+ -163.658,186.246 -163.513,185.958 -162.938,184.374 -162.219,182.934 -162.65,181.494 -162.219,180.054 -162.219,178.47
+ -162.362,177.03 -162.507,175.59 -163.37,174.006 -164.809,172.568 -163.946,174.15 -163.225,175.59 -163.513,177.03
+ -163.513,178.614 -163.946,180.054 -164.522,181.494 -163.225,183.078 -163.658,184.518 -164.234,185.958 -165.53,187.4
+ -164.666,185.816 -164.666,185.526 -164.234,184.085 -164.522,182.501 -165.097,183.942 -165.675,185.526 "/>
+
+ <polyline id="polyline3491" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ -92.091,138.728 -92.234,139.158 -92.091,140.6 -90.938,142.184 -91.658,143.622 -92.234,145.064 -93.242,146.648 -94.683,146.936
+ -96.267,147.654 -97.131,149.094 -97.706,150.678 -97.563,151.4 -97.563,152.984 -96.122,152.838 -95.69,151.4 -94.106,152.262
+ -92.666,153.702 -93.099,155.144 -91.658,154.854 -91.37,156.293 -90.938,157.734 -89.498,158.888 -88.059,159.608
+ -87.051,158.166 -86.33,159.608 -84.891,160.038 -84.891,158.6 -85.179,157.158 -86.618,155.574 -86.906,154.133 -86.475,152.694
+ -86.33,151.254 -85.467,149.669 -84.171,148.232 -84.026,146.79 -82.587,146.358 -81.435,144.917 -81.146,144.629 -80.57,143.192
+ -79.131,142.614 -78.41,144.056 -78.122,145.64 -77.69,147.078 -77.979,148.518 -77.979,150.104 -77.834,151.542 -77.547,152.984
+ -77.402,154.422 -75.818,153.125 -74.379,151.686 -72.938,151.542 -72.507,150.104 -72.362,148.95 -72.362,147.51 -71.786,146.07
+ -71.643,144.486 -71.498,143.045 -71.066,141.608 -71.354,140.166 -71.643,138.582 -71.211,137.144 -71.211,135.702
+ -70.923,134.262 -70.059,132.822 -70.202,131.238 -69.051,129.797 -69.482,128.358 -68.763,126.917 -68.33,125.333
+ -68.042,122.454 -67.322,120.87 -66.603,119.43 -66.603,117.99 -65.595,116.406 -64.73,114.965 -66.171,113.526 -67.61,113.381
+ -69.051,114.246 -69.771,115.688 -68.187,116.262 -68.475,117.702 -69.482,119.286 -70.923,119.72 -71.498,121.304
+ -72.074,122.742 -73.37,124.184 -74.811,124.472 -74.091,125.91 -73.082,127.352 -73.946,128.79 -74.811,130.232 -75.818,131.669
+ -77.259,133.11 -78.698,133.542 -80.139,133.688 -81.146,135.125 -82.587,133.83 -82.442,132.392 -81.723,130.95 -80.139,129.942
+ -78.698,128.648 -78.122,127.206 -77.69,125.768 -79.131,126.342 -80.57,127.352 -82.154,127.494 -82.874,125.91 -83.307,124.472
+ -83.307,123.03 -83.019,121.446 -84.458,120.728 -85.898,120.15 -86.475,118.568 -86.187,117.125 -85.467,115.542 -85.61,114.104
+ -86.906,114.678 -88.347,115.83 -89.786,117.272 -91.227,118.709 -92.666,120.293 -93.675,121.734 -93.675,123.174
+ -92.954,124.614 -91.515,125.91 -89.931,127.352 -89.786,128.79 -89.786,130.232 -89.643,131.669 -89.498,133.254 -89.931,134.694
+ -91.37,135.99 -92.811,135.56 -94.106,134.118 -94.971,132.678 -95.402,131.094 -95.547,129.654 -96.698,128.07 -96.843,126.629
+ -95.69,125.192 -96.843,123.608 -98.282,123.896 -98.282,124.038 -98.715,125.622 -97.994,127.064 -98.139,128.501
+ -98.427,130.085 -98.282,131.526 -97.706,132.965 -97.563,134.406 -96.986,135.846 -96.698,136.709 -96.843,138.293
+ -97.131,139.734 -95.69,139.877 -94.25,138.87 -92.666,138.44 -92.091,138.728 "/>
+
+ <path id="path3493" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M383.398,899.478l0.141,0.145l1.006,0.574l1.445-0.143l1.008-1.441h1.293l1.152,0.434l-0.289-1.443l-1.584-0.717l0.434-1.439
+ l-0.576-1.012l-1.439,0.576l-1.445-1.295l-0.715,1.441v0.578l1.439,0.143l-1.439,0.717l0.432,1.443L383.398,899.478
+ M416.23,326.358v-0.576V326.358 M416.518,334.278l-1.008,0.576l0.145-1.584l0.287-1.584l0.291-1.441l0.141-1.438l0.434-0.723
+ l1.441-1.438l1.584,1.008l1.439,1.295l0.721,1.439l-0.721,1.586l-1.584,0.143l-0.145,1.439l-1.439,0.434L416.518,334.278
+ M416.23,326.79l-0.721-0.863l-1.441-1.152l-0.289-1.439l-1.152-1.441l-0.432-1.439l-0.289-1.584l-1.15-1.584l-1.439,0.576
+ l-1.586,0.287l-1.441,0.432l-1.584-0.574l-1.439-1.441l-1.439,0.72l-0.721,1.439l-1.152,1.586l-1.439,0.574l-1.441,0.863
+ l-1.582,0.865l-0.436,0.432v1.441l1.443,0.287l1.439,1.295l0.865,1.441l0.719,1.584l1.584,0.287l1.438,1.152h1.445l-0.436-1.584
+ l1.584,1.008l1.443,0.287h1.439l0.432,1.441l1.439-0.145l0.578,1.584h1.439l-0.289-1.439l-0.287-1.584l0.574-1.439l-0.432,1.439
+ l0.576,1.584l1.441-1.441l0.287,1.441l0.289-1.441l1.152-1.582l1.01-1.441V326.79 M415.076,314.982l-1.15-0.145l-1.439,1.44
+ l0.432,1.584l0.863,1.441l0.145,1.438l0.287,1.586l0.291,1.439l1.584,0.432l0.145,0.145l1.439,1.008l1.439-1.152l0.863,1.441
+ l1.586,0.863l1.441,0.719l0.863,1.441l1.439-1.008l-1.439-1.297l1.439-0.289l0.576-1.582l1.443-0.145l1.582-0.289l1.441-0.719
+ l1.295-1.441l-1.01-1.582l1.441-1.008v-3.026l1.441-1.44l0.721-1.584l0.141-1.439l0.291-1.44l-0.869-1.439l-0.717-1.584
+ l-1.439-0.721l-1.441,0.145l-1.584,0.576l-1.439,1.439l-1.441,0.864l-0.143-1.44l-1.441,0.145l-1.441,0.144l-1.582,0.288
+ l-1.586-0.144l-1.439-0.145l-1.293,0.145l-1.014,0.864l-1.438,1.439l-0.576,1.152l1.008,1.439l0.576-0.288l1.152,1.44l1.584,0.288
+ l1.439,1.008l-1.439-0.576l-1.584-0.288L415.076,314.982"/>
+
+ <path id="path3495" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M351.141,897.604l0.291-1.008l-0.576-0.861l-0.289-0.146l-1.438-0.576l-1.443,0.291l1.008,0.576l0.145,1.152l0.863,0.289
+ L351.141,897.604 M358.629,894.005l-0.719,1.297l-0.143,0.287l-0.576,1.443l1.584,1.293l0.145-1.439l0.143-1.584l0.434-1.439
+ l-0.434-1.297L358.629,894.005 M361.074,896.886l0.867,0.576l1.438,0.141l1.445,0.576l0.432,0.291l1.584-0.291l1.439-0.576
+ l1.438-0.432l-0.141-1.439l-1.443-1.439l-1.004-0.291l-0.434,1.443l-1.439-0.291l-1.439-1.008l-1.584-0.145l-1.154,1.443v1.441
+ M369.715,891.845l0.578,0.289l1.584-0.719l-0.432-1.293l-0.721-1.443l1.443-1.152l1.439-1.291l-1.439-1.299l-1.443-0.432v-1.439
+ l1.01-1.297l1.295-0.865l0.432-1.438l-0.141-0.145l-0.438-1.439l-0.141-0.434l-0.574-1.582l0.432-1.154l-1.441-0.719l-1.443-0.145
+ l-1.438,0.576l-1.295,1.443l-1.295,1.582l1.441-0.434l0.719,1.443l0.432,1.148l0.432,1.584l-1.008-0.432l0.145-1.439l-0.865-1.439
+ l-0.143,1.439l-0.432,1.439l-0.436,1.297l-0.432-1.441h-1.439l0.576-1.582l0.285-1.443l-1.438,0.432h-1.439l-0.863,0.436
+ l1.439,0.576l-1.008,1.582l-0.867,1.441h-1.439l-1.584,0.576l1.584,0.863l-1.441,0.145l1.441,0.143l0.576,1.441l1.15,1.584
+ l-0.719,1.439l0.145,0.143l1.152,0.434l1.584,1.15l1.439-0.289h0.285l1.445-0.432l1.439,0.719l-0.432,1.441l1.584,0.576
+ l-0.291,0.719l-0.432,1.586l1.295,1.293l0.141,0.146l0.293,1.15l0.863,1.439l0.432-0.145l-0.432-1.439l0.576-1.584l0.867-1.441
+ l-1.443-0.43l-1.439-1.443h0.287 M364.533,902.214l-0.287-1.297l-0.432-0.145l-1.443,0.291l0.867,1.439h0.139L364.533,902.214
+ M399.238,884.788l0.432-0.143l0.287-0.865l-0.287-1.441l-1.439-0.287l-1.297-0.432l-1.439-0.145v1.439l0.574,1.439l1.441,0.291
+ l1.584,0.143H399.238 M375.189,891.413l0.145-0.865l-1.01-0.145l-1.443,0.721l-0.861,0.432l0.576,1.441l1.152-1.441
+ L375.189,891.413"/>
+
+ <path id="path3497" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M398.23,811.493l-0.291,1.295l-0.432-1.441L398.23,811.493 M406.006,859.302l-0.434-1.875l0.289-1.441v-1.439l0.432-1.584
+ l0.721-1.441v-1.584l0.432-1.584v-1.439l-0.145-1.584l1.297-1.439v3.023l-0.145,1.439l-0.287,1.441v1.441l-0.145,1.582v4.609
+ l-0.145,1.443l0.145,1.439l-1.152,1.439l-0.287-1.008L406.006,859.302 M453.238,805.013l-0.867,0.434l0.721,1.441l0.145,0.145
+ l1.439-1.297L453.238,805.013 M447.766,820.278l-0.721-1.152l0.145-1.439l0.432-1.441l-1.439-0.143l-1.441-1.441l-0.574-1.584
+ l-0.576-1.439l1.439,0.43l1.152-1.438l0.719-1.443l1.441-1.008l1.584-0.717l1.439-0.576l1.441,0.432l0.572,0.145l1.445,1.008
+ l-1.445,0.863l-0.572,1.439l-0.574,1.584l-1.443,0.867l-1.584,1.008l-1.008,1.584l0.432,1.439v1.584L447.766,820.278
+ M441.715,787.013l1.443-0.574l0.719-0.434l-0.143,0.576l-0.719,1.441l-1.441-1.01H441.715 M422.854,794.501l-1.008,0.289
+ l0.576-0.143L422.854,794.501 M420.547,795.222l-0.285,0.143l-1.439-0.576l-0.145-0.143l0.576-0.145l1.439-0.576l0.434,1.152
+ l-0.434,0.145H420.547 M442.582,786.581h-0.145H442.582 M438.838,788.165h0.143l1.441-1.152l0.863-1.584l-0.576-1.439l0.432-1.439
+ l-1.439,1.295l-1.439,1.295v1.439l-0.145,1.584l0.145,0.291l0.145-0.145L438.838,788.165 M638.277-77.128l1.152-0.576l0.863,1.438
+ l1.441,1.01l-1.441,0.145l-0.578-0.145l-1.438-0.288l-1.439-1.296L638.277-77.128 M632.373-82.457l-0.141-0.144h-0.146l-1.438-1.44
+ l1.146-0.287l1.445-1.009h1.439l1.439-0.144l1.584,0.144l-0.432,1.44l-0.289,1.439l0.434,1.44L639-80.44l-1.443,0.864l-1.584,0.432
+ l-1.01-0.145l-1.438,0.721l-1.584-0.721l-1.152-2.88L632.373-82.457 M322.918,920.788l1.439-0.574l-1.584,0.432L322.918,920.788
+ M304.197,928.853v-0.289V928.853"/>
+
+ <path id="path3499" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M514.293,557.478h0.145l-0.145-1.584l1.441,0.865l-1.01-1.441l-1.584-0.432l-1.439,0.287h-0.287l-1.443,0.434l-1.584,0.289
+ l-1.439,0.287l-1.439,1.01l-0.721,1.584l-0.141,1.441l0.287,1.441l0.576,1.582l1.584,1.584l1.152,1.441l1.439,1.295h3.023
+ l1.584-1.152l0.576-1.584l0.289-1.439l0.434-1.441l-0.145-1.584l-0.719-1.439L514.293,557.478 M536.471,500.022h0.719l1.438-0.143
+ l1.443,0.576l0.578,1.584l-1.01,1.439v1.01l-1.441,1.008l-1.584-0.576l-1.439,0.865l-0.293,1.439l-1.438,0.145l-1.584,0.289
+ l-1.439-0.146l-1.441-0.43l-1.441-0.578l1.152-1.439h-1.584l-0.863-1.439l0.576-1.443l1.439-0.574h1.584l1.439,0.145l1.584-0.719
+ l1.441-0.576l0.572-0.145L536.471,500.022 M612.934,468.917l-0.145-0.863h-1.584l-1.439-0.289l-1.441,1.297l0.145,1.586
+ l-1.588,0.285l0.146,1.584l0.43-1.584l1.584-0.143l1.445,0.432l1.439-0.865L612.934,468.917 M318.021,17.192l-0.865-0.432
+ l-1.441-1.152l-1.439-0.72l-1.439-1.154l1.152-1.584l0.287-1.438l1.439-1.008l1.441,0.286l1.582,1.154l1.443,1.296l0.717,1.439
+ l1.443,1.297l-1.152,1.438l-1.584,0.866h-0.145L318.021,17.192 M333.715,871.685l1.154-1.008l0.432-1.441l-0.717-1.439
+ l-1.443,0.719l0.291,1.008l-1.152,1.441L333.715,871.685 M299.014,833.813l0.287,0.289l-0.287-0.145V833.813 M299.301,827.046
+ l-0.863-0.576l-0.576-1.439l0.287-1.443l0.721,0.434l1.01,1.441L299.301,827.046 M297.861,832.517l0.576,0.434l0.289,1.008
+ l-1.012,1.441l0.146-1.584V832.517 M296.854,823.157l-0.865,0.145L296.854,823.157 M301.029,822.726v0.145l-1.15,1.584
+ l-0.578-1.443l1.152-1.584L301.029,822.726 M350.277,892.565h1.152l0.719,1.439h1.582l1.443,0.145l1.439-0.721l1.293-0.863v-0.145
+ l0.148-1.439l-0.578-1.584l0.289-0.289l-1.293-1.441l-1.59-0.145l1.59-1.15l-1.443-1.441l-0.146,0.719l0.146,1.441l-1.439,0.721
+ l0.141-1.584l-1.438-0.721l-1.441,0.721l-1.584,0.863l-0.865,0.721h-1.582l-0.145,0.287l1.008,1.152l1.008,1.441l0.576,1.439
+ l1.152,1.439l-0.145-0.574v-0.432 M374.182,880.47l-1.008,0.717l0.863,0.721L374.182,880.47"/>
+
+ <path id="path3501" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M346.965,663.173v0.867l-0.141,1.439l-0.434,1.441l-0.865,1.438l-1.152,1.154l-0.143-1.441l0.143-1.439l1.006-1.584l0.146-1.443
+ L346.965,663.173 M351.715,661.444L351,661.153l0.287-1.438l1.439-0.576h0.145l0.863-0.721h-1.582l0.289-1.439l1.584,0.289
+ l-1.152-1.584l1.443,1.295l-0.145-1.439l1.439,0.432l-0.143,1.439h1.582l-0.145,1.584l0.291,1.441l0.432,1.008l-1.582,0.865
+ l-1.441,0.432l-1.152,1.584h-1.439l0.865-1.584l-1.441,0.291L351.715,661.444 M360.789,652.087v0.143V652.087 M363.238,645.462
+ l-0.721,1.293l0.145,1.439l1.152-1.58v-1.443L363.238,645.462 M362.086,645.894l0.287-0.145l0.434-0.145l-0.574,1.443l-0.145,1.584
+ l-1.439,1.15l-1.586-1.01l-0.865-1.439l-0.143-0.145l1.295-0.863l0.291-1.584l1.438,1.439l0.289-0.141L362.086,645.894
+ M357.477,647.478l0.289-0.145l-0.145-0.287l0.867-1.584l-1.441,0.576L357.477,647.478 M370.293,642.726l-0.143,0.287l-1.584,0.434
+ l0.865-0.289l0.285-0.145L370.293,642.726 M368.131,643.589l-0.139,0.145L368.131,643.589 M420.262,792.485l0.432,1.295
+ L420.262,792.485 M417.67,791.478l0.432-0.578l0.432,1.586l1.439-0.721l-1.293-1.439h-1.584l-1.439-0.145l1.293,1.584l-0.287,1.441
+ l-1.441-0.574l1.01,1.584l1.439,0.287l0.863-0.432l0.145-0.865l-1.008-1.441V791.478 M433.51,787.302l-1.297,0.143l1.443-0.291
+ L433.51,787.302 M434.662,786.149l-0.869,0.863L434.662,786.149 M426.883,782.837l0.146,0.865l1.008-0.576L426.883,782.837
+ M436.389,782.403l-0.287,0.578v-0.432L436.389,782.403 M436.246,782.837l-0.145,1.01v-0.721L436.246,782.837 M424.582,706.806
+ l-0.145-0.291l-1.584,0.291l-0.723,1.439v0.145l0.293,0.143l1.584-1.01L424.582,706.806 M444.021,732.438l-0.145,0.289v-0.289
+ H444.021 M417.379,623.286l-0.572-1.008l-0.143,1.586h1.008l-0.293-0.434V623.286 M490.533,668.646l0.721-0.578v-0.141
+ l-1.297-1.443l-1.439,0.289l0.432,1.584L490.533,668.646"/>
+
+ <path id="path3503" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M301.029,783.7h1.008l0.436,0.145L301.029,783.7 M301.605,782.981v0.143V782.981 M338.182,721.349l-0.145,0.145l-0.576-0.721
+ l0.863-1.439l0.867,0.576L338.182,721.349 M335.879,685.78l-1.152,1.441l-0.289-0.719l1.441-1.584V685.78 M339.766,680.741
+ l0.289,1.008l-0.289,0.145V680.741 M333.285,687.653v-0.289l1.008-1.439l0.291,1.439l-0.145,0.865l-0.143,0.432l0.143,0.434
+ L333,690.679l0.141-1.443L333.285,687.653 M336.598,683.188v-1.293l1.439,0.145l1.584-0.145l-0.287,0.719l-1.443,1.295
+ l-0.287,1.584l-1.439,0.289l0.432-1.441l-0.576,0.291L336.598,683.188 M325.797,753.749l0.145,0.432L325.797,753.749
+ M329.543,747.847l-0.865-0.434L329.543,747.847 M345.813,686.067l-0.143-0.43v-0.145l1.439-0.287l-1.293,1.008v-0.146
+ M343.223,676.421l-0.145-0.432h-0.574l-0.434-0.143v1.584L343.223,676.421 M344.086,679.444v-0.143l-0.576-1.584l-0.576,1.439
+ l-0.289-1.008l-1.586,1.008v1.439l-0.717,1.152v0.291l1.439,0.287l0.867-1.584L344.086,679.444 M342.357,673.397l1.008-0.576
+ l-0.717,1.582v1.297l0.287-0.143l1.584-1.154l0.576-1.293l-0.721-1.439l-0.863-1.441l-1.008-1.584l-0.576,1.441l1.15,1.584
+ l-1.295-0.436l-0.287,0.436l-0.576,1.439l-1.439,0.145l0.287,2.879l1.439-1.295L342.357,673.397 M346.82,668.214l0.719,1.15
+ l0.576,1.441l0.291,1.584l-0.867,1.295l0.289,1.584l0.145-1.441l0.865-1.584v-0.574l-0.291-1.441l1.441-1.295l1.582,0.289
+ l0.436,1.439l0.287,1.584l-0.145,1.152l-1.438,0.576l-0.578,1.584l-0.287,1.439l-1.152-1.584l0.145,1.584l-0.432,1.441
+ l-1.445,0.289v-1.584l-1.291,1.439l-0.721,1.441l-0.289-1.584l0.578-1.441l-0.721-1.439l1.439-1.008l-0.719-1.441l0.578-0.576
+ v-0.143l-0.291-1.441l-0.146-1.584l0.293-0.574L346.82,668.214"/>
+
+ <path id="path3505" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M411.908,147.51l0.434-0.433l-0.145-0.142l-1.584-0.578l-1.439-0.576l-1.441-0.718l-1.584-0.578l-1.584-0.288l-1.439-1.006
+ l1.439-1.154l-0.289-1.438h-1.439l-1.439-0.866l-1.443-1.006l-1.439,0.288l0.576,1.438l0.432,1.442l1.152,1.438l-0.432,1.442
+ l-0.432,1.582l-0.145,1.439l-1.008,1.44l-0.721,1.44l-1.439,1.008l-1.443,0.144l-1.439-1.438l1.008-1.442l1.441,0.145l1.586-0.721
+ l0.863-1.296l0.432-1.438l0.145-1.584v-1.442l-1.152-1.439l-1.008-1.44l-1.439-1.152l-1.441,0.435l-1.584,0.574l-1.01,1.584
+ l-1.293,1.439h-1.443l-1.584-0.142l0.145,1.584l0.721,1.438l0.576,1.584l0.432,1.584l0.576,1.442l1.439,1.15l1.441,0.863
+ l1.008,1.584l-0.143,1.442v1.584l0.287,1.438l0.867,1.442l0.572-1.442l0.867,1.442l1.584-0.434l1.008-1.297l1.295-1.439l1.586-1.44
+ l0.572,1.584l-1.293,1.442l1.152,1.584v0.43l-0.869,1.442l0.293,1.438l0.287,1.584v1.44l-0.432,1.584l1.438,0.29l1.584-1.298v1.586
+ l1.443-0.723l1.441,0.576l1.439-0.142l0.721-1.442l0.576-1.438l0.719,1.438l1.439-0.142l0.578-1.442l1.15-1.584l1.439-0.863
+ l0.145-1.44l1.441,1.44l0.863-1.584l0.576-1.44l0.145-1.584l-0.432-1.44l0.432-1.584l0.715-1.438l-0.139-1.586l-0.721-1.44
+ l-0.576-1.438l-0.719-1.442l-1.441,0.145l-1.584,0.863l-0.721,1.442l-1.58-0.866L411.908,147.51 M252.502,26.694l0.575-0.43
+ l1.44-1.297h1.584l1.584-0.434h1.443l0.43,1.586l0.289,1.44l-0.576,1.438l-1.008,1.442l-1.439,1.152l-1.445,1.438l-1.438,1.154
+ l-1.439,1.296l-1.584,0.43h-1.44l-1.584,0.288l-1.44,0.288l-1.584-0.43l-1.439-1.009l-1.584-1.439l-1.44-1.154l-1.439-1.726
+ l0.432-1.442l1.584-1.296l1.584-0.718l1.584-0.288l3.168-1.44l1.584-0.144l1.584,0.43l1.44,0.722L252.502,26.694 M293.109,813.796
+ l-0.719,0.143L293.109,813.796 M293.686,791.478l-1.152-0.578l1.01,1.441L293.686,791.478"/>
+
+ <path id="path3507" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M465.334,460.569l0.719-0.867l-0.719-1.441l0.145-1.441l-0.578-1.439l-0.719-1.584l0.576-1.441l-0.867-1.441l-0.572-1.438
+ l0.141-1.582v-1.443l-0.432-1.584l0.432-1.441l-1.148-1.584l1.439-0.143l-0.432-1.441v-1.578l-0.145-1.441l0.432-1.582
+ l-0.576-1.441l-0.146-1.441l0.146-1.441l-0.289-1.438l-0.289-1.441v-1.584l-0.287-1.441l-0.434-1.443l-0.432-1.582l-0.578-1.439
+ l-1.15-1.441l-0.719-1.439l-1.584-1.008l-1.439-1.295h-1.443l-1.582,0.143l-1.441,0.865l-1.439,1.15l-0.432,1.584l0.287,2.877
+ l0.289,1.443l0.865,1.584l0.289,1.441l1.584,0.285l1.441,0.578l-1.297,1.441l0.721,1.439l-0.576,1.443l0.721,1.582l0.432,1.586
+ l-0.869,1.438l0.293,1.441l0.145,1.584l-0.867,1.441l0.145,1.443l-1.584,0.861l-1.441,0.865l-0.289,1.441l0.432,1.582l1.582,0.145
+ l0.293,1.441l0.145,1.582l-1.443-1.152l-0.432,1.441l1.438,0.434l-0.285,1.441l0.145,0.574l-0.578,1.586l0.289,1.438l-0.289,1.582
+ l0.434,1.443l0.432,1.441l-0.287,1.584l1.439,0.285l-0.145,1.586l0.576,1.441l1.438,1.152l-1.438,1.152l0.145,1.439l1.439,0.291
+ l0.721,1.438l0.287,1.441l-1.584-0.289l-1.008,1.586l1.438,0.863l1.445,0.141l0.574-1.438l1.441,1.152l-0.293,1.441l1.01,1.438
+ l1.584-1.438l1.443-0.148l-1.443,1.443l-0.863,1.584l0.576,1.441l1.584,0.576l0.432-1.584l1.584-0.291l-0.717,1.441l-0.721,1.584
+ l0.721,1.441l1.439-0.143l-0.145,1.439l1.584-0.719l1.441,0.287l-1.584,1.156l-0.865,1.438l0.291,1.582l1.439,1.154l-0.576,1.582
+ l0.287,1.441l0.576,1.441l-0.145,1.443l1.443-0.148l1.439-0.287l0.432-1.441l-0.289-1.439l1.441-1.584l-0.432,1.439l0.145,1.584
+ l1.293,1.441l1.439,1.15l0.291-1.584l0.432-1.439l1.438-0.434l1.443-0.863l1.295-1.441l-1.584-1.01l1.584,0.723l1.443-0.576
+ l1.439-1.154l-0.291-1.582l-0.578-1.438l-1.006-1.443l-1.439,0.287l-1.584-0.143l1.584-0.285l0.576-1.443l-0.865-1.441
+ l-1.441-0.287l-1.582,0.574l-1.441,1.012l1.152-1.443l1.584-0.719l1.439-0.434l-1.152-1.447l-1.439-0.574l-1.439,0.143
+ l-1.443-0.285l-1.582-0.293l1.441-0.289h1.584l1.439-1.152l-1.152-1.438l-0.432-1.441l-0.863-1.445l-1.445-0.43l-1.438-0.43
+ l-1.584-0.291l1.584-0.717l1.438-1.152l-1.438-0.865l-1.008-1.441l-1.584-0.143l1.584-0.434l1.439-0.289l-1.008-1.582l-1.584,0.143
+ l1.584-1.008v-1.584l-1.439-0.434l0.432-1.584h-1.584l-1.152,1.441L465.334,460.569 M508.963,431.046l1.154,0.143l1.439,0.721
+ l0.574,0.719l1.584,0.143l0.146-1.15v-1.441l-0.289-1.584l0.434-1.443l-0.434-1.436l-0.865-1.586l-1.439,0.143l0.861,1.443
+ l-1.584,0.432l-1.438-1.297l-1.584,1.297v1.438l-0.146,1.586l0.438,1.439L508.963,431.046 M418.963,308.358v-0.145l1.445-0.144
+ l0.139,0.288H418.963 M424.869,300.87v0.288l-0.576,1.44l1.584,0.576l1.443-0.145l1.439,0.288l0.721-1.44l1.008,1.584h1.582
+ l1.441-1.008l-0.145,1.584l1.584,0.288h1.584l1.439,0.145l1.443,0.144l1.439-0.144h0.432l1.441,0.432l1.586,0.432l1.582,0.288
+ l1.441-0.72l-0.291-1.584l-0.143-0.144l-1.582-1.297l-2.881-2.592l-0.576-1.584l-0.432-1.439l0.285-1.44l-1.438-0.72l-0.432-1.584
+ l-0.719-1.44l-1.441-1.296l-0.432-1.439l-1.439-0.433l-1.584-0.576l-1.443,0.145l-1.439,0.864l-1.584,0.72l-0.576,1.439
+ l1.439,0.433l-1.584,0.576l-1.439,0.72l-0.723,1.439l-1.438,0.864l0.867,1.44l1.293,1.439h1.439l1.443,0.864l-1.443-0.144
+ l-1.588,0.144h-3.023l-1.439-0.72l-0.721,1.584l-0.287,1.439l1.439,0.288H424.869 M492.98,198.776l-0.143-0.434l-1.439-0.145
+ l-0.145,1.584l0.287,0.432h1.441v-1.438 M367.27,150.965l-0.723,0.576h-2.014l-1.439-0.72l1.439-1.152l1.584,0.864L367.27,150.965
+ M426.74,129.942l-0.865-0.576l-1.439-0.142l-1.439,0.43l-1.584,0.866l-1.443,1.006l-1.439,0.432l-1.584-0.863l-1.439-0.574
+ l-1.152-1.442l-0.719-1.584l-0.289-2.88l-0.145-1.584v-1.439l0.291-1.44l1.293-1.44l1.297-1.584l1.584,0.864l1.008,1.44
+ l1.439,1.298l1.152,1.438l1.152,1.442l0.432,1.584l0.576,1.584l1.152,1.438l1.584,0.435l1.584,0.142l0.574,0.435v1.438
+ L426.74,129.942"/>
+
+ <path id="path3509" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M379.365,441.847v0.141l-0.576,1.443l1.584-1.295l1.443-1.441l-1.443-0.141l-1.439-0.148L379.365,441.847 M392.9,422.554h0.434
+ l1.439-1.156l-0.287-1.439l-1.586-0.291l-0.719,1.441L392.9,422.554 M472.963,501.894l0.723,1.584l1.584,0.721l1.152,1.439
+ l-0.867,1.584l0.291,1.441l1.152,1.439l1.584-1.295l1.439-1.008l0.145,1.439l0.432,1.584l0.863,1.441h1.441l-0.143,1.441
+ l0.287,1.439l1.443,1.295l-0.867,1.441l-1.439,0.143l0.143,1.584l0.719,1.441l1.152,1.441l1.441,1.295l1.439,0.717l1.586,0.867
+ l1.584-0.289l1.439-1.152l0.432-1.439l0.145-1.586l1.584,0.432l1.439-0.287l-0.145-1.584v-1.441l1.297,1.441l1.439-0.432v-1.586
+ l0.576,1.586l1.006,1.439l1.586-1.297l1.443-0.141l0.139,1.439l-1.582,1.293l1.582,0.146l1.443,0.43l0.578,1.443l1.439-1.01
+ l1.584-0.574l1.439-1.01l1.438-0.865l-1.584-0.574l1.584,0.289l1.445-0.576h1.439l-1.152-1.441l0.432-1.584l1.441-0.574
+ l-1.441-0.291l1.441,0.865l1.584-1.441h-1.584l1.584-1.008l1.441-0.143l0.285-1.584l-1.438,1.008l-1.584-0.432l0.719-1.584
+ l1.584,0.289l1.441-0.576l1.297-1.584l-1.443,1.008l-1.439,0.145l1.439-1.01l1.443-1.439l-0.721-1.586l-1.439,0.145l-1.443,0.863
+ l-1.439,0.578l-1.439,0.143l-1.584,0.287h-1.441l-1.441,0.146h-1.439l-1.584-0.434l-1.441-0.289l-1.443-0.289l-1.582-0.145
+ l-1.439-0.574l-1.584-0.576l-1.439-0.719L495,505.208l-1.443-1.295l-0.717-1.441l-1.439-0.145l-1.584-1.293l-1.443,0.432
+ l0.576-1.441l-1.439-0.576v-1.441l-0.434-1.436h-1.582l1.008-1.443l-0.865-1.441l-1.441-1.008l-0.863,1.441l0.287-1.441v-1.443
+ l-1.439,1.443l0.576-1.443l-0.867-1.582l-1.439,0.576l-1.439,1.152l-1.584,1.295l-1.439,0.432l-1.584,1.295v1.582l0.139,1.443
+ l-1.006,1.441l-0.287,1.584L472.963,501.894"/>
+
+ <path id="path3511" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-81.578,692.839l0.432,0.432l0.864-0.432l-1.008-1.441l-0.864-1.584l-0.864-1.439l-1.008-1.441l-1.584-0.719l0.288,1.584
+ l1.008,1.438l-1.44-0.43l0.433,1.439l0.72,1.441l1.44-0.432h1.008L-81.578,692.839 M-82.011,692.403l0.145,0.146L-82.011,692.403
+ M-83.019,691.397l-0.72,0.865h1.439L-83.019,691.397 M-86.187,688.374l-0.144,0.141l-1.44-0.576l-1.584-0.717l1.44-0.432
+ l0.72,0.143L-86.187,688.374 M312.117,502.038l-0.145-0.576L312.117,502.038 M327.379,483.751l0.293,0.719l0.719,1.441
+ l-0.434,1.439l-0.287,1.441l-0.576,1.584l0.145,1.439l0.432,1.441l-0.145,1.584l-0.717,1.439l-1.586,0.719l-0.289,1.441
+ l-0.432,1.584l-1.443,0.576l-1.439,0.145l-1.439-0.865l-1.584-1.297l-1.443,1.152l-1.441,0.145l-1.438,0.287l-1.584-0.143
+ l-1.439-0.434l-1.297-0.576l0.576-1.439l0.291-0.143l1.439,0.434l1.439-0.721l-1.584-1.152l1.584-1.008l1.441-0.863l0.719-1.441
+ l-1.439,0.143l-1.443,0.721l-1.582,0.863l-1.441,1.441l-0.578,0.574l-1.438,0.576l-1.584,0.291l-1.439-1.01l-0.863-1.439
+ l0.717-1.584h0.143l0.289-0.145l-0.432-0.289l-1.439-0.574l-1.586-0.434l1.441-1.008l1.439-0.432l1.584,1.008l0.145-1.441
+ l-1.584-0.863v-1.441l1.584,0.719l-0.145-1.439l-1.439-0.865l0.287-1.441l1.443,1.297l1.439,0.289l1.438,1.584l1.445-0.289
+ l1.439-0.721l1.15,1.441l1.01,1.441l0.432-0.146l0.145-0.43l-0.867-1.584l-0.432-1.441l-0.721-1.584l0.578-1.439l-0.432-1.443
+ l1.582,0.867l0.721,1.441l-0.145,1.584l1.441,0.861l0.43-1.439l0.721-1.439l0.145-1.584l1.439,0.576l1.441,0.289l1.586,0.43
+ l1.439-1.15l1.439-0.143l1.441,0.434L327.379,483.751 M382.102,628.038v0.719l-1.439,0.289l-1.152-1.443l0.863-1.582l1.443,0.574
+ L382.102,628.038 M363.379,642.87l0.438,1.293l-0.438,0.145l-1.438-1.008l-0.287-1.441L363.379,642.87"/>
+
+ <path id="path3513" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M148.102,740.935l0.432-0.719l0.145-1.443l1.439-1.293v-1.439l0.576,1.439l1.44,0.145l1.439-1.01l0.433,0.143l0.72-0.717
+ l-0.864-1.443h1.44l-1.152-1.439l-1.439-0.719l1.439-0.143l1.008,1.584l1.584-0.145v-1.582l-0.144-1.443l-1.44-0.289h-0.72
+ l0.432-0.143l1.44,0.289l1.44-0.719l-1.297-0.721l-1.439-0.289l2.88-2.018l-0.72-1.438l-0.864-1.443l-1.44-0.863l-1.439,0.145
+ l-1.584,1.293l1.296-1.293l1.008-1.441l-0.288-1.441h-1.439l-1.44,0.143v-0.574l1.44-1.295l1.151-1.441l-1.296-1.439l-1.439-0.863
+ l0.863-1.441l0.576-0.434l0.433-1.439l1.439-0.865l-1.439-0.291l-1.44,1.154h-1.44l-0.72,1.584v-0.289l-0.72-1.443l-0.864-1.438
+ l0.576-1.441l-1.152-1.439l-1.008-1.443h-1.439l-1.44,0.865l-0.288,2.881l-1.152,0.721l-0.575,1.439l-0.576-1.008l-1.584,0.143
+ v-1.439l-0.864-0.576l-1.439,1.148l-1.152,1.443l-1.584,1.15v-0.863l-0.288-1.439l-0.864-1.441l-1.296-1.295l-1.584,0.141
+ l-0.144,1.443v1.584l0.432,1.438l-0.432,1.443l-0.288,1.441l-0.145,0.574l-0.144-0.434l-0.145-1.582l0.433-1.443l-0.433-1.438
+ l-1.008-1.441l0.288-1.439l-0.432-1.441l-1.44-1.008l-1.152,0.143l-0.144,0.287l-1.44,0.436l-1.439,0.572l-0.576,1.443
+ l-0.144,1.441l-0.721,1.584h-0.288l-0.432-0.434h-0.144l-0.288-1.15l-0.145-1.441l-0.863-1.443l0.144-1.584l-0.432-1.438
+ l-1.009-0.146l-1.584,0.865l-0.144,1.443l0.144,1.438l-0.288,1.443l-0.575,1.441l-0.433,0.285l-1.151,1.584l0.288-1.148
+ l-0.864,1.439l-0.433-0.432l-0.287-1.295l-0.433-1.441l-1.584,0.717l-0.864,1.443l-0.575,1.439l-0.145-1.439l-0.432,1.439
+ l-0.864,1.441l-0.432,1.584l0.144-1.008v-1.439l0.576-1.586l-1.008-1.439l1.439-1.443l-1.008-1.438l-0.288-1.443l1.44-0.289
+ l1.439-1.148v-1.441l-1.439-0.578l1.439-0.576l-1.439-0.574l0.144-1.439v-1.439l-0.576-1.443l-0.144-0.141l-0.864-1.584
+ l-0.576-1.441l-1.008-1.443l-1.584-0.43h-1.439l-1.44,0.43l1.296,1.443l1.44,0.574l0.863,1.443l-1.584-0.869l-1.439,0.869
+ l1.296,1.439l0.72,1.438v1.441l-1.008,1.443v-1.443l-1.439,1.584l0.432-0.865l0.864-1.438l-0.576-1.441l-1.44,1.01v-1.443
+ l-0.432-1.584l-0.864-1.439l-1.439-0.432l0.287,1.438l-1.439,0.434l-1.44,0.434l0.576,1.441l1.296,1.584l-1.584-1.008l-1.439-1.152
+ l-0.288,1.438l1.008,1.441l1.584,0.867l-1.44-0.146l0.576,1.295l-1.439-0.141v-1.441l-1.152-1.441l-1.44-0.434l0.145,1.441
+ l0.864,1.584l-1.584-1.15l0.144,1.441l-1.008-1.441l-1.44,0.287l-1.439,0.434l1.439,0.721l1.44,1.008l0.576,1.441l1.439,0.143h1.44
+ l1.439,0.43l1.44-0.572l1.584-0.146l0.864,0.291v1.441l0.864-1.584l-0.433,1.584l1.44-0.865l0.432,1.584l1.44,0.43h-1.44
+ l0.288,1.443l1.44-0.719l0.72,1.439l1.439,0.43h-0.863l-1.44,0.146l-1.439,0.43l-1.584,0.146l-1.44,0.576l0.72,1.439l1.44,1.297
+ h1.439l1.44-0.434l-1.152,1.441l-1.439,0.432l-1.44-0.576l-1.439-0.863l-1.44,0.574l-1.44-1.15l-1.439-0.291l-1.584,0.145
+ l-1.44-0.721l-1.439,0.289l-1.44-1.15l-1.439,0.289v1.441l1.296,1.439l1.439-0.432l1.44,0.287l1.439,1.008l1.44,0.721l1.584,1.152
+ l1.44,0.432l-0.145,1.439l1.44-0.145l-0.433,0.145l-1.584,1.15l0.576,1.443l-0.144,1.439l0.863-0.432l1.44-0.434l1.584-0.287
+ l1.296-0.146l0.288,0.146l-0.72,0.719h-0.145l-0.72-0.578l-0.72,0.578l-1.009,0.143l-0.575,0.145l-1.009,1.438v1.586l1.44-0.432
+ h1.584l1.44,0.719h-0.288l-1.44-0.432l-1.439,0.432l-1.584,0.719l0.863,1.441l-0.288-0.143l-1.439-0.432l-0.145,0.143l-0.863,1.439
+ l-1.44-0.291l-1.44,0.436l-0.863-1.443l-1.44,0.434l-0.432,1.449l0.72,1.441l1.44,0.145l1.439,0.717l1.44,0.576l1.151-0.145
+ l1.44,1.152l1.44,0.432l1.296-1.15l1.439,0.576l-1.008-0.143l0.288,1.441l1.296,1.438l1.44-0.717v0.717l0.432,1.439l1.44-1.008
+ l-0.145,0.436l0.288,1.439l-1.584-0.867l0.288,1.443l0.432,1.439l1.44,1.295l0.144,0.143l0.288,0.291l1.008,0.289l1.44,1.008
+ l1.439,1.297l0.864,0.863l1.44,0.863l1.439,0.721l1.44,0.432l1.439-0.143l1.44-1.15l0.145-0.146l0.575,1.441l1.584-0.143l1.44-1.15
+ l-0.72-0.578l1.151,0.145l0.145-1.441l1.439,0.432h3.601l1.439,0.145l0.72-1.441l0.576,1.441l1.44,0.143l1.439-0.289l1.44-1.008
+ v-0.289l1.44-0.432l1.584-1.008h1.439l1.44-0.574h1.584l0.863-1.443l0.576,1.01l1.44,1.008l1.439-0.867l1.009-0.43h0.575
+ L148.102,740.935 M142.773-137.32l-1.008-0.576l-1.44-0.721l-1.439-0.289l-1.584,0.432l-1.44-0.432l-1.439-0.433l0.863,1.44
+ l-1.439,1.008l-1.44,0.432l-1.439,0.288l0.576,1.584l0.575,1.296l0.576,1.584l0.288,1.438l1.44,0.434l1.584-0.72l1.439,0.864
+ l1.584-1.152l1.44-0.864l1.439-0.72l0.288-1.44l1.44-0.144l1.439-0.144l1.584-1.297l-1.296-1.439l-1.439-0.72l-0.576,0.144h-0.288
+ L142.773-137.32 M59.109-193.625l-0.576,0.145l0.145,1.439l0.576,1.584l0.432-1.584l0.288-0.287l0.72-1.44l-0.576-1.44
+ l-0.144-1.439l-0.576,1.439L59.109-193.625 M-4.971-76.408l-0.144,0.142l0.288,1.298L-4.971-76.408 M-5.979-75.833l-0.144-0.863
+ l-0.721,1.439l0.576,1.008L-5.979-75.833 M-5.402-76.121l0.288-1.296l-0.576,1.44L-5.402-76.121 M-32.187-58.121l0.288-1.151
+ l-0.144-1.44l-0.145,1.44l-0.576,1.439L-32.187-58.121 M-8.139-74.392l0.145-1.44l-1.296-1.439l-0.576,1.439l-0.576,2.88
+ l0.144,0.864v1.44l-0.432,1.439l0.432,1.44l1.44,0.72l-0.432-1.439l0.144-1.442l-0.144-1.584l0.575-1.438L-8.139-74.392
+ M-231.192,422.983h0.142l1.442-0.291l-0.864-0.865l-1.441-0.43L-231.192,422.983 M-88.347,686.356l0.288,0.291l1.44-0.865
+ l-1.152-1.441l-1.44,1.152l0.145,0.145l0.288,0.289l0.144,0.141L-88.347,686.356"/>
+
+ <path id="path3515" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-104.906,467.767l-0.288,1.441l-0.288,1.584l-1.152,1.441l1.584,0.863l-1.584-0.576l-1.439-0.717l0.72,1.438v1.441l-1.44-0.719
+ l-1.439-0.865l-1.584,0.143v-3.023l-0.145-0.719l-1.584-0.578l0.145-1.438v-1.441l-1.44-0.867h-1.439l-1.44-0.43l-1.439-1.297
+ l0.863-0.289l1.44-0.287l1.44,0.287l1.439-0.578l1.44-0.715l1.439-1.01l0.864-1.443v-1.582l0.288-1.438v-1.586l-0.288-1.439
+ l-0.576-1.441l-0.288-1.439v-1.441l-0.864-1.584l-1.439-0.721l-1.44-0.287l-1.439-0.869l-1.44-0.859l-1.439-0.723l-1.584-1.293
+ l-1.44-0.723l-1.439,0.723l-1.009,1.441l-1.151,1.438l-0.864,1.443l-0.576,1.582l-1.439,1.01l-1.44,0.863l-1.44,0.145l0.576-1.441
+ l-0.576-1.584l-1.008-1.443l-1.439-0.285l-1.44-1.441l0.432-1.441l-0.432-1.438l-1.008-0.291l-1.44-1.295l-0.144-1.439l0.144-1.584
+ l-0.575-1.441l-0.576,1.441l-0.864,1.441l-1.008,1.582l-0.433,1.438l-1.439-0.717l-1.44-0.143l-0.288,0.719l-1.439-0.143
+ l1.296-1.441l1.439,0.291l1.44,0.287l1.152-1.443l0.72-1.582l0.864-1.439v-1.441l0.863-2.877l0.288-1.441l-0.144-1.584
+ l-0.145-1.441l-0.863-1.443l-1.44-0.861l-1.439,1.439l-1.44-0.578l-1.008-1.582l-1.152-1.438l-1.584-0.867l-1.439,0.434
+ l-1.44,0.143h-1.439l-1.44,0.576l-1.152,0.723l-1.439,0.859l-0.576,1.443l0.288,1.443l-1.008,1.582v1.438l0.288,1.441l-0.145,1.441
+ l-0.432,1.584l1.584-0.576l0.576,1.441v1.439l1.584,0.721l0.72,1.438l0.144,1.441l1.296-1.441v1.441l1.297-1.441l0.575,1.586
+ l-0.288,1.439l-0.72,1.443l0.288,1.438l-0.432,1.441l0.432,1.584l1.584-0.287l1.44,0.43l1.008-1.438l0.72-1.443l1.44,0.576h1.439
+ l-0.576,1.441l-1.439-0.865l-1.44,1.008l-0.863,1.441l1.439,0.143l0.72,1.441l-1.439,1.295l-1.584-0.287l-1.44,0.287l1.44,0.721
+ l1.584,0.143l0.288,1.439l1.439-0.432l-0.432,1.439l-1.44,0.721l1.44,0.861l-1.44-0.43h-1.584l0.145,1.438l-1.584-0.43l0.288,1.586
+ l-1.296,1.438l-0.721,1.443l-1.439,1.439l1.439,0.143l-1.439,1.01l-1.44,0.289l-0.72,1.439l1.584,0.721l0.576,1.582l-1.44-0.719
+ l-1.439-0.576l0.288,1.443l-0.288,1.582l1.439-0.432l-0.144,1.439l-1.152,1.586l-0.864,1.438l1.152,1.441v0.289l-1.44-0.289
+ l-1.439-1.293l-1.152-1.441l-0.288-1.584l-0.432,1.439l-1.584,1.008l-1.44,1.152l-0.288,1.438l-0.863,1.443l0.576,1.295
+ l1.441,1.152h-1.441l-0.864,1.441l-0.433,1.438l0.145,1.586l-0.862,2.879l0.431,1.441l0.287,0.289l0.288,1.439l0.866,1.441
+ l0.43,1.439h-1.439l-1.44,0.434l0.866,1.443l-1.441,0.285l-0.864,1.441l-0.433,1.443l0.433,1.436l-0.72,1.586l-0.145,1.439
+ l0.432,1.584l0.288,1.441l0.433,1.441l-0.143,1.582l0.574,1.441l0.288,1.441l-0.288,1.584l-0.144,1.441l0.144,1.438l-0.144,1.441
+ l-0.576,1.441v1.441l0.288,0.719l0.72,1.441l1.44,0.432l0.432-1.584l1.439-1.152l-0.287,1.582l1.441-0.576l0.718-1.439l1.44-1.152
+ l-1.584-0.141l0.576-1.443h1.439l-0.288-0.861l1.44-0.723l1.008-1.436l0.433-1.443l-1.009-1.441l1.44-1.008l0.432-1.441
+ l1.008-1.582l0.576-1.441l-1.439-0.867l1.439,0.436l-0.576-1.443l1.584,0.434l-0.432-1.441l0.432-1.582l-0.287-1.439l1.008-1.441
+ l1.439-1.584l0.721-1.441l0.575-1.441l0.864-1.584l1.44-1.15l1.439,0.865l-0.288,1.584l-0.432,1.443v1.436l-0.864,1.441
+ l-0.432,1.584l-1.008,1.441l1.439-0.143l1.44-1.297l1.439-0.865l-0.144,1.441l-1.44,1.297l-1.296,1.438l-0.576,1.586l-0.863,1.439
+ l1.439,0.721l-1.439,0.719l-0.721,1.295l1.584-0.143l-1.584,1.15l-1.439,1.441l1.439,0.143l1.584-0.865l1.44-1.15l-1.44,1.439
+ l-1.439,1.152l-1.152,1.441l0.145,1.441l-0.288,0.719l1.439-1.152l-0.288,1.441l-0.575,1.438l1.439,0.723l-1.439,1.439
+ l-0.145,1.582l1.44,0.291l-1.44,0.717l-1.439,0.723l-1.009,1.438l0.864,1.441l1.584-0.287l2.017-2.881l1.439-0.143l-0.72,1.441
+ v1.584l1.439,0.719v-1.441l1.44-0.143l0.864-1.443v-1.438l1.439-0.146l1.584-0.285v-1.441l1.44-0.289l1.584-0.145l1.151-1.584
+ l0.864-1.441l-0.432,1.441l-0.576,1.584l-1.44,1.441l-1.439,1.152l-1.584,1.439l0.144,1.441l0.864-0.432l1.152-1.441l1.584,0.289
+ l1.439-1.295l1.44-0.867v-1.438l0.144-1.441l1.44-0.143l1.439,0.576l1.44-0.293l-1.44-1.008l-0.144-1.438l1.44-1.441l-0.433-1.441
+ l1.44-0.432v-0.145l0.288-1.584l0.575,1.441l1.44,0.289l1.44,0.432l1.008-1.441l-1.584-0.719h-0.433l0.433-1.584l0.576-1.439
+ l1.584,0.43l1.439-0.717l0.864-1.441l0.144-1.439l-1.439,0.576l-1.44,1.152l0.864-1.441l-1.44-0.719l-0.288-0.289l0.721-1.441
+ l1.439,0.574l0.864-1.438l0.576-1.441l0.288-1.443l-1.584,0.723l-1.44,0.287l1.008-1.584l1.584-0.143l-0.287-1.008l1.584,0.576
+ l-1.152-1.443l1.439-0.143l0.288-1.439l1.296-1.584l1.584,0.719l0.721-0.289l-0.433-1.439l1.584-1.01l0.864-1.582l-1.296-1.441
+ l-1.44-0.576l-1.439-0.143l1.439-0.721l1.585,0.434l1.439-0.434l-0.144-1.441l1.584-1.293v-1.441l1.584-0.576l-0.721,1.441
+ l1.584,0.289l0.721-1.586v-1.436l-0.288-1.443l1.584,0.432l-0.864,1.439l-0.144,1.586l-1.297,1.439l-1.439,1.15l0.288,1.441
+ l0.576,1.441l1.008,1.584l1.439-0.576l1.296-1.439l0.433-1.443l0.432-1.438l1.44-1.152l1.439-1.438l0.145,1.438l-0.145,0.719
+ l-1.151,1.584l0.432,1.441l1.008-1.441l0.145,1.441l1.439-1.441l0.433-1.584l-0.433-1.439l1.152,1.439l-0.288,1.584l0.72,1.441
+ l1.44-1.008l-0.433,1.15l-1.439,1.295l-1.44,1.008l1.44,1.441l-1.584,0.289l-1.44,0.576l0.864,1.439l-1.152,1.441l0.288,1.443
+ l1.44,1.004l1.439,0.291l1.584-0.145l0.721-0.145l-1.44,0.432l-1.439,0.146l-1.44-0.578l-1.584-0.576l-1.439,0.576l-0.145,0.432
+ l1.008,1.584l0.864,1.443l1.584,1.148l1.44,0.867l1.439-0.143l1.44,0.143l1.584,0.865l-1.584-0.146l-1.44-0.141l-1.439,0.289
+ l-1.44,0.863l-0.288-1.441l-1.439-1.152l-1.584-0.717l-1.44,0.143l-1.44,0.867l0.433,1.584l1.439,1.008l-1.439-0.145l-1.44-0.863
+ l-0.144,1.439l1.439,1.006l1.44,0.867l-1.44-0.434l-1.439-0.576l-1.44-0.287l-0.432,0.576l1.008,1.584l1.44,1.439l-1.44-0.576
+ l-1.44-0.287l-0.575,1.439l-1.44,0.432l-0.288,1.441h1.44l1.439-0.719l1.44,0.287l-1.44,0.576l-1.439,1.008l1.439,1.15
+ l-1.439-0.432l0.144,1.441l1.584,0.574l-1.584,0.723l0.288,1.438l-1.439,0.867l1.439,0.865l1.584-0.434l1.44-0.867l1.439-0.574
+ l1.44-0.576l0.144-1.582l0.721,1.582l0.144-1.582l1.44,0.717l0.72-1.438l-0.288-1.441l1.152,1.441l1.439-0.723l1.44-1.293
+ l-1.009,1.443l-1.151,1.436l-0.288,1.441l-0.432,1.297l1.439-0.289l-0.72,1.441l1.439,0.576l0.288-1.441l1.44,0.432l0.288-1.582
+ l0.144,1.582l1.008,1.441l1.152-1.441l0.864-1.441l-0.576-1.441l1.008-1.438l0.145-0.291l-0.864,1.584l0.576,1.441l0.288,1.441
+ l0.72,1.439l1.439,0.145l0.576-1.584l-0.144-1.441l-0.576-2.881l0.864,1.441l1.439,0.867l0.576-1.441l-0.288-1.443l1.296,1.584
+ v0.434l-0.863,1.584l0.287,1.441l1.44,1.441l1.44,0.43l-0.433-1.438l1.44,0.576l0.864-1.584l0.432-1.443l-1.152-1.441l1.44,0.146
+ l0.144,1.584l-0.144,1.438l-0.288,1.586l1.584,0.432l0.144-0.141l1.296-1.443l0.433-1.584l0.72-1.441l-1.008-1.438l1.44,1.008
+ v-1.582l0.72-1.443l-1.44-0.721l-1.439-0.287l-1.44,1.293l0.72-1.584l0.288-1.438l-1.584,0.287l-1.439,0.432l-1.44,0.434
+ l-0.288-0.289l1.584-0.434l1.44-0.574l1.296-1.439l-1.44-1.01l-1.584-0.432l-1.439,0.432l1.439-1.008l-1.439-1.008l1.439-0.143
+ l0.433,0.143l1.439,1.15l1.44-0.576l1.584-0.287l1.439,0.576l1.297-1.441l-1.44-0.289l-1.44-0.578l-1.439,0.291l-1.44-0.867
+ l-1.439,0.146l1.439-0.289l1.584,0.717l1.44-0.287l-0.288-1.584l-1.44-1.297l-1.151-1.438l-1.44-1.441l-1.439,0.143l-0.721-0.143
+ l1.44-0.721l1.439,0.721l1.584,1.441l1.44,0.863l-1.152-1.441l-0.863-1.439l-1.44-1.453l1.584,0.865l0.72,1.439l0.288-1.439
+ l-0.288-1.439l0.721,1.439l0.288,1.439l0.575,1.441l1.44-0.143l0.576-1.584l-0.864-1.441l1.44,1.297l1.439-0.434l0.864-1.584
+ l-0.576-1.441l1.44-0.574v-1.441h-1.44l-0.432-1.443l-1.44-0.43h1.44l1.584-0.432l1.439,0.576l1.296-1.584l-1.584-0.576
+ l-1.439-1.008l-1.584,0.143l-1.44,1.295l-1.439,1.152l1.296-1.441l1.439-1.295l1.44-0.143l0.72-1.584l-1.439-0.145l-1.584-0.287
+ l-1.44,0.432l-1.44,0.289l1.44-0.719l1.584-0.434l1.296-1.008l1.44,0.143l1.439-0.432l-1.439,0.145l-1.44-0.723l-1.439-0.574
+ l-1.584,0.434l-0.145-0.867l0.145-1.438l0.432,1.438l1.584,0.146l1.44,0.432l0.432-1.441l0.72-1.439h-1.439l-1.44-0.145l1.44-0.145
+ l-1.584-1.152l1.584-0.287l1.439-0.145l0.864-1.586l-1.296-1.438l-1.44,0.289l-0.576-1.441l1.584,1.008l1.44,0.145l0.144-1.441
+ l-1.439-0.143l0.432-1.441l1.44,1.295l0.864,1.441l1.151,1.441l0.433-1.441l-1.584-0.863l0.72-1.586l-1.584,0.145l1.584-0.867
+ v-1.438l-1.44,0.143l1.44-0.865l-0.288-1.441l-0.145-1.439l-1.151-1.439l0.144-1.445l1.44,1.445l0.144,1.439l0.576,1.439
+ l1.008-1.439l-0.432-1.439l-0.145-1.586v-1.441l-0.287-1.586l0.72,1.586l0.432,1.441l1.152,1.441l0.144,1.584v1.869l0.433-1.438
+ l0.288-1.582l0.288,1.582l1.008-1.439l-0.145-1.441l0.721,1.441l0.863,1.439l1.296-1.582l0.145-1.441l-0.433-1.441l-1.584-1.15
+ l-1.439-0.291l1.584-0.43l1.439,1.295l-0.144-1.443l0.144-0.861l0.433,1.436l0.576,1.443l0.432,1.584l0.432-1.584l-0.144-1.443
+ v-1.436l-1.152-1.441l1.44,1.15l0.144,1.584l0.145,1.441l0.432,1.439l-0.288,1.438l-0.432,1.586l0.288,1.443l0.432,1.584
+ l0.864,1.439l1.439,1.152l1.44-1.584l0.864-2.879l-0.576-1.586l-0.145-1.439l-1.008-1.441l0.288-1.582l0.288-1.443l-0.144-1.582
+ l-1.44-1.441l-1.152-1.439v-1.443l-0.863-1.438l-0.288-0.865l0.288-0.143l1.008,1.438l0.288,1.443l0.288,1.584l1.584,1.008
+ l1.151,1.441l0.433,1.586l1.439,0.285l1.44,0.719l0.72,1.441l-0.144,1.441l0.288,1.584l1.584-0.143l1.439-1.01l1.008-1.299
+ l1.44-1.438l0.864-1.439l0.575-1.584l0.288-1.441l-1.584-0.289l-1.439,0.145l-1.44-0.145l-1.296-0.289l-1.439-1.441l-1.584-1.152
+ l-1.44-0.287l-0.576-1.439l-1.439-0.719l-1.44-0.289l-0.72-0.145l0.288-0.145h0.144l0.145-0.145l1.584,0.291h1.439l0.433,1.439
+ l1.439,0.865l1.44,0.434l0.863,0.576l1.44,0.863l1.44,0.145l0.432-1.441l-0.288-1.586l-1.296-1.438l-1.584-1.156l-1.44,0.293
+ l-0.288,0.289l-1.008-1.152l-1.439-0.863l1.439,0.287l0.433,0.434l0.432,0.865l0.576-1.297h0.288l1.439,0.434l1.44,0.863
+ l1.439,1.586l1.009,1.438l1.439,1.152l1.584-0.43l1.152,1.438l1.439-1.15v-1.584l0.288-1.441l0.433-1.439l0.288-1.441l-1.584-1.15
+ l-1.44-1.441h-0.432l-1.009-1.441l-1.439,0.434l1.439-1.295l1.296,1.439l1.009,0.43l1.439,0.436l0.576-1.15l-1.439-1.152
+ l-1.44-1.297l-1.584-0.717l-1.44-0.721l-1.584,0.145l-1.439,0.143l-1.44,0.143l-1.439,0.291h-1.584l-0.864-0.291l1.439-0.143h1.584
+ l1.44-0.432l1.44-0.145l1.296-1.441l-1.44-0.863l-1.439,0.145h-1.584l-0.433-0.434l1.584,0.145l1.44-0.578l1.439,0.578l1.009,1.439
+ l1.584,0.576l1.439,1.008h1.44l1.584,0.434l1.584-0.576l1.439-1.441l-1.439-1.295l-1.584-0.432l-1.44,0.576l-0.576-1.441
+ l-1.296-1.586l-1.296-1.438l-1.439-0.289l-1.584-0.867v-0.574l1.439,1.008l1.584,0.145l0.288-1.439l1.44,0.574l1.584,0.436h1.439
+ l0.864,1.434v1.443l1.439,0.291l1.44,0.43l1.44-0.43l1.296-1.441l1.008-1.584l0.144-1.441l0.288-1.584l0.145-1.441l-1.44-0.863
+ l-0.288-0.145l-1.439-0.289l-1.44-0.715l-1.439,0.574l-1.44-0.574l-1.44,0.141l-1.584-0.434l1.44,0.141l1.584-0.43l1.44-0.578
+ l-1.44-1.148l-1.584-0.135l-1.44,0.291l1.44-0.578h1.584l1.44,0.289l0.432,0.145l1.439-1.295l1.44-0.289l-1.44-1.152h-1.584
+ l-1.439,0.291l-1.44-0.291l1.44-0.287l1.439-0.145l1.44-0.145l1.584,0.145l1.44,0.289l1.584,0.434l-0.288-1.441l-1.584-0.576
+ l-1.44-0.434l1.584,0.143l-1.008-1.438l-1.44-0.434l-1.584-0.432l-1.439,1.008l-1.44-0.291l-1.584-0.43h1.584l1.44,0.287
+ l1.439-1.008l-0.144-1.008l1.584,1.295l1.439-0.289l-1.439-1.15l-1.44-1.01l1.44,0.434l0.72-1.441l0.72,1.584l1.44,1.299
+ l1.152,1.438l1.439,0.289l1.584-0.145l1.152-1.439l-0.288-1.441v-1.439l0.144-0.578l-1.008-0.43l-1.584-0.721l-1.439-0.719
+ l-1.44-0.143l-1.439-0.43l1.439,0.285l1.584-0.143l1.44,0.287l1.439,0.289v-1.441l-1.439-1.438l-1.44-0.148l-1.584-1.008
+ l1.44,0.578l1.439,0.145l1.44,1.15l0.72,1.586l0.432,1.443l1.44,0.572l1.584-0.721l1.44-1.008l1.151-1.439l0.288-1.441v-1.584
+ h-1.439l1.439-1.441v-1.586l1.296-1.438l0.145-1.439l-0.433-1.584l-0.72-1.441l-1.296-1.441l-1.44-1.295l-1.439-0.576l-1.584,0.289
+ l-0.864,1.586l-0.432,1.439l-0.576,1.441l-0.576,1.584l0.145,1.441l-0.145-0.723l-1.439-1.15l1.439-0.717l0.576-1.586l0.288-1.441
+ l-1.44-0.574l1.44-0.867v-1.438l-1.44,0.143l-1.296,1.443l-1.152,1.438l-1.151,1.439l-1.44,1.295l-0.72,1.441l0.144-1.441
+ l1.584-1.295l-1.584,0.143l-0.863,1.441l0.288-1.15l1.439-1.441l1.44-0.576l1.439-1.15l0.576-1.441l-1.439,0.143l-1.584,0.289
+ l-0.433,1.586l-0.144-1.586v-1.439l2.88,0.289l1.439-0.143l1.44-0.865l1.152-1.441l-1.44-0.576l-1.584,0.434l-0.288-1.441
+ l1.44,0.434l1.439-0.867l1.44-0.43l-1.44-0.578l-0.144-0.287l-1.44-0.576l-1.439,1.008l-0.864,1.438l0.144-1.293l1.584-1.15
+ l-1.584-0.434h-1.439l-1.584-0.574l-1.44-0.865l1.44-0.576v-1.443l1.151,1.443l1.44-0.719l1.584,0.143l1.44,1.008h1.439
+ l-0.576-1.441l-1.439-0.863l-1.44-0.719l1.584,0.289l1.44,0.576l1.439,0.865l1.584,0.574l1.44,0.719h1.44l1.439-1.441l1.584-0.717
+ l1.44,0.143l1.439-0.863l0.433-1.441l1.439-1.441h1.584l1.44-0.434l1.584-0.717l1.439-1.152v-1.441l-0.144-1.439l-0.288-1.438
+ v-1.443l-1.44-1.15l-0.432-1.582l-1.152-1.445l-1.439-0.719l-1.008,1.441l-1.584,0.289l1.584-0.867l0.432-1.438l-0.288-1.439
+ l-1.44-1.154l-1.439,1.154l0.864-1.443l0.144-1.441l-1.584-0.719l-1.439,1.584l-0.721,1.441l-0.288,1.439l-0.288,1.582l-0.72,1.443
+ l0.288-1.443l0.145-1.434l0.144-1.588l0.288-1.441l0.72-1.584l-1.439,0.432l1.151-1.439l-1.439-0.434l-0.433,1.586l-0.575,1.439
+ l-1.009,1.441l-0.72,1.439l-0.864,1.441l0.433-1.441l0.575-1.439l0.433-1.441l0.864-1.584v-1.441l-1.44-0.43h-3.024l-1.439,0.287
+ l-1.44,0.576l-1.584,1.152l-0.576,1.439l1.44,1.295l-1.296,1.582l-0.288-1.582l-1.584,0.289l-1.44,1.293l-1.439,1.443l-1.44,0.867
+ l1.44-1.443l1.152-1.441l1.439-1.438l0.145-1.586l-1.44-1.152l-1.44,0.145l-1.296-1.439l-1.439,0.865l-1.44,1.293l-1.584,0.289
+ l-1.008,1.441l-0.288,1.582l-1.008,1.441l-1.584,0.434l-1.44-0.867l-1.584-0.285l-1.439,0.285h-1.44l-1.584,0.434l-1.439-0.289
+ l1.439-0.719l1.152-1.152l1.296,1.445l-0.288-1.588l0.288-1.441l-0.576-1.439l-1.152-1.441l-1.296-1.582l-0.575-1.441l0.144-1.439
+ l0.72,1.439l0.576,1.584l1.44,1.152l1.151,1.439l0.721,1.584l0.863,1.439l0.145,1.582l1.584-0.574l0.72-1.438l1.008-1.586
+ l1.296-1.439l1.584-1.152l1.44-1.295l1.44-0.578l1.439-0.719l1.584-0.432l1.584-0.287h1.44l1.439,0.43l1.44,0.289l1.584-0.863
+ l1.439-1.441l1.584-0.432l1.44,0.145l1.584,0.576l1.44,0.719l1.439,0.434l1.584,0.432l1.44,0.432l1.439,0.576l1.584,1.008
+ l1.44,1.152l1.584,1.295l1.439,1.008l1.44-1.008l0.288-1.582v-1.441l0.144-1.439l-0.144-1.584l-0.145-1.441l-0.432-1.438
+ l-0.864-1.586l-0.863-1.439l-1.297-1.584l-1.439-1.297l-1.44-0.863l-1.584-1.152l-1.439,0.145l-0.864-1.439l-1.44-0.432
+ l-1.584-0.865l-1.439-0.143h-1.44l-1.584,0.43l-0.288-1.438h-1.584l-1.439-1.152h-1.44l-1.584-0.289l-1.439-0.576l-1.44,0.287
+ l-1.584,1.008l-0.864-1.582h-1.151l-1.584-0.145l-0.433,0.145l-1.439,0.863l-1.44-0.145l-0.864-0.719h-2.88l-1.439,0.574
+ l-1.008,1.441l-0.288,1.584l-0.145,1.439l-0.432,1.441l-0.145,1.439l-0.144,1.584l0.432,1.439l-1.439,1.008l-1.296,1.584
+ l-0.721,1.441l-1.296-1.441l-0.144-1.439l-0.288-1.439l0.432-1.586l1.152-1.438l0.144-1.441l-0.288-1.439l0.864-1.584l-1.439,0.574
+ l-1.44-0.719l-1.584,0.576l-1.44,1.152l-1.439,0.863l-1.584,0.576l-1.152,1.441l-0.432,1.582l-0.72,1.441h-1.44l-0.864,1.439
+ l1.44,0.432l0.144,1.441l-0.575,2.879h1.439l1.44-0.289l-1.009,1.586l0.864,1.582l-1.584-0.43l-1.439,0.143l-1.44,1.008
+ l-1.152,1.439l-1.008,1.441l-0.288,0.574v0.865l0.145,1.441l0.144,0.865l0.72-1.441v-1.439l0.721,1.439v1.586l-0.288,1.438
+ l-0.72,1.586l-0.145,0.432v0.576l0.145,0.574l-0.433,4.32l0.72,1.586l0.288,0.43l0.145,0.291v0.143l0.144,1.148l-1.008,1.443
+ l-0.72,1.441l-0.145,1.439l0.145,1.441l0.72,1.584l1.584-1.01l0.145-0.285l1.296-1.586l0.72-1.441l0.576-1.584l1.008-1.443
+ l-0.576,1.586l-1.151,2.881l-1.009,1.439l-0.72,0.865l-0.288,1.584l-1.296,1.441l-1.008,1.441l-1.152,1.439l1.44,0.289l1.439-1.441
+ l1.44-1.291l-0.288-1.156v-0.143l0.864-1.443l0.72,1.443v1.441l0.144,1.584l-0.287,1.441l-0.433,1.438l0.145,0.723v0.863
+ l-0.721,0.863l-0.72,1.586l0.144,1.441l0.433,1.438l0.288,1.441l1.008,1.441h1.152l1.439-0.723l1.584-0.574l1.44-1.008v-1.438
+ l0.576-1.443l1.584-0.287l1.439,1.295l1.44,0.287l-0.576,1.586l-0.72-1.586l-1.44,1.008l-0.864,1.441v1.441l-1.584,0.434
+ l-0.72,1.582l1.44,1.438l-1.009,1.443l-1.439,0.434l-1.44,0.143l-1.584,0.434l-1.439,0.289l1.439,1.582l1.296,1.441l-1.584-1.01
+ l0.433,1.441v1.443l-1.44-0.291l-1.439-1.295l-1.152,1.586l-0.145,1.438l1.44,0.723l0.72,1.441l-1.296-1.441l-1.439,0.287
+ l-1.44,1.295l0.288,1.441l-0.432,1.439l-0.721,1.439l-1.584,1.293l-1.439,0.291l-1.152-1.584l-0.432-1.439l-0.145-1.439
+ l-1.439-1.152l-1.44,0.574l-1.584,0.289h-1.439v1.584l1.439,1.295l1.44,1.008l1.296,1.441l1.439,0.293v1.582l1.44,1.152
+ l1.584,0.717l-0.576,1.443l-0.72-1.443l-1.44-0.143l0.576,1.441l-1.439-0.146l0.287,1.441l-1.584-0.432l-1.008,1.439l-1.439,1.297
+ l-0.433,1.439l0.288,1.441l1.44-0.434l1.151-1.584l0.721,1.584l-1.44,1.297l-1.439,0.145l-1.44-0.434l-1.584,1.441l-0.432,1.008
+ v0.145l1.584,1.438l-1.44-0.143v1.439l-1.008,1.441l-1.44,0.863l-1.584,0.723l-1.151,1.438l-1.44,1.156l-1.439,0.574l-1.152,1.582
+ l-1.44,0.289l-1.439,1.008l-1.44,1.152l-1.439,0.145l-1.584-1.152l-1.44-1.441l-1.439,0.143l-1.44-0.289l-1.584,0.865l-0.144,1.441
+ l0.432,1.441l0.432,1.582l0.288,1.441l-0.144,1.441l0.144,1.441l1.008,1.438h1.44l1.44,0.148l1.584-0.293l1.439-0.289l-0.144,1.439
+ l-0.576,1.443l-1.296,1.441l-0.721,1.439l0.288,1.582L-104.906,467.767 M-181.946,545.526l-1.296-0.291l0.288-0.861l-0.143-1.441
+ l1.438-0.289v1.441L-181.946,545.526 M-14.33,526.95v1.15l0.144,1.441l-0.432-1.441l-1.44-1.586l-1.439,0.578v1.584l-0.433,1.441
+ l-0.288-1.441h-1.439l-0.433,1.441l0.433,1.439l0.863,1.584l1.44,1.439l-1.44,0.432l1.152,1.443l1.44,0.141l-1.44,1.297
+ l-1.439-1.439l-0.864-1.584l-1.44,0.141l0.288,1.443l-0.144,1.584l0.144,0.287l1.44,1.439l1.439,0.721l1.584,1.01l1.44,0.863
+ l1.439,0.576l1.44,0.719h1.44l1.584-1.295l1.439-1.15l-0.288-1.584l-0.576-1.584l-0.144-1.443l0.576-1.439l0.576-1.439l0.432-1.441
+ l-0.144-1.584l-0.288-1.439l-0.433-1.441l-0.72-1.584l-1.296-1.439l-1.584-0.576l-1.44,0.576l-1.151,1.439V526.95 M74.518,645.894
+ l0.72,0.145l0.288,1.439l-1.439-0.863L74.518,645.894"/>
+
+ <path id="path3517" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-153.578,387.413l-0.576,1.008l-1.44,1.586l-0.288,1.439l0.145,1.443l-0.576,1.438l-1.584,1.441l-1.296,1.584l-1.44,0.143
+ l-1.439,0.145l-1.438,1.441l-1.441-0.289l-0.864-1.441l-1.44-0.143l0.578,1.443l0.574,1.582l1.01,1.438l-0.578,1.441v1.445h1.44
+ l-1.15,1.434l-0.722,1.443l-1.44,0.291l-0.432,1.438l-1.439,0.723l-1.009-1.443l-1.439-1.15l-1.584-1.297l-1.438-0.863l0.574-1.584
+ l0.432-1.441l0.288-1.584l0.864-1.441l0.144-1.438l0.288-1.441l-0.575-1.586l0.863-1.439l1.584,1.15l1.44-0.143l0.72-1.439
+ l-0.144-1.586l-0.143-1.438l0.431-1.443l1.441,0.717l1.438-0.574l-1.008-1.438l-0.431-1.441l-1.441-0.865l-1.44,0.143l-1.44,0.145
+ l-1.584-0.865l-1.439-1.15l-1.15-1.441l-0.865-1.586l-1.584-0.43l-1.44-0.145l-1.44-0.863l-1.296-1.441l-1.151-1.584l-1.009-1.441
+ l-0.144-1.439l1.44-1.441l1.441-0.43l1.438-0.145l1.441,0.145l1.438-0.145l1.584-0.145l1.439-0.719l-1.006-0.867l-0.434-1.438
+ l-0.864-1.586l0.145-1.438v-1.443l-1.44-1.15l-0.432-1.584l0.575-1.439l1.44-0.289l1.44,0.721l1.584,0.863l1.441,1.295l0.862,1.441
+ l1.008,1.441l1.44,1.438l1.441-1.008l1.438-0.43l1.584-0.291l1.439-0.143l1.44-0.145l1.439,0.434l1.584,0.432l1.44,0.291
+ l1.44-0.291l1.584,0.143l1.439,0.291l1.44-0.291l1.439,0.291l1.44-0.143h1.439l1.584,0.43h1.44l1.584,0.721l1.44,1.15l1.008,1.443
+ l-1.584,1.01l-1.008,1.438l-1.44,0.574h-1.584l-1.44-0.43l-1.151,1.438l-1.584,0.148l-1.44,1.438l1.584,0.432l1.44,0.291
+ l1.439,0.574l-1.296,1.441l-1.151,1.582l-1.44,0.434l-0.288,1.439l-0.144,1.584v1.445l-1.584,1.434l-1.44,1.156L-153.578,387.413
+ M-74.234,354.581v-0.719l0.144-0.145l1.584-1.008l0.721,1.441l-0.864,1.582l0.144,1.441l-1.584,0.574l-0.575-1.15l0.432-1.584
+ V354.581 M-94.395,337.591h0.432l0.288,1.008l-1.584-1.008H-94.395 M-76.538,395.622l-1.296,0.287l0.575-1.438l1.44-1.441
+ l1.439-1.441l-0.72,1.441l1.584-0.719l0.433,1.438l-0.864,1.441l0.288,0.719l1.151,1.441l-0.863,1.584l-1.44-0.576l-0.864-1.441
+ l0.288-1.438L-76.538,395.622 M-201.242,417.655l-1.152,1.295l0.864,1.584l1.439,0.143l1.442,0.432l1.438,0.289l1.585,0.721
+ l1.439-0.291l1.586,0.291l1.438-0.576l1.441-1.441l0.431-1.441l-0.576-1.438l-0.721-1.441l-1.008-0.289l-1.439-0.578l-1.438-0.43
+ h-1.584l-1.441,0.287l-1.584,0.291l-1.44,1.008L-201.242,417.655"/>
+
+ <path id="path3519" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-68.763,275.526l-0.863-0.288l-1.585,0.144l-1.439-0.287l-1.584-1.297l1.152-1.439l1.439-0.288l1.584,0.144l-1.584-0.72
+ l-0.432-1.584l1.439-1.151l1.44-1.009l-1.44-1.151l-0.432-1.44l-1.584,0.433l-1.44-0.864l0.433-1.44l1.439-1.439l1.584-0.576
+ l-0.863-1.44l-1.584,1.296l-1.44,1.009l-1.44-0.433l-1.584-0.288l-1.439-0.72l1.584,1.152l1.008,1.439l0.432,1.44l0.864,1.584
+ l-1.008,1.439l-1.584-0.288l-1.008-1.439l-1.584,0.144l0.864,1.44l-1.44,0.72l-1.44-0.72l-1.584-0.72l0.288-2.88l-1.151-1.44
+ l-0.288-3.168l0.72-1.44l0.288-1.439l0.576-1.44l0.72-1.584l1.44-1.439l-0.721-1.44l0.576-1.439l0.864-1.584l1.439,0.432
+ l1.152,1.439l0.288-1.439l0.72-1.44l1.584-1.151v-1.44l0.576-1.584l1.44-0.72l1.439,1.008l1.44,0.145l1.439-1.297l-1.439-1.296
+ l-1.296-1.439l-1.44-1.296l-1.296-1.584l-0.72-1.44l0.144-1.44l-0.144-1.584l0.576-1.439l0.72-1.44l-1.296-1.584l-0.576-1.439
+ l-0.432-1.44v-4.464l0.432-1.44v-0.144l0.288-1.584l0.72-1.44l-0.144-1.438l0.863-1.584l-0.72-1.442l1.008-1.439l0.433-1.584
+ l0.288-1.44l0.575-1.439l0.288-1.44v-1.584l0.864-1.44l0.864-1.584l-0.145,1.44l1.44-0.864l1.439-0.43h1.584l1.44-0.146
+ l1.584,0.864l1.44,0.864l1.439,0.29l1.44,0.43l1.296-1.584l1.439-1.439l0.288-1.584l0.576-1.44l0.432-1.439l0.864-1.584
+ l1.152-1.438l1.584-1.298l1.439-1.152l1.44-1.008l1.584,0.72l1.44-1.151l1.439,0.287l1.584-0.72l1.44,0.145l1.439,0.288l1.44,0.287
+ l0.576,1.44l0.144,1.44l-0.432,1.439l-0.288,1.44l-0.288,1.584l-0.145,1.439l-0.287,1.442l-0.576,1.438l-0.288,1.584l-0.576,1.44
+ l-0.288,1.44l-0.432,1.439l-1.152,1.584l-0.864,1.44l-0.575,1.584l-1.009,1.439l-1.008,1.442l-0.72,1.438l-0.145,1.44l-0.432,1.584
+ l-0.576,1.44l0.864,1.439l0.864-1.439l0.288-0.433l1.439-0.144l1.584-1.296l1.44-1.152l1.008-1.584l1.439-1.008l0.864-1.584
+ l1.44-1.009l-0.145-1.439l0.576-1.584v-1.439l0.432-1.438l0.576-1.584l0.433-1.442l0.863-1.439l1.44-1.584l0.72-1.44l0.288-1.439
+ l0.72-1.585l1.152-1.439l0.72-1.439l1.584,0.287l1.44-0.72l1.44-0.432l1.584-0.145l1.439,1.009l0.145,1.439l0.432,1.439
+ l-0.576,3.169l-0.144,1.439l-0.288,1.44h0.288v1.584l-0.145,1.439l-0.72,1.442v1.438l1.439-0.721v1.584l-1.439,1.296l0.432,1.44
+ l0.288-1.44l1.584-1.008l0.145-1.44l0.288-1.439l0.144-1.584l0.144-1.44l0.576-1.584l0.433-1.438l1.439-0.435l-1.439-0.575
+ l1.008-1.44l0.864-1.439l1.584,0.575l0.144,1.442l-0.144,1.584l1.439,0.43l0.433-1.439l0.144-1.584l1.584-1.297l-0.288-1.439h1.584
+ l1.44,0.576l1.439,1.152l1.008,1.439l0.433,1.44l1.296,1.584l-0.288,1.439l0.72,1.44l1.44-0.721l1.439-0.287l1.296,1.439
+ l1.152,2.88l0.288,1.44l0.576,1.584l1.008,1.439l-0.144,1.44v1.44l0.432,1.439v1.44l0.144,1.584l0.145,1.439l-0.145,1.44
+ l0.288,1.439v1.442l0.288,1.438v0.432l-0.863,1.439l-1.44,0.433l-1.584,0.144l-1.44-0.432l-1.439-1.152l-1.44-0.576l-1.439-0.287
+ l0.144-1.438l-1.584-1.298l-0.288-1.44l-0.72-0.144v0.144l-0.144,1.44l0.287,1.439l-1.151,1.584l0.576,1.442l1.439-0.435
+ l0.576,0.576l1.152,1.442l0.863,1.438l-0.432,1.439l-1.44,1.296l-1.584,1.44l-2.88,2.304l-1.439,0.72l-0.864-0.288l-1.44-1.439
+ l-1.296-1.44l-0.288-1.584h-1.439l-1.44-0.863l1.152,1.439l0.576,1.584l-1.44,1.152l1.44,0.144l0.72,1.584l1.296,1.44l-1.439-0.145
+ l-1.584,1.008l1.584-0.575l-0.145,1.439l-1.439,0.72l0.863,0.433l0.145,0.72l1.439-0.144l1.296-1.009v1.44l-0.863,0.576
+ l1.584-0.433l0.863-0.575l1.44-1.152l1.296-0.288l1.44,0.288l-0.433,1.584l-1.151,1.44l-0.145,0.287l-1.439,1.152l-1.584-0.144
+ l-1.44,1.296l-0.432,0.288l-1.44,0.432l-1.439-0.576l-0.864,1.44l-1.44-0.576l-1.584-0.72h-1.439l-1.584-0.288l-1.44,0.288
+ l-1.439-0.576l-0.864,0.864l-1.44-0.864l-1.584-0.288l-2.88,1.44l0.145,0.288l1.584,1.151l1.008,1.584l1.584,0.433l1.439-0.576
+ l1.44,0.288l1.44-0.288l1.439,0.144l1.584,0.576l1.44,0.432l1.439,0.145l1.44,0.144h1.584l0.864,0.288h1.439l1.44,0.288
+ l0.432,0.288h1.584l1.44,0.288l0.432,1.584l1.44-0.145l-0.288,1.584l-2.881,2.881l1.44,0.575l-0.72,1.009l-1.44,1.008l-1.584,0.432
+ l-1.439,1.44l-1.44,0.288l-1.584,0.72l-1.44,0.288l-1.439-0.433l-0.288-0.287l-1.44,0.287l-1.584,0.145l-1.439-0.72l-1.44,0.288
+ h-1.584l-1.439,0.287l-1.44-0.72l-1.439,0.288l-1.44-0.144l-1.584,0.432l-1.44,0.144l-1.584,0.288l-1.439,0.145l-1.584-0.433
+ l-1.44-0.144l-1.439-1.152l-1.44-0.576l-1.584-1.008l-1.439,0.721l-0.288,0.287l-1.44,0.864l-1.584,0.145l-2.88,1.439l-1.584,1.296
+ l-1.152,1.44l1.44,0.864l-1.44,0.432l-1.584,0.72l-1.439,1.296l-1.44,1.152l-1.439,0.864l0.288,1.439l-1.584-0.144l-1.44,0.432
+ l0.576,2.88l-1.584-0.144H-68.763 M-86.187,277.974l1.152,0.144l1.439-0.72l-1.439-0.72l-1.44,1.151v0.145H-86.187
+ M-91.803,337.591h0.721H-91.803"/>
+
+ <path id="path3521" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-10.154,383.958l-0.433,1.008l-0.432,1.439v1.582l0.72,1.443l0.288,1.441l0.576,1.443l-0.576,1.582l-0.432,1.438l-0.576,1.441
+ l-1.152,1.441l-1.439,1.586l-1.152,1.438l-1.439,0.721l-1.009,1.439l-1.439,0.145l-0.864,1.441l-1.439-0.721l-0.288-1.584
+ l-0.288-1.441v-1.438l0.288-1.443l-0.145-1.584l-0.432-1.441l-0.576-1.438l-1.296-1.582l-1.296-1.443l-0.432-1.441l0.575-1.584
+ l0.864-1.441l1.296-0.578l1.584-0.861l1.44-0.146l1.584-0.717v-1.439l0.576-1.441l1.439-0.432l1.44,0.576l1.439-1.01l1.584,0.143
+ l1.44,0.434l0.144,1.584L-10.154,383.958 M45.573,412.901l0.288,0.145l-0.432,1.584l-0.288-1.584L45.573,412.901 M184.966,523.062
+ l-0.145,0.287v0.291l0.576,1.152l0.432,1.439l-1.584-1.439l-0.287-0.576l-0.576-1.584L184.966,523.062 M167.829,570.005
+ l0.288,0.145l0.288,1.584l-1.584,1.01l-0.432,0.43l-1.44-1.15l-0.288-1.584l1.152-1.584l1.152-1.441l1.439,1.154l-0.288,0.574
+ L167.829,570.005 M176.47-92.968h-0.145l-1.439-1.152l1.439,1.297l-1.584-0.576l-0.432-1.584l-1.44-0.145l-0.144,1.584l-0.864,1.44
+ l-1.439,0.576l-1.584,0.288l-1.44,0.863l-0.288,1.44l1.44,0.288l1.584-0.721l1.439,0.576l1.44-0.432l1.439,1.008l1.584,0.145
+ l1.44,0.43l0.288,0.434l1.296,1.44l1.584,0.72l1.44-0.576l1.584-1.151l1.439-0.576l1.44,0.144l1.439-0.288l1.584,0.864l1.44,1.152
+ l-0.288-1.44l0.576-1.439l-0.145-1.44l-0.863-1.439l-1.44-0.576h-1.44l-1.584,1.439L184.39-89.8l-1.44-0.29l-1.584-0.286
+ l-1.439-0.722l1.584,0.722l1.584,0.433l1.584,0.288l-1.584-0.145l-1.44-0.144l-1.584-0.721l-1.439-0.575l-0.721-1.442
+ L176.47-92.968 M15.478,100.133l-0.576,0.723l-1.296,1.439l0.432,1.438l0.721,1.584l-1.584-0.288l-1.44-0.142l-1.439,0.43
+ l-0.576-2.878l-0.433-1.442L8.71,99.56l0.288-1.584l-0.433-1.442l-0.288-0.288l-1.439-0.43l-1.44-0.578l-1.584-1.006l1.44,0.288
+ l1.584,0.574l1.439,0.432l0.576-0.145v-0.144l-0.432-1.584l1.439-0.43l1.44-0.435l0.144-0.576l0.433-1.582h1.296l-0.145,0.721
+ l-0.144,0.142l-0.72,1.584l0.144-0.142l1.44-0.578l1.439,0.144l0.864,1.44l-1.584-0.143l-1.44,0.574l1.584-0.288l1.44,0.288
+ l0.144,1.442l-1.439-0.435l0.144,1.44l-1.584,0.288l1.008,0.432l1.44,1.152L15.478,100.133 M-84.171,215.192l0.576,0.142
+ l-0.144-0.142l-0.576-1.442L-84.171,215.192"/>
+
+ <polyline id="polyline3523" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 18.934,378.774 18.646,378.917 17.493,377.479 17.926,379.065 17.638,380.499 16.054,381.366 14.613,381.655 13.174,380.647
+ 11.733,380.069 11.59,379.927 10.149,378.917 10.149,380.358 10.869,381.222 9.718,382.808 8.277,382.374 7.558,380.79
+ 7.558,380.499 8.134,379.065 6.838,380.499 5.397,380.499 3.958,380.79 2.806,379.351 2.661,377.909 2.518,376.323 1.077,374.89
+ 0.357,373.444 0.934,371.862 0.646,370.421 1.077,368.839 2.661,367.976 4.102,367.687 5.542,367.397 5.109,365.958 3.67,366.534
+ 2.229,366.39 0.646,365.671 0.502,364.229 -0.362,362.79 -0.074,361.206 0.789,359.767 2.229,359.479 0.789,359.479 -0.65,359.335
+ 0.502,357.894 1.941,357.175 0.502,357.462 -1.082,356.312 -1.227,354.87 0.214,354.294 -1.227,353.286 -0.362,351.847
+ -1.803,351.558 -1.803,350.118 -1.946,348.534 -1.803,346.95 -1.803,345.511 -1.37,344.069 0.069,344.069 1.653,344.503
+ 3.094,344.935 4.102,343.495 2.661,343.062 1.077,342.63 2.661,341.909 1.222,341.622 -0.219,340.614 -0.938,339.175
+ -0.219,337.591 0.502,336.151 0.646,334.71 2.086,333.271 3.67,333.558 2.086,332.263 0.502,332.263 1.077,330.823 2.518,329.671
+ 3.958,328.808 5.542,328.808 6.981,328.374 8.422,329.095 9.718,327.511 11.157,327.222 12.741,327.366 14.182,327.798
+ 15.766,328.519 17.205,329.237 18.646,328.808 20.086,329.095 21.67,328.229 23.109,327.366 24.55,327.077 25.989,326.647
+ 27.573,325.927 28.869,324.487 27.43,323.19 27.718,321.606 28.149,320.167 28.149,318.726 28.582,317.286 29.157,318.726
+ 29.59,317.286 30.166,315.846 31.462,314.406 33.046,315.558 33.909,313.974 35.35,313.11 35.926,311.669 37.365,312.102
+ 37.51,313.542 38.949,311.958 40.39,312.39 40.102,313.83 41.109,315.27 41.109,316.709 40.245,318.149 39.525,319.733
+ 38.518,321.175 38.229,322.614 37.798,324.054 36.214,324.917 34.773,325.495 33.334,325.206 31.75,324.487 30.31,323.767
+ 31.75,325.206 33.334,326.647 33.046,328.085 33.189,329.671 34.197,331.11 34.054,332.55 33.334,333.991 31.894,335.573
+ 30.453,334.71 31.029,331.831 30.31,333.271 29.445,336.151 28.726,337.591 27.861,339.749 26.422,340.614 25.558,339.175
+ 25.701,337.591 25.126,336.294 25.701,334.854 25.989,333.413 26.71,331.976 25.27,332.405 25.27,333.847 24.405,335.431
+ 23.686,336.87 23.397,335.431 22.245,333.847 20.806,333.271 22.245,334.71 21.958,336.151 22.966,337.591 22.245,338.167
+ 20.806,338.886 19.365,338.599 19.941,340.183 18.502,341.046 17.062,340.759 15.621,339.606 15.909,341.046 14.47,341.335
+ 14.325,342.917 15.909,342.487 17.35,343.351 15.909,344.358 15.189,345.798 16.054,347.382 14.47,348.39 16.054,348.245
+ 16.197,349.687 14.758,350.983 14.325,352.421 12.886,351.847 13.605,353.286 13.894,354.87 13.894,356.312 14.613,354.87
+ 16.054,354.581 16.485,356.022 17.638,357.606 18.214,359.046 19.077,360.487 20.229,361.927 20.806,363.366 20.229,364.808
+ 20.661,366.245 21.813,367.687 22.245,369.271 22.102,370.712 22.245,372.151 21.237,373.733 19.798,374.454 20.229,375.897
+ 20.229,377.331 18.934,378.774 "/>
+
+ <path id="path3525" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-6.698,291.942l-1.008,0.72l-1.44,1.44l-1.584,1.151l0.144,1.44l0.288,1.584l0.145,1.44l1.008,1.439v1.44l-0.72,1.584l-1.44,0.72
+ l-1.439,0.576l-1.584-1.296v-1.44l-1.44-0.432l-0.576,1.584l-1.584-0.72l-0.432-1.44l-0.576-1.44l-1.584-1.008l-2.88-2.592h-1.44
+ l1.44,1.152l0.576,1.439l-0.288,1.44l-1.296,1.584l-1.44-0.864l-1.439,1.008l-1.44,0.145l-1.44-0.288l1.152,1.439l-0.288,1.584
+ l-1.439,0.288l-1.584,0.433l-1.44-0.145l-1.152-1.439l-0.144-1.44l-0.864,1.44h-3.023l-0.721-1.584v1.439l-1.439-1.008
+ l-1.584-0.432l-0.864-1.44l-1.44-0.864l-0.72-1.584v-1.439l0.864-1.44l0.288-1.584l1.439-0.144h1.584l-1.584-0.864l-1.439,0.288
+ l-1.44,1.008l-1.584,0.144l-1.439-1.296l-1.296-1.439l0.288-1.584l1.439-0.576l-0.144-1.44l1.439-0.144l1.44-0.144l1.439-0.721
+ h1.584l1.44-0.576l1.439-1.008l1.44-0.72l2.88-1.152l1.584-0.575l1.296-1.44l1.44-1.008l-0.288-1.584l1.439-1.44l1.009,0.145
+ l1.439-0.433l1.44-1.296l1.439-0.864l1.584-0.288l1.44,0.433l2.88,1.728l0.432,1.44l-1.151,1.439l-1.44,0.288l-1.584,1.009
+ l-2.88,1.439l0.72,1.44l-0.432,1.008l0.288,1.584l1.584-0.145l1.439,0.145l-1.439,0.144l1.152,1.584l1.439-0.575h1.44l0.288-1.44
+ l1.439,0.432l0.288,1.584l-1.44,0.864l0.721,0.145l0.288-0.145l1.439-1.296l-0.432-1.584l0.288-1.44l1.439-1.151l1.584-0.576
+ l1.44,0.144l1.008,1.584l-0.72,1.44l-1.584,0.576l-1.44,1.008l1.584-0.576l1.44,0.433l0.72-1.44l1.584-0.288l1.44,0.432
+ l0.144,1.584l-0.576,1.44l-0.863,1.44l1.008,0.144l0.864-1.152L-6.698,291.942 M30.598,337.591v0.287l1.439,0.434h1.584l1.44,0.43
+ l1.44-1.008v-0.143l-0.145-0.721l-1.439-1.439l-1.44,0.576l-1.44,0.719L30.598,337.591 M-10.011,337.591h1.296H-10.011
+ M48.166,337.591l-1.009,0.863l-1.439,0.287h-1.584l-1.44-1.15l0.288-1.439l1.008-1.441l1.44-1.152l1.439-0.145h1.584l1.44,1.297
+ l-0.432,1.441L48.166,337.591 M-31.179,387.702l1.296-0.293l-0.288,0.148h-0.432L-31.179,387.702"/>
+
+ <path id="path3527" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M68.47,305.19l-1.152,1.152l-1.439-0.864l-1.44-0.145l-1.584,0.433l-1.44,0.288l-1.439,0.575l-1.44,0.433l-1.584-0.576
+ l-1.439-0.576l-0.288-1.439v-1.584l0.432-0.288l0.864-1.44l1.584-0.288l1.44-0.144l1.584-0.145l1.439-1.008l1.44-1.439l0.432-1.585
+ l0.432-1.439l1.584,0.144l-0.144-1.584l-0.288-1.439l-0.72-1.44l0.288-0.72l1.584-1.008l1.439-0.288l1.44-0.145l0.72,0.721v1.439
+ l-1.296,1.44l-0.288,1.584l1.584,0.432l1.008-1.439v1.439h1.44l0.288-1.439l0.863-0.145l1.152,1.44l1.44-1.008l-1.44-1.44v-1.44
+ l1.584,1.152l1.44-0.576l0.863-1.439l1.44,0.288l1.44,0.72l0.575,1.584v1.439l0.145,1.44l-0.72,1.584l-1.44,1.44l-1.44,0.144
+ l-1.439,0.432l-1.584-0.287l-1.44,0.575l1.584,0.721v0.144l0.433,1.584l-0.721,0.576l-1.439,1.008l-1.584-0.288l-1.44,0.721v1.584
+ l-1.439,0.863l-1.296-0.288L68.47,305.19 M18.069,296.406h0.72l0.288,0.144h0.145v0.288l1.439,1.44v1.584l0.288,1.44v-1.44
+ l0.288-1.44l-0.144-1.584v-2.447l-0.433-1.44l0.145-1.439v-1.44l-0.145-1.584l0.288-1.44v-1.439l1.44,0.576l1.439,1.151
+ l-0.863,1.44h1.439l1.584-0.145l0.145,1.44l-1.44,1.008l-1.439,0.864l0.72,1.439l0.432-1.439l1.44-0.576l1.439,0.72l1.009-1.439
+ l1.439,0.144l1.44,1.296l1.008-1.439l1.439,0.288l1.297,1.584l-1.009,1.439l-1.439,0.721l-1.44-0.576l-1.439,1.439l-1.584,0.145
+ l-1.44,1.151l-1.439,0.721l-0.721,0.288l1.152,1.439l0.864-1.439h0.432l0.432-0.288l1.44,0.72l-0.288,1.584l1.152-1.44l0.144-1.151
+ l1.44-0.145l-0.433,1.44h0.288l0.288,0.144h0.145l1.296-1.008v-1.439l1.584-0.576l1.439,1.008l0.864,1.44l-0.288,1.439
+ l-0.144,0.145l-0.721,1.584l-1.439,0.575l-0.576,1.44l1.584,1.008l1.44-0.144l-1.152,1.439l-1.584,0.864l-1.44,1.44l-1.439-0.433
+ h-1.584l-1.44,0.576l-1.584-0.432l-1.439-0.433l-1.44-0.144l-1.439-0.288l-1.585-0.576l-1.439,1.152l-1.44-0.288l-1.439-0.433
+ l1.584-0.575l-1.008-1.44l-1.44-0.144l-1.584,0.144l-1.439,0.288l-1.44-0.72l1.44-0.576l-1.44,0.144l-1.584-0.144l0.288-1.44
+ l-0.288-1.584l0.432-1.439v-1.44h1.44l-1.44-1.296l0.433-1.44l1.296-1.584l1.439,0.288l1.44,0.433l-0.145,1.584h0.145v-0.145
+ l0.72-1.439l1.44-0.576l1.439-0.145v1.44L18.069,296.406"/>
+
+ <path id="path3529" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M41.829,267.318l-1.439,0.288h-1.44l-1.439-0.288l-1.008-1.584l-1.584,0.576l-0.288,1.439h-1.44l-1.584-0.863l0.288,1.439
+ l-0.72,1.44l-1.44-0.145h-1.439l1.439,1.008h1.44l1.439,1.009l0.433,1.439l-1.152,1.44l-0.432,0.432l-1.44,0.72l-1.584,0.145
+ l-1.439-0.433l-1.44-0.144l-1.584-1.44l-1.44-0.432l-1.439-0.864l-1.44-1.296l-1.584-0.288l-1.151-1.439l-0.145-1.44v-1.439
+ l-0.576-1.44l0.576-1.584l1.584-0.576l1.44,0.145l-1.152-0.721l-1.008-1.439l0.288-1.584l1.439,0.144l1.44-0.863l-1.008-1.44
+ l-0.433-1.584l-0.72-1.44l0.432-1.439l-0.144-0.288l-0.145-1.44l-0.863-1.439l-0.576-1.44l-0.432-1.439v-1.584l-0.576-1.44v-3.023
+ l0.288-1.584l0.432-1.44l1.008-1.584l1.584-1.152l1.44-0.72l1.584-0.432l1.439,0.432l0.576,1.44v1.439l-0.288,1.584l0.433,1.44
+ l0.575,1.439l-0.144,1.44l-0.432,1.584l-0.721,1.44l-0.144,1.439l1.008,1.584l0.576,1.44l1.584,0.288l-0.864-1.584l0.576-1.584
+ l-0.144-1.44l0.288-1.584l1.439,1.008l0.576-1.44l-1.584-1.295l0.288-1.584l0.432-1.44l0.433-1.584l1.439,1.151l1.44,0.576
+ l1.008,1.44l0.432,1.584l0.288-1.44l0.576-1.584l-1.584-0.863l0.144-1.44h-1.584l-1.296-1.584l-0.288-1.44v-1.439h1.44l1.439,0.432
+ l-0.144-1.584l-1.296-1.439l1.439-0.864l1.44-0.288l1.44,0.864l0.287-2.88l1.44-1.44l1.44-0.72l1.439,1.298l0.864,1.438v1.584
+ l-0.864,1.439l-0.72,1.44v1.584l0.432,1.439l0.145,1.44l0.576,1.584v-1.44l0.432-1.584l-0.145-1.439v-1.584l0.864-1.44l1.008-1.439
+ l1.44,1.008l1.008,1.584l-0.432,1.439l-0.576,1.44l-0.288,1.584l-0.576,1.439l0.145,1.44l0.575-1.44l0.721-1.439l0.576-1.584
+ l1.439-1.296l2.88,2.304l0.288,1.44l-0.864,1.439l-0.72,1.584l-0.72,1.44l1.439-1.296l1.584-1.44l1.297,1.44l0.432,1.584
+ l-0.288,1.439l-0.432,1.44l-1.152,1.584l-1.44-0.288l-1.439-0.576H45.43v2.88l-1.44,1.584l-1.439,0.433l-1.584-0.288l-1.44,1.008
+ l-1.439,0.72l-1.44-1.296l-1.152,1.44l-1.439-0.145l-1.44-0.576l-1.584,0.576l0.145,1.44l-1.008,1.439l-0.576,1.44l-1.296,2.592
+ l-0.576,1.584l1.439,0.72l1.44,0.145l1.439-0.864l1.297-1.44l1.439-0.863l0.432,0.144l0.288,1.008l0.433,1.44l1.439,1.296
+ l1.584-0.432l1.296-1.44l0.433-0.144l1.584-0.433l1.439,0.433l0.433,1.584l0.72,1.008l1.008,1.439l1.44,1.009l0.864,1.584
+ l-1.009,1.439l-1.439,0.433l-1.008-1.44l-1.44,0.288L41.829,267.318 M20.949,279.27l-0.144,0.144l-1.584,1.008l-1.44-0.144
+ l-1.439,0.288l-1.584-1.296l-0.145-0.864l0.145-1.584l1.151-1.44l1.44-0.144l1.439,1.152l1.44,0.863l0.72,1.44V279.27
+ M-17.786,263.142h1.008l1.439-0.576l1.44-0.288l1.584-0.72l1.44-0.288l1.439-0.288l1.584-1.008l1.296-1.44l1.296,1.008
+ l1.584,1.296l0.288,1.44l-0.288,1.44l-0.432,1.584l0.144,1.439l-0.72,1.44l-1.439,0.72l-0.576,0.144l-1.44,1.152l-1.584-0.576
+ l-1.439-0.576l-1.44-0.72l-1.439-0.864l-1.297-1.439l-1.584-1.296L-17.786,263.142 M88.773,308.79l-0.144,0.433l-0.721,1.439
+ l-1.584-0.144l-0.575,1.584l1.439,0.432l1.44-0.144l1.584,0.144l0.72-0.144l1.439-0.721l0.721-1.584l-0.721-0.72l-1.584-0.72
+ h-0.287l-1.584-0.145L88.773,308.79 M37.941,299.862l-0.144,1.584l0.575-1.584H37.941"/>
+
+ <path id="path3531" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M0.357,192.15l-0.144,0.144l-0.145,1.44l0.288,1.584l1.008,1.44l1.296,1.439l1.44,1.44l0.288,1.439v1.44l0.576,1.584v1.439
+ l0.288,1.442l0.432,1.584l0.288,2.878l0.288,1.584l0.432,1.44l0.145,1.584v2.88l0.863,2.882l1.297,0.43l1.439-0.288l1.584-0.576
+ l1.44-0.287l1.439-0.433l2.88-0.576l1.584-0.144l2.88-0.864l1.44-1.151l0.864-1.009l0.72-1.584l0.288-1.439l-0.145-1.44
+ l-1.439-0.72v-1.44l1.439,1.152l1.585-0.72l-0.576-1.44l-1.296-1.439l1.296,0.287l0.863,1.44l1.584-0.576l0.288-0.288l0.288-0.432
+ l1.44-0.864l1.584-0.575l1.439-0.433l1.44-0.288l1.439-1.296l0.288-1.44l0.288-1.584l0.433-1.439l0.863-1.44l0.721-1.438
+ l0.576-1.442l0.72-1.584l0.432-1.439v-1.44l-1.439-0.288l-1.44-0.576l-1.584-0.72l-1.44-0.288l-1.584-0.576l-1.439,0.864
+ l-1.44-1.44l-1.151-1.439l-0.576-0.576l-0.145-1.439l-1.296-1.44l-0.863-1.44l-1.152-1.584l-0.72-1.438l-1.44,0.288l-1.439-0.722
+ l0.432-1.44l-0.864-1.44l-1.439-0.72l-1.44-1.44l-0.288-1.439l-0.288-0.576l-1.008-1.584l-1.152-1.439l-0.575-1.44l-1.44-1.152
+ l-0.864-1.584l-0.72,1.584l-1.008,1.44l-1.584,0.144l-1.44,0.288l-1.439,0.576L5.254,169.4l-1.44,0.574l-1.439-0.145l-1.585-0.144
+ l-1.439-0.145l-1.44-0.432l-1.584-0.576l-1.439-0.288l-1.584,0.146l-1.008,1.582l0.575,1.439v1.44l-0.144,1.439l0.576,1.44
+ l0.72,1.584l-0.288,1.44l-1.439,0.287l-0.288,1.584l-0.288,1.44v1.584l1.151,1.44l1.44,1.151l1.584,0.864l1.44,0.576l0.863,1.439
+ l1.152,1.584L0.357,192.15 M40.39,284.31l-0.145-1.152l-0.72-1.151h-1.439l-1.44,0.287l-1.44-0.287l-0.432,0.863l-0.576,1.44
+ l0.145,1.584l0.863,1.439l1.584-0.432l1.44-1.008l0.72-1.584H40.39 M33.046,288.342l0.432-0.288l0.144-1.584l-0.144-1.44v-1.439
+ l-0.144-1.584l-0.576-0.864l-1.44-0.288l-1.296,2.16l-0.288,1.439v1.44l0.288,1.439l1.584,1.152L33.046,288.342 M77.974,274.085
+ l-0.432,0.433l-1.584,0.288l-1.44,0.432l-1.44-0.432l-1.439-1.152l0.72-1.584l-0.288-1.152l1.008-1.439l1.584-1.008l-1.296-1.584
+ l1.584-0.721l0.864-1.439l-0.288-1.44l0.433-1.439l1.439,1.008l0.576,1.439l0.288,1.584v2.881l0.864,1.584l0.287,1.439v1.584
+ L77.974,274.085 M69.046,270.917l-0.721,1.009l-1.439-0.576l-0.72-1.44v-1.872l-0.288-1.584l-1.44,0.721l-0.864,1.439l-1.439-0.432
+ l-1.44-0.721l-0.864-1.439v-1.44l0.145-1.584l-0.288-2.88l1.008-1.584h1.44l1.584-0.864l1.439-0.432l1.44,0.72l1.439,0.288
+ l1.44,0.72l0.432,1.584l0.433,1.44l-0.288,1.584l-0.145,1.44l0.288,1.439l-0.863,1.44l0.287,1.584L69.046,270.917 M58.821,283.446
+ l-1.584,0.72l-1.439,0.433l-1.44,0.144l-1.584,0.288l-1.439,0.432l-1.44,0.288l-1.584-0.575l-0.288-1.44l0.864-0.432l1.439-1.009
+ l1.584-0.432l1.44,0.145l1.584,0.144l1.439-0.144l1.44,0.144l1.584,0.432L58.821,283.446"/>
+
+ <path id="path3533" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M660.021,919.78l1.152,0.434l1.439,0.287l1.441,0.432l1.441,0.434l1.439,0.865l-1.439,0.432l-1.441,0.576l-1.441-0.865
+ l-0.721-1.441l-1.439-0.432l-0.576-0.434l-1.439,0.434l-1.584,0.432l-1.439-0.143v-1.441l-0.721,1.441l-0.863,1.441l-0.145-0.145
+ l0.145-1.439l-0.578-1.441l-1.006,1.15l-0.576,1.152l-0.865-1.441l-1.441,1.01l-1.439,0.289l1.439,0.865l-1.439-0.721l-1.584,0.289
+ v0.865l-1.584-0.145l-1.439,0.145l-1.443-0.576l1.297-1.008l1.439-0.721l1.441,0.293l1.441-1.299l-1.008-1.439l1.439,0.432
+ l1.439,0.865l-0.576-1.441l1.443-0.141l1.439-0.576l-0.865,1.584l1.441,1.293l0.576-0.863l0.139-0.291l-0.139-1.439l-0.576-1.441
+ l1.439-0.289l-0.576,1.443l1.438-0.291l1.584,1.152l1.443,0.574l1.441,0.721L660.021,919.78 M448.486,876.294h0.717l1.297-1.443
+ l0.863-1.584l-0.717,0.289l-1.586,0.721l-1.441-0.145l-0.141,0.146l-0.291,1.439v0.578l-0.576,1.439l-0.863,1.439l-1.01,1.441
+ l-1.441,1.15l-0.717,0.719l0.287,0.578l0.576-0.145l1.438-1.152l1.443-1.293l0.865-1.439l0.145-0.145l0.863-1.15L448.486,876.294
+ M68.037,231.174l-0.144,0.144l1.008,1.44l0.288,1.439l1.296,1.584v1.44l-0.288,1.439l-0.432,1.584l-1.44,1.009l-1.439,1.439
+ l0.864,1.439l1.439,0.145l0.576,1.44l-1.296,1.584l-1.584,0.432l-1.44,0.576l-1.439-0.864l-0.288-1.584l-0.288-1.44l-1.44-0.72
+ l-1.439,0.72l-1.44-0.72l0.864-1.439l-1.44,0.432l-1.584-0.145l-1.439-1.151l-0.288-1.44l0.576-1.584l-0.576-1.439l-1.44-0.433
+ l-1.439-1.151l0.144-1.584l1.44-0.721l1.439-0.144l1.44,0.576l1.439,1.008l1.584,1.584l1.44,0.288v-1.44l-0.864-1.439l-1.584-0.145
+ l-0.863-1.439l0.432-1.584l-1.44,0.575l-1.439-0.432l-0.145-1.439l-1.439-1.152v-1.439l1.439,0.432l1.44-0.721l-1.44-0.863
+ l-1.584-0.432l-1.439-0.289l-0.576-1.439l-0.432-1.584l1.439-1.44l1.44,1.009l1.439-0.433l1.44,1.154l0.144-1.442l-1.439-1.296
+ l-0.576-1.439l1.439-0.145l1.44-0.864l-0.288-1.438l1.008-1.584l1.296,1.584l1.44-0.29l-0.432-1.44l1.296,1.584l0.863,1.44
+ l0.721,1.44l-0.288,1.439l-0.72,1.584l0.575,1.44l1.152,1.439l0.432,1.44l0.576,2.88l1.152,1.584L68.037,231.174"/>
+
+ <path id="path3535" fill="none" stroke="#019CB1" stroke-width="0.44" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M494.131,199.494l0.293,0.288 M406.148,71.192l-0.143,0.288 M503.926,228.006l0.143,0.287 M477.861,298.566l0.145,0.288
+ M524.949,264.87h0.291 M623.732,592.759l-1.584,0.574l-1.441,1.008l-1.152,1.008l-1.439,0.146v1.439l-0.145,1.441l-0.863,1.584
+ l1.297,1.439l0.139,0.145l1.584,0.719l0.723,0.43l1.439,0.578l0.576,0.289l1.441-0.145l1.582-0.432l1.01-1.439l1.586,0.287
+ l1.439,1.01l-0.289,1.582l-0.143,1.443l-1.441,1.439l-0.289,1.584l-0.289,1.439l-0.576,0.721l-1.443,0.287l-1.438-0.574
+ l-1.439-0.865l-1.443,0.576l-0.287,1.441l-1.584,0.289l-1.439,0.863l-0.869,1.586l-1.438,0.574l-1.584,1.441l-0.865,1.584
+ l-0.143,1.439l0.289,1.441l-1.441,1.293l-1.008,1.443l-0.289,1.439l-0.289,1.584l-0.719,1.439l-1.441-0.721l-1.439-1.008h-2.305
+ l-0.145,1.443l-1.293,1.441l-1.439-1.299l0.287-1.584l-0.863-0.574l-0.432,1.441l-1.445,0.863l-0.141,0.863l0.289,1.443
+ l-0.721,1.584l-0.863,1.439l-1.152,0.145l-0.432,0.289l-0.865,1.438l-0.432,1.443l-0.289,1.439l-0.146,1.584l0.436,1.584
+ l1.008,1.439l-0.143,1.443l0.432,1.584l0.289,1.441l-0.574,1.584v1.439l-0.145,1.584l-0.576,1.438l-0.865,1.586l-1.152,1.443
+ l-0.863,1.438l-0.289,0.721"/>
+ <g id="switch3537">
+ <text transform="matrix(1 0 0 1 41.2549 134.2627)" fill="#00809E" font-family="'ArialMT'" font-size="14">Sea</text>
+ </g>
+ <g id="switch3548">
+ <text transform="matrix(1 0 0 1 461.9004 398.0713)" fill="#00809E" font-family="'ArialMT'" font-size="16">Kara</text>
+ </g>
+ <g id="switch3561">
+ <text transform="matrix(1 0 0 1 -8.7139 462.8721)" fill="#00809E" font-family="'ArialMT'" font-size="14">Bay</text>
+ </g>
+ <g id="switch3572">
+ <text transform="matrix(1 0 0 1 -234.1641 394.0322)" fill="#00809E" font-family="'ArialMT'" font-size="16">Bay</text>
+ </g>
+ <g id="switch3583">
+ <text transform="matrix(1 0 0 1 221.4707 238.0791)" fill="#00809E" font-family="'ArialMT'" font-size="24">A r c t i c</text>
+ </g>
+ <g id="switch3590">
+ <text transform="matrix(1 0 0 1 29.3027 118.2783)" fill="#00809E" font-family="'ArialMT'" font-size="14">Beaufort</text>
+ </g>
+ <g id="switch3609">
+ <text transform="matrix(1 0 0 1 418.9902 201.0869)" fill="#00809E" font-family="'ArialMT'" font-size="16">Laptev</text>
+ </g>
+ <g id="switch3626">
+ <text transform="matrix(1 0 0 1 384.1191 546.9658)" fill="#00809E" font-family="'ArialMT'" font-size="14">Barents Sea</text>
+ </g>
+ <g id="switch3649">
+ <text transform="matrix(1 0 0 1 195.7266 589.999)" fill="#00809E" font-family="'ArialMT'" font-size="16">Greenland</text>
+ </g>
+ <g id="switch3670">
+ <text transform="matrix(1 0 0 1 -12.3135 445.8799)" fill="#00809E" font-family="'ArialMT'" font-size="14">Baffin</text>
+ </g>
+ <g id="switch3683">
+ <text transform="matrix(1 0 0 1 -242.8945 376.0732)" fill="#00809E" font-family="'ArialMT'" font-size="16">Hudson</text>
+ </g>
+ <g id="switch3698">
+ <text transform="matrix(1 0 0 1 319.75 90.1982)" fill="#00809E" font-family="'ArialMT'" font-size="14">Sea</text>
+ </g>
+ <g id="switch3709">
+ <text transform="matrix(1 0 0 1 466.0566 415.7842)" fill="#00809E" font-family="'ArialMT'" font-size="14">Sea</text>
+ </g>
+ <g id="switch3720">
+ <text transform="matrix(1 0 0 1 211.998 607.1377)" fill="#00809E" font-family="'ArialMT'" font-size="16">Sea</text>
+ </g>
+ <g id="switch3731">
+ <text transform="matrix(1 0 0 1 521.8809 -158.4111)" fill="#00809E" font-family="'ArialMT'" font-size="16">Sea of</text>
+ </g>
+ <g id="switch3742">
+ <text transform="matrix(1 0 0 1 516.2656 -138.8271)" fill="#00809E" font-family="'ArialMT'" font-size="16">Okhotsk</text>
+ </g>
+ <g id="switch3761">
+ <text transform="matrix(1 0 0 1 -55.0811 137.7197)" fill="#00809E" font-family="'ArialMT'" font-size="10">Lake</text>
+ </g>
+ <g id="switch3774">
+ <text transform="matrix(1 0 0 1 -144.6494 198.1982)" fill="#00809E" font-family="'ArialMT'" font-size="10">Lake</text>
+ </g>
+ <g id="switch3787">
+ <text transform="matrix(1 0 0 1 -62.7129 129.0791)" fill="#00809E" font-family="'ArialMT'" font-size="10">Great Bear</text>
+ </g>
+ <g id="switch3808">
+ <text transform="matrix(1 0 0 1 -158.041 188.1182)" fill="#00809E" font-family="'ArialMT'" font-size="10">Great Slave</text>
+ </g>
+ <g id="switch3833">
+ <text transform="matrix(1 0 0 1 417.3789 871.251)" fill="#00809E" font-family="'ArialMT'" font-size="10">Sea</text>
+ </g>
+ <g id="switch3844">
+ <text transform="matrix(1 0 0 1 415.9414 859.0127)" fill="#00809E" font-family="'ArialMT'" font-size="10">Baltic</text>
+ </g>
+ <g id="switch3859">
+ <text transform="matrix(1 0 0 1 696.4531 927.9893)" fill="#00809E" font-family="'ArialMT'" font-size="10">Black Sea</text>
+ </g>
+ <g id="switch3880">
+ <text transform="matrix(1 0 0 1 189.4463 4.2334)" fill="#00809E" font-family="'ArialMT'" font-size="14">Sea</text>
+ </g>
+ <g id="switch3891">
+ <text transform="matrix(1 0 0 1 164.9502 -71.5146)" fill="#00809E" font-family="'ArialMT'" font-size="8">Bering</text>
+ </g>
+ <g id="switch3906">
+ <text transform="matrix(1 0 0 1 164.9502 -61.8643)" fill="#00809E" font-family="'ArialMT'" font-size="8">Strait</text>
+ </g>
+ <g id="switch3923">
+ <text transform="matrix(1 0 0 1 179.207 -8.0088)" fill="#00809E" font-family="'ArialMT'" font-size="12">Chukchi</text>
+ </g>
+ <g id="switch3942">
+ <text transform="matrix(1 0 0 1 176.6143 68.165)" fill="#00809E" font-family="'ArialMT'" font-size="8">average minimum</text>
+ </g>
+ <g id="switch3971">
+ <text transform="matrix(1 0 0 1 178.4863 77.8154)" fill="#00809E" font-family="'ArialMT'" font-size="8">extent of sea ice</text>
+ </g>
+ <g id="g4004">
+ <g id="switch4006">
+
+ <text transform="matrix(0.7272 -0.6864 0.6864 0.7272 567.4951 122.5786)" fill="#00809E" font-family="'ArialMT'" font-size="7.9999">n</text>
+ </g>
+ <g id="switch4013">
+
+ <text transform="matrix(0.7272 -0.6864 0.6864 0.7272 564.7842 125.1392)" fill="#00809E" font-family="'ArialMT'" font-size="7.9999">e</text>
+ </g>
+ <g id="switch4020">
+
+ <text transform="matrix(0.7272 -0.6864 0.6864 0.7272 561.5264 128.2139)" fill="#00809E" font-family="'ArialMT'" font-size="7.9999">L</text>
+ </g>
+ </g>
+ <g id="switch4027">
+
+ <text transform="matrix(0.7272 -0.6864 0.6864 0.7272 570.9268 119.3403)" fill="#00809E" font-family="'ArialMT'" font-size="7.9999">a</text>
+ </g>
+ <g id="g4034">
+ <g id="switch4036">
+
+ <text transform="matrix(0.8538 -0.5206 0.5206 0.8538 452.9609 -57.6816)" fill="#00809E" font-family="'ArialMT'" font-size="8">a</text>
+ </g>
+ <g id="switch4043">
+ <text transform="matrix(0.8538 -0.5206 0.5206 0.8538 446.959 -54.022)" fill="#00809E" font-family="'ArialMT'" font-size="8">m</text>
+ </g>
+ <g id="switch4050">
+ <text transform="matrix(0.8538 -0.5206 0.5206 0.8538 443.4082 -51.856)" fill="#00809E" font-family="'ArialMT'" font-size="8">y</text>
+ </g>
+ <g id="switch4057">
+
+ <text transform="matrix(0.8538 -0.5206 0.5206 0.8538 441.7598 -50.8521)" fill="#00809E" font-family="'ArialMT'" font-size="8">l</text>
+ </g>
+ <g id="switch4064">
+
+ <text transform="matrix(0.8538 -0.5206 0.5206 0.8538 438.0977 -48.6187)" fill="#00809E" font-family="'ArialMT'" font-size="8">o</text>
+ </g>
+ <g id="switch4071">
+
+ <text transform="matrix(0.8538 -0.5206 0.5206 0.8538 433.2246 -45.6455)" fill="#00809E" font-family="'ArialMT'" font-size="8">K</text>
+ </g>
+ </g>
+ <g id="g4078">
+ <g id="switch4080">
+
+ <text transform="matrix(0.9644 0.2643 -0.2643 0.9644 632.4961 1.6206)" fill="#00809E" font-family="'ArialMT'" font-size="7.9997">n</text>
+ </g>
+ <g id="switch4087">
+
+ <text transform="matrix(0.9644 0.2643 -0.2643 0.9644 628.8232 0.6147)" fill="#00809E" font-family="'ArialMT'" font-size="7.9997">a</text>
+ </g>
+ <g id="switch4094">
+
+ <text transform="matrix(0.9644 0.2643 -0.2643 0.9644 624.292 -0.6289)" fill="#00809E" font-family="'ArialMT'" font-size="7.9997">d</text>
+ </g>
+ <g id="switch4101">
+
+ <text transform="matrix(0.9644 0.2643 -0.2643 0.9644 622.1025 -1.2271)" fill="#00809E" font-family="'ArialMT'" font-size="7.9997">l</text>
+ </g>
+ <g id="switch4108">
+
+ <text transform="matrix(0.9644 0.2643 -0.2643 0.9644 616.6055 -2.7344)" fill="#00809E" font-family="'ArialMT'" font-size="7.9997">A</text>
+ </g>
+ </g>
+ <g id="g4115">
+ <g id="switch4117">
+
+ <text transform="matrix(0.7065 0.7078 -0.7078 0.7065 633.8789 125.2837)" fill="#00809E" font-family="'ArialMT'" font-size="10.0006">y</text>
+ </g>
+ <g id="switch4124">
+
+ <text transform="matrix(0.7065 0.7078 -0.7078 0.7065 630.6465 122.0435)" fill="#00809E" font-family="'ArialMT'" font-size="10.0006">u</text>
+ </g>
+ <g id="switch4131">
+
+ <text transform="matrix(0.7065 0.7078 -0.7078 0.7065 627.7344 119.1279)" fill="#00809E" font-family="'ArialMT'" font-size="10.0006">y</text>
+ </g>
+ <g id="switch4138">
+
+ <text transform="matrix(0.7065 0.7078 -0.7078 0.7065 626.3701 117.7622)" fill="#00809E" font-family="'ArialMT'" font-size="10.0006">l</text>
+ </g>
+ <g id="switch4145">
+
+ <text transform="matrix(0.7065 0.7078 -0.7078 0.7065 624.917 116.3071)" fill="#00809E" font-family="'ArialMT'" font-size="10.0006">i</text>
+ </g>
+ <g id="switch4152">
+
+ <text transform="matrix(0.7065 0.7078 -0.7078 0.7065 621.1396 112.5215)" fill="#00809E" font-family="'ArialMT'" font-size="10.0006">V</text>
+ </g>
+ </g>
+ <g id="g4159">
+ <g id="switch4161">
+
+ <text transform="matrix(0.5255 -0.8508 0.8508 0.5255 45.3916 5.9004)" fill="#00809E" font-family="'ArialMT'" font-size="10.0001">n</text>
+ </g>
+ <g id="switch4168">
+
+ <text transform="matrix(0.5255 -0.8508 0.8508 0.5255 43.0947 9.6172)" fill="#00809E" font-family="'ArialMT'" font-size="10.0001">o</text>
+ </g>
+ <g id="switch4175">
+
+ <text transform="matrix(0.5255 -0.8508 0.8508 0.5255 40.7881 13.3535)" fill="#00809E" font-family="'ArialMT'" font-size="10.0001">k</text>
+ </g>
+ <g id="switch4182">
+
+ <text transform="matrix(0.5255 -0.8508 0.8508 0.5255 38.3188 17.353)" fill="#00809E" font-family="'ArialMT'" font-size="10.0001">u</text>
+ </g>
+ <g id="switch4189">
+
+ <text transform="matrix(0.5255 -0.8508 0.8508 0.5255 35.9282 21.2241)" fill="#00809E" font-family="'ArialMT'" font-size="10.0001">Y</text>
+ </g>
+ </g>
+ <g id="g4196">
+ <g id="switch4198">
+
+ <text transform="matrix(0.8804 0.4743 -0.4743 0.8804 720.9805 148.7324)" fill="#00809E" font-family="'ArialMT'" font-size="10.0003">a</text>
+ </g>
+ <g id="switch4205">
+
+ <text transform="matrix(0.8804 0.4743 -0.4743 0.8804 716.8203 146.4922)" fill="#00809E" font-family="'ArialMT'" font-size="10.0003">n</text>
+ </g>
+ <g id="switch4212">
+
+ <text transform="matrix(0.8804 0.4743 -0.4743 0.8804 713.5371 144.7227)" fill="#00809E" font-family="'ArialMT'" font-size="10.0003">e</text>
+ </g>
+ <g id="switch4219">
+
+ <text transform="matrix(0.8804 0.4743 -0.4743 0.8804 709.5957 142.5996)" fill="#00809E" font-family="'ArialMT'" font-size="10.0003">L</text>
+ </g>
+ </g>
+ <g id="g4226">
+ <g id="switch4228">
+
+ <text transform="matrix(0.4644 -0.8856 0.8856 0.4644 56.9409 -17.124)" fill="#00809E" font-family="'ArialMT'" font-size="7.9998">r</text>
+ </g>
+ <g id="switch4235">
+
+ <text transform="matrix(0.4644 -0.8856 0.8856 0.4644 55.209 -13.8174)" fill="#00809E" font-family="'ArialMT'" font-size="7.9998">e</text>
+ </g>
+ <g id="switch4242">
+
+ <text transform="matrix(0.4644 -0.8856 0.8856 0.4644 53.3296 -10.2373)" fill="#00809E" font-family="'ArialMT'" font-size="7.9998">v</text>
+ </g>
+ <g id="switch4249">
+
+ <text transform="matrix(0.4644 -0.8856 0.8856 0.4644 52.3901 -8.4482)" fill="#00809E" font-family="'ArialMT'" font-size="7.9998">i</text>
+ </g>
+ <g id="switch4256">
+
+ <text transform="matrix(0.4644 -0.8856 0.8856 0.4644 49.8965 -3.688)" fill="#00809E" font-family="'ArialMT'" font-size="7.9998">R</text>
+ </g>
+ </g>
+ <g id="g4263">
+ <g id="switch4265">
+
+ <text transform="matrix(0.9782 0.2075 -0.2075 0.9782 680.9473 353.2441)" fill="#00809E" font-family="'ArialMT'" font-size="7.9997">y</text>
+ </g>
+ <g id="switch4272">
+
+ <text transform="matrix(0.9782 0.2075 -0.2075 0.9782 677.375 352.4863)" fill="#00809E" font-family="'ArialMT'" font-size="7.9997">e</text>
+ </g>
+ <g id="switch4279">
+
+ <text transform="matrix(0.9782 0.2075 -0.2075 0.9782 674.2529 351.8242)" fill="#00809E" font-family="'ArialMT'" font-size="7.9997">s</text>
+ </g>
+ <g id="switch4286">
+
+ <text transform="matrix(0.9782 0.2075 -0.2075 0.9782 672.0938 351.3652)" fill="#00809E" font-family="'ArialMT'" font-size="7.9997">i</text>
+ </g>
+ <g id="switch4293">
+
+ <text transform="matrix(0.9782 0.2075 -0.2075 0.9782 667.5352 350.3984)" fill="#00809E" font-family="'ArialMT'" font-size="7.9997">n</text>
+ </g>
+ <g id="switch4300">
+
+ <text transform="matrix(0.9782 0.2075 -0.2075 0.9782 663.8857 349.625)" fill="#00809E" font-family="'ArialMT'" font-size="7.9997">e</text>
+ </g>
+ <g id="switch4307">
+
+ <text transform="matrix(0.9782 0.2075 -0.2075 0.9782 659.7783 348.7539)" fill="#00809E" font-family="'ArialMT'" font-size="7.9997">Y</text>
+ </g>
+ </g>
+ <g id="switch4314">
+ <text transform="matrix(1 0 0 1 524.084 692.1182)" fill="#00809E" font-family="'ArialMT'" font-size="10">Lake</text>
+ </g>
+ <g id="switch4327">
+ <text transform="matrix(1 0 0 1 520.6465 741.2158)" fill="#00809E" font-family="'ArialMT'" font-size="10">Lake</text>
+ </g>
+ <g id="switch4340">
+ <text transform="matrix(1 0 0 1 516.0234 750.0049)" fill="#00809E" font-family="'ArialMT'" font-size="10">Ladoga</text>
+ </g>
+ <g id="switch4357">
+ <text transform="matrix(1 0 0 1 518.7598 700.8994)" fill="#00809E" font-family="'ArialMT'" font-size="10">Onega</text>
+ </g>
+ <g id="g4372">
+ <g id="switch4374">
+
+ <text transform="matrix(0.1873 0.9823 -0.9823 0.1873 707.7598 769.2021)" fill="#00809E" font-family="'ArialMT'" font-size="10">a</text>
+ </g>
+ <g id="switch4381">
+
+ <text transform="matrix(0.1873 0.9823 -0.9823 0.1873 707.0801 765.6377)" fill="#00809E" font-family="'ArialMT'" font-size="10">g</text>
+ </g>
+ <g id="switch4388">
+
+ <text transform="matrix(0.1873 0.9823 -0.9823 0.1873 706.6621 763.4492)" fill="#00809E" font-family="'ArialMT'" font-size="10">l</text>
+ </g>
+ <g id="switch4395">
+
+ <text transform="matrix(0.1873 0.9823 -0.9823 0.1873 705.8574 759.2344)" fill="#00809E" font-family="'ArialMT'" font-size="10">o</text>
+ </g>
+ <g id="switch4402">
+
+ <text transform="matrix(0.1873 0.9823 -0.9823 0.1873 704.9473 754.4707)" fill="#00809E" font-family="'ArialMT'" font-size="10">V</text>
+ </g>
+ </g>
+ <g id="g4409">
+ <g id="switch4411">
+
+ <text transform="matrix(0.9551 -0.2964 0.2964 0.9551 -65.2192 89.7993)" fill="#00809E" font-family="'ArialMT'" font-size="10.0003">v</text>
+ </g>
+ <g id="switch4418">
+
+ <text transform="matrix(0.9551 -0.2964 0.2964 0.9551 -67.1528 90.3965)" fill="#00809E" font-family="'ArialMT'" font-size="10.0003">i</text>
+ </g>
+ <g id="switch4425">
+
+ <text transform="matrix(0.9551 -0.2964 0.2964 0.9551 -72.2695 91.9873)" fill="#00809E" font-family="'ArialMT'" font-size="10.0003">R</text>
+ </g>
+ </g>
+ <g id="g4432">
+ <g id="switch4434">
+
+ <text transform="matrix(0.9551 -0.2964 0.2964 0.9551 -57.7788 87.4897)" fill="#00809E" font-family="'ArialMT'" font-size="10.0003">r</text>
+ </g>
+ <g id="switch4441">
+
+ <text transform="matrix(0.9551 -0.2964 0.2964 0.9551 -61.3438 88.5962)" fill="#00809E" font-family="'ArialMT'" font-size="10.0003">e</text>
+ </g>
+ </g>
+ <g id="g4448">
+ <g id="switch4450">
+
+ <text transform="matrix(0.9715 0.2372 -0.2372 0.9715 -103.7178 93.0083)" fill="#00809E" font-family="'ArialMT'" font-size="10.0004">n</text>
+ </g>
+ <g id="switch4457">
+
+ <text transform="matrix(0.9715 0.2372 -0.2372 0.9715 -107.3413 92.1226)" fill="#00809E" font-family="'ArialMT'" font-size="10.0004">e</text>
+ </g>
+ <g id="switch4464">
+
+ <text transform="matrix(0.9715 0.2372 -0.2372 0.9715 -111.6064 91.0801)" fill="#00809E" font-family="'ArialMT'" font-size="10.0004">k</text>
+ </g>
+ <g id="switch4471">
+
+ <text transform="matrix(0.9715 0.2372 -0.2372 0.9715 -114.9878 90.2554)" fill="#00809E" font-family="'ArialMT'" font-size="10.0004">c</text>
+ </g>
+ <g id="switch4478">
+
+ <text transform="matrix(0.9715 0.2372 -0.2372 0.9715 -118.709 89.3467)" fill="#00809E" font-family="'ArialMT'" font-size="10.0004">a</text>
+ </g>
+ <g id="switch4485">
+
+ <text transform="matrix(0.9715 0.2372 -0.2372 0.9715 -126.4214 87.4629)" fill="#00809E" font-family="'ArialMT'" font-size="10.0004">M</text>
+ </g>
+ </g>
+ <g id="g4492">
+ <g id="switch4494">
+
+ <text transform="matrix(0.9715 0.2372 -0.2372 0.9715 -92.8174 95.6694)" fill="#00809E" font-family="'ArialMT'" font-size="10.0004">e</text>
+ </g>
+ <g id="switch4501">
+
+ <text transform="matrix(0.9715 0.2372 -0.2372 0.9715 -95.0366 95.1245)" fill="#00809E" font-family="'ArialMT'" font-size="10.0004">i</text>
+ </g>
+ <g id="switch4508">
+
+ <text transform="matrix(0.9715 0.2372 -0.2372 0.9715 -99.0537 94.146)" fill="#00809E" font-family="'ArialMT'" font-size="10.0004">z</text>
+ </g>
+ </g>
+ <g id="switch4515">
+ <text transform="matrix(1 0 0 1 260.666 881.1143)" fill="#00809E" font-family="'ArialMT'" font-size="14">North</text>
+ </g>
+ <g id="switch4530">
+ <text transform="matrix(1 0 0 1 266.9004 895.8799)" fill="#00809E" font-family="'ArialMT'" font-size="12">Sea</text>
+ </g>
+ <g id="switch4541">
+ <text transform="matrix(1 0 0 1 318.3418 57.9424)" fill="#00809E" font-family="'ArialMT'" font-size="16">East</text>
+ </g>
+ <g id="switch4554">
+ <text transform="matrix(1 0 0 1 305.0605 75.2822)" fill="#00809E" font-family="'ArialMT'" font-size="16"> Siberian</text>
+ </g>
+ <g id="switch4575">
+ <text transform="matrix(1 0 0 1 -177.7041 -192.4014)" fill="#00809E" font-family="'ArialMT'" font-size="20">N o r t h P a c i f i c</text>
+ </g>
+ <g id="switch4586">
+ <text transform="matrix(1 0 0 1 -225.001 202.8057)" fill="#00809E" font-family="'ArialMT'" font-size="10">Lake</text>
+ </g>
+ <g id="switch4599">
+ <text transform="matrix(1 0 0 1 -236.5215 212.3096)" fill="#00809E" font-family="'ArialMT'" font-size="10">Athabasca</text>
+ </g>
+ <g id="switch4620">
+ <text transform="matrix(1 0 0 1 -147.3096 -159.3428)" fill="#00809E" font-family="'ArialMT'" font-size="20">O c e a n</text>
+ </g>
+ <g id="switch4627">
+ <text transform="matrix(1 0 0 1 204.9961 -193.04)" fill="#00809E" font-family="'ArialMT'" font-size="20">Bering Sea</text>
+ </g>
+ <g id="switch4648">
+ <text transform="matrix(1 0 0 1 221.417 266.4619)" fill="#00809E" font-family="'ArialMT'" font-size="24">O c e a n</text>
+ </g>
+ <g id="switch4655">
+ <text transform="matrix(1 0 0 1 -18.0732 696.1338)" fill="#00809E" font-family="'ArialMT'" font-size="14">Denmark Strait</text>
+ </g>
+ <g id="switch4684">
+ <text transform="matrix(1 0 0 1 -123.0635 552.7725)" fill="#00809E" font-family="'ArialMT'" font-size="16">Davis Strait</text>
+ </g>
+ <g id="switch4711">
+ <text transform="matrix(1 0 0 1 -185.4863 782.0244)" fill="#00809E" font-family="'ArialMT'" font-size="20">N o r t h A t l a n t i c O c e a n</text>
+ </g>
+ <g id="switch4718">
+ <text transform="matrix(1 0 0 1 -199.6572 664.6143)" fill="#00809E" font-family="'ArialMT'" font-size="14">Labrador</text>
+ </g>
+ <g id="switch4739">
+ <text transform="matrix(1 0 0 1 -188.7139 682.4697)" fill="#00809E" font-family="'ArialMT'" font-size="14">Sea</text>
+ </g>
+ <g id="switch4750">
+ <text transform="matrix(1 0 0 1 238.4443 681.1885)" fill="#00809E" font-family="'ArialMT'" font-size="16">Norwegian</text>
+ </g>
+ <g id="switch4773">
+ <text transform="matrix(1 0 0 1 255.1465 699.333)" fill="#00809E" font-family="'ArialMT'" font-size="16">Sea</text>
+ </g>
+ <g id="g4784">
+ <g id="switch4786">
+
+ <text transform="matrix(0.9755 0.2202 -0.2202 0.9755 585.7715 551.0059)" fill="#00809E" font-family="'ArialMT'" font-size="8.0004">c</text>
+ </g>
+ <g id="switch4793">
+
+ <text transform="matrix(0.9755 0.2202 -0.2202 0.9755 582.1328 550.1836)" fill="#00809E" font-family="'ArialMT'" font-size="8.0004">e</text>
+ </g>
+ <g id="switch4800">
+
+ <text transform="matrix(0.9755 0.2202 -0.2202 0.9755 578.085 549.2695)" fill="#00809E" font-family="'ArialMT'" font-size="8.0004">P</text>
+ </g>
+ </g>
+ <g id="g4807">
+ <g id="switch4809">
+
+ <text transform="matrix(0.9755 0.2202 -0.2202 0.9755 600.998 554.4434)" fill="#00809E" font-family="'ArialMT'" font-size="8.0004">a</text>
+ </g>
+ <g id="switch4816">
+
+ <text transform="matrix(0.9755 0.2202 -0.2202 0.9755 597.9941 553.7617)" fill="#00809E" font-family="'ArialMT'" font-size="8.0004">r</text>
+ </g>
+ <g id="switch4823">
+
+ <text transform="matrix(0.9755 0.2202 -0.2202 0.9755 593.7529 552.8066)" fill="#00809E" font-family="'ArialMT'" font-size="8.0004">o</text>
+ </g>
+ <g id="switch4830">
+
+ <text transform="matrix(0.9755 0.2202 -0.2202 0.9755 589.1572 551.7695)" fill="#00809E" font-family="'ArialMT'" font-size="8.0004">h</text>
+ </g>
+ </g>
+ <g id="g4837">
+ <g id="switch4839">
+
+ <text transform="matrix(0.9465 0.3228 -0.3229 0.9464 644.6572 509.1611)" fill="#00809E" font-family="'ArialMT'" font-size="7.9997">&apos;</text>
+ </g>
+ <g id="switch4846">
+
+ <text transform="matrix(0.9465 0.3228 -0.3229 0.9464 640.3652 507.6963)" fill="#00809E" font-family="'ArialMT'" font-size="7.9997">b</text>
+ </g>
+ <g id="switch4853">
+
+ <text transform="matrix(0.9465 0.3228 -0.3229 0.9464 634.7949 505.7979)" fill="#00809E" font-family="'ArialMT'" font-size="7.9997">O</text>
+ </g>
+ </g>
+ <g id="g4860">
+ <g id="switch4862">
+
+ <text transform="matrix(0.6679 -0.7443 0.7443 0.6679 714.3555 439.416)" fill="#00809E" font-family="'ArialMT'" font-size="8.0003">&apos;</text>
+ </g>
+ <g id="switch4869">
+
+ <text transform="matrix(0.6679 -0.7443 0.7443 0.6679 711.3262 442.792)" fill="#00809E" font-family="'ArialMT'" font-size="8.0003">b</text>
+ </g>
+ <g id="switch4876">
+
+ <text transform="matrix(0.6679 -0.7443 0.7443 0.6679 707.3965 447.1709)" fill="#00809E" font-family="'ArialMT'" font-size="8.0003">O</text>
+ </g>
+ </g>
+ <g id="g4883">
+ <g id="switch4885">
+ <text transform="matrix(0.88 0.475 -0.475 0.88 729.9453 519.6914)" fill="#00809E" font-family="'ArialMT'" font-size="8.0001">h</text>
+ </g>
+ <g id="switch4892">
+ <text transform="matrix(0.88 0.475 -0.475 0.88 727.3564 518.293)" fill="#00809E" font-family="'ArialMT'" font-size="8.0001">s</text>
+ </g>
+ <g id="switch4899">
+ <text transform="matrix(0.88 0.475 -0.475 0.88 723.9531 516.4551)" fill="#00809E" font-family="'ArialMT'" font-size="8.0001">y</text>
+ </g>
+ <g id="switch4906">
+ <text transform="matrix(0.88 0.475 -0.475 0.88 721.1611 514.9512)" fill="#00809E" font-family="'ArialMT'" font-size="8.0001">t</text>
+ </g>
+ <g id="switch4913">
+ <text transform="matrix(0.88 0.475 -0.475 0.88 718.1973 513.3496)" fill="#00809E" font-family="'ArialMT'" font-size="8.0001">r</text>
+ </g>
+ <g id="switch4920">
+ <text transform="matrix(0.88 0.475 -0.475 0.88 716.1807 512.2617)" fill="#00809E" font-family="'ArialMT'" font-size="8.0001">I</text>
+ </g>
+ </g>
+ <g id="g4927">
+ <g id="switch4929">
+
+ <text transform="matrix(0.3318 -0.9434 0.9433 0.3318 687.5664 671.1895)" fill="#00809E" font-family="'ArialMT'" font-size="7.9996">m</text>
+ </g>
+ <g id="switch4936">
+
+ <text transform="matrix(0.3318 -0.9434 0.9433 0.3318 686.2949 674.8037)" fill="#00809E" font-family="'ArialMT'" font-size="7.9996">a</text>
+ </g>
+ <g id="switch4943">
+
+ <text transform="matrix(0.3318 -0.9434 0.9433 0.3318 684.3594 680.3076)" fill="#00809E" font-family="'ArialMT'" font-size="7.9996">K</text>
+ </g>
+ </g>
+ <g id="switch4950">
+
+ <text transform="matrix(0.3318 -0.9434 0.9433 0.3318 689.8984 664.5547)" fill="#00809E" font-family="'ArialMT'" font-size="7.9996">a</text>
+ </g>
+ <g id="g4957">
+ <g id="switch4959">
+ <text transform="matrix(0.941 0.3384 -0.3384 0.941 666.584 823.6309)" fill="#00809E" font-family="'ArialMT'" font-size="8">n</text>
+ </g>
+ <g id="switch4966">
+ <text transform="matrix(0.941 0.3384 -0.3384 0.941 662.4922 822.1611)" fill="#00809E" font-family="'ArialMT'" font-size="8">o</text>
+ </g>
+ <g id="switch4973">
+ <text transform="matrix(0.941 0.3384 -0.3384 0.941 656.8555 820.1328)" fill="#00809E" font-family="'ArialMT'" font-size="8">D</text>
+ </g>
+ </g>
+ <g id="g4980">
+ <g id="switch4982">
+
+ <text transform="matrix(0.9966 -0.0822 0.0822 0.9966 627.5332 882.2285)" fill="#00809E" font-family="'ArialMT'" font-size="9.9998">r</text>
+ </g>
+ <g id="switch4989">
+
+ <text transform="matrix(0.9966 -0.0822 0.0822 0.9966 623.8164 882.5352)" fill="#00809E" font-family="'ArialMT'" font-size="9.9998">e</text>
+ </g>
+ <g id="switch4996">
+
+ <text transform="matrix(0.9966 -0.0822 0.0822 0.9966 619.2227 882.9141)" fill="#00809E" font-family="'ArialMT'" font-size="9.9998">p</text>
+ </g>
+ <g id="switch5003">
+
+ <text transform="matrix(0.9966 -0.0822 0.0822 0.9966 615.6143 883.2129)" fill="#00809E" font-family="'ArialMT'" font-size="9.9998">e</text>
+ </g>
+ <g id="switch5010">
+
+ <text transform="matrix(0.9966 -0.0822 0.0822 0.9966 613.3633 883.3984)" fill="#00809E" font-family="'ArialMT'" font-size="9.9998">i</text>
+ </g>
+ <g id="switch5017">
+
+ <text transform="matrix(0.9966 -0.0822 0.0822 0.9966 608.7188 883.7813)" fill="#00809E" font-family="'ArialMT'" font-size="9.9998">n</text>
+ </g>
+ <g id="switch5024">
+
+ <text transform="matrix(0.9966 -0.0822 0.0822 0.9966 602.7578 884.2715)" fill="#00809E" font-family="'ArialMT'" font-size="9.9998">D</text>
+ </g>
+ </g>
+ <g id="switch5031">
+ <text transform="matrix(1 0 0 1 427.3184 216.6299)" fill="#00809E" font-family="'ArialMT'" font-size="14">Sea</text>
+ </g>
+ <g id="g5042">
+ <g id="switch5044">
+ <text transform="matrix(0.9963 0.086 -0.086 0.9963 674.4355 -122.833)" fill="#00809E" font-family="'ArialMT'" font-size="10">r</text>
+ </g>
+ <g id="switch5051">
+
+ <text transform="matrix(0.9963 0.086 -0.086 0.9963 669.6602 -123.2432)" fill="#00809E" font-family="'ArialMT'" font-size="10">u</text>
+ </g>
+ <g id="switch5058">
+
+ <text transform="matrix(0.9963 0.086 -0.086 0.9963 662.6953 -123.8467)" fill="#00809E" font-family="'ArialMT'" font-size="10">m</text>
+ </g>
+ <g id="switch5065">
+
+ <text transform="matrix(0.9963 0.086 -0.086 0.9963 656.7246 -124.3604)" fill="#00809E" font-family="'ArialMT'" font-size="10">A</text>
+ </g>
+ </g>
+ <g id="switch5072">
+ <text transform="matrix(1 0 0 1 -65.7373 -64.7451)" fill="#00809E" font-family="'ArialMT'" font-size="10">Alaska</text>
+ </g>
+ <g id="switch5089">
+ <text transform="matrix(1 0 0 1 -64.7295 -76.6943)" fill="#00809E" font-family="'ArialMT'" font-size="10">Gulf of</text>
+ </g>
+ <g id="g5104">
+ <g id="switch5106">
+
+ <text transform="matrix(0.8162 0.5777 -0.5777 0.8162 -217.9443 93.0098)" fill="#00809E" font-family="'ArialMT'" font-size="7.9997">e</text>
+ </g>
+ <g id="switch5113">
+
+ <text transform="matrix(0.8162 0.5777 -0.5777 0.8162 -220.8579 90.9458)" fill="#00809E" font-family="'ArialMT'" font-size="7.9997">c</text>
+ </g>
+ <g id="switch5120">
+
+ <text transform="matrix(0.8162 0.5777 -0.5777 0.8162 -223.9858 88.7324)" fill="#00809E" font-family="'ArialMT'" font-size="7.9997">a</text>
+ </g>
+ <g id="switch5127">
+
+ <text transform="matrix(0.8162 0.5777 -0.5777 0.8162 -226.9902 86.6074)" fill="#00809E" font-family="'ArialMT'" font-size="7.9997">e</text>
+ </g>
+ <g id="switch5134">
+
+ <text transform="matrix(0.8162 0.5777 -0.5777 0.8162 -230.3755 84.2095)" fill="#00809E" font-family="'ArialMT'" font-size="7.9997">P</text>
+ </g>
+ </g>
+ <g id="switch5141">
+
+ <text transform="matrix(-0.0814 0.9967 -0.9967 -0.0814 -206.854 113.3809)" fill="#00809E" font-family="'ArialMT'" font-size="8.0001">e</text>
+ </g>
+ <g id="switch5148">
+
+ <text transform="matrix(-0.1705 0.9854 -0.9854 -0.1705 -208.0322 117.3286)" fill="#00809E" font-family="'ArialMT'" font-size="10.0004">r</text>
+ </g>
+ <g id="switch5155">
+
+ <text transform="matrix(-0.1064 0.9943 -0.9943 -0.1064 -206.1367 109.0635)" fill="#00809E" font-family="'ArialMT'" font-size="7.9998">v</text>
+ </g>
+ <g id="switch5162">
+
+ <text transform="matrix(0.2946 0.9556 -0.9556 0.2946 -207.8071 101.1899)" fill="#00809E" font-family="'ArialMT'" font-size="7.9998">R</text>
+ </g>
+ <g id="switch5169">
+
+ <text transform="matrix(0.2351 0.972 -0.972 0.2351 -206.2842 107.3921)" fill="#00809E" font-family="'ArialMT'" font-size="10.0003">i</text>
+ </g>
+ <g id="g5176">
+ <g id="switch5178">
+
+ <text transform="matrix(0.2886 -0.9574 0.9574 0.2886 583.0615 692.8672)" fill="#00809E" font-family="'ArialMT'" font-size="7.9996">h</text>
+ </g>
+ <g id="switch5185">
+
+ <text transform="matrix(0.2886 -0.9574 0.9574 0.2886 581.793 697.0811)" fill="#00809E" font-family="'ArialMT'" font-size="7.9996">k</text>
+ </g>
+ <g id="switch5192">
+
+ <text transform="matrix(0.2886 -0.9574 0.9574 0.2886 580.4395 701.5654)" fill="#00809E" font-family="'ArialMT'" font-size="7.9996">u</text>
+ </g>
+ <g id="switch5199">
+
+ <text transform="matrix(0.2886 -0.9574 0.9574 0.2886 579.3828 705.0771)" fill="#00809E" font-family="'ArialMT'" font-size="7.9996">S</text>
+ </g>
+ </g>
+ <g id="g5206">
+ <g id="switch5208">
+
+ <text transform="matrix(0.2886 -0.9574 0.9574 0.2886 587.0449 679.6582)" fill="#00809E" font-family="'ArialMT'" font-size="7.9996">a</text>
+ </g>
+ <g id="switch5215">
+
+ <text transform="matrix(0.2886 -0.9574 0.9574 0.2886 585.6826 684.1777)" fill="#00809E" font-family="'ArialMT'" font-size="7.9996">n</text>
+ </g>
+ <g id="switch5222">
+
+ <text transform="matrix(0.2886 -0.9574 0.9574 0.2886 584.4209 688.3613)" fill="#00809E" font-family="'ArialMT'" font-size="7.9996">o</text>
+ </g>
+ </g>
+ <g id="switch5229">
+ <text transform="matrix(1 0.007 -0.007 1 563.6162 667.5039)" fill="#00809E" font-family="'ArialMT'" font-size="10.0002">Dvina</text>
+ </g>
+ <g id="g5242">
+ <g id="switch5244">
+
+ <text transform="matrix(0.6958 -0.7182 0.7182 0.6958 605.5098 618.8584)" fill="#00809E" font-family="'ArialMT'" font-size="7.9998">g</text>
+ </g>
+ <g id="switch5251">
+
+ <text transform="matrix(0.6958 -0.7182 0.7182 0.6958 602.8926 621.5615)" fill="#00809E" font-family="'ArialMT'" font-size="7.9998">e</text>
+ </g>
+ <g id="switch5258">
+
+ <text transform="matrix(0.6958 -0.7182 0.7182 0.6958 599.6211 624.9355)" fill="#00809E" font-family="'ArialMT'" font-size="7.9998">h</text>
+ </g>
+ <g id="switch5265">
+
+ <text transform="matrix(0.6958 -0.7182 0.7182 0.6958 597.2168 627.4229)" fill="#00809E" font-family="'ArialMT'" font-size="7.9998">c</text>
+ </g>
+ <g id="switch5272">
+
+ <text transform="matrix(0.6958 -0.7182 0.7182 0.6958 594.4395 630.2871)" fill="#00809E" font-family="'ArialMT'" font-size="7.9998">y</text>
+ </g>
+ <g id="switch5279">
+
+ <text transform="matrix(0.6958 -0.7182 0.7182 0.6958 590.7588 634.085)" fill="#00809E" font-family="'ArialMT'" font-size="7.9998">V</text>
+ </g>
+ </g>
+ <g id="g5286">
+ <g id="switch5288">
+
+ <text transform="matrix(0.6958 -0.7182 0.7182 0.6958 611.3057 612.8779)" fill="#00809E" font-family="'ArialMT'" font-size="7.9998">a</text>
+ </g>
+ <g id="switch5295">
+
+ <text transform="matrix(0.6958 -0.7182 0.7182 0.6958 608.0361 616.2529)" fill="#00809E" font-family="'ArialMT'" font-size="7.9998">d</text>
+ </g>
+ </g>
+ <g id="switch5302">
+
+ <text transform="matrix(0.6277 0.7784 -0.7784 0.6277 524.124 655.7617)" fill="#00809E" font-family="'ArialMT'" font-size="7.9997">S</text>
+ </g>
+ <g id="switch5309">
+
+ <text transform="matrix(0.7784 0.6277 -0.6277 0.7784 527.1201 659.0801)" fill="#00809E" font-family="'ArialMT'" font-size="7.9997">e</text>
+ </g>
+ <g id="switch5316">
+
+ <text transform="matrix(0.8336 0.5524 -0.5524 0.8336 530.2168 662.1611)" fill="#00809E" font-family="'ArialMT'" font-size="8.0001">v</text>
+ </g>
+ <g id="switch5323">
+
+ <text transform="matrix(0.9314 0.3639 -0.3639 0.9314 534.0879 665.377)" fill="#00809E" font-family="'ArialMT'" font-size="7.9997">e</text>
+ </g>
+ <g id="switch5330">
+
+ <text transform="matrix(0.9827 0.1853 -0.1853 0.9827 538.1953 667.4131)" fill="#00809E" font-family="'ArialMT'" font-size="10.0002">r</text>
+ </g>
+ <g id="switch5337">
+ <text transform="matrix(1 0 0 1 542.3145 668.7783)" fill="#00809E" font-family="'ArialMT'" font-size="10">n</text>
+ </g>
+ <g id="switch5344">
+
+ <text transform="matrix(0.9941 -0.1082 0.1082 0.9941 547.9609 668.7578)" fill="#00809E" font-family="'ArialMT'" font-size="7.9998">a</text>
+ </g>
+ <g id="switch5351">
+
+ <text transform="matrix(0.9936 -0.1132 0.1132 0.9936 551.5674 668.6631)" fill="#00809E" font-family="'ArialMT'" font-size="10.0003">y</text>
+ </g>
+ <g id="switch5358">
+ <text transform="matrix(0.9904 -0.1382 0.1382 0.9904 555.7842 668.3174)" fill="#00809E" font-family="'ArialMT'" font-size="8">a</text>
+ </g>
+
+ <path id="path5365" fill="none" stroke="#000000" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M756.502-118.457l-1.008-0.432l-1.445-1.152l-0.715-1.439l-1.152-0.145l-1.441,0.433l-1.441,0.72l-1.586-1.296l-1.438-0.29
+ l-1.439-0.286l-1.586-1.008l-1.15-1.44l-0.723-1.439l-1.438,0.144l-1.439-0.576l-1.586-0.288l-1.439-1.296h-1.441l-0.145-0.144
+ l-1.439-1.008l-0.719-0.145l-1.441-1.008v-0.288l-1.008-1.296l0.43-1.008l-0.715-1.44h0.143l1.441-0.72l1.439-0.288l1.438-0.432
+ l0.723-1.44l0.289-1.584l0.143-0.288l0.145-1.439l1.584-0.288l1.439-0.433l1.584-0.146l1.441,0.578l1.439,1.006h1.441l1.439-1.15
+ l1.297-1.584l1.439,0.288l1.008-0.288l1.584-1.008l1.152-1.152l1.438-0.863l1.008,0.144l1.01-0.288l1.443-0.432 M756.502,889.685
+ l-0.293,0.289l-1.293,1.295l-0.719,1.441l-0.863,0.865l-1.443,0.863h-0.143l-1.438,1.152l-1.443,1.297l-1.584,0.287l-1.439,0.146
+ l-1.439,1.006l-1.584,0.576l-1.445,1.152l-1.438,0.143l-1.584,0.434l-1.441,0.287l-1.008,1.439l-1.439,0.867l-1.441,0.574
+ l-1.439,0.865l-0.867,1.439l0.434,1.441l0.143,0.432l0.145,0.434l0.145,0.289 M504.357,935.188l0.145-1.008l0.432-0.432
+ l0.289-1.441l0.434-1.438l0.287-0.867l0.576-1.584l0.145-0.434l0.715-1.439l0.723-1.441v-0.143l0.145-0.145l0.287-0.432
+ l0.145-0.432l0.432-1.441l1.438-1.441l1.299-1.438l0.285-1.008l-0.139-1.008l-0.436-0.723l-1.439-1.008l-1.008-0.574l1.438-1.439
+ v-0.432l-1.438-0.145l-1.439-0.867h-0.145l-1.439-1.295l-1.01-0.719h-0.143l-1.439-0.865l-1.008-1.584l-1.443-1.439l-0.143-0.145
+ M554.324,935.188l1.441-0.717l0.576-0.291l0.432-0.576l1.438-0.576h0.146l0.865-1.293l0.572-0.576v-0.145l0.869-0.432l0.432-0.576
+ l1.439-0.432l1.152-0.721h0.145l0.141,0.145h0.291l1.439,0.432h0.145l1.439-0.141l1.441,0.717l1.439-0.289l1.584-1.008l1.441,1.295
+ l0.432,0.143l0.145-1.439l1.439-0.719l1.584-0.434l0.576,0.434l1.008,0.719l1.443,0.289l1.146-1.441l1.584,0.865l1.445,1.15
+ l0.287,1.441l0.289,1.443v0.287l0.434,1.15h1.439l1.152,0.434l1.439,0.721l1.295-1.443l0.865,1.443l0.143,0.141"/>
+
+ <path id="path5367" fill="none" stroke="#000000" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-181.082-34.072l0.575,1.584l0.145,1.438l0.144,1.584l0.29,1.442l0.862,1.438l0.432,1.586l0.29,1.15l0.719,0.578l1.439,0.864
+ l1.44,0.432l1.441,1.006l1.438,0.866l0.72,1.439l0.72,1.296l1.584,1.297l1.584-0.288l1.44-1.296l1.584,0.142l1.584-0.718h1.584
+ l1.584-0.576l1.44-1.152l1.439-0.288l1.44-0.434l1.439-0.576l1.584-0.718l1.44-1.152l0.288,0.433l1.584,0.43l1.584,0.29
+ l1.439-0.145l0.864,1.438l1.584-0.142l1.44-0.435l0.575,1.442l1.44,0.43l1.44,0.434l1.439,0.145l1.584,0.144l1.44,0.433
+ l1.439,0.288l1.584,0.43l1.44,0.434l1.439,0.145l1.44,0.144l1.584,0.721l1.44,0.289l1.439,0.143l1.44,0.146l0.575,1.008
+ l1.584,0.142l1.584-0.142h0.288l1.584,0.29l1.729,0.142l1.584-0.576l1.584-0.43l1.584,0.142l1.439,0.576l1.44,0.722l1.584-0.434
+ l1.44,0.434l1.584-1.01l1.584,0.146l1.439,0.43l0.576,1.584l1.584,0.578l0.145-0.145l1.439,0.145l1.584-0.288l1.584-1.154
+ l0.432-1.438l0.433-1.442l1.008-1.438l0.72-1.584l-1.439-1.152l0.72-1.439l-1.152-1.44l-1.008-1.584l-0.144-1.44l1.439-1.439
+ l0.145-1.442l0.576-1.584l0.432-1.438v-1.584l1.44,0.575l3.168,2.017h3.312l1.296,0.142h3.601l1.728,0.146h1.584l1.584,0.43
+ l1.44,0.72l1.584-0.573l1.296-0.288l1.728,0.288l0.72,1.584l1.009,2.016l1.439-0.866l1.584-1.438l1.008-1.442l0.288-1.584
+ l0.288-1.438l1.44-0.288l1.728-0.435l0.576-1.584l1.44-0.718l1.584-0.578l1.439,0.435l1.296,1.584l1.44,1.728l2.592,3.168
+ l1.44,1.728l1.296,1.584l1.296,1.729l1.296,1.584l1.44,1.729l1.296,1.584l0.432,0.573l2.592,3.168l1.296,1.73l1.296,1.584
+ l1.44,1.584l1.296,1.728l1.296,1.584l1.44,1.729l1.296,1.584l1.296,1.726l1.44,1.584l1.296,1.73l1.296,1.584l1.439,1.726
+ l1.296,1.584l1.297,1.73l1.439,1.584l1.296,1.726l1.296,1.73l1.44,1.584l1.296,1.726l1.296,1.584l0.288,0.288l1.44,1.874
+ l1.296,1.582l1.439,1.73l1.296,1.584l1.296,1.728l1.44,1.584l1.296,1.728l1.296,1.584l1.44,1.729l1.296,1.727l1.439,1.584
+ l1.297,1.729l1.296,1.584l1.439,1.726l1.296,1.73l1.296,1.584l1.44,1.726l1.296,1.584l1.44,1.73l1.296,1.584l0.575,0.718
+ l1.44,1.872l1.44,1.584l1.296,1.73l1.296,1.726l1.439,1.584l0.864,1.154l1.44,1.872l1.439,1.584l1.296,1.726l1.296,1.584l1.44,1.73
+ l1.296,1.726l1.44,1.584l1.296,1.73l1.439,1.726l1.296,1.584l1.152,1.442 M679.318,910.421l0.287,1.439l0.143,1.443l0.289,1.584
+ l0.291,0.287 M756.502-147.833v1.15 M756.502-94.266l-1.586,0.434l-0.291,0.721l1.012,1.438l0.865,1.01"/>
+
+ <path id="path5369" fill="none" stroke="#000000" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M484.918,872.261l1.008,1.441l1.15,1.439l0.289,0.289l0.721,1.152l0.719,0.865l0.289,0.291l0.432,0.43l1.584,1.297l1.297,1.438
+ l1.439,1.441v0.576l1.008,1.008l0.287,0.865v0.143l0.434,0.576l0.141,0.145l0.723,1.584l0.145,0.432l-0.291,1.441l-1.439,1.439
+ l-1.439,1.441l-0.721,1.439v0.436l-0.146,0.289v0.43l-0.43,1.584l-0.145,1.297l0.574,0.576l1.445-0.291h1.582l1.441,0.291
+ l0.719,0.287h0.143v0.145l0.291,0.287l0.432,1.297l0.285,1.439l0.438,1.584l-0.291,0.289l0.43,1.441l1.012,1.439l0.432,0.143
+ M395.781,902.933v0.576l0.145,0.432l0.863,1.01l0.289,1.439l0.289,0.432l0.721,1.441l0.863,1.443v0.141l0.291,0.576l0.576,1.008
+ h0.141v0.145l0.576,0.863v0.145l-0.287,1.584l0.141,0.291v1.008l-0.287,0.863l-1.008,1.152v1.439l0.145,0.145h-0.145v0.287
+ l1.008,0.576l1.297,0.576l1.439,0.865l0.432,0.289l1.584,0.432l0.145,0.289l0.141,0.143l0.291,1.008l-0.291,1.01v1.439l0.434,0.434
+ v0.143l1.441,0.576l0.287,0.143v1.441l1.152,1.008l-0.143,1.295l-0.143,0.291l0.143,0.141l0.143,0.145v0.432l-0.719,1.443
+ l1.008,1.439l0.289,0.287 M741.236-2.824l0.865,1.296l-0.145,1.438l0.721,1.442v1.584l-0.863,1.439l1.008,1.44l-0.291,1.44v1.438
+ l0.719,1.584l0.146,1.442l1.146,1.438l0.146,0.722l1.584,1.15l1.152,1.442l1.439,1.008l0.865,1.439l1.008,1.438l0.434,1.584
+ l1.295,1.441l1.295,0.721l0.861,1.584l1.443,1.296l0.434,0.144 M756.502-46.024l-0.721,1.439l-0.865,1.44v1.584l-0.574,1.439
+ l-0.863,1.584l-1.588,0.576l0.436,1.584l-1.586-0.432v1.584l-1.441,1.439l-1.008,1.438l-0.141,0.435l-0.578,1.438l-0.719,1.441
+ l-0.289,1.438l-1.441,0.866l-1.584,0.142l0.145,1.442l0.432,1.584l-1.439-0.432l-0.865,1.438l-0.719,1.584l-0.432,1.442v1.438
+ l-1.297,1.442l-0.289,1.439l-0.432,1.44l0.289,0.864"/>
+
+ <path id="path5371" fill="none" stroke="#000000" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M351.715,899.046l-0.285-0.146l-1.008-0.574l-1.441,0.432l-1.582-0.143l-1.586,0.574l-0.289-0.141l-0.432,0.287l-0.432,0.291
+ l-1.297-0.576l-1.439-0.146l-1.584-0.143h-0.576l-1.008,0.432l-0.721-0.141h-0.287l-1.584-1.154l-1.152-1.15 M475.701,869.093
+ l0.576-1.008l1.438,0.145l1.443,0.287l1.152,0.291l0.719-0.145l1.584,0.576l1.441,1.008l0.143,0.289l0.145,0.143l0.576,1.584
+ M475.701,869.093l-1.584,0.865l-1.439,0.719l-1.439,0.721l-1.297,0.574l-1.439,0.576l-0.145,0.145l-1.439,0.574l-1.439,0.576
+ l-0.578,0.143l-0.287,0.293l-1.584,0.574l-0.863,0.289h-0.145l-0.145,0.146l-1.439,0.287l-1.439,0.432l-1.443,0.432l-0.863,0.289
+ l-0.287,0.146l-0.576,0.141h-0.432l-1.586,0.434l-1.295,0.291l-0.576,0.143l-1.439,0.287l-0.865,0.291h-0.289l-1.152,0.287h-0.289
+ l-0.143,0.145h-0.432l-1.443,0.287h-0.432l-0.141-0.141 M484.918,872.261h1.439l1.438-1.15l1.445-0.721l1.008-0.289l0.287-0.143
+ l1.152-0.719l0.576,0.432l1.439-0.576l0.865-1.441l0.143-0.143l1.441-0.719l0.576-1.441l-0.719-1.439l1.439-0.721h0.432
+ l1.006-1.439v-0.576l1.012-1.008l0.289-0.145l1.297-0.863l1.582,1.439l1.441-1.008l-0.434-1.438l-1.582-0.436h-1.443l0.291-1.439
+ l-0.434-1.441l0.578-1.295l-0.145-0.289l-0.865-1.439l-0.576-0.721v-2.016l1.008-1.439l1.441-1.297v-1.871l0.863-1.439l1.443-0.576
+ l0.717-0.291v-0.285l-0.141-1.441l0.141-1.441l-1.584,0.576l-1.439,0.143v-1.436l-0.434-1.441l0.289-0.717l-0.576-1.299
+ l-0.141-0.143 M475.701,869.093l-0.287-0.287l-1.008-0.576l-0.576-1.441l-0.432-1.441l-0.145-1.008l0.432-1.584l-0.432-1.152
+ l-1.439-0.717l-1.443-0.432l-0.717-0.867l-0.578,0.291l-1.582,0.717l-1.441,0.576l-1.441,1.008l-1.439-0.141h-0.145l-1.439-0.146
+ l-1.441-0.43l-1.441,0.287l-1.439-0.863l-0.576,0.717l-0.287,0.289l-1.152,0.289l-1.584,0.291h-0.721"/>
+
+ <path id="path5373" fill="none" stroke="#000000" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M756.502,791.765l-0.434,0.432l-1.152,1.443l-1.438,1.295l-1.588,0.719l-0.287,0.143l-0.287,0.434l0.287,0.287h0.143l0.578,1.586
+ l-0.869,0.143l-0.43,0.145l-0.576,0.143l-1.439-0.432l-0.145-0.289l-0.576-0.145l-1.439-0.432l-1.008-1.441l-1.439-1.441
+ l-1.154,0.291l-1.582,0.863l-1.586,1.008l-1.295,0.721l-1.584,0.143l-0.717-1.584l-0.721-1.582l-0.432-1.01l-0.576-1.15
+ l-0.289-0.721l-0.578-1.439l0.145-0.576l0.291-1.439l-0.145-1.441l-1.152-1.441h-1.439l-1.584,0.432l-1.152-0.574l-0.291-0.434
+ l-1.148-1.584l-0.291-0.434l-1.152-1.438l-1.148-1.584l0.139-1.584l0.578-1.443l0.145-1.439l-0.145-0.434l-0.578-1.438
+ l-1.438-0.723l-0.719-1.438v-1.441l-0.143-1.441l1.439-1.008h1.584l1.439-0.143h3.027l1.439,0.289l0.721,0.43l1.438,0.146
+ l1.586-0.432l1.439-1.299l0.432-1.438l0.576-1.441l0.145-1.586l-0.145-0.141l-0.143-0.723l-0.434-0.143l-1.584,0.291l-1.439-0.867
+ l-1.441-0.717l-1.441-0.867l-1.586-1.293l-1.438-0.291l1.584-0.576l0.721-1.439l0.287-1.439l-0.145-1.584l0.291-1.439l0.576-1.441
+ l-0.721-1.443l-1.584-1.291l0.145-1.441l1.293-1.443l0.576-1.438l-0.143-1.443l0.143-0.865l0.721-1.438l0.719-1.441l-0.719-1.582
+ l0.291-1.443l-0.436-1.439l-1.008-1.441l1.443-0.574l-0.146-1.441l-1.441-0.432l-0.432-0.436l1.441-0.717l1.148-0.576l1.445-1.584
+ l1.439-1.01l0.576,1.584h1.584l0.863-1.439l-0.141-0.287l1.582-0.576l0.289-1.441l-1.441-1.15l-0.143-1.443l1.439-1.441
+ l-0.143-1.438l0.434-1.439l1.439,0.141l1.439,0.143l1.584,0.434h0.145l0.863-0.287l0.867-1.439l1.439-1.445l0.432-1.438
+ l1.152-1.439l0.719-1.152v-0.146l1.586-0.574l1.439-0.719l1.439,1.01l1.297-0.291 M326.518,935.188v-0.141l-0.145-0.291
+ l0.145-1.441v-0.143l0.432-0.865l0.43-1.438l-0.141-1.443l-0.143-1.441v-0.143l-0.145-1.008"/>
+
+ <polyline id="polyline5375" fill="none" stroke="#000000" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 678.74,878.597 678.021,878.165 677.59,877.444 677.877,876.005 676.438,876.005 676.15,874.421 675.143,872.981 675.143,871.54
+ 676.725,870.101 677.301,868.661 677.301,868.372 678.021,867.796 677.445,866.356 677.301,864.917 677.445,864.772
+ 678.883,863.622 679.893,863.333 680.182,863.188 681.479,861.749 682.916,860.886 684.357,859.589 685.941,858.149
+ 685.795,857.716 684.502,856.278 684.646,855.269 684.357,855.124 683.781,853.685 683.926,852.101 683.926,851.956
+ 683.494,851.235 682.916,851.813 682.627,852.101 681.766,852.101 682.051,851.093 680.613,850.372 679.029,849.364
+ 677.59,850.372 677.156,849.796 677.014,849.077 676.582,847.638 677.014,846.194 678.453,845.478 678.453,844.038
+ 678.021,843.894 677.732,844.47 676.869,845.046 675.285,845.909 674.133,845.622 674.277,844.181 675.43,842.741 674.998,841.302
+ 674.998,841.157 675.285,839.716 674.998,838.278 673.846,837.558 673.414,837.413 671.973,836.403 671.686,834.964
+ 670.389,835.829 670.389,836.403 669.379,837.845 667.941,838.132 666.502,837.989 665.061,837.845 663.621,838.997
+ 662.037,839.142 660.598,838.421 660.311,840.005 659.303,841.013 657.861,840.87 656.277,841.302 654.838,841.444
+ 653.398,842.454 652.246,842.886 650.807,842.741 650.662,843.894 650.807,844.038 650.518,845.478 650.23,846.341
+ 648.789,845.765 648.646,845.765 648.211,845.622 646.773,845.909 645.332,845.765 644.037,845.478 642.598,844.181
+ 641.156,844.47 639.715,844.181 638.854,845.622 637.99,847.062 636.547,848.214 636.547,848.356 635.83,849.222 635.541,849.653
+ 634.963,851.093 633.525,851.813 632.084,852.245 631.223,853.397 629.926,853.11 628.486,852.677 627.043,853.54 625.893,854.548
+ 625.318,855.989 625.174,856.565 623.732,856.708 623.445,856.278 621.861,856.278 620.422,855.269 620.422,853.685
+ 619.557,853.11 618.117,852.245 616.678,851.38 616.246,851.38 616.102,849.94 614.662,850.806 613.076,850.229 612.789,849.94
+ 611.205,849.94 610.627,850.661 609.332,852.101 607.748,851.956 606.311,852.821 605.445,853.11 604.006,854.261 603.715,854.403
+ 603.861,854.118 604.006,853.829 603.572,852.388 603.285,852.532 602.131,851.669 600.693,850.372 599.252,849.94
+ 599.541,849.077 601.414,847.204 600.117,845.765 598.102,845.765 596.662,845.622 595.223,844.325 593.781,843.173
+ 592.342,842.886 590.758,842.454 589.318,843.462 588.74,845.046 588.164,844.612 587.732,844.47 587.156,844.899 587.014,844.899
+ 585.572,845.765 584.998,846.341 584.131,847.78 583.414,849.364 581.973,850.085 581.109,850.229 579.67,850.517 578.084,851.235
+ 578.807,852.532 579.094,853.829 578.949,855.269 577.51,856.708 576.068,857.429 574.627,857.571 "/>
+
+ <path id="path5377" fill="none" stroke="#000000" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M574.627,857.571l-0.572-0.863l-1.441-0.865l-1.439-0.432l-1.01-1.439l-0.143-0.291l-0.865-1.439l-1.443-1.295l-0.715-1.441
+ l-1.443-0.287l-1.439-0.576l-1.439-0.865v-1.441l-0.145-1.584l1.439-1.008l1.443-0.432l1.439,0.432l1.439-0.576l1.441-0.717
+ l1.008-1.443v-0.863l0.578-1.441l0.43-1.439l1.01-1.15l-0.721-1.443h-1.008l-1.439-0.143l-0.576,0.143l-1.441-0.719l-0.289-1.441
+ l-1.439,0.145l-0.576,0.289h-0.576l-1.439,0.287l-1.297,1.441l-1.439,0.576l-0.145-1.439l-0.578-1.584v-0.291l-0.717-0.574h-1.439
+ l-1.441,0.432l-1.439-0.145h-1.439l-1.297-1.438l-1.439-0.867h-0.291l-1.439-0.143v-1.441l-0.432-0.717l-1.441,0.576l-0.143-0.291
+ l-0.145-0.145l-1.441-0.289l-1.439-0.287l-0.289-1.441l0.432-1.439l-0.143-0.145v-0.143l0.289-0.719l-1.295-1.439l-1.441-0.721
+ l-1.295-1.441l-0.289-1.439l-0.287-0.434l0.287-0.289l-1.154-1.441l-1.006,0.719h-0.576l-1.439-0.287l-1.439-0.576h-0.291
+ l-1.439-0.145h-0.291l-0.863,0.145h-0.145l-1.439,1.01l-0.721,0.143l-0.287,0.143v0.143h-0.146l-0.43,1.441l-1.439,1.441
+ l-0.432,1.441l-1.441-0.145l-0.289-0.143l-0.576-1.01l0.143-1.441l-1.582-0.285l-1.443,0.285l-1.439,0.291l-1.008,1.439
+ l-1.154,1.01l-0.285-0.289l-0.566-0.564l-1.441-0.434l-1.443,1.01l-0.141,0.574l-0.434,0.436l-0.432-0.293l-1.439-0.43
+ M574.627,857.571h-0.139l-1.586,1.01l-1.443,0.721l-0.717,0.434l-0.432,1.438l-1.441,0.291l-1.439,0.863l-0.291,0.289l0.291,0.719
+ l0.143,0.291l-0.143,0.141l-0.432,1.441v0.143h0.141l-0.432,1.441l0.145,1.584v1.441l0.145,1.439l1.439,1.008l1.295,1.295
+ l0.576,0.721l-0.289,1.15v0.436h-0.432l-1.443,0.141l-0.863-0.717l-1.584-0.436l-0.145-0.143h-1.01l-1.438,1.008l-0.432,0.578
+ l-1.439,1.293l-1.445-0.143l-1.006,1.441l-0.863,1.584l-0.145,0.143l-1.439-0.574l-1.443-1.297l-0.43-0.287h-1.012l-0.43,0.287
+ v0.145l-0.863,1.439l-0.721,1.439l-0.863,1.441l-1.443-1.15l-1.439,0.863l-1.439,0.145h-1.439l-0.291,1.439l-1.439,0.721h-1.441
+ l0.289,1.439l-1.152,0.145l-1.439-0.291l-1.008,0.145l-0.721,1.008l-1.439-0.289l-1.584-0.719l-1.443,0.289l-1.441,1.008
+ l-1.438,0.143l-1.008,0.145l-0.723,0.143l-1.438,0.865l-1.439-0.143l-1.441,0.719l-1.441-0.289l-1.439,0.719l-1.008,0.289
+ l-1.443,0.865l-1.441,0.719h-0.141l-0.719,0.289l-1.443,0.432l-1.584,0.436l-1.441,1.438l-1.438,0.865l-1.439,0.719l-1.441,0.865
+ l-1.441,0.867l-0.287,1.008l0.143,1.439l-0.576,1.008l-0.719,1.584l-1.441,0.576h-0.719l-1.441,0.432l-0.719,0.721l0.287,0.717
+ l0.145,0.291l-0.145,0.574"/>
+
+ <path id="path5379" fill="none" stroke="#000000" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M494.564,805.302l-0.289-0.291l-0.287-1.439l-0.291-0.287l0.576-1.586v-1.441l0.432-0.432l0.291-1.295l-1.584-1.152l-0.291-0.719
+ l-1.439-0.576l-1.439-1.008l-0.432-1.439l-0.438-1.443l-1.148-1.582l-1.152-1.441l-1.15-1.439l-0.289-1.439l0.432-1.441
+ l0.719-1.441l-0.143-1.439l-0.289-1.441v-0.143l-0.432-1.441l0.576-1.01l1.152-1.439l-0.434-0.574l-1.441-0.434l-0.432-0.145
+ M501.479,834.677l0.43-0.719h0.578l0.287-0.289l0.432-1.584l0.576-1.439l1.441-0.721l1.441-0.719l0.143,0.143h0.719l1.438-0.576
+ l0.146-0.141v-0.436l-0.146-0.432l-0.43-1.008l0.721-1.439l0.145-1.439l0.432-1.441l1.439-1.295l0.145-0.289l-0.289-1.584
+ l-1.441-1.441l-0.145-0.289l-0.141-0.432l-1.152-1.441l-1.441-0.145l-0.143-0.143l-0.721-1.008l-1.439-0.434l-1.297-1.439
+ l-0.717,0.434l-0.721,0.717v-1.584l-0.432-1.438l-0.721-1.443l0.432-0.432l-0.143-1.008l-1.15-1.439l-1.439-0.145l-1.443-0.143
+ l-1.584-1.15l-0.719,0.432l-1.441,0.432l-1.439,0.289l-0.432-0.289l-1.439,1.152l-1.443,1.293l-0.578,0.719l-1.438-0.287
+ l-1.439-0.143l-1.439-0.867l-1.297-0.287h-0.145l-0.287-0.145l-0.291-0.717l-1.439,0.432l-1.439-0.576l-1.584,0.576l-1.443-0.432
+ l-1.439,0.717l-0.717-0.141l-1.443,0.141l-0.287,0.576l-1.441,1.439l-1.441,1.295l-0.863,1.441l-0.289,0.576h-0.143l-0.436,0.145
+ M501.479,834.677l-1.588,0.145l-0.141,0.143h-1.439l-0.721-0.432l-1.441-0.865l-1.441-0.432h-0.432l-1.295-0.145l-1.441-0.432
+ l-1.439-0.721l-1.584,0.434l-1.441,0.576l-0.719,0.143l-1.439,0.432l-1.584-0.863h-0.145l-0.865-1.01l-1.15-0.863l0.145,0.719
+ l-1.443,1.441l-0.287,0.719l-0.867,1.441h-1.439l-0.287,0.289l-1.443,1.008l-1.439-0.145l-1.439,0.289l-1.439,0.434h-0.145
+ l-0.289,0.143l-1.441,0.865l-1.584,0.143l-0.432,0.289l-0.865,1.443l-1.441-1.01l-1.584,1.15l-1.439,0.434l-1.008,0.143
+ l-1.441,0.576l-0.289,0.145l-1.584,0.287l-1.439,1.152l-0.432,0.432l-1.443,1.441l-1.439,1.15l-0.287,0.291v0.141l-1.152,1.152
+ l-0.434,1.586l-1.01,1.439l-0.287,0.143"/>
+
+ <polyline id="polyline5381" fill="none" stroke="#000000" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" points="
+ 348.262,832.661 349.701,831.364 350.277,829.78 350.711,829.638 351.285,829.638 352.582,831.077 353.156,832.661
+ 354.598,831.796 354.738,831.509 354.738,829.493 354.598,828.054 354.738,826.612 354.738,826.038 354.598,825.604
+ 354.453,825.317 354.166,824.597 353.301,823.013 352.869,822.294 352.727,820.708 354.021,819.124 353.73,817.687
+ 353.156,816.532 354.453,815.956 355.895,814.948 356.037,814.948 356.898,813.653 357.334,812.935 357.766,811.493
+ 357.334,809.909 357.047,808.325 357.477,806.741 357.047,805.302 355.895,803.862 354.738,802.421 353.879,800.837
+ 353.156,799.397 353.445,797.813 355.029,797.093 355.316,797.093 356.037,796.948 356.182,794.935 356.613,793.349
+ 355.605,791.046 353.445,789.03 351.141,788.454 349.414,787.302 349.27,784.854 349.129,782.981 349.129,782.261 348.98,780.532
+ 348.838,778.517 348.406,777.653 348.406,777.511 348.262,777.364 346.82,775.349 345.957,773.188 345.525,770.31 344.949,768.87
+ 345.67,767.286 343.941,764.403 343.223,762.245 343.941,759.653 343.223,758.067 344.086,756.485 344.086,755.909
+ 344.809,754.038 345.379,752.597 346.533,750.438 348.117,749.142 350.563,748.565 352.293,748.565 355.029,747.558
+ 355.029,747.124 355.174,746.837 355.461,745.397 354.598,742.806 352.727,741.077 352.293,741.077 350.277,740.214
+ 350.854,738.054 351.285,736.612 351.861,734.886 352.438,732.581 353.014,730.997 352.869,728.694 353.156,726.103
+ 352.727,724.517 352.293,721.78 352.293,719.478 351.715,717.749 350.998,716.165 350.277,714.581 351.43,714.294 353.156,713.571
+ 353.445,713.431 355.895,710.694 355.605,709.687 354.598,707.524 355.461,705.798 355.895,704.214 356.324,702.483
+ 356.613,701.046 357.477,698.597 358.484,697.157 357.906,694.71 355.75,692.403 354.883,690.532 356.473,688.948 356.758,685.927
+ 356.758,684.194 357.621,681.749 358.055,681.03 358.197,680.886 358.773,679.589 358.918,679.589 361.365,679.444
+ 363.238,680.022 363.525,678.294 363.814,676.134 362.662,673.542 362.23,672.679 362.23,672.39 361.795,670.806 363.379,669.653
+ 364.963,670.517 366.693,669.653 369.572,669.798 373.318,670.087 374.182,667.493 372.311,667.206 373.029,664.899
+ 373.029,662.454 372.311,660.726 370.293,659.573 372.453,658.565 373.174,658.278 "/>
+
+ <path id="path5383" fill="none" stroke="#000000" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M475.701,766.565l0.721-2.879l-0.432-1.441l-0.145-1.01l0.145-1.006l0.432-1.441l0.432-1.584l0.287-1.01l0.291-1.439v-0.287
+ l0.432-1.584l0.145-0.291l0.287-0.287h0.434v-1.584l0.432-1.439v-0.145h0.145l0.432-1.295l0.719-1.584l0.289-1.443v-0.287
+ l0.289-1.439v-1.584l0.145-0.289l0.432-0.576l0.145-0.291l0.287-1.439v-1.432l0.289-1.439v-0.867l0.145-1.439v-0.289l0.289-1.441
+ l0.143-1.439l0.289-1.584l0.145-1.441v-0.857l0.432-1.443l0.289-1.582l0.289-1.439l0.145-1.443v-1.439l-0.145-1.439l-0.576-1.584
+ l-0.287-2.879l-1.443-0.865l-1.584-0.578l-1.439-0.861l-1.441-0.576h-1.443l-1.584-0.576h-2.875l-1.586-0.576l-1.438-0.143
+ l-0.721-0.436l-1.439-0.43l-0.145-0.145v-0.143l0.863-1.441l0.145-1.584l0.145-1.439l0.287-1.584l-0.863-1.441l-1.152-1.441
+ l-1.441-0.287l-1.443,0.145l-1.438-0.145l-1.295-1.584l-0.143-0.145l-0.145-0.145l-0.289-0.574l0.434-0.719l-0.576-1.584
+ l-1.439-0.576l-1.158,0.723l-1.439-0.719l-1.584-1.439l-0.291-0.865l0.863-1.441l-0.572-1.439l-1.443,0.432l-0.578-0.291
+ l0.146-1.439l-0.719-1.439l-0.574-1.443l-1.152-1.439l1.293-1.584l0.867-0.434l-1.152-1.438l-0.434-0.576l-1.441-1.295
+ l-0.719-0.719l-1.439-1.441l-1.588-0.867l-1.438-0.861l-1.295-1.441l-1.01-1.008l-1.439-1.008l-0.432-0.436l-1.584-0.861
+ l-1.439-0.865l-0.869-1.443l-0.139-1.15v-4.461l0.139-1.584v-1.441l0.293-1.443l-0.293-1.438l-0.572-1.584l-0.289-0.289
+ l-0.576-0.145l-1.439-0.291l-1.443-0.861l-1.582-1.008l-1.441-1.01l-1.727,0.145l-1.586,0.141l-1.725-0.43l-1.443-1.443
+ l-1.439-1.58l-0.145-0.145l-0.141-0.146l-0.291-1.438v-2.881l-1.008-1.584l-1.439,0.721h-0.289l0.143-0.146l0.145-0.43l0.719-1.439
+ l1.01-1.441 M421.99,621.413l1.439,1.297l0.719,1.584l-1.441,1.293h-1.439l-1.152-0.434l-0.287,0.146l0.432,0.287l0.145,0.145
+ l0.432,1.584l0.289,1.441l-0.289,0.574v0.145l-0.721,0.863l-1.154,1.586l-0.139,1.441l0.576,1.584l0.141,0.432l-0.141,1.439
+ l-0.576,0.865 M188.998,914.741l-0.721-0.287l-0.288,0.717l-1.008-0.287l-1.439,0.287l-0.433-0.717l0.288-1.443l-1.008-0.141
+ l-1.008-1.443v-0.863l-0.721-1.297l-1.008-0.143l-1.439,0.865l-0.145,0.432l0.145,0.576l-0.864,1.439l-0.145,0.289l-0.432,0.146
+ l-0.288,0.141v0.291l-0.144-0.145l-0.864-0.434l-0.864,0.146l-1.584-1.154l-0.144-0.289l-1.296-0.141l-0.288-1.443l-0.72-0.289
+ l-0.288-0.432l-1.009-1.441l-0.287-0.432l-0.288-0.576l0.72-0.143l1.296-0.719h1.44l1.439-0.721v-0.287l-1.439-0.434l0.575-1.441
+ l1.44,0.291l1.439-0.867l0.576-0.289l0.145-0.143v-0.143l0.863-1.441v-0.143l0.288-0.865l0.288-0.434l1.152-0.43h0.144"/>
+
+ <path id="path5385" fill="none" stroke="#000000" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M415.795,702.194l-0.717-3.023l-1.008-1.439l-0.143-0.145l-0.145-0.287v-0.146l-1.584-1.438l-1.295-1.584l-1.441-0.865
+ l-1.584-1.295l-0.576-1.441l-0.574-1.15l0.432-1.443l-0.143-1.584l-0.576-1.584v-1.439l-0.432-0.434l-1.441-1.15l-1.439-1.152
+ l-1.586-1.293l-0.287-1.584l0.717-1.441l-1.439-1.295l-1.584,0.289l-0.576-1.441l-0.287-1.584l-0.576-0.863l-0.721-1.73
+ l0.434-1.438l-0.145-0.576l-1.439-0.719l-1.441-1.154l-1.439-0.287l-1.152-1.584l-1.584-0.432l-1.439-0.291l-1.297-0.141
+ l-1.439-0.145v0.287h-1.584l-1.439-0.863l-1.445-0.432l-1.723-0.576l-1.443-0.865l-1.439-0.719l-1.439-0.289l-0.434-1.01h-0.143
+ l-0.721-0.143h-0.863 M418.822,637.687l-1.584-0.719l-0.721-1.873l0.289-1.586l0.289-2.447l-1.152-1.729l-1.439-1.439l-0.145-0.143
+ l-1.584,0.143l-1.584,0.145l-1.871-0.145l-1.586-0.576l-1.584-0.863l-1.295-1.01l-1.152,1.441l-0.574,1.152l-0.289,1.293
+ l-1.584,1.008l-1.439,0.291l-0.721,1.584l-0.145,1.584l-0.141,1.438l-0.576,1.586h0.141l0.436,0.434v1.584l0.287,1.582l0.432,0.434
+ l0.145,1.584l0.432,1.584l1.008,1.441l0.721,1.439l0.141,1.439l-1.293,1.008l-0.721,1.586l0.432,1.582v1.443l-0.287,0.287v1.01
+ l-1.439-0.576l-1.441-0.289l-1.441,0.143l-1.439-0.574l-1.729,0.143l-0.143,1.441l-1.15,1.439l-1.297,1.729h-2.16l-2.734,0.432
+ l-0.865-1.584l-1.584-0.865l-2.16-1.727l-0.432-0.289l-2.592-2.162l-2.016,0.291l-0.867,2.303l0.432,2.16l-1.439-0.289
+ l-0.434,1.295"/>
+ <g id="switch5387">
+ <text transform="matrix(1 0 0 1 556.0547 310.374)" font-family="'ArialMT'" font-size="30">R U S S I A</text>
+ </g>
+ <g id="switch5394">
+ <text transform="matrix(1 0 0 1 -191.5918 306.1982)" font-family="'ArialMT'" font-size="30">C A N A D A</text>
+ </g>
+ <g id="switch5401">
+ <text transform="matrix(1 0 0 1 224.0781 922.4404)" font-family="'ArialMT'" font-size="12">U.K.</text>
+ </g>
+ <g id="switch5410">
+ <text transform="matrix(1 0 0 1 160.5605 920.8486)" font-family="'ArialMT'" font-size="10">IRE.</text>
+ </g>
+ <g id="switch5417">
+ <text transform="matrix(1 0 0 1 102.167 728.9834)" font-family="'ArialMT'" font-size="12">ICELAND</text>
+ </g>
+ <g id="switch5428">
+ <text transform="matrix(1 0 0 1 297.5723 739.6377)" font-family="'ArialMT'" font-size="12">NORWAY</text>
+ </g>
+ <g id="switch5445">
+ <text transform="matrix(1 0 0 1 354.166 773.624)" font-family="'ArialMT'" font-size="12">SWEDEN</text>
+ </g>
+ <g id="switch5454">
+ <text transform="matrix(1 0 0 1 427.4629 732.4404)" font-family="'ArialMT'" font-size="12">FINLAND</text>
+ </g>
+ <g id="switch5465">
+ <text transform="matrix(1 0 0 1 472.9805 823.1221)" font-family="'ArialMT'" font-size="10">LATVIA</text>
+ </g>
+ <g id="switch5478">
+ <text transform="matrix(1 0 0 1 464.0547 857.9658)" font-family="'ArialMT'" font-size="10">LITH.</text>
+ </g>
+ <g id="switch5485">
+ <text transform="matrix(1 0 0 1 510.4063 872.6924)" font-family="'ArialMT'" font-size="10">BELARUS</text>
+ </g>
+ <g id="switch5500">
+ <text transform="matrix(1 0 0 1 574.1875 909.8818)" font-family="'ArialMT'" font-size="12">UKRAINE</text>
+ </g>
+ <g id="switch5507">
+ <text transform="matrix(1 0 0 1 436.6777 925.3994)" font-family="'ArialMT'" font-size="12">POLAND</text>
+ </g>
+ <g id="switch5518">
+ <text transform="matrix(1 0 0 1 317.7324 891.124)" font-family="'ArialMT'" font-size="10">DENMARK</text>
+ </g>
+ <g id="switch5525">
+ <text transform="matrix(1 0 0 1 336.4551 931.8799)" font-family="'ArialMT'" font-size="10">GERMANY</text>
+ </g>
+ <g id="switch5532">
+ <text transform="matrix(1 0 0 1 467.207 800.2588)" font-family="'ArialMT'" font-size="10">EST.</text>
+ </g>
+ <g id="switch5545">
+ <text transform="matrix(1 0 0 1 733.75 754.7549)" font-family="'ArialMT'" font-size="10">KAZ.</text>
+ </g>
+ <g id="switch5552">
+ <text transform="matrix(1 0 0 1 707.543 -249.3506)" font-family="'ArialMT'" font-size="12">JAPAN</text>
+ </g>
+ <g id="switch5565">
+ <text transform="matrix(1 0 0 1 44.1338 555.4619)" font-family="'ArialMT'" font-size="12">(DENMARK)</text>
+ </g>
+ <g id="switch5572">
+ <text transform="matrix(1 0 0 1 41.9746 538.7568)" font-family="'ArialMT'" font-size="16">Greenland</text>
+ </g>
+ <g id="switch5583">
+ <text transform="matrix(1 0 0 1 212.3506 646.5049)" font-family="'ArialMT'" font-size="8">(NORWAY)</text>
+ </g>
+ <g id="switch5602">
+ <text transform="matrix(1 0 0 1 344.2305 505.7822)" font-family="'ArialMT'" font-size="10">Svalbard</text>
+ </g>
+ <g id="switch5609">
+ <text transform="matrix(1 0 0 1 339.0469 517.5869)" font-family="'ArialMT'" font-size="10">(NORWAY)</text>
+ </g>
+ <g id="switch5628">
+ <text transform="matrix(1 0 0 1 288.375 589.3877)" font-family="'ArialMT'" font-size="8">(NORWAY)</text>
+ </g>
+ <g id="switch5647">
+ <text transform="matrix(1 0 0 1 729.1426 -5.2725)" font-family="'ArialMT'" font-size="8">CHINA</text>
+ </g>
+ <g id="switch5658">
+ <text transform="matrix(1 0 0 1 5.9746 -26.2959)" font-family="'ArialMT'" font-size="14">UNITED STATES</text>
+ </g>
+ <g id="switch5673">
+ <text transform="matrix(1 0 0 1 215.7822 772.8994)" font-family="'ArialMT'" font-size="10">Faroe</text>
+ </g>
+ <g id="switch5686">
+ <text transform="matrix(1 0 0 1 212.6143 783.2705)" font-family="'ArialMT'" font-size="10">Islands</text>
+ </g>
+ <g id="switch5693">
+ <text transform="matrix(1 0 0 1 207.3506 637.9834)" font-family="'ArialMT'" font-size="10">Jan Mayen</text>
+ </g>
+ <g id="switch5706">
+ <text transform="matrix(1 0 0 1 442.8711 871.8291)" font-family="'ArialMT'" font-size="10">RUS.</text>
+ </g>
+ <g id="switch5715">
+ <text transform="matrix(1 0 0 1 205.127 793.9248)" font-family="'ArialMT'" font-size="8">(DENMARK)</text>
+ </g>
+ <path id="path5722" fill="none" stroke="#000000" stroke-width="0.36" d="M630.068-254.68l5.617-13.824 M630.068-254.68
+ l27.215-24.479 M630.068-254.68l26.496-13.68"/>
+ <g id="switch5724">
+ <text transform="matrix(1 0 0 1 534.0234 239.6689)" fill="#FF0000" font-family="'ArialMT'" font-size="20">10˚C (50˚F) isotherm,</text>
+ </g>
+ <g id="switch5731">
+ <text transform="matrix(1 0 0 1 600.4063 263.4326)" fill="#FF0000" font-family="'ArialMT'" font-size="20"> July</text>
+ </g>
+ <g id="switch5746">
+ <text transform="matrix(1 0 0 1 193.8604 903.04)" font-family="'ArialMT'" font-size="12">Belfast</text>
+ </g>
+ <g id="switch5757">
+ <text transform="matrix(1 0 0 1 143.0801 931.1221)" font-family="'ArialMT'" font-size="12">Dublin</text>
+ </g>
+ <g id="switch5764">
+ <text transform="matrix(1 0 0 1 -140.9023 -25.4482)" font-family="'ArialMT'" font-size="12">Juneau</text>
+ </g>
+ <g id="switch5771">
+ <text transform="matrix(1 0 0 1 15.5762 -55.2217)" font-family="'ArialMT'" font-size="12">Anchorage</text>
+ </g>
+ <g id="switch5782">
+ <text transform="matrix(1 0 0 1 -65.8291 27.4346)" font-family="'ArialMT'" font-size="12">Dawson</text>
+ </g>
+ <g id="switch5793">
+ <text transform="matrix(1 0 0 1 -36.3789 108.9795)" font-family="'ArialMT'" font-size="12">Inuvik</text>
+ </g>
+ <g id="switch5800">
+ <text transform="matrix(1 0 0 1 133.9971 65.417)" font-family="'ArialMT'" font-size="12">Barrow</text>
+ </g>
+ <g id="switch5811">
+ <text transform="matrix(1 0 0 1 200.5264 -81.1787)" font-family="'ArialMT'" font-size="12">Provideniya</text>
+ </g>
+ <g id="switch5826">
+ <text transform="matrix(1 0 0 1 276.127 -79.8818)" font-family="'ArialMT'" font-size="12">Anadyr&apos;</text>
+ </g>
+ <g id="switch5833">
+ <text transform="matrix(1 0 0 1 325.5938 -0.4912)" font-family="'ArialMT'" font-size="12">Cherskiy</text>
+ </g>
+ <g id="switch5844">
+ <text transform="matrix(1 0 0 1 523.0898 646.6084)" font-family="'ArialMT'" font-size="12">Arkhangel&apos;sk</text>
+ </g>
+ <g id="switch5851">
+ <text transform="matrix(1 0 0 1 505.666 766.5596)" font-family="'ArialMT'" font-size="12">St. Petersburg</text>
+ </g>
+ <g id="switch5870">
+ <text transform="matrix(1 0 0 1 443.7383 -84.3467)" font-family="'ArialMT'" font-size="12">Magadan</text>
+ </g>
+ <g id="switch5877">
+ <text transform="matrix(1 0 0 1 660.959 -140.4014)" font-family="'ArialMT'" font-size="12">Khabarovsk</text>
+ </g>
+ <g id="switch5888">
+ <text transform="matrix(1 0 0 1 635.123 740.0635)" font-family="'ArialMT'" font-size="12">Nizhniy</text>
+ </g>
+ <g id="switch5895">
+ <text transform="matrix(1 0 0 1 631.8086 750.4326)" font-family="'ArialMT'" font-size="12">Novgorod</text>
+ </g>
+ <g id="switch5910">
+ <text transform="matrix(1 0 0 1 637.4043 696.7061)" font-family="'ArialMT'" font-size="12">Kazan&apos;</text>
+ </g>
+ <g id="switch5923">
+ <text transform="matrix(1 0 0 1 687.6309 633.4307)" font-family="'ArialMT'" font-size="12">Perm&apos;</text>
+ </g>
+ <g id="switch5932">
+ <text transform="matrix(1 0 0 1 -147.9346 -0.7334)" font-family="'ArialMT'" font-size="12">Whitehorse</text>
+ </g>
+ <g id="switch5943">
+ <text transform="matrix(1 0 0 1 -156.0244 166.2178)" font-family="'ArialMT'" font-size="12">Yellowknife</text>
+ </g>
+ <g id="switch5956">
+ <text transform="matrix(1 0 0 1 -146.4639 146.1768)" font-family="'ArialMT'" font-size="12">Echo Bay</text>
+ </g>
+ <g id="switch5967">
+ <text transform="matrix(1 0 0 1 151.2764 -51.5127)" font-family="'ArialMT'" font-size="12">Nome</text>
+ </g>
+ <g id="switch5974">
+ <text transform="matrix(1 0 0 1 86.043 83.9932)" font-family="'ArialMT'" font-size="12">Bay</text>
+ </g>
+ <g id="switch5985">
+ <text transform="matrix(1 0 0 1 77.835 74.0557)" font-family="'ArialMT'" font-size="12">Prudhoe</text>
+ </g>
+ <g id="switch5992">
+ <text transform="matrix(1 0 0 1 -18.7744 -13.3213)" font-family="'ArialMT'" font-size="12">Fairbanks</text>
+ </g>
+ <g id="switch6005">
+ <text transform="matrix(1 0 0 1 115.6641 389.2842)" font-family="'ArialMT'" font-size="12">Alert</text>
+ </g>
+ <g id="switch6012">
+ <text transform="matrix(1 0 0 1 212.4775 465.0225)" font-family="'ArialMT'" font-size="12">Nord</text>
+ </g>
+ <g id="switch6023">
+ <text transform="matrix(1 0 0 1 -48.6631 639.5439)" font-family="'ArialMT'" font-size="12">Tasiilaq</text>
+ </g>
+ <g id="switch6032">
+ <text transform="matrix(1 0 0 1 -19.0986 578.5439)" font-family="'ArialMT'" font-size="12">Kangerlussuaq</text>
+ </g>
+ <g id="switch6041">
+ <text transform="matrix(1 0 0 1 -63.752 649.833)" font-family="'ArialMT'" font-size="12">(Ammassalik)</text>
+ </g>
+ <g id="switch6048">
+ <text transform="matrix(1 0 0 1 556.7852 -50.3428)" font-family="'ArialMT'" font-size="12">Okhotsk</text>
+ </g>
+ <g id="switch6055">
+ <text transform="matrix(1 0 0 1 512.8242 -8.5518)" font-family="'ArialMT'" font-size="12">Oymyakon</text>
+ </g>
+ <g id="switch6070">
+ <text transform="matrix(1 0 0 1 459.4492 82.1572)" font-family="'ArialMT'" font-size="12">Verkhoyansk</text>
+ </g>
+ <g id="switch6083">
+ <text transform="matrix(1 0 0 1 285.3125 579.5869)" font-family="'ArialMT'" font-size="10">Bjørnøya</text>
+ </g>
+ <g id="switch6094">
+ <text transform="matrix(1 0 0 1 458.707 147.0791)" font-family="'ArialMT'" font-size="12">Tiksi</text>
+ </g>
+ <g id="switch6107">
+ <text transform="matrix(1 0 0 1 593.5625 771.5674)" font-family="'ArialMT'" font-size="14">Moscow</text>
+ </g>
+ <g id="switch6118">
+ <text transform="matrix(1 0 0 1 427.9961 796.1299)" font-family="'ArialMT'" font-size="12">Tallinn</text>
+ </g>
+ <g id="switch6127">
+ <text transform="matrix(1 0 0 1 460.209 848.665)" font-family="'ArialMT'" font-size="12">Vilnius</text>
+ </g>
+ <g id="switch6134">
+ <text transform="matrix(1 0 0 1 63.293 417.499)" font-family="'ArialMT'" font-size="12">Qaanaaq</text>
+ </g>
+ <g id="switch6141">
+ <text transform="matrix(1 0 0 1 66.3164 429.4502)" font-family="'ArialMT'" font-size="12">(Thule)</text>
+ </g>
+ <g id="switch6152">
+ <text transform="matrix(1 0 0 1 -52.7617 327.54)" font-family="'ArialMT'" font-size="12">Kaujuitoq</text>
+ </g>
+ <g id="switch6161">
+ <text transform="matrix(1 0 0 1 -54.0576 338.6299)" font-family="'ArialMT'" font-size="12">(Resolute)</text>
+ </g>
+ <g id="switch6172">
+ <text transform="matrix(1 0 0 1 -134.6475 257.5713)" font-family="'ArialMT'" font-size="12">Cambridge</text>
+ </g>
+ <g id="switch6179">
+ <text transform="matrix(1 0 0 1 -113.7471 268.2275)" font-family="'ArialMT'" font-size="12">Bay</text>
+ </g>
+ <g id="switch6190">
+ <text transform="matrix(1 0 0 1 -153.7295 485.5361)" font-family="'ArialMT'" font-size="12">(Frobisher Bay)</text>
+ </g>
+ <g id="switch6205">
+ <text transform="matrix(1 0 0 1 -132.3223 473.7256)" font-family="'ArialMT'" font-size="12">Iqaluit</text>
+ </g>
+ <g id="switch6212">
+ <text transform="matrix(1 0 0 1 -184.0361 321.0322)" font-family="'ArialMT'" font-size="12">Kangiqcliniq</text>
+ </g>
+ <g id="switch6221">
+ <text transform="matrix(1 0 0 1 -185.3848 334.1221)" font-family="'ArialMT'" font-size="12">(Rankin Inlet)</text>
+ </g>
+ <g id="switch6232">
+ <text transform="matrix(1 0 0 1 -74.8398 664.9463)" font-family="'ArialMT'" font-size="12">Narsarsuaq</text>
+ </g>
+ <g id="switch6247">
+ <text transform="matrix(1 0 0 1 -171.2227 635.2979)" font-family="'ArialMT'" font-size="12">(Frederikshåb)</text>
+ </g>
+ <g id="switch6262">
+ <text transform="matrix(1 0 0 1 46.835 615.6533)" font-family="'ArialMT'" font-size="12">Itseqqortoormiit</text>
+ </g>
+ <g id="switch6269">
+ <text transform="matrix(1 0 0 1 49.7148 626.8838)" font-family="'ArialMT'" font-size="12">(Scoresbysund)</text>
+ </g>
+ <g id="switch6284">
+ <text transform="matrix(1 0 0 1 592.2109 349.6729)" font-family="'ArialMT'" font-size="12">Noril&apos;sk</text>
+ </g>
+ <g id="switch6291">
+ <text transform="matrix(1 0 0 1 479.209 385.3408)" font-family="'ArialMT'" font-size="12">Dikson</text>
+ </g>
+ <g id="switch6302">
+ <text transform="matrix(1 0 0 1 -125.0645 60.0869)" font-family="'ArialMT'" font-size="12">Lake</text>
+ </g>
+ <g id="switch6315">
+ <text transform="matrix(1 0 0 1 -131.2559 50.0068)" font-family="'ArialMT'" font-size="12">Watson</text>
+ </g>
+ <g id="switch6324">
+ <text transform="matrix(1 0 0 1 -192.8877 115.0947)" font-family="'ArialMT'" font-size="12">Hay</text>
+ </g>
+ <g id="switch6335">
+ <text transform="matrix(1 0 0 1 -195.624 125.3174)" font-family="'ArialMT'" font-size="12">River</text>
+ </g>
+ <g id="switch6346">
+ <text transform="matrix(1 0 0 1 695.1699 874.7041)" font-family="'ArialMT'" font-size="12">Rostov</text>
+ </g>
+ <g id="switch6359">
+ <text transform="matrix(1 0 0 1 698.7129 825.7354)" font-family="'ArialMT'" font-size="12">Volgograd</text>
+ </g>
+ <g id="switch6372">
+ <text transform="matrix(1 0 0 1 654.5391 778.0244)" font-family="'ArialMT'" font-size="12">Saratov</text>
+ </g>
+ <g id="switch6387">
+ <text transform="matrix(1 0 0 1 703.5352 711.2627)" font-family="'ArialMT'" font-size="12">Samara</text>
+ </g>
+ <g id="switch6398">
+ <text transform="matrix(1 0 0 1 576.082 41.2197)" font-family="'ArialMT'" font-size="12">Yakutsk</text>
+ </g>
+ <g id="switch6407">
+ <text transform="matrix(1 0 0 1 418.3477 768.2041)" font-family="'ArialMT'" font-size="14">Helsinki</text>
+ </g>
+ <g id="switch6414">
+ <text transform="matrix(1 0 0 1 314.166 811.1162)" font-family="'ArialMT'" font-size="14">Oslo</text>
+ </g>
+ <g id="switch6421">
+ <text transform="matrix(1 0 0 1 441.9414 834.54)" font-family="'ArialMT'" font-size="12">Riga</text>
+ </g>
+ <g id="switch6432">
+ <text transform="matrix(1 0 0 1 636.332 864.7197)" font-family="'ArialMT'" font-size="12">Kharkiv</text>
+ </g>
+ <g id="switch6439">
+ <text transform="matrix(1 0 0 1 541.2031 897.8916)" font-family="'ArialMT'" font-size="14">Kiev</text>
+ </g>
+ <g id="switch6450">
+ <text transform="matrix(1 0 0 1 515.8301 848.8232)" font-family="'ArialMT'" font-size="14">Minsk</text>
+ </g>
+ <g id="switch6457">
+ <text transform="matrix(1 0 0 1 417.9141 899.9111)" font-family="'ArialMT'" font-size="14">Warsaw</text>
+ </g>
+ <g id="switch6470">
+ <text transform="matrix(1 0 0 1 356.8789 918.2119)" font-family="'ArialMT'" font-size="14">Berlin</text>
+ </g>
+ <g id="switch6477">
+ <text transform="matrix(1 0 0 1 301.7773 872.2783)" font-family="'ArialMT'" font-size="12">Copenhagen</text>
+ </g>
+ <g id="switch6488">
+ <text transform="matrix(1 0 0 1 -26 -117.9326)" font-family="'ArialMT'" font-size="12">Kodiak</text>
+ </g>
+ <g id="switch6497">
+ <text transform="matrix(1 0 0 1 35.6416 -111.7646)" font-family="'ArialMT'" font-size="12">Bethel</text>
+ </g>
+ <g id="switch6504">
+ <text transform="matrix(1 0 0 1 -22.9697 -41.9932)" font-family="'ArialMT'" font-size="12">Valdez</text>
+ </g>
+ <g id="switch6513">
+ <text transform="matrix(1 0 0 1 273.6641 7.8682)" font-family="'ArialMT'" font-size="12">Pevek</text>
+ </g>
+ <g id="switch6524">
+ <text transform="matrix(1 0 0 1 -127.1504 362.0439)" font-family="'ArialMT'" font-size="12">Repulse Bay</text>
+ </g>
+ <g id="switch6537">
+ <text transform="matrix(1 0 0 1 359.4883 648.29)" font-family="'ArialMT'" font-size="12">Tromsø</text>
+ </g>
+ <g id="switch6548">
+ <text transform="matrix(1 0 0 1 -31.127 587.874)" font-family="'ArialMT'" font-size="12">(Søndre Strømfjord)</text>
+ </g>
+ <g id="switch6563">
+ <text transform="matrix(1 0 0 1 31.7861 745.124)" font-family="'ArialMT'" font-size="14">Reykjavík</text>
+ </g>
+ <g id="switch6576">
+ <text transform="matrix(1 0 0 1 -51.7051 606.7979)" font-family="'ArialMT'" font-size="14">Nuuk</text>
+ </g>
+ <g id="switch6583">
+ <text transform="matrix(1 0 0 1 -64.8076 619.5361)" font-family="'ArialMT'" font-size="14">(Godthåb)</text>
+ </g>
+ <g id="switch6590">
+ <text transform="matrix(1 0 0 1 361.2813 804.8643)" font-family="'ArialMT'" font-size="14">Stockholm</text>
+ </g>
+ <g id="switch6597">
+ <text transform="matrix(1 0 0 1 138.3066 784.6768)" font-family="'ArialMT'" font-size="12">Tórshavn</text>
+ </g>
+ <g id="switch6612">
+ <text transform="matrix(1 0 0 1 -155.3535 623.9111)" font-family="'ArialMT'" font-size="12">Paamiut</text>
+ </g>
+ <g id="switch6621">
+ <text transform="matrix(1 0 0 1 213.71 514.9307)" font-family="'ArialMT'" font-size="12">Longyearbyen</text>
+ </g>
+ <g id="switch6638">
+ <text transform="matrix(1 0 0 1 445.1855 623.2783)" font-family="'ArialMT'" font-size="12">Murmansk</text>
+ </g>
+ <g id="switch6645">
+ <text transform="matrix(1 0 0 1 582.1211 -175.9482)" font-family="'ArialMT'" font-size="12">Sakhalin</text>
+ </g>
+ <g id="switch6652">
+ <text transform="matrix(1 0 0 1 529.7031 -235.96)" font-family="'ArialMT'" font-size="8">administered by Russia, claimed by Japan.</text>
+ </g>
+ <g id="switch6675">
+ <text transform="matrix(0.8767 -0.481 0.481 0.8767 511.2705 -248.0562)" font-family="'ArialMT'" font-size="7.9999">K</text>
+ </g>
+ <g id="switch6682">
+ <text transform="matrix(0.8767 -0.481 0.481 0.8767 516.7412 -251.0801)" font-family="'ArialMT'" font-size="7.9999">U</text>
+ </g>
+ <g id="switch6689">
+ <text transform="matrix(0.9036 -0.4284 0.4284 0.9036 523.5098 -254.2461)" font-family="'ArialMT'" font-size="8.0001">R</text>
+ </g>
+ <g id="switch6696">
+ <text transform="matrix(0.9036 -0.4284 0.4284 0.9036 529.5566 -257.1284)" font-family="'ArialMT'" font-size="8.0001">I</text>
+ </g>
+ <g id="switch6703">
+ <text transform="matrix(0.9036 -0.4284 0.4284 0.9036 533.1563 -258.8564)" font-family="'ArialMT'" font-size="8.0001">L</text>
+ </g>
+ <g id="switch6710">
+ <text transform="matrix(0.9274 -0.3741 0.3741 0.9274 542.5186 -262.8892)" font-family="'ArialMT'" font-size="8.0001">I</text>
+ </g>
+ <g id="switch6717">
+ <text transform="matrix(0.9274 -0.3741 0.3741 0.9274 546.1201 -264.3276)" font-family="'ArialMT'" font-size="8.0001">S</text>
+ </g>
+ <g id="switch6724">
+ <text transform="matrix(0.9274 -0.3741 0.3741 0.9274 552.4561 -266.9214)" font-family="'ArialMT'" font-size="8.0001">L</text>
+ </g>
+ <g id="switch6731">
+ <text transform="matrix(0.9502 -0.3115 0.3115 0.9502 558.0684 -268.791)" font-family="'ArialMT'" font-size="7.9996">A</text>
+ </g>
+ <g id="switch6738">
+ <text transform="matrix(0.9502 -0.3115 0.3115 0.9502 564.9805 -271.0962)" font-family="'ArialMT'" font-size="7.9996">N</text>
+ </g>
+ <g id="switch6745">
+ <text transform="matrix(0.9688 -0.248 0.248 0.9688 572.0381 -273.4014)" font-family="'ArialMT'" font-size="8.0003">D</text>
+ </g>
+ <g id="switch6752">
+ <text transform="matrix(0.9688 -0.248 0.248 0.9688 579.0947 -275.1289)" font-family="'ArialMT'" font-size="8.0003">S</text>
+ </g>
+ <g id="switch6759">
+ <text transform="matrix(0.6882 -0.7255 0.7255 0.6882 111.3833 -200.105)" font-family="'ArialMT'" font-size="9.9998">A</text>
+ </g>
+ <g id="switch6766">
+ <text transform="matrix(0.7345 -0.6786 0.6787 0.7345 117.1411 -206.0088)" font-family="'ArialMT'" font-size="10.0006">L</text>
+ </g>
+ <g id="switch6773">
+ <text transform="matrix(0.7345 -0.6786 0.6787 0.7345 122.1807 -210.7603)" font-family="'ArialMT'" font-size="10.0006">E</text>
+ </g>
+ <g id="switch6780">
+ <text transform="matrix(0.7818 -0.6236 0.6236 0.7818 127.5103 -215.5127)" font-family="'ArialMT'" font-size="10.0004">U</text>
+ </g>
+ <g id="switch6787">
+ <text transform="matrix(0.7818 -0.6236 0.6236 0.7818 134.2798 -220.8398)" font-family="'ArialMT'" font-size="10.0004">T</text>
+ </g>
+ <g id="switch6794">
+ <text transform="matrix(0.8292 -0.559 0.559 0.8292 139.895 -225.0156)" font-family="'ArialMT'" font-size="10.0003">I</text>
+ </g>
+ <g id="switch6801">
+ <text transform="matrix(0.8292 -0.559 0.559 0.8292 143.4951 -227.4644)" font-family="'ArialMT'" font-size="10.0003">A</text>
+ </g>
+ <g id="switch6808">
+ <text transform="matrix(0.8711 -0.4912 0.4912 0.8711 150.8384 -232.3618)" font-family="'ArialMT'" font-size="10.0005">N</text>
+ </g>
+ <g id="switch6815">
+ <text transform="matrix(0.8999 -0.436 0.436 0.8999 166.8228 -241.1431)" font-family="'ArialMT'" font-size="9.9996">I</text>
+ </g>
+ <g id="switch6822">
+ <text transform="matrix(0.8999 -0.436 0.436 0.8999 170.7114 -243.1602)" font-family="'ArialMT'" font-size="9.9996">S</text>
+ </g>
+ <g id="switch6829">
+ <text transform="matrix(0.9348 -0.3552 0.3552 0.9348 178.3433 -246.7603)" font-family="'ArialMT'" font-size="10.0001">L</text>
+ </g>
+ <g id="switch6836">
+ <text transform="matrix(0.9348 -0.3552 0.3552 0.9348 184.8232 -249.2109)" font-family="'ArialMT'" font-size="10.0001">A</text>
+ </g>
+ <g id="switch6843">
+ <text transform="matrix(0.955 -0.2967 0.2967 0.955 192.5986 -252.2324)" font-family="'ArialMT'" font-size="10.0003">N</text>
+ </g>
+ <g id="switch6850">
+ <text transform="matrix(0.955 -0.2967 0.2967 0.955 200.9497 -254.8242)" font-family="'ArialMT'" font-size="10.0003">D</text>
+ </g>
+ <g id="switch6857">
+ <text transform="matrix(0.9744 -0.2249 0.2249 0.9744 208.8696 -257.1284)" font-family="'ArialMT'" font-size="10.0002">S</text>
+ </g>
+ <g id="switch6864">
+ <text transform="matrix(1 0 0 1 535.4629 -245.1768)" font-family="'ArialMT'" font-size="8">occupied by the Soviet Union in 1945,</text>
+ </g>
+ <g id="switch6879">
+ <text transform="matrix(1 0 0 1 412.1992 -222.4248)" font-family="'ArialMT'" font-size="10">Kamchatskiy</text>
+ </g>
+ <g id="switch6892">
+ <text transform="matrix(1 0 0 1 410.4707 -233.2236)" font-family="'ArialMT'" font-size="10">Petropavlovsk-</text>
+ </g>
+ <g id="switch6913">
+ <text transform="matrix(1 0 0 1 267.1914 45.5674)" font-family="'ArialMT'" font-size="10">Island</text>
+ </g>
+ <g id="switch6920">
+ <text transform="matrix(1 0 0 1 262.8789 34.6846)" font-family="'ArialMT'" font-size="10">Wrangel</text>
+ </g>
+ <g id="switch6929">
+ <text transform="matrix(1 0 0 1 422.4141 489.1826)" font-family="'ArialMT'" font-size="10">NOVAYA</text>
+ </g>
+ <g id="switch6944">
+ <text transform="matrix(1 0 0 1 421.9805 500.126)" font-family="'ArialMT'" font-size="10">ZEMLYA</text>
+ </g>
+ <g id="switch6957">
+ <text transform="matrix(1 0 0 1 332.6504 414.917)" font-family="'ArialMT'" font-size="10">FRANZ</text>
+ </g>
+ <g id="switch6964">
+ <text transform="matrix(1 0 0 1 334.9766 426.0596)" font-family="'ArialMT'" font-size="10">JOSEF</text>
+ </g>
+ <g id="switch6971">
+ <text transform="matrix(1 0 0 1 334.0742 437.7744)" font-family="'ArialMT'" font-size="10">LAND</text>
+ </g>
+ <g id="switch6978">
+ <text transform="matrix(1 0 0 1 364.4395 295.1104)" font-family="'ArialMT'" font-size="10">SEVERNAYA</text>
+ </g>
+ <g id="switch6989">
+ <text transform="matrix(1 0 0 1 370.1992 306.917)" font-family="'ArialMT'" font-size="10">ZEMLYA</text>
+ </g>
+ <g id="switch7002">
+ <text transform="matrix(1 0 0 1 367.3984 162.4385)" font-family="'ArialMT'" font-size="10">NEW</text>
+ </g>
+ <g id="switch7009">
+ <text transform="matrix(1 0 0 1 356.4551 173.2393)" font-family="'ArialMT'" font-size="10">SIBERIAN</text>
+ </g>
+ <g id="switch7016">
+ <text transform="matrix(1 0 0 1 357.1738 185.333)" font-family="'ArialMT'" font-size="10">ISLANDS</text>
+ </g>
+ <g id="switch7023">
+ <text transform="matrix(1 0 0 1 69.9102 359.0459)" font-family="'ArialMT'" font-size="10">Ellesmere</text>
+ </g>
+ <g id="switch7030">
+ <text transform="matrix(1 0 0 1 78.1182 372.0068)" font-family="'ArialMT'" font-size="10">Island</text>
+ </g>
+ <g id="switch7037">
+ <text transform="matrix(1 0 0 1 32.0381 329.8154)" font-family="'ArialMT'" font-size="12">ISLANDS</text>
+ </g>
+ <g id="switch7044">
+ <text transform="matrix(1 0 0 1 40.8223 275.5244)" font-family="'ArialMT'" font-size="12">QUEEN</text>
+ </g>
+ <g id="switch7051">
+ <text transform="matrix(1 0 0 1 27.3105 302.0225)" font-family="'ArialMT'" font-size="14">ELIZABETH</text>
+ </g>
+ <g id="switch7058">
+ <text transform="matrix(1 0 0 1 4.1025 189.3818)" font-family="'ArialMT'" font-size="10">Banks</text>
+ </g>
+ <g id="switch7065">
+ <text transform="matrix(1 0 0 1 4.9424 199.7666)" font-family="'ArialMT'" font-size="10">Island</text>
+ </g>
+ <g id="switch7072">
+ <text transform="matrix(1 0 0 1 -67.0254 231.6064)" font-family="'ArialMT'" font-size="12">Victoria</text>
+ </g>
+ <g id="switch7079">
+ <text transform="matrix(1 0 0 1 -64.0098 246.1416)" font-family="'ArialMT'" font-size="12">Island</text>
+ </g>
+ <g id="switch7086">
+ <text transform="matrix(1 0 0 1 186.3643 820.6533)" font-family="'ArialMT'" font-size="10">SHETLAND</text>
+ </g>
+ <g id="switch7093">
+ <text transform="matrix(1 0 0 1 189.2441 830.4482)" font-family="'ArialMT'" font-size="10">ISLANDS</text>
+ </g>
+ <g id="switch7100">
+ <text transform="matrix(1 0 0 1 -76.2656 430.7744)" font-family="'ArialMT'" font-size="12">Baffin</text>
+ </g>
+ <g id="switch7107">
+ <text transform="matrix(1 0 0 1 -81.0088 446.5869)" font-family="'ArialMT'" font-size="12">Island</text>
+ </g>
+ <polyline id="polyline7114" points="575.639,881.765 576.934,885.509 580.963,885.509 577.654,887.956 578.949,891.845
+ 575.639,889.397 572.471,891.556 573.479,887.813 570.311,885.509 574.342,885.509 575.639,881.765 "/>
+ <polyline id="polyline7116" points="522.934,850.229 524.23,853.974 528.262,853.974 524.949,856.421 526.246,860.31
+ 522.934,857.862 519.766,860.021 520.773,856.278 517.605,853.974 521.639,853.974 522.934,850.229 "/>
+ <polyline id="polyline7118" points="496.006,849.364 497.303,853.11 501.334,853.11 498.021,855.556 499.318,859.444
+ 496.006,856.997 492.838,859.157 493.846,855.413 490.678,853.11 494.709,853.11 496.006,849.364 "/>
+ <polyline id="polyline7120" points="590.9,771.462 592.197,775.204 596.23,775.204 592.916,777.653 594.211,781.54 590.9,779.095
+ 587.732,781.253 588.74,777.511 585.572,775.204 589.605,775.204 590.9,771.462 "/>
+ <polyline id="polyline7122" points="466.918,779.524 468.213,783.271 472.246,783.271 468.934,785.716 470.23,789.604
+ 466.918,787.157 463.75,789.317 464.758,785.571 461.59,783.271 465.621,783.271 466.918,779.524 "/>
+ <polyline id="polyline7124" points="471.379,821.286 472.678,825.03 476.709,825.03 473.398,827.478 474.693,831.364
+ 471.379,828.917 468.213,831.077 469.223,827.333 466.055,825.03 470.084,825.03 471.379,821.286 "/>
+ <polyline id="polyline7126" points="456.98,771.03 458.277,774.772 462.311,774.772 458.998,777.222 460.293,781.11
+ 456.98,778.661 453.814,780.821 454.822,777.077 451.654,774.772 455.686,774.772 456.98,771.03 "/>
+ <polyline id="polyline7128" points="406.438,805.302 407.732,809.046 411.766,809.046 408.453,811.493 409.75,815.38
+ 406.438,812.935 403.27,815.093 404.277,811.349 401.109,809.046 405.141,809.046 406.438,805.302 "/>
+ <polyline id="polyline7130" points="343.797,811.493 345.094,815.235 349.129,815.235 345.813,817.687 347.109,821.571
+ 343.797,819.124 340.629,821.286 341.641,817.54 338.473,815.235 342.502,815.235 343.797,811.493 "/>
+ <polyline id="polyline7132" points="94.821,722.501 96.117,726.245 100.149,726.245 96.838,728.694 98.134,732.581 94.821,730.134
+ 91.653,732.294 92.661,728.55 89.493,726.245 93.525,726.245 94.821,722.501 "/>
+ <polyline id="polyline7134" points="373.318,873.413 374.613,877.157 378.646,877.157 375.334,879.604 376.629,883.493
+ 373.318,881.046 370.148,883.204 371.156,879.462 367.99,877.157 372.021,877.157 373.318,873.413 "/>
+ <polyline id="polyline7136" points="391.893,921.509 393.189,925.253 397.223,925.253 393.908,927.702 395.205,931.589
+ 391.893,929.14 388.725,931.302 389.732,927.556 386.564,925.253 390.598,925.253 391.893,921.509 "/>
+ <polyline id="polyline7138" points="470.949,900.917 472.246,904.661 476.277,904.661 472.963,907.11 474.262,910.997
+ 470.949,908.548 467.781,910.708 468.789,906.964 465.621,904.661 469.654,904.661 470.949,900.917 "/>
+ <polyline id="polyline7140" points="-66.746,599.524 -65.45,603.271 -61.418,603.271 -64.73,605.718 -63.435,609.604
+ -66.746,607.157 -69.914,609.317 -68.906,605.573 -72.074,603.271 -68.042,603.271 -66.746,599.524 "/>
+ <polyline id="polyline7142" points="194.325,782.694 195.621,786.438 199.653,786.438 196.342,788.886 197.638,792.772
+ 194.325,790.325 191.157,792.485 192.166,788.741 188.998,786.438 193.029,786.438 194.325,782.694 "/>
+ <polyline id="polyline7144" points="187.92,921.524 189.216,925.271 193.248,925.271 189.936,927.718 191.231,931.604
+ 187.92,929.157 184.752,931.317 185.76,927.571 182.592,925.271 186.623,925.271 187.92,921.524 "/>
+ <polyline id="polyline7146" points="296.711,515.718 298.006,519.462 302.037,519.462 298.727,521.911 300.021,525.798
+ 296.711,523.349 293.543,525.509 294.547,521.765 291.379,519.462 295.414,519.462 296.711,515.718 "/>
+ <polyline id="polyline7148" points="200.806,-77.272 200.806,-76.696 200.949,-76.552 200.949,-76.266 201.094,-76.121
+ 201.094,-75.976 201.237,-75.976 201.237,-75.833 201.382,-75.688 201.525,-75.688 201.525,-75.544 201.67,-75.544 201.813,-75.4
+ 201.958,-75.256 202.245,-75.256 202.39,-75.112 203.254,-75.112 203.397,-75.256 203.542,-75.256 203.686,-75.4 203.974,-75.4
+ 203.974,-75.544 204.117,-75.688 204.262,-75.688 204.262,-75.833 204.405,-75.833 204.405,-75.976 204.55,-76.121 204.55,-76.266
+ 204.693,-76.266 204.693,-76.552 204.838,-76.696 204.838,-77.56 204.693,-77.705 204.693,-77.992 204.55,-77.992 204.55,-78.136
+ 204.405,-78.28 204.405,-78.424 204.262,-78.424 204.262,-78.568 204.117,-78.712 203.974,-78.712 203.974,-78.856
+ 203.686,-78.856 203.542,-79 203.397,-79 203.254,-79.144 202.39,-79.144 202.245,-79 201.958,-79 201.813,-78.856 201.67,-78.712
+ 201.525,-78.712 201.237,-78.424 201.237,-78.28 201.094,-78.136 200.949,-77.992 200.949,-77.705 200.806,-77.56 200.806,-77.272
+ "/>
+ <polyline id="polyline7150" points="269.781,-75.833 269.781,-75.256 269.926,-75.112 269.926,-74.824 270.066,-74.682
+ 270.066,-74.537 270.215,-74.537 270.215,-74.392 270.357,-74.249 270.502,-74.249 270.502,-74.104 270.645,-74.104
+ 270.934,-73.816 271.223,-73.816 271.365,-73.672 272.23,-73.672 272.373,-73.816 272.518,-73.816 272.66,-73.96 272.949,-73.96
+ 272.949,-74.104 273.094,-74.249 273.238,-74.249 273.238,-74.392 273.379,-74.392 273.379,-74.537 273.525,-74.682
+ 273.525,-74.824 273.67,-74.824 273.67,-75.112 273.813,-75.256 273.813,-76.121 273.67,-76.266 273.67,-76.552 273.525,-76.552
+ 273.525,-76.696 273.379,-76.84 273.379,-76.984 273.238,-76.984 273.238,-77.128 273.094,-77.272 272.949,-77.272
+ 272.949,-77.417 272.66,-77.417 272.518,-77.56 272.373,-77.56 272.23,-77.705 271.365,-77.705 271.223,-77.56 270.934,-77.56
+ 270.645,-77.272 270.502,-77.272 270.357,-77.128 270.215,-76.984 270.215,-76.84 270.066,-76.696 269.926,-76.552
+ 269.926,-76.266 269.781,-76.121 269.781,-75.833 "/>
+ <polyline id="polyline7152" points="469.223,-217.096 469.223,-216.52 469.365,-216.376 469.365,-216.088 469.51,-215.944
+ 469.51,-215.8 469.654,-215.8 469.654,-215.656 469.795,-215.512 469.941,-215.512 469.941,-215.369 470.084,-215.369
+ 470.23,-215.224 470.373,-215.081 470.662,-215.081 470.807,-214.936 471.67,-214.936 471.814,-215.081 471.957,-215.081
+ 472.102,-215.224 472.389,-215.224 472.389,-215.369 472.533,-215.512 472.678,-215.512 472.678,-215.656 472.822,-215.656
+ 472.822,-215.8 472.963,-215.944 472.963,-216.088 473.109,-216.088 473.109,-216.376 473.254,-216.52 473.254,-217.384
+ 473.109,-217.528 473.109,-217.816 472.963,-217.816 472.963,-217.96 472.822,-218.104 472.822,-218.249 472.678,-218.249
+ 472.678,-218.392 472.533,-218.537 472.389,-218.537 472.389,-218.68 472.102,-218.68 471.957,-218.824 471.814,-218.824
+ 471.67,-218.968 470.807,-218.968 470.662,-218.824 470.373,-218.824 470.23,-218.68 470.084,-218.537 469.941,-218.537
+ 469.795,-218.392 469.654,-218.249 469.654,-218.104 469.365,-217.816 469.365,-217.528 469.223,-217.384 469.223,-217.096 "/>
+ <polyline id="polyline7154" points="128.806,56.358 128.806,56.936 128.949,57.078 128.949,57.366 129.094,57.512 129.094,57.654
+ 129.237,57.654 129.237,57.799 129.382,57.942 129.525,57.942 129.525,58.085 129.67,58.085 129.813,58.232 129.958,58.374
+ 130.245,58.374 130.39,58.52 131.254,58.52 131.397,58.374 131.542,58.374 131.686,58.232 131.974,58.232 131.974,58.085
+ 132.117,57.942 132.262,57.942 132.262,57.799 132.405,57.799 132.405,57.654 132.55,57.512 132.55,57.366 132.693,57.366
+ 132.693,57.078 132.838,56.936 132.838,56.07 132.693,55.928 132.693,55.64 132.55,55.64 132.55,55.494 132.405,55.352
+ 132.405,55.206 132.262,55.206 132.262,55.064 132.117,54.917 131.974,54.917 131.974,54.776 131.686,54.776 131.542,54.631
+ 131.397,54.631 131.254,54.486 130.39,54.486 130.245,54.631 129.958,54.631 129.813,54.776 129.67,54.917 129.525,54.917
+ 129.382,55.064 129.237,55.206 129.237,55.352 129.094,55.494 128.949,55.64 128.949,55.928 128.806,56.07 128.806,56.358 "/>
+ <polyline id="polyline7156" points="359.492,6.392 359.492,6.967 359.641,7.11 359.641,7.4 359.781,7.543 359.781,7.688
+ 359.926,7.688 359.926,7.83 360.066,7.976 360.215,7.976 360.215,8.12 360.357,8.12 360.502,8.264 360.645,8.406 360.934,8.406
+ 361.074,8.551 361.941,8.551 362.086,8.406 362.23,8.406 362.373,8.264 362.662,8.264 362.662,8.12 362.807,7.976 362.949,7.976
+ 362.949,7.83 363.094,7.83 363.094,7.688 363.238,7.543 363.238,7.4 363.379,7.4 363.379,7.11 363.525,6.967 363.525,6.104
+ 363.379,5.959 363.379,5.672 363.238,5.672 363.238,5.526 363.094,5.383 363.094,5.238 362.949,5.238 362.949,5.096 362.807,4.95
+ 362.662,4.95 362.662,4.808 362.373,4.808 362.23,4.662 362.086,4.662 361.941,4.52 361.074,4.52 360.934,4.662 360.645,4.662
+ 360.502,4.808 360.357,4.95 360.215,4.95 359.926,5.238 359.926,5.383 359.781,5.526 359.641,5.672 359.641,5.959 359.492,6.104
+ 359.492,6.392 "/>
+ <polyline id="polyline7158" points="499.029,759.798 499.029,760.372 499.174,760.517 499.174,760.806 499.318,760.948
+ 499.318,761.095 499.459,761.095 499.459,761.235 499.605,761.382 499.75,761.382 499.75,761.524 499.893,761.524 500.037,761.669
+ 500.182,761.813 500.471,761.813 500.613,761.956 501.479,761.956 501.621,761.813 501.766,761.813 501.908,761.669
+ 502.197,761.669 502.197,761.524 502.342,761.382 502.486,761.382 502.486,761.235 502.627,761.235 502.627,761.095
+ 502.773,760.948 502.773,760.806 502.918,760.806 502.918,760.517 503.061,760.372 503.061,759.511 502.918,759.364
+ 502.918,759.077 502.773,759.077 502.773,758.935 502.627,758.788 502.627,758.646 502.486,758.646 502.486,758.501
+ 502.342,758.356 502.197,758.356 502.197,758.214 501.908,758.214 501.766,758.067 501.621,758.067 501.479,757.927
+ 500.613,757.927 500.471,758.067 500.182,758.067 500.037,758.214 499.893,758.356 499.75,758.356 499.459,758.646
+ 499.459,758.788 499.318,758.935 499.174,759.077 499.174,759.364 499.029,759.511 499.029,759.798 "/>
+ <polyline id="polyline7160" points="190.281,906.485 190.281,907.06 190.426,907.204 190.426,907.491 190.569,907.636
+ 190.569,907.78 190.714,907.78 190.714,907.923 190.857,908.067 191.002,908.067 191.002,908.212 191.146,908.212 191.289,908.354
+ 191.434,908.499 191.722,908.499 191.865,908.644 192.729,908.644 192.873,908.499 193.018,908.499 193.161,908.354
+ 193.449,908.354 193.449,908.212 193.594,908.067 193.737,908.067 193.737,907.923 193.882,907.923 193.882,907.78
+ 194.025,907.636 194.025,907.491 194.17,907.491 194.17,907.204 194.313,907.06 194.313,906.196 194.17,906.052 194.17,905.763
+ 194.025,905.763 194.025,905.62 193.882,905.476 193.882,905.331 193.737,905.331 193.737,905.188 193.594,905.044
+ 193.449,905.044 193.449,904.899 193.161,904.899 193.018,904.755 192.873,904.755 192.729,904.612 191.865,904.612
+ 191.722,904.755 191.434,904.755 191.289,904.899 191.146,905.044 191.002,905.044 190.857,905.188 190.714,905.331
+ 190.714,905.476 190.569,905.62 190.426,905.763 190.426,906.052 190.281,906.196 190.281,906.485 "/>
+ <polyline id="polyline7162" points="439.557,622.997 439.557,623.573 439.701,623.718 439.701,624.005 439.846,624.149
+ 439.846,624.294 439.99,624.294 439.99,624.438 440.131,624.581 440.277,624.581 440.277,624.726 440.422,624.726 440.564,624.87
+ 440.709,625.013 440.998,625.013 441.141,625.157 442.006,625.157 442.148,625.013 442.293,625.013 442.438,624.87 442.725,624.87
+ 442.725,624.726 442.869,624.581 443.014,624.581 443.014,624.438 443.156,624.438 443.156,624.294 443.301,624.149
+ 443.301,624.005 443.445,624.005 443.445,623.718 443.59,623.573 443.59,622.71 443.445,622.565 443.445,622.278 443.301,622.278
+ 443.301,622.134 443.156,621.989 443.156,621.847 443.014,621.847 443.014,621.702 442.869,621.558 442.725,621.558
+ 442.725,621.413 442.438,621.413 442.293,621.271 442.148,621.271 442.006,621.126 441.141,621.126 440.998,621.271
+ 440.709,621.271 440.564,621.413 440.422,621.558 440.277,621.558 440.131,621.702 439.99,621.847 439.99,621.989 439.846,622.134
+ 439.701,622.278 439.701,622.565 439.557,622.71 439.557,622.997 "/>
+ <polyline id="polyline7164" points="521.494,650.935 521.494,651.511 521.639,651.653 521.639,651.94 521.781,652.087
+ 521.781,652.229 521.926,652.229 521.926,652.374 522.068,652.517 522.211,652.517 522.211,652.661 522.357,652.661
+ 522.502,652.806 522.646,652.948 522.934,652.948 523.076,653.095 523.941,653.095 524.084,652.948 524.23,652.948
+ 524.373,652.806 524.662,652.806 524.662,652.661 524.807,652.517 524.949,652.517 524.949,652.374 525.094,652.374
+ 525.094,652.229 525.238,652.087 525.238,651.94 525.379,651.94 525.379,651.653 525.525,651.511 525.525,650.646 525.379,650.503
+ 525.379,650.214 525.238,650.214 525.238,650.067 525.094,649.927 525.094,649.78 524.949,649.78 524.949,649.638 524.807,649.493
+ 524.662,649.493 524.662,649.349 524.373,649.349 524.23,649.206 524.084,649.206 523.941,649.062 523.076,649.062
+ 522.934,649.206 522.646,649.206 522.502,649.349 522.357,649.493 522.211,649.493 522.068,649.638 521.926,649.78
+ 521.926,649.927 521.781,650.067 521.639,650.214 521.639,650.503 521.494,650.646 521.494,650.935 "/>
+ <polyline id="polyline7166" points="722.662,-134.728 722.662,-134.152 722.807,-134.008 722.807,-133.72 722.949,-133.576
+ 722.949,-133.432 723.094,-133.432 723.094,-133.289 723.236,-133.144 723.379,-133.144 723.379,-133 723.525,-133
+ 723.67,-132.856 723.814,-132.712 724.102,-132.712 724.244,-132.568 725.109,-132.568 725.252,-132.712 725.398,-132.712
+ 725.541,-132.856 725.83,-132.856 725.83,-133 725.973,-133.144 726.117,-133.144 726.117,-133.289 726.262,-133.289
+ 726.262,-133.432 726.406,-133.576 726.406,-133.72 726.547,-133.72 726.547,-134.008 726.693,-134.152 726.693,-135.016
+ 726.547,-135.16 726.547,-135.448 726.406,-135.448 726.406,-135.592 726.262,-135.736 726.262,-135.88 726.117,-135.88
+ 726.117,-136.024 725.973,-136.168 725.83,-136.168 725.83,-136.312 725.541,-136.312 725.398,-136.457 725.252,-136.457
+ 725.109,-136.6 724.244,-136.6 724.102,-136.457 723.814,-136.457 723.67,-136.312 723.525,-136.168 723.379,-136.168
+ 723.236,-136.024 723.094,-135.88 723.094,-135.736 722.949,-135.592 722.807,-135.448 722.807,-135.16 722.662,-135.016
+ 722.662,-134.728 "/>
+ <polyline id="polyline7168" points="628.486,733.013 628.486,733.589 628.627,733.735 628.627,734.022 628.773,734.165
+ 628.773,734.31 628.916,734.31 628.916,734.454 629.061,734.597 629.205,734.597 629.205,734.741 629.35,734.741 629.494,734.886
+ 629.639,735.03 629.926,735.03 630.068,735.173 630.934,735.173 631.076,735.03 631.223,735.03 631.365,734.886 631.654,734.886
+ 631.654,734.741 631.795,734.597 631.941,734.597 631.941,734.454 632.084,734.454 632.084,734.31 632.23,734.165 632.23,734.022
+ 632.373,734.022 632.373,733.735 632.518,733.589 632.518,732.726 632.373,732.581 632.373,732.294 632.23,732.294 632.23,732.149
+ 632.084,732.005 632.084,731.862 631.941,731.862 631.941,731.718 631.795,731.571 631.654,731.571 631.654,731.431
+ 631.365,731.431 631.223,731.286 631.076,731.286 630.934,731.142 630.068,731.142 629.926,731.286 629.639,731.286
+ 629.494,731.431 629.35,731.571 629.205,731.571 628.916,731.862 628.916,732.005 628.773,732.149 628.627,732.294
+ 628.627,732.581 628.486,732.726 628.486,733.013 "/>
+ <polyline id="polyline7170" points="668.084,700.325 668.084,700.899 668.229,701.046 668.229,701.333 668.373,701.478
+ 668.373,701.622 668.518,701.622 668.518,701.765 668.662,701.909 668.807,701.909 668.807,702.054 668.949,702.054
+ 669.094,702.194 669.236,702.341 669.525,702.341 669.67,702.483 670.533,702.483 670.678,702.341 670.822,702.341
+ 670.963,702.194 671.252,702.194 671.252,702.054 671.398,701.909 671.541,701.909 671.541,701.765 671.686,701.765
+ 671.686,701.622 671.83,701.478 671.83,701.333 671.973,701.333 671.973,701.046 672.117,700.899 672.117,700.038 671.973,699.894
+ 671.973,699.604 671.83,699.604 671.83,699.462 671.686,699.317 671.686,699.173 671.541,699.173 671.541,699.03 671.398,698.886
+ 671.252,698.886 671.252,698.741 670.963,698.741 670.822,698.597 670.678,698.597 670.533,698.454 669.67,698.454
+ 669.525,698.597 669.236,698.597 668.949,698.886 668.807,698.886 668.662,699.03 668.518,699.173 668.518,699.317
+ 668.373,699.462 668.229,699.604 668.229,699.894 668.084,700.038 668.084,700.325 "/>
+ <polyline id="polyline7172" points="681.621,627.317 681.621,627.894 681.766,628.038 681.766,628.325 681.908,628.47
+ 681.908,628.612 682.051,628.612 682.051,628.759 682.197,628.899 682.342,628.899 682.342,629.046 682.486,629.046
+ 682.627,629.188 682.773,629.333 683.061,629.333 683.205,629.478 684.068,629.478 684.211,629.333 684.357,629.333
+ 684.502,629.188 684.789,629.188 684.789,629.046 684.934,628.899 685.076,628.899 685.076,628.759 685.223,628.759
+ 685.223,628.612 685.365,628.47 685.365,628.325 685.51,628.325 685.51,628.038 685.654,627.894 685.654,627.03 685.51,626.886
+ 685.51,626.597 685.365,626.597 685.365,626.454 685.223,626.31 685.223,626.165 685.076,626.165 685.076,626.022 684.934,625.878
+ 684.789,625.878 684.789,625.733 684.502,625.733 684.357,625.589 684.211,625.589 684.068,625.444 683.205,625.444
+ 683.061,625.589 682.773,625.589 682.627,625.733 682.486,625.878 682.342,625.878 682.197,626.022 682.051,626.165
+ 682.051,626.31 681.908,626.454 681.766,626.597 681.766,626.886 681.621,627.03 681.621,627.317 "/>
+ <polyline id="polyline7174" points="-110.954,-20.824 -110.954,-20.249 -110.811,-20.104 -110.811,-19.816 -110.666,-19.674
+ -110.666,-19.528 -110.522,-19.528 -110.522,-19.386 -110.379,-19.24 -110.234,-19.24 -110.234,-19.098 -110.091,-19.098
+ -109.946,-18.953 -109.803,-18.808 -109.515,-18.808 -109.37,-18.665 -108.507,-18.665 -108.362,-18.808 -108.219,-18.808
+ -108.074,-18.953 -107.786,-18.953 -107.786,-19.098 -107.643,-19.24 -107.498,-19.24 -107.498,-19.386 -107.354,-19.386
+ -107.354,-19.528 -107.211,-19.674 -107.211,-19.816 -107.066,-19.816 -107.066,-20.104 -106.923,-20.249 -106.923,-21.112
+ -107.066,-21.258 -107.066,-21.544 -107.211,-21.544 -107.211,-21.688 -107.354,-21.833 -107.354,-21.976 -107.498,-21.976
+ -107.498,-22.121 -107.643,-22.266 -107.786,-22.266 -107.786,-22.408 -108.074,-22.408 -108.219,-22.554 -108.362,-22.554
+ -108.507,-22.696 -109.37,-22.696 -109.515,-22.554 -109.803,-22.554 -109.946,-22.408 -110.091,-22.266 -110.234,-22.266
+ -110.379,-22.121 -110.522,-21.976 -110.522,-21.833 -110.811,-21.544 -110.811,-21.258 -110.954,-21.112 -110.954,-20.824 "/>
+ <polyline id="polyline7176" points="-23.69,17.624 -23.69,18.198 -23.547,18.344 -23.547,18.631 -23.402,18.776 -23.402,18.919
+ -23.259,18.919 -23.259,19.064 -23.114,19.208 -22.971,19.208 -22.971,19.352 -22.826,19.352 -22.683,19.494 -22.538,19.64
+ -22.25,19.64 -22.106,19.782 -21.242,19.782 -21.099,19.64 -20.954,19.64 -20.811,19.494 -20.522,19.494 -20.522,19.352
+ -20.379,19.208 -20.234,19.208 -20.234,19.064 -20.091,19.064 -20.091,18.919 -19.946,18.776 -19.946,18.631 -19.803,18.631
+ -19.803,18.344 -19.658,18.198 -19.658,17.335 -19.803,17.192 -19.803,16.902 -19.946,16.902 -19.946,16.76 -20.091,16.614
+ -20.091,16.472 -20.234,16.472 -20.234,16.326 -20.379,16.184 -20.522,16.184 -20.522,16.04 -20.811,16.04 -20.954,15.896
+ -21.099,15.896 -21.242,15.751 -22.106,15.751 -22.25,15.896 -22.538,15.896 -22.826,16.184 -22.971,16.184 -23.114,16.326
+ -23.259,16.472 -23.259,16.614 -23.402,16.76 -23.547,16.902 -23.547,17.192 -23.69,17.335 -23.69,17.624 "/>
+ <polyline id="polyline7178" points="13.894,-67.336 13.894,-66.762 14.037,-66.617 14.037,-66.328 14.182,-66.184 14.182,-66.041
+ 14.325,-66.041 14.325,-65.896 14.47,-65.752 14.613,-65.752 14.613,-65.608 14.758,-65.608 14.901,-65.464 15.046,-65.32
+ 15.334,-65.32 15.478,-65.178 16.342,-65.178 16.485,-65.32 16.63,-65.32 16.773,-65.464 17.062,-65.464 17.062,-65.608
+ 17.205,-65.752 17.35,-65.752 17.35,-65.896 17.493,-65.896 17.493,-66.041 17.638,-66.184 17.638,-66.328 17.781,-66.328
+ 17.781,-66.617 17.926,-66.762 17.926,-67.625 17.781,-67.768 17.781,-68.058 17.638,-68.058 17.638,-68.201 17.493,-68.346
+ 17.493,-68.488 17.35,-68.488 17.35,-68.632 17.205,-68.776 17.062,-68.776 17.062,-68.92 16.773,-68.92 16.63,-69.064
+ 16.485,-69.064 16.342,-69.208 15.478,-69.208 15.334,-69.064 15.046,-69.064 14.901,-68.92 14.758,-68.776 14.613,-68.776
+ 14.47,-68.632 14.325,-68.488 14.325,-68.346 14.182,-68.201 14.037,-68.058 14.037,-67.768 13.894,-67.625 13.894,-67.336 "/>
+ <polyline id="polyline7180" points="-7.131,95.094 -7.131,95.669 -6.986,95.816 -6.986,96.104 -6.843,96.246 -6.843,96.392
+ -6.698,96.392 -6.698,96.534 -6.555,96.678 -6.41,96.678 -6.41,96.822 -6.267,96.822 -5.979,97.11 -5.69,97.11 -5.547,97.254
+ -4.683,97.254 -4.538,97.11 -4.395,97.11 -4.25,96.965 -3.963,96.965 -3.963,96.822 -3.818,96.678 -3.675,96.678 -3.675,96.534
+ -3.53,96.534 -3.53,96.392 -3.387,96.246 -3.387,96.104 -3.242,96.104 -3.242,95.816 -3.099,95.669 -3.099,94.808 -3.242,94.662
+ -3.242,94.374 -3.387,94.374 -3.387,94.232 -3.53,94.085 -3.53,93.942 -3.675,93.942 -3.675,93.799 -3.818,93.654 -3.963,93.654
+ -3.963,93.51 -4.25,93.51 -4.395,93.366 -4.538,93.366 -4.683,93.224 -5.547,93.224 -5.69,93.366 -5.979,93.366 -6.267,93.654
+ -6.41,93.654 -6.555,93.799 -6.698,93.942 -6.698,94.085 -6.843,94.232 -6.986,94.374 -6.986,94.662 -7.131,94.808 -7.131,95.094
+ "/>
+ <polyline id="polyline7182" points="-86.187,-0.665 -86.187,-0.09 -86.042,0.056 -86.042,0.344 -85.898,0.486 -85.898,0.631
+ -85.755,0.631 -85.755,0.776 -85.61,0.919 -85.467,0.919 -85.467,1.064 -85.322,1.064 -85.034,1.352 -84.746,1.352 -84.603,1.494
+ -83.738,1.494 -83.595,1.352 -83.45,1.352 -83.307,1.208 -83.019,1.208 -83.019,1.064 -82.874,0.919 -82.73,0.919 -82.73,0.776
+ -82.587,0.776 -82.587,0.631 -82.442,0.486 -82.442,0.344 -82.299,0.344 -82.299,0.056 -82.154,-0.09 -82.154,-0.953
+ -82.299,-1.098 -82.299,-1.386 -82.442,-1.386 -82.442,-1.528 -82.587,-1.674 -82.587,-1.816 -82.73,-1.816 -82.73,-1.96
+ -82.874,-2.104 -83.019,-2.104 -83.019,-2.249 -83.307,-2.249 -83.45,-2.392 -83.595,-2.392 -83.738,-2.537 -84.603,-2.537
+ -84.746,-2.392 -85.034,-2.392 -85.322,-2.104 -85.467,-2.104 -85.755,-1.816 -85.755,-1.674 -85.898,-1.528 -86.042,-1.386
+ -86.042,-1.098 -86.187,-0.953 -86.187,-0.665 "/>
+ <polyline id="polyline7184" points="-159.771,153.99 -159.771,154.568 -159.626,154.709 -159.626,154.998 -159.482,155.144
+ -159.482,155.286 -159.339,155.286 -159.339,155.43 -159.194,155.574 -159.051,155.574 -159.051,155.717 -158.906,155.717
+ -158.618,156.006 -158.33,156.006 -158.187,156.15 -157.322,156.15 -157.179,156.006 -157.034,156.006 -156.891,155.862
+ -156.603,155.862 -156.603,155.717 -156.458,155.574 -156.314,155.574 -156.314,155.43 -156.171,155.43 -156.171,155.286
+ -156.026,155.144 -156.026,154.998 -155.883,154.998 -155.883,154.709 -155.738,154.568 -155.738,153.702 -155.883,153.56
+ -155.883,153.272 -156.026,153.272 -156.026,153.125 -156.171,152.984 -156.171,152.838 -156.314,152.838 -156.314,152.694
+ -156.458,152.549 -156.603,152.549 -156.603,152.406 -156.891,152.406 -157.034,152.262 -157.179,152.262 -157.322,152.118
+ -158.187,152.118 -158.33,152.262 -158.618,152.262 -158.763,152.406 -158.906,152.549 -159.051,152.549 -159.194,152.694
+ -159.339,152.838 -159.339,152.984 -159.482,153.125 -159.626,153.272 -159.626,153.56 -159.771,153.702 -159.771,153.99 "/>
+ <polyline id="polyline7186" points="-100.299,151.83 -100.299,152.406 -100.154,152.549 -100.154,152.838 -100.011,152.984
+ -100.011,153.125 -99.866,153.125 -99.866,153.272 -99.723,153.414 -99.578,153.414 -99.578,153.56 -99.435,153.56 -99.29,153.702
+ -99.146,153.846 -98.858,153.846 -98.715,153.99 -97.851,153.99 -97.706,153.846 -97.563,153.846 -97.418,153.702 -97.131,153.702
+ -97.131,153.56 -96.986,153.414 -96.843,153.414 -96.843,153.272 -96.698,153.272 -96.698,153.125 -96.555,152.984
+ -96.555,152.838 -96.41,152.838 -96.41,152.549 -96.267,152.406 -96.267,151.542 -96.41,151.4 -96.41,151.11 -96.555,151.11
+ -96.555,150.965 -96.698,150.822 -96.698,150.678 -96.843,150.678 -96.843,150.534 -96.986,150.392 -97.131,150.392
+ -97.131,150.246 -97.418,150.246 -97.563,150.104 -97.706,150.104 -97.851,149.958 -98.715,149.958 -98.858,150.104
+ -99.146,150.104 -99.29,150.246 -99.435,150.392 -99.578,150.392 -99.723,150.534 -99.866,150.678 -99.866,150.822
+ -100.154,151.11 -100.154,151.4 -100.299,151.542 -100.299,151.83 "/>
+ <polyline id="polyline7188" points="147.813,-63.736 147.813,-63.16 147.958,-63.016 147.958,-62.728 148.102,-62.584
+ 148.102,-62.44 148.245,-62.44 148.245,-62.296 148.39,-62.152 148.533,-62.152 148.533,-62.008 148.678,-62.008 148.966,-61.72
+ 149.254,-61.72 149.397,-61.576 150.262,-61.576 150.405,-61.72 150.55,-61.72 150.693,-61.864 150.981,-61.864 150.981,-62.008
+ 151.126,-62.152 151.27,-62.152 151.27,-62.296 151.413,-62.296 151.413,-62.44 151.558,-62.584 151.558,-62.728 151.701,-62.728
+ 151.701,-63.016 151.846,-63.16 151.846,-64.024 151.701,-64.168 151.701,-64.457 151.558,-64.457 151.558,-64.6 151.413,-64.744
+ 151.413,-64.888 151.27,-64.888 151.27,-65.033 151.126,-65.178 150.981,-65.178 150.981,-65.32 150.693,-65.32 150.55,-65.464
+ 150.405,-65.464 150.262,-65.608 149.397,-65.608 149.254,-65.464 148.966,-65.464 148.821,-65.32 148.678,-65.178
+ 148.533,-65.178 148.39,-65.033 148.245,-64.888 148.245,-64.744 148.102,-64.6 147.958,-64.457 147.958,-64.168 147.813,-64.024
+ 147.813,-63.736 "/>
+ <polyline id="polyline7190" points="84.453,62.551 84.453,63.127 84.598,63.272 84.598,63.56 84.741,63.702 84.741,63.848
+ 84.886,63.848 84.886,63.99 85.029,64.136 85.174,64.136 85.174,64.278 85.317,64.278 85.462,64.422 85.605,64.568 85.894,64.568
+ 86.037,64.711 86.901,64.711 87.046,64.568 87.189,64.568 87.334,64.422 87.621,64.422 87.621,64.278 87.766,64.136 87.909,64.136
+ 87.909,63.99 88.054,63.99 88.054,63.848 88.197,63.702 88.197,63.56 88.342,63.56 88.342,63.272 88.485,63.127 88.485,62.264
+ 88.342,62.118 88.342,61.83 88.197,61.83 88.197,61.688 88.054,61.542 88.054,61.4 87.909,61.4 87.909,61.254 87.766,61.11
+ 87.621,61.11 87.621,60.967 87.334,60.967 87.189,60.822 87.046,60.822 86.901,60.68 86.037,60.68 85.894,60.822 85.605,60.822
+ 85.462,60.967 85.317,61.11 85.174,61.11 85.029,61.254 84.886,61.4 84.886,61.542 84.741,61.688 84.598,61.83 84.598,62.118
+ 84.453,62.264 84.453,62.551 "/>
+ <polyline id="polyline7192" points="33.189,-9.306 33.189,-8.728 33.334,-8.586 33.334,-8.296 33.478,-8.152 33.478,-8.01
+ 33.621,-8.01 33.621,-7.864 33.766,-7.722 33.909,-7.722 33.909,-7.576 34.054,-7.576 34.197,-7.432 34.342,-7.289 34.63,-7.289
+ 34.773,-7.144 35.638,-7.144 35.781,-7.289 35.926,-7.289 36.069,-7.432 36.357,-7.432 36.357,-7.576 36.502,-7.722 36.646,-7.722
+ 36.646,-7.864 36.789,-7.864 36.789,-8.01 36.934,-8.152 36.934,-8.296 37.077,-8.296 37.077,-8.586 37.222,-8.728 37.222,-9.594
+ 37.077,-9.736 37.077,-10.024 36.934,-10.024 36.934,-10.17 36.789,-10.312 36.789,-10.457 36.646,-10.457 36.646,-10.6
+ 36.502,-10.744 36.357,-10.744 36.357,-10.89 36.069,-10.89 35.926,-11.033 35.781,-11.033 35.638,-11.178 34.773,-11.178
+ 34.63,-11.033 34.342,-11.033 34.197,-10.89 34.054,-10.744 33.909,-10.744 33.766,-10.6 33.621,-10.457 33.621,-10.312
+ 33.478,-10.17 33.334,-10.024 33.334,-9.736 33.189,-9.594 33.189,-9.306 "/>
+ <polyline id="polyline7194" points="9.43,650.935 9.43,651.511 9.573,651.653 9.573,651.94 9.718,652.087 9.718,652.229
+ 9.861,652.229 9.861,652.374 10.006,652.517 10.149,652.517 10.149,652.661 10.294,652.661 10.438,652.806 10.582,652.948
+ 10.869,652.948 11.014,653.095 11.878,653.095 12.021,652.948 12.166,652.948 12.31,652.806 12.598,652.806 12.598,652.661
+ 12.741,652.517 12.886,652.517 12.886,652.374 13.029,652.374 13.029,652.229 13.174,652.087 13.174,651.94 13.317,651.94
+ 13.317,651.653 13.462,651.511 13.462,650.646 13.317,650.503 13.317,650.214 13.174,650.214 13.174,650.067 13.029,649.927
+ 13.029,649.78 12.886,649.78 12.886,649.638 12.741,649.493 12.598,649.493 12.598,649.349 12.31,649.349 12.166,649.206
+ 12.021,649.206 11.878,649.062 11.014,649.062 10.869,649.206 10.582,649.206 10.438,649.349 10.294,649.493 10.149,649.493
+ 10.006,649.638 9.861,649.78 9.861,649.927 9.718,650.067 9.573,650.214 9.573,650.503 9.43,650.646 9.43,650.935 "/>
+ <polyline id="polyline7196" points="141.334,393.175 141.334,393.749 141.478,393.897 141.478,394.183 141.621,394.323
+ 141.621,394.472 141.766,394.472 141.766,394.612 141.909,394.759 142.054,394.759 142.054,394.901 142.197,394.901
+ 142.342,395.046 142.485,395.19 142.773,395.19 142.918,395.331 143.781,395.331 143.926,395.19 144.069,395.19 144.214,395.046
+ 144.502,395.046 144.502,394.901 144.646,394.759 144.789,394.759 144.789,394.612 144.934,394.612 144.934,394.472
+ 145.077,394.323 145.077,394.183 145.222,394.183 145.222,393.897 145.365,393.749 145.365,392.89 145.222,392.741
+ 145.222,392.454 145.077,392.454 145.077,392.312 144.934,392.163 144.934,392.022 144.789,392.022 144.789,391.878
+ 144.646,391.733 144.502,391.733 144.502,391.591 144.214,391.591 144.069,391.444 143.926,391.444 143.781,391.304
+ 142.918,391.304 142.773,391.444 142.485,391.444 142.342,391.591 142.197,391.733 142.054,391.733 141.766,392.022
+ 141.766,392.163 141.621,392.312 141.478,392.454 141.478,392.741 141.334,392.89 141.334,393.175 "/>
+ <polyline id="polyline7198" points="58.678,408.438 58.678,409.015 58.821,409.155 58.821,409.444 58.966,409.591 58.966,409.733
+ 59.109,409.733 59.109,409.878 59.254,410.022 59.397,410.022 59.397,410.163 59.542,410.163 59.686,410.312 59.829,410.454
+ 60.117,410.454 60.262,410.599 61.126,410.599 61.27,410.454 61.413,410.454 61.558,410.312 61.846,410.312 61.846,410.163
+ 61.989,410.022 62.134,410.022 62.134,409.878 62.277,409.878 62.277,409.733 62.422,409.591 62.422,409.444 62.565,409.444
+ 62.565,409.155 62.71,409.015 62.71,408.151 62.565,408.007 62.565,407.722 62.422,407.722 62.422,407.573 62.277,407.431
+ 62.277,407.286 62.134,407.286 62.134,407.144 61.989,406.995 61.846,406.995 61.846,406.854 61.558,406.854 61.413,406.71
+ 61.27,406.71 61.126,406.569 60.262,406.569 60.117,406.71 59.829,406.71 59.686,406.854 59.542,406.995 59.397,406.995
+ 59.254,407.144 59.109,407.286 59.109,407.431 58.966,407.573 58.821,407.722 58.821,408.007 58.678,408.151 58.678,408.438 "/>
+ <polyline id="polyline7200" points="208.726,468.63 208.726,469.206 208.869,469.351 208.869,469.64 209.014,469.782
+ 209.014,469.927 209.157,469.927 209.157,470.069 209.302,470.214 209.445,470.214 209.445,470.358 209.59,470.358
+ 209.733,470.499 209.878,470.647 210.166,470.647 210.31,470.79 211.174,470.79 211.317,470.647 211.462,470.647 211.605,470.499
+ 211.894,470.499 211.894,470.358 212.037,470.214 212.182,470.214 212.182,470.069 212.325,470.069 212.325,469.927
+ 212.47,469.782 212.47,469.64 212.613,469.64 212.613,469.351 212.758,469.206 212.758,468.341 212.613,468.198 212.613,467.909
+ 212.47,467.909 212.47,467.767 212.325,467.622 212.325,467.479 212.182,467.479 212.182,467.331 212.037,467.19 211.894,467.19
+ 211.894,467.046 211.605,467.046 211.462,466.901 211.317,466.901 211.174,466.759 210.31,466.759 210.166,466.901
+ 209.878,466.901 209.59,467.19 209.445,467.19 209.302,467.331 209.157,467.479 209.157,467.622 208.869,467.909 208.869,468.198
+ 208.726,468.341 208.726,468.63 "/>
+ <polyline id="polyline7202" points="-82.011,666.63 -82.011,667.206 -81.866,667.349 -81.866,667.638 -81.723,667.78
+ -81.723,667.927 -81.578,667.927 -81.578,668.067 -81.435,668.214 -81.29,668.214 -81.29,668.356 -81.146,668.356 -81.003,668.503
+ -80.858,668.646 -80.57,668.646 -80.427,668.79 -79.563,668.79 -79.418,668.646 -79.274,668.646 -79.131,668.503 -78.843,668.503
+ -78.843,668.356 -78.698,668.214 -78.555,668.214 -78.555,668.067 -78.41,668.067 -78.41,667.927 -78.267,667.78 -78.267,667.638
+ -78.122,667.638 -78.122,667.349 -77.979,667.206 -77.979,666.341 -78.122,666.194 -78.122,665.909 -78.267,665.909
+ -78.267,665.765 -78.41,665.622 -78.41,665.478 -78.555,665.478 -78.555,665.333 -78.698,665.188 -78.843,665.188 -78.843,665.046
+ -79.131,665.046 -79.274,664.899 -79.418,664.899 -79.563,664.757 -80.427,664.757 -80.57,664.899 -80.858,664.899
+ -81.003,665.046 -81.146,665.188 -81.29,665.188 -81.435,665.333 -81.578,665.478 -81.578,665.622 -81.723,665.765
+ -81.866,665.909 -81.866,666.194 -82.011,666.341 -82.011,666.63 "/>
+ <polyline id="polyline7204" points="-36.074,578.214 -36.074,578.79 -35.931,578.935 -35.931,579.222 -35.786,579.366
+ -35.786,579.509 -35.643,579.509 -35.643,579.653 -35.498,579.798 -35.354,579.798 -35.354,579.942 -35.211,579.942
+ -34.923,580.229 -34.635,580.229 -34.49,580.374 -33.626,580.374 -33.482,580.229 -33.339,580.229 -33.194,580.087
+ -32.906,580.087 -32.906,579.942 -32.763,579.798 -32.618,579.798 -32.618,579.653 -32.475,579.653 -32.475,579.509
+ -32.33,579.366 -32.33,579.222 -32.187,579.222 -32.187,578.935 -32.042,578.79 -32.042,577.927 -32.187,577.782 -32.187,577.495
+ -32.33,577.495 -32.33,577.349 -32.475,577.206 -32.475,577.062 -32.618,577.062 -32.618,576.919 -32.763,576.772 -32.906,576.772
+ -32.906,576.63 -33.194,576.63 -33.339,576.483 -33.482,576.483 -33.626,576.341 -34.49,576.341 -34.635,576.483 -34.923,576.483
+ -35.066,576.63 -35.211,576.772 -35.354,576.772 -35.498,576.919 -35.643,577.062 -35.643,577.206 -35.786,577.349
+ -35.931,577.495 -35.931,577.782 -36.074,577.927 -36.074,578.214 "/>
+ <polyline id="polyline7206" points="131.254,631.638 131.254,632.214 131.397,632.356 131.397,632.646 131.542,632.79
+ 131.542,632.935 131.686,632.935 131.686,633.079 131.829,633.222 131.974,633.222 131.974,633.366 132.117,633.366
+ 132.262,633.509 132.405,633.653 132.693,633.653 132.838,633.798 133.701,633.798 133.846,633.653 133.989,633.653
+ 134.134,633.509 134.422,633.509 134.422,633.366 134.565,633.222 134.71,633.222 134.71,633.079 134.854,633.079 134.854,632.935
+ 134.998,632.79 134.998,632.646 135.142,632.646 135.142,632.356 135.285,632.214 135.285,631.349 135.142,631.206
+ 135.142,630.919 134.998,630.919 134.998,630.772 134.854,630.63 134.854,630.483 134.71,630.483 134.71,630.341 134.565,630.198
+ 134.422,630.198 134.422,630.054 134.134,630.054 133.989,629.911 133.846,629.911 133.701,629.765 132.838,629.765
+ 132.693,629.911 132.405,629.911 132.262,630.054 132.117,630.198 131.974,630.198 131.829,630.341 131.686,630.483
+ 131.686,630.63 131.542,630.772 131.397,630.919 131.397,631.206 131.254,631.349 131.254,631.638 "/>
+ <polyline id="polyline7208" points="551.877,-59.128 551.877,-58.552 552.021,-58.408 552.021,-58.121 552.166,-57.976
+ 552.166,-57.833 552.311,-57.833 552.311,-57.688 552.453,-57.544 552.598,-57.544 552.598,-57.4 552.74,-57.4 552.883,-57.256
+ 553.029,-57.112 553.318,-57.112 553.459,-56.968 554.324,-56.968 554.471,-57.112 554.613,-57.112 554.758,-57.256
+ 555.043,-57.256 555.043,-57.4 555.189,-57.544 555.334,-57.544 555.334,-57.688 555.479,-57.688 555.479,-57.833 555.621,-57.976
+ 555.621,-58.121 555.766,-58.121 555.766,-58.408 555.908,-58.552 555.908,-59.417 555.766,-59.56 555.766,-59.85 555.621,-59.85
+ 555.621,-59.992 555.479,-60.136 555.479,-60.28 555.334,-60.28 555.334,-60.424 555.189,-60.568 555.043,-60.568 555.043,-60.712
+ 554.758,-60.712 554.613,-60.856 554.471,-60.856 554.324,-61 553.459,-61 553.318,-60.856 553.029,-60.856 552.883,-60.712
+ 552.74,-60.568 552.598,-60.568 552.453,-60.424 552.311,-60.28 552.311,-60.136 552.166,-59.992 552.021,-59.85 552.021,-59.56
+ 551.877,-59.417 551.877,-59.128 "/>
+ <polyline id="polyline7210" points="510.877,-4.754 510.877,-4.178 511.021,-4.035 511.021,-3.746 511.166,-3.602 511.166,-3.458
+ 511.311,-3.458 511.311,-3.314 511.453,-3.17 511.598,-3.17 511.598,-3.026 511.74,-3.026 511.883,-2.882 512.029,-2.738
+ 512.318,-2.738 512.459,-2.594 513.324,-2.594 513.471,-2.738 513.613,-2.738 513.758,-2.882 514.043,-2.882 514.043,-3.026
+ 514.189,-3.17 514.334,-3.17 514.334,-3.314 514.479,-3.314 514.479,-3.458 514.621,-3.602 514.621,-3.746 514.766,-3.746
+ 514.766,-4.035 514.908,-4.178 514.908,-5.042 514.766,-5.186 514.766,-5.474 514.621,-5.474 514.621,-5.619 514.479,-5.762
+ 514.479,-5.906 514.334,-5.906 514.334,-6.05 514.189,-6.194 514.043,-6.194 514.043,-6.338 513.758,-6.338 513.613,-6.482
+ 513.471,-6.482 513.324,-6.626 512.459,-6.626 512.318,-6.482 512.029,-6.482 511.883,-6.338 511.74,-6.194 511.598,-6.194
+ 511.311,-5.906 511.311,-5.762 511.021,-5.474 511.021,-5.186 510.877,-5.042 510.877,-4.754 "/>
+ <polyline id="polyline7212" points="518.627,86.622 518.627,87.198 518.771,87.342 518.771,87.629 518.916,87.774 518.916,87.917
+ 519.061,87.917 519.061,88.062 519.203,88.206 519.348,88.206 519.348,88.35 519.49,88.35 519.633,88.494 519.779,88.638
+ 520.068,88.638 520.209,88.782 521.074,88.782 521.221,88.638 521.363,88.638 521.508,88.494 521.793,88.494 521.793,88.35
+ 521.939,88.206 522.084,88.206 522.084,88.062 522.229,88.062 522.229,87.917 522.371,87.774 522.371,87.629 522.516,87.629
+ 522.516,87.342 522.658,87.198 522.658,86.333 522.516,86.19 522.516,85.9 522.371,85.9 522.371,85.758 522.229,85.614
+ 522.229,85.47 522.084,85.47 522.084,85.326 521.939,85.182 521.793,85.182 521.793,85.038 521.508,85.038 521.363,84.894
+ 521.221,84.894 521.074,84.75 520.209,84.75 520.068,84.894 519.779,84.894 519.633,85.038 519.49,85.182 519.348,85.182
+ 519.203,85.326 519.061,85.47 519.061,85.614 518.916,85.758 518.771,85.9 518.771,86.19 518.627,86.333 518.627,86.622 "/>
+ <polyline id="polyline7214" points="490.533,-93.258 490.533,-92.682 490.678,-92.537 490.678,-92.249 490.822,-92.104
+ 490.822,-91.96 490.963,-91.96 490.963,-91.816 491.109,-91.674 491.254,-91.674 491.254,-91.528 491.398,-91.528 491.686,-91.24
+ 491.973,-91.24 492.117,-91.098 492.98,-91.098 493.125,-91.24 493.27,-91.24 493.414,-91.384 493.701,-91.384 493.701,-91.528
+ 493.846,-91.674 493.99,-91.674 493.99,-91.816 494.131,-91.816 494.131,-91.96 494.277,-92.104 494.277,-92.249 494.422,-92.249
+ 494.422,-92.537 494.564,-92.682 494.564,-93.544 494.422,-93.688 494.422,-93.976 494.277,-93.976 494.277,-94.121
+ 494.131,-94.266 494.131,-94.408 493.99,-94.408 493.99,-94.552 493.846,-94.696 493.701,-94.696 493.701,-94.842 493.414,-94.842
+ 493.27,-94.984 493.125,-94.984 492.98,-95.128 492.117,-95.128 491.973,-94.984 491.686,-94.984 491.541,-94.842 491.398,-94.696
+ 491.254,-94.696 491.109,-94.552 490.963,-94.408 490.963,-94.266 490.822,-94.121 490.678,-93.976 490.678,-93.688
+ 490.533,-93.544 490.533,-93.258 "/>
+ <polyline id="polyline7216" points="484.486,148.808 484.486,149.381 484.629,149.526 484.629,149.816 484.773,149.958
+ 484.773,150.104 484.918,150.104 484.918,150.246 485.061,150.392 485.205,150.392 485.205,150.534 485.35,150.534
+ 485.639,150.822 485.926,150.822 486.068,150.965 486.934,150.965 487.076,150.822 487.223,150.822 487.365,150.678
+ 487.654,150.678 487.654,150.534 487.795,150.392 487.941,150.392 487.941,150.246 488.086,150.246 488.086,150.104
+ 488.23,149.958 488.23,149.816 488.373,149.816 488.373,149.526 488.518,149.381 488.518,148.518 488.373,148.374 488.373,148.085
+ 488.23,148.085 488.23,147.942 488.086,147.797 488.086,147.654 487.941,147.654 487.941,147.51 487.795,147.366 487.654,147.366
+ 487.654,147.224 487.365,147.224 487.223,147.078 487.076,147.078 486.934,146.936 486.068,146.936 485.926,147.078
+ 485.639,147.078 485.494,147.224 485.35,147.366 485.205,147.366 485.061,147.51 484.918,147.654 484.918,147.797 484.773,147.942
+ 484.629,148.085 484.629,148.374 484.486,148.518 484.486,148.808 "/>
+ <polyline id="polyline7218" points="0.934,318.726 0.934,319.304 1.077,319.446 1.077,319.733 1.222,319.878 1.222,320.022
+ 1.365,320.022 1.365,320.167 1.51,320.312 1.653,320.312 1.653,320.454 1.798,320.454 2.086,320.741 2.374,320.741 2.518,320.886
+ 3.382,320.886 3.525,320.741 3.67,320.741 3.813,320.599 4.102,320.599 4.102,320.454 4.245,320.312 4.39,320.312 4.39,320.167
+ 4.533,320.167 4.533,320.022 4.678,319.878 4.678,319.733 4.821,319.733 4.821,319.446 4.966,319.304 4.966,318.438 4.821,318.294
+ 4.821,318.007 4.678,318.007 4.678,317.862 4.533,317.718 4.533,317.573 4.39,317.573 4.39,317.431 4.245,317.286 4.102,317.286
+ 4.102,317.142 3.813,317.142 3.67,316.997 3.525,316.997 3.382,316.854 2.518,316.854 2.374,316.997 2.086,316.997 1.798,317.286
+ 1.653,317.286 1.51,317.431 1.365,317.573 1.365,317.718 1.222,317.862 1.077,318.007 1.077,318.294 0.934,318.438 0.934,318.726
+ "/>
+ <polyline id="polyline7220" points="-78.41,248.31 -78.41,248.886 -78.267,249.03 -78.267,249.318 -78.122,249.461
+ -78.122,249.606 -77.979,249.606 -77.979,249.75 -77.834,249.894 -77.69,249.894 -77.69,250.038 -77.547,250.038 -77.402,250.182
+ -77.259,250.326 -76.971,250.326 -76.826,250.47 -75.963,250.47 -75.818,250.326 -75.675,250.326 -75.53,250.182 -75.242,250.182
+ -75.242,250.038 -75.099,249.894 -74.954,249.894 -74.954,249.75 -74.811,249.75 -74.811,249.606 -74.666,249.461 -74.666,249.318
+ -74.522,249.318 -74.522,249.03 -74.379,248.886 -74.379,248.022 -74.522,247.877 -74.522,247.59 -74.666,247.59 -74.666,247.446
+ -74.811,247.302 -74.811,247.158 -74.954,247.158 -74.954,247.014 -75.099,246.87 -75.242,246.87 -75.242,246.726 -75.53,246.726
+ -75.675,246.582 -75.818,246.582 -75.963,246.438 -76.826,246.438 -76.971,246.582 -77.259,246.582 -77.402,246.726
+ -77.547,246.87 -77.69,246.87 -77.834,247.014 -77.979,247.158 -77.979,247.302 -78.122,247.446 -78.267,247.59 -78.267,247.877
+ -78.41,248.022 -78.41,248.31 "/>
+ <polyline id="polyline7222" points="-148.538,490.374 -148.538,490.95 -148.395,491.095 -148.395,491.382 -148.25,491.526
+ -148.25,491.671 -148.106,491.671 -148.106,491.813 -147.963,491.958 -147.818,491.958 -147.818,492.103 -147.675,492.103
+ -147.387,492.39 -147.099,492.39 -146.954,492.534 -146.091,492.534 -145.946,492.39 -145.803,492.39 -145.658,492.247
+ -145.37,492.247 -145.37,492.103 -145.227,491.958 -145.082,491.958 -145.082,491.813 -144.938,491.813 -144.938,491.671
+ -144.795,491.526 -144.795,491.382 -144.65,491.382 -144.65,491.095 -144.507,490.95 -144.507,490.087 -144.65,489.942
+ -144.65,489.653 -144.795,489.653 -144.795,489.509 -144.938,489.366 -144.938,489.222 -145.082,489.222 -145.082,489.079
+ -145.227,488.935 -145.37,488.935 -145.37,488.79 -145.658,488.79 -145.803,488.647 -145.946,488.647 -146.091,488.501
+ -146.954,488.501 -147.099,488.647 -147.387,488.647 -147.53,488.79 -147.675,488.935 -147.818,488.935 -148.106,489.222
+ -148.106,489.366 -148.25,489.509 -148.395,489.653 -148.395,489.942 -148.538,490.087 -148.538,490.374 "/>
+ <polyline id="polyline7224" points="-189.721,323.046 -189.721,323.622 -189.578,323.767 -189.578,324.054 -189.433,324.198
+ -189.433,324.343 -189.29,324.343 -189.29,324.487 -189.146,324.63 -189.003,324.63 -189.003,324.774 -188.858,324.774
+ -188.715,324.917 -188.57,325.062 -188.282,325.062 -188.137,325.206 -187.274,325.206 -187.131,325.062 -186.986,325.062
+ -186.843,324.917 -186.553,324.917 -186.553,324.774 -186.41,324.63 -186.265,324.63 -186.265,324.487 -186.122,324.487
+ -186.122,324.343 -185.979,324.198 -185.979,324.054 -185.834,324.054 -185.834,323.767 -185.69,323.622 -185.69,322.759
+ -185.834,322.614 -185.834,322.327 -185.979,322.327 -185.979,322.183 -186.122,322.038 -186.122,321.894 -186.265,321.894
+ -186.265,321.749 -186.41,321.606 -186.553,321.606 -186.553,321.462 -186.843,321.462 -186.986,321.319 -187.131,321.319
+ -187.274,321.175 -188.137,321.175 -188.282,321.319 -188.57,321.319 -188.715,321.462 -188.858,321.606 -189.003,321.606
+ -189.146,321.749 -189.29,321.894 -189.29,322.038 -189.433,322.183 -189.578,322.327 -189.578,322.614 -189.721,322.759
+ -189.721,323.046 "/>
+ <polyline id="polyline7226" points="-92.954,633.366 -92.954,633.942 -92.811,634.087 -92.811,634.374 -92.666,634.517
+ -92.666,634.663 -92.522,634.663 -92.522,634.806 -92.379,634.95 -92.234,634.95 -92.234,635.095 -92.091,635.095 -91.946,635.235
+ -91.803,635.382 -91.515,635.382 -91.37,635.524 -90.507,635.524 -90.362,635.382 -90.219,635.382 -90.074,635.235
+ -89.786,635.235 -89.786,635.095 -89.643,634.95 -89.498,634.95 -89.498,634.806 -89.354,634.806 -89.354,634.663 -89.211,634.517
+ -89.211,634.374 -89.066,634.374 -89.066,634.087 -88.923,633.942 -88.923,633.079 -89.066,632.935 -89.066,632.646
+ -89.211,632.646 -89.211,632.501 -89.354,632.356 -89.354,632.214 -89.498,632.214 -89.498,632.067 -89.643,631.927
+ -89.786,631.927 -89.786,631.782 -90.074,631.782 -90.219,631.638 -90.362,631.638 -90.507,631.495 -91.37,631.495
+ -91.515,631.638 -91.803,631.638 -91.946,631.782 -92.091,631.927 -92.234,631.927 -92.379,632.067 -92.522,632.214
+ -92.522,632.356 -92.666,632.501 -92.811,632.646 -92.811,632.935 -92.954,633.079 -92.954,633.366 "/>
+ <polyline id="polyline7228" points="586.869,351.847 586.869,352.421 587.014,352.565 587.014,352.854 587.156,352.999
+ 587.156,353.144 587.303,353.144 587.303,353.286 587.445,353.431 587.59,353.431 587.59,353.573 587.732,353.573 587.877,353.718
+ 588.021,353.862 588.311,353.862 588.453,354.007 589.318,354.007 589.459,353.862 589.605,353.862 589.748,353.718
+ 590.037,353.718 590.037,353.573 590.182,353.431 590.324,353.431 590.324,353.286 590.471,353.286 590.471,353.144
+ 590.613,352.999 590.613,352.854 590.758,352.854 590.758,352.565 590.9,352.421 590.9,351.558 590.758,351.413 590.758,351.126
+ 590.613,351.126 590.613,350.983 590.471,350.839 590.471,350.694 590.324,350.694 590.324,350.55 590.182,350.405
+ 590.037,350.405 590.037,350.263 589.748,350.263 589.605,350.118 589.459,350.118 589.318,349.976 588.453,349.976
+ 588.311,350.118 588.021,350.118 587.877,350.263 587.732,350.405 587.59,350.405 587.445,350.55 587.303,350.694 587.303,350.839
+ 587.156,350.983 587.014,351.126 587.014,351.413 586.869,351.558 586.869,351.847 "/>
+ <polyline id="polyline7230" points="518.869,380.847 518.869,381.421 519.014,381.569 519.014,381.854 519.156,381.999
+ 519.156,382.144 519.303,382.144 519.303,382.286 519.445,382.431 519.59,382.431 519.59,382.573 519.732,382.573 519.877,382.722
+ 520.021,382.862 520.311,382.862 520.453,383.007 521.318,383.007 521.459,382.862 521.605,382.862 521.748,382.722
+ 522.037,382.722 522.037,382.573 522.182,382.431 522.324,382.431 522.324,382.286 522.471,382.286 522.471,382.144
+ 522.613,381.999 522.613,381.854 522.758,381.854 522.758,381.569 522.9,381.421 522.9,380.562 522.758,380.413 522.758,380.126
+ 522.613,380.126 522.613,379.983 522.471,379.839 522.471,379.694 522.324,379.694 522.324,379.554 522.182,379.405
+ 522.037,379.405 522.037,379.263 521.748,379.263 521.605,379.118 521.459,379.118 521.318,378.976 520.453,378.976
+ 520.311,379.118 520.021,379.118 519.877,379.263 519.732,379.405 519.59,379.405 519.445,379.554 519.303,379.694
+ 519.303,379.839 519.156,379.983 519.014,380.126 519.014,380.413 518.869,380.562 518.869,380.847 "/>
+ <polyline id="polyline7232" points="-136.154,39.366 -136.154,39.942 -136.011,40.085 -136.011,40.374 -135.866,40.52
+ -135.866,40.662 -135.723,40.662 -135.723,40.808 -135.578,40.95 -135.435,40.95 -135.435,41.096 -135.29,41.096 -135.146,41.238
+ -135.003,41.383 -134.715,41.383 -134.57,41.526 -133.706,41.526 -133.563,41.383 -133.418,41.383 -133.274,41.238
+ -132.986,41.238 -132.986,41.096 -132.843,40.95 -132.698,40.95 -132.698,40.808 -132.555,40.808 -132.555,40.662 -132.41,40.52
+ -132.41,40.374 -132.267,40.374 -132.267,40.085 -132.122,39.942 -132.122,39.078 -132.267,38.936 -132.267,38.648 -132.41,38.648
+ -132.41,38.501 -132.555,38.358 -132.555,38.215 -132.698,38.215 -132.698,38.07 -132.843,37.928 -132.986,37.928 -132.986,37.782
+ -133.274,37.782 -133.418,37.64 -133.563,37.64 -133.706,37.494 -134.57,37.494 -134.715,37.64 -135.003,37.64 -135.146,37.782
+ -135.29,37.928 -135.435,37.928 -135.578,38.07 -135.723,38.215 -135.723,38.358 -135.866,38.501 -136.011,38.648 -136.011,38.936
+ -136.154,39.078 -136.154,39.366 "/>
+ <polyline id="polyline7234" points="-177.482,129.942 -177.482,130.52 -177.339,130.662 -177.339,130.95 -177.194,131.094
+ -177.194,131.238 -177.051,131.238 -177.051,131.381 -176.906,131.526 -176.761,131.526 -176.761,131.669 -176.618,131.669
+ -176.473,131.816 -176.33,131.958 -176.042,131.958 -175.898,132.104 -175.034,132.104 -174.889,131.958 -174.746,131.958
+ -174.601,131.816 -174.314,131.816 -174.314,131.669 -174.171,131.526 -174.026,131.526 -174.026,131.381 -173.883,131.381
+ -173.883,131.238 -173.738,131.094 -173.738,130.95 -173.595,130.95 -173.595,130.662 -173.45,130.52 -173.45,129.654
+ -173.595,129.51 -173.595,129.224 -173.738,129.224 -173.738,129.078 -173.883,128.936 -173.883,128.79 -174.026,128.79
+ -174.026,128.648 -174.171,128.501 -174.314,128.501 -174.314,128.358 -174.601,128.358 -174.746,128.213 -174.889,128.213
+ -175.034,128.07 -175.898,128.07 -176.042,128.213 -176.33,128.213 -176.473,128.358 -176.618,128.501 -176.761,128.501
+ -176.906,128.648 -177.051,128.79 -177.051,128.936 -177.194,129.078 -177.339,129.224 -177.339,129.51 -177.482,129.654
+ -177.482,129.942 "/>
+ <polyline id="polyline7236" points="708.262,715.735 708.262,716.31 708.406,716.454 708.406,716.741 708.547,716.886
+ 708.547,717.03 708.693,717.03 708.693,717.173 708.838,717.317 708.98,717.317 708.98,717.462 709.125,717.462 709.27,717.604
+ 709.414,717.749 709.701,717.749 709.846,717.894 710.709,717.894 710.854,717.749 710.998,717.749 711.143,717.604
+ 711.43,717.604 711.43,717.462 711.572,717.317 711.715,717.317 711.715,717.173 711.861,717.173 711.861,717.03 712.006,716.886
+ 712.006,716.741 712.15,716.741 712.15,716.454 712.293,716.31 712.293,715.444 712.15,715.302 712.15,715.013 712.006,715.013
+ 712.006,714.87 711.861,714.726 711.861,714.581 711.715,714.581 711.715,714.438 711.572,714.294 711.43,714.294 711.43,714.149
+ 711.143,714.149 710.998,714.005 710.854,714.005 710.709,713.862 709.846,713.862 709.701,714.005 709.414,714.005
+ 709.27,714.149 709.125,714.294 708.98,714.294 708.838,714.438 708.693,714.581 708.693,714.726 708.547,714.87 708.406,715.013
+ 708.406,715.302 708.262,715.444 708.262,715.735 "/>
+ <polyline id="polyline7238" points="695.014,768.149 695.014,768.726 695.156,768.87 695.156,769.157 695.301,769.302
+ 695.301,769.444 695.445,769.444 695.445,769.589 695.59,769.735 695.732,769.735 695.732,769.878 695.877,769.878
+ 696.021,770.022 696.164,770.165 696.453,770.165 696.598,770.31 697.459,770.31 697.605,770.165 697.748,770.165 697.893,770.022
+ 698.182,770.022 698.182,769.878 698.326,769.735 698.471,769.735 698.471,769.589 698.613,769.589 698.613,769.444
+ 698.758,769.302 698.758,769.157 698.9,769.157 698.9,768.87 699.043,768.726 699.043,767.862 698.9,767.718 698.9,767.431
+ 698.758,767.431 698.758,767.286 698.613,767.142 698.613,766.997 698.471,766.997 698.471,766.854 698.326,766.708
+ 698.182,766.708 698.182,766.565 697.893,766.565 697.748,766.421 697.605,766.421 697.459,766.278 696.598,766.278
+ 696.453,766.421 696.164,766.421 696.021,766.565 695.877,766.708 695.732,766.708 695.59,766.854 695.445,766.997
+ 695.445,767.142 695.301,767.286 695.156,767.431 695.156,767.718 695.014,767.862 695.014,768.149 "/>
+ <polyline id="polyline7240" points="719.061,812.935 719.061,813.509 719.205,813.653 719.205,813.94 719.35,814.085
+ 719.35,814.229 719.494,814.229 719.494,814.372 719.639,814.517 719.781,814.517 719.781,814.661 719.926,814.661
+ 720.068,814.806 720.211,814.948 720.502,814.948 720.646,815.093 721.51,815.093 721.654,814.948 721.795,814.948
+ 721.941,814.806 722.229,814.806 722.229,814.661 722.373,814.517 722.518,814.517 722.518,814.372 722.662,814.372
+ 722.662,814.229 722.807,814.085 722.807,813.94 722.949,813.94 722.949,813.653 723.094,813.509 723.094,812.646 722.949,812.501
+ 722.949,812.214 722.807,812.214 722.807,812.067 722.662,811.925 722.662,811.78 722.518,811.78 722.518,811.638 722.373,811.493
+ 722.229,811.493 722.229,811.349 721.941,811.349 721.795,811.204 721.654,811.204 721.51,811.062 720.646,811.062
+ 720.502,811.204 720.211,811.204 720.068,811.349 719.926,811.493 719.781,811.493 719.639,811.638 719.494,811.78
+ 719.494,811.925 719.35,812.067 719.205,812.214 719.205,812.501 719.061,812.646 719.061,812.935 "/>
+ <polyline id="polyline7242" points="690.693,865.062 690.693,865.638 690.838,865.78 690.838,866.067 690.98,866.214
+ 690.98,866.356 691.125,866.356 691.125,866.501 691.27,866.646 691.414,866.646 691.414,866.788 691.557,866.788 691.701,866.933
+ 691.846,867.077 692.133,867.077 692.277,867.222 693.143,867.222 693.285,867.077 693.43,867.077 693.572,866.933
+ 693.861,866.933 693.861,866.788 694.006,866.646 694.15,866.646 694.15,866.501 694.293,866.501 694.293,866.356 694.438,866.214
+ 694.438,866.067 694.582,866.067 694.582,865.78 694.725,865.638 694.725,864.772 694.582,864.63 694.582,864.341 694.438,864.341
+ 694.438,864.194 694.293,864.054 694.293,863.909 694.15,863.909 694.15,863.765 694.006,863.622 693.861,863.622 693.861,863.478
+ 693.572,863.478 693.43,863.333 693.285,863.333 693.143,863.188 692.277,863.188 692.133,863.333 691.846,863.333
+ 691.701,863.478 691.557,863.622 691.414,863.622 691.27,863.765 691.125,863.909 691.125,864.054 690.98,864.194 690.838,864.341
+ 690.838,864.63 690.693,864.772 690.693,865.062 "/>
+ <polyline id="polyline7244" points="633.094,855.269 633.094,855.845 633.238,855.989 633.238,856.278 633.379,856.421
+ 633.379,856.565 633.525,856.565 633.525,856.708 633.67,856.853 633.814,856.853 633.814,856.997 633.957,856.997
+ 634.102,857.142 634.246,857.286 634.533,857.286 634.678,857.429 635.541,857.429 635.686,857.286 635.83,857.286
+ 635.973,857.142 636.262,857.142 636.262,856.997 636.406,856.853 636.547,856.853 636.547,856.708 636.693,856.708
+ 636.693,856.565 636.838,856.421 636.838,856.278 636.98,856.278 636.98,855.989 637.125,855.845 637.125,854.981 636.98,854.837
+ 636.98,854.548 636.838,854.548 636.838,854.403 636.693,854.261 636.693,854.118 636.547,854.118 636.547,853.974
+ 636.406,853.829 636.262,853.829 636.262,853.685 635.973,853.685 635.83,853.54 635.686,853.54 635.541,853.397 634.678,853.397
+ 634.533,853.54 634.246,853.54 634.102,853.685 633.957,853.829 633.814,853.829 633.67,853.974 633.525,854.118 633.525,854.261
+ 633.379,854.403 633.238,854.548 633.238,854.837 633.094,854.981 633.094,855.269 "/>
+ <polyline id="polyline7246" points="608.758,45.848 608.758,46.422 608.9,46.568 608.9,46.856 609.043,46.998 609.043,47.144
+ 609.189,47.144 609.189,47.286 609.332,47.432 609.479,47.432 609.479,47.574 609.621,47.574 609.766,47.72 609.908,47.862
+ 610.197,47.862 610.342,48.006 611.205,48.006 611.35,47.862 611.494,47.862 611.639,47.72 611.926,47.72 611.926,47.574
+ 612.068,47.432 612.211,47.432 612.211,47.286 612.357,47.286 612.357,47.144 612.502,46.998 612.502,46.856 612.646,46.856
+ 612.646,46.568 612.789,46.422 612.789,45.56 612.646,45.414 612.646,45.127 612.502,45.127 612.502,44.984 612.357,44.838
+ 612.357,44.694 612.211,44.694 612.211,44.551 612.068,44.406 611.926,44.406 611.926,44.264 611.639,44.264 611.494,44.118
+ 611.35,44.118 611.205,43.976 610.342,43.976 610.197,44.118 609.908,44.118 609.766,44.264 609.621,44.406 609.479,44.406
+ 609.189,44.694 609.189,44.838 608.9,45.127 608.9,45.414 608.758,45.56 608.758,45.848 "/>
+ <polyline id="polyline7248" points="10.149,-126.232 10.149,-125.656 10.294,-125.512 10.294,-125.224 10.438,-125.081
+ 10.438,-124.936 10.582,-124.936 10.582,-124.792 10.726,-124.648 10.869,-124.648 10.869,-124.504 11.014,-124.504
+ 11.302,-124.216 11.59,-124.216 11.733,-124.072 12.598,-124.072 12.741,-124.216 12.886,-124.216 13.029,-124.36 13.317,-124.36
+ 13.317,-124.504 13.462,-124.648 13.605,-124.648 13.605,-124.792 13.75,-124.792 13.75,-124.936 13.894,-125.081 13.894,-125.224
+ 14.037,-125.224 14.037,-125.512 14.182,-125.656 14.182,-126.52 14.037,-126.665 14.037,-126.953 13.894,-126.953
+ 13.894,-127.098 13.75,-127.24 13.75,-127.384 13.605,-127.384 13.605,-127.528 13.462,-127.672 13.317,-127.672 13.317,-127.816
+ 13.029,-127.816 12.886,-127.96 12.741,-127.96 12.598,-128.104 11.733,-128.104 11.59,-127.96 11.302,-127.96 11.157,-127.816
+ 11.014,-127.672 10.869,-127.672 10.726,-127.528 10.582,-127.384 10.582,-127.24 10.438,-127.098 10.294,-126.953
+ 10.294,-126.665 10.149,-126.52 10.149,-126.232 "/>
+ <polyline id="polyline7250" points="54.502,-123.352 54.502,-122.776 54.646,-122.632 54.646,-122.344 54.789,-122.201
+ 54.789,-122.058 54.934,-122.058 54.934,-121.912 55.077,-121.768 55.222,-121.768 55.222,-121.625 55.365,-121.625
+ 55.653,-121.336 55.941,-121.336 56.086,-121.192 56.949,-121.192 57.094,-121.336 57.237,-121.336 57.382,-121.48 57.67,-121.48
+ 57.67,-121.625 57.813,-121.768 57.958,-121.768 57.958,-121.912 58.102,-121.912 58.102,-122.058 58.245,-122.201
+ 58.245,-122.344 58.39,-122.344 58.39,-122.632 58.533,-122.776 58.533,-123.642 58.39,-123.785 58.39,-124.072 58.245,-124.072
+ 58.245,-124.216 58.102,-124.36 58.102,-124.504 57.958,-124.504 57.958,-124.648 57.813,-124.792 57.67,-124.792 57.67,-124.936
+ 57.382,-124.936 57.237,-125.081 57.094,-125.081 56.949,-125.224 56.086,-125.224 55.941,-125.081 55.653,-125.081
+ 55.51,-124.936 55.365,-124.792 55.222,-124.792 55.077,-124.648 54.934,-124.504 54.934,-124.36 54.646,-124.072 54.646,-123.785
+ 54.502,-123.642 54.502,-123.352 "/>
+ <polyline id="polyline7252" points="-11.019,-53.944 -11.019,-53.369 -10.874,-53.224 -10.874,-52.936 -10.73,-52.792
+ -10.73,-52.648 -10.587,-52.648 -10.587,-52.506 -10.442,-52.36 -10.299,-52.36 -10.299,-52.216 -10.154,-52.216 -10.011,-52.072
+ -9.866,-51.93 -9.578,-51.93 -9.435,-51.785 -8.57,-51.785 -8.427,-51.93 -8.282,-51.93 -8.139,-52.072 -7.851,-52.072
+ -7.851,-52.216 -7.706,-52.36 -7.563,-52.36 -7.563,-52.506 -7.418,-52.506 -7.418,-52.648 -7.274,-52.792 -7.274,-52.936
+ -7.131,-52.936 -7.131,-53.224 -6.986,-53.369 -6.986,-54.232 -7.131,-54.376 -7.131,-54.665 -7.274,-54.665 -7.274,-54.808
+ -7.418,-54.953 -7.418,-55.098 -7.563,-55.098 -7.563,-55.24 -7.706,-55.384 -7.851,-55.384 -7.851,-55.528 -8.139,-55.528
+ -8.282,-55.672 -8.427,-55.672 -8.57,-55.816 -9.435,-55.816 -9.578,-55.672 -9.866,-55.672 -10.011,-55.528 -10.154,-55.384
+ -10.299,-55.384 -10.442,-55.24 -10.587,-55.098 -10.587,-54.953 -10.874,-54.665 -10.874,-54.376 -11.019,-54.232
+ -11.019,-53.944 "/>
+ <polyline id="polyline7254" points="305.205,9.704 305.205,10.278 305.35,10.424 305.35,10.711 305.492,10.856 305.492,11
+ 305.641,11 305.641,11.144 305.781,11.288 305.926,11.288 305.926,11.432 306.066,11.432 306.215,11.574 306.357,11.72
+ 306.645,11.72 306.789,11.862 307.652,11.862 307.797,11.72 307.941,11.72 308.086,11.574 308.373,11.574 308.373,11.432
+ 308.518,11.288 308.66,11.288 308.66,11.144 308.809,11.144 308.809,11 308.949,10.856 308.949,10.711 309.094,10.711
+ 309.094,10.424 309.238,10.278 309.238,9.414 309.094,9.272 309.094,8.984 308.949,8.984 308.949,8.84 308.809,8.694
+ 308.809,8.551 308.66,8.551 308.66,8.406 308.518,8.264 308.373,8.264 308.373,8.12 308.086,8.12 307.941,7.976 307.797,7.976
+ 307.652,7.83 306.789,7.83 306.645,7.976 306.357,7.976 306.215,8.12 306.066,8.264 305.926,8.264 305.781,8.406 305.641,8.551
+ 305.641,8.694 305.492,8.84 305.35,8.984 305.35,9.272 305.205,9.414 305.205,9.704 "/>
+ <polyline id="polyline7256" points="-131.834,364.663 -131.834,365.237 -131.69,365.386 -131.69,365.671 -131.547,365.815
+ -131.547,365.958 -131.402,365.958 -131.402,366.103 -131.259,366.245 -131.114,366.245 -131.114,366.39 -130.971,366.39
+ -130.683,366.679 -130.395,366.679 -130.25,366.819 -129.387,366.819 -129.242,366.679 -129.099,366.679 -128.954,366.534
+ -128.666,366.534 -128.666,366.39 -128.522,366.245 -128.379,366.245 -128.379,366.103 -128.234,366.103 -128.234,365.958
+ -128.091,365.815 -128.091,365.671 -127.946,365.671 -127.946,365.386 -127.803,365.237 -127.803,364.376 -127.946,364.229
+ -127.946,363.942 -128.091,363.942 -128.091,363.798 -128.234,363.655 -128.234,363.511 -128.379,363.511 -128.379,363.366
+ -128.522,363.222 -128.666,363.222 -128.666,363.077 -128.954,363.077 -129.099,362.935 -129.242,362.935 -129.387,362.79
+ -130.25,362.79 -130.395,362.935 -130.683,362.935 -130.826,363.077 -130.971,363.222 -131.114,363.222 -131.259,363.366
+ -131.402,363.511 -131.402,363.655 -131.547,363.798 -131.69,363.942 -131.69,364.229 -131.834,364.376 -131.834,364.663 "/>
+ <polyline id="polyline7258" points="359.492,651.798 359.492,652.374 359.641,652.517 359.641,652.806 359.781,652.948
+ 359.781,653.095 359.926,653.095 359.926,653.235 360.066,653.382 360.215,653.382 360.215,653.524 360.357,653.524
+ 360.502,653.671 360.645,653.813 360.934,653.813 361.074,653.958 361.941,653.958 362.086,653.813 362.23,653.813
+ 362.373,653.671 362.662,653.671 362.662,653.524 362.807,653.382 362.949,653.382 362.949,653.235 363.094,653.235
+ 363.094,653.095 363.238,652.948 363.238,652.806 363.379,652.806 363.379,652.517 363.525,652.374 363.525,651.511
+ 363.379,651.364 363.379,651.077 363.238,651.077 363.238,650.935 363.094,650.79 363.094,650.646 362.949,650.646
+ 362.949,650.503 362.807,650.356 362.662,650.356 362.662,650.214 362.373,650.214 362.23,650.067 362.086,650.067
+ 361.941,649.927 361.074,649.927 360.934,650.067 360.645,650.067 360.502,650.214 360.357,650.356 360.215,650.356
+ 360.066,650.503 359.926,650.646 359.926,650.79 359.781,650.935 359.641,651.077 359.641,651.364 359.492,651.511
+ 359.492,651.798 "/>
+ <g id="g7260">
+ <g id="switch7262">
+
+ <text transform="matrix(0.9924 0.1234 -0.1234 0.9924 217.0566 716.5244)" fill="#00809E" font-family="'ArialMT'" font-size="10.0004">e</text>
+ </g>
+ <g id="switch7269">
+
+ <text transform="matrix(0.9924 0.1234 -0.1234 0.9924 214.8042 716.2451)" fill="#00809E" font-family="'ArialMT'" font-size="10.0004">l</text>
+ </g>
+ <g id="switch7276">
+
+ <text transform="matrix(0.9924 0.1234 -0.1234 0.9924 209.7319 715.6152)" fill="#00809E" font-family="'ArialMT'" font-size="10.0004">c</text>
+ </g>
+ <g id="switch7283">
+
+ <text transform="matrix(0.9924 0.1234 -0.1234 0.9924 206.3521 715.1943)" fill="#00809E" font-family="'ArialMT'" font-size="10.0004">r</text>
+ </g>
+ <g id="switch7290">
+
+ <text transform="matrix(0.9924 0.1234 -0.1234 0.9924 204.1001 714.9131)" fill="#00809E" font-family="'ArialMT'" font-size="10.0004">i</text>
+ </g>
+ <g id="switch7297">
+
+ <text transform="matrix(0.9924 0.1234 -0.1234 0.9924 196.7734 714.0039)" fill="#00809E" font-family="'ArialMT'" font-size="10.0004">C</text>
+ </g>
+ </g>
+ <g id="g7304">
+ <g id="switch7306">
+
+ <text transform="matrix(0.9741 0.2262 -0.2262 0.9741 181.7002 711.4326)" fill="#00809E" font-family="'ArialMT'" font-size="10.0002">c</text>
+ </g>
+ <g id="switch7313">
+
+ <text transform="matrix(0.9741 0.2262 -0.2262 0.9741 179.4907 710.917)" fill="#00809E" font-family="'ArialMT'" font-size="10.0002">i</text>
+ </g>
+ <g id="switch7320">
+
+ <text transform="matrix(0.9741 0.2262 -0.2262 0.9741 176.7207 710.2744)" fill="#00809E" font-family="'ArialMT'" font-size="10.0002">t</text>
+ </g>
+ <g id="switch7327">
+
+ <text transform="matrix(0.9741 0.2262 -0.2262 0.9741 171.7422 709.1182)" fill="#00809E" font-family="'ArialMT'" font-size="10.0002">c</text>
+ </g>
+ <g id="switch7334">
+
+ <text transform="matrix(0.9741 0.2262 -0.2262 0.9741 168.4258 708.3486)" fill="#00809E" font-family="'ArialMT'" font-size="10.0002">r</text>
+ </g>
+ <g id="switch7341">
+
+ <text transform="matrix(0.9741 0.2262 -0.2262 0.9741 161.7822 706.8057)" fill="#00809E" font-family="'ArialMT'" font-size="10.0002">A</text>
+ </g>
+ </g>
+ <g id="switch7348">
+
+ <text transform="matrix(0.9998 -0.0174 0.0174 0.9998 585.8633 927.5576)" fill="#00809E" font-family="'ArialMT'" font-size="9.9995">30</text>
+ </g>
+ <g id="switch7355">
+
+ <text transform="matrix(0.9998 -0.0174 0.0174 0.9998 -93.6782 927.7061)" fill="#00809E" font-family="'ArialMT'" font-size="9.9995">30</text>
+ </g>
+ <g id="g7362">
+ <g id="switch7364">
+
+ <text transform="matrix(0.7001 -0.7141 0.7141 0.7001 597.4717 688.0586)" fill="#00809E" font-family="'ArialMT'" font-size="10.0004">0</text>
+ </g>
+ <g id="switch7371">
+
+ <text transform="matrix(0.7001 -0.7141 0.7141 0.7001 593.4932 692.1191)" fill="#00809E" font-family="'ArialMT'" font-size="10.0004">6</text>
+ </g>
+ </g>
+ <g id="g7378">
+ <g id="switch7380">
+
+ <text transform="matrix(0.7285 -0.685 0.685 0.7285 482.5801 575.9023)" fill="#00809E" font-family="'ArialMT'" font-size="9.9997">0</text>
+ </g>
+ <g id="switch7387">
+
+ <text transform="matrix(0.7285 -0.685 0.685 0.7285 478.4395 579.7959)" fill="#00809E" font-family="'ArialMT'" font-size="9.9997">7</text>
+ </g>
+ </g>
+ <g id="switch7394">
+
+ <text transform="matrix(0.9998 -0.0174 0.0174 0.9998 736.4863 625.0117)" fill="#00809E" font-family="'ArialMT'" font-size="9.9995">60</text>
+ </g>
+ <g id="g7401">
+ <g id="switch7403">
+
+ <text transform="matrix(0.754 -0.6569 0.6569 0.754 704.0537 803.2959)" fill="#00809E" font-family="'ArialMT'" font-size="10.0002">0</text>
+ </g>
+ <g id="switch7410">
+
+ <text transform="matrix(0.754 -0.6569 0.6569 0.754 699.7666 807.0293)" fill="#00809E" font-family="'ArialMT'" font-size="10.0002">5</text>
+ </g>
+ </g>
+ <g id="g7417">
+ <g id="switch7419">
+
+ <text transform="matrix(0.9672 0.2539 -0.2539 0.9672 361.2617 -32.4834)" fill="#00809E" font-family="'ArialMT'" font-size="9.9997">e</text>
+ </g>
+ <g id="switch7426">
+
+ <text transform="matrix(0.9672 0.2539 -0.2539 0.9672 359.0664 -33.0596)" fill="#00809E" font-family="'ArialMT'" font-size="9.9997">l</text>
+ </g>
+ <g id="switch7433">
+
+ <text transform="matrix(0.9672 0.2539 -0.2539 0.9672 354.124 -34.3584)" fill="#00809E" font-family="'ArialMT'" font-size="9.9997">c</text>
+ </g>
+ <g id="switch7440">
+
+ <text transform="matrix(0.9672 0.2539 -0.2539 0.9672 350.8301 -35.2217)" fill="#00809E" font-family="'ArialMT'" font-size="9.9997">r</text>
+ </g>
+ <g id="switch7447">
+
+ <text transform="matrix(0.9672 0.2539 -0.2539 0.9672 348.6348 -35.7979)" fill="#00809E" font-family="'ArialMT'" font-size="9.9997">i</text>
+ </g>
+ <g id="switch7454">
+
+ <text transform="matrix(0.9672 0.2539 -0.2539 0.9672 341.4941 -37.6729)" fill="#00809E" font-family="'ArialMT'" font-size="9.9997">C</text>
+ </g>
+ </g>
+ <g id="g7461">
+ <g id="switch7463">
+
+ <text transform="matrix(0.9865 0.1639 -0.164 0.9865 327.2471 -41.3755)" fill="#00809E" font-family="'ArialMT'" font-size="10.0004">c</text>
+ </g>
+ <g id="switch7470">
+
+ <text transform="matrix(0.9865 0.1639 -0.164 0.9865 325.0088 -41.748)" fill="#00809E" font-family="'ArialMT'" font-size="10.0004">i</text>
+ </g>
+ <g id="switch7477">
+
+ <text transform="matrix(0.9865 0.1639 -0.164 0.9865 322.2051 -42.2129)" fill="#00809E" font-family="'ArialMT'" font-size="10.0004">t</text>
+ </g>
+ <g id="switch7484">
+
+ <text transform="matrix(0.9865 0.1639 -0.164 0.9865 317.1602 -43.0532)" fill="#00809E" font-family="'ArialMT'" font-size="10.0004">c</text>
+ </g>
+ <g id="switch7491">
+
+ <text transform="matrix(0.9865 0.1639 -0.164 0.9865 313.8037 -43.6099)" fill="#00809E" font-family="'ArialMT'" font-size="10.0004">r</text>
+ </g>
+ <g id="switch7498">
+
+ <text transform="matrix(0.9865 0.1639 -0.164 0.9865 307.0762 -44.7285)" fill="#00809E" font-family="'ArialMT'" font-size="10.0004">A</text>
+ </g>
+ </g>
+ <g id="switch7505">
+
+ <text transform="matrix(0.9998 -0.0174 0.0174 0.9998 597.96 -271.6733)" fill="#00809E" font-family="'ArialMT'" font-size="9.9995">150</text>
+ </g>
+ <g id="switch7512">
+
+ <text transform="matrix(0.9998 -0.0174 0.0174 0.9998 730.0107 58.522)" fill="#00809E" font-family="'ArialMT'" font-size="9.9995">120</text>
+ </g>
+ <g id="switch7519">
+
+ <text transform="matrix(0.9998 -0.0174 0.0174 0.9998 242.8535 -272.6772)" fill="#00809E" font-family="'ArialMT'" font-size="9.9995">180</text>
+ </g>
+ <g id="switch7526">
+
+ <text transform="matrix(0.9998 -0.0174 0.0174 0.9998 -111.1006 -271.9565)" fill="#00809E" font-family="'ArialMT'" font-size="9.9995">150</text>
+ </g>
+ <g id="switch7533">
+
+ <text transform="matrix(0.9998 -0.0174 0.0174 0.9998 -244.3003 58.2388)" fill="#00809E" font-family="'ArialMT'" font-size="9.9995">120</text>
+ </g>
+ <g id="switch7540">
+
+ <text transform="matrix(0.9998 -0.0174 0.0174 0.9998 -244.2959 625.3125)" fill="#00809E" font-family="'ArialMT'" font-size="9.9995">60</text>
+ </g>
+ <g id="switch7547">
+ <text transform="matrix(1 0 0 1 265.3184 314.4072)" fill="#00809E" font-family="'ArialMT'" font-size="10">North</text>
+ </g>
+ <g id="switch7558">
+ <text transform="matrix(1 0 0 1 267.334 328.0869)" fill="#00809E" font-family="'ArialMT'" font-size="10">Pole</text>
+ </g>
+ <g id="g7567">
+ <g id="switch7569">
+
+ <text transform="matrix(0.7524 -0.6587 0.6587 0.7524 367.6602 460.1348)" fill="#00809E" font-family="'ArialMT'" font-size="10">0</text>
+ </g>
+ <g id="switch7576">
+
+ <text transform="matrix(0.7524 -0.6587 0.6587 0.7524 363.3828 463.8779)" fill="#00809E" font-family="'ArialMT'" font-size="10">8</text>
+ </g>
+ </g>
+ <g id="switch7583">
+
+ <text transform="matrix(0.9998 -0.0174 0.0174 0.9998 726.9805 341.333)" fill="#00809E" font-family="'ArialMT'" font-size="9.9995">90 E</text>
+ </g>
+ <g id="switch7590">
+
+ <text transform="matrix(0.9998 -0.0174 0.0174 0.9998 -242.8574 340.7656)" fill="#00809E" font-family="'ArialMT'" font-size="9.9995">90 W</text>
+ </g>
+ <g id="switch7601">
+
+ <text transform="matrix(0.9998 -0.0174 0.0174 0.9998 249.1909 926.4043)" fill="#00809E" font-family="'ArialMT'" font-size="9.9995">0</text>
+ </g>
+ <g id="g7608">
+ <g id="switch7610">
+
+ <text transform="matrix(0.9179 -0.3968 0.3968 0.9179 195.9448 187.5908)" fill="#00809E" font-family="'ArialMT'" font-size="10">0</text>
+ </g>
+ <g id="switch7617">
+
+ <text transform="matrix(0.9179 -0.3968 0.3968 0.9179 190.728 189.8467)" fill="#00809E" font-family="'ArialMT'" font-size="10">8</text>
+ </g>
+ </g>
+ <g id="g7624">
+ <g id="switch7626">
+
+ <text transform="matrix(0.9325 -0.3612 0.3612 0.9325 137.7075 34.2905)" fill="#00809E" font-family="'ArialMT'" font-size="10.0001">0</text>
+ </g>
+ <g id="switch7633">
+
+ <text transform="matrix(0.9325 -0.3612 0.3612 0.9325 132.4067 36.3438)" fill="#00809E" font-family="'ArialMT'" font-size="10.0001">7</text>
+ </g>
+ </g>
+ <g id="g7640">
+ <g id="switch7642">
+
+ <text transform="matrix(0.9209 -0.3899 0.3899 0.9209 81.481 -115.0571)" fill="#00809E" font-family="'ArialMT'" font-size="10.0004">0</text>
+ </g>
+ <g id="switch7649">
+
+ <text transform="matrix(0.9209 -0.3899 0.3899 0.9209 76.2471 -112.8389)" fill="#00809E" font-family="'ArialMT'" font-size="10.0004">6</text>
+ </g>
+ </g>
+ <g id="g7656">
+ <g id="switch7658">
+ <text transform="matrix(0.923 -0.3848 0.3848 0.923 24.0361 -259.0269)" fill="#00809E" font-family="'ArialMT'" font-size="10">0</text>
+ </g>
+ <g id="switch7665">
+ <text transform="matrix(0.923 -0.3848 0.3848 0.923 18.792 -256.8403)" fill="#00809E" font-family="'ArialMT'" font-size="10">5</text>
+ </g>
+ </g>
+
+ <path id="path7672" fill="none" stroke="#000000" stroke-width="0.3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-170.57,867.94v-4.752 M-170.57,863.188v-4.752 M-147.242,867.94v-4.752 M-156.026,863.188v-4.752"/>
+
+ <rect id="rect7674" x="-251.498" y="-288.808" fill="none" stroke="#000000" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" width="1008" height="1223.997"/>
+
+ <path id="path7676" fill="none" stroke="#000000" stroke-width="0.3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" d="
+ M-126.938,863.188h14.544 M-112.395,863.188v-4.752 M-141.482,863.188h14.544 M-126.938,863.188v-4.752 M-112.395,863.188h14.544
+ M-97.851,863.188v-4.752 M-156.026,863.188h14.544 M-141.482,863.188v-4.752 M-170.57,863.188h14.544"/>
+
+ <line id="line7678" fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="1" x1="-170.57" y1="863.188" x2="-147.242" y2="863.188"/>
+
+ <line id="line7680" fill="none" stroke="#000000" stroke-width="0.3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" x1="-124.059" y1="867.94" x2="-124.059" y2="863.188"/>
+
+ <line id="line7682" fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="1" x1="-147.387" y1="863.188" x2="-124.059" y2="863.188"/>
+
+ <line id="line7684" fill="none" stroke="#000000" stroke-width="0.3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" x1="-100.73" y1="867.94" x2="-100.73" y2="863.188"/>
+
+ <line id="line7686" fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="1" x1="-124.059" y1="863.188" x2="-100.73" y2="863.188"/>
+
+ <line id="line7688" fill="none" stroke="#000000" stroke-width="0.3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" x1="-77.402" y1="867.94" x2="-77.402" y2="863.188"/>
+
+ <line id="line7690" fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="1" x1="-100.73" y1="863.188" x2="-77.402" y2="863.188"/>
+
+ <line id="line7692" fill="none" stroke="#000000" stroke-width="0.3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1" x1="-54.074" y1="867.94" x2="-54.074" y2="863.188"/>
+
+ <line id="line7694" fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="1" x1="-77.402" y1="863.188" x2="-54.074" y2="863.188"/>
+ <g id="switch7696">
+ <text transform="matrix(1 0 0 1 -173.1611 855.9893)" font-family="'ArialMT'" font-size="10">0</text>
+ </g>
+ <g id="switch7703">
+ <text transform="matrix(1 0 0 1 -173.1611 877.0127)" font-family="'ArialMT'" font-size="10">0</text>
+ </g>
+ <g id="switch7710">
+ <text transform="matrix(1 0 0 1 -106.3457 855.2666)" font-family="'ArialMT'" font-size="10">500 Kilometers</text>
+ </g>
+ <g id="switch7723">
+ <text transform="matrix(1 0 0 1 -203.5156 840.4971)" font-family="'ArialMT'" font-size="14">Azimuthal Equal-Area Projection</text>
+ </g>
+ <g id="switch7734">
+ <text transform="matrix(1 0 0 1 -63.2891 877.1572)" font-family="'ArialMT'" font-size="10">500 Miles</text>
+ </g>
+ <g id="switch7743">
+ <text transform="matrix(1 0 0 1 -233.4385 910.8721)" fill="#FF0000" font-family="'ArialMT'" font-size="12"> average temperature for the warmest month is below 10ºC.</text>
+ </g>
+ <g id="switch7782">
+ <text transform="matrix(1 0 0 1 -225.0449 898.8135)" fill="#FF0000" font-family="'ArialMT'" font-size="12">The Arctic region is often defined as that area where the</text>
+ </g>
+ <g id="switch7809">
+ <text transform="matrix(1 0 0 1 -245.9746 -292.2861)" font-family="'ArialMT'" font-size="28">ARCTIC REGION</text>
+ </g>
+ <g id="switch7822">
+ <text transform="matrix(1 0 0 1 -166.0527 820.7939)" font-family="'ArialMT'" font-size="16">Scale 1:39,000,000</text>
+ </g>
+ <g id="switch7829">
+ <text transform="matrix(1 0 0 1 622.3457 947.0869)" font-family="'ArialMT'" font-size="12"> 802916AI (R02112) 6-02</text>
+ </g>
+</g>
+</svg>
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/sample_bbc.html b/vendor/github.com/tdewolff/minify/benchmarks/sample_bbc.html
new file mode 100644
index 0000000..c8fd2d9
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/sample_bbc.html
@@ -0,0 +1,513 @@
+
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head profile="http://dublincore.org/documents/dcq-html/"> <!-- Barlesque 2.75.0 --> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta name="description" content="Breaking news, sport, TV, radio and a whole lot more. The BBC informs, educates and entertains - wherever you are, whatever your age." /> <meta name="keywords" content="BBC, bbc.co.uk, bbc.com, Search, British Broadcasting Corporation, BBC iPlayer, BBCi" /> <meta name="DCTERMS.created" content="" /> <title>BBC - Homepage</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=8" />
+ <link rel="schema.dcterms" href="http://purl.org/dc/terms/" /> <link rel="index" href="http://www.bbc.co.uk/a-z/" title="A to Z" /> <link rel="copyright" href="http://www.bbc.co.uk/terms/" title="Terms of Use" /> <link rel="icon" href="http://www.bbc.co.uk/favicon.ico" type="image/x-icon" /> <meta name="viewport" content="width = 996" />
+
+<script type="text/javascript">window.bbcredirection={geo:true,device:true}</script><script type="text/javascript">window.orb = window.orb || {};</script>
+<script type="text/javascript">/*<![CDATA[*/
+(function(){window.fig=window.fig||{};window.fig.manager={include:function(a){a=a||window;var e=a.document,g=e.cookie,b=g.match(/(?:^|; ?)ckns_orb_fig=([^;]+)/);if(!b&&g.indexOf("ckns_orb_nofig=1")>-1){this.setFig(a,{no:1})}else{if(b){b=this.deserialise(decodeURIComponent(RegExp.$1));this.setFig(a,b)}e.write('<script src="https://ssl.bbc.co.uk/frameworks/fig/1/fig.js"><'+"/script>")}},confirm:function(a){a=a||window;if(a.orb&&a.orb.fig&&a.orb.fig("no")){this.setNoFigCookie(a)}if(a.orb===undefined||a.orb.fig===undefined){this.setFig(a,{no:1});this.setNoFigCookie(a)}},setNoFigCookie:function(a){a.document.cookie="ckns_orb_nofig=1; expires="+new Date(new Date().getTime()+1000*60*10).toGMTString()+";"},setFig:function(a,b){(function(){var c=b;a.orb=a.orb||{};a.orb.fig=function(d){return(arguments.length)?c[d]:c}})()},deserialise:function(b){var a={};b.replace(/([a-z]{2}):([0-9]+)/g,function(){a[RegExp.$1]=+RegExp.$2});return a}}})();fig.manager.include();/*]]>*/</script>
+<script type="text/javascript"> fig.manager.confirm(); </script>
+
+ <link rel="stylesheet" type="text/css" href="http://static.bbci.co.uk/frameworks/barlesque/2.75.0/desktop/3.5/style/main.css" /> <link rel="stylesheet" type="text/css" href="http://static.bbci.co.uk/wwhp/1.52.0/desktop/css/homepage-compiled.css" /> <script type="text/javascript">/*<![CDATA[*/ (function(undefined){if(!window.bbc){window.bbc={}}var ROLLING_PERIOD_DAYS=30;window.bbc.Mandolin=function(id,segments,opts){var now=new Date().getTime(),storedItem,DEFAULT_START=now,DEFAULT_RATE=1,COOKIE_NAME="ckpf_mandolin";opts=opts||{};this._id=id;this._segmentSet=segments;this._store=new window.window.bbc.Mandolin.Storage(COOKIE_NAME);this._opts=opts;this._rate=(opts.rate!==undefined)?+opts.rate:DEFAULT_RATE;this._startTs=(opts.start!==undefined)?new Date(opts.start).getTime():new Date(DEFAULT_START).getTime();this._endTs=(opts.end!==undefined)?new Date(opts.end).getTime():daysFromNow(ROLLING_PERIOD_DAYS);this._signupEndTs=(opts.signupEnd!==undefined)?new Date(opts.signupEnd).getTime():this._endTs;this._segment=null;if(typeof id!=="string"){throw new Error("Invalid Argument: id must be defined and be a string")}if(Object.prototype.toString.call(segments)!=="[object Array]"){throw new Error("Invalid Argument: Segments are required.")}if(opts.rate!==undefined&&(opts.rate<0||opts.rate>1)){throw new Error("Invalid Argument: Rate must be between 0 and 1.")}if(this._startTs>this._endTs){throw new Error("Invalid Argument: end date must occur after start date.")}if(!(this._startTs<this._signupEndTs&&this._signupEndTs<=this._endTs)){throw new Error("Invalid Argument: SignupEnd must be between start and end date")}removeExpired.call(this,now);var overrides=window.bbccookies.get().match(/ckns_mandolin_setSegments=([^;]+)/);if(overrides!==null){eval("overrides = "+decodeURIComponent(RegExp.$1)+";");if(overrides[this._id]&&this._segmentSet.indexOf(overrides[this._id])==-1){throw new Error("Invalid Override: overridden segment should exist in segments array")}}if(overrides!==null&&overrides[this._id]){this._segment=overrides[this._id]}else{if((storedItem=this._store.getItem(this._id))){this._segment=storedItem.segment}else{if(this._startTs<=now&&now<this._signupEndTs&&now<=this._endTs&&this._store.isEnabled()===true){this._segment=pick(segments,this._rate);if(opts.end===undefined){this._store.setItem(this._id,{segment:this._segment})}else{this._store.setItem(this._id,{segment:this._segment,end:this._endTs})}log.call(this,"mandolin_segment")}}}log.call(this,"mandolin_view")};window.bbc.Mandolin.prototype.getSegment=function(){return this._segment};function log(actionType,params){var that=this;require(["istats-1"],function(istats){istats.log(actionType,that._id+":"+that._segment,params?params:{})})}function removeExpired(expires){var items=this._store.getItems(),expiresInt=+expires;for(var key in items){if(items[key].end!==undefined&&+items[key].end<expiresInt){this._store.removeItem(key)}}}function getLastExpirationDate(data){var winner=0,rollingExpire=daysFromNow(ROLLING_PERIOD_DAYS);for(var key in data){if(data[key].end===undefined&&rollingExpire>winner){winner=rollingExpire}else{if(+data[key].end>winner){winner=+data[key].end}}}return(winner)?new Date(winner):new Date(rollingExpire)}window.bbc.Mandolin.prototype.log=function(params){log.call(this,"mandolin_log",params)};window.bbc.Mandolin.prototype.convert=function(params){log.call(this,"mandolin_convert",params);this.convert=function(){}};function daysFromNow(n){var endDate;endDate=new Date().getTime()+(n*60*60*24)*1000;return endDate}function pick(segments,rate){var picked,min=0,max=segments.length-1;if(typeof rate==="number"&&Math.random()>rate){return null}do{picked=Math.floor(Math.random()*(max-min+1))+min}while(picked>max);return segments[picked]}window.bbc.Mandolin.Storage=function(name){validateCookieName(name);this._cookieName=name;this._isEnabled=(bbccookies.isAllowed(this._cookieName)===true&&bbccookies.cookiesEnabled()===true)};window.bbc.Mandolin.Storage.prototype.setItem=function(key,value){var storeData=this.getItems();storeData[key]=value;this.save(storeData);return value};window.bbc.Mandolin.Storage.prototype.isEnabled=function(){return this._isEnabled};window.bbc.Mandolin.Storage.prototype.getItem=function(key){var storeData=this.getItems();return storeData[key]};window.bbc.Mandolin.Storage.prototype.removeItem=function(key){var storeData=this.getItems();delete storeData[key];this.save(storeData)};window.bbc.Mandolin.Storage.prototype.getItems=function(){return deserialise(this.readCookie(this._cookieName)||"")};window.bbc.Mandolin.Storage.prototype.save=function(data){window.bbccookies.set(this._cookieName+"="+encodeURIComponent(serialise(data))+"; expires="+getLastExpirationDate(data).toUTCString()+";")};window.bbc.Mandolin.Storage.prototype.readCookie=function(name){var nameEq=name+"=",ca=window.bbccookies.get().split("; "),i,c;validateCookieName(name);for(i=0;i<ca.length;i++){c=ca[i];if(c.indexOf(nameEq)===0){return decodeURIComponent(c.substring(nameEq.length,c.length))}}return null};function serialise(o){var str="";for(var p in o){if(o.hasOwnProperty(p)){str+='"'+p+'"'+":"+(typeof o[p]==="object"?(o[p]===null?"null":"{"+serialise(o[p])+"}"):'"'+o[p].toString()+'"')+","}}return str.replace(/,\}/g,"}").replace(/,$/g,"")}function deserialise(str){var o;str="{"+str+"}";if(!validateSerialisation(str)){throw"Invalid input provided for deserialisation."}eval("o = "+str);return o}var validateSerialisation=(function(){var OBJECT_TOKEN="<Object>",ESCAPED_CHAR='"\\n\\r\\u2028\\u2029\\u000A\\u000D\\u005C',ALLOWED_CHAR="([^"+ESCAPED_CHAR+"]|\\\\["+ESCAPED_CHAR+"])",KEY='"'+ALLOWED_CHAR+'+"',VALUE='(null|"'+ALLOWED_CHAR+'*"|'+OBJECT_TOKEN+")",KEY_VALUE=KEY+":"+VALUE,KEY_VALUE_SEQUENCE="("+KEY_VALUE+",)*"+KEY_VALUE,OBJECT_LITERAL="({}|{"+KEY_VALUE_SEQUENCE+"})",objectPattern=new RegExp(OBJECT_LITERAL,"g");return function(str){if(str.indexOf(OBJECT_TOKEN)!==-1){return false}while(str.match(objectPattern)){str=str.replace(objectPattern,OBJECT_TOKEN)}return str===OBJECT_TOKEN}})();function validateCookieName(name){if(name.match(/ ,;/)){throw"Illegal name provided, must be valid in browser cookie."}}})(); /*]]>*/</script> <script type="text/javascript">/*<![CDATA[*/ if (typeof bbccookies_flag === 'undefined') { bbccookies_flag = 'ON'; } showCTA_flag = true; cta_enabled = (showCTA_flag && (bbccookies_flag === 'ON') ); (function(){var e="ckns_policy",m="Thu, 01 Jan 1970 00:00:00 GMT",k={ads:true,personalisation:true,performance:true,necessary:true};function f(p){if(f.cache[p]){return f.cache[p]}var o=p.split("/"),q=[""];do{q.unshift((o.join("/")||"/"));o.pop()}while(q[0]!=="/");f.cache[p]=q;return q}f.cache={};function a(p){if(a.cache[p]){return a.cache[p]}var q=p.split("."),o=[];while(q.length&&"|co.uk|com|".indexOf("|"+q.join(".")+"|")===-1){if(q.length){o.push(q.join("."))}q.shift()}f.cache[p]=o;return o}a.cache={};function i(o,t,p){var z=[""].concat(a(window.location.hostname)),w=f(window.location.pathname),y="",r,x;for(var s=0,v=z.length;s<v;s++){r=z[s];for(var q=0,u=w.length;q<u;q++){x=w[q];y=o+"="+t+";"+(r?"domain="+r+";":"")+(x?"path="+x+";":"")+(p?"expires="+p+";":"");bbccookies.set(y,true)}}}window.bbccookies={_setEverywhere:i,cookiesEnabled:function(){var o="ckns_testcookie"+Math.floor(Math.random()*100000);this.set(o+"=1");if(this.get().indexOf(o)>-1){g(o);return true}return false},set:function(o){return document.cookie=o},get:function(){return document.cookie},_setPolicy:function(o){return h.apply(this,arguments)},readPolicy:function(o){return b.apply(this,arguments)},_deletePolicy:function(){i(e,"",m)},isAllowed:function(){return true},_isConfirmed:function(){return c()!==null},_acceptsAll:function(){var o=b();return o&&!(j(o).indexOf("0")>-1)},_getCookieName:function(){return d.apply(this,arguments)},_showPrompt:function(){var o=(!this._isConfirmed()&&window.cta_enabled&&this.cookiesEnabled()&&!window.bbccookies_disable);return(window.orb&&window.orb.fig)?o&&(window.orb.fig("no")||window.orb.fig("ck")):o}};bbccookies._getPolicy=bbccookies.readPolicy;function d(p){var o=(""+p).match(/^([^=]+)(?==)/);return(o&&o.length?o[0]:"")}function j(o){return""+(o.ads?1:0)+(o.personalisation?1:0)+(o.performance?1:0)}function h(r){if(typeof r==="undefined"){r=k}if(typeof arguments[0]==="string"){var o=arguments[0],q=arguments[1];if(o==="necessary"){q=true}r=b();r[o]=q}else{if(typeof arguments[0]==="object"){r.necessary=true}}var p=new Date();p.setYear(p.getFullYear()+1);p=p.toUTCString();bbccookies.set(e+"="+j(r)+";domain=bbc.co.uk;path=/;expires="+p+";");bbccookies.set(e+"="+j(r)+";domain=bbc.com;path=/;expires="+p+";");return r}function l(o){if(o===null){return null}var p=o.split("");return{ads:!!+p[0],personalisation:!!+p[1],performance:!!+p[2],necessary:true}}function c(){var o=new RegExp("(?:^|; ?)"+e+"=(\\d\\d\\d)($|;)"),p=document.cookie.match(o);if(!p){return null}return p[1]}function b(o){var p=l(c());if(!p){p=k}if(o){return p[o]}else{return p}}function g(o){return document.cookie=o+"=;expires="+m+";"}function n(){var o='<script type="text/javascript" src="http://static.bbci.co.uk/frameworks/bbccookies/0.6.6/script/bbccookies.js"><\/script>';if(window.bbccookies_flag==="ON"&&!bbccookies._acceptsAll()&&!window.bbccookies_disable){document.write(o)}}n()})(); /*]]>*/</script> <script type="text/javascript"> if (! window.gloader) { window.gloader = [ "glow", {map: "http://node1.bbcimg.co.uk/glow/glow/map.1.7.7.js"}]; } </script> <script type="text/javascript" src="http://node1.bbcimg.co.uk/glow/gloader.0.1.6.js"></script> <script type="text/javascript" src="http://static.bbci.co.uk/frameworks/requirejs/0.16.0/sharedmodules/require.js"></script> <script type="text/javascript"> bbcRequireMap = {"jquery-1":"http://static.bbci.co.uk/frameworks/jquery/0.3.0/sharedmodules/jquery-1.7.2", "jquery-1.4":"http://static.bbci.co.uk/frameworks/jquery/0.3.0/sharedmodules/jquery-1.4", "jquery-1.9":"http://static.bbci.co.uk/frameworks/jquery/0.3.0/sharedmodules/jquery-1.9.1", "swfobject-2":"http://static.bbci.co.uk/frameworks/swfobject/0.1.10/sharedmodules/swfobject-2", "demi-1":"http://static.bbci.co.uk/frameworks/demi/0.10.0/sharedmodules/demi-1", "gelui-1":"http://static.bbci.co.uk/frameworks/gelui/0.9.13/sharedmodules/gelui-1", "cssp!gelui-1/overlay":"http://static.bbci.co.uk/frameworks/gelui/0.9.13/sharedmodules/gelui-1/overlay.css", "istats-1":"http://static.bbci.co.uk/frameworks/istats/0.23.1/modules/istats-1", "relay-1":"http://static.bbci.co.uk/frameworks/relay/0.2.6/sharedmodules/relay-1", "clock-1":"http://static.bbci.co.uk/frameworks/clock/0.1.9/sharedmodules/clock-1", "canvas-clock-1":"http://static.bbci.co.uk/frameworks/clock/0.1.9/sharedmodules/canvas-clock-1", "cssp!clock-1":"http://static.bbci.co.uk/frameworks/clock/0.1.9/sharedmodules/clock-1.css", "jssignals-1":"http://static.bbci.co.uk/frameworks/jssignals/0.3.6/modules/jssignals-1", "jcarousel-1":"http://static.bbci.co.uk/frameworks/jcarousel/0.1.10/modules/jcarousel-1", "bump-3":"//emp.bbci.co.uk/emp/bump-3/bump-3", "desktop/ui/carouselfactory":"http://static.bbci.co.uk/wwhp/1.52.0/modules/desktop/ui/carouselfactory", "desktop/ui/tabs":"http://static.bbci.co.uk/wwhp/1.52.0/modules/desktop/ui/tabs", "desktop/ui/tennisresults":"http://static.bbci.co.uk/wwhp/1.52.0/modules/desktop/ui/tennisresults", "desktop/ui/videoplayer":"http://static.bbci.co.uk/wwhp/1.52.0/modules/desktop/ui/videoplayer", "desktop/ui/weather":"http://static.bbci.co.uk/wwhp/1.52.0/modules/desktop/ui/weather", "desktop/utils/date":"http://static.bbci.co.uk/wwhp/1.52.0/modules/desktop/utils/date", "desktop/utils/lazyloader":"http://static.bbci.co.uk/wwhp/1.52.0/modules/desktop/utils/lazyloader", "desktop/utils/popup":"http://static.bbci.co.uk/wwhp/1.52.0/modules/desktop/utils/popup", "homepage":"http://static.bbci.co.uk/wwhp/1.52.0/modules/homepage", "lib/external/moodular":"http://static.bbci.co.uk/wwhp/1.52.0/modules/lib/external/moodular"}; require({ baseUrl: 'http://static.bbci.co.uk/', paths: bbcRequireMap, waitSeconds: 30 }); </script> <script type="text/javascript" src="http://static.bbci.co.uk/frameworks/barlesque/2.75.0/desktop/3.5/script/barlesque.js"></script>
+
+<!--[if IE 6]>
+ <script type="text/javascript">
+ try {
+ document.execCommand("BackgroundImageCache",false,true);
+ } catch(e) {}
+ </script>
+ <style type="text/css">
+ /* Use filters for IE6 */
+ #blq-blocks a {
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='http://static.bbci.co.uk/frameworks/barlesque/2.75.0/desktop/3.5//img/blq-blocks_white_alpha.png', sizingMethod='image');
+ }
+ .blq-masthead-focus #blq-blocks a,
+ .blq-mast-text-dark #blq-blocks a {
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='http://static.bbci.co.uk/frameworks/barlesque/2.75.0/desktop/3.5//img/blq-blocks_grey_alpha.png', sizingMethod='image');
+ }
+ #blq-nav-search button span {
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='http://static.bbci.co.uk/frameworks/barlesque/2.75.0/desktop/3.5//img/blq-search_grey_alpha.png', sizingMethod='image');
+ }
+ #blq-nav-search button img {
+ position: absolute;
+ left: -999em;
+ }
+ </style>
+<![endif]-->
+
+<!--[if (IE 7])|(IE 8)>
+ <style type="text/css">
+ .blq-clearfix {
+ display: inline-block;
+ }
+ </style>
+<![endif]-->
+
+<script type="text/javascript">
+ blq.setEnvironment('live'); if (blq.setLabel) blq.setLabel('searchSuggestion', "Search"); if (! /bbc\.co\.uk$/i.test(window.location.hostname) ) { document.documentElement.className += ' blq-not-bbc-co-uk'; } </script>
+
+ <script type="text/javascript"> /*<![CDATA[*/ function oqsSurveyManager(w, flag) { var defaultThreshold = 0, usePulseThreshold = (flag === 'OFF')? 1 : defaultThreshold, activeThreshold; w.oqs = w.oqs || {}; /* we support cookie override for testing */ if ( w.document.cookie.match(/(?:^|; *)ckns_oqs_usePulseThreshold=([\d.]+)/) ) { activeThreshold = RegExp.$1; } /* we support clientside override */ else if (typeof w.oqs_usePulseThreshold !== 'undefined') { activeThreshold = w.oqs_usePulseThreshold; } else { activeThreshold = usePulseThreshold; } w.oqs.usePulse = (w.Math.random() < activeThreshold); if (!w.oqs.usePulse) { w.document.write('<script type="text/javascript" src="http://static.bbci.co.uk/frameworks/barlesque/2.75.0/desktop/3.5/script/vendor/edr.js"><'+'/script>'); } } oqsSurveyManager(window, 'ON'); /*]]>*/ </script>
+ <!-- BBCDOTCOM template: desktop journalismVariant: false ipIsAdvertiseCombined: true adsEnabled: true flagpole: ON -->
+ <script type="text/javascript">
+ /*<![CDATA[*/
+ if (window.bbcdotcom === undefined) {
+ var bbcdotcom = {
+ data: {},
+ advert: {
+ write: function () {},
+ show: function () {},
+ isActive: function () {
+ return false;
+ }
+ },
+ objects: function(str) {
+ return false;
+ }
+ };
+ }
+ bbcdotcom.objects = function (strName, action, obj) {
+ var i,
+ len,
+ args = arguments,
+ nameParts = strName.split(".");
+ if (action === undefined) {
+ action = 'valid';
+ }
+ if (obj === undefined) {
+ obj = window;
+ }
+ for (i = 0, len = nameParts.length; i < len; i++) {
+ if (obj[nameParts[i]] === undefined) {
+ if (action === 'create') {
+ obj[nameParts[i]] = {};
+ } else {
+ return false;
+ }
+ } else if (typeof obj[nameParts[i]] === 'function') {
+ if (typeof args[1] !== 'undefined' && args[1] !== null && obj[nameParts[i]](args[1]) !== undefined) {
+ return obj[nameParts[i]](args[1]);
+ } else if (obj[nameParts[i]]() !== undefined) {
+ return obj[nameParts[i]]();
+ }
+ }
+ obj = obj[nameParts[i]];
+ }
+ return obj;
+ };
+ /*]]>*/
+ </script>
+ <style type="text/css">.bbccom_display_none{display:none;}</style>
+ <script type="text/javascript">
+ /*<![CDATA[*/
+ bbcdotcom.objects('bbcdotcom.config', 'create');
+ bbcdotcom.config =(function(ads, analytics) {
+ var adsEnabled=ads,
+ analyticsEnabled=analytics,
+ jsPrefix="http://static.bbci.co.uk/bbcdotcom/0.3.289/script",
+ swfPrefix="http://static.bbci.co.uk/bbcdotcom/0.3.289/swf",
+ cssPrefix="http://static.bbci.co.uk/bbcdotcom/0.3.289/style";
+ return {
+ setAdsEnabled: function(enabled) {
+ /* Once it has been disable to not allow it to be enabled */
+ adsEnabled = (adsEnabled !== 0) ? enabled : 0;
+ },
+ isAdsEnabled: function() {
+ return adsEnabled;
+ },
+ setAnalyticsEnabled: function(enabled) {
+ /* Once it has been disable to not allow it to be enabled */
+ analyticsEnabled = (analyticsEnabled !== 0) ? enabled : 0;
+ },
+ isAnalyticsEnabled: function() {
+ return analyticsEnabled;
+ },
+ setJsPrefix: function (prefix) {
+ jsPrefix = prefix;
+ },
+ getJsPrefix: function () {
+ return jsPrefix;
+ },
+ setSwfPrefix: function (prefix) {
+ swfPrefix = prefix;
+ },
+ getSwfPrefix: function () {
+ return swfPrefix;
+ },
+ setCssPrefix: function (prefix) {
+ cssPrefix = prefix;
+ },
+ getCssPrefix: function () {
+ return cssPrefix;
+ }
+ };
+ }(1, 1));
+ bbcdotcom.objects('bbcdotcom.siteCatalyst', 'create');
+ bbcdotcom.siteCatalyst = {"ch":"","cdp":"3","ce":"UTF-8"};
+ bbcdotcom.objects('bbcdotcom.stats', 'create');
+ /* Create BBC.adverts skeleton */
+ if (window.BBC === undefined) {
+ var BBC = {};
+ }
+ if (window.BBC.adverts === undefined) {
+ BBC.adverts = {
+ setZone: function () {},
+ configure: function () {},
+ write: function () {},
+ show: function () {},
+ isActive: function () {
+ return false;
+ },
+ setScriptRoot: function () {},
+ setImgRoot: function () {},
+ getAdvertTag: function () {},
+ getSectionPath: function() {},
+ showPartnerButtons: function() {}
+ };
+ }
+ (function(){
+ if(typeof require !== 'undefined') {
+ require({
+ paths:{
+ "bbcdotcom":"http://static.bbci.co.uk/bbcdotcom/0.3.289/script"
+ }
+ });
+ }
+ })();
+ if (typeof orb !== 'undefined' && typeof orb.fig === 'function') {
+ bbcdotcom.data = {
+ a: orb.fig('ad')? 1 : 0,
+ b: (0 == orb.fig('uk')) ? 1 : 0,
+ c: orb.fig('ap')
+ };
+ } else {
+ document.write('<script type="text/javascript" src="http://tps.bbc.com/wwscripts/data">\x3C/script>');
+ }
+ /*]]>*/
+ </script>
+ <script type="text/javascript">
+ /*<![CDATA[*/
+ if (typeof bbcdotcom.data == 'undefined' || typeof bbcdotcom.data.a == 'undefined' || typeof bbcdotcom.data.b == 'undefined' || typeof bbcdotcom.data.c == 'undefined') {
+ bbcdotcom.data = {a:0,b:0,c:0};
+ }
+ if (bbcdotcom.data.a == 1) {
+ document.write('<script type="text/javascript" src="http://www.bbc.co.uk/wwscripts/flag">\x3C/script>');
+ }
+ /*]]>*/
+ </script> <script type="text/javascript"> /*<![CDATA[*/
+ if (typeof bbcdotcom.flag == 'undefined' || bbcdotcom.flag.a != 1) {
+ bbcdotcom.data.a = 0;
+ }
+ </script>
+
+ <!-- BEGIN Krux Control Tag for "BBC.com Homepage" -->
+ <!-- Source: /snippet/controltag?confid=JA8mItOH&site=BBC.com%20Homepage&edit=1 -->
+ <script class="kxct" data-id="JA8mItOH" data-timing="async" data-version="1.9" type="text/javascript">
+ /*<![CDATA[*/
+ if (bbcdotcom.data.a == 1 || bbcdotcom.data.b == 1) {
+ window.Krux||((Krux=function(){Krux.q.push(arguments)}).q=[]);
+ (function(){
+ var k=document.createElement('script');k.type='text/javascript';k.async=true;
+ var m,src=(m=location.href.match(/\bkxsrc=([^&]+)/))&&decodeURIComponent(m[1]);
+ k.src = /^https?:\/\/([a-z0-9_\-\.]+\.)?krxd\.net(:\d{1,5})?\//i.test(src) ? src : src === "disable" ? "" :
+ (location.protocol==="https:"?"https:":"http:")+"//cdn.krxd.net/controltag?confid=JA8mItOH";
+ var s=document.getElementsByTagName('script')[0];s.parentNode.insertBefore(k,s);
+ }());
+ }
+ /*]]>*/
+ </script>
+ <!-- END Krux Controltag -->
+ <script type="text/javascript">
+ /*<![CDATA[*/
+ if (bbcdotcom.data.a == 1 || bbcdotcom.data.b == 1) {
+ window.Krux||((Krux=function(){Krux.q.push(arguments);}).q=[]);
+ (function(){
+ function retrieve(n){
+ var m, k='kx'+n;
+ if (window.localStorage) {
+ return window.localStorage[k] || "";
+ } else if (navigator.cookieEnabled) {
+ m = document.cookie.match(k+'=([^;]*)');
+ return (m && unescape(m[1])) || "";
+ } else {
+ return '';
+ }
+ }
+ Krux.user = retrieve('user');
+ Krux.segments = retrieve('segs') ? retrieve('segs').split(',') : [];
+ // DFP Premium
+ var dfpp = [];
+ if (Krux.user) {
+ dfpp.push('khost=' + encodeURIComponent(location.hostname));
+ dfpp.push('kuid=' + Krux.user);
+ }
+ for (var i = 0; i < Krux.segments.length; i++ ) {
+ dfpp.push('ksg=' + Krux.segments[i]);
+ }
+ Krux.dfppKeyValues = dfpp.length ? dfpp.join(';') + ';' : '';
+ })();
+ }
+ /*]]>*/
+ </script>
+
+ <script type="text/javascript">
+ /*<![CDATA[*/
+ if(bbcdotcom.data.a == 1 || bbcdotcom.data.b == 1) {
+ document.write('<link rel="stylesheet" type="text/css" href="http://static.bbci.co.uk/bbcdotcom/0.3.289/style/3pt_ads.css" />');document.write('<script type="text/javascript" src="http://static.bbci.co.uk/bbcdotcom/0.3.289/script/bbccom.js">\x3C/script>'); }
+ /*]]>*/
+ </script> <script type="text/javascript"> /*<![CDATA[*/
+ if (bbcdotcom.data.a == 1 || bbcdotcom.data.b == 1) {
+ BBC.adverts.setData(bbcdotcom.data);
+ bbcdotcom.config.setAdsEnabled(bbcdotcom.data.a);
+ bbcdotcom.config.setAnalyticsEnabled(bbcdotcom.data.b);
+ }
+ if (bbcdotcom.data.a == 1) {
+ (function(){
+ var zoneFile = "3pt_zone_file";
+
+ bbcdotcom.objects('page', 'create', bbcdotcom);
+
+ BBC.adverts.setScriptRoot("http://static.bbci.co.uk/bbcdotcom/0.3.289/script/");
+ BBC.adverts.setImgRoot("http://static.bbci.co.uk/bbcdotcom/0.3.289/img/");
+ BBC.adverts.init({
+ domain: "www.bbc.com",
+ location: window.location.pathname,
+ zoneVersion: zoneFile,
+ zoneAuto: false,
+ siteAuto: false,
+ keywordsAuto: false,
+ zoneReferrer: document.referrer
+ });
+ })();
+ if(typeof bbcdotcom !== 'undefined' && typeof bbcdotcom.survey !== 'undefined' && typeof bbcdotcom.survey.init === 'function') {
+ bbcdotcom.survey.init();
+ }
+ }
+ /*]]>*/
+ </script>
+ <script type="text/javascript">
+ /*<![CDATA[*/
+ if (BBC.adverts.isActive('analytics')) {
+ if(typeof(bbcdotcom) != 'undefined' && typeof(bbcdotcom.stats) != 'undefined') {
+ bbcdotcom.stats.contentType = "HTML";
+ }
+ }
+ /*]]>*/
+ </script>
+ <script type="text/javascript">/*<![CDATA[*/ window.istats = (window.istats || {}); (istats.head = function(w,d) { w.istats._linkTracked = w.istats._trackingCookie = decodeURIComponent( (d.cookie.match(/\bsa_labels=([^;]+)/)||[]).pop() || '' ); var host = w.location.host, m = host.match(/(bbc(?:\.co\.uk|\.com))$/i); d.cookie = 'sa_labels=; expires=Thu, 01 Jan 1970 00:00:01 GMT; domain=' + (m? m[1] : host) + '; path=/'; })(window,document); /*]]>*/</script> <!-- Webapp: WWHP international homepage --> <meta property="fb:page_id" content="228735667216" /> <meta property="fb:admins" content="297814326937641" /> <meta property="fb:app_id" content="187214818032936" /> <meta property="og:title" content="" /> <meta property="og:type" content="website" /> <meta property="og:image" content="/img/iphone.png" /> <meta property="og:url" content="http://www.bbc.co.uk/" /> <meta name="msvalidate.01" content="A09EF0BF1FC5CDBB37D921CBC3776943" /> <link rel="apple-touch-icon" href="/img/iphone.png"/> <link rel="canonical" href="http://www.bbc.com/" /> <link rel="alternate" hreflang="en-gb" href="http://www.bbc.co.uk/" /> <link rel="alternate" hreflang="gd-gb" href="http://www.bbc.co.uk/alba/" /> <link rel="alternate" hreflang="cy-gb" href="http://www.bbc.co.uk/cymru/" /> <link rel="alternate" hreflang="en" href="http://www.bbc.com/" /> <!--[if IE]><link href="http://static.bbci.co.uk/wwhp/1.52.0/desktop/css/ie.css" type="text/css" rel="stylesheet"><![endif]--> <!--[if lte IE 6]><link href="http://static.bbci.co.uk/wwhp/1.52.0/desktop/css/ie-6.css" type="text/css" rel="stylesheet"><![endif]--> <!--[if IE 7]><link href="http://static.bbci.co.uk/wwhp/1.52.0/desktop/css/ie-7.css" type="text/css" rel="stylesheet"><![endif]--> <!--[if lte IE 8]><link href="http://static.bbci.co.uk/wwhp/1.52.0/desktop/css/ie-lte-8.css" type="text/css" rel="stylesheet"><![endif]--> <script type="text/javascript"> /*<![CDATA[*/ if (!window.console) { window.console = { log: function() { return; }, warn: function() { return; }, info: function() {return; }, error: function() { return; }, debug: function() { return; } }; } if(typeof(Homepage) === "undefined") { Homepage = {}; Homepage.VSGet = function() { return ''; }; Homepage.edition = 'i'; Homepage.env = 'live'; Homepage.fetchBbcCookie = function () { if (!navigator.cookieEnabled) { return ''; } var nameEQ = "BBC-UID="; var ca = document.cookie.split(';'); for(i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)===' ') { c = c.substring(1,c.length); } if (c.indexOf(nameEQ) === 0) { return c.substring(nameEQ.length,c.length); } } return ''; }; } if(typeof(wwhomepage) === 'undefined'){ wwhomepage = {}; wwhomepage.configs = []; if(Homepage !== 'undefined'){ wwhomepage.legacy = Homepage; } wwhomepage.createObject = function(strName) { var nameParts = strName.split("."), i = 0, len = nameParts.length, obj = window; for (; i < len; i++){ if (obj[nameParts[i]] === undefined) { obj[nameParts[i]] = {}; } obj = obj[nameParts[i]]; } return obj; } } /*]]>*/ </script> </head> <body id="wwhp" class="disable-wide-advert desktop default international desktop-default desktop-international default-international"> <!-- BBCDOTCOM body first -->
+ <div id="bbccom_interstitial" class="bbccom_display_none"></div>
+ <!-- Start SiteCatalyst -->
+ <script type="text/javascript">
+ /*<![CDATA[*/
+ if (BBC.adverts.isActive('analytics')) {
+ var s_account = "bbcwglobalprod"; document.write('<script type="text/javascript" src="http://static.bbci.co.uk/bbcdotcom/0.3.289/script/s_code.js">\x3C/script>');
+ }
+ /*]]>*/
+ </script> <script type="text/javascript"> /*<![CDATA[*/
+ if (BBC.adverts.isActive('analytics')) {
+ var s_code=scw.t();if(s_code)document.write(s_code)
+ }
+ /*]]>*/
+ </script>
+ <!-- End SiteCatalyst -->
+ <script type="text/javascript">BBC.adverts.write("wallpaper",false);</script>
+ <script type="text/javascript">
+ /*<![CDATA[*/
+ body= document.getElementsByTagName('body');
+ aTags = document.getElementsByTagName('a');
+ if('undefined' != typeof aTags && 'undefined' != typeof aTags[0] && -1 !== aTags[0].href.indexOf('http://ad.doubleclick.net')) {
+ body[0].removeChild(aTags[0]);
+ }
+ /*]]>*/
+ </script>
+ <script type="text/javascript">/*<![CDATA[*/ bbcFlagpoles_istats = 'ON'; istatsTrackingUrl = '//sa.bbc.co.uk/bbc/bbc/s?name=SET-COUNTER&pal_route=index&ml_name=barlesque&app_type=web&language=en-GB&ml_version=0.23.1&pal_webapp=wwhp'; if (window.istats_countername) { istatsTrackingUrl = istatsTrackingUrl.replace(/([?&]name=)[^&]+/ig, '$1' + istats_countername); } (function() { if ( /\bIDENTITY=/.test(document.cookie) ) { istatsTrackingUrl += '&bbc_identity=1'; } var c = (document.cookie.match(/\bckns_policy=(\d\d\d)/)||[]).pop() || ''; istatsTrackingUrl += '&bbc_mc=' + (c? 'ad'+c.charAt(0)+'ps'+c.charAt(1)+'pf'+c.charAt(2) : 'not_set'); if ( /\bckns_policy=\d\d0/.test(document.cookie) ) { istatsTrackingUrl += '&ns_nc=1'; } var screenWidthAndHeight = 'unavailable'; if (window.screen && screen.width && screen.height) { screenWidthAndHeight = screen.width + 'x' + screen.height; } istatsTrackingUrl += ('&screen_resolution=' + screenWidthAndHeight); istatsTrackingUrl += '&blq_s=3.5d&blq_r=3.5&blq_v=default-worldwide'; })(); /*]]>*/</script> <!-- Begin iStats 20100118 (UX-CMC 1.1009.3) --> <script type="text/javascript">/*<![CDATA[*/ (function() { window.istats || (istats = {}); var cookieDisabled = (document.cookie.indexOf('NO-SA=') != -1), hasCookieLabels = (document.cookie.indexOf('sa_labels=') != -1), hasClickThrough = /^#sa-(.*?)(?:-sa(.*))?$/.test(document.location.hash), runSitestat = !cookieDisabled && !hasCookieLabels && !hasClickThrough && !istats._linkTracked; if (runSitestat && bbcFlagpoles_istats === 'ON') { sitestat(istatsTrackingUrl); } else { window.ns_pixelUrl = istatsTrackingUrl; /* used by Flash library to track */ } function sitestat(n){var j=document,f=j.location,b="";if(j.cookie.indexOf("st_ux=")!=-1){var k=j.cookie.split(";");var e="st_ux",h=document.domain,a="/";if(typeof ns_!="undefined"&&typeof ns_.ux!="undefined"){e=ns_.ux.cName||e;h=ns_.ux.cDomain||h;a=ns_.ux.cPath||a}for(var g=0,f=k.length;g<f;g++){var m=k[g].indexOf("st_ux=");if(m!=-1){b="&"+unescape(k[g].substring(m+6))}}document.cookie=e+"=; expires="+new Date(new Date().getTime()-60).toGMTString()+"; path="+a+"; domain="+h}ns_pixelUrl=n;n=ns_pixelUrl+"&ns__t="+(new Date().getTime())+"&ns_c="+((j.characterSet)?j.characterSet:j.defaultCharset)+"&ns_ti="+escape(j.title)+b+"&ns_jspageurl="+escape(f&&f.href?f.href:j.URL)+"&ns_referrer="+escape(j.referrer);if(n.length>2000&&n.lastIndexOf("&")){n=n.substring(0,n.lastIndexOf("&")+1)+"ns_cut="+n.substring(n.lastIndexOf("&")+1,n.lastIndexOf("=")).substring(0,40)}(j.images)?new Image().src=n:j.write('<p><i'+'mg src="'+n+'" height="1" width="1" alt="" /></p>')}; })(); /*]]>*/</script> <noscript><p style="position: absolute; top: -999em;"><img src="//sa.bbc.co.uk/bbc/bbc/s?name=SET-COUNTER&amp;pal_route=index&amp;ml_name=barlesque&amp;app_type=web&amp;language=en-GB&amp;ml_version=0.23.1&amp;pal_webapp=wwhp&amp;blq_js_enabled=0&amp;blq_s=3.5d&amp;blq_r=3.5&amp;blq_v=default-worldwide" height="1" width="1" alt="" /></p></noscript> <!-- End iStats (UX-CMC) --> <div id="blq-global"> <noscript> <div id="blq-no-js-banner"> <p>For a better experience on your device, try our <a href="http://m.bbc.co.uk">mobile site</a>.</p> </div> </noscript> <div id="blq-pre-mast" xml:lang="en-GB"> <!-- Pre mast -->
+<!-- BBCDOTCOM leaderboard template:client-side journalismVariant: false ipIsAdvertiseCombined: true adsEnabled: true flagpole: ON showAdAboveBlq: true blqLeaderboardAd: true -->
+ </div> </div> <script type="text/html" id="blq-bbccookies-tmpl"><![CDATA[ <div id="bbccookies-prompt" class="bbccookies-w"> <h2> Cookies on the BBC website </h2> <p> We use cookies to ensure that we give you the best experience on our website.<span class="bbccookies-international-message"> We also use cookies to ensure we show you advertising that is relevant to you.</span> If you continue without changing your settings, we'll assume that you are happy to receive all cookies on the BBC website. However, if you would like to, you can <a href="/privacy/cookies/managing/cookie-settings.html">change your cookie settings</a> at any time. </p> <ul> <li id="bbccookies-continue"> <button type="button" id="bbccookies-continue-button">Continue</button> </li> <li id="bbccookies-more"><a href="/privacy/cookies/bbc">Find out more</a></li></ul> </div> ]]></script> <script type="text/javascript">/*<![CDATA[*/ (function(){if(bbccookies._showPrompt()){var i=document,b=i.getElementById("blq-pre-mast"),f=i.getElementById("blq-global"),h=i.getElementById("blq-container"),c=i.getElementById("blq-bbccookies-tmpl"),a,g,e;if(b&&i.createElement){a=i.createElement("div");a.id="bbccookies";e=c.innerHTML;e=e.replace("<"+"![CDATA[","").replace("]]"+">","");a.innerHTML=e;if(f){f.insertBefore(a,b)}else{h.insertBefore(a,b)}g=i.getElementById("bbccookies-continue-button");g.onclick=function(){a.parentNode.removeChild(a);return false};bbccookies._setPolicy()}}})(); /*]]>*/</script> <div id="blq-masthead" class="blq-clearfix blq-mast-bg-white blq-masthead-focus blq-lang-en blq-ltr"> <span id="blq-mast-background"><span></span></span> <div id="blq-mast" class="blq-rst"> <div id="blq-mast-bar" class="blq-masthead-container blq-default-worldwide"> <div id="blq-blocks"> <a href="/" hreflang="en-GB"> <abbr title="British Broadcasting Corporation" class="blq-home"> <img src="http://static.bbci.co.uk/frameworks/barlesque/2.75.0/desktop/3.5/img/blq-blocks_grey_alpha.png" alt="BBC" width="84" height="24" /> </abbr> </a> </div> <div id="blq-acc-links"> <h2 id="page-top">Accessibility links</h2> <ul> <li><a href="#blq-content">Skip to content</a></li> <li><a href="#blq-local-nav">Skip to local navigation</a></li> <li><a href="/accessibility/">Accessibility Help</a></li> </ul> </div> <div id="blq-sign-in" class="blq-gel"> </div> <div id="blq-nav"> <h2>BBC navigation</h2> <ul id="blq-nav-main"> <li id="blq-nav-news"> <a href="http://www.bbc.com/news/">News</a> </li> <li id="blq-nav-sport"> <a href="http://www.bbc.co.uk/sport/">Sport</a> </li> <li id="blq-nav-weather"> <a href="http://www.bbc.co.uk/weather/">Weather</a> </li> <li id="blq-nav-earth"> <a href="http://www.bbc.com/earth/">Earth</a> </li> <li id="blq-nav-future"> <a href="http://www.bbc.com/future/">Future</a> </li> <li id="blq-nav-shop"> <a href="http://shop.bbc.com/">Shop</a> </li> <li id="blq-nav-tv"> <a href="/tv/">TV</a> </li> <li id="blq-nav-radio"> <a href="/radio/">Radio</a> </li> <li id="blq-nav-more"> <a href="/a-z/">More&hellip;</a> </li> </ul> <div id="blq-nav-search"> <form method="get" action="http://search.bbc.co.uk/search" accept-charset="utf-8" id="blq-search-form"> <div> <input type="hidden" name="go" value="toolbar" /> <input type="hidden" name="uri" value="/" /> <label for="blq-search-q" class="blq-hide">Search term:</label> <input id="blq-search-q" type="text" name="q" value="" maxlength="128" /> <button id="blq-search-btn" type="submit"><span><img src="http://static.bbci.co.uk/frameworks/barlesque/2.75.0/desktop/3.5/img/blq-search_grey_alpha.png" width="13" height="13" alt="Search"/></span></button> </div> </form> </div> </div> </div> </div> </div> <div id="blq-container-outer" class="blq-default-worldwide blq-ltr" > <div id="blq-container" class="blq-lang-en blq-dotcom"> <div id="blq-container-inner" xml:lang="en"> <div id="blq-main" class="blq-clearfix"> <h1 class="hide">BBC Homepage</h1> <div class="wwhp"> <div class="colA column"> <div id="adLeaderboard"> <div id="adLeaderboard_container" class="container"> <div class="contentBlocks cbg0"> <div class="advert"> <div id="bbccom_leaderboard" class="bbccom_display_none"> <script type="text/javascript">BBC.adverts.write("leaderboard");</script> </div> <script type="text/javascript">BBC.adverts.show("leaderboard");</script> </div> </div> </div> </div> </div> <div class="colB column"> <h2 id="page_title" class="page_title"></h2> <script type="text/javascript"> /*<![CDATA[*/ require(["desktop/utils/date"], function (dateUtil) { var date = new Date(); document.getElementById('page_title').innerHTML = dateUtil.getDayName(date) + ', ' + date.getDate() + ' ' + dateUtil.getMonthName(date); }); /*]]>*/ </script> <script type="text/javascript"> /*<![CDATA[*/ var bodyTag = document.getElementsByTagName('body')[0]; var carouselClass = 'wwhp_promo_standard'; var bodyPromoClass = ''; bodyTag.setAttribute('class', bodyTag.getAttribute('class') + ' ' + carouselClass + ' ' + bodyPromoClass); delete bodyTag; /*]]>*/ </script> <div class="promo module2 clearfix"> <div class="hero2"> <a class="hero_image_link" href="/news/world-middle-east-30165479" title="Doubts on Iran deal as deadline looms" rev="promo2|homepage|na|r|t|i|hero|content"> <img src="http://ichef.bbci.co.uk/wwhp/ic/news/624-351/79208000/jpg/_79208203_trio.jpg" width="624" height="351" alt="John Kerry, Catherine Ashton and Mohammad Javad Zarif in Vienna, 22 Nov" class="hero_image" /> <span class="hero_image_overlay"> <span class="hero_image_overlay_text"> <span class="hero_title"> Doubts on Iran deal as deadline looms </span> </span> </span> </a> <p class="hero_summary"> Doubts grow that Monday's deadline for a deal on Iran's nuclear programme will be met at talks in Vienna, as negotiators admit &quot;big gaps&quot; remain. </p> </div> <div class="container"> <div class="grid_5 first"> <a class="media_link" href="/sport/live/formula1/29756331" title="F1 title decider: Abu Dhabi" rev="promo2|homepage|na|r|t|i|image|content"> <span class="media_image"> <img src="http://ichef.bbci.co.uk/wwhp/ic/news/144-81/79211000/jpg/_79211455_abudhabigp.jpg" width="144" height="81" alt="abu dhabi gp" /> </span> <span class="media_title"> F1 title decider: Abu Dhabi </span> </a> </div> <div class="grid_5"> <a class="media_link" href="http://www.bbc.com/travel/slideshow/20141120-our-favourite-images-of-the-week" title="The week's most stunning images from around the world" rev="promo2|homepage|na|r|t|i|image|content"> <span class="media_image"> <img src="http://ichef.bbci.co.uk/wwhp/ic/ibroadcast/624-351/images/live/p0/2c/gh/p02cghrt.jpg" width="144" height="81" alt="Norway" /> <span class="icon icon_small icon_gallery"></span> </span> <span class="media_title"> The week's most stunning images from around the world </span> </a> </div> <div class="grid_5"> <a class="media_link" href="http://www.bbc.com/earth/story/20141117-why-seals-have-sex-with-penguins" title="Why seals have sex with penguins" rev="promo2|homepage|na|r|t|i|image|content"> <span class="media_image"> <img src="http://ichef.bbci.co.uk/wwfeatures/1280_640/images/live/p0/2b/qr/p02bqrbg.jpg" width="144" height="81" alt="Seal and penguin" /> </span> <span class="media_title"> Why seals have sex with penguins </span> </a> </div> <div class="grid_5 last"> <a class="media_link" href="http://www.bbc.co.uk/guides/z8849j6" title="The surprising amount of sugar hiding in your food" rev="promo2|homepage|na|r|t|i|image|content"> <span class="media_image"> <img src="http://ichef.bbci.co.uk/wwhp/ic/ibroadcast/624-351/images/live/p0/2c/k3/p02ck30x.jpg" width="144" height="81" alt="Sugar in a glass" /> </span> <span class="media_title"> The surprising amount of sugar hiding in your food </span> </a> </div> </div> </div> <!-- GenericEditorial\GenericEditorial: not ModuleInterface (not an object) -->
+ <div class="module2 clearfix news"> <h2 class="module_title"> <a href="/news" rev="news|homepage|na|r|t|i|text|headline"> News </a> </h2> <div class="container"> <div class="grid_10 first"> <div class="hero2"> <a class="hero_image_link" href="/news/world-africa-30165471" title="Tunisia in landmark presidency poll" rev="news|homepage|na|r|t|i|hero|content"> <img src="http://ichef.bbci.co.uk/wwhp/ic/news/304-171/79206000/jpg/_79206789_024819465-1.jpg" width="304" height="171" alt="A woman walks past a wall plastered with electoral campaign posters in Tunis, Tunisia. Photo: 21 November 2014" class="hero_image" /> <span class="hero_image_overlay"> </span> </a> <h3 class="hero_title"> <a href="/news/world-africa-30165471" title="Tunisia in landmark presidency poll" rev="news|homepage|na|r|t|i|hero|content"> Tunisia in landmark presidency poll</a> </h3> <p class="hero_summary"> Tunisians vote in the country's first presidential election since the 2011 &quot;Arab Spring&quot; revolution that triggered uprisings across the region. </p> </div> </div> <div class="grid_5"> <a class="media_link" href="/news/world-asia-india-30167195" title="India tea workers kill boss over pay" rev="news|homepage|na|r|t|i|image|content"> <span class="media_image"> <img src="http://ichef.bbci.co.uk/wwhp/ic/news/144-81/64949000/jpg/_64949612_64949611.jpg" width="144" height="81" alt="Assam tea garden" /> </span> <span class="media_title"> India tea workers kill boss over pay </span> </a> <ul class="media_link_list"> <li class="media_link_list_item first"> <a class="media_link" href="/news/world-africa-30167886" title="'Boko Haram' kills Nigeria fishermen" rev="news|homepage|na|r|t|i|text|content"> 'Boko Haram' kills Nigeria fishermen </a> </li> <li class="media_link_list_item"> <a class="media_link" href="/news/world-middle-east-30166957" title="Palestinian man shot dead in Gaza" rev="news|homepage|na|r|t|i|text|content"> Palestinian man shot dead in Gaza </a> </li> <li class="media_link_list_item last"> <a class="media_link" href="/news/world-asia-30166619" title="Afghan MPs approve security pact" rev="news|homepage|na|r|t|i|text|content"> Afghan MPs approve security pact </a> </li> </ul> </div> <div class="grid_5 last"> <a class="media_link" href="/news/world-europe-30167737" title="MH17 wreckage leaves rebel Ukraine" rev="news|homepage|na|r|t|i|image|content"> <span class="media_image"> <img src="http://ichef.bbci.co.uk/wwhp/ic/news/144-81/79210000/jpg/_79210757_79210756.jpg" width="144" height="81" alt="Freight train carrying parts of the wreckage the of Flight MH17 in the rebel-held city of Torez on 23 November 2014." /> </span> <span class="media_title"> MH17 wreckage leaves rebel Ukraine </span> </a> <ul class="media_link_list"> <li class="media_link_list_item first"> <a class="media_link" href="/news/uk-politics-30167160" title="UK 'unlikely to meet' migration target" rev="news|homepage|na|r|t|i|text|content"> UK 'unlikely to meet' migration target </a> </li> <li class="media_link_list_item last"> <a class="media_link" href="/news/world-asia-30158640" title="Thai king quashes health concerns" rev="news|homepage|na|r|t|i|text|content"> Thai king quashes health concerns </a> </li> </ul> </div> </div> </div> <div class="container module_wrapper module_compound"> <div class="module2 half_module business"> <h2 class="module_title"> <a href="/news/business" rev="business|homepage|na|r|t|i|text|headline"> Business </a> </h2> <div class="hero2"> <a class="hero_image_link" href="/news/uk-politics-30166477" title="New web data powers plan for police" rev="business|homepage|na|r|t|i|hero|content"> <img src="http://ichef.bbci.co.uk/wwhp/ic/news/304-171/79208000/jpg/_79208235_comp_reuters.jpg" width="304" height="171" alt="Man typing on computer keyboard" class="hero_image" /> <span class="hero_image_overlay"> </span> </a> <h3 class="hero_title"> <a href="/news/uk-politics-30166477" title="New web data powers plan for police" rev="business|homepage|na|r|t|i|hero|content"> New web data powers plan for police</a> </h3> <p class="hero_summary"> A law forcing communications firms to keep details that could help identify criminals using the internet is being planned by the home secretary. </p> </div> <ul class="media_link_list"> <li class="media_link_list_item first"> <a class="media_link" href="/news/business-30150849" title="US stocks boosted by China rate cut" rev="business|homepage|na|r|t|i|text|content"> US stocks boosted by China rate cut </a> </li> <li class="media_link_list_item"> <a class="media_link" href="/news/business-30151829" title="Aereo files for bankruptcy protection" rev="business|homepage|na|r|t|i|text|content"> Aereo files for bankruptcy protection </a> </li> <li class="media_link_list_item"> <a class="media_link" href="/news/business-30147982" title="'Creating Google' for Myanmar" rev="business|homepage|na|r|t|i|text|content"> <span class="icon icon_inline icon_video"></span>'Creating Google' for Myanmar </a> </li> <li class="media_link_list_item last"> <a class="media_link" href="/news/technology-30152250" title="Twitter co-founder defends application" rev="business|homepage|na|r|t|i|text|content"> <span class="icon icon_inline icon_video"></span>Twitter co-founder defends application </a> </li> </ul> </div> <div class="module2 half_module sport"> <h2 class="module_title"> <a href="/sport" rev="sport|homepage|na|r|t|i|text|headline"> Sport </a> </h2> <div class="hero2"> <a class="hero_image_link" href="/sport/live/football/29756337" title="Sunday football" rev="sport|homepage|na|r|t|i|hero|content"> <img src="http://ichef.bbci.co.uk/wwhp/ic/news/304-171/79210000/jpg/_79210974_lambert_celebrate_afp.jpg" width="304" height="171" alt="Liverpool captain Steven Gerrard celebrates" class="hero_image" /> <span class="hero_image_overlay"> </span> </a> <h3 class="hero_title"> <a href="/sport/live/football/29756337" title="Sunday football" rev="sport|homepage|na|r|t|i|hero|content"> Sunday football</a> </h3> <p class="hero_summary"> All the latest action, the best from social media and top images as Crystal Palace host Liverpool in the Premier League. </p> </div> <ul class="media_link_list"> <li class="media_link_list_item first"> <a class="media_link" href="/sport/golf/30167686" title="Stenson retains World Tour Championship" rev="sport|homepage|na|r|t|i|text|content"> Stenson retains World Tour Championship </a> </li> <li class="media_link_list_item"> <a class="media_link" href="/sport/football/30165941" title="Moyes debut dwarfed by historic Messi" rev="sport|homepage|na|r|t|i|text|content"> Moyes debut dwarfed by historic Messi </a> </li> <li class="media_link_list_item"> <a class="media_link" href="/sport/football/30165949" title="Messi will leave 'unreachable' record" rev="sport|homepage|na|r|t|i|text|content"> Messi will leave 'unreachable' record </a> </li> <li class="media_link_list_item last"> <a class="media_link" href="/sport/boxing/30166655" title="Pacquiao retains WBO title in Macau" rev="sport|homepage|na|r|t|i|text|content"> Pacquiao retains WBO title in Macau </a> </li> </ul> </div> </div> <!-- SpecialReport: not ModuleInterface (not an object) -->
+ <!-- Sport\SportInterface: not ModuleInterface (not an object) -->
+ <!-- Sport\SportInterface: not ModuleInterface (not an object) -->
+ <!-- Sport\SportInterface: not ModuleInterface (not an object) -->
+ <!-- Sport\SportTheAshesScorecard: not ModuleInterface (not an object) -->
+ <!-- Sport\SportInterface: not ModuleInterface (not an object) -->
+ <!-- not CompoundModuleInterface (not an object) -->
+<!-- SportTennis: no submodules --> <!-- Sport\SportInterface: not ModuleInterface (not an object) -->
+ <div class="module2 sub_module video"> <h2 class="module_title"> <span>Watch/Listen</span> </h2> <div class="container" id="video_wrapper"> <div class="grid_13 first"> <div class="hero2"> <a class="hero_image_link" href="/news/uk-30168177" title="Charing Cross closed after train fire" rev="video|homepage|na|r|t|i|hero|content"> <img src="http://ichef.bbci.co.uk/wwhp/ic/news/400-225/79211000/jpg/_79211108_79210815.jpg" width="400" height="225" alt="A fire on a train at Charing Cross" class="hero_image" /> <span class="hero_image_overlay"> <span class="icon icon_large icon_video"></span> </span> </a> <h3 class="hero_title"> <a href="/news/uk-30168177" title="Charing Cross closed after train fire" rev="video|homepage|na|r|t|i|hero|content"> Charing Cross closed after train fire</a> </h3> <p class="hero_summary"> A fire on a train at Charing Cross station in Central London sparked an emergency evacuation on Sunday morning </p> </div> </div> <div class="grid_7 last media_items_landscape"> <ul class="media_list"> <li class="media_list_item first"> <a class="media_link" id="p02cn91m" href="/news/uk-30168177" title="Charing Cross closed after train fire" rev="video|homepage|na|r|t|i|image|content"> <span class="media_image"> <img src="http://ichef.bbci.co.uk/wwhp/ic/news/96-54/79211000/jpg/_79211108_79210815.jpg" width="96" height="54" alt="A fire on a train at Charing Cross" /> <span class="icon icon_small icon_video"></span> </span> <span class="media_title"> Charing Cross closed after train fire </span> </a> </li> <li class="media_list_item"> <a class="media_link" id="p02cn32k" href="/news/health-30166571" title="Understanding autism: Living in a box" rev="video|homepage|na|r|t|i|image|content"> <span class="media_image"> <img src="http://ichef.bbci.co.uk/wwhp/ic/news/96-54/79208000/jpg/_79208841_79208564.jpg" width="96" height="54" alt="Hayley Bicker" /> <span class="icon icon_small icon_video"></span> </span> <span class="media_title"> Understanding autism: Living in a box </span> </a> </li> <li class="media_list_item"> <a class="media_link" id="p02cllmb" href="/news/world-latin-america-30157239" title="Street pole-dancing in Buenos Aires" rev="video|homepage|na|r|t|i|image|content"> <span class="media_image"> <img src="http://ichef.bbci.co.uk/wwhp/ic/news/96-54/79194000/jpg/_79194037_79194034.jpg" width="96" height="54" alt="A pole dancer" /> <span class="icon icon_small icon_video"></span> </span> <span class="media_title"> Street pole-dancing in Buenos Aires </span> </a> </li> <li class="media_list_item"> <a class="media_link" id="p02cn6jl" href="/news/10462520" title="One-minute World News" rev="video|homepage|na|r|t|i|image|content"> <span class="media_image"> <img src="http://ichef.bbci.co.uk/wwhp/ic/news/96-54/48351000/gif/_48351578_640x360-world-news.gif" width="96" height="54" alt="One-minute World News summary" /> <span class="icon icon_small icon_video"></span> </span> <span class="media_title"> One-minute World News </span> </a> </li> <li class="media_list_item last"> <a class="media_link" id="p02cl3yb" href="/news/world-europe-30153229" title="Ukraine uprising: One year on" rev="video|homepage|na|r|t|i|image|content"> <span class="media_image"> <img src="http://ichef.bbci.co.uk/wwhp/ic/news/96-54/79192000/jpg/_79192174_79192172.jpg" width="96" height="54" alt="Ukrainians with flags at a rally in Kiev" /> <span class="icon icon_small icon_video"></span> </span> <span class="media_title"> Ukraine uprising: One year on </span> </a> </li> </ul> </div> </div> </div> <script type="text/javascript"> /*<![CDATA[*/ require(['desktop/ui/videoplayer'], function (videoPlayer) { window.player = videoPlayer.create([{"contenttype":"video","num":"10","type":"MAP","title":"Charing Cross closed after train fire","summary":"A fire on a train at Charing Cross station in Central London sparked an emergency evacuation on Sunday morning","url":"\/news\/uk-30168177","img":"http:\/\/news.bbcimg.co.uk\/media\/images\/79211000\/jpg\/_79211108_79210815.jpg","imgalttext":"A fire on a train at Charing Cross","pid":"p02cn91m","created":"2014-11-23T12:52:02+00:00","updated":"2014-11-23T13:13:00+00:00","allowadvertising":true,"gelicon":"video","id":"p02cn91m"},{"contenttype":"video","num":"10","type":"MAP","title":"Understanding autism: Living in a box","summary":"Shop worker Hayley Bicker wanted to raise awareness on autism after feeling shocked at people's reaction to an autistic child in a supermarket","url":"\/news\/health-30166571","img":"http:\/\/news.bbcimg.co.uk\/media\/images\/79208000\/jpg\/_79208841_79208564.jpg","imgalttext":"Hayley Bicker","pid":"p02cn32k","created":"2014-11-23T10:40:28+00:00","updated":"2014-11-23T10:40:28+00:00","allowadvertising":true,"gelicon":"video","id":"p02cn32k"},{"contenttype":"video","num":"10","type":"MAP","title":"Street pole-dancing in Buenos Aires","summary":"Pole-dancers have been practising in the streets in Buenos Aires ahead of the South American Pole-Dancing Championships, which start on Saturday.","url":"\/news\/world-latin-america-30157239","img":"http:\/\/news.bbcimg.co.uk\/media\/images\/79194000\/jpg\/_79194037_79194034.jpg","imgalttext":"A pole dancer","pid":"p02cllmb","created":"2014-11-22T03:10:33+00:00","updated":"2014-11-22T03:10:33+00:00","allowadvertising":true,"gelicon":"video","id":"p02cllmb"},{"contenttype":"video","num":"10","type":"MAP","title":"One-minute World News","summary":"Watch the latest news summary from BBC World News. International news updated 24 hours a day.","url":"\/news\/10462520","img":"http:\/\/news.bbcimg.co.uk\/media\/images\/48351000\/gif\/_48351578_640x360-world-news.gif","imgalttext":"One-minute World News summary","pid":"p02cn6jl","created":"2010-07-09T07:56:06+00:00","updated":"2014-11-23T11:05:57+00:00","allowadvertising":true,"gelicon":"video","id":"p02cn6jl"},{"contenttype":"video","num":"10","type":"MAP","title":"Ukraine uprising: One year on","summary":"Services have been held in Ukraine to mark the anniversary of the mass protests which sparked the downfall of former president Viktor Yanukovych.","url":"\/news\/world-europe-30153229","img":"http:\/\/news.bbcimg.co.uk\/media\/images\/79192000\/jpg\/_79192174_79192172.jpg","imgalttext":"Ukrainians with flags at a rally in Kiev","pid":"p02cl3yb","created":"2014-11-21T22:40:38+00:00","updated":"2014-11-21T22:40:38+00:00","allowadvertising":true,"gelicon":"video","id":"p02cl3yb"}], { container: document.getElementById('video_wrapper'), playerSelector: '.hero_image_link', playlistItemsSelector: '.media_link', autoLoadFirst: true, contentMap: { title: '.hero_title', summary: '.hero_summary' } }); }); /*]]>*/ </script> <!-- Video\Video: not ModuleInterface (not an object) -->
+ <!-- Video: not ModuleInterface (not an object) -->
+ <div class="module2 more sub_module clearfix"> <div class="container"> <div class="grid_5 first"> <h2 class="module_title"> <a href="http://www.bbc.co.uk/news/entertainment_and_arts/" rev="entertainment|homepage|na|r|t|i|text|headline"> Entertainment &amp; Arts </a> </h2> <a class="media_link" href="/news/entertainment-arts-30167527" title="Blind Massage in Golden Horse sweep" rev="entertainment|homepage|na|r|t|i|image|content"> <span class="media_image"> <img src="http://ichef.bbci.co.uk/wwhp/ic/news/144-81/79210000/jpg/_79210127_lou_ye_reuters.jpg" width="144" height="81" alt="Lou Ye" /> </span> <span class="media_title"> Blind Massage in Golden Horse sweep </span> </a> <ul class="media_link_list"> <li class="media_link_list_item first"> <a class="media_link" href="/news/entertainment-arts-30142581" title="O'Keeffe work sets female art record" rev="entertainment|homepage|na|r|t|i|text|content"> O'Keeffe work sets female art record </a> </li> <li class="media_link_list_item last"> <a class="media_link" href="/news/entertainment-arts-30167523" title="Cosby defends rape claims silence" rev="entertainment|homepage|na|r|t|i|text|content"> Cosby defends rape claims silence </a> </li> </ul> </div> <div class="grid_5"> <h2 class="module_title"> <a href="http://www.bbc.co.uk/news/health/" rev="health|homepage|na|r|t|i|text|headline"> Health </a> </h2> <a class="media_link" href="/news/world-africa-30160659" title="Ebola 'stable' in Guinea - WHO" rev="health|homepage|na|r|t|i|image|content"> <span class="media_image"> <img src="http://ichef.bbci.co.uk/wwhp/ic/news/144-81/79199000/jpg/_79199023_79199022.jpg" width="144" height="81" alt="Health workers take a patient to an Ebola treatment centre, Macenta, Guinea, 21 November 2014" /> </span> <span class="media_title"> Ebola 'stable' in Guinea - WHO </span> </a> <ul class="media_link_list"> <li class="media_link_list_item first"> <a class="media_link" href="/news/health-30127275" title="Female bosses 'more depressed'" rev="health|homepage|na|r|t|i|text|content"> Female bosses 'more depressed' </a> </li> <li class="media_link_list_item last"> <a class="media_link" href="/news/health-30122015" title="Obesity 'costing same as smoking'" rev="health|homepage|na|r|t|i|text|content"> Obesity 'costing same as smoking' </a> </li> </ul> </div> <div class="grid_5"> <h2 class="module_title"> <a href="http://www.bbc.co.uk/news/technology/" rev="technology|homepage|na|r|t|i|text|headline"> Technology </a> </h2> <a class="media_link" href="/news/technology-30146176" title="Police make computer hijack arrests" rev="technology|homepage|na|r|t|i|image|content"> <span class="media_image"> <img src="http://ichef.bbci.co.uk/wwhp/ic/news/144-81/79176000/jpg/_79176117_79176116.jpg" width="144" height="81" alt="NCA raid" /> </span> <span class="media_title"> Police make computer hijack arrests </span> </a> <ul class="media_link_list"> <li class="media_link_list_item first"> <a class="media_link" href="/news/technology-30144073" title="Google tries ad-free net experiment" rev="technology|homepage|na|r|t|i|text|content"> Google tries ad-free net experiment </a> </li> <li class="media_link_list_item last"> <a class="media_link" href="/news/technology-30144069" title="Robots face new creativity test" rev="technology|homepage|na|r|t|i|text|content"> Robots face new creativity test </a> </li> </ul> </div> <div class="grid_5 last"> <h2 class="module_title"> <a href="http://www.bbc.co.uk/news/science_and_environment/" rev="science|homepage|na|r|t|i|text|headline"> Science &amp; Environment </a> </h2> <a class="media_link" href="/news/science-environment-30132554" title="Climate fund receives $9.3bn pledge" rev="science|homepage|na|r|t|i|image|content"> <span class="media_image"> <img src="http://ichef.bbci.co.uk/wwhp/ic/news/144-81/79139000/jpg/_79139943_79139941.jpg" width="144" height="81" alt="A passenger airliner and birds fly past a coal-fired power plant in Beijing, China - 13 November 2014" /> </span> <span class="media_title"> Climate fund receives $9.3bn pledge </span> </a> <ul class="media_link_list"> <li class="media_link_list_item first"> <a class="media_link" href="/news/education-30136921" title="Embrace the arts, engineers told" rev="science|homepage|na|r|t|i|text|content"> Embrace the arts, engineers told </a> </li> <li class="media_link_list_item last"> <a class="media_link" href="/news/science-environment-30166120" title="Fish and chips 'harming' eider ducks" rev="science|homepage|na|r|t|i|text|content"> Fish and chips 'harming' eider ducks </a> </li> </ul> </div> </div> </div> <div id="bbccom_native_main_large" class="bbccom_display_none">
+ <script type="text/javascript">BBC.adverts.write("native_main_large",false);</script>
+ </div>
+ <script type="text/javascript">BBC.adverts.show("native_main_large");</script>
+ <!-- MarketingPromo: not ModuleInterface (not an object) -->
+ <!-- module: module-full-width --> <!-- SimpleModuleBase: not ModuleInterface (not an object) -->
+ <div class="features module_wrapper"> <div class="container module_compound"> <div class="module2 half_module earth"> <h2 class="module_title"> <a href="http://www.bbc.com/earth" rev="earth|homepage|na|r|t|i|text|headline"> Earth </a> </h2> <div class="sponsor sponsor_earth"> <div id="bbccom_module_earth" class="bbccom_display_none bbccom_module"> <div class="moduleAdvertContent"> <div class="bbccom_text bbccom_module_adlabel">In Association With</div> <div class="bbccom_image bbccom_module_image"> <script type="text/javascript"> /*<![CDATA[*/ if(typeof BBC != 'undefined' && typeof BBC.adverts != 'undefined'){ BBC.adverts.write("module_earth",false, {title:""}); } /*]]>*/ </script> </div> </div> </div> <script type="text/javascript"> /*<![CDATA[*/ if(typeof BBC != 'undefined' && typeof BBC.adverts != 'undefined'){ BBC.adverts.show("module_earth"); } /*]]>*/ </script> </div> <div class="hero2"> <a class="hero_image_link" href="http://www.bbc.com/earth/story/20141122-the-truth-about-lemmings" title="The truth about lemmings" rev="earth|homepage|na|r|t|i|hero|content"> <img src="http://ichef.bbci.co.uk/wwfeatures/304_171/images/live/p0/2c/k9/p02ck95n.jpg" width="304" height="171" alt="The truth about lemmings" class="hero_image" /> <span class="hero_image_overlay"> </span> </a> <h3 class="hero_title"> <a href="http://www.bbc.com/earth/story/20141122-the-truth-about-lemmings" title="The truth about lemmings" rev="earth|homepage|na|r|t|i|hero|content"> The truth about lemmings</a> </h3> <p class="hero_summary"> There's more to lemmings than suicide </p> </div> <ul class="media_link_list"> <li class="media_link_list_item first"> <a class="media_link" href="http://www.bbc.com/earth/story/20141121-the-rarest-plants-in-the-world" title="The 9 rarest plants in the world" rev="earth|homepage|na|r|t|i|text|content"> The 9 rarest plants in the world </a> </li> <li class="media_link_list_item last"> <a class="media_link" href="http://www.bbc.com/earth/story/20141120-a-hunting-barn-own-in-slow-motion" title="A hunting barn owl in slow-motion" rev="earth|homepage|na|r|t|i|text|content"> <span class="icon icon_inline icon_video"></span>A hunting barn owl in slow-motion </a> </li> </ul> </div> <div class="module2 half_module capital"> <h2 class="module_title"> <a href="http://www.bbc.com/capital" rev="capital|homepage|na|r|t|i|text|headline"> Capital </a> </h2> <div class="sponsor sponsor_capital"> <div id="bbccom_module_000dc" class="bbccom_display_none bbccom_module"> <div class="moduleAdvertContent"> <div class="bbccom_text bbccom_module_adlabel">In Association With</div> <div class="bbccom_image bbccom_module_image"> <script type="text/javascript"> /*<![CDATA[*/ if(typeof BBC != 'undefined' && typeof BBC.adverts != 'undefined'){ BBC.adverts.write("module_000dc",false, {title:""}); } /*]]>*/ </script> </div> </div> </div> <script type="text/javascript"> /*<![CDATA[*/ if(typeof BBC != 'undefined' && typeof BBC.adverts != 'undefined'){ BBC.adverts.show("module_000dc"); } /*]]>*/ </script> </div> <div class="hero2"> <a class="hero_image_link" href="http://www.bbc.com/capital/story/20141121-due-tomorrow-ill-start-tonight" title="Due tomorrow? I’ll start tonight" rev="capital|homepage|na|r|t|i|hero|content"> <img src="http://ichef.bbci.co.uk/wwfeatures/304_171/images/live/p0/2c/jg/p02cjgg1.jpg" width="304" height="171" alt="Due tomorrow? I’ll start tonight" class="hero_image" /> <span class="hero_image_overlay"> </span> </a> <h3 class="hero_title"> <a href="http://www.bbc.com/capital/story/20141121-due-tomorrow-ill-start-tonight" title="Due tomorrow? I’ll start tonight" rev="capital|homepage|na|r|t|i|hero|content"> Due tomorrow? I’ll start tonight</a> </h3> <p class="hero_summary"> Procrastination: why we push things off until the last hour </p> </div> <ul class="media_link_list"> <li class="media_link_list_item first"> <a class="media_link" href="http://www.bbc.com/capital/story/20141118-the-worlds-longest-commutes" title="The world’s longest commutes" rev="capital|homepage|na|r|t|i|text|content"> The world’s longest commutes </a> </li> <li class="media_link_list_item last"> <a class="media_link" href="http://www.bbc.com/capital/story/20141120-work-rules-we-love-to-hate" title="Work rules that drive us crazy" rev="capital|homepage|na|r|t|i|text|content"> Work rules that drive us crazy </a> </li> </ul> </div> </div><div class="container module_compound"> <div class="module2 half_module autos"> <h2 class="module_title"> <a href="/autos" rev="autos|homepage|na|r|t|i|text|headline"> Autos </a> </h2> <div class="sponsor sponsor_autos"> <div id="bbccom_module_000d6" class="bbccom_display_none bbccom_module"> <div class="moduleAdvertContent"> <div class="bbccom_text bbccom_module_adlabel">In Association With</div> <div class="bbccom_image bbccom_module_image"> <script type="text/javascript"> /*<![CDATA[*/ if(typeof BBC != 'undefined' && typeof BBC.adverts != 'undefined'){ BBC.adverts.write("module_000d6",false, {title:""}); } /*]]>*/ </script> </div> </div> </div> <script type="text/javascript"> /*<![CDATA[*/ if(typeof BBC != 'undefined' && typeof BBC.adverts != 'undefined'){ BBC.adverts.show("module_000d6"); } /*]]>*/ </script> </div> <div class="hero2"> <a class="hero_image_link" href="http://www.bbc.com/autos/story/20141122-in-lieu-of-a-car-mini-brings-an-electric-scooter-to-los-angeles" title="The Mini, miniaturised" rev="autos|homepage|na|r|t|i|hero|content"> <img src="http://ichef.bbci.co.uk/wwfeatures/304_171/images/live/p0/2c/h6/p02ch695.jpg" width="304" height="171" alt="The Mini, miniaturised" class="hero_image" /> <span class="hero_image_overlay"> </span> </a> <h3 class="hero_title"> <a href="http://www.bbc.com/autos/story/20141122-in-lieu-of-a-car-mini-brings-an-electric-scooter-to-los-angeles" title="The Mini, miniaturised" rev="autos|homepage|na|r|t|i|hero|content"> The Mini, miniaturised</a> </h3> <p class="hero_summary"> The British carmaker unveils the Citysurfer Concept in LA </p> </div> <ul class="media_link_list"> <li class="media_link_list_item first"> <a class="media_link" href="http://www.bbc.com/autos/story/20141121-chevrolet-colorado-zx2-a-burly-belle-of-the-ball" title="The star of LA is… a truck?" rev="autos|homepage|na|r|t|i|text|content"> The star of LA is… a truck? </a> </li> <li class="media_link_list_item last"> <a class="media_link" href="http://www.bbc.com/autos/story/20141121-the-top-10-debuts-at-the-2014-los-angeles-auto-show" title="The top 10 debuts in LA" rev="autos|homepage|na|r|t|i|text|content"> <span class="icon icon_inline icon_slideshow"></span>The top 10 debuts in LA </a> </li> </ul> </div> <div class="module2 half_module culture"> <h2 class="module_title"> <a href="/culture" rev="culture|homepage|na|r|t|i|text|headline"> Culture </a> </h2> <div class="sponsor sponsor_culture"> <div id="bbccom_module_000d7" class="bbccom_display_none bbccom_module"> <div class="moduleAdvertContent"> <div class="bbccom_text bbccom_module_adlabel">In Association With</div> <div class="bbccom_image bbccom_module_image"> <script type="text/javascript"> /*<![CDATA[*/ if(typeof BBC != 'undefined' && typeof BBC.adverts != 'undefined'){ BBC.adverts.write("module_000d7",false, {title:""}); } /*]]>*/ </script> </div> </div> </div> <script type="text/javascript"> /*<![CDATA[*/ if(typeof BBC != 'undefined' && typeof BBC.adverts != 'undefined'){ BBC.adverts.show("module_000d7"); } /*]]>*/ </script> </div> <div class="hero2"> <a class="hero_image_link" href="http://www.bbc.com/culture/story/20141121-hunger-games-not-for-real-adults" title="Hunger Games: Not for real adults" rev="culture|homepage|na|r|t|i|hero|content"> <img src="http://ichef.bbci.co.uk/wwfeatures/304_171/images/live/p0/2c/hl/p02chlvn.jpg" width="304" height="171" alt="Hunger Games: Not for real adults" class="hero_image" /> <span class="hero_image_overlay"> </span> </a> <h3 class="hero_title"> <a href="http://www.bbc.com/culture/story/20141121-hunger-games-not-for-real-adults" title="Hunger Games: Not for real adults" rev="culture|homepage|na|r|t|i|hero|content"> Hunger Games: Not for real adults</a> </h3> <p class="hero_summary"> The new blockbuster reviewed </p> </div> <ul class="media_link_list"> <li class="media_link_list_item first"> <a class="media_link" href="http://www.bbc.com/culture/story/20141121-is-band-aid-30-in-poor-taste" title="Is Band Aid 30 in poor taste?" rev="culture|homepage|na|r|t|i|text|content"> Is Band Aid 30 in poor taste? </a> </li> <li class="media_link_list_item last"> <a class="media_link" href="http://www.bbc.com/culture/story/20141121-lewis-caroll-nothing-untoward" title="Lewis Carroll: Nothing untoward?" rev="culture|homepage|na|r|t|i|text|content"> Lewis Carroll: Nothing untoward? </a> </li> </ul> </div> </div><div class="container module_compound"> <div class="module2 half_module future"> <h2 class="module_title"> <a href="/future" rev="future|homepage|na|r|t|i|text|headline"> Future </a> </h2> <div class="sponsor sponsor_future"> <div id="bbccom_module_000d8" class="bbccom_display_none bbccom_module"> <div class="moduleAdvertContent"> <div class="bbccom_text bbccom_module_adlabel">In Association With</div> <div class="bbccom_image bbccom_module_image"> <script type="text/javascript"> /*<![CDATA[*/ if(typeof BBC != 'undefined' && typeof BBC.adverts != 'undefined'){ BBC.adverts.write("module_000d8",false, {title:""}); } /*]]>*/ </script> </div> </div> </div> <script type="text/javascript"> /*<![CDATA[*/ if(typeof BBC != 'undefined' && typeof BBC.adverts != 'undefined'){ BBC.adverts.show("module_000d8"); } /*]]>*/ </script> </div> <div class="hero2"> <a class="hero_image_link" href="http://www.bbc.com/future/story/20141121-how-to-create-a-brain-implant" title="How to create a brain implant" rev="future|homepage|na|r|t|i|hero|content"> <img src="http://ichef.bbci.co.uk/wwfeatures/304_171/images/live/p0/2c/jq/p02cjq6y.jpg" width="304" height="171" alt="How to create a brain implant" class="hero_image" /> <span class="hero_image_overlay"> </span> </a> <h3 class="hero_title"> <a href="http://www.bbc.com/future/story/20141121-how-to-create-a-brain-implant" title="How to create a brain implant" rev="future|homepage|na|r|t|i|hero|content"> How to create a brain implant</a> </h3> <p class="hero_summary"> …and how can it treat blindness? </p> </div> <ul class="media_link_list"> <li class="media_link_list_item first"> <a class="media_link" href="http://www.bbc.com/future/story/20141121-turning-a-chicken-into-a-dinosaur" title="Can we turn a chicken into T-rex?" rev="future|homepage|na|r|t|i|text|content"> Can we turn a chicken into T-rex? </a> </li> <li class="media_link_list_item last"> <a class="media_link" href="http://www.bbc.com/future/story/20141119-why-you-love-to-hate-some-friends" title="Why you love to hate some friends" rev="future|homepage|na|r|t|i|text|content"> Why you love to hate some friends </a> </li> </ul> </div> <div class="module2 half_module travel"> <h2 class="module_title"> <a href="/travel" rev="travel|homepage|na|r|t|i|text|headline"> Travel </a> </h2> <div class="sponsor sponsor_travel"> <div id="bbccom_module_000d9" class="bbccom_display_none bbccom_module"> <div class="moduleAdvertContent"> <div class="bbccom_text bbccom_module_adlabel">In Association With</div> <div class="bbccom_image bbccom_module_image"> <script type="text/javascript"> /*<![CDATA[*/ if(typeof BBC != 'undefined' && typeof BBC.adverts != 'undefined'){ BBC.adverts.write("module_000d9",false, {title:""}); } /*]]>*/ </script> </div> </div> </div> <script type="text/javascript"> /*<![CDATA[*/ if(typeof BBC != 'undefined' && typeof BBC.adverts != 'undefined'){ BBC.adverts.show("module_000d9"); } /*]]>*/ </script> </div> <div class="hero2"> <a class="hero_image_link" href="http://www.bbc.com/travel/feature/20141114-living-in-montreal" title="‘The party city of Canada’" rev="travel|homepage|na|r|t|i|hero|content"> <img src="http://ichef.bbci.co.uk/wwtravel/432_258/images/live/p0/2b/xm/p02bxmf6.jpg" width="304" height="171" alt="‘The party city of Canada’" class="hero_image" /> <span class="hero_image_overlay"> </span> </a> <h3 class="hero_title"> <a href="http://www.bbc.com/travel/feature/20141114-living-in-montreal" title="‘The party city of Canada’" rev="travel|homepage|na|r|t|i|hero|content"> ‘The party city of Canada’</a> </h3> <p class="hero_summary"> Where 'the vibe edges on the weird side’ </p> </div> <ul class="media_link_list"> <li class="media_link_list_item first"> <a class="media_link" href="http://www.bbc.com/travel/feature/20141027-a-journey-deep-inside-spains-temple-of-cave-art" title="A painting that predates modern man" rev="travel|homepage|na|r|t|i|text|content"> A painting that predates modern man </a> </li> <li class="media_link_list_item last"> <a class="media_link" href="http://www.bbc.com/travel/feature/20140930-the-last-unexplored-side-of-the-serengeti" title="An unknown corner of the Serengeti" rev="travel|homepage|na|r|t|i|text|content"> An unknown corner of the Serengeti </a> </li> </ul> </div> </div> </div> <div class="module2 clearfix worldservice" id="worldService"> <h2 class="module_title"> <a href="http://www.bbc.co.uk/worldservice/languages/index.shtml" rev="worldservice|homepage|na|r|t|i|text|headline"> BBC in your language </a> </h2> <div class="container" id="worldService_container"> <div class="worldservice_stories contentBlocks cbg0"> <div class="contentBlock" id="worldService_spanish"> <h3 class="draggable" id="worldService_spanish_title"> <a href="http://www.bbc.co.uk/mundo/" rev="worldservice|homepage|na|r|t|i|text|sub headline"> Spanish </a> </h3> <div class="title image_first" dir="ltr"> <a class="" title="¿Sirven los ejércitos para ganar guerras?" href="/mundo/noticias/2014/11/141122_guerra_historia_cambios_evolucion_az" rev="worldservice|homepage|na|r|t|i|hero|content"> <span>¿Sirven los ejércitos para ganar guerras?</span> </a> <p id="worldService_spanish_summary" class="summary"></p> </div> </div> <div class="contentBlock" id="worldService_arabic"> <h3 class="draggable" id="worldService_arabic_title"> <a href="http://www.bbc.co.uk/arabic/" rev="worldservice|homepage|na|r|t|i|text|sub headline"> Arabic </a> </h3> <div class="title image_first" dir="rtl"> <a class="" title="الناخبون في تونس يدلون بأصواتهم في انتخابات الرئاسة" href="/arabic/middleeast/2014/11/141122_tunisia_presidential_elections" rev="worldservice|homepage|na|r|t|i|hero|content"> <span>الناخبون في تونس يدلون بأصواتهم في انتخابات الرئاسة</span> </a> <p id="worldService_arabic_summary" class="summary"></p> </div> </div> <div class="contentBlock" id="worldService_persian"> <h3 class="draggable" id="worldService_persian_title"> <a href="http://www.bbc.co.uk/persian/" rev="worldservice|homepage|na|r|t|i|text|sub headline"> Persian </a> </h3> <div class="title image_first" dir="rtl"> <a class="" title="یک روز تا پایان مهلت هسته‌ای؛ احتمال 'توافق سیاسی'" href="/persian/iran/2014/11/141123_l26_iran_nuclear_talks_vienna_23_nov" rev="worldservice|homepage|na|r|t|i|hero|content"> <span>یک روز تا پایان مهلت هسته‌ای؛ احتمال 'توافق سیاسی'</span> </a> <p id="worldService_persian_summary" class="summary"></p> </div> </div> <div class="contentBlock" id="worldService_russian"> <h3 class="draggable" id="worldService_russian_title"> <a href="http://www.bbc.co.uk/russian/" rev="worldservice|homepage|na|r|t|i|text|sub headline"> Russian </a> </h3> <div class="title image_first" dir="ltr"> <a class="" title="Владимир Путин: Россия не пойдет по пути изоляции" href="/russian/russia/2014/11/141123_putin_tass_interview" rev="worldservice|homepage|na|r|t|i|hero|content"> <span>Владимир Путин: Россия не пойдет по пути изоляции</span> </a> <p id="worldService_russian_summary" class="summary"></p> </div> </div> </div> <div class="worldservice_languages contentBlocks cbg1"> <div id="worldService_languages" class="list contentBlock fourColumn"> <h3 id="worldService_languages_title" class="draggable"> <a rev="worldservice|homepage|na|r|t|i|text|sub headline" href="http://www.bbc.co.uk/worldservice/languages/index.shtml"> More languages </a> </h3> <ul class="blq-clearfix"> <li class="ar"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/arabic/" xml:lang="ar" class="ar" title="Arabic service">Arabic</a></li> <li class="as"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/azeri/" xml:lang="as" class="as" title="Azeri service">Azeri</a></li> <li class="bn"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/bengali/" xml:lang="bn" class="bn" title="Bangla service">Bangla</a></li> <li class="my"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/burmese/" xml:lang="my" class="my" title="Burmese service">Burmese</a></li> <li class="zh"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/zhongwen/simp/" xml:lang="zh" class="zh" title="Chinese service">Chinese</a></li> <li class="fr"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/afrique/" xml:lang="fr" class="fr" title="French (for Africa) service">French</a></li> <li class="ha"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/hausa/" xml:lang="ha" class="ha" title="Hausa service">Hausa</a></li> <li class="hi"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/hindi/" xml:lang="hi" class="hi" title="Hindi service">Hindi</a></li> <li class="id"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/indonesia/" xml:lang="id" class="id" title="Indonesian service">Indonesian</a></li> <li class="rw"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/gahuza/" xml:lang="rw" class="rw" title="Kirundi service">Kinyarwanda</a></li> <li class="rn"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/gahuza/" xml:lang="rn" class="rn" title="Kirundi service">Kirundi</a></li> <li class="ky"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/kyrgyz/" xml:lang="ky" class="ky" title="Kyrgyz service">Kyrgyz</a></li> <li class="ne"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/nepali/" xml:lang="ne" class="ne" title="Nepali service">Nepali</a></li> <li class="ps"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/pashto/" xml:lang="ps" class="ps" title="Pashto service">Pashto</a></li> <li class="fa"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/persian/" xml:lang="fa" class="fa" title="Persian service">Persian</a></li> <li class="pt-BR"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/portuguese/" xml:lang="pt-BR" class="pt-BR" title="Portuguese (for Brazil) service">Portuguese</a></li> <li class="ru"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/russian/" xml:lang="ru" class="ru" title="Russian service">Russian</a></li> <li class="si"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/sinhala/" xml:lang="si" class="si" title="Sinhala service">Sinhala</a></li> <li class="so"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/somali/" xml:lang="so" class="so" title="Somali service">Somali</a></li> <li class="es"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/mundo/" xml:lang="es" class="es" title="Spanish service">Spanish</a></li> <li class="sw"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/swahili/" xml:lang="sw" class="sw" title="Swahili service">Swahili</a></li> <li class="ta"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/tamil/" xml:lang="ta" class="ta" title="Tamil service">Tamil</a></li> <li class="tr"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/turkce/" xml:lang="tr" class="tr" title="Turkish service">Turkish</a></li> <li class="uk"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/ukrainian/" xml:lang="uk" class="uk" title="Ukrainian service">Ukrainian</a></li> <li class="ur"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/urdu/" xml:lang="ur" class="ur" title="Urdu service">Urdu</a></li> <li class="uz"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/uzbek/" xml:lang="uz" class="uz" title="Uzbek service">Uzbek</a></li> <li class="vi"><a rev="worldservice|homepage|na|r|t|i|text|content" href="http://www.bbc.co.uk/vietnamese/" xml:lang="vi" class="vi" title="Vietnamese service">Vietnamese</a></li> </ul> </div> </div> </div> </div> </div> <div class="colC column"> <div id="adMpu"> <div id="adMpu_container" class="container"> <div class="contentBlocks cbg0"> <div class="advert"> <div id="bbccom_mpu" class="bbccom_display_none"> <script type="text/javascript"> /*<![CDATA[*/ if(typeof BBC != 'undefined' && typeof BBC.adverts != 'undefined'){ BBC.adverts.write("mpu",true); } /*]]>*/ </script> </div> <script type="text/javascript"> /*<![CDATA[*/ if(typeof BBC != 'undefined' && typeof BBC.adverts != 'undefined'){ BBC.adverts.show("mpu"); } /*]]>*/ </script> </div> </div> </div> </div> <div id="bbccom_native_promo_top" class="bbccom_display_none">
+ <script type="text/javascript">BBC.adverts.write("native_promo_top",false);</script>
+ </div>
+ <script type="text/javascript">BBC.adverts.show("native_promo_top");</script>
+ <div class="module_wrapper"> <div class="module2 spotlight sub_module module_padded" id="spotlight_0"> <h2 class="module_title"> <a href="http://www.bbc.com/future/columns/life-connected" rev="spotlight20|homepage|na|r|t|i|text|headline"> Life connected </a> </h2> <div class="sponsor sponsor_spotlight2"> <div id="bbccom_module_spotlight20" class="bbccom_display_none bbccom_module"> <div class="moduleAdvertContent"> <div class="bbccom_text bbccom_module_adlabel">In Association With</div> <div class="bbccom_image bbccom_module_image"> <script type="text/javascript"> /*<![CDATA[*/ if(typeof BBC != 'undefined' && typeof BBC.adverts != 'undefined'){ BBC.adverts.write("module_spotlight20",false, {title:"lifeconnected"}); } /*]]>*/ </script> </div> </div> </div> <script type="text/javascript"> /*<![CDATA[*/ if(typeof BBC != 'undefined' && typeof BBC.adverts != 'undefined'){ BBC.adverts.show("module_spotlight20"); } /*]]>*/ </script> </div> <div class="module_contents"> <div class="hero2"> <a class="hero_image_link" href="http://www.bbc.com/future/story/20141120-is-tech-transforming-language" title="Is tech transforming language?" rev="spotlight20|homepage|na|r|t|i|hero|content"> <img src="http://ichef.bbci.co.uk/wwhp/ic/ibroadcast/336-189/images/live/p0/24/04/p02404zt.jpg" width="336" height="189" alt="Wors" class="hero_image" /> <span class="hero_image_overlay"> </span> </a> <h3 class="hero_title"> <a href="http://www.bbc.com/future/story/20141120-is-tech-transforming-language" title="Is tech transforming language?" rev="spotlight20|homepage|na|r|t|i|hero|content"> Is tech transforming language?</a> </h3> <p class="hero_summary"> Many think texts and tweets are crimes against proper grammar, but linguist Ben Zimmer argues that this misses the point. </p> </div> </div> </div> <div class="module2 spotlight sub_module module_padded" id="spotlight_1"> <h2 class="module_title"> <a href="http://www.bbc.co.uk/programmes/n13xtmtp" rev="spotlight21|homepage|na|r|t|i|text|headline"> the travel show </a> </h2> <div class="sponsor sponsor_spotlight2"> <div id="bbccom_module_spotlight21" class="bbccom_display_none bbccom_module"> <div class="moduleAdvertContent"> <div class="bbccom_text bbccom_module_adlabel">In Association With</div> <div class="bbccom_image bbccom_module_image"> <script type="text/javascript"> /*<![CDATA[*/ if(typeof BBC != 'undefined' && typeof BBC.adverts != 'undefined'){ BBC.adverts.write("module_spotlight21",false, {title:"thetravelshow"}); } /*]]>*/ </script> </div> </div> </div> <script type="text/javascript"> /*<![CDATA[*/ if(typeof BBC != 'undefined' && typeof BBC.adverts != 'undefined'){ BBC.adverts.show("module_spotlight21"); } /*]]>*/ </script> </div> <div class="module_contents"> <div class="hero2"> <a class="hero_image_link" href="http://www.bbc.com/travel/feature/20140908-cruising-one-of-londons-most-historical-hand-built-canals" title="London's 200-year-old hidden canal" rev="spotlight21|homepage|na|r|t|i|hero|content"> <img src="http://ichef.bbci.co.uk/wwhp/ic/ibroadcast/336-189/images/live/p0/2c/hx/p02chx6d.jpg" width="336" height="189" alt="Regent's Canal" class="hero_image" /> <span class="hero_image_overlay"> </span> </a> <h3 class="hero_title"> <a href="http://www.bbc.com/travel/feature/20140908-cruising-one-of-londons-most-historical-hand-built-canals" title="London's 200-year-old hidden canal" rev="spotlight21|homepage|na|r|t|i|hero|content"> London's 200-year-old hidden canal</a> </h3> <p class="hero_summary"> Fancy a break from the busy streets of Central London? Take in the city wildlife while cruising down charming, cafe-lined Regent's Canal, a historic waterway that was built by hand. </p> </div> <ul class="media_link_list"> <li class="media_link_list_item first last"> <a class="media_link" href="http://www.bbc.com/travel/feature/20140815-living-in-the-worlds-most-visited-cities" title="Living in: The world's most visited cities" rev="spotlight21|homepage|na|r|t|i|text|content"> Living in: The world's most visited cities </a> </li> </ul> </div> </div> <div class="module2 spotlight sub_module module_padded" id="spotlight_2"> <h2 class="module_title"> <a href="http://www.bbc.com/autos/columns/the-quora-column" rev="spotlight22|homepage|na|r|t|i|text|headline"> quirky questions </a> </h2> <div class="sponsor sponsor_spotlight2"> <div id="bbccom_module_spotlight22" class="bbccom_display_none bbccom_module"> <div class="moduleAdvertContent"> <div class="bbccom_text bbccom_module_adlabel">In Association With</div> <div class="bbccom_image bbccom_module_image"> <script type="text/javascript"> /*<![CDATA[*/ if(typeof BBC != 'undefined' && typeof BBC.adverts != 'undefined'){ BBC.adverts.write("module_spotlight22",false, {title:"quirkyquestions"}); } /*]]>*/ </script> </div> </div> </div> <script type="text/javascript"> /*<![CDATA[*/ if(typeof BBC != 'undefined' && typeof BBC.adverts != 'undefined'){ BBC.adverts.show("module_spotlight22"); } /*]]>*/ </script> </div> <div class="module_contents"> <div class="hero2"> <a class="hero_image_link" href="http://www.bbc.com/autos/story/20141121-intangible-benefits-of-luxury-car-ownership" title="The perks of owning a luxury ride" rev="spotlight22|homepage|na|r|t|i|hero|content"> <img src="http://ichef.bbci.co.uk/wwhp/ic/ibroadcast/336-189/images/live/p0/2c/k4/p02ck40y.jpg" width="336" height="189" alt="High roller" class="hero_image" /> <span class="hero_image_overlay"> </span> </a> <h3 class="hero_title"> <a href="http://www.bbc.com/autos/story/20141121-intangible-benefits-of-luxury-car-ownership" title="The perks of owning a luxury ride" rev="spotlight22|homepage|na|r|t|i|hero|content"> The perks of owning a luxury ride</a> </h3> <p class="hero_summary"> From preferential treatment at the dealership to special consideration on the highway, BBC Autos set out to learn the intangible benefits of buying a big-ticket vehicle. </p> </div> </div> </div> </div> <div id="bbccom_native_promo_bottom" class="bbccom_display_none">
+ <script type="text/javascript">BBC.adverts.write("native_promo_bottom",false);</script>
+ </div>
+ <script type="text/javascript">BBC.adverts.show("native_promo_bottom");</script>
+ <div class="module2 sub_module clearfix most_popular"> <h2 class="module_title"> <span>Most Popular in News</span> </h2> <div class="most_popular_content clearfix"> <div class="livestats livestats-tabbed contentBlock topTabs" id="most_popular_tabs"> <h3 class="tab"> <a href="#" id="most_popular_tabs_shared_link">Shared</a> </h3> <div class="panel" id="most_popular_tabs_shared"> <ul class="most_popular_list clearfix"> <li class="first-child"> <a href="http://www.bbc.co.uk/news/magazine-30122030" rev="mostpopular|homepage|na|r|t|i|text|content"> <span class="livestats-icon livestats-1">1</span> Jerusalem's 800-year-old Indian hospice </a> </li> <li class=""> <a href="http://www.bbc.co.uk/news/magazine-30129713" rev="mostpopular|homepage|na|r|t|i|text|content"> <span class="livestats-icon livestats-2">2</span> The writer who foresaw the rise of the totalitarian state </a> </li> <li class=""> <a href="http://news.bbc.co.uk/2/hi/programmes/from_our_own_correspondent/8015480.stm" rev="mostpopular|homepage|na|r|t|i|text|content"> <span class="livestats-icon livestats-3">3</span> From 'palazzo' to pastures new </a> </li> <li class=""> <a href="http://www.bbc.co.uk/news/world-us-canada-30166759" rev="mostpopular|homepage|na|r|t|i|text|content"> <span class="livestats-icon livestats-4">4</span> Ex-Washington Mayor Marion Barry dies </a> </li> <li class=""> <a href="http://www.bbc.co.uk/news/magazine-29352004" rev="mostpopular|homepage|na|r|t|i|text|content"> <span class="livestats-icon livestats-5">5</span> Will mayors one day rule the world? </a> </li> </ul> </div> <h3 class="tab"> <a href="#" id="most_popular_tabs_read_link">Read</a> </h3> <div class="panel" id="most_popular_tabs_read"> <ul class="most_popular_list clearfix"> <li class="first-child"> <a href="http://www.bbc.co.uk/news/magazine-30122030" rev="mostpopular|homepage|na|r|t|i|text|content"> <span class="livestats-icon livestats-1">1</span> Jerusalem's 800-year-old Indian hospice </a> </li> <li class=""> <a href="http://www.bbc.co.uk/news/magazine-30129713" rev="mostpopular|homepage|na|r|t|i|text|content"> <span class="livestats-icon livestats-2">2</span> The writer who foresaw the rise of the totalitarian state </a> </li> <li class=""> <a href="http://www.bbc.co.uk/news/world-africa-30167886" rev="mostpopular|homepage|na|r|t|i|text|content"> <span class="livestats-icon livestats-3">3</span> 'Boko Haram' kills Nigeria fishermen </a> </li> <li class=""> <a href="http://www.bbc.co.uk/news/uk-england-30167555" rev="mostpopular|homepage|na|r|t|i|text|content"> <span class="livestats-icon livestats-4">4</span> Charing Cross closed after fire </a> </li> <li class=""> <a href="http://www.bbc.co.uk/news/uk-politics-30167160" rev="mostpopular|homepage|na|r|t|i|text|content"> <span class="livestats-icon livestats-5">5</span> UK 'unlikely to meet' migration target </a> </li> </ul> </div> <h3 class="tab selected"> <a href="#" id="most_popular_tabs_media_link">Watched/Listened</a> </h3> <div class="panel selected" id="most_popular_tabs_media"> <ul class="most_popular_list clearfix"> <li class="first-child"> <a href="http://www.bbc.co.uk/news/world-europe-30166572" rev="mostpopular|homepage|na|r|t|i|text|content"> <span class="livestats-icon livestats-1">1</span> Trierweiler: 'It wasn't a suicide attempt' </a> </li> <li class=""> <a href="http://www.bbc.co.uk/news/world-europe-25900540" rev="mostpopular|homepage|na|r|t|i|text|content"> <span class="livestats-icon livestats-2">2</span> Hollande saga 'stain on France' </a> </li> <li class=""> <a href="http://www.bbc.co.uk/news/entertainment-arts-30155434" rev="mostpopular|homepage|na|r|t|i|text|content"> <span class="livestats-icon livestats-3">3</span> Kim Kardashian's bottom: Work of art? </a> </li> <li class=""> <a href="http://www.bbc.co.uk/news/video_and_audio/" rev="mostpopular|homepage|na|r|t|i|text|content"> <span class="livestats-icon livestats-4">4</span> One-minute World News </a> </li> <li class=""> <a href="http://www.bbc.co.uk/news/world-asia-india-30161172" rev="mostpopular|homepage|na|r|t|i|text|content"> <span class="livestats-icon livestats-5">5</span> Sold and beaten: India's slave brides </a> </li> </ul> </div> <script type="text/javascript"> /*<![CDATA[*/ require(["desktop/ui/tabs"], function (tabs) { var methodOnReady = function(){ tabs.registerTabs('#most_popular_tabs'); }; if (typeof require.ready === 'function') { require.ready(methodOnReady); } else { require(['domReady'], function (domReady) { domReady(methodOnReady); }); } }); /*]]>*/; </script> </div> </div> </div> <div class="module2 broadcast"> <h2 class="module_title"> <span>TV &amp; Radio</span> </h2> <div class="module_contents broadcast_world_news"> <h3> <a href="/news/world_radio_and_tv/" rev="broadcast|homepage|na|r|t|i|text|sub headline"> World News TV </a> </h3> <a href="http://www.bbc.co.uk/worldnews/programmes/schedules">Schedules in your country</a> </div> <div class="module_contents broadcast_world_radio"> <h3> <a href="/worldservice/programmes/index.shtml" rev="broadcast|homepage|na|r|t|i|text|sub headline"> World Service Radio </a> </h3> <div class="broadcast_programme now"> <h4 class="broadcast_programme_time"> On air now: <span> 14:05 - 15:00 GMT </span> </h4> <dl class="broadcast_programme_details"> <dt> <a title="The Science Hour" href="/programmes/p02c0vq3/microsite/"> <span class="icon icon_inline icon_live"></span> The Science Hour </a> </dt> <dd>Monica Grady from the Open University discusses the latest news from the comet mission.</dd> </dl> </div> <div class="broadcast_programme "> <h4 class="broadcast_programme_time"> Next on air: <span> 15:00 - 15:05 GMT </span> </h4> <dl class="broadcast_programme_details"> <dt> <a title="BBC News" href="/programmes/p02c0vq4/microsite/"> BBC News </a> </dt> <dd>The latest five minute news bulletin from BBC World Service.</dd> </dl> </div> <a href="/worldservice/programmes/schedules">Today's Schedule</a> </div> <div class="module_contents broadcast_bulletins"> <h4>Hourly bulletins:</h4> <ul class="clearfix"> <li class="first"> <a href="http://wsdownload.bbc.co.uk/worldservice/css/32mp3/latest/bbcnewssummary.mp3"> <span class="icon icon_inline icon_audio"></span> News </a> </li> <li> <a href="/iplayer/console/p02c0vp6" id="bulletin_sport"> <span class="icon icon_inline icon_audio"></span> Sport </a> </li> <li class="last"> <a href="/iplayer/console/p02c0vp6" id="bulletin_business"> <span class="icon icon_inline icon_audio"></span> Business </a> </li> </ul> </div> </div> <script type="text/javascript"> /*<![CDATA[*/ require(["desktop/utils/popup"], function (popupManager) { var methodOnReady = function(){ popupManager.registerPopup('#bulletin_sport',{windowName:'hourlyBulletinPopUpWindow',width:'380',height:'665',left:'300',top:'100'}); popupManager.registerPopup('#bulletin_business',{windowName:'hourlyBulletinPopUpWindow',width:'380',height:'665',left:'300',top:'100'}); }; if (typeof require.ready === 'function') { require.ready(methodOnReady); } else { require(['domReady'], function (domReady) { domReady(methodOnReady); }); } }); /*]]>*/ </script> <div id="weather" class="module2 clearfix weather"> <h2 class="module_title"> <a href="/weather/" rev="weather|homepage|na|r|t|i|text|headline"> Weather </a> </h2> <div class="sponsor sponsor_weather"> <div id="bbccom_module_00080" class="bbccom_display_none bbccom_module"> <div class="moduleAdvertContent"> <div class="bbccom_text bbccom_module_adlabel">In Association With</div> <div class="bbccom_image bbccom_module_image"> <script type="text/javascript"> /*<![CDATA[*/ if(typeof BBC != 'undefined' && typeof BBC.adverts != 'undefined'){ BBC.adverts.write("module_00080",false, {title:""}); } /*]]>*/ </script> </div> </div> </div> <script type="text/javascript"> /*<![CDATA[*/ if(typeof BBC != 'undefined' && typeof BBC.adverts != 'undefined'){ BBC.adverts.show("module_00080"); } /*]]>*/ </script> </div> <div id="weather_forecast" class="weatherforecast contentBlock weather_loading"> <h3>London</h3> <div id="weather_searchPanel" class="searchPanel editPanel contentBlock"> <form id="weather_searchPanel_form" method="get" action="/wwhp"> <fieldset> <input type="hidden" name="module" value="weather" /> <input type="hidden" name="action" value="search" /> <div class="field"> <label>Enter city, town or region</label> <input type="text" size="25" maxlength="40" value="Enter city, town or region" class="searchPanelSearch" name="location_term" /> <button type="submit" class="submit">Search</button> </div> </fieldset> </form> <div id="searchResults" class="results"> <p>&nbsp;</p> <ul><li>&nbsp;</li></ul> </div> </div> <dl class="dayForecast"> <dt>Sun</dt> <dd> <a href="/weather/2643743"> <img width="57" height="57" alt="Heavy Rain" title="Heavy Rain" src="http://static.bbci.co.uk/weather/0.5.284/images/icons/individual_56_icons/en_on_light_bg/15.gif" class="icon" /> </a> <p class="temp max"> <span class="label">Max<span class="hide"> Temperature</span>:</span> <span class="value"> 12&#176;C</span> <span class="hide">54&#176;F</span> </p> <p class="temp min"> <span class="label">Min<span class="hide"> Temperature</span>:</span> <span class="value"> 3&#176;C</span> <span class="hide">37&#176;F</span> </p> </dd> <dt>Mon</dt> <dd> <a href="/weather/2643743"> <img width="57" height="57" alt="Sunny" title="Sunny" src="http://static.bbci.co.uk/weather/0.5.284/images/icons/individual_56_icons/en_on_light_bg/1.gif" class="icon" /> </a> <p class="temp max"> <span class="label">Max<span class="hide"> Temperature</span>:</span> <span class="value"> 8&#176;C</span> <span class="hide">46&#176;F</span> </p> <p class="temp min"> <span class="label">Min<span class="hide"> Temperature</span>:</span> <span class="value"> 4&#176;C</span> <span class="hide">39&#176;F</span> </p> </dd> <dt class="last">Tue</dt> <dd class="last"> <a href="/weather/2643743"> <img width="57" height="57" alt="Light Cloud" title="Light Cloud" src="http://static.bbci.co.uk/weather/0.5.284/images/icons/individual_56_icons/en_on_light_bg/7.gif" class="icon" /> </a> <p class="temp max"> <span class="label">Max<span class="hide"> Temperature</span>:</span> <span class="value"> 9&#176;C</span> <span class="hide">48&#176;F</span> </p> <p class="temp min"> <span class="label">Min<span class="hide"> Temperature</span>:</span> <span class="value"> 7&#176;C</span> <span class="hide">45&#176;F</span> </p> </dd> </dl> <div class="module_footer_links clearfix"> <ul> <li class="first last"> <a class="media_link" href="/weather/2643743" title="Detailed forecast">Detailed forecast</a> </li> </ul> </div> </div> </div> <script type="text/javascript"> /*<![CDATA[*/ require(["desktop/ui/weather"], function (weather) { var methodOnReady = function(){ weather = new weather; weather.renderWeather('#weather',{"autocomplete":{"enabled":false,"minLength":4}}); }; if (typeof require.ready === 'function') { require.ready(methodOnReady); } else { require(['domReady'], function (domReady) { domReady(methodOnReady); }); } }); /*]]>*/ </script> <div id="adMpuBottom"> <div id="adMpuBottom_container" class="container"> <div class="contentBlocks cbg0"> <div class="advert"> <div id="bbccom_mpu_bottom" class="bbccom_display_none"> <script type="text/javascript"> /*<![CDATA[*/ if(typeof BBC != 'undefined' && typeof BBC.adverts != 'undefined'){ BBC.adverts.write("mpu_bottom",true); } /*]]>*/ </script> </div> <script type="text/javascript"> /*<![CDATA[*/ if(typeof BBC != 'undefined' && typeof BBC.adverts != 'undefined'){ BBC.adverts.show("mpu_bottom"); } /*]]>*/ </script> </div> </div> </div> </div> </div> <div id="exploreTray"> <h2>Explore the BBC</h2> <div class="directory"> <div class="directoryColumnWrapper"> <div class="directoryColumn hpDir1"> <h3><a href="http://www.bbc.com/news/">News</a></h3> <h4 class="offscreen">World Regions</h4> <ul> <li><a href="http://www.bbc.co.uk/news/world/africa/">Africa</a></li> <li><a href="http://www.bbc.co.uk/news/world/asia/">Asia</a></li> <li><a href="http://www.bbc.com/news/world/europe/">Europe</a></li> <li><a href="http://www.bbc.com/news/world/latin_america/">Latin America</a></li> <li><a href="http://www.bbc.com/news/world/middle_east/">Middle East</a></li> <li><a href="http://www.bbc.com/news/uk/">UK</a></li> <li><a href="http://www.bbc.com/news/world/us_and_canada/">US &amp; Canada</a></li> <li><a href="http://www.bbc.com/news/also_in_the_news/">Also in the News</a></li> </ul> </div> <div class="directoryColumn hpDir2"> <ul class="headingSpace"> <li><a href="http://www.bbc.com/news/business/">Business</a></li> <li><a href="http://www.bbc.com/news/business-22434141">Entrepreneurship</a></li> <li><a href="http://www.bbc.com/news/business-11428889">Technology of Business</a></li> <li><a href="http://www.bbc.com/news/business-12686570">Knowledge Economy</a></li> <li><a href="http://www.bbc.com/news/health/">Health</a></li> <li><a href="http://www.bbc.com/news/science_and_environment/">Science &amp; Environment</a></li> <li><a href="http://www.bbc.com/news/technology/">Technology</a></li> <li><a href="http://www.bbc.com/news/entertainment_and_arts/">Entertainment &amp; Arts</a></li> </ul> </div> <p class="aToz">Can't find it? Try the <a href="http://www.bbc.co.uk/a-z/">A to Z</a></p> </div> <div class="directoryColumn hpDir3"> <h3><a href="http://www.bbc.com/sport">Sport</a></h3> <ul> <li><a href="http://www.bbc.co.uk/sport/0/football/">Football</a></li> <li><a href="http://www.bbc.co.uk/sport/0/cricket/">Cricket</a></li> <li><a href="http://www.bbc.co.uk/sport/0/tennis/">Tennis</a></li> <li><a href="http://www.bbc.co.uk/sport/0/formula1/">Formula 1</a></li> </ul> <h3 class="noSubSections"><a href="http://www.bbc.com/news/magazine/">Magazine</a></h3> <h3 class="noSubSections"><a href="http://www.bbc.co.uk/weather/">Weather</a></h3> </div> <div class="directoryColumn hpDir4"> <h3 class="noSubSections"><a href="http://www.bbc.com/autos">Autos</a></h3> <h3 class="noSubSections"><a href="http://www.bbc.com/capital">Capital</a></h3> <h3 class="noSubSections"><a href="http://www.bbc.com/culture">Culture</a></h3> <h3 class="noSubSections"><a href="http://www.bbc.com/earth/world">Earth</a></h3> <h3 class="noSubSections"><a href="http://www.bbc.com/future">Future</a></h3> <h3 class="noSubSections"><a href="http://www.bbc.com/travel">Travel</a></h3> </div> <div class="directoryColumn hpDir5"> <h3><a href="http://www.bbc.com/tv">TV Channels</a></h3> <ul> <li><a href="http://www.bbc.com/news/world_radio_and_tv/">BBC World News</a></li> <li><a href="http://www.bbc.com/first">BBC First</a></li> <li><a href="http://bbcentertainment.com/">BBC Entertainment</a></li> <li><a href="http://www.bbcknowledge.com/">BBC Knowledge</a></li> <li><a href="http://www.bbclifestyle.com/">BBC Lifestyle</a></li> <li><a href="http://www.bbchd.com/">BBC HD</a></li> <li><a href="http://www.bbcaustralia.com/channels/uktv">UKTV</a></li> <li><a href="http://www.cbeebies.com/">Cbeebies</a></li> </ul> <h3 class="noSubSections"><a href="http://www.topgear.com/uk/">Top Gear</a></h3> <h3 class="noSubSections"><a href="http://www.bbcgoodfood.com/">Good Food</a></h3> </div> </div> </div> </div> <script type="text/javascript"> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-47973230-2', 'bbc.com'); ga('send', 'pageview'); </script> </div> <!--[if IE 6]> <div id="blq-ie6-upgrade"> <p> <span>You're using the Internet Explorer 6 browser to view the BBC website. Our site will work much better if you change to a more modern browser. It's free, quick and easy.</span> <a href="http://www.browserchoice.eu/">Find out more <span>about upgrading your browser</span> here&hellip;</a> </p> </div> <![endif]--> <div id="blq-foot" xml:lang="en" class="blq-rst blq-clearfix blq-foot-grey"> <div id="blq-footlinks"> <h2 class="blq-hide">BBC links</h2> <ul> <li class="blq-footlinks-row"> <ul class="blq-footlinks-row-list"> <li><a href="http://m.bbc.co.uk/" id="blq-footer-mobile">Mobile site</a></li><li><a href="/terms/">Terms of Use</a></li><li><a href="/aboutthebbc/">About the BBC</a></li> </ul> </li> <li class="blq-footlinks-row"> <ul class="blq-footlinks-row-list"> <li><a href="http://advertising.bbcworldwide.com">Advertise With Us</a></li><li><a href="/privacy/">Privacy</a></li><li><a href="/accessibility/">Accessibility Help</a></li> </ul> </li> <li class="blq-footlinks-row"> <ul class="blq-footlinks-row-list"> <li><a href="/privacy/cookies/international/">Ad Choices</a></li><li><a href="/privacy/cookies/about">Cookies</a></li><li><a href="/contact/">Contact the BBC</a></li> </ul> </li> <li class="blq-footlinks-row"> <ul class="blq-footlinks-row-list"> <li><a href="/guidance/">Parental Guidance</a></li> </ul> </li> </ul> <script type="text/javascript">/*<![CDATA[*/ (function() { var mLink = document.getElementById('blq-footer-mobile'), stick = function() { var d = new Date (); d.setYear(d.getFullYear() + 1); d = d.toUTCString(); window.bbccookies.set('ckps_d=m;domain=.bbc.co.uk;path=/;expires=' + d ); window.bbccookies.set('ckps_d=m;domain=.bbc.com;path=/;expires=' + d ); }; if (mLink) { if (mLink.addEventListener) { mLink.addEventListener('click', stick, false); } else if (mLink.attachEvent) { mLink.attachEvent('onclick', stick); } } })(); /*]]>*/</script> </div> <div id="blq-foot-blocks" class="blq-footer-image-light"><img src="http://static.bbci.co.uk/frameworks/barlesque/2.75.0/desktop/3.5/img/blocks/light.png" width="84" height="24" alt="BBC" /></div> <div id="bbccom_bottom" class="bbccom_display_none" style="width:468px; text-align:right;">
+ <script type="text/javascript">BBC.adverts.write("bottom",true);</script>
+ </div>
+ <script type="text/javascript">BBC.adverts.show("bottom");</script>
+ <p id="blq-disclaim"><span id="blq-copy">BBC &copy; 2014</span> <a href="/help/web/links/">The BBC is not responsible for the content of external sites. Read more.</a></p> <div id="blq-obit"><p><strong>This page is best viewed in an up-to-date web browser with style sheets (CSS) enabled. While you will be able to view the content of this page in your current browser, you will not be able to get the full visual experience. Please consider upgrading your browser software or enabling style sheets (CSS) if you are able to do so.</strong></p></div> </div> </div>
+<!-- BBCDOTCOM analytics template:client-side journalismVariant: false ipIsAdvertiseCombined: true adsEnabled: true flagpole: ON -->
+
+
+ <!-- Start AudienceScience -->
+ <script type="text/javascript">
+ /*<![CDATA[*/
+ if (BBC.adverts.isActive('analytics')) {
+ document.write('<script type="text/javascript" src="http://js.revsci.net/gateway/gw.js?csid=J08781">\x3C/script>');
+ }
+ /*]]>*/
+ </script>
+ <script type="text/javascript">
+ /*<![CDATA[*/
+ if (BBC.adverts.isActive('analytics')) {
+ DM_tag();
+ }
+ /*]]>*/
+ </script>
+ <!-- End AudienceScience -->
+
+ <!-- Start comScore Tag -->
+ <script type="text/javascript">
+ /*<![CDATA[*/
+ if (BBC.adverts.isActive('analytics')) {
+ document.write("\x3Cscript src='" + (document.location.protocol == "https:" ? "https://sb" : "http://b") + ".scorecardresearch.com/beacon.js'>\x3C/script>");
+ }
+ /*]]>*/
+ </script>
+ <script type="text/javascript">
+ /*<![CDATA[*/
+ if (BBC.adverts.isActive('analytics')) {
+ COMSCORE.beacon({
+ c1:2,
+ c2:"6035051",
+ c3:"",
+ c4:"www.bbc.com/",
+ c5:"",
+ c6:"",
+ c15:""
+ });
+ }
+ /*]]>*/
+ </script>
+ <!-- End comScore Tag -->
+
+ <!-- Begin Sitestat4 code -->
+ <script type="text/javascript">
+ /*<![CDATA[*/
+ if (BBC.adverts.isActive('sitestat')) {
+ function sitestat(ns_l){ns_l+='&amp;ns__t='+(new Date()).getTime();
+ ns_0=document.referrer;
+ ns_0=(ns_0.lastIndexOf('/')==ns_0.length-1)?ns_0.substring(ns_0.lastIndexOf('/'),0):ns_0;
+ if(ns_0.length>0)ns_l+='&amp;ns_referrer='+encodeURI(ns_0);
+ if(document.images){ns_1=new Image();ns_1.src=ns_l;}else
+ document.write('<img src="'+ns_l+'" width="1" height="1" alt="">');}
+ sitestat("http://nl.sitestat.com/adfab/bbc/s?teller");
+ }
+ /*]]>*/
+ </script>
+ <!-- End Sitestat4 code -->
+
+
+ <!-- Start Nielsen Online SiteCensus V6.0 -->
+ <script type="text/javascript">
+ /*<![CDATA[*/
+ if (BBC.adverts.isActive('nielsen-au')) {
+ <!-- COPYRIGHT 2009 Nielsen Online -->
+ document.write('<script type="text/javascript" src="' + ('https:' == document.location.protocol ? 'https:' : 'http:') + '//secure-au.imrworldwide.com/v60.js">\x3C/script>');
+ }
+ /*]]>*/
+ </script> <script type="text/javascript"> /*<![CDATA[*/
+ if (BBC.adverts.isActive('nielsen-au')) {
+ nol_t({cid:"au-bbc",content:"0",server:"secure-au"}).record().post();
+ }
+ /*]]>*/
+ </script>
+ <!-- End Nielsen Online SiteCensus V6.0 -->
+
+
+ <!-- Start Nielsen Online SiteCensus V6.0 -->
+ <script type="text/javascript">
+ /*<![CDATA[*/
+ if (BBC.adverts.isActive('nielsen-nz')) {
+ <!-- COPYRIGHT 2009 Nielsen Online -->
+ document.write('<script type="text/javascript" src="' + ('https:' == document.location.protocol ? 'https:' : 'http:') + '//secure-nz.imrworldwide.com/v60.js">\x3C/script>');
+ }
+ /*]]>*/
+ </script> <script type="text/javascript"> /*<![CDATA[*/
+ if (BBC.adverts.isActive('nielsen-nz')) {
+ nol_t({cid:"nz-bbc",content:"0",server:"secure-nz"}).record().post();
+ }
+ /*]]>*/
+ </script>
+ <!-- End Nielsen Online SiteCensus V6.0 -->
+
+
+ <!-- Start Nielsen Online SiteCensus V6.0 -->
+ <script type="text/javascript">
+ /*<![CDATA[*/
+ if (BBC.adverts.isActive('nielsen-us')) {
+ <!-- COPYRIGHT 2010 Nielsen Online -->
+ (function () {
+ var d = new Image(1, 1);
+ d.onerror = d.onload = function () {
+ d.onerror = d.onload = null;
+ };
+ d.src = [('https:' == document.location.protocol ? 'https:' : 'http:') + "//secure-us.imrworldwide.com/cgi-bin/m?ci=us-804789h&amp;cg=0&amp;cc=1&amp;si=", encodeURI(window.location.href), "&amp;rp=",
+ encodeURI(document.referrer), "&amp;ts=compact&amp;rnd=", (new Date()).getTime()].join('');
+ })();
+ }
+ /*]]>*/
+ </script>
+ <!-- End Nielsen Online SiteCensus V6.0 -->
+
+
+ <!-- Effective Measure BBCCOM-1195 -->
+ <script type="text/javascript">
+ /*<![CDATA[*/
+ if (BBC.adverts.isActive('analytics')) {
+ (function() {
+ var em = document.createElement('script'); em.type = 'text/javascript'; em.async = true;
+ em.src = ('https:' == document.location.protocol ? 'https://me-ssl' : 'http://me-cdn') + '.effectivemeasure.net/em.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(em, s);
+ })();
+ }
+ /*]]>*/
+ </script>
+ <!-- End Effective Measure -->
+
+
+ <!-- AGOF BBCCOM-1271 -->
+ <script type="text/javascript">
+ /*<![CDATA[*/
+ if (BBC.adverts.isActive('agof')) {
+ var ivwcode="default";
+ if(typeof BBC != 'undefined' && typeof BBC.adverts != 'undefined'){
+ ivwcode = BBC.adverts.getSectionPath();
+ }
+ var IVW="http://bbc.ivwbox.de/cgi-bin/ivw/CP/"+ivwcode+";";
+ document.write("<img src=\""+IVW+"?r="+encodeURI(document.referrer)+"&d="+(Math.random()*100000)+"\" width=\"1\" height=\"1\" alt=\"szmtag\" />");
+ }
+ /*]]>*/
+ </script>
+ <script type="text/javascript">
+ /*<![CDATA[*/
+ if (BBC.adverts.isActive('agof')) {
+ var szmvars="bbc//CP/"+ivwcode;
+ document.write('<script src="http://bbc.ivwbox.de/2004/01/survey.js" type="text/javascript">\x3C/script>');
+ }
+ /*]]>*/
+ </script>
+ <!-- End AGOF -->
+
+
+
+<!-- BBCDOTCOM Body Last -->
+ </div> </div> <script type="text/javascript"> if (typeof require !== 'undefined') { require(['istats-1'], function(istats){ istats.track('external', { region: document.getElementById('blq-main') }); istats.track('download', { region: document.getElementById('blq-main') }); }); } </script> <script type="text/html" id="blq-panel-template-promo"><![CDATA[ <div id="blq-panel-promo" class="blq-masthead-container"></div> ]]></script> <script type="text/html" id="blq-panel-template-more"><![CDATA[ <div id="blq-panel-more" class="blq-masthead-container blq-clearfix" xml:lang="en-GB" dir="ltr"> <div class="blq-panel-container panel-paneltype-more"> <div class="panel-header"> <h2> <a href="/a-z/"> More&hellip; </a> </h2> <a href="/a-z/" class="panel-header-links panel-header-link">Full A-Z<span class="blq-hide"> of BBC sites</span></a> </div> <div class="panel-component panel-links"> <ul> <li> <a href="/cbbc/" >CBBC</a> </li> <li> <a href="/cbeebies/" >CBeebies</a> </li> <li> <a href="http://www.bbc.com/capital" >Capital</a> </li> </ul> <ul> <li> <a href="/food/" >Food</a> </li> <li> <a href="/history/" >History</a> </li> <li> <a href="/comedy/" >Comedy</a> </li> </ul> <ul> <li> <a href="/music/" >Music</a> </li> <li> <a href="/science/" >Science</a> </li> <li> <a href="/learning/" >Learning</a> </li> </ul> <ul> <li> <a href="/local/" >Local</a> </li> <li> <a href="http://www.bbc.com/travel/" >Travel</a> </li> <li> <a href="/nature/" >Nature</a> </li> </ul> </div> </div> ]]></script> </body> </html> \ No newline at end of file
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/sample_blogpost.html b/vendor/github.com/tdewolff/minify/benchmarks/sample_blogpost.html
new file mode 100644
index 0000000..f0b977f
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/sample_blogpost.html
@@ -0,0 +1,580 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="UTF-8">
+ <title>research!rsc: My Go Resolutions for 2017</title>
+ <link rel="alternate" type="application/atom+xml" title="research!rsc - Atom" href="http://research.swtch.com/feed.atom" />
+
+<link href='https://fonts.googleapis.com/css?family=Inconsolata:400,700' rel='stylesheet' type='text/css'>
+<script type="text/javascript" src="https://use.typekit.com/skm6yij.js"></script>
+<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
+<style>
+ body {
+ padding: 0;
+ margin: 0;
+ font-size: 100%;
+ }
+ .header {
+ height: 1.25em;
+ background-color: #dff;
+ margin: 0;
+ padding: 0.1em 0.1em 0.2em;
+ border-top: 1px solid black;
+ border-bottom: 1px solid #8ff;
+ }
+ .header h3 {
+ margin: 0;
+ padding: 0 2em;
+ display: inline-block;
+ padding-right: 2em;
+ font-style: italic;
+ font-family: "adobe-text-pro" !important;
+ font-size: 90%;
+ }
+ .rss {
+ float: right;
+ padding-top: 0.2em;
+ padding-right: 2em;
+ display: none;
+ }
+ .toc {
+ margin-top: 2em;
+ }
+ .toc-title {
+ font-family: "caflisch-script-pro";
+ font-size: 300%;
+ line-height: 50%;
+ }
+ .toc-subtitle {
+ display: block;
+ margin-bottom: 1em;
+ font-size: 83%;
+ }
+ @media only screen and (max-width: 550px) { .toc-subtitle { display: none; } }
+ .header h3 a {
+ color: black;
+ }
+ .header h4 {
+ margin: 0;
+ padding: 0;
+ display: inline-block;
+ font-weight: normal;
+ font-size: 83%;
+ }
+ @media only screen and (max-width: 550px) { .header h4 { display: none; } }
+ .main {
+ padding: 0 2em;
+ }
+ @media only screen and (max-width: 479px) { .article { font-size: 120%; } }
+ .article h1 {
+ text-align: center;
+ }
+ .article h1, .article h2, .article h3 {
+ font-family: 'Myriad Pro';
+ }
+ .normal {
+ font-size: medium;
+ font-weight: normal;
+ }
+ .when {
+ text-align: center;
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ }
+ .when p {
+ margin: 0;
+ padding: 0;
+ }
+ .article h2 {
+ font-size: 100%;
+ padding-top: 0.25em;
+ }
+ pre {
+ margin-left: 4em;
+ margin-right: 4em;
+ }
+ pre, code {
+ font-family: 'Inconsolata', monospace;
+ font-size: 100%;
+ }
+ .footer {
+ margin-top: 10px;
+ font-size: 83%;
+ font-family: sans-serif;
+ }
+ .comments {
+ margin-top: 2em;
+ background-color: #ffe;
+ border-top: 1px solid #aa4;
+ border-left: 1px solid #aa4;
+ border-right: 1px solid #aa4;
+ }
+ .comments-header {
+ padding: 0 5px 0 5px;
+ }
+ .comments-header p {
+ padding: 0;
+ margin: 3px 0 0 0;
+ }
+ .comments-body {
+ padding: 5px 5px 5px 5px;
+ }
+ #plus-comments {
+ border-bottom: 1px dotted #ccc;
+ }
+ .plus-comment {
+ width: 100%;
+ font-size: 14px;
+ border-top: 1px dotted #ccc;
+ }
+ .me {
+ background-color: #eec;
+ }
+ .plus-comment ul {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ width: 100%;
+ display: inline-block;
+ }
+ .comment-when {
+ color:#999;
+ width:auto;
+ padding:0 5px;
+ }
+ .old {
+ font-size: 83%;
+ }
+ .plus-comment ul li {
+ display: inline-block;
+ vertical-align: top;
+ margin-top: 5px;
+ margin-bottom: 5px;
+ padding: 0;
+ }
+ .plus-icon {
+ width: 45px;
+ }
+ .plus-img {
+ float: left;
+ margin: 4px 4px 4px 4px;
+ width: 32px;
+ height: 32px;
+ }
+ .plus-comment p {
+ margin: 0;
+ padding: 0;
+ }
+ .plus-clear {
+ clear: left;
+ }
+ .toc-when {
+ font-size: 83%;
+ color: #ccc;
+ }
+ .toc {
+ list-style: none;
+ }
+ .toc li {
+ margin-bottom: 0.5em;
+ }
+ .toc-head {
+ margin-bottom: 1em !important;
+ font-size: 117%;
+ }
+ .toc-summary {
+ margin-left: 2em;
+ }
+ .favorite {
+ font-weight: bold;
+ }
+ .article p {
+ line-height: 144%;
+ }
+ sup, sub {
+ vertical-align: baseline;
+ position: relative;
+ font-size: 83%;
+ }
+ sup {
+ bottom: 1ex;
+ }
+ sub {
+ top: 0.8ex;
+ }
+
+ .main {
+ position: relative;
+ margin: 0 auto;
+ padding: 0;
+ width: 900px;
+ }
+ @media only screen and (min-width: 768px) and (max-width: 959px) { .main { width: 708px; } }
+ @media only screen and (min-width: 640px) and (max-width: 767px) { .main { width: 580px; } }
+ @media only screen and (min-width: 480px) and (max-width: 639px) { .main { width: 420px; } }
+ @media only screen and (max-width: 479px) { .main { width: 300px; } }
+
+</style>
+
+ </head>
+ <body>
+
+<div class="header">
+ <h3><a href="/">research!rsc</a></h3>
+ <h4>Thoughts and links about programming,
+ by <a href="https://swtch.com/~rsc/" rel="author">Russ Cox</a> </h4>
+ <a class="rss" href="/feed.atom"><img src="/feed-icon-14x14.png" /></a>
+</div>
+
+ <div class="main">
+ <div class="article">
+ <h1>My Go Resolutions for 2017
+ <div class="normal">
+ <div class="when">
+
+ Posted on Wednesday, January 18, 2017.
+
+
+ </div>
+ </div>
+ </h1>
+ <p class=lp>’Tis the season for resolutions,
+and I thought it would make sense to write a little
+about what I hope to work on this year as far as Go is concerned.</p>
+
+<p class=pp>My goal every year is to <em>help Go developers</em>.
+I want to make sure that the work we do on the Go team
+has a significant, positive impact on Go developers.
+That may sound obvious, but there are a variety of common ways to fail to achieve that:
+for example, spending too much time cleaning up or optimizing code that doesn’t need it;
+responding only to the most common or recent complaints or requests;
+or focusing too much on short-term improvements.
+It’s important to step back and make sure we’re focusing
+our development work where it does the most good.</p>
+
+<p class=pp>This post outlines a few of my own major focuses for this year.
+This is only my personal list, not the Go team’s list.</p>
+
+<p class=pp>One reason for posting this is to gather feedback.
+If these spark any ideas or suggestions of your own,
+please feel free to comment below or on the linked GitHub issues.</p>
+
+<p class=pp>Another reason is to make clear that I’m aware of these issues as important.
+I think too often people interpret lack of action by the Go team
+as a signal that we think everything is perfect, when instead
+there is simply other, higher priority work to do first.</p>
+
+<h2><a name="alias"></a>Type aliases</h2>
+
+<p class=lp>There is a recurring problem with moving types
+from one package to another during large codebase refactorings.
+We tried to solve it last year with <a href="https://golang.org/issue/16339">general aliases</a>,
+which didn’t work for at least two reasons: we didn’t explain the change well enough,
+and we didn’t deliver it on time, so it wasn’t ready for Go 1.8.
+Learning from that experience,
+I <a href="https://www.youtube.com/watch?v=h6Cw9iCDVcU">gave a talk</a>
+and <a href="https://talks.golang.org/2016/refactor.article">wrote an article</a>
+about the underlying problem,
+and that started a <a href="https://golang.org/issue/18130">productive discussion</a>
+on the Go issue tracker about the solution space.
+It looks like more limited <a href="https://golang.org/design/18130-type-alias">type aliases</a>
+are the right next step.
+I want to make sure those land smoothly in Go 1.9. <a href="https://golang.org/issue/18130">#18130</a>.</p>
+
+<h2><a name="package"></a>Package management</h2>
+
+<p class=lp>I designed the Go support for downloading published packages
+(“goinstall”, which became “go get”) in February 2010.
+A lot has happened since then.
+In particular, other language ecosystems have really raised the bar
+for what people expect from package management,
+and the open source world has mostly agreed on
+<a href="http://semver.org/">semantic versioning</a>, which provides a useful base
+for inferring version compatibility.
+Go needs to do better here, and a group of contributors have been
+<a href="https://blog.gopheracademy.com/advent-2016/saga-go-dependency-management/">working on a solution</a>.
+I want to make sure these ideas are integrated well
+into the standard Go toolchain and to make package management
+a reason that people love Go.</p>
+
+<h2><a name="build"></a>Build improvements</h2>
+
+<p class=lp>There are a handful of shortcomings in the design of
+the go command’s build system that are overdue to be fixed.
+Here are three representative examples that I intend to
+address with a bit of a redesign of the internals of the go command.</p>
+
+<p class=pp>Builds can be too slow,
+because the go command doesn’t cache build results as aggressively as it should.
+Many people don’t realize that <code>go</code> <code>install</code> saves its work while <code>go</code> <code>build</code> does not,
+and then they run repeated <code>go</code> <code>build</code> commands that are slow
+because the later builds do more work than they should need to.
+The same for repeated <code>go</code> <code>test</code> without <code>go</code> <code>test</code> <code>-i</code> when dependencies are modified.
+All builds should be as incremental as possible.
+<a href="https://golang.org/issue/4719">#4719</a>.</p>
+
+<p class=pp>Test results should be cached too:
+if none of the inputs to a test have changed,
+then usually there is no need to rerun the test.
+This will make it very cheap to run “all tests” when little or nothing has changed.
+<a href="https://golang.org/issue/11193">#11193</a>.</p>
+
+<p class=pp>Work outside GOPATH should be supported nearly as well
+as work inside GOPATH.
+In particular, it should be possible to <code>git</code> <code>clone</code> a repo,
+<code>cd</code> into it, and run <code>go</code> commands and have them work fine.
+Package management only makes that more important:
+you’ll need to be able to work on different versions of a package (say, v1 and v2)
+without having entirely separate GOPATHs for them.
+<a href="https://golang.org/issue/17271">#17271</a>.</p>
+
+<h2><a name="corpus"></a>Code corpus</h2>
+
+<p class=lp>I think it helped to have concrete examples from real projects
+in the talk and article I prepared about codebase refactoring (see <a href="#alias">above</a>).
+We&rsquo;ve also defined that <a href="https://golang.org/src/cmd/vet/README">additions to vet</a>
+must target problems that happen frequently in real programs.
+I&rsquo;d like to see that kind of analysis of actual practice—examining
+the effects on and possible improvements to real programs—become a
+standard way we discuss and evaluate changes to Go.</p>
+
+<p class=pp>Right now there&rsquo;s not an agreed-upon representative corpus of code to use for
+those analyses: everyone must first create their own, which is too much work.
+I&rsquo;d like to put together a single, self-contained Git repo people can check out that
+contains our official baseline corpus for those analyses.
+A possible starting point could be the top 100 Go language repos
+on GitHub by stars or forks or both.</p>
+
+<h2><a name="vet"></a>Automatic vet</h2>
+
+<p class=lp>The Go distribution ships with this powerful tool,
+<a href="https://golang.org/cmd/vet/"><code>go</code> <code>vet</code></a>,
+that points out correctness bugs.
+We have a high bar for checks, so that when vet speaks, you should listen.
+But everyone has to remember to run it.
+It would be better if you didn’t have to remember.
+In particular, I think we could probably run vet
+in parallel with the final compile and link of the test binary
+during <code>go</code> <code>test</code> without slowing the compile-edit-test cycle at all.
+If we can do that, and if we limit the enabled vet checks to a subset
+that is essentially 100% accurate,
+we can make passing vet a precondition for running a test at all.
+Then developers don’t need to remember to run <code>go</code> <code>vet</code>.
+They run <code>go</code> <code>test</code>,
+and once in a while vet speaks up with something important
+and avoids a debugging session.
+<a href="https://golang.org/issue/18084">#18084</a>,
+<a href="https://golang.org/issue/18085">#18085</a>.</p>
+
+<h2><a name="error"></a>Errors &amp; best practices</h2>
+
+<p class=lp>Part of the intended contract for error reporting in Go is that functions
+include relevant available context, including the operation being attempted
+(such as the function name and its arguments).
+For example, this program:</p>
+
+<pre><code>err := os.Remove(&quot;/tmp/nonexist&quot;)
+fmt.Println(err)
+</code></pre>
+
+<p class=lp>prints this output:</p>
+
+<pre><code>remove /tmp/nonexist: no such file or directory
+</code></pre>
+
+<p class=lp>Not enough Go code adds context like <code>os.Remove</code> does. Too much code does only</p>
+
+<pre><code>if err != nil {
+ return err
+}
+</code></pre>
+
+<p class=lp>all the way up the call stack,
+discarding useful context that should be reported
+(like <code>remove</code> <code>/tmp/nonexist:</code> above).
+I would like to try to understand whether our expectations
+for including context are wrong, or if there is something
+we can do to make it easier to write code that returns better errors.</p>
+
+<p class=pp>There are also various discussions in the community about
+agreed-upon interfaces for stripping error context.
+I would like to try to understand when that makes sense and
+whether we should adopt an official recommendation.</p>
+
+<h2><a name="context"></a>Context &amp; best practices</h2>
+
+<p class=lp>We added the new <a href="https://golang.org/pkg/context/">context package</a>
+in Go 1.7 for holding request-scoped information like
+<a href="https://blog.golang.org/context">timeouts, cancellation state, and credentials</a>.
+An individual context is immutable (like an individual string or int):
+it is only possible to derive a new, updated context and
+pass that context explicitly further down the call stack or
+(less commonly) back up to the caller.
+The context is now carried through APIs such as
+<a href="https://golang.org/pkg/database/sql">database/sql</a>
+and
+<a href="https://golang.org/pkg/net/http">net/http</a>,
+mainly so that those can stop processing a request when the caller
+is no longer interested in the result.
+Timeout information is appropriate to carry in a context,
+but—to use a <a href="https://golang.org/issue/18284">real example we removed</a>—database options
+are not, because they are unlikely to apply equally well to all possible
+database operations carried out during a request.
+What about the current clock source, or logging sink?
+Is either of those appropriate to store in a context?
+I would like to try to understand and characterize the
+criteria for what is and is not an appropriate use of context.</p>
+
+<h2><a name="memory"></a>Memory model</h2>
+
+<p class=lp>Go’s <a href="https://golang.org/ref/mem">memory model</a> is intentionally low-key,
+making few promises to users, compared to other languages.
+In fact it starts by discouraging people from reading the rest of the document.
+At the same time, it demands more of the compiler than other languages:
+in particular, a race on an integer value is not sufficient license
+for your program to misbehave in arbitrary ways.
+But there are some complete gaps, in particular no mention of
+the <a href="https://golang.org/pkg/sync/atomic/">sync/atomic package</a>.
+I think the core compiler and runtime developers all agree
+that the behavior of those atomics should be roughly the same as
+C++ seqcst atomics or Java volatiles,
+but we still need to write that down carefully in the memory model,
+and probably also in a long blog post.
+<a href="https://golang.org/issue/5045">#5045</a>,
+<a href="https://golang.org/issue/7948">#7948</a>,
+<a href="https://golang.org/issue/9442">#9442</a>.</p>
+
+<h2><a name="immutability"></a>Immutability</h2>
+
+<p class=lp>The <a href="https://golang.org/doc/articles/race_detector.html">race detector</a>
+is one of Go’s most loved features.
+But not having races would be even better.
+I would love it if there were some reasonable way to integrate
+<a href="https://www.google.com/search?q=%22reference+immutability%22">reference immutability</a> into Go,
+so that programmers can make clear, checked assertions about what can and cannot
+be written and thereby eliminate certain races at compile time.
+Go already has one immutable type, <code>string</code>; it would
+be nice to retroactively define that
+<code>string</code> is a named type (or type alias) for <code>immutable</code> <code>[]byte</code>.
+I don’t think that will happen this year,
+but I’d like to understand the solution space better.
+Javari, Midori, Pony, and Rust have all staked out interesting points
+in the solution space, and there are plenty of research papers
+beyond those.</p>
+
+<p class=pp>In the long-term, if we could statically eliminate the possibility of races,
+that would eliminate the need for most of the memory model.
+That may well be an impossible dream,
+but again I’d like to understand the solution space better.</p>
+
+<h2><a name="generics"></a>Generics</h2>
+
+<p class=lp>Nothing sparks more <a href="https://research.swtch.com/dogma">heated arguments</a>
+among Go and non-Go developers than the question of whether Go should
+have support for generics (or how many years ago that should have happened).
+I don’t believe the Go team has ever said “Go does not need generics.”
+What we <em>have</em> said is that there are higher-priority issues facing Go.
+For example, I believe that better support for package management
+would have a much larger immediate positive impact on most Go developers
+than adding generics.
+But we do certainly understand that for a certain subset of Go use cases,
+the lack of parametric polymorphism is a significant hindrance.</p>
+
+<p class=pp>Personally, I would like to be able to write general channel-processing
+functions like:</p>
+
+<pre><code>// Join makes all messages received on the input channels
+// available for receiving from the returned channel.
+func Join(inputs ...&lt;-chan T) &lt;-chan T
+
+// Dup duplicates messages received on c to both c1 and c2.
+func Dup(c &lt;-chan T) (c1, c2 &lt;-chan T)
+</code></pre>
+
+<p class=lp>I would also like to be able to write
+Go support for high-level data processing abstractions,
+analogous to
+<a href="https://research.google.com/pubs/archive/35650.pdf">FlumeJava</a> or
+C#’s <a href="https://en.wikipedia.org/wiki/Language_Integrated_Query">LINQ</a>,
+in a way that catches type errors at compile time instead of at run time.
+There are also any number of data structures or generic algorithms
+that might be written,
+but I personally find these broader applications more compelling.</p>
+
+<p class=pp>We’ve <a href="https://research.swtch.com/generic">struggled</a> off and on
+<a href="https://golang.org/design/15292-generics">for years</a>
+to find the right way to add generics to Go.
+At least a few of the past proposals got hung up on trying to design
+something that provided both general parametric polymorphism
+(like <code>chan</code> <code>T</code>) and also a unification of <code>string</code> and <code>[]byte</code>.
+If the latter is handled by parameterization over immutability,
+as described in the previous section, then maybe that simplifies
+the demands on a design for generics.</p>
+
+<p class=pp>When I first started thinking about generics for Go in 2008,
+the main examples to learn from were C#, Java, Haskell, and ML.
+None of the approaches in those languages seemed like a
+perfect fit for Go.
+Today, there are newer attempts to learn from as well,
+including Dart, Midori, Rust, and Swift.</p>
+
+<p class=pp>It’s been a few years since we ventured out and explored the design space.
+It is probably time to look around again,
+especially in light of the insight about mutability and
+the additional examples set by newer languages.
+I don’t think generics will happen this year,
+but I’d like to be able to say I understand the solution space better.</p>
+
+ </div>
+
+
+ <div id="disqus_thread"></div>
+ <script>
+ var disqus_config = function () {
+ this.page.url = "https://research.swtch.com/go2017";
+ this.page.identifier = "blog/go2017";
+ };
+ (function() {
+ var d = document, s = d.createElement('script');
+ s.src = '//swtch.disqus.com/embed.js';
+ s.setAttribute('data-timestamp', +new Date());
+ (d.head || d.body).appendChild(s);
+ })();
+ </script>
+ <noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
+ </div>
+
+ </div>
+
+
+<script type="text/javascript">
+var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+</script>
+<script type="text/javascript">
+var pageTracker = _gat._getTracker("UA-3319603-2");
+pageTracker._initData();
+pageTracker._trackPageview();
+</script>
+
+
+
+ </body>
+</html>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/sample_books.xml b/vendor/github.com/tdewolff/minify/benchmarks/sample_books.xml
new file mode 100644
index 0000000..7c254f1
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/sample_books.xml
@@ -0,0 +1,120 @@
+<?xml version="1.0"?>
+<catalog>
+ <book id="bk101">
+ <author>Gambardella, Matthew</author>
+ <title>XML Developer's Guide</title>
+ <genre>Computer</genre>
+ <price>44.95</price>
+ <publish_date>2000-10-01</publish_date>
+ <description>An in-depth look at creating applications
+ with XML.</description>
+ </book>
+ <book id="bk102">
+ <author>Ralls, Kim</author>
+ <title>Midnight Rain</title>
+ <genre>Fantasy</genre>
+ <price>5.95</price>
+ <publish_date>2000-12-16</publish_date>
+ <description>A former architect battles corporate zombies,
+ an evil sorceress, and her own childhood to become queen
+ of the world.</description>
+ </book>
+ <book id="bk103">
+ <author>Corets, Eva</author>
+ <title>Maeve Ascendant</title>
+ <genre>Fantasy</genre>
+ <price>5.95</price>
+ <publish_date>2000-11-17</publish_date>
+ <description>After the collapse of a nanotechnology
+ society in England, the young survivors lay the
+ foundation for a new society.</description>
+ </book>
+ <book id="bk104">
+ <author>Corets, Eva</author>
+ <title>Oberon's Legacy</title>
+ <genre>Fantasy</genre>
+ <price>5.95</price>
+ <publish_date>2001-03-10</publish_date>
+ <description>In post-apocalypse England, the mysterious
+ agent known only as Oberon helps to create a new life
+ for the inhabitants of London. Sequel to Maeve
+ Ascendant.</description>
+ </book>
+ <book id="bk105">
+ <author>Corets, Eva</author>
+ <title>The Sundered Grail</title>
+ <genre>Fantasy</genre>
+ <price>5.95</price>
+ <publish_date>2001-09-10</publish_date>
+ <description>The two daughters of Maeve, half-sisters,
+ battle one another for control of England. Sequel to
+ Oberon's Legacy.</description>
+ </book>
+ <book id="bk106">
+ <author>Randall, Cynthia</author>
+ <title>Lover Birds</title>
+ <genre>Romance</genre>
+ <price>4.95</price>
+ <publish_date>2000-09-02</publish_date>
+ <description>When Carla meets Paul at an ornithology
+ conference, tempers fly as feathers get ruffled.</description>
+ </book>
+ <book id="bk107">
+ <author>Thurman, Paula</author>
+ <title>Splish Splash</title>
+ <genre>Romance</genre>
+ <price>4.95</price>
+ <publish_date>2000-11-02</publish_date>
+ <description>A deep sea diver finds true love twenty
+ thousand leagues beneath the sea.</description>
+ </book>
+ <book id="bk108">
+ <author>Knorr, Stefan</author>
+ <title>Creepy Crawlies</title>
+ <genre>Horror</genre>
+ <price>4.95</price>
+ <publish_date>2000-12-06</publish_date>
+ <description>An anthology of horror stories about roaches,
+ centipedes, scorpions and other insects.</description>
+ </book>
+ <book id="bk109">
+ <author>Kress, Peter</author>
+ <title>Paradox Lost</title>
+ <genre>Science Fiction</genre>
+ <price>6.95</price>
+ <publish_date>2000-11-02</publish_date>
+ <description>After an inadvertant trip through a Heisenberg
+ Uncertainty Device, James Salway discovers the problems
+ of being quantum.</description>
+ </book>
+ <book id="bk110">
+ <author>O'Brien, Tim</author>
+ <title>Microsoft .NET: The Programming Bible</title>
+ <genre>Computer</genre>
+ <price>36.95</price>
+ <publish_date>2000-12-09</publish_date>
+ <description>Microsoft's .NET initiative is explored in
+ detail in this deep programmer's reference.</description>
+ </book>
+ <book id="bk111">
+ <author>O'Brien, Tim</author>
+ <title>MSXML3: A Comprehensive Guide</title>
+ <genre>Computer</genre>
+ <price>36.95</price>
+ <publish_date>2000-12-01</publish_date>
+ <description>The Microsoft MSXML3 parser is covered in
+ detail, with attention to XML DOM interfaces, XSLT processing,
+ SAX and more.</description>
+ </book>
+ <book id="bk112">
+ <author>Galos, Mike</author>
+ <title>Visual Studio 7: A Comprehensive Guide</title>
+ <genre>Computer</genre>
+ <price>49.95</price>
+ <publish_date>2001-04-16</publish_date>
+ <description>Microsoft Visual Studio 7 is explored in depth,
+ looking at how Visual Basic, Visual C++, C#, and ASP+ are
+ integrated into a comprehensive development
+ environment.</description>
+ </book>
+</catalog>
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/sample_bootstrap.css b/vendor/github.com/tdewolff/minify/benchmarks/sample_bootstrap.css
new file mode 100644
index 0000000..c6f3d21
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/sample_bootstrap.css
@@ -0,0 +1,6332 @@
+/*!
+ * Bootstrap v3.3.1 (http://getbootstrap.com)
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
+html {
+ font-family: sans-serif;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+body {
+ margin: 0;
+}
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+ display: block;
+}
+audio,
+canvas,
+progress,
+video {
+ display: inline-block;
+ vertical-align: baseline;
+}
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+[hidden],
+template {
+ display: none;
+}
+a {
+ background-color: transparent;
+}
+a:active,
+a:hover {
+ outline: 0;
+}
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+b,
+strong {
+ font-weight: bold;
+}
+dfn {
+ font-style: italic;
+}
+h1 {
+ margin: .67em 0;
+ font-size: 2em;
+}
+mark {
+ color: #000;
+ background: #ff0;
+}
+small {
+ font-size: 80%;
+}
+sub,
+sup {
+ position: relative;
+ font-size: 75%;
+ line-height: 0;
+ vertical-align: baseline;
+}
+sup {
+ top: -.5em;
+}
+sub {
+ bottom: -.25em;
+}
+img {
+ border: 0;
+}
+svg:not(:root) {
+ overflow: hidden;
+}
+figure {
+ margin: 1em 40px;
+}
+hr {
+ height: 0;
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+pre {
+ overflow: auto;
+}
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+button,
+input,
+optgroup,
+select,
+textarea {
+ margin: 0;
+ font: inherit;
+ color: inherit;
+}
+button {
+ overflow: visible;
+}
+button,
+select {
+ text-transform: none;
+}
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button;
+ cursor: pointer;
+}
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+}
+input {
+ line-height: normal;
+}
+input[type="checkbox"],
+input[type="radio"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0;
+}
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+input[type="search"] {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ -webkit-appearance: textfield;
+}
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+fieldset {
+ padding: .35em .625em .75em;
+ margin: 0 2px;
+ border: 1px solid #c0c0c0;
+}
+legend {
+ padding: 0;
+ border: 0;
+}
+textarea {
+ overflow: auto;
+}
+optgroup {
+ font-weight: bold;
+}
+table {
+ border-spacing: 0;
+ border-collapse: collapse;
+}
+td,
+th {
+ padding: 0;
+}
+/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
+@media print {
+ *,
+ *:before,
+ *:after {
+ color: #000 !important;
+ text-shadow: none !important;
+ background: transparent !important;
+ -webkit-box-shadow: none !important;
+ box-shadow: none !important;
+ }
+ a,
+ a:visited {
+ text-decoration: underline;
+ }
+ a[href]:after {
+ content: " (" attr(href) ")";
+ }
+ abbr[title]:after {
+ content: " (" attr(title) ")";
+ }
+ a[href^="#"]:after,
+ a[href^="javascript:"]:after {
+ content: "";
+ }
+ pre,
+ blockquote {
+ border: 1px solid #999;
+
+ page-break-inside: avoid;
+ }
+ thead {
+ display: table-header-group;
+ }
+ tr,
+ img {
+ page-break-inside: avoid;
+ }
+ img {
+ max-width: 100% !important;
+ }
+ p,
+ h2,
+ h3 {
+ orphans: 3;
+ widows: 3;
+ }
+ h2,
+ h3 {
+ page-break-after: avoid;
+ }
+ select {
+ background: #fff !important;
+ }
+ .navbar {
+ display: none;
+ }
+ .btn > .caret,
+ .dropup > .btn > .caret {
+ border-top-color: #000 !important;
+ }
+ .label {
+ border: 1px solid #000;
+ }
+ .table {
+ border-collapse: collapse !important;
+ }
+ .table td,
+ .table th {
+ background-color: #fff !important;
+ }
+ .table-bordered th,
+ .table-bordered td {
+ border: 1px solid #ddd !important;
+ }
+}
+@font-face {
+ font-family: 'Glyphicons Halflings';
+
+ src: url('../fonts/glyphicons-halflings-regular.eot');
+ src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
+}
+.glyphicon {
+ position: relative;
+ top: 1px;
+ display: inline-block;
+ font-family: 'Glyphicons Halflings';
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1;
+
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+.glyphicon-asterisk:before {
+ content: "\2a";
+}
+.glyphicon-plus:before {
+ content: "\2b";
+}
+.glyphicon-euro:before,
+.glyphicon-eur:before {
+ content: "\20ac";
+}
+.glyphicon-minus:before {
+ content: "\2212";
+}
+.glyphicon-cloud:before {
+ content: "\2601";
+}
+.glyphicon-envelope:before {
+ content: "\2709";
+}
+.glyphicon-pencil:before {
+ content: "\270f";
+}
+.glyphicon-glass:before {
+ content: "\e001";
+}
+.glyphicon-music:before {
+ content: "\e002";
+}
+.glyphicon-search:before {
+ content: "\e003";
+}
+.glyphicon-heart:before {
+ content: "\e005";
+}
+.glyphicon-star:before {
+ content: "\e006";
+}
+.glyphicon-star-empty:before {
+ content: "\e007";
+}
+.glyphicon-user:before {
+ content: "\e008";
+}
+.glyphicon-film:before {
+ content: "\e009";
+}
+.glyphicon-th-large:before {
+ content: "\e010";
+}
+.glyphicon-th:before {
+ content: "\e011";
+}
+.glyphicon-th-list:before {
+ content: "\e012";
+}
+.glyphicon-ok:before {
+ content: "\e013";
+}
+.glyphicon-remove:before {
+ content: "\e014";
+}
+.glyphicon-zoom-in:before {
+ content: "\e015";
+}
+.glyphicon-zoom-out:before {
+ content: "\e016";
+}
+.glyphicon-off:before {
+ content: "\e017";
+}
+.glyphicon-signal:before {
+ content: "\e018";
+}
+.glyphicon-cog:before {
+ content: "\e019";
+}
+.glyphicon-trash:before {
+ content: "\e020";
+}
+.glyphicon-home:before {
+ content: "\e021";
+}
+.glyphicon-file:before {
+ content: "\e022";
+}
+.glyphicon-time:before {
+ content: "\e023";
+}
+.glyphicon-road:before {
+ content: "\e024";
+}
+.glyphicon-download-alt:before {
+ content: "\e025";
+}
+.glyphicon-download:before {
+ content: "\e026";
+}
+.glyphicon-upload:before {
+ content: "\e027";
+}
+.glyphicon-inbox:before {
+ content: "\e028";
+}
+.glyphicon-play-circle:before {
+ content: "\e029";
+}
+.glyphicon-repeat:before {
+ content: "\e030";
+}
+.glyphicon-refresh:before {
+ content: "\e031";
+}
+.glyphicon-list-alt:before {
+ content: "\e032";
+}
+.glyphicon-lock:before {
+ content: "\e033";
+}
+.glyphicon-flag:before {
+ content: "\e034";
+}
+.glyphicon-headphones:before {
+ content: "\e035";
+}
+.glyphicon-volume-off:before {
+ content: "\e036";
+}
+.glyphicon-volume-down:before {
+ content: "\e037";
+}
+.glyphicon-volume-up:before {
+ content: "\e038";
+}
+.glyphicon-qrcode:before {
+ content: "\e039";
+}
+.glyphicon-barcode:before {
+ content: "\e040";
+}
+.glyphicon-tag:before {
+ content: "\e041";
+}
+.glyphicon-tags:before {
+ content: "\e042";
+}
+.glyphicon-book:before {
+ content: "\e043";
+}
+.glyphicon-bookmark:before {
+ content: "\e044";
+}
+.glyphicon-print:before {
+ content: "\e045";
+}
+.glyphicon-camera:before {
+ content: "\e046";
+}
+.glyphicon-font:before {
+ content: "\e047";
+}
+.glyphicon-bold:before {
+ content: "\e048";
+}
+.glyphicon-italic:before {
+ content: "\e049";
+}
+.glyphicon-text-height:before {
+ content: "\e050";
+}
+.glyphicon-text-width:before {
+ content: "\e051";
+}
+.glyphicon-align-left:before {
+ content: "\e052";
+}
+.glyphicon-align-center:before {
+ content: "\e053";
+}
+.glyphicon-align-right:before {
+ content: "\e054";
+}
+.glyphicon-align-justify:before {
+ content: "\e055";
+}
+.glyphicon-list:before {
+ content: "\e056";
+}
+.glyphicon-indent-left:before {
+ content: "\e057";
+}
+.glyphicon-indent-right:before {
+ content: "\e058";
+}
+.glyphicon-facetime-video:before {
+ content: "\e059";
+}
+.glyphicon-picture:before {
+ content: "\e060";
+}
+.glyphicon-map-marker:before {
+ content: "\e062";
+}
+.glyphicon-adjust:before {
+ content: "\e063";
+}
+.glyphicon-tint:before {
+ content: "\e064";
+}
+.glyphicon-edit:before {
+ content: "\e065";
+}
+.glyphicon-share:before {
+ content: "\e066";
+}
+.glyphicon-check:before {
+ content: "\e067";
+}
+.glyphicon-move:before {
+ content: "\e068";
+}
+.glyphicon-step-backward:before {
+ content: "\e069";
+}
+.glyphicon-fast-backward:before {
+ content: "\e070";
+}
+.glyphicon-backward:before {
+ content: "\e071";
+}
+.glyphicon-play:before {
+ content: "\e072";
+}
+.glyphicon-pause:before {
+ content: "\e073";
+}
+.glyphicon-stop:before {
+ content: "\e074";
+}
+.glyphicon-forward:before {
+ content: "\e075";
+}
+.glyphicon-fast-forward:before {
+ content: "\e076";
+}
+.glyphicon-step-forward:before {
+ content: "\e077";
+}
+.glyphicon-eject:before {
+ content: "\e078";
+}
+.glyphicon-chevron-left:before {
+ content: "\e079";
+}
+.glyphicon-chevron-right:before {
+ content: "\e080";
+}
+.glyphicon-plus-sign:before {
+ content: "\e081";
+}
+.glyphicon-minus-sign:before {
+ content: "\e082";
+}
+.glyphicon-remove-sign:before {
+ content: "\e083";
+}
+.glyphicon-ok-sign:before {
+ content: "\e084";
+}
+.glyphicon-question-sign:before {
+ content: "\e085";
+}
+.glyphicon-info-sign:before {
+ content: "\e086";
+}
+.glyphicon-screenshot:before {
+ content: "\e087";
+}
+.glyphicon-remove-circle:before {
+ content: "\e088";
+}
+.glyphicon-ok-circle:before {
+ content: "\e089";
+}
+.glyphicon-ban-circle:before {
+ content: "\e090";
+}
+.glyphicon-arrow-left:before {
+ content: "\e091";
+}
+.glyphicon-arrow-right:before {
+ content: "\e092";
+}
+.glyphicon-arrow-up:before {
+ content: "\e093";
+}
+.glyphicon-arrow-down:before {
+ content: "\e094";
+}
+.glyphicon-share-alt:before {
+ content: "\e095";
+}
+.glyphicon-resize-full:before {
+ content: "\e096";
+}
+.glyphicon-resize-small:before {
+ content: "\e097";
+}
+.glyphicon-exclamation-sign:before {
+ content: "\e101";
+}
+.glyphicon-gift:before {
+ content: "\e102";
+}
+.glyphicon-leaf:before {
+ content: "\e103";
+}
+.glyphicon-fire:before {
+ content: "\e104";
+}
+.glyphicon-eye-open:before {
+ content: "\e105";
+}
+.glyphicon-eye-close:before {
+ content: "\e106";
+}
+.glyphicon-warning-sign:before {
+ content: "\e107";
+}
+.glyphicon-plane:before {
+ content: "\e108";
+}
+.glyphicon-calendar:before {
+ content: "\e109";
+}
+.glyphicon-random:before {
+ content: "\e110";
+}
+.glyphicon-comment:before {
+ content: "\e111";
+}
+.glyphicon-magnet:before {
+ content: "\e112";
+}
+.glyphicon-chevron-up:before {
+ content: "\e113";
+}
+.glyphicon-chevron-down:before {
+ content: "\e114";
+}
+.glyphicon-retweet:before {
+ content: "\e115";
+}
+.glyphicon-shopping-cart:before {
+ content: "\e116";
+}
+.glyphicon-folder-close:before {
+ content: "\e117";
+}
+.glyphicon-folder-open:before {
+ content: "\e118";
+}
+.glyphicon-resize-vertical:before {
+ content: "\e119";
+}
+.glyphicon-resize-horizontal:before {
+ content: "\e120";
+}
+.glyphicon-hdd:before {
+ content: "\e121";
+}
+.glyphicon-bullhorn:before {
+ content: "\e122";
+}
+.glyphicon-bell:before {
+ content: "\e123";
+}
+.glyphicon-certificate:before {
+ content: "\e124";
+}
+.glyphicon-thumbs-up:before {
+ content: "\e125";
+}
+.glyphicon-thumbs-down:before {
+ content: "\e126";
+}
+.glyphicon-hand-right:before {
+ content: "\e127";
+}
+.glyphicon-hand-left:before {
+ content: "\e128";
+}
+.glyphicon-hand-up:before {
+ content: "\e129";
+}
+.glyphicon-hand-down:before {
+ content: "\e130";
+}
+.glyphicon-circle-arrow-right:before {
+ content: "\e131";
+}
+.glyphicon-circle-arrow-left:before {
+ content: "\e132";
+}
+.glyphicon-circle-arrow-up:before {
+ content: "\e133";
+}
+.glyphicon-circle-arrow-down:before {
+ content: "\e134";
+}
+.glyphicon-globe:before {
+ content: "\e135";
+}
+.glyphicon-wrench:before {
+ content: "\e136";
+}
+.glyphicon-tasks:before {
+ content: "\e137";
+}
+.glyphicon-filter:before {
+ content: "\e138";
+}
+.glyphicon-briefcase:before {
+ content: "\e139";
+}
+.glyphicon-fullscreen:before {
+ content: "\e140";
+}
+.glyphicon-dashboard:before {
+ content: "\e141";
+}
+.glyphicon-paperclip:before {
+ content: "\e142";
+}
+.glyphicon-heart-empty:before {
+ content: "\e143";
+}
+.glyphicon-link:before {
+ content: "\e144";
+}
+.glyphicon-phone:before {
+ content: "\e145";
+}
+.glyphicon-pushpin:before {
+ content: "\e146";
+}
+.glyphicon-usd:before {
+ content: "\e148";
+}
+.glyphicon-gbp:before {
+ content: "\e149";
+}
+.glyphicon-sort:before {
+ content: "\e150";
+}
+.glyphicon-sort-by-alphabet:before {
+ content: "\e151";
+}
+.glyphicon-sort-by-alphabet-alt:before {
+ content: "\e152";
+}
+.glyphicon-sort-by-order:before {
+ content: "\e153";
+}
+.glyphicon-sort-by-order-alt:before {
+ content: "\e154";
+}
+.glyphicon-sort-by-attributes:before {
+ content: "\e155";
+}
+.glyphicon-sort-by-attributes-alt:before {
+ content: "\e156";
+}
+.glyphicon-unchecked:before {
+ content: "\e157";
+}
+.glyphicon-expand:before {
+ content: "\e158";
+}
+.glyphicon-collapse-down:before {
+ content: "\e159";
+}
+.glyphicon-collapse-up:before {
+ content: "\e160";
+}
+.glyphicon-log-in:before {
+ content: "\e161";
+}
+.glyphicon-flash:before {
+ content: "\e162";
+}
+.glyphicon-log-out:before {
+ content: "\e163";
+}
+.glyphicon-new-window:before {
+ content: "\e164";
+}
+.glyphicon-record:before {
+ content: "\e165";
+}
+.glyphicon-save:before {
+ content: "\e166";
+}
+.glyphicon-open:before {
+ content: "\e167";
+}
+.glyphicon-saved:before {
+ content: "\e168";
+}
+.glyphicon-import:before {
+ content: "\e169";
+}
+.glyphicon-export:before {
+ content: "\e170";
+}
+.glyphicon-send:before {
+ content: "\e171";
+}
+.glyphicon-floppy-disk:before {
+ content: "\e172";
+}
+.glyphicon-floppy-saved:before {
+ content: "\e173";
+}
+.glyphicon-floppy-remove:before {
+ content: "\e174";
+}
+.glyphicon-floppy-save:before {
+ content: "\e175";
+}
+.glyphicon-floppy-open:before {
+ content: "\e176";
+}
+.glyphicon-credit-card:before {
+ content: "\e177";
+}
+.glyphicon-transfer:before {
+ content: "\e178";
+}
+.glyphicon-cutlery:before {
+ content: "\e179";
+}
+.glyphicon-header:before {
+ content: "\e180";
+}
+.glyphicon-compressed:before {
+ content: "\e181";
+}
+.glyphicon-earphone:before {
+ content: "\e182";
+}
+.glyphicon-phone-alt:before {
+ content: "\e183";
+}
+.glyphicon-tower:before {
+ content: "\e184";
+}
+.glyphicon-stats:before {
+ content: "\e185";
+}
+.glyphicon-sd-video:before {
+ content: "\e186";
+}
+.glyphicon-hd-video:before {
+ content: "\e187";
+}
+.glyphicon-subtitles:before {
+ content: "\e188";
+}
+.glyphicon-sound-stereo:before {
+ content: "\e189";
+}
+.glyphicon-sound-dolby:before {
+ content: "\e190";
+}
+.glyphicon-sound-5-1:before {
+ content: "\e191";
+}
+.glyphicon-sound-6-1:before {
+ content: "\e192";
+}
+.glyphicon-sound-7-1:before {
+ content: "\e193";
+}
+.glyphicon-copyright-mark:before {
+ content: "\e194";
+}
+.glyphicon-registration-mark:before {
+ content: "\e195";
+}
+.glyphicon-cloud-download:before {
+ content: "\e197";
+}
+.glyphicon-cloud-upload:before {
+ content: "\e198";
+}
+.glyphicon-tree-conifer:before {
+ content: "\e199";
+}
+.glyphicon-tree-deciduous:before {
+ content: "\e200";
+}
+* {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+*:before,
+*:after {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+html {
+ font-size: 10px;
+
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+body {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #333;
+ background-color: #fff;
+}
+input,
+button,
+select,
+textarea {
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+}
+a {
+ color: #337ab7;
+ text-decoration: none;
+}
+a:hover,
+a:focus {
+ color: #23527c;
+ text-decoration: underline;
+}
+a:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+figure {
+ margin: 0;
+}
+img {
+ vertical-align: middle;
+}
+.img-responsive,
+.thumbnail > img,
+.thumbnail a > img,
+.carousel-inner > .item > img,
+.carousel-inner > .item > a > img {
+ display: block;
+ max-width: 100%;
+ height: auto;
+}
+.img-rounded {
+ border-radius: 6px;
+}
+.img-thumbnail {
+ display: inline-block;
+ max-width: 100%;
+ height: auto;
+ padding: 4px;
+ line-height: 1.42857143;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: all .2s ease-in-out;
+ -o-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out;
+}
+.img-circle {
+ border-radius: 50%;
+}
+hr {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ border: 0;
+ border-top: 1px solid #eee;
+}
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ border: 0;
+}
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+ position: static;
+ width: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ clip: auto;
+}
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+.h1,
+.h2,
+.h3,
+.h4,
+.h5,
+.h6 {
+ font-family: inherit;
+ font-weight: 500;
+ line-height: 1.1;
+ color: inherit;
+}
+h1 small,
+h2 small,
+h3 small,
+h4 small,
+h5 small,
+h6 small,
+.h1 small,
+.h2 small,
+.h3 small,
+.h4 small,
+.h5 small,
+.h6 small,
+h1 .small,
+h2 .small,
+h3 .small,
+h4 .small,
+h5 .small,
+h6 .small,
+.h1 .small,
+.h2 .small,
+.h3 .small,
+.h4 .small,
+.h5 .small,
+.h6 .small {
+ font-weight: normal;
+ line-height: 1;
+ color: #777;
+}
+h1,
+.h1,
+h2,
+.h2,
+h3,
+.h3 {
+ margin-top: 20px;
+ margin-bottom: 10px;
+}
+h1 small,
+.h1 small,
+h2 small,
+.h2 small,
+h3 small,
+.h3 small,
+h1 .small,
+.h1 .small,
+h2 .small,
+.h2 .small,
+h3 .small,
+.h3 .small {
+ font-size: 65%;
+}
+h4,
+.h4,
+h5,
+.h5,
+h6,
+.h6 {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+h4 small,
+.h4 small,
+h5 small,
+.h5 small,
+h6 small,
+.h6 small,
+h4 .small,
+.h4 .small,
+h5 .small,
+.h5 .small,
+h6 .small,
+.h6 .small {
+ font-size: 75%;
+}
+h1,
+.h1 {
+ font-size: 36px;
+}
+h2,
+.h2 {
+ font-size: 30px;
+}
+h3,
+.h3 {
+ font-size: 24px;
+}
+h4,
+.h4 {
+ font-size: 18px;
+}
+h5,
+.h5 {
+ font-size: 14px;
+}
+h6,
+.h6 {
+ font-size: 12px;
+}
+p {
+ margin: 0 0 10px;
+}
+.lead {
+ margin-bottom: 20px;
+ font-size: 16px;
+ font-weight: 300;
+ line-height: 1.4;
+}
+@media (min-width: 768px) {
+ .lead {
+ font-size: 21px;
+ }
+}
+small,
+.small {
+ font-size: 85%;
+}
+mark,
+.mark {
+ padding: .2em;
+ background-color: #fcf8e3;
+}
+.text-left {
+ text-align: left;
+}
+.text-right {
+ text-align: right;
+}
+.text-center {
+ text-align: center;
+}
+.text-justify {
+ text-align: justify;
+}
+.text-nowrap {
+ white-space: nowrap;
+}
+.text-lowercase {
+ text-transform: lowercase;
+}
+.text-uppercase {
+ text-transform: uppercase;
+}
+.text-capitalize {
+ text-transform: capitalize;
+}
+.text-muted {
+ color: #777;
+}
+.text-primary {
+ color: #337ab7;
+}
+a.text-primary:hover {
+ color: #286090;
+}
+.text-success {
+ color: #3c763d;
+}
+a.text-success:hover {
+ color: #2b542c;
+}
+.text-info {
+ color: #31708f;
+}
+a.text-info:hover {
+ color: #245269;
+}
+.text-warning {
+ color: #8a6d3b;
+}
+a.text-warning:hover {
+ color: #66512c;
+}
+.text-danger {
+ color: #a94442;
+}
+a.text-danger:hover {
+ color: #843534;
+}
+.bg-primary {
+ color: #fff;
+ background-color: #337ab7;
+}
+a.bg-primary:hover {
+ background-color: #286090;
+}
+.bg-success {
+ background-color: #dff0d8;
+}
+a.bg-success:hover {
+ background-color: #c1e2b3;
+}
+.bg-info {
+ background-color: #d9edf7;
+}
+a.bg-info:hover {
+ background-color: #afd9ee;
+}
+.bg-warning {
+ background-color: #fcf8e3;
+}
+a.bg-warning:hover {
+ background-color: #f7ecb5;
+}
+.bg-danger {
+ background-color: #f2dede;
+}
+a.bg-danger:hover {
+ background-color: #e4b9b9;
+}
+.page-header {
+ padding-bottom: 9px;
+ margin: 40px 0 20px;
+ border-bottom: 1px solid #eee;
+}
+ul,
+ol {
+ margin-top: 0;
+ margin-bottom: 10px;
+}
+ul ul,
+ol ul,
+ul ol,
+ol ol {
+ margin-bottom: 0;
+}
+.list-unstyled {
+ padding-left: 0;
+ list-style: none;
+}
+.list-inline {
+ padding-left: 0;
+ margin-left: -5px;
+ list-style: none;
+}
+.list-inline > li {
+ display: inline-block;
+ padding-right: 5px;
+ padding-left: 5px;
+}
+dl {
+ margin-top: 0;
+ margin-bottom: 20px;
+}
+dt,
+dd {
+ line-height: 1.42857143;
+}
+dt {
+ font-weight: bold;
+}
+dd {
+ margin-left: 0;
+}
+@media (min-width: 768px) {
+ .dl-horizontal dt {
+ float: left;
+ width: 160px;
+ overflow: hidden;
+ clear: left;
+ text-align: right;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+ .dl-horizontal dd {
+ margin-left: 180px;
+ }
+}
+abbr[title],
+abbr[data-original-title] {
+ cursor: help;
+ border-bottom: 1px dotted #777;
+}
+.initialism {
+ font-size: 90%;
+ text-transform: uppercase;
+}
+blockquote {
+ padding: 10px 20px;
+ margin: 0 0 20px;
+ font-size: 17.5px;
+ border-left: 5px solid #eee;
+}
+blockquote p:last-child,
+blockquote ul:last-child,
+blockquote ol:last-child {
+ margin-bottom: 0;
+}
+blockquote footer,
+blockquote small,
+blockquote .small {
+ display: block;
+ font-size: 80%;
+ line-height: 1.42857143;
+ color: #777;
+}
+blockquote footer:before,
+blockquote small:before,
+blockquote .small:before {
+ content: '\2014 \00A0';
+}
+.blockquote-reverse,
+blockquote.pull-right {
+ padding-right: 15px;
+ padding-left: 0;
+ text-align: right;
+ border-right: 5px solid #eee;
+ border-left: 0;
+}
+.blockquote-reverse footer:before,
+blockquote.pull-right footer:before,
+.blockquote-reverse small:before,
+blockquote.pull-right small:before,
+.blockquote-reverse .small:before,
+blockquote.pull-right .small:before {
+ content: '';
+}
+.blockquote-reverse footer:after,
+blockquote.pull-right footer:after,
+.blockquote-reverse small:after,
+blockquote.pull-right small:after,
+.blockquote-reverse .small:after,
+blockquote.pull-right .small:after {
+ content: '\00A0 \2014';
+}
+address {
+ margin-bottom: 20px;
+ font-style: normal;
+ line-height: 1.42857143;
+}
+code,
+kbd,
+pre,
+samp {
+ font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+code {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: #c7254e;
+ background-color: #f9f2f4;
+ border-radius: 4px;
+}
+kbd {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: #fff;
+ background-color: #333;
+ border-radius: 3px;
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
+}
+kbd kbd {
+ padding: 0;
+ font-size: 100%;
+ font-weight: bold;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+pre {
+ display: block;
+ padding: 9.5px;
+ margin: 0 0 10px;
+ font-size: 13px;
+ line-height: 1.42857143;
+ color: #333;
+ word-break: break-all;
+ word-wrap: break-word;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+}
+pre code {
+ padding: 0;
+ font-size: inherit;
+ color: inherit;
+ white-space: pre-wrap;
+ background-color: transparent;
+ border-radius: 0;
+}
+.pre-scrollable {
+ max-height: 340px;
+ overflow-y: scroll;
+}
+.container {
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto;
+}
+@media (min-width: 768px) {
+ .container {
+ width: 750px;
+ }
+}
+@media (min-width: 992px) {
+ .container {
+ width: 970px;
+ }
+}
+@media (min-width: 1200px) {
+ .container {
+ width: 1170px;
+ }
+}
+.container-fluid {
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto;
+}
+.row {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
+ position: relative;
+ min-height: 1px;
+ padding-right: 15px;
+ padding-left: 15px;
+}
+.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
+ float: left;
+}
+.col-xs-12 {
+ width: 100%;
+}
+.col-xs-11 {
+ width: 91.66666667%;
+}
+.col-xs-10 {
+ width: 83.33333333%;
+}
+.col-xs-9 {
+ width: 75%;
+}
+.col-xs-8 {
+ width: 66.66666667%;
+}
+.col-xs-7 {
+ width: 58.33333333%;
+}
+.col-xs-6 {
+ width: 50%;
+}
+.col-xs-5 {
+ width: 41.66666667%;
+}
+.col-xs-4 {
+ width: 33.33333333%;
+}
+.col-xs-3 {
+ width: 25%;
+}
+.col-xs-2 {
+ width: 16.66666667%;
+}
+.col-xs-1 {
+ width: 8.33333333%;
+}
+.col-xs-pull-12 {
+ right: 100%;
+}
+.col-xs-pull-11 {
+ right: 91.66666667%;
+}
+.col-xs-pull-10 {
+ right: 83.33333333%;
+}
+.col-xs-pull-9 {
+ right: 75%;
+}
+.col-xs-pull-8 {
+ right: 66.66666667%;
+}
+.col-xs-pull-7 {
+ right: 58.33333333%;
+}
+.col-xs-pull-6 {
+ right: 50%;
+}
+.col-xs-pull-5 {
+ right: 41.66666667%;
+}
+.col-xs-pull-4 {
+ right: 33.33333333%;
+}
+.col-xs-pull-3 {
+ right: 25%;
+}
+.col-xs-pull-2 {
+ right: 16.66666667%;
+}
+.col-xs-pull-1 {
+ right: 8.33333333%;
+}
+.col-xs-pull-0 {
+ right: auto;
+}
+.col-xs-push-12 {
+ left: 100%;
+}
+.col-xs-push-11 {
+ left: 91.66666667%;
+}
+.col-xs-push-10 {
+ left: 83.33333333%;
+}
+.col-xs-push-9 {
+ left: 75%;
+}
+.col-xs-push-8 {
+ left: 66.66666667%;
+}
+.col-xs-push-7 {
+ left: 58.33333333%;
+}
+.col-xs-push-6 {
+ left: 50%;
+}
+.col-xs-push-5 {
+ left: 41.66666667%;
+}
+.col-xs-push-4 {
+ left: 33.33333333%;
+}
+.col-xs-push-3 {
+ left: 25%;
+}
+.col-xs-push-2 {
+ left: 16.66666667%;
+}
+.col-xs-push-1 {
+ left: 8.33333333%;
+}
+.col-xs-push-0 {
+ left: auto;
+}
+.col-xs-offset-12 {
+ margin-left: 100%;
+}
+.col-xs-offset-11 {
+ margin-left: 91.66666667%;
+}
+.col-xs-offset-10 {
+ margin-left: 83.33333333%;
+}
+.col-xs-offset-9 {
+ margin-left: 75%;
+}
+.col-xs-offset-8 {
+ margin-left: 66.66666667%;
+}
+.col-xs-offset-7 {
+ margin-left: 58.33333333%;
+}
+.col-xs-offset-6 {
+ margin-left: 50%;
+}
+.col-xs-offset-5 {
+ margin-left: 41.66666667%;
+}
+.col-xs-offset-4 {
+ margin-left: 33.33333333%;
+}
+.col-xs-offset-3 {
+ margin-left: 25%;
+}
+.col-xs-offset-2 {
+ margin-left: 16.66666667%;
+}
+.col-xs-offset-1 {
+ margin-left: 8.33333333%;
+}
+.col-xs-offset-0 {
+ margin-left: 0;
+}
+@media (min-width: 768px) {
+ .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
+ float: left;
+ }
+ .col-sm-12 {
+ width: 100%;
+ }
+ .col-sm-11 {
+ width: 91.66666667%;
+ }
+ .col-sm-10 {
+ width: 83.33333333%;
+ }
+ .col-sm-9 {
+ width: 75%;
+ }
+ .col-sm-8 {
+ width: 66.66666667%;
+ }
+ .col-sm-7 {
+ width: 58.33333333%;
+ }
+ .col-sm-6 {
+ width: 50%;
+ }
+ .col-sm-5 {
+ width: 41.66666667%;
+ }
+ .col-sm-4 {
+ width: 33.33333333%;
+ }
+ .col-sm-3 {
+ width: 25%;
+ }
+ .col-sm-2 {
+ width: 16.66666667%;
+ }
+ .col-sm-1 {
+ width: 8.33333333%;
+ }
+ .col-sm-pull-12 {
+ right: 100%;
+ }
+ .col-sm-pull-11 {
+ right: 91.66666667%;
+ }
+ .col-sm-pull-10 {
+ right: 83.33333333%;
+ }
+ .col-sm-pull-9 {
+ right: 75%;
+ }
+ .col-sm-pull-8 {
+ right: 66.66666667%;
+ }
+ .col-sm-pull-7 {
+ right: 58.33333333%;
+ }
+ .col-sm-pull-6 {
+ right: 50%;
+ }
+ .col-sm-pull-5 {
+ right: 41.66666667%;
+ }
+ .col-sm-pull-4 {
+ right: 33.33333333%;
+ }
+ .col-sm-pull-3 {
+ right: 25%;
+ }
+ .col-sm-pull-2 {
+ right: 16.66666667%;
+ }
+ .col-sm-pull-1 {
+ right: 8.33333333%;
+ }
+ .col-sm-pull-0 {
+ right: auto;
+ }
+ .col-sm-push-12 {
+ left: 100%;
+ }
+ .col-sm-push-11 {
+ left: 91.66666667%;
+ }
+ .col-sm-push-10 {
+ left: 83.33333333%;
+ }
+ .col-sm-push-9 {
+ left: 75%;
+ }
+ .col-sm-push-8 {
+ left: 66.66666667%;
+ }
+ .col-sm-push-7 {
+ left: 58.33333333%;
+ }
+ .col-sm-push-6 {
+ left: 50%;
+ }
+ .col-sm-push-5 {
+ left: 41.66666667%;
+ }
+ .col-sm-push-4 {
+ left: 33.33333333%;
+ }
+ .col-sm-push-3 {
+ left: 25%;
+ }
+ .col-sm-push-2 {
+ left: 16.66666667%;
+ }
+ .col-sm-push-1 {
+ left: 8.33333333%;
+ }
+ .col-sm-push-0 {
+ left: auto;
+ }
+ .col-sm-offset-12 {
+ margin-left: 100%;
+ }
+ .col-sm-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-sm-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-sm-offset-9 {
+ margin-left: 75%;
+ }
+ .col-sm-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-sm-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-sm-offset-6 {
+ margin-left: 50%;
+ }
+ .col-sm-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-sm-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-sm-offset-3 {
+ margin-left: 25%;
+ }
+ .col-sm-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-sm-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-sm-offset-0 {
+ margin-left: 0;
+ }
+}
+@media (min-width: 992px) {
+ .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
+ float: left;
+ }
+ .col-md-12 {
+ width: 100%;
+ }
+ .col-md-11 {
+ width: 91.66666667%;
+ }
+ .col-md-10 {
+ width: 83.33333333%;
+ }
+ .col-md-9 {
+ width: 75%;
+ }
+ .col-md-8 {
+ width: 66.66666667%;
+ }
+ .col-md-7 {
+ width: 58.33333333%;
+ }
+ .col-md-6 {
+ width: 50%;
+ }
+ .col-md-5 {
+ width: 41.66666667%;
+ }
+ .col-md-4 {
+ width: 33.33333333%;
+ }
+ .col-md-3 {
+ width: 25%;
+ }
+ .col-md-2 {
+ width: 16.66666667%;
+ }
+ .col-md-1 {
+ width: 8.33333333%;
+ }
+ .col-md-pull-12 {
+ right: 100%;
+ }
+ .col-md-pull-11 {
+ right: 91.66666667%;
+ }
+ .col-md-pull-10 {
+ right: 83.33333333%;
+ }
+ .col-md-pull-9 {
+ right: 75%;
+ }
+ .col-md-pull-8 {
+ right: 66.66666667%;
+ }
+ .col-md-pull-7 {
+ right: 58.33333333%;
+ }
+ .col-md-pull-6 {
+ right: 50%;
+ }
+ .col-md-pull-5 {
+ right: 41.66666667%;
+ }
+ .col-md-pull-4 {
+ right: 33.33333333%;
+ }
+ .col-md-pull-3 {
+ right: 25%;
+ }
+ .col-md-pull-2 {
+ right: 16.66666667%;
+ }
+ .col-md-pull-1 {
+ right: 8.33333333%;
+ }
+ .col-md-pull-0 {
+ right: auto;
+ }
+ .col-md-push-12 {
+ left: 100%;
+ }
+ .col-md-push-11 {
+ left: 91.66666667%;
+ }
+ .col-md-push-10 {
+ left: 83.33333333%;
+ }
+ .col-md-push-9 {
+ left: 75%;
+ }
+ .col-md-push-8 {
+ left: 66.66666667%;
+ }
+ .col-md-push-7 {
+ left: 58.33333333%;
+ }
+ .col-md-push-6 {
+ left: 50%;
+ }
+ .col-md-push-5 {
+ left: 41.66666667%;
+ }
+ .col-md-push-4 {
+ left: 33.33333333%;
+ }
+ .col-md-push-3 {
+ left: 25%;
+ }
+ .col-md-push-2 {
+ left: 16.66666667%;
+ }
+ .col-md-push-1 {
+ left: 8.33333333%;
+ }
+ .col-md-push-0 {
+ left: auto;
+ }
+ .col-md-offset-12 {
+ margin-left: 100%;
+ }
+ .col-md-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-md-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-md-offset-9 {
+ margin-left: 75%;
+ }
+ .col-md-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-md-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-md-offset-6 {
+ margin-left: 50%;
+ }
+ .col-md-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-md-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-md-offset-3 {
+ margin-left: 25%;
+ }
+ .col-md-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-md-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-md-offset-0 {
+ margin-left: 0;
+ }
+}
+@media (min-width: 1200px) {
+ .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
+ float: left;
+ }
+ .col-lg-12 {
+ width: 100%;
+ }
+ .col-lg-11 {
+ width: 91.66666667%;
+ }
+ .col-lg-10 {
+ width: 83.33333333%;
+ }
+ .col-lg-9 {
+ width: 75%;
+ }
+ .col-lg-8 {
+ width: 66.66666667%;
+ }
+ .col-lg-7 {
+ width: 58.33333333%;
+ }
+ .col-lg-6 {
+ width: 50%;
+ }
+ .col-lg-5 {
+ width: 41.66666667%;
+ }
+ .col-lg-4 {
+ width: 33.33333333%;
+ }
+ .col-lg-3 {
+ width: 25%;
+ }
+ .col-lg-2 {
+ width: 16.66666667%;
+ }
+ .col-lg-1 {
+ width: 8.33333333%;
+ }
+ .col-lg-pull-12 {
+ right: 100%;
+ }
+ .col-lg-pull-11 {
+ right: 91.66666667%;
+ }
+ .col-lg-pull-10 {
+ right: 83.33333333%;
+ }
+ .col-lg-pull-9 {
+ right: 75%;
+ }
+ .col-lg-pull-8 {
+ right: 66.66666667%;
+ }
+ .col-lg-pull-7 {
+ right: 58.33333333%;
+ }
+ .col-lg-pull-6 {
+ right: 50%;
+ }
+ .col-lg-pull-5 {
+ right: 41.66666667%;
+ }
+ .col-lg-pull-4 {
+ right: 33.33333333%;
+ }
+ .col-lg-pull-3 {
+ right: 25%;
+ }
+ .col-lg-pull-2 {
+ right: 16.66666667%;
+ }
+ .col-lg-pull-1 {
+ right: 8.33333333%;
+ }
+ .col-lg-pull-0 {
+ right: auto;
+ }
+ .col-lg-push-12 {
+ left: 100%;
+ }
+ .col-lg-push-11 {
+ left: 91.66666667%;
+ }
+ .col-lg-push-10 {
+ left: 83.33333333%;
+ }
+ .col-lg-push-9 {
+ left: 75%;
+ }
+ .col-lg-push-8 {
+ left: 66.66666667%;
+ }
+ .col-lg-push-7 {
+ left: 58.33333333%;
+ }
+ .col-lg-push-6 {
+ left: 50%;
+ }
+ .col-lg-push-5 {
+ left: 41.66666667%;
+ }
+ .col-lg-push-4 {
+ left: 33.33333333%;
+ }
+ .col-lg-push-3 {
+ left: 25%;
+ }
+ .col-lg-push-2 {
+ left: 16.66666667%;
+ }
+ .col-lg-push-1 {
+ left: 8.33333333%;
+ }
+ .col-lg-push-0 {
+ left: auto;
+ }
+ .col-lg-offset-12 {
+ margin-left: 100%;
+ }
+ .col-lg-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-lg-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-lg-offset-9 {
+ margin-left: 75%;
+ }
+ .col-lg-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-lg-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-lg-offset-6 {
+ margin-left: 50%;
+ }
+ .col-lg-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-lg-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-lg-offset-3 {
+ margin-left: 25%;
+ }
+ .col-lg-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-lg-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-lg-offset-0 {
+ margin-left: 0;
+ }
+}
+table {
+ background-color: transparent;
+}
+caption {
+ padding-top: 8px;
+ padding-bottom: 8px;
+ color: #777;
+ text-align: left;
+}
+th {
+ text-align: left;
+}
+.table {
+ width: 100%;
+ max-width: 100%;
+ margin-bottom: 20px;
+}
+.table > thead > tr > th,
+.table > tbody > tr > th,
+.table > tfoot > tr > th,
+.table > thead > tr > td,
+.table > tbody > tr > td,
+.table > tfoot > tr > td {
+ padding: 8px;
+ line-height: 1.42857143;
+ vertical-align: top;
+ border-top: 1px solid #ddd;
+}
+.table > thead > tr > th {
+ vertical-align: bottom;
+ border-bottom: 2px solid #ddd;
+}
+.table > caption + thead > tr:first-child > th,
+.table > colgroup + thead > tr:first-child > th,
+.table > thead:first-child > tr:first-child > th,
+.table > caption + thead > tr:first-child > td,
+.table > colgroup + thead > tr:first-child > td,
+.table > thead:first-child > tr:first-child > td {
+ border-top: 0;
+}
+.table > tbody + tbody {
+ border-top: 2px solid #ddd;
+}
+.table .table {
+ background-color: #fff;
+}
+.table-condensed > thead > tr > th,
+.table-condensed > tbody > tr > th,
+.table-condensed > tfoot > tr > th,
+.table-condensed > thead > tr > td,
+.table-condensed > tbody > tr > td,
+.table-condensed > tfoot > tr > td {
+ padding: 5px;
+}
+.table-bordered {
+ border: 1px solid #ddd;
+}
+.table-bordered > thead > tr > th,
+.table-bordered > tbody > tr > th,
+.table-bordered > tfoot > tr > th,
+.table-bordered > thead > tr > td,
+.table-bordered > tbody > tr > td,
+.table-bordered > tfoot > tr > td {
+ border: 1px solid #ddd;
+}
+.table-bordered > thead > tr > th,
+.table-bordered > thead > tr > td {
+ border-bottom-width: 2px;
+}
+.table-striped > tbody > tr:nth-child(odd) {
+ background-color: #f9f9f9;
+}
+.table-hover > tbody > tr:hover {
+ background-color: #f5f5f5;
+}
+table col[class*="col-"] {
+ position: static;
+ display: table-column;
+ float: none;
+}
+table td[class*="col-"],
+table th[class*="col-"] {
+ position: static;
+ display: table-cell;
+ float: none;
+}
+.table > thead > tr > td.active,
+.table > tbody > tr > td.active,
+.table > tfoot > tr > td.active,
+.table > thead > tr > th.active,
+.table > tbody > tr > th.active,
+.table > tfoot > tr > th.active,
+.table > thead > tr.active > td,
+.table > tbody > tr.active > td,
+.table > tfoot > tr.active > td,
+.table > thead > tr.active > th,
+.table > tbody > tr.active > th,
+.table > tfoot > tr.active > th {
+ background-color: #f5f5f5;
+}
+.table-hover > tbody > tr > td.active:hover,
+.table-hover > tbody > tr > th.active:hover,
+.table-hover > tbody > tr.active:hover > td,
+.table-hover > tbody > tr:hover > .active,
+.table-hover > tbody > tr.active:hover > th {
+ background-color: #e8e8e8;
+}
+.table > thead > tr > td.success,
+.table > tbody > tr > td.success,
+.table > tfoot > tr > td.success,
+.table > thead > tr > th.success,
+.table > tbody > tr > th.success,
+.table > tfoot > tr > th.success,
+.table > thead > tr.success > td,
+.table > tbody > tr.success > td,
+.table > tfoot > tr.success > td,
+.table > thead > tr.success > th,
+.table > tbody > tr.success > th,
+.table > tfoot > tr.success > th {
+ background-color: #dff0d8;
+}
+.table-hover > tbody > tr > td.success:hover,
+.table-hover > tbody > tr > th.success:hover,
+.table-hover > tbody > tr.success:hover > td,
+.table-hover > tbody > tr:hover > .success,
+.table-hover > tbody > tr.success:hover > th {
+ background-color: #d0e9c6;
+}
+.table > thead > tr > td.info,
+.table > tbody > tr > td.info,
+.table > tfoot > tr > td.info,
+.table > thead > tr > th.info,
+.table > tbody > tr > th.info,
+.table > tfoot > tr > th.info,
+.table > thead > tr.info > td,
+.table > tbody > tr.info > td,
+.table > tfoot > tr.info > td,
+.table > thead > tr.info > th,
+.table > tbody > tr.info > th,
+.table > tfoot > tr.info > th {
+ background-color: #d9edf7;
+}
+.table-hover > tbody > tr > td.info:hover,
+.table-hover > tbody > tr > th.info:hover,
+.table-hover > tbody > tr.info:hover > td,
+.table-hover > tbody > tr:hover > .info,
+.table-hover > tbody > tr.info:hover > th {
+ background-color: #c4e3f3;
+}
+.table > thead > tr > td.warning,
+.table > tbody > tr > td.warning,
+.table > tfoot > tr > td.warning,
+.table > thead > tr > th.warning,
+.table > tbody > tr > th.warning,
+.table > tfoot > tr > th.warning,
+.table > thead > tr.warning > td,
+.table > tbody > tr.warning > td,
+.table > tfoot > tr.warning > td,
+.table > thead > tr.warning > th,
+.table > tbody > tr.warning > th,
+.table > tfoot > tr.warning > th {
+ background-color: #fcf8e3;
+}
+.table-hover > tbody > tr > td.warning:hover,
+.table-hover > tbody > tr > th.warning:hover,
+.table-hover > tbody > tr.warning:hover > td,
+.table-hover > tbody > tr:hover > .warning,
+.table-hover > tbody > tr.warning:hover > th {
+ background-color: #faf2cc;
+}
+.table > thead > tr > td.danger,
+.table > tbody > tr > td.danger,
+.table > tfoot > tr > td.danger,
+.table > thead > tr > th.danger,
+.table > tbody > tr > th.danger,
+.table > tfoot > tr > th.danger,
+.table > thead > tr.danger > td,
+.table > tbody > tr.danger > td,
+.table > tfoot > tr.danger > td,
+.table > thead > tr.danger > th,
+.table > tbody > tr.danger > th,
+.table > tfoot > tr.danger > th {
+ background-color: #f2dede;
+}
+.table-hover > tbody > tr > td.danger:hover,
+.table-hover > tbody > tr > th.danger:hover,
+.table-hover > tbody > tr.danger:hover > td,
+.table-hover > tbody > tr:hover > .danger,
+.table-hover > tbody > tr.danger:hover > th {
+ background-color: #ebcccc;
+}
+.table-responsive {
+ min-height: .01%;
+ overflow-x: auto;
+}
+@media screen and (max-width: 767px) {
+ .table-responsive {
+ width: 100%;
+ margin-bottom: 15px;
+ overflow-y: hidden;
+ -ms-overflow-style: -ms-autohiding-scrollbar;
+ border: 1px solid #ddd;
+ }
+ .table-responsive > .table {
+ margin-bottom: 0;
+ }
+ .table-responsive > .table > thead > tr > th,
+ .table-responsive > .table > tbody > tr > th,
+ .table-responsive > .table > tfoot > tr > th,
+ .table-responsive > .table > thead > tr > td,
+ .table-responsive > .table > tbody > tr > td,
+ .table-responsive > .table > tfoot > tr > td {
+ white-space: nowrap;
+ }
+ .table-responsive > .table-bordered {
+ border: 0;
+ }
+ .table-responsive > .table-bordered > thead > tr > th:first-child,
+ .table-responsive > .table-bordered > tbody > tr > th:first-child,
+ .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+ .table-responsive > .table-bordered > thead > tr > td:first-child,
+ .table-responsive > .table-bordered > tbody > tr > td:first-child,
+ .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+ border-left: 0;
+ }
+ .table-responsive > .table-bordered > thead > tr > th:last-child,
+ .table-responsive > .table-bordered > tbody > tr > th:last-child,
+ .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+ .table-responsive > .table-bordered > thead > tr > td:last-child,
+ .table-responsive > .table-bordered > tbody > tr > td:last-child,
+ .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+ border-right: 0;
+ }
+ .table-responsive > .table-bordered > tbody > tr:last-child > th,
+ .table-responsive > .table-bordered > tfoot > tr:last-child > th,
+ .table-responsive > .table-bordered > tbody > tr:last-child > td,
+ .table-responsive > .table-bordered > tfoot > tr:last-child > td {
+ border-bottom: 0;
+ }
+}
+fieldset {
+ min-width: 0;
+ padding: 0;
+ margin: 0;
+ border: 0;
+}
+legend {
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin-bottom: 20px;
+ font-size: 21px;
+ line-height: inherit;
+ color: #333;
+ border: 0;
+ border-bottom: 1px solid #e5e5e5;
+}
+label {
+ display: inline-block;
+ max-width: 100%;
+ margin-bottom: 5px;
+ font-weight: bold;
+}
+input[type="search"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+input[type="radio"],
+input[type="checkbox"] {
+ margin: 4px 0 0;
+ margin-top: 1px \9;
+ line-height: normal;
+}
+input[type="file"] {
+ display: block;
+}
+input[type="range"] {
+ display: block;
+ width: 100%;
+}
+select[multiple],
+select[size] {
+ height: auto;
+}
+input[type="file"]:focus,
+input[type="radio"]:focus,
+input[type="checkbox"]:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+output {
+ display: block;
+ padding-top: 7px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #555;
+}
+.form-control {
+ display: block;
+ width: 100%;
+ height: 34px;
+ padding: 6px 12px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #555;
+ background-color: #fff;
+ background-image: none;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
+ -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+}
+.form-control:focus {
+ border-color: #66afe9;
+ outline: 0;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
+ box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
+}
+.form-control::-moz-placeholder {
+ color: #999;
+ opacity: 1;
+}
+.form-control:-ms-input-placeholder {
+ color: #999;
+}
+.form-control::-webkit-input-placeholder {
+ color: #999;
+}
+.form-control[disabled],
+.form-control[readonly],
+fieldset[disabled] .form-control {
+ cursor: not-allowed;
+ background-color: #eee;
+ opacity: 1;
+}
+textarea.form-control {
+ height: auto;
+}
+input[type="search"] {
+ -webkit-appearance: none;
+}
+@media screen and (-webkit-min-device-pixel-ratio: 0) {
+ input[type="date"],
+ input[type="time"],
+ input[type="datetime-local"],
+ input[type="month"] {
+ line-height: 34px;
+ }
+ input[type="date"].input-sm,
+ input[type="time"].input-sm,
+ input[type="datetime-local"].input-sm,
+ input[type="month"].input-sm {
+ line-height: 30px;
+ }
+ input[type="date"].input-lg,
+ input[type="time"].input-lg,
+ input[type="datetime-local"].input-lg,
+ input[type="month"].input-lg {
+ line-height: 46px;
+ }
+}
+.form-group {
+ margin-bottom: 15px;
+}
+.radio,
+.checkbox {
+ position: relative;
+ display: block;
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+.radio label,
+.checkbox label {
+ min-height: 20px;
+ padding-left: 20px;
+ margin-bottom: 0;
+ font-weight: normal;
+ cursor: pointer;
+}
+.radio input[type="radio"],
+.radio-inline input[type="radio"],
+.checkbox input[type="checkbox"],
+.checkbox-inline input[type="checkbox"] {
+ position: absolute;
+ margin-top: 4px \9;
+ margin-left: -20px;
+}
+.radio + .radio,
+.checkbox + .checkbox {
+ margin-top: -5px;
+}
+.radio-inline,
+.checkbox-inline {
+ display: inline-block;
+ padding-left: 20px;
+ margin-bottom: 0;
+ font-weight: normal;
+ vertical-align: middle;
+ cursor: pointer;
+}
+.radio-inline + .radio-inline,
+.checkbox-inline + .checkbox-inline {
+ margin-top: 0;
+ margin-left: 10px;
+}
+input[type="radio"][disabled],
+input[type="checkbox"][disabled],
+input[type="radio"].disabled,
+input[type="checkbox"].disabled,
+fieldset[disabled] input[type="radio"],
+fieldset[disabled] input[type="checkbox"] {
+ cursor: not-allowed;
+}
+.radio-inline.disabled,
+.checkbox-inline.disabled,
+fieldset[disabled] .radio-inline,
+fieldset[disabled] .checkbox-inline {
+ cursor: not-allowed;
+}
+.radio.disabled label,
+.checkbox.disabled label,
+fieldset[disabled] .radio label,
+fieldset[disabled] .checkbox label {
+ cursor: not-allowed;
+}
+.form-control-static {
+ padding-top: 7px;
+ padding-bottom: 7px;
+ margin-bottom: 0;
+}
+.form-control-static.input-lg,
+.form-control-static.input-sm {
+ padding-right: 0;
+ padding-left: 0;
+}
+.input-sm,
+.form-group-sm .form-control {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+select.input-sm,
+select.form-group-sm .form-control {
+ height: 30px;
+ line-height: 30px;
+}
+textarea.input-sm,
+textarea.form-group-sm .form-control,
+select[multiple].input-sm,
+select[multiple].form-group-sm .form-control {
+ height: auto;
+}
+.input-lg,
+.form-group-lg .form-control {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px;
+}
+select.input-lg,
+select.form-group-lg .form-control {
+ height: 46px;
+ line-height: 46px;
+}
+textarea.input-lg,
+textarea.form-group-lg .form-control,
+select[multiple].input-lg,
+select[multiple].form-group-lg .form-control {
+ height: auto;
+}
+.has-feedback {
+ position: relative;
+}
+.has-feedback .form-control {
+ padding-right: 42.5px;
+}
+.form-control-feedback {
+ position: absolute;
+ top: 0;
+ right: 0;
+ z-index: 2;
+ display: block;
+ width: 34px;
+ height: 34px;
+ line-height: 34px;
+ text-align: center;
+ pointer-events: none;
+}
+.input-lg + .form-control-feedback {
+ width: 46px;
+ height: 46px;
+ line-height: 46px;
+}
+.input-sm + .form-control-feedback {
+ width: 30px;
+ height: 30px;
+ line-height: 30px;
+}
+.has-success .help-block,
+.has-success .control-label,
+.has-success .radio,
+.has-success .checkbox,
+.has-success .radio-inline,
+.has-success .checkbox-inline,
+.has-success.radio label,
+.has-success.checkbox label,
+.has-success.radio-inline label,
+.has-success.checkbox-inline label {
+ color: #3c763d;
+}
+.has-success .form-control {
+ border-color: #3c763d;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+.has-success .form-control:focus {
+ border-color: #2b542c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
+}
+.has-success .input-group-addon {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #3c763d;
+}
+.has-success .form-control-feedback {
+ color: #3c763d;
+}
+.has-warning .help-block,
+.has-warning .control-label,
+.has-warning .radio,
+.has-warning .checkbox,
+.has-warning .radio-inline,
+.has-warning .checkbox-inline,
+.has-warning.radio label,
+.has-warning.checkbox label,
+.has-warning.radio-inline label,
+.has-warning.checkbox-inline label {
+ color: #8a6d3b;
+}
+.has-warning .form-control {
+ border-color: #8a6d3b;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+.has-warning .form-control:focus {
+ border-color: #66512c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
+}
+.has-warning .input-group-addon {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #8a6d3b;
+}
+.has-warning .form-control-feedback {
+ color: #8a6d3b;
+}
+.has-error .help-block,
+.has-error .control-label,
+.has-error .radio,
+.has-error .checkbox,
+.has-error .radio-inline,
+.has-error .checkbox-inline,
+.has-error.radio label,
+.has-error.checkbox label,
+.has-error.radio-inline label,
+.has-error.checkbox-inline label {
+ color: #a94442;
+}
+.has-error .form-control {
+ border-color: #a94442;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+.has-error .form-control:focus {
+ border-color: #843534;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
+}
+.has-error .input-group-addon {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #a94442;
+}
+.has-error .form-control-feedback {
+ color: #a94442;
+}
+.has-feedback label ~ .form-control-feedback {
+ top: 25px;
+}
+.has-feedback label.sr-only ~ .form-control-feedback {
+ top: 0;
+}
+.help-block {
+ display: block;
+ margin-top: 5px;
+ margin-bottom: 10px;
+ color: #737373;
+}
+@media (min-width: 768px) {
+ .form-inline .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .form-inline .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle;
+ }
+ .form-inline .form-control-static {
+ display: inline-block;
+ }
+ .form-inline .input-group {
+ display: inline-table;
+ vertical-align: middle;
+ }
+ .form-inline .input-group .input-group-addon,
+ .form-inline .input-group .input-group-btn,
+ .form-inline .input-group .form-control {
+ width: auto;
+ }
+ .form-inline .input-group > .form-control {
+ width: 100%;
+ }
+ .form-inline .control-label {
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .form-inline .radio,
+ .form-inline .checkbox {
+ display: inline-block;
+ margin-top: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .form-inline .radio label,
+ .form-inline .checkbox label {
+ padding-left: 0;
+ }
+ .form-inline .radio input[type="radio"],
+ .form-inline .checkbox input[type="checkbox"] {
+ position: relative;
+ margin-left: 0;
+ }
+ .form-inline .has-feedback .form-control-feedback {
+ top: 0;
+ }
+}
+.form-horizontal .radio,
+.form-horizontal .checkbox,
+.form-horizontal .radio-inline,
+.form-horizontal .checkbox-inline {
+ padding-top: 7px;
+ margin-top: 0;
+ margin-bottom: 0;
+}
+.form-horizontal .radio,
+.form-horizontal .checkbox {
+ min-height: 27px;
+}
+.form-horizontal .form-group {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+@media (min-width: 768px) {
+ .form-horizontal .control-label {
+ padding-top: 7px;
+ margin-bottom: 0;
+ text-align: right;
+ }
+}
+.form-horizontal .has-feedback .form-control-feedback {
+ right: 15px;
+}
+@media (min-width: 768px) {
+ .form-horizontal .form-group-lg .control-label {
+ padding-top: 14.3px;
+ }
+}
+@media (min-width: 768px) {
+ .form-horizontal .form-group-sm .control-label {
+ padding-top: 6px;
+ }
+}
+.btn {
+ display: inline-block;
+ padding: 6px 12px;
+ margin-bottom: 0;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1.42857143;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ -ms-touch-action: manipulation;
+ touch-action: manipulation;
+ cursor: pointer;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ background-image: none;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+.btn:focus,
+.btn:active:focus,
+.btn.active:focus,
+.btn.focus,
+.btn:active.focus,
+.btn.active.focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+.btn:hover,
+.btn:focus,
+.btn.focus {
+ color: #333;
+ text-decoration: none;
+}
+.btn:active,
+.btn.active {
+ background-image: none;
+ outline: 0;
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+.btn.disabled,
+.btn[disabled],
+fieldset[disabled] .btn {
+ pointer-events: none;
+ cursor: not-allowed;
+ filter: alpha(opacity=65);
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ opacity: .65;
+}
+.btn-default {
+ color: #333;
+ background-color: #fff;
+ border-color: #ccc;
+}
+.btn-default:hover,
+.btn-default:focus,
+.btn-default.focus,
+.btn-default:active,
+.btn-default.active,
+.open > .dropdown-toggle.btn-default {
+ color: #333;
+ background-color: #e6e6e6;
+ border-color: #adadad;
+}
+.btn-default:active,
+.btn-default.active,
+.open > .dropdown-toggle.btn-default {
+ background-image: none;
+}
+.btn-default.disabled,
+.btn-default[disabled],
+fieldset[disabled] .btn-default,
+.btn-default.disabled:hover,
+.btn-default[disabled]:hover,
+fieldset[disabled] .btn-default:hover,
+.btn-default.disabled:focus,
+.btn-default[disabled]:focus,
+fieldset[disabled] .btn-default:focus,
+.btn-default.disabled.focus,
+.btn-default[disabled].focus,
+fieldset[disabled] .btn-default.focus,
+.btn-default.disabled:active,
+.btn-default[disabled]:active,
+fieldset[disabled] .btn-default:active,
+.btn-default.disabled.active,
+.btn-default[disabled].active,
+fieldset[disabled] .btn-default.active {
+ background-color: #fff;
+ border-color: #ccc;
+}
+.btn-default .badge {
+ color: #fff;
+ background-color: #333;
+}
+.btn-primary {
+ color: #fff;
+ background-color: #337ab7;
+ border-color: #2e6da4;
+}
+.btn-primary:hover,
+.btn-primary:focus,
+.btn-primary.focus,
+.btn-primary:active,
+.btn-primary.active,
+.open > .dropdown-toggle.btn-primary {
+ color: #fff;
+ background-color: #286090;
+ border-color: #204d74;
+}
+.btn-primary:active,
+.btn-primary.active,
+.open > .dropdown-toggle.btn-primary {
+ background-image: none;
+}
+.btn-primary.disabled,
+.btn-primary[disabled],
+fieldset[disabled] .btn-primary,
+.btn-primary.disabled:hover,
+.btn-primary[disabled]:hover,
+fieldset[disabled] .btn-primary:hover,
+.btn-primary.disabled:focus,
+.btn-primary[disabled]:focus,
+fieldset[disabled] .btn-primary:focus,
+.btn-primary.disabled.focus,
+.btn-primary[disabled].focus,
+fieldset[disabled] .btn-primary.focus,
+.btn-primary.disabled:active,
+.btn-primary[disabled]:active,
+fieldset[disabled] .btn-primary:active,
+.btn-primary.disabled.active,
+.btn-primary[disabled].active,
+fieldset[disabled] .btn-primary.active {
+ background-color: #337ab7;
+ border-color: #2e6da4;
+}
+.btn-primary .badge {
+ color: #337ab7;
+ background-color: #fff;
+}
+.btn-success {
+ color: #fff;
+ background-color: #5cb85c;
+ border-color: #4cae4c;
+}
+.btn-success:hover,
+.btn-success:focus,
+.btn-success.focus,
+.btn-success:active,
+.btn-success.active,
+.open > .dropdown-toggle.btn-success {
+ color: #fff;
+ background-color: #449d44;
+ border-color: #398439;
+}
+.btn-success:active,
+.btn-success.active,
+.open > .dropdown-toggle.btn-success {
+ background-image: none;
+}
+.btn-success.disabled,
+.btn-success[disabled],
+fieldset[disabled] .btn-success,
+.btn-success.disabled:hover,
+.btn-success[disabled]:hover,
+fieldset[disabled] .btn-success:hover,
+.btn-success.disabled:focus,
+.btn-success[disabled]:focus,
+fieldset[disabled] .btn-success:focus,
+.btn-success.disabled.focus,
+.btn-success[disabled].focus,
+fieldset[disabled] .btn-success.focus,
+.btn-success.disabled:active,
+.btn-success[disabled]:active,
+fieldset[disabled] .btn-success:active,
+.btn-success.disabled.active,
+.btn-success[disabled].active,
+fieldset[disabled] .btn-success.active {
+ background-color: #5cb85c;
+ border-color: #4cae4c;
+}
+.btn-success .badge {
+ color: #5cb85c;
+ background-color: #fff;
+}
+.btn-info {
+ color: #fff;
+ background-color: #5bc0de;
+ border-color: #46b8da;
+}
+.btn-info:hover,
+.btn-info:focus,
+.btn-info.focus,
+.btn-info:active,
+.btn-info.active,
+.open > .dropdown-toggle.btn-info {
+ color: #fff;
+ background-color: #31b0d5;
+ border-color: #269abc;
+}
+.btn-info:active,
+.btn-info.active,
+.open > .dropdown-toggle.btn-info {
+ background-image: none;
+}
+.btn-info.disabled,
+.btn-info[disabled],
+fieldset[disabled] .btn-info,
+.btn-info.disabled:hover,
+.btn-info[disabled]:hover,
+fieldset[disabled] .btn-info:hover,
+.btn-info.disabled:focus,
+.btn-info[disabled]:focus,
+fieldset[disabled] .btn-info:focus,
+.btn-info.disabled.focus,
+.btn-info[disabled].focus,
+fieldset[disabled] .btn-info.focus,
+.btn-info.disabled:active,
+.btn-info[disabled]:active,
+fieldset[disabled] .btn-info:active,
+.btn-info.disabled.active,
+.btn-info[disabled].active,
+fieldset[disabled] .btn-info.active {
+ background-color: #5bc0de;
+ border-color: #46b8da;
+}
+.btn-info .badge {
+ color: #5bc0de;
+ background-color: #fff;
+}
+.btn-warning {
+ color: #fff;
+ background-color: #f0ad4e;
+ border-color: #eea236;
+}
+.btn-warning:hover,
+.btn-warning:focus,
+.btn-warning.focus,
+.btn-warning:active,
+.btn-warning.active,
+.open > .dropdown-toggle.btn-warning {
+ color: #fff;
+ background-color: #ec971f;
+ border-color: #d58512;
+}
+.btn-warning:active,
+.btn-warning.active,
+.open > .dropdown-toggle.btn-warning {
+ background-image: none;
+}
+.btn-warning.disabled,
+.btn-warning[disabled],
+fieldset[disabled] .btn-warning,
+.btn-warning.disabled:hover,
+.btn-warning[disabled]:hover,
+fieldset[disabled] .btn-warning:hover,
+.btn-warning.disabled:focus,
+.btn-warning[disabled]:focus,
+fieldset[disabled] .btn-warning:focus,
+.btn-warning.disabled.focus,
+.btn-warning[disabled].focus,
+fieldset[disabled] .btn-warning.focus,
+.btn-warning.disabled:active,
+.btn-warning[disabled]:active,
+fieldset[disabled] .btn-warning:active,
+.btn-warning.disabled.active,
+.btn-warning[disabled].active,
+fieldset[disabled] .btn-warning.active {
+ background-color: #f0ad4e;
+ border-color: #eea236;
+}
+.btn-warning .badge {
+ color: #f0ad4e;
+ background-color: #fff;
+}
+.btn-danger {
+ color: #fff;
+ background-color: #d9534f;
+ border-color: #d43f3a;
+}
+.btn-danger:hover,
+.btn-danger:focus,
+.btn-danger.focus,
+.btn-danger:active,
+.btn-danger.active,
+.open > .dropdown-toggle.btn-danger {
+ color: #fff;
+ background-color: #c9302c;
+ border-color: #ac2925;
+}
+.btn-danger:active,
+.btn-danger.active,
+.open > .dropdown-toggle.btn-danger {
+ background-image: none;
+}
+.btn-danger.disabled,
+.btn-danger[disabled],
+fieldset[disabled] .btn-danger,
+.btn-danger.disabled:hover,
+.btn-danger[disabled]:hover,
+fieldset[disabled] .btn-danger:hover,
+.btn-danger.disabled:focus,
+.btn-danger[disabled]:focus,
+fieldset[disabled] .btn-danger:focus,
+.btn-danger.disabled.focus,
+.btn-danger[disabled].focus,
+fieldset[disabled] .btn-danger.focus,
+.btn-danger.disabled:active,
+.btn-danger[disabled]:active,
+fieldset[disabled] .btn-danger:active,
+.btn-danger.disabled.active,
+.btn-danger[disabled].active,
+fieldset[disabled] .btn-danger.active {
+ background-color: #d9534f;
+ border-color: #d43f3a;
+}
+.btn-danger .badge {
+ color: #d9534f;
+ background-color: #fff;
+}
+.btn-link {
+ font-weight: normal;
+ color: #337ab7;
+ border-radius: 0;
+}
+.btn-link,
+.btn-link:active,
+.btn-link.active,
+.btn-link[disabled],
+fieldset[disabled] .btn-link {
+ background-color: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+.btn-link,
+.btn-link:hover,
+.btn-link:focus,
+.btn-link:active {
+ border-color: transparent;
+}
+.btn-link:hover,
+.btn-link:focus {
+ color: #23527c;
+ text-decoration: underline;
+ background-color: transparent;
+}
+.btn-link[disabled]:hover,
+fieldset[disabled] .btn-link:hover,
+.btn-link[disabled]:focus,
+fieldset[disabled] .btn-link:focus {
+ color: #777;
+ text-decoration: none;
+}
+.btn-lg,
+.btn-group-lg > .btn {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px;
+}
+.btn-sm,
+.btn-group-sm > .btn {
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+.btn-xs,
+.btn-group-xs > .btn {
+ padding: 1px 5px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+.btn-block {
+ display: block;
+ width: 100%;
+}
+.btn-block + .btn-block {
+ margin-top: 5px;
+}
+input[type="submit"].btn-block,
+input[type="reset"].btn-block,
+input[type="button"].btn-block {
+ width: 100%;
+}
+.fade {
+ opacity: 0;
+ -webkit-transition: opacity .15s linear;
+ -o-transition: opacity .15s linear;
+ transition: opacity .15s linear;
+}
+.fade.in {
+ opacity: 1;
+}
+.collapse {
+ display: none;
+ visibility: hidden;
+}
+.collapse.in {
+ display: block;
+ visibility: visible;
+}
+tr.collapse.in {
+ display: table-row;
+}
+tbody.collapse.in {
+ display: table-row-group;
+}
+.collapsing {
+ position: relative;
+ height: 0;
+ overflow: hidden;
+ -webkit-transition-timing-function: ease;
+ -o-transition-timing-function: ease;
+ transition-timing-function: ease;
+ -webkit-transition-duration: .35s;
+ -o-transition-duration: .35s;
+ transition-duration: .35s;
+ -webkit-transition-property: height, visibility;
+ -o-transition-property: height, visibility;
+ transition-property: height, visibility;
+}
+.caret {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ margin-left: 2px;
+ vertical-align: middle;
+ border-top: 4px solid;
+ border-right: 4px solid transparent;
+ border-left: 4px solid transparent;
+}
+.dropdown {
+ position: relative;
+}
+.dropdown-toggle:focus {
+ outline: 0;
+}
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ min-width: 160px;
+ padding: 5px 0;
+ margin: 2px 0 0;
+ font-size: 14px;
+ text-align: left;
+ list-style: none;
+ background-color: #fff;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, .15);
+ border-radius: 4px;
+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+ box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+}
+.dropdown-menu.pull-right {
+ right: 0;
+ left: auto;
+}
+.dropdown-menu .divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5;
+}
+.dropdown-menu > li > a {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: normal;
+ line-height: 1.42857143;
+ color: #333;
+ white-space: nowrap;
+}
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+ color: #262626;
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+ color: #fff;
+ text-decoration: none;
+ background-color: #337ab7;
+ outline: 0;
+}
+.dropdown-menu > .disabled > a,
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+ color: #777;
+}
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+ text-decoration: none;
+ cursor: not-allowed;
+ background-color: transparent;
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+}
+.open > .dropdown-menu {
+ display: block;
+}
+.open > a {
+ outline: 0;
+}
+.dropdown-menu-right {
+ right: 0;
+ left: auto;
+}
+.dropdown-menu-left {
+ right: auto;
+ left: 0;
+}
+.dropdown-header {
+ display: block;
+ padding: 3px 20px;
+ font-size: 12px;
+ line-height: 1.42857143;
+ color: #777;
+ white-space: nowrap;
+}
+.dropdown-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 990;
+}
+.pull-right > .dropdown-menu {
+ right: 0;
+ left: auto;
+}
+.dropup .caret,
+.navbar-fixed-bottom .dropdown .caret {
+ content: "";
+ border-top: 0;
+ border-bottom: 4px solid;
+}
+.dropup .dropdown-menu,
+.navbar-fixed-bottom .dropdown .dropdown-menu {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 1px;
+}
+@media (min-width: 768px) {
+ .navbar-right .dropdown-menu {
+ right: 0;
+ left: auto;
+ }
+ .navbar-right .dropdown-menu-left {
+ right: auto;
+ left: 0;
+ }
+}
+.btn-group,
+.btn-group-vertical {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+}
+.btn-group > .btn,
+.btn-group-vertical > .btn {
+ position: relative;
+ float: left;
+}
+.btn-group > .btn:hover,
+.btn-group-vertical > .btn:hover,
+.btn-group > .btn:focus,
+.btn-group-vertical > .btn:focus,
+.btn-group > .btn:active,
+.btn-group-vertical > .btn:active,
+.btn-group > .btn.active,
+.btn-group-vertical > .btn.active {
+ z-index: 2;
+}
+.btn-group .btn + .btn,
+.btn-group .btn + .btn-group,
+.btn-group .btn-group + .btn,
+.btn-group .btn-group + .btn-group {
+ margin-left: -1px;
+}
+.btn-toolbar {
+ margin-left: -5px;
+}
+.btn-toolbar .btn-group,
+.btn-toolbar .input-group {
+ float: left;
+}
+.btn-toolbar > .btn,
+.btn-toolbar > .btn-group,
+.btn-toolbar > .input-group {
+ margin-left: 5px;
+}
+.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
+ border-radius: 0;
+}
+.btn-group > .btn:first-child {
+ margin-left: 0;
+}
+.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+.btn-group > .btn:last-child:not(:first-child),
+.btn-group > .dropdown-toggle:not(:first-child) {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.btn-group > .btn-group {
+ float: left;
+}
+.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0;
+}
+.btn-group > .btn-group:first-child > .btn:last-child,
+.btn-group > .btn-group:first-child > .dropdown-toggle {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+.btn-group > .btn-group:last-child > .btn:first-child {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.btn-group .dropdown-toggle:active,
+.btn-group.open .dropdown-toggle {
+ outline: 0;
+}
+.btn-group > .btn + .dropdown-toggle {
+ padding-right: 8px;
+ padding-left: 8px;
+}
+.btn-group > .btn-lg + .dropdown-toggle {
+ padding-right: 12px;
+ padding-left: 12px;
+}
+.btn-group.open .dropdown-toggle {
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+.btn-group.open .dropdown-toggle.btn-link {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+.btn .caret {
+ margin-left: 0;
+}
+.btn-lg .caret {
+ border-width: 5px 5px 0;
+ border-bottom-width: 0;
+}
+.dropup .btn-lg .caret {
+ border-width: 0 5px 5px;
+}
+.btn-group-vertical > .btn,
+.btn-group-vertical > .btn-group,
+.btn-group-vertical > .btn-group > .btn {
+ display: block;
+ float: none;
+ width: 100%;
+ max-width: 100%;
+}
+.btn-group-vertical > .btn-group > .btn {
+ float: none;
+}
+.btn-group-vertical > .btn + .btn,
+.btn-group-vertical > .btn + .btn-group,
+.btn-group-vertical > .btn-group + .btn,
+.btn-group-vertical > .btn-group + .btn-group {
+ margin-top: -1px;
+ margin-left: 0;
+}
+.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
+ border-radius: 0;
+}
+.btn-group-vertical > .btn:first-child:not(:last-child) {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.btn-group-vertical > .btn:last-child:not(:first-child) {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ border-bottom-left-radius: 4px;
+}
+.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0;
+}
+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+.btn-group-justified {
+ display: table;
+ width: 100%;
+ table-layout: fixed;
+ border-collapse: separate;
+}
+.btn-group-justified > .btn,
+.btn-group-justified > .btn-group {
+ display: table-cell;
+ float: none;
+ width: 1%;
+}
+.btn-group-justified > .btn-group .btn {
+ width: 100%;
+}
+.btn-group-justified > .btn-group .dropdown-menu {
+ left: auto;
+}
+[data-toggle="buttons"] > .btn input[type="radio"],
+[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
+[data-toggle="buttons"] > .btn input[type="checkbox"],
+[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
+ position: absolute;
+ clip: rect(0, 0, 0, 0);
+ pointer-events: none;
+}
+.input-group {
+ position: relative;
+ display: table;
+ border-collapse: separate;
+}
+.input-group[class*="col-"] {
+ float: none;
+ padding-right: 0;
+ padding-left: 0;
+}
+.input-group .form-control {
+ position: relative;
+ z-index: 2;
+ float: left;
+ width: 100%;
+ margin-bottom: 0;
+}
+.input-group-lg > .form-control,
+.input-group-lg > .input-group-addon,
+.input-group-lg > .input-group-btn > .btn {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px;
+}
+select.input-group-lg > .form-control,
+select.input-group-lg > .input-group-addon,
+select.input-group-lg > .input-group-btn > .btn {
+ height: 46px;
+ line-height: 46px;
+}
+textarea.input-group-lg > .form-control,
+textarea.input-group-lg > .input-group-addon,
+textarea.input-group-lg > .input-group-btn > .btn,
+select[multiple].input-group-lg > .form-control,
+select[multiple].input-group-lg > .input-group-addon,
+select[multiple].input-group-lg > .input-group-btn > .btn {
+ height: auto;
+}
+.input-group-sm > .form-control,
+.input-group-sm > .input-group-addon,
+.input-group-sm > .input-group-btn > .btn {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+select.input-group-sm > .form-control,
+select.input-group-sm > .input-group-addon,
+select.input-group-sm > .input-group-btn > .btn {
+ height: 30px;
+ line-height: 30px;
+}
+textarea.input-group-sm > .form-control,
+textarea.input-group-sm > .input-group-addon,
+textarea.input-group-sm > .input-group-btn > .btn,
+select[multiple].input-group-sm > .form-control,
+select[multiple].input-group-sm > .input-group-addon,
+select[multiple].input-group-sm > .input-group-btn > .btn {
+ height: auto;
+}
+.input-group-addon,
+.input-group-btn,
+.input-group .form-control {
+ display: table-cell;
+}
+.input-group-addon:not(:first-child):not(:last-child),
+.input-group-btn:not(:first-child):not(:last-child),
+.input-group .form-control:not(:first-child):not(:last-child) {
+ border-radius: 0;
+}
+.input-group-addon,
+.input-group-btn {
+ width: 1%;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+.input-group-addon {
+ padding: 6px 12px;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1;
+ color: #555;
+ text-align: center;
+ background-color: #eee;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+}
+.input-group-addon.input-sm {
+ padding: 5px 10px;
+ font-size: 12px;
+ border-radius: 3px;
+}
+.input-group-addon.input-lg {
+ padding: 10px 16px;
+ font-size: 18px;
+ border-radius: 6px;
+}
+.input-group-addon input[type="radio"],
+.input-group-addon input[type="checkbox"] {
+ margin-top: 0;
+}
+.input-group .form-control:first-child,
+.input-group-addon:first-child,
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group > .btn,
+.input-group-btn:first-child > .dropdown-toggle,
+.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
+.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+.input-group-addon:first-child {
+ border-right: 0;
+}
+.input-group .form-control:last-child,
+.input-group-addon:last-child,
+.input-group-btn:last-child > .btn,
+.input-group-btn:last-child > .btn-group > .btn,
+.input-group-btn:last-child > .dropdown-toggle,
+.input-group-btn:first-child > .btn:not(:first-child),
+.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.input-group-addon:last-child {
+ border-left: 0;
+}
+.input-group-btn {
+ position: relative;
+ font-size: 0;
+ white-space: nowrap;
+}
+.input-group-btn > .btn {
+ position: relative;
+}
+.input-group-btn > .btn + .btn {
+ margin-left: -1px;
+}
+.input-group-btn > .btn:hover,
+.input-group-btn > .btn:focus,
+.input-group-btn > .btn:active {
+ z-index: 2;
+}
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group {
+ margin-right: -1px;
+}
+.input-group-btn:last-child > .btn,
+.input-group-btn:last-child > .btn-group {
+ margin-left: -1px;
+}
+.nav {
+ padding-left: 0;
+ margin-bottom: 0;
+ list-style: none;
+}
+.nav > li {
+ position: relative;
+ display: block;
+}
+.nav > li > a {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+}
+.nav > li > a:hover,
+.nav > li > a:focus {
+ text-decoration: none;
+ background-color: #eee;
+}
+.nav > li.disabled > a {
+ color: #777;
+}
+.nav > li.disabled > a:hover,
+.nav > li.disabled > a:focus {
+ color: #777;
+ text-decoration: none;
+ cursor: not-allowed;
+ background-color: transparent;
+}
+.nav .open > a,
+.nav .open > a:hover,
+.nav .open > a:focus {
+ background-color: #eee;
+ border-color: #337ab7;
+}
+.nav .nav-divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5;
+}
+.nav > li > a > img {
+ max-width: none;
+}
+.nav-tabs {
+ border-bottom: 1px solid #ddd;
+}
+.nav-tabs > li {
+ float: left;
+ margin-bottom: -1px;
+}
+.nav-tabs > li > a {
+ margin-right: 2px;
+ line-height: 1.42857143;
+ border: 1px solid transparent;
+ border-radius: 4px 4px 0 0;
+}
+.nav-tabs > li > a:hover {
+ border-color: #eee #eee #ddd;
+}
+.nav-tabs > li.active > a,
+.nav-tabs > li.active > a:hover,
+.nav-tabs > li.active > a:focus {
+ color: #555;
+ cursor: default;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-bottom-color: transparent;
+}
+.nav-tabs.nav-justified {
+ width: 100%;
+ border-bottom: 0;
+}
+.nav-tabs.nav-justified > li {
+ float: none;
+}
+.nav-tabs.nav-justified > li > a {
+ margin-bottom: 5px;
+ text-align: center;
+}
+.nav-tabs.nav-justified > .dropdown .dropdown-menu {
+ top: auto;
+ left: auto;
+}
+@media (min-width: 768px) {
+ .nav-tabs.nav-justified > li {
+ display: table-cell;
+ width: 1%;
+ }
+ .nav-tabs.nav-justified > li > a {
+ margin-bottom: 0;
+ }
+}
+.nav-tabs.nav-justified > li > a {
+ margin-right: 0;
+ border-radius: 4px;
+}
+.nav-tabs.nav-justified > .active > a,
+.nav-tabs.nav-justified > .active > a:hover,
+.nav-tabs.nav-justified > .active > a:focus {
+ border: 1px solid #ddd;
+}
+@media (min-width: 768px) {
+ .nav-tabs.nav-justified > li > a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 4px 4px 0 0;
+ }
+ .nav-tabs.nav-justified > .active > a,
+ .nav-tabs.nav-justified > .active > a:hover,
+ .nav-tabs.nav-justified > .active > a:focus {
+ border-bottom-color: #fff;
+ }
+}
+.nav-pills > li {
+ float: left;
+}
+.nav-pills > li > a {
+ border-radius: 4px;
+}
+.nav-pills > li + li {
+ margin-left: 2px;
+}
+.nav-pills > li.active > a,
+.nav-pills > li.active > a:hover,
+.nav-pills > li.active > a:focus {
+ color: #fff;
+ background-color: #337ab7;
+}
+.nav-stacked > li {
+ float: none;
+}
+.nav-stacked > li + li {
+ margin-top: 2px;
+ margin-left: 0;
+}
+.nav-justified {
+ width: 100%;
+}
+.nav-justified > li {
+ float: none;
+}
+.nav-justified > li > a {
+ margin-bottom: 5px;
+ text-align: center;
+}
+.nav-justified > .dropdown .dropdown-menu {
+ top: auto;
+ left: auto;
+}
+@media (min-width: 768px) {
+ .nav-justified > li {
+ display: table-cell;
+ width: 1%;
+ }
+ .nav-justified > li > a {
+ margin-bottom: 0;
+ }
+}
+.nav-tabs-justified {
+ border-bottom: 0;
+}
+.nav-tabs-justified > li > a {
+ margin-right: 0;
+ border-radius: 4px;
+}
+.nav-tabs-justified > .active > a,
+.nav-tabs-justified > .active > a:hover,
+.nav-tabs-justified > .active > a:focus {
+ border: 1px solid #ddd;
+}
+@media (min-width: 768px) {
+ .nav-tabs-justified > li > a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 4px 4px 0 0;
+ }
+ .nav-tabs-justified > .active > a,
+ .nav-tabs-justified > .active > a:hover,
+ .nav-tabs-justified > .active > a:focus {
+ border-bottom-color: #fff;
+ }
+}
+.tab-content > .tab-pane {
+ display: none;
+ visibility: hidden;
+}
+.tab-content > .active {
+ display: block;
+ visibility: visible;
+}
+.nav-tabs .dropdown-menu {
+ margin-top: -1px;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+.navbar {
+ position: relative;
+ min-height: 50px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
+}
+@media (min-width: 768px) {
+ .navbar {
+ border-radius: 4px;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-header {
+ float: left;
+ }
+}
+.navbar-collapse {
+ padding-right: 15px;
+ padding-left: 15px;
+ overflow-x: visible;
+ -webkit-overflow-scrolling: touch;
+ border-top: 1px solid transparent;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
+}
+.navbar-collapse.in {
+ overflow-y: auto;
+}
+@media (min-width: 768px) {
+ .navbar-collapse {
+ width: auto;
+ border-top: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+ .navbar-collapse.collapse {
+ display: block !important;
+ height: auto !important;
+ padding-bottom: 0;
+ overflow: visible !important;
+ visibility: visible !important;
+ }
+ .navbar-collapse.in {
+ overflow-y: visible;
+ }
+ .navbar-fixed-top .navbar-collapse,
+ .navbar-static-top .navbar-collapse,
+ .navbar-fixed-bottom .navbar-collapse {
+ padding-right: 0;
+ padding-left: 0;
+ }
+}
+.navbar-fixed-top .navbar-collapse,
+.navbar-fixed-bottom .navbar-collapse {
+ max-height: 340px;
+}
+@media (max-device-width: 480px) and (orientation: landscape) {
+ .navbar-fixed-top .navbar-collapse,
+ .navbar-fixed-bottom .navbar-collapse {
+ max-height: 200px;
+ }
+}
+.container > .navbar-header,
+.container-fluid > .navbar-header,
+.container > .navbar-collapse,
+.container-fluid > .navbar-collapse {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+@media (min-width: 768px) {
+ .container > .navbar-header,
+ .container-fluid > .navbar-header,
+ .container > .navbar-collapse,
+ .container-fluid > .navbar-collapse {
+ margin-right: 0;
+ margin-left: 0;
+ }
+}
+.navbar-static-top {
+ z-index: 1000;
+ border-width: 0 0 1px;
+}
+@media (min-width: 768px) {
+ .navbar-static-top {
+ border-radius: 0;
+ }
+}
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+ position: fixed;
+ right: 0;
+ left: 0;
+ z-index: 1030;
+}
+@media (min-width: 768px) {
+ .navbar-fixed-top,
+ .navbar-fixed-bottom {
+ border-radius: 0;
+ }
+}
+.navbar-fixed-top {
+ top: 0;
+ border-width: 0 0 1px;
+}
+.navbar-fixed-bottom {
+ bottom: 0;
+ margin-bottom: 0;
+ border-width: 1px 0 0;
+}
+.navbar-brand {
+ float: left;
+ height: 50px;
+ padding: 15px 15px;
+ font-size: 18px;
+ line-height: 20px;
+}
+.navbar-brand:hover,
+.navbar-brand:focus {
+ text-decoration: none;
+}
+.navbar-brand > img {
+ display: block;
+}
+@media (min-width: 768px) {
+ .navbar > .container .navbar-brand,
+ .navbar > .container-fluid .navbar-brand {
+ margin-left: -15px;
+ }
+}
+.navbar-toggle {
+ position: relative;
+ float: right;
+ padding: 9px 10px;
+ margin-top: 8px;
+ margin-right: 15px;
+ margin-bottom: 8px;
+ background-color: transparent;
+ background-image: none;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+.navbar-toggle:focus {
+ outline: 0;
+}
+.navbar-toggle .icon-bar {
+ display: block;
+ width: 22px;
+ height: 2px;
+ border-radius: 1px;
+}
+.navbar-toggle .icon-bar + .icon-bar {
+ margin-top: 4px;
+}
+@media (min-width: 768px) {
+ .navbar-toggle {
+ display: none;
+ }
+}
+.navbar-nav {
+ margin: 7.5px -15px;
+}
+.navbar-nav > li > a {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ line-height: 20px;
+}
+@media (max-width: 767px) {
+ .navbar-nav .open .dropdown-menu {
+ position: static;
+ float: none;
+ width: auto;
+ margin-top: 0;
+ background-color: transparent;
+ border: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+ .navbar-nav .open .dropdown-menu > li > a,
+ .navbar-nav .open .dropdown-menu .dropdown-header {
+ padding: 5px 15px 5px 25px;
+ }
+ .navbar-nav .open .dropdown-menu > li > a {
+ line-height: 20px;
+ }
+ .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-nav .open .dropdown-menu > li > a:focus {
+ background-image: none;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-nav {
+ float: left;
+ margin: 0;
+ }
+ .navbar-nav > li {
+ float: left;
+ }
+ .navbar-nav > li > a {
+ padding-top: 15px;
+ padding-bottom: 15px;
+ }
+}
+.navbar-form {
+ padding: 10px 15px;
+ margin-top: 8px;
+ margin-right: -15px;
+ margin-bottom: 8px;
+ margin-left: -15px;
+ border-top: 1px solid transparent;
+ border-bottom: 1px solid transparent;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+}
+@media (min-width: 768px) {
+ .navbar-form .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .navbar-form .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle;
+ }
+ .navbar-form .form-control-static {
+ display: inline-block;
+ }
+ .navbar-form .input-group {
+ display: inline-table;
+ vertical-align: middle;
+ }
+ .navbar-form .input-group .input-group-addon,
+ .navbar-form .input-group .input-group-btn,
+ .navbar-form .input-group .form-control {
+ width: auto;
+ }
+ .navbar-form .input-group > .form-control {
+ width: 100%;
+ }
+ .navbar-form .control-label {
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .navbar-form .radio,
+ .navbar-form .checkbox {
+ display: inline-block;
+ margin-top: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .navbar-form .radio label,
+ .navbar-form .checkbox label {
+ padding-left: 0;
+ }
+ .navbar-form .radio input[type="radio"],
+ .navbar-form .checkbox input[type="checkbox"] {
+ position: relative;
+ margin-left: 0;
+ }
+ .navbar-form .has-feedback .form-control-feedback {
+ top: 0;
+ }
+}
+@media (max-width: 767px) {
+ .navbar-form .form-group {
+ margin-bottom: 5px;
+ }
+ .navbar-form .form-group:last-child {
+ margin-bottom: 0;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-form {
+ width: auto;
+ padding-top: 0;
+ padding-bottom: 0;
+ margin-right: 0;
+ margin-left: 0;
+ border: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+}
+.navbar-nav > li > .dropdown-menu {
+ margin-top: 0;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.navbar-btn {
+ margin-top: 8px;
+ margin-bottom: 8px;
+}
+.navbar-btn.btn-sm {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+.navbar-btn.btn-xs {
+ margin-top: 14px;
+ margin-bottom: 14px;
+}
+.navbar-text {
+ margin-top: 15px;
+ margin-bottom: 15px;
+}
+@media (min-width: 768px) {
+ .navbar-text {
+ float: left;
+ margin-right: 15px;
+ margin-left: 15px;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-left {
+ float: left !important;
+ }
+ .navbar-right {
+ float: right !important;
+ margin-right: -15px;
+ }
+ .navbar-right ~ .navbar-right {
+ margin-right: 0;
+ }
+}
+.navbar-default {
+ background-color: #f8f8f8;
+ border-color: #e7e7e7;
+}
+.navbar-default .navbar-brand {
+ color: #777;
+}
+.navbar-default .navbar-brand:hover,
+.navbar-default .navbar-brand:focus {
+ color: #5e5e5e;
+ background-color: transparent;
+}
+.navbar-default .navbar-text {
+ color: #777;
+}
+.navbar-default .navbar-nav > li > a {
+ color: #777;
+}
+.navbar-default .navbar-nav > li > a:hover,
+.navbar-default .navbar-nav > li > a:focus {
+ color: #333;
+ background-color: transparent;
+}
+.navbar-default .navbar-nav > .active > a,
+.navbar-default .navbar-nav > .active > a:hover,
+.navbar-default .navbar-nav > .active > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+}
+.navbar-default .navbar-nav > .disabled > a,
+.navbar-default .navbar-nav > .disabled > a:hover,
+.navbar-default .navbar-nav > .disabled > a:focus {
+ color: #ccc;
+ background-color: transparent;
+}
+.navbar-default .navbar-toggle {
+ border-color: #ddd;
+}
+.navbar-default .navbar-toggle:hover,
+.navbar-default .navbar-toggle:focus {
+ background-color: #ddd;
+}
+.navbar-default .navbar-toggle .icon-bar {
+ background-color: #888;
+}
+.navbar-default .navbar-collapse,
+.navbar-default .navbar-form {
+ border-color: #e7e7e7;
+}
+.navbar-default .navbar-nav > .open > a,
+.navbar-default .navbar-nav > .open > a:hover,
+.navbar-default .navbar-nav > .open > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+}
+@media (max-width: 767px) {
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a {
+ color: #777;
+ }
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
+ color: #333;
+ background-color: transparent;
+ }
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+ }
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ color: #ccc;
+ background-color: transparent;
+ }
+}
+.navbar-default .navbar-link {
+ color: #777;
+}
+.navbar-default .navbar-link:hover {
+ color: #333;
+}
+.navbar-default .btn-link {
+ color: #777;
+}
+.navbar-default .btn-link:hover,
+.navbar-default .btn-link:focus {
+ color: #333;
+}
+.navbar-default .btn-link[disabled]:hover,
+fieldset[disabled] .navbar-default .btn-link:hover,
+.navbar-default .btn-link[disabled]:focus,
+fieldset[disabled] .navbar-default .btn-link:focus {
+ color: #ccc;
+}
+.navbar-inverse {
+ background-color: #222;
+ border-color: #080808;
+}
+.navbar-inverse .navbar-brand {
+ color: #9d9d9d;
+}
+.navbar-inverse .navbar-brand:hover,
+.navbar-inverse .navbar-brand:focus {
+ color: #fff;
+ background-color: transparent;
+}
+.navbar-inverse .navbar-text {
+ color: #9d9d9d;
+}
+.navbar-inverse .navbar-nav > li > a {
+ color: #9d9d9d;
+}
+.navbar-inverse .navbar-nav > li > a:hover,
+.navbar-inverse .navbar-nav > li > a:focus {
+ color: #fff;
+ background-color: transparent;
+}
+.navbar-inverse .navbar-nav > .active > a,
+.navbar-inverse .navbar-nav > .active > a:hover,
+.navbar-inverse .navbar-nav > .active > a:focus {
+ color: #fff;
+ background-color: #080808;
+}
+.navbar-inverse .navbar-nav > .disabled > a,
+.navbar-inverse .navbar-nav > .disabled > a:hover,
+.navbar-inverse .navbar-nav > .disabled > a:focus {
+ color: #444;
+ background-color: transparent;
+}
+.navbar-inverse .navbar-toggle {
+ border-color: #333;
+}
+.navbar-inverse .navbar-toggle:hover,
+.navbar-inverse .navbar-toggle:focus {
+ background-color: #333;
+}
+.navbar-inverse .navbar-toggle .icon-bar {
+ background-color: #fff;
+}
+.navbar-inverse .navbar-collapse,
+.navbar-inverse .navbar-form {
+ border-color: #101010;
+}
+.navbar-inverse .navbar-nav > .open > a,
+.navbar-inverse .navbar-nav > .open > a:hover,
+.navbar-inverse .navbar-nav > .open > a:focus {
+ color: #fff;
+ background-color: #080808;
+}
+@media (max-width: 767px) {
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
+ border-color: #080808;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
+ background-color: #080808;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
+ color: #9d9d9d;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
+ color: #fff;
+ background-color: transparent;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #fff;
+ background-color: #080808;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ color: #444;
+ background-color: transparent;
+ }
+}
+.navbar-inverse .navbar-link {
+ color: #9d9d9d;
+}
+.navbar-inverse .navbar-link:hover {
+ color: #fff;
+}
+.navbar-inverse .btn-link {
+ color: #9d9d9d;
+}
+.navbar-inverse .btn-link:hover,
+.navbar-inverse .btn-link:focus {
+ color: #fff;
+}
+.navbar-inverse .btn-link[disabled]:hover,
+fieldset[disabled] .navbar-inverse .btn-link:hover,
+.navbar-inverse .btn-link[disabled]:focus,
+fieldset[disabled] .navbar-inverse .btn-link:focus {
+ color: #444;
+}
+.breadcrumb {
+ padding: 8px 15px;
+ margin-bottom: 20px;
+ list-style: none;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+}
+.breadcrumb > li {
+ display: inline-block;
+}
+.breadcrumb > li + li:before {
+ padding: 0 5px;
+ color: #ccc;
+ content: "/\00a0";
+}
+.breadcrumb > .active {
+ color: #777;
+}
+.pagination {
+ display: inline-block;
+ padding-left: 0;
+ margin: 20px 0;
+ border-radius: 4px;
+}
+.pagination > li {
+ display: inline;
+}
+.pagination > li > a,
+.pagination > li > span {
+ position: relative;
+ float: left;
+ padding: 6px 12px;
+ margin-left: -1px;
+ line-height: 1.42857143;
+ color: #337ab7;
+ text-decoration: none;
+ background-color: #fff;
+ border: 1px solid #ddd;
+}
+.pagination > li:first-child > a,
+.pagination > li:first-child > span {
+ margin-left: 0;
+ border-top-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+.pagination > li:last-child > a,
+.pagination > li:last-child > span {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
+.pagination > li > a:hover,
+.pagination > li > span:hover,
+.pagination > li > a:focus,
+.pagination > li > span:focus {
+ color: #23527c;
+ background-color: #eee;
+ border-color: #ddd;
+}
+.pagination > .active > a,
+.pagination > .active > span,
+.pagination > .active > a:hover,
+.pagination > .active > span:hover,
+.pagination > .active > a:focus,
+.pagination > .active > span:focus {
+ z-index: 2;
+ color: #fff;
+ cursor: default;
+ background-color: #337ab7;
+ border-color: #337ab7;
+}
+.pagination > .disabled > span,
+.pagination > .disabled > span:hover,
+.pagination > .disabled > span:focus,
+.pagination > .disabled > a,
+.pagination > .disabled > a:hover,
+.pagination > .disabled > a:focus {
+ color: #777;
+ cursor: not-allowed;
+ background-color: #fff;
+ border-color: #ddd;
+}
+.pagination-lg > li > a,
+.pagination-lg > li > span {
+ padding: 10px 16px;
+ font-size: 18px;
+}
+.pagination-lg > li:first-child > a,
+.pagination-lg > li:first-child > span {
+ border-top-left-radius: 6px;
+ border-bottom-left-radius: 6px;
+}
+.pagination-lg > li:last-child > a,
+.pagination-lg > li:last-child > span {
+ border-top-right-radius: 6px;
+ border-bottom-right-radius: 6px;
+}
+.pagination-sm > li > a,
+.pagination-sm > li > span {
+ padding: 5px 10px;
+ font-size: 12px;
+}
+.pagination-sm > li:first-child > a,
+.pagination-sm > li:first-child > span {
+ border-top-left-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.pagination-sm > li:last-child > a,
+.pagination-sm > li:last-child > span {
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+}
+.pager {
+ padding-left: 0;
+ margin: 20px 0;
+ text-align: center;
+ list-style: none;
+}
+.pager li {
+ display: inline;
+}
+.pager li > a,
+.pager li > span {
+ display: inline-block;
+ padding: 5px 14px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 15px;
+}
+.pager li > a:hover,
+.pager li > a:focus {
+ text-decoration: none;
+ background-color: #eee;
+}
+.pager .next > a,
+.pager .next > span {
+ float: right;
+}
+.pager .previous > a,
+.pager .previous > span {
+ float: left;
+}
+.pager .disabled > a,
+.pager .disabled > a:hover,
+.pager .disabled > a:focus,
+.pager .disabled > span {
+ color: #777;
+ cursor: not-allowed;
+ background-color: #fff;
+}
+.label {
+ display: inline;
+ padding: .2em .6em .3em;
+ font-size: 75%;
+ font-weight: bold;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ border-radius: .25em;
+}
+a.label:hover,
+a.label:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer;
+}
+.label:empty {
+ display: none;
+}
+.btn .label {
+ position: relative;
+ top: -1px;
+}
+.label-default {
+ background-color: #777;
+}
+.label-default[href]:hover,
+.label-default[href]:focus {
+ background-color: #5e5e5e;
+}
+.label-primary {
+ background-color: #337ab7;
+}
+.label-primary[href]:hover,
+.label-primary[href]:focus {
+ background-color: #286090;
+}
+.label-success {
+ background-color: #5cb85c;
+}
+.label-success[href]:hover,
+.label-success[href]:focus {
+ background-color: #449d44;
+}
+.label-info {
+ background-color: #5bc0de;
+}
+.label-info[href]:hover,
+.label-info[href]:focus {
+ background-color: #31b0d5;
+}
+.label-warning {
+ background-color: #f0ad4e;
+}
+.label-warning[href]:hover,
+.label-warning[href]:focus {
+ background-color: #ec971f;
+}
+.label-danger {
+ background-color: #d9534f;
+}
+.label-danger[href]:hover,
+.label-danger[href]:focus {
+ background-color: #c9302c;
+}
+.badge {
+ display: inline-block;
+ min-width: 10px;
+ padding: 3px 7px;
+ font-size: 12px;
+ font-weight: bold;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ background-color: #777;
+ border-radius: 10px;
+}
+.badge:empty {
+ display: none;
+}
+.btn .badge {
+ position: relative;
+ top: -1px;
+}
+.btn-xs .badge {
+ top: 0;
+ padding: 1px 5px;
+}
+a.badge:hover,
+a.badge:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer;
+}
+.list-group-item.active > .badge,
+.nav-pills > .active > a > .badge {
+ color: #337ab7;
+ background-color: #fff;
+}
+.list-group-item > .badge {
+ float: right;
+}
+.list-group-item > .badge + .badge {
+ margin-right: 5px;
+}
+.nav-pills > li > a > .badge {
+ margin-left: 3px;
+}
+.jumbotron {
+ padding: 30px 15px;
+ margin-bottom: 30px;
+ color: inherit;
+ background-color: #eee;
+}
+.jumbotron h1,
+.jumbotron .h1 {
+ color: inherit;
+}
+.jumbotron p {
+ margin-bottom: 15px;
+ font-size: 21px;
+ font-weight: 200;
+}
+.jumbotron > hr {
+ border-top-color: #d5d5d5;
+}
+.container .jumbotron,
+.container-fluid .jumbotron {
+ border-radius: 6px;
+}
+.jumbotron .container {
+ max-width: 100%;
+}
+@media screen and (min-width: 768px) {
+ .jumbotron {
+ padding: 48px 0;
+ }
+ .container .jumbotron,
+ .container-fluid .jumbotron {
+ padding-right: 60px;
+ padding-left: 60px;
+ }
+ .jumbotron h1,
+ .jumbotron .h1 {
+ font-size: 63px;
+ }
+}
+.thumbnail {
+ display: block;
+ padding: 4px;
+ margin-bottom: 20px;
+ line-height: 1.42857143;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: border .2s ease-in-out;
+ -o-transition: border .2s ease-in-out;
+ transition: border .2s ease-in-out;
+}
+.thumbnail > img,
+.thumbnail a > img {
+ margin-right: auto;
+ margin-left: auto;
+}
+a.thumbnail:hover,
+a.thumbnail:focus,
+a.thumbnail.active {
+ border-color: #337ab7;
+}
+.thumbnail .caption {
+ padding: 9px;
+ color: #333;
+}
+.alert {
+ padding: 15px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+.alert h4 {
+ margin-top: 0;
+ color: inherit;
+}
+.alert .alert-link {
+ font-weight: bold;
+}
+.alert > p,
+.alert > ul {
+ margin-bottom: 0;
+}
+.alert > p + p {
+ margin-top: 5px;
+}
+.alert-dismissable,
+.alert-dismissible {
+ padding-right: 35px;
+}
+.alert-dismissable .close,
+.alert-dismissible .close {
+ position: relative;
+ top: -2px;
+ right: -21px;
+ color: inherit;
+}
+.alert-success {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+.alert-success hr {
+ border-top-color: #c9e2b3;
+}
+.alert-success .alert-link {
+ color: #2b542c;
+}
+.alert-info {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+.alert-info hr {
+ border-top-color: #a6e1ec;
+}
+.alert-info .alert-link {
+ color: #245269;
+}
+.alert-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #faebcc;
+}
+.alert-warning hr {
+ border-top-color: #f7e1b5;
+}
+.alert-warning .alert-link {
+ color: #66512c;
+}
+.alert-danger {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #ebccd1;
+}
+.alert-danger hr {
+ border-top-color: #e4b9c0;
+}
+.alert-danger .alert-link {
+ color: #843534;
+}
+@-webkit-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+@-o-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+@keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+.progress {
+ height: 20px;
+ margin-bottom: 20px;
+ overflow: hidden;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
+}
+.progress-bar {
+ float: left;
+ width: 0;
+ height: 100%;
+ font-size: 12px;
+ line-height: 20px;
+ color: #fff;
+ text-align: center;
+ background-color: #337ab7;
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+ -webkit-transition: width .6s ease;
+ -o-transition: width .6s ease;
+ transition: width .6s ease;
+}
+.progress-striped .progress-bar,
+.progress-bar-striped {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ -webkit-background-size: 40px 40px;
+ background-size: 40px 40px;
+}
+.progress.active .progress-bar,
+.progress-bar.active {
+ -webkit-animation: progress-bar-stripes 2s linear infinite;
+ -o-animation: progress-bar-stripes 2s linear infinite;
+ animation: progress-bar-stripes 2s linear infinite;
+}
+.progress-bar-success {
+ background-color: #5cb85c;
+}
+.progress-striped .progress-bar-success {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.progress-bar-info {
+ background-color: #5bc0de;
+}
+.progress-striped .progress-bar-info {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.progress-bar-warning {
+ background-color: #f0ad4e;
+}
+.progress-striped .progress-bar-warning {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.progress-bar-danger {
+ background-color: #d9534f;
+}
+.progress-striped .progress-bar-danger {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.media {
+ margin-top: 15px;
+}
+.media:first-child {
+ margin-top: 0;
+}
+.media-right,
+.media > .pull-right {
+ padding-left: 10px;
+}
+.media-left,
+.media > .pull-left {
+ padding-right: 10px;
+}
+.media-left,
+.media-right,
+.media-body {
+ display: table-cell;
+ vertical-align: top;
+}
+.media-middle {
+ vertical-align: middle;
+}
+.media-bottom {
+ vertical-align: bottom;
+}
+.media-heading {
+ margin-top: 0;
+ margin-bottom: 5px;
+}
+.media-list {
+ padding-left: 0;
+ list-style: none;
+}
+.list-group {
+ padding-left: 0;
+ margin-bottom: 20px;
+}
+.list-group-item {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+ margin-bottom: -1px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+}
+.list-group-item:first-child {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+}
+.list-group-item:last-child {
+ margin-bottom: 0;
+ border-bottom-right-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+a.list-group-item {
+ color: #555;
+}
+a.list-group-item .list-group-item-heading {
+ color: #333;
+}
+a.list-group-item:hover,
+a.list-group-item:focus {
+ color: #555;
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+.list-group-item.disabled,
+.list-group-item.disabled:hover,
+.list-group-item.disabled:focus {
+ color: #777;
+ cursor: not-allowed;
+ background-color: #eee;
+}
+.list-group-item.disabled .list-group-item-heading,
+.list-group-item.disabled:hover .list-group-item-heading,
+.list-group-item.disabled:focus .list-group-item-heading {
+ color: inherit;
+}
+.list-group-item.disabled .list-group-item-text,
+.list-group-item.disabled:hover .list-group-item-text,
+.list-group-item.disabled:focus .list-group-item-text {
+ color: #777;
+}
+.list-group-item.active,
+.list-group-item.active:hover,
+.list-group-item.active:focus {
+ z-index: 2;
+ color: #fff;
+ background-color: #337ab7;
+ border-color: #337ab7;
+}
+.list-group-item.active .list-group-item-heading,
+.list-group-item.active:hover .list-group-item-heading,
+.list-group-item.active:focus .list-group-item-heading,
+.list-group-item.active .list-group-item-heading > small,
+.list-group-item.active:hover .list-group-item-heading > small,
+.list-group-item.active:focus .list-group-item-heading > small,
+.list-group-item.active .list-group-item-heading > .small,
+.list-group-item.active:hover .list-group-item-heading > .small,
+.list-group-item.active:focus .list-group-item-heading > .small {
+ color: inherit;
+}
+.list-group-item.active .list-group-item-text,
+.list-group-item.active:hover .list-group-item-text,
+.list-group-item.active:focus .list-group-item-text {
+ color: #c7ddef;
+}
+.list-group-item-success {
+ color: #3c763d;
+ background-color: #dff0d8;
+}
+a.list-group-item-success {
+ color: #3c763d;
+}
+a.list-group-item-success .list-group-item-heading {
+ color: inherit;
+}
+a.list-group-item-success:hover,
+a.list-group-item-success:focus {
+ color: #3c763d;
+ background-color: #d0e9c6;
+}
+a.list-group-item-success.active,
+a.list-group-item-success.active:hover,
+a.list-group-item-success.active:focus {
+ color: #fff;
+ background-color: #3c763d;
+ border-color: #3c763d;
+}
+.list-group-item-info {
+ color: #31708f;
+ background-color: #d9edf7;
+}
+a.list-group-item-info {
+ color: #31708f;
+}
+a.list-group-item-info .list-group-item-heading {
+ color: inherit;
+}
+a.list-group-item-info:hover,
+a.list-group-item-info:focus {
+ color: #31708f;
+ background-color: #c4e3f3;
+}
+a.list-group-item-info.active,
+a.list-group-item-info.active:hover,
+a.list-group-item-info.active:focus {
+ color: #fff;
+ background-color: #31708f;
+ border-color: #31708f;
+}
+.list-group-item-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+}
+a.list-group-item-warning {
+ color: #8a6d3b;
+}
+a.list-group-item-warning .list-group-item-heading {
+ color: inherit;
+}
+a.list-group-item-warning:hover,
+a.list-group-item-warning:focus {
+ color: #8a6d3b;
+ background-color: #faf2cc;
+}
+a.list-group-item-warning.active,
+a.list-group-item-warning.active:hover,
+a.list-group-item-warning.active:focus {
+ color: #fff;
+ background-color: #8a6d3b;
+ border-color: #8a6d3b;
+}
+.list-group-item-danger {
+ color: #a94442;
+ background-color: #f2dede;
+}
+a.list-group-item-danger {
+ color: #a94442;
+}
+a.list-group-item-danger .list-group-item-heading {
+ color: inherit;
+}
+a.list-group-item-danger:hover,
+a.list-group-item-danger:focus {
+ color: #a94442;
+ background-color: #ebcccc;
+}
+a.list-group-item-danger.active,
+a.list-group-item-danger.active:hover,
+a.list-group-item-danger.active:focus {
+ color: #fff;
+ background-color: #a94442;
+ border-color: #a94442;
+}
+.list-group-item-heading {
+ margin-top: 0;
+ margin-bottom: 5px;
+}
+.list-group-item-text {
+ margin-bottom: 0;
+ line-height: 1.3;
+}
+.panel {
+ margin-bottom: 20px;
+ background-color: #fff;
+ border: 1px solid transparent;
+ border-radius: 4px;
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
+}
+.panel-body {
+ padding: 15px;
+}
+.panel-heading {
+ padding: 10px 15px;
+ border-bottom: 1px solid transparent;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.panel-heading > .dropdown .dropdown-toggle {
+ color: inherit;
+}
+.panel-title {
+ margin-top: 0;
+ margin-bottom: 0;
+ font-size: 16px;
+ color: inherit;
+}
+.panel-title > a {
+ color: inherit;
+}
+.panel-footer {
+ padding: 10px 15px;
+ background-color: #f5f5f5;
+ border-top: 1px solid #ddd;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.panel > .list-group,
+.panel > .panel-collapse > .list-group {
+ margin-bottom: 0;
+}
+.panel > .list-group .list-group-item,
+.panel > .panel-collapse > .list-group .list-group-item {
+ border-width: 1px 0;
+ border-radius: 0;
+}
+.panel > .list-group:first-child .list-group-item:first-child,
+.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
+ border-top: 0;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.panel > .list-group:last-child .list-group-item:last-child,
+.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
+ border-bottom: 0;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.panel-heading + .list-group .list-group-item:first-child {
+ border-top-width: 0;
+}
+.list-group + .panel-footer {
+ border-top-width: 0;
+}
+.panel > .table,
+.panel > .table-responsive > .table,
+.panel > .panel-collapse > .table {
+ margin-bottom: 0;
+}
+.panel > .table caption,
+.panel > .table-responsive > .table caption,
+.panel > .panel-collapse > .table caption {
+ padding-right: 15px;
+ padding-left: 15px;
+}
+.panel > .table:first-child,
+.panel > .table-responsive:first-child > .table:first-child {
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
+ border-top-left-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
+ border-top-right-radius: 3px;
+}
+.panel > .table:last-child,
+.panel > .table-responsive:last-child > .table:last-child {
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
+ border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
+ border-bottom-right-radius: 3px;
+}
+.panel > .panel-body + .table,
+.panel > .panel-body + .table-responsive,
+.panel > .table + .panel-body,
+.panel > .table-responsive + .panel-body {
+ border-top: 1px solid #ddd;
+}
+.panel > .table > tbody:first-child > tr:first-child th,
+.panel > .table > tbody:first-child > tr:first-child td {
+ border-top: 0;
+}
+.panel > .table-bordered,
+.panel > .table-responsive > .table-bordered {
+ border: 0;
+}
+.panel > .table-bordered > thead > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
+.panel > .table-bordered > tbody > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
+.panel > .table-bordered > tfoot > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+.panel > .table-bordered > thead > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
+.panel > .table-bordered > tbody > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
+.panel > .table-bordered > tfoot > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+ border-left: 0;
+}
+.panel > .table-bordered > thead > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
+.panel > .table-bordered > tbody > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
+.panel > .table-bordered > tfoot > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+.panel > .table-bordered > thead > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
+.panel > .table-bordered > tbody > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
+.panel > .table-bordered > tfoot > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+ border-right: 0;
+}
+.panel > .table-bordered > thead > tr:first-child > td,
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
+.panel > .table-bordered > tbody > tr:first-child > td,
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
+.panel > .table-bordered > thead > tr:first-child > th,
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
+.panel > .table-bordered > tbody > tr:first-child > th,
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
+ border-bottom: 0;
+}
+.panel > .table-bordered > tbody > tr:last-child > td,
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
+.panel > .table-bordered > tfoot > tr:last-child > td,
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
+.panel > .table-bordered > tbody > tr:last-child > th,
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
+.panel > .table-bordered > tfoot > tr:last-child > th,
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
+ border-bottom: 0;
+}
+.panel > .table-responsive {
+ margin-bottom: 0;
+ border: 0;
+}
+.panel-group {
+ margin-bottom: 20px;
+}
+.panel-group .panel {
+ margin-bottom: 0;
+ border-radius: 4px;
+}
+.panel-group .panel + .panel {
+ margin-top: 5px;
+}
+.panel-group .panel-heading {
+ border-bottom: 0;
+}
+.panel-group .panel-heading + .panel-collapse > .panel-body,
+.panel-group .panel-heading + .panel-collapse > .list-group {
+ border-top: 1px solid #ddd;
+}
+.panel-group .panel-footer {
+ border-top: 0;
+}
+.panel-group .panel-footer + .panel-collapse .panel-body {
+ border-bottom: 1px solid #ddd;
+}
+.panel-default {
+ border-color: #ddd;
+}
+.panel-default > .panel-heading {
+ color: #333;
+ background-color: #f5f5f5;
+ border-color: #ddd;
+}
+.panel-default > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #ddd;
+}
+.panel-default > .panel-heading .badge {
+ color: #f5f5f5;
+ background-color: #333;
+}
+.panel-default > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #ddd;
+}
+.panel-primary {
+ border-color: #337ab7;
+}
+.panel-primary > .panel-heading {
+ color: #fff;
+ background-color: #337ab7;
+ border-color: #337ab7;
+}
+.panel-primary > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #337ab7;
+}
+.panel-primary > .panel-heading .badge {
+ color: #337ab7;
+ background-color: #fff;
+}
+.panel-primary > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #337ab7;
+}
+.panel-success {
+ border-color: #d6e9c6;
+}
+.panel-success > .panel-heading {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+.panel-success > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #d6e9c6;
+}
+.panel-success > .panel-heading .badge {
+ color: #dff0d8;
+ background-color: #3c763d;
+}
+.panel-success > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #d6e9c6;
+}
+.panel-info {
+ border-color: #bce8f1;
+}
+.panel-info > .panel-heading {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+.panel-info > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #bce8f1;
+}
+.panel-info > .panel-heading .badge {
+ color: #d9edf7;
+ background-color: #31708f;
+}
+.panel-info > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #bce8f1;
+}
+.panel-warning {
+ border-color: #faebcc;
+}
+.panel-warning > .panel-heading {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #faebcc;
+}
+.panel-warning > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #faebcc;
+}
+.panel-warning > .panel-heading .badge {
+ color: #fcf8e3;
+ background-color: #8a6d3b;
+}
+.panel-warning > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #faebcc;
+}
+.panel-danger {
+ border-color: #ebccd1;
+}
+.panel-danger > .panel-heading {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #ebccd1;
+}
+.panel-danger > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #ebccd1;
+}
+.panel-danger > .panel-heading .badge {
+ color: #f2dede;
+ background-color: #a94442;
+}
+.panel-danger > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #ebccd1;
+}
+.embed-responsive {
+ position: relative;
+ display: block;
+ height: 0;
+ padding: 0;
+ overflow: hidden;
+}
+.embed-responsive .embed-responsive-item,
+.embed-responsive iframe,
+.embed-responsive embed,
+.embed-responsive object,
+.embed-responsive video {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ border: 0;
+}
+.embed-responsive.embed-responsive-16by9 {
+ padding-bottom: 56.25%;
+}
+.embed-responsive.embed-responsive-4by3 {
+ padding-bottom: 75%;
+}
+.well {
+ min-height: 20px;
+ padding: 19px;
+ margin-bottom: 20px;
+ background-color: #f5f5f5;
+ border: 1px solid #e3e3e3;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
+}
+.well blockquote {
+ border-color: #ddd;
+ border-color: rgba(0, 0, 0, .15);
+}
+.well-lg {
+ padding: 24px;
+ border-radius: 6px;
+}
+.well-sm {
+ padding: 9px;
+ border-radius: 3px;
+}
+.close {
+ float: right;
+ font-size: 21px;
+ font-weight: bold;
+ line-height: 1;
+ color: #000;
+ text-shadow: 0 1px 0 #fff;
+ filter: alpha(opacity=20);
+ opacity: .2;
+}
+.close:hover,
+.close:focus {
+ color: #000;
+ text-decoration: none;
+ cursor: pointer;
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+button.close {
+ -webkit-appearance: none;
+ padding: 0;
+ cursor: pointer;
+ background: transparent;
+ border: 0;
+}
+.modal-open {
+ overflow: hidden;
+}
+.modal {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1040;
+ display: none;
+ overflow: hidden;
+ -webkit-overflow-scrolling: touch;
+ outline: 0;
+}
+.modal.fade .modal-dialog {
+ -webkit-transition: -webkit-transform .3s ease-out;
+ -o-transition: -o-transform .3s ease-out;
+ transition: transform .3s ease-out;
+ -webkit-transform: translate(0, -25%);
+ -ms-transform: translate(0, -25%);
+ -o-transform: translate(0, -25%);
+ transform: translate(0, -25%);
+}
+.modal.in .modal-dialog {
+ -webkit-transform: translate(0, 0);
+ -ms-transform: translate(0, 0);
+ -o-transform: translate(0, 0);
+ transform: translate(0, 0);
+}
+.modal-open .modal {
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+.modal-dialog {
+ position: relative;
+ width: auto;
+ margin: 10px;
+}
+.modal-content {
+ position: relative;
+ background-color: #fff;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
+ border: 1px solid #999;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: 6px;
+ outline: 0;
+ -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+ box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+}
+.modal-backdrop {
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+ background-color: #000;
+}
+.modal-backdrop.fade {
+ filter: alpha(opacity=0);
+ opacity: 0;
+}
+.modal-backdrop.in {
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+.modal-header {
+ min-height: 16.42857143px;
+ padding: 15px;
+ border-bottom: 1px solid #e5e5e5;
+}
+.modal-header .close {
+ margin-top: -2px;
+}
+.modal-title {
+ margin: 0;
+ line-height: 1.42857143;
+}
+.modal-body {
+ position: relative;
+ padding: 15px;
+}
+.modal-footer {
+ padding: 15px;
+ text-align: right;
+ border-top: 1px solid #e5e5e5;
+}
+.modal-footer .btn + .btn {
+ margin-bottom: 0;
+ margin-left: 5px;
+}
+.modal-footer .btn-group .btn + .btn {
+ margin-left: -1px;
+}
+.modal-footer .btn-block + .btn-block {
+ margin-left: 0;
+}
+.modal-scrollbar-measure {
+ position: absolute;
+ top: -9999px;
+ width: 50px;
+ height: 50px;
+ overflow: scroll;
+}
+@media (min-width: 768px) {
+ .modal-dialog {
+ width: 600px;
+ margin: 30px auto;
+ }
+ .modal-content {
+ -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
+ box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
+ }
+ .modal-sm {
+ width: 300px;
+ }
+}
+@media (min-width: 992px) {
+ .modal-lg {
+ width: 900px;
+ }
+}
+.tooltip {
+ position: absolute;
+ z-index: 1070;
+ display: block;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 12px;
+ font-weight: normal;
+ line-height: 1.4;
+ visibility: visible;
+ filter: alpha(opacity=0);
+ opacity: 0;
+}
+.tooltip.in {
+ filter: alpha(opacity=90);
+ opacity: .9;
+}
+.tooltip.top {
+ padding: 5px 0;
+ margin-top: -3px;
+}
+.tooltip.right {
+ padding: 0 5px;
+ margin-left: 3px;
+}
+.tooltip.bottom {
+ padding: 5px 0;
+ margin-top: 3px;
+}
+.tooltip.left {
+ padding: 0 5px;
+ margin-left: -3px;
+}
+.tooltip-inner {
+ max-width: 200px;
+ padding: 3px 8px;
+ color: #fff;
+ text-align: center;
+ text-decoration: none;
+ background-color: #000;
+ border-radius: 4px;
+}
+.tooltip-arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+.tooltip.top .tooltip-arrow {
+ bottom: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
+}
+.tooltip.top-left .tooltip-arrow {
+ right: 5px;
+ bottom: 0;
+ margin-bottom: -5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
+}
+.tooltip.top-right .tooltip-arrow {
+ bottom: 0;
+ left: 5px;
+ margin-bottom: -5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
+}
+.tooltip.right .tooltip-arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -5px;
+ border-width: 5px 5px 5px 0;
+ border-right-color: #000;
+}
+.tooltip.left .tooltip-arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -5px;
+ border-width: 5px 0 5px 5px;
+ border-left-color: #000;
+}
+.tooltip.bottom .tooltip-arrow {
+ top: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+.tooltip.bottom-left .tooltip-arrow {
+ top: 0;
+ right: 5px;
+ margin-top: -5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+.tooltip.bottom-right .tooltip-arrow {
+ top: 0;
+ left: 5px;
+ margin-top: -5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1060;
+ display: none;
+ max-width: 276px;
+ padding: 1px;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1.42857143;
+ text-align: left;
+ white-space: normal;
+ background-color: #fff;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: 6px;
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+ box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+}
+.popover.top {
+ margin-top: -10px;
+}
+.popover.right {
+ margin-left: 10px;
+}
+.popover.bottom {
+ margin-top: 10px;
+}
+.popover.left {
+ margin-left: -10px;
+}
+.popover-title {
+ padding: 8px 14px;
+ margin: 0;
+ font-size: 14px;
+ background-color: #f7f7f7;
+ border-bottom: 1px solid #ebebeb;
+ border-radius: 5px 5px 0 0;
+}
+.popover-content {
+ padding: 9px 14px;
+}
+.popover > .arrow,
+.popover > .arrow:after {
+ position: absolute;
+ display: block;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+.popover > .arrow {
+ border-width: 11px;
+}
+.popover > .arrow:after {
+ content: "";
+ border-width: 10px;
+}
+.popover.top > .arrow {
+ bottom: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-top-color: #999;
+ border-top-color: rgba(0, 0, 0, .25);
+ border-bottom-width: 0;
+}
+.popover.top > .arrow:after {
+ bottom: 1px;
+ margin-left: -10px;
+ content: " ";
+ border-top-color: #fff;
+ border-bottom-width: 0;
+}
+.popover.right > .arrow {
+ top: 50%;
+ left: -11px;
+ margin-top: -11px;
+ border-right-color: #999;
+ border-right-color: rgba(0, 0, 0, .25);
+ border-left-width: 0;
+}
+.popover.right > .arrow:after {
+ bottom: -10px;
+ left: 1px;
+ content: " ";
+ border-right-color: #fff;
+ border-left-width: 0;
+}
+.popover.bottom > .arrow {
+ top: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-top-width: 0;
+ border-bottom-color: #999;
+ border-bottom-color: rgba(0, 0, 0, .25);
+}
+.popover.bottom > .arrow:after {
+ top: 1px;
+ margin-left: -10px;
+ content: " ";
+ border-top-width: 0;
+ border-bottom-color: #fff;
+}
+.popover.left > .arrow {
+ top: 50%;
+ right: -11px;
+ margin-top: -11px;
+ border-right-width: 0;
+ border-left-color: #999;
+ border-left-color: rgba(0, 0, 0, .25);
+}
+.popover.left > .arrow:after {
+ right: 1px;
+ bottom: -10px;
+ content: " ";
+ border-right-width: 0;
+ border-left-color: #fff;
+}
+.carousel {
+ position: relative;
+}
+.carousel-inner {
+ position: relative;
+ width: 100%;
+ overflow: hidden;
+}
+.carousel-inner > .item {
+ position: relative;
+ display: none;
+ -webkit-transition: .6s ease-in-out left;
+ -o-transition: .6s ease-in-out left;
+ transition: .6s ease-in-out left;
+}
+.carousel-inner > .item > img,
+.carousel-inner > .item > a > img {
+ line-height: 1;
+}
+@media all and (transform-3d), (-webkit-transform-3d) {
+ .carousel-inner > .item {
+ -webkit-transition: -webkit-transform .6s ease-in-out;
+ -o-transition: -o-transform .6s ease-in-out;
+ transition: transform .6s ease-in-out;
+
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-perspective: 1000;
+ perspective: 1000;
+ }
+ .carousel-inner > .item.next,
+ .carousel-inner > .item.active.right {
+ left: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ }
+ .carousel-inner > .item.prev,
+ .carousel-inner > .item.active.left {
+ left: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ }
+ .carousel-inner > .item.next.left,
+ .carousel-inner > .item.prev.right,
+ .carousel-inner > .item.active {
+ left: 0;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+.carousel-inner > .active,
+.carousel-inner > .next,
+.carousel-inner > .prev {
+ display: block;
+}
+.carousel-inner > .active {
+ left: 0;
+}
+.carousel-inner > .next,
+.carousel-inner > .prev {
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.carousel-inner > .next {
+ left: 100%;
+}
+.carousel-inner > .prev {
+ left: -100%;
+}
+.carousel-inner > .next.left,
+.carousel-inner > .prev.right {
+ left: 0;
+}
+.carousel-inner > .active.left {
+ left: -100%;
+}
+.carousel-inner > .active.right {
+ left: 100%;
+}
+.carousel-control {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 15%;
+ font-size: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+.carousel-control.left {
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));
+ background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
+ background-repeat: repeat-x;
+}
+.carousel-control.right {
+ right: 0;
+ left: auto;
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));
+ background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
+ background-repeat: repeat-x;
+}
+.carousel-control:hover,
+.carousel-control:focus {
+ color: #fff;
+ text-decoration: none;
+ filter: alpha(opacity=90);
+ outline: 0;
+ opacity: .9;
+}
+.carousel-control .icon-prev,
+.carousel-control .icon-next,
+.carousel-control .glyphicon-chevron-left,
+.carousel-control .glyphicon-chevron-right {
+ position: absolute;
+ top: 50%;
+ z-index: 5;
+ display: inline-block;
+}
+.carousel-control .icon-prev,
+.carousel-control .glyphicon-chevron-left {
+ left: 50%;
+ margin-left: -10px;
+}
+.carousel-control .icon-next,
+.carousel-control .glyphicon-chevron-right {
+ right: 50%;
+ margin-right: -10px;
+}
+.carousel-control .icon-prev,
+.carousel-control .icon-next {
+ width: 20px;
+ height: 20px;
+ margin-top: -10px;
+ font-family: serif;
+}
+.carousel-control .icon-prev:before {
+ content: '\2039';
+}
+.carousel-control .icon-next:before {
+ content: '\203a';
+}
+.carousel-indicators {
+ position: absolute;
+ bottom: 10px;
+ left: 50%;
+ z-index: 15;
+ width: 60%;
+ padding-left: 0;
+ margin-left: -30%;
+ text-align: center;
+ list-style: none;
+}
+.carousel-indicators li {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ margin: 1px;
+ text-indent: -999px;
+ cursor: pointer;
+ background-color: #000 \9;
+ background-color: rgba(0, 0, 0, 0);
+ border: 1px solid #fff;
+ border-radius: 10px;
+}
+.carousel-indicators .active {
+ width: 12px;
+ height: 12px;
+ margin: 0;
+ background-color: #fff;
+}
+.carousel-caption {
+ position: absolute;
+ right: 15%;
+ bottom: 20px;
+ left: 15%;
+ z-index: 10;
+ padding-top: 20px;
+ padding-bottom: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
+}
+.carousel-caption .btn {
+ text-shadow: none;
+}
+@media screen and (min-width: 768px) {
+ .carousel-control .glyphicon-chevron-left,
+ .carousel-control .glyphicon-chevron-right,
+ .carousel-control .icon-prev,
+ .carousel-control .icon-next {
+ width: 30px;
+ height: 30px;
+ margin-top: -15px;
+ font-size: 30px;
+ }
+ .carousel-control .glyphicon-chevron-left,
+ .carousel-control .icon-prev {
+ margin-left: -15px;
+ }
+ .carousel-control .glyphicon-chevron-right,
+ .carousel-control .icon-next {
+ margin-right: -15px;
+ }
+ .carousel-caption {
+ right: 20%;
+ left: 20%;
+ padding-bottom: 30px;
+ }
+ .carousel-indicators {
+ bottom: 20px;
+ }
+}
+.clearfix:before,
+.clearfix:after,
+.dl-horizontal dd:before,
+.dl-horizontal dd:after,
+.container:before,
+.container:after,
+.container-fluid:before,
+.container-fluid:after,
+.row:before,
+.row:after,
+.form-horizontal .form-group:before,
+.form-horizontal .form-group:after,
+.btn-toolbar:before,
+.btn-toolbar:after,
+.btn-group-vertical > .btn-group:before,
+.btn-group-vertical > .btn-group:after,
+.nav:before,
+.nav:after,
+.navbar:before,
+.navbar:after,
+.navbar-header:before,
+.navbar-header:after,
+.navbar-collapse:before,
+.navbar-collapse:after,
+.pager:before,
+.pager:after,
+.panel-body:before,
+.panel-body:after,
+.modal-footer:before,
+.modal-footer:after {
+ display: table;
+ content: " ";
+}
+.clearfix:after,
+.dl-horizontal dd:after,
+.container:after,
+.container-fluid:after,
+.row:after,
+.form-horizontal .form-group:after,
+.btn-toolbar:after,
+.btn-group-vertical > .btn-group:after,
+.nav:after,
+.navbar:after,
+.navbar-header:after,
+.navbar-collapse:after,
+.pager:after,
+.panel-body:after,
+.modal-footer:after {
+ clear: both;
+}
+.center-block {
+ display: block;
+ margin-right: auto;
+ margin-left: auto;
+}
+.pull-right {
+ float: right !important;
+}
+.pull-left {
+ float: left !important;
+}
+.hide {
+ display: none !important;
+}
+.show {
+ display: block !important;
+}
+.invisible {
+ visibility: hidden;
+}
+.text-hide {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+}
+.hidden {
+ display: none !important;
+ visibility: hidden !important;
+}
+.affix {
+ position: fixed;
+}
+@-ms-viewport {
+ width: device-width;
+}
+.visible-xs,
+.visible-sm,
+.visible-md,
+.visible-lg {
+ display: none !important;
+}
+.visible-xs-block,
+.visible-xs-inline,
+.visible-xs-inline-block,
+.visible-sm-block,
+.visible-sm-inline,
+.visible-sm-inline-block,
+.visible-md-block,
+.visible-md-inline,
+.visible-md-inline-block,
+.visible-lg-block,
+.visible-lg-inline,
+.visible-lg-inline-block {
+ display: none !important;
+}
+@media (max-width: 767px) {
+ .visible-xs {
+ display: block !important;
+ }
+ table.visible-xs {
+ display: table;
+ }
+ tr.visible-xs {
+ display: table-row !important;
+ }
+ th.visible-xs,
+ td.visible-xs {
+ display: table-cell !important;
+ }
+}
+@media (max-width: 767px) {
+ .visible-xs-block {
+ display: block !important;
+ }
+}
+@media (max-width: 767px) {
+ .visible-xs-inline {
+ display: inline !important;
+ }
+}
+@media (max-width: 767px) {
+ .visible-xs-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm {
+ display: block !important;
+ }
+ table.visible-sm {
+ display: table;
+ }
+ tr.visible-sm {
+ display: table-row !important;
+ }
+ th.visible-sm,
+ td.visible-sm {
+ display: table-cell !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm-block {
+ display: block !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm-inline {
+ display: inline !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md {
+ display: block !important;
+ }
+ table.visible-md {
+ display: table;
+ }
+ tr.visible-md {
+ display: table-row !important;
+ }
+ th.visible-md,
+ td.visible-md {
+ display: table-cell !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md-block {
+ display: block !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md-inline {
+ display: inline !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg {
+ display: block !important;
+ }
+ table.visible-lg {
+ display: table;
+ }
+ tr.visible-lg {
+ display: table-row !important;
+ }
+ th.visible-lg,
+ td.visible-lg {
+ display: table-cell !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg-block {
+ display: block !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg-inline {
+ display: inline !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (max-width: 767px) {
+ .hidden-xs {
+ display: none !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .hidden-sm {
+ display: none !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .hidden-md {
+ display: none !important;
+ }
+}
+@media (min-width: 1200px) {
+ .hidden-lg {
+ display: none !important;
+ }
+}
+.visible-print {
+ display: none !important;
+}
+@media print {
+ .visible-print {
+ display: block !important;
+ }
+ table.visible-print {
+ display: table;
+ }
+ tr.visible-print {
+ display: table-row !important;
+ }
+ th.visible-print,
+ td.visible-print {
+ display: table-cell !important;
+ }
+}
+.visible-print-block {
+ display: none !important;
+}
+@media print {
+ .visible-print-block {
+ display: block !important;
+ }
+}
+.visible-print-inline {
+ display: none !important;
+}
+@media print {
+ .visible-print-inline {
+ display: inline !important;
+ }
+}
+.visible-print-inline-block {
+ display: none !important;
+}
+@media print {
+ .visible-print-inline-block {
+ display: inline-block !important;
+ }
+}
+@media print {
+ .hidden-print {
+ display: none !important;
+ }
+}
+/*# sourceMappingURL=bootstrap.css.map */
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/sample_catalog.xml b/vendor/github.com/tdewolff/minify/benchmarks/sample_catalog.xml
new file mode 100644
index 0000000..fceb4f4
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/sample_catalog.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="catalog.xsl" type="text/xsl"?>
+<!DOCTYPE catalog SYSTEM "catalog.dtd">
+<catalog>
+ <product description="Cardigan Sweater" product_image="cardigan.jpg">
+ <catalog_item gender="Men's">
+ <item_number>QWZ5671</item_number>
+ <price>39.95</price>
+ <size description="Medium">
+ <color_swatch image="red_cardigan.jpg">Red</color_swatch>
+ <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
+ </size>
+ <size description="Large">
+ <color_swatch image="red_cardigan.jpg">Red</color_swatch>
+ <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
+ </size>
+ </catalog_item>
+ <catalog_item gender="Women's">
+ <item_number>RRX9856</item_number>
+ <price>42.50</price>
+ <size description="Small">
+ <color_swatch image="red_cardigan.jpg">Red</color_swatch>
+ <color_swatch image="navy_cardigan.jpg">Navy</color_swatch>
+ <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
+ </size>
+ <size description="Medium">
+ <color_swatch image="red_cardigan.jpg">Red</color_swatch>
+ <color_swatch image="navy_cardigan.jpg">Navy</color_swatch>
+ <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
+ <color_swatch image="black_cardigan.jpg">Black</color_swatch>
+ </size>
+ <size description="Large">
+ <color_swatch image="navy_cardigan.jpg">Navy</color_swatch>
+ <color_swatch image="black_cardigan.jpg">Black</color_swatch>
+ </size>
+ <size description="Extra Large">
+ <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
+ <color_swatch image="black_cardigan.jpg">Black</color_swatch>
+ </size>
+ </catalog_item>
+ </product>
+</catalog>
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/sample_dot.js b/vendor/github.com/tdewolff/minify/benchmarks/sample_dot.js
new file mode 100644
index 0000000..32fd841
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/sample_dot.js
@@ -0,0 +1,140 @@
+// doT.js
+// 2011-2014, Laura Doktorova, https://github.com/olado/doT
+// Licensed under the MIT license.
+
+(function() {
+ "use strict";
+
+ var doT = {
+ version: "1.0.3",
+ templateSettings: {
+ evaluate: /\{\{([\s\S]+?(\}?)+)\}\}/g,
+ interpolate: /\{\{=([\s\S]+?)\}\}/g,
+ encode: /\{\{!([\s\S]+?)\}\}/g,
+ use: /\{\{#([\s\S]+?)\}\}/g,
+ useParams: /(^|[^\w$])def(?:\.|\[[\'\"])([\w$\.]+)(?:[\'\"]\])?\s*\:\s*([\w$\.]+|\"[^\"]+\"|\'[^\']+\'|\{[^\}]+\})/g,
+ define: /\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g,
+ defineParams:/^\s*([\w$]+):([\s\S]+)/,
+ conditional: /\{\{\?(\?)?\s*([\s\S]*?)\s*\}\}/g,
+ iterate: /\{\{~\s*(?:\}\}|([\s\S]+?)\s*\:\s*([\w$]+)\s*(?:\:\s*([\w$]+))?\s*\}\})/g,
+ varname: "it",
+ strip: true,
+ append: true,
+ selfcontained: false,
+ doNotSkipEncoded: false
+ },
+ template: undefined, //fn, compile template
+ compile: undefined //fn, for express
+ }, _globals;
+
+ doT.encodeHTMLSource = function(doNotSkipEncoded) {
+ var encodeHTMLRules = { "&": "&#38;", "<": "&#60;", ">": "&#62;", '"': "&#34;", "'": "&#39;", "/": "&#47;" },
+ matchHTML = doNotSkipEncoded ? /[&<>\/]/g : /&(?!#?\w+;)|<|>|\//g;
+ return function(code) {
+ return code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : "";
+ };
+ };
+
+ _globals = (function(){ return this || (0,eval)("this"); }());
+
+ if (typeof module !== "undefined" && module.exports) {
+ module.exports = doT;
+ } else if (typeof define === "function" && define.amd) {
+ define(function(){return doT;});
+ } else {
+ _globals.doT = doT;
+ }
+
+ var startend = {
+ append: { start: "'+(", end: ")+'", startencode: "'+encodeHTML(" },
+ split: { start: "';out+=(", end: ");out+='", startencode: "';out+=encodeHTML(" }
+ }, skip = /$^/;
+
+ function resolveDefs(c, block, def) {
+ return ((typeof block === "string") ? block : block.toString())
+ .replace(c.define || skip, function(m, code, assign, value) {
+ if (code.indexOf("def.") === 0) {
+ code = code.substring(4);
+ }
+ if (!(code in def)) {
+ if (assign === ":") {
+ if (c.defineParams) value.replace(c.defineParams, function(m, param, v) {
+ def[code] = {arg: param, text: v};
+ });
+ if (!(code in def)) def[code]= value;
+ } else {
+ new Function("def", "def['"+code+"']=" + value)(def);
+ }
+ }
+ return "";
+ })
+ .replace(c.use || skip, function(m, code) {
+ if (c.useParams) code = code.replace(c.useParams, function(m, s, d, param) {
+ if (def[d] && def[d].arg && param) {
+ var rw = (d+":"+param).replace(/'|\\/g, "_");
+ def.__exp = def.__exp || {};
+ def.__exp[rw] = def[d].text.replace(new RegExp("(^|[^\\w$])" + def[d].arg + "([^\\w$])", "g"), "$1" + param + "$2");
+ return s + "def.__exp['"+rw+"']";
+ }
+ });
+ var v = new Function("def", "return " + code)(def);
+ return v ? resolveDefs(c, v, def) : v;
+ });
+ }
+
+ function unescape(code) {
+ return code.replace(/\\('|\\)/g, "$1").replace(/[\r\t\n]/g, " ");
+ }
+
+ doT.template = function(tmpl, c, def) {
+ c = c || doT.templateSettings;
+ var cse = c.append ? startend.append : startend.split, needhtmlencode, sid = 0, indv,
+ str = (c.use || c.define) ? resolveDefs(c, tmpl, def || {}) : tmpl;
+
+ str = ("var out='" + (c.strip ? str.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g," ")
+ .replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g,""): str)
+ .replace(/'|\\/g, "\\$&")
+ .replace(c.interpolate || skip, function(m, code) {
+ return cse.start + unescape(code) + cse.end;
+ })
+ .replace(c.encode || skip, function(m, code) {
+ needhtmlencode = true;
+ return cse.startencode + unescape(code) + cse.end;
+ })
+ .replace(c.conditional || skip, function(m, elsecase, code) {
+ return elsecase ?
+ (code ? "';}else if(" + unescape(code) + "){out+='" : "';}else{out+='") :
+ (code ? "';if(" + unescape(code) + "){out+='" : "';}out+='");
+ })
+ .replace(c.iterate || skip, function(m, iterate, vname, iname) {
+ if (!iterate) return "';} } out+='";
+ sid+=1; indv=iname || "i"+sid; iterate=unescape(iterate);
+ return "';var arr"+sid+"="+iterate+";if(arr"+sid+"){var "+vname+","+indv+"=-1,l"+sid+"=arr"+sid+".length-1;while("+indv+"<l"+sid+"){"
+ +vname+"=arr"+sid+"["+indv+"+=1];out+='";
+ })
+ .replace(c.evaluate || skip, function(m, code) {
+ return "';" + unescape(code) + "out+='";
+ })
+ + "';return out;")
+ .replace(/\n/g, "\\n").replace(/\t/g, '\\t').replace(/\r/g, "\\r")
+ .replace(/(\s|;|\}|^|\{)out\+='';/g, '$1').replace(/\+''/g, "");
+ //.replace(/(\s|;|\}|^|\{)out\+=''\+/g,'$1out+=');
+
+ if (needhtmlencode) {
+ if (!c.selfcontained && _globals && !_globals._encodeHTML) _globals._encodeHTML = doT.encodeHTMLSource(c.doNotSkipEncoded);
+ str = "var encodeHTML = typeof _encodeHTML !== 'undefined' ? _encodeHTML : ("
+ + doT.encodeHTMLSource.toString() + "(" + (c.doNotSkipEncoded || '') + "));"
+ + str;
+ }
+ try {
+ return new Function(c.varname, str);
+ } catch (e) {
+ if (typeof console !== "undefined") console.log("Could not create a template function: " + str);
+ throw e;
+ }
+ };
+
+ doT.compile = function(tmpl, def) {
+ return doT.template(tmpl, null, def);
+ };
+}()); \ No newline at end of file
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/sample_es6.html b/vendor/github.com/tdewolff/minify/benchmarks/sample_es6.html
new file mode 100644
index 0000000..8056245
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/sample_es6.html
@@ -0,0 +1,17583 @@
+
+<!doctype html>
+<html lang="en-GB">
+<head>
+ <meta charset="utf-8">
+ <title>ECMAScript Language Specification ECMA-262 6th Edition &ndash; DRAFT</title>
+ <link href="es6-draft.css" rel="stylesheet">
+ <script src="es6-draft-sections.js"></script>
+</head>
+<body>
+<div id="unofficial">
+ <p><strong>This is <em>not</em> the official ECMAScript Language Specification.</strong></p>
+
+ <p>This is a draft of the next edition of the standard. See also:</p>
+
+ <ul>
+ <li><a href="http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf">ECMAScript Language Specification,
+ Edition 5.1 (PDF)</a>, the most recent official, final standard.</li>
+ <li><a href="http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts">The ES specification drafts archive</a> for
+ PDF and Word versions of this document, and older drafts.</li>
+ <li><a href="https://github.com/jorendorff/es-spec-html">The script that produced this web page</a>, and especially the <a
+ href="https://github.com/jorendorff/es-spec-html/issues?state=open">issue tracker &mdash; please file bugs when you find
+ them</a>. Patches are welcome too.</li>
+ </ul>
+
+ <p>For copyright information, see Ecma International&rsquo;s legal disclaimer in the document itself.</p>
+</div>
+
+<hgroup>
+ <h1>Draft</h1>
+ <h1>ECMA-262</h1>
+ <h1>6<sup>th</sup> Edition / Draft March 17, 2015</h1>
+ <h1>Ecma/TC39/2015/0XX</h1>
+</hgroup>
+<hgroup>
+ <h1>ECMAScript 2015</h1>
+ <h1>Language Specification</h1>
+
+ <p>Draft<br>Release Candidate #3</p>
+
+ <p>Report Errors and Issues at: https://bugs.ecmascript.org</p>
+
+ <p>Product: Draft for 6th Edition</p>
+
+ <p>Component: choose an appropriate one</p>
+
+ <p>Version: Rev 36, March 17, 2015 Draft</p>
+</hgroup>
+
+<section id="contents">
+ <h1>Contents</h1>
+</section>
+
+<section>
+ <h1>Introduction</h1>
+
+ <p>This is the sixth edition of ECMAScript Language Specification. Since publication of the first edition in 1997, ECMAScript
+ has grown to be one of the world&rsquo;s most widely used general purpose programming languages. It is best known as the
+ language embedded in web browsers but has also been widely adopted for server and embedded applications. The sixth edition is
+ the most extensive update to ECMAScript since the publication of the first edition in 1997.</p>
+
+ <p>Goals for the sixth edition include providing better support for large applications, library creation, and for use of
+ ECMAScript as a compilation target for other languages. Some of its major enhancements include modules, class declarations,
+ lexical block scoping, iterators and generators, promises for asynchronous programming, destructuring patterns, and proper tail
+ calls. The ECMAScript library of built-ins has been expanded to support additional data abstractions including maps, sets, and
+ arrays of binary numeric values as well as additional support for Unicode supplemental characters in strings and regular
+ expressions. The built-ins are now extensible via subclassing.</p>
+
+ <p>Focused development of the sixth edition started in 2009, as the fifth edition was being prepared for publication. However,
+ this was preceded by significant experimentation and language enhancement design efforts dating to the publication of the third
+ edition in 1999. In a very real sense, the completion of the sixth edition is the culmination of a fifteen year effort. Dozens
+ of individuals representing many organizations have made very significant contributions within TC39 to the development of this
+ edition and to the prior editions. In addition, a vibrant informal community has emerged supporting TC39&rsquo;s ECMAScript
+ efforts. This community has reviewed numerous drafts, filed thousands of bug reports, performed implementation experiments,
+ contributed test suites, and educated the world-wide developer community about ECMAScript. Unfortunately, it is impossible to
+ identify and acknowledge every person and organization who has contributed to this effort.</p>
+
+ <p>New uses and requirements for ECMAScript continue to emerge. The sixth edition provides the foundation for regular,
+ incremental language and library enhancements.</p>
+
+ <p>Allen Wirfs-Brock<br>ECMA-262, 6<sup>th</sup> Edition Project Editor</p>
+
+ <p>This Ecma Standard has been adopted by the General Assembly of &lt;month&gt; &lt;year&gt;.</p>
+
+ <p><b>ECMA-262 Edition History</b></p>
+
+ <p>This Ecma Standard is based on several originating technologies, the most well-known being JavaScript (Netscape) and JScript
+ (Microsoft). The language was invented by Brendan Eich at Netscape and first appeared in that company&rsquo;s Navigator 2.0
+ browser. It has appeared in all subsequent browsers from Netscape and in all browsers from Microsoft starting with Internet
+ Explorer 3.0.</p>
+
+ <p>The development of this Standard started in November 1996. The first edition of this Ecma Standard was adopted by the Ecma
+ General Assembly of June 1997.</p>
+
+ <p>That Ecma Standard was submitted to ISO/IEC JTC 1 for adoption under the fast-track procedure, and approved as international
+ standard ISO/IEC 16262, in April 1998. The Ecma General Assembly of June 1998 approved the second edition of ECMA-262 to keep it
+ fully aligned with ISO/IEC 16262. Changes between the first and the second edition are editorial in nature.</p>
+
+ <p>The third edition of the Standard introduced powerful regular expressions, better string handling, new control statements,
+ try/catch exception handling, tighter definition of errors, formatting for numeric output and minor changes in anticipation
+ future language growth. The third edition of the ECMAScript standard was adopted by the Ecma General Assembly of December 1999
+ and published as ISO/IEC 16262:2002 in June 2002.</p>
+
+ <p>After publication of the third edition, ECMAScript achieved massive adoption in conjunction with the World Wide Web where it
+ has become the programming language that is supported by essentially all web browsers. Significant work was done to develop a
+ fourth edition of ECMAScript. However, that work was not completed and not published as the fourth edition of ECMAScript but
+ some of it was incorporated into the development of the sixth edition.</p>
+
+ <p>The fifth edition of ECMAScript (published as ECMA-262 5<sup>th</sup> edition) codified de facto interpretations of the
+ language specification that have become common among browser implementations and added support for new features that had emerged
+ since the publication of the third edition. Such features include accessor properties, reflective creation and inspection of
+ objects, program control of property attributes, additional array manipulation functions, support for the JSON object encoding
+ format, and a strict mode that provides enhanced error checking and program security. The Fifth Edition was adopted by the Ecma
+ General Assembly of December 2009.</p>
+
+ <p>The Fifth Edition was submitted to ISO/IEC JTC 1 for adoption under the fast-track procedure, and approved as international
+ standard ISO/IEC 16262:2011. Edition 5.1 of the ECMAScript Standard incorporated minor corrections and is the same text as
+ ISO/IEC 16262:2011. The 5.1 Edition was adopted by the Ecma General Assembly of June 2011.</p>
+
+ <p><i>"DISCLAIMER</i></p>
+
+ <p><i>This draft document may be copied and furnished to others, and derivative works that comment on or otherwise explain it or
+ assist in its implementation may be prepared, copied, published, and distributed, in whole or in part, without restriction of
+ any kind, provided that the above copyright notice and this section are included on all such copies and derivative works.
+ However, this document itself may not be modified in any way, including by removing the copyright notice or references to Ecma
+ International, except as needed for the purpose of developing any document or deliverable produced by Ecma
+ International.</i></p>
+
+ <p><i>This disclaimer is valid only prior to final version of this document. After approval all rights on the standard are
+ reserved by Ecma International.</i></p>
+
+ <p><i>The limited permissions are granted through the standardization phase and will not be revoked by Ecma International or its
+ successors or assigns during this time.</i></p>
+
+ <p><i>This document and the information contained herein is provided on an "AS IS" basis and ECMA INTERNATIONAL DISCLAIMS ALL
+ WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT
+ INFRINGE ANY OWNERSHIP RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE."</i></p>
+</section>
+
+<div class="inner-title">ECMAScript 2015 Language Specification</div>
+
+<section id="sec-scope">
+ <h1><span class="secnum" id="sec-1"><a href="#sec-scope" title="link to this section">1</a></span> Scope</h1>
+
+ <p>This Standard defines the ECMAScript 2015 general purpose programming language.</p>
+</section>
+
+<section id="sec-conformance">
+ <h1><span class="secnum" id="sec-2"><a href="#sec-conformance" title="link to this section">2</a></span> Conformance</h1>
+
+ <p>A conforming implementation of ECMAScript must provide and support all the types, values, objects, properties, functions, and
+ program syntax and semantics described in this specification.</p>
+
+ <p>A conforming implementation of ECMAScript must interpret source text input in conformance with the Unicode Standard, Version
+ 5.1.0 or later and ISO/IEC 10646. If the adopted ISO/IEC 10646-1 subset is not otherwise specified, it is presumed to be the
+ Unicode set, collection 10646.</p>
+
+ <p>A conforming implementation of ECMAScript that provides an application programming interface that supports programs that need
+ to adapt to the linguistic and cultural conventions used by different human languages and countries must implement the interface
+ defined by the most recent edition of ECMA-402 that is compatible with this specification.</p>
+
+ <p>A conforming implementation of ECMAScript may provide additional types, values, objects, properties, and functions beyond
+ those described in this specification. In particular, a conforming implementation of ECMAScript may provide properties not
+ described in this specification, and values for those properties, for objects that are described in this specification.</p>
+
+ <p>A conforming implementation of ECMAScript may support program and regular expression syntax not described in this
+ specification. In particular, a conforming implementation of ECMAScript may support program syntax that makes use of the
+ &ldquo;future reserved words&rdquo; listed in <a href="#sec-future-reserved-words">subclause 11.6.2.2</a> of this
+ specification.</p>
+
+ <p>A conforming implementation of ECMAScript must not implement any extension that is listed as a Forbidden Extension in <a
+ href="#sec-forbidden-extensions">subclause 16.1</a>.</p>
+</section>
+
+<section id="sec-normative-references">
+ <h1><span class="secnum" id="sec-3"><a href="#sec-normative-references" title="link to this section">3</a></span> Normative
+ references</h1>
+
+ <p>The following referenced documents are indispensable for the application of this document. For dated references, only the
+ edition cited applies. For undated references, the latest edition of the referenced document (including any amendments)
+ applies.</p>
+
+ <p class="formal-reference">IEEE Std 754-2008: <i>IEEE Standard for Floating-Point Arithmetic</i>. Institute of Electrical and
+ Electronic Engineers, New York (2008)</p>
+
+ <p class="formal-reference">ISO/IEC 10646:2003: <i>Information Technology &ndash; Universal Multiple-Octet Coded Character Set
+ (UCS) plus Amendment 1:2005, Amendment 2:2006, Amendment 3:2008, and Amendment 4:2008</i>, plus additional amendments and
+ corrigenda, or successor</p>
+
+ <p class="formal-reference"><i>The Unicode Standard, Version 5.0</i>, as amended by Unicode 5.1.0, or successor.<br><a
+ href="http://www.unicode.org/versions/latest">http://www.unicode.org/versions/latest</a></p>
+
+ <p class="formal-reference"><i>Unicode Standard Annex #15, Unicode Normalization Forms, version Unicode 5.1.0</i>, or
+ successor.<br><a href="http://www.unicode.org/reports/tr15/">http://www.unicode.org/reports/tr15/</a></p>
+
+ <p class="formal-reference"><i>Unicode Standard Annex #31, Unicode Identifiers and Pattern Syntax, version Unicode 5.1.0</i>, or
+ successor. <a href="http://www.unicode.org/reports/tr31/">http://www.unicode.org/reports/tr31/</a></p>
+
+ <p>ECMA-402, <i>ECMAScript 2015 Internationalization API Specification</i>.<br><a
+ href="http://www.ecma-international.org/publications/standards/Ecma-402.htm">http://www.ecma-international.org/publications/standards/Ecma-402.htm</a></p>
+
+ <p>ECMA-404, <i>The JSON Data Interchange Format</i>.<br><a
+ href="http://www.ecma-international.org/publications/standards/Ecma-404.htm">http://www.ecma-international.org/publications/standards/Ecma-404.htm</a></p>
+</section>
+
+<section id="sec-overview">
+ <div class="front">
+ <h1><span class="secnum" id="sec-4"><a href="#sec-overview" title="link to this section">4</a></span> Overview</h1>
+
+ <p>This section contains a non-normative overview of the ECMAScript language.</p>
+
+ <p>ECMAScript is an object-oriented programming language for performing computations and manipulating computational objects
+ within a host environment. ECMAScript as defined here is not intended to be computationally self-sufficient; indeed, there are
+ no provisions in this specification for input of external data or output of computed results. Instead, it is expected that the
+ computational environment of an ECMAScript program will provide not only the objects and other facilities described in this
+ specification but also certain environment-specific objects, whose description and behaviour are beyond the scope of this
+ specification except to indicate that they may provide certain properties that can be accessed and certain functions that can
+ be called from an ECMAScript program.</p>
+
+ <p>ECMAScript was originally designed to be used as a scripting language, but has become widely used as a general purpose
+ programming language. A <b><i>scripting language</i></b> is a programming language that is used to manipulate, customize, and
+ automate the facilities of an existing system. In such systems, useful functionality is already available through a user
+ interface, and the scripting language is a mechanism for exposing that functionality to program control. In this way, the
+ existing system is said to provide a host environment of objects and facilities, which completes the capabilities of the
+ scripting language. A scripting language is intended for use by both professional and non-professional programmers.</p>
+
+ <p>ECMAScript was originally designed to be a <b><i>Web scripting language</i></b>, providing a mechanism to enliven Web pages
+ in browsers and to perform server computation as part of a Web-based client-server architecture. ECMAScript is now used to
+ provide core scripting capabilities for a variety of host environments. Therefore the core language is specified in this
+ document apart from any particular host environment.</p>
+
+ <p>ECMAScript usage has moved beyond simple scripting and it is now used for the full spectrum of programming tasks in many
+ different environments and scales. As the usage of ECMAScript has expanded, so has the features and facilities it provides.
+ ECMAScript is now a fully featured general propose programming language.</p>
+
+ <p>Some of the facilities of ECMAScript are similar to those used in other programming languages; in particular C,
+ Java&trade;, Self, and Scheme as described in:</p>
+
+ <p>ISO/IEC&nbsp;9899:1996, Programming Languages &ndash; C.</p>
+
+ <p class="formal-reference">Gosling, James, Bill Joy and Guy Steele. <span class="book-title">The Java&trade; Language
+ Specification</span>. Addison Wesley Publishing Co., 1996.</p>
+
+ <p class="formal-reference">Ungar, David, and Smith, Randall B. <span class="book-title">Self: The Power of Simplicity</span>.
+ OOPSLA '87 Conference Proceedings, pp. 227&ndash;241, Orlando, FL, October 1987.</p>
+
+ <p class="formal-reference"><span class="book-title">IEEE Standard for the Scheme Programming Language</span>. IEEE Std
+ 1178-1990.</p>
+ </div>
+
+ <section id="sec-web-scripting">
+ <h1><span class="secnum" id="sec-4.1"><a href="#sec-web-scripting" title="link to this section">4.1</a></span> Web
+ Scripting</h1>
+
+ <p>A web browser provides an ECMAScript host environment for client-side computation including, for instance, objects that
+ represent windows, menus, pop-ups, dialog boxes, text areas, anchors, frames, history, cookies, and input/output. Further, the
+ host environment provides a means to attach scripting code to events such as change of focus, page and image loading,
+ unloading, error and abort, selection, form submission, and mouse actions. Scripting code appears within the HTML and the
+ displayed page is a combination of user interface elements and fixed and computed text and images. The scripting code is
+ reactive to user interaction and there is no need for a main program.</p>
+
+ <p>A web server provides a different host environment for server-side computation including objects representing requests,
+ clients, and files; and mechanisms to lock and share data. By using browser-side and server-side scripting together, it is
+ possible to distribute computation between the client and server while providing a customized user interface for a Web-based
+ application.</p>
+
+ <p>Each Web browser and server that supports ECMAScript supplies its own host environment, completing the ECMAScript execution
+ environment.</p>
+ </section>
+
+ <section id="sec-ecmascript-overview">
+ <div class="front">
+ <h1><span class="secnum" id="sec-4.2"><a href="#sec-ecmascript-overview" title="link to this section">4.2</a></span>
+ ECMAScript Overview</h1>
+
+ <p>The following is an informal overview of ECMAScript&mdash;not all parts of the language are described. This overview is
+ not part of the standard proper.</p>
+
+ <p>ECMAScript is object-based: basic language and host facilities are provided by objects, and an ECMAScript program is a
+ cluster of communicating objects. In ECMAScript, an <b><i>object</i></b> is a collection of zero or more
+ <b><i>properties</i></b> each with <b><i>attributes</i></b> that determine how each property can be used&mdash;for example,
+ when the Writable attribute for a property is set to <b>false</b>, any attempt by executed ECMAScript code to assign a
+ different value to the property fails. Properties are containers that hold other objects, <b><i>primitive values</i></b>, or
+ <b><i>functions</i></b>. A primitive value is a member of one of the following built-in types: <b>Undefined</b>,
+ <b>Null</b>, <b>Boolean</b>, <b>Number</b>, <b>String,</b> and <b>Symbol;</b> an object is a member of the built-in type
+ <b>Object</b>; and a function is a callable object. A function that is associated with an object via a property is called a
+ <b><i>method</i></b>.</p>
+
+ <p>ECMAScript defines a collection of <b><i>built-in objects</i></b> that round out the definition of ECMAScript entities.
+ These built-in objects include the global object; objects that are fundamental to the runtime semantics of the language
+ including <b>Object</b>, <b>Function</b>, <b>Boolean</b>, <b>Symbol</b>, and various <b>Error</b> objects; objects that
+ represent and manipulate numeric values including <b>Math</b>, <b>Number</b>, and <b>Date</b>; the text processing objects
+ <b>String</b> and <b>RegExp</b>; objects that are indexed collections of values including <b>Array</b> and nine different
+ kinds of Typed Arrays whose elements all have a specific numeric data representation; keyed collections including <b>Map</b>
+ and <b>Set</b> objects; objects supporting structured data including the <b>JSON</b> object, <b>ArrayBuffer</b>, and
+ <b>DataView</b>; objects supporting control abstractions including generator functions and <b>Promise</b> objects;
+ and<b>,</b> reflection objects including <b>Proxy</b> and <b>Reflect</b>.</p>
+
+ <p>ECMAScript also defines a set of built-in <b><i>operators</i></b>. ECMAScript operators include various unary operations,
+ multiplicative operators, additive operators, bitwise shift operators, relational operators, equality operators, binary
+ bitwise operators, binary logical operators, assignment operators, and the comma operator.</p>
+
+ <p>Large ECMAScript programs are supported by <b><i>modules</i></b> which allow a program to be divided into multiple
+ sequences of statements and declarations. Each module explicitly identifies declarations it uses that need to be provided by
+ other modules and which of its declarations are available for use by other modules.</p>
+
+ <p>ECMAScript syntax intentionally resembles Java syntax. ECMAScript syntax is relaxed to enable it to serve as an
+ easy-to-use scripting language. For example, a variable is not required to have its type declared nor are types associated
+ with properties, and defined functions are not required to have their declarations appear textually before calls to
+ them.</p>
+ </div>
+
+ <section id="sec-objects">
+ <h1><span class="secnum" id="sec-4.2.1"><a href="#sec-objects" title="link to this section">4.2.1</a></span> Objects</h1>
+
+ <p>Even though ECMAScript includes syntax for class definitions, ECMAScript objects are not fundamentally class-based such
+ as those in C++, Smalltalk, or Java. Instead objects may be created in various ways including via a literal notation or via
+ <b><i>constructors</i></b> which create objects and then execute code that initializes all or part of them by assigning
+ initial values to their properties. Each constructor is a function that has a property named <code>"prototype"</code> that
+ is used to implement <b><i>prototype-based inheritance</i></b> and <b><i>shared properties</i></b>. Objects are created by
+ using constructors in <b>new</b> expressions; for example, <code>new Date(2009,11)</code> creates a new Date object.
+ Invoking a constructor without using <b>new</b> has consequences that depend on the constructor. For example,
+ <code>Date()</code> produces a string representation of the current date and time rather than an object.</p>
+
+ <p>Every object created by a constructor has an implicit reference (called the object&rsquo;s <i>prototype</i>) to the value
+ of its constructor&rsquo;s <code>"prototype"</code> property. Furthermore, a prototype may have a non-null implicit
+ reference to its prototype, and so on; this is called the <i>prototype chain</i>. When a reference is made to a property in
+ an object, that reference is to the property of that name in the first object in the prototype chain that contains a
+ property of that name. In other words, first the object mentioned directly is examined for such a property; if that object
+ contains the named property, that is the property to which the reference refers; if that object does not contain the named
+ property, the prototype for that object is examined next; and so on.</p>
+
+ <figure>
+ <object data="figure-1.svg" height="354" type="image/svg+xml" width="719">
+ <img alt="An image of lots of boxes and arrows." height="354" src="figure-1.png" width="719">
+ </object>
+ <figcaption>Figure 1 &mdash; Object/Prototype Relationships</figcaption>
+ </figure>
+
+ <p>In a class-based object-oriented language, in general, state is carried by instances, methods are carried by classes, and
+ inheritance is only of structure and behaviour. In ECMAScript, the state and methods are carried by objects, while
+ structure, behaviour, and state are all inherited.</p>
+
+ <p>All objects that do not directly contain a particular property that their prototype contains share that property and its
+ value. Figure 1 illustrates this:</p>
+
+ <p><b>CF</b> is a constructor (and also an object). Five objects have been created by using <code>new</code> expressions:
+ <b>cf<sub>1</sub></b>, <b>cf<sub>2</sub></b>, <b>cf<sub>3</sub></b>, <b>cf<sub>4</sub></b>, and <b>cf<sub>5</sub></b>. Each
+ of these objects contains properties named <code>q1</code> and <code>q2</code>. The dashed lines represent the implicit
+ prototype relationship; so, for example, <b>cf<sub>3</sub></b>&rsquo;s prototype is <b>CF<sub>p</sub></b>. The constructor,
+ <b>CF</b>, has two properties itself, named <code>P1</code> and <code>P2</code>, which are not visible to
+ <b>CF<sub>p</sub></b>, <b>cf<sub>1</sub></b>, <b>cf<sub>2</sub></b>, <b>cf<sub>3</sub></b>, <b>cf<sub>4</sub></b>, or
+ <b>cf<sub>5</sub></b>. The property named <code>CFP1</code> in <b>CF<sub>p</sub></b> is shared by <b>cf<sub>1</sub></b>,
+ <b>cf<sub>2</sub></b>, <b>cf<sub>3</sub></b>, <b>cf<sub>4</sub></b>, and <b>cf<sub>5</sub></b> (but not by <b>CF</b>), as
+ are any properties found in <b>CF<sub>p</sub></b>&rsquo;s implicit prototype chain that are not named <code>q1</code>,
+ <code>q2</code>, or <code>CFP1</code>. Notice that there is no implicit prototype link between <b>CF</b> and
+ <b>CF<sub>p</sub></b>.</p>
+
+ <p>Unlike most class-based object languages, properties can be added to objects dynamically by assigning values to them.
+ That is, constructors are not required to name or assign values to all or any of the constructed object&rsquo;s properties.
+ In the above diagram, one could add a new shared property for <b>cf<sub>1</sub></b>, <b>cf<sub>2</sub></b>,
+ <b>cf<sub>3</sub></b>, <b>cf<sub>4</sub></b>, and <b>cf<sub>5</sub></b> by assigning a new value to the property in
+ <b>CF<sub>p</sub></b>.</p>
+
+ <p>Although ECMAScript objects are not inherently class-based, it is often convenient to define class-like abstractions
+ based upon a common pattern of constructor functions, prototype objects, and methods. The ECMAScript built-in objects
+ themselves follow such a class-like pattern. Beginning with the sixth edition, the ECMAScript language includes syntactic
+ class definitions that permit programmers to concisely define objects that conform to the same class-like abstraction
+ pattern used by the built-in objects.</p>
+ </section>
+
+ <section id="sec-strict-variant-of-ecmascript">
+ <h1><span class="secnum" id="sec-4.2.2"><a href="#sec-strict-variant-of-ecmascript"
+ title="link to this section">4.2.2</a></span> The Strict Variant of ECMAScript</h1>
+
+ <p>The ECMAScript Language recognizes the possibility that some users of the language may wish to restrict their usage of
+ some features available in the language. They might do so in the interests of security, to avoid what they consider to be
+ error-prone features, to get enhanced error checking, or for other reasons of their choosing. In support of this
+ possibility, ECMAScript defines a strict variant of the language. The strict variant of the language excludes some specific
+ syntactic and semantic features of the regular ECMAScript language and modifies the detailed semantics of some features. The
+ strict variant also specifies additional error conditions that must be reported by throwing error exceptions in situations
+ that are not specified as errors by the non-strict form of the language.</p>
+
+ <p>The strict variant of ECMAScript is commonly referred to as the <i>strict mode</i> of the language. Strict mode selection
+ and use of the strict mode syntax and semantics of ECMAScript is explicitly made at the level of individual ECMAScript
+ source text units. Because strict mode is selected at the level of a syntactic source text unit, strict mode only imposes
+ restrictions that have local effect within such a source text unit. Strict mode does not restrict or modify any aspect of
+ the ECMAScript semantics that must operate consistently across multiple source text units. A complete ECMAScript program may
+ be composed of both strict mode and non-strict mode ECMAScript source text units. In this case, strict mode only applies
+ when actually executing code that is defined within a strict mode source text unit.</p>
+
+ <p>In order to conform to this specification, an ECMAScript implementation must implement both the full unrestricted
+ ECMAScript language and the strict variant of the ECMAScript language as defined by this specification. In addition, an
+ implementation must support the combination of unrestricted and strict mode source text units into a single composite
+ program.</p>
+ </section>
+ </section>
+
+ <section id="sec-terms-and-definitions">
+ <div class="front">
+ <h1><span class="secnum" id="sec-4.3"><a href="#sec-terms-and-definitions" title="link to this section">4.3</a></span> Terms
+ and definitions</h1>
+
+ <p>For the purposes of this document, the following terms and definitions apply.</p>
+ </div>
+
+ <section id="sec-type">
+ <h1><span class="secnum" id="sec-4.3.1"><a href="#sec-type" title="link to this section">4.3.1</a></span> type</h1>
+
+ <p>set of data values as defined in <a href="#sec-ecmascript-data-types-and-values">clause 6</a> of this specification</p>
+ </section>
+
+ <section id="sec-primitive-value">
+ <h1><span class="secnum" id="sec-4.3.2"><a href="#sec-primitive-value" title="link to this section">4.3.2</a></span>
+ primitive value</h1>
+
+ <p>member of one of the types Undefined, Null, Boolean, Number, Symbol, or String as defined in <a
+ href="#sec-ecmascript-data-types-and-values">clause 6</a></p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> A primitive value is a datum that is represented directly at the lowest level of the
+ language implementation.</p>
+ </div>
+ </section>
+
+ <section id="sec-terms-and-definitions-object">
+ <h1><span class="secnum" id="sec-4.3.3"><a href="#sec-terms-and-definitions-object"
+ title="link to this section">4.3.3</a></span> object</h1>
+
+ <p>member of the type Object</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> An object is a collection of properties and has a single prototype object. The prototype
+ may be the null value.</p>
+ </div>
+ </section>
+
+ <section id="sec-constructor">
+ <h1><span class="secnum" id="sec-4.3.4"><a href="#sec-constructor" title="link to this section">4.3.4</a></span>
+ constructor</h1>
+
+ <p>function object that creates and initializes objects</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> The value of a constructor&rsquo;s <code>prototype</code> property is a prototype object
+ that is used to implement inheritance and shared properties.</p>
+ </div>
+ </section>
+
+ <section id="sec-terms-and-definitions-prototype">
+ <h1><span class="secnum" id="sec-4.3.5"><a href="#sec-terms-and-definitions-prototype"
+ title="link to this section">4.3.5</a></span> prototype</h1>
+
+ <p>object that provides shared properties for other objects</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> When a constructor creates an object, that object implicitly references the
+ constructor&rsquo;s <code>prototype</code> property for the purpose of resolving property references. The
+ constructor&rsquo;s <code>prototype</code> property can be referenced by the program expression
+ <code><i>constructor</i><b>.prototype</b></code>, and properties added to an object&rsquo;s prototype are shared, through
+ inheritance, by all objects sharing the prototype. Alternatively, a new object may be created with an explicitly specified
+ prototype by using the <code><a href="#sec-object.create">Object.create</a></code> built-in function.</p>
+ </div>
+ </section>
+
+ <section id="sec-ordinary-object">
+ <h1><span class="secnum" id="sec-4.3.6"><a href="#sec-ordinary-object" title="link to this section">4.3.6</a></span>
+ ordinary object</h1>
+
+ <p>object that has the default behaviour for the essential internal methods that must be supported by all objects.</p>
+ </section>
+
+ <section id="sec-exotic-object">
+ <h1><span class="secnum" id="sec-4.3.7"><a href="#sec-exotic-object" title="link to this section">4.3.7</a></span> exotic
+ object</h1>
+
+ <p>object that does not have the default behaviour for one or more of the essential internal methods that must be supported
+ by all objects.</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> Any object that is not an ordinary object is an exotic object.</p>
+ </div>
+ </section>
+
+ <section id="sec-standard-object">
+ <h1><span class="secnum" id="sec-4.3.8"><a href="#sec-standard-object" title="link to this section">4.3.8</a></span>
+ standard object</h1>
+
+ <p>object whose semantics are defined by this specification</p>
+ </section>
+
+ <section id="sec-built-in-object">
+ <h1><span class="secnum" id="sec-4.3.9"><a href="#sec-built-in-object" title="link to this section">4.3.9</a></span>
+ built-in object</h1>
+
+ <p>object specified and supplied by an ECMAScript implementation</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> Standard built-in objects are defined in this specification. An ECMAScript implementation
+ may specify and supply additional kinds of built-in objects. A <i>built-in constructor</i> is a built-in object that is
+ also a constructor.</p>
+ </div>
+ </section>
+
+ <section id="sec-undefined-value">
+ <h1><span class="secnum" id="sec-4.3.10"><a href="#sec-undefined-value" title="link to this section">4.3.10</a></span>
+ undefined value</h1>
+
+ <p>primitive value used when a variable has not been assigned a value</p>
+ </section>
+
+ <section id="sec-terms-and-definitions-undefined-type">
+ <h1><span class="secnum" id="sec-4.3.11"><a href="#sec-terms-and-definitions-undefined-type"
+ title="link to this section">4.3.11</a></span> Undefined type</h1>
+
+ <p>type whose sole value is the <b>undefined</b> value</p>
+ </section>
+
+ <section id="sec-null-value">
+ <h1><span class="secnum" id="sec-4.3.12"><a href="#sec-null-value" title="link to this section">4.3.12</a></span> null
+ value</h1>
+
+ <p>primitive value that represents the intentional absence of any object value</p>
+ </section>
+
+ <section id="sec-terms-and-definitions-null-type">
+ <h1><span class="secnum" id="sec-4.3.13"><a href="#sec-terms-and-definitions-null-type"
+ title="link to this section">4.3.13</a></span> Null type</h1>
+
+ <p>type whose sole value is the null value</p>
+ </section>
+
+ <section id="sec-terms-and-definitions-boolean-value">
+ <h1><span class="secnum" id="sec-4.3.14"><a href="#sec-terms-and-definitions-boolean-value"
+ title="link to this section">4.3.14</a></span> Boolean value</h1>
+
+ <p>member of the Boolean type</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> There are only two Boolean values, <b>true</b> and <b>false</b></p>
+ </div>
+ </section>
+
+ <section id="sec-terms-and-definitions-boolean-type">
+ <h1><span class="secnum" id="sec-4.3.15"><a href="#sec-terms-and-definitions-boolean-type"
+ title="link to this section">4.3.15</a></span> Boolean type</h1>
+
+ <p>type consisting of the primitive values <b>true</b> and <b>false</b></p>
+ </section>
+
+ <section id="sec-boolean-object">
+ <h1><span class="secnum" id="sec-4.3.16"><a href="#sec-boolean-object" title="link to this section">4.3.16</a></span>
+ Boolean object</h1>
+
+ <p>member of the Object type that is an instance of the standard built-in <code>Boolean</code> constructor</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> A Boolean object is created by using the <code>Boolean</code> constructor in a
+ <code>new</code> expression, supplying a Boolean value as an argument. The resulting object has an <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> whose value is the Boolean value. A Boolean
+ object can be coerced to a Boolean value.</p>
+ </div>
+ </section>
+
+ <section id="sec-terms-and-definitions-string-value">
+ <h1><span class="secnum" id="sec-4.3.17"><a href="#sec-terms-and-definitions-string-value"
+ title="link to this section">4.3.17</a></span> String value</h1>
+
+ <p>primitive value that is a finite ordered sequence of zero or more 16-bit unsigned integer</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> A String value is a member of the String type. Each integer value in the sequence usually
+ represents a single 16-bit unit of UTF-16 text. However, ECMAScript does not place any restrictions or requirements on the
+ values except that they must be 16-bit unsigned integers.</p>
+ </div>
+ </section>
+
+ <section id="sec-terms-and-definitions-string-type">
+ <h1><span class="secnum" id="sec-4.3.18"><a href="#sec-terms-and-definitions-string-type"
+ title="link to this section">4.3.18</a></span> String type</h1>
+
+ <p>set of all possible String values</p>
+ </section>
+
+ <section id="sec-string-object">
+ <h1><span class="secnum" id="sec-4.3.19"><a href="#sec-string-object" title="link to this section">4.3.19</a></span> String
+ object</h1>
+
+ <p>member of the Object type that is an instance of the standard built-in <code>String</code> constructor</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> A String object is created by using the <code>String</code> constructor in a
+ <code>new</code> expression, supplying a String value as an argument. The resulting object has an <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> whose value is the String value. A String object
+ can be coerced to a String value by calling the <code>String</code> constructor as a function (<a
+ href="#sec-string-constructor-string-value">21.1.1.1</a>).</p>
+ </div>
+ </section>
+
+ <section id="sec-terms-and-definitions-number-value">
+ <h1><span class="secnum" id="sec-4.3.20"><a href="#sec-terms-and-definitions-number-value"
+ title="link to this section">4.3.20</a></span> Number value</h1>
+
+ <p>primitive value corresponding to a double-precision 64-bit binary format IEEE 754 value</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> A Number value is a member of the Number type and is a direct representation of a
+ number.</p>
+ </div>
+ </section>
+
+ <section id="sec-terms-and-definitions-number-type">
+ <h1><span class="secnum" id="sec-4.3.21"><a href="#sec-terms-and-definitions-number-type"
+ title="link to this section">4.3.21</a></span> Number type</h1>
+
+ <p>set of all possible Number values including the special &ldquo;Not-a-Number&rdquo; (NaN) value, positive infinity, and
+ negative infinity</p>
+ </section>
+
+ <section id="sec-number-object">
+ <h1><span class="secnum" id="sec-4.3.22"><a href="#sec-number-object" title="link to this section">4.3.22</a></span> Number
+ object</h1>
+
+ <p>member of the Object type that is an instance of the standard built-in <code>Number</code> constructor</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> A Number object is created by using the <code>Number</code> constructor in a
+ <code>new</code> expression, supplying a Number value as an argument. The resulting object has an <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> whose value is the Number value. A Number object
+ can be coerced to a Number value by calling the <code>Number</code> constructor as a function (<a
+ href="#sec-number-constructor-number-value">20.1.1.1</a>).</p>
+ </div>
+ </section>
+
+ <section id="sec-terms-and-definitions-infinity">
+ <h1><span class="secnum" id="sec-4.3.23"><a href="#sec-terms-and-definitions-infinity"
+ title="link to this section">4.3.23</a></span> Infinity</h1>
+
+ <p>number value that is the positive infinite Number value</p>
+ </section>
+
+ <section id="sec-terms-and-definitions-nan">
+ <h1><span class="secnum" id="sec-4.3.24"><a href="#sec-terms-and-definitions-nan"
+ title="link to this section">4.3.24</a></span> NaN</h1>
+
+ <p>number value that is an IEEE 754 &ldquo;Not-a-Number&rdquo; value</p>
+ </section>
+
+ <section id="sec-symbol-value">
+ <h1><span class="secnum" id="sec-4.3.25"><a href="#sec-symbol-value" title="link to this section">4.3.25</a></span> Symbol
+ value</h1>
+
+ <p>primitive value that represents a unique, non-String Object <a href="#sec-object-type">property key</a></p>
+ </section>
+
+ <section id="sec-terms-and-definitions-symbol-type">
+ <h1><span class="secnum" id="sec-4.3.26"><a href="#sec-terms-and-definitions-symbol-type"
+ title="link to this section">4.3.26</a></span> Symbol type</h1>
+
+ <p>set of all possible Symbol values</p>
+ </section>
+
+ <section id="sec-symbol-object">
+ <h1><span class="secnum" id="sec-4.3.27"><a href="#sec-symbol-object" title="link to this section">4.3.27</a></span> Symbol
+ object</h1>
+
+ <p>member of the Object type that is an instance of the standard built-in <code>Symbol</code> constructor</p>
+ </section>
+
+ <section id="sec-terms-and-definitions-function">
+ <h1><span class="secnum" id="sec-4.3.28"><a href="#sec-terms-and-definitions-function"
+ title="link to this section">4.3.28</a></span> function</h1>
+
+ <p>member of the Object type that may be invoked as a subroutine</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> In addition to its properties, a function contains executable code and state that
+ determine how it behaves when invoked. A function&rsquo;s code may or may not be written in ECMAScript.</p>
+ </div>
+ </section>
+
+ <section id="sec-built-in-function">
+ <h1><span class="secnum" id="sec-4.3.29"><a href="#sec-built-in-function" title="link to this section">4.3.29</a></span>
+ built-in function</h1>
+
+ <p>built-in object that is a function</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> Examples of built-in functions include <code>parseInt</code> and <code><a
+ href="#sec-math.exp">Math.exp</a></code>. An implementation may provide implementation-dependent built-in functions that
+ are not described in this specification.</p>
+ </div>
+ </section>
+
+ <section id="sec-property">
+ <h1><span class="secnum" id="sec-4.3.30"><a href="#sec-property" title="link to this section">4.3.30</a></span>
+ property</h1>
+
+ <p>part of an object that associates a key (either a String value or a Symbol value) and a value.</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> Depending upon the form of the property the value may be represented either directly as a
+ data value (a primitive value, an object, or a function object) or indirectly by a pair of accessor functions.</p>
+ </div>
+ </section>
+
+ <section id="sec-method">
+ <h1><span class="secnum" id="sec-4.3.31"><a href="#sec-method" title="link to this section">4.3.31</a></span> method</h1>
+
+ <p>function that is the value of a property</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> When a function is called as a method of an object, the object is passed to the function
+ as its <b>this</b> value.</p>
+ </div>
+ </section>
+
+ <section id="sec-built-in-method">
+ <h1><span class="secnum" id="sec-4.3.32"><a href="#sec-built-in-method" title="link to this section">4.3.32</a></span>
+ built-in method</h1>
+
+ <p>method that is a built-in function</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> Standard built-in methods are defined in this specification, and an ECMAScript
+ implementation may specify and provide other additional built-in methods.</p>
+ </div>
+ </section>
+
+ <section id="sec-attribute">
+ <h1><span class="secnum" id="sec-4.3.33"><a href="#sec-attribute" title="link to this section">4.3.33</a></span>
+ attribute</h1>
+
+ <p>internal value that defines some characteristic of a property</p>
+ </section>
+
+ <section id="sec-own-property">
+ <h1><span class="secnum" id="sec-4.3.34"><a href="#sec-own-property" title="link to this section">4.3.34</a></span> own
+ property</h1>
+
+ <p>property that is directly contained by its object</p>
+ </section>
+
+ <section id="sec-inherited-property">
+ <h1><span class="secnum" id="sec-4.3.35"><a href="#sec-inherited-property" title="link to this section">4.3.35</a></span>
+ inherited property</h1>
+
+ <p>property of an object that is not an own property but is a property (either own or inherited) of the object&rsquo;s
+ prototype</p>
+ </section>
+ </section>
+
+ <section id="sec-organization-of-this-specification">
+ <h1><span class="secnum" id="sec-4.4"><a href="#sec-organization-of-this-specification"
+ title="link to this section">4.4</a></span> Organization of This Specification</h1>
+
+ <p>The remainder of this specification is organized as follows:</p>
+
+ <p>Clause 5 defines the notational conventions used throughout the specification.</p>
+
+ <p>Clauses 6&minus;9 define the execution environment within which ECMAScript programs operate.</p>
+
+ <p>Clauses 10&minus;16 define the actual ECMAScript programming language including its syntactic encoding and the execution
+ semantics of all language features.</p>
+
+ <p>Clauses 17&minus;26 define the ECMAScript standard library. It includes the definitions of all of the standard objects that
+ are available for use by ECMAScript programs as they execute.</p>
+ </section>
+</section>
+
+<section id="sec-notational-conventions">
+ <div class="front">
+ <h1><span class="secnum" id="sec-5"><a href="#sec-notational-conventions" title="link to this section">5</a></span> Notational
+ Conventions</h1>
+ </div>
+
+ <section id="sec-syntactic-and-lexical-grammars">
+ <div class="front">
+ <h1><span class="secnum" id="sec-5.1"><a href="#sec-syntactic-and-lexical-grammars"
+ title="link to this section">5.1</a></span> Syntactic and Lexical Grammars</h1>
+ </div>
+
+ <section id="sec-context-free-grammars">
+ <h1><span class="secnum" id="sec-5.1.1"><a href="#sec-context-free-grammars" title="link to this section">5.1.1</a></span>
+ Context-Free Grammars</h1>
+
+ <p>A <i>context-free grammar</i> consists of a number of <i>productions</i>. Each production has an abstract symbol called a
+ <i>nonterminal</i> as its <i>left-hand side</i>, and a sequence of zero or more nonterminal and <i>terminal</i> symbols as
+ its <i>right-hand side</i>. For each grammar, the terminal symbols are drawn from a specified alphabet.</p>
+
+ <p>A <i>chain production</i> is a production that has exactly one nonterminal symbol on its right-hand side along with zero
+ or more terminal symbols.</p>
+
+ <p>Starting from a sentence consisting of a single distinguished nonterminal, called the <i>goal symbol</i>, a given
+ context-free grammar specifies a <i>language</i>, namely, the (perhaps infinite) set of possible sequences of terminal
+ symbols that can result from repeatedly replacing any nonterminal in the sequence with a right-hand side of a production for
+ which the nonterminal is the left-hand side.</p>
+ </section>
+
+ <section id="sec-lexical-and-regexp-grammars">
+ <h1><span class="secnum" id="sec-5.1.2"><a href="#sec-lexical-and-regexp-grammars"
+ title="link to this section">5.1.2</a></span> The Lexical and RegExp Grammars</h1>
+
+ <p>A <i>lexical grammar</i> for ECMAScript is given in <a href="#sec-ecmascript-language-lexical-grammar">clause 11</a>.
+ This grammar has as its terminal symbols Unicode code points that conform to the rules for <span
+ class="nt">SourceCharacter</span> defined in <a href="#sec-source-text">10.1</a>. It defines a set of productions, starting
+ from the goal symbol <var>InputElementDiv,</var> <var>InputElementTemplateTail,</var> or <span
+ class="nt">InputElementRegExp</span>, or <var>InputElementRegExpOrTemplateTail,</var> that describe how sequences of such
+ code points are translated into a sequence of input elements.</p>
+
+ <p>Input elements other than white space and comments form the terminal symbols for the syntactic grammar for ECMAScript and
+ are called ECMAScript <i>tokens</i>. These tokens are the reserved words, identifiers, literals, and punctuators of the
+ ECMAScript language. Moreover, line terminators, although not considered to be tokens, also become part of the stream of
+ input elements and guide the process of <a href="#sec-automatic-semicolon-insertion">automatic semicolon insertion</a> (<a
+ href="#sec-automatic-semicolon-insertion">11.9</a>). Simple white space and single-line comments are discarded and do not
+ appear in the stream of input elements for the syntactic grammar. A <span class="nt">MultiLineComment</span> (that is, a
+ comment of the form <code>/*</code>&hellip;<code>*/</code> regardless of whether it spans more than one line) is likewise
+ simply discarded if it contains no line terminator; but if a <span class="nt">MultiLineComment</span> contains one or more
+ line terminators, then it is replaced by a single line terminator, which becomes part of the stream of input elements for
+ the syntactic grammar.</p>
+
+ <p>A <i>RegExp grammar</i> for ECMAScript is given in <a href="#sec-patterns">21.2.1</a>. This grammar also has as its
+ terminal symbols the code points as defined by <span class="nt">SourceCharacter</span>. It defines a set of productions,
+ starting from the goal symbol <span class="nt">Pattern</span>, that describe how sequences of code points are translated
+ into regular expression patterns.</p>
+
+ <p>Productions of the lexical and RegExp grammars are distinguished by having two colons &ldquo;<b>::</b>&rdquo; as
+ separating punctuation. The lexical and RegExp grammars share some productions.</p>
+ </section>
+
+ <section id="sec-numeric-string-grammar">
+ <h1><span class="secnum" id="sec-5.1.3"><a href="#sec-numeric-string-grammar" title="link to this section">5.1.3</a></span>
+ The Numeric String Grammar</h1>
+
+ <p>Another grammar is used for translating Strings into numeric values. This grammar is similar to the part of the lexical
+ grammar having to do with numeric literals and has as its terminal symbols <span class="nt">SourceCharacter</span>. This
+ grammar appears in <a href="#sec-tonumber-applied-to-the-string-type">7.1.3.1</a>.</p>
+
+ <p>Productions of the numeric string grammar are distinguished by having three colons &ldquo;<b>:::</b>&rdquo; as
+ punctuation.</p>
+ </section>
+
+ <section id="sec-syntactic-grammar">
+ <h1><span class="secnum" id="sec-5.1.4"><a href="#sec-syntactic-grammar" title="link to this section">5.1.4</a></span> The
+ Syntactic Grammar</h1>
+
+ <p>The <i>syntactic grammar</i> for ECMAScript is given in clauses 11, 12, 13, 14, and 15. This grammar has ECMAScript
+ tokens defined by the lexical grammar as its terminal symbols (<a href="#sec-lexical-and-regexp-grammars">5.1.2</a>). It
+ defines a set of productions, starting from two alternative goal symbols <span class="nt">Script</span> and <span
+ class="nt">Module</span>, that describe how sequences of tokens form syntactically correct independent components of
+ ECMAScript programs.</p>
+
+ <p>When a stream of code points is to be parsed as an ECMAScript <span class="nt">Script</span> or <span
+ class="nt">Module</span>, it is first converted to a stream of input elements by repeated application of the lexical
+ grammar; this stream of input elements is then parsed by a single application of the syntactic grammar. The input stream is
+ syntactically in error if the tokens in the stream of input elements cannot be parsed as a single instance of the goal
+ nonterminal (<span class="nt">Script</span> or <span class="nt">Module</span>), with no tokens left over.</p>
+
+ <p>Productions of the syntactic grammar are distinguished by having just one colon &ldquo;<b>:</b>&rdquo; as
+ punctuation.</p>
+
+ <p>The syntactic grammar as presented in clauses 12, 13, 14 and 15 is not a complete account of which token sequences are
+ accepted as a correct ECMAScript <span class="nt">Script</span> or <span class="nt">Module</span>. Certain additional token
+ sequences are also accepted, namely, those that would be described by the grammar if only semicolons were added to the
+ sequence in certain places (such as before line terminator characters). Furthermore, certain token sequences that are
+ described by the grammar are not considered acceptable if a line terminator character appears in certain
+ &ldquo;awkward&rdquo; places.</p>
+
+ <p>In certain cases in order to avoid ambiguities the syntactic grammar uses generalized productions that permit token
+ sequences that do not form a valid ECMAScript <span class="nt">Script</span> or <span class="nt">Module</span>. For example,
+ this technique is used for object literals and object destructuring patterns. In such cases a more restrictive
+ <i>supplemental grammar</i> is provided that further restricts the acceptable token sequences. In certain contexts, when
+ explicitly specified, the input elements corresponding to such a production are parsed again using a goal symbol of a
+ supplemental grammar. The input stream is syntactically in error if the tokens in the stream of input elements parsed by a
+ cover grammar cannot be parsed as a single instance of the corresponding supplemental goal symbol, with no tokens left
+ over.</p>
+ </section>
+
+ <section id="sec-grammar-notation">
+ <h1><span class="secnum" id="sec-5.1.5"><a href="#sec-grammar-notation" title="link to this section">5.1.5</a></span>
+ Grammar Notation</h1>
+
+ <p>Terminal symbols of the lexical, RegExp, and numeric string grammars are shown in <code>fixed width</code> font, both in
+ the productions of the grammars and throughout this specification whenever the text directly refers to such a terminal
+ symbol. These are to appear in a script exactly as written. All terminal symbol code points specified in this way are to be
+ understood as the appropriate Unicode code points from the Basic Latin range, as opposed to any similar-looking code points
+ from other Unicode ranges.</p>
+
+ <p>Nonterminal symbols are shown in <var>italic</var> type. The definition of a nonterminal (also called a
+ &ldquo;production&rdquo;) is introduced by the name of the nonterminal being defined followed by one or more colons. (The
+ number of colons indicates to which grammar the production belongs.) One or more alternative right-hand sides for the
+ nonterminal then follow on succeeding lines. For example, the syntactic definition:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">WhileStatement</span> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">while</code> <code class="t">(</code> <span class="nt">Expression</span> <code class="t">)</code> <span class="nt">Statement</span></div>
+ </div>
+
+ <p>states that the nonterminal <span class="nt">WhileStatement</span> represents the token <code>while</code>, followed by a
+ left parenthesis token, followed by an <span class="nt">Expression</span>, followed by a right parenthesis token, followed
+ by a <span class="nt">Statement</span>. The occurrences of <span class="nt">Expression</span> and <span
+ class="nt">Statement</span> are themselves nonterminals. As another example, the syntactic definition:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">ArgumentList</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">AssignmentExpression</span></div>
+ <div class="rhs"><span class="nt">ArgumentList</span> <code class="t">,</code> <span class="nt">AssignmentExpression</span></div>
+ </div>
+
+ <p>states that an <span class="nt">ArgumentList</span> may represent either a single <span
+ class="nt">AssignmentExpression</span> or an <span class="nt">ArgumentList</span>, followed by a comma, followed by an <span
+ class="nt">AssignmentExpression</span>. This definition of <span class="nt">ArgumentList</span> is recursive, that is, it is
+ defined in terms of itself. The result is that an <span class="nt">ArgumentList</span> may contain any positive number of
+ arguments, separated by commas, where each argument expression is an <span class="nt">AssignmentExpression</span>. Such
+ recursive definitions of nonterminals are common.</p>
+
+ <p>The subscripted suffix &ldquo;<sub>opt</sub>&rdquo;, which may appear after a terminal or nonterminal, indicates an
+ optional symbol. The alternative containing the optional symbol actually specifies two right-hand sides, one that omits the
+ optional element and one that includes it. This means that:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">VariableDeclaration</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">BindingIdentifier</span> <span class="nt">Initializer</span><sub class="g-opt">opt</sub></div>
+ </div>
+
+ <p>is a convenient abbreviation for:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">VariableDeclaration</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">BindingIdentifier</span></div>
+ <div class="rhs"><span class="nt">BindingIdentifier</span> <span class="nt">Initializer</span></div>
+ </div>
+
+ <p>and that:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">IterationStatement</span> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">for</code> <code class="t">(</code> <span class="nt">LexicalDeclaration</span> <span class="nt">Expression</span><sub class="g-opt">opt</sub> <code class="t">;</code> <span class="nt">Expression</span><sub class="g-opt">opt</sub> <code class="t">)</code> <span class="nt">Statement</span></div>
+ </div>
+
+ <p>is a convenient abbreviation for:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">IterationStatement</span> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">for</code> <code class="t">(</code> <span class="nt">LexicalDeclaration</span> <code class="t">;</code> <span class="nt">Expression</span><sub class="g-opt">opt</sub> <code class="t">)</code> <span class="nt">Statement</span></div>
+ <div class="rhs"><code class="t">for</code> <code class="t">(</code> <span class="nt">LexicalDeclaration</span> <span class="nt">Expression</span> <code class="t">;</code> <span class="nt">Expression</span><sub class="g-opt">opt</sub> <code class="t">)</code> <span class="nt">Statement</span></div>
+ </div>
+
+ <p>which in turn is an abbreviation for:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">IterationStatement</span> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">for</code> <code class="t">(</code> <span class="nt">LexicalDeclaration</span> <code class="t">;</code> <code class="t">)</code> <span class="nt">Statement</span></div>
+ <div class="rhs"><code class="t">for</code> <code class="t">(</code> <span class="nt">LexicalDeclaration</span> <code class="t">;</code> <span class="nt">Expression</span> <code class="t">)</code> <span class="nt">Statement</span></div>
+ <div class="rhs"><code class="t">for</code> <code class="t">(</code> <span class="nt">LexicalDeclaration</span> <span class="nt">Expression</span> <code class="t">;</code> <code class="t">)</code> <span class="nt">Statement</span></div>
+ <div class="rhs"><code class="t">for</code> <code class="t">(</code> <span class="nt">LexicalDeclaration</span> <span class="nt">Expression</span> <code class="t">;</code> <span class="nt">Expression</span> <code class="t">)</code> <span class="nt">Statement</span></div>
+ </div>
+
+ <p>so, in this example, the nonterminal <span class="nt">IterationStatement</span> actually has four alternative right-hand
+ sides.</p>
+
+ <p>A production may be parameterized by a subscripted annotation of the form &ldquo;<sub>[parameters]</sub>&rdquo;, which
+ may appear as a suffix to the nonterminal symbol defined by the production. &ldquo;<sub>parameters</sub>&rdquo; may be
+ either a single name or a comma separated list of names. A parameterized production is shorthand for a set of productions
+ defining all combinations of the parameter names, preceded by an underscore, appended to the parameterized nonterminal
+ symbol. This means that:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">StatementList</span><sub class="g-params">[Return]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">ReturnStatement</span></div>
+ <div class="rhs"><span class="nt">ExpressionStatement</span></div>
+ </div>
+
+ <p>is a convenient abbreviation for:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">StatementList</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">ReturnStatement</span></div>
+ <div class="rhs"><span class="nt">ExpressionStatement</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">StatementList_Return</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">ReturnStatement</span></div>
+ <div class="rhs"><span class="nt">ExpressionStatement</span></div>
+ </div>
+
+ <p>and that:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">StatementList</span><sub class="g-params">[Return, In]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">ReturnStatement</span></div>
+ <div class="rhs"><span class="nt">ExpressionStatement</span></div>
+ </div>
+
+ <p>is an abbreviation for:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">StatementList</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">ReturnStatement</span></div>
+ <div class="rhs"><span class="nt">ExpressionStatement</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">StatementList_Return</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">ReturnStatement</span></div>
+ <div class="rhs"><span class="nt">ExpressionStatement</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">StatementList_In</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">ReturnStatement</span></div>
+ <div class="rhs"><span class="nt">ExpressionStatement</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">StatementList_Return_In</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">ReturnStatement</span></div>
+ <div class="rhs"><span class="nt">ExpressionStatement</span></div>
+ </div>
+
+ <p>Multiple parameters produce a combinatory number of productions, not all of which are necessarily referenced in a
+ complete grammar.</p>
+
+ <p>References to nonterminals on the right-hand side of a production can also be parameterized. For example:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">StatementList</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">ReturnStatement</span></div>
+ <div class="rhs"><span class="nt">ExpressionStatement</span><sub class="g-params">[In]</sub></div>
+ </div>
+
+ <p>is equivalent to saying:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">StatementList</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">ReturnStatement</span></div>
+ <div class="rhs"><span class="nt">ExpressionStatement_In</span></div>
+ </div>
+
+ <p>A nonterminal reference may have both a parameter list and an &ldquo;<sub>opt</sub>&rdquo; suffix. For example:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">VariableDeclaration</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">BindingIdentifier</span> <span class="nt">Initializer</span><sub class="g-params">[In]</sub><sub class="g-opt">opt</sub></div>
+ </div>
+
+ <p>is an abbreviation for:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">VariableDeclaration</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">BindingIdentifier</span></div>
+ <div class="rhs"><span class="nt">BindingIdentifier</span> <span class="nt">Initializer_In</span></div>
+ </div>
+
+ <p>Prefixing a parameter name with &ldquo;<sub>?</sub>&rdquo; on a right-hand side nonterminal reference makes that
+ parameter value dependent upon the occurrence of the parameter name on the reference to the current production&rsquo;s
+ left-hand side symbol. For example:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">VariableDeclaration</span><sub class="g-params">[In]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">BindingIdentifier</span> <span class="nt">Initializer</span><sub class="g-params">[?In]</sub></div>
+ </div>
+
+ <p>is an abbreviation for:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">VariableDeclaration</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">BindingIdentifier</span> <span class="nt">Initializer</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">VariableDeclaration_In</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">BindingIdentifier</span> <span class="nt">Initializer_In</span></div>
+ </div>
+
+ <p>If a right-hand side alternative is prefixed with &ldquo;[+parameter]&rdquo; that alternative is only available if the
+ named parameter was used in referencing the production&rsquo;s nonterminal symbol. If a right-hand side alternative is
+ prefixed with &ldquo;[~parameter]&rdquo; that alternative is only available if the named parameter was <i>not</i> used in
+ referencing the production&rsquo;s nonterminal symbol. This means that:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">StatementList</span><sub class="g-params">[Return]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><span class="grhsannot">[+Return]</span> <span class="nt">ReturnStatement</span></div>
+ <div class="rhs"><span class="nt">ExpressionStatement</span></div>
+ </div>
+
+ <p>is an abbreviation for:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">StatementList</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">ExpressionStatement</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">StatementList_Return</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">ReturnStatement</span></div>
+ <div class="rhs"><span class="nt">ExpressionStatement</span></div>
+ </div>
+
+ <p>and that</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">StatementList</span><sub class="g-params">[Return]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><span class="grhsannot">[~Return]</span> <span class="nt">ReturnStatement</span></div>
+ <div class="rhs"><span class="nt">ExpressionStatement</span></div>
+ </div>
+
+ <p>is an abbreviation for:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">StatementList</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">ReturnStatement</span></div>
+ <div class="rhs"><span class="nt">ExpressionStatement</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">StatementList_Return</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">ExpressionStatement</span></div>
+ </div>
+
+ <p>When the words &ldquo;<b>one of</b>&rdquo; follow the colon(s) in a grammar definition, they signify that each of the
+ terminal symbols on the following line or lines is an alternative definition. For example, the lexical grammar for
+ ECMAScript contains the production:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">NonZeroDigit</span> <span class="geq">::</span> <span class="grhsmod">one of</span></div>
+ <div class="rhs"><code class="t">1</code> <code class="t">2</code> <code class="t">3</code> <code class="t">4</code> <code class="t">5</code> <code class="t">6</code> <code class="t">7</code> <code class="t">8</code> <code class="t">9</code></div>
+ </div>
+
+ <p>which is merely a convenient abbreviation for:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">NonZeroDigit</span> <span class="geq">::</span></div>
+ <div class="rhs"><code class="t">1</code></div>
+ <div class="rhs"><code class="t">2</code></div>
+ <div class="rhs"><code class="t">3</code></div>
+ <div class="rhs"><code class="t">4</code></div>
+ <div class="rhs"><code class="t">5</code></div>
+ <div class="rhs"><code class="t">6</code></div>
+ <div class="rhs"><code class="t">7</code></div>
+ <div class="rhs"><code class="t">8</code></div>
+ <div class="rhs"><code class="t">9</code></div>
+ </div>
+
+ <p>If the phrase &ldquo;[empty]&rdquo; appears as the right-hand side of a production, it indicates that the production's
+ right-hand side contains no terminals or nonterminals.</p>
+
+ <p>If the phrase &ldquo;[lookahead &notin; <var>set</var>]&rdquo; appears in the right-hand side of a production, it
+ indicates that the production may not be used if the immediately following input token is a member of the given
+ <var>set</var>. The <var>set</var> can be written as a list of terminals enclosed in curly brackets. For convenience, the
+ set can also be written as a nonterminal, in which case it represents the set of all terminals to which that nonterminal
+ could expand. If the <var>set</var> consists of a single terminal the phrase &ldquo;[lookahead &ne;
+ <var>terminal</var>]&rdquo; may be used.</p>
+
+ <p>For example, given the definitions</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">DecimalDigit</span> <span class="geq">::</span> <span class="grhsmod">one of</span></div>
+ <div class="rhs"><code class="t">0</code> <code class="t">1</code> <code class="t">2</code> <code class="t">3</code> <code class="t">4</code> <code class="t">5</code> <code class="t">6</code> <code class="t">7</code> <code class="t">8</code> <code class="t">9</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">DecimalDigits</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">DecimalDigit</span></div>
+ <div class="rhs"><span class="nt">DecimalDigits</span> <span class="nt">DecimalDigit</span></div>
+ </div>
+
+ <p>the definition</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">LookaheadExample</span> <span class="geq">::</span></div>
+ <div class="rhs"><code class="t">n</code> <span class="grhsannot">[lookahead &notin; {<code class="t">1</code>, <code class="t">3</code>, <code class="t">5</code>, <code class="t">7</code>, <code class="t">9</code>}]</span> <span class="nt">DecimalDigits</span></div>
+ <div class="rhs"><span class="nt">DecimalDigit</span> <span class="grhsannot">[lookahead &notin; <span class="nt">DecimalDigit</span>]</span></div>
+ </div>
+
+ <p>matches either the letter <code>n</code> followed by one or more decimal digits the first of which is even, or a decimal
+ digit not followed by another decimal digit.</p>
+
+ <p>If the phrase &ldquo;[no <span class="nt">LineTerminator</span> here]&rdquo; appears in the right-hand side of a
+ production of the syntactic grammar, it indicates that the production is <i>a restricted production</i>: it may not be used
+ if a <span class="nt">LineTerminator</span> occurs in the input stream at the indicated position. For example, the
+ production:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">ThrowStatement</span> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">throw</code> <span class="grhsannot">[no <span class="nt">LineTerminator</span> here]</span> <span class="nt">Expression</span> <code class="t">;</code></div>
+ </div>
+
+ <p>indicates that the production may not be used if a <span class="nt">LineTerminator</span> occurs in the script between
+ the <code>throw</code> token and the <span class="nt">Expression</span>.</p>
+
+ <p>Unless the presence of a <span class="nt">LineTerminator</span> is forbidden by a restricted production, any number of
+ occurrences of <span class="nt">LineTerminator</span> may appear between any two consecutive tokens in the stream of input
+ elements without affecting the syntactic acceptability of the script.</p>
+
+ <p>When an alternative in a production of the lexical grammar or the numeric string grammar appears to be a multi-code point
+ token, it represents the sequence of code points that would make up such a token.</p>
+
+ <p>The right-hand side of a production may specify that certain expansions are not permitted by using the phrase
+ &ldquo;<b>but not</b>&rdquo; and then indicating the expansions to be excluded. For example, the production:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">Identifier</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">IdentifierName</span> <span class="grhsmod">but not</span> <span class="nt">ReservedWord</span></div>
+ </div>
+
+ <p>means that the nonterminal <span class="nt">Identifier</span> may be replaced by any sequence of code points that could
+ replace <span class="nt">IdentifierName</span> provided that the same sequence of code points could not replace <span
+ class="nt">ReservedWord</span>.</p>
+
+ <p>Finally, a few nonterminal symbols are described by a descriptive phrase in sans-serif type in cases where it would be
+ impractical to list all the alternatives:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">SourceCharacter</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="gprose">any Unicode code point</span></div>
+ </div>
+ </section>
+ </section>
+
+ <section id="sec-algorithm-conventions">
+ <h1><span class="secnum" id="sec-5.2"><a href="#sec-algorithm-conventions" title="link to this section">5.2</a></span>
+ Algorithm Conventions</h1>
+
+ <p>The specification often uses a numbered list to specify steps in an algorithm. These algorithms are used to precisely
+ specify the required semantics of ECMAScript language constructs. The algorithms are not intended to imply the use of any
+ specific implementation technique. In practice, there may be more efficient algorithms available to implement a given
+ feature.</p>
+
+ <p>Algorithms may be explicitly parameterized, in which case the names and usage of the parameters must be provided as part of
+ the algorithm&rsquo;s definition. In order to facilitate their use in multiple parts of this specification, some algorithms,
+ called <i>abstract</i> <i>operations</i>, are named and written in parameterized functional form so that they may be
+ referenced by name from within other algorithms. Abstract operations are typically referenced using a functional application
+ style such as <span style="font-family: Times New Roman">operationName(<i>arg1</i>, <i>arg2</i>)</span>. Some abstract
+ operations are treated as polymorphically dispatched methods of class-like specification abstractions. Such method-like
+ abstract operations are typically referenced using a method application style such as <span style="font-family: Times New
+ Roman"><i>someValue</i>.operationName(<i>arg1</i>, <i>arg2</i>)</span>.</p>
+
+ <p>Algorithms may be associated with productions of one of the ECMAScript grammars. A production that has multiple alternative
+ definitions will typically have a distinct algorithm for each alternative. When an algorithm is associated with a grammar
+ production, it may reference the terminal and nonterminal symbols of the production alternative as if they were parameters of
+ the algorithm. When used in this manner, nonterminal symbols refer to the actual alternative definition that is matched when
+ parsing the source text.</p>
+
+ <p>When an algorithm is associated with a production alternative, the alternative is typically shown without any &ldquo;[
+ ]&rdquo; grammar annotations. Such annotations should only affect the syntactic recognition of the alternative and have no
+ effect on the associated semantics for the alternative.</p>
+
+ <p>Unless explicitly specified otherwise, all <a href="#sec-context-free-grammars">chain productions</a> have an implicit
+ definition for every algorithm that might be applied to that production&rsquo;s left-hand side nonterminal. The implicit
+ definition simply reapplies the same algorithm name with the same parameters, if any, to the <a
+ href="#sec-context-free-grammars">chain production</a>&rsquo;s sole right-hand side nonterminal and then returns the result.
+ For example, assume there is a production:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">Block</span> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">{</code> <span class="nt">StatementList</span> <code class="t">}</code></div>
+ </div>
+
+ <p>but there is no corresponding Evaluation algorithm that is explicitly specified for that production. If in some algorithm
+ there is a statement of the form: &ldquo;<span style="font-family: Times New Roman">Return the result of evaluating
+ <i>Block</i></span>&rdquo; it is implicit that an Evaluation algorithm exists of the form:</p>
+
+ <p><b>Runtime Semantics: Evaluation</b></p>
+
+ <div class="gp prod"><span class="nt">Block</span> <span class="geq">:</span> <code class="t">{</code> <span class="nt">StatementList</span> <code class="t">}</code></div>
+ <ol class="proc">
+ <li>Return the result of evaluating <i>StatementList</i>.</li>
+ </ol>
+
+ <p>For clarity of expression, algorithm steps may be subdivided into sequential substeps. Substeps are indented and may
+ themselves be further divided into indented substeps. Outline numbering conventions are used to identify substeps with the
+ first level of substeps labelled with lower case alphabetic characters and the second level of substeps labelled with lower
+ case roman numerals. If more than three levels are required these rules repeat with the fourth level using numeric labels. For
+ example:</p>
+
+ <ol class="proc">
+ <li>Top-level step
+ <ol class="block">
+ <li>Substep.</li>
+ <li>Substep.
+ <ol class="block">
+ <li>Subsubstep.
+ <ol class="block">
+ <li>Subsubsubstep
+ <ol class="block">
+ <li>Subsubsubsubstep
+ <ol class="block">
+ <li>Subsubsubsubsubstep</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+
+ <p>A step or substep may be written as an &ldquo;if&rdquo; predicate that conditions its substeps. In this case, the substeps
+ are only applied if the predicate is true. If a step or substep begins with the word &ldquo;else&rdquo;, it is a predicate
+ that is the negation of the preceding &ldquo;if&rdquo; predicate step at the same level.</p>
+
+ <p>A step may specify the iterative application of its substeps.</p>
+
+ <p>A step that begins with &ldquo;Assert:&rdquo; asserts an invariant condition of its algorithm. Such assertions are used to
+ make explicit algorithmic invariants that would otherwise be implicit. Such assertions add no additional semantic requirements
+ and hence need not be checked by an implementation. They are used simply to clarify algorithms.</p>
+
+ <p>Mathematical operations such as addition, subtraction, negation, multiplication, division, and the mathematical functions
+ defined later in this clause should always be understood as computing exact mathematical results on mathematical real numbers,
+ which unless otherwise noted do not include infinities and do not include a negative zero that is distinguished from positive
+ zero. Algorithms in this standard that model floating-point arithmetic include explicit steps, where necessary, to handle
+ infinities and signed zero and to perform rounding. If a mathematical operation or function is applied to a floating-point
+ number, it should be understood as being applied to the exact mathematical value represented by that floating-point number;
+ such a floating-point number must be finite, and if it is <span class="value">+0</span> or <span class="value">&minus;0</span>
+ then the corresponding mathematical value is simply <span class="value">0</span>.</p>
+
+ <p>The mathematical function <span style="font-family: Times New Roman">abs(<i>x</i>)</span> produces the absolute value of
+ <var>x</var>, which is <span style="font-family: Times New Roman">&minus;<i>x</i></span> if <var>x</var> is negative (less
+ than zero) and otherwise is <var>x</var> itself.</p>
+
+ <p>The mathematical function <span style="font-family: Times New Roman">sign(<i>x</i>)</span> produces <span
+ style="font-family: Times New Roman">1</span> if <var>x</var> is positive and <span style="font-family: Times New
+ Roman">&minus;1</span> if <var>x</var> is negative. The sign function is not used in this standard for cases when <var>x</var>
+ is zero.</p>
+
+ <p>The mathematical function <span style="font-family: Times New Roman">min(<i>x</i><sub>1</sub>,</span> <span
+ style="font-family: Times New Roman"><i>x</i><sub>2</sub>, ..., <i>x</i><sub>n</sub>)</span> produces the mathematically
+ smallest of <span style="font-family: Times New Roman"><i>x</i><sub>1</sub></span> through <span style="font-family: Times New
+ Roman"><i>x</i><sub>n</sub></span>. The mathematical function <span style="font-family: Times New
+ Roman">max(<i>x</i><sub>1</sub>,</span> <span style="font-family: Times New Roman"><i>x</i><sub>2</sub>, ...,
+ <i>x</i><sub>n</sub>)</span> produces the mathematically largest of <span style="font-family: Times New
+ Roman"><i>x</i><sub>1</sub></span> through <span style="font-family: Times New Roman"><i>x</i><sub>n</sub></span>. The domain
+ and range of these mathematical functions include +<b>&infin;</b> and <b>&minus;&infin;</b>.</p>
+
+ <p>The notation &ldquo;<span style="font-family: Times New Roman"><i>x</i> modulo <i>y</i></span>&rdquo; (<var>y</var> must be
+ finite and nonzero) computes a value <var>k</var> of the same sign as <var>y</var> (or zero) such that <span
+ style="font-family: Times New Roman">abs(<i>k</i>) &lt; abs(<i>y</i>) and <i>x</i>&minus;<i>k</i> = <i>q</i></span> <span
+ style="font-family: Times New Roman">&times;</span> <var>y</var> for some integer <var>q</var>.</p>
+
+ <p>The mathematical function <span style="font-family: Times New Roman">floor(<i>x</i>)</span> produces the largest integer
+ (closest to positive infinity) that is not larger than <var>x</var>.</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> floor(<i>x</i>) = <i>x</i>&minus;(<i>x</i> modulo 1).</p>
+ </div>
+ </section>
+
+ <section id="sec-static-semantic-rules">
+ <h1><span class="secnum" id="sec-5.3"><a href="#sec-static-semantic-rules" title="link to this section">5.3</a></span> Static
+ Semantic Rules</h1>
+
+ <p>Context-free grammars are not sufficiently powerful to express all the rules that define whether a stream of input elements
+ form a valid ECMAScript <span class="nt">Script</span> or <span class="nt">Module</span> that may be evaluated. In some
+ situations additional rules are needed that may be expressed using either ECMAScript algorithm conventions or prose
+ requirements. Such rules are always associated with a production of a grammar and are called the <i>static semantics</i> of
+ the production.</p>
+
+ <p>Static Semantic Rules have names and typically are defined using an algorithm. Named Static Semantic Rules are associated
+ with grammar productions and a production that has multiple alternative definitions will typically have for each alternative a
+ distinct algorithm for each applicable named static semantic rule.</p>
+
+ <p>Unless otherwise specified every grammar production alternative in this specification implicitly has a definition for a
+ static semantic rule named <span style="font-family: Times New Roman">Contains</span> which takes an argument named
+ <var>symbol</var> whose value is a terminal or nonterminal of the grammar that includes the associated production. The default
+ definition of <span style="font-family: Times New Roman">Contains</span> is:</p>
+
+ <ol class="proc">
+ <li>For each terminal and nonterminal grammar symbol, <i>sym</i>, in the definition of this production do
+ <ol class="block">
+ <li>If <i>sym</i> is the same grammar symbol as <i>symbol</i>, return <b>true</b>.</li>
+ <li>If <i>sym</i> is a nonterminal, then
+ <ol class="block">
+ <li>Let <i>contained</i> be the result of <i>sym</i> Contains <i>symbol</i>.</li>
+ <li>If <i>contained</i> is <b>true</b>, return <b>true</b>.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Return <b>false</b>.</li>
+ </ol>
+
+ <p>The above definition is explicitly over-ridden for specific productions.</p>
+
+ <p>A special kind of static semantic rule is an Early Error Rule. Early error rules define early error conditions (see <a
+ href="#sec-error-handling-and-language-extensions">clause 16</a>) that are associated with specific grammar productions.
+ Evaluation of most early error rules are not explicitly invoked within the algorithms of this specification. A conforming
+ implementation must, prior to the first evaluation of a <span class="nt">Script</span>, validate all of the early error rules
+ of the productions used to parse that <span class="nt">Script</span>. If any of the early error rules are violated the <span
+ class="nt">Script</span> is invalid and cannot be evaluated.</p>
+ </section>
+</section>
+
+<section id="sec-ecmascript-data-types-and-values">
+ <div class="front">
+ <h1><span class="secnum" id="sec-6"><a href="#sec-ecmascript-data-types-and-values" title="link to this section">6</a></span>
+ ECMAScript Data Types and Values</h1>
+
+ <p>Algorithms within this specification manipulate values each of which has an associated type. The possible value types are
+ exactly those defined in this clause. Types are further subclassified into ECMAScript language types and specification
+ types.</p>
+
+ <p>Within this specification, the notation &ldquo;<span style="font-family: Times New Roman">Type(<i>x</i>)</span>&rdquo; is
+ used as shorthand for &ldquo;<span style="font-family: Times New Roman">the type of <i>x</i></span>&rdquo; where &ldquo;<span
+ style="font-family: Times New Roman">type</span>&rdquo; refers to the ECMAScript language and specification types defined in
+ this clause. When the term &ldquo;empty&rdquo; is used as if it was naming a value, it is equivalent to saying &ldquo;no value
+ of any type&rdquo;.</p>
+ </div>
+
+ <section id="sec-ecmascript-language-types">
+ <div class="front">
+ <h1><span class="secnum" id="sec-6.1"><a href="#sec-ecmascript-language-types" title="link to this section">6.1</a></span>
+ ECMAScript Language Types</h1>
+
+ <p>An ECMAScript language type corresponds to values that are directly manipulated by an ECMAScript programmer using the
+ ECMAScript language. The ECMAScript language types are Undefined, Null, Boolean, String, Symbol, Number, and Object. An
+ ECMAScript language value is a value that is characterized by an ECMAScript language type.</p>
+ </div>
+
+ <section id="sec-ecmascript-language-types-undefined-type">
+ <h1><span class="secnum" id="sec-6.1.1"><a href="#sec-ecmascript-language-types-undefined-type"
+ title="link to this section">6.1.1</a></span> The Undefined Type</h1>
+
+ <p>The Undefined type has exactly one value, called <b>undefined</b>. Any variable that has not been assigned a value has
+ the value <b>undefined</b>.</p>
+ </section>
+
+ <section id="sec-ecmascript-language-types-null-type">
+ <h1><span class="secnum" id="sec-6.1.2"><a href="#sec-ecmascript-language-types-null-type"
+ title="link to this section">6.1.2</a></span> The Null Type</h1>
+
+ <p>The Null type has exactly one value, called <b>null</b>.</p>
+ </section>
+
+ <section id="sec-ecmascript-language-types-boolean-type">
+ <h1><span class="secnum" id="sec-6.1.3"><a href="#sec-ecmascript-language-types-boolean-type"
+ title="link to this section">6.1.3</a></span> The Boolean Type</h1>
+
+ <p>The Boolean type represents a logical entity having two values, called <b>true</b> and <b>false</b>.</p>
+ </section>
+
+ <section id="sec-ecmascript-language-types-string-type">
+ <h1><span class="secnum" id="sec-6.1.4"><a href="#sec-ecmascript-language-types-string-type"
+ title="link to this section">6.1.4</a></span> The String Type</h1>
+
+ <p>The String type is the set of all finite ordered sequences of zero or more 16-bit unsigned integer values
+ (&ldquo;elements&rdquo;). The String type is generally used to represent textual data in a running ECMAScript program, in
+ which case each element in the String is treated as a UTF-16 code unit value. Each element is regarded as occupying a
+ position within the sequence. These positions are indexed with nonnegative integers. The first element (if any) is at index
+ 0, the next element (if any) at index 1, and so on. The length of a String is the number of elements (i.e., 16-bit values)
+ within it. The empty String has length zero and therefore contains no elements.</p>
+
+ <p>Where ECMAScript operations interpret String values, each element is interpreted as a single UTF-16 code unit. However,
+ ECMAScript does not place any restrictions or requirements on the sequence of code units in a String value, so they may be
+ ill-formed when interpreted as UTF-16 code unit sequences. Operations that do not interpret String contents treat them as
+ sequences of undifferentiated 16-bit unsigned integers. The function <code><a
+ href="#sec-string.prototype.normalize">String.prototype.normalize</a></code> (<a href="#sec-string.prototype.normalize">see
+ 21.1.3.12</a>) can be used to explicitly normalize a string value. <code><a
+ href="#sec-string.prototype.localecompare">String.prototype.localeCompare</a></code> (<a
+ href="#sec-string.prototype.localecompare">see 21.1.3.10</a>) internally normalizes strings values, but no other operations
+ implicitly normalize the strings upon which they operate. Only operations that are explicitly specified to be language or
+ locale sensitive produce language-sensitive results.</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> The rationale behind this design was to keep the implementation of Strings as simple and
+ high-performing as possible. If ECMAScript source text is in Normalized Form C, string literals are guaranteed to also be
+ normalized, as long as they do not contain any Unicode escape sequences.</p>
+ </div>
+
+ <p>Some operations interpret String contents as UTF-16 encoded Unicode code points. In that case the interpretation is:</p>
+
+ <ul>
+ <li>
+ <p>A code unit in the range <span style="font-family: Times New Roman">0</span> to <span style="font-family: Times New
+ Roman">0xD7FF</span> or in the range <span style="font-family: Times New Roman">0xE000</span> to <span
+ style="font-family: Times New Roman">0xFFFF</span> is interpreted as a code point with the same value.</p>
+ </li>
+
+ <li>
+ <p>A sequence of two code units, where the first code unit <var>c1</var> is in the range <span style="font-family: Times
+ New Roman">0xD800</span> to <span style="font-family: Times New Roman">0xDBFF</span> and the second code unit
+ <var>c2</var> is in the range <span style="font-family: Times New Roman">0xDC00</span> to <span style="font-family:
+ Times New Roman">0xDFFF</span>, is a surrogate pair and is interpreted as a code point with the value (<var>c1</var> -
+ <span style="font-family: Times New Roman">0xD800</span>) &times; <span style="font-family: Times New
+ Roman">0x400</span> + (<var>c2</var> &ndash; <span style="font-family: Times New Roman">0xDC00</span>) + <span
+ style="font-family: Times New Roman">0x10000</span>. (See <a href="#sec-utf16decode">10.1.2</a>)</p>
+ </li>
+
+ <li>
+ <p>A code unit that is in the range <span style="font-family: Times New Roman">0xD800</span> to <span
+ style="font-family: Times New Roman">0xDFFF</span>, but is not part of a surrogate pair, is interpreted as a code point
+ with the same value.</p>
+ </li>
+ </ul>
+ </section>
+
+ <section id="sec-ecmascript-language-types-symbol-type">
+ <div class="front">
+ <h1><span class="secnum" id="sec-6.1.5"><a href="#sec-ecmascript-language-types-symbol-type"
+ title="link to this section">6.1.5</a></span> The Symbol Type</h1>
+
+ <p>The Symbol type is the set of all non-String values that may be used as the key of an Object property (<a
+ href="#sec-object-type">6.1.7</a>).</p>
+
+ <p>Each possible Symbol value is unique and immutable.</p>
+
+ <p>Each Symbol value immutably holds an associated value called [[Description]] that is either <span
+ class="value">undefined</span> or a String value.</p>
+ </div>
+
+ <section id="sec-well-known-symbols">
+ <h1><span class="secnum" id="sec-6.1.5.1"><a href="#sec-well-known-symbols"
+ title="link to this section">6.1.5.1</a></span> Well-Known Symbols</h1>
+
+ <p>Well-known symbols are built-in Symbol values that are explicitly referenced by algorithms of this specification. They
+ are typically used as the keys of properties whose values serve as extension points of a specification algorithm. Unless
+ otherwise specified, well-known symbols values are shared by all Code Realms (<a href="#sec-code-realms">8.2</a>).</p>
+
+ <p>Within this specification a well-known symbol is referred to by using a notation of the form @@name, where
+ &ldquo;name&rdquo; is one of the values listed in <a href="#table-1">Table 1</a>.</p>
+
+ <figure>
+ <figcaption><span id="table-1">Table 1</span>&mdash; Well-known Symbols</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Specification Name</th>
+ <th>[[Description]]</th>
+ <th>Value and Purpose</th>
+ </tr>
+ <tr>
+ <td>@@hasInstance</td>
+ <td><code>"Symbol.hasInstance"</code></td>
+ <td>A method that determines if a constructor object recognizes an object as one of the constructor&rsquo;s instances. Called by the semantics of the <code>instanceof</code> operator.</td>
+ </tr>
+ <tr>
+ <td>@@isConcatSpreadable</td>
+ <td><code>"Symbol.isConcatSpreadable"</code></td>
+ <td>A Boolean valued property that if true indicates that an object should be flattened to its array elements by <code><a href="#sec-array.prototype.concat">Array.prototype.concat</a></code>.</td>
+ </tr>
+ <tr>
+ <td>@@iterator</td>
+ <td><code>"Symbol.iterator"</code></td>
+ <td>A method that returns the default Iterator for an object. Called by the semantics of the for-of statement.</td>
+ </tr>
+ <tr>
+ <td>@@match</td>
+ <td><code>"Symbol.match"</code></td>
+ <td>A regular expression method that matches the regular expression against a string. Called by the <code><a href="#sec-string.prototype.match">String.prototype.match</a></code> method.</td>
+ </tr>
+ <tr>
+ <td>@@replace</td>
+ <td><code>"Symbol.replace"</code></td>
+ <td>A regular expression method that replaces matched substrings of a string. Called by the <code><a href="#sec-string.prototype.replace">String.prototype.replace</a></code> method.</td>
+ </tr>
+ <tr>
+ <td>@@search</td>
+ <td><code>"Symbol.search"</code></td>
+ <td>A regular expression method that returns the index within a string that matches the regular expression. Called by the <code><a href="#sec-string.prototype.search">String.prototype.search</a></code> method.</td>
+ </tr>
+ <tr>
+ <td>@@species</td>
+ <td><code>"Symbol.species"</code></td>
+ <td>A function valued property that is the constructor function that is used to create derived objects.</td>
+ </tr>
+ <tr>
+ <td>@@split</td>
+ <td><code>"Symbol.split"</code></td>
+ <td>A regular expression method that splits a string at the indices that match the regular expression. Called by the <code><a href="#sec-string.prototype.split">String.prototype.split</a></code> method.</td>
+ </tr>
+ <tr>
+ <td>@@toPrimitive</td>
+ <td><code>"Symbol.toPrimitive"</code></td>
+ <td>A method that converts an object to a corresponding primitive value. Called by the <a href="#sec-toprimitive">ToPrimitive</a> abstract operation.</td>
+ </tr>
+ <tr>
+ <td>@@toStringTag</td>
+ <td><code>"Symbol.toStringTag"</code></td>
+ <td>A String valued property that is used in the creation of the default string description of an object. Accessed by the built-in method <code><a href="#sec-object.prototype.tostring">Object.prototype.toString</a></code>.</td>
+ </tr>
+ <tr>
+ <td>@@unscopables</td>
+ <td><code>"Symbol.unscopables"</code></td>
+ <td>An object valued property whose own property names are property names that are excluded from the <code>with</code> environment bindings of the associated object.</td>
+ </tr>
+ </table>
+ </figure>
+ </section>
+ </section>
+
+ <section id="sec-ecmascript-language-types-number-type">
+ <h1><span class="secnum" id="sec-6.1.6"><a href="#sec-ecmascript-language-types-number-type"
+ title="link to this section">6.1.6</a></span> The Number Type</h1>
+
+ <p>The Number type has exactly <span style="font-family: Times New Roman">18437736874454810627</span> (that is, <span
+ style="font-family: Times New Roman">2<sup>64</sup>&minus;2<sup>53</sup>+3</span>) values, representing the double-precision
+ 64-bit format IEEE 754 values as specified in the IEEE Standard for Binary Floating-Point Arithmetic, except that the <span
+ style="font-family: Times New Roman">9007199254740990</span> (that is, <span style="font-family: Times New
+ Roman">2<sup>53</sup>&minus;2</span>) distinct &ldquo;Not-a-Number&rdquo; values of the IEEE Standard are represented in
+ ECMAScript as a single special <b>NaN</b> value. (Note that the <b>NaN</b> value is produced by the program expression
+ <code>NaN</code>.) In some implementations, external code might be able to detect a difference between various Not-a-Number
+ values, but such behaviour is implementation-dependent; to ECMAScript code, all NaN values are indistinguishable from each
+ other.</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> The bit pattern that might be observed in an ArrayBuffer (<a
+ href="#sec-arraybuffer-objects">see 24.1</a>) after a Number value has been stored into it is not necessarily the same as
+ the internal representation of that Number value used by the ECMAScript implementation.</p>
+ </div>
+
+ <p>There are two other special values, called <b>positive Infinity</b> and <b>negative Infinity</b>. For brevity, these
+ values are also referred to for expository purposes by the symbols <span class="value">+&infin;</span> and <span
+ class="value">&minus;&infin;</span>, respectively. (Note that these two infinite Number values are produced by the program
+ expressions <code>+Infinity</code> (or simply <code>Infinity</code>) and <code>-Infinity</code>.)</p>
+
+ <p>The other <span style="font-family: Times New Roman">18437736874454810624</span> (that is, <span style="font-family:
+ Times New Roman">2<sup>64</sup>&minus;2<sup>53</sup></span>) values are called the finite numbers. Half of these are
+ positive numbers and half are negative numbers; for every finite positive Number value there is a corresponding negative
+ value having the same magnitude.</p>
+
+ <p>Note that there is both a <b>positive zero</b> and a <b>negative zero</b>. For brevity, these values are also referred to
+ for expository purposes by the symbols <span class="value">+0</span> and <span class="value">&minus;0</span>, respectively.
+ (Note that these two different zero Number values are produced by the program expressions <code>+0</code> (or simply
+ <code>0</code>) and <code>-0</code>.)</p>
+
+ <p>The <span style="font-family: Times New Roman">18437736874454810622</span> (that is, <span style="font-family: Times New
+ Roman">2<sup>64</sup>&minus;2<sup>53</sup>&minus;2</span>) finite nonzero values are of two kinds:</p>
+
+ <p><span style="font-family: Times New Roman">18428729675200069632</span> (that is, <span style="font-family: Times New
+ Roman">2<sup>64</sup>&minus;2<sup>54</sup></span>) of them are normalized, having the form</p>
+
+ <div class="math-display"><i>s</i> &times; <i>m</i> &times; 2<sup><i>e</i></sup></div>
+
+ <p>where <var>s</var> is <span style="font-family: Times New Roman">+1</span> or <span style="font-family: Times New
+ Roman">&minus;1</span>, <var>m</var> is a positive integer less than <span style="font-family: Times New
+ Roman">2<sup>53</sup></span> but not less than <span style="font-family: Times New Roman">2<sup>52</sup></span>, and
+ <var>e</var> is an integer ranging from <span style="font-family: Times New Roman">&minus;1074</span> to <span
+ style="font-family: Times New Roman">971</span>, inclusive.</p>
+
+ <p>The remaining <span style="font-family: Times New Roman">9007199254740990</span> (that is, <span style="font-family:
+ Times New Roman">2<sup>53</sup>&minus;2</span>) values are denormalized, having the form</p>
+
+ <div class="math-display"><i>s</i> &times; <i>m</i> &times; 2<sup><i>e</i></sup></div>
+
+ <p>where <var>s</var> is <span style="font-family: Times New Roman">+1</span> or <span style="font-family: Times New
+ Roman">&minus;1</span>, <var>m</var> is a positive integer less than <span style="font-family: Times New
+ Roman">2<sup>52</sup></span>, and <var>e</var> is <span style="font-family: Times New Roman">&minus;1074</span>.</p>
+
+ <p>Note that all the positive and negative integers whose magnitude is no greater than <span style="font-family: Times New
+ Roman">2<sup>53</sup></span> are representable in the Number type (indeed, the integer <span style="font-family: Times New
+ Roman">0</span> has two representations, <code>+0</code> and <code>-0</code>).</p>
+
+ <p>A finite number has an <i>odd significand</i> if it is nonzero and the integer <var>m</var> used to express it (in one of
+ the two forms shown above) is odd. Otherwise, it has an <i>even significand</i>.</p>
+
+ <p>In this specification, the phrase &ldquo;<span style="font-family: Times New Roman">the Number value for
+ <i>x</i></span>&rdquo; where <var>x</var> represents an exact nonzero real mathematical quantity (which might even be an
+ irrational number such as <span style="font-family: Times New Roman">&pi;</span>) means a Number value chosen in the
+ following manner. Consider the set of all finite values of the Number type, with <span class="value">&minus;0</span> removed
+ and with two additional values added to it that are not representable in the Number type, namely <span style="font-family:
+ Times New Roman">2<sup>1024</sup></span> (which is <span style="font-family: Times New Roman">+1 &times;
+ 2<sup>53</sup></span> <span style="font-family: Times New Roman">&times; 2<sup>971</sup></span>) and <span
+ style="font-family: Times New Roman">&minus;2<sup>1024</sup></span> (which is <span style="font-family: Times New
+ Roman">&minus;1 &times; 2<sup>53</sup></span> <span style="font-family: Times New Roman">&times; 2<sup>971</sup></span>).
+ Choose the member of this set that is closest in value to <var>x</var>. If two values of the set are equally close, then the
+ one with an even significand is chosen; for this purpose, the two extra values <span style="font-family: Times New
+ Roman">2<sup>1024</sup></span> and <span style="font-family: Times New Roman">&minus;2<sup>1024</sup></span> are considered
+ to have even significands. Finally, if <span style="font-family: Times New Roman">2<sup>1024</sup></span> was chosen,
+ replace it with <span class="value">+&infin;</span>; if <span style="font-family: Times New
+ Roman">&minus;2<sup>1024</sup></span> was chosen, replace it with <span class="value">&minus;&infin;</span>; if <span
+ class="value">+0</span> was chosen, replace it with <span class="value">&minus;0</span> if and only if <var>x</var> is less
+ than zero; any other chosen value is used unchanged. The result is the Number value for <var>x</var>. (This procedure
+ corresponds exactly to the behaviour of the IEEE 754 &ldquo;round to nearest, ties to even&rdquo; mode.)</p>
+
+ <p>Some ECMAScript operators deal only with integers in specific ranges such as <span style="font-family: Times New
+ Roman">&minus;2<sup>31</sup></span> through <span style="font-family: Times New Roman">2<sup>31</sup>&minus;1</span>,
+ inclusive, or in the range <span style="font-family: Times New Roman">0</span> through <span style="font-family: Times New
+ Roman">2<sup>16</sup>&minus;1</span>, inclusive. These operators accept any value of the Number type but first convert each
+ such value to an integer value in the expected range. See the descriptions of the numeric conversion operations in <a
+ href="#sec-type-conversion">7.1</a>.</p>
+ </section>
+
+ <section id="sec-object-type">
+ <div class="front">
+ <h1><span class="secnum" id="sec-6.1.7"><a href="#sec-object-type" title="link to this section">6.1.7</a></span> The
+ Object Type</h1>
+
+ <p>An Object is logically a collection of properties. Each property is either a data property, or an accessor
+ property:</p>
+
+ <ul>
+ <li>
+ <p>A <i>data property</i> associates a key value with an <a href="#sec-ecmascript-language-types">ECMAScript language
+ value</a> and a set of Boolean attributes.</p>
+ </li>
+
+ <li>
+ <p>An <i>accessor property</i> associates a key value with one or two accessor functions, and a set of Boolean
+ attributes. The accessor functions are used to store or retrieve an <a
+ href="#sec-ecmascript-language-types">ECMAScript language value</a> that is associated with the property.</p>
+ </li>
+ </ul>
+
+ <p>Properties are identified using key values. A property key value is either an ECMAScript String value or a Symbol
+ value. All String and Symbol values, including the empty string, are valid as property keys. A <i>property name</i> is a
+ property key that is a String value.</p>
+
+ <p>An <i>integer index</i> is a String-valued property key that is a canonical numeric String (<a
+ href="#sec-canonicalnumericindexstring">see 7.1.16</a>) and whose numeric value is either <span style="font-family: Times
+ New Roman">+0</span> or a positive integer &le; 2<sup>53</sup>&minus;1. An <i>array index</i> is an integer index whose
+ numeric value <var>i</var> is in the range <span style="font-family: Times New Roman">+0 &le; <i>i</i></span> <span
+ style="font-family: Times New Roman">&lt; 2<sup>32</sup>&minus;1.</span></p>
+
+ <p>Property keys are used to access properties and their values. There are two kinds of access for properties: <i>get</i>
+ and <i>set</i>, corresponding to value retrieval and assignment, respectively. The properties accessible via get and set
+ access includes both <i>own properties</i> that are a direct part of an object and <i>inherited properties</i> which are
+ provided by another associated object via a property inheritance relationship. Inherited properties may be either own or
+ inherited properties of the associated object. Each own property of an object must each have a key value that is distinct
+ from the key values of the other own properties of that object.</p>
+
+ <p>All objects are logically collections of properties, but there are multiple forms of objects that differ in their
+ semantics for accessing and manipulating their properties. O<i>rdinary objects</i> are the most common form of objects and
+ have the default object semantics. An <i>exotic object</i> is any form of object whose property semantics differ in any
+ way from the default semantics.</p>
+ </div>
+
+ <section id="sec-property-attributes">
+ <h1><span class="secnum" id="sec-6.1.7.1"><a href="#sec-property-attributes"
+ title="link to this section">6.1.7.1</a></span> Property Attributes</h1>
+
+ <p>Attributes are used in this specification to define and explain the state of Object properties. A data property
+ associates a key value with the attributes listed in <a href="#table-2">Table 2</a>.</p>
+
+ <figure>
+ <figcaption><span id="table-2">Table 2</span> &mdash; Attributes of a Data Property</figcaption>
+ <table class="real-table">
+ <tr>
+ <th style="border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid #000000; border-top: 1px solid black">Attribute Name</th>
+ <th style="border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid #000000; border-top: 1px solid black">Value Domain</th>
+ <th style="border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid #000000; border-top: 1px solid black">Description</th>
+ </tr>
+ <tr>
+ <td style="border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid black">[[Value]]</td>
+ <td style="border-bottom: 1px solid black; border-right: 1px solid black">Any <a href="#sec-ecmascript-language-types">ECMAScript language type</a></td>
+ <td style="border-bottom: 1px solid black; border-right: 1px solid black">The value retrieved by a get access of the property.</td>
+ </tr>
+ <tr>
+ <td style="border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid black">[[Writable]]</td>
+ <td style="border-bottom: 1px solid black; border-right: 1px solid black">Boolean</td>
+ <td style="border-bottom: 1px solid black; border-right: 1px solid black">If <b>false</b>, attempts by ECMAScript code to change the property&rsquo;s [[Value]] attribute using [[Set]] will not succeed.</td>
+ </tr>
+ <tr>
+ <td style="border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid black">[[Enumerable]]</td>
+ <td style="border-bottom: 1px solid black; border-right: 1px solid black">Boolean</td>
+ <td style="border-bottom: 1px solid black; border-right: 1px solid black">If <b>true</b>, the property will be enumerated by a for-in enumeration (<a href="#sec-for-in-and-for-of-statements">see 13.6.4</a>). Otherwise, the property is said to be non-enumerable.</td>
+ </tr>
+ <tr>
+ <td style="border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid black">[[Configurable]]</td>
+ <td style="border-bottom: 1px solid black; border-right: 1px solid black">Boolean</td>
+ <td style="border-bottom: 1px solid black; border-right: 1px solid black">If <b>false</b>, attempts to delete the property, change the property to be an accessor property, or change its attributes (other than [[Value]], or changing [[Writable]] to <b>false</b>) will fail.</td>
+ </tr>
+ </table>
+ </figure>
+
+ <p>An accessor property associates a key value with the attributes listed in <a href="#table-3">Table 3</a>.</p>
+
+ <figure>
+ <figcaption><span id="table-3">Table 3</span> &mdash; Attributes of an Accessor Property</figcaption>
+ <table class="real-table">
+ <tr>
+ <th style="border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid #000000; border-top: 1px solid black">Attribute Name</th>
+ <th style="border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid #000000; border-top: 1px solid black">Value Domain</th>
+ <th style="border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid #000000; border-top: 1px solid black">Description</th>
+ </tr>
+ <tr>
+ <td style="border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid #000000">[[Get]]</td>
+ <td style="border-bottom: 1px solid black; border-right: 1px solid black">Object <i>or</i> Undefined</td>
+ <td style="border-bottom: 1px solid black; border-right: 1px solid black">If the value is an Object it must be a function Object. The function&rsquo;s [[Call]] internal method (<a href="#table-6">Table 6</a>) is called with an empty arguments list to retrieve the property value each time a get access of the property is performed.</td>
+ </tr>
+ <tr>
+ <td style="border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid #000000; border-top: 1px solid black">[[Set]]</td>
+ <td style="border-bottom: 1px solid black; border-right: 1px solid black">Object <i>or</i> Undefined</td>
+ <td style="border-bottom: 1px solid black; border-right: 1px solid black">If the value is an Object it must be a function Object. The function&rsquo;s [[Call]] internal method (<a href="#table-6">Table 6</a>) is called with an arguments list containing the assigned value as its sole argument each time a set access of the property is performed. The effect of a property's [[Set]] internal method may, but is not required to, have an effect on the value returned by subsequent calls to the property's [[Get]] internal method.</td>
+ </tr>
+ <tr>
+ <td style="border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid #000000; border-top: 1px solid black">[[Enumerable]]</td>
+ <td style="border-bottom: 1px solid black; border-right: 1px solid black">Boolean</td>
+ <td style="border-bottom: 1px solid black; border-right: 1px solid black">If <b>true</b>, the property is to be enumerated by a for-in enumeration (<a href="#sec-for-in-and-for-of-statements">see 13.6.4</a>). Otherwise, the property is said to be non-enumerable.</td>
+ </tr>
+ <tr>
+ <td style="border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid #000000; border-top: 1px solid black">[[Configurable]]</td>
+ <td style="border-bottom: 1px solid black; border-right: 1px solid black">Boolean</td>
+ <td style="border-bottom: 1px solid black; border-right: 1px solid black">If <b>false</b>, attempts to delete the property, change the property to be a data property, or change its attributes will fail.</td>
+ </tr>
+ </table>
+ </figure>
+
+ <p>If the initial values of a property&rsquo;s attributes are not explicitly specified by this specification, the default
+ value defined in <a href="#table-4">Table 4</a> is used.</p>
+
+ <figure>
+ <figcaption><span id="table-4">Table 4</span> &mdash; Default Attribute Values</figcaption>
+ <table class="real-table">
+ <tr>
+ <th style="border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid #000000; border-top: 1px solid black">Attribute Name</th>
+ <th style="border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid #000000; border-top: 1px solid black">Default Value</th>
+ </tr>
+ <tr>
+ <td style="border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid #000000; border-top: 1px solid black">[[Value]]</td>
+ <td style="border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid #000000; border-top: 1px solid black"><b>undefined</b></td>
+ </tr>
+ <tr>
+ <td style="border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid #000000">[[Get]]</td>
+ <td style="border-bottom: 1px solid black; border-right: 1px solid black"><b>undefined</b></td>
+ </tr>
+ <tr>
+ <td style="border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid #000000; border-top: 1px solid black">[[Set]]</td>
+ <td style="border-bottom: 1px solid black; border-right: 1px solid black"><b>undefined</b></td>
+ </tr>
+ <tr>
+ <td style="border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid #000000; border-top: 1px solid black">[[Writable]]</td>
+ <td style="border-bottom: 1px solid black; border-right: 1px solid black"><b>false</b></td>
+ </tr>
+ <tr>
+ <td style="border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid #000000; border-top: 1px solid black">[[Enumerable]]</td>
+ <td style="border-bottom: 1px solid black; border-right: 1px solid black"><b>false</b></td>
+ </tr>
+ <tr>
+ <td style="border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid #000000; border-top: 1px solid black">[[Configurable]]</td>
+ <td style="border-bottom: 1px solid black; border-right: 1px solid black"><b>false</b></td>
+ </tr>
+ </table>
+ </figure>
+ </section>
+
+ <section id="sec-object-internal-methods-and-internal-slots">
+ <h1><span class="secnum" id="sec-6.1.7.2"><a href="#sec-object-internal-methods-and-internal-slots"
+ title="link to this section">6.1.7.2</a></span> Object Internal Methods and Internal Slots</h1>
+
+ <p>The actual semantics of objects, in ECMAScript, are specified via algorithms called <i>internal methods</i>. Each
+ object in an ECMAScript engine is associated with a set of internal methods that defines its runtime behaviour. These
+ internal methods are not part of the ECMAScript language. They are defined by this specification purely for expository
+ purposes. However, each object within an implementation of ECMAScript must behave as specified by the internal methods
+ associated with it. The exact manner in which this is accomplished is determined by the implementation.</p>
+
+ <p>Internal method names are polymorphic. This means that different object values may perform different algorithms when a
+ common internal method name is invoked upon them. That actual object upon which an internal method is invoked is the
+ &ldquo;target&rdquo; of the invocation. If, at runtime, the implementation of an algorithm attempts to use an internal
+ method of an object that the object does not support, a <b>TypeError</b> exception is thrown.</p>
+
+ <p>Internal slots correspond to internal state that is associated with objects and used by various ECMAScript
+ specification algorithms. Internal slots are not object properties and they are not inherited. Depending upon the specific
+ internal slot specification, such state may consist of values of any <a href="#sec-ecmascript-language-types">ECMAScript
+ language type</a> or of specific ECMAScript specification type values. Unless explicitly specified otherwise, internal
+ slots are allocated as part of the process of creating an object and may not be dynamically added to an object. Unless
+ specified otherwise, the initial value of an internal slot is the value <span class="value">undefined</span>. Various
+ algorithms within this specification create objects that have internal slots. However, the ECMAScript language provides no
+ direct way to associate internal slots with an object.</p>
+
+ <p>Internal methods and internal slots are identified within this specification using names enclosed in double square
+ brackets [[ ]].</p>
+
+ <p><a href="#table-5">Table 5</a> summarizes the <i>essential internal methods</i> used by this specification that are
+ applicable to all objects created or manipulated by ECMAScript code. Every object must have algorithms for all of the
+ essential internal methods. However, all objects do not necessarily use the same algorithms for those methods.</p>
+
+ <p>The &ldquo;Signature&rdquo; column of <a href="#table-5">Table 5</a> and other similar tables describes the invocation
+ pattern for each internal method. The invocation pattern always includes a parenthesized list of descriptive parameter
+ names. If a parameter name is the same as an ECMAScript type name then the name describes the required type of the
+ parameter value. If an internal method explicitly returns a value, its parameter list is followed by the symbol
+ &ldquo;&rarr;&rdquo; and the type name of the returned value. The type names used in signatures refer to the types defined
+ in <a href="#sec-ecmascript-data-types-and-values">clause 6</a> augmented by the following additional names.
+ &ldquo;<i>any</i>&rdquo; means the value may be any <a href="#sec-ecmascript-language-types">ECMAScript language type</a>.
+ An internal method implicitly returns a <a href="#sec-completion-record-specification-type">Completion Record</a> as
+ described in <a href="#sec-completion-record-specification-type">6.2.2</a>. In addition to its parameters, an internal
+ method always has access to the object that is the target of the method invocation.</p>
+
+ <figure>
+ <figcaption><span id="table-5">Table 5</span> &mdash; Essential Internal Methods</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Internal Method</th>
+ <th>Signature</th>
+ <th>Description</th>
+ </tr>
+ <tr>
+ <td>[[GetPrototypeOf]]</td>
+ <td>() <b><i>&rarr;</i></b> Object or Null</td>
+ <td>Determine the object that provides inherited properties for this object. A <b>null</b> value indicates that there are no inherited properties.</td>
+ </tr>
+ <tr>
+ <td>[[SetPrototypeOf]]</td>
+ <td>(<i>Object</i> or Null) <b><i>&rarr;</i></b> Boolean</td>
+ <td>Associate with this object another object that provides inherited properties. Passing <b>null</b> indicates that there are no inherited properties. Returns <b>true</b> indicating that the operation was completed successfully or <b>false</b> indicating that the operation was not successful.</td>
+ </tr>
+ <tr>
+ <td>[[IsExtensible]]</td>
+ <td>( ) <b><i>&rarr;</i></b> Boolean</td>
+ <td>Determine whether it is permitted to add additional properties to this object.</td>
+ </tr>
+ <tr>
+ <td>[[PreventExtensions]]</td>
+ <td>( ) <b><i>&rarr;</i></b> Boolean</td>
+ <td>Control whether new properties may be added to this object. Returns <b>true</b> if the operation was successful or <b>false</b> if the operation was unsuccessful.</td>
+ </tr>
+ <tr>
+ <td>[[GetOwnProperty]]</td>
+ <td>(<i>propertyKey</i>) &rarr; Undefined or <a href="#sec-property-descriptor-specification-type">Property Descriptor</a></td>
+ <td>Return a <a href="#sec-property-descriptor-specification-type">Property Descriptor</a> for the own property of this object whose key is <i>propertyKey</i>, or <b>undefined</b> if no such property exists.</td>
+ </tr>
+ <tr>
+ <td>[[HasProperty]]</td>
+ <td>(<i>propertyKey</i>) <b><i>&rarr;</i></b> Boolean</td>
+ <td>Return a Boolean value indicating whether this object already has either an own or inherited property whose key is <i>propertyKey</i>.</td>
+ </tr>
+ <tr>
+ <td>[[Get]]</td>
+ <td>(<i>propertyKey</i>, <i>Receiver</i>) <i><b>&rarr;</b> any</i></td>
+ <td>Return the value of the property whose key is <i>propertyKey</i> from this object. If any ECMAScript code must be executed to retrieve the property value, <i>Receiver</i> is used as the <b>this</b> value when evaluating the code.</td>
+ </tr>
+ <tr>
+ <td>[[Set]]</td>
+ <td>(<i>propertyKey</i>,<i>value</i>, <i>Receiver</i>) <br><i><b>&rarr;</b> Boolean</i></td>
+ <td>Set the value of this object property whose key is <i>propertyKey</i> to <i>value</i>. If any ECMAScript code must be executed to set the property value, <i>Receiver</i> is used as the <b>this</b> value when evaluating the code. Returns <b>true</b> if that the property value was set or <b>false</b> if that it could not be set.</td>
+ </tr>
+ <tr>
+ <td>[[Delete]]</td>
+ <td>(<i>propertyKey</i>) <b><i>&rarr;</i></b> Boolean</td>
+ <td>Remove the own property whose key is <i>propertyKey</i> from this object . Return <span class="value">false</span> if the property was not deleted and is still present. Return <span class="value">true</span> if the property was deleted or is not present.</td>
+ </tr>
+ <tr>
+ <td>[[DefineOwnProperty]]</td>
+ <td>(<i>propertyKey,PropertyDescriptor</i>)<b><i><br>&rarr;</i></b> Boolean</td>
+ <td>Create or alter the own property, whose key is <i>propertyKey</i>, to have the state described by <i>PropertyDescriptor</i>. Return <span class="value">true</span> if that the property was successfully created/updated or <span class="value">false</span> if the property could not be created or updated.</td>
+ </tr>
+ <tr>
+ <td>[[Enumerate]]</td>
+ <td>()<b><i>&rarr;</i></b>Object</td>
+ <td>Return an iterator object that produces the keys of the string-keyed enumerable properties of the object.</td>
+ </tr>
+ <tr>
+ <td>[[OwnPropertyKeys]]</td>
+ <td>()<b><i>&rarr;</i></b><a href="#sec-list-and-record-specification-type">List</a> of propertyKey</td>
+ <td>Return a <a href="#sec-list-and-record-specification-type">List</a> whose elements are all of the own property keys for the object.</td>
+ </tr>
+ </table>
+ </figure>
+
+ <p><a href="#table-6">Table 6</a> summarizes additional essential internal methods that are supported by objects that may
+ be called as functions. A <i>function object</i> is an object that supports the [[Call]] internal methods. A
+ <i>constructor</i> (also referred to as a <i>constructor function</i>) is a function object that supports the
+ [[Construct]] internal method.</p>
+
+ <figure>
+ <figcaption><span id="table-6">Table 6</span> &mdash; Additional Essential Internal Methods of Function Objects</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Internal Method</th>
+ <th>Signature</th>
+ <th>Description</th>
+ </tr>
+ <tr>
+ <td>[[Call]]</td>
+ <td>(<i>any</i>, a <a href="#sec-list-and-record-specification-type">List</a> of <i>any</i>)<br><span style="font-family: Times New Roman"><b><i>&rarr;</i></b></span> <i>any</i></td>
+ <td>Executes code associated with this object. Invoked via a function call expression. The arguments to the internal method are a <b>this</b> value and a list containing the arguments passed to the function by a call expression. Objects that implement this internal method are <i>callable</i>.</td>
+ </tr>
+ <tr>
+ <td>[[Construct]]</td>
+ <td>(a <a href="#sec-list-and-record-specification-type">List</a> of <i>any</i>, Object)<br><span style="font-family: Times New Roman"><b><i>&rarr;</i></b></span> Object</td>
+ <td>Creates an object. Invoked via the <code>new</code> or <code>super</code> operators. The first arguments to the internal method is a list containing the arguments of the operator. The second argument is the object to which the <code>new</code> operator was initially applied. Objects that implement this internal method are called <i>constructors</i>. A Function object is not necessarily a constructor and such non-constructor Function objects do not have a [[Construct]] internal method.</td>
+ </tr>
+ </table>
+ </figure>
+
+ <p>The semantics of the essential internal methods for ordinary objects and standard exotic objects are specified in <a
+ href="#sec-ordinary-and-exotic-objects-behaviours">clause 9</a>. If any specified use of an internal method of an exotic
+ object is not supported by an implementation, that usage must throw a <b>TypeError</b> exception when attempted.</p>
+ </section>
+
+ <section id="sec-invariants-of-the-essential-internal-methods">
+ <h1><span class="secnum" id="sec-6.1.7.3"><a href="#sec-invariants-of-the-essential-internal-methods"
+ title="link to this section">6.1.7.3</a></span> Invariants of the Essential Internal Methods</h1>
+
+ <p>The Internal Methods of Objects of an ECMAScript engine must conform to the list of invariants specified below.
+ Ordinary ECMAScript Objects as well as all standard exotic objects in this specification maintain these invariants.
+ ECMAScript Proxy objects maintain these invariants by means of runtime checks on the result of traps invoked on the
+ [[ProxyHandler]] object.</p>
+
+ <p>Any implementation provided exotic objects must also maintain these invariants for those objects. Violation of these
+ invariants may cause ECMAScript code to have unpredictable behaviour and create security issues. However, violation of
+ these invariants must never compromise the memory safety of an implementation.</p>
+
+ <p>An implementation must not allow these invariants to be circumvented in any manner such as by providing alternative
+ interfaces that implement the functionality of the essential internal methods without enforcing their invariants.</p>
+
+ <p>Definitions:</p>
+
+ <p>&#x25cf;&emsp;The <i>target</i> of an internal method is the object upon which the internal method is called.</p>
+
+ <p>&#x25cf;&emsp;A target is <i>non-extensible</i> if it has been observed to return false from its [[IsExtensible]]
+ internal method, or true from its [[PreventExtensions]] internal method.</p>
+
+ <p>&#x25cf;&emsp;A <i>non-existent</i> property is a property that does not exist as an own property on a non-extensible
+ target.</p>
+
+ <p>&#x25cf;&emsp;All references to <i><a href="#sec-samevalue">SameValue</a></i> are according to the definition of <a
+ href="#sec-samevalue">SameValue</a> algorithm specified in <a href="#sec-samevalue">7.2.9</a>.</p>
+
+ <p><b>[[GetPrototypeOf]] ( )</b></p>
+
+ <p>&#x25cf;&emsp;The Type of the return value must be either Object or Null.</p>
+
+ <p>&#x25cf;&emsp;If target is non-extensible, and [[GetPrototypeOf]] returns a value v, then any future calls to
+ [[GetPrototypeOf]] should return the <a href="#sec-samevalue">SameValue</a> as v.</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> An object&rsquo;s prototype chain should have finite length (that is, starting from any
+ object, recursively applying the [[GetPrototypeOf]] internal method to its result should eventually lead to the value
+ null). However, this requirement is not enforceable as an object level invariant if the prototype chain includes any
+ exotic objects that do not use the ordinary object definition of [[GetPrototypeOf]]. Such a circular prototype chain may
+ result in infinite loops when accessing object properties.</p>
+ </div>
+
+ <p><b>[[SetPrototypeOf]] (V)</b></p>
+
+ <p>&#x25cf;&emsp;The Type of the return value must be Boolean.</p>
+
+ <p>&#x25cf;&emsp;If target is non-extensible, [[SetPrototypeOf]] must return false, unless V is the <a
+ href="#sec-samevalue">SameValue</a> as the target&rsquo;s observed [[GetPrototypeOf]] value.</p>
+
+ <p><b>[[PreventExtensions]] ( )</b></p>
+
+ <p>&#x25cf;&emsp;The Type of the return value must be Boolean.</p>
+
+ <p>&#x25cf;&emsp;If [[PreventExtensions]] returns true, all future calls to [[IsExtensible]] on the target must return
+ false and the target is now considered non-extensible.</p>
+
+ <p><b>[[GetOwnProperty]] (P)</b></p>
+
+ <p>&#x25cf;&emsp;The Type of the return value must be either <a
+ href="#sec-property-descriptor-specification-type">Property Descriptor</a> or Undefined.</p>
+
+ <p>&#x25cf;&emsp;If the Type of the return value is <a href="#sec-property-descriptor-specification-type">Property
+ Descriptor</a>, the return value must be a complete property descriptor (<a href="#sec-completepropertydescriptor">see
+ 6.2.4.6</a>).</p>
+
+ <p>&#x25cf;&emsp;If a property P is described as a data property with Desc.[[Value]] equal to v and Desc.[[Writable]] and
+ Desc.[[Configurable]] are both false, then the <a href="#sec-samevalue">SameValue</a> must be returned for the
+ Desc.[[Value]] attribute of the property on all future calls to [[GetOwnProperty]] ( P ).</p>
+
+ <p>&#x25cf;&emsp;If P&rsquo;s attributes other than [[Writable]] may change over time or if the property might disappear,
+ then P&rsquo;s [[Configurable]] attribute must be true.</p>
+
+ <p>&#x25cf;&emsp;If the [[Writable]] attribute may change from false to true, then the [[Configurable]] attribute must be
+ true.</p>
+
+ <p>&#x25cf;&emsp;If the target is non-extensible and P is non-existent, then all future calls to [[GetOwnProperty]] (P)
+ on the target must describe P as non-existent (i.e. [[GetOwnProperty]] (P) must return undefined).</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> As a consequence of the third invariant, if a property is described as a data property
+ and it may return different values over time, then either or both of the Desc.[[Writable]] and Desc.[[Configurable]]
+ attributes must be true even if no mechanism to change the value is exposed via the other internal methods.</p>
+ </div>
+
+ <p><b>[[DefineOwnProperty]] (P, Desc)</b></p>
+
+ <p>&#x25cf;&emsp;The Type of the return value must be Boolean.</p>
+
+ <p>&#x25cf;&emsp;[[DefineOwnProperty]] must return false if P has previously been observed as a non-configurable own
+ property of the target, unless either:</p>
+
+ <p>1.&#x9;P is a non-configurable writable own data property. A non-configurable writable data property can be changed
+ into a non-configurable non-writable data property.</p>
+
+ <p>2.&#x9;All attributes in Desc are the <a href="#sec-samevalue">SameValue</a> as P&rsquo;s attributes.</p>
+
+ <p>&#x25cf;&emsp;[[DefineOwnProperty]] (P, Desc) must return false if target is non-extensible and P is a non-existent own
+ property. That is, a non-extensible target object cannot be extended with new properties.</p>
+
+ <p><b>[[HasProperty]] ( P )</b></p>
+
+ <p>&#x25cf;&emsp;The Type of the return value must be Boolean.</p>
+
+ <p>&#x25cf;&emsp;If P was previously observed as a non-configurable data or accessor own property of the target,
+ [[HasProperty]] must return true.</p>
+
+ <p><b>[[Get]] (P, Receiver)</b></p>
+
+ <p>&#x25cf;&emsp;If P was previously observed as a non-configurable, non-writable own data property of the target with
+ value v, then [[Get]] must return the <a href="#sec-samevalue">SameValue</a>.</p>
+
+ <p>&#x25cf;&emsp;If P was previously observed as a non-configurable own accessor property of the target whose [[Get]]
+ attribute is undefined, the [[Get]] operation must return undefined.</p>
+
+ <p><b>[[Set]] ( P, V, Receiver)</b></p>
+
+ <p>&#x25cf;&emsp;The Type of the return value must be Boolean.</p>
+
+ <p>&#x25cf;&emsp;If P was previously observed as a non-configurable, non-writable own data property of the target, then
+ [[Set]] must return false unless V is the <a href="#sec-samevalue">SameValue</a> as P&rsquo;s [[Value]] attribute.</p>
+
+ <p>&#x25cf;&emsp;If P was previously observed as a non-configurable own accessor property of the target whose [[Set]]
+ attribute is undefined, the [[Set]] operation must return false.</p>
+
+ <p><b>[[Delete]] ( P )</b></p>
+
+ <p>&#x25cf;&emsp;The Type of the return value must be Boolean.</p>
+
+ <p>&#x25cf;&emsp;If P was previously observed to be a non-configurable own data or accessor property of the target,
+ [[Delete]] must return false.</p>
+
+ <p><b>[[Enumerate]] ( )</b></p>
+
+ <p>&#x25cf;&emsp;The Type of the return value must be Object.</p>
+
+ <p><b>[[OwnPropertyKeys]] ( )</b></p>
+
+ <p>&#x25cf;&emsp;The return value must be a <a href="#sec-list-and-record-specification-type">List</a>.</p>
+
+ <p>&#x25cf;&emsp; The Type of each element of the returned <a href="#sec-list-and-record-specification-type">List</a> is
+ either String or Symbol.</p>
+
+ <p>&#x25cf;&emsp;The returned <a href="#sec-list-and-record-specification-type">List</a> must contain at least the keys of
+ all non-configurable own properties that have previously been observed.</p>
+
+ <p>&#x25cf;&emsp;If the object is non-extensible, the returned <a href="#sec-list-and-record-specification-type">List</a>
+ must contain only the keys of all own properties of the object that are observable using [[GetOwnProperty]].</p>
+
+ <p><b>[[Construct]] ( )</b></p>
+
+ <p>&#x25cf;&emsp;The Type of the return value must be Object.</p>
+ </section>
+
+ <section id="sec-well-known-intrinsic-objects">
+ <h1><span class="secnum" id="sec-6.1.7.4"><a href="#sec-well-known-intrinsic-objects"
+ title="link to this section">6.1.7.4</a></span> Well-Known Intrinsic Objects</h1>
+
+ <p>Well-known intrinsics are built-in objects that are explicitly referenced by the algorithms of this specification and
+ which usually have <a href="#sec-code-realms">Realm</a> specific identities. Unless otherwise specified each intrinsic
+ object actually corresponds to a set of similar objects, one per <a href="#sec-code-realms">Realm</a>.</p>
+
+ <p>Within this specification a reference such as %name% means the intrinsic object, associated with <a
+ href="#sec-execution-contexts">the current Realm</a>, corresponding to the name. Determination of <a
+ href="#sec-execution-contexts">the current Realm</a> and its intrinsics is described in <a
+ href="#sec-newglobalenvironment">8.1.2.5</a>. The well-known intrinsics are listed in <a href="#table-7">Table 7</a>.</p>
+
+ <figure>
+ <figcaption><span id="table-7">Table 7</span> &mdash; Well-known Intrinsic Objects</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Intrinsic Name</th>
+ <th>Global Name</th>
+ <th>ECMAScript Language Association</th>
+ </tr>
+ <tr>
+ <td>%Array%</td>
+ <td><code>Array</code></td>
+ <td>The <code>Array</code> constructor (<a href="#sec-array-constructor">22.1.1</a>)</td>
+ </tr>
+ <tr>
+ <td>%ArrayBuffer%</td>
+ <td><code>ArrayBuffer</code></td>
+ <td>The <code>ArrayBuffer</code> constructor (<a href="#sec-arraybuffer-constructor">24.1.2</a>)</td>
+ </tr>
+ <tr>
+ <td>%ArrayBufferPrototype%</td>
+ <td><code><a href="#sec-arraybuffer.prototype">ArrayBuffer.prototype</a></code></td>
+ <td>The initial value of the <code>prototype</code> data property of %ArrayBuffer%.</td>
+ </tr>
+ <tr>
+ <td>%ArrayIteratorPrototype%</td>
+ <td></td>
+ <td>The prototype of Array iterator objects (<a href="#sec-array-iterator-objects">22.1.5</a>)</td>
+ </tr>
+ <tr>
+ <td>%ArrayPrototype%</td>
+ <td><code>Array.prototype</code></td>
+ <td>The initial value of the <code>prototype</code> data property of %Array% (<a href="#sec-properties-of-the-array-prototype-object">22.1.3</a>)</td>
+ </tr>
+ <tr>
+ <td>%ArrayProto_values%</td>
+ <td><code><a href="#sec-array.prototype.values">Array.prototype.values</a></code></td>
+ <td>The initial value of the <code>values</code> data property of %ArrayPrototype% (<a href="#sec-array.prototype.values">22.1.3.29</a>)</td>
+ </tr>
+ <tr>
+ <td>%Boolean%</td>
+ <td><code>Boolean</code></td>
+ <td>The <code>Boolean</code> constructor (<a href="#sec-boolean-constructor">19.3.1</a>)</td>
+ </tr>
+ <tr>
+ <td>%BooleanPrototype%</td>
+ <td><code>Boolean.prototype</code></td>
+ <td>The initial value of the <code>prototype</code> data property of %Boolean% (<a href="#sec-properties-of-the-boolean-prototype-object">19.3.3</a>)</td>
+ </tr>
+ <tr>
+ <td>%DataView%</td>
+ <td><code>DataView</code></td>
+ <td>The <code>DataView</code> constructor (<a href="#sec-dataview-constructor">24.2.2</a>)</td>
+ </tr>
+ <tr>
+ <td>%DataViewPrototype%</td>
+ <td><code><a href="#sec-dataview.prototype">DataView.prototype</a></code></td>
+ <td>The initial value of the <code>prototype</code> data property of %DataView%</td>
+ </tr>
+ <tr>
+ <td>%Date%</td>
+ <td><code>Date</code></td>
+ <td>The <code>Date</code> constructor (<a href="#sec-date-constructor">20.3.2</a>)</td>
+ </tr>
+ <tr>
+ <td>%DatePrototype%</td>
+ <td><code>Date.prototype</code></td>
+ <td>The initial value of the <code>prototype</code> data property of %Date%.</td>
+ </tr>
+ <tr>
+ <td>%decodeURI%</td>
+ <td><code>decodeURI</code></td>
+ <td>The <code>decodeURI</code> function (<a href="#sec-decodeuri-encodeduri">18.2.6.2</a>)</td>
+ </tr>
+ <tr>
+ <td>%decodeURIComponent%</td>
+ <td><code>decodeURIComponent</code></td>
+ <td>The <code>decodeURIComponent</code> function (<a href="#sec-decodeuricomponent-encodeduricomponent">18.2.6.3</a>)</td>
+ </tr>
+ <tr>
+ <td>%encodeURI%</td>
+ <td><code>encodeURI</code></td>
+ <td>The <code>encodeURI</code> function (<a href="#sec-encodeuri-uri">18.2.6.4</a>)</td>
+ </tr>
+ <tr>
+ <td>%encodeURIComponent%</td>
+ <td><code>encodeURIComponent</code></td>
+ <td>The <code>encodeURIComponent</code> function (<a href="#sec-encodeuricomponent-uricomponent">18.2.6.5</a>)</td>
+ </tr>
+ <tr>
+ <td>%Error%</td>
+ <td><code>Error</code></td>
+ <td>The <code>Error</code> constructor (<a href="#sec-error-constructor">19.5.1</a>)</td>
+ </tr>
+ <tr>
+ <td>%ErrorPrototype%</td>
+ <td><code>Error.prototype</code></td>
+ <td>The initial value of the <code>prototype</code> data property of %Error%</td>
+ </tr>
+ <tr>
+ <td>%eval%</td>
+ <td><code>eval</code></td>
+ <td>The <code>eval</code> function (<a href="#sec-eval-x">18.2.1</a>)</td>
+ </tr>
+ <tr>
+ <td>%EvalError%</td>
+ <td><code>EvalError</code></td>
+ <td>The <code>EvalError</code> constructor (<a href="#sec-native-error-types-used-in-this-standard-evalerror">19.5.5.1</a>)</td>
+ </tr>
+ <tr>
+ <td>%EvalErrorPrototype%</td>
+ <td><code>EvalError.prototype</code></td>
+ <td>The initial value of the <code>prototype</code> property of %EvalError%</td>
+ </tr>
+ <tr>
+ <td>%Float32Array%</td>
+ <td><code><a href="#sec-float32array">Float32Array</a></code></td>
+ <td>The <code><a href="#sec-float32array">Float32Array</a></code> constructor (<a href="#sec-typedarray-objects">22.2</a>)</td>
+ </tr>
+ <tr>
+ <td>%Float32ArrayPrototype%</td>
+ <td><code>Float32Array.prototype</code></td>
+ <td>The initial value of the <code>prototype</code> data property of %Float32Array%.</td>
+ </tr>
+ <tr>
+ <td>%Float64Array%</td>
+ <td><code><a href="#sec-float64array">Float64Array</a></code></td>
+ <td>The <code><a href="#sec-float64array">Float64Array</a></code> constructor (<a href="#sec-typedarray-objects">22.2</a>)</td>
+ </tr>
+ <tr>
+ <td>%Float64ArrayPrototype%</td>
+ <td><code>Float64Array.prototype</code></td>
+ <td>The initial value of the <code>prototype</code> data property of %Float64Array%</td>
+ </tr>
+ <tr>
+ <td>%Function%</td>
+ <td><code>Function</code></td>
+ <td>The <code>Function</code> constructor (<a href="#sec-function-constructor">19.2.1</a>)</td>
+ </tr>
+ <tr>
+ <td>%FunctionPrototype%</td>
+ <td><code>Function.prototype</code></td>
+ <td>The initial value of the <code>prototype</code> data property of %Function%</td>
+ </tr>
+ <tr>
+ <td>%Generator%</td>
+ <td></td>
+ <td>The initial value of the <code>prototype</code> property of %GeneratorFunction%</td>
+ </tr>
+ <tr>
+ <td>%GeneratorFunction%</td>
+ <td></td>
+ <td>The constructor of generator objects (<a href="#sec-generatorfunction-constructor">25.2.1</a>)</td>
+ </tr>
+ <tr>
+ <td>%GeneratorPrototype%</td>
+ <td></td>
+ <td>The initial value of the <code>prototype</code> property of %Generator%</td>
+ </tr>
+ <tr>
+ <td>%Int8Array%</td>
+ <td><code><a href="#sec-int8array">Int8Array</a></code></td>
+ <td>The <code><a href="#sec-int8array">Int8Array</a></code> constructor (<a href="#sec-typedarray-objects">22.2</a>)</td>
+ </tr>
+ <tr>
+ <td>%Int8ArrayPrototype%</td>
+ <td><code>Int8Array.prototype</code></td>
+ <td>The initial value of the <code>prototype</code> data property of %Int8Array%</td>
+ </tr>
+ <tr>
+ <td>%Int16Array%</td>
+ <td><code><a href="#sec-int16array">Int16Array</a></code></td>
+ <td>The <code><a href="#sec-int16array">Int16Array</a></code> constructor (<a href="#sec-typedarray-objects">22.2</a>)</td>
+ </tr>
+ <tr>
+ <td>%Int16ArrayPrototype%</td>
+ <td><code>Int16Array.prototype</code></td>
+ <td>The initial value of the <code>prototype</code> data property of %Int16Array%</td>
+ </tr>
+ <tr>
+ <td>%Int32Array%</td>
+ <td><code><a href="#sec-int32array">Int32Array</a></code></td>
+ <td>The <code><a href="#sec-int32array">Int32Array</a></code> constructor (<a href="#sec-typedarray-objects">22.2</a>)</td>
+ </tr>
+ <tr>
+ <td>%Int32ArrayPrototype%</td>
+ <td><code>Int32Array.prototype</code></td>
+ <td>The initial value of the <code>prototype</code> data property of %Int32Array%</td>
+ </tr>
+ <tr>
+ <td>%isFinite%</td>
+ <td><code>isFinite</code></td>
+ <td>The <code>isFinite</code> function (<a href="#sec-isfinite-number">18.2.2</a>)</td>
+ </tr>
+ <tr>
+ <td>%isNaN%</td>
+ <td><code>isNaN</code></td>
+ <td>The <code>isNaN</code> function (<a href="#sec-isnan-number">18.2.3</a>)</td>
+ </tr>
+ <tr>
+ <td>%IteratorPrototype%</td>
+ <td></td>
+ <td>An object that all standard built-in iterator objects indirectly inherit from</td>
+ </tr>
+ <tr>
+ <td>%JSON%</td>
+ <td><code>JSON</code></td>
+ <td>The <code>JSON</code> object (<a href="#sec-json-object">24.3</a>)</td>
+ </tr>
+ <tr>
+ <td>%Map%</td>
+ <td><code>Map</code></td>
+ <td>The <code>Map</code> constructor (<a href="#sec-map-constructor">23.1.1</a>)</td>
+ </tr>
+ <tr>
+ <td>%MapIteratorPrototype%</td>
+ <td></td>
+ <td>The prototype of Map iterator objects (<a href="#sec-map-iterator-objects">23.1.5</a>)</td>
+ </tr>
+ <tr>
+ <td>%MapPrototype%</td>
+ <td><code>Map.prototype</code></td>
+ <td>The initial value of the <code>prototype</code> data property of %Map%</td>
+ </tr>
+ <tr>
+ <td>%Math%</td>
+ <td><code>Math</code></td>
+ <td>The <code>Math</code> object (<a href="#sec-math-object">20.2</a>)</td>
+ </tr>
+ <tr>
+ <td>%Number%</td>
+ <td><code>Number</code></td>
+ <td>The <code>Number</code> constructor (<a href="#sec-number-constructor">20.1.1</a>)</td>
+ </tr>
+ <tr>
+ <td>%NumberPrototype%</td>
+ <td><code>Number.prototype</code></td>
+ <td>The initial value of the <code>prototype</code> property of %Number%</td>
+ </tr>
+ <tr>
+ <td>%Object%</td>
+ <td><code>Object</code></td>
+ <td>The <code>Object</code> constructor (<a href="#sec-object-constructor">19.1.1</a>)</td>
+ </tr>
+ <tr>
+ <td>%ObjectPrototype%</td>
+ <td><code>Object.prototype</code></td>
+ <td>The initial value of the <code>prototype</code> data property of %Object%. (<a href="#sec-properties-of-the-object-prototype-object">19.1.3</a>)</td>
+ </tr>
+ <tr>
+ <td>%ObjProto_toString%</td>
+ <td><code>Object.prototype.<br>toString</code></td>
+ <td>The initial value of the <code>toString</code> data property of %ObjectPrototype% (<a href="#sec-object.prototype.tostring">19.1.3.6</a>)</td>
+ </tr>
+ <tr>
+ <td>%parseFloat%</td>
+ <td><code>parseFloat</code></td>
+ <td>The <code>parseFloat</code> function (<a href="#sec-parsefloat-string">18.2.4</a>)</td>
+ </tr>
+ <tr>
+ <td>%parseInt%</td>
+ <td><code>parseInt</code></td>
+ <td>The <code>parseInt</code> function (<a href="#sec-parseint-string-radix">18.2.5</a>)</td>
+ </tr>
+ <tr>
+ <td>%Promise%</td>
+ <td><code>Promise</code></td>
+ <td>The <code>Promise</code> constructor (<a href="#sec-promise-constructor">25.4.3</a>)</td>
+ </tr>
+ <tr>
+ <td>%PromisePrototype%</td>
+ <td><code>Promise.prototype</code></td>
+ <td>The initial value of the <code>prototype</code> data property of %Promise%</td>
+ </tr>
+ <tr>
+ <td>%Proxy%</td>
+ <td><code>Proxy</code></td>
+ <td>The <code>Proxy</code> constructor (<a href="#sec-proxy-constructor">26.2.1</a>)</td>
+ </tr>
+ <tr>
+ <td>%RangeError%</td>
+ <td><code>RangeError</code></td>
+ <td>The <code>RangeError</code> constructor (<a href="#sec-native-error-types-used-in-this-standard-rangeerror">19.5.5.2</a>)</td>
+ </tr>
+ <tr>
+ <td>%RangeErrorPrototype%</td>
+ <td><code>RangeError.prototype</code></td>
+ <td>The initial value of the <code>prototype</code> property of %RangeError%</td>
+ </tr>
+ <tr>
+ <td>%ReferenceError%</td>
+ <td><code>ReferenceError</code></td>
+ <td>The <code>ReferenceError</code> constructor (<a href="#sec-native-error-types-used-in-this-standard-referenceerror">19.5.5.3</a>)</td>
+ </tr>
+ <tr>
+ <td>%ReferenceErrorPrototype%</td>
+ <td><code>ReferenceError.<br>prototype</code></td>
+ <td>The initial value of the <code>prototype</code> property of %ReferenceError%</td>
+ </tr>
+ <tr>
+ <td>%Reflect%</td>
+ <td><code>Reflect</code></td>
+ <td>The <code>Reflect</code> object (<a href="#sec-reflect-object">26.1</a>)</td>
+ </tr>
+ <tr>
+ <td>%RegExp%</td>
+ <td><code>RegExp</code></td>
+ <td>The <code>RegExp</code> constructor (<a href="#sec-regexp-constructor">21.2.3</a>)</td>
+ </tr>
+ <tr>
+ <td>%RegExpPrototype%</td>
+ <td><code><a href="#sec-regexp.prototype">RegExp.prototype</a></code></td>
+ <td>The initial value of the <code>prototype</code> data property of %RegExp%</td>
+ </tr>
+ <tr>
+ <td>%Set%</td>
+ <td><code>Set</code></td>
+ <td>The <code>Set</code> constructor (<a href="#sec-set-constructor">23.2.1</a>)</td>
+ </tr>
+ <tr>
+ <td>%SetIteratorPrototype%</td>
+ <td></td>
+ <td>The prototype of Set iterator objects (<a href="#sec-set-iterator-objects">23.2.5</a>)</td>
+ </tr>
+ <tr>
+ <td>%SetPrototype%</td>
+ <td><code>Set.prototype</code></td>
+ <td>The initial value of the <code>prototype</code> data property of %Set%</td>
+ </tr>
+ <tr>
+ <td>%String%</td>
+ <td><code>String</code></td>
+ <td>The <code>String</code> constructor (<a href="#sec-string-constructor">21.1.1</a>)</td>
+ </tr>
+ <tr>
+ <td>%StringIteratorPrototype%</td>
+ <td></td>
+ <td>The prototype of String iterator objects (<a href="#sec-string-iterator-objects">21.1.5</a>)</td>
+ </tr>
+ <tr>
+ <td>%StringPrototype%</td>
+ <td><code>String.prototype</code></td>
+ <td>The initial value of the <code>prototype</code> data property of %String%</td>
+ </tr>
+ <tr>
+ <td>%Symbol%</td>
+ <td><code>Symbol</code></td>
+ <td>The <code>Symbol</code> constructor (<a href="#sec-symbol-constructor">19.4.1</a>)</td>
+ </tr>
+ <tr>
+ <td>%SymbolPrototype%</td>
+ <td><code>Symbol.prototype</code></td>
+ <td>The initial value of the <code>prototype</code> data property of %Symbol%. (<a href="#sec-properties-of-the-symbol-prototype-object">19.4.3</a>)</td>
+ </tr>
+ <tr>
+ <td>%SyntaxError%</td>
+ <td><code>SyntaxError</code></td>
+ <td>The <code>SyntaxError</code> constructor (<a href="#sec-native-error-types-used-in-this-standard-syntaxerror">19.5.5.4</a>)</td>
+ </tr>
+ <tr>
+ <td>%SyntaxErrorPrototype%</td>
+ <td><code>SyntaxError.prototype</code></td>
+ <td>The initial value of the <code>prototype</code> property of %SyntaxError%</td>
+ </tr>
+ <tr>
+ <td><a href="#sec-%throwtypeerror%">%ThrowTypeError%</a></td>
+ <td></td>
+ <td>A function object that unconditionally throws a new instance of %TypeError%</td>
+ </tr>
+ <tr>
+ <td>%TypedArray%</td>
+ <td></td>
+ <td>The super class of all typed Array constructors (<a href="#sec-%typedarray%-intrinsic-object">22.2.1</a>)</td>
+ </tr>
+ <tr>
+ <td>%TypedArrayPrototype%</td>
+ <td></td>
+ <td>The initial value of the <code>prototype</code> property of %TypedArray%</td>
+ </tr>
+ <tr>
+ <td>%TypeError%</td>
+ <td><code>TypeError</code></td>
+ <td>The <code>TypeError</code> constructor (<a href="#sec-native-error-types-used-in-this-standard-typeerror">19.5.5.5</a>)</td>
+ </tr>
+ <tr>
+ <td>%TypeErrorPrototype%</td>
+ <td><code>TypeError.prototype</code></td>
+ <td>The initial value of the <code>prototype</code> property of %TypeError%</td>
+ </tr>
+ <tr>
+ <td>%Uint8Array%</td>
+ <td><code><a href="#sec-uint8array">Uint8Array</a></code></td>
+ <td>The <code><a href="#sec-uint8array">Uint8Array</a></code> constructor (<a href="#sec-typedarray-objects">22.2</a>)</td>
+ </tr>
+ <tr>
+ <td>%Uint8ArrayPrototype%</td>
+ <td><code>Uint8Array.prototype</code></td>
+ <td>The initial value of the <code>prototype</code> data property of %Uint8Array%</td>
+ </tr>
+ <tr>
+ <td>%Uint8ClampedArray%</td>
+ <td><code><a href="#sec-uint8clampedarray">Uint8ClampedArray</a></code></td>
+ <td>The <code><a href="#sec-uint8clampedarray">Uint8ClampedArray</a></code> constructor (<a href="#sec-typedarray-objects">22.2</a>)</td>
+ </tr>
+ <tr>
+ <td>%Uint8ClampedArrayPrototype%</td>
+ <td><code><a href="#sec-uint8clampedarray">Uint8ClampedArray</a>.<br>prototype</code></td>
+ <td>The initial value of the <code>prototype</code> data property of %Uint8ClampedArray%</td>
+ </tr>
+ <tr>
+ <td>%Uint16Array%</td>
+ <td><code><a href="#sec-uint16array">Uint16Array</a></code></td>
+ <td>The <code><a href="#sec-uint16array">Uint16Array</a></code> constructor (<a href="#sec-typedarray-objects">22.2</a>)</td>
+ </tr>
+ <tr>
+ <td>%Uint16ArrayPrototype%</td>
+ <td><code>Uint16Array.prototype</code></td>
+ <td>The initial value of the <code>prototype</code> data property of %Uint16Array%</td>
+ </tr>
+ <tr>
+ <td>%Uint32Array%</td>
+ <td><code><a href="#sec-uint32array">Uint32Array</a></code></td>
+ <td>The <code><a href="#sec-uint32array">Uint32Array</a></code> constructor (<a href="#sec-typedarray-objects">22.2</a>)</td>
+ </tr>
+ <tr>
+ <td>%Uint32ArrayPrototype%</td>
+ <td><code>Uint32Array.prototype</code></td>
+ <td>The initial value of the <code>prototype</code> data property of %Uint32Array%</td>
+ </tr>
+ <tr>
+ <td>%URIError%</td>
+ <td><code><a href="#sec-constructor-properties-of-the-global-object-urierror">URIError</a></code></td>
+ <td>The <code><a href="#sec-constructor-properties-of-the-global-object-urierror">URIError</a></code> constructor (<a href="#sec-native-error-types-used-in-this-standard-urierror">19.5.5.6</a>)</td>
+ </tr>
+ <tr>
+ <td>%URIErrorPrototype%</td>
+ <td><code>URIError.prototype</code></td>
+ <td>The initial value of the <code>prototype</code> property of %URIError%</td>
+ </tr>
+ <tr>
+ <td>%WeakMap%</td>
+ <td><code>WeakMap</code></td>
+ <td>The <code>WeakMap</code> constructor (<a href="#sec-weakmap-constructor">23.3.1</a>)</td>
+ </tr>
+ <tr>
+ <td>%WeakMapPrototype%</td>
+ <td><code><a href="#sec-weakmap.prototype">WeakMap.prototype</a></code></td>
+ <td>The initial value of the <code>prototype</code> data property of %WeakMap%</td>
+ </tr>
+ <tr>
+ <td>%WeakSet%</td>
+ <td><code>WeakSet</code></td>
+ <td>The <code>WeakSet</code> constructor (<a href="#sec-weakset-constructor">23.4.1</a>)</td>
+ </tr>
+ <tr>
+ <td>%WeakSetPrototype%</td>
+ <td><code><a href="#sec-weakset.prototype">WeakSet.prototype</a></code></td>
+ <td>The initial value of the <code>prototype</code> data property of %WeakSet%</td>
+ </tr>
+ </table>
+ </figure>
+ </section>
+ </section>
+ </section>
+
+ <section id="sec-ecmascript-specification-types">
+ <div class="front">
+ <h1><span class="secnum" id="sec-6.2"><a href="#sec-ecmascript-specification-types"
+ title="link to this section">6.2</a></span> ECMAScript Specification Types</h1>
+
+ <p>A specification type corresponds to meta-values that are used within algorithms to describe the semantics of ECMAScript
+ language constructs and ECMAScript language types. The specification types are <a
+ href="#sec-reference-specification-type">Reference</a>, <a href="#sec-list-and-record-specification-type">List</a>, <a
+ href="#sec-completion-record-specification-type">Completion</a>, <a
+ href="#sec-property-descriptor-specification-type">Property Descriptor</a>, <a href="#sec-lexical-environments">Lexical
+ Environment</a>, <a href="#sec-environment-records">Environment Record</a>, and <a href="#sec-data-blocks">Data Block</a>.
+ Specification type values are specification artefacts that do not necessarily correspond to any specific entity within an
+ ECMAScript implementation. Specification type values may be used to describe intermediate results of ECMAScript expression
+ evaluation but such values cannot be stored as properties of objects or values of ECMAScript language variables.</p>
+ </div>
+
+ <section id="sec-list-and-record-specification-type">
+ <h1><span class="secnum" id="sec-6.2.1"><a href="#sec-list-and-record-specification-type"
+ title="link to this section">6.2.1</a></span> The List and Record Specification Type</h1>
+
+ <p>The List type is used to explain the evaluation of argument lists (<a href="#sec-argument-lists">see 12.3.6</a>) in
+ <code>new</code> expressions, in function calls, and in other algorithms where a simple ordered list of values is needed.
+ Values of the List type are simply ordered sequences of list elements containing the individual values. These sequences may
+ be of any length. The elements of a list may be randomly accessed using 0-origin indices. For notational convenience an
+ array-like syntax can be used to access List elements. For example, <i>arguments</i>[2] is shorthand for saying the
+ 3<sup>rd</sup> element of the List <i>arguments</i>.</p>
+
+ <p>For notational convenience within this specification, a literal syntax can be used to express a new List value. For
+ example, &laquo;1, 2&raquo; defines a List value that has two elements each of which is initialized to a specific value. A
+ new empty List can be expressed as &laquo;&raquo;.</p>
+
+ <p>The Record type is used to describe data aggregations within the algorithms of this specification. A Record type value
+ consists of one or more named fields. The value of each field is either an ECMAScript value or an abstract value represented
+ by a name associated with the Record type. Field names are always enclosed in double brackets, for example [[value]].</p>
+
+ <p>For notational convenience within this specification, an object literal-like syntax can be used to express a Record
+ value. For example, {[[field1]]: 42, [[field2]]: <b>false</b>, [[field3]]: <b>empty</b>} defines a Record value that has
+ three fields, each of which is initialized to a specific value. Field name order is not significant. Any fields that are not
+ explicitly listed are considered to be absent.</p>
+
+ <p>In specification text and algorithms, dot notation may be used to refer to a specific field of a Record value. For
+ example, if R is the record shown in the previous paragraph then R.[[field2]] is shorthand for &ldquo;the field of R named
+ [[field2]]&rdquo;.</p>
+
+ <p>Schema for commonly used Record field combinations may be named, and that name may be used as a prefix to a literal
+ Record value to identify the specific kind of aggregations that is being described. For example:
+ PropertyDescriptor{[[Value]]: 42, [[Writable]]: <b>false</b>, [[Configurable]]: <b>true</b>}.</p>
+ </section>
+
+ <section id="sec-completion-record-specification-type">
+ <div class="front">
+ <h1><span class="secnum" id="sec-6.2.2"><a href="#sec-completion-record-specification-type"
+ title="link to this section">6.2.2</a></span> The Completion Record Specification Type</h1>
+
+ <p>The Completion type is a Record used to explain the runtime propagation of values and control flow such as the
+ behaviour of statements (<code>break</code>, <code>continue</code>, <code>return</code> and <code>throw</code>) that
+ perform nonlocal transfers of control.</p>
+
+ <p>Values of the Completion type are Record values whose fields are defined as by <a href="#table-8">Table 8</a>.</p>
+
+ <figure>
+ <figcaption><span id="table-8">Table 8</span> &mdash; Completion Record Fields</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Field</th>
+ <th>Value</th>
+ <th>Meaning</th>
+ </tr>
+ <tr>
+ <td>[[type]]</td>
+ <td>One of <b>normal</b>, <b>break</b>, <b>continue</b>, <b>return</b>, or <b>throw</b></td>
+ <td>The type of completion that occurred.</td>
+ </tr>
+ <tr>
+ <td>[[value]]</td>
+ <td>any <a href="#sec-ecmascript-language-types">ECMAScript language value</a> or <b>empty</b></td>
+ <td>The value that was produced.</td>
+ </tr>
+ <tr>
+ <td>[[target]]</td>
+ <td>any ECMAScript string or <b>empty</b></td>
+ <td>The target label for directed control transfers.</td>
+ </tr>
+ </table>
+ </figure>
+
+ <p>The term &ldquo;abrupt completion&rdquo; refers to any completion with a <span style="font-family: Times New
+ Roman">[[type]]</span> value other than <b>normal</b>.</p>
+ </div>
+
+ <section id="sec-normalcompletion">
+ <h1><span class="secnum" id="sec-6.2.2.1"><a href="#sec-normalcompletion" title="link to this section">6.2.2.1</a></span>
+ NormalCompletion</h1>
+
+ <p>The abstract operation NormalCompletion with a single <i>argument</i>, such as:</p>
+
+ <ol class="proc">
+ <li>Return NormalCompletion(<i>argument</i>).</li>
+ </ol>
+
+ <p>Is a shorthand that is defined as follows:</p>
+
+ <ol class="proc">
+ <li>Return <a href="#sec-completion-record-specification-type">Completion</a>{[[type]]: <span style="font-family:
+ sans-serif">normal</span>, [[value]]: <i>argument</i>, [[target]]:<span style="font-family:
+ sans-serif">empty</span>}.</li>
+ </ol>
+ </section>
+
+ <section id="sec-implicit-completion-values">
+ <h1><span class="secnum" id="sec-6.2.2.2"><a href="#sec-implicit-completion-values"
+ title="link to this section">6.2.2.2</a></span> Implicit Completion Values</h1>
+
+ <p>The algorithms of this specification often implicitly return <a
+ href="#sec-completion-record-specification-type">Completion</a> Records whose [[type]] is <b>normal</b>. Unless it is
+ otherwise obvious from the context, an algorithm statement that returns a value that is not a <a
+ href="#sec-completion-record-specification-type">Completion Record</a>, such as:</p>
+
+ <ol class="proc">
+ <li>Return <code>"Infinity"</code>.</li>
+ </ol>
+
+ <p>means the same thing as:</p>
+
+ <ol class="proc">
+ <li>Return <a href="#sec-normalcompletion">NormalCompletion</a>(<code>"Infinity"</code>).</li>
+ </ol>
+
+ <p>However, if the value expression of a &ldquo;<span style="font-family: Times New Roman">return</span>&rdquo; statement
+ is a <a href="#sec-completion-record-specification-type">Completion Record</a> construction literal, the resulting <a
+ href="#sec-completion-record-specification-type">Completion Record</a> is returned. If the value expression is a call to
+ an abstract operation, the &ldquo;<span style="font-family: Times New Roman">return</span>&rdquo; statement simply returns
+ the <a href="#sec-completion-record-specification-type">Completion Record</a> produced by the abstract operation.</p>
+
+ <p>The abstract operation <span style="font-family: Times New Roman"><a
+ href="#sec-completion-record-specification-type">Completion</a>(<i>completionRecord</i>)</span> is used to emphasize that
+ a previously computed <a href="#sec-completion-record-specification-type">Completion Record</a> is being returned. The <a
+ href="#sec-completion-record-specification-type">Completion</a> abstract operation takes a single argument,
+ <var>completionRecord</var>, and performs the following steps: such as</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>completionRecord</i> is a <a
+ href="#sec-completion-record-specification-type">Completion Record</a>.</li>
+ <li>Return <i>completionRecord</i> as the <a href="#sec-completion-record-specification-type">Completion Record</a> of
+ this abstract operation.</li>
+ </ol>
+
+ <p>A &ldquo;<span style="font-family: Times New Roman">return</span>&rdquo; statement without a value in an algorithm step
+ means the same thing as:</p>
+
+ <ol class="proc">
+ <li>Return <a href="#sec-normalcompletion">NormalCompletion</a>(<b>undefined</b>).</li>
+ </ol>
+
+ <p>Any reference to a <a href="#sec-completion-record-specification-type">Completion Record</a> value that is in a context
+ that does not explicitly require a complete <a href="#sec-completion-record-specification-type">Completion Record</a>
+ value is equivalent to an explicit reference to the [[value]] field of the <a
+ href="#sec-completion-record-specification-type">Completion Record</a> value unless the <a
+ href="#sec-completion-record-specification-type">Completion Record</a> is an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</p>
+ </section>
+
+ <section id="sec-throw-an-exception">
+ <h1><span class="secnum" id="sec-6.2.2.3"><a href="#sec-throw-an-exception"
+ title="link to this section">6.2.2.3</a></span> Throw an Exception</h1>
+
+ <p>Algorithms steps that say to throw an exception, such as</p>
+
+ <ol class="proc">
+ <li>Throw a <b>TypeError</b> exception.</li>
+ </ol>
+
+ <p>mean the same things as:</p>
+
+ <ol class="proc">
+ <li>Return <a href="#sec-completion-record-specification-type">Completion</a>{[[type]]: <span style="font-family:
+ sans-serif">throw</span>, [[value]]: a newly created <b>TypeError</b> object, [[target]]:<span style="font-family:
+ sans-serif">empty</span>}.</li>
+ </ol>
+ </section>
+
+ <section id="sec-returnifabrupt">
+ <h1><span class="secnum" id="sec-6.2.2.4"><a href="#sec-returnifabrupt" title="link to this section">6.2.2.4</a></span>
+ ReturnIfAbrupt</h1>
+
+ <p>Algorithms steps that say</p>
+
+ <ol class="proc">
+ <li>ReturnIfAbrupt(<i>argument</i>).</li>
+ </ol>
+
+ <p>mean the same thing as:</p>
+
+ <ol class="proc">
+ <li>If <i>argument</i> is an <a href="#sec-completion-record-specification-type">abrupt completion</a>, return
+ <i>argument</i>.</li>
+ <li>Else if <i>argument</i> is a <a href="#sec-completion-record-specification-type">Completion Record</a>, let
+ <i>argument</i> be <i>argument</i>.[[value]].</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-reference-specification-type">
+ <div class="front">
+ <h1><span class="secnum" id="sec-6.2.3"><a href="#sec-reference-specification-type"
+ title="link to this section">6.2.3</a></span> The Reference Specification Type</h1>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> The Reference type is used to explain the behaviour of such operators as
+ <code>delete</code>, <code>typeof</code>, the assignment operators, the <code>super</code> keyword and other language
+ features. For example, the left-hand operand of an assignment is expected to produce a reference.</p>
+ </div>
+
+ <p>A <b>Reference</b> is a resolved name or property binding. A Reference consists of three components, the
+ <var>base</var> value, the <var>referenced name</var> and the Boolean valued <var>strict reference</var> flag. The
+ <var>base</var> value is either <b>undefined</b>, an Object, a Boolean, a String, a Symbol, a Number, or an <a
+ href="#sec-environment-records">Environment Record</a> (<a href="#sec-environment-records">8.1.1</a>). A <var>base</var>
+ value of <b>undefined</b> indicates that the Reference could not be resolved to a binding. The <var>referenced name</var>
+ is a String or Symbol value.</p>
+
+ <p>A Super Reference is a Reference that is used to represents a name binding that was expressed using the super keyword.
+ A Super Reference has an additional <var>thisValue</var> component and its <var>base</var> value will never be an <a
+ href="#sec-environment-records">Environment Record</a>.</p>
+
+ <p>The following abstract operations are used in this specification to access the components of references:</p>
+
+ <ul>
+ <li>
+ <p>GetBase(V). Returns the <i>base</i> value component of the reference V.</p>
+ </li>
+
+ <li>
+ <p>GetReferencedName(V). Returns the <i>referenced name</i> component of the reference V.</p>
+ </li>
+
+ <li>
+ <p>IsStrictReference(V). Returns the <i>strict reference</i> flag component of the reference V.</p>
+ </li>
+
+ <li>
+ <p>HasPrimitiveBase(V). Returns <b>true</b> if <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>base</i>)
+ is Boolean, String, Symbol, or Number.</p>
+ </li>
+
+ <li>
+ <p>IsPropertyReference(V). Returns <b>true</b> if either the <i>base</i> value is an object or HasPrimitiveBase(V) is
+ <b>true</b>; otherwise returns <b>false</b>.</p>
+ </li>
+
+ <li>
+ <p>IsUnresolvableReference(V). Returns <b>true</b> if the <i>base</i> value is <b>undefined</b> and <b>false</b>
+ otherwise.</p>
+ </li>
+
+ <li>
+ <p>IsSuperReference(V). Returns <b>true</b> if this reference has a <i>thisValue</i> component.</p>
+ </li>
+ </ul>
+
+ <p>The following abstract operations are used in this specification to operate on references:</p>
+ </div>
+
+ <section id="sec-getvalue">
+ <h1><span class="secnum" id="sec-6.2.3.1"><a href="#sec-getvalue" title="link to this section">6.2.3.1</a></span> GetValue
+ (V)</h1>
+ <ol class="proc">
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>V</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>V</i>) is not <a
+ href="#sec-reference-specification-type">Reference</a>, return <i>V</i>.</li>
+ <li>Let <i>base</i> be <a href="#sec-reference-specification-type">GetBase</a>(<i>V</i>).</li>
+ <li>If <a href="#sec-reference-specification-type">IsUnresolvableReference</a>(<i>V</i>), throw a <b>ReferenceError</b>
+ exception.</li>
+ <li>If <a href="#sec-reference-specification-type">IsPropertyReference</a>(<i>V</i>), then
+ <ol class="block">
+ <li>If <a href="#sec-reference-specification-type">HasPrimitiveBase</a>(<i>V</i>) is <b>true</b>, then
+ <ol class="block">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: In this case, <i>base</i> will never be <b>null</b> or
+ <b>undefined</b>.</li>
+ <li>Let <i>base</i> be <a href="#sec-toobject">ToObject</a>(<i>base</i>).</li>
+ </ol>
+ </li>
+ <li>Return <i>base.</i>[[Get]](<a href="#sec-reference-specification-type">GetReferencedName</a>(<i>V</i>), <a
+ href="#sec-getthisvalue">GetThisValue</a>(<i>V</i>)).</li>
+ </ol>
+ </li>
+ <li>Else <i>base</i> must be an <a href="#sec-environment-records">Environment Record</a>,
+ <ol class="block">
+ <li>Return <i>base.</i>GetBindingValue(<a href="#sec-reference-specification-type">GetReferencedName</a>(<i>V</i>),
+ <a href="#sec-reference-specification-type">IsStrictReference</a>(<i>V</i>)) (<a
+ href="#sec-environment-records">see 8.1.1</a>).</li>
+ </ol>
+ </li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> The object that may be created in step 5.a.ii is not accessible outside of the above
+ abstract operation and the ordinary object [[Get]] internal method. An implementation might choose to avoid the actual
+ creation of the object.</p>
+ </div>
+ </section>
+
+ <section id="sec-putvalue">
+ <h1><span class="secnum" id="sec-6.2.3.2"><a href="#sec-putvalue" title="link to this section">6.2.3.2</a></span> PutValue
+ (V, W)</h1>
+ <ol class="proc">
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>V</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>W</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>V</i>) is not <a
+ href="#sec-reference-specification-type">Reference</a>, throw a <b>ReferenceError</b> exception.</li>
+ <li>Let <i>base</i> be <a href="#sec-reference-specification-type">GetBase</a>(<i>V</i>).</li>
+ <li>If <a href="#sec-reference-specification-type">IsUnresolvableReference</a>(<i>V</i>), then
+ <ol class="block">
+ <li>If <a href="#sec-reference-specification-type">IsStrictReference</a>(<i>V</i>) is <b>true</b>, then
+ <ol class="block">
+ <li>Throw <b>ReferenceError</b> exception.</li>
+ </ol>
+ </li>
+ <li>Let <i>globalObj</i> be <a href="#sec-getglobalobject">GetGlobalObject</a>().</li>
+ <li>Return <a href="#sec-set-o-p-v-throw">Set</a>(<i>globalObj</i>,<a
+ href="#sec-reference-specification-type">GetReferencedName</a>(<i>V</i>), <i>W</i>, <b>false</b>).</li>
+ </ol>
+ </li>
+ <li>Else if <a href="#sec-reference-specification-type">IsPropertyReference</a>(<i>V</i>), then
+ <ol class="block">
+ <li>If <a href="#sec-reference-specification-type">HasPrimitiveBase</a>(<i>V</i>) is <b>true</b>, then
+ <ol class="block">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: In this case, <i>base</i> will never be <b>null</b> or
+ <b>undefined</b>.</li>
+ <li>Set <i>base</i> to <a href="#sec-toobject">ToObject</a>(<i>base</i>).</li>
+ </ol>
+ </li>
+ <li>Let <i>succeeded</i> be <i>base.</i>[[Set]](<a
+ href="#sec-reference-specification-type">GetReferencedName</a>(<i>V</i>), <i>W</i>, <a
+ href="#sec-getthisvalue">GetThisValue</a>(<i>V</i>)).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>succeeded</i>).</li>
+ <li>If <i>succeeded</i> is <b>false</b> and <a
+ href="#sec-reference-specification-type">IsStrictReference</a>(<i>V</i>) is <b>true</b>, throw a
+ <b>TypeError</b> exception.</li>
+ <li>Return.</li>
+ </ol>
+ </li>
+ <li>Else <i>base</i> must be an <a href="#sec-environment-records">Environment Record</a>.
+ <ol class="block">
+ <li>Return <i>base.</i>SetMutableBinding(<a
+ href="#sec-reference-specification-type">GetReferencedName</a>(<i>V</i>), <i>W</i>, <a
+ href="#sec-reference-specification-type">IsStrictReference</a>(<i>V</i>)) (<a
+ href="#sec-environment-records">see 8.1.1</a>).</li>
+ </ol>
+ </li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> The object that may be created in step 6.a.ii is not accessible outside of the above
+ algorithm and the ordinary object [[Set]] internal method. An implementation might choose to avoid the actual creation
+ of that object.</p>
+ </div>
+ </section>
+
+ <section id="sec-getthisvalue">
+ <h1><span class="secnum" id="sec-6.2.3.3"><a href="#sec-getthisvalue" title="link to this section">6.2.3.3</a></span>
+ GetThisValue (V)</h1>
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-reference-specification-type">IsPropertyReference</a>(<i>V</i>) is <b>true</b>.</li>
+ <li>If <a href="#sec-reference-specification-type">IsSuperReference</a>(<i>V</i>), then
+ <ol class="block">
+ <li>Return the value of the <i>thisValue</i> component of the reference <i>V</i>.</li>
+ </ol>
+ </li>
+ <li>Return <a href="#sec-reference-specification-type">GetBase</a>(<i>V</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-initializereferencedbinding">
+ <h1><span class="secnum" id="sec-6.2.3.4"><a href="#sec-initializereferencedbinding"
+ title="link to this section">6.2.3.4</a></span> InitializeReferencedBinding (V, W)</h1>
+ <ol class="proc">
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>V</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>W</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>V</i>)
+ is <a href="#sec-reference-specification-type">Reference</a>.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-reference-specification-type">IsUnresolvableReference</a>(<i>V</i>) is <b>false</b>.</li>
+ <li>Let <i>base</i> be <a href="#sec-reference-specification-type">GetBase</a>(<i>V</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>base</i> is an <a href="#sec-environment-records">Environment
+ Record</a>.</li>
+ <li>Return <i>base.</i>InitializeBinding(<a href="#sec-reference-specification-type">GetReferencedName</a>(<i>V</i>),
+ <i>W</i>).</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-property-descriptor-specification-type">
+ <div class="front">
+ <h1><span class="secnum" id="sec-6.2.4"><a href="#sec-property-descriptor-specification-type"
+ title="link to this section">6.2.4</a></span> The Property Descriptor Specification Type</h1>
+
+ <p>The Property Descriptor type is used to explain the manipulation and reification of Object property attributes. Values
+ of the Property Descriptor type are Records. Each field&rsquo;s name is an attribute name and its value is a corresponding
+ attribute value as specified in <a href="#sec-property-attributes">6.1.7.1</a>. In addition, any field may be present or
+ absent. The schema name used within this specification to tag literal descriptions of Property Descriptor records is
+ &ldquo;PropertyDescriptor&rdquo;.</p>
+
+ <p>Property Descriptor values may be further classified as data Property Descriptors and accessor Property Descriptors
+ based upon the existence or use of certain fields. A data Property Descriptor is one that includes any fields named either
+ [[Value]] or [[Writable]]. An accessor Property Descriptor is one that includes any fields named either [[Get]] or
+ [[Set]]. Any Property Descriptor may have fields named [[Enumerable]] and [[Configurable]]. A Property Descriptor value
+ may not be both a data Property Descriptor and an accessor Property Descriptor; however, it may be neither. A generic
+ Property Descriptor is a Property Descriptor value that is neither a data Property Descriptor nor an accessor Property
+ Descriptor. A fully populated Property Descriptor is one that is either an accessor Property Descriptor or a data Property
+ Descriptor and that has all of the fields that correspond to the property attributes defined in either <a
+ href="#table-2">Table 2</a> or <a href="#table-3">Table 3</a>.</p>
+
+ <p>The following abstract operations are used in this specification to operate upon Property Descriptor values:</p>
+ </div>
+
+ <section id="sec-isaccessordescriptor">
+ <h1><span class="secnum" id="sec-6.2.4.1"><a href="#sec-isaccessordescriptor"
+ title="link to this section">6.2.4.1</a></span> IsAccessorDescriptor ( Desc )</h1>
+
+ <p>When the abstract operation IsAccessorDescriptor is called with <a
+ href="#sec-property-descriptor-specification-type">Property Descriptor</a> <span class="nt">Desc</span>, the following
+ steps are taken:</p>
+
+ <ol class="proc">
+ <li>If <i>Desc</i> is <b>undefined</b>, return <b>false</b>.</li>
+ <li>If both <i>Desc</i>.[[Get]] and <i>Desc</i>.[[Set]] are absent, return <b>false</b>.</li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-isdatadescriptor">
+ <h1><span class="secnum" id="sec-6.2.4.2"><a href="#sec-isdatadescriptor" title="link to this section">6.2.4.2</a></span>
+ IsDataDescriptor ( Desc )</h1>
+
+ <p>When the abstract operation IsDataDescriptor is called with <a
+ href="#sec-property-descriptor-specification-type">Property Descriptor</a> <span class="nt">Desc</span>, the following
+ steps are taken:</p>
+
+ <ol class="proc">
+ <li>If <i>Desc</i> is <b>undefined</b>, return <b>false</b>.</li>
+ <li>If both <i>Desc</i>.[[Value]] and <i>Desc</i>.[[Writable]] are absent, return <b>false</b>.</li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-isgenericdescriptor">
+ <h1><span class="secnum" id="sec-6.2.4.3"><a href="#sec-isgenericdescriptor"
+ title="link to this section">6.2.4.3</a></span> IsGenericDescriptor ( Desc )</h1>
+
+ <p>When the abstract operation IsGenericDescriptor is called with <a
+ href="#sec-property-descriptor-specification-type">Property Descriptor</a> <span class="nt">Desc</span>, the following
+ steps are taken:</p>
+
+ <ol class="proc">
+ <li>If <i>Desc</i> is <b>undefined</b>, return <b>false</b>.</li>
+ <li>If <a href="#sec-isaccessordescriptor">IsAccessorDescriptor</a>(<i>Desc</i>) and <a
+ href="#sec-isdatadescriptor">IsDataDescriptor</a>(<i>Desc</i>) are both <b>false</b>, return <b>true</b>.</li>
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-frompropertydescriptor">
+ <h1><span class="secnum" id="sec-6.2.4.4"><a href="#sec-frompropertydescriptor"
+ title="link to this section">6.2.4.4</a></span> FromPropertyDescriptor ( Desc )</h1>
+
+ <p>When the abstract operation FromPropertyDescriptor is called with <a
+ href="#sec-property-descriptor-specification-type">Property Descriptor</a> <span class="nt">Desc</span>, the following
+ steps are taken:</p>
+
+ <ol class="proc">
+ <li>If <i>Desc</i> is <b>undefined</b>, return <b>undefined</b>.</li>
+ <li>Let <i>obj</i> be <a href="#sec-objectcreate">ObjectCreate</a>(<span style="font-family:
+ sans-serif">%ObjectPrototype%</span>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>obj</i> is an extensible ordinary object with no own
+ properties.</li>
+ <li>If <i>Desc</i> has a [[Value]] field, then
+ <ol class="block">
+ <li><a href="#sec-call">Call</a> <a href="#sec-createdataproperty">CreateDataProperty</a>(<i>obj</i>,
+ <code>"value"</code>, <i>Desc</i>.[[Value]]).</li>
+ </ol>
+ </li>
+ <li>If <i>Desc</i> has a [[Writable]] field, then
+ <ol class="block">
+ <li><a href="#sec-call">Call</a> <a href="#sec-createdataproperty">CreateDataProperty</a>(<i>obj</i>,
+ <code>"writable"</code>, <i>Desc</i>.[[Writable]]).</li>
+ </ol>
+ </li>
+ <li>If <i>Desc</i> has a [[Get]] field, then
+ <ol class="block">
+ <li><a href="#sec-call">Call</a> <a href="#sec-createdataproperty">CreateDataProperty</a>(<i>obj</i>,
+ <code>"get",</code> <i>Desc</i>.[[Get]]).</li>
+ </ol>
+ </li>
+ <li>If <i>Desc</i> has a [[Set]] field, then
+ <ol class="block">
+ <li><a href="#sec-call">Call</a> <a href="#sec-createdataproperty">CreateDataProperty</a>(<i>obj</i>,
+ <code>"set"</code>, <i>Desc</i>.[[Set]])</li>
+ </ol>
+ </li>
+ <li>If <i>Desc</i> has an [[Enumerable]] field, then
+ <ol class="block">
+ <li><a href="#sec-call">Call</a> <a href="#sec-createdataproperty">CreateDataProperty</a>(<i>obj</i>,
+ <code>"enumerable"</code>, <i>Desc</i>.[[Enumerable]]).</li>
+ </ol>
+ </li>
+ <li>If <i>Desc</i> has a [[Configurable]] field, then
+ <ol class="block">
+ <li><a href="#sec-call">Call</a> <a href="#sec-createdataproperty">CreateDataProperty</a>(<i>obj</i> ,
+ <code>"configurable"</code>, <i>Desc</i>.[[Configurable]]).</li>
+ </ol>
+ </li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: all of the above <a
+ href="#sec-createdataproperty">CreateDataProperty</a> operations return <b>true</b>.</li>
+ <li>Return <i>obj</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-topropertydescriptor">
+ <h1><span class="secnum" id="sec-6.2.4.5"><a href="#sec-topropertydescriptor"
+ title="link to this section">6.2.4.5</a></span> ToPropertyDescriptor ( Obj )</h1>
+
+ <p>When the abstract operation ToPropertyDescriptor is called with object <span class="nt">Obj</span>, the following steps
+ are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>Obj</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>Obj</i>) is not Object throw a <b>TypeError</b>
+ exception.</li>
+ <li>Let <i>desc</i> be a new <a href="#sec-property-descriptor-specification-type">Property Descriptor</a> that
+ initially has no fields.</li>
+ <li>If <a href="#sec-hasproperty">HasProperty</a>(<i>Obj</i>, <code>"enumerable"</code>) is <b>true</b>, then
+ <ol class="block">
+ <li>Let <i>enum</i> be <a href="#sec-toboolean">ToBoolean</a>(<a href="#sec-get-o-p">Get</a>(<i>Obj</i>,
+ <code>"enumerable"</code>)).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>enum</i>).</li>
+ <li>Set the [[Enumerable]] field of <i>desc</i> to <i>enum</i>.</li>
+ </ol>
+ </li>
+ <li>If <a href="#sec-hasproperty">HasProperty</a>(<i>Obj</i>, <code>"configurable"</code>) is <b>true</b>, then
+ <ol class="block">
+ <li>Let <i>conf</i> be <a href="#sec-toboolean">ToBoolean</a>(<a href="#sec-get-o-p">Get</a>(<i>Obj</i>,
+ <code>"configurable"</code>)).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>conf</i>).</li>
+ <li>Set the [[Configurable]] field of <i>desc</i> to <i>conf</i>.</li>
+ </ol>
+ </li>
+ <li>If <a href="#sec-hasproperty">HasProperty</a>(<i>Obj</i>, <code>"value"</code>) is <b>true</b>, then
+ <ol class="block">
+ <li>Let <i>value</i> be <a href="#sec-get-o-p">Get</a>(<i>Obj</i>, <code>"value"</code>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>value</i>).</li>
+ <li>Set the [[Value]] field of <i>desc</i> to <i>value</i>.</li>
+ </ol>
+ </li>
+ <li>If <a href="#sec-hasproperty">HasProperty</a>(<i>Obj</i>, <code>"writable"</code>) is <b>true</b>, then
+ <ol class="block">
+ <li>Let <i>writable</i> be <a href="#sec-toboolean">ToBoolean</a>(<a href="#sec-get-o-p">Get</a>(<i>Obj</i>,
+ <code>"writable"</code>)).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>writable</i>).</li>
+ <li>Set the [[Writable]] field of <i>desc</i> to <i>writable</i>.</li>
+ </ol>
+ </li>
+ <li>If <a href="#sec-hasproperty">HasProperty</a>(<i>Obj</i>, <code>"get"</code>) is <b>true</b>, then
+ <ol class="block">
+ <li>Let <i>getter</i> be <a href="#sec-get-o-p">Get</a>(<i>Obj</i>, <code>"get"</code>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>getter</i>).</li>
+ <li>If <a href="#sec-iscallable">IsCallable</a>(<i>getter</i>) is <b>false</b> and <i>getter</i> is not
+ <b>undefined</b>, throw a <b>TypeError</b> exception.</li>
+ <li>Set the [[Get]] field of <i>desc</i> to <i>getter</i>.</li>
+ </ol>
+ </li>
+ <li>If <a href="#sec-hasproperty">HasProperty</a>(<i>Obj</i>, <code>"set"</code>) is <b>true</b>, then
+ <ol class="block">
+ <li>Let <i>setter</i> be <a href="#sec-get-o-p">Get</a>(<i>Obj</i>, <code>"set"</code>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>setter</i>).</li>
+ <li>If <a href="#sec-iscallable">IsCallable</a>(<i>setter</i>) is <b>false</b> and <i>setter</i> is not
+ <b>undefined</b>, throw a <b>TypeError</b> exception.</li>
+ <li>Set the [[Set]] field of <i>desc</i> to <i>setter</i>.</li>
+ </ol>
+ </li>
+ <li>If either <i>desc</i>.[[Get]] or <i>desc</i>.[[Set]] are present, then
+ <ol class="block">
+ <li>If either <i>desc</i>.[[Value]] or <i>desc</i>.[[Writable]] are present, throw a <b>TypeError</b>
+ exception.</li>
+ </ol>
+ </li>
+ <li>Return <i>desc</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-completepropertydescriptor">
+ <h1><span class="secnum" id="sec-6.2.4.6"><a href="#sec-completepropertydescriptor"
+ title="link to this section">6.2.4.6</a></span> CompletePropertyDescriptor ( Desc )</h1>
+
+ <p>When the abstract operation CompletePropertyDescriptor is called with <a
+ href="#sec-property-descriptor-specification-type">Property Descriptor</a> <span class="nt">Desc</span> the following
+ steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>Desc</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>Desc</i> is a <a
+ href="#sec-property-descriptor-specification-type">Property Descriptor</a></li>
+ <li>Let <i>like</i> be Record{[[Value]]: <b>undefined</b>, [[Writable]]: <b>false</b>, [[Get]]: <b>undefined</b>,
+ [[Set]]: <b>undefined</b>, [[Enumerable]]: <b>false</b>, [[Configurable]]: <b>false</b>}.</li>
+ <li>If either <a href="#sec-isgenericdescriptor">IsGenericDescriptor</a>(<i>Desc</i>) or <a
+ href="#sec-isdatadescriptor">IsDataDescriptor</a>(<i>Desc</i>) is <b>true</b>, then
+ <ol class="block">
+ <li>If <i>Desc</i> does not have a [[Value]] field, set <i>Desc</i>.[[Value]] to <i>like</i>.[[Value]].</li>
+ <li>If <i>Desc</i> does not have a [[Writable]] field, set <i>Desc</i>.[[Writable]] to
+ <i>like</i>.[[Writable]].</li>
+ </ol>
+ </li>
+ <li>Else,
+ <ol class="block">
+ <li>If <i>Desc</i> does not have a [[Get]] field, set <i>Desc</i>.[[Get]] to <i>like</i>.[[Get]].</li>
+ <li>If <i>Desc</i> does not have a [[Set]] field, set <i>Desc</i>.[[Set]] to <i>like</i>.[[Set]].</li>
+ </ol>
+ </li>
+ <li>If <i>Desc</i> does not have an [[Enumerable]] field, set <i>Desc</i>.[[Enumerable]] to
+ <i>like</i>.[[Enumerable]].</li>
+ <li>If <i>Desc</i> does not have a [[Configurable]] field, set <i>Desc</i>.[[Configurable]] to
+ <i>like</i>.[[Configurable]].</li>
+ <li>Return <i>Desc</i>.</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-lexical-environment-and-environment-record-specification-types">
+ <h1><span class="secnum" id="sec-6.2.5"><a href="#sec-lexical-environment-and-environment-record-specification-types"
+ title="link to this section">6.2.5</a></span> The Lexical Environment and Environment Record Specification Types</h1>
+
+ <p>The <a href="#sec-lexical-environments">Lexical Environment</a> and <a href="#sec-environment-records">Environment
+ Record</a> types are used to explain the behaviour of name resolution in nested functions and blocks. These types and the
+ operations upon them are defined in <a href="#sec-lexical-environments">8.1</a>.</p>
+ </section>
+
+ <section id="sec-data-blocks">
+ <div class="front">
+ <h1><span class="secnum" id="sec-6.2.6"><a href="#sec-data-blocks" title="link to this section">6.2.6</a></span> Data
+ Blocks</h1>
+
+ <p>The Data Block specification type is used to describe a distinct and mutable sequence of byte-sized (8 bit) numeric
+ values. A Data Block value is created with a fixed number of bytes that each have the initial value 0.</p>
+
+ <p>For notational convenience within this specification, an array-like syntax can be used to express to the individual
+ bytes of a Data Block value. This notation presents a Data Block value as a 0-origined integer indexed sequence of bytes.
+ For example, if <var>db</var> is a 5 byte Data Block value then <var>db</var>[2] can be used to express access to its
+ 3<sup>rd</sup> byte.</p>
+
+ <p>The following abstract operations are used in this specification to operate upon Data Block values:</p>
+ </div>
+
+ <section id="sec-createbytedatablock">
+ <h1><span class="secnum" id="sec-6.2.6.1"><a href="#sec-createbytedatablock"
+ title="link to this section">6.2.6.1</a></span> CreateByteDataBlock(size)</h1>
+
+ <p>When the abstract operation CreateByteDataBlock is called with integer argument <var>size</var>, the following steps
+ are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>size</i>&ge;0.</li>
+ <li>Let <i>db</i> be a new <a href="#sec-data-blocks">Data Block</a> value consisting of <i>size</i> bytes. If it is
+ impossible to create such a <a href="#sec-data-blocks">Data Block</a>, throw a <b>RangeError</b> exception.</li>
+ <li>Set all of the bytes of <i>db</i> to 0.</li>
+ <li>Return <i>db</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-copydatablockbytes">
+ <h1><span class="secnum" id="sec-6.2.6.2"><a href="#sec-copydatablockbytes"
+ title="link to this section">6.2.6.2</a></span> CopyDataBlockBytes(toBlock, toIndex, fromBlock, fromIndex, count)</h1>
+
+ <p>When the abstract operation CopyDataBlockBytes is called the following steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>fromBlock</i> and <i>toBlock</i> are distinct <a
+ href="#sec-data-blocks">Data Block</a> values.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>fromIndex</i>, <i>toIndex</i>, and <i>count</i> are positive
+ integer values.</li>
+ <li>Let <i>fromSize</i> be the number of bytes in <i>fromBlock</i>.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>fromIndex</i>+<i>count</i> &le; <i>fromSize</i>.</li>
+ <li>Let <i>toSize</i> be the number of bytes in <i>toBlock</i>.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>toIndex</i>+<i>count</i> &le; <i>toSize</i>.</li>
+ <li>Repeat, while <i>count</i>&gt;0
+ <ol class="block">
+ <li>Set <i>toBlock</i>[<i>toIndex</i>] to the value of <i>fromBlock</i>[<i>fromIndex</i>].</li>
+ <li>Increment <i>toIndex</i> and <i>fromIndex</i> each by 1.</li>
+ <li>Decrement <i>count</i> by 1.</li>
+ </ol>
+ </li>
+ <li>Return <a href="#sec-normalcompletion">NormalCompletion</a>(<span style="font-family: sans-serif">empty</span>)</li>
+ </ol>
+ </section>
+ </section>
+ </section>
+</section>
+
+<section id="sec-abstract-operations">
+ <div class="front">
+ <h1><span class="secnum" id="sec-7"><a href="#sec-abstract-operations" title="link to this section">7</a></span> Abstract
+ Operations</h1>
+
+ <p>These operations are not a part of the ECMAScript language; they are defined here to solely to aid the specification of the
+ semantics of the ECMAScript language. Other, more specialized abstract operations are defined throughout this
+ specification.</p>
+ </div>
+
+ <section id="sec-type-conversion">
+ <div class="front">
+ <h1><span class="secnum" id="sec-7.1"><a href="#sec-type-conversion" title="link to this section">7.1</a></span> Type
+ Conversion</h1>
+
+ <p>The ECMAScript language implicitly performs automatic type conversion as needed. To clarify the semantics of certain
+ constructs it is useful to define a set of conversion abstract operations. The conversion abstract operations are
+ polymorphic; they can accept a value of any <a href="#sec-ecmascript-language-types">ECMAScript language type</a> or of a <a
+ href="#sec-completion-record-specification-type">Completion Record</a> value. But no other specification types are used with
+ these operations.</p>
+ </div>
+
+ <section id="sec-toprimitive">
+ <h1><span class="secnum" id="sec-7.1.1"><a href="#sec-toprimitive" title="link to this section">7.1.1</a></span> ToPrimitive
+ ( input [, PreferredType] )</h1>
+
+ <p>The abstract operation ToPrimitive takes an <var>input</var> argument and an optional argument <span
+ class="nt">PreferredType</span>. The abstract operation ToPrimitive converts its <var>input</var> argument to a non-Object
+ type. If an object is capable of converting to more than one primitive type, it may use the optional hint <span
+ class="nt">PreferredType</span> to favour that type. Conversion occurs according to <a href="#table-9">Table 9</a>:</p>
+
+ <figure>
+ <figcaption><span id="table-9">Table 9</span> &mdash; ToPrimitive Conversions</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Input Type</th>
+ <th>Result</th>
+ </tr>
+ <tr>
+ <td><a href="#sec-completion-record-specification-type">Completion Record</a></td>
+ <td>If <var>input</var> is an <a href="#sec-completion-record-specification-type">abrupt completion</a>, return <var>input</var>. Otherwise return ToPrimitive(<var>input</var>.[[value]]) also passing the optional hint <span class="nt">PreferredType</span>.</td>
+ </tr>
+ <tr>
+ <td>Undefined</td>
+ <td>Return <var>input</var>.</td>
+ </tr>
+ <tr>
+ <td>Null</td>
+ <td>Return <var>input</var>.</td>
+ </tr>
+ <tr>
+ <td>Boolean</td>
+ <td>Return <var>input</var>.</td>
+ </tr>
+ <tr>
+ <td>Number</td>
+ <td>Return <var>input</var>.</td>
+ </tr>
+ <tr>
+ <td>String</td>
+ <td>Return <var>input</var>.</td>
+ </tr>
+ <tr>
+ <td>Symbol</td>
+ <td>Return <var>input</var>.</td>
+ </tr>
+ <tr>
+ <td>Object</td>
+ <td>Perform the steps following this table.</td>
+ </tr>
+ </table>
+ </figure>
+
+ <p>When <span style="font-family: Times New Roman"><a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>input</i>)</span> is Object, the following steps are taken:</p>
+
+ <ol class="proc">
+ <li>If <i>PreferredType</i> was not passed, let <i>hint</i> be <code>"default"</code>.</li>
+ <li>Else if <i>PreferredType</i> is hint String, let <i>hint</i> be <code>"string"</code>.</li>
+ <li>Else <i>PreferredType</i> is hint Number, let <i>hint</i> be <code>"number"</code>.</li>
+ <li>Let <i>exoticToPrim</i> be <a href="#sec-getmethod">GetMethod</a>(<i>input</i>, @@toPrimitive).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>exoticToPrim</i>).</li>
+ <li>If <i>exoticToPrim</i> is not <b>undefined</b>, then
+ <ol class="block">
+ <li>Let <i>result</i> be <a href="#sec-call">Call</a>(<i>exoticToPrim</i>, <i>input,</i>
+ &laquo;<i>hint</i>&raquo;).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>result</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>result</i>) is not Object, return
+ <i>result</i>.</li>
+ <li>Throw a <b>TypeError</b> exception.</li>
+ </ol>
+ </li>
+ <li>If <i>hint</i> is <code>"default"</code>, let <i>hint</i> be <code>"number"</code>.</li>
+ <li>Return OrdinaryToPrimitive(<i>input,hint</i>).</li>
+ </ol>
+
+ <p>When the abstract operation OrdinaryToPrimitive is called with arguments <var>O</var> and <var>hint</var>, the following
+ steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>O</i>) is
+ Object</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>hint</i>)
+ is String and its value is either <code>"string"</code> or <code>"number"</code>.</li>
+ <li>If <i>hint</i> is <code>"string"</code>, then
+ <ol class="block">
+ <li>Let <i>methodNames</i> be &laquo;<code>"toString"</code>, <code>"valueOf"</code>&raquo;.</li>
+ </ol>
+ </li>
+ <li>Else,
+ <ol class="block">
+ <li>Let <i>methodNames</i> be &laquo;<code>"valueOf"</code>, <code>"toString"</code>&raquo;.</li>
+ </ol>
+ </li>
+ <li>For each <i>name</i> in <i>methodNames</i> in <a href="#sec-list-and-record-specification-type">List</a> order, do
+ <ol class="block">
+ <li>Let <i>method</i> be <a href="#sec-get-o-p">Get</a>(<i>O</i>, <i>name</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>method</i>).</li>
+ <li>If <a href="#sec-iscallable">IsCallable</a>(<i>method</i>) is <b>true</b>, then
+ <ol class="block">
+ <li>Let <i>result</i> be <a href="#sec-call">Call</a>(<i>method</i>, <i>O</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>result</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>result</i>) is not Object, return
+ <i>result</i>.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Throw a <b>TypeError</b> exception.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> When ToPrimitive is called with no hint, then it generally behaves as if the hint were
+ Number. However, objects may over-ride this behaviour by defining a @@toPrimitive method. Of the objects defined in this
+ specification only Date objects (<a href="#sec-date.prototype-@@toprimitive">see 20.3.4.45</a>) and Symbol objects (<a
+ href="#sec-symbol.prototype-@@toprimitive">see 19.4.3.4</a>) over-ride the default ToPrimitive behaviour. Date objects
+ treat no hint as if the hint were String.</p>
+ </div>
+ </section>
+
+ <section id="sec-toboolean">
+ <h1><span class="secnum" id="sec-7.1.2"><a href="#sec-toboolean" title="link to this section">7.1.2</a></span> ToBoolean (
+ argument )</h1>
+
+ <p>The abstract operation ToBoolean converts <var>argument</var> to a value of type Boolean according to <a
+ href="#table-10">Table 10</a>:</p>
+
+ <figure>
+ <figcaption><span id="table-10">Table 10</span> &mdash; ToBoolean Conversions</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Argument Type</th>
+ <th>Result</th>
+ </tr>
+ <tr>
+ <td><a href="#sec-completion-record-specification-type">Completion Record</a></td>
+ <td>If <var>argument</var> is an <a href="#sec-completion-record-specification-type">abrupt completion</a>, return <var>argument</var>. Otherwise return ToBoolean(<var>argument</var>.[[value]]).</td>
+ </tr>
+ <tr>
+ <td>Undefined</td>
+ <td>Return <b>false</b>.</td>
+ </tr>
+ <tr>
+ <td>Null</td>
+ <td>Return <b>false</b>.</td>
+ </tr>
+ <tr>
+ <td>Boolean</td>
+ <td>Return <var>argument</var>.</td>
+ </tr>
+ <tr>
+ <td>Number</td>
+ <td>Return <b>false</b> if <var>argument</var> is <b>+0</b>, <b>&minus;0</b>, or <b>NaN</b>; otherwise return <b>true</b>.</td>
+ </tr>
+ <tr>
+ <td>String</td>
+ <td>Return <b>false</b> if <var>argument</var> is the empty String (its length is zero); otherwise return <b>true</b>.</td>
+ </tr>
+ <tr>
+ <td>Symbol</td>
+ <td>Return <b>true</b>.</td>
+ </tr>
+ <tr>
+ <td>Object</td>
+ <td>Return <b>true</b>.</td>
+ </tr>
+ </table>
+ </figure>
+ </section>
+
+ <section id="sec-tonumber">
+ <div class="front">
+ <h1><span class="secnum" id="sec-7.1.3"><a href="#sec-tonumber" title="link to this section">7.1.3</a></span> ToNumber (
+ argument )</h1>
+
+ <p>The abstract operation ToNumber converts <var>argument</var> to a value of type Number according to <a
+ href="#table-11">Table 11</a>:</p>
+
+ <figure>
+ <figcaption><span id="table-11">Table 11</span> &mdash; ToNumber Conversions</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Argument Type</th>
+ <th>Result</th>
+ </tr>
+ <tr>
+ <td><a href="#sec-completion-record-specification-type">Completion Record</a></td>
+ <td>If <var>argument</var> is an <a href="#sec-completion-record-specification-type">abrupt completion</a>, return <var>argument</var>. Otherwise return ToNumber(<var>argument</var>.[[value]]).</td>
+ </tr>
+ <tr>
+ <td>Undefined</td>
+ <td>Return <b>NaN</b>.</td>
+ </tr>
+ <tr>
+ <td>Null</td>
+ <td>Return <b>+0</b>.</td>
+ </tr>
+ <tr>
+ <td>Boolean</td>
+ <td>Return <b>1</b> if <var>argument</var> is <b>true</b>. Return <b>+0</b> if <var>argument</var> is <b>false</b>.</td>
+ </tr>
+ <tr>
+ <td>Number</td>
+ <td>Return <var>argument</var> (no conversion).</td>
+ </tr>
+ <tr>
+ <td>String</td>
+ <td>See grammar and conversion algorithm below.</td>
+ </tr>
+ <tr>
+ <td>Symbol</td>
+ <td>Throw a <b>TypeError</b> exception.</td>
+ </tr>
+ <tr>
+ <td>Object</td>
+
+ <td>
+ <p>Apply the following steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>primValue</i> be <a href="#sec-toprimitive">ToPrimitive</a>(<i>argument</i>, hint Number).</li>
+ <li>Return ToNumber(<i>primValue</i>).</li>
+ </ol>
+ </td>
+ </tr>
+ </table>
+ </figure>
+ </div>
+
+ <section id="sec-tonumber-applied-to-the-string-type">
+ <div class="front">
+ <h1><span class="secnum" id="sec-7.1.3.1"><a href="#sec-tonumber-applied-to-the-string-type"
+ title="link to this section">7.1.3.1</a></span> ToNumber Applied to the String Type</h1>
+
+ <p><a href="#sec-tonumber">ToNumber</a> applied to Strings applies the following grammar to the input String interpreted
+ as a sequence of UTF-16 encoded code points (<a href="#sec-ecmascript-language-types-string-type">6.1.4</a>). If the
+ grammar cannot interpret the String as an expansion of <span class="nt">StringNumericLiteral</span>, then the result of
+ <a href="#sec-tonumber">ToNumber</a> is <b>NaN</b>.</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> The terminal symbols of this grammar are all composed of Unicode BMP code points so
+ the result will be <b>NaN</b> if the string contains the UTF-16 encoding of any supplementary code points or any
+ unpaired surrogate code points</p>
+ </div>
+
+ <h2>Syntax</h2>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">StringNumericLiteral</span> <span class="geq">:::</span></div>
+ <div class="rhs"><span class="nt">StrWhiteSpace</span><sub class="g-opt">opt</sub></div>
+ <div class="rhs"><span class="nt">StrWhiteSpace</span><sub class="g-opt">opt</sub> <span class="nt">StrNumericLiteral</span> <span class="nt">StrWhiteSpace</span><sub class="g-opt">opt</sub></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">StrWhiteSpace</span> <span class="geq">:::</span></div>
+ <div class="rhs"><span class="nt">StrWhiteSpaceChar</span> <span class="nt">StrWhiteSpace</span><sub class="g-opt">opt</sub></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">StrWhiteSpaceChar</span> <span class="geq">:::</span></div>
+ <div class="rhs"><span class="nt">WhiteSpace</span></div>
+ <div class="rhs"><span class="nt">LineTerminator</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">StrNumericLiteral</span> <span class="geq">:::</span></div>
+ <div class="rhs"><span class="nt">StrDecimalLiteral</span></div>
+ <div class="rhs"><span class="nt">BinaryIntegerLiteral</span></div>
+ <div class="rhs"><span class="nt">OctalIntegerLiteral</span></div>
+ <div class="rhs"><span class="nt">HexIntegerLiteral</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">StrDecimalLiteral</span> <span class="geq">:::</span></div>
+ <div class="rhs"><span class="nt">StrUnsignedDecimalLiteral</span></div>
+ <div class="rhs"><code class="t">+</code> <span class="nt">StrUnsignedDecimalLiteral</span></div>
+ <div class="rhs"><code class="t">-</code> <span class="nt">StrUnsignedDecimalLiteral</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">StrUnsignedDecimalLiteral</span> <span class="geq">:::</span></div>
+ <div class="rhs"><span class="nt">Infinity</span></div>
+ <div class="rhs"><span class="nt">DecimalDigits</span> <code class="t">.</code> <span class="nt">DecimalDigits</span><sub class="g-opt">opt</sub> <span class="nt">ExponentPart</span><sub class="g-opt">opt</sub></div>
+ <div class="rhs"><code class="t">.</code> <span class="nt">DecimalDigits</span> <span class="nt">ExponentPart</span><sub class="g-opt">opt</sub></div>
+ <div class="rhs"><span class="nt">DecimalDigits</span> <span class="nt">ExponentPart</span><sub class="g-opt">opt</sub></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">DecimalDigits</span> <span class="geq">:::</span></div>
+ <div class="rhs"><span class="nt">DecimalDigit</span></div>
+ <div class="rhs"><span class="nt">DecimalDigits</span> <span class="nt">DecimalDigit</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">DecimalDigit</span> <span class="geq">:::</span> <span class="grhsmod">one of</span></div>
+ <div class="rhs"><code class="t">0</code> <code class="t">1</code> <code class="t">2</code> <code class="t">3</code> <code class="t">4</code> <code class="t">5</code> <code class="t">6</code> <code class="t">7</code> <code class="t">8</code> <code class="t">9</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">ExponentPart</span> <span class="geq">:::</span></div>
+ <div class="rhs"><span class="nt">ExponentIndicator</span> <span class="nt">SignedInteger</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">ExponentIndicator</span> <span class="geq">:::</span> <span class="grhsmod">one of</span></div>
+ <div class="rhs"><code class="t">e</code> <code class="t">E</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">SignedInteger</span> <span class="geq">:::</span></div>
+ <div class="rhs"><span class="nt">DecimalDigits</span></div>
+ <div class="rhs"><code class="t">+</code> <span class="nt">DecimalDigits</span></div>
+ <div class="rhs"><code class="t">-</code> <span class="nt">DecimalDigits</span></div>
+ </div>
+
+ <p>All grammar symbols not explicitly defined above have the definitions used in the Lexical Grammar for numeric
+ literals (<a href="#sec-literals-numeric-literals">11.8.3</a>)</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> Some differences should be noted between the syntax of a <i>StringNumericLiteral</i>
+ and a <i>NumericLiteral</i> (<a href="#sec-literals-numeric-literals">see 11.8.3</a>):</p>
+
+ <ul>
+ <li>
+ <p>A <i>StringNumericLiteral</i> may include leading and/or trailing white space and/or line terminators.</p>
+ </li>
+
+ <li>
+ <p>A <i>StringNumericLiteral</i> that is decimal may have any number of leading <code>0</code> digits.</p>
+ </li>
+
+ <li>
+ <p>A <i>StringNumericLiteral</i> that is decimal may include a <code>+</code> or <code>-</code> to indicate its
+ sign.</p>
+ </li>
+
+ <li>
+ <p>A <i>StringNumericLiteral</i> that is empty or contains only white space is converted to <b>+0</b>.</p>
+ </li>
+
+ <li>
+ <p><code>Infinity</code> <code>and &ndash;Infinity</code> are recognized as a <i>StringNumericLiteral</i> but not
+ as a <i>NumericLiteral</i>.</p>
+ </li>
+ </ul>
+ </div>
+ </div>
+
+ <section id="sec-runtime-semantics-mv-s">
+ <h1><span class="secnum" id="sec-7.1.3.1.1"><a href="#sec-runtime-semantics-mv-s"
+ title="link to this section">7.1.3.1.1</a></span> Runtime Semantics: MV&rsquo;s</h1>
+
+ <p>The conversion of a String to a Number value is similar overall to the determination of the Number value for a
+ numeric literal (<a href="#sec-literals-numeric-literals">see 11.8.3</a>), but some of the details are different, so the
+ process for converting a String numeric literal to a value of Number type is given here. This value is determined in two
+ steps: first, a mathematical value (MV) is derived from the String numeric literal; second, this mathematical value is
+ rounded as described below. The MV on any grammar symbol, not provided below, is the MV for that symbol defined in <a
+ href="#sec-static-semantics-mv-s">11.8.3.1</a>.</p>
+
+ <ul>
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">StringNumericLiteral</span> <span class="geq">:::</span> <span
+ class="grhsannot">[empty]</span></span> is 0.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">StringNumericLiteral</span> <span class="geq">:::</span> <span
+ class="nt">StrWhiteSpace</span></span> is 0.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">StringNumericLiteral</span> <span class="geq">:::</span> <span
+ class="nt">StrWhiteSpace</span><sub class="g-opt">opt</sub> <span class="nt">StrNumericLiteral</span> <span
+ class="nt">StrWhiteSpace</span><sub class="g-opt">opt</sub></span> is the MV of <span
+ class="nt">StrNumericLiteral</span>, no matter whether white space is present or not.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">StrNumericLiteral</span> <span class="geq">:::</span> <span
+ class="nt">StrDecimalLiteral</span></span> is the MV of <span class="nt">StrDecimalLiteral</span>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">StrNumericLiteral</span> <span class="geq">:::</span> <span
+ class="nt">BinaryIntegerLiteral</span></span> is the MV of <span class="nt">BinaryIntegerLiteral</span>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">StrNumericLiteral</span> <span class="geq">:::</span> <span
+ class="nt">OctalIntegerLiteral</span></span> is the MV of <span class="nt">OctalIntegerLiteral</span>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">StrNumericLiteral</span> <span class="geq">:::</span> <span
+ class="nt">HexIntegerLiteral</span></span> is the MV of <span class="nt">HexIntegerLiteral</span>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">StrDecimalLiteral</span> <span class="geq">:::</span> <span
+ class="nt">StrUnsignedDecimalLiteral</span></span> is the MV of <span
+ class="nt">StrUnsignedDecimalLiteral</span>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">StrDecimalLiteral</span> <span class="geq">:::</span> <code
+ class="t">+</code> <span class="nt">StrUnsignedDecimalLiteral</span></span> is the MV of <span
+ class="nt">StrUnsignedDecimalLiteral</span>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">StrDecimalLiteral</span> <span class="geq">:::</span> <code
+ class="t">-</code> <span class="nt">StrUnsignedDecimalLiteral</span></span> is the negative of the MV of <span
+ class="nt">StrUnsignedDecimalLiteral</span>. (Note that if the MV of <span
+ class="nt">StrUnsignedDecimalLiteral</span> is 0, the negative of this MV is also 0. The rounding rule described
+ below handles the conversion of this signless mathematical zero to a floating-point <b>+0</b> or <b>&minus;0</b> as
+ appropriate.)</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">StrUnsignedDecimalLiteral</span> <span class="geq">:::</span> <span
+ class="nt">Infinity</span></span> is <span style="font-family: Times New Roman">10<sup>10000</sup></span> (a value
+ so large that it will round to <b>+&infin;</b>).</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">StrUnsignedDecimalLiteral</span> <span class="geq">:::</span> <span
+ class="nt">DecimalDigits</span> <code class="t">.</code></span> is the MV of <span
+ class="nt">DecimalDigits</span>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">StrUnsignedDecimalLiteral</span> <span class="geq">:::</span> <span
+ class="nt">DecimalDigits</span> <code class="t">.</code> <span class="nt">DecimalDigits</span></span> is the MV of
+ the first <span class="nt">DecimalDigits</span> plus (the MV of the second <span class="nt">DecimalDigits</span>
+ times <span style="font-family: Times New Roman">10<sup>&minus;<i>n</i></sup></span>), where <var>n</var> is the
+ number of code points in the second <span class="nt">DecimalDigits</span>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">StrUnsignedDecimalLiteral</span> <span class="geq">:::</span> <span
+ class="nt">DecimalDigits</span> <code class="t">.</code> <span class="nt">ExponentPart</span></span> is the MV of
+ <i>DecimalDigits</i> times 10<sup><i>e</i></sup>, where <i>e</i> is the MV of <i>ExponentPart</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">StrUnsignedDecimalLiteral</span> <span class="geq">:::</span> <span
+ class="nt">DecimalDigits</span> <code class="t">.</code> <span class="nt">DecimalDigits</span> <span
+ class="nt">ExponentPart</span></span> is (the MV of the first <i>DecimalDigits</i> plus (the MV of the second
+ <i>DecimalDigits</i> times 10<sup>&minus;<i>n</i></sup>)) times 10<sup><i>e</i></sup>, where <i>n</i> is the number
+ of code points in the second <i>DecimalDigits</i> and <i>e</i> is the MV of <i>ExponentPart</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">StrUnsignedDecimalLiteral</span> <span class="geq">:::</span> <code
+ class="t">.</code> <span class="nt">DecimalDigits</span></span> is the MV of <i>DecimalDigits</i> times
+ 10<sup>&minus;<i>n</i></sup>, where <i>n</i> is the number of code points in <i>DecimalDigits</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">StrUnsignedDecimalLiteral</span> <span class="geq">:::</span> <code
+ class="t">.</code> <span class="nt">DecimalDigits</span> <span class="nt">ExponentPart</span></span> is the MV of
+ <i>DecimalDigits</i> times 10<sup><i>e</i>&minus;<i>n</i></sup>, where <i>n</i> is the number of code points in
+ <i>DecimalDigits</i> and <i>e</i> is the MV of <i>ExponentPart</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">StrUnsignedDecimalLiteral</span> <span class="geq">:::</span> <span
+ class="nt">DecimalDigits</span></span> is the MV of <i>DecimalDigits</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">StrUnsignedDecimalLiteral</span> <span class="geq">:::</span> <span
+ class="nt">DecimalDigits</span> <span class="nt">ExponentPart</span></span> is the MV of <i>DecimalDigits</i> times
+ 10<sup><i>e</i></sup>, where <i>e</i> is the MV of <i>ExponentPart</i>.</p>
+ </li>
+ </ul>
+
+ <p>Once the exact MV for a String numeric literal has been determined, it is then rounded to a value of the Number type.
+ If the MV is 0, then the rounded value is +0 unless the first non white space code point in the String numeric literal
+ is &lsquo;<code>-</code>&rsquo;, in which case the rounded value is &minus;0. Otherwise, the rounded value must be the
+ Number value for the MV (in the sense defined in <a href="#sec-ecmascript-language-types-number-type">6.1.6</a>), unless
+ the literal includes a <span class="nt">StrUnsignedDecimalLiteral</span> and the literal has more than 20 significant
+ digits, in which case the Number value may be either the Number value for the MV of a literal produced by replacing each
+ significant digit after the 20th with a 0 digit or the Number value for the MV of a literal produced by replacing each
+ significant digit after the 20th with a 0 digit and then incrementing the literal at the 20th digit position. A digit is
+ significant if it is not part of an <span class="nt">ExponentPart</span> and</p>
+
+ <ul>
+ <li>it is not <code>0</code>; or</li>
+ <li>there is a nonzero digit to its left and there is a nonzero digit, not in the <span
+ class="nt">ExponentPart</span>, to its right.</li>
+ </ul>
+ </section>
+ </section>
+ </section>
+
+ <section id="sec-tointeger">
+ <h1><span class="secnum" id="sec-7.1.4"><a href="#sec-tointeger" title="link to this section">7.1.4</a></span> ToInteger (
+ argument )</h1>
+
+ <p>The abstract operation ToInteger converts <var>argument</var> to an integral numeric value. This abstract operation
+ functions as follows:</p>
+
+ <ol class="proc">
+ <li>Let <i>number</i> be <a href="#sec-tonumber">ToNumber</a>(<i>argument</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>number</i>).</li>
+ <li>If <i>number</i> is <b>NaN</b>, return <b>+0</b>.</li>
+ <li>If <i>number</i> is <b>+0</b>, <b>&minus;0</b>, <b>+&infin;,</b> or <b>&minus;&infin;</b>, return <i>number</i>.</li>
+ <li>Return the number value that is the same sign as <i>number</i> and whose magnitude is <a
+ href="#sec-algorithm-conventions">floor</a>(<a href="#sec-algorithm-conventions">abs</a>(<i>number</i>)).</li>
+ </ol>
+ </section>
+
+ <section id="sec-toint32">
+ <h1><span class="secnum" id="sec-7.1.5"><a href="#sec-toint32" title="link to this section">7.1.5</a></span> ToInt32 (
+ argument )</h1>
+
+ <p>The abstract operation ToInt32 converts <var>argument</var> to one of <span style="font-family: Times New
+ Roman">2<sup>32</sup></span> integer values in the range <span style="font-family: Times New
+ Roman">&minus;2<sup>31</sup></span> through <span style="font-family: Times New Roman">2<sup>31</sup>&minus;1</span>,
+ inclusive. This abstract operation functions as follows:</p>
+
+ <ol class="proc">
+ <li>Let <i>number</i> be <a href="#sec-tonumber">ToNumber</a>(<i>argument</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>number</i>).</li>
+ <li>If <i>number</i> is <b>NaN</b>, <b>+0</b>, <b>&minus;0</b>, <b>+&infin;</b>, or <b>&minus;&infin;</b>, return
+ <b>+0</b>.</li>
+ <li>Let <i>int</i> be the mathematical value that is the same sign as <i>number</i> and whose magnitude is <a
+ href="#sec-algorithm-conventions">floor</a>(<a href="#sec-algorithm-conventions">abs</a>(<i>number</i>)).</li>
+ <li>Let <i>int32bit</i> be <i>int</i> <a href="#sec-algorithm-conventions">modulo</a> 2<sup>32</sup>.</li>
+ <li>If <i>int32bit</i> &ge; 2<sup>31</sup>, return <i>int32bit</i> &minus; 2<sup>32</sup>, otherwise return
+ <i>int32bit</i>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> Given the above definition of ToInt32:</p>
+
+ <ul>
+ <li>
+ <p>The ToInt32 abstract operation is idempotent: if applied to a result that it produced, the second application
+ leaves that value unchanged.</p>
+ </li>
+
+ <li>
+ <p><i>ToInt32(<a href="#sec-touint32">ToUint32</a>(x))</i> is equal to ToInt32(<i>x</i>) for all values of <i>x</i>.
+ (It is to preserve this latter property that +<b>&infin;</b> and &minus;<b>&infin;</b> are mapped to <b>+0</b>.)</p>
+ </li>
+
+ <li>
+ <p>ToInt32 maps <b>&minus;0</b> to <b>+0</b>.</p>
+ </li>
+ </ul>
+ </div>
+ </section>
+
+ <section id="sec-touint32">
+ <h1><span class="secnum" id="sec-7.1.6"><a href="#sec-touint32" title="link to this section">7.1.6</a></span> ToUint32 (
+ argument )</h1>
+
+ <p>The abstract operation ToUint32 converts <var>argument</var> to one of <span style="font-family: Times New
+ Roman">2<sup>32</sup></span> integer values in the range <span style="font-family: Times New Roman">0</span> through <span
+ style="font-family: Times New Roman">2<sup>32</sup>&minus;1</span>, inclusive. This abstract operation functions as
+ follows:</p>
+
+ <ol class="proc">
+ <li>Let <i>number</i> be <a href="#sec-tonumber">ToNumber</a>(<i>argument</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>number</i>).</li>
+ <li>If <i>number</i> is <b>NaN</b>, <b>+0</b>, <b>&minus;0</b>, <b>+&infin;</b>, or <b>&minus;&infin;</b>, return
+ <b>+0</b>.</li>
+ <li>Let <i>int</i> be the mathematical value that is the same sign as <i>number</i> and whose magnitude is <a
+ href="#sec-algorithm-conventions">floor</a>(<a href="#sec-algorithm-conventions">abs</a>(<i>number</i>)).</li>
+ <li>Let <i>int32bit</i> be <i>int</i> <a href="#sec-algorithm-conventions">modulo</a> 2<sup>32</sup>.</li>
+ <li>Return <i>int32bit</i>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> Given the above definition of ToUint32:</p>
+
+ <ul>
+ <li>
+ <p>Step 6 is the only difference between ToUint32 and <a href="#sec-toint32">ToInt32</a>.</p>
+ </li>
+
+ <li>
+ <p>The ToUint32 abstract operation is idempotent: if applied to a result that it produced, the second application
+ leaves that value unchanged.</p>
+ </li>
+
+ <li>
+ <p>ToUint32(<a href="#sec-toint32">ToInt32</a>(<i>x</i>)) is equal to ToUint32(<i>x</i>) for all values of <i>x</i>.
+ (It is to preserve this latter property that <b>+&infin;</b> and <b>&minus;&infin;</b> are mapped to <b>+0</b>.)</p>
+ </li>
+
+ <li>
+ <p>ToUint32 maps <b>&minus;0</b> to <b>+0</b>.</p>
+ </li>
+ </ul>
+ </div>
+ </section>
+
+ <section id="sec-toint16">
+ <h1><span class="secnum" id="sec-7.1.7"><a href="#sec-toint16" title="link to this section">7.1.7</a></span> ToInt16 (
+ argument )</h1>
+
+ <p>The abstract operation ToInt16 converts <var>argument</var> to one of <span style="font-family: Times New
+ Roman">2<sup>16</sup></span> integer values in the range <span style="font-family: Times New Roman">&minus;32768</span>
+ through <span style="font-family: Times New Roman">32767</span>, inclusive. This abstract operation functions as
+ follows:</p>
+
+ <ol class="proc">
+ <li>Let <i>number</i> be <a href="#sec-tonumber">ToNumber</a>(<i>argument</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>number</i>).</li>
+ <li>If <i>number</i> is <b>NaN</b>, <b>+0</b>, <b>&minus;0</b>, <b>+&infin;</b>, or <b>&minus;&infin;</b>, return
+ <b>+0</b>.</li>
+ <li>Let <i>int</i> be the mathematical value that is the same sign as <i>number</i> and whose magnitude is <a
+ href="#sec-algorithm-conventions">floor</a>(<a href="#sec-algorithm-conventions">abs</a>(<i>number</i>)).</li>
+ <li>Let <i>int16bit</i> be <i>int</i> <a href="#sec-algorithm-conventions">modulo</a> 2<sup>16</sup>.</li>
+ <li>If <i>int16bit</i> &ge; 2<sup>15</sup>, return <i>int16bit</i> &minus; 2<sup>16</sup>, otherwise return
+ <i>int16bit</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-touint16">
+ <h1><span class="secnum" id="sec-7.1.8"><a href="#sec-touint16" title="link to this section">7.1.8</a></span> ToUint16 (
+ argument )</h1>
+
+ <p>The abstract operation ToUint16 converts <var>argument</var> to one of <span style="font-family: Times New
+ Roman">2<sup>16</sup></span> integer values in the range <span style="font-family: Times New Roman">0</span> through <span
+ style="font-family: Times New Roman">2<sup>16</sup>&minus;1</span>, inclusive. This abstract operation functions as
+ follows:</p>
+
+ <ol class="proc">
+ <li>Let <i>number</i> be <a href="#sec-tonumber">ToNumber</a>(<i>argument</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>number</i>).</li>
+ <li>If <i>number</i> is <b>NaN</b>, <b>+0</b>, <b>&minus;0</b>, <b>+&infin;</b>, or <b>&minus;&infin;</b>, return
+ <b>+0</b>.</li>
+ <li>Let <i>int</i> be the mathematical value that is the same sign as <i>number</i> and whose magnitude is <a
+ href="#sec-algorithm-conventions">floor</a>(<a href="#sec-algorithm-conventions">abs</a>(<i>number</i>)).</li>
+ <li>Let <i>int16bit</i> be <i>int</i> <a href="#sec-algorithm-conventions">modulo</a> 2<sup>16</sup>.</li>
+ <li>Return <i>int16bit</i>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> Given the above definition of ToUint16:</p>
+
+ <ul>
+ <li>The substitution of 2<sup>16</sup> for 2<sup>32</sup> in step 5 is the only difference between <a
+ href="#sec-touint32">ToUint32</a> and ToUint16.</li>
+ <li>ToUint16 maps <b>&minus;0</b> to <span style="font-family: sans-serif"><b>+0</b></span>.</li>
+ </ul>
+ </div>
+ </section>
+
+ <section id="sec-toint8">
+ <h1><span class="secnum" id="sec-7.1.9"><a href="#sec-toint8" title="link to this section">7.1.9</a></span> ToInt8 (
+ argument )</h1>
+
+ <p>The abstract operation ToInt8 converts <var>argument</var> to one of <span style="font-family: Times New
+ Roman">2<sup>8</sup></span> integer values in the range <span style="font-family: Times New Roman">&minus;128</span> through
+ <span style="font-family: Times New Roman">127</span>, inclusive. This abstract operation functions as follows:</p>
+
+ <ol class="proc">
+ <li>Let <i>number</i> be <a href="#sec-tonumber">ToNumber</a>(<i>argument</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>number</i>).</li>
+ <li>If <i>number</i> is <b>NaN</b>, <b>+0</b>, <b>&minus;0</b>, <b>+&infin;</b>, or <b>&minus;&infin;</b>, return
+ <b>+0</b>.</li>
+ <li>Let <i>int</i> be the mathematical value that is the same sign as <i>number</i> and whose magnitude is <a
+ href="#sec-algorithm-conventions">floor</a>(<a href="#sec-algorithm-conventions">abs</a>(<i>number</i>)).</li>
+ <li>Let <i>int8bit</i> be <i>int</i> <a href="#sec-algorithm-conventions">modulo</a> 2<sup>8</sup>.</li>
+ <li>If <i>int8bit</i> &ge; 2<sup>7</sup>, return <i>int8bit</i> &minus; 2<sup>8</sup>, otherwise return
+ <i>int8bit</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-touint8">
+ <h1><span class="secnum" id="sec-7.1.10"><a href="#sec-touint8" title="link to this section">7.1.10</a></span> ToUint8 (
+ argument )</h1>
+
+ <p>The abstract operation ToUint8 converts <var>argument</var> to one of <span style="font-family: Times New
+ Roman">2<sup>8</sup></span> integer values in the range <span style="font-family: Times New Roman">0</span> through <span
+ style="font-family: Times New Roman">255</span>, inclusive. This abstract operation functions as follows:</p>
+
+ <ol class="proc">
+ <li>Let <i>number</i> be <a href="#sec-tonumber">ToNumber</a>(<i>argument</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>number</i>).</li>
+ <li>If <i>number</i> is <b>NaN</b>, <b>+0</b>, <b>&minus;0</b>, <b>+&ininfin;</b>, or <b>&minus;&infin;</b>, return
+ <b>+0</b>.</li>
+ <li>Let <i>int</i> be the mathematical value that is the same sign as <i>number</i> and whose magnitude is <a
+ href="#sec-algorithm-conventions">floor</a>(<a href="#sec-algorithm-conventions">abs</a>(<i>number</i>)).</li>
+ <li>Let <i>int8bit</i> be <i>int</i> <a href="#sec-algorithm-conventions">modulo</a> 2<sup>8</sup>.</li>
+ <li>Return <i>int8bit</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-touint8clamp">
+ <h1><span class="secnum" id="sec-7.1.11"><a href="#sec-touint8clamp" title="link to this section">7.1.11</a></span>
+ ToUint8Clamp ( argument )</h1>
+
+ <p>The abstract operation ToUint8Clamp converts <var>argument</var> to one of <span style="font-family: Times New
+ Roman">2<sup>8</sup></span> integer values in the range <span style="font-family: Times New Roman">0</span> through <span
+ style="font-family: Times New Roman">255</span>, inclusive. This abstract operation functions as follows:</p>
+
+ <ol class="proc">
+ <li>Let <i>number</i> be <a href="#sec-tonumber">ToNumber</a>(<i>argument</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>number</i>).</li>
+ <li>If <i>number</i> is <b>NaN</b>, return <b>+0</b>.</li>
+ <li>If <i>number</i> &le; 0, return <b>+0</b>.</li>
+ <li>If <i>number</i> &ge; 255, return 255.</li>
+ <li>Let <i>f</i> be <a href="#sec-algorithm-conventions">floor</a>(<i>number</i>).</li>
+ <li>If <i>f</i> <i>+</i> 0.5 &lt; <i>number</i>, return <i>f</i> + 1.</li>
+ <li>If <i>number</i> &lt; <i>f +</i> 0.5, return <i>f</i>.</li>
+ <li>If <i>f</i> is odd, return <i>f</i> + 1.</li>
+ <li>Return <i>f</i>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> Note that unlike the other ECMAScript integer conversion abstract operation, ToUint8Clamp
+ rounds rather than truncates non-integer values and does not convert +<b>&infin;</b> to 0. ToUint8Clamp does &ldquo;round
+ half to even&rdquo; tie-breaking. This differs from <code><a href="#sec-math.round">Math.round</a></code> which does
+ &ldquo;round half up&rdquo; tie-breaking.</p>
+ </div>
+ </section>
+
+ <section id="sec-tostring">
+ <div class="front">
+ <h1><span class="secnum" id="sec-7.1.12"><a href="#sec-tostring" title="link to this section">7.1.12</a></span> ToString (
+ argument )</h1>
+
+ <p>The abstract operation ToString converts <var>argument</var> to a value of type String according to <a
+ href="#table-12">Table 12</a>:</p>
+
+ <figure>
+ <figcaption><span id="table-12">Table 12</span> &mdash; ToString Conversions</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Argument Type</th>
+ <th>Result</th>
+ </tr>
+ <tr>
+ <td><a href="#sec-completion-record-specification-type">Completion Record</a></td>
+ <td>If <var>argument</var> is an <a href="#sec-completion-record-specification-type">abrupt completion</a>, return <var>argument</var>. Otherwise return ToString(<var>argument</var>.[[value]]).</td>
+ </tr>
+ <tr>
+ <td>Undefined</td>
+ <td>Return <code>"undefined"</code>.</td>
+ </tr>
+ <tr>
+ <td>Null</td>
+ <td>Return <code>"null"</code>.</td>
+ </tr>
+ <tr>
+ <td>Boolean</td>
+
+ <td>
+ <p>If <var>argument</var> is <b>true</b>, return <code>"true"</code>.</p>
+
+ <p>If <var>argument</var> is <b>false</b>, return <b><code>"false"</code>.</b></p>
+ </td>
+ </tr>
+ <tr>
+ <td>Number</td>
+ <td>See <a href="#sec-tostring-applied-to-the-number-type">7.1.12.1</a>.</td>
+ </tr>
+ <tr>
+ <td>String</td>
+ <td>Return <var>argument</var>.</td>
+ </tr>
+ <tr>
+ <td>Symbol</td>
+ <td>Throw a <b>TypeError</b> exception.</td>
+ </tr>
+ <tr>
+ <td>Object</td>
+
+ <td>
+ <p>Apply the following steps:</p>
+
+ <p>1. Let <i>primValue</i> be <a href="#sec-toprimitive">ToPrimitive</a>(<i>argument</i>, hint String).</p>
+
+ <p>2. Return ToString(<i>primValue</i>).</p>
+ </td>
+ </tr>
+ </table>
+ </figure>
+ </div>
+
+ <section id="sec-tostring-applied-to-the-number-type">
+ <h1><span class="secnum" id="sec-7.1.12.1"><a href="#sec-tostring-applied-to-the-number-type"
+ title="link to this section">7.1.12.1</a></span> ToString Applied to the Number Type</h1>
+
+ <p>The abstract operation <a href="#sec-tostring">ToString</a> converts a Number <var>m</var> to String format as
+ follows:</p>
+
+ <ol class="proc">
+ <li>If <i>m</i> is <b>NaN</b>, return the String <code>"NaN"</code>.</li>
+ <li>If <i>m</i> is <b>+0</b> or <b>&minus;0</b>, return the String <code>"0"</code>.</li>
+ <li>If <i>m</i> is less than zero, return the String concatenation of the String <code>"-"</code> and <a
+ href="#sec-tostring">ToString</a>(&minus;<i>m</i>).</li>
+ <li>If <i>m</i> is +&infin;, return the String <code>"Infinity"</code>.</li>
+ <li>Otherwise, let <i>n</i>, <i>k</i>, and <i>s</i> be integers such that <i>k</i> &ge; 1, 10<sup><i>k</i>&minus;1</sup>
+ &le; <i>s</i> &lt; 10<sup><i>k</i></sup>, the Number value for <i>s</i> &times; 10<sup><i>n&minus;k</i></sup> is
+ <i>m</i>, and <i>k</i> is as small as possible. Note that <i>k</i> is the number of digits in the decimal
+ representation of <i>s</i>, that <i>s</i> is not divisible by 10, and that the least significant digit of <i>s</i>
+ is not necessarily uniquely determined by these criteria.</li>
+ <li>If <i>k</i> &le; <i>n</i> &le; 21, return the String consisting of the code units of the <i>k</i> digits of the
+ decimal representation of <i>s</i> (in order, with no leading zeroes), followed by <i>n&minus;k</i> occurrences of
+ the code unit 0x0030 (DIGIT ZERO).</li>
+ <li>If 0 &lt; <i>n</i> &le; 21, return the String consisting of the code units of the most significant <i>n</i> digits
+ of the decimal representation of <i>s</i>, followed by the code unit 0x002E (FULL STOP), followed by the code units
+ of the remaining <i>k&minus;n</i> digits of the decimal representation of <i>s</i>.</li>
+ <li>If &minus;6 &lt; <i>n</i> &le; 0, return the String consisting of the code unit 0x0030 (DIGIT ZERO), followed by the
+ code unit 0x002E (FULL STOP), followed by &minus;<i>n</i> occurrences of the code unit 0x0030 (DIGIT ZERO), followed
+ by the code units of the <i>k</i> digits of the decimal representation of <i>s</i>.</li>
+ <li>Otherwise, if <i>k</i> = 1, return the String consisting of the code unit of the single digit of <i>s</i>, followed
+ by code unit 0x0065 (LATIN SMALL LETTER E), followed by the code unit 0x002B (PLUS SIGN) or the code unit 0x002D
+ (HYPHEN-MINUS) according to whether <i>n</i>&minus;1 is positive or negative, followed by the code units of the
+ decimal representation of the integer <a href="#sec-algorithm-conventions">abs</a>(<i>n</i>&minus;1) (with no
+ leading zeroes).</li>
+ <li>Return the String consisting of the code units of the most significant digit of the decimal representation of
+ <i>s</i>, followed by code unit 0x002E (FULL STOP), followed by the code units of the remaining <i>k</i>&minus;1
+ digits of the decimal representation of <i>s</i>, followed by code unit 0x0065 (LATIN SMALL LETTER E), followed by
+ code unit 0x002B (PLUS SIGN) or the code unit 0x002D (HYPHEN-MINUS) according to whether <i>n</i>&minus;1 is
+ positive or negative, followed by the code units of the decimal representation of the integer <a
+ href="#sec-algorithm-conventions">abs</a>(<i>n</i>&minus;1) (with no leading zeroes).</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE 1</span> The following observations may be useful as guidelines for implementations, but are
+ not part of the normative requirements of this Standard:</p>
+
+ <ul>
+ <li>
+ <p>If x is any Number value other than <b>&minus;0</b>, then <a href="#sec-tonumber">ToNumber</a>(<a
+ href="#sec-tostring">ToString</a>(x)) is exactly the same Number value as x.</p>
+ </li>
+
+ <li>
+ <p>The least significant digit of s is not always uniquely determined by the requirements listed in step 5.</p>
+ </li>
+ </ul>
+ </div>
+
+ <div class="note">
+ <p><span class="nh">NOTE 2</span> For implementations that provide more accurate conversions than required by the rules
+ above, it is recommended that the following alternative version of step 5 be used as a guideline:</p>
+
+ <p>Otherwise, let <i>n</i>, <i>k</i>, and <i>s</i> be integers such that <i>k</i> &ge; 1, 10<sup><i>k</i>&minus;1</sup>
+ &le; <i>s</i> &lt; 10<sup><i>k</i></sup>, the Number value for <i>s</i> &times; 10<sup><i>n</i>&minus;<i>k</i></sup> is
+ <i>m</i>, and <i>k</i> is as small as possible. If there are multiple possibilities for <i>s</i>, choose the value of
+ <i>s</i> for which <i>s</i> &times; 10<sup><i>n</i>&minus;<i>k</i></sup> is closest in value to <i>m</i>. If there are
+ two such possible values of <i>s</i>, choose the one that is even. Note that <i>k</i> is the number of digits in the
+ decimal representation of <i>s</i> and that <i>s</i> is not divisible by 10.</p>
+ </div>
+
+ <div class="note">
+ <p><span class="nh">NOTE 3</span> Implementers of ECMAScript may find useful the paper and code written by David M. Gay
+ for binary-to-decimal conversion of floating-point numbers:</p>
+
+ <p>Gay, David M. Correctly Rounded Binary-Decimal and Decimal-Binary Conversions. Numerical Analysis, Manuscript 90-10.
+ AT&amp;T Bell Laboratories (Murray Hill, New Jersey). November 30, 1990. Available as<br><span style="font-family:
+ sans-serif"><a
+ href="http://cm.bell-labs.com/cm/cs/doc/90/4-10.ps.gz">http://cm.bell-labs.com/cm/cs/doc/90/4-10.ps.gz</a></span>.
+ Associated code available as<br><span style="font-family: sans-serif"><a
+ href="http://netlib.sandia.gov/fp/dtoa.c">http://netlib.sandia.gov/fp/dtoa.c</a></span>&nbsp;and&nbsp;as<br><span
+ style="font-family: sans-serif"><a
+ href="http://netlib.sandia.gov/fp/g_fmt.c">http://netlib.sandia.gov/fp/g_fmt.c</a></span> and may also be found at the
+ various <code>netlib</code> mirror sites.</p>
+ </div>
+ </section>
+ </section>
+
+ <section id="sec-toobject">
+ <h1><span class="secnum" id="sec-7.1.13"><a href="#sec-toobject" title="link to this section">7.1.13</a></span> ToObject (
+ argument )</h1>
+
+ <p>The abstract operation ToObject converts <var>argument</var> to a value of type Object according to <a
+ href="#table-13">Table 13</a>:</p>
+
+ <figure>
+ <figcaption><span id="table-13">Table 13</span> &mdash; ToObject Conversions</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Argument Type</th>
+ <th>Result</th>
+ </tr>
+ <tr>
+ <td><a href="#sec-completion-record-specification-type">Completion Record</a></td>
+ <td>If <i>argument</i> is an <a href="#sec-completion-record-specification-type">abrupt completion</a>, return <i>argument</i>. Otherwise return ToObject(<i>argument</i>.[[value]]).</td>
+ </tr>
+ <tr>
+ <td>Undefined</td>
+ <td>Throw a <b>TypeError</b> exception.</td>
+ </tr>
+ <tr>
+ <td>Null</td>
+ <td>Throw a <b>TypeError</b> exception.</td>
+ </tr>
+ <tr>
+ <td>Boolean</td>
+ <td>Return a new Boolean object whose [[BooleanData]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> is set to the value of <i>argument</i>. See <a href="#sec-boolean-objects">19.3</a> for a description of Boolean objects.</td>
+ </tr>
+ <tr>
+ <td>Number</td>
+ <td>Return a new Number object whose [[NumberData]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> is set to the value of <i>argument</i>. See <a href="#sec-number-objects">20.1</a> for a description of Number objects.</td>
+ </tr>
+ <tr>
+ <td>String</td>
+ <td>Return a new String object whose [[StringData]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> is set to the value of <i>argument</i>. See <a href="#sec-string-objects">21.1</a> for a description of String objects.</td>
+ </tr>
+ <tr>
+ <td>Symbol</td>
+ <td>Return a new Symbol object whose [[SymbolData]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> is set to the value of <i>argument</i>. See <a href="#sec-symbol-objects">19.4</a> for a description of Symbol objects.</td>
+ </tr>
+ <tr>
+ <td>Object</td>
+ <td>Return <i>argument</i>.</td>
+ </tr>
+ </table>
+ </figure>
+ </section>
+
+ <section id="sec-topropertykey">
+ <h1><span class="secnum" id="sec-7.1.14"><a href="#sec-topropertykey" title="link to this section">7.1.14</a></span>
+ ToPropertyKey ( argument )</h1>
+
+ <p>The abstract operation ToPropertyKey converts <var>argument</var> to a value that can be used as a <a
+ href="#sec-object-type">property key</a> by performing the following steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>key</i> be <a href="#sec-toprimitive">ToPrimitive</a>(<i>argument</i>, hint String).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>key</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>key</i>) is Symbol, then
+ <ol class="block">
+ <li>Return <i>key</i>.</li>
+ </ol>
+ </li>
+ <li>Return <a href="#sec-tostring">ToString</a>(<i>key</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-tolength">
+ <h1><span class="secnum" id="sec-7.1.15"><a href="#sec-tolength" title="link to this section">7.1.15</a></span> ToLength (
+ argument )</h1>
+
+ <p>The abstract operation ToLength converts <var>argument</var> to an integer suitable for use as the length of an
+ array-like object. It performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>argument</i>).</li>
+ <li>Let <i>len</i> be <a href="#sec-tointeger">ToInteger</a>(<i>argument</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>len</i>).</li>
+ <li>If <i>len</i> &le; +0, return +0.</li>
+ <li>If <i>len</i> is <b>+&infin;</b>, return 2<sup>53</sup>-1.</li>
+ <li>Return min(<i>len</i>, 2<sup>53</sup>-1).</li>
+ </ol>
+ </section>
+
+ <section id="sec-canonicalnumericindexstring">
+ <h1><span class="secnum" id="sec-7.1.16"><a href="#sec-canonicalnumericindexstring"
+ title="link to this section">7.1.16</a></span> CanonicalNumericIndexString ( argument )</h1>
+
+ <p>The abstract operation CanonicalNumericIndexString returns <var>argument</var> converted to a numeric value if it is a
+ String representation of a Number that would be produced by <a href="#sec-tostring">ToString</a>, or the string
+ <code>"-0"</code>. Otherwise, it returns <span class="value">undefined.</span> This abstract operation functions as
+ follows:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>argument</i>) is String.</li>
+ <li>If <i>argument</i> is <code>"-0"</code>, return &minus;0.</li>
+ <li>Let <i>n</i> be <a href="#sec-tonumber">ToNumber</a>(<i>argument</i>).</li>
+ <li>If <a href="#sec-samevalue">SameValue</a>(<a href="#sec-tostring">ToString</a>(<i>n</i>), <i>argument</i>) is
+ <b>false</b>, return <b>undefined</b>.</li>
+ <li>Return <i>n</i>.</li>
+ </ol>
+
+ <p>A <i>canonical numeric string</i> is any String value for which the CanonicalNumericIndexString abstract operation does
+ not return <span class="value">undefined</span>.</p>
+ </section>
+ </section>
+
+ <section id="sec-testing-and-comparison-operations">
+ <div class="front">
+ <h1><span class="secnum" id="sec-7.2"><a href="#sec-testing-and-comparison-operations"
+ title="link to this section">7.2</a></span> Testing and Comparison Operations</h1>
+ </div>
+
+ <section id="sec-requireobjectcoercible">
+ <h1><span class="secnum" id="sec-7.2.1"><a href="#sec-requireobjectcoercible" title="link to this section">7.2.1</a></span>
+ RequireObjectCoercible ( argument )</h1>
+
+ <p>The abstract operation RequireObjectCoercible throws an error if <var>argument</var> is a value that cannot be converted
+ to an Object using <a href="#sec-toobject">ToObject</a>. It is defined by <a href="#table-14">Table 14</a>:</p>
+
+ <figure>
+ <figcaption><span id="table-14">Table 14</span>&nbsp;&mdash; RequireObjectCoercible Results</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Argument Type</th>
+ <th>Result</th>
+ </tr>
+ <tr>
+ <td><a href="#sec-completion-record-specification-type">Completion Record</a></td>
+ <td>If <var>argument</var> is an <a href="#sec-completion-record-specification-type">abrupt completion</a>, return <var>argument</var>. Otherwise return RequireObjectCoercible(<var>argument</var>.[[value]]).</td>
+ </tr>
+ <tr>
+ <td>Undefined</td>
+ <td>Throw a <b>TypeError</b> exception.</td>
+ </tr>
+ <tr>
+ <td>Null</td>
+ <td>Throw a <b>TypeError</b> exception.</td>
+ </tr>
+ <tr>
+ <td>Boolean</td>
+ <td>Return <var>argument</var>.</td>
+ </tr>
+ <tr>
+ <td>Number</td>
+ <td>Return <var>argument</var>.</td>
+ </tr>
+ <tr>
+ <td>String</td>
+ <td>Return <var>argument</var>.</td>
+ </tr>
+ <tr>
+ <td>Symbol</td>
+ <td>Return <var>argument</var>.</td>
+ </tr>
+ <tr>
+ <td>Object</td>
+ <td>Return <var>argument</var>.</td>
+ </tr>
+ </table>
+ </figure>
+ </section>
+
+ <section id="sec-isarray">
+ <h1><span class="secnum" id="sec-7.2.2"><a href="#sec-isarray" title="link to this section">7.2.2</a></span> IsArray (
+ argument )</h1>
+
+ <p>The abstract operation IsArray takes one argument <var>argument</var>, and performs the following steps:</p>
+
+ <ol class="proc">
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>argument</i>) is not Object, return <b>false</b>.</li>
+ <li>If <i>argument</i> is an <a href="#sec-array-exotic-objects">Array exotic object</a>, return <b>true</b>.</li>
+ <li>If <i>argument</i> is a Proxy exotic object, then
+ <ol class="block">
+ <li>If the value of the [[ProxyHandler]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a>
+ of <i>argument</i> is <b>null</b>, throw a <b>TypeError</b> exception.</li>
+ <li>Let <i>target</i> be the value of the [[ProxyTarget]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>argument</i>.</li>
+ <li>Return IsArray(<i>target</i>).</li>
+ </ol>
+ </li>
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-iscallable">
+ <h1><span class="secnum" id="sec-7.2.3"><a href="#sec-iscallable" title="link to this section">7.2.3</a></span> IsCallable (
+ argument )</h1>
+
+ <p>The abstract operation IsCallable determines if <var>argument</var>, which must be an <a
+ href="#sec-ecmascript-language-types">ECMAScript language value</a> or a <a
+ href="#sec-completion-record-specification-type">Completion Record</a>, is a callable function with a [[Call]] internal
+ method.</p>
+
+ <ol class="proc">
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>argument</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>argument</i>) is not Object, return <b>false</b>.</li>
+ <li>If <i>argument</i> has a [[Call]] internal method, return <b>true</b>.</li>
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-isconstructor">
+ <h1><span class="secnum" id="sec-7.2.4"><a href="#sec-isconstructor" title="link to this section">7.2.4</a></span>
+ IsConstructor ( argument )</h1>
+
+ <p>The abstract operation IsConstructor determines if <var>argument</var>, which must be an <a
+ href="#sec-ecmascript-language-types">ECMAScript language value</a> or a <a
+ href="#sec-completion-record-specification-type">Completion Record</a>, is a function object with a [[Construct]] internal
+ method.</p>
+
+ <ol class="proc">
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>argument</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>argument</i>) is not Object, return <b>false</b>.</li>
+ <li>If <i>argument</i> has a [[Construct]] internal method, return <b>true</b>.</li>
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-isextensible-o">
+ <h1><span class="secnum" id="sec-7.2.5"><a href="#sec-isextensible-o" title="link to this section">7.2.5</a></span>
+ IsExtensible (O)</h1>
+
+ <p>The abstract operation <span style="font-family: Times New Roman">IsExtensible</span> is used to determine whether
+ additional properties can be added to the object that is <var>O</var>. A Boolean value is returned. This abstract operation
+ performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>O</i>) is
+ Object.</li>
+ <li>Return <i>O</i>.[[IsExtensible]]().</li>
+ </ol>
+ </section>
+
+ <section id="sec-isinteger">
+ <h1><span class="secnum" id="sec-7.2.6"><a href="#sec-isinteger" title="link to this section">7.2.6</a></span> IsInteger (
+ argument )</h1>
+
+ <p>The abstract operation IsInteger determines if <var>argument</var> is a finite integer numeric value.</p>
+
+ <ol class="proc">
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>argument</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>argument</i>) is not Number, return <b>false</b>.</li>
+ <li>If <i>argument</i> is <b>NaN</b>, <b>+&infin;</b>, or <b>&minus;&infin;</b>, return <b>false</b>.</li>
+ <li>If <a href="#sec-algorithm-conventions">floor</a>(<a href="#sec-algorithm-conventions">abs</a>(<i>argument</i>)) &ne;
+ <a href="#sec-algorithm-conventions">abs</a>(<i>argument</i>), return <b>false</b>.</li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-ispropertykey">
+ <h1><span class="secnum" id="sec-7.2.7"><a href="#sec-ispropertykey" title="link to this section">7.2.7</a></span>
+ IsPropertyKey ( argument )</h1>
+
+ <p>The abstract operation IsPropertyKey determines if <var>argument</var>, which must be an <a
+ href="#sec-ecmascript-language-types">ECMAScript language value</a> or a <a
+ href="#sec-completion-record-specification-type">Completion Record</a>, is a value that may be used as a <a
+ href="#sec-object-type">property key</a>.</p>
+
+ <ol class="proc">
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>argument</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>argument</i>) is String, return <b>true</b>.</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>argument</i>) is Symbol, return <b>true</b>.</li>
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-isregexp">
+ <h1><span class="secnum" id="sec-7.2.8"><a href="#sec-isregexp" title="link to this section">7.2.8</a></span> IsRegExp (
+ argument )</h1>
+
+ <p>The abstract operation IsRegExp with argument <var>argument</var> performs the following steps:</p>
+
+ <ol class="proc">
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>argument</i>) is not Object, return <b>false</b>.</li>
+ <li>Let <i>isRegExp</i> be <a href="#sec-get-o-p">Get</a>(<i>argument</i>, @@match).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>isRegExp</i>).</li>
+ <li>If <i>isRegExp</i> is not <b>undefined</b>, return <a href="#sec-toboolean">ToBoolean</a>(<i>isRegExp</i>).</li>
+ <li>If <i>argument</i> has a [[RegExpMatcher]] <a href="#sec-object-internal-methods-and-internal-slots">internal
+ slot</a>, return <b>true</b>.</li>
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-samevalue">
+ <h1><span class="secnum" id="sec-7.2.9"><a href="#sec-samevalue" title="link to this section">7.2.9</a></span> SameValue(x,
+ y)</h1>
+
+ <p>The internal comparison abstract operation SameValue(<var>x</var>, <var>y</var>), where <var>x</var> and <var>y</var> are
+ <a href="#sec-ecmascript-language-types">ECMAScript language values</a>, produces <b>true</b> or <b>false</b>. Such a
+ comparison is performed as follows:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>x</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>y</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>x</i>) is different from <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>y</i>), return <b>false</b>.</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>x</i>) is Undefined, return <b>true</b>.</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>x</i>) is Null, return <b>true</b>.</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>x</i>) is Number, then
+ <ol class="block">
+ <li>If <i>x</i> is NaN and <i>y</i> is NaN, return <b>true</b>.</li>
+ <li>If <i>x</i> is +0 and <i>y</i> is -0, return <b>false</b>.</li>
+ <li>If <i>x</i> is -0 and <i>y</i> is +0, return <b>false</b>.</li>
+ <li>If <i>x</i> is the same Number value as <i>y</i>, return <b>true</b>.</li>
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>x</i>) is String, then
+ <ol class="block">
+ <li>If <i>x</i> and <i>y</i> are exactly the same sequence of code units (same length and same code units at
+ corresponding indices) return <b>true</b>; otherwise, return <b>false</b>.</li>
+ </ol>
+ </li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>x</i>) is Boolean, then
+ <ol class="block">
+ <li>If <i>x</i> and <i>y</i> are both <b>true</b> or both <b>false</b>, return <b>true</b>; otherwise, return
+ <b>false</b>.</li>
+ </ol>
+ </li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>x</i>) is Symbol, then
+ <ol class="block">
+ <li>If <i>x</i> and <i>y</i> are both the same Symbol value, return <b>true</b>; otherwise, return <b>false</b>.</li>
+ </ol>
+ </li>
+ <li>Return <b>true</b> if <i>x</i> and <i>y</i> are the same Object value. Otherwise, return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-samevaluezero">
+ <h1><span class="secnum" id="sec-7.2.10"><a href="#sec-samevaluezero" title="link to this section">7.2.10</a></span>
+ SameValueZero(x, y)</h1>
+
+ <p>The internal comparison abstract operation SameValueZero(<var>x</var>, <var>y</var>), where <var>x</var> and <var>y</var>
+ are <a href="#sec-ecmascript-language-types">ECMAScript language values</a>, produces <b>true</b> or <b>false</b>. Such a
+ comparison is performed as follows:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>x</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>y</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>x</i>) is different from <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>y</i>), return <b>false</b>.</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>x</i>) is Undefined, return <b>true</b>.</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>x</i>) is Null, return <b>true</b>.</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>x</i>) is Number, then
+ <ol class="block">
+ <li>If <i>x</i> is NaN and <i>y</i> is NaN, return <b>true</b>.</li>
+ <li>If <i>x</i> is +0 and <i>y</i> is -0, return <b>true</b>.</li>
+ <li>If <i>x</i> is -0 and <i>y</i> is +0, return <b>true</b>.</li>
+ <li>If <i>x</i> is the same Number value as <i>y</i>, return <b>true</b>.</li>
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>x</i>) is String, then
+ <ol class="block">
+ <li>If <i>x</i> and <i>y</i> are exactly the same sequence of code units (same length and same code units at
+ corresponding indices) return <b>true</b>; otherwise, return <b>false</b>.</li>
+ </ol>
+ </li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>x</i>) is Boolean, then
+ <ol class="block">
+ <li>If <i>x</i> and <i>y</i> are both <b>true</b> or both <b>false</b>, return <b>true</b>; otherwise, return
+ <b>false</b>.</li>
+ </ol>
+ </li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>x</i>) is Symbol, then
+ <ol class="block">
+ <li>If <i>x</i> and <i>y</i> are both the same Symbol value, return <b>true</b>; otherwise, return <b>false</b>.</li>
+ </ol>
+ </li>
+ <li>Return <b>true</b> if <i>x</i> and <i>y</i> are the same Object value. Otherwise, return <b>false</b>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> SameValueZero differs from SameValue only in its treatment of +0 and -0.</p>
+ </div>
+ </section>
+
+ <section id="sec-abstract-relational-comparison">
+ <h1><span class="secnum" id="sec-7.2.11"><a href="#sec-abstract-relational-comparison"
+ title="link to this section">7.2.11</a></span> Abstract Relational Comparison</h1>
+
+ <p>The comparison <var>x</var> &lt; <var>y</var>, where <var>x</var> and <var>y</var> are values, produces <b>true</b>,
+ <b>false</b>, or <b>undefined</b> (which indicates that at least one operand is <b>NaN</b>). In addition to <var>x</var> and
+ <var>y</var> the algorithm takes a Boolean flag named <span class="nt">LeftFirst</span> as a parameter. The flag is used to
+ control the order in which operations with potentially visible side-effects are performed upon <var>x</var> and
+ <var>y</var>. It is necessary because ECMAScript specifies left to right evaluation of expressions. The default value of
+ <span class="nt">LeftFirst</span> is <b>true</b> and indicates that the <var>x</var> parameter corresponds to an expression
+ that occurs to the left of the <var>y</var> parameter&rsquo;s corresponding expression. If <span class="nt">LeftFirst</span>
+ is <b>false</b>, the reverse is the case and operations must be performed upon <var>y</var> before <var>x</var>. Such a
+ comparison is performed as follows:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>x</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>y</i>).</li>
+ <li>If the <i>LeftFirst</i> flag is <b>true</b>, then
+ <ol class="block">
+ <li>Let <i>px</i> be <a href="#sec-toprimitive">ToPrimitive</a>(<i>x</i>, hint Number).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>px</i>).</li>
+ <li>Let <i>py</i> be <a href="#sec-toprimitive">ToPrimitive</a>(<i>y</i>, hint Number).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>py</i>).</li>
+ </ol>
+ </li>
+ <li>Else the order of evaluation needs to be reversed to preserve left to right evaluation
+ <ol class="block">
+ <li>Let <i>py</i> be <a href="#sec-toprimitive">ToPrimitive</a>(<i>y</i>, hint Number).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>py</i>).</li>
+ <li>Let <i>px</i> be <a href="#sec-toprimitive">ToPrimitive</a>(<i>x</i>, hint Number).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>px</i>).</li>
+ </ol>
+ </li>
+ <li>If both <i>px</i> and <i>py</i> are Strings, then
+ <ol class="block">
+ <li>If <i>py</i> is a prefix of <i>px</i>, return <b>false</b>. (A String value <i>p</i> is a prefix of String value
+ <i>q</i> if <i>q</i> can be the result of concatenating <i>p</i> and some other String <i>r</i>. Note that any
+ String is a prefix of itself, because <i>r</i> may be the empty String.)</li>
+ <li>If <i>px</i> is a prefix of <i>py</i>, return <b>true</b>.</li>
+ <li>Let <i>k</i> be the smallest nonnegative integer such that the code unit at index <i>k</i> within <i>px</i> is
+ different from the code unit at index <i>k</i> within <i>py</i>. (There must be such a <i>k</i>, for neither
+ String is a prefix of the other.)</li>
+ <li>Let <i>m</i> be the integer that is the code unit value at index <i>k</i> within <i>px</i>.</li>
+ <li>Let <i>n</i> be the integer that is the code unit value at index <i>k</i> within <i>py</i>.</li>
+ <li>If <i>m</i> &lt; <i>n</i>, return <b>true</b>. Otherwise, return <b>false</b>.</li>
+ </ol>
+ </li>
+ <li>Else,
+ <ol class="block">
+ <li>Let <i>nx</i> be <a href="#sec-tonumber">ToNumber</a>(<i>px</i>). Because <i>px</i> and <i>py</i> are primitive
+ values evaluation order is not important.</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>nx</i>).</li>
+ <li>Let <i>ny</i> be <a href="#sec-tonumber">ToNumber</a>(<i>py</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>ny</i>).</li>
+ <li>If <i>nx</i> is <b>NaN</b>, return <b>undefined</b>.</li>
+ <li>If <i>ny</i> is <b>NaN</b>, return <b>undefined</b>.</li>
+ <li>If <i>nx</i> and <i>ny</i> are the same Number value, return <b>false</b>.</li>
+ <li>If <i>nx</i> is <b>+0</b> and <i>ny</i> is <b>&minus;0</b>, return <b>false</b>.</li>
+ <li>If <i>nx</i> is <b>&minus;0</b> and <i>ny</i> is <b>+0</b>, return <b>false</b>.</li>
+ <li>If <i>nx</i> is <b>+&infin;</b>, return <b>false</b>.</li>
+ <li>If <i>ny</i> is <b>+&infin;</b>, return <b>true</b>.</li>
+ <li>If <i>ny</i> is <b>&minus;&infin;</b>, return <b>false</b>.</li>
+ <li>If <i>nx</i> is <b>&minus;&infin;</b>, return <b>true</b>.</li>
+ <li>If the mathematical value of <i>nx</i> is less than the mathematical value of <i>ny</i> &mdash;note that these
+ mathematical values are both finite and not both zero&mdash;return <b>true</b>. Otherwise, return
+ <b>false</b>.</li>
+ </ol>
+ </li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE 1</span> Step 5 differs from step 11 in the algorithm for the addition operator <code>+</code>
+ (<a href="#sec-addition-operator-plus">12.7.3</a>) in using &ldquo;and&rdquo; instead of &ldquo;or&rdquo;.</p>
+ </div>
+
+ <div class="note">
+ <p><span class="nh">NOTE 2</span> The comparison of Strings uses a simple lexicographic ordering on sequences of code unit
+ values. There is no attempt to use the more complex, semantically oriented definitions of character or string equality and
+ collating order defined in the Unicode specification. Therefore String values that are canonically equal according to the
+ Unicode standard could test as unequal. In effect this algorithm assumes that both Strings are already in normalized form.
+ Also, note that for strings containing supplementary characters, lexicographic ordering on sequences of UTF-16 code unit
+ values differs from that on sequences of code point values.</p>
+ </div>
+ </section>
+
+ <section id="sec-abstract-equality-comparison">
+ <h1><span class="secnum" id="sec-7.2.12"><a href="#sec-abstract-equality-comparison"
+ title="link to this section">7.2.12</a></span> Abstract Equality Comparison</h1>
+
+ <p>The comparison <var>x</var> == <var>y</var>, where <var>x</var> and <var>y</var> are values, produces <b>true</b> or
+ <b>false</b>. Such a comparison is performed as follows:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>x</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>y</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>x</i>) is the same as <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>y</i>), then
+ <ol class="block">
+ <li>Return the result of performing Strict Equality Comparison <i>x</i> === <i>y</i>.</li>
+ </ol>
+ </li>
+ <li>If <i>x</i> is <b>null</b> and <i>y</i> is <b>undefined</b>, return <b>true</b>.</li>
+ <li>If <i>x</i> is <b>undefined</b> and <i>y</i> is <b>null</b>, return <b>true</b>.</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>x</i>) is Number and <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>y</i>) is String,<br>return the result of the comparison
+ <i>x</i> == <a href="#sec-tonumber">ToNumber</a>(<i>y</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>x</i>) is String and <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>y</i>) is Number,<br>return the result of the comparison <a
+ href="#sec-tonumber">ToNumber</a>(<i>x</i>) == <i>y</i>.</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>x</i>) is Boolean, return the result of the comparison
+ <a href="#sec-tonumber">ToNumber</a>(<i>x</i>) == <i>y</i>.</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>y</i>) is Boolean, return the result of the comparison
+ <i>x</i> == <a href="#sec-tonumber">ToNumber</a>(<i>y</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>x</i>) is either String, Number, or Symbol and <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>y</i>) is Object, then<br>return the result of the comparison
+ <i>x</i> == <a href="#sec-toprimitive">ToPrimitive</a>(<i>y</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>x</i>) is Object and <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>y</i>) is either String, Number, or Symbol, then<br>return
+ the result of the comparison <a href="#sec-toprimitive">ToPrimitive</a>(<i>x</i>) == <i>y</i>.</li>
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-strict-equality-comparison">
+ <h1><span class="secnum" id="sec-7.2.13"><a href="#sec-strict-equality-comparison"
+ title="link to this section">7.2.13</a></span> Strict Equality Comparison</h1>
+
+ <p>The comparison <var>x</var> === <var>y</var>, where <var>x</var> and <var>y</var> are values, produces <b>true</b> or
+ <b>false</b>. Such a comparison is performed as follows:</p>
+
+ <ol class="proc">
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>x</i>) is different from <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>y</i>), return <b>false</b>.</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>x</i>) is Undefined, return <b>true</b>.</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>x</i>) is Null, return <b>true</b>.</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>x</i>) is Number, then
+ <ol class="block">
+ <li>If <i>x</i> is <b>NaN</b>, return <b>false</b>.</li>
+ <li>If <i>y</i> is <b>NaN</b>, return <b>false</b>.</li>
+ <li>If <i>x</i> is the same Number value as <i>y</i>, return <b>true</b>.</li>
+ <li>If <i>x</i> is <b>+0</b> and <i>y</i> is <b>&minus;0</b>, return <b>true</b>.</li>
+ <li>If <i>x</i> is <b>&minus;0</b> and <i>y</i> is <b>+0</b>, return <b>true</b>.</li>
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>x</i>) is String, then
+ <ol class="block">
+ <li>If <i>x</i> and <i>y</i> are exactly the same sequence of code units (same length and same code units at
+ corresponding indices), return <b>true</b>.</li>
+ <li>Else, return <b>false</b>.</li>
+ </ol>
+ </li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>x</i>) is Boolean, then
+ <ol class="block">
+ <li>If <i>x</i> and <i>y</i> are both <b>true</b> or both <b>false</b>, return <b>true</b>.</li>
+ <li>Else, return <b>false</b>.</li>
+ </ol>
+ </li>
+ <li>If <i>x</i> and <i>y</i> are the same Symbol value, return <b>true</b>.</li>
+ <li>If <i>x</i> and <i>y</i> are the same Object value, return <b>true</b>.</li>
+ <li>Return <b>false</b>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> This algorithm differs from <a href="#sec-samevalue">the SameValue Algorithm</a> (<a
+ href="#sec-samevalue">7.2.9</a>) in its treatment of signed zeroes and NaNs.</p>
+ </div>
+ </section>
+ </section>
+
+ <section id="sec-operations-on-objects">
+ <div class="front">
+ <h1><span class="secnum" id="sec-7.3"><a href="#sec-operations-on-objects" title="link to this section">7.3</a></span>
+ Operations on Objects</h1>
+ </div>
+
+ <section id="sec-get-o-p">
+ <h1><span class="secnum" id="sec-7.3.1"><a href="#sec-get-o-p" title="link to this section">7.3.1</a></span> Get (O, P)</h1>
+
+ <p>The abstract operation <span style="font-family: Times New Roman">Get</span> is used to retrieve the value of a specific
+ property of an object. The operation is called with arguments <var>O</var> and <var>P</var> where <var>O</var> is the
+ object and <var>P</var> is the <a href="#sec-object-type">property key</a>. This abstract operation performs the following
+ steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>O</i>) is
+ Object.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>Return <i>O</i>.[[Get]](<i>P</i>, <i>O</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-getv">
+ <h1><span class="secnum" id="sec-7.3.2"><a href="#sec-getv" title="link to this section">7.3.2</a></span> GetV (V, P)</h1>
+
+ <p>The abstract operation GetV is used to retrieve the value of a specific property of an <a
+ href="#sec-ecmascript-language-types">ECMAScript language value</a>. If the value is not an object, the property lookup is
+ performed using a wrapper object appropriate for the type of the value. The operation is called with arguments <var>V</var>
+ and <var>P</var> where <var>V</var> is the value and <var>P</var> is the <a href="#sec-object-type">property key</a>. This
+ abstract operation performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>Let <i>O</i> be <a href="#sec-toobject">ToObject</a>(<i>V</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>O</i>).</li>
+ <li>Return <i>O</i>.[[Get]](<i>P</i>, <i>V</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-set-o-p-v-throw">
+ <h1><span class="secnum" id="sec-7.3.3"><a href="#sec-set-o-p-v-throw" title="link to this section">7.3.3</a></span> Set (O,
+ P, V, Throw)</h1>
+
+ <p>The abstract operation <span style="font-family: Times New Roman">Set</span> is used to set the value of a specific
+ property of an object. The operation is called with arguments <var>O</var>, <var>P</var>, <var>V</var>, and <span
+ class="nt">Throw</span> where <var>O</var> is the object, <var>P</var> is the <a href="#sec-object-type">property key</a>,
+ <var>V</var> is the new value for the property and <span class="nt">Throw</span> is a Boolean flag. This abstract operation
+ performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>O</i>) is
+ Object.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>Throw</i>) is Boolean.</li>
+ <li>Let <i>success</i> be <i>O</i>.[[Set]](<i>P</i>, <i>V</i>, <i>O</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>success</i>).</li>
+ <li>If <i>success</i> is <b>false</b> and <i>Throw</i> is <b>true</b>, throw a <b>TypeError</b> exception.</li>
+ <li>Return <i>success</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-createdataproperty">
+ <h1><span class="secnum" id="sec-7.3.4"><a href="#sec-createdataproperty" title="link to this section">7.3.4</a></span>
+ CreateDataProperty (O, P, V)</h1>
+
+ <p>The abstract operation <span style="font-family: Times New Roman">CreateDataProperty</span> is used to create a new own
+ property of an object. The operation is called with arguments <var>O</var>, <var>P</var>, and <var>V</var> where
+ <var>O</var> is the object, <var>P</var> is the <a href="#sec-object-type">property key</a>, and <var>V</var> is the value
+ for the property. This abstract operation performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>O</i>) is
+ Object.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>Let <i>newDesc</i> be the PropertyDescriptor{[[Value]]: <i>V</i>, [[Writable]]: <b>true</b>, [[Enumerable]]:
+ <b>true</b>, [[Configurable]]: <b>true</b>}.</li>
+ <li>Return <i>O</i>.[[DefineOwnProperty]](<i>P</i>, <i>newDesc</i>).</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> This abstract operation creates a property whose attributes are set to the same defaults
+ used for properties created by the ECMAScript language assignment operator. Normally, the property will not already exist.
+ If it does exist and is not configurable or if <i>O</i> is not extensible, [[DefineOwnProperty]] will return
+ <b>false</b>.</p>
+ </div>
+ </section>
+
+ <section id="sec-createmethodproperty">
+ <h1><span class="secnum" id="sec-7.3.5"><a href="#sec-createmethodproperty" title="link to this section">7.3.5</a></span>
+ CreateMethodProperty (O, P, V)</h1>
+
+ <p>The abstract operation <span style="font-family: Times New Roman">CreateMethodProperty</span> is used to create a new own
+ property of an object. The operation is called with arguments <var>O</var>, <var>P</var>, and <var>V</var> where
+ <var>O</var> is the object, <var>P</var> is the <a href="#sec-object-type">property key</a>, and <var>V</var> is the value
+ for the property. This abstract operation performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>O</i>) is
+ Object.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>Let <i>newDesc</i> be the PropertyDescriptor{[[Value]]: <i>V</i>, [[Writable]]: <b>true</b>, [[Enumerable]]:
+ <b>false</b>, [[Configurable]]: <b>true</b>}.</li>
+ <li>Return <i>O</i>.[[DefineOwnProperty]](<i>P</i>, <i>newDesc</i>).</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> This abstract operation creates a property whose attributes are set to the same defaults
+ used for built-in methods and methods defined using class declaration syntax. Normally, the property will not already
+ exist. If it does exist and is not configurable or if <i>O</i> is not extensible, [[DefineOwnProperty]] will return
+ <b>false</b>.</p>
+ </div>
+ </section>
+
+ <section id="sec-createdatapropertyorthrow">
+ <h1><span class="secnum" id="sec-7.3.6"><a href="#sec-createdatapropertyorthrow"
+ title="link to this section">7.3.6</a></span> CreateDataPropertyOrThrow (O, P, V)</h1>
+
+ <p>The abstract operation <span style="font-family: Times New Roman">CreateDataPropertyOrThrow</span> is used to create a
+ new own property of an object. It throws a <span class="value">TypeError</span> exception if the requested property update
+ cannot be performed. The operation is called with arguments <var>O</var>, <var>P</var>, and <var>V</var> where <var>O</var>
+ is the object, <var>P</var> is the <a href="#sec-object-type">property key</a>, and <var>V</var> is the value for the
+ property. This abstract operation performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>O</i>) is
+ Object.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>Let <i>success</i> be <a href="#sec-createdataproperty">CreateDataProperty</a>(<i>O</i>, <i>P</i>, <i>V</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>success</i>).</li>
+ <li>If <i>success</i> is <b>false</b>, throw a <b>TypeError</b> exception.</li>
+ <li>Return <i>success</i>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> This abstract operation creates a property whose attributes are set to the same defaults
+ used for properties created by the ECMAScript language assignment operator. Normally, the property will not already exist.
+ If it does exist and is not configurable or if <i>O</i> is not extensible, [[DefineOwnProperty]] will return <b>false</b>
+ <span style="font-family: sans-serif">causing this operation to throw a</span> <b>TypeError</b> <span style="font-family:
+ sans-serif">exception</span>.</p>
+ </div>
+ </section>
+
+ <section id="sec-definepropertyorthrow">
+ <h1><span class="secnum" id="sec-7.3.7"><a href="#sec-definepropertyorthrow" title="link to this section">7.3.7</a></span>
+ DefinePropertyOrThrow (O, P, desc)</h1>
+
+ <p>The abstract operation <span style="font-family: Times New Roman">DefinePropertyOrThrow</span> is used to call the
+ [[DefineOwnProperty]] internal method of an object in a manner that will throw a <b>TypeError</b> exception if the requested
+ property update cannot be performed. The operation is called with arguments <var>O</var>, <var>P</var>, and <var>desc</var>
+ where <var>O</var> is the object, <var>P</var> is the <a href="#sec-object-type">property key</a>, and <var>desc</var> is
+ the <a href="#sec-property-descriptor-specification-type">Property Descriptor</a> for the property. This abstract operation
+ performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>O</i>) is
+ Object.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>Let <i>success</i> be <i>O</i>.[[DefineOwnProperty]](<i>P</i>, <i>desc</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>success</i>).</li>
+ <li>If <i>success</i> is <b>false</b>, throw a <b>TypeError</b> exception.</li>
+ <li>Return <i>success</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-deletepropertyorthrow">
+ <h1><span class="secnum" id="sec-7.3.8"><a href="#sec-deletepropertyorthrow" title="link to this section">7.3.8</a></span>
+ DeletePropertyOrThrow (O, P)</h1>
+
+ <p>The abstract operation DeletePropertyOrThrow is used to remove a specific own property of an object. It throws an
+ exception if the property is not configurable. The operation is called with arguments <var>O</var> and <var>P</var> where
+ <var>O</var> is the object and <var>P</var> is the <a href="#sec-object-type">property key</a>. This abstract operation
+ performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>O</i>) is
+ Object.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>Let <i>success</i> be <i>O</i>.[[Delete]](<i>P</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>success</i>).</li>
+ <li>If <i>success</i> is <b>false</b>, throw a <b>TypeError</b> exception.</li>
+ <li>Return <i>success</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-getmethod">
+ <h1><span class="secnum" id="sec-7.3.9"><a href="#sec-getmethod" title="link to this section">7.3.9</a></span> GetMethod (O,
+ P)</h1>
+
+ <p>The abstract operation GetMethod is used to get the value of a specific property of an object when the value of the
+ property is expected to be a function. The operation is called with arguments <var>O</var> and <var>P</var> where
+ <var>O</var> is the object, <var>P</var> is the <a href="#sec-object-type">property key</a>. This abstract operation
+ performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>Let <i>func</i> be <a href="#sec-getv">GetV</a>(<i>O</i>, <i>P</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>func</i>).</li>
+ <li>If <i>func</i> is either <b>undefined</b> or <b>null</b>, return <b>undefined</b>.</li>
+ <li>If <a href="#sec-iscallable">IsCallable</a>(<i>func</i>) is <b>false</b>, throw a <b>TypeError</b> exception.</li>
+ <li>Return <i>func</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-hasproperty">
+ <h1><span class="secnum" id="sec-7.3.10"><a href="#sec-hasproperty" title="link to this section">7.3.10</a></span>
+ HasProperty (O, P)</h1>
+
+ <p>The abstract operation HasProperty is used to determine whether an object has a property with the specified <a
+ href="#sec-object-type">property key</a>. The property may be either an own or inherited. A Boolean value is returned. The
+ operation is called with arguments <var>O</var> and <var>P</var> where <var>O</var> is the object and <var>P</var> is the
+ <a href="#sec-object-type">property key</a>. This abstract operation performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>O</i>) is
+ Object.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>Return <i>O</i>.[[HasProperty]](<i>P</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-hasownproperty">
+ <h1><span class="secnum" id="sec-7.3.11"><a href="#sec-hasownproperty" title="link to this section">7.3.11</a></span>
+ HasOwnProperty (O, P)</h1>
+
+ <p>The abstract operation HasOwnProperty is used to determine whether an object has an own property with the specified <a
+ href="#sec-object-type">property key</a>. A Boolean value is returned. The operation is called with arguments <var>O</var>
+ and <var>P</var> where <var>O</var> is the object and <var>P</var> is the <a href="#sec-object-type">property key</a>. This
+ abstract operation performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>O</i>) is
+ Object.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>Let <i>desc</i> be <i>O</i>.[[GetOwnProperty]](<i>P</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>desc</i>).</li>
+ <li>If <i>desc</i> is <b>undefined</b>, return <b>false</b>.</li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-call">
+ <h1><span class="secnum" id="sec-7.3.12"><a href="#sec-call" title="link to this section">7.3.12</a></span> Call(F, V,
+ [argumentsList])</h1>
+
+ <p>The abstract operation Call is used to call the [[Call]] internal method of a function object. The operation is called
+ with arguments <var>F</var>, <var>V</var> , and optionally <var>argumentsList</var> where <var>F</var> is the function
+ object, <var>V</var> is an <a href="#sec-ecmascript-language-types">ECMAScript language value</a> that is the <b>this</b>
+ value of the [[Call]], and <var>argumentsList</var> is the value passed to the corresponding argument of the internal
+ method. If <var>argumentsList</var> is not present, an empty <a href="#sec-list-and-record-specification-type">List</a> is
+ used as its value. This abstract operation performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>F</i>).</li>
+ <li>If <i>argumentsList</i> was not passed, let <i>argumentsList</i> be a new empty <a
+ href="#sec-list-and-record-specification-type">List</a>.</li>
+ <li>If <a href="#sec-iscallable">IsCallable</a>(<i>F</i>) is <b>false</b>, throw a <b>TypeError</b> exception.</li>
+ <li>Return <i>F</i>.[[Call]](<i>V</i>, <i>argumentsList</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-invoke">
+ <h1><span class="secnum" id="sec-7.3.13"><a href="#sec-invoke" title="link to this section">7.3.13</a></span> Invoke(O,P,
+ [argumentsList])</h1>
+
+ <p>The abstract operation <span style="font-family: Times New Roman">Invoke</span> is used to call a method property of an
+ object. The operation is called with arguments <var>O</var>, <var>P</var> , and optionally <var>argumentsList</var> where
+ <var>O</var> serves as both the lookup point for the property and the <b>this</b> value of the call, <var>P</var> is the <a
+ href="#sec-object-type">property key</a>, and <var>argumentsList</var> is the list of arguments values passed to the method.
+ If <var>argumentsList</var> is not present, an empty <a href="#sec-list-and-record-specification-type">List</a> is used as
+ its value. This abstract operation performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>P</i> is a valid <a href="#sec-object-type">property key</a>.</li>
+ <li>If <i>argumentsList</i> was not passed, let <i>argumentsList</i> be a new empty <a
+ href="#sec-list-and-record-specification-type">List</a>.</li>
+ <li>Let <i>func</i> be <a href="#sec-getv">GetV</a>(<i>O</i>, <i>P</i>).</li>
+ <li>Return <a href="#sec-call">Call</a>(<i>func</i>, <i>O</i>, <i>argumentsList</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-construct">
+ <h1><span class="secnum" id="sec-7.3.14"><a href="#sec-construct" title="link to this section">7.3.14</a></span> Construct
+ (F, [argumentsList], [newTarget])</h1>
+
+ <p>The abstract operation Construct is used to call the [[Construct]] internal method of a function object. The operation is
+ called with arguments <var>F</var>, and optionally <span style="font-family: Times New Roman"><i>argumentsList</i>, and
+ <i>newTarget</i></span> where <var>F</var> is the function object. <var>argumentsList</var> and <var>newTarget</var> are the
+ values to be passed as the corresponding arguments of the internal method. If <var>argumentsList</var> is not present, an
+ empty <a href="#sec-list-and-record-specification-type">List</a> is used as its value. If <var>newTarget</var> is not
+ present, <var>F</var> is used as its value. This abstract operation performs the following steps:</p>
+
+ <ol class="proc">
+ <li>If <i>newTarget</i> was not passed, let <i>newTarget</i> be <i>F</i>.</li>
+ <li>If <i>argumentsList</i> was not passed, let <i>argumentsList</i> be a new empty <a
+ href="#sec-list-and-record-specification-type">List</a>.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-isconstructor">IsConstructor</a> (<i>F</i>) is
+ <b>true</b>.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-isconstructor">IsConstructor</a> (<i>newTarget</i>) is
+ <b>true</b>.</li>
+ <li>Return <i>F</i>.[[Construct]](<i>argumentsList</i>, <i>newTarget</i>).</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> If <i>newTarget</i> is not passed, this operation is equivalent to: <code>new
+ F(...argumentsList)</code></p>
+ </div>
+ </section>
+
+ <section id="sec-setintegritylevel">
+ <h1><span class="secnum" id="sec-7.3.15"><a href="#sec-setintegritylevel" title="link to this section">7.3.15</a></span>
+ SetIntegrityLevel (O, level)</h1>
+
+ <p>The abstract operation <span style="font-family: Times New Roman">SetIntegrityLevel</span> is used to fix the set of own
+ properties of an object. This abstract operation performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>O</i>) is
+ Object.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>level</i> is either <code>"sealed"</code> or
+ <code>"frozen"</code>.</li>
+ <li>Let <i>status</i> be <i>O</i>.[[PreventExtensions]]().</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>status</i>).</li>
+ <li>If <i>status</i> is <b>false</b>, return <b>false</b>.</li>
+ <li>Let <i>keys</i> be <i>O</i>.[[OwnPropertyKeys]]().</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>keys</i>).</li>
+ <li>If <i>level</i> is <code>"sealed"</code>, then
+ <ol class="block">
+ <li>Repeat for each element <i>k</i> of <i>keys</i>,
+ <ol class="block">
+ <li>Let <i>status</i> be <a href="#sec-definepropertyorthrow">DefinePropertyOrThrow</a>(<i>O</i>, <i>k</i>,
+ PropertyDescriptor{ [[Configurable]]: <b>false</b>}).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>status</i>).</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Else <i>level</i> is <code>"frozen"</code>,
+ <ol class="block">
+ <li>Repeat for each element <i>k</i> of <i>keys</i>,
+ <ol class="block">
+ <li>Let <i>currentDesc</i> be <i>O</i>.[[GetOwnProperty]](<i>k</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>currentDesc</i>).</li>
+ <li>If <i>currentDesc</i> is not <b>undefined</b>, then
+ <ol class="block">
+ <li>If <a href="#sec-isaccessordescriptor">IsAccessorDescriptor</a>(<i>currentDesc</i>) is <b>true</b>, then
+ <ol class="block">
+ <li>Let <i>desc</i> be the PropertyDescriptor{[[Configurable]]: <b>false</b>}.</li>
+ </ol>
+ </li>
+ <li>Else,
+ <ol class="block">
+ <li>Let <i>desc</i> be the PropertyDescriptor { [[Configurable]]: <b>false</b>, [[Writable]]: <b>false</b>
+ }.</li>
+ </ol>
+ </li>
+ <li>Let <i>status</i> be <a href="#sec-definepropertyorthrow">DefinePropertyOrThrow</a>(<i>O</i>, <i>k</i>,
+ <i>desc</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>status</i>).</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-testintegritylevel">
+ <h1><span class="secnum" id="sec-7.3.16"><a href="#sec-testintegritylevel" title="link to this section">7.3.16</a></span>
+ TestIntegrityLevel (O, level)</h1>
+
+ <p>The abstract operation <span style="font-family: Times New Roman">TestIntegrityLevel</span> is used to determine if the
+ set of own properties of an object are fixed. This abstract operation performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>O</i>) is
+ Object.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>level</i> is either <code>"sealed"</code> or
+ <code>"frozen"</code>.</li>
+ <li>Let <i>status</i> be <a href="#sec-isextensible-o">IsExtensible</a>(<i>O</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>status</i>).</li>
+ <li>If <i>status</i> is <b>true</b>, return <b>false</b></li>
+ <li>NOTE If the object is extensible, none of its properties are examined.</li>
+ <li>Let <i>keys</i> be <i>O</i>.[[OwnPropertyKeys]]().</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>keys</i>).</li>
+ <li>Repeat for each element <i>k</i> of <i>keys</i>,
+ <ol class="block">
+ <li>Let <i>currentDesc</i> be <i>O</i>.[[GetOwnProperty]](<i>k</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>currentDesc</i>).</li>
+ <li>If <i>currentDesc</i> is not <b>undefined</b>, then
+ <ol class="block">
+ <li>If <i>currentDesc</i>.[[Configurable]] is <b>true</b>, return <b>false</b>.</li>
+ <li>If <i>level</i> is <code>"frozen"</code> and <a
+ href="#sec-isdatadescriptor">IsDataDescriptor</a>(<i>currentDesc</i>) is <b>true</b>, then
+ <ol class="block">
+ <li>If <i>currentDesc</i>.[[Writable]] is <b>true</b>, return <b>false</b>.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-createarrayfromlist">
+ <h1><span class="secnum" id="sec-7.3.17"><a href="#sec-createarrayfromlist" title="link to this section">7.3.17</a></span>
+ CreateArrayFromList (elements)</h1>
+
+ <p>The abstract operation <span style="font-family: Times New Roman">CreateArrayFromList</span> is used to create an Array
+ object whose elements are provided by a <a href="#sec-list-and-record-specification-type">List</a>. This abstract operation
+ performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>elements</i> is a <a
+ href="#sec-list-and-record-specification-type">List</a> whose elements are all <a
+ href="#sec-ecmascript-language-types">ECMAScript language values</a>.</li>
+ <li>Let <i>array</i> be <a href="#sec-arraycreate">ArrayCreate</a>(0) (<a href="#sec-arraycreate">see 9.4.2.2</a>).</li>
+ <li>Let <i>n</i> be 0.</li>
+ <li>For each element <i>e</i> of <i>elements</i>
+ <ol class="block">
+ <li>Let <i>status</i> be <a href="#sec-createdataproperty">CreateDataProperty</a>(<i>array</i>, <a
+ href="#sec-tostring">ToString</a>(<i>n</i>), <i>e</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>status</i> is <b>true</b>.</li>
+ <li>Increment <i>n</i> by 1.</li>
+ </ol>
+ </li>
+ <li>Return <i>array</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-createlistfromarraylike">
+ <h1><span class="secnum" id="sec-7.3.18"><a href="#sec-createlistfromarraylike"
+ title="link to this section">7.3.18</a></span> CreateListFromArrayLike (obj [, elementTypes] )</h1>
+
+ <p>The abstract operation CreateListFromArrayLike is used to create a List value whose elements are provided by the indexed
+ properties of an array-like object, <var>obj</var>. The optional argument <var>elementTypes</var> is a <a
+ href="#sec-list-and-record-specification-type">List</a> containing the names of ECMAScript Language Types that are allowed
+ for element values of the <a href="#sec-list-and-record-specification-type">List</a> that is created. This abstract
+ operation performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>obj</i>).</li>
+ <li>If <i>elementTypes</i> was not passed, let <i>elementTypes</i> be (Undefined, Null, Boolean, String, Symbol, Number,
+ Object).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>obj</i>) is not Object, throw a <b>TypeError</b>
+ exception.</li>
+ <li>Let <i>len</i> be <a href="#sec-tolength">ToLength</a>(<a href="#sec-get-o-p">Get</a>(<i>obj</i>,
+ <code>"length"</code>)).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>len</i>).</li>
+ <li>Let <i>list</i> be an empty <a href="#sec-list-and-record-specification-type">List</a>.</li>
+ <li>Let <i>index</i> be 0.</li>
+ <li>Repeat while <i>index</i> &lt; <i>len</i>
+ <ol class="block">
+ <li>Let <i>indexName</i> be <a href="#sec-tostring">ToString</a>(<i>index</i>).</li>
+ <li>Let <i>next</i> be <a href="#sec-get-o-p">Get</a>(<i>obj</i>, <i>indexName</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>next</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>next</i>) is not an element of <i>elementTypes</i>,
+ throw a <b>TypeError</b> exception.</li>
+ <li>Append <i>next</i> as the last element of <i>list</i>.</li>
+ <li>Set <i>index</i> to <i>index</i> + 1.</li>
+ </ol>
+ </li>
+ <li>Return <i>list</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-ordinaryhasinstance">
+ <h1><span class="secnum" id="sec-7.3.19"><a href="#sec-ordinaryhasinstance" title="link to this section">7.3.19</a></span>
+ OrdinaryHasInstance (C, O)</h1>
+
+ <p>The abstract operation <span style="font-family: Times New Roman">OrdinaryHasInstance</span> implements the default
+ algorithm for determining if an object <var>O</var> inherits from the instance object inheritance path provided by
+ constructor <var>C</var>. This abstract operation performs the following steps:</p>
+
+ <ol class="proc">
+ <li>If <a href="#sec-iscallable">IsCallable</a>(<i>C</i>) is <b>false</b>, return <b>false</b>.</li>
+ <li>If <i>C</i> has a <a href="#sec-bound-function-exotic-objects">[[BoundTargetFunction]]</a> <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>, then
+ <ol class="block">
+ <li>Let <i>BC</i> be the value of <i>C&rsquo;s</i> <a
+ href="#sec-bound-function-exotic-objects">[[BoundTargetFunction]]</a> <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>Return <a href="#sec-instanceofoperator">InstanceofOperator</a>(<i>O</i>,<i>BC</i>) (<a
+ href="#sec-instanceofoperator">see 12.9.4</a>).</li>
+ </ol>
+ </li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>O</i>) is not Object, return <b>false</b>.</li>
+ <li>Let <i>P</i> be <a href="#sec-get-o-p">Get</a>(<i>C</i>, <code>"prototype"</code>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>P</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>P</i>) is not Object, throw a <b>TypeError</b>
+ exception.</li>
+ <li>Repeat
+ <ol class="block">
+ <li>Let <i>O</i> be <i>O</i>.[[GetPrototypeOf]]().</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>O</i>).</li>
+ <li>If <i>O</i> is <code>null</code>, return <b>false</b>.</li>
+ <li>If <a href="#sec-samevalue">SameValue</a>(<i>P</i>, <i>O</i>) is <b>true</b>, return <b>true</b>.</li>
+ </ol>
+ </li>
+ </ol>
+ </section>
+
+ <section id="sec-speciesconstructor">
+ <h1><span class="secnum" id="sec-7.3.20"><a href="#sec-speciesconstructor" title="link to this section">7.3.20</a></span>
+ SpeciesConstructor ( O, defaultConstructor )</h1>
+
+ <p>The abstract operation SpeciesConstructor is used to retrieve the constructor that should be used to create new objects
+ that are derived from the argument object <var>O</var>. The <var>defaultConstructor</var> argument is the constructor to use
+ if a constructor @@species property cannot be found starting from <var>O</var>. This abstract operation performs the
+ following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>O</i>) is
+ Object.</li>
+ <li>Let <i>C</i> be <a href="#sec-get-o-p">Get</a>(<i>O</i>, <code>"constructor"</code>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>C</i>).</li>
+ <li>If <i>C</i> is <b>undefined</b>, return <i>defaultConstructor</i>.</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>C</i>) is not Object, throw a <b>TypeError</b>
+ exception.</li>
+ <li>Let <i>S</i> be <a href="#sec-get-o-p">Get</a>(<i>C</i>, @@species).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>S</i>).</li>
+ <li>If <i>S</i> is either <b>undefined</b> or <b>null</b>, return <i>defaultConstructor</i>.</li>
+ <li>If <a href="#sec-isconstructor">IsConstructor</a>(<i>S</i>) is <b>true</b>, return <i>S.</i></li>
+ <li>Throw a <b>TypeError</b> exception.</li>
+ </ol>
+ </section>
+
+ <section id="sec-enumerableownnames">
+ <h1><span class="secnum" id="sec-7.3.21"><a href="#sec-enumerableownnames" title="link to this section">7.3.21</a></span>
+ EnumerableOwnNames (O)</h1>
+
+ <p>When the abstract operation EnumerableOwnNames is called with Object <var>O</var> the following steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>O</i>)
+ is Object.</li>
+ <li>Let <i>ownKeys</i> be <i>O</i>.[[OwnPropertyKeys]]().</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>ownKeys</i>).</li>
+ <li>Let <i>names</i> be a new empty <a href="#sec-list-and-record-specification-type">List</a>.</li>
+ <li>Repeat, for each element <i>key</i> of <i>ownKeys</i> in <a href="#sec-list-and-record-specification-type">List</a>
+ order
+ <ol class="block">
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>key</i>) is String, then
+ <ol class="block">
+ <li>Let <i>desc</i> be <i>O</i>.[[GetOwnProperty]](<i>key</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>desc</i>).</li>
+ <li>If <i>desc</i> is not <b>undefined</b>, then
+ <ol class="block">
+ <li>If <i>desc.</i>[[Enumerable]] is <b>true</b>, append <i>key</i> to <i>names</i>.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Order the elements of <i>names</i> so they are in the same relative order as would be produced by the Iterator that
+ would be returned if the [[Enumerate]] internal method was invoked on <i>O</i>.</li>
+ <li>Return <i>names</i>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> The order of elements is returned list is the same as the enumeration order that used by a
+ for-in statement.</p>
+ </div>
+ </section>
+
+ <section id="sec-getfunctionrealm">
+ <h1><span class="secnum" id="sec-7.3.22"><a href="#sec-getfunctionrealm" title="link to this section">7.3.22</a></span>
+ GetFunctionRealm ( obj )</h1>
+
+ <p>The abstract operation GetFunctionRealm with argument <var>obj</var> performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>obj</i> is a callable object.</li>
+ <li>If <i>obj</i> has a [[Realm]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a>, then
+ <ol class="block">
+ <li>Return <i>obj</i>&rsquo;s [[Realm]] <a href="#sec-object-internal-methods-and-internal-slots">internal
+ slot</a>.</li>
+ </ol>
+ </li>
+ <li>If <i>obj</i> is a <a href="#sec-bound-function-exotic-objects">Bound Function</a> exotic object, then
+ <ol class="block">
+ <li>Let <i>target</i> be <i>obj</i>&rsquo;s <a href="#sec-bound-function-exotic-objects">[[BoundTargetFunction]]</a>
+ <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>Return GetFunctionRealm(<i>target</i>).</li>
+ </ol>
+ </li>
+ <li>If <i>obj</i> is a Proxy exotic object, then
+ <ol class="block">
+ <li>If the value of the [[ProxyHandler]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a>
+ of <i>obj</i> is <b>null</b>, throw a <b>TypeError</b> exception.</li>
+ <li>Let <i>proxyTarget</i> be the value of <i>obj</i>&rsquo;s [[ProxyTarget]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>Return GetFunctionRealm(<i>proxyTarget</i>).</li>
+ </ol>
+ </li>
+ <li>Return <a href="#sec-execution-contexts">the running execution context</a>&rsquo;s <a
+ href="#sec-code-realms">Realm</a>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> Step 5 will only be reached if <i>target</i> is a non-standard exotic function object that
+ does not have a [[Realm]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</p>
+ </div>
+ </section>
+ </section>
+
+ <section id="sec-operations-on-iterator-objects">
+ <div class="front">
+ <h1><span class="secnum" id="sec-7.4"><a href="#sec-operations-on-iterator-objects"
+ title="link to this section">7.4</a></span> Operations on Iterator Objects</h1>
+
+ <p>See Common Iteration Interfaces (<a href="#sec-iteration">25.1</a>).</p>
+ </div>
+
+ <section id="sec-getiterator">
+ <h1><span class="secnum" id="sec-7.4.1"><a href="#sec-getiterator" title="link to this section">7.4.1</a></span> GetIterator
+ ( obj, method )</h1>
+
+ <p>The abstract operation GetIterator with argument <span style="font-family: Times New Roman"><i>obj</i> and</span>
+ optional argument <var>method</var> performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>obj</i>).</li>
+ <li>If <i>method</i> was not passed, then
+ <ol class="block">
+ <li>Let <i>method</i> be <a href="#sec-getmethod">GetMethod</a>(<i>obj</i>, @@iterator).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>method</i>).</li>
+ </ol>
+ </li>
+ <li>Let <i>iterator</i> be <a href="#sec-call">Call</a>(<i>method</i>,<i>obj</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>iterator</i>)<i>.</i></li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>iterator</i>) is not Object, throw a <b>TypeError</b>
+ exception.</li>
+ <li>Return <i>iterator</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-iteratornext">
+ <h1><span class="secnum" id="sec-7.4.2"><a href="#sec-iteratornext" title="link to this section">7.4.2</a></span>
+ IteratorNext ( iterator, value )</h1>
+
+ <p>The abstract operation IteratorNext with argument <var>iterator</var> and optional argument <var>value</var> performs the
+ following steps:</p>
+
+ <ol class="proc">
+ <li>If <i>value</i> was not passed, then
+ <ol class="block">
+ <li>Let <i>result</i> be <a href="#sec-invoke">Invoke</a>(<i>iterator</i>, <code>"next"</code>, &laquo;&zwj;
+ &raquo;).</li>
+ </ol>
+ </li>
+ <li>Else,
+ <ol class="block">
+ <li>Let <i>result</i> be <a href="#sec-invoke">Invoke</a>(<i>iterator</i>, <code>"next"</code>,
+ &laquo;&zwj;<i>value</i>&raquo;).</li>
+ </ol>
+ </li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>result</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>result</i>) is not Object, throw a <b>TypeError</b>
+ exception.</li>
+ <li>Return <i>result</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-iteratorcomplete">
+ <h1><span class="secnum" id="sec-7.4.3"><a href="#sec-iteratorcomplete" title="link to this section">7.4.3</a></span>
+ IteratorComplete ( iterResult )</h1>
+
+ <p>The abstract operation IteratorComplete with argument <var>iterResult</var> performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>iterResult</i>) is Object.</li>
+ <li>Return <a href="#sec-toboolean">ToBoolean</a>(<a href="#sec-get-o-p">Get</a>(<i>iterResult</i>,
+ <code>"done"</code>)).</li>
+ </ol>
+ </section>
+
+ <section id="sec-iteratorvalue">
+ <h1><span class="secnum" id="sec-7.4.4"><a href="#sec-iteratorvalue" title="link to this section">7.4.4</a></span>
+ IteratorValue ( iterResult )</h1>
+
+ <p>The abstract operation IteratorValue with argument <var>iterResult</var> performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>iterResult</i>) is Object.</li>
+ <li>Return <a href="#sec-get-o-p">Get</a>(<i>iterResult</i>, <code>"value"</code>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-iteratorstep">
+ <h1><span class="secnum" id="sec-7.4.5"><a href="#sec-iteratorstep" title="link to this section">7.4.5</a></span>
+ IteratorStep ( iterator )</h1>
+
+ <p>The abstract operation IteratorStep with argument <var>iterator</var> requests the next value from <var>iterator</var>
+ and returns either <span class="value">false</span> indicating that the iterator has reached its end or the IteratorResult
+ object if a next value is available. IteratorStep performs the following steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>result</i> be <a href="#sec-iteratornext">IteratorNext</a>(<i>iterator</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>result</i>).</li>
+ <li>Let <i>done</i> be <a href="#sec-iteratorcomplete">IteratorComplete</a>(<i>result</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>done</i>).</li>
+ <li>If <i>done</i> is <b>true</b>, return <b>false</b>.</li>
+ <li>Return <i>result</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-iteratorclose">
+ <h1><span class="secnum" id="sec-7.4.6"><a href="#sec-iteratorclose" title="link to this section">7.4.6</a></span>
+ IteratorClose( iterator, completion )</h1>
+
+ <p>The abstract operation IteratorClose with arguments <var>iterator</var> and <var>completion</var> is used to notify an
+ iterator that it should perform any actions it would normally perform when it has reached its completed state:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>iterator</i>) is Object.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>completion</i> is a <a
+ href="#sec-completion-record-specification-type">Completion Record</a>.</li>
+ <li>Let <i>return</i> be <a href="#sec-getmethod">GetMethod</a>(<i>iterator</i>, <code>"return"</code>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>return</i>).</li>
+ <li>If <i>return</i> is <b>undefined</b>, return <a
+ href="#sec-completion-record-specification-type">Completion</a>(<i>completion</i>).</li>
+ <li>Let <i>innerResult</i> be <a href="#sec-call">Call</a>(<i>return</i>, <i>iterator</i>, &laquo;&zwj; &raquo;).</li>
+ <li>If <i>completion</i>.[[type]] is <span style="font-family: sans-serif">throw</span>, return <a
+ href="#sec-completion-record-specification-type">Completion</a>(<i>completion</i>).</li>
+ <li>If <i>innerResult</i>.[[type]] is <span style="font-family: sans-serif">throw</span>, return <a
+ href="#sec-completion-record-specification-type">Completion</a>(<i>innerResult</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>innerResult</i>.[[value]]) is not Object<i>,</i> throw
+ a <b>TypeError</b> exception.</li>
+ <li>Return <a href="#sec-completion-record-specification-type">Completion</a>(<i>completion</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-createiterresultobject">
+ <h1><span class="secnum" id="sec-7.4.7"><a href="#sec-createiterresultobject" title="link to this section">7.4.7</a></span>
+ CreateIterResultObject ( value, done )</h1>
+
+ <p>The abstract operation CreateIterResultObject with arguments <var>value</var> and <var>done</var> creates an object that
+ supports the IteratorResult interface by performing the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>done</i>)
+ is Boolean.</li>
+ <li>Let <i>obj</i> be <a href="#sec-objectcreate">ObjectCreate</a>(<span style="font-family:
+ sans-serif">%ObjectPrototype%</span>).</li>
+ <li>Perform <a href="#sec-createdataproperty">CreateDataProperty</a>(<i>obj</i>, <code>"value"</code>, <i>value</i>).</li>
+ <li>Perform <a href="#sec-createdataproperty">CreateDataProperty</a>(<i>obj</i>, <code>"done"</code>, <i>done</i>).</li>
+ <li>Return <i>obj</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-createlistiterator">
+ <div class="front">
+ <h1><span class="secnum" id="sec-7.4.8"><a href="#sec-createlistiterator" title="link to this section">7.4.8</a></span>
+ CreateListIterator ( list )</h1>
+
+ <p>The abstract operation CreateListIterator with argument <var>list</var> creates an Iterator (<a
+ href="#sec-iterator-interface">25.1.1.2</a>) object whose next method returns the successive elements of <var>list</var>.
+ It performs the following steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>iterator</i> be <a href="#sec-objectcreate">ObjectCreate</a>(%IteratorPrototype%, &laquo;[[IteratorNext]],
+ [[IteratedList]], [[ListIteratorNextIndex]]&raquo;).</li>
+ <li>Set <i>iterator&rsquo;s</i> [[IteratedList]] <a href="#sec-object-internal-methods-and-internal-slots">internal
+ slot</a> to <i>list</i>.</li>
+ <li>Set <i>iterator&rsquo;s</i> [[ListIteratorNextIndex]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> to 0.</li>
+ <li>Let <i>next</i> be a new built-in function object as defined in ListIterator <code>next</code> (<a
+ href="#sec-listiterator-next">7.4.8.1</a>).</li>
+ <li>Set <i>iterator&rsquo;s</i> [[IteratorNext]] <a href="#sec-object-internal-methods-and-internal-slots">internal
+ slot</a> to <i>next</i>.</li>
+ <li>Perform <a href="#sec-createmethodproperty">CreateMethodProperty</a>(<i>iterator</i>, <code>"next"</code>,
+ <i>next</i>).</li>
+ <li>Return <i>iterator</i>.</li>
+ </ol>
+ </div>
+
+ <section id="sec-listiterator-next">
+ <h1><span class="secnum" id="sec-7.4.8.1"><a href="#sec-listiterator-next" title="link to this section">7.4.8.1</a></span>
+ ListIterator next( )</h1>
+
+ <p>The ListIterator <code>next</code> method is a standard built-in function object (<a
+ href="#sec-ecmascript-standard-built-in-objects">clause 17</a>) that performs the following steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>O</i> be the <b>this</b> value.</li>
+ <li>Let <i>f</i> be the active function object.</li>
+ <li>If <i>O</i> does not have a [[IteratorNext]] <a href="#sec-object-internal-methods-and-internal-slots">internal
+ slot</a>, throw a <b>TypeError</b> exception.</li>
+ <li>Let <i>next</i> be the value of the [[IteratorNext]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>If <a href="#sec-samevalue">SameValue</a>(<i>f</i>, <i>next</i>) is <b>false</b>, throw a <b>TypeError</b>
+ exception.</li>
+ <li>If <i>O</i> does not have a [[IteratedList]] <a href="#sec-object-internal-methods-and-internal-slots">internal
+ slot</a>, throw a <b>TypeError</b> exception.</li>
+ <li>Let <i>list</i> be the value of the [[IteratedList]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>Let <i>index</i> be the value of the [[ListIteratorNextIndex]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>Let <i>len</i> be the number of elements of <i>list</i>.</li>
+ <li>If <i>index</i> &ge; <i>len</i>, then
+ <ol class="block">
+ <li>Return <a href="#sec-createiterresultobject">CreateIterResultObject</a>(<b>undefined</b>, <b>true</b>).</li>
+ </ol>
+ </li>
+ <li>Set the value of the [[ListIteratorNextIndex]] <a href="#sec-object-internal-methods-and-internal-slots">internal
+ slot</a> of <i>O</i> to <i>index</i>+1.</li>
+ <li>Return <a href="#sec-createiterresultobject">CreateIterResultObject</a>(<i>list</i>[<i>index</i>],
+ <b>false</b>).</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> A ListIterator <code>next</code> method will throw an exception if applied to any object
+ other than the one with which it was originally associated.</p>
+ </div>
+ </section>
+ </section>
+ </section>
+</section>
+
+<section id="sec-executable-code-and-execution-contexts">
+ <div class="front">
+ <h1><span class="secnum" id="sec-8"><a href="#sec-executable-code-and-execution-contexts"
+ title="link to this section">8</a></span> Executable Code and Execution Contexts</h1>
+ </div>
+
+ <section id="sec-lexical-environments">
+ <div class="front">
+ <h1><span class="secnum" id="sec-8.1"><a href="#sec-lexical-environments" title="link to this section">8.1</a></span>
+ Lexical Environments</h1>
+
+ <p>A <i>Lexical Environment</i> is a specification type used to define the association of <span
+ class="nt">Identifiers</span> to specific variables and functions based upon the lexical nesting structure of ECMAScript
+ code. A Lexical Environment consists of an <a href="#sec-environment-records">Environment Record</a> and a possibly null
+ reference to an <i>outer</i> Lexical Environment. Usually a Lexical Environment is associated with some specific syntactic
+ structure of ECMAScript code such as a <span class="nt">FunctionDeclaration</span>, a <span
+ class="nt">BlockStatement</span>, or a <span class="nt">Catch</span> clause of a <span class="nt">TryStatement</span> and a
+ new Lexical Environment is created each time such code is evaluated.</p>
+
+ <p>An <a href="#sec-environment-records">Environment Record</a> records the identifier bindings that are created within the
+ scope of its associated Lexical Environment. It is referred to as the Lexical Environment&rsquo;s EnvironmentRecord</p>
+
+ <p>The outer environment reference is used to model the logical nesting of Lexical Environment values. The outer reference
+ of a (inner) Lexical Environment is a reference to the Lexical Environment that logically surrounds the inner Lexical
+ Environment. An outer Lexical Environment may, of course, have its own outer Lexical Environment. A Lexical Environment may
+ serve as the outer environment for multiple inner Lexical Environments. For example, if a <span
+ class="nt">FunctionDeclaration</span> contains two nested <span class="nt">FunctionDeclarations</span> then the Lexical
+ Environments of each of the nested functions will have as their outer Lexical Environment the Lexical Environment of the
+ current evaluation of the surrounding function.</p>
+
+ <p>A <i>global environment</i> is a Lexical Environment which does not have an outer environment. The global
+ environment&rsquo;s outer environment reference is <b>null</b>. A global environment&rsquo;s <a
+ href="#sec-environment-records">Environment Record</a> may be prepopulated with identifier bindings and includes an
+ associated <i>global object</i> whose properties provide some of <a href="#sec-global-environment-records">the global
+ environment</a>&rsquo;s identifier bindings. This global object is the value of a global environment&rsquo;s
+ <code>this</code> binding. As ECMAScript code is executed, additional properties may be added to the global object and the
+ initial properties may be modified.</p>
+
+ <p>A <i>module environment</i> is a Lexical Environment that contains the bindings for the top level declarations of a <span
+ class="nt">Module</span>. It also contains the bindings that are explicitly imported by the <span class="nt">Module</span>.
+ The outer environment of a module environment is a global environment.</p>
+
+ <p>A <i>function environment</i> is a Lexical Environment that corresponds to the invocation of an <a
+ href="#sec-ecmascript-function-objects">ECMAScript function object</a>. A function environment may establish a new
+ <code>this</code> binding. A function environment also captures the state necessary to support <code>super</code> method
+ invocations.</p>
+
+ <p>Lexical Environments and <a href="#sec-environment-records">Environment Record</a> values are purely specification
+ mechanisms and need not correspond to any specific artefact of an ECMAScript implementation. It is impossible for an
+ ECMAScript program to directly access or manipulate such values.</p>
+ </div>
+
+ <section id="sec-environment-records">
+ <div class="front">
+ <h1><span class="secnum" id="sec-8.1.1"><a href="#sec-environment-records" title="link to this section">8.1.1</a></span>
+ Environment Records</h1>
+
+ <p>There are two primary kinds of Environment Record values used in this specification: <i>declarative Environment
+ Records</i> and <i>object Environment Records</i>. Declarative Environment Records are used to define the effect of
+ ECMAScript language syntactic elements such as <span class="nt">FunctionDeclarations</span>, <span
+ class="nt">VariableDeclarations</span>, and <span class="nt">Catch</span> clauses that directly associate identifier
+ bindings with <a href="#sec-ecmascript-language-types">ECMAScript language values</a>. Object Environment Records are used
+ to define the effect of ECMAScript elements such as <span class="nt">WithStatement</span> that associate identifier
+ bindings with the properties of some object. <a href="#sec-global-environment-records">Global Environment Records</a> and
+ function Environment Records are specializations that are used for specifically for <span class="nt">Script</span> global
+ declarations and for top-level declarations within functions.</p>
+
+ <p>For specification purposes Environment Record values are values of the Record specification type and can be thought of
+ as existing in a simple object-oriented hierarchy where Environment Record is an abstract class with three concrete
+ subclasses, declarative Environment Record, object Environment Record, and global Environment Record. <a
+ href="#sec-function-environment-records">Function Environment Records</a> and module Environment Records are subclasses of
+ declarative Environment Record. The abstract class includes the abstract specification methods defined in <a
+ href="#table-15">Table 15</a>. These abstract methods have distinct concrete algorithms for each of the concrete
+ subclasses.</p>
+
+ <figure>
+ <figcaption><span id="table-15">Table 15</span> &mdash; Abstract Methods of Environment Records</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Method</th>
+ <th>Purpose</th>
+ </tr>
+ <tr>
+ <td>HasBinding(N)</td>
+ <td>Determine if an Environment Record has a binding for the String value <var>N</var>. Return <b>true</b> if it does and <b>false</b> if it does not</td>
+ </tr>
+ <tr>
+ <td>CreateMutableBinding(N, D)</td>
+ <td>Create a new but uninitialized mutable binding in an Environment Record. The String value <var>N</var> is the text of the bound name. If the optional Boolean argument <var>D</var> is <b>true</b> the binding is may be subsequently deleted.</td>
+ </tr>
+ <tr>
+ <td>CreateImmutableBinding(N, S)</td>
+ <td>Create a new but uninitialized immutable binding in an Environment Record. The String value N is the text of the bound name. If <var>S</var> is <b>true</b> then attempts to access the value of the binding before it is initialized or set it after it has been initialized will always throw an exception, regardless of the strict mode setting of operations that reference that binding. <var>S</var> is an optional parameter that defaults to <b>false</b>.</td>
+ </tr>
+ <tr>
+ <td>InitializeBinding(N,V)</td>
+ <td>Set the value of an already existing but uninitialized binding in an Environment Record. The String value N is the text of the bound name. V is the value for the binding and is a value of any <a href="#sec-ecmascript-language-types">ECMAScript language type</a>.</td>
+ </tr>
+ <tr>
+ <td>SetMutableBinding(N,V, S)</td>
+ <td>Set the value of an already existing mutable binding in an Environment Record. The String value <var>N</var> is the text of the bound name. <var>V</var> is the value for the binding and may be a value of any <a href="#sec-ecmascript-language-types">ECMAScript language type</a>. <var>S</var> is a Boolean flag. If <var>S</var> is <b>true</b> and the binding cannot be set throw a <b>TypeError</b> exception.</td>
+ </tr>
+ <tr>
+ <td>GetBindingValue(N,S)</td>
+ <td>Returns the value of an already existing binding from an Environment Record. The String value <var>N</var> is the text of the bound name. <var>S</var> is used to identify references originating in <a href="#sec-strict-mode-code">strict mode code</a> or that otherwise require strict mode reference semantics. If <var>S</var> is <b>true</b> and the binding does not exist throw a <b>ReferenceError</b> exception. If the binding exists but is uninitialized a <b>ReferenceError</b> is thrown, regardless of the value of <i><span style="font-family: Times New Roman">S</span>.</i></td>
+ </tr>
+ <tr>
+ <td>DeleteBinding(N)</td>
+ <td>Delete a binding from an Environment Record. The String value <var>N</var> is the text of the bound name. If a binding for <var>N</var> exists, remove the binding and return <b>true</b>. If the binding exists but cannot be removed return <b>false</b>. If the binding does not exist return <b>true</b>.</td>
+ </tr>
+ <tr>
+ <td>HasThisBinding()</td>
+ <td>Determine if an Environment Record establishes a <code>this</code> binding. Return <b>true</b> if it does and <b>false</b> if it does not.</td>
+ </tr>
+ <tr>
+ <td>HasSuperBinding()</td>
+ <td>Determine if an Environment Record establishes a <code>super</code> method binding. Return <b>true</b> if it does and <b>false</b> if it does not.</td>
+ </tr>
+ <tr>
+ <td>WithBaseObject ()</td>
+ <td>If this Environment Record is associated with a <code>with</code> statement, return the with object. Otherwise, return <span class="value">undefined</span>.</td>
+ </tr>
+ </table>
+ </figure>
+ </div>
+
+ <section id="sec-declarative-environment-records">
+ <div class="front">
+ <h1><span class="secnum" id="sec-8.1.1.1"><a href="#sec-declarative-environment-records"
+ title="link to this section">8.1.1.1</a></span> Declarative Environment Records</h1>
+
+ <p>Each declarative <a href="#sec-environment-records">Environment Record</a> is associated with an ECMAScript program
+ scope containing variable, constant, let, class, module, import, and/or function declarations. A declarative <a
+ href="#sec-environment-records">Environment Record</a> binds the set of identifiers defined by the declarations
+ contained within its scope.</p>
+
+ <p>The behaviour of the concrete specification methods for declarative environment records is defined by the following
+ algorithms.</p>
+ </div>
+
+ <section id="sec-declarative-environment-records-hasbinding-n">
+ <h1><span class="secnum" id="sec-8.1.1.1.1"><a href="#sec-declarative-environment-records-hasbinding-n"
+ title="link to this section">8.1.1.1.1</a></span> HasBinding(N)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method HasBinding for declarative Environment
+ Records simply determines if the argument identifier is one of the identifiers bound by the record:</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the declarative <a href="#sec-environment-records">Environment Record</a> for which the
+ method was invoked.</li>
+ <li>If <i>envRec</i> has a binding for the name that is the value of <i>N</i>, return <b>true</b>.</li>
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-declarative-environment-records-createmutablebinding-n-d">
+ <h1><span class="secnum" id="sec-8.1.1.1.2"><a href="#sec-declarative-environment-records-createmutablebinding-n-d"
+ title="link to this section">8.1.1.1.2</a></span> CreateMutableBinding (N, D)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method CreateMutableBinding for declarative
+ Environment Records creates a new mutable binding for the name <var>N</var> that is uninitialized. A binding must not
+ already exist in this <a href="#sec-environment-records">Environment Record</a> for <var>N</var>. If Boolean argument
+ <var>D</var> is provided and has the value <b>true</b> the new binding is marked as being subject to deletion.</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the declarative <a href="#sec-environment-records">Environment Record</a> for which the
+ method was invoked.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>envRec</i> does not already have a binding for <i>N</i>.</li>
+ <li>Create a mutable binding in <i>envRec</i> for <i>N</i> and record that it is uninitialized. If <i>D</i> is
+ <b>true</b> record that the newly created binding may be deleted by a subsequent DeleteBinding call.</li>
+ <li>Return <a href="#sec-normalcompletion">NormalCompletion</a>(<span style="font-family:
+ sans-serif">empty</span>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-declarative-environment-records-createimmutablebinding-n-s">
+ <h1><span class="secnum" id="sec-8.1.1.1.3"><a href="#sec-declarative-environment-records-createimmutablebinding-n-s"
+ title="link to this section">8.1.1.1.3</a></span> CreateImmutableBinding (N, S)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method CreateImmutableBinding for declarative
+ Environment Records creates a new immutable binding for the name <var>N</var> that is uninitialized. A binding must not
+ already exist in this <a href="#sec-environment-records">Environment Record</a> for <var>N</var>. If Boolean argument
+ <var>S</var> is provided and has the value <b>true</b> the new binding is marked as a strict binding.</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the declarative <a href="#sec-environment-records">Environment Record</a> for which the
+ method was invoked.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>envRec</i> does not already have a binding for <i>N</i>.</li>
+ <li>Create an immutable binding in <i>envRec</i> for <i>N</i> and record that it is uninitialized. If <i>S</i> is
+ <b>true</b> record that the newly created binding is a strict binding.</li>
+ <li>Return <a href="#sec-normalcompletion">NormalCompletion</a>(<span style="font-family:
+ sans-serif">empty</span>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-declarative-environment-records-initializebinding-n-v">
+ <h1><span class="secnum" id="sec-8.1.1.1.4"><a href="#sec-declarative-environment-records-initializebinding-n-v"
+ title="link to this section">8.1.1.1.4</a></span> InitializeBinding (N,V)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method InitializeBinding for declarative
+ Environment Records is used to set the bound value of the current binding of the identifier whose name is the value of
+ the argument <var>N</var> to the value of argument <var>V</var>. An uninitialized binding for <var>N</var> must already
+ exist.</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the declarative <a href="#sec-environment-records">Environment Record</a> for which the
+ method was invoked.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>envRec</i> must have an uninitialized binding for
+ <i>N</i>.</li>
+ <li>Set the bound value for <i>N</i> in <i>envRec</i> to <i>V</i>.</li>
+ <li>Record that the binding for <i>N</i> in <i>envRec</i> has been initialized.</li>
+ <li>Return <a href="#sec-normalcompletion">NormalCompletion</a>(<span style="font-family:
+ sans-serif">empty</span>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-declarative-environment-records-setmutablebinding-n-v-s">
+ <h1><span class="secnum" id="sec-8.1.1.1.5"><a href="#sec-declarative-environment-records-setmutablebinding-n-v-s"
+ title="link to this section">8.1.1.1.5</a></span> SetMutableBinding (N,V,S)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method SetMutableBinding for declarative
+ Environment Records attempts to change the bound value of the current binding of the identifier whose name is the value
+ of the argument <var>N</var> to the value of argument <var>V</var>. A binding for <var>N</var> normally already exist,
+ but in rare cases it may not. If the binding is an immutable binding, a <b>TypeError</b> is thrown if <span
+ style="font-family: Times New Roman">S</span> is <span class="value">true</span>.</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the declarative <a href="#sec-environment-records">Environment Record</a> for which the
+ method was invoked.</li>
+ <li>If <i>envRec</i> does not have a binding for <i>N</i>, then
+ <ol class="block">
+ <li>If <i>S</i> is <b>true</b> throw a <b>ReferenceError</b> exception.</li>
+ <li>Perform <i>envRec</i>.CreateMutableBinding(<i>N</i>, <b>true</b>).</li>
+ <li>Perform <i>envRec</i>.InitializeBinding(<i>N</i>, <i>V</i>).</li>
+ <li>Return <a href="#sec-normalcompletion">NormalCompletion</a>(<span style="font-family:
+ sans-serif">empty</span>).</li>
+ </ol>
+ </li>
+ <li>If the binding for <i>N</i> in <i>envRec</i> is a strict binding, let <i>S</i> be <b>true</b>.</li>
+ <li>If the binding for <i>N</i> in <i>envRec</i> has not yet been initialized throw a <b>ReferenceError</b>
+ exception.</li>
+ <li>Else if the binding for <i>N</i> in <i>envRec</i> is a mutable binding, change its bound value to <i>V</i>.</li>
+ <li>Else this must be an attempt to change the value of an immutable binding so if <i>S</i> is <b>true</b> throw a
+ <b>TypeError</b> exception.</li>
+ <li>Return <a href="#sec-normalcompletion">NormalCompletion</a>(<span style="font-family:
+ sans-serif">empty</span>).</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> An example of ECMAScript code that results in a missing binding at step 2 is:</p>
+
+ <pre>function f(){eval("var x; x = (delete x, 0);")}</pre>
+ </div>
+ </section>
+
+ <section id="sec-declarative-environment-records-getbindingvalue-n-s">
+ <h1><span class="secnum" id="sec-8.1.1.1.6"><a href="#sec-declarative-environment-records-getbindingvalue-n-s"
+ title="link to this section">8.1.1.1.6</a></span> GetBindingValue(N,S)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method GetBindingValue for declarative
+ Environment Records simply returns the value of its bound identifier whose name is the value of the argument
+ <var>N</var>. If the binding exists but is uninitialized a <b>ReferenceError</b> is thrown, regardless of the value of
+ <i><span style="font-family: Times New Roman">S</span>.</i></p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the declarative <a href="#sec-environment-records">Environment Record</a> for which the
+ method was invoked.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>envRec</i> has a binding for <i>N</i>.</li>
+ <li>If the binding for <i>N</i> in <i>envRec</i> is an uninitialized binding, throw a <b>ReferenceError</b>
+ exception.</li>
+ <li>Return the value currently bound to <i>N</i> in <i>envRec</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-declarative-environment-records-deletebinding-n">
+ <h1><span class="secnum" id="sec-8.1.1.1.7"><a href="#sec-declarative-environment-records-deletebinding-n"
+ title="link to this section">8.1.1.1.7</a></span> DeleteBinding (N)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method DeleteBinding for declarative
+ Environment Records can only delete bindings that have been explicitly designated as being subject to deletion.</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the declarative <a href="#sec-environment-records">Environment Record</a> for which the
+ method was invoked.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>envRec</i> has a binding for the name that is the value of
+ <i>N</i>.</li>
+ <li>If the binding for <i>N</i> in <i>envRec</i> cannot be deleted, return <b>false</b>.</li>
+ <li>Remove the binding for <i>N</i> from <i>envRec</i>.</li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-declarative-environment-records-hasthisbinding">
+ <h1><span class="secnum" id="sec-8.1.1.1.8"><a href="#sec-declarative-environment-records-hasthisbinding"
+ title="link to this section">8.1.1.1.8</a></span> HasThisBinding ()</h1>
+
+ <p>Regular declarative Environment Records do not provide a <code>this</code> binding.</p>
+
+ <ol class="proc">
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-declarative-environment-records-hassuperbinding">
+ <h1><span class="secnum" id="sec-8.1.1.1.9"><a href="#sec-declarative-environment-records-hassuperbinding"
+ title="link to this section">8.1.1.1.9</a></span> HasSuperBinding ()</h1>
+
+ <p>Regular declarative Environment Records do not provide a <code>super</code> binding.</p>
+
+ <ol class="proc">
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-declarative-environment-records-withbaseobject">
+ <h1><span class="secnum" id="sec-8.1.1.1.10"><a href="#sec-declarative-environment-records-withbaseobject"
+ title="link to this section">8.1.1.1.10</a></span> WithBaseObject()</h1>
+
+ <p>Declarative Environment Records always return <b>undefined</b> as their WithBaseObject.</p>
+
+ <ol class="proc">
+ <li>Return <b>undefined</b>.</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-object-environment-records">
+ <div class="front">
+ <h1><span class="secnum" id="sec-8.1.1.2"><a href="#sec-object-environment-records"
+ title="link to this section">8.1.1.2</a></span> Object Environment Records</h1>
+
+ <p>Each object <a href="#sec-environment-records">Environment Record</a> is associated with an object called its
+ <i>binding object</i>. An object <a href="#sec-environment-records">Environment Record</a> binds the set of string
+ identifier names that directly correspond to the property names of its binding object. Property keys that are not
+ strings in the form of an <span class="nt">IdentifierName</span> are not included in the set of bound identifiers. Both
+ own and inherited properties are included in the set regardless of the setting of their [[Enumerable]] attribute.
+ Because properties can be dynamically added and deleted from objects, the set of identifiers bound by an object <a
+ href="#sec-environment-records">Environment Record</a> may potentially change as a side-effect of any operation that
+ adds or deletes properties. Any bindings that are created as a result of such a side-effect are considered to be a
+ mutable binding even if the Writable attribute of the corresponding property has the value <b>false</b>. Immutable
+ bindings do not exist for object Environment Records.</p>
+
+ <p>Object Environment Records created for <code>with</code> statements (<a href="#sec-with-statement">13.10</a>) can
+ provide their binding object as an implicit <b>this</b> value for use in function calls. The capability is controlled by
+ a <var>withEnvironment</var> Boolean value that is associated with each object <a
+ href="#sec-environment-records">Environment Record</a>. By default, the value of <var>withEnvironment</var> is
+ <b>false</b> for any object <a href="#sec-environment-records">Environment Record</a>.</p>
+
+ <p>The behaviour of the concrete specification methods for object environment records is defined by the following
+ algorithms.</p>
+ </div>
+
+ <section id="sec-object-environment-records-hasbinding-n">
+ <h1><span class="secnum" id="sec-8.1.1.2.1"><a href="#sec-object-environment-records-hasbinding-n"
+ title="link to this section">8.1.1.2.1</a></span> HasBinding(N)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method HasBinding for object Environment
+ Records determines if its associated binding object has a property whose name is the value of the argument
+ <var>N</var>:</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the object <a href="#sec-environment-records">Environment Record</a> for which the method was
+ invoked.</li>
+ <li>Let <i>bindings</i> be the binding object for <i>envRec</i>.</li>
+ <li>Let <i>foundBinding</i> be <a href="#sec-hasproperty">HasProperty</a>(<i>bindings</i>, <i>N</i>)</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>foundBinding</i>).</li>
+ <li>If <i>foundBinding</i> is <b>false</b>, return <b>false</b>.</li>
+ <li>If the <i>withEnvironment</i> flag of <i>envRec</i> is <b>false</b>, return <b>true</b>.</li>
+ <li>Let <i>unscopables</i> be <a href="#sec-get-o-p">Get</a>(<i>bindings</i>, @@unscopables).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>unscopables</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>unscopables</i>) is Object, then
+ <ol class="block">
+ <li>Let <i>blocked</i> be <a href="#sec-toboolean">ToBoolean</a>(<a
+ href="#sec-get-o-p">Get</a>(<i>unscopables</i>, <i>N</i>)).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>blocked</i>).</li>
+ <li>If <i>blocked</i> is <b>true</b>, return <b>false</b>.</li>
+ </ol>
+ </li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-object-environment-records-createmutablebinding-n-d">
+ <h1><span class="secnum" id="sec-8.1.1.2.2"><a href="#sec-object-environment-records-createmutablebinding-n-d"
+ title="link to this section">8.1.1.2.2</a></span> CreateMutableBinding (N, D)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method CreateMutableBinding for object
+ Environment Records creates in an Environment Record&rsquo;s associated binding object a property whose name is the
+ String value and initializes it to the value <b>undefined</b>. If Boolean argument <var>D</var> is provided and has the
+ value <b>true</b> the new property&rsquo;s [[Configurable]] attribute is set to <b>true</b>, otherwise it is set to
+ <b>false</b>.</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the object <a href="#sec-environment-records">Environment Record</a> for which the method was
+ invoked.</li>
+ <li>Let <i>bindings</i> be the binding object for <i>envRec</i>.</li>
+ <li>If <i>D</i> is <b>true</b> then let <i>configValue</i> be <b>true</b> otherwise let <i>configValue</i> be
+ <b>false</b>.</li>
+ <li>Return <a href="#sec-definepropertyorthrow">DefinePropertyOrThrow</a>(<i>bindings</i>, <i>N</i>,
+ PropertyDescriptor{[[Value]]:<b>undefined</b>, [[Writable]]: <b>true</b>, [[Enumerable]]: <b>true</b> ,
+ [[Configurable]]: <i>configValue</i>}).</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> Normally <i>envRec</i> will not have a binding for <i>N</i> but if it does, the
+ semantics of <a href="#sec-definepropertyorthrow">DefinePropertyOrThrow</a> may result in an existing binding being
+ replaced or shadowed or cause an <a href="#sec-completion-record-specification-type">abrupt completion</a> to be
+ returned.</p>
+ </div>
+ </section>
+
+ <section id="sec-object-environment-records-createimmutablebinding-n-s">
+ <h1><span class="secnum" id="sec-8.1.1.2.3"><a href="#sec-object-environment-records-createimmutablebinding-n-s"
+ title="link to this section">8.1.1.2.3</a></span> CreateImmutableBinding (N, S)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method CreateImmutableBinding is never used
+ within this specification in association with Object Environment Records.</p>
+ </section>
+
+ <section id="sec-object-environment-records-initializebinding-n-v">
+ <h1><span class="secnum" id="sec-8.1.1.2.4"><a href="#sec-object-environment-records-initializebinding-n-v"
+ title="link to this section">8.1.1.2.4</a></span> InitializeBinding (N,V)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method InitializeBinding for object
+ Environment Records is used to set the bound value of the current binding of the identifier whose name is the value of
+ the argument <var>N</var> to the value of argument <var>V</var>. An uninitialized binding for <var>N</var> must already
+ exist.</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the object <a href="#sec-environment-records">Environment Record</a> for which the method was
+ invoked.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>envRec</i> must have an uninitialized binding for
+ <i>N</i>.</li>
+ <li>Record that the binding for <i>N</i> in <i>envRec</i> has been initialized.</li>
+ <li>Return <i>envRec</i>.SetMutableBinding(<i>N</i>, <i>V</i>, <b>false</b>).</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> In this specification, all uses of CreateMutableBinding for object Environment Records
+ are immediately followed by a call to InitializeBinding for the same name. Hence, implementations do not need to
+ explicitly track the initialization state of individual object Environment Record bindings.</p>
+ </div>
+ </section>
+
+ <section id="sec-object-environment-records-setmutablebinding-n-v-s">
+ <h1><span class="secnum" id="sec-8.1.1.2.5"><a href="#sec-object-environment-records-setmutablebinding-n-v-s"
+ title="link to this section">8.1.1.2.5</a></span> SetMutableBinding (N,V,S)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method SetMutableBinding for object
+ Environment Records attempts to set the value of the Environment Record&rsquo;s associated binding object&rsquo;s
+ property whose name is the value of the argument <var>N</var> to the value of argument <var>V</var>. A property named
+ <var>N</var> normally already exists but if it does not or is not currently writable, error handling is determined by
+ the value of the Boolean argument <var>S</var>.</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the object <a href="#sec-environment-records">Environment Record</a> for which the method was
+ invoked.</li>
+ <li>Let <i>bindings</i> be the binding object for <i>envRec</i>.</li>
+ <li>Return <a href="#sec-set-o-p-v-throw">Set</a>(<i>bindings</i>, <i>N</i>, <i>V</i>, <i>S</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-object-environment-records-getbindingvalue-n-s">
+ <h1><span class="secnum" id="sec-8.1.1.2.6"><a href="#sec-object-environment-records-getbindingvalue-n-s"
+ title="link to this section">8.1.1.2.6</a></span> GetBindingValue(N,S)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method GetBindingValue for object Environment
+ Records returns the value of its associated binding object&rsquo;s property whose name is the String value of the
+ argument identifier <var>N</var>. The property should already exist but if it does not the result depends upon the value
+ of the <var>S</var> argument:</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the object <a href="#sec-environment-records">Environment Record</a> for which the method was
+ invoked.</li>
+ <li>Let <i>bindings</i> be the binding object for <i>envRec</i>.</li>
+ <li>Let <i>value</i> be <a href="#sec-hasproperty">HasProperty</a>(<i>bindings</i>, <i>N</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>value</i>).</li>
+ <li>If <i>value</i> is <b>false</b>, then
+ <ol class="block">
+ <li>If <i>S</i> is <b>false</b>, return the value <b>undefined</b>, otherwise throw a <b>ReferenceError</b>
+ exception.</li>
+ </ol>
+ </li>
+ <li>Return <a href="#sec-get-o-p">Get</a>(<i>bindings</i>, <i>N</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-object-environment-records-deletebinding-n">
+ <h1><span class="secnum" id="sec-8.1.1.2.7"><a href="#sec-object-environment-records-deletebinding-n"
+ title="link to this section">8.1.1.2.7</a></span> DeleteBinding (N)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method DeleteBinding for object Environment
+ Records can only delete bindings that correspond to properties of the environment object whose [[Configurable]]
+ attribute have the value <b>true</b>.</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the object <a href="#sec-environment-records">Environment Record</a> for which the method was
+ invoked.</li>
+ <li>Let <i>bindings</i> be the binding object for <i>envRec</i>.</li>
+ <li>Return <i>bindings</i>.[[Delete]](<i>N</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-object-environment-records-hasthisbinding">
+ <h1><span class="secnum" id="sec-8.1.1.2.8"><a href="#sec-object-environment-records-hasthisbinding"
+ title="link to this section">8.1.1.2.8</a></span> HasThisBinding ()</h1>
+
+ <p>Regular object environment records do not provide a <code>this</code> binding.</p>
+
+ <ol class="proc">
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-object-environment-records-hassuperbinding">
+ <h1><span class="secnum" id="sec-8.1.1.2.9"><a href="#sec-object-environment-records-hassuperbinding"
+ title="link to this section">8.1.1.2.9</a></span> HasSuperBinding ()</h1>
+
+ <p>Regular object environment records do not provide a <code>super</code> binding.</p>
+
+ <ol class="proc">
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-object-environment-records-withbaseobject">
+ <h1><span class="secnum" id="sec-8.1.1.2.10"><a href="#sec-object-environment-records-withbaseobject"
+ title="link to this section">8.1.1.2.10</a></span> WithBaseObject()</h1>
+
+ <p>Object environment records return <b>undefined</b> as their WithBaseObject unless their <var>withEnvironment</var>
+ flag is <b>true</b>.</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the object <a href="#sec-environment-records">Environment Record</a> for which the method was
+ invoked.</li>
+ <li>If the <i>withEnvironment</i> flag of <i>envRec</i> is <b>true</b>, return the binding object for
+ <i>envRec</i>.</li>
+ <li>Otherwise, return <b>undefined</b>.</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-function-environment-records">
+ <div class="front">
+ <h1><span class="secnum" id="sec-8.1.1.3"><a href="#sec-function-environment-records"
+ title="link to this section">8.1.1.3</a></span> Function Environment Records</h1>
+
+ <p>A function <a href="#sec-environment-records">Environment Record</a> is a declarative <a
+ href="#sec-environment-records">Environment Record</a> that is used to represent the top-level scope of a function and,
+ if the function is not an <span class="nt">ArrowFunction</span>, provides a <code>this</code> binding. If a function is
+ not an <span class="nt">ArrowFunction</span> function and references <code>super</code>, its function <a
+ href="#sec-environment-records">Environment Record</a> also contains the state that is used to perform
+ <code>super</code> method invocations from within the function.</p>
+
+ <p>Function Environment Records have the additional state fields listed in <a href="#table-16">Table 16</a>.</p>
+
+ <figure>
+ <figcaption><span id="table-16">Table 16</span> &mdash; Additional Fields of Function Environment Records</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Field Name</th>
+ <th>Value</th>
+ <th>Meaning</th>
+ </tr>
+ <tr>
+ <td>[[thisValue]]</td>
+ <td>Any</td>
+ <td>This is the <span class="value">this</span> value used for this invocation of the function.</td>
+ </tr>
+ <tr>
+ <td>[[thisBindingStatus]]</td>
+ <td><code>"lexical"</code> | <code>"initialized"</code> | <code>"uninitialized"</code></td>
+ <td>If the value is <code>"lexical"</code>, this is an <span class="nt">ArrowFunction</span> and does not have a local this value.</td>
+ </tr>
+ <tr>
+ <td>[[FunctionObject]]</td>
+ <td>Object</td>
+ <td>The function Object whose invocation caused this <a href="#sec-environment-records">Environment Record</a> to be created.</td>
+ </tr>
+ <tr>
+ <td>[[HomeObject]]</td>
+ <td>Object | <b>undefined</b></td>
+ <td>If the associated function has <code>super</code> property accesses and is not an <span class="nt">ArrowFunction</span>, [[HomeObject]] is the object that the function is bound to as a method. The default value for [[HomeObject]] is <span class="value">undefined</span>.</td>
+ </tr>
+ <tr>
+ <td>[[NewTarget]]</td>
+ <td>Object | <b>undefined</b></td>
+ <td>If this <a href="#sec-environment-records">Environment Record</a> was created by the [[Construct]] internal method, [[NewTarget]] is the value of the [[Construct]] <var>newTarget</var> parameter. Otherwise, its value is <span class="value">undefined</span>.</td>
+ </tr>
+ </table>
+ </figure>
+
+ <p>Function Environment Records support all of the declarative Environment Record methods listed in <a
+ href="#table-15">Table 15</a> and share the same specifications for all of those methods except for HasThisBinding and
+ HasSuperBinding. In addition, function Environment Records support the methods listed in <a href="#table-17">Table
+ 17</a>:</p>
+
+ <figure>
+ <figcaption><span id="table-17">Table 17</span> &mdash; Additional Methods of Function Environment Records</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Method</th>
+ <th>Purpose</th>
+ </tr>
+ <tr>
+ <td><a href="#sec-bindthisvalue">BindThisValue</a>(V)</td>
+ <td>Set the [[thisValue]] and record that it has been initialized.</td>
+ </tr>
+ <tr>
+ <td>GetThisBinding()</td>
+ <td>Return the value of this <a href="#sec-environment-records">Environment Record</a>&rsquo;s <code>this</code> binding. Throws a <span class="value">ReferenceError</span> if the <code>this</code> binding has not been initialized.</td>
+ </tr>
+ <tr>
+ <td><a href="#sec-getsuperbase">GetSuperBase</a>()</td>
+ <td>Return the object that is the base for <code>super</code> property accesses bound in this <a href="#sec-environment-records">Environment Record</a>. The object is derived from this <a href="#sec-environment-records">Environment Record</a>&rsquo;s [[HomeObject]] field. The value <span class="value">undefined</span> indicates that <code>super</code> property accesses will produce runtime errors.</td>
+ </tr>
+ </table>
+ </figure>
+
+ <p>The behaviour of the additional concrete specification methods for function Environment Records is defined by the
+ following algorithms:</p>
+ </div>
+
+ <section id="sec-bindthisvalue">
+ <h1><span class="secnum" id="sec-8.1.1.3.1"><a href="#sec-bindthisvalue"
+ title="link to this section">8.1.1.3.1</a></span> BindThisValue(V)</h1>
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the function <a href="#sec-environment-records">Environment Record</a> for which the method
+ was invoked.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>envRec</i>.[[thisBindingStatus]] is not
+ <code>"lexical"</code>.</li>
+ <li>If <i>envRec</i>.[[thisBindingStatus]] is <code>"initialized"</code>, throw a <b>ReferenceError</b>
+ exception.</li>
+ <li>Set <i>envRec</i>.[[thisValue]] to <i>V</i>.</li>
+ <li>Set <i>envRec</i>.[[thisBindingStatus]] to <code>"initialized"</code>.</li>
+ <li>Return <i>V</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-function-environment-records-hasthisbinding">
+ <h1><span class="secnum" id="sec-8.1.1.3.2"><a href="#sec-function-environment-records-hasthisbinding"
+ title="link to this section">8.1.1.3.2</a></span> HasThisBinding ()</h1>
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the function <a href="#sec-environment-records">Environment Record</a> for which the method
+ was invoked.</li>
+ <li>If <i>envRec</i>.[[thisBindingStatus]] is <code>"lexical"</code>, return <b>false</b>; otherwise, return
+ <b>true</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-function-environment-records-hassuperbinding">
+ <h1><span class="secnum" id="sec-8.1.1.3.3"><a href="#sec-function-environment-records-hassuperbinding"
+ title="link to this section">8.1.1.3.3</a></span> HasSuperBinding ()</h1>
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the function <a href="#sec-environment-records">Environment Record</a> for which the method
+ was invoked.</li>
+ <li>If <i>envRec</i>.[[thisBindingStatus]] is <code>"lexical"</code>, return <b>false</b>.</li>
+ <li>If <i>envRec</i>.[[HomeObject]] has the value <b>undefined</b>, return <b>false</b>, otherwise, return
+ <b>true</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-function-environment-records-getthisbinding">
+ <h1><span class="secnum" id="sec-8.1.1.3.4"><a href="#sec-function-environment-records-getthisbinding"
+ title="link to this section">8.1.1.3.4</a></span> GetThisBinding ()</h1>
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the function <a href="#sec-environment-records">Environment Record</a> for which the method
+ was invoked.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>envRec</i>.[[thisBindingStatus]] is not
+ <code>"lexical"</code>.</li>
+ <li>If <i>envRec</i>.[[thisBindingStatus]] is <code>"uninitialized"</code>, throw a <b>ReferenceError</b>
+ exception.</li>
+ <li>Return <i>envRec</i>.[[thisValue]].</li>
+ </ol>
+ </section>
+
+ <section id="sec-getsuperbase">
+ <h1><span class="secnum" id="sec-8.1.1.3.5"><a href="#sec-getsuperbase"
+ title="link to this section">8.1.1.3.5</a></span> GetSuperBase ()</h1>
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the function <a href="#sec-environment-records">Environment Record</a> for which the method
+ was invoked.</li>
+ <li>Let <i>home</i> be the value of <i>envRec</i>.[[HomeObject]].</li>
+ <li>If <i>home</i> has the value <b>undefined</b>, return <b>undefined</b>.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>home</i>) is Object.</li>
+ <li>Return <i>home.</i>[[GetPrototypeOf]]().</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-global-environment-records">
+ <div class="front">
+ <h1><span class="secnum" id="sec-8.1.1.4"><a href="#sec-global-environment-records"
+ title="link to this section">8.1.1.4</a></span> Global Environment Records</h1>
+
+ <p>A global <a href="#sec-environment-records">Environment Record</a> is used to represent the outer most scope that is
+ shared by all of the ECMAScript <span class="nt">Script</span> elements that are processed in a common <a
+ href="#sec-code-realms">Realm</a> (<a href="#sec-code-realms">8.2</a>). A global <a
+ href="#sec-environment-records">Environment Record</a> provides the bindings for built-in globals (<a
+ href="#sec-global-object">clause 18</a>), properties of the global object, and for all top-level declarations (<a
+ href="#sec-block-static-semantics-toplevellexicallyscopeddeclarations">13.1.8</a>, <a
+ href="#sec-block-static-semantics-toplevelvarscopeddeclarations">13.1.10</a>) that occur within a <span
+ class="nt">Script</span>.</p>
+
+ <p>A global <a href="#sec-environment-records">Environment Record</a> is logically a single record but it is specified
+ as a composite encapsulating an object <a href="#sec-environment-records">Environment Record</a> and a declarative <a
+ href="#sec-environment-records">Environment Record</a>. The object <a href="#sec-environment-records">Environment
+ Record</a> has as its base object the global object of the associated <a href="#sec-code-realms">Realm</a>. This global
+ object is the value returned by the global <a href="#sec-environment-records">Environment Record</a>&rsquo;s
+ GetThisBinding concrete method. The object <a href="#sec-environment-records">Environment Record</a> component of a
+ global <a href="#sec-environment-records">Environment Record</a> contains the bindings for all built-in globals (<a
+ href="#sec-global-object">clause 18</a>) and all bindings introduced by a <span style="font-family: Times New
+ Roman"><i>FunctionDeclaration</i>, <i>GeneratorDeclaration</i></span>, or <span class="nt">VariableStatement</span>
+ contained in global code. The bindings for all other ECMAScript declarations in global code are contained in the
+ declarative <a href="#sec-environment-records">Environment Record</a> component of the global <a
+ href="#sec-environment-records">Environment Record</a>.</p>
+
+ <p>Properties may be created directly on a global object. Hence, the object <a
+ href="#sec-environment-records">Environment Record</a> component of a global <a
+ href="#sec-environment-records">Environment Record</a> may contain both bindings created explicitly by <span
+ style="font-family: Times New Roman"><i>FunctionDeclaration</i>, <i>GeneratorDeclaration</i></span>, or <span
+ class="nt">VariableDeclaration</span> declarations and binding created implicitly as properties of the global object. In
+ order to identify which bindings were explicitly created using declarations, a global <a
+ href="#sec-environment-records">Environment Record</a> maintains a list of the names bound using its
+ CreateGlobalVarBindings and CreateGlobalFunctionBindings concrete methods.</p>
+
+ <p>Global Environment Records have the additional fields listed in <a href="#table-18">Table 18</a> and the additional
+ methods listed in <a href="#table-19">Table 19</a>.</p>
+
+ <figure>
+ <figcaption><span id="table-18">Table 18</span> &mdash; Additional Fields of Global Environment Records</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Field Name</th>
+ <th>Value</th>
+ <th>Meaning</th>
+ </tr>
+ <tr>
+ <td>[[ObjectRecord]]</td>
+ <td><a href="#sec-object-environment-records">Object Environment Record</a></td>
+ <td>Binding object is the global object. It contains global built-in bindings as well as <span style="font-family: Times New Roman"><i>FunctionDeclaration</i>, <i>GeneratorDeclaration</i></span>, and <span class="nt">VariableDeclaration</span> bindings in global code for the associated <a href="#sec-code-realms">Realm</a>.</td>
+ </tr>
+ <tr>
+ <td>[[DeclarativeRecord]]</td>
+ <td><a href="#sec-declarative-environment-records">Declarative Environment Record</a></td>
+ <td>Contains bindings for all declarations in global code for the associated <a href="#sec-code-realms">Realm</a> code except for <span style="font-family: Times New Roman"><i>FunctionDeclaration</i>, <i>GeneratorDeclaration</i></span>, and <span class="nt">VariableDeclaration</span> <var>bindings</var>.</td>
+ </tr>
+ <tr>
+ <td>[[VarNames]]</td>
+ <td><a href="#sec-list-and-record-specification-type">List</a> of String</td>
+ <td>The string names bound by <span style="font-family: Times New Roman"><i>FunctionDeclaration</i>, <i>GeneratorDeclaration</i></span>, and <span class="nt">VariableDeclaration</span> declarations in global code for the associated <a href="#sec-code-realms">Realm</a>.</td>
+ </tr>
+ </table>
+ </figure>
+
+ <figure>
+ <figcaption><span id="table-19">Table 19</span> &mdash; Additional Methods of Global Environment Records</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Method</th>
+ <th>Purpose</th>
+ </tr>
+ <tr>
+ <td>GetThisBinding()</td>
+ <td>Return the value of this <a href="#sec-environment-records">Environment Record</a>&rsquo;s <code>this</code> binding.</td>
+ </tr>
+ <tr>
+ <td><a href="#sec-hasvardeclaration">HasVarDeclaration</a> (N)</td>
+ <td>Determines if the argument identifier has a binding in this <a href="#sec-environment-records">Environment Record</a> that was created using a <span style="font-family: Times New Roman"><i>VariableDeclaration</i>,</span> <span class="nt">FunctionDeclaration</span>, or <span style="font-family: Times New Roman"><i>GeneratorDeclaration</i>.</span></td>
+ </tr>
+ <tr>
+ <td><a href="#sec-haslexicaldeclaration">HasLexicalDeclaration</a> (N)</td>
+ <td>Determines if the argument identifier has a binding in this <a href="#sec-environment-records">Environment Record</a> that was created using a lexical declaration such as a <span class="nt">LexicalDeclaration</span> or a <span class="nt">ClassDeclaration</span>.</td>
+ </tr>
+ <tr>
+ <td><a href="#sec-hasrestrictedglobalproperty">HasRestrictedGlobalProperty</a> (N)</td>
+ <td>Determines if the argument is the name of a global object property that may not be shadowed by a global lexically binding.</td>
+ </tr>
+ <tr>
+ <td><a href="#sec-candeclareglobalvar">CanDeclareGlobalVar</a> (N)</td>
+ <td>Determines if a corresponding <a href="#sec-createglobalvarbinding">CreateGlobalVarBinding</a> call would succeed if called for the same argument <var>N</var>.</td>
+ </tr>
+ <tr>
+ <td><a href="#sec-candeclareglobalfunction">CanDeclareGlobalFunction</a> (N)</td>
+ <td>Determines if a corresponding <a href="#sec-createglobalfunctionbinding">CreateGlobalFunctionBinding</a> call would succeed if called for the same argument <var>N</var>.</td>
+ </tr>
+ <tr>
+ <td><a href="#sec-createglobalvarbinding">CreateGlobalVarBinding</a>(N, D)</td>
+ <td>Used to create and initialize to <b>undefined</b> a global <code>var</code> binding in the [[ObjectRecord]] component of a global <a href="#sec-environment-records">Environment Record</a>. The binding will be a mutable binding. The corresponding global object property will have attribute values appropriate for a <code>var</code>. The String value <var>N</var> is the bound name. If <var>D</var> is <b>true</b> the binding may be deleted. Logically equivalent to CreateMutableBinding followed by a SetMutableBinding but it allows var declarations to receive special treatment.</td>
+ </tr>
+ <tr>
+ <td><a href="#sec-createglobalfunctionbinding">CreateGlobalFunctionBinding</a>(N, V, D)</td>
+ <td>Create and initialize a global <code>function</code> binding in the [[ObjectRecord]] component of a global <a href="#sec-environment-records">Environment Record</a>. The binding will be a mutable binding. The corresponding global object property will have attribute values appropriate for a <code>function</code>. The String value <var>N</var> is the bound name. <i>V</i> is the initialization value. If the optional Boolean argument <var>D</var> is <b>true</b> the binding is may be deleted. Logically equivalent to CreateMutableBinding followed by a SetMutableBinding but it allows function declarations to receive special treatment.</td>
+ </tr>
+ </table>
+ </figure>
+
+ <p>The behaviour of the concrete specification methods for global Environment Records is defined by the following
+ algorithms.</p>
+ </div>
+
+ <section id="sec-global-environment-records-hasbinding-n">
+ <h1><span class="secnum" id="sec-8.1.1.4.1"><a href="#sec-global-environment-records-hasbinding-n"
+ title="link to this section">8.1.1.4.1</a></span> HasBinding(N)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method HasBinding for global Environment
+ Records simply determines if the argument identifier is one of the identifiers bound by the record:</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the global <a href="#sec-environment-records">Environment Record</a> for which the method was
+ invoked.</li>
+ <li>Let <i>DclRec</i> be <i>envRec</i>.[[DeclarativeRecord]].</li>
+ <li>If <i>DclRec.</i>HasBinding(<i>N</i>) is <b>true</b>, return <b>true</b>.</li>
+ <li>Let <i>ObjRec</i> be <i>envRec</i>.[[ObjectRecord]].</li>
+ <li>Return <i>ObjRec.</i>HasBinding(<i>N</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-global-environment-records-createmutablebinding-n-d">
+ <h1><span class="secnum" id="sec-8.1.1.4.2"><a href="#sec-global-environment-records-createmutablebinding-n-d"
+ title="link to this section">8.1.1.4.2</a></span> CreateMutableBinding (N, D)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method CreateMutableBinding for global
+ Environment Records creates a new mutable binding for the name <var>N</var> that is uninitialized. The binding is
+ created in the associated DeclarativeRecord. A binding for <var>N</var> must not already exist in the DeclarativeRecord.
+ If Boolean argument <var>D</var> is provided and has the value <b>true</b> the new binding is marked as being subject to
+ deletion.</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the global <a href="#sec-environment-records">Environment Record</a> for which the method was
+ invoked.</li>
+ <li>Let <i>DclRec</i> be <i>envRec</i>.[[DeclarativeRecord]].</li>
+ <li>If <i>DclRec</i>.HasBinding(<i>N</i>) is <b>true</b>, throw a <b>TypeError</b> exception.</li>
+ <li>Return <i>DclRec</i>.CreateMutableBinding(<i>N</i>, <i>D</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-global-environment-records-createimmutablebinding-n-s">
+ <h1><span class="secnum" id="sec-8.1.1.4.3"><a href="#sec-global-environment-records-createimmutablebinding-n-s"
+ title="link to this section">8.1.1.4.3</a></span> CreateImmutableBinding (N, S)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method CreateImmutableBinding for global
+ Environment Records creates a new immutable binding for the name <var>N</var> that is uninitialized. A binding must not
+ already exist in this <a href="#sec-environment-records">Environment Record</a> for <var>N</var>. If Boolean argument
+ <var>S</var> is provided and has the value <b>true</b> the new binding is marked as a strict binding.</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the global <a href="#sec-environment-records">Environment Record</a> for which the method was
+ invoked.</li>
+ <li>Let <i>DclRec</i> be <i>envRec</i>.[[DeclarativeRecord]].</li>
+ <li>If <i>DclRec</i>.HasBinding(<i>N</i>) is <b>true</b>, throw a <b>TypeError</b> exception.</li>
+ <li>Return <i>DclRec</i>.CreateImmutableBinding(<i>N</i>, <i>S</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-global-environment-records-initializebinding-n-v">
+ <h1><span class="secnum" id="sec-8.1.1.4.4"><a href="#sec-global-environment-records-initializebinding-n-v"
+ title="link to this section">8.1.1.4.4</a></span> InitializeBinding (N,V)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method InitializeBinding for global
+ Environment Records is used to set the bound value of the current binding of the identifier whose name is the value of
+ the argument <var>N</var> to the value of argument <var>V</var>. An uninitialized binding for <var>N</var> must already
+ exist.</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the global <a href="#sec-environment-records">Environment Record</a> for which the method was
+ invoked.</li>
+ <li>Let <i>DclRec</i> be <i>envRec</i>.[[DeclarativeRecord]].</li>
+ <li>If <i>DclRec.</i>HasBinding(<i>N</i>) is <b>true</b>, then
+ <ol class="block">
+ <li>Return <i>DclRec</i>.InitializeBinding(<i>N</i>, <i>V</i>).</li>
+ </ol>
+ </li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: If the binding exists it must be in the object <a
+ href="#sec-environment-records">Environment Record</a>.</li>
+ <li>Let <i>ObjRec</i> be <i>envRec</i>.[[ObjectRecord]].</li>
+ <li>Return <i>ObjRec.</i>InitializeBinding(<i>N</i>, <i>V</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-global-environment-records-setmutablebinding-n-v-s">
+ <h1><span class="secnum" id="sec-8.1.1.4.5"><a href="#sec-global-environment-records-setmutablebinding-n-v-s"
+ title="link to this section">8.1.1.4.5</a></span> SetMutableBinding (N,V,S)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method SetMutableBinding for global
+ Environment Records attempts to change the bound value of the current binding of the identifier whose name is the value
+ of the argument <var>N</var> to the value of argument <var>V</var>. If the binding is an immutable binding, a
+ <b>TypeError</b> is thrown if <span style="font-family: Times New Roman">S</span> is <span class="value">true</span>. A
+ property named <var>N</var> normally already exists but if it does not or is not currently writable, error handling is
+ determined by the value of the Boolean argument <var>S</var>.</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the global <a href="#sec-environment-records">Environment Record</a> for which the method was
+ invoked.</li>
+ <li>Let <i>DclRec</i> be <i>envRec</i>.[[DeclarativeRecord]].</li>
+ <li>If <i>DclRec.</i>HasBinding(<i>N</i>) is <b>true</b>, then
+ <ol class="block">
+ <li>Return <i>DclRec.</i>SetMutableBinding(<i>N</i>, <i>V</i>, <i>S</i>).</li>
+ </ol>
+ </li>
+ <li>Let <i>ObjRec</i> be <i>envRec</i>.[[ObjectRecord]].</li>
+ <li>Return <i>ObjRec</i>.SetMutableBinding(<i>N</i>, <i>V</i>, <i>S</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-global-environment-records-getbindingvalue-n-s">
+ <h1><span class="secnum" id="sec-8.1.1.4.6"><a href="#sec-global-environment-records-getbindingvalue-n-s"
+ title="link to this section">8.1.1.4.6</a></span> GetBindingValue(N,S)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method GetBindingValue for global Environment
+ Records returns the value of its bound identifier whose name is the value of the argument <var>N</var>. If the binding
+ is an uninitialized binding throw a <b>ReferenceError</b> exception. A property named <var>N</var> normally already
+ exists but if it does not or is not currently writable, error handling is determined by the value of the Boolean
+ argument <var>S</var>.</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the global <a href="#sec-environment-records">Environment Record</a> for which the method was
+ invoked.</li>
+ <li>Let <i>DclRec</i> be <i>envRec</i>.[[DeclarativeRecord]].</li>
+ <li>If <i>DclRec.</i>HasBinding(<i>N</i>) is <b>true</b>, then
+ <ol class="block">
+ <li>Return <i>DclRec.</i>GetBindingValue(<i>N</i>, <i>S</i>).</li>
+ </ol>
+ </li>
+ <li>Let <i>ObjRec</i> be <i>envRec</i>.[[ObjectRecord]].</li>
+ <li>Return <i>ObjRec</i>.GetBindingValue(<i>N</i>, <i>S</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-global-environment-records-deletebinding-n">
+ <h1><span class="secnum" id="sec-8.1.1.4.7"><a href="#sec-global-environment-records-deletebinding-n"
+ title="link to this section">8.1.1.4.7</a></span> DeleteBinding (N)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method DeleteBinding for global Environment
+ Records can only delete bindings that have been explicitly designated as being subject to deletion.</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the global <a href="#sec-environment-records">Environment Record</a> for which the method was
+ invoked.</li>
+ <li>Let <i>DclRec</i> be <i>envRec</i>.[[DeclarativeRecord]].</li>
+ <li>If <i>DclRec.</i>HasBinding(<i>N</i>) is <b>true</b>, then
+ <ol class="block">
+ <li>Return <i>DclRec.</i>DeleteBinding(<i>N</i>).</li>
+ </ol>
+ </li>
+ <li>Let <i>ObjRec</i> be <i>envRec</i>.[[ObjectRecord]].</li>
+ <li>Let <i>globalObject</i> be the binding object for <i>ObjRec</i>.</li>
+ <li>Let <i>existingProp</i> be <a href="#sec-hasownproperty">HasOwnProperty</a>(<i>globalObject</i>, <i>N</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>existingProp</i>).</li>
+ <li>If <i>existingProp</i> is <b>true</b>, then
+ <ol class="block">
+ <li>Let <i>status</i> be <i>ObjRec.</i>DeleteBinding(<i>N</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>status</i>).</li>
+ <li>If <i>status</i> is <b>true</b>, then
+ <ol class="block">
+ <li>Let <i>varNames</i> be <i>envRec</i>.[[VarNames]].</li>
+ <li>If <i>N</i> is an element of <i>varNames</i>, remove that element from the <i>varNames</i>.</li>
+ </ol>
+ </li>
+ <li>Return <i>status</i>.</li>
+ </ol>
+ </li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-global-environment-records-hasthisbinding">
+ <h1><span class="secnum" id="sec-8.1.1.4.8"><a href="#sec-global-environment-records-hasthisbinding"
+ title="link to this section">8.1.1.4.8</a></span> HasThisBinding ()</h1>
+
+ <p><a href="#sec-global-environment-records">Global Environment Records</a> always provide a <code>this</code> binding
+ whose value is the associated global object.</p>
+
+ <ol class="proc">
+ <li>Return <b>true</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-global-environment-records-hassuperbinding">
+ <h1><span class="secnum" id="sec-8.1.1.4.9"><a href="#sec-global-environment-records-hassuperbinding"
+ title="link to this section">8.1.1.4.9</a></span> HasSuperBinding ()</h1>
+ <ol class="proc">
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-global-environment-records-withbaseobject">
+ <h1><span class="secnum" id="sec-8.1.1.4.10"><a href="#sec-global-environment-records-withbaseobject"
+ title="link to this section">8.1.1.4.10</a></span> WithBaseObject()</h1>
+
+ <p><a href="#sec-global-environment-records">Global Environment Records</a> always return <b>undefined</b> as their
+ WithBaseObject.</p>
+
+ <ol class="proc">
+ <li>Return <b>undefined</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-global-environment-records-getthisbinding">
+ <h1><span class="secnum" id="sec-8.1.1.4.11"><a href="#sec-global-environment-records-getthisbinding"
+ title="link to this section">8.1.1.4.11</a></span> GetThisBinding ()</h1>
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the global <a href="#sec-environment-records">Environment Record</a> for which the method was
+ invoked.</li>
+ <li>Let <i>ObjRec</i> be <i>envRec</i>.[[ObjectRecord]].</li>
+ <li>Let <i>bindings</i> be the binding object for <i>ObjRec</i>.</li>
+ <li>Return <i>bindings</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-hasvardeclaration">
+ <h1><span class="secnum" id="sec-8.1.1.4.12"><a href="#sec-hasvardeclaration"
+ title="link to this section">8.1.1.4.12</a></span> HasVarDeclaration (N)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method HasVarDeclaration for global
+ Environment Records determines if the argument identifier has a binding in this record that was created using a <span
+ class="nt">VariableStatement</span> or a <span class="prod"><span class="nt">FunctionDeclaration</span> <span
+ class="geq">:</span></span></p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the global <a href="#sec-environment-records">Environment Record</a> for which the method was
+ invoked.</li>
+ <li>Let <i>varDeclaredNames</i> be <i>envRec</i>.[[VarNames]].</li>
+ <li>If <i>varDeclaredNames</i> contains the value of <i>N</i>, return <b>true</b>.</li>
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-haslexicaldeclaration">
+ <h1><span class="secnum" id="sec-8.1.1.4.13"><a href="#sec-haslexicaldeclaration"
+ title="link to this section">8.1.1.4.13</a></span> HasLexicalDeclaration (N)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method HasLexicalDeclaration for global
+ Environment Records determines if the argument identifier has a binding in this record that was created using a lexical
+ declaration such as a <span class="nt">LexicalDeclaration</span> or a <span class="prod"><span
+ class="nt">ClassDeclaration</span> <span class="geq">:</span></span></p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the global <a href="#sec-environment-records">Environment Record</a> for which the method was
+ invoked.</li>
+ <li>Let <i>DclRec</i> be <i>envRec</i>.[[DeclarativeRecord]].</li>
+ <li>Return <i>DclRec.</i>HasBinding(<i>N</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-hasrestrictedglobalproperty">
+ <h1><span class="secnum" id="sec-8.1.1.4.14"><a href="#sec-hasrestrictedglobalproperty"
+ title="link to this section">8.1.1.4.14</a></span> HasRestrictedGlobalProperty (N)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method HasRestrictedGlobalProperty for global
+ Environment Records determines if the argument identifier is the name of a property of the global object that must not
+ be shadowed by a global lexically binding:</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the global <a href="#sec-environment-records">Environment Record</a> for which the method was
+ invoked.</li>
+ <li>Let <i>ObjRec</i> be <i>envRec</i>.[[ObjectRecord]].</li>
+ <li>Let <i>globalObject</i> be the binding object for <i>ObjRec</i>.</li>
+ <li>Let <i>existingProp</i> be <i>globalObject</i>.[[GetOwnProperty]](<i>N</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>existingProp</i>).</li>
+ <li>If <i>existingProp</i> is <b>undefined</b>, return <b>false</b>.</li>
+ <li>If <i>existingProp</i>.[[Configurable]] is <b>true</b>, return <b>false</b>.</li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> Properties may exist upon a global object that were directly created rather than being
+ declared using a var or function declaration. A global lexical binding may not be created that has the same name as a
+ non-configurable property of the global object. The global property <code>undefined</code> is an example of such a
+ property.</p>
+ </div>
+ </section>
+
+ <section id="sec-candeclareglobalvar">
+ <h1><span class="secnum" id="sec-8.1.1.4.15"><a href="#sec-candeclareglobalvar"
+ title="link to this section">8.1.1.4.15</a></span> CanDeclareGlobalVar (N)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method CanDeclareGlobalVar for global
+ Environment Records determines if a corresponding <a href="#sec-createglobalvarbinding">CreateGlobalVarBinding</a> call
+ would succeed if called for the same argument <var>N</var>. Redundant var declarations and var declarations for
+ pre-existing global object properties are allowed.</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the global <a href="#sec-environment-records">Environment Record</a> for which the method was
+ invoked.</li>
+ <li>Let <i>ObjRec</i> be <i>envRec</i>.[[ObjectRecord]].</li>
+ <li>Let <i>globalObject</i> be the binding object for <i>ObjRec</i>.</li>
+ <li>Let <i>hasProperty</i> be <a href="#sec-hasownproperty">HasOwnProperty</a>(<i>globalObject, N</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>hasProperty</i>).</li>
+ <li>If <i>hasProperty</i> is <b>true</b>, return <b>true</b>.</li>
+ <li>Return <a href="#sec-isextensible-o">IsExtensible</a>(<i>globalObject</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-candeclareglobalfunction">
+ <h1><span class="secnum" id="sec-8.1.1.4.16"><a href="#sec-candeclareglobalfunction"
+ title="link to this section">8.1.1.4.16</a></span> CanDeclareGlobalFunction (N)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method CanDeclareGlobalFunction for global
+ Environment Records determines if a corresponding <a
+ href="#sec-createglobalfunctionbinding">CreateGlobalFunctionBinding</a> call would succeed if called for the same
+ argument <var>N</var>.</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the global <a href="#sec-environment-records">Environment Record</a> for which the method was
+ invoked.</li>
+ <li>Let <i>ObjRec</i> be <i>envRec</i>.[[ObjectRecord]].</li>
+ <li>Let <i>globalObject</i> be the binding object for <i>ObjRec</i>.</li>
+ <li>Let <i>existingProp</i> be <i>globalObject</i>.[[GetOwnProperty]](<i>N</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>existingProp</i>).</li>
+ <li>If <i>existingProp</i> is <b>undefined</b>, return <a
+ href="#sec-isextensible-o">IsExtensible</a>(<i>globalObject</i>).</li>
+ <li>If <i>existingProp</i>.[[Configurable]] is <b>true</b>, return <b>true</b>.</li>
+ <li>If <a href="#sec-isdatadescriptor">IsDataDescriptor</a>(<i>existingProp</i>) is <b>true</b> and
+ <i>existingProp</i> has attribute values {[[Writable]]: <b>true</b>, [[Enumerable]]: <b>true</b>}, return
+ <b>true</b>.</li>
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-createglobalvarbinding">
+ <h1><span class="secnum" id="sec-8.1.1.4.17"><a href="#sec-createglobalvarbinding"
+ title="link to this section">8.1.1.4.17</a></span> CreateGlobalVarBinding (N, D)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method CreateGlobalVarBinding for global
+ Environment Records creates and initializes a mutable binding in the associated object Environment Record and records
+ the bound name in the associated [[VarNames]] <a href="#sec-list-and-record-specification-type">List</a>. If a binding
+ already exists, it is reused and assumed to be initialized.</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the global <a href="#sec-environment-records">Environment Record</a> for which the method was
+ invoked.</li>
+ <li>Let <i>ObjRec</i> be <i>envRec</i>.[[ObjectRecord]].</li>
+ <li>Let <i>globalObject</i> be the binding object for <i>ObjRec</i>.</li>
+ <li>Let <i>hasProperty</i> be <a href="#sec-hasownproperty">HasOwnProperty</a>(<i>globalObject, N</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>hasProperty</i>).</li>
+ <li>Let <i>extensible</i> be <a href="#sec-isextensible-o">IsExtensible</a>(<i>globalObject</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>extensible</i>).</li>
+ <li>If <i>hasProperty</i> is <b>false</b> and <i>extensible</i> is <b>true</b>, then
+ <ol class="block">
+ <li>Let <i>status</i> be <i>ObjRec.</i>CreateMutableBinding(<i>N</i>, <i>D</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>status</i>).</li>
+ <li>Let <i>status</i> be <i>ObjRec.</i>InitializeBinding(<i>N</i>, <b>undefined</b>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>status</i>).</li>
+ </ol>
+ </li>
+ <li>Let <i>varDeclaredNames</i> be <i>envRec</i>.[[VarNames]].</li>
+ <li>If <i>varDeclaredNames</i> does not contain the value of <i>N</i>, then
+ <ol class="block">
+ <li>Append <i>N</i> to <i>varDeclaredNames</i>.</li>
+ </ol>
+ </li>
+ <li>Return <a href="#sec-normalcompletion">NormalCompletion</a>(<span style="font-family:
+ sans-serif">empty</span>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-createglobalfunctionbinding">
+ <h1><span class="secnum" id="sec-8.1.1.4.18"><a href="#sec-createglobalfunctionbinding"
+ title="link to this section">8.1.1.4.18</a></span> CreateGlobalFunctionBinding (N, V, D)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method CreateGlobalFunctionBinding for global
+ Environment Records creates and initializes a mutable binding in the associated object Environment Record and records
+ the bound name in the associated [[VarNames]] <a href="#sec-list-and-record-specification-type">List</a>. If a binding
+ already exists, it is replaced.</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the global <a href="#sec-environment-records">Environment Record</a> for which the method was
+ invoked.</li>
+ <li>Let <i>ObjRec</i> be <i>envRec</i>.[[ObjectRecord]].</li>
+ <li>Let <i>globalObject</i> be the binding object for <i>ObjRec</i>.</li>
+ <li>Let <i>existingProp</i> be <i>globalObject</i>.[[GetOwnProperty]](<i>N</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>existingProp</i>).</li>
+ <li>If <i>existingProp</i> is <b>undefined</b> or <i>existingProp</i>.[[Configurable]] is <b>true</b>, then
+ <ol class="block">
+ <li>Let <i>desc</i> be the PropertyDescriptor{[[Value]]:<i>V</i>, [[Writable]]: <b>true</b>, [[Enumerable]]:
+ <b>true</b> , [[Configurable]]: <i>D</i>}.</li>
+ </ol>
+ </li>
+ <li>Else,
+ <ol class="block">
+ <li>Let <i>desc</i> be the PropertyDescriptor{[[Value]]:<i>V</i> }.</li>
+ </ol>
+ </li>
+ <li>Let <i>status</i> be <a href="#sec-definepropertyorthrow">DefinePropertyOrThrow</a>(<i>globalObject</i>, <i>N</i>,
+ <i>desc</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>status</i>).</li>
+ <li>Let <i>status</i> be <a href="#sec-set-o-p-v-throw">Set</a>(<i>globalObject</i>, <i>N</i>, <i>V</i>,
+ <b>false</b>).</li>
+ <li>Record that the binding for <i>N</i> in <i>ObjRec</i> has been initialized.</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>status</i>).</li>
+ <li>Let <i>varDeclaredNames</i> be <i>envRec</i>.[[VarNames]].</li>
+ <li>If <i>varDeclaredNames</i> does not contain the value of <i>N</i>, then
+ <ol class="block">
+ <li>Append <i>N</i> to <i>varDeclaredNames</i>.</li>
+ </ol>
+ </li>
+ <li>Return <a href="#sec-normalcompletion">NormalCompletion</a>(<span style="font-family:
+ sans-serif">empty</span>).</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> Global function declarations are always represented as own properties of the global
+ object. If possible, an existing own property is reconfigured to have a standard set of attribute values. Steps 10-12
+ are equivalent to what calling the InitializeBinding concrete method would do and if <i>globalObject</i> is a Proxy
+ will produce the same sequence of Proxy trap calls.</p>
+ </div>
+ </section>
+ </section>
+
+ <section id="sec-module-environment-records">
+ <div class="front">
+ <h1><span class="secnum" id="sec-8.1.1.5"><a href="#sec-module-environment-records"
+ title="link to this section">8.1.1.5</a></span> Module Environment Records</h1>
+
+ <p>A module <a href="#sec-environment-records">Environment Record</a> is a declarative <a
+ href="#sec-environment-records">Environment Record</a> that is used to represent the outer scope of an ECMAScript <span
+ class="nt">Module</span>. In additional to normal mutable and immutable bindings, module Environment Records also
+ provide immutable import bindings which are bindings that provide indirect access to a target binding that exists in
+ another Environment Record.</p>
+
+ <p>Module Environment Records support all of the declarative Environment Record methods listed in <a
+ href="#table-15">Table 15</a> and share the same specifications for all of those methods except for GetBindingValue,
+ DeleteBinding, HasThisBinding and GetThisBinding. In addition, module Environment Records support the methods listed in
+ <a href="#table-20">Table 20</a>:</p>
+
+ <figure>
+ <figcaption><span id="table-20">Table 20</span> &mdash; Additional Methods of Module Environment Records</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Method</th>
+ <th>Purpose</th>
+ </tr>
+ <tr>
+ <td><a href="#sec-createimportbinding">CreateImportBinding</a>(N, M, N2 )</td>
+ <td>Create an immutable indirect binding in a module <a href="#sec-environment-records">Environment Record</a>. The String value <var>N</var> is the text of the bound name. <var>M</var> is a Module Record (<a href="#sec-abstract-module-records">see 15.2.1.14</a>), and <var>N2</var> is a binding that exists in M&rsquo;s module <a href="#sec-environment-records">Environment Record</a>.</td>
+ </tr>
+ <tr>
+ <td>GetThisBinding()</td>
+ <td>Return the value of this <a href="#sec-environment-records">Environment Record</a>&rsquo;s <code>this</code> binding.</td>
+ </tr>
+ </table>
+ </figure>
+
+ <p>The behaviour of the additional concrete specification methods for module Environment Records are defined by the
+ following algorithms:</p>
+ </div>
+
+ <section id="sec-module-environment-records-getbindingvalue-n-s">
+ <h1><span class="secnum" id="sec-8.1.1.5.1"><a href="#sec-module-environment-records-getbindingvalue-n-s"
+ title="link to this section">8.1.1.5.1</a></span> GetBindingValue(N,S)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method GetBindingValue for module Environment
+ Records returns the value of its bound identifier whose name is the value of the argument <var>N</var>. However, if the
+ binding is an indirect binding the value of the target binding is returned. If the binding exists but is uninitialized a
+ <span class="value">ReferenceError</span> is thrown, regardless of the value of <i><span style="font-family: Times New
+ Roman">S</span>.</i></p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the module <a href="#sec-environment-records">Environment Record</a> for which the method was
+ invoked.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>envRec</i> has a binding for <i>N</i>.</li>
+ <li>If the binding for <i>N</i> is an indirect binding, then
+ <ol class="block">
+ <li>Let <i>M</i> and <i>N2</i> be the indirection values provided when this binding for <i>N</i> was created.</li>
+ <li>If <i>M</i> is <b>undefined</b>, throw a <b>ReferenceError</b> exception.</li>
+ <li>Let <i>targetEnv</i> be <i>M</i>.[[Environment]].</li>
+ <li>If <i>targetEnv</i> is <b>undefined</b>, throw a <b>ReferenceError</b> exception.</li>
+ <li>Let <i>targetER</i> be <i>targetEnv</i>&rsquo;s EnvironmentRecord.</li>
+ <li>Return <i>targetER</i>.GetBindingValue(<i>N2</i>, <i>S</i>).</li>
+ </ol>
+ </li>
+ <li>If the binding for <i>N</i> in <i>envRec</i> is an uninitialized binding, throw a <b>ReferenceError</b>
+ exception.</li>
+ <li>Return the value currently bound to <i>N</i> in <i>envRec</i>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> Because a <i>Module</i> is always <a href="#sec-strict-mode-code">strict mode
+ code</a>, calls to GetBindingValue should always pass <b>true</b> <span style="font-family: sans-serif">as</span>
+ <span style="font-family: sans-serif">the value of</span> <i>S</i>.</p>
+ </div>
+ </section>
+
+ <section id="sec-module-environment-records-deletebinding-n">
+ <h1><span class="secnum" id="sec-8.1.1.5.2"><a href="#sec-module-environment-records-deletebinding-n"
+ title="link to this section">8.1.1.5.2</a></span> DeleteBinding (N)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method DeleteBinding for module Environment
+ Records refuses to delete bindings.</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the module <a href="#sec-environment-records">Environment Record</a> for which the method was
+ invoked.</li>
+ <li>If <i>envRec</i> does not have a binding for the name that is the value of <i>N</i>, return <b>true</b>.</li>
+ <li>Return <b>false</b>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> Because the bindings of a module <a href="#sec-environment-records">Environment
+ Record</a> are not deletable.</p>
+ </div>
+ </section>
+
+ <section id="sec-module-environment-records-hasthisbinding">
+ <h1><span class="secnum" id="sec-8.1.1.5.3"><a href="#sec-module-environment-records-hasthisbinding"
+ title="link to this section">8.1.1.5.3</a></span> HasThisBinding ()</h1>
+
+ <p>Module Environment Records provide a <code>this</code> binding.</p>
+
+ <ol class="proc">
+ <li>Return <b>true</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-module-environment-records-getthisbinding">
+ <h1><span class="secnum" id="sec-8.1.1.5.4"><a href="#sec-module-environment-records-getthisbinding"
+ title="link to this section">8.1.1.5.4</a></span> GetThisBinding ()</h1>
+ <ol class="proc">
+ <li>Return <b>undefined</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-createimportbinding">
+ <h1><span class="secnum" id="sec-8.1.1.5.5"><a href="#sec-createimportbinding"
+ title="link to this section">8.1.1.5.5</a></span> CreateImportBinding (N, M, N2)</h1>
+
+ <p>The concrete <a href="#sec-environment-records">Environment Record</a> method CreateImportBinding for module
+ Environment Records creates a new initialized immutable indirect binding for the name <var>N</var>. A binding must not
+ already exist in this <a href="#sec-environment-records">Environment Record</a> for <var>N</var>. <var>M</var> is a
+ Module Record (<a href="#sec-abstract-module-records">see 15.2.1.14</a>), and <var>N2</var> is the name of a binding
+ that exists in M&rsquo;s module <a href="#sec-environment-records">Environment Record</a>. Accesses to the value of the
+ new binding will indirectly access the bound value of value of the target binding.</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be the module <a href="#sec-environment-records">Environment Record</a> for which the method was
+ invoked.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>envRec</i> does not already have a binding for <i>N</i>.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>M</i> is a Module Record.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: When <i>M</i>.[[Environment]] is instantiated it will have a
+ direct binding for <i>N2</i>.</li>
+ <li>Create an immutable indirect binding in <i>envRec</i> for <i>N</i> that references <i>M</i> and <i>N2</i> as its
+ target binding and record that the binding is initialized.</li>
+ <li>Return <a href="#sec-normalcompletion">NormalCompletion</a>(<span style="font-family:
+ sans-serif">empty</span>).</li>
+ </ol>
+ </section>
+ </section>
+ </section>
+
+ <section id="sec-lexical-environment-operations">
+ <div class="front">
+ <h1><span class="secnum" id="sec-8.1.2"><a href="#sec-lexical-environment-operations"
+ title="link to this section">8.1.2</a></span> Lexical Environment Operations</h1>
+
+ <p>The following abstract operations are used in this specification to operate upon lexical environments:</p>
+ </div>
+
+ <section id="sec-getidentifierreference">
+ <h1><span class="secnum" id="sec-8.1.2.1"><a href="#sec-getidentifierreference"
+ title="link to this section">8.1.2.1</a></span> GetIdentifierReference (lex, name, strict)</h1>
+
+ <p>The abstract operation GetIdentifierReference is called with a <a href="#sec-lexical-environments">Lexical
+ Environment</a> <var>lex</var>, a String <var>name</var>, and a Boolean flag <var>strict.</var> The value of
+ <var>lex</var> may be <b>null</b>. When called, the following steps are performed:</p>
+
+ <ol class="proc">
+ <li>If <i>lex</i> is the value <b>null</b>, then
+ <ol class="block">
+ <li>Return a value of type <a href="#sec-reference-specification-type">Reference</a> whose base value is
+ <b>undefined</b>, whose referenced name is <i>name</i>, and whose strict reference flag is <i>strict</i>.</li>
+ </ol>
+ </li>
+ <li>Let <i>envRec</i> be <i>lex</i>&rsquo;s EnvironmentRecord.</li>
+ <li>Let <i>exists</i> be <i>envRec</i>.HasBinding(<i>name</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>exists</i>).</li>
+ <li>If <i>exists</i> is <b>true</b>, then
+ <ol class="block">
+ <li>Return a value of type <a href="#sec-reference-specification-type">Reference</a> whose base value is
+ <i>envRec</i>, whose referenced name is <i>name</i>, and whose strict reference flag is <i>strict.</i></li>
+ </ol>
+ </li>
+ <li>Else
+ <ol class="block">
+ <li>Let <i>outer</i> be the value of <i>lex&rsquo;s</i> <a href="#sec-lexical-environments">outer environment
+ reference</a>.</li>
+ <li>Return GetIdentifierReference(<i>outer</i>, <i>name</i>, <i>strict</i>).</li>
+ </ol>
+ </li>
+ </ol>
+ </section>
+
+ <section id="sec-newdeclarativeenvironment">
+ <h1><span class="secnum" id="sec-8.1.2.2"><a href="#sec-newdeclarativeenvironment"
+ title="link to this section">8.1.2.2</a></span> NewDeclarativeEnvironment (E)</h1>
+
+ <p>When the abstract operation NewDeclarativeEnvironment is called with a <a href="#sec-lexical-environments">Lexical
+ Environment</a> as argument <var>E</var> the following steps are performed:</p>
+
+ <ol class="proc">
+ <li>Let <i>env</i> be a new <a href="#sec-lexical-environments">Lexical Environment</a>.</li>
+ <li>Let <i>envRec</i> be a new declarative <a href="#sec-environment-records">Environment Record</a> containing no
+ bindings.</li>
+ <li>Set <i>env&rsquo;s</i> EnvironmentRecord to be <i>envRec</i>.</li>
+ <li>Set the <a href="#sec-lexical-environments">outer lexical environment reference</a> of <i>env</i> to <i>E</i>.</li>
+ <li>Return <i>env</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-newobjectenvironment">
+ <h1><span class="secnum" id="sec-8.1.2.3"><a href="#sec-newobjectenvironment"
+ title="link to this section">8.1.2.3</a></span> NewObjectEnvironment (O, E)</h1>
+
+ <p>When the abstract operation NewObjectEnvironment is called with an Object <var>O</var> and a <a
+ href="#sec-lexical-environments">Lexical Environment</a> <var>E</var> as arguments, the following steps are performed:</p>
+
+ <ol class="proc">
+ <li>Let <i>env</i> be a new <a href="#sec-lexical-environments">Lexical Environment</a>.</li>
+ <li>Let <i>envRec</i> be a new object <a href="#sec-environment-records">Environment Record</a> containing <i>O</i> as
+ the binding object.</li>
+ <li>Set <i>env&rsquo;s</i> EnvironmentRecord to <i>envRec</i>.</li>
+ <li>Set the <a href="#sec-lexical-environments">outer lexical environment reference</a> of <i>env</i> to <i>E</i>.</li>
+ <li>Return <i>env</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-newfunctionenvironment">
+ <h1><span class="secnum" id="sec-8.1.2.4"><a href="#sec-newfunctionenvironment"
+ title="link to this section">8.1.2.4</a></span> NewFunctionEnvironment ( F, newTarget )</h1>
+
+ <p>When the abstract operation NewFunctionEnvironment is called with arguments <var>F</var> and <var>newTarget</var> the
+ following steps are performed:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>F</i> is an ECMAScript function.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>newTarget</i>) is Undefined or Object.</li>
+ <li>Let <i>env</i> be a new <a href="#sec-lexical-environments">Lexical Environment</a>.</li>
+ <li>Let <i>envRec</i> be a new function <a href="#sec-environment-records">Environment Record</a> containing no
+ bindings.</li>
+ <li>Set <i>envRec</i>.[[FunctionObject]] to <i>F</i>.</li>
+ <li>If <i>F&rsquo;s</i> [[ThisMode]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> is
+ <span style="font-family: sans-serif">lexical</span>, set <i>envRec</i>.[[thisBindingStatus]] to
+ <code>"lexical"</code>.</li>
+ <li>Else, Set <i>envRec</i>.[[thisBindingStatus]] to <code>"uninitialized"</code>.</li>
+ <li>Let <i>home</i> be the value of <i>F&rsquo;s</i> [[HomeObject]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>Set <i>envRec</i>.[[HomeObject]] to <i>home</i>.</li>
+ <li>Set <i>envRec</i>.[[NewTarget]] to <i>newTarget</i>.</li>
+ <li>Set <i>env&rsquo;s</i> EnvironmentRecord to be <i>envRec</i>.</li>
+ <li>Set the <a href="#sec-lexical-environments">outer lexical environment reference</a> of <i>env</i> to the value of
+ <i>F&rsquo;s</i> [[Environment]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>Return <i>env</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-newglobalenvironment">
+ <h1><span class="secnum" id="sec-8.1.2.5"><a href="#sec-newglobalenvironment"
+ title="link to this section">8.1.2.5</a></span> NewGlobalEnvironment ( G )</h1>
+
+ <p>When the abstract operation NewGlobalEnvironment is called with an ECMAScript Object <var>G</var> as its argument, the
+ following steps are performed:</p>
+
+ <ol class="proc">
+ <li>Let <i>env</i> be a new <a href="#sec-lexical-environments">Lexical Environment</a>.</li>
+ <li>Let <i>objRec</i> be a new object <a href="#sec-environment-records">Environment Record</a> containing <i>G</i> as
+ the binding object.</li>
+ <li>Let <i>dclRec</i> be a new declarative <a href="#sec-environment-records">Environment Record</a> containing no
+ bindings.</li>
+ <li>Let <i>globalRec</i> be a new global <a href="#sec-environment-records">Environment Record</a>.</li>
+ <li>Set <i>globalRec</i>.[[ObjectRecord]] to <i>objRec</i>.</li>
+ <li>Set <i>globalRec</i>.[[DeclarativeRecord]] to <i>dclRec</i>.</li>
+ <li>Set <i>globalRec</i>.[[VarNames]] to a new empty <a href="#sec-list-and-record-specification-type">List</a>.</li>
+ <li>Set <i>env&rsquo;s</i> EnvironmentRecord to <i>globalRec</i>.</li>
+ <li>Set the <a href="#sec-lexical-environments">outer lexical environment reference</a> of <i>env</i> to
+ <b>null</b></li>
+ <li>Return <i>env</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-newmoduleenvironment">
+ <h1><span class="secnum" id="sec-8.1.2.6"><a href="#sec-newmoduleenvironment"
+ title="link to this section">8.1.2.6</a></span> NewModuleEnvironment (E)</h1>
+
+ <p>When the abstract operation NewModuleEnvironment is called with a <a href="#sec-lexical-environments">Lexical
+ Environment</a> argument <var>E</var> the following steps are performed:</p>
+
+ <ol class="proc">
+ <li>Let <i>env</i> be a new <a href="#sec-lexical-environments">Lexical Environment</a>.</li>
+ <li>Let <i>envRec</i> be a new module <a href="#sec-environment-records">Environment Record</a> containing no
+ bindings.</li>
+ <li>Set <i>env&rsquo;s</i> EnvironmentRecord to be <i>envRec</i>.</li>
+ <li>Set the <a href="#sec-lexical-environments">outer lexical environment reference</a> of <i>env</i> to <i>E</i>.</li>
+ <li>Return <i>env</i>.</li>
+ </ol>
+ </section>
+ </section>
+ </section>
+
+ <section id="sec-code-realms">
+ <div class="front">
+ <h1><span class="secnum" id="sec-8.2"><a href="#sec-code-realms" title="link to this section">8.2</a></span> Code
+ Realms</h1>
+
+ <p>Before it is evaluated, all ECMAScript code must be associated with a <i>Realm</i>. Conceptually, a realm consists of a
+ set of intrinsic objects, an ECMAScript global environment, all of the ECMAScript code that is loaded within the scope of
+ that global environment, and other associated state and resources.</p>
+
+ <p>A Realm is specified as a Record with the fields specified in <a href="#table-21">Table 21</a>:</p>
+
+ <figure>
+ <figcaption><span id="table-21">Table 21</span> &mdash; Realm Record Fields</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Field Name</th>
+ <th>Value</th>
+ <th>Meaning</th>
+ </tr>
+ <tr>
+ <td>[[intrinsics]]</td>
+ <td>Record whose field names are intrinsic keys and whose values are objects</td>
+ <td>These are the intrinsic values used by code associated with this Realm</td>
+ </tr>
+ <tr>
+ <td>[[globalThis]]</td>
+ <td>Object</td>
+ <td>The global object for this Realm</td>
+ </tr>
+ <tr>
+ <td>[[globalEnv]]</td>
+ <td><a href="#sec-lexical-environments">Lexical Environment</a></td>
+ <td>The global environment for this Realm</td>
+ </tr>
+ <tr>
+ <td>[[templateMap]]</td>
+ <td>A <a href="#sec-list-and-record-specification-type">List</a> of Record { [[strings]]: <a href="#sec-list-and-record-specification-type">List</a>, [[array]]: Object}.</td>
+ <td>Template objects are canonicalized separately for each Realm using its [[templateMap]]. Each [[strings]] value is a <a href="#sec-list-and-record-specification-type">List</a> containing, in source text order, the raw string values of a <span class="nt">TemplateLiteral</span> that has been evaluated. The associated [[array]] value is the corresponding template object that is passed to a tag function.</td>
+ </tr>
+ </table>
+ </figure>
+
+ <p>An implementation may define other, implementation specific fields.</p>
+ </div>
+
+ <section id="sec-createrealm">
+ <h1><span class="secnum" id="sec-8.2.1"><a href="#sec-createrealm" title="link to this section">8.2.1</a></span> CreateRealm
+ ( )</h1>
+
+ <p>The abstract operation CreateRealm with no arguments performs the following steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>realmRec</i> be a new Record.</li>
+ <li>Perform <a href="#sec-createintrinsics">CreateIntrinsics</a>(<i>realmRec</i>).</li>
+ <li>Set <i>realmRec</i>.[[globalThis]] to <b>undefined</b>.</li>
+ <li>Set <i>realmRec</i>.[[globalEnv]] to <b>undefined</b>.</li>
+ <li>Set <i>realmRec</i>.[[templateMap]] to a new empty <a href="#sec-list-and-record-specification-type">List</a>.</li>
+ <li>Return <i>realmRec</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-createintrinsics">
+ <h1><span class="secnum" id="sec-8.2.2"><a href="#sec-createintrinsics" title="link to this section">8.2.2</a></span>
+ CreateIntrinsics ( realmRec )</h1>
+
+ <p>When the abstract operation CreateIntrinsics with argument <var>realmRec</var> performs the following steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>intrinsics</i> be a new Record.</li>
+ <li>Set <i>realmRec</i>.[[intrinsics]] to <i>intrinsics</i>.</li>
+ <li>Let <i>objProto</i> be <a href="#sec-objectcreate">ObjectCreate</a>(<b>null</b>).</li>
+ <li>Set <i>intrinsics</i>.[[%ObjectPrototype%]] to <i>objProto</i>.</li>
+ <li>Let <i>throwerSteps</i> be the algorithm steps specified in <a href="#sec-%throwtypeerror%">9.2.7.1</a> for the <a
+ href="#sec-%throwtypeerror%">%ThrowTypeError%</a> function.</li>
+ <li>Let <i>thrower</i> be <a href="#sec-createbuiltinfunction">CreateBuiltinFunction</a>(<i>realmRec</i>,
+ <i>throwerSteps</i>, <b>null</b>).</li>
+ <li>Set <i>intrinsics</i>.[[<span style="font-family: sans-serif"><a
+ href="#sec-%throwtypeerror%">%ThrowTypeError%</a></span>]] to <i>thrower</i>.</li>
+ <li>Let <i>noSteps</i> be an empty sequence of algorithm steps.</li>
+ <li>Let <i>funcProto</i> be <a href="#sec-createbuiltinfunction">CreateBuiltinFunction</a>(<i>realmRec</i>,
+ <i>noSteps</i>, <i>objProto</i>).</li>
+ <li>Set <i>intrinsics</i>.[[%FunctionPrototype%]] to <i>funcProto</i>.</li>
+ <li><a href="#sec-call">Call</a> <i>thrower</i>.[[SetPrototypeOf]](<i>funcProto</i>).</li>
+ <li>Perform <a href="#sec-addrestrictedfunctionproperties">AddRestrictedFunctionProperties</a>(<i>funcProto</i>,
+ <i>realmRec</i>).</li>
+ <li>Set fields of <i>intrinsics</i> with the values listed in <a href="#table-7">Table 7</a> that have not already been
+ handled above. The field names are the names listed in column one of the table. The value of each field is a new
+ object value fully and recursively populated with property values as defined by the specification of each object in
+ clauses 18-26. All object property values are newly created object values. All values that are built-in function
+ objects are created by performing <a href="#sec-createbuiltinfunction">CreateBuiltinFunction</a>(<i>realmRec</i>,
+ &lt;steps&gt;, &lt;prototype&gt;, &lt;slots&gt;) where &lt;steps&gt; is the definition of that function provided by
+ this specification, &lt;prototype&gt; is the specified value of the function&rsquo;s [[Prototype]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> and &lt;slots&gt; is a list of the names, if
+ any, of the functions specified internal slots. The creation of the intrinsics and their properties must be ordered to
+ avoid any dependencies upon objects that have not yet been created.</li>
+ <li>Return <i>intrinsics</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-setrealmglobalobject">
+ <h1><span class="secnum" id="sec-8.2.3"><a href="#sec-setrealmglobalobject" title="link to this section">8.2.3</a></span>
+ SetRealmGlobalObject ( realmRec, globalObj )</h1>
+
+ <p>The abstract operation SetRealmGlobalObject with arguments <var>realmRec</var> and <var>globalObj</var> performs the
+ following steps:</p>
+
+ <ol class="proc">
+ <li>If <i>globalObj</i> is <b>undefined</b>, then
+ <ol class="block">
+ <li>Let <i>intrinsics</i> be <i>realmRec</i>.[[intrinsics]].</li>
+ <li>Let <i>globalObj</i> be <a
+ href="#sec-objectcreate">ObjectCreate</a>(<i>intrinsics</i>.[[%ObjectPrototype%]]).</li>
+ </ol>
+ </li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>globalObj</i>) is Object.</li>
+ <li>Set <i>realmRec</i>.[[globalThis]] to <i>globalObj</i>.</li>
+ <li>Let <i>newGlobalEnv</i> be <a href="#sec-newglobalenvironment">NewGlobalEnvironment</a>(<i>globalObj</i>).</li>
+ <li>Set <i>realmRec</i>.[[globalEnv]] to <i>newGlobalEnv</i>.</li>
+ <li>Return <i>realmRec</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-setdefaultglobalbindings">
+ <h1><span class="secnum" id="sec-8.2.4"><a href="#sec-setdefaultglobalbindings"
+ title="link to this section">8.2.4</a></span> SetDefaultGlobalBindings ( realmRec )</h1>
+
+ <p>The abstract operation SetDefaultGlobalBindings with argument <var>realmRec</var> performs the following steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>global</i> be <i>realmRec</i>.[[globalThis]].</li>
+ <li>For each property of the Global Object specified in <a href="#sec-global-object">clause 18</a>, do
+ <ol class="block">
+ <li>Let <i>name</i> be the string value of the property name.</li>
+ <li>Let <i>desc</i> be the fully populated data property descriptor for the property containing the specified
+ attributes for the property. For properties listed in <a
+ href="#sec-function-properties-of-the-global-object">18.2</a>, <a
+ href="#sec-constructor-properties-of-the-global-object">18.3</a>, or <a
+ href="#sec-other-properties-of-the-global-object">18.4</a> the value of the [[Value]] attribute is the
+ corresponding intrinsic object from <i>realmRec</i>.</li>
+ <li>Let <i>status</i> be <a href="#sec-definepropertyorthrow">DefinePropertyOrThrow</a>(<i>global</i>, <i>name</i>,
+ <i>desc</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>status</i>).</li>
+ </ol>
+ </li>
+ <li>Return <i>global</i>.</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-execution-contexts">
+ <div class="front">
+ <h1><span class="secnum" id="sec-8.3"><a href="#sec-execution-contexts" title="link to this section">8.3</a></span>
+ Execution Contexts</h1>
+
+ <p>An <i>execution context</i> is a specification device that is used to track the runtime evaluation of code by an
+ ECMAScript implementation. At any point in time, there is at most one execution context that is actually executing code.
+ This is known as the <i>running</i> execution context. A stack is used to track execution contexts. The running execution
+ context is always the top element of this stack. A new execution context is created whenever control is transferred from the
+ executable code associated with the currently running execution context to executable code that is not associated with that
+ execution context. The newly created execution context is pushed onto the stack and becomes the running execution
+ context.</p>
+
+ <p>An execution context contains whatever implementation specific state is necessary to track the execution progress of its
+ associated code. Each execution context has at least the state components listed in <a href="#table-22">Table 22</a>.</p>
+
+ <figure>
+ <figcaption><span id="table-22">Table 22</span> &mdash;State Components for All Execution Contexts</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Component</th>
+ <th>Purpose</th>
+ </tr>
+ <tr>
+ <td>code evaluation state</td>
+ <td>Any state needed to perform, suspend, and resume evaluation of the code associated with this execution context.</td>
+ </tr>
+ <tr>
+ <td>Function</td>
+ <td>If this execution context is evaluating the code of a function object, then the value of this component is that function object. If the context is evaluating the code of a <span class="nt">Script</span> or <span class="nt">Module</span>, the value is <span class="value">null</span>.</td>
+ </tr>
+ <tr>
+ <td><a href="#sec-code-realms">Realm</a></td>
+ <td>The <a href="#sec-code-realms">Realm</a> from which associated code accesses ECMAScript resources.</td>
+ </tr>
+ </table>
+ </figure>
+
+ <p>Evaluation of code by the running execution context may be suspended at various points defined within this specification.
+ Once the running execution context has been suspended a different execution context may become the running execution context
+ and commence evaluating its code. At some later time a suspended execution context may again become the running execution
+ context and continue evaluating its code at the point where it had previously been suspended. Transition of the running
+ execution context status among execution contexts usually occurs in stack-like last-in/first-out manner. However, some
+ ECMAScript features require non-LIFO transitions of the running execution context.</p>
+
+ <p>The value of the <a href="#sec-code-realms">Realm</a> component of the running execution context is also called the
+ <i>current <a href="#sec-code-realms">Realm</a></i>. The value of the Function component of the running execution context is
+ also called the <i>active function object.</i></p>
+
+ <p>Execution contexts for ECMAScript code have the additional state components listed in <a href="#table-23">Table
+ 23</a>.</p>
+
+ <figure>
+ <figcaption><span id="table-23">Table 23</span> &mdash; Additional State Components for ECMAScript Code Execution Contexts</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Component</th>
+ <th>Purpose</th>
+ </tr>
+ <tr>
+ <td>LexicalEnvironment</td>
+ <td>Identifies the <a href="#sec-lexical-environments">Lexical Environment</a> used to resolve identifier references made by code within this execution context.</td>
+ </tr>
+ <tr>
+ <td>VariableEnvironment</td>
+ <td>Identifies the <a href="#sec-lexical-environments">Lexical Environment</a> whose EnvironmentRecord holds bindings created by <span class="nt">VariableStatements</span> within this execution context.</td>
+ </tr>
+ </table>
+ </figure>
+
+ <p>The LexicalEnvironment and VariableEnvironment components of an execution context are always Lexical Environments. When
+ an execution context is created its LexicalEnvironment and VariableEnvironment components initially have the same value.</p>
+
+ <p>Execution contexts representing the evaluation of generator objects have the additional state components listed in <a
+ href="#table-24">Table 24</a>.</p>
+
+ <figure>
+ <figcaption><span id="table-24">Table 24</span> &mdash; Additional State Components for Generator Execution Contexts</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Component</th>
+ <th>Purpose</th>
+ </tr>
+ <tr>
+ <td>Generator</td>
+ <td>The GeneratorObject that this execution context is evaluating.</td>
+ </tr>
+ </table>
+ </figure>
+
+ <p>In most situations only the running execution context (the top of the execution context stack) is directly manipulated by
+ algorithms within this specification. Hence when the terms &ldquo;LexicalEnvironment&rdquo;, and
+ &ldquo;VariableEnvironment&rdquo; are used without qualification they are in reference to those components of the running
+ execution context.</p>
+
+ <p>An execution context is purely a specification mechanism and need not correspond to any particular artefact of an
+ ECMAScript implementation. It is impossible for ECMAScript code to directly access or observe an execution context.</p>
+ </div>
+
+ <section id="sec-resolvebinding">
+ <h1><span class="secnum" id="sec-8.3.1"><a href="#sec-resolvebinding" title="link to this section">8.3.1</a></span>
+ ResolveBinding ( name, [env] )</h1>
+
+ <p>The ResolveBinding abstract operation is used to determine the binding of <var>name</var> passed as a string value. The
+ optional argument <var>env</var> can be used to explicitly provide the <a href="#sec-lexical-environments">Lexical
+ Environment</a> that is to be searched for the binding. During execution of ECMAScript code, ResolveBinding is performed
+ using the following algorithm:</p>
+
+ <ol class="proc">
+ <li>If <i>env</i> was not passed or if <i>env</i> is <b>undefined</b>, then
+ <ol class="block">
+ <li>Let <i>env</i> be <a href="#sec-execution-contexts">the running execution context</a>&rsquo;s <a
+ href="#sec-execution-contexts">LexicalEnvironment</a>.</li>
+ </ol>
+ </li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>env</i> is a <a href="#sec-lexical-environments">Lexical
+ Environment</a>.</li>
+ <li>If the code matching the syntactic production that is being evaluated is contained in <a
+ href="#sec-strict-mode-code">strict mode code</a>, let <i>strict</i> be <b>true</b>, else let <i>strict</i> be
+ <b>false</b>.</li>
+ <li>Return <a href="#sec-getidentifierreference">GetIdentifierReference</a>(<i>env</i>, <i>name</i>, <i>strict</i> ).</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> The result of ResolveBinding is always a <a
+ href="#sec-reference-specification-type">Reference</a> value with its referenced name component equal to the <i>name</i>
+ argument.</p>
+ </div>
+ </section>
+
+ <section id="sec-getthisenvironment">
+ <h1><span class="secnum" id="sec-8.3.2"><a href="#sec-getthisenvironment" title="link to this section">8.3.2</a></span>
+ GetThisEnvironment ( )</h1>
+
+ <p>The abstract operation <span style="font-family: Times New Roman">GetThisEnvironment</span> finds the <a
+ href="#sec-environment-records">Environment Record</a> that currently supplies the binding of the keyword <code>this</code>.
+ <span style="font-family: Times New Roman">GetThisEnvironment</span> performs the following steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>lex</i> be <a href="#sec-execution-contexts">the running execution context</a>&rsquo;s <a
+ href="#sec-execution-contexts">LexicalEnvironment</a>.</li>
+ <li>Repeat
+ <ol class="block">
+ <li>Let <i>envRec</i> be <i>lex</i>&rsquo;s EnvironmentRecord.</li>
+ <li>Let <i>exists</i> be <i>envRec</i>.HasThisBinding().</li>
+ <li>If <i>exists</i> is <b>true</b>, return <i>envRec</i>.</li>
+ <li>Let <i>outer</i> be the value of <i>lex&rsquo;s</i> <a href="#sec-lexical-environments">outer environment
+ reference</a>.</li>
+ <li>Let <i>lex</i> be <i>outer</i>.</li>
+ </ol>
+ </li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> The loop in step 2 will always terminate because the list of environments always ends with
+ <a href="#sec-global-environment-records">the global environment</a> which has a <code>this</code> binding.</p>
+ </div>
+ </section>
+
+ <section id="sec-resolvethisbinding">
+ <h1><span class="secnum" id="sec-8.3.3"><a href="#sec-resolvethisbinding" title="link to this section">8.3.3</a></span>
+ ResolveThisBinding ( )</h1>
+
+ <p>The abstract operation ResolveThisBinding determines the binding of the keyword <code>this</code> using the <a
+ href="#sec-execution-contexts">LexicalEnvironment</a> of <a href="#sec-execution-contexts">the running execution
+ context</a>. ResolveThisBinding performs the following steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be <a href="#sec-getthisenvironment">GetThisEnvironment</a>( ).</li>
+ <li>Return <i>envRec</i>.GetThisBinding().</li>
+ </ol>
+ </section>
+
+ <section id="sec-getnewtarget">
+ <h1><span class="secnum" id="sec-8.3.4"><a href="#sec-getnewtarget" title="link to this section">8.3.4</a></span>
+ GetNewTarget ( )</h1>
+
+ <p>The abstract operation GetNewTarget determines the NewTarget value using the <a
+ href="#sec-execution-contexts">LexicalEnvironment</a> of <a href="#sec-execution-contexts">the running execution
+ context</a>. GetNewTarget performs the following steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be <a href="#sec-getthisenvironment">GetThisEnvironment</a>( ).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>envRec</i> has a [[NewTarget]] field.</li>
+ <li>Return <i>envRec</i>.[[NewTarget]].</li>
+ </ol>
+ </section>
+
+ <section id="sec-getglobalobject">
+ <h1><span class="secnum" id="sec-8.3.5"><a href="#sec-getglobalobject" title="link to this section">8.3.5</a></span>
+ GetGlobalObject ( )</h1>
+
+ <p>The abstract operation <span style="font-family: Times New Roman">GetGlobalObject</span> returns the global object used
+ by <a href="#sec-execution-contexts">the currently running execution context</a>. <span style="font-family: Times New
+ Roman">GetGlobalObject</span> performs the following steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>ctx</i> be <a href="#sec-execution-contexts">the running execution context</a>.</li>
+ <li>Let <i>currentRealm</i> be <i>ctx&rsquo;s</i> <a href="#sec-code-realms">Realm</a>.</li>
+ <li>Return <i>currentRealm</i>.[[globalThis]].</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-jobs-and-job-queues">
+ <div class="front">
+ <h1><span class="secnum" id="sec-8.4"><a href="#sec-jobs-and-job-queues" title="link to this section">8.4</a></span> Jobs
+ and Job Queues</h1>
+
+ <p>A Job is an abstract operation that initiates an ECMAScript computation when no other ECMAScript computation is currently
+ in progress. A Job abstract operation may be defined to accept an arbitrary set of job parameters.</p>
+
+ <p>Execution of a Job can be initiated only when there is no running <a href="#sec-execution-contexts">execution context</a>
+ and <a href="#sec-execution-contexts">the execution context stack</a> is empty. A PendingJob is a request for the future
+ execution of a Job. A PendingJob is an internal Record whose fields are specified in <a href="#table-25">Table 25</a>. Once
+ execution of a Job is initiated, the Job always executes to completion. No other Job may be initiated until the currently
+ running Job completes. However, the currently running Job or external events may cause the enqueuing of additional
+ PendingJobs that may be initiated sometime after completion of the currently running Job.</p>
+
+ <figure>
+ <figcaption><span id="table-25">Table 25</span> &mdash; PendingJob Record Fields</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Field Name</th>
+ <th>Value</th>
+ <th>Meaning</th>
+ </tr>
+ <tr>
+ <td>[[Job]]</td>
+ <td>The name of a Job abstract operation</td>
+ <td>This is the abstract operation that is performed when execution of this PendingJob is initiated. Jobs are abstract operations that use NextJob rather than Return to indicate that they have completed.</td>
+ </tr>
+ <tr>
+ <td>[[Arguments]]</td>
+ <td>A <a href="#sec-list-and-record-specification-type">List</a></td>
+ <td>The <a href="#sec-list-and-record-specification-type">List</a> of argument values that are to be passed to [[Job]] when it is activated.</td>
+ </tr>
+ <tr>
+ <td>[[Realm]]</td>
+ <td>A <a href="#sec-code-realms">Realm</a> Record</td>
+ <td>The <a href="#sec-code-realms">Realm</a> for the initial <a href="#sec-execution-contexts">execution context</a> when this Pending Job is initiated.</td>
+ </tr>
+ <tr>
+ <td>[[HostDefined]]</td>
+ <td>Any, default value is <span class="value">undefined</span>.</td>
+ <td>Field reserved for use by host environments that need to associate additional information with a pending Job.</td>
+ </tr>
+ </table>
+ </figure>
+
+ <p>A Job Queue is a FIFO queue of PendingJob records. Each Job Queue has a name and the full set of available Job Queues are
+ defined by an ECMAScript implementation. Every ECMAScript implementation has at least the Job Queues defined in <a
+ href="#table-26">Table 26</a>.</p>
+
+ <figure>
+ <figcaption><span id="table-26">Table 26</span> &mdash; Required Job Queues</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Name</th>
+ <th>Purpose</th>
+ </tr>
+ <tr>
+ <td>ScriptJobs</td>
+ <td>Jobs that validate and evaluate ECMAScript <span class="nt">Script</span> and <span class="nt">Module</span> source text. See clauses 10 and 15.</td>
+ </tr>
+ <tr>
+ <td>PromiseJobs</td>
+ <td>Jobs that are responses to the settlement of a Promise (<a href="#sec-promise-objects">see 25.4</a>).</td>
+ </tr>
+ </table>
+ </figure>
+
+ <p>A request for the future execution of a Job is made by enqueueing, on a Job Queue, a PendingJob record that includes a
+ Job abstract operation name and any necessary argument values. When there is no running <a
+ href="#sec-execution-contexts">execution context</a> and <a href="#sec-execution-contexts">the execution context stack</a>
+ is empty, the ECMAScript implementation removes the first PendingJob from a Job Queue and uses the information contained in
+ it to create an <a href="#sec-execution-contexts">execution context</a> and starts execution of the associated Job abstract
+ operation.</p>
+
+ <p>The PendingJob records from a single Job Queue are always initiated in FIFO order. This specification does not define the
+ order in which multiple Job Queues are serviced. An ECMAScript implementation may interweave the FIFO evaluation of the
+ PendingJob records of a Job Queue with the evaluation of the PendingJob records of one or more other Job Queues. An
+ implementation must define what occurs when there are no running <a href="#sec-execution-contexts">execution context</a> and
+ all Job Queues are empty.</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> Typically an ECMAScript implementation will have its Job Queues pre-initialized with at
+ least one PendingJob and one of those Jobs will be the first to be executed. An implementation might choose to free all
+ resources and terminate if the current Job completes and all Job Queues are empty. Alternatively, it might choose to wait
+ for a some implementation specific agent or mechanism to enqueue new PendingJob requests.</p>
+ </div>
+
+ <p>The following abstract operations are used to create and manage Jobs and Job Queues:</p>
+ </div>
+
+ <section id="sec-enqueuejob">
+ <h1><span class="secnum" id="sec-8.4.1"><a href="#sec-enqueuejob" title="link to this section">8.4.1</a></span> EnqueueJob (
+ queueName, job, arguments)</h1>
+
+ <p>The EnqueueJob abstract operation requires three arguments: <var>queueName</var>, <var>job</var>, and
+ <var>arguments</var>. It performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>queueName</i>) is String and its value is the name of a Job
+ Queue recognized by this implementation.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>job</i> is the name of a Job.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>arguments</i> is a <a
+ href="#sec-list-and-record-specification-type">List</a> that has the same number of elements as the number of
+ parameters required by <i>job</i>.</li>
+ <li>Let <i>callerContext</i> be <a href="#sec-execution-contexts">the running execution context</a>.</li>
+ <li>Let <i>callerRealm</i> be <i>callerContext&rsquo;s</i> <a href="#sec-code-realms">Realm</a>.</li>
+ <li>Let <i>pending</i> be PendingJob{ [[Job]]: <i>job</i>, [[Arguments]]: <i>arguments</i>, [[Realm]]: <i>callerRealm</i>,
+ [[HostDefined]]: <b>undefined</b> }.</li>
+ <li>Perform any implementation or host environment defined processing of <i>pending</i>. This may include modifying the
+ [[HostDefined]] field or any other field of <i>pending</i>.</li>
+ <li>Add <i>pending</i> at the back of the Job Queue named by <i>queueName</i>.</li>
+ <li>Return <a href="#sec-normalcompletion">NormalCompletion</a>(<span style="font-family: sans-serif">empty</span>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-nextjob-result">
+ <h1><span class="secnum" id="sec-8.4.2"><a href="#sec-nextjob-result" title="link to this section">8.4.2</a></span> NextJob
+ result</h1>
+
+ <p>An algorithm step such as:</p>
+
+ <ol class="proc">
+ <li>NextJob <i>result</i>.</li>
+ </ol>
+
+ <p>is used in Job abstract operations in place of:</p>
+
+ <ol class="proc">
+ <li>Return <i>result</i>.</li>
+ </ol>
+
+ <p>Job abstract operations must not contain a Return step or a <a href="#sec-returnifabrupt">ReturnIfAbrupt</a> step. The
+ NextJob <var>result</var> operation is equivalent to the following steps:</p>
+
+ <ol class="proc">
+ <li>If <i>result</i> is an <a href="#sec-completion-record-specification-type">abrupt completion</a>, perform
+ implementation defined unhandled exception processing.</li>
+ <li><a href="#sec-execution-contexts">Suspend</a> <a href="#sec-execution-contexts">the running execution context</a> and
+ remove it from <a href="#sec-execution-contexts">the execution context stack</a>.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: The <a href="#sec-execution-contexts">execution context stack</a> is
+ now empty.</li>
+ <li>Let <i>nextQueue</i> be a non-empty Job Queue chosen in an implementation defined manner. If all Job Queues are empty,
+ the result is implementation defined.</li>
+ <li>Let <i>nextPending</i> be the PendingJob record at the front of <i>nextQueue</i>. Remove that record from
+ <i>nextQueue</i>.</li>
+ <li>Let <i>newContext</i> be a new <a href="#sec-execution-contexts">execution context</a>.</li>
+ <li>Set <i>newContext</i>&rsquo;s <a href="#sec-code-realms">Realm</a> to <i>nextPending</i>.[[Realm]].</li>
+ <li>Push <i>newContext</i> onto <a href="#sec-execution-contexts">the execution context stack</a>; <i>newContext</i> is
+ now <a href="#sec-execution-contexts">the running execution context</a>.</li>
+ <li>Perform any implementation or host environment defined job initialization using <i>nextPending</i>.</li>
+ <li>Perform the abstract operation named by <i>nextPending</i>.[[Job]] using the elements of
+ <i>nextPending</i>.[[Arguments]] as its arguments.</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-ecmascript-initialization">
+ <div class="front">
+ <h1><span class="secnum" id="sec-8.5"><a href="#sec-ecmascript-initialization" title="link to this section">8.5</a></span>
+ ECMAScript Initialization()</h1>
+
+ <p>An ECMAScript implementation performs the following steps prior to the execution of any Jobs or the evaluation of any
+ ECMAScript code:</p>
+
+ <ol class="proc">
+ <li>Let <i>realm</i> be <a href="#sec-createrealm">CreateRealm</a>().</li>
+ <li>Let <i>newContext</i> be a new <a href="#sec-execution-contexts">execution context</a>.</li>
+ <li>Set the Function of <i>newContext</i> to <b>null</b>.</li>
+ <li>Set the <a href="#sec-code-realms">Realm</a> of <i>newContext</i> to <i>realm</i>.</li>
+ <li>Push <i>newContext</i> onto <a href="#sec-execution-contexts">the execution context stack</a>; <i>newContext</i> is
+ now <a href="#sec-execution-contexts">the running execution context</a>.</li>
+ <li>Let <i>status</i> be <a href="#sec-initializehostdefinedrealm">InitializeHostDefinedRealm</a>(<i>realm</i>).</li>
+ <li>If <i>status</i> is an <a href="#sec-completion-record-specification-type">abrupt completion</a>, then
+ <ol class="block">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: The first realm could not be created.</li>
+ <li>Terminate ECMAScript execution.</li>
+ </ol>
+ </li>
+ <li>In an implementation dependent manner, obtain the ECMAScript source texts (see <a
+ href="#sec-ecmascript-language-source-code">clause 10</a>) for zero or more ECMAScript scripts and/or ECMAScript
+ modules. For each such <i>sourceText</i> do,
+ <ol class="block">
+ <li>If <i>sourceText</i> is the source code of a script, then
+ <ol class="block">
+ <li>Perform <a href="#sec-enqueuejob">EnqueueJob</a>(<code>"ScriptJobs"</code>, <a
+ href="#sec-scriptevaluationjob">ScriptEvaluationJob</a>, &laquo; <i>sourceText</i> &raquo;).</li>
+ </ol>
+ </li>
+ <li>Else <i>sourceText</i> is the source code of a module,
+ <ol class="block">
+ <li>Perform <a href="#sec-enqueuejob">EnqueueJob</a>(<code>"ScriptJobs"</code>, <a
+ href="#sec-toplevelmoduleevaluationjob">TopLevelModuleEvaluationJob</a>, &laquo; <i>sourceText</i>
+ &raquo;).</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>NextJob <a href="#sec-normalcompletion">NormalCompletion</a>(<b>undefined</b>).</li>
+ </ol>
+ </div>
+
+ <section id="sec-initializehostdefinedrealm">
+ <h1><span class="secnum" id="sec-8.5.1"><a href="#sec-initializehostdefinedrealm"
+ title="link to this section">8.5.1</a></span> InitializeHostDefinedRealm ( realm )</h1>
+
+ <p>The abstract operation InitializeHostDefinedRealm with parameter <var>realm</var> performs the following steps:</p>
+
+ <ol class="proc">
+ <li>If this implementation requires use of an exotic object to serve as <i>realm</i>&rsquo;s global object, let
+ <i>global</i> be such an object created in an implementation defined manner. Otherwise, let <i>global</i> be
+ <b>undefined</b> indicating that an ordinary object should be created as the global object.</li>
+ <li>Perform <a href="#sec-setrealmglobalobject">SetRealmGlobalObject</a>(<i>realm</i>, <i>global</i>).</li>
+ <li>Let <i>globalObj</i> be <a href="#sec-setdefaultglobalbindings">SetDefaultGlobalBindings</a>(<i>realm</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>globalObj</i>).</li>
+ <li>Create any implementation defined global object properties on <i>globalObj</i>.</li>
+ <li>Return <a href="#sec-normalcompletion">NormalCompletion</a>(<b>undefined</b>).</li>
+ </ol>
+ </section>
+ </section>
+</section>
+
+<section id="sec-ordinary-and-exotic-objects-behaviours">
+ <div class="front">
+ <h1><span class="secnum" id="sec-9"><a href="#sec-ordinary-and-exotic-objects-behaviours"
+ title="link to this section">9</a></span> Ordinary and Exotic Objects Behaviours</h1>
+ </div>
+
+ <section id="sec-ordinary-object-internal-methods-and-internal-slots">
+ <div class="front">
+ <h1><span class="secnum" id="sec-9.1"><a href="#sec-ordinary-object-internal-methods-and-internal-slots"
+ title="link to this section">9.1</a></span> Ordinary Object Internal Methods and Internal Slots</h1>
+
+ <p>All ordinary objects have an <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> called
+ [[Prototype]]. The value of this <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> is either
+ <b>null</b> or an object and is used for implementing inheritance. Data properties of the [[Prototype]] object are inherited
+ (are visible as properties of the child object) for the purposes of get access, but not for set access. Accessor properties
+ are inherited for both get access and set access.</p>
+
+ <p>Every ordinary object has a Boolean-valued [[Extensible]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> that controls whether or not properties may be
+ added to the object. If the value of the [[Extensible]] <a href="#sec-object-internal-methods-and-internal-slots">internal
+ slot</a> is <b>false</b> then additional properties may not be added to the object. In addition, if [[Extensible]] is
+ <b>false</b> the value of the [[Prototype]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of
+ the object may not be modified. Once the value of an object&rsquo;s [[Extensible]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> has been set to <b>false</b> it may not be
+ subsequently changed to <b>true</b>.</p>
+
+ <p>In the following algorithm descriptions, assume <var>O</var> is an ordinary object, <var>P</var> is a <a
+ href="#sec-object-type">property key value</a>, <var>V</var> is any <a href="#sec-ecmascript-language-types">ECMAScript
+ language value</a>, and <span class="nt">Desc</span> is a <a href="#sec-property-descriptor-specification-type">Property
+ Descriptor</a> record.</p>
+ </div>
+
+ <section id="sec-ordinary-object-internal-methods-and-internal-slots-getprototypeof">
+ <h1><span class="secnum" id="sec-9.1.1"><a href="#sec-ordinary-object-internal-methods-and-internal-slots-getprototypeof"
+ title="link to this section">9.1.1</a></span> [[GetPrototypeOf]] ( )</h1>
+
+ <p>When the [[GetPrototypeOf]] internal method of <var>O</var> is called the following steps are taken:</p>
+
+ <ol class="proc">
+ <li>Return the value of the [[Prototype]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of
+ <i>O</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-ordinary-object-internal-methods-and-internal-slots-setprototypeof-v">
+ <h1><span class="secnum" id="sec-9.1.2"><a href="#sec-ordinary-object-internal-methods-and-internal-slots-setprototypeof-v"
+ title="link to this section">9.1.2</a></span> [[SetPrototypeOf]] (V)</h1>
+
+ <p>When the [[SetPrototypeOf]] internal method of <var>O</var> is called with argument <var>V</var> the following steps are
+ taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: Either <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>V</i>) is Object or <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>V</i>) is Null.</li>
+ <li>Let <i>extensible</i> be the value of the [[Extensible]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>Let <i>current</i> be the value of the [[Prototype]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>If <a href="#sec-samevalue">SameValue</a>(<i>V</i>, <i>current</i>), return <b>true.</b></li>
+ <li>If <i>extensible</i> is <b>false</b>, return <b>false</b>.</li>
+ <li>Let <i>p</i> be <i>V</i>.</li>
+ <li>Let <i>done</i> be <b>false</b>.</li>
+ <li>Repeat while <i>done</i> is <b>false</b>,
+ <ol class="block">
+ <li>If <i>p</i> is <b>null</b>, let <i>done</i> be <b>true</b>.</li>
+ <li>Else, if <a href="#sec-samevalue">SameValue</a>(<i>p</i>, <i>O</i>) is <b>true</b>, return <b>false</b>.</li>
+ <li>Else,
+ <ol class="block">
+ <li>If the [[GetPrototypeOf]] internal method of <i>p</i> is not the ordinary object internal method defined in <a
+ href="#sec-ordinary-object-internal-methods-and-internal-slots-getprototypeof">9.1.1</a>, let <i>done</i> be
+ <b>true</b>.</li>
+ <li>Else, let <i>p</i> be the value of <i>p</i>&rsquo;s [[Prototype]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Set the value of the [[Prototype]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of
+ <i>O</i> to <i>V</i>.</li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> The loop in step 8 guarantees that there will be no circularities in any prototype chain
+ that only includes objects that use the ordinary object definitions for [[GetPrototypeOf]] and [[SetPrototypeOf]].</p>
+ </div>
+ </section>
+
+ <section id="sec-ordinary-object-internal-methods-and-internal-slots-isextensible">
+ <h1><span class="secnum" id="sec-9.1.3"><a href="#sec-ordinary-object-internal-methods-and-internal-slots-isextensible"
+ title="link to this section">9.1.3</a></span> [[IsExtensible]] ( )</h1>
+
+ <p>When the [[IsExtensible]] internal method of <var>O</var> is called the following steps are taken:</p>
+
+ <ol class="proc">
+ <li>Return the value of the [[Extensible]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of
+ <i>O</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-ordinary-object-internal-methods-and-internal-slots-preventextensions">
+ <h1><span class="secnum" id="sec-9.1.4"><a href="#sec-ordinary-object-internal-methods-and-internal-slots-preventextensions"
+ title="link to this section">9.1.4</a></span> [[PreventExtensions]] ( )</h1>
+
+ <p>When the [[PreventExtensions]] internal method of <var>O</var> is called the following steps are taken:</p>
+
+ <ol class="proc">
+ <li>Set the value of the [[Extensible]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of
+ <i>O</i> to <b>false</b>.</li>
+ <li>Return <b>true.</b></li>
+ </ol>
+ </section>
+
+ <section id="sec-ordinary-object-internal-methods-and-internal-slots-getownproperty-p">
+ <div class="front">
+ <h1><span class="secnum" id="sec-9.1.5"><a
+ href="#sec-ordinary-object-internal-methods-and-internal-slots-getownproperty-p"
+ title="link to this section">9.1.5</a></span> [[GetOwnProperty]] (P)</h1>
+
+ <p>When the [[GetOwnProperty]] internal method of <var>O</var> is called with <a href="#sec-object-type">property key</a>
+ <var>P</var>, the following steps are taken:</p>
+
+ <ol class="proc">
+ <li>Return <a href="#sec-ordinarygetownproperty">OrdinaryGetOwnProperty</a>(<i>O</i>, <i>P</i>).</li>
+ </ol>
+ </div>
+
+ <section id="sec-ordinarygetownproperty">
+ <h1><span class="secnum" id="sec-9.1.5.1"><a href="#sec-ordinarygetownproperty"
+ title="link to this section">9.1.5.1</a></span> OrdinaryGetOwnProperty (O, P)</h1>
+
+ <p>When the abstract operation OrdinaryGetOwnProperty is called with Object <var>O</var> and with <a
+ href="#sec-object-type">property key</a> <var>P</var>, the following steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>If <i>O</i> does not have an own property with key <i>P</i>, return <b>undefined</b>.</li>
+ <li>Let <i>D</i> be a newly created <a href="#sec-property-descriptor-specification-type">Property Descriptor</a> with
+ no fields.</li>
+ <li>Let <i>X</i> be <i>O</i>&rsquo;s own property whose key is <i>P</i>.</li>
+ <li>If <i>X</i> is a data property, then
+ <ol class="block">
+ <li>Set <i>D</i>.[[Value]] to the value of <i>X</i>&rsquo;s [[Value]] attribute.</li>
+ <li>Set <i>D</i>.[[Writable]] to the value of <i>X</i>&rsquo;s [[Writable]] attribute</li>
+ </ol>
+ </li>
+ <li>Else <i>X</i> is an accessor property, so
+ <ol class="block">
+ <li>Set <i>D</i>.[[Get]] to the value of <i>X</i>&rsquo;s [[Get]] attribute.</li>
+ <li>Set <i>D</i>.[[Set]] to the value of <i>X</i>&rsquo;s [[Set]] attribute.</li>
+ </ol>
+ </li>
+ <li>Set <i>D</i>.[[Enumerable]] to the value of <i>X</i>&rsquo;s [[Enumerable]] attribute.</li>
+ <li>Set <i>D</i>.[[Configurable]] to the value of <i>X</i>&rsquo;s [[Configurable]] attribute.</li>
+ <li>Return <i>D</i>.</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-ordinary-object-internal-methods-and-internal-slots-defineownproperty-p-desc">
+ <div class="front">
+ <h1><span class="secnum" id="sec-9.1.6"><a
+ href="#sec-ordinary-object-internal-methods-and-internal-slots-defineownproperty-p-desc"
+ title="link to this section">9.1.6</a></span> [[DefineOwnProperty]] (P, Desc)</h1>
+
+ <p>When the [[DefineOwnProperty]] internal method of <var>O</var> is called with <a href="#sec-object-type">property
+ key</a> <var>P</var> and <a href="#sec-property-descriptor-specification-type">Property Descriptor</a> <span
+ class="nt">Desc</span>, the following steps are taken:</p>
+
+ <ol class="proc">
+ <li>Return <a href="#sec-ordinarydefineownproperty">OrdinaryDefineOwnProperty</a>(<i>O</i>, <i>P</i>, <i>Desc</i>).</li>
+ </ol>
+ </div>
+
+ <section id="sec-ordinarydefineownproperty">
+ <h1><span class="secnum" id="sec-9.1.6.1"><a href="#sec-ordinarydefineownproperty"
+ title="link to this section">9.1.6.1</a></span> OrdinaryDefineOwnProperty (O, P, Desc)</h1>
+
+ <p>When the abstract operation <span style="font-family: Times New Roman">OrdinaryDefineOwnProperty</span> is called with
+ Object <var>O</var>, <a href="#sec-object-type">property key</a> <span style="font-family: Times New
+ Roman"><i>P</i>,</span> and <a href="#sec-property-descriptor-specification-type">Property Descriptor</a> <span
+ class="nt">Desc</span> the following steps are taken:</p>
+
+ <ol class="proc">
+ <li>Let <i>current</i> be <i>O</i>.[[GetOwnProperty]](<i>P</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>current</i>).</li>
+ <li>Let <i>extensible</i> be the value of the [[Extensible]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>Return <a href="#sec-validateandapplypropertydescriptor">ValidateAndApplyPropertyDescriptor</a>(<i>O</i>, <i>P</i>,
+ <i>extensible</i>, <i>Desc</i>, <i>current</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-iscompatiblepropertydescriptor">
+ <h1><span class="secnum" id="sec-9.1.6.2"><a href="#sec-iscompatiblepropertydescriptor"
+ title="link to this section">9.1.6.2</a></span> IsCompatiblePropertyDescriptor (Extensible, Desc, Current)</h1>
+
+ <p>When the abstract operation <span style="font-family: Times New Roman">IsCompatiblePropertyDescriptor</span> is called
+ with Boolean value <span class="nt">Extensible</span>, and Property Descriptors <span class="nt">Desc</span>, and <span
+ class="nt">Current</span> the following steps are taken:</p>
+
+ <ol class="proc">
+ <li>Return <a href="#sec-validateandapplypropertydescriptor">ValidateAndApplyPropertyDescriptor</a>(<b>undefined</b>,
+ <b>undefined</b>, <i>Extensible</i>, <i>Desc</i>, <i>Current</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-validateandapplypropertydescriptor">
+ <h1><span class="secnum" id="sec-9.1.6.3"><a href="#sec-validateandapplypropertydescriptor"
+ title="link to this section">9.1.6.3</a></span> ValidateAndApplyPropertyDescriptor (O, P, extensible, Desc,
+ current)</h1>
+
+ <p>When the abstract operation <span style="font-family: Times New Roman">ValidateAndApplyPropertyDescriptor</span> is
+ called with Object <var>O</var>, <a href="#sec-object-type">property key</a> <span style="font-family: Times New
+ Roman"><i>P</i>,</span> Boolean value <var>extensible</var>, and Property Descriptors <span class="nt">Desc</span>, and
+ <var>current</var> the following steps are taken:</p>
+
+ <p>This algorithm contains steps that test various fields of the <a
+ href="#sec-property-descriptor-specification-type">Property Descriptor</a> <span class="nt">Desc</span> for specific
+ values. The fields that are tested in this manner need not actually exist in <span class="nt">Desc</span>. If a field is
+ absent then its value is considered to be <b>false</b>.</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> If <b>undefined</b> is passed as the <i>O</i> argument only validation is performed and
+ no object updates are performed.</p>
+ </div>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: If <i>O</i> is not <b>undefined</b> then <i>P</i> is a valid <a
+ href="#sec-object-type">property key</a>.</li>
+ <li>If <i>current</i> is <b>undefined</b>, then
+ <ol class="block">
+ <li>If <i>extensible</i> is <b>false</b>, return <b>false</b>.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>extensible</i> is <b>true</b>.</li>
+ <li>If <a href="#sec-isgenericdescriptor">IsGenericDescriptor</a>(<i>Desc</i>) or <a
+ href="#sec-isdatadescriptor">IsDataDescriptor</a>(<i>Desc</i>) is <b>true</b>, then
+ <ol class="block">
+ <li>If <i>O</i> is not <b>undefined</b>, create an own data property named <i>P</i> of object <i>O</i> whose
+ [[Value]], [[Writable]], [[Enumerable]] and [[Configurable]] attribute values are described by <i>Desc</i>.
+ If the value of an attribute field of <i>Desc</i> is absent, the attribute of the newly created property is
+ set to its default value.</li>
+ </ol>
+ </li>
+ <li>Else <i>Desc</i> must be an accessor <a href="#sec-property-descriptor-specification-type">Property
+ Descriptor</a>,
+ <ol class="block">
+ <li>If <i>O</i> is not <b>undefined</b>, create an own accessor property named <i>P</i> of object <i>O</i> whose
+ [[Get]], [[Set]], [[Enumerable]] and [[Configurable]] attribute values are described by <i>Desc</i>. If the
+ value of an attribute field of <i>Desc</i> is absent, the attribute of the newly created property is set to
+ its default value.</li>
+ </ol>
+ </li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+ </li>
+ <li>Return <b>true</b>, if every field in <i>Desc</i> is absent.</li>
+ <li>Return <b>true</b>, if every field in <i>Desc</i> also occurs in <i>current</i> and the value of every field in
+ <i>Desc</i> is the same value as the corresponding field in <i>current</i> when compared using <a
+ href="#sec-samevalue">the SameValue algorithm</a>.</li>
+ <li>If the [[Configurable]] field of <i>current</i> is <b>false</b>, then
+ <ol class="block">
+ <li>Return <b>false</b>, if the [[Configurable]] field of <i>Desc</i> is <b>true</b>.</li>
+ <li>Return <b>false</b>, if the [[Enumerable]] field of <i>Desc</i> is present and the [[Enumerable]] fields of
+ <i>current</i> and <i>Desc</i> are the Boolean negation of each other.</li>
+ </ol>
+ </li>
+ <li>If <a href="#sec-isgenericdescriptor">IsGenericDescriptor</a>(<i>Desc</i>) is <b>true</b>, no further validation is
+ required.</li>
+ <li>Else if <a href="#sec-isdatadescriptor">IsDataDescriptor</a>(<i>current</i>) and <a
+ href="#sec-isdatadescriptor">IsDataDescriptor</a>(<i>Desc</i>) have different results, then
+ <ol class="block">
+ <li>Return <b>false</b>, if the [[Configurable]] field of <i>current</i> is <b>false</b>.</li>
+ <li>If <a href="#sec-isdatadescriptor">IsDataDescriptor</a>(<i>current</i>) is <b>true</b>, then
+ <ol class="block">
+ <li>If <i>O</i> is not <b>undefined</b>, convert the property named <i>P</i> of object <i>O</i> from a data
+ property to an accessor property. Preserve the existing values of the converted property&rsquo;s
+ [[Configurable]] and [[Enumerable]] attributes and set the rest of the property&rsquo;s attributes to their
+ default values.</li>
+ </ol>
+ </li>
+ <li>Else,
+ <ol class="block">
+ <li>If <i>O</i> is not <b>undefined</b>, convert the property named <i>P</i> of object <i>O</i> from an accessor
+ property to a data property. Preserve the existing values of the converted property&rsquo;s [[Configurable]]
+ and [[Enumerable]] attributes and set the rest of the property&rsquo;s attributes to their default
+ values.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Else if <a href="#sec-isdatadescriptor">IsDataDescriptor</a>(<i>current</i>) and <a
+ href="#sec-isdatadescriptor">IsDataDescriptor</a>(<i>Desc</i>) are both <b>true</b>, then
+ <ol class="block">
+ <li>If the [[Configurable]] field of <i>current</i> is <b>false</b>, then
+ <ol class="block">
+ <li>Return <b>false</b>, if the [[Writable]] field of <i>current</i> is <b>false</b> and the [[Writable]] field
+ of <i>Desc</i> is <b>true</b>.</li>
+ <li>If the [[Writable]] field of <i>current</i> is <b>false</b>, then
+ <ol class="block">
+ <li>Return <b>false</b>, if the [[Value]] field of <i>Desc</i> is present and <a
+ href="#sec-samevalue">SameValue</a>(<i>Desc</i>.[[Value]], <i>current</i>.[[Value]]) is
+ <b>false</b>.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Else the [[Configurable]] field of <i>current</i> is <b>true</b>, so any change is acceptable.</li>
+ </ol>
+ </li>
+ <li>Else <a href="#sec-isaccessordescriptor">IsAccessorDescriptor</a>(<i>current</i>) and <a
+ href="#sec-isaccessordescriptor">IsAccessorDescriptor</a>(<i>Desc</i>) are both <b>true</b>,
+ <ol class="block">
+ <li>If the [[Configurable]] field of <i>current</i> is <b>false</b>, then
+ <ol class="block">
+ <li>Return <b>false</b>, if the [[Set]] field of <i>Desc</i> is present and <a
+ href="#sec-samevalue">SameValue</a>(<i>Desc</i>.[[Set]], <i>current</i>.[[Set]]) is <b>false</b>.</li>
+ <li>Return <b>false</b>, if the [[Get]] field of <i>Desc</i> is present and <a
+ href="#sec-samevalue">SameValue</a>(<i>Desc</i>.[[Get]], <i>current</i>.[[Get]]) is <b>false</b>.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>If <i>O</i> is not <b>undefined</b>, then
+ <ol class="block">
+ <li>For each field of <i>Desc</i> that is present, set the corresponding attribute of the property named <i>P</i> of
+ object <i>O</i> to the value of the field.</li>
+ </ol>
+ </li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> Step 8.b allows any field of Desc to be different from the corresponding field of
+ current if current&rsquo;s [[Configurable]] field is <b>true</b>. This even permits changing the [[Value]] of a property
+ whose [[Writable]] attribute is <b>false</b>. This is allowed because a <b>true</b> [[Configurable]] attribute would
+ permit an equivalent sequence of calls where [[Writable]] is first set to <b>true</b>, a new [[Value]] is set, and then
+ [[Writable]] is set to <b>false</b>.</p>
+ </div>
+ </section>
+ </section>
+
+ <section id="sec-ordinary-object-internal-methods-and-internal-slots-hasproperty-p">
+ <div class="front">
+ <h1><span class="secnum" id="sec-9.1.7"><a href="#sec-ordinary-object-internal-methods-and-internal-slots-hasproperty-p"
+ title="link to this section">9.1.7</a></span> [[HasProperty]](P)</h1>
+
+ <p>When the [[HasProperty]] internal method of <var>O</var> is called with <a href="#sec-object-type">property key</a>
+ <var>P</var>, the following steps are taken:</p>
+
+ <ol class="proc">
+ <li>Return <a href="#sec-ordinaryhasproperty">OrdinaryHasProperty</a>(<i>O</i>, <i>P</i>).</li>
+ </ol>
+ </div>
+
+ <section id="sec-ordinaryhasproperty">
+ <h1><span class="secnum" id="sec-9.1.7.1"><a href="#sec-ordinaryhasproperty"
+ title="link to this section">9.1.7.1</a></span> OrdinaryHasProperty (O, P)</h1>
+
+ <p>When the abstract operation OrdinaryHasProperty is called with Object <var>O</var> and with <a
+ href="#sec-object-type">property key</a> <var>P</var>, the following steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>Let <i>hasOwn</i> be <a href="#sec-ordinarygetownproperty">OrdinaryGetOwnProperty</a>(<i>O</i>, <i>P</i>).</li>
+ <li>If <i>hasOwn</i> is not <b>undefined</b>, return <b>true</b>.</li>
+ <li>Let <i>parent</i> be <i>O</i>.[[GetPrototypeOf]]().</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>parent</i>).</li>
+ <li>If <i>parent</i> is not <b>null</b>, then
+ <ol class="block">
+ <li>Return <i>parent</i>.[[HasProperty]](<i>P</i>).</li>
+ </ol>
+ </li>
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-ordinary-object-internal-methods-and-internal-slots-get-p-receiver">
+ <h1><span class="secnum" id="sec-9.1.8"><a href="#sec-ordinary-object-internal-methods-and-internal-slots-get-p-receiver"
+ title="link to this section">9.1.8</a></span> [[Get]] (P, Receiver)</h1>
+
+ <p>When the [[Get]] internal method of <var>O</var> is called with <a href="#sec-object-type">property key</a> <var>P</var>
+ and <a href="#sec-ecmascript-language-types">ECMAScript language value</a> <span class="nt">Receiver</span> the following
+ steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>Let <i>desc</i> be <i>O</i>.[[GetOwnProperty]](<i>P</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>desc</i>).</li>
+ <li>If <i>desc</i> is <b>undefined</b>, then
+ <ol class="block">
+ <li>Let <i>parent</i> be <i>O</i>.[[GetPrototypeOf]]().</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>parent</i>).</li>
+ <li>If <i>parent</i> is <b>null</b>, return <b>undefined.</b></li>
+ <li>Return <i>parent</i>.[[Get]](<i>P</i>, <i>Receiver</i>).</li>
+ </ol>
+ </li>
+ <li>If <a href="#sec-isdatadescriptor">IsDataDescriptor</a>(<i>desc</i>) is <b>true</b>, return
+ <i>desc</i>.[[Value]].</li>
+ <li>Otherwise, <a href="#sec-isaccessordescriptor">IsAccessorDescriptor</a>(<i>desc</i>) must be <b>true</b> so, let
+ <i>getter</i> be <i>desc</i>.[[Get]].</li>
+ <li>If <i>getter</i> is <b>undefined</b>, return <b>undefined</b>.</li>
+ <li>Return <a href="#sec-call">Call</a>(<i>getter,</i> <i>Receiver</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-ordinary-object-internal-methods-and-internal-slots-set-p-v-receiver">
+ <h1><span class="secnum" id="sec-9.1.9"><a href="#sec-ordinary-object-internal-methods-and-internal-slots-set-p-v-receiver"
+ title="link to this section">9.1.9</a></span> [[Set]] ( P, V, Receiver)</h1>
+
+ <p>When the [[Set]] internal method of <var>O</var> is called with <a href="#sec-object-type">property key</a> <var>P</var>,
+ value <var>V</var>, and <a href="#sec-ecmascript-language-types">ECMAScript language value</a> <span
+ class="nt">Receiver</span>, the following steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>Let <i>ownDesc</i> be <i>O</i>.[[GetOwnProperty]](<i>P</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>ownDesc</i>).</li>
+ <li>If <i>ownDesc</i> is <b>undefined</b>, then
+ <ol class="block">
+ <li>Let <i>parent</i> be <i>O</i>.[[GetPrototypeOf]]().</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>parent</i>).</li>
+ <li>If <i>parent</i> is not <b>null</b>, then
+ <ol class="block">
+ <li>Return <i>parent</i>.[[Set]](<i>P</i>, <i>V</i>, <i>Receiver</i>).</li>
+ </ol>
+ </li>
+ <li>Else,
+ <ol class="block">
+ <li>Let <i>ownDesc</i> be the PropertyDescriptor{[[Value]]: <b>undefined</b>, [[Writable]]: <b>true</b>,
+ [[Enumerable]]: <b>true</b>, [[Configurable]]: <b>true</b>}.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>If <a href="#sec-isdatadescriptor">IsDataDescriptor</a>(<i>ownDesc</i>) is <b>true</b>, then
+ <ol class="block">
+ <li>If <i>ownDesc</i>.[[Writable]] is <b>false</b>, return <b>false</b>.</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>Receiver</i>) is not Object, return
+ <b>false</b>.</li>
+ <li>Let <i>existingDescriptor</i> be <i>Receiver</i>.[[GetOwnProperty]](<i>P</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>existingDescriptor</i>).</li>
+ <li>If <i>existingDescriptor</i> is not <b>undefined</b>, then
+ <ol class="block">
+ <li>Let <i>valueDesc</i> be the PropertyDescriptor{[[Value]]: <i>V</i>}.</li>
+ <li>Return <i>Receiver</i>.[[DefineOwnProperty]](<i>P</i>, <i>valueDesc</i>).</li>
+ </ol>
+ </li>
+ <li>Else <i>Receiver</i> does not currently have a property <i>P</i>,
+ <ol class="block">
+ <li>Return <a href="#sec-createdataproperty">CreateDataProperty</a>(<i>Receiver</i>, <i>P</i>, <i>V</i>).</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-isaccessordescriptor">IsAccessorDescriptor</a>(<i>ownDesc</i>) is <b>true</b>.</li>
+ <li>Let <i>setter</i> be <i>ownDesc</i>.[[Set]].</li>
+ <li>If <i>setter</i> is <b>undefined</b>, return <b>false</b>.</li>
+ <li>Let <i>setterResult</i> be <a href="#sec-call">Call</a>(<i>setter</i>, <i>Receiver</i>, &laquo;<i>V</i>&raquo;).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>setterResult</i>).</li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-ordinary-object-internal-methods-and-internal-slots-delete-p">
+ <h1><span class="secnum" id="sec-9.1.10"><a href="#sec-ordinary-object-internal-methods-and-internal-slots-delete-p"
+ title="link to this section">9.1.10</a></span> [[Delete]] (P)</h1>
+
+ <p>When the [[Delete]] internal method of <var>O</var> is called with <a href="#sec-object-type">property key</a>
+ <var>P</var> the following steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>Let <i>desc</i> be <i>O</i>.[[GetOwnProperty]](<i>P</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>desc</i>).</li>
+ <li>If <i>desc</i> is <b>undefined</b>, return <b>true</b>.</li>
+ <li>If <i>desc</i>.[[Configurable]] is <b>true</b>, then
+ <ol class="block">
+ <li>Remove the own property with name <i>P</i> from <i>O</i>.</li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+ </li>
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-ordinary-object-internal-methods-and-internal-slots-enumerate">
+ <h1><span class="secnum" id="sec-9.1.11"><a href="#sec-ordinary-object-internal-methods-and-internal-slots-enumerate"
+ title="link to this section">9.1.11</a></span> [[Enumerate]] ()</h1>
+
+ <p>When the [[Enumerate]] internal method of <var>O</var> is called the following steps are taken:</p>
+
+ <ol class="proc">
+ <li>Return an Iterator object (<a href="#sec-iterator-interface">25.1.1.2</a>) whose <code>next</code> method iterates
+ over all the String-valued keys of enumerable properties of <i>O</i>. The Iterator object must inherit from
+ %IteratorPrototype% (<a href="#sec-%iteratorprototype%-object">25.1.2</a>). The mechanics and order of enumerating the
+ properties is not specified but must conform to the rules specified below.</li>
+ </ol>
+
+ <p>The iterator&rsquo;s <code>next</code> method processes object properties to determine whether the <a
+ href="#sec-object-type">property key</a> should be returned as an iterator value. Returned property keys do not include keys
+ that are Symbols. Properties of the target object may be deleted during enumeration. A property that is deleted before it is
+ processed by the iterator&rsquo;s <code>next</code> method is ignored. If new properties are added to the target object
+ during enumeration, the newly added properties are not guaranteed to be processed in the active enumeration. A property name
+ will be returned by the iterator&rsquo;s <code>next</code> method at most once in any enumeration.</p>
+
+ <p>Enumerating the properties of the target object includes enumerating properties of its prototype, and the prototype of
+ the prototype, and so on, recursively; but a property of a prototype is not processed if it has the same name as a property
+ that has already been processed by the iterator&rsquo;s <code>next</code> method. The values of [[Enumerable]] attributes
+ are not considered when determining if a property of a prototype object has already been processed. The enumerable property
+ names of prototype objects must be obtained as if by invoking the prototype object&rsquo;s [[Enumerate]] internal method.
+ [[Enumerate]] must obtain the own property keys of the target object as if by calling its [[OwnPropertyKeys]] internal
+ method. Property attributes of the target object must be obtained as if by calling its [[GetOwnProperty]] internal
+ method.</p>
+
+ <p class="Note">NOTE The following is an informative definition of an ECMAScript generator function that conforms to these
+ rules:</p>
+
+ <pre>function* enumerate(obj) {</pre>
+ <pre>let visited=new Set;</pre>
+ <pre>for (let key of <a href="#sec-reflect.ownkeys">Reflect.ownKeys</a>(obj)) {</pre>
+ <pre>if (typeof key === "string") {</pre>
+ <pre>let desc = <a href="#sec-reflect.getownpropertydescriptor">Reflect.getOwnPropertyDescriptor</a>(obj,key);</pre>
+ <pre>if (desc) {</pre>
+ <pre>visited.add(key);</pre>
+ <pre>if (desc.enumerable) yield key;</pre>
+ <pre>}</pre>
+ <pre>}</pre>
+ <pre>}</pre>
+ <pre>let proto = <a href="#sec-reflect.getprototypeof">Reflect.getPrototypeOf</a>(obj)</pre>
+ <pre>if (proto === null) return;</pre>
+ <pre>for (let protoName of <a href="#sec-reflect.enumerate">Reflect.enumerate</a>(proto)) {</pre>
+ <pre>if (!visited.has(protoName)) yield protoName;</pre>
+ <pre>}</pre>
+ <pre>}</pre>
+ </section>
+
+ <section id="sec-ordinary-object-internal-methods-and-internal-slots-ownpropertykeys">
+ <h1><span class="secnum" id="sec-9.1.12"><a href="#sec-ordinary-object-internal-methods-and-internal-slots-ownpropertykeys"
+ title="link to this section">9.1.12</a></span> [[OwnPropertyKeys]] ( )</h1>
+
+ <p>When the [[OwnPropertyKeys]] internal method of <var>O</var> is called the following steps are taken:</p>
+
+ <ol class="proc">
+ <li>Let <i>keys</i> be a new empty <a href="#sec-list-and-record-specification-type">List</a>.</li>
+ <li>For each own <a href="#sec-object-type">property key</a> <i>P</i> of <i>O</i> that is an integer index, in ascending
+ numeric index order
+ <ol class="block">
+ <li>Add <i>P</i> as the last element of <i>keys</i>.</li>
+ </ol>
+ </li>
+ <li>For each own <a href="#sec-object-type">property key</a> <i>P</i> of <i>O</i> that is a String but is not an integer
+ index, in property creation order
+ <ol class="block">
+ <li>Add <i>P</i> as the last element of <i>keys</i>.</li>
+ </ol>
+ </li>
+ <li>For each own <a href="#sec-object-type">property key</a> <i>P</i> of <i>O</i> that is a Symbol, in property creation
+ order
+ <ol class="block">
+ <li>Add <i>P</i> as the last element of <i>keys</i>.</li>
+ </ol>
+ </li>
+ <li>Return <i>keys</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-objectcreate">
+ <h1><span class="secnum" id="sec-9.1.13"><a href="#sec-objectcreate" title="link to this section">9.1.13</a></span>
+ ObjectCreate(proto, internalSlotsList)</h1>
+
+ <p>The abstract operation ObjectCreate with argument <var>proto</var> (an object or null) is used to specify the runtime
+ creation of new ordinary objects. The optional argument <var>internalSlotsList</var> is a <a
+ href="#sec-list-and-record-specification-type">List</a> of the names of additional internal slots that must be defined as
+ part of the object. If the list is not provided, an empty <a href="#sec-list-and-record-specification-type">List</a> is
+ used. This abstract operation performs the following steps:</p>
+
+ <ol class="proc">
+ <li>If <i>internalSlotsList</i> was not provided, let <i>internalSlotsList</i> be an empty <a
+ href="#sec-list-and-record-specification-type">List</a>.</li>
+ <li>Let <i>obj</i> be a newly created object with an <a href="#sec-object-internal-methods-and-internal-slots">internal
+ slot</a> for each name in <i>internalSlotsList</i>.</li>
+ <li>Set <i>obj</i>&rsquo;s essential internal methods to the default ordinary object definitions specified in <a
+ href="#sec-ordinary-object-internal-methods-and-internal-slots">9.1</a>.</li>
+ <li>Set the [[Prototype]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>obj</i> to
+ <i>proto</i>.</li>
+ <li>Set the [[Extensible]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>obj</i> to
+ <b>true</b>.</li>
+ <li>Return <i>obj</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-ordinarycreatefromconstructor">
+ <h1><span class="secnum" id="sec-9.1.14"><a href="#sec-ordinarycreatefromconstructor"
+ title="link to this section">9.1.14</a></span> OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto,
+ internalSlotsList )</h1>
+
+ <p>The abstract operation OrdinaryCreateFromConstructor creates an ordinary object whose [[Prototype]] value is retrieved
+ from a constructor&rsquo;s <code>prototype</code> property, if it exists. Otherwise the intrinsic named by
+ <var>intrinsicDefaultProto</var> is used for [[Prototype]]. The optional <var>internalSlotsList</var> is a <a
+ href="#sec-list-and-record-specification-type">List</a> of the names of additional internal slots that must be defined as
+ part of the object. If the list is not provided, an empty <a href="#sec-list-and-record-specification-type">List</a> is
+ used. This abstract operation performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>intrinsicDefaultProto</i> is a string value that is this
+ specification&rsquo;s name of an intrinsic object. The corresponding object must be an intrinsic that is intended to
+ be used as the [[Prototype]] value of an object.</li>
+ <li>Let <i>proto</i> be <a href="#sec-getprototypefromconstructor">GetPrototypeFromConstructor</a>(<i>constructor</i>,
+ <i>intrinsicDefaultProto</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>proto</i>).</li>
+ <li>Return <a href="#sec-objectcreate">ObjectCreate</a>(<i>proto</i>, <i>internalSlotsList</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-getprototypefromconstructor">
+ <h1><span class="secnum" id="sec-9.1.15"><a href="#sec-getprototypefromconstructor"
+ title="link to this section">9.1.15</a></span> GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto )</h1>
+
+ <p>The abstract operation GetPrototypeFromConstructor determines the [[Prototype]] value that should be used to create an
+ object corresponding to a specific constructor. The value is retrieved from the constructor&rsquo;s <code>prototype</code>
+ property, if it exists. Otherwise the intrinsic named by <var>intrinsicDefaultProto</var> is used for [[Prototype]]. This
+ abstract operation performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>intrinsicDefaultProto</i> is a string value that is this
+ specification&rsquo;s name of an intrinsic object. The corresponding object must be an intrinsic that is intended to
+ be used as the [[Prototype]] value of an object.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-isconstructor">IsConstructor</a> (<i>constructor</i>)
+ is <b>true</b>.</li>
+ <li>Let <i>proto</i> be <a href="#sec-get-o-p">Get</a>(<i>constructor</i>, <code>"prototype"</code>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>proto</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>proto</i>) is not Object, then
+ <ol class="block">
+ <li>Let <i>realm</i> be <a href="#sec-getfunctionrealm">GetFunctionRealm</a>(<i>constructor</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>realm</i>).</li>
+ <li>Let <i>proto</i> be <i>realm&rsquo;s</i> intrinsic object named <i>intrinsicDefaultProto</i>.</li>
+ </ol>
+ </li>
+ <li>Return <i>proto</i>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> If <i>constructor</i> does not supply a [[Prototype]] value, the default value that is
+ used is obtained from the <a href="#sec-code-realms">Code Realm</a> of the <i>constructor</i> function rather than from <a
+ href="#sec-execution-contexts">the running execution context</a>.</p>
+ </div>
+ </section>
+ </section>
+
+ <section id="sec-ecmascript-function-objects">
+ <div class="front">
+ <h1><span class="secnum" id="sec-9.2"><a href="#sec-ecmascript-function-objects" title="link to this section">9.2</a></span>
+ ECMAScript Function Objects</h1>
+
+ <p>ECMAScript function objects encapsulate parameterized ECMAScript code closed over a <a
+ href="#sec-lexical-environments">lexical environment</a> and support the dynamic evaluation of that code. An ECMAScript
+ function object is an ordinary object and has the same internal slots and the same internal methods as other ordinary
+ objects. The code of an ECMAScript function object may be either <a href="#sec-strict-mode-code">strict mode code</a> (<a
+ href="#sec-strict-mode-code">10.2.1</a>) or non-<a href="#sec-strict-mode-code">strict mode code</a>. An ECMAScript function
+ object whose code is <a href="#sec-strict-mode-code">strict mode code</a> is called a <i>strict function</i>. One whose code
+ is not <a href="#sec-strict-mode-code">strict mode code</a> is called a <i>non-strict function</i>.</p>
+
+ <p>ECMAScript function objects have the additional internal slots listed in <a href="#table-27">Table 27</a>.</p>
+
+ <figure>
+ <figcaption><span id="table-27">Table 27</span> &mdash; Internal Slots of ECMAScript Function Objects</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Internal Slot</th>
+ <th>Type</th>
+ <th>Description</th>
+ </tr>
+ <tr>
+ <td>[[Environment]]</td>
+ <td><a href="#sec-lexical-environments">Lexical Environment</a></td>
+ <td>The <a href="#sec-lexical-environments">Lexical Environment</a> that the function was closed over. Used as the outer environment when evaluating the code of the function.</td>
+ </tr>
+ <tr>
+ <td>[[FormalParameters]]</td>
+ <td>Parse Node</td>
+ <td>The root parse node of the source text that defines the function&rsquo;s formal parameter list.</td>
+ </tr>
+ <tr>
+ <td>[[FunctionKind]]</td>
+ <td>String</td>
+ <td>Either <code>"normal"</code>, <code>"classConstructor"</code> or <code>"generator"</code>.</td>
+ </tr>
+ <tr>
+ <td>[[ECMAScriptCode]]</td>
+ <td>Parse Node</td>
+ <td>The root parse node of the source text that defines the function&rsquo;s body.</td>
+ </tr>
+ <tr>
+ <td>[[ConstructorKind]]</td>
+ <td>String</td>
+ <td>Either <code>"base"</code> or <code>"derived"</code>.</td>
+ </tr>
+ <tr>
+ <td>[[Realm]]</td>
+ <td><a href="#sec-code-realms">Realm</a> Record</td>
+ <td>The <a href="#sec-code-realms">Code Realm</a> in which the function was created and which provides any intrinsic objects that are accessed when evaluating the function.</td>
+ </tr>
+ <tr>
+ <td>[[ThisMode]]</td>
+ <td>(lexical, strict, global)</td>
+ <td>Defines how <code>this</code> references are interpreted within the formal parameters and code body of the function. <b>lexical</b> means that <code>this</code> refers to the <b>this</b> value of a lexically enclosing function. <b>strict</b> means that the <b>this</b> value is used exactly as provided by an invocation of the function. <b>global</b> means that a <b>this</b> value of <span class="value">undefined</span> is interpreted as a reference to the global object.</td>
+ </tr>
+ <tr>
+ <td>[[Strict]]</td>
+ <td>Boolean</td>
+ <td><span class="value">true</span> if this is a strict mode function, <span class="value">false</span> if this is not a strict mode function.</td>
+ </tr>
+ <tr>
+ <td>[[HomeObject]]</td>
+ <td>Object</td>
+ <td>If the function uses <code>super</code>, this is the object whose [[GetPrototypeOf]] provides the object where <code>super</code> property lookups begin.</td>
+ </tr>
+ </table>
+ </figure>
+
+ <p>All ECMAScript function objects have the [[Call]] internal method defined here. ECMAScript functions that are also
+ constructors in addition have the [[Construct]] internal method. ECMAScript function objects whose code is not <a
+ href="#sec-strict-mode-code">strict mode code</a> have the [[GetOwnProperty]] internal method defined here.</p>
+ </div>
+
+ <section id="sec-ecmascript-function-objects-call-thisargument-argumentslist">
+ <div class="front">
+ <h1><span class="secnum" id="sec-9.2.1"><a href="#sec-ecmascript-function-objects-call-thisargument-argumentslist"
+ title="link to this section">9.2.1</a></span> [[Call]] ( thisArgument, argumentsList)</h1>
+
+ <p>The [[Call]] internal method for an <a href="#sec-ecmascript-function-objects">ECMAScript function object</a>
+ <var>F</var> is called with parameters <var>thisArgument</var> and <var>argumentsList</var>, a <a
+ href="#sec-list-and-record-specification-type">List</a> of <a href="#sec-ecmascript-language-types">ECMAScript language
+ values</a>. The following steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>F</i> is an <a
+ href="#sec-ecmascript-function-objects">ECMAScript function object</a>.</li>
+ <li>If <i>F</i>&rsquo;s [[FunctionKind]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> is
+ <code>"classConstructor"</code>, throw a <b>TypeError</b> exception.</li>
+ <li>Let <i>callerContext</i> be <a href="#sec-execution-contexts">the running execution context</a>.</li>
+ <li>Let <i>calleeContext</i> be <a href="#sec-prepareforordinarycall">PrepareForOrdinaryCall</a>(<i>F</i>,
+ <b>undefined</b>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>calleeContext</i> is now <a href="#sec-execution-contexts">the
+ running execution context</a>.</li>
+ <li>Perform <a href="#sec-ordinarycallbindthis">OrdinaryCallBindThis</a>(<i>F</i>, <i>calleeContext</i>,
+ <i>thisArgument</i>).</li>
+ <li>Let <i>result</i> be <a href="#sec-ordinarycallevaluatebody">OrdinaryCallEvaluateBody</a>(<i>F</i>,
+ <i>argumentsList</i>).</li>
+ <li>Remove <i>calleeContext</i> from <a href="#sec-execution-contexts">the execution context stack</a> and restore
+ <i>callerContext</i> as <a href="#sec-execution-contexts">the running execution context</a>.</li>
+ <li>If <i>result</i>.[[type]] is <span style="font-family: sans-serif">return</span>, return <a
+ href="#sec-normalcompletion">NormalCompletion</a>(<i>result</i>.[[value]]).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>result</i>).</li>
+ <li>Return <a href="#sec-normalcompletion">NormalCompletion</a>(<b>undefined</b>).</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> When <i>calleeContext</i> is removed from <a href="#sec-execution-contexts">the
+ execution context stack</a> in step 8 it must not be destroyed if it is <a href="#sec-execution-contexts">suspended</a>
+ and retained for later resumption by an accessible generator object<i>.</i></p>
+ </div>
+ </div>
+
+ <section id="sec-prepareforordinarycall">
+ <h1><span class="secnum" id="sec-9.2.1.1"><a href="#sec-prepareforordinarycall"
+ title="link to this section">9.2.1.1</a></span> PrepareForOrdinaryCall( F, newTarget )</h1>
+
+ <p>When the abstract operation PrepareForOrdinaryCall is called with function object <var>F</var> <span
+ style="font-family: Times New Roman">and <a href="#sec-ecmascript-language-types">ECMAScript language value</a>
+ <i>newTarget</i></span>, the following steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>newTarget</i>) is Undefined or Object.</li>
+ <li>Let <i>callerContext</i> be <a href="#sec-execution-contexts">the running execution context</a>.</li>
+ <li>Let <i>calleeContext</i> be a new <a href="#sec-execution-contexts">ECMAScript code execution context</a>.</li>
+ <li>Set the Function of <i>calleeContext</i> to <i>F</i>.</li>
+ <li>Let <i>calleeRealm</i> be the value of <i>F&rsquo;s</i> [[Realm]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>Set the <a href="#sec-code-realms">Realm</a> of <i>calleeContext</i> to <i>calleeRealm</i>.</li>
+ <li>Let <i>localEnv</i> be <a href="#sec-newfunctionenvironment">NewFunctionEnvironment</a>(<i>F</i>,
+ <i>newTarget</i>).</li>
+ <li>Set the <a href="#sec-execution-contexts">LexicalEnvironment</a> of <i>calleeContext</i> to <i>localEnv</i>.</li>
+ <li>Set the <a href="#sec-execution-contexts">VariableEnvironment</a> of <i>calleeContext</i> to <i>localEnv</i>.</li>
+ <li>If <i>callerContext</i> is not already <a href="#sec-execution-contexts">suspended</a>, <a
+ href="#sec-execution-contexts">Suspend</a> <i>callerContext</i>.</li>
+ <li>Push <i>calleeContext</i> onto <a href="#sec-execution-contexts">the execution context stack</a>;
+ <i>calleeContext</i> is now <a href="#sec-execution-contexts">the running execution context</a>.</li>
+ <li><span style="font-family: sans-serif">NOTE Any exception objects produced after this point are associated
+ with</span> <i>calleeRealm</i>.</li>
+ <li>Return <i>calleeContext</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-ordinarycallbindthis">
+ <h1><span class="secnum" id="sec-9.2.1.2"><a href="#sec-ordinarycallbindthis"
+ title="link to this section">9.2.1.2</a></span> OrdinaryCallBindThis ( F, calleeContext, thisArgument )</h1>
+
+ <p>When the abstract operation OrdinaryCallBindThis is called with function object <var>F</var>, <a
+ href="#sec-execution-contexts">execution context</a> <var>calleeContext</var>, and ECMAScript value
+ <var>thisArgument</var> the following steps are taken:</p>
+
+ <ol class="proc">
+ <li>Let <i>thisMode</i> be the value of <i>F</i>&rsquo;s [[ThisMode]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>If <i>thisMode</i> is <span style="font-family: sans-serif">lexical</span>, return <a
+ href="#sec-normalcompletion">NormalCompletion</a>(<b>undefined</b>).</li>
+ <li>Let <i>calleeRealm</i> be the value of <i>F&rsquo;s</i> [[Realm]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>Let <i>localEnv</i> be the <a href="#sec-execution-contexts">LexicalEnvironment</a> of <i>calleeContext</i>.</li>
+ <li>If <i>thisMode</i> is <span style="font-family: sans-serif">strict</span>, let <i>thisValue</i> be
+ <i>thisArgument</i>.</li>
+ <li>Else
+ <ol class="block">
+ <li>if <i>thisArgument</i> is <b>null</b> or <b>undefined</b>, then
+ <ol class="block">
+ <li>Let <i>thisValue</i> be <i>calleeRealm</i>.[[globalThis]].</li>
+ </ol>
+ </li>
+ <li>Else
+ <ol class="block">
+ <li>Let <i>thisValue</i> be <a href="#sec-toobject">ToObject</a>(<i>thisArgument</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>thisValue</i> is not an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ <li><span style="font-family: sans-serif">NOTE <a href="#sec-toobject">ToObject</a> produces</span> <span
+ style="font-family: sans-serif">wrapper objects using</span> <i>calleeRealm</i>.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Let <i>envRec</i> be <i>localEnv</i>&rsquo;s EnvironmentRecord.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: The next step never returns an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a> because <i>envRec</i>.[[thisBindingStatus]]
+ is <code>"uninitialized"</code>.</li>
+ <li>Return <i>envRec</i>.<a href="#sec-bindthisvalue">BindThisValue</a>(<i>thisValue</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-ordinarycallevaluatebody">
+ <h1><span class="secnum" id="sec-9.2.1.3"><a href="#sec-ordinarycallevaluatebody"
+ title="link to this section">9.2.1.3</a></span> OrdinaryCallEvaluateBody ( F, argumentsList )</h1>
+
+ <p>When the abstract operation OrdinaryCallEvaluateBody is called with function object <var>F</var> and <a
+ href="#sec-list-and-record-specification-type">List</a> <var>argumentsList</var> the following steps are taken:</p>
+
+ <ol class="proc">
+ <li>Let <i>status</i> be <a href="#sec-functiondeclarationinstantiation">FunctionDeclarationInstantiation</a>(<i>F</i>,
+ <i>argumentsList</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>status</i>)</li>
+ <li>Return the result of EvaluateBody of the parsed code that is the value of <i>F</i>'s [[ECMAScriptCode]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> passing <i>F</i> as the argument.</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-ecmascript-function-objects-construct-argumentslist-newtarget">
+ <h1><span class="secnum" id="sec-9.2.2"><a href="#sec-ecmascript-function-objects-construct-argumentslist-newtarget"
+ title="link to this section">9.2.2</a></span> [[Construct]] ( argumentsList, newTarget)</h1>
+
+ <p>The [[Construct]] internal method for an <a href="#sec-ecmascript-function-objects">ECMAScript Function object</a>
+ <var>F</var> is called with parameters <var>argumentsList</var> and <span style="font-family: Times New
+ Roman"><i>newTarget</i>. <i>argumentsList</i></span> is a possibly empty <a
+ href="#sec-list-and-record-specification-type">List</a> of <a href="#sec-ecmascript-language-types">ECMAScript language
+ values</a>. The following steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>F</i> is an <a href="#sec-ecmascript-function-objects">ECMAScript
+ function object</a>.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>newTarget</i>) is Object.</li>
+ <li>Let <i>callerContext</i> be <a href="#sec-execution-contexts">the running execution context</a>.</li>
+ <li>Let <i>kind</i> be <i>F</i>&rsquo;s [[ConstructorKind]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>If <i>kind</i> is <code>"base"</code>, then
+ <ol class="block">
+ <li>Let <i>thisArgument</i> be <a
+ href="#sec-ordinarycreatefromconstructor">OrdinaryCreateFromConstructor</a>(<i>newTarget</i>,
+ <code>"%ObjectPrototype%"</code>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>thisArgument</i>).</li>
+ </ol>
+ </li>
+ <li>Let <i>calleeContext</i> be <a href="#sec-prepareforordinarycall">PrepareForOrdinaryCall</a>(<i>F</i>,
+ <i>newTarget</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>calleeContext</i> is now <a href="#sec-execution-contexts">the
+ running execution context</a>.</li>
+ <li>If <i>kind</i> is <code>"base"</code>, perform <a href="#sec-ordinarycallbindthis">OrdinaryCallBindThis</a>(<i>F</i>,
+ <i>calleeContext</i>, <i>thisArgument</i>).</li>
+ <li>Let <i>constructorEnv</i> be the <a href="#sec-execution-contexts">LexicalEnvironment</a> of
+ <i>calleeContext</i>.</li>
+ <li>Let <i>envRec</i> be <i>constructorEnv</i>&rsquo;s EnvironmentRecord.</li>
+ <li>Let <i>result</i> be <a href="#sec-ordinarycallevaluatebody">OrdinaryCallEvaluateBody</a>(<i>F</i>,
+ <i>argumentsList</i>).</li>
+ <li>Remove <i>calleeContext</i> from <a href="#sec-execution-contexts">the execution context stack</a> and restore
+ <i>callerContext</i> as <a href="#sec-execution-contexts">the running execution context</a>.</li>
+ <li>If <i>result</i>.[[type]] is <span style="font-family: sans-serif">return</span>, then
+ <ol class="block">
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>result</i>.[[value]]) is Object, return <a
+ href="#sec-normalcompletion">NormalCompletion</a>(<i>result</i>.[[value]]).</li>
+ <li>If <i>kind</i> is <code>"base"</code>, return <a
+ href="#sec-normalcompletion">NormalCompletion</a>(<i>thisArgument</i>).</li>
+ <li>If <i>result</i>.[[value]] is not <b>undefined</b>, throw a <b>TypeError</b> exception.</li>
+ </ol>
+ </li>
+ <li>Else, <a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>result</i>).</li>
+ <li>Return <i>envRec</i>.GetThisBinding().</li>
+ </ol>
+ </section>
+
+ <section id="sec-functionallocate">
+ <h1><span class="secnum" id="sec-9.2.3"><a href="#sec-functionallocate" title="link to this section">9.2.3</a></span>
+ FunctionAllocate (functionPrototype, strict [,functionKind] )</h1>
+
+ <p>The abstract operation FunctionAllocate requires the two arguments <span style="font-family: Times New
+ Roman"><i>functionPrototype</i> and <i>strict</i>.</span> It also accepts one optional argument, <var>functionKind</var>.
+ FunctionAllocate performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>functionPrototype</i>) is Object.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: If <i>functionKind</i> is present, its value is either
+ <code>"normal"</code>, <code>"non-constructor"</code> or <code>"generator"</code>.</li>
+ <li>If <i>functionKind</i> is not present, let <i>functionKind</i> be <code>"normal"</code>.</li>
+ <li>If <i>functionKind</i> is <code>"non-constructor"</code>, then
+ <ol class="block">
+ <li>Let <i>functionKind</i> be <code>"normal"</code>.</li>
+ <li>Let <i>needsConstruct</i> be <b>false</b>.</li>
+ </ol>
+ </li>
+ <li>Else let <i>needsConstruct</i> be <b>true</b>.</li>
+ <li>Let <i>F</i> be a newly created <a href="#sec-ecmascript-function-objects">ECMAScript function object</a> with the
+ internal slots listed in <a href="#table-27">Table 27</a>. All of those internal slots are initialized to
+ <b>undefined</b>.</li>
+ <li>Set <i>F</i>&rsquo;s essential internal methods to the default ordinary object definitions specified in <a
+ href="#sec-ordinary-object-internal-methods-and-internal-slots">9.1</a>.</li>
+ <li>Set <i>F</i>&rsquo;s [[Call]] internal method to the definition specified in <a
+ href="#sec-ecmascript-function-objects-call-thisargument-argumentslist">9.2.1</a>.</li>
+ <li>If <i>needsConstruct</i> is <b>true</b>, then
+ <ol class="block">
+ <li>Set <i>F</i>&rsquo;s [[Construct]] internal method to the definition specified in <a
+ href="#sec-ecmascript-function-objects-construct-argumentslist-newtarget">9.2.2</a>.</li>
+ <li>If <i>functionKind</i> is <code>"generator"</code>, set the [[ConstructorKind]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>F</i> to
+ <code>"derived"</code>.</li>
+ <li>Else, set the [[ConstructorKind]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of
+ <i>F</i> to <code>"base"</code>.</li>
+ <li>NOTE Generator functions are tagged as <code>"derived"</code> constructors to prevent [[Construct]] from
+ preallocating a generator instance. Generator instance objects are allocated when EvaluateBody is applied to the
+ <span class="nt">GeneratorBody</span> of a generator function.</li>
+ </ol>
+ </li>
+ <li>Set the [[Strict]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>F</i> to
+ <i>strict</i>.</li>
+ <li>Set the [[FunctionKind]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>F</i> to
+ <i>functionKind</i>.</li>
+ <li>Set the [[Prototype]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>F</i> to
+ <i>functionPrototype</i>.</li>
+ <li>Set the [[Extensible]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>F</i> to
+ <b>true</b>.</li>
+ <li>Set the [[Realm]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>F</i> to <a
+ href="#sec-execution-contexts">the running execution context</a>&rsquo;s <a href="#sec-code-realms">Realm</a>.</li>
+ <li>Return <i>F</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-functioninitialize">
+ <h1><span class="secnum" id="sec-9.2.4"><a href="#sec-functioninitialize" title="link to this section">9.2.4</a></span>
+ FunctionInitialize (F, kind, ParameterList, Body, Scope)</h1>
+
+ <p>The abstract operation FunctionInitialize requires the arguments: a function object <var>F</var>, <var>kind</var> which
+ is one of (Normal, Method, Arrow), a parameter list production specified by <span class="nt">ParameterList</span>, a body
+ production specified by <span class="nt">Body</span>, a <a href="#sec-lexical-environments">Lexical Environment</a>
+ specified by <span style="font-family: Times New Roman"><i>Scope</i>.</span> FunctionInitialize performs the following
+ steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>F</i> is an extensible object that does not have a
+ <code>length</code> own property.</li>
+ <li>Let <i>len</i> be the ExpectedArgumentCount of <i>ParameterList</i>.</li>
+ <li>Let <i>status</i> be <a href="#sec-definepropertyorthrow">DefinePropertyOrThrow</a>(<i>F</i>, <code>"length"</code>,
+ PropertyDescriptor{[[Value]]: <i>len</i>, [[Writable]]: <b>false</b>, [[Enumerable]]: <b>false</b>, [[Configurable]]:
+ <b>true</b>}).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>status</i> is not an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ <li>Let <i>Strict</i> be the value of the [[Strict]] <a href="#sec-object-internal-methods-and-internal-slots">internal
+ slot</a> of <i>F</i>.</li>
+ <li>Set the [[Environment]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>F</i> to the
+ value of <i>Scope</i>.</li>
+ <li>Set the [[FormalParameters]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>F</i>
+ to <i>ParameterList</i> .</li>
+ <li>Set the [[ECMAScriptCode]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>F</i> to
+ <i>Body</i>.</li>
+ <li>If <i>kind</i> is <span style="font-family: sans-serif">Arrow</span>, set the [[ThisMode]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>F</i> to <span style="font-family:
+ sans-serif">lexical</span>.</li>
+ <li>Else if <i>Strict</i> is <b>true</b>, set the [[ThisMode]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>F</i> to <span style="font-family:
+ sans-serif">strict</span>.</li>
+ <li>Else set the [[ThisMode]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>F</i> to
+ <span style="font-family: sans-serif">global</span>.</li>
+ <li>Return <i>F</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-functioncreate">
+ <h1><span class="secnum" id="sec-9.2.5"><a href="#sec-functioncreate" title="link to this section">9.2.5</a></span>
+ FunctionCreate (kind, ParameterList, Body, Scope, Strict, prototype)</h1>
+
+ <p>The abstract operation FunctionCreate requires the arguments: <var>kind</var> which is one of (Normal, Method, Arrow), a
+ parameter list production specified by <span class="nt">ParameterList</span>, a body production specified by <span
+ class="nt">Body</span>, a <a href="#sec-lexical-environments">Lexical Environment</a> specified by <span
+ class="nt">Scope</span>, a Boolean flag <span class="nt">Strict</span>, and optionally, an object <span style="font-family:
+ Times New Roman"><i>prototype</i>.</span> FunctionCreate performs the following steps:</p>
+
+ <ol class="proc">
+ <li>If the <i>prototype</i> argument was not passed, then
+ <ol class="block">
+ <li>Let <i>prototype</i> be the intrinsic object %FunctionPrototype%.</li>
+ </ol>
+ </li>
+ <li>If <i>kind</i> is not <span style="font-family: sans-serif">Normal</span>, let <i>allocKind</i> be
+ <code>"non-constructor"</code>.</li>
+ <li>Else let <i>allocKind</i> be <code>"normal"</code>.</li>
+ <li>Let <i>F</i> be <a href="#sec-functionallocate">FunctionAllocate</a>(<i>prototype</i>, <i>Strict</i>,
+ <i>allocKind</i>).</li>
+ <li>Return <a href="#sec-functioninitialize">FunctionInitialize</a>(<i>F</i>, <i>kind</i>, <i>ParameterList</i>,
+ <i>Body</i>, <i>Scope</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-generatorfunctioncreate">
+ <h1><span class="secnum" id="sec-9.2.6"><a href="#sec-generatorfunctioncreate" title="link to this section">9.2.6</a></span>
+ GeneratorFunctionCreate (kind, ParameterList, Body, Scope, Strict)</h1>
+
+ <p>The abstract operation GeneratorFunctionCreate requires the arguments: <var>kind</var> which is one of (Normal, Method),
+ a parameter list production specified by <span class="nt">ParameterList</span>, a body production specified by <span
+ class="nt">Body</span>, a <a href="#sec-lexical-environments">Lexical Environment</a> specified by <span
+ class="nt">Scope</span>, and a Boolean flag <span class="nt">Strict</span>. GeneratorFunctionCreate performs the following
+ steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>functionPrototype</i> be the intrinsic object %Generator%.</li>
+ <li>Let <i>F</i> be <a href="#sec-functionallocate">FunctionAllocate</a>(<i>functionPrototype</i>, <i>Strict</i>,
+ <code>"generator"</code>).</li>
+ <li>Return <a href="#sec-functioninitialize">FunctionInitialize</a>(<i>F</i>, <i>kind</i>, <i>ParameterList</i>,
+ <i>Body</i>, <i>Scope</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-addrestrictedfunctionproperties">
+ <div class="front">
+ <h1><span class="secnum" id="sec-9.2.7"><a href="#sec-addrestrictedfunctionproperties"
+ title="link to this section">9.2.7</a></span> AddRestrictedFunctionProperties ( F, realm )</h1>
+
+ <p>The abstract operation AddRestrictedFunctionProperties is called with a function object <var>F</var> and <a
+ href="#sec-code-realms">Realm</a> Record <var>realm</var> as its argument. It performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>realm</i>.[[intrinsics]].[[<span style="font-family:
+ sans-serif">%ThrowTypeError%]] exists and has been initialized.</span></li>
+ <li>Let <i>thrower</i> be <i>realm</i>.[[intrinsics]].[[<span style="font-family:
+ sans-serif">%ThrowTypeError%]].</span></li>
+ <li>Let <i>status</i> be <a href="#sec-definepropertyorthrow">DefinePropertyOrThrow</a>(<i>F</i>, <code>"caller"</code>,
+ PropertyDescriptor {[[Get]]: <i>thrower</i>, [[Set]]: <i>thrower</i>, [[Enumerable]]: <b>false</b>,
+ [[Configurable]]: <b>true</b>}).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>status</i> is not an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ <li>Return <a href="#sec-definepropertyorthrow">DefinePropertyOrThrow</a>(<i>F</i> , <code>"arguments"</code>,
+ PropertyDescriptor {[[Get]]: <i>thrower</i>, [[Set]]: <i>thrower</i>, [[Enumerable]]: <b>false</b>,
+ [[Configurable]]: <b>true</b>}).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: The above returned value is not an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ </ol>
+ </div>
+
+ <section id="sec-%throwtypeerror%">
+ <h1><span class="secnum" id="sec-9.2.7.1"><a href="#sec-%throwtypeerror%" title="link to this section">9.2.7.1</a></span>
+ %ThrowTypeError% ( )</h1>
+
+ <p>The %ThrowTypeError% intrinsic is an anonymous built-in function object that is defined once for each <a
+ href="#sec-code-realms">Realm</a>. When %ThrowTypeError% is called it performs the following steps:</p>
+
+ <ol class="proc">
+ <li>Throw a <b>TypeError</b> exception.</li>
+ </ol>
+
+ <p>The value of the [[Extensible]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of a
+ %ThrowTypeError% function is <span class="value">false</span>.</p>
+
+ <p>The <code>length</code> property of a %ThrowTypeError% function has the attributes {&nbsp;[[Writable]]: <b>false</b>,
+ [[Enumerable]]: <b>false</b>, [[Configurable]]: <b>false</b> }.</p>
+ </section>
+ </section>
+
+ <section id="sec-makeconstructor">
+ <h1><span class="secnum" id="sec-9.2.8"><a href="#sec-makeconstructor" title="link to this section">9.2.8</a></span>
+ MakeConstructor (F, writablePrototype, prototype)</h1>
+
+ <p>The abstract operation MakeConstructor requires a Function argument <var>F</var> and optionally, a Boolean
+ <var>writablePrototype</var> and an object <var>prototype</var>. If <var>prototype</var> is provided it is assumed to
+ already contain, if needed, a <code>"constructor"</code> property whose value is <var>F</var>. This operation converts
+ <var>F</var> into a constructor by performing the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>F</i> is an <a href="#sec-ecmascript-function-objects">ECMAScript
+ function object</a>.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>F</i> has a [[Construct]] internal method.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>F</i> is an extensible object that does not have a
+ <code>prototype</code> own property.</li>
+ <li>Let <i>installNeeded</i> be <b>false</b>.</li>
+ <li>If the <i>prototype</i> argument was not provided, then
+ <ol class="block">
+ <li>Let <i>installNeeded</i> be <b>true</b>.</li>
+ <li>Let <i>prototype</i> be <a href="#sec-objectcreate">ObjectCreate</a>(<span style="font-family:
+ sans-serif">%ObjectPrototype%</span>).</li>
+ </ol>
+ </li>
+ <li>If the <i>writablePrototype</i> argument was not provided, then
+ <ol class="block">
+ <li>Let <i>writablePrototype</i> be <b>true</b>.</li>
+ </ol>
+ </li>
+ <li>If <i>installNeeded</i>, then
+ <ol class="block">
+ <li>Let <i>status</i> be <a href="#sec-definepropertyorthrow">DefinePropertyOrThrow</a>(<i>prototype</i>,
+ <code>"constructor"</code>, PropertyDescriptor{[[Value]]: <i>F</i>, [[Writable]]: <i>writablePrototype</i>,
+ [[Enumerable]]: <b>false</b>, [[Configurable]]: <i>writablePrototype</i> }).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>status</i> is not an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ </ol>
+ </li>
+ <li>Let <i>status</i> be <a href="#sec-definepropertyorthrow">DefinePropertyOrThrow</a>(<i>F</i>,
+ <code>"prototype"</code>, PropertyDescriptor{[[Value]]: <i>prototype</i>, [[Writable]]: <i>writablePrototype</i>,
+ [[Enumerable]]: <b>false</b>, [[Configurable]]: <b>false</b>}).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>status</i> is not an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ <li>Return <a href="#sec-normalcompletion">NormalCompletion</a>(<b>undefined</b>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-makeclassconstructor">
+ <h1><span class="secnum" id="sec-9.2.9"><a href="#sec-makeclassconstructor" title="link to this section">9.2.9</a></span>
+ MakeClassConstructor ( F)</h1>
+
+ <p>The abstract operation MakeClassConstructor with argument <var>F</var> performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>F</i> is an <a href="#sec-ecmascript-function-objects">ECMAScript
+ function object</a>.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>F</i>&rsquo;s [[FunctionKind]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> is <code>"normal"</code>.</li>
+ <li>Set <i>F</i>&rsquo;s [[FunctionKind]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> to
+ <code>"classConstructor"</code>.</li>
+ <li>Return <a href="#sec-normalcompletion">NormalCompletion</a>(<b>undefined</b>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-makemethod">
+ <h1><span class="secnum" id="sec-9.2.10"><a href="#sec-makemethod" title="link to this section">9.2.10</a></span> MakeMethod
+ ( F, homeObject)</h1>
+
+ <p>The abstract operation MakeMethod with arguments <var>F</var> and <var>homeObject</var> configures <var>F</var> as a
+ method by performing the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>F</i> is an <a href="#sec-ecmascript-function-objects">ECMAScript
+ function object</a>.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>homeObject</i> ) is Object.</li>
+ <li>Set the [[HomeObject]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>F</i> to
+ <i>homeObject</i>.</li>
+ <li>Return <a href="#sec-normalcompletion">NormalCompletion</a>(<b>undefined</b>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-setfunctionname">
+ <h1><span class="secnum" id="sec-9.2.11"><a href="#sec-setfunctionname" title="link to this section">9.2.11</a></span>
+ SetFunctionName (F, name, prefix)</h1>
+
+ <p>The abstract operation SetFunctionName requires a Function argument <var>F</var>, a String or Symbol argument
+ <var>name</var> and optionally a String argument <var>prefix</var>. This operation adds a <code>name</code> property to
+ <var>F</var> by performing the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>F</i> is an extensible object that does not have a
+ <code>name</code> own property.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>name</i>)
+ is either Symbol or String.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: If <i>prefix</i> was passed then <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>prefix</i>) is String.</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>name</i>) is Symbol, then
+ <ol class="block">
+ <li>Let <i>description</i> be <i>name</i>&rsquo;s [[Description]] value.</li>
+ <li>If <i>description</i> is <b>undefined</b>, let <i>name</i> be the empty String.</li>
+ <li>Else, let <i>name</i> be the concatenation of <code>"["</code>, <i>description</i>, and <code>"]"</code>.</li>
+ </ol>
+ </li>
+ <li>If <i>prefix</i> was passed, then
+ <ol class="block">
+ <li>Let <i>name</i> be the concatenation of <i>prefix</i>, code unit 0x0020 (SPACE), and <i>name</i>.</li>
+ </ol>
+ </li>
+ <li>Return <a href="#sec-definepropertyorthrow">DefinePropertyOrThrow</a>(<i>F</i>, <code>"name"</code>,
+ PropertyDescriptor{[[Value]]: <i>name</i>, [[Writable]]: <b>false</b>, [[Enumerable]]: <b>false</b>, [[Configurable]]:
+ <b>true</b>}).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: the result is never an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-functiondeclarationinstantiation">
+ <h1><span class="secnum" id="sec-9.2.12"><a href="#sec-functiondeclarationinstantiation"
+ title="link to this section">9.2.12</a></span> FunctionDeclarationInstantiation(func, argumentsList)</h1>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> When an <a href="#sec-execution-contexts">execution context</a> is established for
+ evaluating an ECMAScript function a new function <a href="#sec-environment-records">Environment Record</a> is created and
+ bindings for each formal parameter are instantiated in that <a href="#sec-environment-records">Environment Record</a>.
+ Each declaration in the function body is also instantiated. If the function&rsquo;s formal parameters do not include any
+ default value initializers then the body declarations are instantiated in the same <a
+ href="#sec-environment-records">Environment Record</a> as the parameters. If default value parameter initializers exist, a
+ second <a href="#sec-environment-records">Environment Record</a> is created for the body declarations. Formal parameters
+ and functions are initialized as part of FunctionDeclarationInstantiation. All other bindings are initialized during
+ evaluation of the function body.</p>
+ </div>
+
+ <p>FunctionDeclarationInstantiation is performed as follows using arguments <var>func</var> and <var>argumentsList</var>.
+ <var>func</var> is the function object for which the <a href="#sec-execution-contexts">execution context</a> is being
+ established.</p>
+
+ <ol class="proc">
+ <li>Let <i>calleeContext</i> be <a href="#sec-execution-contexts">the running execution context</a>.</li>
+ <li>Let <i>env</i> be the <a href="#sec-execution-contexts">LexicalEnvironment</a> of <i>calleeContext</i>.</li>
+ <li>Let <i>envRec</i> be <i>env</i>&rsquo;s <a href="#sec-environment-records">Environment Record</a>.</li>
+ <li>Let <i>code</i> be the value of the [[ECMAScriptCode]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>func</i>.</li>
+ <li>Let <i>strict</i> be the value of the [[Strict]] <a href="#sec-object-internal-methods-and-internal-slots">internal
+ slot</a> of <i>func</i>.</li>
+ <li>Let <i>formals</i> be the value of the [[FormalParameters]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>func</i>.</li>
+ <li>Let <i>parameterNames</i> be the BoundNames of <i>formals</i>.</li>
+ <li>If <i>parameterNames</i> has any duplicate entries, let <i>hasDuplicates</i> be <b>true</b>. Otherwise, let
+ <i>hasDuplicates</i> be <b>false</b>.</li>
+ <li>Let <i>simpleParameterList</i> be IsSimpleParameterList of <i>formals</i>.</li>
+ <li>Let <i>hasParameterExpressions</i> be ContainsExpression of <i>formals.</i></li>
+ <li>Let <i>varNames</i> be the VarDeclaredNames of <i>code</i>.</li>
+ <li>Let <i>varDeclarations</i> be the VarScopedDeclarations of <i>code</i>.</li>
+ <li>Let <i>lexicalNames</i> be the LexicallyDeclaredNames of <i>code</i>.</li>
+ <li>Let <i>functionNames</i> be an empty <a href="#sec-list-and-record-specification-type">List</a>.</li>
+ <li>Let <i>functionsToInitialize</i> be an empty <a href="#sec-list-and-record-specification-type">List</a>.</li>
+ <li>For each <i>d</i> in <i>varDeclarations</i>, in reverse list order do
+ <ol class="block">
+ <li>If <i>d</i> is neither a <i>VariableDeclaration</i> or a <i>ForBinding</i>, then
+ <ol class="block">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>d</i> is either a <i>FunctionDeclaration</i> or a
+ <i>GeneratorDeclaration</i>.</li>
+ <li>Let <i>fn</i> be the sole element of the BoundNames of <i>d.</i></li>
+ <li>If <i>fn</i> is not an element of <i>functionNames</i>, then
+ <ol class="block">
+ <li>Insert <i>fn</i> as the first element of <i>functionNames</i>.</li>
+ <li>NOTE If there are multiple <span style="font-family: Times New Roman"><i>FunctionDeclarations</i> or
+ <i>GeneratorDeclarations</i></span> for the same name, the last declaration is used.</li>
+ <li>Insert <i>d</i> as the first element of <i>functionsToInitialize</i>.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Let <i>argumentsObjectNeeded</i> be <b>true</b>.</li>
+ <li>If the value of the [[ThisMode]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of
+ <i>func</i> is <span style="font-family: sans-serif">lexical</span>, then
+ <ol class="block">
+ <li>NOTE Arrow functions never have an arguments objects.</li>
+ <li>Let <i>argumentsObjectNeeded</i> be <b>false</b>.</li>
+ </ol>
+ </li>
+ <li>Else if <code>"arguments"</code> is an element of <i>parameterNames</i>, then
+ <ol class="block">
+ <li>Let <i>argumentsObjectNeeded</i> be <b>false</b>.</li>
+ </ol>
+ </li>
+ <li>Else if <i>hasParameterExpressions</i> is <b>false</b>, then
+ <ol class="block">
+ <li>If <code>"arguments"</code> is an element of <i>functionNames</i> or if <code>"arguments"</code> is an element of
+ <i>lexicalNames</i>, then
+ <ol class="block">
+ <li>Let <i>argumentsObjectNeeded</i> be <b>false</b>.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>For each String <i>paramName</i> in <i>parameterNames</i>, do
+ <ol class="block">
+ <li>Let <i>alreadyDeclared</i> be <i>envRec</i>.HasBinding(<i>paramName</i>).</li>
+ <li>NOTE Early errors ensure that duplicate parameter names can only occur in non-strict functions that do not have
+ parameter default values or rest parameters.</li>
+ <li>If <i>alreadyDeclared</i> is <b>false</b>, then
+ <ol class="block">
+ <li>Let <i>status</i> be <i>envRec</i>.CreateMutableBinding(<i>paramName</i>).</li>
+ <li>If <i>hasDuplicates</i> is <b>true</b>, then
+ <ol class="block">
+ <li>Let <i>status</i> be <i>envRec</i>.InitializeBinding(<i>paramName</i>, <b>undefined</b>).</li>
+ </ol>
+ </li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>status</i> is never an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a> for either of the above
+ operations.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>If <i>argumentsObjectNeeded</i> is <b>true</b>, then
+ <ol class="block">
+ <li>If <i>strict</i> is <b>true</b> or if <i>simpleParameterList</i> is <b>false</b>, then
+ <ol class="block">
+ <li>Let <i>ao</i> be <a
+ href="#sec-createunmappedargumentsobject">CreateUnmappedArgumentsObject</a>(<i>argumentsList</i>)<i>.</i></li>
+ </ol>
+ </li>
+ <li>Else,
+ <ol class="block">
+ <li>NOTE mapped argument object is only provided for non-strict functions that don&rsquo;t have a rest parameter,
+ any parameter default value initializers, or any destructured parameters .</li>
+ <li>Let <i>ao</i> be <a href="#sec-createmappedargumentsobject">CreateMappedArgumentsObject</a>(<i>func</i>,
+ <i>formals</i>, <i>argumentsList</i>, <i>env</i>).</li>
+ </ol>
+ </li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>ao</i>).</li>
+ <li>If <i>strict</i> is <b>true</b>, then
+ <ol class="block">
+ <li>Let <i>status</i> be <i>envRec</i>.CreateImmutableBinding(<code>"arguments"</code>).</li>
+ </ol>
+ </li>
+ <li>Else,
+ <ol class="block">
+ <li>Let <i>status</i> be <i>envRec</i>.CreateMutableBinding(<code>"arguments"</code>).</li>
+ </ol>
+ </li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>status</i> is never an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ <li><a href="#sec-call">Call</a> <i>envRec</i>.InitializeBinding(<code>"arguments"</code>, <i>ao</i>).</li>
+ <li>Append <code>"arguments"</code> to <i>parameterNames</i>.</li>
+ </ol>
+ </li>
+ <li>Let <i>iteratorRecord</i> be Record {[[iterator]]: <a
+ href="#sec-createlistiterator">CreateListIterator</a>(<i>argumentsList</i>), [[done]]: <b>false</b>}.</li>
+ <li>If <i>hasDuplicates</i> is <b>true</b>, then
+ <ol class="block">
+ <li>Let <i>formalStatus</i> be IteratorBindingInitialization for <i>formals</i> with <i>iteratorRecord</i> and
+ <b>undefined</b> as arguments.</li>
+ </ol>
+ </li>
+ <li>Else,
+ <ol class="block">
+ <li>Let <i>formalStatus</i> be IteratorBindingInitialization for <i>formals</i> with <i>iteratorRecord</i> and
+ <i>envRec</i> as arguments.</li>
+ </ol>
+ </li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>formalStatus</i>).</li>
+ <li>If <i>hasParameterExpressions</i> is <b>false</b>, then
+ <ol class="block">
+ <li>NOTE Only a single <a href="#sec-lexical-environments">lexical environment</a> is needed for the parameters and
+ top-level vars.</li>
+ <li>Let <i>instantiatedVarNames</i> be a copy of the <a href="#sec-list-and-record-specification-type">List</a>
+ <i>parameterNames</i>.</li>
+ <li>For each <i>n</i> in <i>varNames</i>, do
+ <ol class="block">
+ <li>If <i>n</i> is not an element of <i>instantiatedVarNames</i>, then
+ <ol class="block">
+ <li>Append <i>n</i> to <i>instantiatedVarNames</i>.</li>
+ <li>Let <i>status</i> be <i>envRec</i>.CreateMutableBinding(<i>n</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>status</i> is never an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ <li><a href="#sec-call">Call</a> <i>envRec</i>.InitializeBinding(<i>n</i>, <b>undefined</b>).</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Let <i>varEnv</i> be <i>env</i>.</li>
+ <li>Let <i>varEnvRec</i> be <i>envRec</i>.</li>
+ </ol>
+ </li>
+ <li>Else,
+ <ol class="block">
+ <li>NOTE A separate <a href="#sec-environment-records">Environment Record</a> is needed to ensure that closures
+ created by expressions in the formal parameter list do not have visibility of declarations in the function
+ body.</li>
+ <li>Let <i>varEnv</i> be <a href="#sec-newdeclarativeenvironment">NewDeclarativeEnvironment</a>(<i>env</i>).</li>
+ <li>Let <i>varEnvRec</i> be <i>varEnv</i>&rsquo;s EnvironmentRecord.</li>
+ <li>Set the <a href="#sec-execution-contexts">VariableEnvironment</a> of <i>calleeContext</i> to <i>varEnv</i>.</li>
+ <li>Let <i>instantiatedVarNames</i> be a new empty <a href="#sec-list-and-record-specification-type">List</a>.</li>
+ <li>For each <i>n</i> in <i>varNames</i>, do
+ <ol class="block">
+ <li>If <i>n</i> is not an element of <i>instantiatedVarNames</i>, then
+ <ol class="block">
+ <li>Append <i>n</i> to <i>instantiatedVarNames</i>.</li>
+ <li>Let <i>status</i> be <i>varEnvRec</i>.CreateMutableBinding(<i>n</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>status</i> is never an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ <li>If <i>n</i> is not an element of <i>parameterNames</i> or if <i>n</i> is an element of
+ <i>functionNames</i>, let <i>initialValue</i> be <b>undefined</b>.</li>
+ <li>else,
+ <ol class="block">
+ <li>Let <i>initialValue</i> be <i>envRec.</i>GetBindingValue(<i>n</i>, <b>false</b>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>initialValue</i>).</li>
+ </ol>
+ </li>
+ <li><a href="#sec-call">Call</a> <i>varEnvRec</i>.InitializeBinding(<i>n</i>, <i>initialValue</i>).</li>
+ <li>NOTE vars whose names are the same as a formal parameter, initially have the same value as the
+ corresponding initialized parameter.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>NOTE: Annex <a href="#sec-block-level-function-declarations-web-legacy-compatibility-semantics">B.3.3</a> adds
+ additional steps at this point.</li>
+ <li>If <i>strict</i> is <b>false</b>, then
+ <ol class="block">
+ <li>Let <i>lexEnv</i> be <a href="#sec-newdeclarativeenvironment">NewDeclarativeEnvironment</a>(<i>varEnv</i>).</li>
+ <li>NOTE: Non-strict functions use a separate lexical <a href="#sec-environment-records">Environment Record</a> for
+ top-level lexical declarations so that a direct <code>eval</code> (<a
+ href="#sec-function-calls-runtime-semantics-evaluation">see 12.3.4.1</a>) can determine whether any var scoped
+ declarations introduced by the eval code conflict with pre-existing top-level lexically scoped declarations. This
+ is not needed for strict functions because a strict direct <code>eval</code> always places all declarations into a
+ new <a href="#sec-environment-records">Environment Record</a>.</li>
+ </ol>
+ </li>
+ <li>Else, let <i>lexEnv</i> be <i>varEnv</i>.</li>
+ <li>Let <i>lexEnvRec</i> be <i>lexEnv</i>&rsquo;s EnvironmentRecord.</li>
+ <li>Set the <a href="#sec-execution-contexts">LexicalEnvironment</a> of <i>calleeContext</i> to <i>lexEnv</i>.</li>
+ <li>Let <i>lexDeclarations</i> be the LexicallyScopedDeclarations of <i>code</i>.</li>
+ <li>For each element <i>d</i> in <i>lexDeclarations</i> do
+ <ol class="block">
+ <li>NOTE A lexically declared name cannot be the same as a function/generator declaration, formal parameter, or a var
+ name. Lexically declared names are only instantiated here but not initialized.</li>
+ <li>For each element <i>dn</i> of the BoundNames of <i>d</i> do
+ <ol class="block">
+ <li>If IsConstantDeclaration of <i>d</i> is <b>true</b>, then
+ <ol class="block">
+ <li>Let <i>status</i> be <i>lexEnvRec</i>.CreateImmutableBinding(<i>dn</i>, <b>true</b>).</li>
+ </ol>
+ </li>
+ <li>Else,
+ <ol class="block">
+ <li>Let <i>status</i> be <i>lexEnvRec</i>.CreateMutableBinding(<i>dn</i>, <b>false</b>).</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>status</i> is never an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ </ol>
+ </li>
+ <li>For each parsed grammar phrase <i>f</i> in <i>functionsToInitialize</i>, do
+ <ol class="block">
+ <li>Let <i>fn</i> be the sole element of the BoundNames of <i>f.</i></li>
+ <li>Let <i>fo</i> be the result of performing InstantiateFunctionObject for <i>f</i> with argument <i>lexEnv</i>.</li>
+ <li>Let <i>status</i> be <i>varEnvRec</i>.SetMutableBinding(<i>fn</i>, <i>fo</i>, <b>false</b>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>status</i> is never an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ </ol>
+ </li>
+ <li>Return <a href="#sec-normalcompletion">NormalCompletion</a>(<span style="font-family: sans-serif">empty</span>).</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE 1</span> <a
+ href="#sec-block-level-function-declarations-web-legacy-compatibility-semantics">B.3.3</a> provides an extension to the
+ above algorithm that is necessary for backwards compatibility with web browser implementations of ECMAScript that predate
+ the sixth edition of ECMA-262.</p>
+ </div>
+
+ <div class="note">
+ <p><span class="nh">NOTE 2</span> Parameter <i>Initializers</i> may contain direct eval expressions (<a
+ href="#sec-function-calls-runtime-semantics-evaluation">12.3.4.1</a>). Any top level declarations of such evals are only
+ visible to the eval code (<a href="#sec-types-of-source-code">10.2</a>). The creation of the environment for such
+ declarations is described in <a
+ href="#sec-function-definitions-runtime-semantics-iteratorbindinginitialization">14.1.18</a>.</p>
+ </div>
+ </section>
+ </section>
+
+ <section id="sec-built-in-function-objects">
+ <div class="front">
+ <h1><span class="secnum" id="sec-9.3"><a href="#sec-built-in-function-objects" title="link to this section">9.3</a></span>
+ Built-in Function Objects</h1>
+
+ <p>The built-in function objects defined in this specification may be implemented as either ECMAScript function objects (<a
+ href="#sec-ecmascript-function-objects">9.2</a>) whose behaviour is provided using ECMAScript code or as implementation
+ provided exotic function objects whose behaviour is provided in some other manner. In either case, the effect of calling
+ such functions must conform to their specifications. An implementation may also provide additional built-in function objects
+ that are not defined in this specification.</p>
+
+ <p>If a built-in function object is implemented as an exotic object it must have the ordinary object behaviour specified in
+ <a href="#sec-ordinary-object-internal-methods-and-internal-slots">9.1</a>. All such exotic function objects also have
+ [[Prototype]], [[Extensible]], and [[Realm]] internal slots.</p>
+
+ <p>Unless otherwise specified every built-in function object has the %FunctionPrototype% object (<a
+ href="#sec-properties-of-the-function-prototype-object">19.2.3</a>) as the initial value of its [[Prototype]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</p>
+
+ <p>The behaviour specified for each built-in function via algorithm steps or other means is the specification of the
+ function body behaviour for both [[Call]] and [[Construct]] invocations of the function. However, [[Construct]] invocation
+ is not supported by all built-in functions. For each built-in function, when invoked with [[Call]], the [[Call]]
+ <var>thisArgument</var> provides the <span class="value">this</span> value, the [[Call]] <var>argumentsList</var> provides
+ the named parameters, and the NewTarget value is <span class="value">undefined</span>. When invoked with [[Construct]], the
+ <span class="value">this</span> value is uninitialized, the [[Construct]] <var>argumentsList</var> provides the named
+ parameters, and the [[Construct]] <var>newTarget</var> parameter provides the NewTarget value. If the built-in function is
+ implemented as an <a href="#sec-ecmascript-function-objects">ECMAScript function object</a> then this specified behaviour
+ must be implemented by the ECMAScript code that is the body of the function. Built-in functions that are ECMAScript function
+ objects must be strict mode functions. If a built-in constructor has any [[Call]] behaviour other than throwing a <span
+ class="value">TypeError</span> exception, an ECMAScript implementation of the function must be done in a manner that does
+ not cause the function&rsquo;s [[FunctionKind]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a>
+ to have the value <code>"classConstructor"</code>.</p>
+
+ <p>Built-in function objects that are not identified as constructors do not implement the [[Construct]] internal method
+ unless otherwise specified in the description of a particular function. When a built-in constructor is called as part of a
+ <code>new</code> expression the <var>argumentsList</var> parameter of the invoked [[Construct]] internal method provides the
+ values for the built-in constructor&rsquo;s named parameters.</p>
+
+ <p>Built-in functions that are not constructors do not have a <code>prototype</code> property unless otherwise specified in
+ the description of a particular function.</p>
+
+ <p>If a built-in function object is not implemented as an ECMAScript function it must provide [[Call]] and [[Construct]]
+ internal methods that conform to the following definitions:</p>
+ </div>
+
+ <section id="sec-built-in-function-objects-call-thisargument-argumentslist">
+ <h1><span class="secnum" id="sec-9.3.1"><a href="#sec-built-in-function-objects-call-thisargument-argumentslist"
+ title="link to this section">9.3.1</a></span> [[Call]] ( thisArgument, argumentsList)</h1>
+
+ <p>The [[Call]] internal method for a built-in function object <var>F</var> is called with parameters
+ <var>thisArgument</var> and <var>argumentsList</var>, a <a href="#sec-list-and-record-specification-type">List</a> of <a
+ href="#sec-ecmascript-language-types">ECMAScript language values</a>. The following steps are taken:</p>
+
+ <ol class="proc">
+ <li>Let <i>callerContext</i> be <a href="#sec-execution-contexts">the running execution context</a>.</li>
+ <li>If <i>callerContext</i> is not already <a href="#sec-execution-contexts">suspended</a>, <a
+ href="#sec-execution-contexts">Suspend</a> <i>callerContext</i>.</li>
+ <li>Let <i>calleeContext</i> be a new <a href="#sec-execution-contexts">ECMAScript code execution context</a>.</li>
+ <li>Set the Function of <i>calleeContext</i> to <i>F</i>.</li>
+ <li>Let <i>calleeRealm</i> be the value of <i>F&rsquo;s</i> [[Realm]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>Set the <a href="#sec-code-realms">Realm</a> of <i>calleeContext</i> to <i>calleeRealm</i>.</li>
+ <li>Perform any necessary implementation defined initialization of <i>calleeContext</i>.</li>
+ <li>Push <i>calleeContext</i> onto <a href="#sec-execution-contexts">the execution context stack</a>; <i>calleeContext</i>
+ is now <a href="#sec-execution-contexts">the running execution context</a>.</li>
+ <li>Let <i>result</i> be the <a href="#sec-completion-record-specification-type">Completion Record</a> that is the result
+ of evaluating <i>F</i> in an implementation defined manner that conforms to the specification of <i>F</i>.
+ <i>thisArgument</i> is the <b>this</b> value, <i>argumentsList</i> provides the named parameters, and the NewTarget
+ value is <b>undefined</b>.</li>
+ <li>Remove <i>calleeContext</i> from <a href="#sec-execution-contexts">the execution context stack</a> and restore
+ <i>callerContext</i> as <a href="#sec-execution-contexts">the running execution context</a>.</li>
+ <li>Return <i>result</i>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE 1</span> When <i>calleeContext</i> is removed from <a href="#sec-execution-contexts">the
+ execution context stack</a> it must not be destroyed if it has been <a href="#sec-execution-contexts">suspended</a> and
+ retained by an accessible generator object for later resumption<i>.</i></p>
+ </div>
+ </section>
+
+ <section id="sec-built-in-function-objects-construct-argumentslist-newtarget">
+ <h1><span class="secnum" id="sec-9.3.2"><a href="#sec-built-in-function-objects-construct-argumentslist-newtarget"
+ title="link to this section">9.3.2</a></span> [[Construct]] (argumentsList, newTarget)</h1>
+
+ <p>The [[Construct]] internal method for built-in function object <var>F</var> is called with parameters
+ <var>argumentsList</var> and <var>newTarget</var>. The steps performed are the same as [[Call]] (<a
+ href="#sec-built-in-function-objects-call-thisargument-argumentslist">see 9.3.1</a>) except that step 9 is replaced by:</p>
+
+ <ol class="proc">
+ <li>Let <i>result</i> be the <a href="#sec-completion-record-specification-type">Completion Record</a> that is the result
+ of evaluating <i>F</i> in an implementation defined manner that conforms to the specification of <i>F</i>. The
+ <b>this</b> value is uninitialized, <i>argumentsList</i> provides the named parameters, and <i>newTarget</i> provides
+ the NewTarget value.</li>
+ </ol>
+ </section>
+
+ <section id="sec-createbuiltinfunction">
+ <h1><span class="secnum" id="sec-9.3.3"><a href="#sec-createbuiltinfunction" title="link to this section">9.3.3</a></span>
+ CreateBuiltinFunction(realm, steps, prototype, internalSlotsList)</h1>
+
+ <p>The abstract operation CreateBuiltinFunction takes arguments <span style="font-family: Times New Roman"><i>realm</i>,
+ <i>prototype</i>,</span> and <var>steps</var>. The optional argument <var>internalSlotsList</var> is a <a
+ href="#sec-list-and-record-specification-type">List</a> of the names of additional internal slots that must be defined as
+ part of the object. If the list is not provided, an empty <a href="#sec-list-and-record-specification-type">List</a> is
+ used. CreateBuiltinFunction returns a built-in function object created by the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>realm</i> is a <a href="#sec-code-realms">Realm</a> Record.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>steps</i> is either a set of algorithm steps or other definition
+ of a functions behaviour provided in this specification.</li>
+ <li>Let <i>func</i> be a new built-in function object that when called performs the action described by <i>steps</i>. The
+ new function object has internal slots whose names are the elements of <i>internalSlotsList</i>. The initial value of
+ each of those internal slots is <b>undefined<i>.</i></b></li>
+ <li>Set the [[Realm]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>func</i> to
+ <i>realm</i>.</li>
+ <li>Set the [[Prototype]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>func</i> to
+ <i>prototype</i>.</li>
+ <li>Return <i>func</i>.</li>
+ </ol>
+
+ <p>Each built-in function defined in this specification is created as if by calling the CreateBuiltinFunction abstract
+ operation, unless otherwise specified.</p>
+ </section>
+ </section>
+
+ <section id="sec-built-in-exotic-object-internal-methods-and-slots">
+ <div class="front">
+ <h1><span class="secnum" id="sec-9.4"><a href="#sec-built-in-exotic-object-internal-methods-and-slots"
+ title="link to this section">9.4</a></span> Built-in Exotic Object Internal Methods and Slots</h1>
+
+ <p>This specification defines several kinds of built-in exotic objects. These objects generally behave similar to ordinary
+ objects except for a few specific situations. The following exotic objects use the ordinary object internal methods except
+ where it is explicitly specified otherwise below:</p>
+ </div>
+
+ <section id="sec-bound-function-exotic-objects">
+ <div class="front">
+ <h1><span class="secnum" id="sec-9.4.1"><a href="#sec-bound-function-exotic-objects"
+ title="link to this section">9.4.1</a></span> Bound Function Exotic Objects</h1>
+
+ <p>A <i>bound function</i> is an exotic object that wraps another function object. A bound function is callable (it has a
+ [[Call]] internal method and may have a [[Construct]] internal method). Calling a bound function generally results in a
+ call of its wrapped function.</p>
+
+ <p>Bound function objects do not have the internal slots of ECMAScript function objects defined in <a
+ href="#table-27">Table 27</a>. Instead they have the internal slots defined in <a href="#table-28">Table 28</a>.</p>
+
+ <figure>
+ <figcaption><span id="table-28">Table 28</span> &mdash; Internal Slots of Exotic Bound Function Objects</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Internal Slot</th>
+ <th>Type</th>
+ <th>Description</th>
+ </tr>
+ <tr>
+ <td>[[BoundTargetFunction]]</td>
+ <td>Callable Object</td>
+ <td>The wrapped function object.</td>
+ </tr>
+ <tr>
+ <td>[[BoundThis]]</td>
+ <td>Any</td>
+ <td>The value that is always passed as the <b>this</b> value when calling the wrapped function.</td>
+ </tr>
+ <tr>
+ <td>[[BoundArguments]]</td>
+ <td><a href="#sec-list-and-record-specification-type">List</a> of Any</td>
+ <td>A list of values whose elements are used as the first arguments to any call to the wrapped function.</td>
+ </tr>
+ </table>
+ </figure>
+
+ <p>Unlike ECMAScript function objects, bound function objects do not use an alternative definition of the
+ [[GetOwnProperty]] internal methods. Bound function objects provide all of the essential internal methods as specified in
+ <a href="#sec-ordinary-object-internal-methods-and-internal-slots">9.1</a>. However, they use the following definitions
+ for the essential internal methods of function objects.</p>
+ </div>
+
+ <section id="sec-bound-function-exotic-objects-call-thisargument-argumentslist">
+ <h1><span class="secnum" id="sec-9.4.1.1"><a href="#sec-bound-function-exotic-objects-call-thisargument-argumentslist"
+ title="link to this section">9.4.1.1</a></span> [[Call]] ( thisArgument, argumentsList)</h1>
+
+ <p>When the [[Call]] internal method of an exotic <a href="#sec-bound-function-exotic-objects">bound function</a> object,
+ <var>F</var>, which was created using the bind function is called with parameters <var>thisArgument</var> and
+ <var>argumentsList</var>, a <a href="#sec-list-and-record-specification-type">List</a> of <a
+ href="#sec-ecmascript-language-types">ECMAScript language values</a>, the following steps are taken:</p>
+
+ <ol class="proc">
+ <li>Let <i>target</i> be the value of <i>F&rsquo;s</i> <a
+ href="#sec-bound-function-exotic-objects">[[BoundTargetFunction]]</a> <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>Let <i>boundThis</i> be the value of <i>F&rsquo;s</i> <a href="#sec-bound-function-exotic-objects">[[BoundThis]]</a>
+ <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>Let <i>boundArgs</i> be the value of <i>F&rsquo;s</i> <a
+ href="#sec-bound-function-exotic-objects">[[BoundArguments]]</a> <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>Let <i>args</i> be a new list containing the same values as the list <i>boundArgs</i> in the same order followed by
+ the same values as the list <i>argumentsList</i> in the same order.</li>
+ <li>Return <a href="#sec-call">Call</a>(<i>target</i>, <i>boundThis</i>, <i>args</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-bound-function-exotic-objects-construct-argumentslist-newtarget">
+ <h1><span class="secnum" id="sec-9.4.1.2"><a href="#sec-bound-function-exotic-objects-construct-argumentslist-newtarget"
+ title="link to this section">9.4.1.2</a></span> [[Construct]] (argumentsList, newTarget)</h1>
+
+ <p>When the [[Construct]] internal method of an exotic <a href="#sec-bound-function-exotic-objects">bound function</a>
+ object, <var>F</var> that was created using the bind function is called with a list of arguments <span style="font-family:
+ Times New Roman"><i>argumentsList</i> and <i>newTarget</i></span>, the following steps are taken:</p>
+
+ <ol class="proc">
+ <li>Let <i>target</i> be the value of <i>F&rsquo;s</i> <a
+ href="#sec-bound-function-exotic-objects">[[BoundTargetFunction]]</a> <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>target</i> has a [[Construct]] internal method.</li>
+ <li>Let <i>boundArgs</i> be the value of <i>F&rsquo;s</i> <a
+ href="#sec-bound-function-exotic-objects">[[BoundArguments]]</a> <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>Let <i>args</i> be a new list containing the same values as the list <i>boundArgs</i> in the same order followed by
+ the same values as the list <i>argumentsList</i> in the same order.</li>
+ <li>If <a href="#sec-samevalue">SameValue</a>(<i>F</i>, <i>newTarget</i>) is <b>true</b>, let <i>newTarget</i> be
+ <i>target</i>.</li>
+ <li>Return <a href="#sec-construct">Construct</a>(<i>target</i>, <i>args</i>, <i>newTarget</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-boundfunctioncreate">
+ <h1><span class="secnum" id="sec-9.4.1.3"><a href="#sec-boundfunctioncreate"
+ title="link to this section">9.4.1.3</a></span> BoundFunctionCreate (targetFunction, boundThis, boundArgs)</h1>
+
+ <p>The abstract operation BoundFunctionCreate with arguments <var>targetFunction</var>, <var>boundThis</var> and
+ <var>boundArgs</var> is used to specify the creation of new <a href="#sec-bound-function-exotic-objects">Bound
+ Function</a> exotic objects. It performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>targetFunction</i>) is Object.</li>
+ <li>Let <i>proto</i> be <i>targetFunction</i>.[[GetPrototypeOf]]().</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>proto</i>).</li>
+ <li>Let <i>obj</i> be a newly created object.</li>
+ <li>Set <i>obj</i>&rsquo;s essential internal methods to the default ordinary object definitions specified in <a
+ href="#sec-ordinary-object-internal-methods-and-internal-slots">9.1</a>.</li>
+ <li>Set the [[Call]] internal method of <i>obj</i> as described in <a
+ href="#sec-bound-function-exotic-objects-call-thisargument-argumentslist">9.4.1.1</a>.</li>
+ <li>If <i>targetFunction</i> has a [[Construct]] internal method, then
+ <ol class="block">
+ <li>Set the [[Construct]] internal method of <i>obj</i> as described in <a
+ href="#sec-bound-function-exotic-objects-construct-argumentslist-newtarget">9.4.1.2</a>.</li>
+ </ol>
+ </li>
+ <li>Set the [[Prototype]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>obj</i> to
+ <i>proto</i>.</li>
+ <li>Set the [[Extensible]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>obj</i> to
+ <b>true</b>.</li>
+ <li>Set the <a href="#sec-bound-function-exotic-objects">[[BoundTargetFunction]]</a> <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>obj</i> to
+ <i>targetFunction</i>.</li>
+ <li>Set the <a href="#sec-bound-function-exotic-objects">[[BoundThis]]</a> <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>obj</i> to the value of
+ <i>boundThis</i>.</li>
+ <li>Set the <a href="#sec-bound-function-exotic-objects">[[BoundArguments]]</a> <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>obj</i> to <i>boundArgs</i>.</li>
+ <li>Return <i>obj</i>.</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-array-exotic-objects">
+ <div class="front">
+ <h1><span class="secnum" id="sec-9.4.2"><a href="#sec-array-exotic-objects" title="link to this section">9.4.2</a></span>
+ Array Exotic Objects</h1>
+
+ <p>An <i>Array object</i> is an exotic object that gives special treatment to array index property keys (<a
+ href="#sec-object-type">see 6.1.7</a>). A property whose property name is an array index is also called an <i>element</i>.
+ Every Array object has a <code>length</code> property whose value is always a nonnegative integer less than <span
+ style="font-family: Times New Roman">2<sup>32</sup></span>. The value of the <code>length</code> property is numerically
+ greater than the name of every own property whose name is an array index; whenever an own property of an Array object is
+ created or changed, other properties are adjusted as necessary to maintain this invariant. Specifically, whenever an own
+ property is added whose name is an array index, the value of the <code>length</code> property is changed, if necessary, to
+ be one more than the numeric value of that array index; and whenever the value of the <code>length</code> property is
+ changed, every own property whose name is an array index whose value is not smaller than the new length is deleted. This
+ constraint applies only to own properties of an Array object and is unaffected by <code>length</code> or array index
+ properties that may be inherited from its prototypes.</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> A String property name <i>P</i> is an <i>array index</i> if and only if <a
+ href="#sec-tostring">ToString</a>(<a href="#sec-touint32">ToUint32</a>(<i>P</i>)) is equal to <i>P</i> and <a
+ href="#sec-touint32">ToUint32</a>(<i>P</i>) is not equal to 2<sup>32</sup>&minus;1.</p>
+ </div>
+
+ <p>Array exotic objects always have a non-configurable property named <code>"length"</code>.</p>
+
+ <p>Array exotic objects provide an alternative definition for the [[DefineOwnProperty]] internal method. Except for that
+ internal method, Array exotic objects provide all of the other essential internal methods as specified in <a
+ href="#sec-ordinary-object-internal-methods-and-internal-slots">9.1</a>.</p>
+ </div>
+
+ <section id="sec-array-exotic-objects-defineownproperty-p-desc">
+ <h1><span class="secnum" id="sec-9.4.2.1"><a href="#sec-array-exotic-objects-defineownproperty-p-desc"
+ title="link to this section">9.4.2.1</a></span> [[DefineOwnProperty]] ( P, Desc)</h1>
+
+ <p>When the [[DefineOwnProperty]] internal method of an <a href="#sec-array-exotic-objects">Array exotic object</a>
+ <var>A</var> is called with <a href="#sec-object-type">property key</a> <var>P</var>, and <a
+ href="#sec-property-descriptor-specification-type">Property Descriptor</a> <span class="nt">Desc</span> the following
+ steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>If <i>P</i> is <code>"length"</code>, then
+ <ol class="block">
+ <li>Return <a href="#sec-arraysetlength">ArraySetLength</a>(<i>A</i>, <i>Desc</i>).</li>
+ </ol>
+ </li>
+ <li>Else if <i>P</i> is an array index, then
+ <ol class="block">
+ <li>Let <i>oldLenDesc</i> be <a href="#sec-ordinarygetownproperty">OrdinaryGetOwnProperty</a>(<i>A</i>,
+ <code>"length"</code>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>oldLenDesc</i> will never be <b>undefined</b> or an accessor
+ descriptor because Array objects are created with a length data property that cannot be deleted or
+ reconfigured.</li>
+ <li>Let <i>oldLen</i> be <i>oldLenDesc</i>.[[Value]].</li>
+ <li>Let <i>index</i> be <a href="#sec-touint32">ToUint32</a>(<i>P</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>index</i> will never be an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ <li>If <i>index</i> &ge; <i>oldLen</i> and <i>oldLenDesc</i>.[[Writable]] is <b>false</b>, return <b>false</b>.</li>
+ <li>Let <i>succeeded</i> be <a href="#sec-ordinarydefineownproperty">OrdinaryDefineOwnProperty</a>(<i>A</i>,
+ <i>P</i>, <i>Desc</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>succeeded</i> is not an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ <li>If <i>succeeded</i> is <b>false</b>, return <b>false</b>.</li>
+ <li>If <i>index</i> &ge; <i>oldLen</i>
+ <ol class="block">
+ <li>Set <i>oldLenDesc</i>.[[Value]] to <i>index</i> + 1.</li>
+ <li>Let <i>succeeded</i> be <a href="#sec-ordinarydefineownproperty">OrdinaryDefineOwnProperty</a>(<i>A</i>,
+ <code>"length"</code>, <i>oldLenDesc</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>succeeded</i> is <b>true</b>.</li>
+ </ol>
+ </li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+ </li>
+ <li>Return <a href="#sec-ordinarydefineownproperty">OrdinaryDefineOwnProperty</a>(<i>A</i>, <i>P</i>, <i>Desc</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-arraycreate">
+ <h1><span class="secnum" id="sec-9.4.2.2"><a href="#sec-arraycreate" title="link to this section">9.4.2.2</a></span>
+ ArrayCreate(length, proto)</h1>
+
+ <p>The abstract operation ArrayCreate with argument <var>length</var> (a positive integer) and optional argument
+ <var>proto</var> is used to specify the creation of new Array exotic objects. It performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>length</i> is an integer Number &ge; 0.</li>
+ <li>If <i>length</i> is &minus;0, let <i>length</i> be +0.</li>
+ <li>If <i>length</i>&gt;2<sup>32</sup>-1, throw a <b>RangeError</b> exception.</li>
+ <li>If the <i>proto</i> argument was not passed, let <i>proto</i> be the intrinsic object <span style="font-family:
+ sans-serif">%ArrayPrototype%</span>.</li>
+ <li>Let <i>A</i> be a newly created <a href="#sec-array-exotic-objects">Array exotic object</a>.</li>
+ <li>Set <i>A</i>&rsquo;s essential internal methods except for [[DefineOwnProperty]] to the default ordinary object
+ definitions specified in <a href="#sec-ordinary-object-internal-methods-and-internal-slots">9.1</a>.</li>
+ <li>Set the [[DefineOwnProperty]] internal method of <i>A</i> as specified in <a
+ href="#sec-array-exotic-objects-defineownproperty-p-desc">9.4.2.1</a>.</li>
+ <li>Set the [[Prototype]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>A</i> to
+ <i>proto</i>.</li>
+ <li>Set the [[Extensible]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>A</i> to
+ <b>true</b>.</li>
+ <li>Perform <a href="#sec-ordinarydefineownproperty">OrdinaryDefineOwnProperty</a>(<i>A</i>, <code>"length"</code>,
+ PropertyDescriptor{[[Value]]: <i>length</i>, [[Writable]]: <b>true</b>, [[Enumerable]]: <b>false</b>,
+ [[Configurable]]: <b>false</b>}).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: the preceding step never produces an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ <li>Return <i>A</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-arrayspeciescreate">
+ <h1><span class="secnum" id="sec-9.4.2.3"><a href="#sec-arrayspeciescreate"
+ title="link to this section">9.4.2.3</a></span> ArraySpeciesCreate(originalArray, length)</h1>
+
+ <p>The abstract operation ArraySpeciesCreate with arguments <var>originalArray</var> and <var>length</var> is used to
+ specify the creation of a new Array object using a constructor function that is derived from <var>originalArray</var>. It
+ performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>length</i> is an integer Number &ge; 0.</li>
+ <li>If <i>length</i> is &minus;0, let <i>length</i> be +0.</li>
+ <li>Let <i>C</i> be <b>undefined</b>.</li>
+ <li>Let <i>isArray</i> be <a href="#sec-isarray">IsArray</a>(<i>originalArray</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>isArray</i>).</li>
+ <li>If <i>isArray</i> is <b>true</b>, then
+ <ol class="block">
+ <li>Let <i>C</i> be <a href="#sec-get-o-p">Get</a>(<i>originalArray</i>, <code>"constructor"</code>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>C</i>).</li>
+ <li>If <a href="#sec-isconstructor">IsConstructor</a>(<i>C</i>) is <b>true</b>, then
+ <ol class="block">
+ <li>Let <i>thisRealm</i> be <a href="#sec-execution-contexts">the running execution context</a>&rsquo;s <a
+ href="#sec-code-realms">Realm</a>.</li>
+ <li>Let <i>realmC</i> be <a href="#sec-getfunctionrealm">GetFunctionRealm</a>(<i>C</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>realmC</i>).</li>
+ <li>If <i>thisRealm</i> and <i>realmC</i> are not the same <a href="#sec-code-realms">Realm</a> Record, then
+ <ol class="block">
+ <li>If <a href="#sec-samevalue">SameValue</a>(<i>C</i>, <i>realmC</i>.[[intrinsics]].[[%Array%]]) is
+ <b>true</b>, let <i>C</i> be <b>undefined</b>.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>C</i>) is Object, then
+ <ol class="block">
+ <li>Let <i>C</i> be <a href="#sec-get-o-p">Get</a>(<i>C</i>, @@species).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>C</i>).</li>
+ <li>If <i>C</i> is <b>null</b>, let <i>C</i> be <b>undefined</b>.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>If <i>C</i> is <b>undefined</b>, return <a href="#sec-arraycreate">ArrayCreate</a>(<i>length</i>).</li>
+ <li>If <a href="#sec-isconstructor">IsConstructor</a>(<i>C</i>) is <b>false</b>, throw a <b>TypeError</b>
+ exception<i>.</i></li>
+ <li>Return <a href="#sec-construct">Construct</a>(<i>C</i>, &laquo;<i>length</i>&raquo;).</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> If <i>originalArray</i> was created using the standard built-in Array constructor for a
+ <a href="#sec-code-realms">Realm</a> that is not the <a href="#sec-code-realms">Realm</a> of <a
+ href="#sec-execution-contexts">the running execution context</a>, then a new Array is created using the <a
+ href="#sec-code-realms">Realm</a> of <a href="#sec-execution-contexts">the running execution context</a>. This maintains
+ compatibility with Web browsers that have historically had that behaviour for the Array.prototype methods that now are
+ defined using ArraySpeciesCreate.</p>
+ </div>
+ </section>
+
+ <section id="sec-arraysetlength">
+ <h1><span class="secnum" id="sec-9.4.2.4"><a href="#sec-arraysetlength" title="link to this section">9.4.2.4</a></span>
+ ArraySetLength(A, Desc)</h1>
+
+ <p>When the abstract operation ArraySetLength is called with an <a href="#sec-array-exotic-objects">Array exotic
+ object</a> <span style="font-family: Times New Roman"><i>A</i>,</span> and <a
+ href="#sec-property-descriptor-specification-type">Property Descriptor</a> <span class="nt">Desc</span> the following
+ steps are taken:</p>
+
+ <ol class="proc">
+ <li>If the [[Value]] field of <i>Desc</i> is absent, then
+ <ol class="block">
+ <li>Return <a href="#sec-ordinarydefineownproperty">OrdinaryDefineOwnProperty</a>(<i>A</i>, <code>"length"</code>,
+ <i>Desc</i>).</li>
+ </ol>
+ </li>
+ <li>Let <i>newLenDesc</i> be a copy of <i>Desc</i>.</li>
+ <li>Let <i>newLen</i> be <a href="#sec-touint32">ToUint32</a>(<i>Desc</i>.[[Value]]).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>newLen</i>).</li>
+ <li>Let <i>numberLen</i> be <a href="#sec-tonumber">ToNumber</a>(<i>Desc</i>.[[Value]]).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>newLen</i>).</li>
+ <li>If <i>newLen</i> &ne; <i>numberLen</i>, throw a <b>RangeError</b> exception.</li>
+ <li>Set <i>newLenDesc</i>.[[Value]] to <i>newLen</i>.</li>
+ <li>Let <i>oldLenDesc</i> be <a href="#sec-ordinarygetownproperty">OrdinaryGetOwnProperty</a>(<i>A</i>,
+ <code>"length"</code>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>oldLenDesc</i> will never be <b>undefined</b> or an accessor
+ descriptor because Array objects are created with a length data property that cannot be deleted or
+ reconfigured.</li>
+ <li>Let <i>oldLen</i> be <i>oldLenDesc</i>.[[Value]].</li>
+ <li>If <i>newLen</i> &ge;<i>oldLen</i>, then
+ <ol class="block">
+ <li>Return <a href="#sec-ordinarydefineownproperty">OrdinaryDefineOwnProperty</a>(<i>A</i>, <code>"length"</code>,
+ <i>newLenDesc</i>).</li>
+ </ol>
+ </li>
+ <li>If <i>oldLenDesc</i>.[[Writable]] is <b>false</b>, return <b>false</b>.</li>
+ <li>If <i>newLenDesc</i>.[[Writable]] is absent or has the value <b>true</b>, let <i>newWritable</i> be
+ <b>true</b>.</li>
+ <li>Else,
+ <ol class="block">
+ <li>Need to defer setting the [[Writable]] attribute to <b>false</b> in case any elements cannot be deleted.</li>
+ <li>Let <i>newWritable</i> be <b>false</b>.</li>
+ <li>Set <i>newLenDesc</i>.[[Writable]] to <b>true</b>.</li>
+ </ol>
+ </li>
+ <li>Let <i>succeeded</i> be <a href="#sec-ordinarydefineownproperty">OrdinaryDefineOwnProperty</a>(<i>A</i>,
+ <code>"length"</code>, <i>newLenDesc</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>succeeded</i> is not an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ <li>If <i>succeeded</i> is <b>false</b>, return <b>false</b>.</li>
+ <li>While <i>newLen</i> &lt; <i>oldLen</i> repeat,
+ <ol class="block">
+ <li>Set <i>oldLen</i> to <i>oldLen</i> &ndash; 1.</li>
+ <li>Let <i>deleteSucceeded</i> be <i>A</i>.[[Delete]](<a href="#sec-tostring">ToString</a>(<i>oldLen</i>)).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>deleteSucceeded</i> is not an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ <li>If <i>deleteSucceeded</i> is <b>false</b>, then
+ <ol class="block">
+ <li>Set <i>newLenDesc</i>.[[Value]] to <i>oldLen</i> <i>+</i> 1.</li>
+ <li>If <i>newWritable</i> is <b>false</b>, set <i>newLenDesc</i>.[[Writable]] to <b>false</b>.</li>
+ <li>Let <i>succeeded</i> be <a href="#sec-ordinarydefineownproperty">OrdinaryDefineOwnProperty</a>(<i>A</i>,
+ <code>"length"</code>, <i>newLenDesc</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>succeeded</i> is not an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>If <i>newWritable</i> is <b>false</b>, then
+ <ol class="block">
+ <li>Return <a href="#sec-ordinarydefineownproperty">OrdinaryDefineOwnProperty</a>(<i>A</i>, <code>"length"</code>,
+ PropertyDescriptor{[[Writable]]: <b>false</b>}). This call will always return <b>true</b>.</li>
+ </ol>
+ </li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> In steps 3 and 4, if <i>Desc</i>.[[Value]] is an object then its <code>valueOf</code>
+ method is called twice. This is legacy behaviour that was specified with this effect starting with the 2<sup>nd</sup>
+ Edition of this specification.</p>
+ </div>
+ </section>
+ </section>
+
+ <section id="sec-string-exotic-objects">
+ <div class="front">
+ <h1><span class="secnum" id="sec-9.4.3"><a href="#sec-string-exotic-objects" title="link to this section">9.4.3</a></span>
+ String Exotic Objects</h1>
+
+ <p>A <i>String object</i> is an exotic object that encapsulates a String value and exposes virtual integer indexed data
+ properties corresponding to the individual code unit elements of the string value. Exotic String objects always have a
+ data property named <code>"length"</code> whose value is the number of code unit elements in the encapsulated String
+ value. Both the code unit data properties and the <code>"length"</code> property are non-writable and
+ non-configurable.</p>
+
+ <p>Exotic String objects have the same internal slots as ordinary objects. They also have a [[StringData]] internal
+ slot.</p>
+
+ <p>Exotic String objects provide alternative definitions for the following internal methods. All of the other exotic
+ String object essential internal methods that are not defined below are as specified in <a
+ href="#sec-ordinary-object-internal-methods-and-internal-slots">9.1</a>.</p>
+ </div>
+
+ <section id="sec-string-exotic-objects-getownproperty-p">
+ <div class="front">
+ <h1><span class="secnum" id="sec-9.4.3.1"><a href="#sec-string-exotic-objects-getownproperty-p"
+ title="link to this section">9.4.3.1</a></span> [[GetOwnProperty]] ( P )</h1>
+
+ <p>When the [[GetOwnProperty]] internal method of an exotic String object <var>S</var> is called with <a
+ href="#sec-object-type">property key</a> <var>P</var> the following steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>Let <i>desc</i> be <a href="#sec-ordinarygetownproperty">OrdinaryGetOwnProperty</a>(<i>S</i>, <i>P</i>).</li>
+ <li>If <i>desc</i> is not <b>undefined</b> return <i>desc</i>.</li>
+ <li>Return <a href="#sec-stringgetindexproperty">StringGetIndexProperty</a>(<i>S</i>, <i>P</i>).</li>
+ </ol>
+ </div>
+
+ <section id="sec-stringgetindexproperty">
+ <h1><span class="secnum" id="sec-9.4.3.1.1"><a href="#sec-stringgetindexproperty"
+ title="link to this section">9.4.3.1.1</a></span> StringGetIndexProperty (S, P)</h1>
+
+ <p>When the abstract operation StringGetIndexProperty is called with an exotic String object <var>S</var> and with <a
+ href="#sec-object-type">property key</a> <var>P</var>, the following steps are taken:</p>
+
+ <ol class="proc">
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>P</i>) is not String, return <b>undefined</b>.</li>
+ <li>Let <i>index</i> be <a href="#sec-canonicalnumericindexstring">CanonicalNumericIndexString</a> (<i>P</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>index</i> is not an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ <li>If <i>index</i> is <b>undefined</b>, return <b>undefined</b>.</li>
+ <li>If <a href="#sec-isinteger">IsInteger</a>(<i>index</i>) is <b>false</b>, return <b>undefined</b>.</li>
+ <li>If <i>index</i> = &minus;0, return <b>undefined</b>.</li>
+ <li>Let <i>str</i> be the String value of the [[StringData]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>S</i>.</li>
+ <li>Let <i>len</i> be the number of elements in <i>str</i>.</li>
+ <li>If <i>index</i> &lt; 0 or <i>len</i> &le; <i>index</i>, return <b>undefined</b>.</li>
+ <li>Let <i>resultStr</i> be a String value of length 1, containing one code unit from <i>str</i>, specifically the
+ code unit at index <i>index</i>.</li>
+ <li>Return a PropertyDescriptor{ [[Value]]: <i>resultStr</i>, [[Enumerable]]: <b>true</b>, [[Writable]]: <b>false</b>,
+ [[Configurable]]: <b>false</b> }.</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-string-exotic-objects-hasproperty-p">
+ <h1><span class="secnum" id="sec-9.4.3.2"><a href="#sec-string-exotic-objects-hasproperty-p"
+ title="link to this section">9.4.3.2</a></span> [[HasProperty]](P)</h1>
+
+ <p>When the [[HasProperty]] internal method of an exotic String object <var>S</var> is called with <a
+ href="#sec-object-type">property key</a> <var>P</var>, the following steps are taken:</p>
+
+ <ol class="proc">
+ <li>Let <i>elementDesc</i> be <a href="#sec-stringgetindexproperty">StringGetIndexProperty</a>(<i>S</i>, <i>P</i>).</li>
+ <li>If <i>elementDesc</i> is not <b>undefined</b>, return <b>true</b>.</li>
+ <li>Return <a href="#sec-ordinaryhasproperty">OrdinaryHasProperty</a>(<i>S</i>, <i>P</i>)..</li>
+ </ol>
+ </section>
+
+ <section id="sec-string-exotic-objects-ownpropertykeys">
+ <h1><span class="secnum" id="sec-9.4.3.3"><a href="#sec-string-exotic-objects-ownpropertykeys"
+ title="link to this section">9.4.3.3</a></span> [[OwnPropertyKeys]] ( )</h1>
+
+ <p>When the [[OwnPropertyKeys]] internal method of a <a href="#sec-string-exotic-objects">String exotic object</a>
+ <var>O</var> is called the following steps are taken:</p>
+
+ <ol class="proc">
+ <li>Let <i>keys</i> be a new empty <a href="#sec-list-and-record-specification-type">List</a>.</li>
+ <li>Let <i>str</i> be the String value of the [[StringData]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>Let <i>len</i> be the number of elements in <i>str</i>.</li>
+ <li>For each integer <i>i</i> starting with 0 such that <i>i</i> &lt; <i>len</i>, in ascending order,
+ <ol class="block">
+ <li>Add <a href="#sec-tostring">ToString</a>(<i>i</i>) as the last element of <i>keys</i></li>
+ </ol>
+ </li>
+ <li>For each own <a href="#sec-object-type">property key</a> <i>P</i> of <i>O</i> such that <i>P</i> is an integer index
+ and <a href="#sec-tointeger">ToInteger</a>(<i>P</i>) &ge; <i>len</i>, in ascending numeric index order,
+ <ol class="block">
+ <li>Add <i>P</i> as the last element of <i>keys</i>.</li>
+ </ol>
+ </li>
+ <li>For each own <a href="#sec-object-type">property key</a> <i>P</i> of <i>O</i> such that <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>P</i>) is String and <i>P</i> is not an integer index, in
+ property creation order,
+ <ol class="block">
+ <li>Add <i>P</i> as the last element of <i>keys</i>.</li>
+ </ol>
+ </li>
+ <li>For each own <a href="#sec-object-type">property key</a> <i>P</i> of <i>O</i> such that <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>P</i>) is Symbol, in property creation order,
+ <ol class="block">
+ <li>Add <i>P</i> as the last element of <i>keys</i>.</li>
+ </ol>
+ </li>
+ <li>Return <i>keys</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-stringcreate">
+ <h1><span class="secnum" id="sec-9.4.3.4"><a href="#sec-stringcreate" title="link to this section">9.4.3.4</a></span>
+ StringCreate( value, prototype)</h1>
+
+ <p>The abstract operation StringCreate with arguments <var>value</var> and <var>prototype</var> is used to specify the
+ creation of new exotic String objects. It performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>prototype</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>value</i>) is String.</li>
+ <li>Let <i>S</i> be a newly created <a href="#sec-string-exotic-objects">String exotic object</a>.</li>
+ <li>Set the [[StringData]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>S</i> to
+ <i>value</i>.</li>
+ <li>Set <i>S</i>&rsquo;s essential internal methods to the default ordinary object definitions specified in <a
+ href="#sec-ordinary-object-internal-methods-and-internal-slots">9.1</a>.</li>
+ <li>Set the [[GetOwnProperty]] internal method of <i>S</i> as specified in <a
+ href="#sec-string-exotic-objects-getownproperty-p">9.4.3.1</a>.</li>
+ <li>Set the [[HasProperty]] internal method of <i>S</i> as specified in <a
+ href="#sec-string-exotic-objects-hasproperty-p">9.4.3.2</a>.</li>
+ <li>Set the [[OwnPropertyKeys]] internal method of <i>S</i> as specified in <a
+ href="#sec-string-exotic-objects-ownpropertykeys">9.4.3.3</a>.</li>
+ <li>Set the [[Prototype]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>S</i> to
+ <i>prototype</i>.</li>
+ <li>Set the [[Extensible]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>S</i> to
+ <b>true</b>.</li>
+ <li>Let <i>length</i> be the number of code unit elements in <i>value.</i></li>
+ <li>Let <i>status</i> be <a href="#sec-definepropertyorthrow">DefinePropertyOrThrow</a>(<i>S</i>, <code>"length"</code>,
+ PropertyDescriptor{[[Value]]: <i>length</i>, [[Writable]]: <b>false</b>, [[Enumerable]]: <b>false</b>,
+ [[Configurable]]: <b>false</b> }).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>status</i> is not an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ <li>Return <i>S</i>.</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-arguments-exotic-objects">
+ <div class="front">
+ <h1><span class="secnum" id="sec-9.4.4"><a href="#sec-arguments-exotic-objects"
+ title="link to this section">9.4.4</a></span> Arguments Exotic Objects</h1>
+
+ <p>Most ECMAScript functions make an arguments objects available to their code. Depending upon the characteristics of the
+ function definition, its argument object is either an ordinary object or an <i>arguments exotic object</i>. An arguments
+ exotic object is an exotic object whose array index properties map to the formal parameters bindings of an invocation of
+ its associated ECMAScript function.</p>
+
+ <p>Arguments exotic objects have the same internal slots as ordinary objects. They also have a [[ParameterMap]] internal
+ slot. Ordinary arguments objects also have a [[ParameterMap]] internal slot whose value is always undefined. For ordinary
+ argument objects the [[ParameterMap]] internal slot is only used by <code><a
+ href="#sec-object.prototype.tostring">Object.prototype.toString</a></code> (<a
+ href="#sec-object.prototype.tostring">19.1.3.6</a>) to identify them as such.</p>
+
+ <p>Arguments exotic objects provide alternative definitions for the following internal methods. All of the other exotic
+ arguments object essential internal methods that are not defined below are as specified in <a
+ href="#sec-ordinary-object-internal-methods-and-internal-slots">9.1</a></p>
+
+ <div class="note">
+ <p><span class="nh">NOTE 1</span> For non-strict functions the integer indexed data properties of an arguments object
+ whose numeric name values are less than the number of formal parameters of the corresponding function object initially
+ share their values with the corresponding argument bindings in the function&rsquo;s <a
+ href="#sec-execution-contexts">execution context</a>. This means that changing the property changes the corresponding
+ value of the argument binding and vice-versa. This correspondence is broken if such a property is deleted and then
+ redefined or if the property is changed into an accessor property. For strict mode functions, the values of the
+ arguments object&rsquo;s properties are simply a copy of the arguments passed to the function and there is no dynamic
+ linkage between the property values and the formal parameter values.</p>
+ </div>
+
+ <div class="note">
+ <p><span class="nh">NOTE 2</span> The ParameterMap object and its property values are used as a device for specifying
+ the arguments object correspondence to argument bindings. The ParameterMap object and the objects that are the values of
+ its properties are not directly observable from ECMAScript code. An ECMAScript implementation does not need to actually
+ create or use such objects to implement the specified semantics.</p>
+ </div>
+
+ <div class="note">
+ <p><span class="nh">NOTE 3</span> Arguments objects for strict mode functions define non-configurable accessor
+ properties named <code>"caller"</code> and <code>"callee"</code> which throw a <b>TypeError</b> exception on access. The
+ <code>"callee"</code> property has a more specific meaning for non-strict functions and a <code>"caller"</code> property
+ has historically been provided as an implementation-defined extension by some ECMAScript implementations. The strict
+ mode definition of these properties exists to ensure that neither of them is defined in any other manner by conforming
+ ECMAScript implementations.</p>
+ </div>
+ </div>
+
+ <section id="sec-arguments-exotic-objects-getownproperty-p">
+ <h1><span class="secnum" id="sec-9.4.4.1"><a href="#sec-arguments-exotic-objects-getownproperty-p"
+ title="link to this section">9.4.4.1</a></span> [[GetOwnProperty]] (P)</h1>
+
+ <p>The [[GetOwnProperty]] internal method of an arguments exotic object when called with a <a
+ href="#sec-object-type">property key</a> <var>P</var> performs the following steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>args</i> be the arguments object.</li>
+ <li>Let <i>desc</i> be <a href="#sec-ordinarygetownproperty">OrdinaryGetOwnProperty</a>(<i>args</i>, <i>P</i>).</li>
+ <li>If <i>desc</i> is <b>undefined</b>, return <i>desc</i>.</li>
+ <li>Let <i>map</i> be the value of the [[ParameterMap]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of the arguments object.</li>
+ <li>Let <i>isMapped</i> be <a href="#sec-hasownproperty">HasOwnProperty</a>(<i>map</i>, <i>P</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>isMapped</i> is never an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ <li>If the value of <i>isMapped</i> is <b>true</b>, then
+ <ol class="block">
+ <li>Set <i>desc</i>.[[Value]] to <a href="#sec-get-o-p">Get</a>(<i>map</i>, <i>P</i>).</li>
+ </ol>
+ </li>
+ <li>If <a href="#sec-isdatadescriptor">IsDataDescriptor</a>(<i>desc</i>) is <b>true</b> and <i>P</i> is
+ <code>"caller"</code> and <i>desc</i>.[[Value]] is a strict mode Function object, throw a <b>TypeError</b>
+ exception.</li>
+ <li>Return <i>desc</i>.</li>
+ </ol>
+
+ <p>If an implementation does not provide a built-in <code>caller</code> property for argument exotic objects then step 8
+ of this algorithm is must be skipped.</p>
+ </section>
+
+ <section id="sec-arguments-exotic-objects-defineownproperty-p-desc">
+ <h1><span class="secnum" id="sec-9.4.4.2"><a href="#sec-arguments-exotic-objects-defineownproperty-p-desc"
+ title="link to this section">9.4.4.2</a></span> [[DefineOwnProperty]] (P, Desc)</h1>
+
+ <p>The [[DefineOwnProperty]] internal method of an arguments exotic object when called with a <a
+ href="#sec-object-type">property key</a> <var>P</var> and <a href="#sec-property-descriptor-specification-type">Property
+ Descriptor</a> <span class="nt">Desc</span> performs the following steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>args</i> be the arguments object.</li>
+ <li>Let <i>map</i> be the value of the [[ParameterMap]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of the arguments object.</li>
+ <li>Let <i>isMapped</i> be <a href="#sec-hasownproperty">HasOwnProperty</a>(<i>map</i>, <i>P</i>).</li>
+ <li>Let <i>allowed</i> be <a href="#sec-ordinarydefineownproperty">OrdinaryDefineOwnProperty</a>(<i>args</i>, <i>P</i>,
+ <i>Desc</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>allowed</i>).</li>
+ <li>If <i>allowed</i> is <b>false</b>, return <b>false</b>.</li>
+ <li>If the value of <i>isMapped</i> is <b>true</b>, then
+ <ol class="block">
+ <li>If <a href="#sec-isaccessordescriptor">IsAccessorDescriptor</a>(<i>Desc</i>) is <b>true</b>, then
+ <ol class="block">
+ <li><a href="#sec-call">Call</a> <i>map</i>.[[Delete]](<i>P</i>).</li>
+ </ol>
+ </li>
+ <li>Else
+ <ol class="block">
+ <li>If <i>Desc</i>.[[Value]] is present, then
+ <ol class="block">
+ <li>Let <i>setStatus</i> be <a href="#sec-set-o-p-v-throw">Set</a>(<i>map</i>, <i>P</i>,
+ <i>Desc</i>.[[Value]], <b>false</b>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>setStatus</i> is <b>true</b> because formal
+ parameters mapped by argument objects are always writable.</li>
+ </ol>
+ </li>
+ <li>If <i>Desc</i>.[[Writable]] is present and its value is <b>false</b>, then
+ <ol class="block">
+ <li><a href="#sec-call">Call</a> <i>map</i>.[[Delete]](<i>P</i>).</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-arguments-exotic-objects-get-p-receiver">
+ <h1><span class="secnum" id="sec-9.4.4.3"><a href="#sec-arguments-exotic-objects-get-p-receiver"
+ title="link to this section">9.4.4.3</a></span> [[Get]] (P, Receiver)</h1>
+
+ <p>The [[Get]] internal method of an arguments exotic object when called with a <a href="#sec-object-type">property
+ key</a> <var>P</var> and <a href="#sec-ecmascript-language-types">ECMAScript language value</a> <span
+ class="nt">Receiver</span> performs the following steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>args</i> be the arguments object.</li>
+ <li>Let <i>map</i> be the value of the [[ParameterMap]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of the arguments object.</li>
+ <li>Let <i>isMapped</i> be <a href="#sec-hasownproperty">HasOwnProperty</a>(<i>map</i>, <i>P</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>isMapped</i> is not an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ <li>If the value of <i>isMapped</i> is <b>false</b>, then
+ <ol class="block">
+ <li>Let <i>v</i> be the result of calling the default ordinary object [[Get]] internal method (<a
+ href="#sec-ordinary-object-internal-methods-and-internal-slots-get-p-receiver">9.1.8</a>) on <i>args</i> passing
+ <i>P</i> and <i>Receiver</i> as the arguments.</li>
+ </ol>
+ </li>
+ <li>Else <i>map</i> contains a formal parameter mapping for <i>P</i>,
+ <ol class="block">
+ <li>Let <i>v</i> be <a href="#sec-get-o-p">Get</a>(<i>map</i>, <i>P</i>).</li>
+ </ol>
+ </li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>v</i>).</li>
+ <li>Return <i>v</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-arguments-exotic-objects-set-p-v-receiver">
+ <h1><span class="secnum" id="sec-9.4.4.4"><a href="#sec-arguments-exotic-objects-set-p-v-receiver"
+ title="link to this section">9.4.4.4</a></span> [[Set]] ( P, V, Receiver)</h1>
+
+ <p>The [[Set]] internal method of an arguments exotic object when called with <a href="#sec-object-type">property key</a>
+ <var>P</var>, value <var>V</var>, and <a href="#sec-ecmascript-language-types">ECMAScript language value</a> <span
+ class="nt">Receiver</span> performs the following steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>args</i> be the arguments object.</li>
+ <li>If <a href="#sec-samevalue">SameValue</a>(<i>args</i>, <i>Receiver</i>) is <b>false</b>, then
+ <ol class="block">
+ <li>Let <i>isMapped</i> be <b>false</b>.</li>
+ </ol>
+ </li>
+ <li>Else,
+ <ol class="block">
+ <li>Let <i>map</i> be the value of the [[ParameterMap]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of the arguments object.</li>
+ <li>Let <i>isMapped</i> be <a href="#sec-hasownproperty">HasOwnProperty</a>(<i>map</i>, <i>P</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>isMapped</i> is not an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ </ol>
+ </li>
+ <li>If the value of <i>isMapped</i> is <b>false</b>, then
+ <ol class="block">
+ <li>Return the result of calling the default ordinary object [[Set]] internal method (<a
+ href="#sec-ordinary-object-internal-methods-and-internal-slots-set-p-v-receiver">9.1.9</a>) on <i>args</i>
+ passing <i>P</i>, <i>V</i> and <i>Receiver</i> as the arguments.</li>
+ </ol>
+ </li>
+ <li>Else <i>map</i> contains a formal parameter mapping for <i>P</i>,
+ <ol class="block">
+ <li>Return <a href="#sec-set-o-p-v-throw">Set</a>(<i>map</i>, <i>P</i>, <i>V</i>, <b>false</b>).</li>
+ </ol>
+ </li>
+ </ol>
+ </section>
+
+ <section id="sec-arguments-exotic-objects-delete-p">
+ <h1><span class="secnum" id="sec-9.4.4.5"><a href="#sec-arguments-exotic-objects-delete-p"
+ title="link to this section">9.4.4.5</a></span> [[Delete]] (P)</h1>
+
+ <p>The [[Delete]] internal method of an arguments exotic object when called with a <a href="#sec-object-type">property
+ key</a> <var>P</var> performs the following steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>map</i> be the value of the [[ParameterMap]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of the arguments object.</li>
+ <li>Let <i>isMapped</i> be <a href="#sec-hasownproperty">HasOwnProperty</a>(<i>map</i>, <i>P</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>isMapped</i> is not an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ <li>Let <i>result</i> be the result of calling the default [[Delete]] internal method for ordinary objects (<a
+ href="#sec-ordinary-object-internal-methods-and-internal-slots-delete-p">9.1.10</a>) on the arguments object passing
+ <i>P</i> as the argument.</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>result</i>).</li>
+ <li>If <i>result</i> is <b>true</b> and the value of <i>isMapped</i> is <b>true</b>, then
+ <ol class="block">
+ <li><a href="#sec-call">Call</a> <i>map</i>.[[Delete]](<i>P</i>).</li>
+ </ol>
+ </li>
+ <li>Return <i>result</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-createunmappedargumentsobject">
+ <h1><span class="secnum" id="sec-9.4.4.6"><a href="#sec-createunmappedargumentsobject"
+ title="link to this section">9.4.4.6</a></span> CreateUnmappedArgumentsObject(argumentsList)</h1>
+
+ <p>The abstract operation <span style="font-family: Times New Roman">CreateUnmappedArgumentsObject</span> called with an
+ argument <var>argumentsList</var> performs the following steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>len</i> be the number of elements in <i>argumentsList</i>.</li>
+ <li>Let <i>obj</i> be <a href="#sec-objectcreate">ObjectCreate</a>(%ObjectPrototype%,
+ &laquo;&zwj;[[ParameterMap]]&raquo;).</li>
+ <li>Set <i>obj</i>&rsquo;s [[ParameterMap]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a>
+ to <b>undefined</b>.</li>
+ <li>Perform <a href="#sec-definepropertyorthrow">DefinePropertyOrThrow</a>(<i>obj</i>, <code>"length"</code>,
+ PropertyDescriptor{[[Value]]: <i>len</i>, [[Writable]]: <b>true</b>, [[Enumerable]]: <b>false</b>, [[Configurable]]:
+ <b>true</b>}).</li>
+ <li>Let <i>index</i> be 0.</li>
+ <li>Repeat while <i>index</i> &lt; <i>len</i>,
+ <ol class="block">
+ <li>Let <i>val</i> be <i>argumentsList</i>[<i>index</i>].</li>
+ <li>Perform <a href="#sec-createdataproperty">CreateDataProperty</a>(<i>obj</i>, <a
+ href="#sec-tostring">ToString</a>(<i>index</i>), <i>val</i>).</li>
+ <li>Let <i>index</i> be <i>index</i> + 1</li>
+ </ol>
+ </li>
+ <li>Perform <a href="#sec-definepropertyorthrow">DefinePropertyOrThrow</a>(<i>obj</i>, @@iterator, PropertyDescriptor
+ {[[Value]]:%ArrayProto_values%, [[Writable]]: <b>true</b>, [[Enumerable]]: <b>false</b>, [[Configurable]]:
+ <b>true</b>}).</li>
+ <li>Perform <a href="#sec-definepropertyorthrow">DefinePropertyOrThrow</a>(<i>obj</i>, <code>"caller"</code>,
+ PropertyDescriptor {[[Get]]: <a href="#sec-%throwtypeerror%">%ThrowTypeError%</a>, [[Set]]: <a
+ href="#sec-%throwtypeerror%">%ThrowTypeError%</a>, [[Enumerable]]: <b>false</b>, [[Configurable]]:
+ <b>false</b>}).</li>
+ <li>Perform <a href="#sec-definepropertyorthrow">DefinePropertyOrThrow</a>(<i>obj</i>, <code>"callee"</code>,
+ PropertyDescriptor {[[Get]]: <a href="#sec-%throwtypeerror%">%ThrowTypeError%</a>, [[Set]]: <a
+ href="#sec-%throwtypeerror%">%ThrowTypeError%</a>, [[Enumerable]]: <b>false</b>, [[Configurable]]:
+ <b>false</b>}).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: the above property definitions will not produce an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ <li>Return <i>obj</i></li>
+ </ol>
+ </section>
+
+ <section id="sec-createmappedargumentsobject">
+ <div class="front">
+ <h1><span class="secnum" id="sec-9.4.4.7"><a href="#sec-createmappedargumentsobject"
+ title="link to this section">9.4.4.7</a></span> CreateMappedArgumentsObject ( func, formals, argumentsList, env
+ )</h1>
+
+ <p>The abstract operation <span style="font-family: Times New Roman">CreateMappedArgumentsObject</span> is called with
+ object <var>func</var>, parsed grammar phrase <var>formals</var>, <a
+ href="#sec-list-and-record-specification-type">List</a> <var>argumentsList</var>, and <a
+ href="#sec-environment-records">Environment Record</a> <span style="font-family: Times New Roman"><i>env</i>.</span> The
+ following steps are performed:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>formals</i> does not contain a rest parameter, any binding
+ patterns, or any initializers. It may contain duplicate identifiers.</li>
+ <li>Let <i>len</i> be the number of elements in <i>argumentsList</i>.</li>
+ <li>Let <i>obj</i> be a newly created arguments exotic object with a [[ParameterMap]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>Set the [[GetOwnProperty]] internal method of <i>obj</i> as specified in <a
+ href="#sec-arguments-exotic-objects-getownproperty-p">9.4.4.1</a>.</li>
+ <li>Set the [[DefineOwnProperty]] internal method of <i>obj</i> as specified in <a
+ href="#sec-arguments-exotic-objects-defineownproperty-p-desc">9.4.4.2</a>.</li>
+ <li>Set the [[Get]] internal method of <i>obj</i> as specified in <a
+ href="#sec-arguments-exotic-objects-get-p-receiver">9.4.4.3</a>.</li>
+ <li>Set the [[Set]] internal method of <i>obj</i> as specified in <a
+ href="#sec-arguments-exotic-objects-set-p-v-receiver">9.4.4.4</a>.</li>
+ <li>Set the [[Delete]] internal method of <i>obj</i> as specified in <a
+ href="#sec-arguments-exotic-objects-delete-p">9.4.4.5</a>.</li>
+ <li>Set the remainder of <i>obj</i>&rsquo;s essential internal methods to the default ordinary object definitions
+ specified in <a href="#sec-ordinary-object-internal-methods-and-internal-slots">9.1</a>.</li>
+ <li>Set the [[Prototype]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>obj</i> to
+ %ObjectPrototype%.</li>
+ <li>Set the [[Extensible]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>obj</i>
+ to <b>true</b>.</li>
+ <li>Let <i>parameterNames</i> be the BoundNames of <i>formals</i>.</li>
+ <li>Let <i>numberOfParameters</i> be the number of elements in <i>parameterNames</i></li>
+ <li>Let <i>index</i> be 0.</li>
+ <li>Repeat while <i>index</i> &lt; <i>len</i> ,
+ <ol class="block">
+ <li>Let <i>val</i> be <i>argumentsList</i>[<i>index</i>].</li>
+ <li>Perform <a href="#sec-createdataproperty">CreateDataProperty</a>(<i>obj</i>, <a
+ href="#sec-tostring">ToString</a>(<i>index</i>), <i>val</i>).</li>
+ <li>Let <i>index</i> be <i>index</i> + 1</li>
+ </ol>
+ </li>
+ <li>Perform <a href="#sec-definepropertyorthrow">DefinePropertyOrThrow</a>(<i>obj</i>, <code>"length"</code>,
+ PropertyDescriptor{[[Value]]: <i>len</i>, [[Writable]]: <b>true</b>, [[Enumerable]]: <b>false</b>,
+ [[Configurable]]: <b>true</b>}).</li>
+ <li>Let <i>map</i> be <a href="#sec-objectcreate">ObjectCreate</a>(<b>null</b>).</li>
+ <li>Let <i>mappedNames</i> be an empty <a href="#sec-list-and-record-specification-type">List</a>.</li>
+ <li>Let <i>index</i> be <i>numberOfParameters</i> &minus; 1.</li>
+ <li>Repeat while <i>index</i> &ge; 0 ,
+ <ol class="block">
+ <li>Let <i>name</i> be <i>parameterNames</i>[<i>index</i>].</li>
+ <li>If <i>name</i> is not an element of <i>mappedNames</i>, then
+ <ol class="block">
+ <li>Add <i>name</i> as an element of the list <i>mappedNames</i>.</li>
+ <li>If <i>index</i> &lt; <i>len</i>, then
+ <ol class="block">
+ <li>Let <i>g</i> be <a href="#sec-makearggetter">MakeArgGetter</a>(<i>name</i>, <i>env</i>).</li>
+ <li>Let <i>p</i> be <a href="#sec-makeargsetter">MakeArgSetter</a>(<i>name</i>, <i>env</i>).</li>
+ <li><a href="#sec-call">Call</a> <i>map</i>.[[DefineOwnProperty]](<a
+ href="#sec-tostring">ToString</a>(<i>index</i>), PropertyDescriptor{[[Set]]: <i>p</i>, [[Get]]:
+ <i>g,</i> [[Enumerable]]: <b>false</b>, [[Configurable]]: <b>true</b>}).</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Let <i>index</i> be <i>index</i> &minus; 1</li>
+ </ol>
+ </li>
+ <li>Set the [[ParameterMap]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>obj</i>
+ to <i>map</i>.</li>
+ <li>Perform <a href="#sec-definepropertyorthrow">DefinePropertyOrThrow</a>(<i>obj</i>, @@iterator, PropertyDescriptor
+ {[[Value]]:%ArrayProto_values%, [[Writable]]: <b>true</b>, [[Enumerable]]: <b>false</b>, [[Configurable]]:
+ <b>true</b>}).</li>
+ <li>Perform <a href="#sec-definepropertyorthrow">DefinePropertyOrThrow</a>(<i>obj</i>, <code>"callee"</code>,
+ PropertyDescriptor {[[Value]]: <i>func</i>, [[Writable]]: <b>true</b>, [[Enumerable]]: <b>false</b>,
+ [[Configurable]]: <b>true</b>}).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: the above property definitions will not produce an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ <li>Return <i>obj</i></li>
+ </ol>
+ </div>
+
+ <section id="sec-makearggetter">
+ <h1><span class="secnum" id="sec-9.4.4.7.1"><a href="#sec-makearggetter"
+ title="link to this section">9.4.4.7.1</a></span> MakeArgGetter ( name, env)</h1>
+
+ <p>The abstract operation <span style="font-family: Times New Roman">MakeArgGetter</span> called with String
+ <var>name</var> and <a href="#sec-environment-records">Environment Record</a> <var>env</var> creates a built-in function
+ object that when executed returns the value bound for <var>name</var> in <var>env</var>. It performs the following
+ steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>realm</i> be <a href="#sec-execution-contexts">the current Realm</a>.</li>
+ <li>Let <i>steps</i> be the steps of an ArgGetter function as specified below.</li>
+ <li>Let <i>getter</i> be <a href="#sec-createbuiltinfunction">CreateBuiltinFunction</a>(<i>realm</i>, <i>steps</i>,
+ %FunctionPrototype%, &laquo;&zwj;[[name]], [[env]]&raquo; ).</li>
+ <li>Set <i>getter&rsquo;s</i> [[name]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> to
+ <i>name</i>.</li>
+ <li>Set <i>getter&rsquo;s</i> [[env]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> to
+ <i>env</i>.</li>
+ <li>Return <i>getter</i>.</li>
+ </ol>
+
+ <p>An ArgGetter function is an anonymous built-in function with [[name]] and [[env]] internal slots. When an ArgGetter
+ function <var>f</var> that expects no arguments is called it performs the following steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>name</i> be the value of <i>f&rsquo;s</i> [[name]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>Let <i>env</i> be the value of <i>f&rsquo;s</i> [[env]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a></li>
+ <li>Return <i>env</i>.GetBindingValue(<i>name</i>, <b>false</b>).</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> ArgGetter functions are never directly accessible to ECMAScript code.</p>
+ </div>
+ </section>
+
+ <section id="sec-makeargsetter">
+ <h1><span class="secnum" id="sec-9.4.4.7.2"><a href="#sec-makeargsetter"
+ title="link to this section">9.4.4.7.2</a></span> MakeArgSetter ( name, env)</h1>
+
+ <p>The abstract operation <span style="font-family: Times New Roman">MakeArgSetter</span> called with String
+ <var>name</var> and <a href="#sec-environment-records">Environment Record</a> <var>env</var> creates a built-in function
+ object that when executed sets the value bound for <var>name</var> in <var>env</var>. It performs the following
+ steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>realm</i> be <a href="#sec-execution-contexts">the current Realm</a>.</li>
+ <li>Let <i>steps</i> be the steps of an ArgSetter function as specified below.</li>
+ <li>Let <i>setter</i> be <a href="#sec-createbuiltinfunction">CreateBuiltinFunction</a>(<i>realm</i>, <i>steps</i>,
+ %FunctionPrototype%, &laquo;&zwj;[[name]], [[env]]&raquo; ).</li>
+ <li>Set <i>setter&rsquo;s</i> [[name]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> to
+ <i>name</i>.</li>
+ <li>Set <i>setter&rsquo;s</i> [[env]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> to
+ <i>env</i>.</li>
+ <li>Return <i>setter</i>.</li>
+ </ol>
+
+ <p>An ArgSetter function is an anonymous built-in function with [[name]] and [[env]] internal slots. When an ArgSetter
+ function <var>f</var> is called with argument <var>value</var> it performs the following steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>name</i> be the value of <i>f&rsquo;s</i> [[name]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>Let <i>env</i> be the value of <i>f&rsquo;s</i> [[env]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a></li>
+ <li>Return <i>env</i>.SetMutableBinding(<i>name</i>, <i>value</i>, <b>false</b>).</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> ArgSetter functions are never directly accessible to ECMAScript code.</p>
+ </div>
+ </section>
+ </section>
+ </section>
+
+ <section id="sec-integer-indexed-exotic-objects">
+ <div class="front">
+ <h1><span class="secnum" id="sec-9.4.5"><a href="#sec-integer-indexed-exotic-objects"
+ title="link to this section">9.4.5</a></span> Integer Indexed Exotic Objects</h1>
+
+ <p>An <i>Integer Indexed object</i> is an exotic object that performs special handling of integer index property keys.</p>
+
+ <p>Integer Indexed exotic objects have the same internal slots as ordinary objects additionally [[ViewedArrayBuffer]],
+ [[ArrayLength]], [[ByteOffset]], and [[TypedArrayName]] internal slots.</p>
+
+ <p>Integer Indexed Exotic objects provide alternative definitions for the following internal methods. All of the other
+ Integer Indexed exotic object essential internal methods that are not defined below are as specified in <a
+ href="#sec-ordinary-object-internal-methods-and-internal-slots">9.1</a>.</p>
+ </div>
+
+ <section id="sec-integer-indexed-exotic-objects-getownproperty-p">
+ <h1><span class="secnum" id="sec-9.4.5.1"><a href="#sec-integer-indexed-exotic-objects-getownproperty-p"
+ title="link to this section">9.4.5.1</a></span> [[GetOwnProperty]] ( P )</h1>
+
+ <p>When the [[GetOwnProperty]] internal method of an Integer Indexed exotic object <var>O</var> is called with <a
+ href="#sec-object-type">property key</a> <var>P</var> the following steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>O</i> is an Object that has a [[ViewedArrayBuffer]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>P</i>) is String, then
+ <ol class="block">
+ <li>Let <i>numericIndex</i> be <a
+ href="#sec-canonicalnumericindexstring">CanonicalNumericIndexString</a>(<i>P</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>numericIndex</i> is not an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ <li>If <i>numericIndex</i> is not <b>undefined</b>, then
+ <ol class="block">
+ <li>Let <i>value</i> be <a href="#sec-integerindexedelementget">IntegerIndexedElementGet</a> (<i>O</i>,
+ <i>numericIndex</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>value</i>).</li>
+ <li>If <i>value</i> is <b>undefined</b>, return <b>undefined</b>.</li>
+ <li>Return a PropertyDescriptor{ [[Value]]: <i>value</i>, [[Enumerable]]: <b>true</b>, [[Writable]]:
+ <b>true</b>, [[Configurable]]: <b>false</b> }.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Return <a href="#sec-ordinarygetownproperty">OrdinaryGetOwnProperty</a>(<i>O</i>, <i>P</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-integer-indexed-exotic-objects-hasproperty-p">
+ <h1><span class="secnum" id="sec-9.4.5.2"><a href="#sec-integer-indexed-exotic-objects-hasproperty-p"
+ title="link to this section">9.4.5.2</a></span> [[HasProperty]](P)</h1>
+
+ <p>When the [[HasProperty]] internal method of an Integer Indexed exotic object <var>O</var> is called with <a
+ href="#sec-object-type">property key</a> <var>P</var>, the following steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>O</i> is an Object that has a [[ViewedArrayBuffer]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>P</i>) is String, then
+ <ol class="block">
+ <li>Let <i>numericIndex</i> be <a
+ href="#sec-canonicalnumericindexstring">CanonicalNumericIndexString</a>(<i>P</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>numericIndex</i> is not an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ <li>If <i>numericIndex</i> is not <b>undefined</b>, then
+ <ol class="block">
+ <li>Let <i>buffer</i> be the value of <i>O</i>&rsquo;s [[ViewedArrayBuffer]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>If <a href="#sec-isdetachedbuffer">IsDetachedBuffer</a>(<i>buffer</i>) is <b>true</b>, throw a
+ <b>TypeError</b> exception.</li>
+ <li>If <a href="#sec-isinteger">IsInteger</a>(<i>numericIndex</i>) is <b>false</b>, return <b>false</b></li>
+ <li>If <i>numericIndex</i> = &minus;0, return <b>false</b>.</li>
+ <li>If <i>numericIndex</i> &lt; 0, return <b>false</b>.</li>
+ <li>If <i>numericIndex</i> &ge; the value of <i>O</i>&rsquo;s [[ArrayLength]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>, return <b>false</b>.</li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Return <a href="#sec-ordinaryhasproperty">OrdinaryHasProperty</a>(<i>O</i>, <i>P</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-integer-indexed-exotic-objects-defineownproperty-p-desc">
+ <h1><span class="secnum" id="sec-9.4.5.3"><a href="#sec-integer-indexed-exotic-objects-defineownproperty-p-desc"
+ title="link to this section">9.4.5.3</a></span> [[DefineOwnProperty]] ( P, Desc)</h1>
+
+ <p>When the [[DefineOwnProperty]] internal method of an Integer Indexed exotic object <var>O</var> is called with <a
+ href="#sec-object-type">property key</a> <var>P</var>, and <a href="#sec-property-descriptor-specification-type">Property
+ Descriptor</a> <span class="nt">Desc</span> the following steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>O</i> is an Object that has a [[ViewedArrayBuffer]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>P</i>) is String, then
+ <ol class="block">
+ <li>Let <i>numericIndex</i> be <a href="#sec-canonicalnumericindexstring">CanonicalNumericIndexString</a>
+ (<i>P</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>numericIndex</i> is not an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ <li>If <i>numericIndex</i> is not <b>undefined</b>, then
+ <ol class="block">
+ <li>If <a href="#sec-isinteger">IsInteger</a>(<i>numericIndex</i>) is <b>false</b>, return <b>false</b></li>
+ <li>Let <i>intIndex</i> be <i>numericIndex</i>.</li>
+ <li>If <i>intIndex</i> = &minus;0, return <b>false</b>.</li>
+ <li>If <i>intIndex</i> &lt; 0, return <b>false</b>.</li>
+ <li>Let <i>length</i> be the value of <i>O</i>&rsquo;s [[ArrayLength]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>If <i>intIndex</i> &ge; <i>length</i>, return <b>false</b>.</li>
+ <li>If <a href="#sec-isaccessordescriptor">IsAccessorDescriptor</a>(<i>Desc</i>) is <b>true</b>, return
+ <b>false.</b></li>
+ <li>If <i>Desc</i> has a [[Configurable]] field and if <i>Desc</i>.[[Configurable]] is <b>true</b>, return
+ <b>false<i>.</i></b></li>
+ <li>If <i>Desc</i> has an [[Enumerable]] field and if <i>Desc</i>.[[Enumerable]] is <b>false</b>, return
+ <b>false<i>.</i></b></li>
+ <li>If <i>Desc</i> has a [[Writable]] field and if <i>Desc</i>.[[Writable]] is <b>false</b>, return
+ <b>false</b>.</li>
+ <li>If <i>Desc</i> has a [[Value]] field, then
+ <ol class="block">
+ <li>Let <i>value</i> be <i>Desc</i>.[[Value]].</li>
+ <li>Return <a href="#sec-integerindexedelementset">IntegerIndexedElementSet</a> (<i>O</i>, <i>intIndex</i>,
+ <i>value</i>).</li>
+ </ol>
+ </li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Return <a href="#sec-ordinarydefineownproperty">OrdinaryDefineOwnProperty</a>(<i>O</i>, <i>P</i>, <i>Desc</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-integer-indexed-exotic-objects-get-p-receiver">
+ <h1><span class="secnum" id="sec-9.4.5.4"><a href="#sec-integer-indexed-exotic-objects-get-p-receiver"
+ title="link to this section">9.4.5.4</a></span> [[Get]] (P, Receiver)</h1>
+
+ <p>When the [[Get]] internal method of an Integer Indexed exotic object <var>O</var> is called with <a
+ href="#sec-object-type">property key</a> <var>P</var> and <a href="#sec-ecmascript-language-types">ECMAScript language
+ value</a> <span class="nt">Receiver</span> the following steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>P</i>) is String and if <a
+ href="#sec-samevalue">SameValue</a>(<i>O</i>, <i>Receiver</i>) is <b>true</b>, then
+ <ol class="block">
+ <li>Let <i>numericIndex</i> be <a href="#sec-canonicalnumericindexstring">CanonicalNumericIndexString</a>
+ (<i>P</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>numericIndex</i> is not an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ <li>If <i>numericIndex</i> is not <b>undefined</b>, then
+ <ol class="block">
+ <li>Return <a href="#sec-integerindexedelementget">IntegerIndexedElementGet</a> (<i>O</i>,
+ <i>numericIndex</i>).</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Return the result of calling the default ordinary object [[Get]] internal method (<a
+ href="#sec-ordinary-object-internal-methods-and-internal-slots-get-p-receiver">9.1.8</a>) on <i>O</i> passing
+ <i>P</i> and <i>Receiver</i> as arguments.</li>
+ </ol>
+ </section>
+
+ <section id="sec-integer-indexed-exotic-objects-set-p-v-receiver">
+ <h1><span class="secnum" id="sec-9.4.5.5"><a href="#sec-integer-indexed-exotic-objects-set-p-v-receiver"
+ title="link to this section">9.4.5.5</a></span> [[Set]] ( P, V, Receiver)</h1>
+
+ <p>When the [[Set]] internal method of an Integer Indexed exotic object <var>O</var> is called with <a
+ href="#sec-object-type">property key</a> <var>P</var>, value <var>V</var>, and <a
+ href="#sec-ecmascript-language-types">ECMAScript language value</a> <span class="nt">Receiver</span>, the following steps
+ are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>P</i>) is String and if <a
+ href="#sec-samevalue">SameValue</a>(<i>O</i>, <i>Receiver</i>) is <b>true</b>, then
+ <ol class="block">
+ <li>Let <i>numericIndex</i> be <a href="#sec-canonicalnumericindexstring">CanonicalNumericIndexString</a>
+ (<i>P</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>numericIndex</i> is not an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</li>
+ <li>If <i>numericIndex</i> is not <b>undefined</b>, then
+ <ol class="block">
+ <li>Return <a href="#sec-integerindexedelementset">IntegerIndexedElementSet</a> (<i>O</i>, <i>numericIndex</i>,
+ <i>V</i>).</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Return the result of calling the default ordinary object [[Set]] internal method (<a
+ href="#sec-ordinary-object-internal-methods-and-internal-slots-get-p-receiver">9.1.8</a>) on <i>O</i> passing
+ <i>P</i>, <i>V</i>, and <i>Receiver</i> as arguments.</li>
+ </ol>
+ </section>
+
+ <section id="sec-integer-indexed-exotic-objects-ownpropertykeys">
+ <h1><span class="secnum" id="sec-9.4.5.6"><a href="#sec-integer-indexed-exotic-objects-ownpropertykeys"
+ title="link to this section">9.4.5.6</a></span> [[OwnPropertyKeys]] ()</h1>
+
+ <p>When the [[OwnPropertyKeys]] internal method of an Integer Indexed exotic object <var>O</var> is called the following
+ steps are taken:</p>
+
+ <ol class="proc">
+ <li>Let <i>keys</i> be a new empty <a href="#sec-list-and-record-specification-type">List</a>.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>O</i> is an Object that has [[ViewedArrayBuffer]],
+ [[ArrayLength]], [[ByteOffset]], and [[TypedArrayName]] internal slots.</li>
+ <li>Let <i>len</i> be the value of <i>O</i>&rsquo;s [[ArrayLength]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>For each integer <i>i</i> starting with 0 such that <i>i</i> &lt; <i>len</i>, in ascending order,
+ <ol class="block">
+ <li>Add <a href="#sec-tostring">ToString</a>(<i>i</i>) as the last element of <i>keys</i>.</li>
+ </ol>
+ </li>
+ <li>For each own <a href="#sec-object-type">property key</a> <i>P</i> of <i>O</i> such that <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>P</i>) is String and <i>P</i> is not an integer index, in
+ property creation order
+ <ol class="block">
+ <li>Add <i>P</i> as the last element of <i>keys</i>.</li>
+ </ol>
+ </li>
+ <li>For each own <a href="#sec-object-type">property key</a> <i>P</i> of <i>O</i> such that <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>P</i>) is Symbol, in property creation order
+ <ol class="block">
+ <li>Add <i>P</i> as the last element of <i>keys</i>.</li>
+ </ol>
+ </li>
+ <li>Return <i>keys</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-integerindexedobjectcreate">
+ <h1><span class="secnum" id="sec-9.4.5.7"><a href="#sec-integerindexedobjectcreate"
+ title="link to this section">9.4.5.7</a></span> IntegerIndexedObjectCreate <span style="font-family:
+ sans-serif">(prototype, internalSlotsList)</span></h1>
+
+ <p>The abstract operation IntegerIndexedObjectCreate with arguments <var>prototype</var> and <var>internalSlotsList</var>
+ is used to specify the creation of new Integer Indexed exotic objects. The argument <var>internalSlotsList</var> is a <a
+ href="#sec-list-and-record-specification-type">List</a> of the names of additional internal slots that must be defined as
+ part of the object. IntegerIndexedObjectCreate performs the following steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>A</i> be a newly created object with an <a href="#sec-object-internal-methods-and-internal-slots">internal
+ slot</a> for each name in <i>internalSlotsList</i>.</li>
+ <li>Set <i>A</i>&rsquo;s essential internal methods to the default ordinary object definitions specified in <a
+ href="#sec-ordinary-object-internal-methods-and-internal-slots">9.1</a>.</li>
+ <li>Set the [[GetOwnProperty]] internal method of <i>A</i> as specified in <a
+ href="#sec-integer-indexed-exotic-objects-getownproperty-p">9.4.5.1</a>.</li>
+ <li>Set the [[HasProperty]] internal method of <i>A</i> as specified in <a
+ href="#sec-integer-indexed-exotic-objects-hasproperty-p">9.4.5.2</a>.</li>
+ <li>Set the [[DefineOwnProperty]] internal method of <i>A</i> as specified in <a
+ href="#sec-integer-indexed-exotic-objects-defineownproperty-p-desc">9.4.5.3</a>.</li>
+ <li>Set the [[Get]] internal method of <i>A</i> as specified in <a
+ href="#sec-integer-indexed-exotic-objects-get-p-receiver">9.4.5.4</a>.</li>
+ <li>Set the [[Set]] internal method of <i>A</i> as specified in <a
+ href="#sec-integer-indexed-exotic-objects-set-p-v-receiver">9.4.5.5</a>.</li>
+ <li>Set the [[OwnPropertyKeys]] internal method of <i>A</i> as specified in <a
+ href="#sec-integer-indexed-exotic-objects-ownpropertykeys">9.4.5.6</a>.</li>
+ <li>Set the [[Prototype]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>A</i> to
+ <i>prototype</i>.</li>
+ <li>Set the [[Extensible]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>A</i> to
+ <b>true</b>.</li>
+ <li>Return <i>A</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-integerindexedelementget">
+ <h1><span class="secnum" id="sec-9.4.5.8"><a href="#sec-integerindexedelementget"
+ title="link to this section">9.4.5.8</a></span> IntegerIndexedElementGet ( O, index )</h1>
+
+ <p>The abstract operation IntegerIndexedElementGet with arguments <var>O</var> and <var>index</var> performs the following
+ steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>index</i>) is Number.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>O</i> is an Object that has [[ViewedArrayBuffer]],
+ [[ArrayLength]], [[ByteOffset]], and [[TypedArrayName]] internal slots.</li>
+ <li>Let <i>buffer</i> be the value of <i>O</i>&rsquo;s [[ViewedArrayBuffer]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>If <a href="#sec-isdetachedbuffer">IsDetachedBuffer</a>(<i>buffer</i>) is <b>true</b>, throw a <b>TypeError</b>
+ exception.</li>
+ <li>If <a href="#sec-isinteger">IsInteger</a>(<i>index</i>) is <b>false</b>, return <b>undefined</b></li>
+ <li>If <i>index</i> = &minus;0, return <b>undefined</b>.</li>
+ <li>Let <i>length</i> be the value of <i>O</i>&rsquo;s [[ArrayLength]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>If <i>index</i> &lt; 0 or <i>index</i> &ge; <i>length</i>, return <b>undefined</b>.</li>
+ <li>Let <i>offset</i> be the value of <i>O</i>&rsquo;s [[ByteOffset]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>Let <i>arrayTypeName</i> be the string value of <i>O</i>&rsquo;s [[TypedArrayName]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>Let <i>elementSize</i> be the Number value of the Element Size value specified in <a href="#table-49">Table 49</a>
+ for <i>arrayTypeName</i>.</li>
+ <li>Let <i>indexedPosition</i> = (<i>index</i> &times; <i>elementSize</i>) + <i>offset</i>.</li>
+ <li>Let <i>elementType</i> be the string value of the Element Type value in <a href="#table-49">Table 49</a> for
+ <i>arrayTypeName</i>.</li>
+ <li>Return <a href="#sec-getvaluefrombuffer">GetValueFromBuffer</a>(<i>buffer</i>, <i>indexedPosition</i>,
+ <i>elementType</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-integerindexedelementset">
+ <h1><span class="secnum" id="sec-9.4.5.9"><a href="#sec-integerindexedelementset"
+ title="link to this section">9.4.5.9</a></span> IntegerIndexedElementSet ( O, index, value )</h1>
+
+ <p>The abstract operation IntegerIndexedElementSet with arguments <var>O</var>, <var>index</var>, and <var>value</var>
+ performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>index</i>) is Number.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>O</i> is an Object that has [[ViewedArrayBuffer]],
+ [[ArrayLength]], [[ByteOffset]], and [[TypedArrayName]] internal slots.</li>
+ <li>Let <i>numValue</i> be <a href="#sec-tonumber">ToNumber</a>(<i>value</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>numValue</i>).</li>
+ <li>Let <i>buffer</i> be the value of <i>O</i>&rsquo;s [[ViewedArrayBuffer]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>If <a href="#sec-isdetachedbuffer">IsDetachedBuffer</a>(<i>buffer</i>) is <b>true</b>, throw a <b>TypeError</b>
+ exception.</li>
+ <li>If <a href="#sec-isinteger">IsInteger</a>(<i>index</i>) is <b>false</b>, return <b>false</b></li>
+ <li>If <i>index</i> = &minus;0, return <b>false</b>.</li>
+ <li>Let <i>length</i> be the value of <i>O</i>&rsquo;s [[ArrayLength]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>If <i>index</i> &lt; 0 or <i>index</i> &ge; <i>length</i>, return <b>false</b>.</li>
+ <li>Let <i>offset</i> be the value of <i>O</i>&rsquo;s [[ByteOffset]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>Let <i>arrayTypeName</i> be the string value of <i>O</i>&rsquo;s [[TypedArrayName]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>Let <i>elementSize</i> be the Number value of the Element Size value specified in <a href="#table-49">Table 49</a>
+ for <i>arrayTypeName</i>.</li>
+ <li>Let <i>indexedPosition</i> = (<i>index</i> &times; <i>elementSize</i>) + <i>offset</i>.</li>
+ <li>Let <i>elementType</i> be the string value of the Element Type value in <a href="#table-49">Table 49</a> for
+ <i>arrayTypeName</i>.</li>
+ <li>Let <i>status</i> be <a href="#sec-setvalueinbuffer">SetValueInBuffer</a>(<i>buffer</i>, <i>indexedPosition</i>,
+ <i>elementType</i>, <i>numValue</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>status</i>).</li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-module-namespace-exotic-objects">
+ <div class="front">
+ <h1><span class="secnum" id="sec-9.4.6"><a href="#sec-module-namespace-exotic-objects"
+ title="link to this section">9.4.6</a></span> Module Namespace Exotic Objects</h1>
+
+ <p>A <i>module namespace object</i> is an exotic object that exposes the bindings exported from an ECMAScript <span
+ class="nt">Module</span> <var>(See <a href="#sec-exports">15.2.3</a>)</var>. There is a one-to-one correspondence between
+ the String-keyed own properties of a module namespace exotic object and the binding names exported by the <span
+ class="nt">Module</span>. The exported bindings include any bindings that are indirectly exported using <code>export
+ *</code> export items. Each String-valued own <a href="#sec-object-type">property key</a> is the StringValue of the
+ corresponding exported binding name. These are the only String-keyed properties of a module namespace exotic object. Each
+ such property has the attributes {[[Configurable]]: <span class="value">false</span>, [[Enumerable]]: <span
+ class="value">true</span>}. Module namespace objects are not extensible.</p>
+
+ <p>Module namespace objects have the internal slots defined in <a href="#table-29">Table 29</a>.</p>
+
+ <figure>
+ <figcaption><span id="table-29">Table 29</span> &mdash; Internal Slots of Module Namespace Exotic Objects</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Internal Slot</th>
+ <th>Type</th>
+ <th>Description</th>
+ </tr>
+ <tr>
+ <td>[[Module]]</td>
+ <td>Module Record</td>
+ <td>The Module Record whose exports this namespace exposes.</td>
+ </tr>
+ <tr>
+ <td>[[Exports]]</td>
+ <td><a href="#sec-list-and-record-specification-type">List</a> of String</td>
+ <td>A <a href="#sec-list-and-record-specification-type">List</a> containing the String values of the exported names exposed as own properties of this object. The list is ordered as if an Array of those string values had been sorted using <code><a href="#sec-array.prototype.sort">Array.prototype.sort</a></code> using <a href="#sec-sortcompare">SortCompare</a> as <i><span style="font-family: Times New Roman">comparefn</span>.</i></td>
+ </tr>
+ </table>
+ </figure>
+
+ <p>Module namespace exotic objects provide alternative definitions for all of the internal methods.</p>
+ </div>
+
+ <section id="sec-module-namespace-exotic-objects-getprototypeof">
+ <h1><span class="secnum" id="sec-9.4.6.1"><a href="#sec-module-namespace-exotic-objects-getprototypeof"
+ title="link to this section">9.4.6.1</a></span> [[GetPrototypeOf]] ( )</h1>
+
+ <p>When the [[GetPrototypeOf]] internal method of a module namespace exotic object <var>O</var> is called the following
+ steps are taken:</p>
+
+ <ol class="proc">
+ <li>Return <b>null</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-module-namespace-exotic-objects-setprototypeof-v">
+ <h1><span class="secnum" id="sec-9.4.6.2"><a href="#sec-module-namespace-exotic-objects-setprototypeof-v"
+ title="link to this section">9.4.6.2</a></span> [[SetPrototypeOf]] (V)</h1>
+
+ <p>When the [[SetPrototypeOf]] internal method of a module namespace exotic object <var>O</var> is called with argument
+ <var>V</var> the following steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: Either <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>V</i>) is Object or <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>V</i>) is Null.</li>
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-module-namespace-exotic-objects-isextensible">
+ <h1><span class="secnum" id="sec-9.4.6.3"><a href="#sec-module-namespace-exotic-objects-isextensible"
+ title="link to this section">9.4.6.3</a></span> [[IsExtensible]] ( )</h1>
+
+ <p>When the [[IsExtensible]] internal method of a module namespace exotic object <var>O</var> is called the following
+ steps are taken:</p>
+
+ <ol class="proc">
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-module-namespace-exotic-objects-preventextensions">
+ <h1><span class="secnum" id="sec-9.4.6.4"><a href="#sec-module-namespace-exotic-objects-preventextensions"
+ title="link to this section">9.4.6.4</a></span> [[PreventExtensions]] ( )</h1>
+
+ <p>When the [[PreventExtensions]] internal method of a module namespace exotic object <var>O</var> is called the following
+ steps are taken:</p>
+
+ <ol class="proc">
+ <li>Return <b>true</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-module-namespace-exotic-objects-getownproperty-p">
+ <h1><span class="secnum" id="sec-9.4.6.5"><a href="#sec-module-namespace-exotic-objects-getownproperty-p"
+ title="link to this section">9.4.6.5</a></span> [[GetOwnProperty]] (P)</h1>
+
+ <p>When the [[GetOwnProperty]] internal method of a module namespace exotic object <var>O</var> is called with <a
+ href="#sec-object-type">property key</a> <var>P</var>, the following steps are taken:</p>
+
+ <ol class="proc">
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>P</i>) is Symbol, return <a
+ href="#sec-ordinarygetownproperty">OrdinaryGetOwnProperty</a>(<i>O</i>, <i>P</i>).</li>
+ <li>Throw a <b>TypeError</b> exception.</li>
+ </ol>
+ </section>
+
+ <section id="sec-module-namespace-exotic-objects-defineownproperty-p-desc">
+ <h1><span class="secnum" id="sec-9.4.6.6"><a href="#sec-module-namespace-exotic-objects-defineownproperty-p-desc"
+ title="link to this section">9.4.6.6</a></span> [[DefineOwnProperty]] (P, Desc)</h1>
+
+ <p>When the [[DefineOwnProperty]] internal method of a module namespace exotic object <var>O</var> is called with <a
+ href="#sec-object-type">property key</a> <var>P</var> and <a href="#sec-property-descriptor-specification-type">Property
+ Descriptor</a> <span class="nt">Desc</span>, the following steps are taken:</p>
+
+ <ol class="proc">
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-module-namespace-exotic-objects-hasproperty-p">
+ <h1><span class="secnum" id="sec-9.4.6.7"><a href="#sec-module-namespace-exotic-objects-hasproperty-p"
+ title="link to this section">9.4.6.7</a></span> [[HasProperty]] (P)</h1>
+
+ <p>When the [[HasProperty]] internal method of a module namespace exotic object <var>O</var> is called with <a
+ href="#sec-object-type">property key</a> <var>P</var>, the following steps are taken:</p>
+
+ <ol class="proc">
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>P</i>) is Symbol, return <a
+ href="#sec-ordinaryhasproperty">OrdinaryHasProperty</a>(<i>O</i>, <i>P</i>).</li>
+ <li>Let <i>exports</i> be the value of <i>O</i>&rsquo;s [[Exports]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>If <i>P</i> is an element of <i>exports</i>, return <b>true</b>.</li>
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-module-namespace-exotic-objects-get-p-receiver">
+ <h1><span class="secnum" id="sec-9.4.6.8"><a href="#sec-module-namespace-exotic-objects-get-p-receiver"
+ title="link to this section">9.4.6.8</a></span> [[Get]] (P, Receiver)</h1>
+
+ <p>When the [[Get]] internal method of a module namespace exotic object <var>O</var> is called with <a
+ href="#sec-object-type">property key</a> <var>P</var> and <a href="#sec-ecmascript-language-types">ECMAScript language
+ value</a> <span class="nt">Receiver</span> the following steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>P</i>) is Symbol, then
+ <ol class="block">
+ <li>Return the result of calling the default ordinary object [[Get]] internal method (<a
+ href="#sec-ordinary-object-internal-methods-and-internal-slots-get-p-receiver">9.1.8</a>) on <i>O</i> passing
+ <i>P</i> and <i>Receiver</i> as arguments.</li>
+ </ol>
+ </li>
+ <li>Let <i>exports</i> be the value of <i>O</i>&rsquo;s [[Exports]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>If <i>P</i> is not an element of <i>exports</i>, return <b>undefined</b>.</li>
+ <li>Let <i>m</i> be the value of <i>O</i>&rsquo;s [[Module]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>Let <i>binding</i> be <i>m</i>.<a href="#sec-resolveexport">ResolveExport</a>(<i>P</i>, &laquo;&raquo;,
+ &laquo;&raquo;).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>binding</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>binding</i> is neither <b>null</b> nor
+ <code>"ambiguous"</code>.</li>
+ <li>Let <i>targetModule</i> be <i>binding</i>.[[module]],</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>targetModule</i> is not <b>undefined</b>.</li>
+ <li>Let <i>targetEnv</i> be <i>targetModule</i>.[[Environment]].</li>
+ <li>If <i>targetEnv</i> is <b>undefined</b>, throw a <b>ReferenceError</b> exception.</li>
+ <li>Let <i>targetEnvRec</i> be <i>targetEnv</i>&rsquo;s EnvironmentRecord.</li>
+ <li>Return <i>targetEnvRec</i>.GetBindingValue(<i>binding.</i>[[bindingName]], <b>true</b>).</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> <a href="#sec-resolveexport">ResolveExport</a> is idempotent and side-effect free. An
+ implementation might choose to pre-compute or cache the <a href="#sec-resolveexport">ResolveExport</a> results for the
+ [[Exports]] of each module namespace exotic object.</p>
+ </div>
+ </section>
+
+ <section id="sec-module-namespace-exotic-objects-set-p-v-receiver">
+ <h1><span class="secnum" id="sec-9.4.6.9"><a href="#sec-module-namespace-exotic-objects-set-p-v-receiver"
+ title="link to this section">9.4.6.9</a></span> [[Set]] ( P, V, Receiver)</h1>
+
+ <p>When the [[Set]] internal method of <span style="font-family: Times New Roman">a</span> module namespace exotic object
+ <var>O</var> is called with <a href="#sec-object-type">property key</a> <var>P</var>, value <var>V</var>, and <a
+ href="#sec-ecmascript-language-types">ECMAScript language value</a> <span class="nt">Receiver</span>, the following steps
+ are taken:</p>
+
+ <ol class="proc">
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-module-namespace-exotic-objects-delete-p">
+ <h1><span class="secnum" id="sec-9.4.6.10"><a href="#sec-module-namespace-exotic-objects-delete-p"
+ title="link to this section">9.4.6.10</a></span> [[Delete]] (P)</h1>
+
+ <p>When the [[Delete]] internal method of a module namespace exotic object <var>O</var> is called with <a
+ href="#sec-object-type">property key</a> <var>P</var> the following steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>Let <i>exports</i> be the value of <i>O</i>&rsquo;s [[Exports]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>If <i>P</i> is an element of <i>exports</i>, return <b>false</b>.</li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-module-namespace-exotic-objects-enumerate">
+ <h1><span class="secnum" id="sec-9.4.6.11"><a href="#sec-module-namespace-exotic-objects-enumerate"
+ title="link to this section">9.4.6.11</a></span> [[Enumerate]] ()</h1>
+
+ <p>When the [[Enumerate]] internal method of a module namespace exotic object <var>O</var> is called the following steps
+ are taken:</p>
+
+ <ol class="proc">
+ <li>Let <i>exports</i> be the value of <i>O</i>&rsquo;s [[Exports]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>Return <a href="#sec-createlistiterator">CreateListIterator</a>(<i>exports</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-module-namespace-exotic-objects-ownpropertykeys">
+ <h1><span class="secnum" id="sec-9.4.6.12"><a href="#sec-module-namespace-exotic-objects-ownpropertykeys"
+ title="link to this section">9.4.6.12</a></span> [[OwnPropertyKeys]] ( )</h1>
+
+ <p>When the [[OwnPropertyKeys]] internal method of a module namespace exotic object <var>O</var> is called the following
+ steps are taken:</p>
+
+ <ol class="proc">
+ <li>Let <i>exports</i> be a copy of the value of <i>O</i>&rsquo;s [[Exports]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a>.</li>
+ <li>Let <i>symbolKeys</i> be the result of calling the default ordinary object [[OwnPropertyKeys]] internal method (<a
+ href="#sec-ordinary-object-internal-methods-and-internal-slots-ownpropertykeys">9.1.12</a>) on <i>O</i> passing no
+ arguments.</li>
+ <li>Append all the entries of <i>symbolKeys</i> to the end of <i>exports</i>.</li>
+ <li>Return <i>exports</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-modulenamespacecreate">
+ <h1><span class="secnum" id="sec-9.4.6.13"><a href="#sec-modulenamespacecreate"
+ title="link to this section">9.4.6.13</a></span> ModuleNamespaceCreate (module, exports)</h1>
+
+ <p>The abstract operation ModuleNamespaceCreate with arguments <var>module</var>, and <var>exports</var> is used to
+ specify the creation of new module namespace exotic objects. It performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>module</i> is a Module Record (<a
+ href="#sec-abstract-module-records">see 15.2.1.14</a>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>module</i>.[[Namespace]] is <b>undefined</b>.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>exports</i> is a <a
+ href="#sec-list-and-record-specification-type">List</a> of string values.</li>
+ <li>Let <i>M</i> be a newly created object.</li>
+ <li>Set <i>M</i>&rsquo;s essential internal methods to the definitions specified in <a
+ href="#sec-module-namespace-exotic-objects">9.4.6</a>.</li>
+ <li>Set <i>M</i>&rsquo;s [[Module]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> to
+ <i>module</i>.</li>
+ <li>Set <i>M</i>&rsquo;s [[Exports]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> to
+ <i>exports</i>.</li>
+ <li>Create own properties of <i>M</i> corresponding to the definitions in <a
+ href="#sec-module-namespace-objects">26.3</a>.</li>
+ <li>Set <i>module</i>.[[Namespace]] to <i>M</i>.</li>
+ <li>Return <i>M</i>.</li>
+ </ol>
+ </section>
+ </section>
+ </section>
+
+ <section id="sec-proxy-object-internal-methods-and-internal-slots">
+ <div class="front">
+ <h1><span class="secnum" id="sec-9.5"><a href="#sec-proxy-object-internal-methods-and-internal-slots"
+ title="link to this section">9.5</a></span> Proxy Object Internal Methods and Internal Slots</h1>
+
+ <p>A proxy object is an exotic object whose essential internal methods are partially implemented using ECMAScript code.
+ Every proxy objects has an <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> called
+ [[ProxyHandler]]. The value of [[ProxyHandler]] is an object, called the proxy&rsquo;s <i>handler object</i>, or <span
+ class="value">null</span>. Methods (see <a href="#table-30">Table 30</a>) of a handler object may be used to augment the
+ implementation for one or more of the proxy object&rsquo;s internal methods. Every proxy object also has an <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> called [[ProxyTarget]] whose value is either an
+ object or the <b>null</b> value. This object is called the proxy&rsquo;s <i>target object</i>.</p>
+
+ <figure>
+ <figcaption><span id="table-30">Table 30</span> &mdash; Proxy Handler Methods</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Internal Method</th>
+ <th>Handler Method</th>
+ </tr>
+ <tr>
+ <td>[[GetPrototypeOf]]</td>
+ <td><code>getPrototypeOf</code></td>
+ </tr>
+ <tr>
+ <td>[[SetPrototypeOf]]</td>
+ <td><code>setPrototypeOf</code></td>
+ </tr>
+ <tr>
+ <td>[[IsExtensible]]</td>
+ <td><code>isExtensible</code></td>
+ </tr>
+ <tr>
+ <td>[[PreventExtensions]]</td>
+ <td><code>preventExtensions</code></td>
+ </tr>
+ <tr>
+ <td>[[GetOwnProperty]]</td>
+ <td><code>getOwnPropertyDescriptor</code></td>
+ </tr>
+ <tr>
+ <td>[[HasProperty]]</td>
+ <td><code>has</code></td>
+ </tr>
+ <tr>
+ <td>[[Get]]</td>
+ <td><code>get</code></td>
+ </tr>
+ <tr>
+ <td>[[Set]]</td>
+ <td><code>set</code></td>
+ </tr>
+ <tr>
+ <td>[[Delete]]</td>
+ <td><code>deleteProperty</code></td>
+ </tr>
+ <tr>
+ <td>[[DefineOwnProperty]]</td>
+ <td><code>defineProperty</code></td>
+ </tr>
+ <tr>
+ <td>[[Enumerate]]</td>
+ <td><code>enumerate</code></td>
+ </tr>
+ <tr>
+ <td>[[OwnPropertyKeys]]</td>
+ <td><code>ownKeys</code></td>
+ </tr>
+ <tr>
+ <td>[[Call]]</td>
+ <td><code>apply</code></td>
+ </tr>
+ <tr>
+ <td>[[Construct]]</td>
+ <td><code>construct</code></td>
+ </tr>
+ </table>
+ </figure>
+
+ <p>When a handler method is called to provide the implementation of a proxy object internal method, the handler method is
+ passed the proxy&rsquo;s target object as a parameter. A proxy&rsquo;s handler object does not necessarily have a method
+ corresponding to every essential internal method. Invoking an internal method on the proxy results in the invocation of the
+ corresponding internal method on the proxy&rsquo;s target object if the handler object does not have a method corresponding
+ to the internal trap.</p>
+
+ <p>The [[ProxyHandler]] and [[ProxyTarget]] internal slots of a proxy object are always initialized when the object is
+ created and typically may not be modified. Some proxy objects are created in a manner that permits them to be subsequently
+ <i>revoked</i>. When a proxy is revoked, its [[ProxyHander]] and [[ProxyTarget]] internal slots are set to <b>null</b>
+ causing subsequent invocations of internal methods on that proxy object to throw a <span class="value">TypeError</span>
+ exception.</p>
+
+ <p>Because proxy objects permit the implementation of internal methods to be provided by arbitrary ECMAScript code, it is
+ possible to define a proxy object whose handler methods violates the invariants defined in <a
+ href="#sec-invariants-of-the-essential-internal-methods">6.1.7.3</a>. Some of the internal method invariants defined in <a
+ href="#sec-invariants-of-the-essential-internal-methods">6.1.7.3</a> are essential integrity invariants. These invariants
+ are explicitly enforced by the proxy object internal methods specified in this section. An ECMAScript implementation must be
+ robust in the presence of all possible invariant violations.</p>
+
+ <p>In the following algorithm descriptions, assume <var>O</var> is an ECMAScript proxy object, <var>P</var> is a <a
+ href="#sec-object-type">property key value</a>, <var>V</var> is any <a href="#sec-ecmascript-language-types">ECMAScript
+ language value</a> and <span style="font-family: Times New Roman">Desc</span> is a <a
+ href="#sec-property-descriptor-specification-type">Property Descriptor</a> record.</p>
+ </div>
+
+ <section id="sec-proxy-object-internal-methods-and-internal-slots-getprototypeof">
+ <h1><span class="secnum" id="sec-9.5.1"><a href="#sec-proxy-object-internal-methods-and-internal-slots-getprototypeof"
+ title="link to this section">9.5.1</a></span> [[GetPrototypeOf]] ( )</h1>
+
+ <p>When the [[GetPrototypeOf]] internal method of a Proxy exotic object <var>O</var> is called the following steps are
+ taken:</p>
+
+ <ol class="proc">
+ <li>Let <i>handler</i> be the value of the [[ProxyHandler]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>If <i>handler</i> is <b>null</b>, throw a <b>TypeError</b> exception.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>handler</i>) is Object.</li>
+ <li>Let <i>target</i> be the value of the [[ProxyTarget]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>Let <i>trap</i> be <a href="#sec-getmethod">GetMethod</a>(<i>handler</i>, <code>"getPrototypeOf"</code>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>trap</i>).</li>
+ <li>If <i>trap</i> is <b>undefined</b>, then
+ <ol class="block">
+ <li>Return <i>target</i>.[[GetPrototypeOf]]().</li>
+ </ol>
+ </li>
+ <li>Let <i>handlerProto</i> be <a href="#sec-call">Call</a>(<i>trap</i>, <i>handler</i>,
+ &laquo;<i>target</i>&raquo;).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>handlerProto</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>handlerProto</i>) is neither Object nor Null, throw a
+ <b>TypeError</b> exception.</li>
+ <li>Let <i>extensibleTarget</i> be <a href="#sec-isextensible-o">IsExtensible</a>(<i>target</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>extensibleTarget</i>).</li>
+ <li>If <i>extensibleTarget</i> is <b>true</b>, return <i>handlerProto</i>.</li>
+ <li>Let <i>targetProto</i> be <i>target</i>.[[GetPrototypeOf]]().</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>targetProto</i>).</li>
+ <li>If <a href="#sec-samevalue">SameValue</a>(<i>handlerProto</i>, <i>targetProto</i>) is <b>false</b>, throw a
+ <b>TypeError</b> exception.</li>
+ <li>Return <i>handlerProto</i>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> [[GetPrototypeOf]] for proxy objects enforces the following invariant:</p>
+
+ <ul>
+ <li>
+ <p>The result of [[GetPrototypeOf]] must be either an Object or <b>null</b>.</p>
+ </li>
+
+ <li>
+ <p>If the target object is not extensible, [[GetPrototypeOf]] applied to the proxy object must return the same value
+ as [[GetPrototypeOf]] applied to the proxy object&rsquo;s target object.</p>
+ </li>
+ </ul>
+ </div>
+ </section>
+
+ <section id="sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v">
+ <h1><span class="secnum" id="sec-9.5.2"><a href="#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v"
+ title="link to this section">9.5.2</a></span> [[SetPrototypeOf]] (V)</h1>
+
+ <p>When the [[SetPrototypeOf]] internal method of a Proxy exotic object <var>O</var> is called with argument <var>V</var>
+ the following steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: Either <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>V</i>) is Object or <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>V</i>) is Null.</li>
+ <li>Let <i>handler</i> be the value of the [[ProxyHandler]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>If <i>handler</i> is <b>null</b>, throw a <b>TypeError</b> exception.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>handler</i>) is Object.</li>
+ <li>Let <i>target</i> be the value of the [[ProxyTarget]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>Let <i>trap</i> be <a href="#sec-getmethod">GetMethod</a>(<i>handler</i>, <code>"setPrototypeOf"</code>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>trap</i>).</li>
+ <li>If <i>trap</i> is <b>undefined</b>, then
+ <ol class="block">
+ <li>Return <i>target</i>.[[SetPrototypeOf]](<i>V</i>).</li>
+ </ol>
+ </li>
+ <li>Let <i>booleanTrapResult</i> be <a href="#sec-toboolean">ToBoolean</a>(<a href="#sec-call">Call</a>(<i>trap</i>,
+ <i>handler</i>, &laquo;<i>target</i>, <i>V</i>&raquo;)).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>booleanTrapResult</i>).</li>
+ <li>Let <i>extensibleTarget</i> be <a href="#sec-isextensible-o">IsExtensible</a>(<i>target</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>extensibleTarget</i>).</li>
+ <li>If <i>extensibleTarget</i> is <b>true</b>, return <i>booleanTrapResult</i>.</li>
+ <li>Let <i>targetProto</i> be <i>target</i>.[[GetPrototypeOf]]().</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>targetProto</i>).</li>
+ <li>If <i>booleanTrapResult</i> is <b>true</b> and <a href="#sec-samevalue">SameValue</a>(<i>V</i>, <i>targetProto</i>) is
+ <b>false</b>, throw a <b>TypeError</b> exception.</li>
+ <li>Return <i>booleanTrapResult</i>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> [[SetPrototypeOf]] for proxy objects enforces the following invariant:</p>
+
+ <ul>
+ <li>
+ <p>The result of [[SetPrototypeOf]] is a Boolean value.</p>
+ </li>
+
+ <li>
+ <p>If the target object is not extensible, the argument value must be the same as the result of [[GetPrototypeOf]]
+ applied to target object.</p>
+ </li>
+ </ul>
+ </div>
+ </section>
+
+ <section id="sec-proxy-object-internal-methods-and-internal-slots-isextensible">
+ <h1><span class="secnum" id="sec-9.5.3"><a href="#sec-proxy-object-internal-methods-and-internal-slots-isextensible"
+ title="link to this section">9.5.3</a></span> [[IsExtensible]] ( )</h1>
+
+ <p>When the [[IsExtensible]] internal method of a Proxy exotic object <var>O</var> is called the following steps are
+ taken:</p>
+
+ <ol class="proc">
+ <li>Let <i>handler</i> be the value of the [[ProxyHandler]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>If <i>handler</i> is <b>null</b>, throw a <b>TypeError</b> exception.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>handler</i>) is Object.</li>
+ <li>Let <i>target</i> be the value of the [[ProxyTarget]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>Let <i>trap</i> be <a href="#sec-getmethod">GetMethod</a>(<i>handler</i>, <code>"isExtensible"</code>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>trap</i>).</li>
+ <li>If <i>trap</i> is <b>undefined</b>, then
+ <ol class="block">
+ <li>Return <i>target</i>.[[IsExtensible]]().</li>
+ </ol>
+ </li>
+ <li>Let <i>booleanTrapResult</i> be <a href="#sec-toboolean">ToBoolean</a>(<a href="#sec-call">Call</a>(<i>trap</i>,
+ <i>handler</i>, &laquo;<i>target</i>&raquo;)).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>booleanTrapResult</i>).</li>
+ <li>Let <i>targetResult</i> be <i>target</i>.[[IsExtensible]]().</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>targetResult</i>).</li>
+ <li>If <a href="#sec-samevalue">SameValue</a>(<i>booleanTrapResult</i>, <i>targetResult</i>) is <b>false</b>, throw a
+ <b>TypeError</b> exception.</li>
+ <li>Return <i>booleanTrapResult</i>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> [[IsExtensible]] for proxy objects enforces the following invariant:</p>
+
+ <ul>
+ <li>
+ <p>The result of [[IsExtensible]] is a Boolean value.</p>
+ </li>
+
+ <li>
+ <p>[[IsExtensible]] applied to the proxy object must return the same value as [[IsExtensible]] applied to the proxy
+ object&rsquo;s target object with the same argument.</p>
+ </li>
+ </ul>
+ </div>
+ </section>
+
+ <section id="sec-proxy-object-internal-methods-and-internal-slots-preventextensions">
+ <h1><span class="secnum" id="sec-9.5.4"><a href="#sec-proxy-object-internal-methods-and-internal-slots-preventextensions"
+ title="link to this section">9.5.4</a></span> [[PreventExtensions]] ( )</h1>
+
+ <p>When the [[PreventExtensions]] internal method of a Proxy exotic object <var>O</var> is called the following steps are
+ taken:</p>
+
+ <ol class="proc">
+ <li>Let <i>handler</i> be the value of the [[ProxyHandler]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>If <i>handler</i> is <b>null</b>, throw a <b>TypeError</b> exception.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>handler</i>) is Object.</li>
+ <li>Let <i>target</i> be the value of the [[ProxyTarget]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>Let <i>trap</i> be <a href="#sec-getmethod">GetMethod</a>(<i>handler</i>, <code>"preventExtensions"</code>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>trap</i>).</li>
+ <li>If <i>trap</i> is <b>undefined</b>, then
+ <ol class="block">
+ <li>Return <i>target</i>.[[PreventExtensions]]().</li>
+ </ol>
+ </li>
+ <li>Let <i>booleanTrapResult</i> be <a href="#sec-toboolean">ToBoolean</a>(<a href="#sec-call">Call</a>(<i>trap</i>,
+ <i>handler</i>, &laquo;<i>target</i>&raquo;)).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>booleanTrapResult</i>).</li>
+ <li>If <i>booleanTrapResult</i> is <b>true</b>, then
+ <ol class="block">
+ <li>Let <i>targetIsExtensible</i> be <i>target</i>.[[IsExtensible]]().</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>targetIsExtensible</i>).</li>
+ <li>If <i>targetIsExtensible</i> is <b>true</b>, throw a <b>TypeError</b> exception.</li>
+ </ol>
+ </li>
+ <li>Return <i>booleanTrapResult</i>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> [[PreventExtensions]] for proxy objects enforces the following invariant:</p>
+
+ <ul>
+ <li>
+ <p>The result of [[PreventExtensions]] is a Boolean value.</p>
+ </li>
+
+ <li>
+ <p>[[PreventExtensions]] applied to the proxy object only returns <b>true</b> if [[IsExtensible]] applied to the proxy
+ object&rsquo;s target object is <b>false</b>.</p>
+ </li>
+ </ul>
+ </div>
+ </section>
+
+ <section id="sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p">
+ <h1><span class="secnum" id="sec-9.5.5"><a href="#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p"
+ title="link to this section">9.5.5</a></span> [[GetOwnProperty]] (P)</h1>
+
+ <p>When the [[GetOwnProperty]] internal method of a Proxy exotic object <var>O</var> is called with <a
+ href="#sec-object-type">property key</a> <var>P</var>, the following steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>Let <i>handler</i> be the value of the [[ProxyHandler]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>If <i>handler</i> is <b>null</b>, throw a <b>TypeError</b> exception.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>handler</i>) is Object.</li>
+ <li>Let <i>target</i> be the value of the [[ProxyTarget]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>Let <i>trap</i> be <a href="#sec-getmethod">GetMethod</a>(<i>handler</i>,
+ <code>"getOwnPropertyDescriptor"</code>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>trap</i>).</li>
+ <li>If <i>trap</i> is <b>undefined</b>, then
+ <ol class="block">
+ <li>Return <i>target</i>.[[GetOwnProperty]](<i>P</i>).</li>
+ </ol>
+ </li>
+ <li>Let <i>trapResultObj</i> be <a href="#sec-call">Call</a>(<i>trap</i>, <i>handler</i>, &laquo;<i>target</i>,
+ <i>P</i>&raquo;).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>trapResultObj</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>trapResultObj</i>) is neither Object nor Undefined,
+ throw a <b>TypeError</b> exception.</li>
+ <li>Let <i>targetDesc</i> be <i>target</i>.[[GetOwnProperty]](<i>P</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>targetDesc</i>).</li>
+ <li>If <i>trapResultObj</i> is <b>undefined</b>, then
+ <ol class="block">
+ <li>If <i>targetDesc</i> is <b>undefined</b>, return <b>undefined</b>.</li>
+ <li>If <i>targetDesc</i>.[[Configurable]] is <b>false</b>, throw a <b>TypeError</b> exception.</li>
+ <li>Let <i>extensibleTarget</i> be <a href="#sec-isextensible-o">IsExtensible</a>(<i>target</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>extensibleTarget</i>).</li>
+ <li>If <a href="#sec-toboolean">ToBoolean</a>(<i>extensibleTarget</i>) is <b>false</b>, throw a <b>TypeError</b>
+ exception.</li>
+ <li>Return <b>undefined</b>.</li>
+ </ol>
+ </li>
+ <li>Let <i>extensibleTarget</i> be <a href="#sec-isextensible-o">IsExtensible</a>(<i>target</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>extensibleTarget</i>).</li>
+ <li>Let <i>resultDesc</i> be <a href="#sec-topropertydescriptor">ToPropertyDescriptor</a>(<i>trapResultObj</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>resultDesc</i>).</li>
+ <li><a href="#sec-call">Call</a> <a
+ href="#sec-completepropertydescriptor">CompletePropertyDescriptor</a>(<i>resultDesc</i>).</li>
+ <li>Let <i>valid</i> be <a href="#sec-iscompatiblepropertydescriptor">IsCompatiblePropertyDescriptor</a>
+ (<i>extensibleTarget</i>, <i>resultDesc</i>, <i>targetDesc</i>).</li>
+ <li>If <i>valid</i> is <b>false</b>, throw a <b>TypeError</b> exception.</li>
+ <li>If <i>resultDesc</i>.[[Configurable]] is <b>false</b>, then
+ <ol class="block">
+ <li>If <i>targetDesc</i> is <b>undefined</b> or <i>targetDesc</i>.[[Configurable]] is <b>true</b><i>,</i> then
+ <ol class="block">
+ <li>Throw a <b>TypeError</b> exception.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Return <i>resultDesc</i>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> [[GetOwnProperty]] for proxy objects enforces the following invariants:</p>
+
+ <ul>
+ <li>
+ <p>The result of [[GetOwnProperty]] must be either an Object or <b>undefined</b>.</p>
+ </li>
+
+ <li>
+ <p>A property cannot be reported as non-existent, if it exists as a non-configurable own property of the target
+ object.</p>
+ </li>
+
+ <li>
+ <p>A property cannot be reported as non-existent, if it exists as an own property of the target object and the target
+ object is not extensible.</p>
+ </li>
+
+ <li>
+ <p>A property cannot be reported as existent, if it does not exists as an own property of the target object and the
+ target object is not extensible.</p>
+ </li>
+
+ <li>
+ <p>A property cannot be reported as non-configurable, if it does not exists as an own property of the target object or
+ if it exists as a configurable own property of the target object.</p>
+ </li>
+ </ul>
+ </div>
+ </section>
+
+ <section id="sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc">
+ <h1><span class="secnum" id="sec-9.5.6"><a
+ href="#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc"
+ title="link to this section">9.5.6</a></span> [[DefineOwnProperty]] (P, Desc)</h1>
+
+ <p>When the [[DefineOwnProperty]] internal method of a Proxy exotic object <var>O</var> is called with <a
+ href="#sec-object-type">property key</a> <var>P</var> and <a href="#sec-property-descriptor-specification-type">Property
+ Descriptor</a> <span class="nt">Desc</span>, the following steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>Let <i>handler</i> be the value of the [[ProxyHandler]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>If <i>handler</i> is <b>null</b>, throw a <b>TypeError</b> exception.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>handler</i>) is Object.</li>
+ <li>Let <i>target</i> be the value of the [[ProxyTarget]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>Let <i>trap</i> be <a href="#sec-getmethod">GetMethod</a>(<i>handler</i>, <code>"defineProperty"</code>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>trap</i>).</li>
+ <li>If <i>trap</i> is <b>undefined</b>, then
+ <ol class="block">
+ <li>Return <i>target</i>.[[DefineOwnProperty]](<i>P</i>, <i>Desc</i>).</li>
+ </ol>
+ </li>
+ <li>Let <i>descObj</i> be <a href="#sec-frompropertydescriptor">FromPropertyDescriptor</a>(<i>Desc</i>).</li>
+ <li>Let <i>booleanTrapResult</i> be <a href="#sec-toboolean">ToBoolean</a>(<a href="#sec-call">Call</a>(<i>trap</i>,
+ <i>handler</i>, &laquo;<i>target</i>, <i>P</i>, <i>descObj</i>&raquo;)).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>booleanTrapResult</i>).</li>
+ <li>If <i>booleanTrapResult</i> is <b>false</b>, return <b>false</b>.</li>
+ <li>Let <i>targetDesc</i> be <i>target</i>.[[GetOwnProperty]](<i>P</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>targetDesc</i>).</li>
+ <li>Let <i>extensibleTarget</i> be <a href="#sec-isextensible-o">IsExtensible</a>(<i>target</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>extensibleTarget</i>).</li>
+ <li>If <i>Desc</i> has a [[Configurable]] field and if <i>Desc</i>.[[Configurable]] is <b>false,</b> then
+ <ol class="block">
+ <li>Let <i>settingConfigFalse</i> be <b>true</b>.</li>
+ </ol>
+ </li>
+ <li>Else let <i>settingConfigFalse</i> be <b>false</b>.</li>
+ <li>If <i>targetDesc</i> is <b>undefined</b>, then
+ <ol class="block">
+ <li>If <i>extensibleTarget</i> is <b>false</b>, throw a <b>TypeError</b> exception.</li>
+ <li>If <i>settingConfigFalse</i> is <b>true</b>, throw a <b>TypeError</b> exception.</li>
+ </ol>
+ </li>
+ <li>Else <i>targetDesc</i> is not <b>undefined<i>,</i></b>
+ <ol class="block">
+ <li>If <a href="#sec-iscompatiblepropertydescriptor">IsCompatiblePropertyDescriptor</a>(<i>extensibleTarget</i>,
+ <i>Desc</i> , <i>targetDesc</i>) is <b>false</b>, throw a <b>TypeError</b> exception.</li>
+ <li>If <i>settingConfigFalse</i> is <b>true</b> and <i>targetDesc</i>.[[Configurable]] is <b>true</b>, throw a
+ <b>TypeError</b> exception.</li>
+ </ol>
+ </li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> [[DefineOwnProperty]] for proxy objects enforces the following invariants:</p>
+
+ <ul>
+ <li>
+ <p>The result of [[DefineOwnProperty]] is a Boolean value.</p>
+ </li>
+
+ <li>
+ <p>A property cannot be added, if the target object is not extensible.</p>
+ </li>
+
+ <li>
+ <p>A property cannot be non-configurable, unless there exists a corresponding non-configurable own property of the
+ target object.</p>
+ </li>
+
+ <li>
+ <p>If a property has a corresponding target object property then applying the <a
+ href="#sec-property-descriptor-specification-type">Property Descriptor</a> of the property to the target object using
+ [[DefineOwnProperty]] will not throw an exception.</p>
+ </li>
+ </ul>
+ </div>
+ </section>
+
+ <section id="sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p">
+ <h1><span class="secnum" id="sec-9.5.7"><a href="#sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p"
+ title="link to this section">9.5.7</a></span> [[HasProperty]] (P)</h1>
+
+ <p>When the [[HasProperty]] internal method of a Proxy exotic object <var>O</var> is called with <a
+ href="#sec-object-type">property key</a> <var>P</var>, the following steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>Let <i>handler</i> be the value of the [[ProxyHandler]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>If <i>handler</i> is <b>null</b>, throw a <b>TypeError</b> exception.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>handler</i>) is Object.</li>
+ <li>Let <i>target</i> be the value of the [[ProxyTarget]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>Let <i>trap</i> be <a href="#sec-getmethod">GetMethod</a>(<i>handler</i>, <code>"has"</code>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>trap</i>).</li>
+ <li>If <i>trap</i> is <b>undefined</b>, then
+ <ol class="block">
+ <li>Return <i>target</i>.[[HasProperty]](<i>P</i>).</li>
+ </ol>
+ </li>
+ <li>Let <i>booleanTrapResult</i> be <a href="#sec-toboolean">ToBoolean</a>(<a href="#sec-call">Call</a>(<i>trap</i>,
+ <i>handler</i>, &laquo;<i>target</i>, <i>P</i>&raquo;)).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>booleanTrapResult</i>).</li>
+ <li>If <i>booleanTrapResult</i> is <b>false</b>, then
+ <ol class="block">
+ <li>Let <i>targetDesc</i> be <i>target</i>.[[GetOwnProperty]](<i>P</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>targetDesc</i>).</li>
+ <li>If <i>targetDesc</i> is not <b>undefined</b>, then
+ <ol class="block">
+ <li>If <i>targetDesc</i>.[[Configurable]] is <b>false</b>, throw a <b>TypeError</b> exception.</li>
+ <li>Let <i>extensibleTarget</i> be <a href="#sec-isextensible-o">IsExtensible</a>(<i>target</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>extensibleTarget</i>).</li>
+ <li>If <i>extensibleTarget</i> is <b>false</b>, throw a <b>TypeError</b> exception.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Return <i>booleanTrapResult</i>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> [[HasProperty]] for proxy objects enforces the following invariants:</p>
+
+ <ul>
+ <li>
+ <p>The result of [[HasProperty]] is a Boolean value.</p>
+ </li>
+
+ <li>
+ <p>A property cannot be reported as non-existent, if it exists as a non-configurable own property of the target
+ object.</p>
+ </li>
+
+ <li>
+ <p>A property cannot be reported as non-existent, if it exists as an own property of the target object and the target
+ object is not extensible.</p>
+ </li>
+ </ul>
+ </div>
+ </section>
+
+ <section id="sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver">
+ <h1><span class="secnum" id="sec-9.5.8"><a href="#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver"
+ title="link to this section">9.5.8</a></span> [[Get]] (P, Receiver)</h1>
+
+ <p>When the [[Get]] internal method of a Proxy exotic object <var>O</var> is called with <a href="#sec-object-type">property
+ key</a> <var>P</var> and <a href="#sec-ecmascript-language-types">ECMAScript language value</a> <span
+ class="nt">Receiver</span> the following steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>Let <i>handler</i> be the value of the [[ProxyHandler]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>If <i>handler</i> is <b>null</b>, throw a <b>TypeError</b> exception.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>handler</i>) is Object.</li>
+ <li>Let <i>target</i> be the value of the [[ProxyTarget]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>Let <i>trap</i> be <a href="#sec-getmethod">GetMethod</a>(<i>handler</i>, <code>"get"</code>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>trap</i>).</li>
+ <li>If <i>trap</i> is <b>undefined</b>, then
+ <ol class="block">
+ <li>Return <i>target</i>.[[Get]](<i>P</i>, <i>Receiver</i>).</li>
+ </ol>
+ </li>
+ <li>Let <i>trapResult</i> be <a href="#sec-call">Call</a>(<i>trap</i>, <i>handler</i>, &laquo;<i>target</i>, <i>P</i>,
+ <i>Receiver</i>&raquo;).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>trapResult</i>).</li>
+ <li>Let <i>targetDesc</i> be <i>target</i>.[[GetOwnProperty]](<i>P</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>targetDesc</i>).</li>
+ <li>If <i>targetDesc</i> is not <b>undefined</b>, then
+ <ol class="block">
+ <li>If <a href="#sec-isdatadescriptor">IsDataDescriptor</a>(<i>targetDesc</i>) and <i>targetDesc</i>.[[Configurable]]
+ is <b>false</b> and <i>targetDesc</i>.[[Writable]] is <b>false</b>, then
+ <ol class="block">
+ <li>If <a href="#sec-samevalue">SameValue</a>(<i>trapResult</i>, <i>targetDesc</i>.[[Value]]) is <b>false</b>,
+ throw a <b>TypeError</b> exception.</li>
+ </ol>
+ </li>
+ <li>If <a href="#sec-isaccessordescriptor">IsAccessorDescriptor</a>(<i>targetDesc</i>) and
+ <i>targetDesc</i>.[[Configurable]] is <b>false</b> and <i>targetDesc</i>.[[Get]] is <b>undefined</b>, then
+ <ol class="block">
+ <li>If <i>trapResult</i> is not <b>undefined</b>, throw a <b>TypeError</b> exception.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Return <i>trapResult</i>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> [[Get]] for proxy objects enforces the following invariants:</p>
+
+ <ul>
+ <li>
+ <p>The value reported for a property must be the same as the value of the corresponding target object property if the
+ target object property is a non-writable, non-configurable own data property.</p>
+ </li>
+
+ <li>
+ <p>The value reported for a property must be <b>undefined</b> if the corresponding target object property is a
+ non-configurable own accessor property that has <b>undefined</b> as its [[Get]] attribute.</p>
+ </li>
+ </ul>
+ </div>
+ </section>
+
+ <section id="sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver">
+ <h1><span class="secnum" id="sec-9.5.9"><a href="#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver"
+ title="link to this section">9.5.9</a></span> [[Set]] ( P, V, Receiver)</h1>
+
+ <p>When the [[Set]] internal method of a Proxy exotic object <var>O</var> is called with <a href="#sec-object-type">property
+ key</a> <var>P</var>, value <var>V</var>, and <a href="#sec-ecmascript-language-types">ECMAScript language value</a> <span
+ class="nt">Receiver</span>, the following steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>Let <i>handler</i> be the value of the [[ProxyHandler]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>If <i>handler</i> is <b>null</b>, throw a <b>TypeError</b> exception.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>handler</i>) is Object.</li>
+ <li>Let <i>target</i> be the value of the [[ProxyTarget]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>Let <i>trap</i> be <a href="#sec-getmethod">GetMethod</a>(<i>handler</i>, <code>"set"</code>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>trap</i>).</li>
+ <li>If <i>trap</i> is <b>undefined</b>, then
+ <ol class="block">
+ <li>Return <i>target</i>.[[Set]](<i>P</i>, <i>V</i>, <i>Receiver</i>).</li>
+ </ol>
+ </li>
+ <li>Let <i>booleanTrapResult</i> be <a href="#sec-toboolean">ToBoolean</a>(<a href="#sec-call">Call</a>(<i>trap</i>,
+ <i>handler</i>, &laquo;<i>target</i>, <i>P</i>, <i>V</i>, <i>Receiver</i>&raquo;)).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>booleanTrapResult</i>).</li>
+ <li>If <i>booleanTrapResult</i> is <b>false</b>, return <b>false</b>.</li>
+ <li>Let <i>targetDesc</i> be <i>target</i>.[[GetOwnProperty]](<i>P</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>targetDesc</i>).</li>
+ <li>If <i>targetDesc</i> is not <b>undefined</b>, then
+ <ol class="block">
+ <li>If <a href="#sec-isdatadescriptor">IsDataDescriptor</a>(<i>targetDesc</i>) and <i>targetDesc</i>.[[Configurable]]
+ is <b>false</b> and <i>targetDesc</i>.[[Writable]] is <b>false</b>, then
+ <ol class="block">
+ <li>If <a href="#sec-samevalue">SameValue</a>(<i>V</i>, <i>targetDesc</i>.[[Value]]) is <b>false</b>, throw a
+ <b>TypeError</b> exception.</li>
+ </ol>
+ </li>
+ <li>If <a href="#sec-isaccessordescriptor">IsAccessorDescriptor</a>(<i>targetDesc</i>) and
+ <i>targetDesc</i>.[[Configurable]] is <b>false</b>, then
+ <ol class="block">
+ <li>If <i>targetDesc</i>.[[Set]] is <b>undefined</b>, throw a <b>TypeError</b> exception.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> [[Set]] for proxy objects enforces the following invariants:</p>
+
+ <ul>
+ <li>
+ <p>The result of [[Set]] is a Boolean value.</p>
+ </li>
+
+ <li>
+ <p>Cannot change the value of a property to be different from the value of the corresponding target object property if
+ the corresponding target object property is a non-writable, non-configurable own data property.</p>
+ </li>
+
+ <li>
+ <p>Cannot set the value of a property if the corresponding target object property is a non-configurable own accessor
+ property that has <b>undefined</b> as its [[Set]] attribute.</p>
+ </li>
+ </ul>
+ </div>
+ </section>
+
+ <section id="sec-proxy-object-internal-methods-and-internal-slots-delete-p">
+ <h1><span class="secnum" id="sec-9.5.10"><a href="#sec-proxy-object-internal-methods-and-internal-slots-delete-p"
+ title="link to this section">9.5.10</a></span> [[Delete]] (P)</h1>
+
+ <p>When the [[Delete]] internal method of a Proxy exotic object <var>O</var> is called with <a
+ href="#sec-object-type">property key</a> <var>P</var> the following steps are taken:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a href="#sec-ispropertykey">IsPropertyKey</a>(<i>P</i>) is
+ <b>true</b>.</li>
+ <li>Let <i>handler</i> be the value of the [[ProxyHandler]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>If <i>handler</i> is <b>null</b>, throw a <b>TypeError</b> exception.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>handler</i>) is Object.</li>
+ <li>Let <i>target</i> be the value of the [[ProxyTarget]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>Let <i>trap</i> be <a href="#sec-getmethod">GetMethod</a>(<i>handler</i>, <code>"deleteProperty"</code>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>trap</i>).</li>
+ <li>If <i>trap</i> is <b>undefined</b>, then
+ <ol class="block">
+ <li>Return <i>target</i>.[[Delete]](<i>P</i>).</li>
+ </ol>
+ </li>
+ <li>Let <i>booleanTrapResult</i> be <a href="#sec-toboolean">ToBoolean</a>(<a href="#sec-call">Call</a>(<i>trap</i>,
+ <i>handler</i>, &laquo;<i>target</i>, <i>P</i>&raquo;)).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>booleanTrapResult</i>).</li>
+ <li>If <i>booleanTrapResult</i> is <b>false</b>, return <b>false</b>.</li>
+ <li>Let <i>targetDesc</i> be <i>target</i>.[[GetOwnProperty]](<i>P</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>targetDesc</i>).</li>
+ <li>If <i>targetDesc</i> is <b>undefined</b>, return <b>true</b>.</li>
+ <li>If <i>targetDesc</i>.[[Configurable]] is <b>false</b>, throw a <b>TypeError</b> exception.</li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> [[Delete]] for proxy objects enforces the following invariant:</p>
+
+ <ul>
+ <li>The result of [[Delete]] is a Boolean value.</li>
+ <li>A property cannot be reported as deleted, if it exists as a non-configurable own property of the target object.</li>
+ </ul>
+ </div>
+ </section>
+
+ <section id="sec-proxy-object-internal-methods-and-internal-slots-enumerate">
+ <h1><span class="secnum" id="sec-9.5.11"><a href="#sec-proxy-object-internal-methods-and-internal-slots-enumerate"
+ title="link to this section">9.5.11</a></span> [[Enumerate]] ()</h1>
+
+ <p>When the [[Enumerate]] internal method of a Proxy exotic object <var>O</var> is called the following steps are taken:</p>
+
+ <ol class="proc">
+ <li>Let <i>handler</i> be the value of the [[ProxyHandler]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>If <i>handler</i> is <b>null</b>, throw a <b>TypeError</b> exception.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>handler</i>) is Object.</li>
+ <li>Let <i>target</i> be the value of the [[ProxyTarget]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>Let <i>trap</i> be <a href="#sec-getmethod">GetMethod</a>(<i>handler</i>, <code>"enumerate"</code>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>trap</i>).</li>
+ <li>If <i>trap</i> is <b>undefined</b>, then
+ <ol class="block">
+ <li>Return <i>target</i>.[[Enumerate]]().</li>
+ </ol>
+ </li>
+ <li>Let <i>trapResult</i> be <a href="#sec-call">Call</a>(<i>trap</i>, <i>handler</i>, &laquo;<i>target</i>&raquo;).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>trapResult</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>trapResult</i>) is not Object, throw a <b>TypeError</b>
+ exception.</li>
+ <li>Return <i>trapResult</i>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> [[Enumerate]] for proxy objects enforces the following invariants:</p>
+
+ <ul>
+ <li>The result of [[Enumerate]] must be an Object.</li>
+ </ul>
+ </div>
+ </section>
+
+ <section id="sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys">
+ <h1><span class="secnum" id="sec-9.5.12"><a href="#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys"
+ title="link to this section">9.5.12</a></span> [[OwnPropertyKeys]] ( )</h1>
+
+ <p>When the [[OwnPropertyKeys]] internal method of a Proxy exotic object <var>O</var> is called the following steps are
+ taken:</p>
+
+ <ol class="proc">
+ <li>Let <i>handler</i> be the value of the [[ProxyHandler]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>If <i>handler</i> is <b>null</b>, throw a <b>TypeError</b> exception.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>handler</i>) is Object.</li>
+ <li>Let <i>target</i> be the value of the [[ProxyTarget]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>Let <i>trap</i> be <a href="#sec-getmethod">GetMethod</a>(<i>handler</i>, <code>"ownKeys"</code>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>trap</i>).</li>
+ <li>If <i>trap</i> is <b>undefined</b>, then
+ <ol class="block">
+ <li>Return <i>target</i>.[[OwnPropertyKeys]]().</li>
+ </ol>
+ </li>
+ <li>Let <i>trapResultArray</i> be <a href="#sec-call">Call</a>(<i>trap</i>, <i>handler</i>,
+ &laquo;<i>target</i>&raquo;).</li>
+ <li>Let <i>trapResult</i> be <a href="#sec-createlistfromarraylike">CreateListFromArrayLike</a>(<i>trapResultArray</i>,
+ &laquo;&zwj;String, Symbol&raquo;).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>trapResult</i>).</li>
+ <li>Let <i>extensibleTarget</i> be <a href="#sec-isextensible-o">IsExtensible</a>(<i>target</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>extensibleTarget</i>).</li>
+ <li>Let <i>targetKeys</i> be <i>target</i>.[[OwnPropertyKeys]]().</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>targetKeys</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>targetKeys</i> is a <a
+ href="#sec-list-and-record-specification-type">List</a> containing only String and Symbol values.</li>
+ <li>Let <i>targetConfigurableKeys</i> be an empty <a href="#sec-list-and-record-specification-type">List</a>.</li>
+ <li>Let <i>targetNonconfigurableKeys</i> be an empty <a href="#sec-list-and-record-specification-type">List</a>.</li>
+ <li>Repeat, for each element <i>key</i> of <i>targetKeys</i>,
+ <ol class="block">
+ <li>Let <i>desc</i> be <i>target</i>.[[GetOwnProperty]](<i>key</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>desc</i>).</li>
+ <li>If <i>desc</i> is not <b>undefined</b> and <i>desc.</i>[[Configurable]] is <b>false</b>, then
+ <ol class="block">
+ <li>Append <i>key</i> as an element of <i>targetNonconfigurableKeys</i>.</li>
+ </ol>
+ </li>
+ <li>Else,
+ <ol class="block">
+ <li>Append <i>key</i> as an element of <i>targetConfigurableKeys</i>.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>If <i>extensibleTarget</i> is <b>true</b> and <i>targetNonconfigurableKeys</i> is empty, then
+ <ol class="block">
+ <li>Return <i>trapResult</i>.</li>
+ </ol>
+ </li>
+ <li>Let <i>uncheckedResultKeys</i> be a new <a href="#sec-list-and-record-specification-type">List</a> which is a copy of
+ <i>trapResult</i>.</li>
+ <li>Repeat, for each <i>key</i> that is an element of <i>targetNonconfigurableKeys</i>,
+ <ol class="block">
+ <li>If <i>key</i> is not an element of <i>uncheckedResultKeys</i>, throw a <b>TypeError</b> exception.</li>
+ <li>Remove <i>key</i> from <i>uncheckedResultKeys</i></li>
+ </ol>
+ </li>
+ <li>If <i>extensibleTarget</i> is <b>true</b>, return <i>trapResult</i>.</li>
+ <li>Repeat, for each <i>key</i> that is an element of <i>targetConfigurableKeys</i>,
+ <ol class="block">
+ <li>If <i>key</i> is not an element of <i>uncheckedResultKeys</i>, throw a <b>TypeError</b> exception.</li>
+ <li>Remove <i>key</i> from <i>uncheckedResultKeys</i></li>
+ </ol>
+ </li>
+ <li>If <i>uncheckedResultKeys</i> is not empty, throw a <b>TypeError</b> exception.</li>
+ <li>Return <i>trapResult</i>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> [[OwnPropertyKeys]] for proxy objects enforces the following invariants:</p>
+
+ <ul>
+ <li>
+ <p>The result of [[OwnPropertyKeys]] is a <a href="#sec-list-and-record-specification-type">List</a>.</p>
+ </li>
+
+ <li>
+ <p>The Type of each result <a href="#sec-list-and-record-specification-type">List</a> element is either String or
+ Symbol.</p>
+ </li>
+
+ <li>
+ <p>The result <a href="#sec-list-and-record-specification-type">List</a> must contain the keys of all non-configurable
+ own properties of the target object.</p>
+ </li>
+
+ <li>
+ <p>If the target object is not extensible, then the result <a href="#sec-list-and-record-specification-type">List</a>
+ must contain all the keys of the own properties of the target object and no other values.</p>
+ </li>
+ </ul>
+ </div>
+ </section>
+
+ <section id="sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist">
+ <h1><span class="secnum" id="sec-9.5.13"><a
+ href="#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist"
+ title="link to this section">9.5.13</a></span> [[Call]] (thisArgument, argumentsList)</h1>
+
+ <p>The [[Call]] internal method of a Proxy exotic object <var>O</var> is called with parameters <var>thisArgument</var> and
+ <var>argumentsList</var>, a <a href="#sec-list-and-record-specification-type">List</a> of <a
+ href="#sec-ecmascript-language-types">ECMAScript language values</a>. The following steps are taken:</p>
+
+ <ol class="proc">
+ <li>Let <i>handler</i> be the value of the [[ProxyHandler]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>If <i>handler</i> is <b>null</b>, throw a <b>TypeError</b> exception.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>handler</i>) is Object.</li>
+ <li>Let <i>target</i> be the value of the [[ProxyTarget]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>Let <i>trap</i> be <a href="#sec-getmethod">GetMethod</a>(<i>handler</i>, <code>"apply"</code>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>trap</i>).</li>
+ <li>If <i>trap</i> is <b>undefined</b>, then
+ <ol class="block">
+ <li>Return <a href="#sec-call">Call</a>(<i>target</i>, <i>thisArgument</i>, <i>argumentsList</i>).</li>
+ </ol>
+ </li>
+ <li>Let <i>argArray</i> be <a href="#sec-createarrayfromlist">CreateArrayFromList</a>(<i>argumentsList</i>).</li>
+ <li>Return <a href="#sec-call">Call</a>(<i>trap</i>, <i>handler</i>, &laquo;<i>target</i>, <i>thisArgument</i>,
+ <i>argArray</i>&raquo;).</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> A Proxy exotic object only has a [[Call]] internal method if the initial value of its
+ [[ProxyTarget]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> is an object that has a
+ [[Call]] internal method.</p>
+ </div>
+ </section>
+
+ <section id="sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget">
+ <h1><span class="secnum" id="sec-9.5.14"><a
+ href="#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget"
+ title="link to this section">9.5.14</a></span> [[Construct]] ( argumentsList, newTarget)</h1>
+
+ <p>The [[Construct]] internal method of a Proxy exotic object <var>O</var> is called with parameters
+ <var>argumentsList</var> which is a possibly empty <a href="#sec-list-and-record-specification-type">List</a> of <a
+ href="#sec-ecmascript-language-types">ECMAScript language values</a> and <var>newTarget</var>. The following steps are
+ taken:</p>
+
+ <ol class="proc">
+ <li>Let <i>handler</i> be the value of the [[ProxyHandler]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>If <i>handler</i> is <b>null</b>, throw a <b>TypeError</b> exception.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>handler</i>) is Object.</li>
+ <li>Let <i>target</i> be the value of the [[ProxyTarget]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>O</i>.</li>
+ <li>Let <i>trap</i> be <a href="#sec-getmethod">GetMethod</a>(<i>handler</i>, <code>"construct"</code>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>trap</i>).</li>
+ <li>If <i>trap</i> is <b>undefined</b>, then
+ <ol class="block">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>target</i> has a [[Construct]] internal method.</li>
+ <li>Return <a href="#sec-construct">Construct</a>(<i>target</i>, <i>argumentsList</i>, <i>newTarget</i>).</li>
+ </ol>
+ </li>
+ <li>Let <i>argArray</i> be <a href="#sec-createarrayfromlist">CreateArrayFromList</a>(<i>argumentsList</i>).</li>
+ <li>Let <i>newObj</i> be <a href="#sec-call">Call</a>(<i>trap</i>, <i>handler</i>, &laquo;<i>target</i>, <i>argArray</i>,
+ <i>newTarget</i> &raquo;).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>newObj</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>newObj</i>) is not Object, throw a <b>TypeError</b>
+ exception.</li>
+ <li>Return <i>newObj</i>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE 1</span> A Proxy exotic object only has a [[Construct]] internal method if the initial value of
+ its [[ProxyTarget]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> is an object that has a
+ [[Construct]] internal method.</p>
+ </div>
+
+ <div class="note">
+ <p><span class="nh">NOTE 2</span> [[Construct]] for proxy objects enforces the following invariants:</p>
+
+ <ul>
+ <li>The result of [[Construct]] must be an Object.</li>
+ </ul>
+ </div>
+ </section>
+
+ <section id="sec-proxycreate">
+ <h1><span class="secnum" id="sec-9.5.15"><a href="#sec-proxycreate" title="link to this section">9.5.15</a></span>
+ ProxyCreate(target, handler)</h1>
+
+ <p>The abstract operation ProxyCreate with arguments <var>target</var> and <var>handler</var> is used to specify the
+ creation of new Proxy exotic objects. It performs the following steps:</p>
+
+ <ol class="proc">
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>target</i>) is not Object, throw a <b>TypeError</b>
+ Exception.</li>
+ <li>If <i>target</i> is a Proxy exotic object and the value of the [[ProxyHandler]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>target</i> is <b>null</b>, throw a
+ <b>TypeError</b> exception.</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>handler</i>) is not Object, throw a <b>TypeError</b>
+ Exception.</li>
+ <li>If <i>handler</i> is a Proxy exotic object and the value of the [[ProxyHandler]] <a
+ href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>handler</i> is <b>null</b>, throw a
+ <b>TypeError</b> exception.</li>
+ <li>Let <i>P</i> be a newly created object.</li>
+ <li>Set <i>P</i>&rsquo;s essential internal methods (except for [[Call]] and [[Construct]]) to the definitions specified
+ in <a href="#sec-proxy-object-internal-methods-and-internal-slots">9.5</a>.</li>
+ <li>If <a href="#sec-iscallable">IsCallable</a>(<i>target</i>) is <b>true</b>, then
+ <ol class="block">
+ <li>Set the [[Call]] internal method of <i>P</i> as specified in <a
+ href="#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist">9.5.13</a>.</li>
+ <li>If <i>target</i> has a [[Construct]] internal method, then
+ <ol class="block">
+ <li>Set the [[Construct]] internal method of <i>P</i> as specified in <a
+ href="#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget">9.5.14</a>.</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Set the [[ProxyTarget]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>P</i> to
+ <i>target</i>.</li>
+ <li>Set the [[ProxyHandler]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> of <i>P</i> to
+ <i>handler</i>.</li>
+ <li>Return <i>P</i>.</li>
+ </ol>
+ </section>
+ </section>
+</section>
+
+<section id="sec-ecmascript-language-source-code">
+ <div class="front">
+ <h1><span class="secnum" id="sec-10"><a href="#sec-ecmascript-language-source-code" title="link to this section">10</a></span>
+ ECMAScript Language: Source Code</h1>
+ </div>
+
+ <section id="sec-source-text">
+ <div class="front">
+ <h1><span class="secnum" id="sec-10.1"><a href="#sec-source-text" title="link to this section">10.1</a></span> Source
+ Text</h1>
+ <h2>Syntax</h2>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">SourceCharacter</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="gprose">any Unicode code point</span></div>
+ </div>
+
+ <p>ECMAScript code is expressed using Unicode, version 5.1 or later. ECMAScript source text is a sequence of code points.
+ All Unicode code point values from U+0000 to U+10FFFF, including surrogate code points, may occur in source text where
+ permitted by the ECMAScript grammars. The actual encodings used to store and interchange ECMAScript source text is not
+ relevant to this specification. Regardless of the external source text encoding, a conforming ECMAScript implementation
+ processes the source text as if it was an equivalent sequence of <span class="nt">SourceCharacter</span> values. Each <span
+ class="nt">SourceCharacter</span> being a Unicode code point. Conforming ECMAScript implementations are not required to
+ perform any normalization of source text, or behave as though they were performing normalization of source text.</p>
+
+ <p>The components of a combining character sequence are treated as individual Unicode code points even though a user might
+ think of the whole sequence as a single character.</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> In string literals, regular expression literals, template literals and identifiers, any
+ Unicode code point may also be expressed using Unicode escape sequences that explicitly express a code point&rsquo;s
+ numeric value. Within a comment, such an escape sequence is effectively ignored as part of the comment.</p>
+
+ <p>ECMAScript differs from the Java programming language in the behaviour of Unicode escape sequences. In a Java program,
+ if the Unicode escape sequence <code>\u000A</code>, for example, occurs within a single-line comment, it is interpreted as
+ a line terminator (Unicode code point U+000A is line feed (lf)) and therefore the next code point is not part of the
+ comment. Similarly, if the Unicode escape sequence <code>\u000A</code> occurs within a string literal in a Java program,
+ it is likewise interpreted as a line terminator, which is not allowed within a string literal&mdash;one must write
+ <code>\n</code> instead of <code>\u000A</code> to cause a line feed (lf) to be part of the string value of a string
+ literal. In an ECMAScript program, a Unicode escape sequence occurring within a comment is never interpreted and therefore
+ cannot contribute to termination of the comment. Similarly, a Unicode escape sequence occurring within a string literal in
+ an ECMAScript program always contributes to the literal and is never interpreted as a line terminator or as a code point
+ that might terminate the string literal.</p>
+ </div>
+ </div>
+
+ <section id="sec-utf16encoding">
+ <h1><span class="secnum" id="sec-10.1.1"><a href="#sec-utf16encoding" title="link to this section">10.1.1</a></span> Static
+ Semantics: <i>UTF16Encoding ( cp )</i></h1>
+
+ <p>The UTF16Encoding of a numeric code point value, <var>cp</var>, is determined as follows:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: 0 &le; <i>cp</i> &le; 0x10FFFF.</li>
+ <li>If <i>cp</i> &le; 65535, return <i>cp</i>.</li>
+ <li>Let <i>cu1</i> be <a href="#sec-algorithm-conventions">floor</a>((<i>cp</i> &ndash; 65536) / 1024) + 0xD800.</li>
+ <li>Let <i>cu2</i> be ((<i>cp</i> &ndash; 65536) <a href="#sec-algorithm-conventions">modulo</a> 1024) + 0xDC00.</li>
+ <li>Return the code unit sequence consisting of <i>cu1</i> followed by <i>cu2</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-utf16decode">
+ <h1><span class="secnum" id="sec-10.1.2"><a href="#sec-utf16decode" title="link to this section">10.1.2</a></span> Static
+ Semantics: UTF16Decode( lead, trail )</h1>
+
+ <p>Two code units, <var>lead</var> and <var>trail</var>, that form a UTF-16 surrogate pair are converted to a code point by
+ performing the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: 0xD800 &le; <i>lead</i> &le; 0xDBFF and 0xDC00 &le; <i>trail</i> &le;
+ 0xDFFF.</li>
+ <li>Let <i>cp</i> be (<i>lead</i> &ndash; 0xD800) &times; 1024 + (<i>trail</i> &ndash; 0xDC00) + 0x10000.</li>
+ <li>Return the code point <i>cp</i>.</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-types-of-source-code">
+ <div class="front">
+ <h1><span class="secnum" id="sec-10.2"><a href="#sec-types-of-source-code" title="link to this section">10.2</a></span>
+ Types of Source Code</h1>
+
+ <p>There are four types of ECMAScript code:</p>
+
+ <ul>
+ <li>
+ <p><i>Global code</i> is source text that is treated as an ECMAScript <i>Script</i>. The global code of a particular
+ <i>Script</i> does not include any source text that is parsed as part of a <i>FunctionDeclaration</i>,
+ <i>FunctionExpression</i>, <i>GeneratorDeclaration</i>, <i>GeneratorExpression</i>, <i>MethodDefinition</i>,
+ <i>ArrowFunction, ClassDeclaration</i>, or <i>ClassExpression</i>.</p>
+ </li>
+
+ <li>
+ <p><i>Eval code</i> is the source text supplied to the built-in <code>eval</code> function. More precisely, if the
+ parameter to the built-in <code>eval</code> function is a String, it is treated as an ECMAScript <i>Script</i>. The eval
+ code for a particular invocation of <code>eval</code> is the global code portion of that <i>Script</i>.</p>
+ </li>
+
+ <li>
+ <p><i>Function code</i> is source text that is parsed to supply the value of the [[ECMAScriptCode]] and
+ [[FormalParameters]] internal slots (<a href="#sec-ecmascript-function-objects">see 9.2</a>) of an <a
+ href="#sec-ecmascript-function-objects">ECMAScript function object</a>. The function code of a particular ECMAScript
+ function does not include any source text that is parsed as the function code of a nested <i>FunctionDeclaration</i>,
+ <i>FunctionExpression</i>, <i>GeneratorDeclaration</i>, <i>GeneratorExpression</i>, <i>MethodDefinition</i>,
+ <i>ArrowFunction, ClassDeclaration</i>, or <i>ClassExpression</i>.</p>
+ </li>
+
+ <li>
+ <p><i>Module code</i> is source text that is code that is provided as a <i>ModuleBody</i>. It is the code that is
+ directly evaluated when a module is initialized. The module code of a particular module does not include any source text
+ that is parsed as part of a nested <i>FunctionDeclaration</i>, <i>FunctionExpression</i>, <i>GeneratorDeclaration</i>,
+ <i>GeneratorExpression</i>, <i>MethodDefinition</i>, <i>ArrowFunction, ClassDeclaration</i>, or
+ <i>ClassExpression</i>.</p>
+ </li>
+ </ul>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> Function code is generally provided as the bodies of Function Definitions (<a
+ href="#sec-function-definitions">14.1</a>), Arrow Function Definitions (<a
+ href="#sec-arrow-function-definitions">14.2</a>), Method Definitions (<a href="#sec-method-definitions">14.3</a>) and
+ Generator Definitions (<a href="#sec-generator-function-definitions">14.4</a>). Function code is also derived from the
+ arguments to the <code>Function</code> constructor (<a href="#sec-function-p1-p2-pn-body">19.2.1.1</a>) and the
+ GeneratorFunction constructor (<a href="#sec-generatorfunction">25.2.1.1</a>).</p>
+ </div>
+ </div>
+
+ <section id="sec-strict-mode-code">
+ <h1><span class="secnum" id="sec-10.2.1"><a href="#sec-strict-mode-code" title="link to this section">10.2.1</a></span>
+ Strict Mode Code</h1>
+
+ <p>An ECMAScript <span class="nt">Script</span> syntactic unit may be processed using either unrestricted or strict mode
+ syntax and semantics. Code is interpreted as <i>strict mode code</i> in the following situations:</p>
+
+ <ul>
+ <li>
+ <p>Global code is strict mode code if it begins with a <a
+ href="#sec-directive-prologues-and-the-use-strict-directive">Directive Prologue</a> that contains a <a
+ href="#sec-directive-prologues-and-the-use-strict-directive">Use Strict Directive</a> (see <a
+ href="#sec-directive-prologues-and-the-use-strict-directive">14.1.1</a>).</p>
+ </li>
+
+ <li>
+ <p>Module code is always strict mode code.</p>
+ </li>
+
+ <li>
+ <p>All parts of a <span class="nt">ClassDeclaration</span> or a <span class="nt">ClassExpression</span> are strict mode
+ code.</p>
+ </li>
+
+ <li>
+ <p>Eval code is strict mode code if it begins with a <a
+ href="#sec-directive-prologues-and-the-use-strict-directive">Directive Prologue</a> that contains a <a
+ href="#sec-directive-prologues-and-the-use-strict-directive">Use Strict Directive</a> or if the call to eval is a direct
+ eval (<a href="#sec-function-calls-runtime-semantics-evaluation">see 12.3.4.1</a>) that is contained in strict mode
+ code.</p>
+ </li>
+
+ <li>
+ <p>Function code is strict mode code if the associated <span class="nt">FunctionDeclaration</span>, <span
+ class="nt">FunctionExpression</span>, <span class="nt">GeneratorDeclaration</span>, <span
+ class="nt">GeneratorExpression</span>, <span class="nt">MethodDefinition</span>, or <span
+ class="nt">ArrowFunction</span> is contained in strict mode code or if the code that produces the value of the
+ function&rsquo;s [[ECMAScriptCode]] <a href="#sec-object-internal-methods-and-internal-slots">internal slot</a> begins
+ with a <a href="#sec-directive-prologues-and-the-use-strict-directive">Directive Prologue</a> that contains a <a
+ href="#sec-directive-prologues-and-the-use-strict-directive">Use Strict Directive</a>.</p>
+ </li>
+
+ <li>
+ <p>Function code that is supplied as the arguments to the built-in <code>Function</code> and <code>Generator</code>
+ constructors is strict mode code if the last argument is a String that when processed has a <span
+ class="nt">FunctionBody</span> begins with a <a href="#sec-directive-prologues-and-the-use-strict-directive">Directive
+ Prologue</a> that contains a <a href="#sec-directive-prologues-and-the-use-strict-directive">Use Strict
+ Directive</a>.</p>
+ </li>
+ </ul>
+
+ <p>ECMAScript code that is not strict mode code is called <i>non-strict code</i>.</p>
+ </section>
+
+ <section id="sec-non-ecmascript-functions">
+ <h1><span class="secnum" id="sec-10.2.2"><a href="#sec-non-ecmascript-functions"
+ title="link to this section">10.2.2</a></span> Non-ECMAScript Functions</h1>
+
+ <p>An ECMAScript implementation may support the evaluation of exotic function objects whose evaluative behaviour is
+ expressed in some implementation defined form of executable code other than via ECMAScript code. Whether a function object
+ is an ECMAScript code function or a non-ECMAScript function is not semantically observable from the perspective of an
+ ECMAScript code function that calls or is called by such a non-ECMAScript function.</p>
+ </section>
+ </section>
+</section>
+
+<section id="sec-ecmascript-language-lexical-grammar">
+ <div class="front">
+ <h1><span class="secnum" id="sec-11"><a href="#sec-ecmascript-language-lexical-grammar"
+ title="link to this section">11</a></span> ECMAScript Language: Lexical Grammar</h1>
+
+ <p>The source text of an ECMAScript <span class="nt">Script</span> or <span class="nt">Module</span> is first converted into a
+ sequence of input elements, which are tokens, line terminators, comments, or white space. The source text is scanned from left
+ to right, repeatedly taking the longest possible sequence of code points as the next input element.</p>
+
+ <p>There are several situations where the identification of lexical input elements is sensitive to the syntactic grammar
+ context that is consuming the input elements. This requires multiple goal symbols for the lexical grammar. The <span
+ class="nt">InputElementRegExpOrTemplateTail</span> goal is used in syntactic grammar contexts where a
+ <var>RegularExpressionLiteral,</var> a <var>TemplateMiddle,</var> or a <span class="nt">TemplateTail</span> is permitted. The
+ <span class="nt">InputElementRegExp</span> goal symbol is used in all syntactic grammar contexts where a <span
+ class="nt">RegularExpressionLiteral</span> is permitted but neither a <var>TemplateMiddle,</var> nor a <span
+ class="nt">TemplateTail</span> is permitted. The <span class="nt">InputElementTemplateTail</span> goal is used in all
+ syntactic grammar contexts where a <span class="nt">TemplateMiddle</span> or a <span class="nt">TemplateTail</span> is
+ permitted but a <span class="nt">RegularExpressionLiteral</span> is not permitted. In all other contexts, <span
+ class="nt">InputElementDiv</span> is used as the lexical goal symbol.</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> The use of multiple lexical goals ensures that there are no lexical ambiguities that would
+ affect <a href="#sec-automatic-semicolon-insertion">automatic semicolon insertion</a>. For example, there are no syntactic
+ grammar contexts where both a leading division or division-assignment, and a leading <i>RegularExpressionLiteral</i> are
+ permitted. This is not affected by semicolon insertion (<a href="#sec-automatic-semicolon-insertion">see 11.9</a>); in
+ examples such as the following:</p>
+
+ <pre>a = b<br>/hi/g.exec(c).map(d);</pre>
+
+ <p>where the first non-whitespace, non-comment code point after a <i>LineTerminator</i> is U+002F (SOLIDUS) and the
+ syntactic context allows division or division-assignment, no semicolon is inserted at the <i>LineTerminator</i>. That is,
+ the above example is interpreted in the same way as:</p>
+
+ <pre>a = b / hi / g.exec(c).map(d);</pre>
+ </div>
+
+ <h2>Syntax</h2>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">InputElementDiv</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">WhiteSpace</span></div>
+ <div class="rhs"><span class="nt">LineTerminator</span></div>
+ <div class="rhs"><span class="nt">Comment</span></div>
+ <div class="rhs"><span class="nt">CommonToken</span></div>
+ <div class="rhs"><span class="nt">DivPunctuator</span></div>
+ <div class="rhs"><span class="nt">RightBracePunctuator</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">InputElementRegExp</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">WhiteSpace</span></div>
+ <div class="rhs"><span class="nt">LineTerminator</span></div>
+ <div class="rhs"><span class="nt">Comment</span></div>
+ <div class="rhs"><span class="nt">CommonToken</span></div>
+ <div class="rhs"><span class="nt">RightBracePunctuator</span></div>
+ <div class="rhs"><span class="nt">RegularExpressionLiteral</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">InputElementRegExpOrTemplateTail</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">WhiteSpace</span></div>
+ <div class="rhs"><span class="nt">LineTerminator</span></div>
+ <div class="rhs"><span class="nt">Comment</span></div>
+ <div class="rhs"><span class="nt">CommonToken</span></div>
+ <div class="rhs"><span class="nt">RegularExpressionLiteral</span></div>
+ <div class="rhs"><span class="nt">TemplateSubstitutionTail</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">InputElementTemplateTail</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">WhiteSpace</span></div>
+ <div class="rhs"><span class="nt">LineTerminator</span></div>
+ <div class="rhs"><span class="nt">Comment</span></div>
+ <div class="rhs"><span class="nt">CommonToken</span></div>
+ <div class="rhs"><span class="nt">DivPunctuator</span></div>
+ <div class="rhs"><span class="nt">TemplateSubstitutionTail</span></div>
+ </div>
+ </div>
+
+ <section id="sec-unicode-format-control-characters">
+ <h1><span class="secnum" id="sec-11.1"><a href="#sec-unicode-format-control-characters"
+ title="link to this section">11.1</a></span> Unicode Format-Control Characters</h1>
+
+ <p>The Unicode format-control characters (i.e., the characters in category &ldquo;Cf&rdquo; in the Unicode Character Database
+ such as left-to-right mark or right-to-left mark) are control codes used to control the formatting of a range of text in the
+ absence of higher-level protocols for this (such as mark-up languages).</p>
+
+ <p>It is useful to allow format-control characters in source text to facilitate editing and display. All format control
+ characters may be used within comments, and within string literals, template literals, and regular expression literals.</p>
+
+ <p>U+200C <span style="font-family: Times New Roman">(</span>Zero width non-joiner<span style="font-family: Times New
+ Roman">)</span> and U+200D <span style="font-family: Times New Roman">(</span>Zero width joiner<span style="font-family: Times
+ New Roman">)</span> are format-control characters that are used to make necessary distinctions when forming words or phrases
+ in certain languages. In ECMAScript source text these code points may also be used in an <span
+ class="nt">IdentifierName</span> (<a href="#sec-identifier-names">see 11.6.1</a>) after the first character.</p>
+
+ <p>U+FEFF <span style="font-family: Times New Roman">(</span>Zero Width no-break space<span style="font-family: Times New
+ Roman">)</span> is a format-control character used primarily at the start of a text to mark it as Unicode and to allow
+ detection of the text's encoding and byte order. <span style="font-family: Times New Roman">&lt;ZWNBSP&gt;</span> characters
+ intended for this purpose can sometimes also appear after the start of a text, for example as a result of concatenating files.
+ In ECMAScript source text &lt;ZWNBSP&gt; code points are treated as white space characters (<a href="#sec-white-space">see
+ 11.2</a>).</p>
+
+ <p>The special treatment of certain format-control characters outside of comments, string literals, and regular expression
+ literals is summarized in <a href="#table-31">Table 31</a>.</p>
+
+ <figure>
+ <figcaption><span id="table-31">Table 31</span> &mdash; Format-Control Code Point Usage</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Code Point</th>
+ <th>Name</th>
+ <th>Abbreviation</th>
+ <th>Usage</th>
+ </tr>
+ <tr>
+ <td><code>U+200C</code></td>
+ <td>Zero width non-joiner</td>
+ <td>&lt;ZWNJ&gt;</td>
+ <td><i>IdentifierPart</i></td>
+ </tr>
+ <tr>
+ <td><code>U+200D</code></td>
+ <td>Zero width joiner</td>
+ <td>&lt;ZWJ&gt;</td>
+ <td><i>IdentifierPart</i></td>
+ </tr>
+ <tr>
+ <td><code>U+FEFF</code></td>
+ <td>ZERO WIDTH NO-BREAK SPACE</td>
+ <td>&lt;ZWNBSP&gt;</td>
+ <td><i>WhiteSpace</i></td>
+ </tr>
+ </table>
+ </figure>
+ </section>
+
+ <section id="sec-white-space">
+ <h1><span class="secnum" id="sec-11.2"><a href="#sec-white-space" title="link to this section">11.2</a></span> White
+ Space</h1>
+
+ <p>White space code points are used to improve source text readability and to separate tokens (indivisible lexical units) from
+ each other, but are otherwise insignificant. White space code points may occur between any two tokens and at the start or end
+ of input. White space code points may occur within a <span class="nt">StringLiteral</span>, a <span
+ class="nt">RegularExpressionLiteral</span>, a <span class="nt">Template</span>, or a <span
+ class="nt">TemplateSubstitutionTail</span> where they are considered significant code points forming part of a literal value.
+ They may also occur within a <span class="nt">Comment</span>, but cannot appear within any other kind of token.</p>
+
+ <p>The ECMAScript white space code points are listed in <a href="#table-32">Table 32</a>.</p>
+
+ <figure>
+ <figcaption><span id="table-32">Table 32</span> &mdash; White Space Code Points</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Code Point</th>
+ <th>Name</th>
+ <th>Abbreviation</th>
+ </tr>
+ <tr>
+ <td><code>U+0009</code></td>
+ <td>Character Tabulation</td>
+ <td>&lt;TAB&gt;</td>
+ </tr>
+ <tr>
+ <td><code>U+000B</code></td>
+ <td>LINE TABULATION</td>
+ <td>&lt;VT&gt;</td>
+ </tr>
+ <tr>
+ <td><code>U+000C</code></td>
+ <td>Form Feed (ff)</td>
+ <td>&lt;FF&gt;</td>
+ </tr>
+ <tr>
+ <td><code>U+0020</code></td>
+ <td>Space</td>
+ <td>&lt;SP&gt;</td>
+ </tr>
+ <tr>
+ <td><code>U+00A0</code></td>
+ <td>No-break space</td>
+ <td>&lt;NBSP&gt;</td>
+ </tr>
+ <tr>
+ <td><code>U+FEFF</code></td>
+ <td>ZERO wIDTH nO-bREAK SPACE</td>
+ <td>&lt;ZWNBSP&gt;</td>
+ </tr>
+ <tr>
+ <td>Other category &ldquo;Zs&rdquo;</td>
+ <td>Any other Unicode &ldquo;Separator, space&rdquo; code point</td>
+ <td>&lt;USP&gt;</td>
+ </tr>
+ </table>
+ </figure>
+
+ <p>ECMAScript implementations must recognize as <span class="nt">WhiteSpace</span> code points listed in the &ldquo;Separator,
+ space&rdquo; (Zs) category by Unicode 5.1. ECMAScript implementations may also recognize as <span class="nt">WhiteSpace</span>
+ additional category Zs code points from subsequent editions of the Unicode Standard.</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> Other than for the code points listed in <a href="#table-32">Table 32</a>, ECMAScript
+ <i>WhiteSpace</i> intentionally excludes all code points that have the Unicode &ldquo;White_Space&rdquo; property but which
+ are not classified in category &ldquo;Zs&rdquo;.</p>
+ </div>
+
+ <h2>Syntax</h2>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">WhiteSpace</span> <span class="geq">::</span></div>
+ <div class="rhs">&lt;TAB&gt;</div>
+ <div class="rhs">&lt;VT&gt;</div>
+ <div class="rhs">&lt;FF&gt;</div>
+ <div class="rhs">&lt;SP&gt;</div>
+ <div class="rhs">&lt;NBSP&gt;</div>
+ <div class="rhs">&lt;zwnbsp&gt;</div>
+ <div class="rhs">&lt;USP&gt;</div>
+ </div>
+ </section>
+
+ <section id="sec-line-terminators">
+ <h1><span class="secnum" id="sec-11.3"><a href="#sec-line-terminators" title="link to this section">11.3</a></span> Line
+ Terminators</h1>
+
+ <p>Like white space code points, line terminator code points are used to improve source text readability and to separate
+ tokens (indivisible lexical units) from each other. However, unlike white space code points, line terminators have some
+ influence over the behaviour of the syntactic grammar. In general, line terminators may occur between any two tokens, but
+ there are a few places where they are forbidden by the syntactic grammar. Line terminators also affect the process of <a
+ href="#sec-automatic-semicolon-insertion">automatic semicolon insertion</a> (<a
+ href="#sec-automatic-semicolon-insertion">11.9</a>). A line terminator cannot occur within any token except a <span
+ class="nt">StringLiteral</span>, <span class="nt">Template</span>, or <span class="nt">TemplateSubstitutionTail</span>. Line
+ terminators may only occur within a <span class="nt">StringLiteral</span> token as part of a <span
+ class="nt">LineContinuation</span>.</p>
+
+ <p>A line terminator can occur within a <span class="nt">MultiLineComment</span> (<a href="#sec-comments">11.4</a>) but cannot
+ occur within a <span class="nt">SingleLineComment</span>.</p>
+
+ <p>Line terminators are included in the set of white space code points that are matched by the <code>\s</code> class in
+ regular expressions.</p>
+
+ <p>The ECMAScript line terminator code points are listed in <a href="#table-33">Table 33</a>.</p>
+
+ <figure>
+ <figcaption><span id="table-33">Table 33</span> &mdash; Line Terminator Code Points</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Code Point</th>
+ <th>Unicode Name</th>
+ <th>Abbreviation</th>
+ </tr>
+ <tr>
+ <td><code>U+000A</code></td>
+ <td>Line Feed (LF)</td>
+ <td>&lt;LF&gt;</td>
+ </tr>
+ <tr>
+ <td><code>U+000D</code></td>
+ <td>Carriage Return (CR)</td>
+ <td>&lt;CR&gt;</td>
+ </tr>
+ <tr>
+ <td><code>U+2028</code></td>
+ <td>Line separator</td>
+ <td>&lt;LS&gt;</td>
+ </tr>
+ <tr>
+ <td><code>U+2029</code></td>
+ <td>Paragraph separator</td>
+ <td>&lt;PS&gt;</td>
+ </tr>
+ </table>
+ </figure>
+
+ <p>Only the Unicode code points in <a href="#table-33">Table 33</a> are treated as line terminators. Other new line or line
+ breaking Unicode code points are not treated as line terminators but are treated as white space if they meet the requirements
+ listed in <a href="#table-32">Table 32</a>. The sequence &lt;CR&gt;&lt;LF&gt; is commonly used as a line terminator. It should
+ be considered a single <span class="nt">SourceCharacter</span> for the purpose of reporting line numbers.</p>
+
+ <h2>Syntax</h2>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">LineTerminator</span> <span class="geq">::</span></div>
+ <div class="rhs">&lt;LF&gt;</div>
+ <div class="rhs">&lt;CR&gt;</div>
+ <div class="rhs">&lt;LS&gt;</div>
+ <div class="rhs">&lt;PS&gt;</div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">LineTerminatorSequence</span> <span class="geq">::</span></div>
+ <div class="rhs">&lt;LF&gt;</div>
+ <div class="rhs">&lt;CR&gt; <span class="grhsannot">[lookahead &ne; &lt;LF&gt; ]</span></div>
+ <div class="rhs">&lt;LS&gt;</div>
+ <div class="rhs">&lt;PS&gt;</div>
+ <div class="rhs">&lt;CR&gt; &lt;LF&gt;</div>
+ </div>
+ </section>
+
+ <section id="sec-comments">
+ <h1><span class="secnum" id="sec-11.4"><a href="#sec-comments" title="link to this section">11.4</a></span> Comments</h1>
+
+ <p>Comments can be either single or multi-line. Multi-line comments cannot nest.</p>
+
+ <p>Because a single-line comment can contain any Unicode code point except a <span class="nt">LineTerminator</span> code
+ point, and because of the general rule that a token is always as long as possible, a single-line comment always consists of
+ all code points from the <code>//</code> marker to the end of the line. However, the <span class="nt">LineTerminator</span> at
+ the end of the line is not considered to be part of the single-line comment; it is recognized separately by the lexical
+ grammar and becomes part of the stream of input elements for the syntactic grammar. This point is very important, because it
+ implies that the presence or absence of single-line comments does not affect the process of <a
+ href="#sec-automatic-semicolon-insertion">automatic semicolon insertion</a> (<a href="#sec-automatic-semicolon-insertion">see
+ 11.9</a>).</p>
+
+ <p>Comments behave like white space and are discarded except that, if a <span class="nt">MultiLineComment</span> contains a
+ line terminator code point, then the entire comment is considered to be a <span class="nt">LineTerminator</span> for purposes
+ of parsing by the syntactic grammar.</p>
+
+ <h2>Syntax</h2>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">Comment</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">MultiLineComment</span></div>
+ <div class="rhs"><span class="nt">SingleLineComment</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">MultiLineComment</span> <span class="geq">::</span></div>
+ <div class="rhs"><code class="t">/*</code> <span class="nt">MultiLineCommentChars</span><sub class="g-opt">opt</sub> <code class="t">*/</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">MultiLineCommentChars</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">MultiLineNotAsteriskChar</span> <span class="nt">MultiLineCommentChars</span><sub class="g-opt">opt</sub></div>
+ <div class="rhs"><code class="t">*</code> <span class="nt">PostAsteriskCommentChars</span><sub class="g-opt">opt</sub></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">PostAsteriskCommentChars</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">MultiLineNotForwardSlashOrAsteriskChar</span> <span class="nt">MultiLineCommentChars</span><sub class="g-opt">opt</sub></div>
+ <div class="rhs"><code class="t">*</code> <span class="nt">PostAsteriskCommentChars</span><sub class="g-opt">opt</sub></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">MultiLineNotAsteriskChar</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">SourceCharacter</span> <span class="grhsmod">but not</span> <code class="t">*</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">MultiLineNotForwardSlashOrAsteriskChar</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">SourceCharacter</span> <span class="grhsmod">but not one of</span> <code class="t">/</code> <span class="grhsmod">or</span> <code class="t">*</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">SingleLineComment</span> <span class="geq">::</span></div>
+ <div class="rhs"><code class="t">//</code> <span class="nt">SingleLineCommentChars</span><sub class="g-opt">opt</sub></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">SingleLineCommentChars</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">SingleLineCommentChar</span> <span class="nt">SingleLineCommentChars</span><sub class="g-opt">opt</sub></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">SingleLineCommentChar</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">SourceCharacter</span> <span class="grhsmod">but not</span> <span class="nt">LineTerminator</span></div>
+ </div>
+ </section>
+
+ <section id="sec-tokens">
+ <h1><span class="secnum" id="sec-11.5"><a href="#sec-tokens" title="link to this section">11.5</a></span> Tokens</h1>
+ <h2>Syntax</h2>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">CommonToken</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">IdentifierName</span></div>
+ <div class="rhs"><span class="nt">Punctuator</span></div>
+ <div class="rhs"><span class="nt">NumericLiteral</span></div>
+ <div class="rhs"><span class="nt">StringLiteral</span></div>
+ <div class="rhs"><span class="nt">Template</span></div>
+ </div>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> The <i>DivPunctuator</i>, <i>RegularExpressionLiteral</i>, <i>RightBracePunctuator,</i> and
+ <i>TemplateSubstitutionTail</i> productions derive additional tokens that are not included in the <i>CommonToken</i>
+ production.</p>
+ </div>
+ </section>
+
+ <section id="sec-names-and-keywords">
+ <div class="front">
+ <h1><span class="secnum" id="sec-11.6"><a href="#sec-names-and-keywords" title="link to this section">11.6</a></span> Names
+ and Keywords</h1>
+
+ <p><span class="nt">IdentifierName</span> and <span class="nt">ReservedWord</span> are tokens that are interpreted according
+ to the Default Identifier Syntax given in Unicode Standard Annex #31, Identifier and Pattern Syntax, with some small
+ modifications. <span class="nt">ReservedWord</span> is an enumerated subset of <span style="font-family: Times New
+ Roman"><i>IdentifierName</i>.</span> The syntactic grammar defines <span class="nt">Identifier</span> as an <span
+ class="nt">IdentifierName</span> that is not a <span class="nt">ReservedWord</span> (<a href="#sec-reserved-words">see
+ 11.6.2</a>). The Unicode identifier grammar is based on character properties specified by the Unicode Standard. The Unicode
+ code points in the specified categories in version 5.1.0 of the Unicode standard must be treated as in those categories by
+ all conforming ECMAScript implementations. ECMAScript implementations may recognize identifier code points defined in later
+ editions of the Unicode Standard.</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> This standard specifies specific code point additions: <span style="font-family:
+ sans-serif">U+0024</span> (dollar sign) and <span style="font-family: sans-serif">U+005F</span> (<span style="font-family:
+ sans-serif">LOW LINE</span>) are permitted anywhere in an <i>IdentifierName</i><span style="font-family: sans-serif">, and
+ the code points</span> <span style="font-family: sans-serif">U+200C (zero-width non-joiner) and U+200D (zero-width joiner)
+ are permitted anywhere after the first code point</span> <span style="font-family: sans-serif">of an</span>
+ <i>IdentifierName</i>.</p>
+ </div>
+
+ <p>Unicode escape sequences are permitted in an <span class="nt">IdentifierName</span>, where they contribute a single
+ Unicode code point to the <span class="nt">IdentifierName</span>. The code point is expressed by the <span
+ class="nt">HexDigits</span> of the <span class="nt">UnicodeEscapeSequence</span> (<a
+ href="#sec-literals-string-literals">see 11.8.4</a>). The <code>\</code> preceding the <span
+ class="nt">UnicodeEscapeSequence</span> and the <code>u</code> and <code>{ }</code> code units, if they appear, do not
+ contribute code points to the <span class="nt">IdentifierName</span>. A <span class="nt">UnicodeEscapeSequence</span> cannot
+ be used to put a code point into an <span class="nt">IdentifierName</span> that would otherwise be illegal. In other words,
+ if a <code>\</code> <span class="nt">UnicodeEscapeSequence</span> sequence were replaced by the <span
+ class="nt">SourceCharacter</span> it contributes, the result must still be a valid <span class="nt">IdentifierName</span>
+ that has the exact same sequence of <span class="nt">SourceCharacter</span> elements as the original <span
+ class="nt">IdentifierName</span>. All interpretations of <span class="nt">IdentifierName</span> within this specification
+ are based upon their actual code points regardless of whether or not an escape sequence was used to contribute any
+ particular code point.</p>
+
+ <p>Two <span class="nt">IdentifierName</span> that are canonically equivalent according to the Unicode standard are
+ <i>not</i> equal unless, after replacement of each <span class="nt">UnicodeEscapeSequence</span>, they are represented by
+ the exact same sequence of code points.</p>
+
+ <h2>Syntax</h2>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">IdentifierName</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">IdentifierStart</span></div>
+ <div class="rhs"><span class="nt">IdentifierName</span> <span class="nt">IdentifierPart</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">IdentifierStart</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">UnicodeIDStart</span></div>
+ <div class="rhs"><code class="t">$</code></div>
+ <div class="rhs"><code class="t">_</code></div>
+ <div class="rhs"><code class="t">\</code> <span class="nt">UnicodeEscapeSequence</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">IdentifierPart</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">UnicodeIDContinue</span></div>
+ <div class="rhs"><code class="t">$</code></div>
+ <div class="rhs"><code class="t">_</code></div>
+ <div class="rhs"><code class="t">\</code> <span class="nt">UnicodeEscapeSequence</span></div>
+ <div class="rhs">&lt;ZWNJ&gt;</div>
+ <div class="rhs">&lt;ZWJ&gt;</div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">UnicodeIDStart</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="gprose">any Unicode code point with the Unicode property &ldquo;ID_Start&rdquo;</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">UnicodeIDContinue</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="gprose">any Unicode code point with the Unicode property &ldquo;ID_Continue&rdquo;</span></div>
+ </div>
+
+ <p>The definitions of the nonterminal <span class="nt">UnicodeEscapeSequence</span> is given in <a
+ href="#sec-literals-string-literals">11.8.4</a>.</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> The sets of code points with Unicode properties &ldquo;ID_Start&rdquo; and
+ &ldquo;ID_Continue&rdquo; include, respectively, the code points with Unicode properties &ldquo;Other_ID_Start&rdquo; and
+ &ldquo;Other_ID_Continue&rdquo;.</p>
+ </div>
+ </div>
+
+ <section id="sec-identifier-names">
+ <div class="front">
+ <h1><span class="secnum" id="sec-11.6.1"><a href="#sec-identifier-names" title="link to this section">11.6.1</a></span>
+ Identifier Names</h1>
+ </div>
+
+ <section id="sec-identifier-names-static-semantics-early-errors">
+ <h1><span class="secnum" id="sec-11.6.1.1"><a href="#sec-identifier-names-static-semantics-early-errors"
+ title="link to this section">11.6.1.1</a></span> Static Semantics: Early Errors</h1>
+ <div class="gp prod"><span class="nt">IdentifierStart</span> <span class="geq">::</span> <code class="t">\</code> <span class="nt">UnicodeEscapeSequence</span></div>
+ <ul>
+ <li>
+ <p>It is a Syntax Error if <span style="font-family: Times New Roman">SV(<i>UnicodeEscapeSequence</i>)</span> is none
+ of <code>"$"</code>, or <code>"_"</code>, or the <a href="#sec-utf16encoding">UTF16Encoding</a> (<a
+ href="#sec-utf16encoding">10.1.1</a>) of a code point that would be matched by the <span
+ class="nt">UnicodeIDStart</span> lexical grammar production.</p>
+ </li>
+ </ul>
+ <div class="gp prod"><span class="nt">IdentifierPart</span> <span class="geq">::</span> <code class="t">\</code> <span class="nt">UnicodeEscapeSequence</span></div>
+ <ul>
+ <li>
+ <p>It is a Syntax Error if <span style="font-family: Times New Roman">SV(<i>UnicodeEscapeSequence</i>)</span> is none
+ of <code>"$"</code>, or <code>"_"</code>, or the <a href="#sec-utf16encoding">UTF16Encoding</a> (<a
+ href="#sec-utf16encoding">10.1.1</a>) of either &lt;ZWNJ&gt; or &lt;ZWJ&gt;, or the <a
+ href="#sec-utf16encoding">UTF16Encoding</a> of a Unicode code point that would be matched by the <span
+ class="nt">UnicodeIDContinue</span> lexical grammar production.</p>
+ </li>
+ </ul>
+ </section>
+
+ <section id="sec-identifier-names-static-semantics-stringvalue">
+ <h1><span class="secnum" id="sec-11.6.1.2"><a href="#sec-identifier-names-static-semantics-stringvalue"
+ title="link to this section">11.6.1.2</a></span> Static Semantics<span style="font-family: sans-serif">:</span>
+ <i>StringValue</i></h1>
+
+ <p>See also: <a href="#sec-string-literals-static-semantics-stringvalue">11.8.4.2</a>, <a
+ href="#sec-identifiers-static-semantics-stringvalue">12.1.4</a>.</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">IdentifierName</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">IdentifierStart</span></div>
+ <div class="rhs"><span class="nt">IdentifierName</span> <span class="nt">IdentifierPart</span></div>
+ </div>
+
+ <ol class="proc">
+ <li>Return the String value consisting of the sequence of code units corresponding to <i>IdentifierName</i>. In
+ determining the sequence any occurrences of <code>\</code> <i>UnicodeEscapeSequence</i> are first replaced with the
+ code point represented by the <i>UnicodeEscapeSequence</i> and then the code points of the entire
+ <i>IdentifierName</i> are converted to code units by <a href="#sec-utf16encoding">UTF16Encoding</a> (<a
+ href="#sec-utf16encoding">10.1.1</a>) each code point.</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-reserved-words">
+ <div class="front">
+ <h1><span class="secnum" id="sec-11.6.2"><a href="#sec-reserved-words" title="link to this section">11.6.2</a></span>
+ Reserved Words</h1>
+
+ <p>A reserved word is an <span class="nt">IdentifierName</span> that cannot be used as an <span
+ class="nt">Identifier</span>.</p>
+
+ <h2>Syntax</h2>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">ReservedWord</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">Keyword</span></div>
+ <div class="rhs"><span class="nt">FutureReservedWord</span></div>
+ <div class="rhs"><span class="nt">NullLiteral</span></div>
+ <div class="rhs"><span class="nt">BooleanLiteral</span></div>
+ </div>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> The <i>ReservedWord</i> definitions are specified as literal sequences of specific
+ <i>SourceCharacter</i> elements. A code point in a <i>ReservedWord</i> cannot be expressed by a <code>\</code>
+ <i>UnicodeEscapeSequence</i>.</p>
+ </div>
+ </div>
+
+ <section id="sec-keywords">
+ <h1><span class="secnum" id="sec-11.6.2.1"><a href="#sec-keywords" title="link to this section">11.6.2.1</a></span>
+ Keywords</h1>
+
+ <p>The following tokens are ECMAScript keywords and may not be used as <span class="nt">Identifiers</span> in ECMAScript
+ programs.</p>
+
+ <h2>Syntax</h2>
+ <div class="gp prod"><span class="nt">Keyword</span> <span class="geq">::</span> <span class="grhsmod">one of</span></div>
+
+ <figure>
+ <table class="lightweight-table">
+ <tr>
+ <td><code>break</code></td>
+ <td><code>do</code></td>
+ <td><code>in</code></td>
+ <td><code>typeof</code></td>
+ </tr>
+ <tr>
+ <td><code>case</code></td>
+ <td><code>else</code></td>
+ <td><code>instanceof</code></td>
+ <td><code>var</code></td>
+ </tr>
+ <tr>
+ <td><code>catch</code></td>
+ <td><code>export</code></td>
+ <td><code>new</code></td>
+ <td><code>void</code></td>
+ </tr>
+ <tr>
+ <td><code>class</code></td>
+ <td><code>extends</code></td>
+ <td><code>return</code></td>
+ <td><code>while</code></td>
+ </tr>
+ <tr>
+ <td><code>const</code></td>
+ <td><code>finally</code></td>
+ <td><code>super</code></td>
+ <td><code>with</code></td>
+ </tr>
+ <tr>
+ <td><code>continue</code></td>
+ <td><code>for</code></td>
+ <td><code>switch</code></td>
+ <td><code>yield</code></td>
+ </tr>
+ <tr>
+ <td><code>debugger</code></td>
+ <td><code>function</code></td>
+ <td><code>this</code></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>default</code></td>
+ <td><code>if</code></td>
+ <td><code>throw</code></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>delete</code></td>
+ <td><code>import</code></td>
+ <td><code>try</code></td>
+ <td></td>
+ </tr>
+ </table>
+ </figure>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> In some contexts <code>yield</code> is given the semantics of an <i>Identifier</i>. See
+ <a href="#sec-identifiers-static-semantics-early-errors">12.1.1</a>. In <a href="#sec-strict-mode-code">strict mode
+ code</a>, <code>let</code> and <code>static</code> are treated as reserved keywords through static semantic restrictions
+ (see <a href="#sec-identifiers-static-semantics-early-errors">12.1.1</a>, <a
+ href="#sec-let-and-const-declarations-static-semantics-early-errors">13.2.1.1</a>, <a
+ href="#sec-for-in-and-for-of-statements-static-semantics-early-errors">13.6.4.1</a>, and <a
+ href="#sec-class-definitions-static-semantics-early-errors">14.5.1</a>) rather than the lexical grammar.</p>
+ </div>
+ </section>
+
+ <section id="sec-future-reserved-words">
+ <h1><span class="secnum" id="sec-11.6.2.2"><a href="#sec-future-reserved-words"
+ title="link to this section">11.6.2.2</a></span> Future Reserved Words</h1>
+
+ <p>The following tokens are reserved for used as keywords in future language extensions.</p>
+
+ <h2>Syntax</h2>
+ <div class="gp prod"><span class="nt">FutureReservedWord</span> <span class="geq">::</span></div>
+
+ <figure>
+ <table class="lightweight-table">
+ <tr>
+ <td><code>enum<br>await</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ </table>
+ </figure>
+
+ <p><code>await</code> is only treated as a <span class="nt">FutureReservedWord</span> when <span class="nt">Module</span>
+ is the goal symbol of the syntactic grammar.</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> Use of the following tokens within <a href="#sec-strict-mode-code">strict mode code</a>
+ (<a href="#sec-strict-mode-code">see 10.2.1</a>) is also reserved. That usage is restricted using static semantic
+ restrictions (<a href="#sec-identifiers-static-semantics-early-errors">see 12.1.1</a>) rather than the lexical
+ grammar:</p>
+ </div>
+
+ <figure>
+ <table class="lightweight-table">
+ <tr>
+ <td><code>implements</code></td>
+ <td><code>package</code></td>
+ <td><code>protected</code></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>interface</code></td>
+ <td><code>private</code></td>
+ <td><code>public</code></td>
+ <td></td>
+ </tr>
+ </table>
+ </figure>
+ </section>
+ </section>
+ </section>
+
+ <section id="sec-punctuators">
+ <h1><span class="secnum" id="sec-11.7"><a href="#sec-punctuators" title="link to this section">11.7</a></span>
+ Punctuators</h1>
+ <h2>Syntax</h2>
+ <div class="gp prod"><span class="nt">Punctuator</span> <span class="geq">::</span> <span class="grhsmod">one of</span></div>
+
+ <figure>
+ <table class="lightweight-table">
+ <tr>
+ <td><code>{</code></td>
+ <td><code>(</code></td>
+ <td><code>)</code></td>
+ <td><code>[</code></td>
+ <td><code>]</code></td>
+ <td><code>.</code></td>
+ </tr>
+ <tr>
+ <td><code>...</code></td>
+ <td><code>;</code></td>
+ <td><code>,</code></td>
+ <td><code>&lt;</code></td>
+ <td><code>&gt;</code></td>
+ <td><code>&lt;=</code></td>
+ </tr>
+ <tr>
+ <td><code>&gt;=</code></td>
+ <td><code>==</code></td>
+ <td><code>!=</code></td>
+ <td><code>===</code></td>
+ <td><code>!==</code></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><code>+</code></td>
+ <td><code>-</code></td>
+ <td><code>*</code></td>
+ <td><code>%</code></td>
+ <td><code>++</code></td>
+ <td><code>--</code></td>
+ </tr>
+ <tr>
+ <td><code>&lt;&lt;</code></td>
+ <td><code>&gt;&gt;</code></td>
+ <td><code>&gt;&gt;&gt;</code></td>
+ <td><code>&amp;</code></td>
+ <td><code>|</code></td>
+ <td><code>^</code></td>
+ </tr>
+ <tr>
+ <td><code>!</code></td>
+ <td><code>~</code></td>
+ <td><code>&amp;&amp;</code></td>
+ <td><code>||</code></td>
+ <td><code>?</code></td>
+ <td><code>:</code></td>
+ </tr>
+ <tr>
+ <td><code>=</code></td>
+ <td><code>+=</code></td>
+ <td><code>-=</code></td>
+ <td><code>*=</code></td>
+ <td><code>%=</code></td>
+ <td><code>&lt;&lt;=</code></td>
+ </tr>
+ <tr>
+ <td><code>&gt;&gt;=</code></td>
+ <td><code>&gt;&gt;&gt;=</code></td>
+ <td><code>&amp;=</code></td>
+ <td><code>|=</code></td>
+ <td><code>^=</code></td>
+ <td><code>=&gt;</code></td>
+ </tr>
+ </table>
+ </figure>
+
+ <div class="gp prod"><span class="nt">DivPunctuator</span> <span class="geq">::</span> <span class="grhsmod">one of</span></div>
+
+ <figure>
+ <table class="lightweight-table">
+ <tr>
+ <td><code>/</code></td>
+ <td><code>/=</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ </table>
+ </figure>
+
+ <div class="gp prod"><span class="nt">RightBracePunctuator</span> <span class="geq">::</span></div>
+
+ <figure>
+ <table class="lightweight-table">
+ <tr>
+ <td><code>}</code></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ </table>
+ </figure>
+ </section>
+
+ <section id="sec-ecmascript-language-lexical-grammar-literals">
+ <div class="front">
+ <h1><span class="secnum" id="sec-11.8"><a href="#sec-ecmascript-language-lexical-grammar-literals"
+ title="link to this section">11.8</a></span> Literals</h1>
+ </div>
+
+ <section id="sec-null-literals">
+ <h1><span class="secnum" id="sec-11.8.1"><a href="#sec-null-literals" title="link to this section">11.8.1</a></span> Null
+ Literals</h1>
+ <h2>Syntax</h2>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">NullLiteral</span> <span class="geq">::</span></div>
+ <div class="rhs"><code class="t">null</code></div>
+ </div>
+ </section>
+
+ <section id="sec-boolean-literals">
+ <h1><span class="secnum" id="sec-11.8.2"><a href="#sec-boolean-literals" title="link to this section">11.8.2</a></span>
+ Boolean Literals</h1>
+ <h2>Syntax</h2>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">BooleanLiteral</span> <span class="geq">::</span></div>
+ <div class="rhs"><code class="t">true</code></div>
+ <div class="rhs"><code class="t">false</code></div>
+ </div>
+ </section>
+
+ <section id="sec-literals-numeric-literals">
+ <div class="front">
+ <h1><span class="secnum" id="sec-11.8.3"><a href="#sec-literals-numeric-literals"
+ title="link to this section">11.8.3</a></span> Numeric Literals</h1>
+ <h2>Syntax</h2>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">NumericLiteral</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">DecimalLiteral</span></div>
+ <div class="rhs"><span class="nt">BinaryIntegerLiteral</span></div>
+ <div class="rhs"><span class="nt">OctalIntegerLiteral</span></div>
+ <div class="rhs"><span class="nt">HexIntegerLiteral</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">DecimalLiteral</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">DecimalIntegerLiteral</span> <code class="t">.</code> <span class="nt">DecimalDigits</span><sub class="g-opt">opt</sub> <span class="nt">ExponentPart</span><sub class="g-opt">opt</sub></div>
+ <div class="rhs"><code class="t">.</code> <span class="nt">DecimalDigits</span> <span class="nt">ExponentPart</span><sub class="g-opt">opt</sub></div>
+ <div class="rhs"><span class="nt">DecimalIntegerLiteral</span> <span class="nt">ExponentPart</span><sub class="g-opt">opt</sub></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">DecimalIntegerLiteral</span> <span class="geq">::</span></div>
+ <div class="rhs"><code class="t">0</code></div>
+ <div class="rhs"><span class="nt">NonZeroDigit</span> <span class="nt">DecimalDigits</span><sub class="g-opt">opt</sub></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">DecimalDigits</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">DecimalDigit</span></div>
+ <div class="rhs"><span class="nt">DecimalDigits</span> <span class="nt">DecimalDigit</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">DecimalDigit</span> <span class="geq">::</span> <span class="grhsmod">one of</span></div>
+ <div class="rhs"><code class="t">0</code> <code class="t">1</code> <code class="t">2</code> <code class="t">3</code> <code class="t">4</code> <code class="t">5</code> <code class="t">6</code> <code class="t">7</code> <code class="t">8</code> <code class="t">9</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">NonZeroDigit</span> <span class="geq">::</span> <span class="grhsmod">one of</span></div>
+ <div class="rhs"><code class="t">1</code> <code class="t">2</code> <code class="t">3</code> <code class="t">4</code> <code class="t">5</code> <code class="t">6</code> <code class="t">7</code> <code class="t">8</code> <code class="t">9</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">ExponentPart</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">ExponentIndicator</span> <span class="nt">SignedInteger</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">ExponentIndicator</span> <span class="geq">::</span> <span class="grhsmod">one of</span></div>
+ <div class="rhs"><code class="t">e</code> <code class="t">E</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">SignedInteger</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">DecimalDigits</span></div>
+ <div class="rhs"><code class="t">+</code> <span class="nt">DecimalDigits</span></div>
+ <div class="rhs"><code class="t">-</code> <span class="nt">DecimalDigits</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">BinaryIntegerLiteral</span> <span class="geq">::</span></div>
+ <div class="rhs"><code class="t">0b</code> <span class="nt">BinaryDigits</span></div>
+ <div class="rhs"><code class="t">0B</code> <span class="nt">BinaryDigits</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">BinaryDigits</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">BinaryDigit</span></div>
+ <div class="rhs"><span class="nt">BinaryDigits</span> <span class="nt">BinaryDigit</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">BinaryDigit</span> <span class="geq">::</span> <span class="grhsmod">one of</span></div>
+ <div class="rhs"><code class="t">0</code> <code class="t">1</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">OctalIntegerLiteral</span> <span class="geq">::</span></div>
+ <div class="rhs"><code class="t">0o</code> <span class="nt">OctalDigits</span></div>
+ <div class="rhs"><code class="t">0O</code> <span class="nt">OctalDigits</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">OctalDigits</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">OctalDigit</span></div>
+ <div class="rhs"><span class="nt">OctalDigits</span> <span class="nt">OctalDigit</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">OctalDigit</span> <span class="geq">::</span> <span class="grhsmod">one of</span></div>
+ <div class="rhs"><code class="t">0</code> <code class="t">1</code> <code class="t">2</code> <code class="t">3</code> <code class="t">4</code> <code class="t">5</code> <code class="t">6</code> <code class="t">7</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">HexIntegerLiteral</span> <span class="geq">::</span></div>
+ <div class="rhs"><code class="t">0x</code> <span class="nt">HexDigits</span></div>
+ <div class="rhs"><code class="t">0X</code> <span class="nt">HexDigits</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">HexDigits</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">HexDigit</span></div>
+ <div class="rhs"><span class="nt">HexDigits</span> <span class="nt">HexDigit</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">HexDigit</span> <span class="geq">::</span> <span class="grhsmod">one of</span></div>
+ <div class="rhs"><code class="t">0</code> <code class="t">1</code> <code class="t">2</code> <code class="t">3</code> <code class="t">4</code> <code class="t">5</code> <code class="t">6</code> <code class="t">7</code> <code class="t">8</code> <code class="t">9</code> <code class="t">a</code> <code class="t">b</code> <code class="t">c</code> <code class="t">d</code> <code class="t">e</code> <code class="t">f</code> <code class="t">A</code> <code class="t">B</code> <code class="t">C</code> <code class="t">D</code> <code class="t">E</code> <code class="t">F</code></div>
+ </div>
+
+ <p>The <span class="nt">SourceCharacter</span> immediately following a <span class="nt">NumericLiteral</span> must not be
+ an <span class="nt">IdentifierStart</span> or <span class="nt">DecimalDigit</span>.</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> For example:</p>
+
+ <pre>3in</pre>
+
+ <p>is an error and not the two input elements <code>3</code> and <code>in</code>.</p>
+ </div>
+
+ <p>A conforming implementation, when processing <a href="#sec-strict-mode-code">strict mode code</a> (<a
+ href="#sec-strict-mode-code">see 10.2.1</a>), must not extend, as described in <a
+ href="#sec-additional-syntax-numeric-literals">B.1.1</a>, the syntax of <span class="nt">NumericLiteral</span> to include
+ <i>Legacy<span style="font-family: Times New Roman">OctalIntegerLiteral</span></i>, nor extend the syntax of <span
+ class="nt">DecimalIntegerLiteral</span> to include <span class="nt">NonOctalDecimalIntegerLiteral</span>.</p>
+ </div>
+
+ <section id="sec-static-semantics-mv-s">
+ <h1><span class="secnum" id="sec-11.8.3.1"><a href="#sec-static-semantics-mv-s"
+ title="link to this section">11.8.3.1</a></span> Static Semantics: MV&rsquo;s</h1>
+
+ <p>A numeric literal stands for a value of the Number type. This value is determined in two steps: first, a mathematical
+ value (MV) is derived from the literal; second, this mathematical value is rounded as described below.</p>
+
+ <ul>
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">NumericLiteral</span> <span class="geq">::</span> <span
+ class="nt">DecimalLiteral</span></span> is the MV of <i>DecimalLiteral</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">NumericLiteral</span> <span class="geq">::</span> <span
+ class="nt">BinaryIntegerLiteral</span></span> is the MV of <i>BinaryIntegerLiteral</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">NumericLiteral</span> <span class="geq">::</span> <span
+ class="nt">OctalIntegerLiteral</span></span> is the MV of <i>OctalIntegerLiteral</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">NumericLiteral</span> <span class="geq">::</span> <span
+ class="nt">HexIntegerLiteral</span></span> is the MV of <i>HexIntegerLiteral</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">DecimalLiteral</span> <span class="geq">::</span> <span
+ class="nt">DecimalIntegerLiteral</span> <code class="t">.</code></span> is the MV of <i>DecimalIntegerLiteral</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">DecimalLiteral</span> <span class="geq">::</span> <span
+ class="nt">DecimalIntegerLiteral</span> <code class="t">.</code> <span class="nt">DecimalDigits</span></span> is the
+ MV of <i>DecimalIntegerLiteral</i> plus (the MV of <i>DecimalDigits</i> &times; 10<sup>&ndash;<i>n</i></sup>), where
+ <i>n</i> is the number of code points in <i>DecimalDigits</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">DecimalLiteral</span> <span class="geq">::</span> <span
+ class="nt">DecimalIntegerLiteral</span> <code class="t">.</code> <span class="nt">ExponentPart</span></span> is the MV
+ of <i>DecimalIntegerLiteral</i> &times; 10<sup><i>e</i></sup>, where <i>e</i> is the MV of <i>ExponentPart</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">DecimalLiteral</span> <span class="geq">::</span> <span
+ class="nt">DecimalIntegerLiteral</span> <code class="t">.</code> <span class="nt">DecimalDigits</span> <span
+ class="nt">ExponentPart</span></span> is (the MV of <i>DecimalIntegerLiteral</i> plus (the MV of <i>DecimalDigits</i>
+ &times; 10<sup>&ndash;<i>n</i></sup>)) &times; 10<sup><i>e</i></sup>, where <i>n</i> is the number of code points in
+ <i>DecimalDigits</i> and <i>e</i> is the MV of <i>ExponentPart</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">DecimalLiteral</span> <span class="geq">::</span> <code
+ class="t">.</code> <span class="nt">DecimalDigits</span></span> is the MV of <i>DecimalDigits</i> &times;
+ 10<sup>&ndash;<i>n</i></sup>, where <i>n</i> is the number of code points in <i>DecimalDigits</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">DecimalLiteral</span> <span class="geq">::</span> <code
+ class="t">.</code> <span class="nt">DecimalDigits</span> <span class="nt">ExponentPart</span></span> is the MV of
+ <i>DecimalDigits</i> &times; 10<sup><i>e</i>&ndash;<i>n</i></sup>, where <i>n</i> is the number of code points in
+ <i>DecimalDigits</i> and <i>e</i> is the MV of <i>ExponentPart</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">DecimalLiteral</span> <span class="geq">::</span> <span
+ class="nt">DecimalIntegerLiteral</span></span> is the MV of <i>DecimalIntegerLiteral</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">DecimalLiteral</span> <span class="geq">::</span> <span
+ class="nt">DecimalIntegerLiteral</span> <span class="nt">ExponentPart</span></span> is the MV of
+ <i>DecimalIntegerLiteral</i> &times; 10<sup><i>e</i></sup>, where <i>e</i> is the MV of <i>ExponentPart</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">DecimalIntegerLiteral</span> <span class="geq">::</span> <code
+ class="t">0</code></span> is 0.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">DecimalIntegerLiteral</span> <span class="geq">::</span> <span
+ class="nt">NonZeroDigit</span></span> is the MV of <i>NonZeroDigit.</i></p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">DecimalIntegerLiteral</span> <span class="geq">::</span> <span
+ class="nt">NonZeroDigit</span> <span class="nt">DecimalDigits</span></span> is (the MV of <i>NonZeroDigit</i> &times;
+ 10<sup><i>n</i></sup>) plus the MV of <i>DecimalDigits</i>, where <i>n</i> is the number of code points in
+ <i>DecimalDigits</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">DecimalDigits</span> <span class="geq">::</span> <span
+ class="nt">DecimalDigit</span></span> is the MV of <i>DecimalDigit</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">DecimalDigits</span> <span class="geq">::</span> <span
+ class="nt">DecimalDigits</span> <span class="nt">DecimalDigit</span></span> is (the MV of <i>DecimalDigits</i> &times;
+ 10) plus the MV of <i>DecimalDigit</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">ExponentPart</span> <span class="geq">::</span> <span
+ class="nt">ExponentIndicator</span> <span class="nt">SignedInteger</span></span> is the MV of
+ <i>SignedInteger</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">SignedInteger</span> <span class="geq">::</span> <span
+ class="nt">DecimalDigits</span></span> is the MV of <i>DecimalDigits</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">SignedInteger</span> <span class="geq">::</span> <code
+ class="t">+</code> <span class="nt">DecimalDigits</span></span> is the MV of <i>DecimalDigits</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">SignedInteger</span> <span class="geq">::</span> <code
+ class="t">-</code> <span class="nt">DecimalDigits</span></span> is the negative of the MV of <i>DecimalDigits</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">DecimalDigit</span> <span class="geq">::</span> <code
+ class="t">0</code></span> or of <span class="prod"><span class="nt">HexDigit</span> <span class="geq">::</span> <code
+ class="t">0</code></span> or of <span class="prod"><span class="nt">OctalDigit</span> <span class="geq">::</span>
+ <code class="t">0</code></span> or of <span class="prod"><span class="nt">BinaryDigit</span> <span
+ class="geq">::</span> <code class="t">0</code></span> is 0.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">DecimalDigit</span> <span class="geq">::</span> <code
+ class="t">1</code></span> or of <span class="prod"><span class="nt">NonZeroDigit</span> <span class="geq">::</span>
+ <code class="t">1</code></span> or of <span class="prod"><span class="nt">HexDigit</span> <span class="geq">::</span>
+ <code class="t">1</code></span> or of <span class="prod"><span class="nt">OctalDigit</span> <span
+ class="geq">::</span> <code class="t">1</code></span> or<br>of <span class="prod"><span class="nt">BinaryDigit</span>
+ <span class="geq">::</span> <code class="t">1</code></span> is 1.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">DecimalDigit</span> <span class="geq">::</span> <code
+ class="t">2</code></span> or of <span class="prod"><span class="nt">NonZeroDigit</span> <span class="geq">::</span>
+ <code class="t">2</code></span> or of <span class="prod"><span class="nt">HexDigit</span> <span class="geq">::</span>
+ <code class="t">2</code></span> or of <span class="prod"><span class="nt">OctalDigit</span> <span
+ class="geq">::</span> <code class="t">2</code></span> is 2.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">DecimalDigit</span> <span class="geq">::</span> <code
+ class="t">3</code></span> or of <span class="prod"><span class="nt">NonZeroDigit</span> <span class="geq">::</span>
+ <code class="t">3</code></span> or of <span class="prod"><span class="nt">HexDigit</span> <span class="geq">::</span>
+ <code class="t">3</code></span> or of <span class="prod"><span class="nt">OctalDigit</span> <span
+ class="geq">::</span> <code class="t">3</code></span> is 3.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">DecimalDigit</span> <span class="geq">::</span> <code
+ class="t">4</code></span> or of <span class="prod"><span class="nt">NonZeroDigit</span> <span class="geq">::</span>
+ <code class="t">4</code></span> or of <span class="prod"><span class="nt">HexDigit</span> <span class="geq">::</span>
+ <code class="t">4</code></span> or of <span class="prod"><span class="nt">OctalDigit</span> <span
+ class="geq">::</span> <code class="t">4</code></span> is 4.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">DecimalDigit</span> <span class="geq">::</span> <code
+ class="t">5</code></span> or of <span class="prod"><span class="nt">NonZeroDigit</span> <span class="geq">::</span>
+ <code class="t">5</code></span> or of <span class="prod"><span class="nt">HexDigit</span> <span class="geq">::</span>
+ <code class="t">5</code></span> or of <span class="prod"><span class="nt">OctalDigit</span> <span
+ class="geq">::</span> <code class="t">5</code></span> is 5.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">DecimalDigit</span> <span class="geq">::</span> <code
+ class="t">6</code></span> or of <span class="prod"><span class="nt">NonZeroDigit</span> <span class="geq">::</span>
+ <code class="t">6</code></span> or of <span class="prod"><span class="nt">HexDigit</span> <span class="geq">::</span>
+ <code class="t">6</code></span> or of <span class="prod"><span class="nt">OctalDigit</span> <span
+ class="geq">::</span> <code class="t">6</code></span> is 6.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">DecimalDigit</span> <span class="geq">::</span> <code
+ class="t">7</code></span> or of <span class="prod"><span class="nt">NonZeroDigit</span> <span class="geq">::</span>
+ <code class="t">7</code></span> or of <span class="prod"><span class="nt">HexDigit</span> <span class="geq">::</span>
+ <code class="t">7</code></span> or of <span class="prod"><span class="nt">OctalDigit</span> <span
+ class="geq">::</span> <code class="t">7</code></span> is 7.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">DecimalDigit</span> <span class="geq">::</span> <code
+ class="t">8</code></span> or of <span class="prod"><span class="nt">NonZeroDigit</span> <span class="geq">::</span>
+ <code class="t">8</code></span> or of <span class="prod"><span class="nt">HexDigit</span> <span class="geq">::</span>
+ <code class="t">8</code></span> is 8.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">DecimalDigit</span> <span class="geq">::</span> <code
+ class="t">9</code></span> or of <span class="prod"><span class="nt">NonZeroDigit</span> <span class="geq">::</span>
+ <code class="t">9</code></span> or of <span class="prod"><span class="nt">HexDigit</span> <span class="geq">::</span>
+ <code class="t">9</code></span> is 9.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">HexDigit</span> <span class="geq">::</span> <code
+ class="t">a</code></span> or of <span class="prod"><span class="nt">HexDigit</span> <span class="geq">::</span> <code
+ class="t">A</code></span> is 10.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">HexDigit</span> <span class="geq">::</span> <code
+ class="t">b</code></span> or of <span class="prod"><span class="nt">HexDigit</span> <span class="geq">::</span> <code
+ class="t">B</code></span> is 11.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">HexDigit</span> <span class="geq">::</span> <code
+ class="t">c</code></span> or of <span class="prod"><span class="nt">HexDigit</span> <span class="geq">::</span> <code
+ class="t">C</code></span> is 12.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">HexDigit</span> <span class="geq">::</span> <code
+ class="t">d</code></span> or of <span class="prod"><span class="nt">HexDigit</span> <span class="geq">::</span> <code
+ class="t">D</code></span> is 13.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">HexDigit</span> <span class="geq">::</span> <code
+ class="t">e</code></span> or of <span class="prod"><span class="nt">HexDigit</span> <span class="geq">::</span> <code
+ class="t">E</code></span> is 14.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">HexDigit</span> <span class="geq">::</span> <code
+ class="t">f</code></span> or of <span class="prod"><span class="nt">HexDigit</span> <span class="geq">::</span> <code
+ class="t">F</code></span> is 15.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">BinaryIntegerLiteral</span> <span class="geq">::</span> <code
+ class="t">0b</code> <span class="nt">BinaryDigits</span></span> is the MV of <i>BinaryDigits</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">BinaryIntegerLiteral</span> <span class="geq">::</span> <code
+ class="t">0B</code> <span class="nt">BinaryDigits</span></span> is the MV of <i>BinaryDigits</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">BinaryDigits</span> <span class="geq">::</span> <span
+ class="nt">BinaryDigit</span></span> is the MV of <i>BinaryDigit</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">BinaryDigits</span> <span class="geq">::</span> <span
+ class="nt">BinaryDigits</span> <span class="nt">BinaryDigit</span></span> is (the MV of <i>BinaryDigits</i> &times; 2)
+ plus the MV of <i>BinaryDigit</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">OctalIntegerLiteral</span> <span class="geq">::</span> <code
+ class="t">0o</code> <span class="nt">OctalDigits</span></span> is the MV of <i>OctalDigits</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">OctalIntegerLiteral</span> <span class="geq">::</span> <code
+ class="t">0O</code> <span class="nt">OctalDigits</span></span> is the MV of <i>OctalDigits</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">OctalDigits</span> <span class="geq">::</span> <span
+ class="nt">OctalDigit</span></span> is the MV of <i>OctalDigit</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">OctalDigits</span> <span class="geq">::</span> <span
+ class="nt">OctalDigits</span> <span class="nt">OctalDigit</span></span> is (the MV of <i>OctalDigits</i> &times; 8)
+ plus the MV of <i>OctalDigit</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">HexIntegerLiteral</span> <span class="geq">::</span> <code
+ class="t">0x</code> <span class="nt">HexDigits</span></span> is the MV of <i>HexDigits</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">HexIntegerLiteral</span> <span class="geq">::</span> <code
+ class="t">0X</code> <span class="nt">HexDigits</span></span> is the MV of <i>HexDigits</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">HexDigits</span> <span class="geq">::</span> <span
+ class="nt">HexDigit</span></span> is the MV of <i>HexDigit</i>.</p>
+ </li>
+
+ <li>
+ <p>The MV of <span class="prod"><span class="nt">HexDigits</span> <span class="geq">::</span> <span
+ class="nt">HexDigits</span> <span class="nt">HexDigit</span></span> is (the MV of <i>HexDigits</i> &times; 16) plus
+ the MV of <i>HexDigit</i>.</p>
+ </li>
+ </ul>
+
+ <p>Once the exact MV for a numeric literal has been determined, it is then rounded to a value of the Number type. If the
+ MV is 0, then the rounded value is <span class="value">+0</span>; otherwise, the rounded value must be the Number value
+ for the MV (as specified in <a href="#sec-ecmascript-language-types-number-type">6.1.6</a>), unless the literal is a <span
+ class="nt">DecimalLiteral</span> and the literal has more than 20 significant digits, in which case the Number value may
+ be either the Number value for the MV of a literal produced by replacing each significant digit after the 20th with a
+ <code>0</code> digit or the Number value for the MV of a literal produced by replacing each significant digit after the
+ 20th with a <code>0</code> digit and then incrementing the literal at the 20th significant digit position. A digit is
+ <i>significant</i> if it is not part of an <span class="nt">ExponentPart</span> and</p>
+
+ <ul>
+ <li>it is not <code>0</code>; or</li>
+ <li>there is a nonzero digit to its left and there is a nonzero digit, not in the <i>ExponentPart</i>, to its
+ right.</li>
+ </ul>
+ </section>
+ </section>
+
+ <section id="sec-literals-string-literals">
+ <div class="front">
+ <h1><span class="secnum" id="sec-11.8.4"><a href="#sec-literals-string-literals"
+ title="link to this section">11.8.4</a></span> String Literals</h1>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> A string literal is zero or more Unicode code points enclosed in single or double
+ quotes. Unicode code points may also be represented by an escape sequence. All <span style="font-family:
+ sans-serif">code points</span> may appear literally in a string literal except for the closing quote <span
+ style="font-family: sans-serif">code points</span>, U+005C (REVERSE SOLIDUS), U+000D (carriage return), U+2028 (line
+ separator), U+2029 (paragraph separator), and U+000A (line feed). Any <span style="font-family: sans-serif">code
+ points</span> may appear in the form of an escape sequence. String literals evaluate to ECMAScript String values. When
+ generating these string values Unicode code points are UTF-16 encoded as defined in <a
+ href="#sec-utf16encoding">10.1.1</a>. Code points belonging to the Basic Multilingual Plane are encoded as a single code
+ unit element of the string. All other code points are encoded as two code unit elements of the string.</p>
+ </div>
+
+ <h2>Syntax</h2>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">StringLiteral</span> <span class="geq">::</span></div>
+ <div class="rhs"><code class="t">"</code> <span class="nt">DoubleStringCharacters</span><sub class="g-opt">opt</sub> <code class="t">"</code></div>
+ <div class="rhs"><code class="t">'</code> <span class="nt">SingleStringCharacters</span><sub class="g-opt">opt</sub> <code class="t">'</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">DoubleStringCharacters</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">DoubleStringCharacter</span> <span class="nt">DoubleStringCharacters</span><sub class="g-opt">opt</sub></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">SingleStringCharacters</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">SingleStringCharacter</span> <span class="nt">SingleStringCharacters</span><sub class="g-opt">opt</sub></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">DoubleStringCharacter</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">SourceCharacter</span> <span class="grhsmod">but not one of</span> <code class="t">"</code> <span class="grhsmod">or</span> <code class="t">\</code> <span class="grhsmod">or</span> <span class="nt">LineTerminator</span></div>
+ <div class="rhs"><code class="t">\</code> <span class="nt">EscapeSequence</span></div>
+ <div class="rhs"><span class="nt">LineContinuation</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">SingleStringCharacter</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">SourceCharacter</span> <span class="grhsmod">but not one of</span> <code class="t">'</code> <span class="grhsmod">or</span> <code class="t">\</code> <span class="grhsmod">or</span> <span class="nt">LineTerminator</span></div>
+ <div class="rhs"><code class="t">\</code> <span class="nt">EscapeSequence</span></div>
+ <div class="rhs"><span class="nt">LineContinuation</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">LineContinuation</span> <span class="geq">::</span></div>
+ <div class="rhs"><code class="t">\</code> <span class="nt">LineTerminatorSequence</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">EscapeSequence</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">CharacterEscapeSequence</span></div>
+ <div class="rhs"><code class="t">0</code> <span class="grhsannot">[lookahead &notin; <span class="nt">DecimalDigit</span>]</span></div>
+ <div class="rhs"><span class="nt">HexEscapeSequence</span></div>
+ <div class="rhs"><span class="nt">UnicodeEscapeSequence</span></div>
+ </div>
+
+ <p>A conforming implementation, when processing <a href="#sec-strict-mode-code">strict mode code</a> (<a
+ href="#sec-strict-mode-code">see 10.2.1</a>), must not extend the syntax of <span class="nt">EscapeSequence</span> to
+ include <i>Legacy<span style="font-family: Times New Roman">OctalEscapeSequence</span></i> as described in <a
+ href="#sec-additional-syntax-string-literals">B.1.2</a>.</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">CharacterEscapeSequence</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">SingleEscapeCharacter</span></div>
+ <div class="rhs"><span class="nt">NonEscapeCharacter</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">SingleEscapeCharacter</span> <span class="geq">::</span> <span class="grhsmod">one of</span></div>
+ <div class="rhs"><code class="t">'</code> <code class="t">"</code> <code class="t">\</code> <code class="t">b</code> <code class="t">f</code> <code class="t">n</code> <code class="t">r</code> <code class="t">t</code> <code class="t">v</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">NonEscapeCharacter</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">SourceCharacter</span> <span class="grhsmod">but not one of</span> <span class="nt">EscapeCharacter</span> <span class="grhsmod">or</span> <span class="nt">LineTerminator</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">EscapeCharacter</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">SingleEscapeCharacter</span></div>
+ <div class="rhs"><span class="nt">DecimalDigit</span></div>
+ <div class="rhs"><code class="t">x</code></div>
+ <div class="rhs"><code class="t">u</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">HexEscapeSequence</span> <span class="geq">::</span></div>
+ <div class="rhs"><code class="t">x</code> <span class="nt">HexDigit</span> <span class="nt">HexDigit</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">UnicodeEscapeSequence</span> <span class="geq">::</span></div>
+ <div class="rhs"><code class="t">u</code> <span class="nt">Hex4Digits</span></div>
+ <div class="rhs"><code class="t">u{</code> <span class="nt">HexDigits</span> <code class="t">}</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">Hex4Digits</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">HexDigit</span> <span class="nt">HexDigit</span> <span class="nt">HexDigit</span> <span class="nt">HexDigit</span></div>
+ </div>
+
+ <p>The definition of the nonterminal <span class="nt">HexDigit</span> is given in <a
+ href="#sec-literals-numeric-literals">11.8.3</a>. <span class="nt">SourceCharacter</span> is defined in <a
+ href="#sec-source-text">10.1</a>.</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> A line terminator <span style="font-family: sans-serif">code point</span> cannot appear
+ in a string literal, except as part of a <i>LineContinuation</i> to produce the empty <span style="font-family:
+ sans-serif">code points</span> sequence. The proper way to cause a line terminator <span style="font-family:
+ sans-serif">code point</span> to be part of the String value of a string literal is to use an escape sequence such as
+ <code>\n</code> or <code>\u000A</code>.</p>
+ </div>
+ </div>
+
+ <section id="sec-string-literals-static-semantics-early-errors">
+ <h1><span class="secnum" id="sec-11.8.4.1"><a href="#sec-string-literals-static-semantics-early-errors"
+ title="link to this section">11.8.4.1</a></span> Static Semantics: Early Errors</h1>
+ <div class="gp prod"><span class="nt">UnicodeEscapeSequence</span> <span class="geq">::</span> <code class="t">u{</code> <span class="nt">HexDigits</span> <code class="t">}</code></div>
+ <ul>
+ <li>It is a Syntax Error if the MV of <span class="nt">HexDigits</span> &gt; <span style="font-family: Times New
+ Roman">1114111<i>.</i></span></li>
+ </ul>
+ </section>
+
+ <section id="sec-string-literals-static-semantics-stringvalue">
+ <h1><span class="secnum" id="sec-11.8.4.2"><a href="#sec-string-literals-static-semantics-stringvalue"
+ title="link to this section">11.8.4.2</a></span> Static Semantics<span style="font-family: sans-serif">:</span>
+ <i>StringValue</i></h1>
+
+ <p>See also: <a href="#sec-identifier-names-static-semantics-stringvalue">11.6.1.2</a>, <a
+ href="#sec-identifiers-static-semantics-stringvalue">12.1.4</a>.</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">StringLiteral</span> <span class="geq">::</span></div>
+ <div class="rhs"><code class="t">"</code> <span class="nt">DoubleStringCharacters</span><sub class="g-opt">opt</sub> <code class="t">"</code></div>
+ <div class="rhs"><code class="t">'</code> <span class="nt">SingleStringCharacters</span><sub class="g-opt">opt</sub> <code class="t">'</code></div>
+ </div>
+
+ <ol class="proc">
+ <li>Return the String value whose elements are the SV of this <i>StringLiteral</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-static-semantics-sv-s">
+ <h1><span class="secnum" id="sec-11.8.4.3"><a href="#sec-static-semantics-sv-s"
+ title="link to this section">11.8.4.3</a></span> Static Semantics: <i>SV&rsquo;s</i></h1>
+
+ <p>A string literal stands for a value of the String type. The String value (SV) of the literal is described in terms of
+ code unit values contributed by the various parts of the string literal. As part of this process, some Unicode code points
+ within the string literal are interpreted as having a mathematical value (MV), as described below or in <a
+ href="#sec-literals-numeric-literals">11.8.3</a>.</p>
+
+ <ul>
+ <li>
+ <p>The SV of <span class="prod"><span class="nt">StringLiteral</span> <span class="geq">::</span> <code
+ class="t">""</code></span> is the empty code unit sequence.</p>
+ </li>
+
+ <li>
+ <p>The SV of <span class="prod"><span class="nt">StringLiteral</span> <span class="geq">::</span> <code
+ class="t">''</code></span> is the empty code unit sequence.</p>
+ </li>
+
+ <li>
+ <p>The SV of <span class="prod"><span class="nt">StringLiteral</span> <span class="geq">::</span> <code
+ class="t">"</code> <span class="nt">DoubleStringCharacters</span> <code class="t">"</code></span> is the SV of
+ <i>DoubleStringCharacters</i>.</p>
+ </li>
+
+ <li>
+ <p>The SV of <span class="prod"><span class="nt">StringLiteral</span> <span class="geq">::</span> <code
+ class="t">'</code> <span class="nt">SingleStringCharacters</span> <code class="t">'</code></span> is the SV of
+ <i>SingleStringCharacters</i>.</p>
+ </li>
+
+ <li>
+ <p>The SV of <span class="prod"><span class="nt">DoubleStringCharacters</span> <span class="geq">::</span> <span
+ class="nt">DoubleStringCharacter</span></span> is a sequence of one or two code units that is the SV of
+ <i>DoubleStringCharacter</i>.</p>
+ </li>
+
+ <li>
+ <p>The SV of <span class="prod"><span class="nt">DoubleStringCharacters</span> <span class="geq">::</span> <span
+ class="nt">DoubleStringCharacter</span> <span class="nt">DoubleStringCharacters</span></span> is a sequence of one or
+ two code units that is the SV of <i>DoubleStringCharacter</i> followed by all the code units in the SV of
+ <i>DoubleStringCharacters</i> in order.</p>
+ </li>
+
+ <li>
+ <p>The SV of <span class="prod"><span class="nt">SingleStringCharacters</span> <span class="geq">::</span> <span
+ class="nt">SingleStringCharacter</span></span> is a sequence of one or two code units that is the SV of
+ <i>SingleStringCharacter</i>.</p>
+ </li>
+
+ <li>
+ <p>The SV of <span class="prod"><span class="nt">SingleStringCharacters</span> <span class="geq">::</span> <span
+ class="nt">SingleStringCharacter</span> <span class="nt">SingleStringCharacters</span></span> is a sequence of one or
+ two code units that is the SV of <i>SingleStringCharacter</i> followed by all the code units in the SV of
+ <i>SingleStringCharacters</i> in order.</p>
+ </li>
+
+ <li>
+ <p>The SV of <span class="prod"><span class="nt">DoubleStringCharacter</span> <span class="geq">::</span> <span
+ class="nt">SourceCharacter</span> <span class="grhsmod">but not one of</span> <code class="t">"</code> <span
+ class="grhsmod">or</span> <code class="t">\</code> <span class="grhsmod">or</span> <span
+ class="nt">LineTerminator</span></span> is the <a href="#sec-utf16encoding">UTF16Encoding</a> (<a
+ href="#sec-utf16encoding">10.1.1</a>) of the code point value of <i>SourceCharacter</i>.</p>
+ </li>
+
+ <li>
+ <p>The SV of <span class="prod"><span class="nt">DoubleStringCharacter</span> <span class="geq">::</span> <code
+ class="t">\</code> <span class="nt">EscapeSequence</span></span> is the SV of the <i>EscapeSequence</i>.</p>
+ </li>
+
+ <li>
+ <p>The SV of <span class="prod"><span class="nt">DoubleStringCharacter</span> <span class="geq">::</span> <span
+ class="nt">LineContinuation</span></span> is the empty code unit sequence.</p>
+ </li>
+
+ <li>
+ <p>The SV of <span class="prod"><span class="nt">SingleStringCharacter</span> <span class="geq">::</span> <span
+ class="nt">SourceCharacter</span> <span class="grhsmod">but not one of</span> <code class="t">'</code> <span
+ class="grhsmod">or</span> <code class="t">\</code> <span class="grhsmod">or</span> <span
+ class="nt">LineTerminator</span></span> is the <a href="#sec-utf16encoding">UTF16Encoding</a> (<a
+ href="#sec-utf16encoding">10.1.1</a>) of the code point value of <i>SourceCharacter</i>.</p>
+ </li>
+
+ <li>
+ <p>The SV of <span class="prod"><span class="nt">SingleStringCharacter</span> <span class="geq">::</span> <code
+ class="t">\</code> <span class="nt">EscapeSequence</span></span> is the SV of the <i>EscapeSequence</i>.</p>
+ </li>
+
+ <li>
+ <p>The SV of <span class="prod"><span class="nt">SingleStringCharacter</span> <span class="geq">::</span> <span
+ class="nt">LineContinuation</span></span> is the empty code unit sequence.</p>
+ </li>
+
+ <li>
+ <p>The SV of <span class="prod"><span class="nt">EscapeSequence</span> <span class="geq">::</span> <span
+ class="nt">CharacterEscapeSequence</span></span> is the SV of the <i>CharacterEscapeSequence</i>.</p>
+ </li>
+
+ <li>
+ <p>The SV of <span class="prod"><span class="nt">EscapeSequence</span> <span class="geq">::</span> <code
+ class="t">0</code></span> is the code unit value 0.</p>
+ </li>
+
+ <li>
+ <p>The SV of <span class="prod"><span class="nt">EscapeSequence</span> <span class="geq">::</span> <span
+ class="nt">HexEscapeSequence</span></span> is the SV of the <i>HexEscapeSequence</i>.</p>
+ </li>
+
+ <li>
+ <p>The SV of <span class="prod"><span class="nt">EscapeSequence</span> <span class="geq">::</span> <span
+ class="nt">UnicodeEscapeSequence</span></span> is the SV of the <i>UnicodeEscapeSequence</i>.</p>
+ </li>
+
+ <li>
+ <p>The SV of <span class="prod"><span class="nt">CharacterEscapeSequence</span> <span class="geq">::</span> <span
+ class="nt">SingleEscapeCharacter</span></span> is the code unit whose value is determined by the
+ <i>SingleEscapeCharacter</i> according to { REF _Ref365803173 \h }<a href="#table-34">Table 34</a>.</p>
+ </li>
+ </ul>
+
+ <figure>
+ <figcaption><span id="table-34">Table 34</span> &mdash; String Single Character Escape Sequences</figcaption>
+ <table class="real-table">
+ <tr>
+ <th>Escape Sequence</th>
+ <th>Code Unit Value</th>
+ <th>Unicode Character Name</th>
+ <th>Symbol</th>
+ </tr>
+ <tr>
+ <td><code>\b</code></td>
+ <td><code>0x0008</code></td>
+ <td>BACKSPACE</td>
+ <td>&lt;BS&gt;</td>
+ </tr>
+ <tr>
+ <td><code>\t</code></td>
+ <td><code>0x0009</code></td>
+ <td>CHARACTER TABULATION</td>
+ <td>&lt;HT&gt;</td>
+ </tr>
+ <tr>
+ <td><code>\n</code></td>
+ <td><code>0x000A</code></td>
+ <td>line feed (lf)</td>
+ <td>&lt;LF&gt;</td>
+ </tr>
+ <tr>
+ <td><code>\v</code></td>
+ <td><code>0x000B</code></td>
+ <td>LINE TABULATION</td>
+ <td>&lt;VT&gt;</td>
+ </tr>
+ <tr>
+ <td><code>\f</code></td>
+ <td><code>0x000C</code></td>
+ <td>form feed (ff)</td>
+ <td>&lt;FF&gt;</td>
+ </tr>
+ <tr>
+ <td><code>\r</code></td>
+ <td><code>0x000D</code></td>
+ <td>carriage return (cr)</td>
+ <td>&lt;CR&gt;</td>
+ </tr>
+ <tr>
+ <td><code>\"</code></td>
+ <td><code>0x0022</code></td>
+ <td>quotation Mark</td>
+ <td><code>"</code></td>
+ </tr>
+ <tr>
+ <td><code>\'</code></td>
+ <td><code>0x0027</code></td>
+ <td>apostrophe</td>
+ <td><code>'</code></td>
+ </tr>
+ <tr>
+ <td><code>\\</code></td>
+ <td><code>0x005C</code></td>
+ <td>REverse Solidus</td>
+ <td><code>\</code></td>
+ </tr>
+ </table>
+ </figure>
+
+ <ul>
+ <li>
+ <p>The SV of <span class="prod"><span class="nt">CharacterEscapeSequence</span> <span class="geq">::</span> <span
+ class="nt">NonEscapeCharacter</span></span> is the SV of the <i>NonEscapeCharacter</i>.</p>
+ </li>
+
+ <li>
+ <p>The SV of <span class="prod"><span class="nt">NonEscapeCharacter</span> <span class="geq">::</span> <span
+ class="nt">SourceCharacter</span> <span class="grhsmod">but not one of</span> <span class="nt">EscapeCharacter</span>
+ <span class="grhsmod">or</span> <span class="nt">LineTerminator</span></span> is the <a
+ href="#sec-utf16encoding">UTF16Encoding</a> (<a href="#sec-utf16encoding">10.1.1</a>) of the code point value of
+ <i>SourceCharacter</i>.</p>
+ </li>
+
+ <li>
+ <p>The SV of <span class="prod"><span class="nt">HexEscapeSequence</span> <span class="geq">::</span> <code
+ class="t">x</code> <span class="nt">HexDigit</span> <span class="nt">HexDigit</span></span> is the code unit value
+ that is (16 times the MV of the first <i>HexDigit</i>) plus the MV of the second <i>HexDigit</i>.</p>
+ </li>
+
+ <li>
+ <p>The SV of <span class="prod"><span class="nt">UnicodeEscapeSequence</span> <span class="geq">::</span> <code
+ class="t">u</code> <span class="nt">Hex4Digits</span></span> is the SV of <var>Hex4Digits.</var></p>
+ </li>
+
+ <li>
+ <p>The SV of <span class="prod"><span class="nt">Hex4Digits</span> <span class="geq">::</span> <span
+ class="nt">HexDigit</span> <span class="nt">HexDigit</span> <span class="nt">HexDigit</span> <span
+ class="nt">HexDigit</span></span> is the code unit value that is (4096 times the MV of the first <i>HexDigit</i>) plus
+ (256 times the MV of the second <i>HexDigit</i>) plus (16 times the MV of the third <i>HexDigit</i>) plus the MV of
+ the fourth <i>HexDigit</i>.</p>
+ </li>
+
+ <li>
+ <p>The SV of <span class="prod"><span class="nt">UnicodeEscapeSequence</span> <span class="geq">::</span> <code
+ class="t">u{</code> <span class="nt">HexDigits</span> <code class="t">}</code></span> is the <a
+ href="#sec-utf16encoding">UTF16Encoding</a> (<a href="#sec-utf16encoding">10.1.1</a>) of the MV of
+ <i>HexDigits</i>.</p>
+ </li>
+ </ul>
+ </section>
+ </section>
+
+ <section id="sec-literals-regular-expression-literals">
+ <div class="front">
+ <h1><span class="secnum" id="sec-11.8.5"><a href="#sec-literals-regular-expression-literals"
+ title="link to this section">11.8.5</a></span> Regular Expression Literals</h1>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> A regular expression literal is an input element that is converted to a RegExp object
+ (<a href="#sec-regexp-regular-expression-objects">see 21.2</a>) each time the literal is evaluated. Two regular
+ expression literals in a program evaluate to regular expression objects that never compare as <code>===</code> to each
+ other even if the two literals' contents are identical. A RegExp object may also be created at runtime by <code>new
+ RegExp</code> or calling the <code>RegExp</code> constructor as a function (<a href="#sec-regexp-constructor">see
+ 21.2.3</a>).</p>
+ </div>
+
+ <p>The productions below describe the syntax for a regular expression literal and are used by the input element scanner to
+ find the end of the regular expression literal. The source text comprising the <span
+ class="nt">RegularExpressionBody</span> and the <span class="nt">RegularExpressionFlags</span> are subsequently parsed
+ again using the more stringent ECMAScript Regular Expression grammar (<a href="#sec-patterns">21.2.1</a>).</p>
+
+ <p>An implementation may extend the ECMAScript Regular Expression grammar defined in <a href="#sec-patterns">21.2.1</a>,
+ but it must not extend the <span class="nt">RegularExpressionBody</span> and <span
+ class="nt">RegularExpressionFlags</span> productions defined below or the productions used by these productions.</p>
+
+ <h2>Syntax</h2>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">RegularExpressionLiteral</span> <span class="geq">::</span></div>
+ <div class="rhs"><code class="t">/</code> <span class="nt">RegularExpressionBody</span> <code class="t">/</code> <span class="nt">RegularExpressionFlags</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">RegularExpressionBody</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">RegularExpressionFirstChar</span> <span class="nt">RegularExpressionChars</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">RegularExpressionChars</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="grhsannot">[empty]</span></div>
+ <div class="rhs"><span class="nt">RegularExpressionChars</span> <span class="nt">RegularExpressionChar</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">RegularExpressionFirstChar</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">RegularExpressionNonTerminator</span> <span class="grhsmod">but not one of</span> <code class="t">*</code> <span class="grhsmod">or</span> <code class="t">\</code> <span class="grhsmod">or</span> <code class="t">/</code> <span class="grhsmod">or</span> <code class="t">[</code></div>
+ <div class="rhs"><span class="nt">RegularExpressionBackslashSequence</span></div>
+ <div class="rhs"><span class="nt">RegularExpressionClass</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">RegularExpressionChar</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">RegularExpressionNonTerminator</span> <span class="grhsmod">but not one of</span> <code class="t">\</code> <span class="grhsmod">or</span> <code class="t">/</code> <span class="grhsmod">or</span> <code class="t">[</code></div>
+ <div class="rhs"><span class="nt">RegularExpressionBackslashSequence</span></div>
+ <div class="rhs"><span class="nt">RegularExpressionClass</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">RegularExpressionBackslashSequence</span> <span class="geq">::</span></div>
+ <div class="rhs"><code class="t">\</code> <span class="nt">RegularExpressionNonTerminator</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">RegularExpressionNonTerminator</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">SourceCharacter</span> <span class="grhsmod">but not</span> <span class="nt">LineTerminator</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">RegularExpressionClass</span> <span class="geq">::</span></div>
+ <div class="rhs"><code class="t">[</code> <span class="nt">RegularExpressionClassChars</span> <code class="t">]</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">RegularExpressionClassChars</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="grhsannot">[empty]</span></div>
+ <div class="rhs"><span class="nt">RegularExpressionClassChars</span> <span class="nt">RegularExpressionClassChar</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">RegularExpressionClassChar</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">RegularExpressionNonTerminator</span> <span class="grhsmod">but not one of</span> <code class="t">]</code> <span class="grhsmod">or</span> <code class="t">\</code></div>
+ <div class="rhs"><span class="nt">RegularExpressionBackslashSequence</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">RegularExpressionFlags</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="grhsannot">[empty]</span></div>
+ <div class="rhs"><span class="nt">RegularExpressionFlags</span> <span class="nt">IdentifierPart</span></div>
+ </div>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> Regular expression literals may not be empty; instead of representing an empty regular
+ expression literal, the code unit sequence <code>//</code> starts a single-line comment. To specify an empty regular
+ expression, use: <code>/(?:)/</code>.</p>
+ </div>
+ </div>
+
+ <section id="sec-literals-regular-expression-literals-static-semantics-early-errors">
+ <h1><span class="secnum" id="sec-11.8.5.1"><a
+ href="#sec-literals-regular-expression-literals-static-semantics-early-errors"
+ title="link to this section">11.8.5.1</a></span> Static Semantics: Early Errors</h1>
+ <div class="gp prod"><span class="nt">RegularExpressionFlags</span> <span class="geq">::</span> <span class="nt">RegularExpressionFlags</span> <span class="nt">IdentifierPart</span></div>
+ <ul>
+ <li>It is a Syntax Error if <span class="nt">IdentifierPart</span> contains a Unicode escape sequence<var>.</var></li>
+ </ul>
+ </section>
+
+ <section id="sec-static-semantics-bodytext">
+ <h1><span class="secnum" id="sec-11.8.5.2"><a href="#sec-static-semantics-bodytext"
+ title="link to this section">11.8.5.2</a></span> Static Semantics: <i>BodyText</i></h1>
+ <div class="gp prod"><span class="nt">RegularExpressionLiteral</span> <span class="geq">::</span> <code class="t">/</code> <span class="nt">RegularExpressionBody</span> <code class="t">/</code> <span class="nt">RegularExpressionFlags</span></div>
+ <ol class="proc">
+ <li>Return the source text that was recognized as <i>RegularExpressionBody</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-static-semantics-flagtext">
+ <h1><span class="secnum" id="sec-11.8.5.3"><a href="#sec-static-semantics-flagtext"
+ title="link to this section">11.8.5.3</a></span> Static Semantics: <i>FlagText</i></h1>
+ <div class="gp prod"><span class="nt">RegularExpressionLiteral</span> <span class="geq">::</span> <code class="t">/</code> <span class="nt">RegularExpressionBody</span> <code class="t">/</code> <span class="nt">RegularExpressionFlags</span></div>
+ <ol class="proc">
+ <li>Return the source text that was recognized as <i>RegularExpressionFlags</i>.</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-template-literal-lexical-components">
+ <div class="front">
+ <h1><span class="secnum" id="sec-11.8.6"><a href="#sec-template-literal-lexical-components"
+ title="link to this section">11.8.6</a></span> Template Literal Lexical Components</h1>
+ <h2>Syntax</h2>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">Template</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">NoSubstitutionTemplate</span></div>
+ <div class="rhs"><span class="nt">TemplateHead</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">NoSubstitutionTemplate</span> <span class="geq">::</span></div>
+ <div class="rhs"><code class="t">`</code> <span class="nt">TemplateCharacters</span><sub class="g-opt">opt</sub> <code class="t">`</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">TemplateHead</span> <span class="geq">::</span></div>
+ <div class="rhs"><code class="t">`</code> <span class="nt">TemplateCharacters</span><sub class="g-opt">opt</sub> <code class="t">${</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">TemplateSubstitutionTail</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">TemplateMiddle</span></div>
+ <div class="rhs"><span class="nt">TemplateTail</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">TemplateMiddle</span> <span class="geq">::</span></div>
+ <div class="rhs"><code class="t">}</code> <span class="nt">TemplateCharacters</span><sub class="g-opt">opt</sub> <code class="t">${</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">TemplateTail</span> <span class="geq">::</span></div>
+ <div class="rhs"><code class="t">}</code> <span class="nt">TemplateCharacters</span><sub class="g-opt">opt</sub> <code class="t">`</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">TemplateCharacters</span> <span class="geq">::</span></div>
+ <div class="rhs"><span class="nt">TemplateCharacter</span> <span class="nt">TemplateCharacters</span><sub class="g-opt">opt</sub></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">TemplateCharacter</span> <span class="geq">::</span></div>
+ <div class="rhs"><code class="t">$</code> <span class="grhsannot">[lookahead &ne; { ]</span></div>
+ <div class="rhs"><code class="t">\</code> <span class="nt">EscapeSequence</span></div>
+ <div class="rhs"><span class="nt">LineContinuation</span></div>
+ <div class="rhs"><span class="nt">LineTerminatorSequence</span></div>
+ <div class="rhs"><span class="nt">SourceCharacter</span> <span class="grhsmod">but not one of</span> <code class="t">`</code> <span class="grhsmod">or</span> <code class="t">\</code> <span class="grhsmod">or</span> <code class="t">$</code> <span class="grhsmod">or</span> <span class="nt">LineTerminator</span></div>
+ </div>
+
+ <p>A conforming implementation must not use the extended definition of <span class="nt">EscapeSequence</span> described in
+ <a href="#sec-additional-syntax-string-literals">B.1.2</a> when parsing a <span class="nt">TemplateCharacter</span>.</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> <i>TemplateSubstitutionTail</i> is used by the <i>InputElementTemplateTail</i>
+ alternative lexical goal.</p>
+ </div>
+ </div>
+
+ <section id="sec-static-semantics-tv-s-and-trv-s">
+ <h1><span class="secnum" id="sec-11.8.6.1"><a href="#sec-static-semantics-tv-s-and-trv-s"
+ title="link to this section">11.8.6.1</a></span> Static Semantics: <i>TV&rsquo;s and TRV&rsquo;s</i></h1>
+
+ <p>A template literal component is interpreted as a sequence of Unicode code points. The Template Value (TV) of a literal
+ component is described in terms of code unit values (SV, <a href="#sec-literals-string-literals">11.8.4</a>) contributed
+ by the various parts of the template literal component. As part of this process, some Unicode code points within the
+ template component are interpreted as having a mathematical value (MV, <a
+ href="#sec-literals-numeric-literals">11.8.3</a>). In determining a TV, escape sequences are replaced by the UTF-16 code
+ unit(s) of the Unicode code point represented by the escape sequence. The Template Raw Value (TRV) is similar to a
+ Template Value with the difference that in TRVs escape sequences are interpreted literally.</p>
+
+ <ul>
+ <li>
+ <p>The TV and TRV of <span class="prod"><span class="nt">NoSubstitutionTemplate</span> <span class="geq">::</span>
+ <code class="t">``</code></span> is the empty code unit sequence.</p>
+ </li>
+
+ <li>
+ <p>The TV and TRV of <span class="prod"><span class="nt">TemplateHead</span> <span class="geq">::</span> <code
+ class="t">`${</code></span> is the empty code unit sequence.</p>
+ </li>
+
+ <li>
+ <p>The TV and TRV of <span class="prod"><span class="nt">TemplateMiddle</span> <span class="geq">::</span> <code
+ class="t">}${</code></span> is the empty code unit sequence.</p>
+ </li>
+
+ <li>
+ <p>The TV and TRV of <span class="prod"><span class="nt">TemplateTail</span> <span class="geq">::</span> <code
+ class="t">}`</code></span> is the empty code unit sequence.</p>
+ </li>
+
+ <li>
+ <p>The TV of <span class="prod"><span class="nt">NoSubstitutionTemplate</span> <span class="geq">::</span> <code
+ class="t">`</code> <span class="nt">TemplateCharacters</span> <code class="t">`</code></span> is the TV of
+ <i>TemplateCharacters</i>.</p>
+ </li>
+
+ <li>
+ <p>The TV of <span class="prod"><span class="nt">TemplateHead</span> <span class="geq">::</span> <code
+ class="t">`</code> <span class="nt">TemplateCharacters</span> <code class="t">${</code></span> is the TV of
+ <i>TemplateCharacters</i>.</p>
+ </li>
+
+ <li>
+ <p>The TV of <span class="prod"><span class="nt">TemplateMiddle</span> <span class="geq">::</span> <code
+ class="t">}</code> <span class="nt">TemplateCharacters</span> <code class="t">${</code></span> is the TV of
+ <i>TemplateCharacters</i>.</p>
+ </li>
+
+ <li>
+ <p>The TV of <span class="prod"><span class="nt">TemplateTail</span> <span class="geq">::</span> <code
+ class="t">}</code> <span class="nt">TemplateCharacters</span> <code class="t">`</code></span> is the TV of
+ <i>TemplateCharacters</i>.</p>
+ </li>
+
+ <li>
+ <p>The TV of <span class="prod"><span class="nt">TemplateCharacters</span> <span class="geq">::</span> <span
+ class="nt">TemplateCharacter</span></span> is the TV of <i>TemplateCharacter</i>.</p>
+ </li>
+
+ <li>
+ <p>The TV of <span class="prod"><span class="nt">TemplateCharacters</span> <span class="geq">::</span> <span
+ class="nt">TemplateCharacter</span> <span class="nt">TemplateCharacters</span></span> is a sequence consisting of the
+ code units in the TV of <i>TemplateCharacter</i> followed by all the code units in the TV of <i>TemplateCharacters</i>
+ in order.</p>
+ </li>
+
+ <li>
+ <p>The TV of <span class="prod"><span class="nt">TemplateCharacter</span> <span class="geq">::</span> <span
+ class="nt">SourceCharacter</span> <span class="grhsmod">but not one of</span> <code class="t">`</code> <span
+ class="grhsmod">or</span> <code class="t">\</code> <span class="grhsmod">or</span> <code class="t">$</code> <span
+ class="grhsmod">or</span> <span class="nt">LineTerminator</span></span> is the <a
+ href="#sec-utf16encoding">UTF16Encoding</a> (<a href="#sec-utf16encoding">10.1.1</a>) of the code point value of
+ <i>SourceCharacter</i>.</p>
+ </li>
+
+ <li>
+ <p>The TV of <span class="prod"><span class="nt">TemplateCharacter</span> <span class="geq">::</span> <code
+ class="t">$</code></span> is the code unit value 0x0024.</p>
+ </li>
+
+ <li>
+ <p>The TV of <span class="prod"><span class="nt">TemplateCharacter</span> <span class="geq">::</span> <code
+ class="t">\</code> <span class="nt">EscapeSequence</span></span> is the SV of <i>EscapeSequence</i>.</p>
+ </li>
+
+ <li>
+ <p>The TV of <span class="prod"><span class="nt">TemplateCharacter</span> <span class="geq">::</span> <span
+ class="nt">LineContinuation</span></span> is the TV of <i>LineContinuation</i>.</p>
+ </li>
+
+ <li>
+ <p>The TV of <span class="prod"><span class="nt">TemplateCharacter</span> <span class="geq">::</span> <span
+ class="nt">LineTerminatorSequence</span></span> is the TRV of <i>LineTerminatorSequence</i>.</p>
+ </li>
+
+ <li>
+ <p>The TV of <span class="prod"><span class="nt">LineContinuation</span> <span class="geq">::</span> <code
+ class="t">\</code> <span class="nt">LineTerminatorSequence</span></span> is the empty code unit sequence.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">NoSubstitutionTemplate</span> <span class="geq">::</span> <code
+ class="t">`</code> <span class="nt">TemplateCharacters</span> <code class="t">`</code></span> is the TRV of
+ <i>TemplateCharacters</i>.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">TemplateHead</span> <span class="geq">::</span> <code
+ class="t">`</code> <span class="nt">TemplateCharacters</span> <code class="t">${</code></span> is the TRV of
+ <i>TemplateCharacters</i>.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">TemplateMiddle</span> <span class="geq">::</span> <code
+ class="t">}</code> <span class="nt">TemplateCharacters</span> <code class="t">${</code></span> is the TRV of
+ <i>TemplateCharacters</i>.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">TemplateTail</span> <span class="geq">::</span> <code
+ class="t">}</code> <span class="nt">TemplateCharacters</span> <code class="t">`</code></span> is the TRV of
+ <i>TemplateCharacters</i>.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">TemplateCharacters</span> <span class="geq">::</span> <span
+ class="nt">TemplateCharacter</span></span> is the TRV of <i>TemplateCharacter</i>.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">TemplateCharacters</span> <span class="geq">::</span> <span
+ class="nt">TemplateCharacter</span> <span class="nt">TemplateCharacters</span></span> is a sequence consisting of the
+ code units in the TRV of <i>TemplateCharacter</i> followed by all the code units in the TRV of
+ <i>TemplateCharacters,</i> in order.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">TemplateCharacter</span> <span class="geq">::</span> <span
+ class="nt">SourceCharacter</span> <span class="grhsmod">but not one of</span> <code class="t">`</code> <span
+ class="grhsmod">or</span> <code class="t">\</code> <span class="grhsmod">or</span> <code class="t">$</code> <span
+ class="grhsmod">or</span> <span class="nt">LineTerminator</span></span> is the <a
+ href="#sec-utf16encoding">UTF16Encoding</a> (<a href="#sec-utf16encoding">10.1.1</a>) of the code point value of
+ <i>SourceCharacter</i>.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">TemplateCharacter</span> <span class="geq">::</span> <code
+ class="t">$</code></span> is the code unit value 0x0024.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">TemplateCharacter</span> <span class="geq">::</span> <code
+ class="t">\</code> <span class="nt">EscapeSequence</span></span> is the sequence consisting of the code unit value
+ 0x005C followed by the code units of TRV of <i>EscapeSequence</i>.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">TemplateCharacter</span> <span class="geq">::</span> <span
+ class="nt">LineContinuation</span></span> is the TRV of <i>LineContinuation</i>.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">TemplateCharacter</span> <span class="geq">::</span> <span
+ class="nt">LineTerminatorSequence</span></span> is the TRV of <i>LineTerminatorSequence</i>.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">EscapeSequence</span> <span class="geq">::</span> <span
+ class="nt">CharacterEscapeSequence</span></span> is the TRV of the <i>CharacterEscapeSequence</i>.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">EscapeSequence</span> <span class="geq">::</span> <code
+ class="t">0</code></span> is the code unit value 0x0030.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">EscapeSequence</span> <span class="geq">::</span> <span
+ class="nt">HexEscapeSequence</span></span> is the TRV of the <i>HexEscapeSequence</i>.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">EscapeSequence</span> <span class="geq">::</span> <span
+ class="nt">UnicodeEscapeSequence</span></span> is the TRV of the <i>UnicodeEscapeSequence</i>.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">CharacterEscapeSequence</span> <span class="geq">::</span> <span
+ class="nt">SingleEscapeCharacter</span></span> is the TRV of the <i>SingleEscapeCharacter</i>.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">CharacterEscapeSequence</span> <span class="geq">::</span> <span
+ class="nt">NonEscapeCharacter</span></span> is the SV of the <i>NonEscapeCharacter</i>.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">SingleEscapeCharacter</span> <span class="geq">::</span> <span
+ class="grhsmod">one of</span> <code class="t">'</code> <code class="t">"</code> <code class="t">\</code> <code
+ class="t">b</code> <code class="t">f</code> <code class="t">n</code> <code class="t">r</code> <code class="t">t</code>
+ <code class="t">v</code></span> is the SV of the <i>SourceCharacter</i> that is that single code point.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">HexEscapeSequence</span> <span class="geq">::</span> <code
+ class="t">x</code> <span class="nt">HexDigit</span> <span class="nt">HexDigit</span></span> is the sequence
+ consisting of code unit value 0x0078 followed by TRV of the first <i>HexDigit</i> followed by the TRV of the second
+ <i>HexDigit</i>.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">UnicodeEscapeSequence</span> <span class="geq">::</span> <code
+ class="t">u</code> <span class="nt">Hex4Digits</span></span> is the sequence consisting of code unit value 0x0075
+ followed by TRV of <span class="nt">Hex4Digits</span>.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">UnicodeEscapeSequence</span> <span class="geq">::</span> <code
+ class="t">u{</code> <span class="nt">HexDigits</span> <code class="t">}</code></span> is the sequence consisting of
+ code unit value 0x0075 followed by code unit value 0x007B followed by TRV of <i>HexDigits</i> followed by code unit
+ value 0x007D.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">Hex4Digits</span> <span class="geq">::</span> <span
+ class="nt">HexDigit</span> <span class="nt">HexDigit</span> <span class="nt">HexDigit</span> <span
+ class="nt">HexDigit</span></span> is the sequence consisting of the TRV of the first <i>HexDigit</i> followed by the
+ TRV of the second <i>HexDigit</i> followed by the TRV of the third <i>HexDigit</i> followed by the TRV of the fourth
+ <span class="nt">HexDigit</span>.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">HexDigits</span> <span class="geq">::</span> <span
+ class="nt">HexDigit</span></span> is the TRV of <i>HexDigit</i>.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">HexDigits</span> <span class="geq">::</span> <span
+ class="nt">HexDigits</span> <span class="nt">HexDigit</span></span> is the sequence consisting of TRV of
+ <i>HexDigits</i> followed by TRV of <i>HexDigit</i>.</p>
+ </li>
+
+ <li>
+ <p>The TRV of a <i>HexDigit</i> is the SV of the <i>SourceCharacter</i> that is that <i>HexDigit</i>.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">LineContinuation</span> <span class="geq">::</span> <code
+ class="t">\</code> <span class="nt">LineTerminatorSequence</span></span> is the sequence consisting of the code unit
+ value 0x005C followed by the code units of TRV of <i>LineTerminatorSequence</i>.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">LineTerminatorSequence</span> <span class="geq">::</span></span>
+ &lt;LF&gt; is the code unit value 0x000A.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">LineTerminatorSequence</span> <span class="geq">::</span></span>
+ &lt;CR&gt; is the code unit value 0x000A.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">LineTerminatorSequence</span> <span class="geq">::</span></span>
+ &lt;LS&gt; is the code unit value 0x2028.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">LineTerminatorSequence</span> <span class="geq">::</span></span>
+ &lt;PS&gt; is the code unit value 0x2029.</p>
+ </li>
+
+ <li>
+ <p>The TRV of <span class="prod"><span class="nt">LineTerminatorSequence</span> <span class="geq">::</span></span>
+ &lt;CR&gt;&lt;LF&gt; is the sequence consisting of the code unit value 0x000A.</p>
+ </li>
+ </ul>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> TV excludes the code units of <i>LineContinuation</i> while TRV includes them.
+ &lt;CR&gt;&lt;LF&gt; and &lt;CR&gt; <i>LineTerminatorSequences</i> are normalized to &lt;LF&gt; for both TV and TRV. An
+ explicit <i>EscapeSequence</i> is needed to include a &lt;CR&gt; or &lt;CR&gt;&lt;LF&gt; sequence.</p>
+ </div>
+ </section>
+ </section>
+ </section>
+
+ <section id="sec-automatic-semicolon-insertion">
+ <div class="front">
+ <h1><span class="secnum" id="sec-11.9"><a href="#sec-automatic-semicolon-insertion"
+ title="link to this section">11.9</a></span> Automatic Semicolon Insertion</h1>
+
+ <p>Certain ECMAScript statements (empty statement, <code>let</code>, <code>const</code>, <code>import</code>, and
+ <code>export</code> declarations, variable statement, expression statement, <code>debugger</code> statement,
+ <code>continue</code> statement, <code>break</code> statement, <code>return</code> statement, and <code>throw</code>
+ statement) must be terminated with semicolons. Such semicolons may always appear explicitly in the source text. For
+ convenience, however, such semicolons may be omitted from the source text in certain situations. These situations are
+ described by saying that semicolons are automatically inserted into the source code token stream in those situations.</p>
+ </div>
+
+ <section id="sec-rules-of-automatic-semicolon-insertion">
+ <h1><span class="secnum" id="sec-11.9.1"><a href="#sec-rules-of-automatic-semicolon-insertion"
+ title="link to this section">11.9.1</a></span> Rules of Automatic Semicolon Insertion</h1>
+
+ <p>In the following rules, &ldquo;token&rdquo; means the actual recognized lexical token determined using the current
+ lexical goal symbol as described in <a href="#sec-ecmascript-language-lexical-grammar">clause 11</a>.</p>
+
+ <p>There are three basic rules of semicolon insertion:</p>
+
+ <ol class="proc">
+ <li>When, as a <span style="font-family: Times New Roman"><i>Script</i> or <i>Module</i></span> is parsed from left to
+ right, a token (called the <i>offending token</i>) is encountered that is not allowed by any production of the
+ grammar, then a semicolon is automatically inserted before the offending token if one or more of the following
+ conditions is true:
+ <ul>
+ <li>
+ <p>The offending token is separated from the previous token by at least one <i>LineTerminator</i>.</p>
+ </li>
+
+ <li>
+ <p>The offending token is <code>}</code>.</p>
+ </li>
+
+ <li>
+ <p>The previous token is <code>)</code> and the inserted semicolon would then be parsed as the terminating semicolon
+ of a do-while statement (<a href="#sec-do-while-statement">13.6.1</a>).</p>
+ </li>
+ </ul>
+ </li>
+ <li>When, as the <span style="font-family: Times New Roman"><i>Script</i> or <i>Module</i></span> is parsed from left to
+ right, the end of the input stream of tokens is encountered and the parser is unable to parse the input token stream
+ as a single complete ECMAScript <span style="font-family: Times New Roman"><i>Script</i> or <i>Module</i></span>, then
+ a semicolon is automatically inserted at the end of the input stream.</li>
+ <li>When, as the <span style="font-family: Times New Roman"><i>Script</i> or <i>Module</i></span> is parsed from left to
+ right, a token is encountered that is allowed by some production of the grammar, but the production is a <i>restricted
+ production</i> and the token would be the first token for a terminal or nonterminal immediately following the
+ annotation <span style="font-family: Times New Roman">&ldquo;</span>[no&nbsp;<span style="font-family: Times New
+ Roman"><i>LineTerminator</i></span> here]&rdquo; within the restricted production (and therefore such a token is
+ called a restricted token), and the restricted token is separated from the previous token by at least one <span
+ class="nt">LineTerminator</span>, then a semicolon is automatically inserted before the restricted token.</li>
+ </ol>
+
+ <p>However, there is an additional overriding condition on the preceding rules: a semicolon is never inserted automatically
+ if the semicolon would then be parsed as an empty statement or if that semicolon would become one of the two semicolons in
+ the header of a <code>for</code> statement (<a href="#sec-for-statement">see 13.6.3</a>).</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> The following are the only restricted productions in the grammar:</p>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">PostfixExpression</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">LeftHandSideExpression</span><sub class="g-params">[?Yield]</sub> <span class="grhsannot">[no <span class="nt">LineTerminator</span> here]</span> <code class="t">++</code></div>
+ <div class="rhs"><span class="nt">LeftHandSideExpression</span><sub class="g-params">[?Yield]</sub> <span class="grhsannot">[no <span class="nt">LineTerminator</span> here]</span> <code class="t">--</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">ContinueStatement</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">continue;</code></div>
+ <div class="rhs"><code class="t">continue</code> <span class="grhsannot">[no <span class="nt">LineTerminator</span> here]</span> <span class="nt">LabelIdentifier</span><sub class="g-params">[?Yield]</sub> <code class="t">;</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">BreakStatement</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">break</code> <code class="t">;</code></div>
+ <div class="rhs"><code class="t">break</code> <span class="grhsannot">[no <span class="nt">LineTerminator</span> here]</span> <span class="nt">LabelIdentifier</span><sub class="g-params">[?Yield]</sub> <code class="t">;</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">ReturnStatement</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">return</code> <span class="grhsannot">[no <span class="nt">LineTerminator</span> here]</span> <span class="nt">Expression</span> <code class="t">;</code></div>
+ <div class="rhs"><code class="t">return</code> <span class="grhsannot">[no <span class="nt">LineTerminator</span> here]</span> <span class="nt">Expression</span><sub class="g-params">[In, ?Yield]</sub> <code class="t">;</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">ThrowStatement</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">throw</code> <span class="grhsannot">[no <span class="nt">LineTerminator</span> here]</span> <span class="nt">Expression</span><sub class="g-params">[In, ?Yield]</sub> <code class="t">;</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">ArrowFunction</span><sub class="g-params">[In, Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">ArrowParameters</span><sub class="g-params">[?Yield]</sub> <span class="grhsannot">[no <span class="nt">LineTerminator</span> here]</span> <code class="t">=&gt;</code> <span class="nt">ConciseBody</span><sub class="g-params">[?In]</sub></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">YieldExpression</span><sub class="g-params">[In]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">yield</code> <span class="grhsannot">[no <span class="nt">LineTerminator</span> here]</span> <code class="t">*</code> <span class="nt">AssignmentExpression</span><sub class="g-params">[?In, Yield]</sub></div>
+ <div class="rhs"><code class="t">yield</code> <span class="grhsannot">[no <span class="nt">LineTerminator</span> here]</span> <span class="nt">AssignmentExpression</span><sub class="g-params">[?In, Yield]</sub></div>
+ </div>
+
+ <p>The practical effect of these restricted productions is as follows:</p>
+
+ <p>When a <code>++</code> or <code>--</code> token is encountered where the parser would treat it as a postfix operator, and
+ at least one <span class="nt">LineTerminator</span> occurred between the preceding token and the <code>++</code> or
+ <code>--</code> token, then a semicolon is automatically inserted before the <code>++</code> or <code>--</code> token.</p>
+
+ <p>When a <code>continue</code>, <code>break</code>, <code>return</code>, <code>throw</code>, or <code>yield</code> token is
+ encountered and a <span class="nt">LineTerminator</span> is encountered before the next token, a semicolon is automatically
+ inserted after the <code>continue</code>, <code>break</code>, <code>return</code>, <code>throw</code>, or <code>yield</code>
+ token.</p>
+
+ <p>The resulting practical advice to ECMAScript programmers is:</p>
+
+ <p>A postfix <code>++</code> or <code>--</code> operator should appear on the same line as its operand.</p>
+
+ <p>An <span class="nt">Expression</span> in a <code>return</code> or <code>throw</code> statement or an <span
+ class="nt">AssignmentExpression</span> in a <code>yield</code> expression should start on the same line as the
+ <code>return</code>, <code>throw</code>, or <code>yield</code> token.</p>
+
+ <p>An <span class="nt">IdentifierReference</span> in a <code>break</code> or <code>continue</code> statement should be on
+ the same line as the <code>break</code> or <code>continue</code> token.</p>
+ </section>
+
+ <section id="sec-examples-of-automatic-semicolon-insertion">
+ <h1><span class="secnum" id="sec-11.9.2"><a href="#sec-examples-of-automatic-semicolon-insertion"
+ title="link to this section">11.9.2</a></span> Examples of Automatic Semicolon Insertion</h1>
+
+ <p>The source</p>
+
+ <pre>{ 1 2 } 3</pre>
+
+ <p>is not a valid sentence in the ECMAScript grammar, even with the <a href="#sec-automatic-semicolon-insertion">automatic
+ semicolon insertion</a> rules. In contrast, the source</p>
+
+ <pre>{ 1<br>2 } 3</pre>
+
+ <p>is also not a valid ECMAScript sentence, but is transformed by <a href="#sec-automatic-semicolon-insertion">automatic
+ semicolon insertion</a> into the following:</p>
+
+ <pre>{ 1<br>;2 ;} 3;</pre>
+
+ <p>which is a valid ECMAScript sentence.</p>
+
+ <p>The source</p>
+
+ <pre>for (a; b<br>)</pre>
+
+ <p>is not a valid ECMAScript sentence and is not altered by <a href="#sec-automatic-semicolon-insertion">automatic semicolon
+ insertion</a> because the semicolon is needed for the header of a <code>for</code> statement. Automatic semicolon insertion
+ never inserts one of the two semicolons in the header of a <code>for</code> statement.</p>
+
+ <p>The source</p>
+
+ <pre>return<br>a + b</pre>
+
+ <p>is transformed by <a href="#sec-automatic-semicolon-insertion">automatic semicolon insertion</a> into the following:</p>
+
+ <pre>return;<br>a + b;</pre>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> The expression <code>a + b</code> is not treated as a value to be returned by the
+ <code>return</code> statement, because a <i>LineTerminator</i> separates it from the token <code>return</code>.</p>
+ </div>
+
+ <p>The source</p>
+
+ <pre>a = b<br>++c</pre>
+
+ <p>is transformed by <a href="#sec-automatic-semicolon-insertion">automatic semicolon insertion</a> into the following:</p>
+
+ <pre>a = b;<br>++c;</pre>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> The token <code>++</code> is not treated as a postfix operator applying to the variable
+ <code>b</code>, because a <i>LineTerminator</i> occurs between <code>b</code> and <code>++</code>.</p>
+ </div>
+
+ <p>The source</p>
+
+ <pre>if (a &gt; b)<br>else c = d</pre>
+
+ <p>is not a valid ECMAScript sentence and is not altered by <a href="#sec-automatic-semicolon-insertion">automatic semicolon
+ insertion</a> before the <code>else</code> token, even though no production of the grammar applies at that point, because an
+ automatically inserted semicolon would then be parsed as an empty statement.</p>
+
+ <p>The source</p>
+
+ <pre>a = b + c<br>(d + e).print()</pre>
+
+ <p>is <i>not</i> transformed by <a href="#sec-automatic-semicolon-insertion">automatic semicolon insertion</a>, because the
+ parenthesized expression that begins the second line can be interpreted as an argument list for a function call:</p>
+
+ <pre>a = b + c(d + e).print()</pre>
+
+ <p>In the circumstance that an assignment statement must begin with a left parenthesis, it is a good idea for the programmer
+ to provide an explicit semicolon at the end of the preceding statement rather than to rely on <a
+ href="#sec-automatic-semicolon-insertion">automatic semicolon insertion</a>.</p>
+ </section>
+ </section>
+</section>
+
+<section id="sec-ecmascript-language-expressions">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12"><a href="#sec-ecmascript-language-expressions" title="link to this section">12</a></span>
+ ECMAScript Language: Expressions</h1>
+ </div>
+
+ <section id="sec-identifiers">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.1"><a href="#sec-identifiers" title="link to this section">12.1</a></span>
+ Identifiers</h1>
+
+ <p><b>Syntax</b></p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">IdentifierReference</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">Identifier</span></div>
+ <div class="rhs"><span class="grhsannot">[~Yield]</span> <code class="t">yield</code></div>
+ </div>
+
+ <p><i>BindingIdentifier</i><span style="font-family: sans-serif"><sub>[Yield]</sub></span> <b>:</b></p>
+
+ <p><span style="font-family: Times New Roman"><i>Identifier<br></i></span>[~Yield] <code>yield</code></p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">LabelIdentifier</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">Identifier</span></div>
+ <div class="rhs"><span class="grhsannot">[~Yield]</span> <code class="t">yield</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">Identifier</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">IdentifierName</span> <span class="grhsmod">but not</span> <span class="nt">ReservedWord</span></div>
+ </div>
+ </div>
+
+ <section id="sec-identifiers-static-semantics-early-errors">
+ <h1><span class="secnum" id="sec-12.1.1"><a href="#sec-identifiers-static-semantics-early-errors"
+ title="link to this section">12.1.1</a></span> Static Semantics: Early Errors</h1>
+ <div class="gp prod"><span class="nt">BindingIdentifier</span> <span class="geq">:</span> <span class="nt">Identifier</span></div>
+ <ul>
+ <li>
+ <p>It is a Syntax Error if the code matched by this production is contained in <a href="#sec-strict-mode-code">strict
+ mode code</a> and the StringValue of <span class="nt">Identifier</span> is <code>"arguments"</code> or
+ <code>"eval"</code>.</p>
+ </li>
+ </ul>
+
+ <p><span class="prod"><span class="nt">IdentifierReference</span> <span class="geq">:</span> <code
+ class="t">yield</code></span></p>
+
+ <p><span class="prod"><span class="nt">BindingIdentifier</span> <span class="geq">:</span> <code
+ class="t">yield</code></span></p>
+
+ <div class="gp prod"><span class="nt">LabelIdentifier</span> <span class="geq">:</span> <code class="t">yield</code></div>
+ <ul>
+ <li>
+ <p>It is a Syntax Error if the code matched by this production is contained in <a href="#sec-strict-mode-code">strict
+ code</a><var>.</var></p>
+ </li>
+ </ul>
+
+ <p><i>IdentifierReference</i><span style="font-family: sans-serif"><sub>[Yield]</sub> <b>:</b></span> <i>Identifier</i></p>
+
+ <p><i>BindingIdentifier</i><span style="font-family: sans-serif"><sub>[Yield]</sub> <b>:</b></span> <i>Identifier</i></p>
+
+ <p><i>LabelIdentifier</i><span style="font-family: sans-serif"><sub>[Yield]</sub> <b>:</b></span> <i>Identifier</i></p>
+
+ <ul>
+ <li>
+ <p>It is a Syntax Error if this production has a <sub>[Yield]</sub> parameter and StringValue of <span
+ class="nt">Identifier</span> is <code>"yield"</code>.</p>
+ </li>
+ </ul>
+ <div class="gp prod"><span class="nt">Identifier</span> <span class="geq">:</span> <span class="nt">IdentifierName</span> <span class="grhsmod">but not</span> <span class="nt">ReservedWord</span></div>
+ <ul>
+ <li>
+ <p>It is a Syntax Error if this phrase is contained in <a href="#sec-strict-mode-code">strict mode code</a> and the
+ StringValue of <span class="nt">IdentifierName</span> is: <code>"implements"</code>, <code>"interface"</code>,
+ <code>"let"</code>, <code>"package"</code>, <code>"private"</code>, <code>"protected"</code>, <code>"public"</code>,
+ <code>"static"</code>, or <code>"yield"</code>.</p>
+ </li>
+
+ <li>
+ <p>It is a Syntax Error if StringValue of <span class="nt">IdentifierName</span> is the same string value as the
+ StringValue of any <span class="nt">ReservedWord</span> except for <code>yield</code>.</p>
+ </li>
+ </ul>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> <span style="font-family: sans-serif">StringValue of</span> <i>IdentifierName</i>
+ normalizes any Unicode escape sequences in <i>IdentifierName</i> hence such escapes cannot be used to write an
+ <i>Identifier</i> whose code point sequence is the same as a <i>ReservedWord</i>.</p>
+ </div>
+ </section>
+
+ <section id="sec-identifiers-static-semantics-boundnames">
+ <h1><span class="secnum" id="sec-12.1.2"><a href="#sec-identifiers-static-semantics-boundnames"
+ title="link to this section">12.1.2</a></span> Static Semantics: BoundNames</h1>
+
+ <p>See also: <a href="#sec-let-and-const-declarations-static-semantics-boundnames">13.2.1.2</a>, <a
+ href="#sec-variable-statement-static-semantics-boundnames">13.2.2.1</a>, <a
+ href="#sec-destructuring-binding-patterns-static-semantics-boundnames">13.2.3.1</a>, <a
+ href="#sec-for-in-and-for-of-statements-static-semantics-boundnames">13.6.4.2</a>, <a
+ href="#sec-function-definitions-static-semantics-boundnames">14.1.3</a>, <a
+ href="#sec-arrow-function-definitions-static-semantics-boundnames">14.2.2</a>, <a
+ href="#sec-generator-function-definitions-static-semantics-boundnames">14.4.2</a>, <a
+ href="#sec-class-definitions-static-semantics-boundnames">14.5.2</a>, <a
+ href="#sec-imports-static-semantics-boundnames">15.2.2.2</a>, <a
+ href="#sec-exports-static-semantics-boundnames">15.2.3.2</a>.</p>
+
+ <div class="gp prod"><span class="nt">BindingIdentifier</span> <span class="geq">:</span> <span class="nt">Identifier</span></div>
+ <ol class="proc">
+ <li>Return a new <a href="#sec-list-and-record-specification-type">List</a> containing the StringValue of
+ <i>Identifier</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">BindingIdentifier</span> <span class="geq">:</span> <code class="t">yield</code></div>
+ <ol class="proc">
+ <li>Return a new <a href="#sec-list-and-record-specification-type">List</a> containing <code>"yield"</code>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-identifiers-static-semantics-isvalidsimpleassignmenttarget">
+ <h1><span class="secnum" id="sec-12.1.3"><a href="#sec-identifiers-static-semantics-isvalidsimpleassignmenttarget"
+ title="link to this section">12.1.3</a></span> Static Semantics: IsValidSimpleAssignmentTarget</h1>
+
+ <p>See also: <a href="#sec-semantics-static-semantics-isvalidsimpleassignmenttarget">12.2.0.4</a>, <a
+ href="#sec-grouping-operator-static-semantics-isvalidsimpleassignmenttarget">12.2.9.3</a>, <a
+ href="#sec-static-semantics-static-semantics-isvalidsimpleassignmenttarget">12.3.1.5</a>, <a
+ href="#sec-postfix-expressions-static-semantics-isvalidsimpleassignmenttarget">12.4.3</a>, <a
+ href="#sec-unary-operators-static-semantics-isvalidsimpleassignmenttarget">12.5.3</a>, <a
+ href="#sec-multiplicative-operators-static-semantics-isvalidsimpleassignmenttarget">12.6.2</a>, <a
+ href="#sec-additive-operators-static-semantics-isvalidsimpleassignmenttarget">12.7.2</a>, <a
+ href="#sec-bitwise-shift-operators-static-semantics-isvalidsimpleassignmenttarget">12.8.2</a>, <a
+ href="#sec-relational-operators-static-semantics-isvalidsimpleassignmenttarget">12.9.2</a>, <a
+ href="#sec-equality-operators-static-semantics-isvalidsimpleassignmenttarget">12.10.2</a>, <a
+ href="#sec-binary-bitwise-operators-static-semantics-isvalidsimpleassignmenttarget">12.11.2</a>, <a
+ href="#sec-binary-logical-operators-static-semantics-isvalidsimpleassignmenttarget">12.12.2</a>, <a
+ href="#sec-conditional-operator-static-semantics-isvalidsimpleassignmenttarget">12.13.2</a>, <a
+ href="#sec-assignment-operators-static-semantics-isvalidsimpleassignmenttarget">12.14.3</a>, <a
+ href="#sec-comma-operator-static-semantics-isvalidsimpleassignmenttarget">12.15.2</a>.</p>
+
+ <div class="gp prod"><span class="nt">IdentifierReference</span> <span class="geq">:</span> <span class="nt">Identifier</span></div>
+ <ol class="proc">
+ <li>If this <i>IdentifierReference</i> is contained in <a href="#sec-strict-mode-code">strict mode code</a> and
+ StringValue of <i>Identifier</i> is <code>"eval"</code> or <code>"arguments"</code>, return <b>false</b>.</li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">IdentifierReference</span> <span class="geq">:</span> <code class="t">yield</code></div>
+ <ol class="proc">
+ <li>Return <b>true</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-identifiers-static-semantics-stringvalue">
+ <h1><span class="secnum" id="sec-12.1.4"><a href="#sec-identifiers-static-semantics-stringvalue"
+ title="link to this section">12.1.4</a></span> Static Semantics<span style="font-family: sans-serif">:</span>
+ <i>StringValue</i></h1>
+
+ <p>See also: <a href="#sec-identifier-names-static-semantics-stringvalue">11.6.1.2</a>, <a
+ href="#sec-string-literals-static-semantics-stringvalue">11.8.4.2</a>.</p>
+
+ <p><span class="prod"><span class="nt">IdentifierReference</span> <span class="geq">:</span> <code
+ class="t">yield</code></span></p>
+
+ <p><span class="prod"><span class="nt">BindingIdentifier</span> <span class="geq">:</span> <code
+ class="t">yield</code></span></p>
+
+ <div class="gp prod"><span class="nt">LabelIdentifier</span> <span class="geq">:</span> <code class="t">yield</code></div>
+ <ol class="proc">
+ <li>Return <code>"yield"</code>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">Identifier</span> <span class="geq">:</span> <span class="nt">IdentifierName</span> <span class="grhsmod">but not</span> <span class="nt">ReservedWord</span></div>
+ <ol class="proc">
+ <li>Return the StringValue of <i>IdentifierName</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-identifiers-runtime-semantics-bindinginitialization">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.1.5"><a href="#sec-identifiers-runtime-semantics-bindinginitialization"
+ title="link to this section">12.1.5</a></span> Runtime Semantics: BindingInitialization</h1>
+
+ <p>With arguments <var>value</var> and <var>environment</var>.</p>
+
+ <p>See also: <a href="#sec-destructuring-binding-patterns-runtime-semantics-bindinginitialization">13.2.3.5</a>, <a
+ href="#sec-for-in-and-for-of-statements-runtime-semantics-bindinginitialization">13.6.4.9</a>.</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> <b>undefined</b> is passed for <var>environment</var> to indicate that a <a
+ href="#sec-putvalue">PutValue</a> operation should be used to assign the initialization value. This is the case for
+ <code>var</code> statements and formal parameter lists of some non-strict functions (See <a
+ href="#sec-functiondeclarationinstantiation">9.2.12</a>). In those cases a lexical binding is hoisted and preinitialized
+ prior to evaluation of its initializer.</p>
+ </div>
+
+ <div class="gp prod"><span class="nt">BindingIdentifier</span> <span class="geq">:</span> <span class="nt">Identifier</span></div>
+ <ol class="proc">
+ <li>Let <i>name</i> be StringValue of <i>Identifier</i>.</li>
+ <li>Return <a href="#sec-initializeboundname">InitializeBoundName</a>( <i>name</i>, <i>value</i>,
+ <i>environment</i>).</li>
+ </ol>
+ <div class="gp prod"><span class="nt">BindingIdentifier</span> <span class="geq">:</span> <code class="t">yield</code></div>
+ <ol class="proc">
+ <li>Return <a href="#sec-initializeboundname">InitializeBoundName</a>(<code>"yield"</code>, <i>value</i>,
+ <i>environment</i>).</li>
+ </ol>
+ </div>
+
+ <section id="sec-initializeboundname">
+ <h1><span class="secnum" id="sec-12.1.5.1"><a href="#sec-initializeboundname"
+ title="link to this section">12.1.5.1</a></span> Runtime Semantics: InitializeBoundName(name, value, environment)</h1>
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>name</i>) is String.</li>
+ <li>If <i>environment</i> is not <b>undefined</b>, then
+ <ol class="block">
+ <li>Let <i>env</i> be the EnvironmentRecord component of <i>environment</i>.</li>
+ <li>Perform <i>env</i>.InitializeBinding(<i>name</i>, <i>value</i>).</li>
+ <li>Return <a href="#sec-normalcompletion">NormalCompletion</a>(<b>undefined</b>).</li>
+ </ol>
+ </li>
+ <li>Else
+ <ol class="block">
+ <li>Let <i>lhs</i> be <a href="#sec-resolvebinding">ResolveBinding</a>(<i>name</i>).</li>
+ <li>Return <a href="#sec-putvalue">PutValue</a>(<i>lhs</i>, <i>value</i>).</li>
+ </ol>
+ </li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-identifiers-runtime-semantics-evaluation">
+ <h1><span class="secnum" id="sec-12.1.6"><a href="#sec-identifiers-runtime-semantics-evaluation"
+ title="link to this section">12.1.6</a></span> Runtime Semantics: Evaluation</h1>
+ <div class="gp prod"><span class="nt">IdentifierReference</span> <span class="geq">:</span> <span class="nt">Identifier</span></div>
+ <ol class="proc">
+ <li>Return <a href="#sec-resolvebinding">ResolveBinding</a>(StringValue of <i>Identifier</i>).</li>
+ </ol>
+ <div class="gp prod"><span class="nt">IdentifierReference</span> <span class="geq">:</span> <code class="t">yield</code></div>
+ <ol class="proc">
+ <li>Return <a href="#sec-resolvebinding">ResolveBinding</a>(<code>"yield"</code>).</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE 1:</span> The result of evaluating an <i>IdentifierReference</i> is always a value of type <a
+ href="#sec-reference-specification-type">Reference</a>.</p>
+ </div>
+
+ <div class="note">
+ <p><span class="nh">NOTE 2:</span> In non-<a href="#sec-strict-mode-code">strict code</a>, the keyword <code>yield</code>
+ may be used as an identifier. Evaluating the <i>IdentifierReference</i> production resolves the binding of
+ <code>yield</code> as if it was an <i>Identifier</i>. Early Error restriction ensures that such an evaluation only can
+ occur for non-<a href="#sec-strict-mode-code">strict code</a>. See <a href="#sec-let-and-const-declarations">13.2.1</a>
+ for the handling of <code>yield</code> in binding creation contexts.</p>
+ </div>
+ </section>
+ </section>
+
+ <section id="sec-primary-expression">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.2"><a href="#sec-primary-expression" title="link to this section">12.2</a></span>
+ Primary Expression</h1>
+ <h2>Syntax</h2>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">PrimaryExpression</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">this</code></div>
+ <div class="rhs"><span class="nt">IdentifierReference</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><span class="nt">Literal</span></div>
+ <div class="rhs"><span class="nt">ArrayLiteral</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><span class="nt">ObjectLiteral</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><span class="nt">FunctionExpression</span></div>
+ <div class="rhs"><span class="nt">ClassExpression</span></div>
+ <div class="rhs"><span class="nt">GeneratorExpression</span></div>
+ <div class="rhs"><span class="nt">RegularExpressionLiteral</span></div>
+ <div class="rhs"><span class="nt">TemplateLiteral</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><span class="nt">CoverParenthesizedExpressionAndArrowParameterList</span><sub class="g-params">[?Yield]</sub></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">CoverParenthesizedExpressionAndArrowParameterList</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">(</code> <span class="nt">Expression</span><sub class="g-params">[In, ?Yield]</sub> <code class="t">)</code></div>
+ <div class="rhs"><code class="t">(</code> <code class="t">)</code></div>
+ <div class="rhs"><code class="t">(</code> <code class="t">...</code> <span class="nt">BindingIdentifier</span><sub class="g-params">[?Yield]</sub> <code class="t">)</code></div>
+ <div class="rhs"><code class="t">(</code> <span class="nt">Expression</span><sub class="g-params">[In, ?Yield]</sub> <code class="t">,</code> <code class="t">...</code> <span class="nt">BindingIdentifier</span><sub class="g-params">[?Yield]</sub> <code class="t">)</code></div>
+ </div>
+
+ <h2>Supplemental Syntax</h2>
+
+ <p>When processing the production</p>
+
+ <p><span class="nt">PrimaryExpression</span><sub>[Yield]</sub> <b>:</b> <span
+ class="nt">CoverParenthesizedExpressionAndArrowParameterList</span><sub>[?Yield]</sub><span style="font-family: Times New
+ Roman"><i><br></i></span>the interpretation of <span class="nt">CoverParenthesizedExpressionAndArrowParameterList</span> is
+ refined using the following grammar:</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">ParenthesizedExpression</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">(</code> <span class="nt">Expression</span><sub class="g-params">[In, ?Yield]</sub> <code class="t">)</code></div>
+ </div>
+ </div>
+
+ <section id="sec-primary-expression-semantics">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.2.0"><a href="#sec-primary-expression-semantics"
+ title="link to this section">12.2.0</a></span> Semantics</h1>
+ </div>
+
+ <section id="sec-static-semantics-coveredparenthesizedexpression">
+ <h1><span class="secnum" id="sec-12.2.0.1"><a href="#sec-static-semantics-coveredparenthesizedexpression"
+ title="link to this section">12.2.0.1</a></span> Static Semantics: CoveredParenthesizedExpression</h1>
+ <div class="gp prod"><span class="nt">CoverParenthesizedExpressionAndArrowParameterList</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span> <code class="t">(</code> <span class="nt">Expression</span><sub class="g-params">[In, ?Yield]</sub> <code class="t">)</code></div>
+ <ol class="proc">
+ <li>Return the result of parsing the lexical token stream matched by
+ <i>CoverParenthesizedExpressionAndArrowParameterList</i><sub>[Yield]</sub> using either
+ <i>ParenthesizedExpression</i> or <i>ParenthesizedExpression</i><sub>[Yield]</sub> as the goal symbol depending upon
+ whether the <sub>[Yield]</sub> grammar parameter was present when
+ <i>CoverParenthesizedExpressionAndArrowParameterList was matched.</i></li>
+ </ol>
+ </section>
+
+ <section id="sec-semantics-static-semantics-isfunctiondefinition">
+ <h1><span class="secnum" id="sec-12.2.0.2"><a href="#sec-semantics-static-semantics-isfunctiondefinition"
+ title="link to this section">12.2.0.2</a></span> Static Semantics: IsFunctionDefinition</h1>
+
+ <p>See also: <a href="#sec-grouping-operator-static-semantics-isfunctiondefinition">12.2.9.2</a>, <a
+ href="#sec-static-semantics-static-semantics-isfunctiondefinition">12.3.1.2</a>, <a
+ href="#sec-postfix-expressions-static-semantics-isfunctiondefinition">12.4.2</a>, <a
+ href="#sec-unary-operators-static-semantics-isfunctiondefinition">12.5.2</a>, <a
+ href="#sec-multiplicative-operators-static-semantics-isfunctiondefinition">12.6.1</a>, <a
+ href="#sec-additive-operators-static-semantics-isfunctiondefinition">12.7.1</a>, <a
+ href="#sec-bitwise-shift-operators-static-semantics-isfunctiondefinition">12.8.1</a>, <a
+ href="#sec-relational-operators-static-semantics-isfunctiondefinition">12.9.1</a>, <a
+ href="#sec-equality-operators-static-semantics-isfunctiondefinition">12.10.1</a>, <a
+ href="#sec-binary-bitwise-operators-static-semantics-isfunctiondefinition">12.11.1</a>, <a
+ href="#sec-binary-logical-operators-static-semantics-isfunctiondefinition">12.12.1</a>, <a
+ href="#sec-conditional-operator-static-semantics-isfunctiondefinition">12.13.1</a>, <a
+ href="#sec-assignment-operators-static-semantics-isfunctiondefinition">12.14.2</a>, <a
+ href="#sec-comma-operator-static-semantics-isfunctiondefinition">12.15.1</a>, <a
+ href="#sec-function-definitions-static-semantics-isfunctiondefinition">14.1.11</a>, <a
+ href="#sec-generator-function-definitions-static-semantics-isfunctiondefinition">14.4.9</a>, <a
+ href="#sec-class-definitions-static-semantics-isfunctiondefinition">14.5.8</a>.</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">PrimaryExpression</span> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">this</code></div>
+ <div class="rhs"><span class="nt">IdentifierReference</span></div>
+ <div class="rhs"><span class="nt">Literal</span></div>
+ <div class="rhs"><span class="nt">ArrayLiteral</span></div>
+ <div class="rhs"><span class="nt">ObjectLiteral</span></div>
+ <div class="rhs"><span class="nt">RegularExpressionLiteral</span></div>
+ <div class="rhs"><span class="nt">TemplateLiteral</span></div>
+ </div>
+
+ <ol class="proc">
+ <li>Return <b>false</b>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">PrimaryExpression</span> <span class="geq">:</span> <span class="nt">CoverParenthesizedExpressionAndArrowParameterList</span></div>
+ <ol class="proc">
+ <li>Let <i>expr</i> be CoveredParenthesizedExpression of <i>CoverParenthesizedExpressionAndArrowParameterList</i>.</li>
+ <li>Return IsFunctionDefinition of <i>expr</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-semantics-static-semantics-isidentifierref">
+ <h1><span class="secnum" id="sec-12.2.0.3"><a href="#sec-semantics-static-semantics-isidentifierref"
+ title="link to this section">12.2.0.3</a></span> Static Semantics: IsIdentifierRef</h1>
+
+ <p>See also: <a href="#sec-static-semantics-static-semantics-isidentifierref">12.3.1.4</a>.</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">PrimaryExpression</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">IdentifierReference</span></div>
+ </div>
+
+ <ol class="proc">
+ <li>Return <b>true</b>.</li>
+ </ol>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">PrimaryExpression</span> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">this</code></div>
+ <div class="rhs"><span class="nt">Literal</span></div>
+ <div class="rhs"><span class="nt">ArrayLiteral</span></div>
+ <div class="rhs"><span class="nt">ObjectLiteral</span></div>
+ <div class="rhs"><span class="nt">FunctionExpression</span></div>
+ <div class="rhs"><span class="nt">ClassExpression</span></div>
+ <div class="rhs"><span class="nt">GeneratorExpression</span></div>
+ <div class="rhs"><span class="nt">RegularExpressionLiteral</span></div>
+ <div class="rhs"><span class="nt">TemplateLiteral</span></div>
+ <div class="rhs"><span class="nt">CoverParenthesizedExpressionAndArrowParameterList</span></div>
+ </div>
+
+ <ol class="proc">
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-semantics-static-semantics-isvalidsimpleassignmenttarget">
+ <h1><span class="secnum" id="sec-12.2.0.4"><a href="#sec-semantics-static-semantics-isvalidsimpleassignmenttarget"
+ title="link to this section">12.2.0.4</a></span> Static Semantics: IsValidSimpleAssignmentTarget</h1>
+
+ <p>See also: <a href="#sec-identifiers-static-semantics-isvalidsimpleassignmenttarget">12.1.3</a>, <a
+ href="#sec-grouping-operator-static-semantics-isvalidsimpleassignmenttarget">12.2.9.3</a>, <a
+ href="#sec-static-semantics-static-semantics-isvalidsimpleassignmenttarget">12.3.1.5</a>, <a
+ href="#sec-postfix-expressions-static-semantics-isvalidsimpleassignmenttarget">12.4.3</a>, <a
+ href="#sec-unary-operators-static-semantics-isvalidsimpleassignmenttarget">12.5.3</a>, <a
+ href="#sec-multiplicative-operators-static-semantics-isvalidsimpleassignmenttarget">12.6.2</a>, <a
+ href="#sec-additive-operators-static-semantics-isvalidsimpleassignmenttarget">12.7.2</a>, <a
+ href="#sec-bitwise-shift-operators-static-semantics-isvalidsimpleassignmenttarget">12.8.2</a>, <a
+ href="#sec-relational-operators-static-semantics-isvalidsimpleassignmenttarget">12.9.2</a>, <a
+ href="#sec-equality-operators-static-semantics-isvalidsimpleassignmenttarget">12.10.2</a>, <a
+ href="#sec-binary-bitwise-operators-static-semantics-isvalidsimpleassignmenttarget">12.11.2</a>, <a
+ href="#sec-binary-logical-operators-static-semantics-isvalidsimpleassignmenttarget">12.12.2</a>, <a
+ href="#sec-conditional-operator-static-semantics-isvalidsimpleassignmenttarget">12.13.2</a>, <a
+ href="#sec-assignment-operators-static-semantics-isvalidsimpleassignmenttarget">12.14.3</a>, <a
+ href="#sec-comma-operator-static-semantics-isvalidsimpleassignmenttarget">12.15.2</a>.</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">PrimaryExpression</span> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">this</code></div>
+ <div class="rhs"><span class="nt">Literal</span></div>
+ <div class="rhs"><span class="nt">ArrayLiteral</span></div>
+ <div class="rhs"><span class="nt">ObjectLiteral</span></div>
+ <div class="rhs"><span class="nt">FunctionExpression</span></div>
+ <div class="rhs"><span class="nt">ClassExpression</span></div>
+ <div class="rhs"><span class="nt">GeneratorExpression</span></div>
+ <div class="rhs"><span class="nt">RegularExpressionLiteral</span></div>
+ <div class="rhs"><span class="nt">TemplateLiteral</span></div>
+ </div>
+
+ <ol class="proc">
+ <li>Return <b>false</b>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">PrimaryExpression</span> <span class="geq">:</span> <span class="nt">CoverParenthesizedExpressionAndArrowParameterList</span></div>
+ <ol class="proc">
+ <li>Let <i>expr</i> be CoveredParenthesizedExpression of <i>CoverParenthesizedExpressionAndArrowParameterList</i>.</li>
+ <li>Return IsValidSimpleAssignmentTarget of <i>expr</i>.</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-this-keyword">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.2.1"><a href="#sec-this-keyword" title="link to this section">12.2.1</a></span> The
+ <code>this</code> Keyword</h1>
+ </div>
+
+ <section id="sec-this-keyword-runtime-semantics-evaluation">
+ <h1><span class="secnum" id="sec-12.2.1.1"><a href="#sec-this-keyword-runtime-semantics-evaluation"
+ title="link to this section">12.2.1.1</a></span> Runtime Semantics: Evaluation</h1>
+ <div class="gp prod"><span class="nt">PrimaryExpression</span> <span class="geq">:</span> <code class="t">this</code></div>
+ <ol class="proc">
+ <li>Return <a href="#sec-resolvethisbinding">ResolveThisBinding</a>( ) .</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-identifier-reference">
+ <h1><span class="secnum" id="sec-12.2.2"><a href="#sec-identifier-reference" title="link to this section">12.2.2</a></span>
+ Identifier Reference</h1>
+
+ <p>See <a href="#sec-identifiers">12.1</a> for <span class="nt">IdentifierReference</span>.</p>
+ </section>
+
+ <section id="sec-primary-expression-literals">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.2.3"><a href="#sec-primary-expression-literals"
+ title="link to this section">12.2.3</a></span> Literals</h1>
+ <h2>Syntax</h2>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">Literal</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">NullLiteral</span></div>
+ <div class="rhs"><span class="nt">BooleanLiteral</span></div>
+ <div class="rhs"><span class="nt">NumericLiteral</span></div>
+ <div class="rhs"><span class="nt">StringLiteral</span></div>
+ </div>
+ </div>
+
+ <section id="sec-literals-runtime-semantics-evaluation">
+ <h1><span class="secnum" id="sec-12.2.3.1"><a href="#sec-literals-runtime-semantics-evaluation"
+ title="link to this section">12.2.3.1</a></span> Runtime Semantics: Evaluation</h1>
+ <div class="gp prod"><span class="nt">Literal</span> <span class="geq">:</span> <span class="nt">NullLiteral</span></div>
+ <ol class="proc">
+ <li>Return <b>null</b>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">Literal</span> <span class="geq">:</span> <span class="nt">BooleanLiteral</span></div>
+ <ol class="proc">
+ <li>Return <b>false</b> if <i>BooleanLiteral</i> is the token <code>false</code>.</li>
+ <li>Return <b>true</b> if <i>BooleanLiteral</i> is the token <code>true</code>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">Literal</span> <span class="geq">:</span> <span class="nt">NumericLiteral</span></div>
+ <ol class="proc">
+ <li>Return the number whose value is MV of <i>NumericLiteral</i> as defined in <a
+ href="#sec-literals-numeric-literals">11.8.3</a>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">Literal</span> <span class="geq">:</span> <span class="nt">StringLiteral</span></div>
+ <ol class="proc">
+ <li>Return the StringValue of <i>StringLiteral</i> as defined in <a
+ href="#sec-string-literals-static-semantics-stringvalue">11.8.4.2</a>.</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-array-initializer">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.2.4"><a href="#sec-array-initializer" title="link to this section">12.2.4</a></span>
+ Array Initializer</h1>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> An <i>ArrayLiteral</i> is an expression describing the initialization of an Array
+ object, using a list, of zero or more expressions each of which represents an array element, enclosed in square
+ brackets. The elements need not be literals; they are evaluated each time the array initializer is evaluated.</p>
+ </div>
+
+ <p>Array elements may be elided at the beginning, middle or end of the element list. Whenever a comma in the element list
+ is not preceded by an <span class="nt">AssignmentExpression</span> (i.e., a comma at the beginning or after another
+ comma), the missing array element contributes to the length of the Array and increases the index of subsequent elements.
+ Elided array elements are not defined. If an element is elided at the end of an array, that element does not contribute to
+ the length of the Array.</p>
+
+ <h2>Syntax</h2>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">ArrayLiteral</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">[</code> <span class="nt">Elision</span><sub class="g-opt">opt</sub> <code class="t">]</code></div>
+ <div class="rhs"><code class="t">[</code> <span class="nt">ElementList</span><sub class="g-params">[?Yield]</sub> <code class="t">]</code></div>
+ <div class="rhs"><code class="t">[</code> <span class="nt">ElementList</span><sub class="g-params">[?Yield]</sub> <code class="t">,</code> <span class="nt">Elision</span><sub class="g-opt">opt</sub> <code class="t">]</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">ElementList</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">Elision</span><sub class="g-opt">opt</sub> <span class="nt">AssignmentExpression</span><sub class="g-params">[In, ?Yield]</sub></div>
+ <div class="rhs"><span class="nt">Elision</span><sub class="g-opt">opt</sub> <span class="nt">SpreadElement</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><span class="nt">ElementList</span><sub class="g-params">[?Yield]</sub> <code class="t">,</code> <span class="nt">Elision</span><sub class="g-opt">opt</sub> <span class="nt">AssignmentExpression</span><sub class="g-params">[In, ?Yield]</sub></div>
+ <div class="rhs"><span class="nt">ElementList</span><sub class="g-params">[?Yield]</sub> <code class="t">,</code> <span class="nt">Elision</span><sub class="g-opt">opt</sub> <span class="nt">SpreadElement</span><sub class="g-params">[?Yield]</sub></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">Elision</span> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">,</code></div>
+ <div class="rhs"><span class="nt">Elision</span> <code class="t">,</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">SpreadElement</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">...</code> <span class="nt">AssignmentExpression</span><sub class="g-params">[In, ?Yield]</sub></div>
+ </div>
+ </div>
+
+ <section id="sec-static-semantics-elisionwidth">
+ <h1><span class="secnum" id="sec-12.2.4.1"><a href="#sec-static-semantics-elisionwidth"
+ title="link to this section">12.2.4.1</a></span> Static Semantics: ElisionWidth</h1>
+ <div class="gp prod"><span class="nt">Elision</span> <span class="geq">:</span> <code class="t">,</code></div>
+ <ol class="proc">
+ <li>Return the numeric value 1.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">Elision</span> <span class="geq">:</span> <span class="nt">Elision</span> <code class="t">,</code></div>
+ <ol class="proc">
+ <li>Let <i>preceding</i> be the ElisionWidth of <i>Elision</i>.</li>
+ <li>Return <i>preceding</i>+1.</li>
+ </ol>
+ </section>
+
+ <section id="sec-runtime-semantics-arrayaccumulation">
+ <h1><span class="secnum" id="sec-12.2.4.2"><a href="#sec-runtime-semantics-arrayaccumulation"
+ title="link to this section">12.2.4.2</a></span> Runtime Semantics: ArrayAccumulation</h1>
+
+ <p>With parameters <var>array</var> and <var>nextIndex</var>.</p>
+
+ <div class="gp prod"><span class="nt">ElementList</span> <span class="geq">:</span> <span class="nt">Elision</span><sub class="g-opt">opt</sub> <span class="nt">AssignmentExpression</span></div>
+ <ol class="proc">
+ <li>Let <i>padding</i> be the ElisionWidth of <i>Elision</i>; if <i>Elision</i> is not present, use the numeric value
+ zero.</li>
+ <li>Let <i>initResult</i> be the result of evaluating <i>AssignmentExpression</i>.</li>
+ <li>Let <i>initValue</i> be <a href="#sec-getvalue">GetValue</a>(<i>initResult</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>initValue</i>).</li>
+ <li>Let <i>created</i> be <a href="#sec-createdataproperty">CreateDataProperty</a>(<i>array</i>, <a
+ href="#sec-tostring">ToString</a>(<a href="#sec-touint32">ToUint32</a>(<i>nextIndex+padding</i>)),
+ <i>initValue</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>created</i> is <b>true</b><i>.</i></li>
+ <li>Return <i>nextIndex+padding+</i>1.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">ElementList</span> <span class="geq">:</span> <span class="nt">Elision</span><sub class="g-opt">opt</sub> <span class="nt">SpreadElement</span></div>
+ <ol class="proc">
+ <li>Let <i>padding</i> be the ElisionWidth of <i>Elision</i>; if <i>Elision</i> is not present, use the numeric value
+ zero.</li>
+ <li>Return the result of performing ArrayAccumulation for <i>SpreadElement</i> with arguments <i>array</i> and
+ <i>nextIndex</i>+<i>padding</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">ElementList</span> <span class="geq">:</span> <span class="nt">ElementList</span> <code class="t">,</code> <span class="nt">Elision</span><sub class="g-opt">opt</sub> <span class="nt">AssignmentExpression</span></div>
+ <ol class="proc">
+ <li>Let <i>postIndex</i> be the result of performing ArrayAccumulation for <i>ElementList</i> with arguments
+ <i>array</i> and <i>nextIndex</i>.</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>postIndex</i>).</li>
+ <li>Let <i>padding</i> be the ElisionWidth of <i>Elision</i>; if <i>Elision</i> is not present, use the numeric value
+ zero.</li>
+ <li>Let <i>initResult</i> be the result of evaluating <i>AssignmentExpression</i>.</li>
+ <li>Let <i>initValue</i> be <a href="#sec-getvalue">GetValue</a>(<i>initResult</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>initValue</i>).</li>
+ <li>Let <i>created</i> be <a href="#sec-createdataproperty">CreateDataProperty</a>(<i>array</i>, <a
+ href="#sec-tostring">ToString</a>(<a href="#sec-touint32">ToUint32</a>(<i>postIndex</i>+<i>padding</i>)),
+ <i>initValue</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>created</i> is <b>true</b>.</li>
+ <li>Return <i>postIndex</i>+<i>padding+</i>1.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">ElementList</span> <span class="geq">:</span> <span class="nt">ElementList</span> <code class="t">,</code> <span class="nt">Elision</span><sub class="g-opt">opt</sub> <span class="nt">SpreadElement</span></div>
+ <ol class="proc">
+ <li>Let <i>postIndex</i> be the result of performing ArrayAccumulation for <i>ElementList</i> with arguments
+ <i>array</i> and <i>nextIndex</i>.</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>postIndex</i>).</li>
+ <li>Let <i>padding</i> be the ElisionWidth of <i>Elision</i>; if <i>Elision</i> is not present, use the numeric value
+ zero.</li>
+ <li>Return the result of performing ArrayAccumulation for <i>SpreadElement</i> with arguments <i>array</i> and
+ <i>postIndex</i>+<i>padding</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">SpreadElement</span> <span class="geq">:</span> <code class="t">...</code> <span class="nt">AssignmentExpression</span></div>
+ <ol class="proc">
+ <li>Let <i>spreadRef</i> be the result of evaluating <i>AssignmentExpression</i>.</li>
+ <li>Let <i>spreadObj</i> be <a href="#sec-getvalue">GetValue</a>(<i>spreadRef</i>).</li>
+ <li>Let <i>iterator</i> be <a href="#sec-getiterator">GetIterator</a>(<i>spreadObj</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>iterator</i>).</li>
+ <li>Repeat
+ <ol class="block">
+ <li>Let <i>next</i> be <a href="#sec-iteratorstep">IteratorStep</a>(<i>iterator</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>next</i>).</li>
+ <li>If <i>next</i> is <b>false</b>, return <i>nextIndex</i>.</li>
+ <li>Let <i>nextValue</i> be <a href="#sec-iteratorvalue">IteratorValue</a>(<i>next</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>nextValue</i>).</li>
+ <li>Let <i>status</i> be <a href="#sec-createdataproperty">CreateDataProperty</a>(<i>array</i>, <a
+ href="#sec-tostring">ToString</a>(<i>nextIndex</i>), <i>nextValue</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>status</i> is <b>true</b> .</li>
+ <li>Let <i>nextIndex</i> be <i>nextIndex</i> + 1.</li>
+ </ol>
+ </li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> <a href="#sec-createdataproperty">CreateDataProperty</a> is used to ensure that own
+ properties are defined for the array even if the standard built-in Array prototype object has been modified in a manner
+ that would preclude the creation of new own properties using [[Set]].</p>
+ </div>
+ </section>
+
+ <section id="sec-array-initializer-runtime-semantics-evaluation">
+ <h1><span class="secnum" id="sec-12.2.4.3"><a href="#sec-array-initializer-runtime-semantics-evaluation"
+ title="link to this section">12.2.4.3</a></span> Runtime Semantics: Evaluation</h1>
+ <div class="gp prod"><span class="nt">ArrayLiteral</span> <span class="geq">:</span> <code class="t">[</code> <span class="nt">Elision</span><sub class="g-opt">opt</sub> <code class="t">]</code></div>
+ <ol class="proc">
+ <li>Let <i>array</i> be <a href="#sec-arraycreate">ArrayCreate</a>(0).</li>
+ <li>Let <i>pad</i> be the ElisionWidth of <i>Elision</i>; if <i>Elision</i> is not present, use the numeric value
+ zero.</li>
+ <li>Perform <a href="#sec-set-o-p-v-throw">Set</a>(<i>array</i>, <code>"length"</code>, <i>pad</i>, <b>false</b>).</li>
+ <li>NOTE: The above Set cannot fail because of the nature of the object returned by <a
+ href="#sec-arraycreate">ArrayCreate</a>.</li>
+ <li>Return <i>array</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">ArrayLiteral</span> <span class="geq">:</span> <code class="t">[</code> <span class="nt">ElementList</span> <code class="t">]</code></div>
+ <ol class="proc">
+ <li>Let <i>array</i> be <a href="#sec-arraycreate">ArrayCreate</a>(0).</li>
+ <li>Let <i>len</i> be the result of performing ArrayAccumulation for <i>ElementList</i> with arguments <i>array</i> and
+ 0.</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>len</i>).</li>
+ <li>Perform <a href="#sec-set-o-p-v-throw">Set</a>(<i>array</i>, <code>"length"</code>, <i>len</i>, <b>false</b>).</li>
+ <li>NOTE: The above Set cannot fail because of the nature of the object returned by <a
+ href="#sec-arraycreate">ArrayCreate</a>.</li>
+ <li>Return <i>array</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">ArrayLiteral</span> <span class="geq">:</span> <code class="t">[</code> <span class="nt">ElementList</span> <code class="t">,</code> <span class="nt">Elision</span><sub class="g-opt">opt</sub> <code class="t">]</code></div>
+ <ol class="proc">
+ <li>Let <i>array</i> be <a href="#sec-arraycreate">ArrayCreate</a>(0).</li>
+ <li>Let <i>len</i> be the result of performing ArrayAccumulation for <i>ElementList</i> with arguments <i>array</i> and
+ 0.</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>len</i>).</li>
+ <li>Let <i>padding</i> be the ElisionWidth of <i>Elision</i>; if <i>Elision</i> is not present, use the numeric value
+ zero.</li>
+ <li>Perform <a href="#sec-set-o-p-v-throw">Set</a>(<i>array</i>, <code>"length"</code>, <a
+ href="#sec-touint32">ToUint32</a>(<i>padding</i>+<i>len</i>), <b>false</b>).</li>
+ <li>NOTE: The above Set cannot fail because of the nature of the object returned by <a
+ href="#sec-arraycreate">ArrayCreate</a>.</li>
+ <li>Return <i>array</i>.</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-object-initializer">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.2.5"><a href="#sec-object-initializer" title="link to this section">12.2.5</a></span>
+ Object Initializer</h1>
+
+ <div class="note">
+ <p><span class="nh">NOTE 1</span> An object initializer is an expression describing the initialization of an Object,
+ written in a form resembling a literal. It is a list of zero or more pairs of property keys and associated values,
+ enclosed in curly brackets. The values need not be literals; they are evaluated each time the object initializer is
+ evaluated.</p>
+ </div>
+
+ <h2>Syntax</h2>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">ObjectLiteral</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">{</code> <code class="t">}</code></div>
+ <div class="rhs"><code class="t">{</code> <span class="nt">PropertyDefinitionList</span><sub class="g-params">[?Yield]</sub> <code class="t">}</code></div>
+ <div class="rhs"><code class="t">{</code> <span class="nt">PropertyDefinitionList</span><sub class="g-params">[?Yield]</sub> <code class="t">,</code> <code class="t">}</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">PropertyDefinitionList</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">PropertyDefinition</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><span class="nt">PropertyDefinitionList</span><sub class="g-params">[?Yield]</sub> <code class="t">,</code> <span class="nt">PropertyDefinition</span><sub class="g-params">[?Yield]</sub></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">PropertyDefinition</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">IdentifierReference</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><span class="nt">CoverInitializedName</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><span class="nt">PropertyName</span><sub class="g-params">[?Yield]</sub> <code class="t">:</code> <span class="nt">AssignmentExpression</span><sub class="g-params">[In, ?Yield]</sub></div>
+ <div class="rhs"><span class="nt">MethodDefinition</span><sub class="g-params">[?Yield]</sub></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">PropertyName</span><sub class="g-params">[Yield,GeneratorParameter]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">LiteralPropertyName</span></div>
+ <div class="rhs"><span class="grhsannot">[+GeneratorParameter]</span> <span class="nt">ComputedPropertyName</span></div>
+ <div class="rhs"><span class="grhsannot">[~GeneratorParameter]</span> <span class="nt">ComputedPropertyName</span><sub class="g-params">[?Yield]</sub></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">LiteralPropertyName</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">IdentifierName</span></div>
+ <div class="rhs"><span class="nt">StringLiteral</span></div>
+ <div class="rhs"><span class="nt">NumericLiteral</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">ComputedPropertyName</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">[</code> <span class="nt">AssignmentExpression</span><sub class="g-params">[In, ?Yield]</sub> <code class="t">]</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">CoverInitializedName</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">IdentifierReference</span><sub class="g-params">[?Yield]</sub> <span class="nt">Initializer</span><sub class="g-params">[In, ?Yield]</sub></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">Initializer</span><sub class="g-params">[In, Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">=</code> <span class="nt">AssignmentExpression</span><sub class="g-params">[?In, ?Yield]</sub></div>
+ </div>
+
+ <div class="note">
+ <p><span class="nh">NOTE 2</span> <i>MethodDefinition</i> is defined in <a href="#sec-method-definitions">14.3</a>.</p>
+ </div>
+
+ <div class="note">
+ <p><span class="nh">NOTE 3</span> In certain contexts, <i>ObjectLiteral</i> is used as a cover grammar for a more
+ restricted secondary grammar. The <i>CoverInitializedName</i> production is necessary to fully cover these secondary
+ grammars. However, use of this production results in an early Syntax Error in normal contexts where an actual
+ <i>ObjectLiteral</i> is expected.</p>
+ </div>
+ </div>
+
+ <section id="sec-object-initializer-static-semantics-early-errors">
+ <h1><span class="secnum" id="sec-12.2.5.1"><a href="#sec-object-initializer-static-semantics-early-errors"
+ title="link to this section">12.2.5.1</a></span> Static Semantics: Early Errors</h1>
+ <div class="gp prod"><span class="nt">PropertyDefinition</span> <span class="geq">:</span> <span class="nt">MethodDefinition</span></div>
+ <ul>
+ <li>It is a Syntax Error if HasDirectSuper of <span class="nt">MethodDefinition</span> is <span style="font-family:
+ Times New Roman"><b><i>true</i></b></span>.</li>
+ </ul>
+
+ <p>In addition to describing an actual object initializer the <span class="nt">ObjectLiteral</span> productions are also
+ used as a cover grammar for <span class="nt">ObjectAssignmentPattern</span> (<a
+ href="#sec-destructuring-assignment">12.14.5</a>). and may be recognized as part of a <span
+ class="nt">CoverParenthesizedExpressionAndArrowParameterList</span>. When <span class="nt">ObjectLiteral</span> appears in
+ a context where <span class="nt">ObjectAssignmentPattern</span> is required the following Early Error rules are <b>not</b>
+ applied. In addition, they are not applied when initially parsing a
+ <var>CoverParenthesizedExpressionAndArrowParameterList.</var></p>
+
+ <div class="gp prod"><span class="nt">PropertyDefinition</span> <span class="geq">:</span> <span class="nt">CoverInitializedName</span></div>
+ <ul>
+ <li>Always throw a Syntax Error if code matches <span style="font-family: Times New Roman">this production.</span></li>
+ </ul>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> This production exists so that <i>ObjectLiteral</i> can serve as a cover grammar for
+ <i>ObjectAssignmentPattern</i> (<a href="#sec-destructuring-assignment">12.14.5</a>). It cannot occur in an actual
+ object initializer.</p>
+ </div>
+ </section>
+
+ <section id="sec-object-initializer-static-semantics-computedpropertycontains">
+ <h1><span class="secnum" id="sec-12.2.5.2"><a href="#sec-object-initializer-static-semantics-computedpropertycontains"
+ title="link to this section">12.2.5.2</a></span> Static Semantics: ComputedPropertyContains</h1>
+
+ <p>With parameter <var>symbol</var>.</p>
+
+ <p>See also: <a href="#sec-method-definitions-static-semantics-computedpropertycontains">14.3.2</a>, <a
+ href="#sec-generator-function-definitions-static-semantics-computedpropertycontains">14.4.3</a>, <a
+ href="#sec-class-definitions-static-semantics-computedpropertycontains">14.5.5</a>.</p>
+
+ <div class="gp prod"><span class="nt">PropertyName</span> <span class="geq">:</span> <span class="nt">LiteralPropertyName</span></div>
+ <ol class="proc">
+ <li>Return <b>false</b>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">PropertyName</span> <span class="geq">:</span> <span class="nt">ComputedPropertyName</span></div>
+ <ol class="proc">
+ <li>Return the result of <i>ComputedPropertyName</i> Contains <i>symbol</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-object-initializer-static-semantics-contains">
+ <h1><span class="secnum" id="sec-12.2.5.3"><a href="#sec-object-initializer-static-semantics-contains"
+ title="link to this section">12.2.5.3</a></span> Static Semantics: Contains</h1>
+
+ <p>With parameter <var>symbol</var>.</p>
+
+ <p>See also: <a href="#sec-static-semantic-rules">5.3</a>, <a
+ href="#sec-static-semantics-static-semantics-contains">12.3.1.1</a>, <a
+ href="#sec-function-definitions-static-semantics-contains">14.1.4</a>, <a
+ href="#sec-arrow-function-definitions-static-semantics-contains">14.2.3</a>, <a
+ href="#sec-generator-function-definitions-static-semantics-contains">14.4.4</a>, <a
+ href="#sec-class-definitions-static-semantics-contains">14.5.4</a>.</p>
+
+ <div class="gp prod"><span class="nt">PropertyDefinition</span> <span class="geq">:</span> <span class="nt">MethodDefinition</span></div>
+ <ol class="proc">
+ <li>If <i>symbol</i> is <i>MethodDefinition</i>, return <b>true</b>.</li>
+ <li>Return the result of ComputedPropertyContains for <i>MethodDefinition</i> with argument <i>symbol</i>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> Static semantic rules that depend upon substructure generally do not look into function
+ definitions.</p>
+ </div>
+
+ <div class="gp prod"><span class="nt">LiteralPropertyName</span> <span class="geq">:</span> <span class="nt">IdentifierName</span></div>
+ <ol class="proc">
+ <li>If <i>symbol</i> is a <i>ReservedWord</i>, return <b>false</b>.</li>
+ <li>If <i>symbol</i> is an <i>Identifier</i> and StringValue of <i>symbol</i> is the same value as the StringValue of
+ <i>IdentifierName</i>, return <b>true</b>;</li>
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-object-initializer-static-semantics-hascomputedpropertykey">
+ <h1><span class="secnum" id="sec-12.2.5.4"><a href="#sec-object-initializer-static-semantics-hascomputedpropertykey"
+ title="link to this section">12.2.5.4</a></span> Static Semantics: HasComputedPropertyKey</h1>
+
+ <p>See also: <a href="#sec-method-definitions-static-semantics-hascomputedpropertykey">14.3.4</a>, <a
+ href="#sec-generator-function-definitions-static-semantics-hascomputedpropertykey">14.4.5</a></p>
+
+ <div class="gp prod"><span class="nt">PropertyDefinitionList</span> <span class="geq">:</span> <span class="nt">PropertyDefinitionList</span> <code class="t">,</code> <span class="nt">PropertyDefinition</span></div>
+ <ol class="proc">
+ <li>If HasComputedPropertyKey of <i>PropertyDefinitionList</i> is <b>true</b>, return <b>true</b>.</li>
+ <li>Return HasComputedPropertyKey of <i>PropertyDefinition</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">PropertyDefinition</span> <span class="geq">:</span> <span class="nt">IdentifierReference</span></div>
+ <ol class="proc">
+ <li>Return <b>false</b>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">PropertyDefinition</span> <span class="geq">:</span> <span class="nt">PropertyName</span> <code class="t">:</code> <span class="nt">AssignmentExpression</span></div>
+ <ol class="proc">
+ <li>Return IsComputedPropertyKey of <i>PropertyName</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-static-semantics-iscomputedpropertykey">
+ <h1><span class="secnum" id="sec-12.2.5.5"><a href="#sec-static-semantics-iscomputedpropertykey"
+ title="link to this section">12.2.5.5</a></span> Static Semantics: IsComputedPropertyKey</h1>
+ <div class="gp prod"><span class="nt">PropertyName</span> <span class="geq">:</span> <span class="nt">LiteralPropertyName</span></div>
+ <ol class="proc">
+ <li>Return <b>false</b>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">PropertyName</span> <span class="geq">:</span> <span class="nt">ComputedPropertyName</span></div>
+ <ol class="proc">
+ <li>Return <b>true</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-object-initializer-static-semantics-propname">
+ <h1><span class="secnum" id="sec-12.2.5.6"><a href="#sec-object-initializer-static-semantics-propname"
+ title="link to this section">12.2.5.6</a></span> Static Semantics: <i>PropName</i></h1>
+
+ <p>See also: <a href="#sec-method-definitions-static-semantics-propname">14.3.6</a>, <a
+ href="#sec-generator-function-definitions-static-semantics-propname">14.4.10</a>, <a
+ href="#sec-class-definitions-static-semantics-propname">14.5.12</a></p>
+
+ <div class="gp prod"><span class="nt">PropertyDefinition</span> <span class="geq">:</span> <span class="nt">IdentifierReference</span></div>
+ <ol class="proc">
+ <li>Return StringValue of <i>IdentifierReference</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">PropertyDefinition</span> <span class="geq">:</span> <span class="nt">PropertyName</span> <code class="t">:</code> <span class="nt">AssignmentExpression</span></div>
+ <ol class="proc">
+ <li>Return PropName of <i>PropertyName</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">LiteralPropertyName</span> <span class="geq">:</span> <span class="nt">IdentifierName</span></div>
+ <ol class="proc">
+ <li>Return StringValue of <i>IdentifierName</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">LiteralPropertyName</span> <span class="geq">:</span> <span class="nt">StringLiteral</span></div>
+ <ol class="proc">
+ <li>Return a String value whose code units are the SV of the <i>StringLiteral</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">LiteralPropertyName</span> <span class="geq">:</span> <span class="nt">NumericLiteral</span></div>
+ <ol class="proc">
+ <li>Let <i>nbr</i> be the result of forming the value of the <i>NumericLiteral</i>.</li>
+ <li>Return <a href="#sec-tostring">ToString</a>(<i>nbr</i>).</li>
+ </ol>
+ <div class="gp prod"><span class="nt">ComputedPropertyName</span> <span class="geq">:</span> <code class="t">[</code> <span class="nt">AssignmentExpression</span> <code class="t">]</code></div>
+ <ol class="proc">
+ <li>Return <span style="font-family: sans-serif">empty</span>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-static-semantics-propertynamelist">
+ <h1><span class="secnum" id="sec-12.2.5.7"><a href="#sec-static-semantics-propertynamelist"
+ title="link to this section">12.2.5.7</a></span> Static Semantics: PropertyNameList</h1>
+ <div class="gp prod"><span class="nt">PropertyDefinitionList</span> <span class="geq">:</span> <span class="nt">PropertyDefinition</span></div>
+ <ol class="proc">
+ <li>If PropName of <i>PropertyDefinition</i> is <span style="font-family: sans-serif">empty</span>, return a new empty
+ <a href="#sec-list-and-record-specification-type">List</a>.</li>
+ <li>Return a new <a href="#sec-list-and-record-specification-type">List</a> containing PropName of
+ <i>PropertyDefinition</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">PropertyDefinitionList</span> <span class="geq">:</span> <span class="nt">PropertyDefinitionList</span> <code class="t">,</code> <span class="nt">PropertyDefinition</span></div>
+ <ol class="proc">
+ <li>Let <i>list</i> be PropertyNameList of <i>PropertyDefinitionList.</i></li>
+ <li>If PropName of <i>PropertyDefinition</i> is <span style="font-family: sans-serif">empty</span>, return
+ <i>list</i>.</li>
+ <li>Append PropName of <i>PropertyDefinition</i> to the end of <i>list</i>.</li>
+ <li>Return <i>list</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-object-initializer-runtime-semantics-evaluation">
+ <h1><span class="secnum" id="sec-12.2.5.8"><a href="#sec-object-initializer-runtime-semantics-evaluation"
+ title="link to this section">12.2.5.8</a></span> Runtime Semantics: Evaluation</h1>
+ <div class="gp prod"><span class="nt">ObjectLiteral</span> <span class="geq">:</span> <code class="t">{</code> <code class="t">}</code></div>
+ <ol class="proc">
+ <li>Return <a href="#sec-objectcreate">ObjectCreate</a>(<span style="font-family:
+ sans-serif">%ObjectPrototype%</span>).</li>
+ </ol>
+
+ <p><span class="prod"><span class="nt">ObjectLiteral</span> <span class="geq">:</span></span><br>&#x9;<code>{</code> <span
+ class="nt">PropertyDefinitionList</span> <code>}</code><span style="font-family: Times New
+ Roman"><i><br></i></span>&#x9;<code>{</code> <span class="nt">PropertyDefinitionList</span> <code>,</code>
+ <code>}</code></p>
+
+ <ol class="proc">
+ <li>Let <i>obj</i> be <a href="#sec-objectcreate">ObjectCreate</a>(%ObjectPrototype%).</li>
+ <li>Let <i>status</i> be the result of performing PropertyDefinitionEvaluation of <i>PropertyDefinitionList</i> with
+ arguments <i>obj</i> and <b>true</b>.</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>status</i>).</li>
+ <li>Return <i>obj</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">LiteralPropertyName</span> <span class="geq">:</span> <span class="nt">IdentifierName</span></div>
+ <ol class="proc">
+ <li>Return StringValue of <i>IdentifierName</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">LiteralPropertyName</span> <span class="geq">:</span> <span class="nt">StringLiteral</span></div>
+ <ol class="proc">
+ <li>Return a String value whose code units are the SV of the <i>StringLiteral</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">LiteralPropertyName</span> <span class="geq">:</span> <span class="nt">NumericLiteral</span></div>
+ <ol class="proc">
+ <li>Let <i>nbr</i> be the result of forming the value of the <i>NumericLiteral</i>.</li>
+ <li>Return <a href="#sec-tostring">ToString</a>(<i>nbr</i>).</li>
+ </ol>
+ <div class="gp prod"><span class="nt">ComputedPropertyName</span> <span class="geq">:</span> <code class="t">[</code> <span class="nt">AssignmentExpression</span> <code class="t">]</code></div>
+ <ol class="proc">
+ <li>Let <i>exprValue</i> be the result of evaluating <i>AssignmentExpression</i>.</li>
+ <li>Let <i>propName</i> be <a href="#sec-getvalue">GetValue</a>(<i>exprValue</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>propName</i>).</li>
+ <li>Return <a href="#sec-topropertykey">ToPropertyKey</a>(<i>propName</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-object-initializer-runtime-semantics-propertydefinitionevaluation">
+ <h1><span class="secnum" id="sec-12.2.5.9"><a
+ href="#sec-object-initializer-runtime-semantics-propertydefinitionevaluation"
+ title="link to this section">12.2.5.9</a></span> Runtime Semantics: PropertyDefinitionEvaluation</h1>
+
+ <p>With parameter <var>object</var> and <span style="font-family: Times New Roman"><i>enumerable</i>.</span></p>
+
+ <p>See also: <a href="#sec-method-definitions-runtime-semantics-propertydefinitionevaluation">14.3.9</a>, <a
+ href="#sec-generator-function-definitions-runtime-semantics-propertydefinitionevaluation">14.4.13</a>, B.3.1</p>
+
+ <div class="gp prod"><span class="nt">PropertyDefinitionList</span> <span class="geq">:</span> <span class="nt">PropertyDefinitionList</span> <code class="t">,</code> <span class="nt">PropertyDefinition</span></div>
+ <ol class="proc">
+ <li>Let <i>status</i> be the result of performing PropertyDefinitionEvaluation of <i>PropertyDefinitionList</i> with
+ arguments <i>object</i> and <i>enumerable</i>.</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>status</i>).</li>
+ <li>Return the result of performing PropertyDefinitionEvaluation of <i>PropertyDefinition</i> with arguments
+ <i>object</i> and <i>enumerable</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">PropertyDefinition</span> <span class="geq">:</span> <span class="nt">IdentifierReference</span></div>
+ <ol class="proc">
+ <li>Let <i>propName</i> be StringValue of <i>IdentifierReference</i>.</li>
+ <li>Let <i>exprValue</i> be the result of evaluating <i>IdentifierReference</i>.</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>exprValue</i>).</li>
+ <li>Let <i>propValue</i> be <a href="#sec-getvalue">GetValue</a>(<i>exprValue</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>propValue</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>enumerable</i> is <b>true</b>.</li>
+ <li>Return <a href="#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a>(<i>object</i>, <i>propName</i>,
+ <i>propValue</i>).</li>
+ </ol>
+ <div class="gp prod"><span class="nt">PropertyDefinition</span> <span class="geq">:</span> <span class="nt">PropertyName</span> <code class="t">:</code> <span class="nt">AssignmentExpression</span></div>
+ <ol class="proc">
+ <li>Let <i>propKey</i> be the result of evaluating <i>PropertyName</i>.</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>propKey</i>).</li>
+ <li>Let <i>exprValueRef</i> be the result of evaluating <i>AssignmentExpression</i>.</li>
+ <li>Let <i>propValue</i> be <a href="#sec-getvalue">GetValue</a>(<i>exprValueRef</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>propValue</i>).</li>
+ <li>If <a href="#sec-isanonymousfunctiondefinition">IsAnonymousFunctionDefinition</a>(<i>AssignmentExpression)</i> is
+ <b>true</b>, then
+ <ol class="block">
+ <li>Let <i>hasNameProperty</i> be <a href="#sec-hasownproperty">HasOwnProperty</a>(<i>propValue</i>,
+ <code>"name"</code>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>hasNameProperty</i>).</li>
+ <li>If <i>hasNameProperty</i> is <b>false</b>, perform <a
+ href="#sec-setfunctionname">SetFunctionName</a>(<i>propValue</i>, <i>propKey</i>).</li>
+ </ol>
+ </li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>enumerable</i> is <b>true</b>.</li>
+ <li>Return <a href="#sec-createdatapropertyorthrow">CreateDataPropertyOrThrow</a>(<i>object</i>, <i>propKey</i>,
+ <i>propValue</i>).</li>
+ </ol>
+
+ <p class="Note"><i>NOTE&#x9;An alternative semantics for this production is given in <a
+ href="#sec-__proto__-property-names-in-object-initializers">B.3.1</a>.</i></p>
+ </section>
+ </section>
+
+ <section id="sec-function-defining-expressions">
+ <h1><span class="secnum" id="sec-12.2.6"><a href="#sec-function-defining-expressions"
+ title="link to this section">12.2.6</a></span> Function Defining Expressions</h1>
+
+ <p>See <a href="#sec-function-definitions">14.1</a> for <span class="prod"><span class="nt">PrimaryExpression</span> <span
+ class="geq">:</span> <span class="nt">FunctionExpression</span></span> .</p>
+
+ <p>See <a href="#sec-generator-function-definitions">14.4</a> for <span class="prod"><span
+ class="nt">PrimaryExpression</span> <span class="geq">:</span> <span class="nt">GeneratorExpression</span></span> .</p>
+
+ <p>See <a href="#sec-class-definitions">14.5</a> for <span class="prod"><span class="nt">PrimaryExpression</span> <span
+ class="geq">:</span> <span class="nt">ClassExpression</span></span> .</p>
+ </section>
+
+ <section id="sec-primary-expression-regular-expression-literals">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.2.7"><a href="#sec-primary-expression-regular-expression-literals"
+ title="link to this section">12.2.7</a></span> Regular Expression Literals</h1>
+ <h2>Syntax</h2>
+
+ <p>See <a href="#sec-literals-string-literals">11.8.4</a>.</p>
+ </div>
+
+ <section id="sec-primary-expression-regular-expression-literals-static-semantics-early-errors">
+ <h1><span class="secnum" id="sec-12.2.7.1"><a
+ href="#sec-primary-expression-regular-expression-literals-static-semantics-early-errors"
+ title="link to this section">12.2.7.1</a></span> Static Semantics: Early Errors</h1>
+ <div class="gp prod"><span class="nt">PrimaryExpression</span> <span class="geq">:</span> <span class="nt">RegularExpressionLiteral</span></div>
+ <ul>
+ <li>
+ <p>It is a Syntax Error if <span style="font-family: Times New Roman">BodyText</span> of <span
+ class="nt">RegularExpressionLiteral</span> cannot be recognized using the goal symbol <span class="nt">Pattern</span>
+ of the ECMAScript RegExp grammar specified in <a href="#sec-patterns">21.2.1</a><var>.</var></p>
+ </li>
+
+ <li>
+ <p>It is a Syntax Error if <span style="font-family: Times New Roman">FlagText</span> of <span
+ class="nt">RegularExpressionLiteral</span> contains any code points other than <code>"g"</code>, <code>"i"</code>,
+ <code>"m"</code>, <code>"u"</code>, or <code>"y"</code>, or if it contains the same code point more than once.</p>
+ </li>
+ </ul>
+ </section>
+
+ <section id="sec-regular-expression-literals-runtime-semantics-evaluation">
+ <h1><span class="secnum" id="sec-12.2.7.2"><a href="#sec-regular-expression-literals-runtime-semantics-evaluation"
+ title="link to this section">12.2.7.2</a></span> Runtime Semantics: Evaluation</h1>
+ <div class="gp prod"><span class="nt">PrimaryExpression</span> <span class="geq">:</span> <span class="nt">RegularExpressionLiteral</span></div>
+ <ol class="proc">
+ <li>Let <i>pattern</i> be the string value consisting of the <a href="#sec-utf16encoding">UTF16Encoding</a> of each code
+ point of BodyText of <i>RegularExpressionLiteral</i>.</li>
+ <li>Let <i>flags</i> be the string value consisting of the <a href="#sec-utf16encoding">UTF16Encoding</a> of each code
+ point of FlagText of <i>RegularExpressionLiteral</i>.</li>
+ <li>Return <a href="#sec-regexpcreate">RegExpCreate</a>(<i>pattern</i>, <i>flags</i>).</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-template-literals">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.2.8"><a href="#sec-template-literals" title="link to this section">12.2.8</a></span>
+ Template Literals</h1>
+ <h2>Syntax</h2>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">TemplateLiteral</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">NoSubstitutionTemplate</span></div>
+ <div class="rhs"><span class="nt">TemplateHead</span> <span class="nt">Expression</span><sub class="g-params">[In, ?Yield]</sub> <span class="nt">TemplateSpans</span><sub class="g-params">[?Yield]</sub></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">TemplateSpans</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">TemplateTail</span></div>
+ <div class="rhs"><span class="nt">TemplateMiddleList</span><sub class="g-params">[?Yield]</sub> <span class="nt">TemplateTail</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">TemplateMiddleList</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">TemplateMiddle</span> <span class="nt">Expression</span><sub class="g-params">[In, ?Yield]</sub></div>
+ <div class="rhs"><span class="nt">TemplateMiddleList</span><sub class="g-params">[?Yield]</sub> <span class="nt">TemplateMiddle</span> <span class="nt">Expression</span><sub class="g-params">[In, ?Yield]</sub></div>
+ </div>
+ </div>
+
+ <section id="sec-static-semantics-templatestrings">
+ <h1><span class="secnum" id="sec-12.2.8.1"><a href="#sec-static-semantics-templatestrings"
+ title="link to this section">12.2.8.1</a></span> Static Semantics: TemplateStrings</h1>
+
+ <p>With parameter <var>raw</var>.</p>
+
+ <div class="gp prod"><span class="nt">TemplateLiteral</span> <span class="geq">:</span> <span class="nt">NoSubstitutionTemplate</span></div>
+ <ol class="proc">
+ <li>If <i>raw</i> is <b>false</b>, then
+ <ol class="block">
+ <li>Let <i>string</i> be the TV of <i>NoSubstitutionTemplate</i>.</li>
+ </ol>
+ </li>
+ <li>Else,
+ <ol class="block">
+ <li>Let <i>string</i> be the TRV of <i>NoSubstitutionTemplate</i>.</li>
+ </ol>
+ </li>
+ <li>Return a <a href="#sec-list-and-record-specification-type">List</a> containing the single element,
+ <i>string</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">TemplateLiteral</span> <span class="geq">:</span> <span class="nt">TemplateHead</span> <span class="nt">Expression</span> <span class="nt">TemplateSpans</span></div>
+ <ol class="proc">
+ <li>If <i>raw</i> is <b>false</b>, then
+ <ol class="block">
+ <li>Let <i>head</i> be the TV of <i>TemplateHead</i>.</li>
+ </ol>
+ </li>
+ <li>Else,
+ <ol class="block">
+ <li>Let <i>head</i> be the TRV of <i>TemplateHead</i>.</li>
+ </ol>
+ </li>
+ <li>Let <i>tail</i> be TemplateStrings of <i>TemplateSpans</i> with argument <i>raw</i>.</li>
+ <li>Return a <a href="#sec-list-and-record-specification-type">List</a> containing <i>head</i> followed by the element,
+ in order of <i>tail</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">TemplateSpans</span> <span class="geq">:</span> <span class="nt">TemplateTail</span></div>
+ <ol class="proc">
+ <li>If <i>raw</i> is <b>false</b>, then
+ <ol class="block">
+ <li>Let <i>tail</i> be the TV of <i>TemplateTail</i>.</li>
+ </ol>
+ </li>
+ <li>Else,
+ <ol class="block">
+ <li>Let <i>tail</i> be the TRV of <i>TemplateTail</i>.</li>
+ </ol>
+ </li>
+ <li>Return a <a href="#sec-list-and-record-specification-type">List</a> containing the single element, <i>tail</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">TemplateSpans</span> <span class="geq">:</span> <span class="nt">TemplateMiddleList</span> <span class="nt">TemplateTail</span></div>
+ <ol class="proc">
+ <li>Let <i>middle</i> be TemplateStrings of <i>TemplateMiddleList</i> with argument <i>raw</i>.</li>
+ <li>If <i>raw</i> is <b>false</b>, then
+ <ol class="block">
+ <li>Let <i>tail</i> be the TV of <i>TemplateTail</i>.</li>
+ </ol>
+ </li>
+ <li>Else,
+ <ol class="block">
+ <li>Let <i>tail</i> be the TRV of <i>TemplateTail</i>.</li>
+ </ol>
+ </li>
+ <li>Return a <a href="#sec-list-and-record-specification-type">List</a> containing the elements, in order, of
+ <i>middle</i> followed by <i>tail</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">TemplateMiddleList</span> <span class="geq">:</span> <span class="nt">TemplateMiddle</span> <span class="nt">Expression</span></div>
+ <ol class="proc">
+ <li>If <i>raw</i> is <b>false</b>, then
+ <ol class="block">
+ <li>Let <i>string</i> be the TV of <i>TemplateMiddle</i>.</li>
+ </ol>
+ </li>
+ <li>Else,
+ <ol class="block">
+ <li>Let <i>string</i> be the TRV of <i>TemplateMiddle</i>.</li>
+ </ol>
+ </li>
+ <li>Return a <a href="#sec-list-and-record-specification-type">List</a> containing the single element,
+ <i>string</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">TemplateMiddleList</span> <span class="geq">:</span> <span class="nt">TemplateMiddleList</span> <span class="nt">TemplateMiddle</span> <span class="nt">Expression</span></div>
+ <ol class="proc">
+ <li>Let <i>front</i> be TemplateStrings of <i>TemplateMiddleList</i> with argument <i>raw</i>.</li>
+ <li>If <i>raw</i> is <b>false</b>, then
+ <ol class="block">
+ <li>Let <i>last</i> be the TV of <i>TemplateMiddle</i>.</li>
+ </ol>
+ </li>
+ <li>Else,
+ <ol class="block">
+ <li>Let <i>last</i> be the TRV of <i>TemplateMiddle</i>.</li>
+ </ol>
+ </li>
+ <li>Append <i>last</i> as the last element of the <a href="#sec-list-and-record-specification-type">List</a>
+ <i>front</i>.</li>
+ <li>Return <i>front</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-template-literals-runtime-semantics-argumentlistevaluation">
+ <h1><span class="secnum" id="sec-12.2.8.2"><a href="#sec-template-literals-runtime-semantics-argumentlistevaluation"
+ title="link to this section">12.2.8.2</a></span> <span style="font-family: sans-serif">Runtime Semantics:</span>
+ ArgumentListEvaluation</h1>
+
+ <p>See also: <a href="#sec-argument-lists-runtime-semantics-argumentlistevaluation">12.3.6.1</a></p>
+
+ <div class="gp prod"><span class="nt">TemplateLiteral</span> <span class="geq">:</span> <span class="nt">NoSubstitutionTemplate</span></div>
+ <ol class="proc">
+ <li>Let <i>templateLiteral</i> be this <i>TemplateLiteral.</i></li>
+ <li>Let <i>siteObj</i> be <a href="#sec-gettemplateobject">GetTemplateObject</a>(<i>templateLiteral</i>).</li>
+ <li>Return a <a href="#sec-list-and-record-specification-type">List</a> containing the one element which is
+ <i>siteObj</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">TemplateLiteral</span> <span class="geq">:</span> <span class="nt">TemplateHead</span> <span class="nt">Expression</span> <span class="nt">TemplateSpans</span></div>
+ <ol class="proc">
+ <li>Let <i>templateLiteral</i> be this <i>TemplateLiteral.</i></li>
+ <li>Let <i>siteObj</i> be <a href="#sec-gettemplateobject">GetTemplateObject</a>(<i>templateLiteral</i>).</li>
+ <li>Let <i>firstSub</i> be the result of evaluating <i>Expression</i>.</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>firstSub</i>).</li>
+ <li>Let <i>restSub</i> be SubstitutionEvaluation of <i>TemplateSpans</i>.</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>restSub</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>restSub</i> is a <a
+ href="#sec-list-and-record-specification-type">List</a>.</li>
+ <li>Return a <a href="#sec-list-and-record-specification-type">List</a> whose first element is <i>siteObj</i>, whose
+ second elements is <i>firstSub</i>, and whose subsequent elements are the elements of <i>restSub</i>, in order.
+ <i>restSub</i> may contain no elements.</li>
+ </ol>
+ </section>
+
+ <section id="sec-gettemplateobject">
+ <h1><span class="secnum" id="sec-12.2.8.3"><a href="#sec-gettemplateobject"
+ title="link to this section">12.2.8.3</a></span> Runtime Semantics: GetTemplateObject ( templateLiteral )</h1>
+
+ <p>The abstract operation <span style="font-family: Times New Roman">GetTemplateObject</span> is called with a grammar
+ production, <var>templateLiteral</var>, as an argument. It performs the following steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>rawStrings</i> be TemplateStrings of <i>templateLiteral</i> with argument <b>true</b>.</li>
+ <li>Let <i>ctx</i> be <a href="#sec-execution-contexts">the running execution context</a>.</li>
+ <li>Let <i>realm</i> be the <i>ctx</i>&rsquo;s <a href="#sec-code-realms">Realm</a>.</li>
+ <li>Let <i>templateRegistry</i> be <i>realm</i>.[[templateMap]].</li>
+ <li>For each element <i>e</i> of <i>templateRegistry</i>, do
+ <ol class="block">
+ <li>If <i>e</i>.[[strings]] and <i>rawStrings</i> contain the same values in the same order, then
+ <ol class="block">
+ <li>Return <i>e.</i>[[array]].</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Let <i>cookedStrings</i> be TemplateStrings of <i>templateLiteral</i> with argument <b>false</b>.</li>
+ <li>Let <i>count</i> be the number of elements in the <a href="#sec-list-and-record-specification-type">List</a>
+ <i>cookedStrings</i>.</li>
+ <li>Let <i>template</i> be <a href="#sec-arraycreate">ArrayCreate</a>(<i>count</i>).</li>
+ <li>Let <i>rawObj</i> be <a href="#sec-arraycreate">ArrayCreate</a>(<i>count</i>).</li>
+ <li>Let <i>index</i> be 0.</li>
+ <li>Repeat while <i>index</i> &lt; <i>count</i>
+ <ol class="block">
+ <li>Let <i>prop</i> be <a href="#sec-tostring">ToString</a>(<i>index</i>).</li>
+ <li>Let <i>cookedValue</i> be the string value <i>cookedStrings</i>[<i>index</i>].</li>
+ <li><a href="#sec-call">Call</a> <i>template</i>.[[DefineOwnProperty]](<i>prop</i>, PropertyDescriptor{[[Value]]:
+ <i>cookedValue</i>, [[Enumerable]]: <b>true</b>, [[Writable]]: <b>false</b>, [[Configurable]]:
+ <b>false</b>})<i>.</i></li>
+ <li>Let <i>rawValue</i> be the string value <i>rawStrings</i>[<i>index</i>].</li>
+ <li><a href="#sec-call">Call</a> <i>rawObj</i>.[[DefineOwnProperty]](<i>prop</i>, PropertyDescriptor{[[Value]]:
+ <i>rawValue</i>, [[Enumerable]]: <b>true</b>, [[Writable]]: <b>false</b>, [[Configurable]]:
+ <b>false</b>})<i>.</i></li>
+ <li>Let <i>index</i> be <i>index</i>+1.</li>
+ </ol>
+ </li>
+ <li>Perform <a href="#sec-setintegritylevel">SetIntegrityLevel</a>(<i>rawObj</i>, <code>"frozen"</code>).</li>
+ <li><a href="#sec-call">Call</a> <i>template</i>.[[DefineOwnProperty]](<code>"raw"</code>, PropertyDescriptor{[[Value]]:
+ <i>rawObj</i>, [[Writable]]: <b>false</b>, [[Enumerable]]: <b>false</b>, [[Configurable]]:
+ <b>false</b>})<i>.</i></li>
+ <li>Perform <a href="#sec-setintegritylevel">SetIntegrityLevel</a>(<i>template</i>, <code>"frozen"</code>).</li>
+ <li>Append the Record{[[strings]]: <i>rawStrings</i>, [[array]]: <i>template</i>} to <i>templateRegistry</i>.</li>
+ <li>Return <i>template</i>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE 1</span> The creation of a template object cannot result in an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a>.</p>
+ </div>
+
+ <div class="note">
+ <p><span class="nh">NOTE 2</span> Each <i>TemplateLiteral</i> in the program code of a <a
+ href="#sec-code-realms">Realm</a> is associated with a unique template object that is used in the evaluation of tagged
+ Templates (<a href="#sec-template-literals-runtime-semantics-evaluation">12.2.8.5</a>). The template objects are frozen
+ and the same template object is used each time a specific tagged Template is evaluated. Whether template objects are
+ created lazily upon first evaluation of the <i>TemplateLiteral</i> or eagerly prior to first evaluation is an
+ implementation choice that is not observable to ECMAScript code.</p>
+ </div>
+
+ <div class="note">
+ <p><span class="nh">NOTE 3</span> Future editions of this specification may define additional non-enumerable properties
+ of template objects.</p>
+ </div>
+ </section>
+
+ <section id="sec-runtime-semantics-substitutionevaluation">
+ <h1><span class="secnum" id="sec-12.2.8.4"><a href="#sec-runtime-semantics-substitutionevaluation"
+ title="link to this section">12.2.8.4</a></span> Runtime Semantics: SubstitutionEvaluation</h1>
+ <div class="gp prod"><span class="nt">TemplateSpans</span> <span class="geq">:</span> <span class="nt">TemplateTail</span></div>
+ <ol class="proc">
+ <li>Return an empty <a href="#sec-list-and-record-specification-type">List</a>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">TemplateSpans</span> <span class="geq">:</span> <span class="nt">TemplateMiddleList</span> <span class="nt">TemplateTail</span></div>
+ <ol class="proc">
+ <li>Return the result of SubstitutionEvaluation of <i>TemplateMiddleList</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">TemplateMiddleList</span> <span class="geq">:</span> <span class="nt">TemplateMiddle</span> <span class="nt">Expression</span></div>
+ <ol class="proc">
+ <li>Let <i>sub</i> be the result of evaluating <i>Expression</i>.</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>sub</i>).</li>
+ <li>Return a <a href="#sec-list-and-record-specification-type">List</a> containing only <i>sub</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">TemplateMiddleList</span> <span class="geq">:</span> <span class="nt">TemplateMiddleList</span> <span class="nt">TemplateMiddle</span> <span class="nt">Expression</span></div>
+ <ol class="proc">
+ <li>Let <i>preceding</i> be the result of SubstitutionEvaluation of <i>TemplateMiddleList</i> .</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>preceding</i>).</li>
+ <li>Let <i>next</i> be the result of evaluating <i>Expression</i>.</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>next</i>).</li>
+ <li>Append <i>next</i> as the last element of the <a href="#sec-list-and-record-specification-type">List</a>
+ <i>preceding</i>.</li>
+ <li>Return <i>preceding</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-template-literals-runtime-semantics-evaluation">
+ <h1><span class="secnum" id="sec-12.2.8.5"><a href="#sec-template-literals-runtime-semantics-evaluation"
+ title="link to this section">12.2.8.5</a></span> Runtime Semantics: Evaluation</h1>
+ <div class="gp prod"><span class="nt">TemplateLiteral</span> <span class="geq">:</span> <span class="nt">NoSubstitutionTemplate</span></div>
+ <ol class="proc">
+ <li>Return the string value whose code units are the elements of the TV of <i>NoSubstitutionTemplate</i> as defined in
+ <a href="#sec-template-literal-lexical-components">11.8.6</a>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">TemplateLiteral</span> <span class="geq">:</span> <span class="nt">TemplateHead</span> <span class="nt">Expression</span> <span class="nt">TemplateSpans</span></div>
+ <ol class="proc">
+ <li>Let <i>head</i> be the TV of <i>TemplateHead</i> as defined in <a
+ href="#sec-template-literal-lexical-components">11.8.6</a>.</li>
+ <li>Let <i>sub</i> be the result of evaluating <i>Expression</i>.</li>
+ <li>Let <i>middle</i> be <a href="#sec-tostring">ToString</a>(<i>sub</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>middle</i>).</li>
+ <li>Let <i>tail</i> be the result of evaluating <i>TemplateSpans</i> .</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>tail</i>).</li>
+ <li>Return the string value whose code units are the elements of <i>head</i> followed by the elements of <i>middle</i>
+ followed by the elements of <i>tail</i>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> The string conversion semantics applied to the <i>Expression</i> value are like <code><a
+ href="#sec-string.prototype.concat">String.prototype.concat</a></code> rather than the <code>+</code> operator.</p>
+ </div>
+
+ <div class="gp prod"><span class="nt">TemplateSpans</span> <span class="geq">:</span> <span class="nt">TemplateTail</span></div>
+ <ol class="proc">
+ <li>Let <i>tail</i> be the TV of <i>TemplateTail</i> as defined in <a
+ href="#sec-template-literal-lexical-components">11.8.6</a>.</li>
+ <li>Return the string consisting of the code units of <i>tail</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">TemplateSpans</span> <span class="geq">:</span> <span class="nt">TemplateMiddleList</span> <span class="nt">TemplateTail</span></div>
+ <ol class="proc">
+ <li>Let <i>head</i> be the result of evaluating <i>TemplateMiddleList</i>.</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>head</i>).</li>
+ <li>Let <i>tail</i> be the TV of <i>TemplateTail</i> as defined in <a
+ href="#sec-template-literal-lexical-components">11.8.6</a>.</li>
+ <li>Return the string whose code units are the elements of <i>head</i> followed by the elements of <i>tail</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">TemplateMiddleList</span> <span class="geq">:</span> <span class="nt">TemplateMiddle</span> <span class="nt">Expression</span></div>
+ <ol class="proc">
+ <li>Let <i>head</i> be the TV of <i>TemplateMiddle</i> as defined in <a
+ href="#sec-template-literal-lexical-components">11.8.6</a>.</li>
+ <li>Let <i>sub</i> be the result of evaluating <i>Expression</i>.</li>
+ <li>Let <i>middle</i> be <a href="#sec-tostring">ToString</a>(<i>sub</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>middle</i>).</li>
+ <li>Return the sequence of code units consisting of the code units of <i>head</i> followed by the elements of
+ <i>middle</i>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> The string conversion semantics applied to the <i>Expression</i> value are like <code><a
+ href="#sec-string.prototype.concat">String.prototype.concat</a></code> rather than the <code>+</code> operator.</p>
+ </div>
+
+ <div class="gp prod"><span class="nt">TemplateMiddleList</span> <span class="geq">:</span> <span class="nt">TemplateMiddleList</span> <span class="nt">TemplateMiddle</span> <span class="nt">Expression</span></div>
+ <ol class="proc">
+ <li>Let <i>rest</i> be the result of evaluating <i>TemplateMiddleList</i> .</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>rest</i>).</li>
+ <li>Let <i>middle</i> be the TV of <i>TemplateMiddle</i> as defined in <a
+ href="#sec-template-literal-lexical-components">11.8.6</a>.</li>
+ <li>Let <i>sub</i> be the result of evaluating <i>Expression</i>.</li>
+ <li>Let <i>last</i> be <a href="#sec-tostring">ToString</a>(<i>sub</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>last</i>).</li>
+ <li>Return the sequence of code units consisting of the elements of <i>rest</i> followed by the code units of
+ <i>middle</i> followed by the elements of <i>last</i>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> The string conversion semantics applied to the <i>Expression</i> value are like <code><a
+ href="#sec-string.prototype.concat">String.prototype.concat</a></code> rather than the <code>+</code> operator.</p>
+ </div>
+ </section>
+ </section>
+
+ <section id="sec-grouping-operator">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.2.9"><a href="#sec-grouping-operator" title="link to this section">12.2.9</a></span>
+ The Grouping Operator</h1>
+ </div>
+
+ <section id="sec-grouping-operator-static-semantics-early-errors">
+ <h1><span class="secnum" id="sec-12.2.9.1"><a href="#sec-grouping-operator-static-semantics-early-errors"
+ title="link to this section">12.2.9.1</a></span> Static Semantics: Early Errors</h1>
+ <div class="gp prod"><span class="nt">PrimaryExpression</span> <span class="geq">:</span> <span class="nt">CoverParenthesizedExpressionAndArrowParameterList</span></div>
+ <ul>
+ <li>
+ <p>It is a Syntax Error if the lexical token sequence matched by <span
+ class="nt">CoverParenthesizedExpressionAndArrowParameterList</span> cannot be parsed with no tokens left over using
+ <span class="nt">ParenthesizedExpression</span> as the goal symbol.</p>
+ </li>
+
+ <li>
+ <p>All Early Errors rules for <span class="nt">ParenthesizedExpression</span> and its derived productions also apply
+ to <span style="font-family: Times New Roman">CoveredParenthesizedExpression</span> of <span
+ class="nt">CoverParenthesizedExpressionAndArrowParameterList</span>.</p>
+ </li>
+ </ul>
+ </section>
+
+ <section id="sec-grouping-operator-static-semantics-isfunctiondefinition">
+ <h1><span class="secnum" id="sec-12.2.9.2"><a href="#sec-grouping-operator-static-semantics-isfunctiondefinition"
+ title="link to this section">12.2.9.2</a></span> Static Semantics: IsFunctionDefinition</h1>
+
+ <p>See also: <a href="#sec-semantics-static-semantics-isfunctiondefinition">12.2.0.2</a>, <a
+ href="#sec-static-semantics-static-semantics-isfunctiondefinition">12.3.1.2</a>, <a
+ href="#sec-postfix-expressions-static-semantics-isfunctiondefinition">12.4.2</a>, <a
+ href="#sec-unary-operators-static-semantics-isfunctiondefinition">12.5.2</a>, <a
+ href="#sec-multiplicative-operators-static-semantics-isfunctiondefinition">12.6.1</a>, <a
+ href="#sec-additive-operators-static-semantics-isfunctiondefinition">12.7.1</a>, <a
+ href="#sec-bitwise-shift-operators-static-semantics-isfunctiondefinition">12.8.1</a>, <a
+ href="#sec-relational-operators-static-semantics-isfunctiondefinition">12.9.1</a>, <a
+ href="#sec-equality-operators-static-semantics-isfunctiondefinition">12.10.1</a>, <a
+ href="#sec-binary-bitwise-operators-static-semantics-isfunctiondefinition">12.11.1</a>, <a
+ href="#sec-binary-logical-operators-static-semantics-isfunctiondefinition">12.12.1</a>, <a
+ href="#sec-conditional-operator-static-semantics-isfunctiondefinition">12.13.1</a>, <a
+ href="#sec-assignment-operators-static-semantics-isfunctiondefinition">12.14.2</a>, <a
+ href="#sec-comma-operator-static-semantics-isfunctiondefinition">12.15.1</a>, <a
+ href="#sec-function-definitions-static-semantics-isfunctiondefinition">14.1.11</a>, <a
+ href="#sec-generator-function-definitions-static-semantics-isfunctiondefinition">14.4.9</a>, <a
+ href="#sec-class-definitions-static-semantics-isfunctiondefinition">14.5.8</a>.</p>
+
+ <div class="gp prod"><span class="nt">ParenthesizedExpression</span> <span class="geq">:</span> <code class="t">(</code> <span class="nt">Expression</span> <code class="t">)</code></div>
+ <ol class="proc">
+ <li>Return IsFunctionDefinition of <i>Expression</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-grouping-operator-static-semantics-isvalidsimpleassignmenttarget">
+ <h1><span class="secnum" id="sec-12.2.9.3"><a href="#sec-grouping-operator-static-semantics-isvalidsimpleassignmenttarget"
+ title="link to this section">12.2.9.3</a></span> Static Semantics: IsValidSimpleAssignmentTarget</h1>
+
+ <p>See also: <a href="#sec-identifiers-static-semantics-isvalidsimpleassignmenttarget">12.1.3</a>, <a
+ href="#sec-semantics-static-semantics-isvalidsimpleassignmenttarget">12.2.0.4</a>, <a
+ href="#sec-static-semantics-static-semantics-isvalidsimpleassignmenttarget">12.3.1.5</a>, <a
+ href="#sec-postfix-expressions-static-semantics-isvalidsimpleassignmenttarget">12.4.3</a>, <a
+ href="#sec-unary-operators-static-semantics-isvalidsimpleassignmenttarget">12.5.3</a>, <a
+ href="#sec-multiplicative-operators-static-semantics-isvalidsimpleassignmenttarget">12.6.2</a>, <a
+ href="#sec-additive-operators-static-semantics-isvalidsimpleassignmenttarget">12.7.2</a>, <a
+ href="#sec-bitwise-shift-operators-static-semantics-isvalidsimpleassignmenttarget">12.8.2</a>, <a
+ href="#sec-relational-operators-static-semantics-isvalidsimpleassignmenttarget">12.9.2</a>, <a
+ href="#sec-equality-operators-static-semantics-isvalidsimpleassignmenttarget">12.10.2</a>, <a
+ href="#sec-binary-bitwise-operators-static-semantics-isvalidsimpleassignmenttarget">12.11.2</a>, <a
+ href="#sec-binary-logical-operators-static-semantics-isvalidsimpleassignmenttarget">12.12.2</a>, <a
+ href="#sec-conditional-operator-static-semantics-isvalidsimpleassignmenttarget">12.13.2</a>, <a
+ href="#sec-assignment-operators-static-semantics-isvalidsimpleassignmenttarget">12.14.3</a>, <a
+ href="#sec-comma-operator-static-semantics-isvalidsimpleassignmenttarget">12.15.2</a>.</p>
+
+ <div class="gp prod"><span class="nt">ParenthesizedExpression</span> <span class="geq">:</span> <code class="t">(</code> <span class="nt">Expression</span> <code class="t">)</code></div>
+ <ol class="proc">
+ <li>Return IsValidSimpleAssignmentTarget of <i>Expression</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-grouping-operator-runtime-semantics-evaluation">
+ <h1><span class="secnum" id="sec-12.2.9.4"><a href="#sec-grouping-operator-runtime-semantics-evaluation"
+ title="link to this section">12.2.9.4</a></span> Runtime Semantics: Evaluation</h1>
+ <div class="gp prod"><span class="nt">PrimaryExpression</span> <span class="geq">:</span> <span class="nt">CoverParenthesizedExpressionAndArrowParameterList</span></div>
+ <ol class="proc">
+ <li>Let <i>expr</i> be CoveredParenthesizedExpression of <i>CoverParenthesizedExpressionAndArrowParameterList</i>.</li>
+ <li>Return the result of evaluating <i>expr</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">ParenthesizedExpression</span> <span class="geq">:</span> <code class="t">(</code> <span class="nt">Expression</span> <code class="t">)</code></div>
+ <ol class="proc">
+ <li>Return the result of evaluating <i>Expression</i>. This may be of type <a
+ href="#sec-reference-specification-type">Reference</a>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> This algorithm does not apply <a href="#sec-getvalue">GetValue</a> to the result of
+ evaluating <i>Expression</i>. The principal motivation for this is so that operators such as <code>delete</code> and
+ <code>typeof</code> may be applied to parenthesized expressions.</p>
+ </div>
+ </section>
+ </section>
+ </section>
+
+ <section id="sec-left-hand-side-expressions">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.3"><a href="#sec-left-hand-side-expressions"
+ title="link to this section">12.3</a></span> Left-Hand-Side Expressions</h1>
+ <h2>Syntax</h2>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">MemberExpression</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">PrimaryExpression</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><span class="nt">MemberExpression</span><sub class="g-params">[?Yield]</sub> <code class="t">[</code> <span class="nt">Expression</span><sub class="g-params">[In, ?Yield]</sub> <code class="t">]</code></div>
+ <div class="rhs"><span class="nt">MemberExpression</span><sub class="g-params">[?Yield]</sub> <code class="t">.</code> <span class="nt">IdentifierName</span></div>
+ <div class="rhs"><span class="nt">MemberExpression</span><sub class="g-params">[?Yield]</sub> <span class="nt">TemplateLiteral</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><span class="nt">SuperProperty</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><span class="nt">MetaProperty</span></div>
+ <div class="rhs"><code class="t">new</code> <span class="nt">MemberExpression</span><sub class="g-params">[?Yield]</sub> <span class="nt">Arguments</span><sub class="g-params">[?Yield]</sub></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">SuperProperty</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">super</code> <code class="t">[</code> <span class="nt">Expression</span><sub class="g-params">[In, ?Yield]</sub> <code class="t">]</code></div>
+ <div class="rhs"><code class="t">super</code> <code class="t">.</code> <span class="nt">IdentifierName</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">MetaProperty</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">NewTarget</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">NewTarget</span> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">new</code> <code class="t">.</code> <code class="t">target</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">NewExpression</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">MemberExpression</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><code class="t">new</code> <span class="nt">NewExpression</span><sub class="g-params">[?Yield]</sub></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">CallExpression</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">MemberExpression</span><sub class="g-params">[?Yield]</sub> <span class="nt">Arguments</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><span class="nt">SuperCall</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><span class="nt">CallExpression</span><sub class="g-params">[?Yield]</sub> <span class="nt">Arguments</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><span class="nt">CallExpression</span><sub class="g-params">[?Yield]</sub> <code class="t">[</code> <span class="nt">Expression</span><sub class="g-params">[In, ?Yield]</sub> <code class="t">]</code></div>
+ <div class="rhs"><span class="nt">CallExpression</span><sub class="g-params">[?Yield]</sub> <code class="t">.</code> <span class="nt">IdentifierName</span></div>
+ <div class="rhs"><span class="nt">CallExpression</span><sub class="g-params">[?Yield]</sub> <span class="nt">TemplateLiteral</span><sub class="g-params">[?Yield]</sub></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">SuperCall</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">super</code> <span class="nt">Arguments</span><sub class="g-params">[?Yield]</sub></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">Arguments</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">(</code> <code class="t">)</code></div>
+ <div class="rhs"><code class="t">(</code> <span class="nt">ArgumentList</span><sub class="g-params">[?Yield]</sub> <code class="t">)</code></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">ArgumentList</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">AssignmentExpression</span><sub class="g-params">[In, ?Yield]</sub></div>
+ <div class="rhs"><code class="t">...</code> <span class="nt">AssignmentExpression</span><sub class="g-params">[In, ?Yield]</sub></div>
+ <div class="rhs"><span class="nt">ArgumentList</span><sub class="g-params">[?Yield]</sub> <code class="t">,</code> <span class="nt">AssignmentExpression</span><sub class="g-params">[In, ?Yield]</sub></div>
+ <div class="rhs"><span class="nt">ArgumentList</span><sub class="g-params">[?Yield]</sub> <code class="t">,</code> <code class="t">...</code> <span class="nt">AssignmentExpression</span><sub class="g-params">[In, ?Yield]</sub></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">LeftHandSideExpression</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">NewExpression</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><span class="nt">CallExpression</span><sub class="g-params">[?Yield]</sub></div>
+ </div>
+ </div>
+
+ <section id="sec-static-semantics">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.3.1"><a href="#sec-static-semantics" title="link to this section">12.3.1</a></span>
+ Static Semantics</h1>
+ </div>
+
+ <section id="sec-static-semantics-static-semantics-contains">
+ <h1><span class="secnum" id="sec-12.3.1.1"><a href="#sec-static-semantics-static-semantics-contains"
+ title="link to this section">12.3.1.1</a></span> Static Semantics: Contains</h1>
+
+ <p>With parameter <var>symbol</var>.</p>
+
+ <p>See also: <a href="#sec-static-semantic-rules">5.3</a>, <a
+ href="#sec-object-initializer-static-semantics-contains">12.2.5.3</a>, <a
+ href="#sec-function-definitions-static-semantics-contains">14.1.4</a>, <a
+ href="#sec-arrow-function-definitions-static-semantics-contains">14.2.3</a>, <a
+ href="#sec-generator-function-definitions-static-semantics-contains">14.4.4</a>, <a
+ href="#sec-class-definitions-static-semantics-contains">14.5.4</a></p>
+
+ <div class="gp prod"><span class="nt">MemberExpression</span> <span class="geq">:</span> <span class="nt">MemberExpression</span> <code class="t">.</code> <span class="nt">IdentifierName</span></div>
+ <ol class="proc">
+ <li>If <i>MemberExpression</i> Contains <i>symbol</i> is <b>true</b>, return <b>true</b>.</li>
+ <li>If <i>symbol</i> is a <i>ReservedWord</i>, return <b>false</b>.</li>
+ <li>If <i>symbol</i> is an <i>Identifier</i> and StringValue of <i>symbol</i> is the same value as the StringValue of
+ <i>IdentifierName</i>, return <b>true</b>;</li>
+ <li>Return <b>false</b>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">SuperProperty</span> <span class="geq">:</span> <code class="t">super</code> <code class="t">.</code> <span class="nt">IdentifierName</span></div>
+ <ol class="proc">
+ <li>If <i>symbol</i> is the <i>ReservedWord</i> <code>super</code>, return <b>true</b>.</li>
+ <li>If <i>symbol</i> is a <i>ReservedWord</i>, return <b>false</b>.</li>
+ <li>If <i>symbol</i> is an <i>Identifier</i> and StringValue of <i>symbol</i> is the same value as the StringValue of
+ <i>IdentifierName</i>, return <b>true</b>;</li>
+ <li>Return <b>false</b>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">CallExpression</span> <span class="geq">:</span> <span class="nt">CallExpression</span> <code class="t">.</code> <span class="nt">IdentifierName</span></div>
+ <ol class="proc">
+ <li>If <i>CallExpression</i> Contains <i>symbol</i> is <b>true</b>, return <b>true</b>.</li>
+ <li>If <i>symbol</i> is a <i>ReservedWord</i>, return <b>false</b>.</li>
+ <li>If <i>symbol</i> is an <i>Identifier</i> and StringValue of <i>symbol</i> is the same value as the StringValue of
+ <i>IdentifierName</i>, return <b>true</b>;</li>
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-static-semantics-static-semantics-isfunctiondefinition">
+ <h1><span class="secnum" id="sec-12.3.1.2"><a href="#sec-static-semantics-static-semantics-isfunctiondefinition"
+ title="link to this section">12.3.1.2</a></span> Static Semantics: IsFunctionDefinition</h1>
+
+ <p>See also: <a href="#sec-semantics-static-semantics-isfunctiondefinition">12.2.0.2</a>, <a
+ href="#sec-grouping-operator-static-semantics-isfunctiondefinition">12.2.9.2</a>, <a
+ href="#sec-postfix-expressions-static-semantics-isfunctiondefinition">12.4.2</a>, <a
+ href="#sec-unary-operators-static-semantics-isfunctiondefinition">12.5.2</a>, <a
+ href="#sec-multiplicative-operators-static-semantics-isfunctiondefinition">12.6.1</a>, <a
+ href="#sec-additive-operators-static-semantics-isfunctiondefinition">12.7.1</a>, <a
+ href="#sec-bitwise-shift-operators-static-semantics-isfunctiondefinition">12.8.1</a>, <a
+ href="#sec-relational-operators-static-semantics-isfunctiondefinition">12.9.1</a>, <a
+ href="#sec-equality-operators-static-semantics-isfunctiondefinition">12.10.1</a>, <a
+ href="#sec-binary-bitwise-operators-static-semantics-isfunctiondefinition">12.11.1</a>, <a
+ href="#sec-binary-logical-operators-static-semantics-isfunctiondefinition">12.12.1</a>, <a
+ href="#sec-conditional-operator-static-semantics-isfunctiondefinition">12.13.1</a>, <a
+ href="#sec-assignment-operators-static-semantics-isfunctiondefinition">12.14.2</a>, <a
+ href="#sec-comma-operator-static-semantics-isfunctiondefinition">12.15.1</a>, <a
+ href="#sec-function-definitions-static-semantics-isfunctiondefinition">14.1.11</a>, <a
+ href="#sec-generator-function-definitions-static-semantics-isfunctiondefinition">14.4.9</a>, <a
+ href="#sec-class-definitions-static-semantics-isfunctiondefinition">14.5.8</a>.</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">MemberExpression</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">MemberExpression</span> <code class="t">[</code> <span class="nt">Expression</span> <code class="t">]</code></div>
+ <div class="rhs"><span class="nt">MemberExpression</span> <code class="t">.</code> <span class="nt">IdentifierName</span></div>
+ <div class="rhs"><span class="nt">MemberExpression</span> <span class="nt">TemplateLiteral</span></div>
+ <div class="rhs"><span class="nt">SuperProperty</span></div>
+ <div class="rhs"><span class="nt">MetaProperty</span></div>
+ <div class="rhs"><code class="t">new</code> <span class="nt">MemberExpression</span> <span class="nt">Arguments</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">NewExpression</span> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">new</code> <span class="nt">NewExpression</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">CallExpression</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">MemberExpression</span> <span class="nt">Arguments</span></div>
+ <div class="rhs"><span class="nt">SuperCall</span></div>
+ <div class="rhs"><span class="nt">CallExpression</span> <span class="nt">Arguments</span></div>
+ <div class="rhs"><span class="nt">CallExpression</span> <code class="t">[</code> <span class="nt">Expression</span> <code class="t">]</code></div>
+ <div class="rhs"><span class="nt">CallExpression</span> <code class="t">.</code> <span class="nt">IdentifierName</span></div>
+ <div class="rhs"><span class="nt">CallExpression</span> <span class="nt">TemplateLiteral</span></div>
+ </div>
+
+ <ol class="proc">
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-static-semantics-static-semantics-isdestructuring">
+ <h1><span class="secnum" id="sec-12.3.1.3"><a href="#sec-static-semantics-static-semantics-isdestructuring"
+ title="link to this section">12.3.1.3</a></span> Static Semantics: IsDestructuring</h1>
+
+ <p>See also: <a href="#sec-for-in-and-for-of-statements-static-semantics-isdestructuring">13.6.4.6</a>.</p>
+
+ <div class="gp prod"><span class="nt">MemberExpression</span> <span class="geq">:</span> <span class="nt">PrimaryExpression</span></div>
+ <ol class="proc">
+ <li>If <i>PrimaryExpression</i> is either an <i>ObjectLiteral</i> or an <i>ArrayLiteral</i>, return <b>true.</b></li>
+ <li>Return <b>false</b>.</li>
+ </ol>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">MemberExpression</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">MemberExpression</span> <code class="t">[</code> <span class="nt">Expression</span> <code class="t">]</code></div>
+ <div class="rhs"><span class="nt">MemberExpression</span> <code class="t">.</code> <span class="nt">IdentifierName</span></div>
+ <div class="rhs"><span class="nt">MemberExpression</span> <span class="nt">TemplateLiteral</span></div>
+ <div class="rhs"><span class="nt">SuperProperty</span></div>
+ <div class="rhs"><span class="nt">MetaProperty</span></div>
+ <div class="rhs"><code class="t">new</code> <span class="nt">MemberExpression</span> <span class="nt">Arguments</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">NewExpression</span> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">new</code> <span class="nt">NewExpression</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">CallExpression</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">MemberExpression</span> <span class="nt">Arguments</span></div>
+ <div class="rhs"><span class="nt">SuperCall</span></div>
+ <div class="rhs"><span class="nt">CallExpression</span> <span class="nt">Arguments</span></div>
+ <div class="rhs"><span class="nt">CallExpression</span> <code class="t">[</code> <span class="nt">Expression</span> <code class="t">]</code></div>
+ <div class="rhs"><span class="nt">CallExpression</span> <code class="t">.</code> <span class="nt">IdentifierName</span></div>
+ <div class="rhs"><span class="nt">CallExpression</span> <span class="nt">TemplateLiteral</span></div>
+ </div>
+
+ <ol class="proc">
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-static-semantics-static-semantics-isidentifierref">
+ <h1><span class="secnum" id="sec-12.3.1.4"><a href="#sec-static-semantics-static-semantics-isidentifierref"
+ title="link to this section">12.3.1.4</a></span> Static Semantics: IsIdentifierRef</h1>
+
+ <p>See also: <a href="#sec-semantics-static-semantics-isidentifierref">12.2.0.3</a>.</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">LeftHandSideExpression</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">CallExpression</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">MemberExpression</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">MemberExpression</span> <code class="t">[</code> <span class="nt">Expression</span> <code class="t">]</code></div>
+ <div class="rhs"><span class="nt">MemberExpression</span> <code class="t">.</code> <span class="nt">IdentifierName</span></div>
+ <div class="rhs"><span class="nt">MemberExpression</span> <span class="nt">TemplateLiteral</span></div>
+ <div class="rhs"><span class="nt">SuperProperty</span></div>
+ <div class="rhs"><span class="nt">MetaProperty</span></div>
+ <div class="rhs"><code class="t">new</code> <span class="nt">MemberExpression</span> <span class="nt">Arguments</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">NewExpression</span> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">new</code> <span class="nt">NewExpression</span></div>
+ </div>
+
+ <ol class="proc">
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-static-semantics-static-semantics-isvalidsimpleassignmenttarget">
+ <h1><span class="secnum" id="sec-12.3.1.5"><a href="#sec-static-semantics-static-semantics-isvalidsimpleassignmenttarget"
+ title="link to this section">12.3.1.5</a></span> Static Semantics: IsValidSimpleAssignmentTarget</h1>
+
+ <p>See also: <a href="#sec-identifiers-static-semantics-isvalidsimpleassignmenttarget">12.1.3</a>, <a
+ href="#sec-semantics-static-semantics-isvalidsimpleassignmenttarget">12.2.0.4</a>, <a
+ href="#sec-grouping-operator-static-semantics-isvalidsimpleassignmenttarget">12.2.9.3</a>, <a
+ href="#sec-postfix-expressions-static-semantics-isvalidsimpleassignmenttarget">12.4.3</a>, <a
+ href="#sec-unary-operators-static-semantics-isvalidsimpleassignmenttarget">12.5.3</a>, <a
+ href="#sec-multiplicative-operators-static-semantics-isvalidsimpleassignmenttarget">12.6.2</a>, <a
+ href="#sec-additive-operators-static-semantics-isvalidsimpleassignmenttarget">12.7.2</a>, <a
+ href="#sec-bitwise-shift-operators-static-semantics-isvalidsimpleassignmenttarget">12.8.2</a>, <a
+ href="#sec-relational-operators-static-semantics-isvalidsimpleassignmenttarget">12.9.2</a>, <a
+ href="#sec-equality-operators-static-semantics-isvalidsimpleassignmenttarget">12.10.2</a>, <a
+ href="#sec-binary-bitwise-operators-static-semantics-isvalidsimpleassignmenttarget">12.11.2</a>, <a
+ href="#sec-binary-logical-operators-static-semantics-isvalidsimpleassignmenttarget">12.12.2</a>, <a
+ href="#sec-conditional-operator-static-semantics-isvalidsimpleassignmenttarget">12.13.2</a>, <a
+ href="#sec-assignment-operators-static-semantics-isvalidsimpleassignmenttarget">12.14.3</a>, <a
+ href="#sec-comma-operator-static-semantics-isvalidsimpleassignmenttarget">12.15.2</a>.</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">CallExpression</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">CallExpression</span> <code class="t">[</code> <span class="nt">Expression</span> <code class="t">]</code></div>
+ <div class="rhs"><span class="nt">CallExpression</span> <code class="t">.</code> <span class="nt">IdentifierName</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">MemberExpression</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">MemberExpression</span> <code class="t">[</code> <span class="nt">Expression</span> <code class="t">]</code></div>
+ <div class="rhs"><span class="nt">MemberExpression</span> <code class="t">.</code> <span class="nt">IdentifierName</span></div>
+ <div class="rhs"><span class="nt">SuperProperty</span></div>
+ </div>
+
+ <ol class="proc">
+ <li>Return <b>true</b>.</li>
+ </ol>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">CallExpression</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">MemberExpression</span> <span class="nt">Arguments</span></div>
+ <div class="rhs"><span class="nt">SuperCall</span></div>
+ <div class="rhs"><span class="nt">CallExpression</span> <span class="nt">Arguments</span></div>
+ <div class="rhs"><span class="nt">CallExpression</span> <span class="nt">TemplateLiteral</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">NewExpression</span> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">new</code> <span class="nt">NewExpression</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">MemberExpression</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">MemberExpression</span> <span class="nt">TemplateLiteral</span></div>
+ <div class="rhs"><code class="t">new</code> <span class="nt">MemberExpression</span> <span class="nt">Arguments</span></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">NewTarget</span> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">new</code> <code class="t">.</code> <code class="t">target</code></div>
+ </div>
+
+ <ol class="proc">
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-property-accessors">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.3.2"><a href="#sec-property-accessors" title="link to this section">12.3.2</a></span>
+ Property Accessors</h1>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> Properties are accessed by name, using either the dot notation:</p>
+ </div>
+
+ <div class="lhs">MemberExpression <code>.</code> IdentifierName<br>CallExpression <code>.</code> IdentifierName</div>
+
+ <p>or the bracket notation:</p>
+
+ <div class="lhs">MemberExpression <code>[</code> Expression <code>]</code><br>CallExpression <code>[</code> Expression <code>]</code></div>
+
+ <p>The dot notation is explained by the following syntactic conversion:</p>
+
+ <div class="lhs">MemberExpression <code>.</code> IdentifierName</div>
+
+ <p>is identical in its behaviour to</p>
+
+ <div class="lhs">MemberExpression <code>[</code> &lt;identifier-name-string&gt; <code>]</code></div>
+
+ <p>and similarly</p>
+
+ <div class="lhs">CallExpression <code>.</code> IdentifierName</div>
+
+ <p>is identical in its behaviour to</p>
+
+ <div class="lhs">CallExpression <code>[</code> &lt;identifier-name-string&gt; <code>]</code></div>
+
+ <p>where <var>&lt;identifier-name-string&gt;</var> is the result of evaluating <span style="font-family: Times New
+ Roman">StringValue of</span> <span class="nt">IdentifierName</span>.</p>
+ </div>
+
+ <section id="sec-property-accessors-runtime-semantics-evaluation">
+ <h1><span class="secnum" id="sec-12.3.2.1"><a href="#sec-property-accessors-runtime-semantics-evaluation"
+ title="link to this section">12.3.2.1</a></span> Runtime Semantics: Evaluation</h1>
+ <div class="gp prod"><span class="nt">MemberExpression</span> <span class="geq">:</span> <span class="nt">MemberExpression</span> <code class="t">[</code> <span class="nt">Expression</span> <code class="t">]</code></div>
+ <ol class="proc">
+ <li>Let <i>baseReference</i> be the result of evaluating <i>MemberExpression</i>.</li>
+ <li>Let <i>baseValue</i> be <a href="#sec-getvalue">GetValue</a>(<i>baseReference</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>baseValue</i>).</li>
+ <li>Let <i>propertyNameReference</i> be the result of evaluating <i>Expression</i>.</li>
+ <li>Let <i>propertyNameValue</i> be <a href="#sec-getvalue">GetValue</a>(<i>propertyNameReference</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>propertyNameValue</i>).</li>
+ <li>Let <i>bv</i> be <a href="#sec-requireobjectcoercible">RequireObjectCoercible</a>(<i>baseValue</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>bv</i>).</li>
+ <li>Let <i>propertyKey</i> be <a href="#sec-topropertykey">ToPropertyKey</a>(<i>propertyNameValue</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>propertyKey</i>).</li>
+ <li>If the code matched by the syntactic production that is being evaluated is <a href="#sec-strict-mode-code">strict
+ mode code</a>, let <i>strict</i> be <b>true</b>, else let <i>strict</i> be <b>false</b>.</li>
+ <li>Return a value of type <a href="#sec-reference-specification-type">Reference</a> whose base value is <i>bv</i> and
+ whose referenced name is <i>propertyKey</i>, and whose strict reference flag is <i>strict</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">MemberExpression</span> <span class="geq">:</span> <span class="nt">MemberExpression</span> <code class="t">.</code> <span class="nt">IdentifierName</span></div>
+ <ol class="proc">
+ <li>Let <i>baseReference</i> be the result of evaluating <i>MemberExpression</i>.</li>
+ <li>Let <i>baseValue</i> be <a href="#sec-getvalue">GetValue</a>(<i>baseReference</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>baseValue</i>).</li>
+ <li>Let <i>bv</i> be <a href="#sec-requireobjectcoercible">RequireObjectCoercible</a>(<i>baseValue</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>bv</i>).</li>
+ <li>Let <i>propertyNameString</i> be StringValue of <i>IdentifierName</i></li>
+ <li>If the code matched by the syntactic production that is being evaluated is <a href="#sec-strict-mode-code">strict
+ mode code</a>, let <i>strict</i> be <b>true</b>, else let <i>strict</i> be <b>false</b>.</li>
+ <li>Return a value of type <a href="#sec-reference-specification-type">Reference</a> whose base value is <i>bv</i> and
+ whose referenced name is <i>propertyNameString</i>, and whose strict reference flag is <i>strict</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">CallExpression</span> <span class="geq">:</span> <span class="nt">CallExpression</span> <code class="t">[</code> <span class="nt">Expression</span> <code class="t">]</code></div>
+
+ <p>Is evaluated in exactly the same manner as <span class="prod"><span class="nt">MemberExpression</span> <span
+ class="geq">:</span> <span class="nt">MemberExpression</span> <code class="t">[</code> <span class="nt">Expression</span>
+ <code class="t">]</code></span> except that the contained <span class="nt">CallExpression</span> is evaluated in step
+ 1.</p>
+
+ <div class="gp prod"><span class="nt">CallExpression</span> <span class="geq">:</span> <span class="nt">CallExpression</span> <code class="t">.</code> <span class="nt">IdentifierName</span></div>
+
+ <p>Is evaluated in exactly the same manner as <span class="prod"><span class="nt">MemberExpression</span> <span
+ class="geq">:</span> <span class="nt">MemberExpression</span> <code class="t">.</code> <span
+ class="nt">IdentifierName</span></span> except that the contained <span class="nt">CallExpression</span> is evaluated in
+ step 1.</p>
+ </section>
+ </section>
+
+ <section id="sec-new-operator">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.3.3"><a href="#sec-new-operator" title="link to this section">12.3.3</a></span> The
+ <code>new</code> Operator</h1>
+ </div>
+
+ <section id="sec-new-operator-runtime-semantics-evaluation">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.3.3.1"><a href="#sec-new-operator-runtime-semantics-evaluation"
+ title="link to this section">12.3.3.1</a></span> Runtime Semantics: Evaluation</h1>
+ <div class="gp prod"><span class="nt">NewExpression</span> <span class="geq">:</span> <code class="t">new</code> <span class="nt">NewExpression</span></div>
+ <ol class="proc">
+ <li>Return <a href="#sec-evaluatenew">EvaluateNew</a>(<i>NewExpression</i>, <span style="font-family:
+ sans-serif">empty</span>).</li>
+ </ol>
+ <div class="gp prod"><span class="nt">MemberExpression</span> <span class="geq">:</span> <code class="t">new</code> <span class="nt">MemberExpression</span> <span class="nt">Arguments</span></div>
+ <ol class="proc">
+ <li>Return <a href="#sec-evaluatenew">EvaluateNew</a>(<i>MemberExpression</i>, <i>Arguments</i>).</li>
+ </ol>
+ </div>
+
+ <section id="sec-evaluatenew">
+ <h1><span class="secnum" id="sec-12.3.3.1.1"><a href="#sec-evaluatenew"
+ title="link to this section">12.3.3.1.1</a></span> Runtime Semantics: EvaluateNew(constructProduction,
+ arguments)</h1>
+
+ <p>The abstract operation EvaluateNew with arguments <span style="font-family: Times New
+ Roman"><i>constructProduction</i>,</span> and <var>arguments</var> performs the following steps:</p>
+
+ <ol class="proc">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>constructProduction</i> is either a <i>NewExpression</i> or a
+ <i>MemberExpression</i>.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>arguments</i> is either <span style="font-family:
+ sans-serif">empty</span> or an <i>Arguments</i> production.</li>
+ <li>Let <i>ref</i> be the result of evaluating <i>constructProduction</i>.</li>
+ <li>Let <i>constructor</i> be <a href="#sec-getvalue">GetValue</a>(<i>ref</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>constructor</i>).</li>
+ <li>If <i>arguments</i> is <span style="font-family: sans-serif">empty</span>, let <i>argList</i> be an empty <a
+ href="#sec-list-and-record-specification-type">List</a>.</li>
+ <li>Else,
+ <ol class="block">
+ <li>Let <i>argList</i> be ArgumentListEvaluation of <i>arguments</i>.</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>argList</i>).</li>
+ </ol>
+ </li>
+ <li>If <a href="#sec-isconstructor">IsConstructor</a> (<i>constructor</i>) is <b>false</b>, throw a <b>TypeError</b>
+ exception.</li>
+ <li>Return <a href="#sec-construct">Construct</a>(<i>constructor</i>, <i>argList</i>).</li>
+ </ol>
+ </section>
+ </section>
+ </section>
+
+ <section id="sec-function-calls">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.3.4"><a href="#sec-function-calls" title="link to this section">12.3.4</a></span>
+ Function Calls</h1>
+ </div>
+
+ <section id="sec-function-calls-runtime-semantics-evaluation">
+ <h1><span class="secnum" id="sec-12.3.4.1"><a href="#sec-function-calls-runtime-semantics-evaluation"
+ title="link to this section">12.3.4.1</a></span> Runtime Semantics: Evaluation</h1>
+ <div class="gp prod"><span class="nt">CallExpression</span> <span class="geq">:</span> <span class="nt">MemberExpression</span> <span class="nt">Arguments</span></div>
+ <ol class="proc">
+ <li>Let <i>ref</i> be the result of evaluating <i>MemberExpression</i>.</li>
+ <li>Let <i>func</i> be <a href="#sec-getvalue">GetValue</a>(<i>ref</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>func</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>ref</i>) is <a
+ href="#sec-reference-specification-type">Reference</a> and <a
+ href="#sec-reference-specification-type">IsPropertyReference</a>(<i>ref</i>) is <b>false</b> and <a
+ href="#sec-reference-specification-type">GetReferencedName</a>(<i>ref</i>) <i>is</i> <code>"eval"</code>, then
+ <ol class="block">
+ <li>If <a href="#sec-samevalue">SameValue</a>(<i>func</i>, %eval%) is <b>true</b>, then
+ <ol class="block">
+ <li>Let <i>argList</i> be ArgumentListEvaluation(<i>Arguments</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>argList</i>).</li>
+ <li>If <i>argList</i> has no elements, return <b>undefined.</b></li>
+ <li>Let <i>evalText</i> be the first element of <i>argList</i>.</li>
+ <li>If the source code matching this <i>CallExpression</i> is <a href="#sec-strict-mode-code">strict code</a>,
+ let <i>strictCaller</i> be <b>true.</b> Otherwise let <i>strictCaller</i> be <b>false.</b></li>
+ <li>Let <i>evalRealm</i> be <a href="#sec-execution-contexts">the running execution context</a>&rsquo;s <a
+ href="#sec-code-realms">Realm</a>.</li>
+ <li>Return <a href="#sec-performeval">PerformEval</a>(<i>evalText</i>, <i>evalRealm</i>, <i>strictCaller</i>,
+ <b>true</b>). .</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>ref</i>) is <a
+ href="#sec-reference-specification-type">Reference</a>, then
+ <ol class="block">
+ <li>If <a href="#sec-reference-specification-type">IsPropertyReference</a>(<i>ref</i>) is <b>true</b>, then
+ <ol class="block">
+ <li>Let <i>thisValue</i> be <a href="#sec-getthisvalue">GetThisValue</a>(<i>ref</i>).</li>
+ </ol>
+ </li>
+ <li>Else, the base of <i>ref</i> is an <a href="#sec-environment-records">Environment Record</a>
+ <ol class="block">
+ <li>Let <i>refEnv</i> be <a href="#sec-reference-specification-type">GetBase</a>(<i>ref</i>).</li>
+ <li>Let <i>thisValue</i> be <i>refEnv</i>.WithBaseObject().</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Else <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>ref</i>) is not <a
+ href="#sec-reference-specification-type">Reference</a>,
+ <ol class="block">
+ <li>Let <i>thisValue</i> be <b>undefined</b>.</li>
+ </ol>
+ </li>
+ <li>Let <i>thisCall</i> be this <i>CallExpression</i>.</li>
+ <li>Let <i>tailCall</i> be <a href="#sec-isintailposition">IsInTailPosition</a>(<i>thisCall</i>). (See <a
+ href="#sec-isintailposition">14.6.1</a>)</li>
+ <li>Return <a href="#sec-evaluatedirectcall">EvaluateDirectCall</a>(<i>func</i>, <i>thisValue</i>, <i>Arguments</i>,
+ <i>tailCall</i>).</li>
+ </ol>
+
+ <p>A <span class="nt">CallExpression</span> whose evaluation executes step 4.a.vii is a <i>direct eval</i>.</p>
+
+ <div class="gp prod"><span class="nt">CallExpression</span> <span class="geq">:</span> <span class="nt">CallExpression</span> <span class="nt">Arguments</span></div>
+ <ol class="proc">
+ <li>Let <i>ref</i> be the result of evaluating <i>CallExpression</i>.</li>
+ <li>Let <i>thisCall</i> be this <i>CallExpression</i></li>
+ <li>Let <i>tailCall</i> be <a href="#sec-isintailposition">IsInTailPosition</a>(<i>thisCall</i>). (See <a
+ href="#sec-isintailposition">14.6.1</a>)</li>
+ <li>Return <a href="#sec-evaluatecall">EvaluateCall</a>(<i>ref</i>, <i>Arguments</i>, <i>tailCall</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-evaluatecall">
+ <h1><span class="secnum" id="sec-12.3.4.2"><a href="#sec-evaluatecall" title="link to this section">12.3.4.2</a></span>
+ Runtime Semantics: EvaluateCall( ref, arguments, tailPosition )</h1>
+
+ <p>The abstract operation EvaluateCall takes as arguments a value <var>ref</var>, a syntactic grammar production
+ <var>arguments</var>, and a Boolean argument <var>tailPosition</var>. It performs the following steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>func</i> be <a href="#sec-getvalue">GetValue</a>(<i>ref</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>func</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>ref</i>) is <a
+ href="#sec-reference-specification-type">Reference</a>, then
+ <ol class="block">
+ <li>If <a href="#sec-reference-specification-type">IsPropertyReference</a>(<i>ref</i>) is <b>true</b>, then
+ <ol class="block">
+ <li>Let <i>thisValue</i> be <a href="#sec-getthisvalue">GetThisValue</a>(<i>ref</i>).</li>
+ </ol>
+ </li>
+ <li>Else, the base of <i>ref</i> is an <a href="#sec-environment-records">Environment Record</a>
+ <ol class="block">
+ <li>Let <i>refEnv</i> be <a href="#sec-reference-specification-type">GetBase</a>(<i>ref</i>).</li>
+ <li>Let <i>thisValue</i> be <i>refEnv</i>.WithBaseObject().</li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ <li>Else <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>ref</i>) is not <a
+ href="#sec-reference-specification-type">Reference</a>,
+ <ol class="block">
+ <li>Let <i>thisValue</i> be <b>undefined</b>.</li>
+ </ol>
+ </li>
+ <li>Return <a href="#sec-evaluatedirectcall">EvaluateDirectCall</a>(<i>func</i>, <i>thisValue</i>, <i>arguments</i>,
+ <i>tailPosition</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-evaluatedirectcall">
+ <h1><span class="secnum" id="sec-12.3.4.3"><a href="#sec-evaluatedirectcall"
+ title="link to this section">12.3.4.3</a></span> Runtime Semantics: EvaluateDirectCall( func, thisValue, arguments,
+ tailPosition )</h1>
+
+ <p>The abstract operation EvaluateDirectCall takes as arguments a value <var>func</var>, a value <var>thisValue</var>, a
+ syntactic grammar production <var>arguments</var>, and a Boolean argument <var>tailPosition</var>. It performs the
+ following steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>argList</i> be ArgumentListEvaluation(<i>arguments</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>argList</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>func</i>) is not Object, throw a <b>TypeError</b>
+ exception.</li>
+ <li>If <a href="#sec-iscallable">IsCallable</a>(<i>func</i>) is <b>false</b>, throw a <b>TypeError</b> exception.</li>
+ <li>If <i>tailPosition</i> is <b>true</b>, perform <a href="#sec-preparefortailcall">PrepareForTailCall</a>().</li>
+ <li>Let <i>result</i> be <a href="#sec-call">Call</a>(<i>func</i>, <i>thisValue</i>, <i>argList</i>).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: If <i>tailPosition</i> is <b>true</b>, the above call will not
+ return here, but instead evaluation will continue as if the following return has already occurred.</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: If <i>result</i> is not an <a
+ href="#sec-completion-record-specification-type">abrupt completion</a> then <a
+ href="#sec-ecmascript-data-types-and-values">Type</a>(<i>result</i>) is an <a
+ href="#sec-ecmascript-language-types">ECMAScript language type</a>.</li>
+ <li>Return <i>result</i>.</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-super-keyword">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.3.5"><a href="#sec-super-keyword" title="link to this section">12.3.5</a></span> The
+ <code>super</code> Keyword</h1>
+ </div>
+
+ <section id="sec-super-keyword-runtime-semantics-evaluation">
+ <h1><span class="secnum" id="sec-12.3.5.1"><a href="#sec-super-keyword-runtime-semantics-evaluation"
+ title="link to this section">12.3.5.1</a></span> Runtime Semantics: Evaluation</h1>
+ <div class="gp prod"><span class="nt">SuperProperty</span> <span class="geq">:</span> <code class="t">super</code> <code class="t">[</code> <span class="nt">Expression</span> <code class="t">]</code></div>
+ <ol class="proc">
+ <li>Let <i>propertyNameReference</i> be the result of evaluating <i>Expression</i>.</li>
+ <li>Let <i>propertyNameValue</i> be <a href="#sec-getvalue">GetValue</a>(<i>propertyNameReference</i>).</li>
+ <li>Let <i>propertyKey</i> be <a href="#sec-topropertykey">ToPropertyKey</a>(<i>propertyNameValue</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>propertyKey</i>).</li>
+ <li>If the code matched by the syntactic production that is being evaluated is <a href="#sec-strict-mode-code">strict
+ mode code</a>, let <i>strict</i> be <b>true</b>, else let <i>strict</i> be <b>false</b>.</li>
+ <li>Return <a href="#sec-makesuperpropertyreference">MakeSuperPropertyReference</a>(<i>propertyKey</i>,
+ <i>strict</i>).</li>
+ </ol>
+ <div class="gp prod"><span class="nt">SuperProperty</span> <span class="geq">:</span> <code class="t">super</code> <code class="t">.</code> <span class="nt">IdentifierName</span></div>
+ <ol class="proc">
+ <li>Let <i>propertyKey</i> be StringValue of <i>IdentifierName</i>.</li>
+ <li>If the code matched by the syntactic production that is being evaluated is <a href="#sec-strict-mode-code">strict
+ mode code</a>, let <i>strict</i> be <b>true</b>, else let <i>strict</i> be <b>false</b>.</li>
+ <li>Return <a href="#sec-makesuperpropertyreference">MakeSuperPropertyReference</a>(<i>propertyKey</i>,
+ <i>strict</i>).</li>
+ </ol>
+ <div class="gp prod"><span class="nt">SuperCall</span> <span class="geq">:</span> <code class="t">super</code> <span class="nt">Arguments</span></div>
+ <ol class="proc">
+ <li>Let <i>newTarget</i> be <a href="#sec-getnewtarget">GetNewTarget</a>().</li>
+ <li>If <i>newTarget</i> is <b>undefined</b>, throw a <b>ReferenceError</b> exception.</li>
+ <li>Let <i>func</i> be <a href="#sec-getsuperconstructor">GetSuperConstructor</a>().</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>func</i>).</li>
+ <li>Let <i>argList</i> be ArgumentListEvaluation of <i>Arguments</i>.</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>argList</i>).</li>
+ <li>Let <i>result</i> be <a href="#sec-construct">Construct</a>(<i>func</i>, <i>argList</i>, <i>newTarget</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>result</i>).</li>
+ <li>Let <i>thisER</i> be <a href="#sec-getthisenvironment">GetThisEnvironment</a>( ).</li>
+ <li>Return <i>thisER</i>.<a href="#sec-bindthisvalue">BindThisValue</a>(<i>result</i>).</li>
+ </ol>
+ </section>
+
+ <section id="sec-getsuperconstructor">
+ <h1><span class="secnum" id="sec-12.3.5.2"><a href="#sec-getsuperconstructor"
+ title="link to this section">12.3.5.2</a></span> Runtime Semantics: GetSuperConstructor ( )</h1>
+
+ <p>The abstract operation GetSuperConstructor performs the following steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>envRec</i> be <a href="#sec-getthisenvironment">GetThisEnvironment</a>( ).</li>
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <i>envRec</i> is a function <a
+ href="#sec-environment-records">Environment Record</a>.</li>
+ <li>Let <i>activeFunction</i> be <i>envRec</i>.[[FunctionObject]].</li>
+ <li>Let <i>superConstructor</i> be <i>activeFunction</i>.[[GetPrototypeOf]]().</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>superConstructor</i>).</li>
+ <li>If <a href="#sec-isconstructor">IsConstructor</a>(<i>superConstructor</i>) is <b>false</b>, throw a <b>TypeError</b>
+ exception.</li>
+ <li>Return <i>superConstructor</i>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-makesuperpropertyreference">
+ <h1><span class="secnum" id="sec-12.3.5.3"><a href="#sec-makesuperpropertyreference"
+ title="link to this section">12.3.5.3</a></span> Runtime Semantics: MakeSuperPropertyReference(propertyKey,
+ strict)</h1>
+
+ <p>The abstract operation MakeSuperPropertyReference with arguments <var>propertyKey</var> and <var>strict</var> performs
+ the following steps:</p>
+
+ <ol class="proc">
+ <li>Let <i>env</i> be <a href="#sec-getthisenvironment">GetThisEnvironment</a>( ).</li>
+ <li>If <i>env</i>.HasSuperBinding() is <b>false</b>, throw a <b>ReferenceError</b> exception.</li>
+ <li>Let <i>actualThis</i> be <i>env</i>.GetThisBinding().</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>actualThis</i>).</li>
+ <li>Let <i>baseValue</i> be <i>env</i>.<a href="#sec-getsuperbase">GetSuperBase</a>().</li>
+ <li>Let <i>bv</i> be <a href="#sec-requireobjectcoercible">RequireObjectCoercible</a>(<i>baseValue</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>bv</i>).</li>
+ <li>Return a value of type <a href="#sec-reference-specification-type">Reference</a> that is a Super <a
+ href="#sec-reference-specification-type">Reference</a> whose base value is <i>bv</i>, whose referenced name is
+ <i>propertyKey</i>, whose thisValue is <i>actualThis</i>, and whose strict reference flag is <i>strict</i>.</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-argument-lists">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.3.6"><a href="#sec-argument-lists" title="link to this section">12.3.6</a></span>
+ Argument Lists</h1>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> The evaluation of an argument list produces a <a
+ href="#sec-list-and-record-specification-type">List</a> of values (<a href="#sec-list-and-record-specification-type">see
+ 6.2.1</a>).</p>
+ </div>
+ </div>
+
+ <section id="sec-argument-lists-runtime-semantics-argumentlistevaluation">
+ <h1><span class="secnum" id="sec-12.3.6.1"><a href="#sec-argument-lists-runtime-semantics-argumentlistevaluation"
+ title="link to this section">12.3.6.1</a></span> <span style="font-family: sans-serif">Runtime Semantics:</span>
+ ArgumentListEvaluation</h1>
+
+ <p>See also: <a href="#sec-template-literals-runtime-semantics-argumentlistevaluation">12.2.8.2</a></p>
+
+ <div class="gp prod"><span class="nt">Arguments</span> <span class="geq">:</span> <code class="t">(</code> <code class="t">)</code></div>
+ <ol class="proc">
+ <li>Return an empty <a href="#sec-list-and-record-specification-type">List</a>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">ArgumentList</span> <span class="geq">:</span> <span class="nt">AssignmentExpression</span></div>
+ <ol class="proc">
+ <li>Let <i>ref</i> be the result of evaluating <i>AssignmentExpression</i>.</li>
+ <li>Let <i>arg</i> be <a href="#sec-getvalue">GetValue</a>(<i>ref</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>arg</i>).</li>
+ <li>Return a <a href="#sec-list-and-record-specification-type">List</a> whose sole item is <i>arg</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">ArgumentList</span> <span class="geq">:</span> <code class="t">...</code> <span class="nt">AssignmentExpression</span></div>
+ <ol class="proc">
+ <li>Let <i>list</i> be an empty <a href="#sec-list-and-record-specification-type">List</a>.</li>
+ <li>Let <i>spreadRef</i> be the result of evaluating <i>AssignmentExpression</i>.</li>
+ <li>Let <i>spreadObj</i> be <a href="#sec-getvalue">GetValue</a>(<i>spreadRef</i>).</li>
+ <li>Let <i>iterator</i> be <a href="#sec-getiterator">GetIterator</a>(<i>spreadObj</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>iterator</i>).</li>
+ <li>Repeat
+ <ol class="block">
+ <li>Let <i>next</i> be <a href="#sec-iteratorstep">IteratorStep</a>(<i>iterator</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>next</i>).</li>
+ <li>If <i>next</i> is <b>false</b>, return <i>list</i>.</li>
+ <li>Let <i>nextArg</i> be <a href="#sec-iteratorvalue">IteratorValue</a>(<i>next</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>nextArg</i>).</li>
+ <li>Append <i>nextArg</i> as the last element of <i>list</i>.</li>
+ </ol>
+ </li>
+ </ol>
+ <div class="gp prod"><span class="nt">ArgumentList</span> <span class="geq">:</span> <span class="nt">ArgumentList</span> <code class="t">,</code> <span class="nt">AssignmentExpression</span></div>
+ <ol class="proc">
+ <li>Let <i>precedingArgs</i> be the result of evaluating <i>ArgumentList</i>.</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>precedingArgs</i>).</li>
+ <li>Let <i>ref</i> be the result of evaluating <i>AssignmentExpression</i>.</li>
+ <li>Let <i>arg</i> be <a href="#sec-getvalue">GetValue</a>(<i>ref</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>arg</i>).</li>
+ <li>Append <i>arg</i> to the end of <i>precedingArgs</i>.</li>
+ <li>Return <i>precedingArgs</i>.</li>
+ </ol>
+ <div class="gp prod"><span class="nt">ArgumentList</span> <span class="geq">:</span> <span class="nt">ArgumentList</span> <code class="t">,</code> <code class="t">...</code> <span class="nt">AssignmentExpression</span></div>
+ <ol class="proc">
+ <li>Let <i>precedingArgs</i> be the result of evaluating <i>ArgumentList</i>.</li>
+ <li>Let <i>spreadRef</i> be the result of evaluating <i>AssignmentExpression</i>.</li>
+ <li>Let <i>iterator</i> be <a href="#sec-getiterator">GetIterator</a>(<a
+ href="#sec-getvalue">GetValue</a>(<i>spreadRef</i>) ).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>iterator</i>).</li>
+ <li>Repeat
+ <ol class="block">
+ <li>Let <i>next</i> be <a href="#sec-iteratorstep">IteratorStep</a>(<i>iterator</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>next</i>).</li>
+ <li>If <i>next</i> is <b>false</b>, return <i>precedingArgs</i>.</li>
+ <li>Let <i>nextArg</i> be <a href="#sec-iteratorvalue">IteratorValue</a>(<i>next</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>nextArg</i>).</li>
+ <li>Append <i>nextArg</i> as the last element of <i>precedingArgs</i>.</li>
+ </ol>
+ </li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-tagged-templates">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.3.7"><a href="#sec-tagged-templates" title="link to this section">12.3.7</a></span>
+ Tagged Templates</h1>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> A tagged template is a function call where the arguments of the call are derived from a
+ <i>TemplateLiteral</i> (<a href="#sec-template-literals">12.2.8</a>). The actual arguments include a template object (<a
+ href="#sec-gettemplateobject">12.2.8.3</a>) and the values produced by evaluating the expressions embedded within the
+ <i>TemplateLiteral</i>.</p>
+ </div>
+ </div>
+
+ <section id="sec-tagged-templates-runtime-semantics-evaluation">
+ <h1><span class="secnum" id="sec-12.3.7.1"><a href="#sec-tagged-templates-runtime-semantics-evaluation"
+ title="link to this section">12.3.7.1</a></span> Runtime Semantics: Evaluation</h1>
+ <div class="gp prod"><span class="nt">MemberExpression</span> <span class="geq">:</span> <span class="nt">MemberExpression</span> <span class="nt">TemplateLiteral</span></div>
+ <ol class="proc">
+ <li>Let <i>tagRef</i> be the result of evaluating <i>MemberExpression</i>.</li>
+ <li>Let <i>thisCall</i> be this <i>MemberExpression</i>.</li>
+ <li>Let <i>tailCall</i> be <a href="#sec-isintailposition">IsInTailPosition</a>(<i>thisCall</i>). (See <a
+ href="#sec-isintailposition">14.6.1</a>)</li>
+ <li>Return <a href="#sec-evaluatecall">EvaluateCall</a>(<i>tagRef</i>, <i>TemplateLiteral</i>, <i>tailCall</i>).</li>
+ </ol>
+ <div class="gp prod"><span class="nt">CallExpression</span> <span class="geq">:</span> <span class="nt">CallExpression</span> <span class="nt">TemplateLiteral</span></div>
+ <ol class="proc">
+ <li>Let <i>tagRef</i> be the result of evaluating <i>CallExpression</i>.</li>
+ <li>Let <i>thisCall</i> be this <i>CallExpression</i>.</li>
+ <li>Let <i>tailCall</i> be <a href="#sec-isintailposition">IsInTailPosition</a>(<i>thisCall</i>). (See <a
+ href="#sec-isintailposition">14.6.1</a>)</li>
+ <li>Return <a href="#sec-evaluatecall">EvaluateCall</a>(<i>tagRef</i>, <i>TemplateLiteral</i>, <i>tailCall</i>).</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-meta-properties">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.3.8"><a href="#sec-meta-properties" title="link to this section">12.3.8</a></span>
+ Meta Properties</h1>
+ </div>
+
+ <section id="sec-meta-properties-runtime-semantics-evaluation">
+ <h1><span class="secnum" id="sec-12.3.8.1"><a href="#sec-meta-properties-runtime-semantics-evaluation"
+ title="link to this section">12.3.8.1</a></span> Runtime Semantics: Evaluation</h1>
+ <div class="gp prod"><span class="nt">NewTarget</span> <span class="geq">:</span> <code class="t">new</code> <code class="t">.</code> <code class="t">target</code></div>
+ <ol class="proc">
+ <li>Return <a href="#sec-getnewtarget">GetNewTarget</a>().</li>
+ </ol>
+ </section>
+ </section>
+ </section>
+
+ <section id="sec-postfix-expressions">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.4"><a href="#sec-postfix-expressions" title="link to this section">12.4</a></span>
+ Postfix Expressions</h1>
+ <h2>Syntax</h2>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">PostfixExpression</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">LeftHandSideExpression</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><span class="nt">LeftHandSideExpression</span><sub class="g-params">[?Yield]</sub> <span class="grhsannot">[no <span class="nt">LineTerminator</span> here]</span> <code class="t">++</code></div>
+ <div class="rhs"><span class="nt">LeftHandSideExpression</span><sub class="g-params">[?Yield]</sub> <span class="grhsannot">[no <span class="nt">LineTerminator</span> here]</span> <code class="t">--</code></div>
+ </div>
+ </div>
+
+ <section id="sec-postfix-expressions-static-semantics-early-errors">
+ <h1><span class="secnum" id="sec-12.4.1"><a href="#sec-postfix-expressions-static-semantics-early-errors"
+ title="link to this section">12.4.1</a></span> Static Semantics: Early Errors</h1>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">PostfixExpression</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">LeftHandSideExpression</span> <code class="t">++</code></div>
+ <div class="rhs"><span class="nt">LeftHandSideExpression</span> <code class="t">--</code></div>
+ </div>
+
+ <ul>
+ <li>
+ <p>It is an early <a href="#sec-reference-specification-type">Reference</a> Error if <span style="font-family: Times New
+ Roman">IsValidSimpleAssignmentTarget</span> of <span class="nt">LeftHandSideExpression</span> is <span
+ class="value">false</span>.</p>
+ </li>
+ </ul>
+ </section>
+
+ <section id="sec-postfix-expressions-static-semantics-isfunctiondefinition">
+ <h1><span class="secnum" id="sec-12.4.2"><a href="#sec-postfix-expressions-static-semantics-isfunctiondefinition"
+ title="link to this section">12.4.2</a></span> Static Semantics: IsFunctionDefinition</h1>
+
+ <p>See also: <a href="#sec-semantics-static-semantics-isfunctiondefinition">12.2.0.2</a>, <a
+ href="#sec-grouping-operator-static-semantics-isfunctiondefinition">12.2.9.2</a>, <a
+ href="#sec-static-semantics-static-semantics-isfunctiondefinition">12.3.1.2</a>, <a
+ href="#sec-unary-operators-static-semantics-isfunctiondefinition">12.5.2</a>, <a
+ href="#sec-multiplicative-operators-static-semantics-isfunctiondefinition">12.6.1</a>, <a
+ href="#sec-additive-operators-static-semantics-isfunctiondefinition">12.7.1</a>, <a
+ href="#sec-bitwise-shift-operators-static-semantics-isfunctiondefinition">12.8.1</a>, <a
+ href="#sec-relational-operators-static-semantics-isfunctiondefinition">12.9.1</a>, <a
+ href="#sec-equality-operators-static-semantics-isfunctiondefinition">12.10.1</a>, <a
+ href="#sec-binary-bitwise-operators-static-semantics-isfunctiondefinition">12.11.1</a>, <a
+ href="#sec-binary-logical-operators-static-semantics-isfunctiondefinition">12.12.1</a>, <a
+ href="#sec-conditional-operator-static-semantics-isfunctiondefinition">12.13.1</a>, <a
+ href="#sec-assignment-operators-static-semantics-isfunctiondefinition">12.14.2</a>, <a
+ href="#sec-comma-operator-static-semantics-isfunctiondefinition">12.15.1</a>, <a
+ href="#sec-function-definitions-static-semantics-isfunctiondefinition">14.1.11</a>, <a
+ href="#sec-generator-function-definitions-static-semantics-isfunctiondefinition">14.4.9</a>, <a
+ href="#sec-class-definitions-static-semantics-isfunctiondefinition">14.5.8</a></p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">PostfixExpression</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">LeftHandSideExpression</span> <code class="t">++</code></div>
+ <div class="rhs"><span class="nt">LeftHandSideExpression</span> <code class="t">--</code></div>
+ </div>
+
+ <ol class="proc">
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-postfix-expressions-static-semantics-isvalidsimpleassignmenttarget">
+ <h1><span class="secnum" id="sec-12.4.3"><a href="#sec-postfix-expressions-static-semantics-isvalidsimpleassignmenttarget"
+ title="link to this section">12.4.3</a></span> Static Semantics: IsValidSimpleAssignmentTarget</h1>
+
+ <p>See also: <a href="#sec-identifiers-static-semantics-isvalidsimpleassignmenttarget">12.1.3</a>, <a
+ href="#sec-semantics-static-semantics-isvalidsimpleassignmenttarget">12.2.0.4</a>, <a
+ href="#sec-grouping-operator-static-semantics-isvalidsimpleassignmenttarget">12.2.9.3</a>, <a
+ href="#sec-static-semantics-static-semantics-isvalidsimpleassignmenttarget">12.3.1.5</a>, <a
+ href="#sec-unary-operators-static-semantics-isvalidsimpleassignmenttarget">12.5.3</a>, <a
+ href="#sec-multiplicative-operators-static-semantics-isvalidsimpleassignmenttarget">12.6.2</a>, <a
+ href="#sec-additive-operators-static-semantics-isvalidsimpleassignmenttarget">12.7.2</a>, <a
+ href="#sec-bitwise-shift-operators-static-semantics-isvalidsimpleassignmenttarget">12.8.2</a>, <a
+ href="#sec-relational-operators-static-semantics-isvalidsimpleassignmenttarget">12.9.2</a>, <a
+ href="#sec-equality-operators-static-semantics-isvalidsimpleassignmenttarget">12.10.2</a>, <a
+ href="#sec-binary-bitwise-operators-static-semantics-isvalidsimpleassignmenttarget">12.11.2</a>, <a
+ href="#sec-binary-logical-operators-static-semantics-isvalidsimpleassignmenttarget">12.12.2</a>, <a
+ href="#sec-conditional-operator-static-semantics-isvalidsimpleassignmenttarget">12.13.2</a>, <a
+ href="#sec-assignment-operators-static-semantics-isvalidsimpleassignmenttarget">12.14.3</a>, <a
+ href="#sec-comma-operator-static-semantics-isvalidsimpleassignmenttarget">12.15.2</a>.</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">PostfixExpression</span> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">LeftHandSideExpression</span> <code class="t">++</code></div>
+ <div class="rhs"><span class="nt">LeftHandSideExpression</span> <code class="t">--</code></div>
+ </div>
+
+ <ol class="proc">
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-postfix-increment-operator">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.4.4"><a href="#sec-postfix-increment-operator"
+ title="link to this section">12.4.4</a></span> Postfix Increment Operator</h1>
+ </div>
+
+ <section id="sec-postfix-increment-operator-runtime-semantics-evaluation">
+ <h1><span class="secnum" id="sec-12.4.4.1"><a href="#sec-postfix-increment-operator-runtime-semantics-evaluation"
+ title="link to this section">12.4.4.1</a></span> Runtime Semantics: Evaluation</h1>
+ <div class="gp prod"><span class="nt">PostfixExpression</span> <span class="geq">:</span> <span class="nt">LeftHandSideExpression</span> <code class="t">++</code></div>
+ <ol class="proc">
+ <li>Let <i>lhs</i> be the result of evaluating <i>LeftHandSideExpression</i>.</li>
+ <li>Let <i>oldValue</i> be <a href="#sec-tonumber">ToNumber</a>(<a href="#sec-getvalue">GetValue</a>(<i>lhs</i>)).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>oldValue</i>).</li>
+ <li>Let <i>newValue</i> be the result of adding the value <code>1</code> to <i>oldValue</i>, using the same rules as for
+ the <code>+</code> operator (<a href="#sec-applying-the-additive-operators-to-numbers">see 12.7.5</a>).</li>
+ <li>Let <i>status</i> be <a href="#sec-putvalue">PutValue</a>(<i>lhs</i>, <i>newValue</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>status</i>).</li>
+ <li>Return <i>oldValue</i>.</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-postfix-decrement-operator">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.4.5"><a href="#sec-postfix-decrement-operator"
+ title="link to this section">12.4.5</a></span> Postfix Decrement Operator</h1>
+ </div>
+
+ <section id="sec-postfix-decrement-operator-runtime-semantics-evaluation">
+ <h1><span class="secnum" id="sec-12.4.5.1"><a href="#sec-postfix-decrement-operator-runtime-semantics-evaluation"
+ title="link to this section">12.4.5.1</a></span> Runtime Semantics: Evaluation</h1>
+ <div class="gp prod"><span class="nt">PostfixExpression</span> <span class="geq">:</span> <span class="nt">LeftHandSideExpression</span> <code class="t">--</code></div>
+ <ol class="proc">
+ <li>Let <i>lhs</i> be the result of evaluating <i>LeftHandSideExpression</i>.</li>
+ <li>Let <i>oldValue</i> be <a href="#sec-tonumber">ToNumber</a>(<a href="#sec-getvalue">GetValue</a>(<i>lhs</i>)).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>oldValue</i>).</li>
+ <li>Let <i>newValue</i> be the result of subtracting the value <code>1</code> from <i>oldValue</i>, using the same rules
+ as for the <code>-</code> operator (<a href="#sec-applying-the-additive-operators-to-numbers">12.7.5</a>).</li>
+ <li>Let <i>status</i> be <a href="#sec-putvalue">PutValue</a>(<i>lhs</i>, <i>newValue</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>status</i>).</li>
+ <li>Return <i>oldValue</i>.</li>
+ </ol>
+ </section>
+ </section>
+ </section>
+
+ <section id="sec-unary-operators">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.5"><a href="#sec-unary-operators" title="link to this section">12.5</a></span> Unary
+ Operators</h1>
+ <h2>Syntax</h2>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">UnaryExpression</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">PostfixExpression</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><code class="t">delete</code> <span class="nt">UnaryExpression</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><code class="t">void</code> <span class="nt">UnaryExpression</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><code class="t">typeof</code> <span class="nt">UnaryExpression</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><code class="t">++</code> <span class="nt">UnaryExpression</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><code class="t">--</code> <span class="nt">UnaryExpression</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><code class="t">+</code> <span class="nt">UnaryExpression</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><code class="t">-</code> <span class="nt">UnaryExpression</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><code class="t">~</code> <span class="nt">UnaryExpression</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><code class="t">!</code> <span class="nt">UnaryExpression</span><sub class="g-params">[?Yield]</sub></div>
+ </div>
+ </div>
+
+ <section id="sec-unary-operators-static-semantics-early-errors">
+ <h1><span class="secnum" id="sec-12.5.1"><a href="#sec-unary-operators-static-semantics-early-errors"
+ title="link to this section">12.5.1</a></span> Static Semantics: Early Errors</h1>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">UnaryExpression</span> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">++</code> <span class="nt">UnaryExpression</span></div>
+ <div class="rhs"><code class="t">--</code> <span class="nt">UnaryExpression</span></div>
+ </div>
+
+ <ul>
+ <li>
+ <p>It is an early <a href="#sec-reference-specification-type">Reference</a> Error if <span style="font-family: Times New
+ Roman">IsValidSimpleAssignmentTarget</span> of <span class="nt">UnaryExpression</span> is <span
+ class="value">false</span>.</p>
+ </li>
+ </ul>
+ </section>
+
+ <section id="sec-unary-operators-static-semantics-isfunctiondefinition">
+ <h1><span class="secnum" id="sec-12.5.2"><a href="#sec-unary-operators-static-semantics-isfunctiondefinition"
+ title="link to this section">12.5.2</a></span> Static Semantics: IsFunctionDefinition</h1>
+
+ <p>See also: <a href="#sec-semantics-static-semantics-isfunctiondefinition">12.2.0.2</a>, <a
+ href="#sec-grouping-operator-static-semantics-isfunctiondefinition">12.2.9.2</a>, <a
+ href="#sec-static-semantics-static-semantics-isfunctiondefinition">12.3.1.2</a>, <a
+ href="#sec-postfix-expressions-static-semantics-isfunctiondefinition">12.4.2</a>, <a
+ href="#sec-multiplicative-operators-static-semantics-isfunctiondefinition">12.6.1</a>, <a
+ href="#sec-additive-operators-static-semantics-isfunctiondefinition">12.7.1</a>, <a
+ href="#sec-bitwise-shift-operators-static-semantics-isfunctiondefinition">12.8.1</a>, <a
+ href="#sec-relational-operators-static-semantics-isfunctiondefinition">12.9.1</a>, <a
+ href="#sec-equality-operators-static-semantics-isfunctiondefinition">12.10.1</a>, <a
+ href="#sec-binary-bitwise-operators-static-semantics-isfunctiondefinition">12.11.1</a>, <a
+ href="#sec-binary-logical-operators-static-semantics-isfunctiondefinition">12.12.1</a>, <a
+ href="#sec-conditional-operator-static-semantics-isfunctiondefinition">12.13.1</a>, <a
+ href="#sec-assignment-operators-static-semantics-isfunctiondefinition">12.14.2</a>, <a
+ href="#sec-comma-operator-static-semantics-isfunctiondefinition">12.15.1</a>, <a
+ href="#sec-function-definitions-static-semantics-isfunctiondefinition">14.1.11</a>, <a
+ href="#sec-generator-function-definitions-static-semantics-isfunctiondefinition">14.4.9</a>, <a
+ href="#sec-class-definitions-static-semantics-isfunctiondefinition">14.5.8</a>.</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">UnaryExpression</span> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">delete</code> <span class="nt">UnaryExpression</span></div>
+ <div class="rhs"><code class="t">void</code> <span class="nt">UnaryExpression</span></div>
+ <div class="rhs"><code class="t">typeof</code> <span class="nt">UnaryExpression</span></div>
+ <div class="rhs"><code class="t">++</code> <span class="nt">UnaryExpression</span></div>
+ <div class="rhs"><code class="t">--</code> <span class="nt">UnaryExpression</span></div>
+ <div class="rhs"><code class="t">+</code> <span class="nt">UnaryExpression</span></div>
+ <div class="rhs"><code class="t">-</code> <span class="nt">UnaryExpression</span></div>
+ <div class="rhs"><code class="t">~</code> <span class="nt">UnaryExpression</span></div>
+ <div class="rhs"><code class="t">!</code> <span class="nt">UnaryExpression</span></div>
+ </div>
+
+ <ol class="proc">
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-unary-operators-static-semantics-isvalidsimpleassignmenttarget">
+ <h1><span class="secnum" id="sec-12.5.3"><a href="#sec-unary-operators-static-semantics-isvalidsimpleassignmenttarget"
+ title="link to this section">12.5.3</a></span> Static Semantics: IsValidSimpleAssignmentTarget</h1>
+
+ <p>See also: <a href="#sec-identifiers-static-semantics-isvalidsimpleassignmenttarget">12.1.3</a>, <a
+ href="#sec-semantics-static-semantics-isvalidsimpleassignmenttarget">12.2.0.4</a>, <a
+ href="#sec-grouping-operator-static-semantics-isvalidsimpleassignmenttarget">12.2.9.3</a>, <a
+ href="#sec-static-semantics-static-semantics-isvalidsimpleassignmenttarget">12.3.1.5</a>, <a
+ href="#sec-postfix-expressions-static-semantics-isvalidsimpleassignmenttarget">12.4.3</a>, <a
+ href="#sec-multiplicative-operators-static-semantics-isvalidsimpleassignmenttarget">12.6.2</a>, <a
+ href="#sec-additive-operators-static-semantics-isvalidsimpleassignmenttarget">12.7.2</a>, <a
+ href="#sec-bitwise-shift-operators-static-semantics-isvalidsimpleassignmenttarget">12.8.2</a>, <a
+ href="#sec-relational-operators-static-semantics-isvalidsimpleassignmenttarget">12.9.2</a>, <a
+ href="#sec-equality-operators-static-semantics-isvalidsimpleassignmenttarget">12.10.2</a>, <a
+ href="#sec-binary-bitwise-operators-static-semantics-isvalidsimpleassignmenttarget">12.11.2</a>, <a
+ href="#sec-binary-logical-operators-static-semantics-isvalidsimpleassignmenttarget">12.12.2</a>, <a
+ href="#sec-conditional-operator-static-semantics-isvalidsimpleassignmenttarget">12.13.2</a>, <a
+ href="#sec-assignment-operators-static-semantics-isvalidsimpleassignmenttarget">12.14.3</a>, <a
+ href="#sec-comma-operator-static-semantics-isvalidsimpleassignmenttarget">12.15.2</a>.</p>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">UnaryExpression</span> <span class="geq">:</span></div>
+ <div class="rhs"><code class="t">delete</code> <span class="nt">UnaryExpression</span></div>
+ <div class="rhs"><code class="t">void</code> <span class="nt">UnaryExpression</span></div>
+ <div class="rhs"><code class="t">typeof</code> <span class="nt">UnaryExpression</span></div>
+ <div class="rhs"><code class="t">++</code> <span class="nt">UnaryExpression</span></div>
+ <div class="rhs"><code class="t">--</code> <span class="nt">UnaryExpression</span></div>
+ <div class="rhs"><code class="t">+</code> <span class="nt">UnaryExpression</span></div>
+ <div class="rhs"><code class="t">-</code> <span class="nt">UnaryExpression</span></div>
+ <div class="rhs"><code class="t">~</code> <span class="nt">UnaryExpression</span></div>
+ <div class="rhs"><code class="t">!</code> <span class="nt">UnaryExpression</span></div>
+ </div>
+
+ <ol class="proc">
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-delete-operator">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.5.4"><a href="#sec-delete-operator" title="link to this section">12.5.4</a></span> The
+ <code>delete</code> Operator</h1>
+ </div>
+
+ <section id="sec-delete-operator-static-semantics-early-errors">
+ <h1><span class="secnum" id="sec-12.5.4.1"><a href="#sec-delete-operator-static-semantics-early-errors"
+ title="link to this section">12.5.4.1</a></span> Static Semantics: Early Errors</h1>
+ <div class="gp prod"><span class="nt">UnaryExpression</span> <span class="geq">:</span> <code class="t">delete</code> <span class="nt">UnaryExpression</span></div>
+ <ul>
+ <li>
+ <p>It is a Syntax Error if the <span class="nt">UnaryExpression</span> is contained in <a
+ href="#sec-strict-mode-code">strict mode code</a> and the derived <span class="nt">UnaryExpression</span> is <span
+ class="prod"><span class="nt">PrimaryExpression</span> <span class="geq">:</span></span>
+ <var>IdentifierReference.</var></p>
+ </li>
+
+ <li>
+ <p>It is a Syntax Error if the derived <span class="nt">UnaryExpression</span> is<br> <span style="font-family:
+ Times New Roman"><i>PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList<br></i></span>and <span
+ class="nt">CoverParenthesizedExpressionAndArrowParameterList</span> ultimately derives a phrase that, if used in place
+ of <var>UnaryExpression,</var> would produce a Syntax Error according to these rules. This rule is recursively
+ applied.</p>
+ </li>
+ </ul>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> The last rule means that expressions such as<br>&#x9;&#x9;<code>delete
+ (((foo)))</code><br>produce early errors because of recursive application of the first rule.</p>
+ </div>
+ </section>
+
+ <section id="sec-delete-operator-runtime-semantics-evaluation">
+ <h1><span class="secnum" id="sec-12.5.4.2"><a href="#sec-delete-operator-runtime-semantics-evaluation"
+ title="link to this section">12.5.4.2</a></span> Runtime Semantics: Evaluation</h1>
+ <div class="gp prod"><span class="nt">UnaryExpression</span> <span class="geq">:</span> <code class="t">delete</code> <span class="nt">UnaryExpression</span></div>
+ <ol class="proc">
+ <li>Let <i>ref</i> be the result of evaluating <i>UnaryExpression</i>.</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>ref</i>).</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>ref</i>) is not <a
+ href="#sec-reference-specification-type">Reference</a>, return <b>true</b>.</li>
+ <li>If <a href="#sec-reference-specification-type">IsUnresolvableReference</a>(<i>ref</i>) is <b>true</b>, then
+ <ol class="block">
+ <li><a href="#sec-algorithm-conventions">Assert</a>: <a
+ href="#sec-reference-specification-type">IsStrictReference</a>(<i>ref</i>) is <b>false</b>.</li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+ </li>
+ <li>If <a href="#sec-reference-specification-type">IsPropertyReference</a>(<i>ref</i>) is <b>true</b>, then
+ <ol class="block">
+ <li>If <a href="#sec-reference-specification-type">IsSuperReference</a>(<i>ref</i>), throw a <b>ReferenceError</b>
+ exception.</li>
+ <li>Let <i>baseObj</i> be <a href="#sec-toobject">ToObject</a>(<a
+ href="#sec-reference-specification-type">GetBase</a>(<i>ref</i>)).</li>
+ <li>Let <i>deleteStatus</i> be <i>baseObj</i>.[[Delete]](<a
+ href="#sec-reference-specification-type">GetReferencedName</a>(<i>ref</i>)).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>deleteStatus</i>).</li>
+ <li>If <i>deleteStatus</i> is <b>false</b> and <a
+ href="#sec-reference-specification-type">IsStrictReference</a>(<i>ref</i>) is <b>true</b>, throw a
+ <b>TypeError</b> exception.</li>
+ <li>Return <i>deleteStatus</i>.</li>
+ </ol>
+ </li>
+ <li>Else <i>ref</i> is a <a href="#sec-reference-specification-type">Reference</a> to an <a
+ href="#sec-environment-records">Environment Record</a> binding,
+ <ol class="block">
+ <li>Let <i>bindings</i> be <a href="#sec-reference-specification-type">GetBase</a>(<i>ref</i>).</li>
+ <li>Return <i>bindings</i>.DeleteBinding(<a
+ href="#sec-reference-specification-type">GetReferencedName</a>(<i>ref</i>)).</li>
+ </ol>
+ </li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> When a <code>delete</code> operator occurs within <a href="#sec-strict-mode-code">strict
+ mode code</a>, a <b>SyntaxError</b> exception is thrown if its <i>UnaryExpression</i> is a direct reference to a
+ variable, function argument, or function name. In addition, if a <code>delete</code> operator occurs within <a
+ href="#sec-strict-mode-code">strict mode code</a> and the property to be deleted has the attribute { [[Configurable]]:
+ <b>false</b> }, a <b>TypeError</b> exception is thrown.</p>
+ </div>
+ </section>
+ </section>
+
+ <section id="sec-void-operator">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.5.5"><a href="#sec-void-operator" title="link to this section">12.5.5</a></span> The
+ <code>void</code> Operator</h1>
+ </div>
+
+ <section id="sec-void-operator-runtime-semantics-evaluation">
+ <h1><span class="secnum" id="sec-12.5.5.1"><a href="#sec-void-operator-runtime-semantics-evaluation"
+ title="link to this section">12.5.5.1</a></span> Runtime Semantics: Evaluation</h1>
+ <div class="gp prod"><span class="nt">UnaryExpression</span> <span class="geq">:</span> <code class="t">void</code> <span class="nt">UnaryExpression</span></div>
+ <ol class="proc">
+ <li>Let <i>expr</i> be the result of evaluating <i>UnaryExpression</i>.</li>
+ <li>Let <i>status</i> be <a href="#sec-getvalue">GetValue</a>(<i>expr</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>status</i>).</li>
+ <li>Return <b>undefined</b>.</li>
+ </ol>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> <a href="#sec-getvalue">GetValue</a> must be called even though its value is not used
+ because it may have observable side-effects.</p>
+ </div>
+ </section>
+ </section>
+
+ <section id="sec-typeof-operator">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.5.6"><a href="#sec-typeof-operator" title="link to this section">12.5.6</a></span> The
+ <code>typeof</code> Operator</h1>
+ </div>
+
+ <section id="sec-typeof-operator-runtime-semantics-evaluation">
+ <h1><span class="secnum" id="sec-12.5.6.1"><a href="#sec-typeof-operator-runtime-semantics-evaluation"
+ title="link to this section">12.5.6.1</a></span> Runtime Semantics: Evaluation</h1>
+ <div class="gp prod"><span class="nt">UnaryExpression</span> <span class="geq">:</span> <code class="t">typeof</code> <span class="nt">UnaryExpression</span></div>
+ <ol class="proc">
+ <li>Let <i>val</i> be the result of evaluating <i>UnaryExpression</i>.</li>
+ <li>If <a href="#sec-ecmascript-data-types-and-values">Type</a>(<i>val</i>) is <a
+ href="#sec-reference-specification-type">Reference</a>, then
+ <ol class="block">
+ <li>If <a href="#sec-reference-specification-type">IsUnresolvableReference</a>(<i>val</i>) is <b>true</b>, return
+ <code>"undefined"</code>.</li>
+ </ol>
+ </li>
+ <li>Let <i>val</i> be <a href="#sec-getvalue">GetValue</a>(<i>val</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>val</i>).</li>
+ <li>Return a String according to <a href="#table-35">Table 35</a>.</li>
+ </ol>
+
+ <figure>
+ <figcaption><span id="table-35">Table 35</span> &mdash; typeof Operator Results</figcaption>
+ <table class="real-table">
+ <tr>
+ <th><b>Type of</b> <span style="font-family: Times New Roman">val</span></th>
+ <th>Result</th>
+ </tr>
+ <tr>
+ <td>Undefined</td>
+ <td><code>"undefined"</code></td>
+ </tr>
+ <tr>
+ <td>Null</td>
+ <td><code>"object"</code></td>
+ </tr>
+ <tr>
+ <td>Boolean</td>
+ <td><code>"boolean"</code></td>
+ </tr>
+ <tr>
+ <td>Number</td>
+ <td><code>"number"</code></td>
+ </tr>
+ <tr>
+ <td>String</td>
+ <td><code>"string"</code></td>
+ </tr>
+ <tr>
+ <td>Symbol</td>
+ <td><code>"symbol"</code></td>
+ </tr>
+ <tr>
+ <td>Object (ordinary and does not implement [[Call]])</td>
+ <td><code>"object"</code></td>
+ </tr>
+ <tr>
+ <td>Object (standard exotic and does not implement [[Call]])</td>
+ <td><code>"object"</code></td>
+ </tr>
+ <tr>
+ <td>Object (implements [[Call]])</td>
+ <td><code>"function"</code></td>
+ </tr>
+ <tr>
+ <td>Object (non-standard exotic and does not implement [[Call]])</td>
+ <td>Implementation-defined. Must not be <code>"undefined"</code>, <code>"boolean"</code>, <code>"function"</code>, <code>"number"</code>, <code>"symbol"</code>, or <code>"string".</code></td>
+ </tr>
+ </table>
+ </figure>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> Implementations are discouraged from defining new <code>typeof</code> result values for
+ non-standard exotic objects. If possible <code>"object"</code>should be used for such objects.</p>
+ </div>
+ </section>
+ </section>
+
+ <section id="sec-prefix-increment-operator">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.5.7"><a href="#sec-prefix-increment-operator"
+ title="link to this section">12.5.7</a></span> Prefix Increment Operator</h1>
+ </div>
+
+ <section id="sec-prefix-increment-operator-runtime-semantics-evaluation">
+ <h1><span class="secnum" id="sec-12.5.7.1"><a href="#sec-prefix-increment-operator-runtime-semantics-evaluation"
+ title="link to this section">12.5.7.1</a></span> Runtime Semantics: Evaluation</h1>
+ <div class="gp prod"><span class="nt">UnaryExpression</span> <span class="geq">:</span> <code class="t">++</code> <span class="nt">UnaryExpression</span></div>
+ <ol class="proc">
+ <li>Let <i>expr</i> be the result of evaluating <i>UnaryExpression</i>.</li>
+ <li>Let <i>oldValue</i> be <a href="#sec-tonumber">ToNumber</a>(<a href="#sec-getvalue">GetValue</a>(<i>expr</i>)).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>oldValue</i>).</li>
+ <li>Let <i>newValue</i> be the result of adding the value <code>1</code> to <i>oldValue</i>, using the same rules as for
+ the <code>+</code> operator (<a href="#sec-applying-the-additive-operators-to-numbers">see 12.7.5</a>).</li>
+ <li>Let <i>status</i> be <a href="#sec-putvalue">PutValue</a>(<i>expr</i>, <i>newValue</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>status</i>).</li>
+ <li>Return <i>newValue</i>.</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-prefix-decrement-operator">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.5.8"><a href="#sec-prefix-decrement-operator"
+ title="link to this section">12.5.8</a></span> Prefix Decrement Operator</h1>
+ </div>
+
+ <section id="sec-prefix-decrement-operator-runtime-semantics-evaluation">
+ <h1><span class="secnum" id="sec-12.5.8.1"><a href="#sec-prefix-decrement-operator-runtime-semantics-evaluation"
+ title="link to this section">12.5.8.1</a></span> Runtime Semantics: Evaluation</h1>
+ <div class="gp prod"><span class="nt">UnaryExpression</span> <span class="geq">:</span> <code class="t">--</code> <span class="nt">UnaryExpression</span></div>
+ <ol class="proc">
+ <li>Let <i>expr</i> be the result of evaluating <i>UnaryExpression</i>.</li>
+ <li>Let <i>oldValue</i> be <a href="#sec-tonumber">ToNumber</a>(<a href="#sec-getvalue">GetValue</a>(<i>expr</i>)).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>oldValue</i>).</li>
+ <li>Let <i>newValue</i> be the result of subtracting the value <code>1</code> from <i>oldValue</i>, using the same
+ rules as for the <code>-</code> operator (<a href="#sec-applying-the-additive-operators-to-numbers">see
+ 12.7.5</a>).</li>
+ <li>Let <i>status</i> be <a href="#sec-putvalue">PutValue</a>(<i>expr</i>, <i>newValue</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>status</i>).</li>
+ <li>Return <i>newValue</i>.</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-unary-plus-operator">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.5.9"><a href="#sec-unary-plus-operator" title="link to this section">12.5.9</a></span>
+ Unary <code>+</code> Operator</h1>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> The unary + operator converts its operand to Number type.</p>
+ </div>
+ </div>
+
+ <section id="sec-unary-plus-operator-runtime-semantics-evaluation">
+ <h1><span class="secnum" id="sec-12.5.9.1"><a href="#sec-unary-plus-operator-runtime-semantics-evaluation"
+ title="link to this section">12.5.9.1</a></span> Runtime Semantics: Evaluation</h1>
+ <div class="gp prod"><span class="nt">UnaryExpression</span> <span class="geq">:</span> <code class="t">+</code> <span class="nt">UnaryExpression</span></div>
+ <ol class="proc">
+ <li>Let <i>expr</i> be the result of evaluating <i>UnaryExpression</i>.</li>
+ <li>Return <a href="#sec-tonumber">ToNumber</a>(<a href="#sec-getvalue">GetValue</a>(<i>expr</i>)).</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-unary-minus-operator">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.5.10"><a href="#sec-unary-minus-operator"
+ title="link to this section">12.5.10</a></span> Unary <code>-</code> Operator</h1>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> The unary <code>-</code> operator converts its operand to Number type and then negates
+ it. Negating <b>+0</b> produces <b>&minus;0</b>, and negating <b>&minus;0</b> produces <b>+0</b>.</p>
+ </div>
+ </div>
+
+ <section id="sec-unary-minus-operator-runtime-semantics-evaluation">
+ <h1><span class="secnum" id="sec-12.5.10.1"><a href="#sec-unary-minus-operator-runtime-semantics-evaluation"
+ title="link to this section">12.5.10.1</a></span> Runtime Semantics: Evaluation</h1>
+ <div class="gp prod"><span class="nt">UnaryExpression</span> <span class="geq">:</span> <code class="t">-</code> <span class="nt">UnaryExpression</span></div>
+ <ol class="proc">
+ <li>Let <i>expr</i> be the result of evaluating <i>UnaryExpression</i>.</li>
+ <li>Let <i>oldValue</i> be <a href="#sec-tonumber">ToNumber</a>(<a href="#sec-getvalue">GetValue</a>(<i>expr</i>)).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>oldValue</i>).</li>
+ <li>If <i>oldValue</i> is <b>NaN</b>, return <b>NaN</b>.</li>
+ <li>Return the result of negating <i>oldValue</i>; that is, compute a Number with the same magnitude but opposite
+ sign.</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-bitwise-not-operator">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.5.11"><a href="#sec-bitwise-not-operator"
+ title="link to this section">12.5.11</a></span> Bitwise NOT Operator ( <code>~</code> )</h1>
+ </div>
+
+ <section id="sec-bitwise-not-operator-runtime-semantics-evaluation">
+ <h1><span class="secnum" id="sec-12.5.11.1"><a href="#sec-bitwise-not-operator-runtime-semantics-evaluation"
+ title="link to this section">12.5.11.1</a></span> Runtime Semantics: Evaluation</h1>
+ <div class="gp prod"><span class="nt">UnaryExpression</span> <span class="geq">:</span> <code class="t">~</code> <span class="nt">UnaryExpression</span></div>
+ <ol class="proc">
+ <li>Let <i>expr</i> be the result of evaluating <i>UnaryExpression</i>.</li>
+ <li>Let <i>oldValue</i> be <a href="#sec-toint32">ToInt32</a>(<a href="#sec-getvalue">GetValue</a>(<i>expr</i>)).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>oldValue</i>).</li>
+ <li>Return the result of applying bitwise complement to <i>oldValue</i>. The result is a signed 32-bit integer.</li>
+ </ol>
+ </section>
+ </section>
+
+ <section id="sec-logical-not-operator">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.5.12"><a href="#sec-logical-not-operator"
+ title="link to this section">12.5.12</a></span> Logical NOT Operator ( <code>!</code> )</h1>
+ </div>
+
+ <section id="sec-logical-not-operator-runtime-semantics-evaluation">
+ <h1><span class="secnum" id="sec-12.5.12.1"><a href="#sec-logical-not-operator-runtime-semantics-evaluation"
+ title="link to this section">12.5.12.1</a></span> Runtime Semantics: Evaluation</h1>
+ <div class="gp prod"><span class="nt">UnaryExpression</span> <span class="geq">:</span> <code class="t">!</code> <span class="nt">UnaryExpression</span></div>
+ <ol class="proc">
+ <li>Let <i>expr</i> be the result of evaluating <i>UnaryExpression</i>.</li>
+ <li>Let <i>oldValue</i> be <a href="#sec-toboolean">ToBoolean</a>(<a
+ href="#sec-getvalue">GetValue</a>(<i>expr</i>)).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>oldValue</i>).</li>
+ <li>If <i>oldValue</i> is <b>true</b>, return <b>false</b>.</li>
+ <li>Return <b>true</b>.</li>
+ </ol>
+ </section>
+ </section>
+ </section>
+
+ <section id="sec-multiplicative-operators">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.6"><a href="#sec-multiplicative-operators" title="link to this section">12.6</a></span>
+ Multiplicative Operators</h1>
+ <h2>Syntax</h2>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">MultiplicativeExpression</span><sub class="g-params">[Yield]</sub> <span class="geq">:</span></div>
+ <div class="rhs"><span class="nt">UnaryExpression</span><sub class="g-params">[?Yield]</sub></div>
+ <div class="rhs"><span class="nt">MultiplicativeExpression</span><sub class="g-params">[?Yield]</sub> <span class="nt">MultiplicativeOperator</span> <span class="nt">UnaryExpression</span><sub class="g-params">[?Yield]</sub></div>
+ </div>
+
+ <div class="gp">
+ <div class="lhs"><span class="nt">MultiplicativeOperator</span> <span class="geq">:</span> <span class="grhsmod">one of</span></div>
+ <div class="rhs"><code class="t">*</code> <code class="t">/</code> <code class="t">%</code></div>
+ </div>
+ </div>
+
+ <section id="sec-multiplicative-operators-static-semantics-isfunctiondefinition">
+ <h1><span class="secnum" id="sec-12.6.1"><a href="#sec-multiplicative-operators-static-semantics-isfunctiondefinition"
+ title="link to this section">12.6.1</a></span> Static Semantics: IsFunctionDefinition</h1>
+
+ <p>See also: <a href="#sec-semantics-static-semantics-isfunctiondefinition">12.2.0.2</a>, <a
+ href="#sec-grouping-operator-static-semantics-isfunctiondefinition">12.2.9.2</a>, <a
+ href="#sec-static-semantics-static-semantics-isfunctiondefinition">12.3.1.2</a>, <a
+ href="#sec-postfix-expressions-static-semantics-isfunctiondefinition">12.4.2</a>, <a
+ href="#sec-unary-operators-static-semantics-isfunctiondefinition">12.5.2</a>, <a
+ href="#sec-additive-operators-static-semantics-isfunctiondefinition">12.7.1</a>, <a
+ href="#sec-bitwise-shift-operators-static-semantics-isfunctiondefinition">12.8.1</a>, <a
+ href="#sec-relational-operators-static-semantics-isfunctiondefinition">12.9.1</a>, <a
+ href="#sec-equality-operators-static-semantics-isfunctiondefinition">12.10.1</a>, <a
+ href="#sec-binary-bitwise-operators-static-semantics-isfunctiondefinition">12.11.1</a>, <a
+ href="#sec-binary-logical-operators-static-semantics-isfunctiondefinition">12.12.1</a>, <a
+ href="#sec-conditional-operator-static-semantics-isfunctiondefinition">12.13.1</a>, <a
+ href="#sec-assignment-operators-static-semantics-isfunctiondefinition">12.14.2</a>, <a
+ href="#sec-comma-operator-static-semantics-isfunctiondefinition">12.15.1</a>, <a
+ href="#sec-function-definitions-static-semantics-isfunctiondefinition">14.1.11</a>, <a
+ href="#sec-generator-function-definitions-static-semantics-isfunctiondefinition">14.4.9</a>, <a
+ href="#sec-class-definitions-static-semantics-isfunctiondefinition">14.5.8</a>.</p>
+
+ <p><i>MultiplicativeExpression <b>:</b></i> <i>MultiplicativeExpression</i> <i>MultiplicativeOperator</i>
+ <i>UnaryExpression</i></p>
+
+ <ol class="proc">
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-multiplicative-operators-static-semantics-isvalidsimpleassignmenttarget">
+ <h1><span class="secnum" id="sec-12.6.2"><a
+ href="#sec-multiplicative-operators-static-semantics-isvalidsimpleassignmenttarget"
+ title="link to this section">12.6.2</a></span> Static Semantics: IsValidSimpleAssignmentTarget</h1>
+
+ <p>See also: <a href="#sec-identifiers-static-semantics-isvalidsimpleassignmenttarget">12.1.3</a>, <a
+ href="#sec-semantics-static-semantics-isvalidsimpleassignmenttarget">12.2.0.4</a>, <a
+ href="#sec-grouping-operator-static-semantics-isvalidsimpleassignmenttarget">12.2.9.3</a>, <a
+ href="#sec-static-semantics-static-semantics-isvalidsimpleassignmenttarget">12.3.1.5</a>, <a
+ href="#sec-postfix-expressions-static-semantics-isvalidsimpleassignmenttarget">12.4.3</a>, <a
+ href="#sec-unary-operators-static-semantics-isvalidsimpleassignmenttarget">12.5.3</a>, <a
+ href="#sec-additive-operators-static-semantics-isvalidsimpleassignmenttarget">12.7.2</a>, <a
+ href="#sec-bitwise-shift-operators-static-semantics-isvalidsimpleassignmenttarget">12.8.2</a>, <a
+ href="#sec-relational-operators-static-semantics-isvalidsimpleassignmenttarget">12.9.2</a>, <a
+ href="#sec-equality-operators-static-semantics-isvalidsimpleassignmenttarget">12.10.2</a>, <a
+ href="#sec-binary-bitwise-operators-static-semantics-isvalidsimpleassignmenttarget">12.11.2</a>, <a
+ href="#sec-binary-logical-operators-static-semantics-isvalidsimpleassignmenttarget">12.12.2</a>, <a
+ href="#sec-conditional-operator-static-semantics-isvalidsimpleassignmenttarget">12.13.2</a>, <a
+ href="#sec-assignment-operators-static-semantics-isvalidsimpleassignmenttarget">12.14.3</a>, <a
+ href="#sec-comma-operator-static-semantics-isvalidsimpleassignmenttarget">12.15.2</a>.</p>
+
+ <p><i>MultiplicativeExpression <b>:</b></i> <i>MultiplicativeExpression</i> <i>MultiplicativeOperator</i>
+ <i>UnaryExpression</i></p>
+
+ <ol class="proc">
+ <li>Return <b>false</b>.</li>
+ </ol>
+ </section>
+
+ <section id="sec-multiplicative-operators-runtime-semantics-evaluation">
+ <div class="front">
+ <h1><span class="secnum" id="sec-12.6.3"><a href="#sec-multiplicative-operators-runtime-semantics-evaluation"
+ title="link to this section">12.6.3</a></span> Runtime Semantics: Evaluation</h1>
+
+ <p><i>MultiplicativeExpression <b>:</b></i> <i>MultiplicativeExpression</i> <i>MultiplicativeOperator</i>
+ <i>UnaryExpression</i></p>
+
+ <ol class="proc">
+ <li>Let <i>left</i> be the result of evaluating <i>MultiplicativeExpression</i>.</li>
+ <li>Let <i>leftValue</i> be <a href="#sec-getvalue">GetValue</a>(<i>left</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>leftValue</i>).</li>
+ <li>Let <i>right</i> be the result of evaluating <i>UnaryExpression</i>.</li>
+ <li>Let <i>rightValue</i> be <a href="#sec-getvalue">GetValue</a>(<i>right</i>).</li>
+ <li>Let <i>lnum</i> be <a href="#sec-tonumber">ToNumber</a>(<i>leftValue</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>lnum</i>).</li>
+ <li>Let <i>rnum</i> be <a href="#sec-tonumber">ToNumber</a>(<i>rightValue</i>).</li>
+ <li><a href="#sec-returnifabrupt">ReturnIfAbrupt</a>(<i>rnum</i>).</li>
+ <li>Return the result of applying the <i>MultiplicativeOperator</i> (*, /, or %) to <i>lnum</i> and <i>rnum</i> as
+ specified in <a href="#sec-applying-the-mul-operator">12.6.3.1</a>, <a
+ href="#sec-applying-the-div-operator">12.6.3.2</a>, or <a href="#sec-applying-the-mod-operator">12.6.3.3</a>.</li>
+ </ol>
+ </div>
+
+ <section id="sec-applying-the-mul-operator">
+ <h1><span class="secnum" id="sec-12.6.3.1"><a href="#sec-applying-the-mul-operator"
+ title="link to this section">12.6.3.1</a></span> Applying the <code>*</code> Operator</h1>
+
+ <p>The <code>*</code> <span class="nt">MultiplicativeOperator</span> performs multiplication, producing the product of its
+ operands. Multiplication is commutative. Multiplication is not always associative in ECMAScript, because of finite
+ precision.</p>
+
+ <p>The result of a floating-point multiplication is governed by the rules of IEEE 754 binary double-precision
+ arithmetic:</p>
+
+ <ul>
+ <li>
+ <p>If either operand is <b>NaN</b>, the result is <b>NaN</b>.</p>
+ </li>
+
+ <li>
+ <p>The sign of the result is positive if both operands have the same sign, negative if the operands have different
+ signs.</p>
+ </li>
+
+ <li>
+ <p>Multiplication of an infinity by a zero results in <b>NaN</b>.</p>
+ </li>
+
+ <li>
+ <p>Multiplication of an infinity by an infinity results in an infinity. The sign is determined by the rule already
+ stated above.</p>
+ </li>
+
+ <li>
+ <p>Multiplication of an infinity by a finite nonzero value results in a signed infinity. The sign is determined by the
+ rule already stated above.</p>
+ </li>
+
+ <li>
+ <p>In the remaining cases, where neither an infinity nor NaN is involved, the product is computed and rounded to the
+ nearest representable value using IEEE 754 round-to-nearest mode. If the magnitude is too large to represent, the
+ result is then an infinity of appropriate sign. If the magnitude is too small to represent, the result is then a zero
+ of appropriate sign. The ECMAScript language requires support of gradual underflow as defined by IEEE 754.</p>
+ </li>
+ </ul>
+ </section>
+
+ <section id="sec-applying-the-div-operator">
+ <h1><span class="secnum" id="sec-12.6.3.2"><a href="#sec-applying-the-div-operator"
+ title="link to this section">12.6.3.2</a></span> Applying the <code>/</code> Operator</h1>
+
+ <p>The <code>/</code> <span class="nt">MultiplicativeOperator</span> performs division, producing the quotient of its
+ operands. The left operand is the dividend and the right operand is the divisor. ECMAScript does not perform integer
+ division. The operands and result of all division operations are double-precision floating-point numbers. The result of
+ division is determined by the specification of IEEE 754 arithmetic:</p>
+
+ <ul>
+ <li>
+ <p>If either operand is <b>NaN</b>, the result is <b>NaN</b>.</p>
+ </li>
+
+ <li>
+ <p>The sign of the result is positive if both operands have the same sign, negative if the operands have different
+ signs.</p>
+ </li>
+
+ <li>
+ <p>Division of an infinity by an infinity results in <b>NaN</b>.</p>
+ </li>
+
+ <li>
+ <p>Division of an infinity by a zero results in an infinity. The sign is determined by the rule already stated
+ above.</p>
+ </li>
+
+ <li>
+ <p>Division of an infinity by a nonzero finite value results in a signed infinity. The sign is determined by the rule
+ already stated above.</p>
+ </li>
+
+ <li>
+ <p>Division of a finite value by an infinity results in zero. The sign is determined by the rule already stated
+ above.</p>
+ </li>
+
+ <li>
+ <p>Division of a zero by a zero results in <b>NaN</b>; division of zero by any other finite value results in zero,
+ with the sign determined by the rule already stated above.</p>
+ </li>
+
+ <li>
+ <p>Division of a nonzero finite value by a zero results in a signed infinity. The sign is determined by the rule
+ already stated above.</p>
+ </li>
+
+ <li>
+ <p>In the remaining cases, where neither an infinity, nor a zero, nor <b>NaN</b> is involved, the quotient is computed
+ and rounded to the nearest representable value using IEEE 754 round-to-nearest mode. If the magnitude is too large to
+ represent, the operation overflows; the result is then an infinity of appropriate sign. If the magnitude is too small
+ to represent, the operation underflows and the result is a zero of the appropriate sign. The ECMAScript language
+ requires support of gradual underflow as defined by IEEE 754.</p>
+ </li>
+ </ul>
+ </section>
+
+ <section id="sec-applying-the-mod-operator">
+ <h1><span class="secnum" id="sec-12.6.3.3"><a href="#sec-applying-the-mod-operator"
+ title="link to this section">12.6.3.3</a></span> Applying the <code>%</code> Operator</h1>
+
+ <p>The <code>%</code> <span class="nt">MultiplicativeOperator</span> yields the remainder of its operands from an implied
+ division; the left operand is the dividend and the right operand is the divisor.</p>
+
+ <div class="note">
+ <p><span class="nh">NOTE</span> In C and C++, the remainder operator accepts only integral operands; in ECMAScript, it
+ also accepts floating-point operands.</p>
+ </div>
+
+ <p>The result of a floating-point remainder operation as computed by the <code>%</code> operator is not the same as the
+ &ldquo;remainder&rdquo; operation defined by IEEE 754. The IEEE 754 &ldquo;remainder&rdquo; operation computes the
+ remainder from a rounding division, not a truncating division, and so its behaviour is not analogous to that of the usual
+ integer remainder operator. Instead the ECMAScript language defines <code>%</code> on floating-point operations to behave
+ in a manner analogous to that of the Java integer remainder operator; this may be compared with the C library function
+ fmod.</p>
+
+ <p>The result of an ECMAScript floating-point remainder operation is determined by the rules of IEEE arithmetic:</p>
+
+ <ul>
+ <li>
+ <p>If either operand is <b>NaN</b>, the result is <b>NaN</b>.</p>
+ </li>
+
+ <li>
+ <p>The sign of the result equals the sign of the dividend.</p>
+ </li>
+
+ <li>
+ <p>If the dividend is an infinity, or the divisor is a zero, or both, the result is <b>NaN</b>.</p>
+ </li>
+
+ <li>
+ <p>If the dividend is finite and the divisor is an infinity, the result equals the dividend.</p>
+ </li>
+
+ <li>
+ <p>If the dividend is a zero and the divisor is nonzero and finite, the result is the same as the dividend.</p>
+ </li>
+
+ <li>
+ <p>In the remaining cases, where neither an infinity, nor a zero, nor <b>NaN</b> is involved, the floating-point
+ remainder r from a dividend n and a divisor d is defined by the mathematical relation r = n &minus; (d &times; q)
+ where q is an integer that is negative only if n/d is negative and positive only if n/d is positive, and whose
+ magnitude is as large as possible without exceeding the magnitude of the true mathematical quotient of n and d. r is
+ computed and rounded to the nearest representable value using IEEE 754 round-to-nearest mode.</p>
+ </li>
+ </ul>
+ </section>
+ </section>
+ </section>
+</section>
+</body>
+</html>
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/sample_gopher.svg b/vendor/github.com/tdewolff/minify/benchmarks/sample_gopher.svg
new file mode 100644
index 0000000..658154b
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/sample_gopher.svg
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="レイヤー_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" width="401.98px" height="559.472px" viewBox="0 0 401.98 559.472" enable-background="new 0 0 401.98 559.472"
+ xml:space="preserve">
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#F6D2A2" stroke="#000000" stroke-width="3" stroke-linecap="round" d="
+ M10.634,300.493c0.764,15.751,16.499,8.463,23.626,3.539c6.765-4.675,8.743-0.789,9.337-10.015
+ c0.389-6.064,1.088-12.128,0.744-18.216c-10.23-0.927-21.357,1.509-29.744,7.602C10.277,286.542,2.177,296.561,10.634,300.493"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#C6B198" stroke="#000000" stroke-width="3" stroke-linecap="round" d="
+ M10.634,300.493c2.29-0.852,4.717-1.457,6.271-3.528"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#6AD7E5" stroke="#000000" stroke-width="3" stroke-linecap="round" d="
+ M46.997,112.853C-13.3,95.897,31.536,19.189,79.956,50.74L46.997,112.853z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#6AD7E5" stroke="#000000" stroke-width="3" stroke-linecap="round" d="
+ M314.895,44.984c47.727-33.523,90.856,42.111,35.388,61.141L314.895,44.984z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#F6D2A2" stroke="#000000" stroke-width="3" stroke-linecap="round" d="
+ M325.161,494.343c12.123,7.501,34.282,30.182,16.096,41.18c-17.474,15.999-27.254-17.561-42.591-22.211
+ C305.271,504.342,313.643,496.163,325.161,494.343z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" d="
+ M341.257,535.522c-2.696-5.361-3.601-11.618-8.102-15.939"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#F6D2A2" stroke="#000000" stroke-width="3" stroke-linecap="round" d="
+ M108.579,519.975c-14.229,2.202-22.238,15.039-34.1,21.558c-11.178,6.665-15.454-2.134-16.461-3.92
+ c-1.752-0.799-1.605,0.744-4.309-1.979c-10.362-16.354,10.797-28.308,21.815-36.432C90.87,496.1,100.487,509.404,108.579,519.975z"
+ />
+<path fill-rule="evenodd" clip-rule="evenodd" fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" d="
+ M58.019,537.612c0.542-6.233,5.484-10.407,7.838-15.677"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M49.513,91.667c-7.955-4.208-13.791-9.923-8.925-19.124
+ c4.505-8.518,12.874-7.593,20.83-3.385L49.513,91.667z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M337.716,83.667c7.955-4.208,13.791-9.923,8.925-19.124
+ c-4.505-8.518-12.874-7.593-20.83-3.385L337.716,83.667z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#F6D2A2" stroke="#000000" stroke-width="3" stroke-linecap="round" d="
+ M392.475,298.493c-0.764,15.751-16.499,8.463-23.626,3.539c-6.765-4.675-8.743-0.789-9.337-10.015
+ c-0.389-6.064-1.088-12.128-0.744-18.216c10.23-0.927,21.357,1.509,29.744,7.602C392.831,284.542,400.932,294.561,392.475,298.493"
+ />
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#C6B198" stroke="#000000" stroke-width="3" stroke-linecap="round" d="
+ M392.475,298.493c-2.29-0.852-4.717-1.457-6.271-3.528"/>
+<g>
+ <path fill-rule="evenodd" clip-rule="evenodd" fill="#6AD7E5" stroke="#000000" stroke-width="3" stroke-linecap="round" d="
+ M195.512,13.124c60.365,0,116.953,8.633,146.452,66.629c26.478,65.006,17.062,135.104,21.1,203.806
+ c3.468,58.992,11.157,127.145-16.21,181.812c-28.79,57.514-100.73,71.982-160,69.863c-46.555-1.666-102.794-16.854-129.069-59.389
+ c-30.826-49.9-16.232-124.098-13.993-179.622c2.652-65.771-17.815-131.742,3.792-196.101
+ C69.999,33.359,130.451,18.271,195.512,13.124"/>
+</g>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" stroke="#000000" stroke-width="2.9081" stroke-linecap="round" d="
+ M206.169,94.16c10.838,63.003,113.822,46.345,99.03-17.197C291.935,19.983,202.567,35.755,206.169,94.16"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" stroke="#000000" stroke-width="2.8214" stroke-linecap="round" d="
+ M83.103,104.35c14.047,54.85,101.864,40.807,98.554-14.213C177.691,24.242,69.673,36.957,83.103,104.35"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" stroke="#000000" stroke-width="3" stroke-linecap="round" d="
+ M218.594,169.762c0.046,8.191,1.861,17.387,0.312,26.101c-2.091,3.952-6.193,4.37-9.729,5.967c-4.89-0.767-9.002-3.978-10.963-8.552
+ c-1.255-9.946,0.468-19.576,0.785-29.526L218.594,169.762z"/>
+<g>
+ <ellipse fill-rule="evenodd" clip-rule="evenodd" cx="107.324" cy="95.404" rx="14.829" ry="16.062"/>
+ <ellipse fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" cx="114.069" cy="99.029" rx="3.496" ry="4.082"/>
+</g>
+<g>
+ <ellipse fill-rule="evenodd" clip-rule="evenodd" cx="231.571" cy="91.404" rx="14.582" ry="16.062"/>
+ <ellipse fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" cx="238.204" cy="95.029" rx="3.438" ry="4.082"/>
+</g>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" stroke="#000000" stroke-width="3" stroke-linecap="round" d="
+ M176.217,168.87c-6.47,15.68,3.608,47.035,21.163,23.908c-1.255-9.946,0.468-19.576,0.785-29.526L176.217,168.87z"/>
+<g>
+ <path fill-rule="evenodd" clip-rule="evenodd" fill="#F6D2A2" stroke="#231F20" stroke-width="3" stroke-linecap="round" d="
+ M178.431,138.673c-12.059,1.028-21.916,15.366-15.646,26.709c8.303,15.024,26.836-1.329,38.379,0.203
+ c13.285,0.272,24.17,14.047,34.84,2.49c11.867-12.854-5.109-25.373-18.377-30.97L178.431,138.673z"/>
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M176.913,138.045c-0.893-20.891,38.938-23.503,43.642-6.016
+ C225.247,149.475,178.874,153.527,176.913,138.045C175.348,125.682,176.913,138.045,176.913,138.045z"/>
+</g>
+</svg>
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/sample_gumby.css b/vendor/github.com/tdewolff/minify/benchmarks/sample_gumby.css
new file mode 100644
index 0000000..8c56d2e
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/sample_gumby.css
@@ -0,0 +1,1683 @@
+@charset "UTF-8";
+/**
+* Gumby Framework
+* ---------------
+*
+* Follow @gumbycss on twitter and spread the love.
+* We worked super hard on making this awesome and released it to the web.
+* All we ask is you leave this intact. #gumbyisawesome
+*
+* Gumby Framework
+* http://gumbyframework.com
+*
+* Built with love by your friends @digitalsurgeons
+* http://www.digitalsurgeons.com
+*
+* Free to use under the MIT license.
+* http://www.opensource.org/licenses/mit-license.php
+*/
+@import url(//fonts.googleapis.com/css?family=Open+Sans:400,300,600,700);
+html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font: inherit; font-size: 100%; vertical-align: baseline; }
+
+html { line-height: 1; }
+
+ol, ul { list-style: none; }
+
+table { border-collapse: collapse; border-spacing: 0; }
+
+caption, th, td { text-align: left; font-weight: normal; vertical-align: middle; }
+
+q, blockquote { quotes: none; }
+q:before, q:after, blockquote:before, blockquote:after { content: ""; content: none; }
+
+a img { border: none; }
+
+article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { display: block; }
+
+.pull_right { float: right; }
+
+.pull_left { float: left; }
+
+/* Base Styles */
+html { font-size: 100%; line-height: 1.5em; }
+
+* { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }
+
+body { background: #fff; font-family: "Open Sans"; font-weight: 400; color: #555555; position: relative; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
+@media only screen and (max-width: 767px) { body { -webkit-text-size-adjust: none; -ms-text-size-adjust: none; width: 100%; min-width: 0; } }
+
+html, body { height: 100%; }
+
+.hide { display: none; }
+
+.hide.active, .show { display: block; }
+
+.icon-note.icon-left a:before, .icon-note.icon-right a:after, i.icon-note:before { content: "\\266a"; height: inherit; }
+
+.icon-note-beamed.icon-left a:before, .icon-note-beamed.icon-right a:after, i.icon-note-beamed:before { content: "\\266b"; height: inherit; }
+
+.icon-music.icon-left a:before, .icon-music.icon-right a:after, i.icon-music:before { content: "\\1f3b5"; height: inherit; }
+
+.icon-search.icon-left a:before, .icon-search.icon-right a:after, i.icon-search:before { content: "\\1f50d"; height: inherit; }
+
+.icon-flashlight.icon-left a:before, .icon-flashlight.icon-right a:after, i.icon-flashlight:before { content: "\\1f526"; height: inherit; }
+
+.icon-mail.icon-left a:before, .icon-mail.icon-right a:after, i.icon-mail:before { content: "\\2709"; height: inherit; }
+
+.icon-heart.icon-left a:before, .icon-heart.icon-right a:after, i.icon-heart:before { content: "\\2665"; height: inherit; }
+
+.icon-heart-empty.icon-left a:before, .icon-heart-empty.icon-right a:after, i.icon-heart-empty:before { content: "\\2661"; height: inherit; }
+
+.icon-star.icon-left a:before, .icon-star.icon-right a:after, i.icon-star:before { content: "\\2605"; height: inherit; }
+
+.icon-star-empty.icon-left a:before, .icon-star-empty.icon-right a:after, i.icon-star-empty:before { content: "\\2606"; height: inherit; }
+
+.icon-user.icon-left a:before, .icon-user.icon-right a:after, i.icon-user:before { content: "\\1f464"; height: inherit; }
+
+.icon-users.icon-left a:before, .icon-users.icon-right a:after, i.icon-users:before { content: "\\1f465"; height: inherit; }
+
+.icon-user-add.icon-left a:before, .icon-user-add.icon-right a:after, i.icon-user-add:before { content: "\\e700"; height: inherit; }
+
+.icon-video.icon-left a:before, .icon-video.icon-right a:after, i.icon-video:before { content: "\\1f3ac"; height: inherit; }
+
+.icon-picture.icon-left a:before, .icon-picture.icon-right a:after, i.icon-picture:before { content: "\\1f304"; height: inherit; }
+
+.icon-camera.icon-left a:before, .icon-camera.icon-right a:after, i.icon-camera:before { content: "\\1f4f7"; height: inherit; }
+
+.icon-layout.icon-left a:before, .icon-layout.icon-right a:after, i.icon-layout:before { content: "\\268f"; height: inherit; }
+
+.icon-menu.icon-left a:before, .icon-menu.icon-right a:after, i.icon-menu:before { content: "\\2630"; height: inherit; }
+
+.icon-check.icon-left a:before, .icon-check.icon-right a:after, i.icon-check:before { content: "\\2713"; height: inherit; }
+
+.icon-cancel.icon-left a:before, .icon-cancel.icon-right a:after, i.icon-cancel:before { content: "\\2715"; height: inherit; }
+
+.icon-cancel-circled.icon-left a:before, .icon-cancel-circled.icon-right a:after, i.icon-cancel-circled:before { content: "\\2716"; height: inherit; }
+
+.icon-cancel-squared.icon-left a:before, .icon-cancel-squared.icon-right a:after, i.icon-cancel-squared:before { content: "\\274e"; height: inherit; }
+
+.icon-plus.icon-left a:before, .icon-plus.icon-right a:after, i.icon-plus:before { content: "\\2b"; height: inherit; }
+
+.icon-plus-circled.icon-left a:before, .icon-plus-circled.icon-right a:after, i.icon-plus-circled:before { content: "\\2795"; height: inherit; }
+
+.icon-plus-squared.icon-left a:before, .icon-plus-squared.icon-right a:after, i.icon-plus-squared:before { content: "\\229e"; height: inherit; }
+
+.icon-minus.icon-left a:before, .icon-minus.icon-right a:after, i.icon-minus:before { content: "\\2d"; height: inherit; }
+
+.icon-minus-circled.icon-left a:before, .icon-minus-circled.icon-right a:after, i.icon-minus-circled:before { content: "\\2796"; height: inherit; }
+
+.icon-minus-squared.icon-left a:before, .icon-minus-squared.icon-right a:after, i.icon-minus-squared:before { content: "\\229f"; height: inherit; }
+
+.icon-help.icon-left a:before, .icon-help.icon-right a:after, i.icon-help:before { content: "\\2753"; height: inherit; }
+
+.icon-help-circled.icon-left a:before, .icon-help-circled.icon-right a:after, i.icon-help-circled:before { content: "\\e704"; height: inherit; }
+
+.icon-info.icon-left a:before, .icon-info.icon-right a:after, i.icon-info:before { content: "\\2139"; height: inherit; }
+
+.icon-info-circled.icon-left a:before, .icon-info-circled.icon-right a:after, i.icon-info-circled:before { content: "\\e705"; height: inherit; }
+
+.icon-back.icon-left a:before, .icon-back.icon-right a:after, i.icon-back:before { content: "\\1f519"; height: inherit; }
+
+.icon-home.icon-left a:before, .icon-home.icon-right a:after, i.icon-home:before { content: "\\2302"; height: inherit; }
+
+.icon-link.icon-left a:before, .icon-link.icon-right a:after, i.icon-link:before { content: "\\1f517"; height: inherit; }
+
+.icon-attach.icon-left a:before, .icon-attach.icon-right a:after, i.icon-attach:before { content: "\\1f4ce"; height: inherit; }
+
+.icon-lock.icon-left a:before, .icon-lock.icon-right a:after, i.icon-lock:before { content: "\\1f512"; height: inherit; }
+
+.icon-lock-open.icon-left a:before, .icon-lock-open.icon-right a:after, i.icon-lock-open:before { content: "\\1f513"; height: inherit; }
+
+.icon-eye.icon-left a:before, .icon-eye.icon-right a:after, i.icon-eye:before { content: "\\e70a"; height: inherit; }
+
+.icon-tag.icon-left a:before, .icon-tag.icon-right a:after, i.icon-tag:before { content: "\\e70c"; height: inherit; }
+
+.icon-bookmark.icon-left a:before, .icon-bookmark.icon-right a:after, i.icon-bookmark:before { content: "\\1f516"; height: inherit; }
+
+.icon-bookmarks.icon-left a:before, .icon-bookmarks.icon-right a:after, i.icon-bookmarks:before { content: "\\1f4d1"; height: inherit; }
+
+.icon-flag.icon-left a:before, .icon-flag.icon-right a:after, i.icon-flag:before { content: "\\2691"; height: inherit; }
+
+.icon-thumbs-up.icon-left a:before, .icon-thumbs-up.icon-right a:after, i.icon-thumbs-up:before { content: "\\1f44d"; height: inherit; }
+
+.icon-thumbs-down.icon-left a:before, .icon-thumbs-down.icon-right a:after, i.icon-thumbs-down:before { content: "\\1f44e"; height: inherit; }
+
+.icon-download.icon-left a:before, .icon-download.icon-right a:after, i.icon-download:before { content: "\\1f4e5"; height: inherit; }
+
+.icon-upload.icon-left a:before, .icon-upload.icon-right a:after, i.icon-upload:before { content: "\\1f4e4"; height: inherit; }
+
+.icon-upload-cloud.icon-left a:before, .icon-upload-cloud.icon-right a:after, i.icon-upload-cloud:before { content: "\\e711"; height: inherit; }
+
+.icon-reply.icon-left a:before, .icon-reply.icon-right a:after, i.icon-reply:before { content: "\\e712"; height: inherit; }
+
+.icon-reply-all.icon-left a:before, .icon-reply-all.icon-right a:after, i.icon-reply-all:before { content: "\\e713"; height: inherit; }
+
+.icon-forward.icon-left a:before, .icon-forward.icon-right a:after, i.icon-forward:before { content: "\\27a6"; height: inherit; }
+
+.icon-quote.icon-left a:before, .icon-quote.icon-right a:after, i.icon-quote:before { content: "\\275e"; height: inherit; }
+
+.icon-code.icon-left a:before, .icon-code.icon-right a:after, i.icon-code:before { content: "\\e714"; height: inherit; }
+
+.icon-export.icon-left a:before, .icon-export.icon-right a:after, i.icon-export:before { content: "\\e715"; height: inherit; }
+
+.icon-pencil.icon-left a:before, .icon-pencil.icon-right a:after, i.icon-pencil:before { content: "\\270e"; height: inherit; }
+
+.icon-feather.icon-left a:before, .icon-feather.icon-right a:after, i.icon-feather:before { content: "\\2712"; height: inherit; }
+
+.icon-print.icon-left a:before, .icon-print.icon-right a:after, i.icon-print:before { content: "\\e716"; height: inherit; }
+
+.icon-retweet.icon-left a:before, .icon-retweet.icon-right a:after, i.icon-retweet:before { content: "\\e717"; height: inherit; }
+
+.icon-keyboard.icon-left a:before, .icon-keyboard.icon-right a:after, i.icon-keyboard:before { content: "\\2328"; height: inherit; }
+
+.icon-comment.icon-left a:before, .icon-comment.icon-right a:after, i.icon-comment:before { content: "\\e718"; height: inherit; }
+
+.icon-chat.icon-left a:before, .icon-chat.icon-right a:after, i.icon-chat:before { content: "\\e720"; height: inherit; }
+
+.icon-bell.icon-left a:before, .icon-bell.icon-right a:after, i.icon-bell:before { content: "\\1f514"; height: inherit; }
+
+.icon-attention.icon-left a:before, .icon-attention.icon-right a:after, i.icon-attention:before { content: "\\26a0"; height: inherit; }
+
+.icon-alert.icon-left a:before, .icon-alert.icon-right a:after, i.icon-alert:before { content: "\\1f4a5"; height: inherit; }
+
+.icon-vcard.icon-left a:before, .icon-vcard.icon-right a:after, i.icon-vcard:before { content: "\\e722"; height: inherit; }
+
+.icon-address.icon-left a:before, .icon-address.icon-right a:after, i.icon-address:before { content: "\\e723"; height: inherit; }
+
+.icon-location.icon-left a:before, .icon-location.icon-right a:after, i.icon-location:before { content: "\\e724"; height: inherit; }
+
+.icon-map.icon-left a:before, .icon-map.icon-right a:after, i.icon-map:before { content: "\\e727"; height: inherit; }
+
+.icon-direction.icon-left a:before, .icon-direction.icon-right a:after, i.icon-direction:before { content: "\\27a2"; height: inherit; }
+
+.icon-compass.icon-left a:before, .icon-compass.icon-right a:after, i.icon-compass:before { content: "\\e728"; height: inherit; }
+
+.icon-cup.icon-left a:before, .icon-cup.icon-right a:after, i.icon-cup:before { content: "\\2615"; height: inherit; }
+
+.icon-trash.icon-left a:before, .icon-trash.icon-right a:after, i.icon-trash:before { content: "\\e729"; height: inherit; }
+
+.icon-doc.icon-left a:before, .icon-doc.icon-right a:after, i.icon-doc:before { content: "\\e730"; height: inherit; }
+
+.icon-docs.icon-left a:before, .icon-docs.icon-right a:after, i.icon-docs:before { content: "\\e736"; height: inherit; }
+
+.icon-doc-landscape.icon-left a:before, .icon-doc-landscape.icon-right a:after, i.icon-doc-landscape:before { content: "\\e737"; height: inherit; }
+
+.icon-doc-text.icon-left a:before, .icon-doc-text.icon-right a:after, i.icon-doc-text:before { content: "\\1f4c4"; height: inherit; }
+
+.icon-doc-text-inv.icon-left a:before, .icon-doc-text-inv.icon-right a:after, i.icon-doc-text-inv:before { content: "\\e731"; height: inherit; }
+
+.icon-newspaper.icon-left a:before, .icon-newspaper.icon-right a:after, i.icon-newspaper:before { content: "\\1f4f0"; height: inherit; }
+
+.icon-book-open.icon-left a:before, .icon-book-open.icon-right a:after, i.icon-book-open:before { content: "\\1f4d6"; height: inherit; }
+
+.icon-book.icon-left a:before, .icon-book.icon-right a:after, i.icon-book:before { content: "\\1f4d5"; height: inherit; }
+
+.icon-folder.icon-left a:before, .icon-folder.icon-right a:after, i.icon-folder:before { content: "\\1f4c1"; height: inherit; }
+
+.icon-archive.icon-left a:before, .icon-archive.icon-right a:after, i.icon-archive:before { content: "\\e738"; height: inherit; }
+
+.icon-box.icon-left a:before, .icon-box.icon-right a:after, i.icon-box:before { content: "\\1f4e6"; height: inherit; }
+
+.icon-rss.icon-left a:before, .icon-rss.icon-right a:after, i.icon-rss:before { content: "\\e73a"; height: inherit; }
+
+.icon-phone.icon-left a:before, .icon-phone.icon-right a:after, i.icon-phone:before { content: "\\1f4de"; height: inherit; }
+
+.icon-cog.icon-left a:before, .icon-cog.icon-right a:after, i.icon-cog:before { content: "\\2699"; height: inherit; }
+
+.icon-tools.icon-left a:before, .icon-tools.icon-right a:after, i.icon-tools:before { content: "\\2692"; height: inherit; }
+
+.icon-share.icon-left a:before, .icon-share.icon-right a:after, i.icon-share:before { content: "\\e73c"; height: inherit; }
+
+.icon-shareable.icon-left a:before, .icon-shareable.icon-right a:after, i.icon-shareable:before { content: "\\e73e"; height: inherit; }
+
+.icon-basket.icon-left a:before, .icon-basket.icon-right a:after, i.icon-basket:before { content: "\\e73d"; height: inherit; }
+
+.icon-bag.icon-left a:before, .icon-bag.icon-right a:after, i.icon-bag:before { content: "\\1f45c"; height: inherit; }
+
+.icon-calendar.icon-left a:before, .icon-calendar.icon-right a:after, i.icon-calendar:before { content: "\\1f4c5"; height: inherit; }
+
+.icon-login.icon-left a:before, .icon-login.icon-right a:after, i.icon-login:before { content: "\\e740"; height: inherit; }
+
+.icon-logout.icon-left a:before, .icon-logout.icon-right a:after, i.icon-logout:before { content: "\\e741"; height: inherit; }
+
+.icon-mic.icon-left a:before, .icon-mic.icon-right a:after, i.icon-mic:before { content: "\\1f3a4"; height: inherit; }
+
+.icon-mute.icon-left a:before, .icon-mute.icon-right a:after, i.icon-mute:before { content: "\\1f507"; height: inherit; }
+
+.icon-sound.icon-left a:before, .icon-sound.icon-right a:after, i.icon-sound:before { content: "\\1f50a"; height: inherit; }
+
+.icon-volume.icon-left a:before, .icon-volume.icon-right a:after, i.icon-volume:before { content: "\\e742"; height: inherit; }
+
+.icon-clock.icon-left a:before, .icon-clock.icon-right a:after, i.icon-clock:before { content: "\\1f554"; height: inherit; }
+
+.icon-hourglass.icon-left a:before, .icon-hourglass.icon-right a:after, i.icon-hourglass:before { content: "\\23f3"; height: inherit; }
+
+.icon-lamp.icon-left a:before, .icon-lamp.icon-right a:after, i.icon-lamp:before { content: "\\1f4a1"; height: inherit; }
+
+.icon-light-down.icon-left a:before, .icon-light-down.icon-right a:after, i.icon-light-down:before { content: "\\1f505"; height: inherit; }
+
+.icon-light-up.icon-left a:before, .icon-light-up.icon-right a:after, i.icon-light-up:before { content: "\\1f506"; height: inherit; }
+
+.icon-adjust.icon-left a:before, .icon-adjust.icon-right a:after, i.icon-adjust:before { content: "\\25d1"; height: inherit; }
+
+.icon-block.icon-left a:before, .icon-block.icon-right a:after, i.icon-block:before { content: "\\1f6ab"; height: inherit; }
+
+.icon-resize-full.icon-left a:before, .icon-resize-full.icon-right a:after, i.icon-resize-full:before { content: "\\e744"; height: inherit; }
+
+.icon-resize-small.icon-left a:before, .icon-resize-small.icon-right a:after, i.icon-resize-small:before { content: "\\e746"; height: inherit; }
+
+.icon-popup.icon-left a:before, .icon-popup.icon-right a:after, i.icon-popup:before { content: "\\e74c"; height: inherit; }
+
+.icon-publish.icon-left a:before, .icon-publish.icon-right a:after, i.icon-publish:before { content: "\\e74d"; height: inherit; }
+
+.icon-window.icon-left a:before, .icon-window.icon-right a:after, i.icon-window:before { content: "\\e74e"; height: inherit; }
+
+.icon-arrow-combo.icon-left a:before, .icon-arrow-combo.icon-right a:after, i.icon-arrow-combo:before { content: "\\e74f"; height: inherit; }
+
+.icon-down-circled.icon-left a:before, .icon-down-circled.icon-right a:after, i.icon-down-circled:before { content: "\\e758"; height: inherit; }
+
+.icon-left-circled.icon-left a:before, .icon-left-circled.icon-right a:after, i.icon-left-circled:before { content: "\\e759"; height: inherit; }
+
+.icon-right-circled.icon-left a:before, .icon-right-circled.icon-right a:after, i.icon-right-circled:before { content: "\\e75a"; height: inherit; }
+
+.icon-up-circled.icon-left a:before, .icon-up-circled.icon-right a:after, i.icon-up-circled:before { content: "\\e75b"; height: inherit; }
+
+.icon-down-open.icon-left a:before, .icon-down-open.icon-right a:after, i.icon-down-open:before { content: "\\e75c"; height: inherit; }
+
+.icon-left-open.icon-left a:before, .icon-left-open.icon-right a:after, i.icon-left-open:before { content: "\\e75d"; height: inherit; }
+
+.icon-right-open.icon-left a:before, .icon-right-open.icon-right a:after, i.icon-right-open:before { content: "\\e75e"; height: inherit; }
+
+.icon-up-open.icon-left a:before, .icon-up-open.icon-right a:after, i.icon-up-open:before { content: "\\e75f"; height: inherit; }
+
+.icon-down-open-mini.icon-left a:before, .icon-down-open-mini.icon-right a:after, i.icon-down-open-mini:before { content: "\\e760"; height: inherit; }
+
+.icon-left-open-mini.icon-left a:before, .icon-left-open-mini.icon-right a:after, i.icon-left-open-mini:before { content: "\\e761"; height: inherit; }
+
+.icon-right-open-mini.icon-left a:before, .icon-right-open-mini.icon-right a:after, i.icon-right-open-mini:before { content: "\\e762"; height: inherit; }
+
+.icon-up-open-mini.icon-left a:before, .icon-up-open-mini.icon-right a:after, i.icon-up-open-mini:before { content: "\\e763"; height: inherit; }
+
+.icon-down-open-big.icon-left a:before, .icon-down-open-big.icon-right a:after, i.icon-down-open-big:before { content: "\\e764"; height: inherit; }
+
+.icon-left-open-big.icon-left a:before, .icon-left-open-big.icon-right a:after, i.icon-left-open-big:before { content: "\\e765"; height: inherit; }
+
+.icon-right-open-big.icon-left a:before, .icon-right-open-big.icon-right a:after, i.icon-right-open-big:before { content: "\\e766"; height: inherit; }
+
+.icon-up-open-big.icon-left a:before, .icon-up-open-big.icon-right a:after, i.icon-up-open-big:before { content: "\\e767"; height: inherit; }
+
+.icon-down.icon-left a:before, .icon-down.icon-right a:after, i.icon-down:before { content: "\\2b07"; height: inherit; }
+
+.icon-arrow-left.icon-left a:before, .icon-arrow-left.icon-right a:after, i.icon-arrow-left:before { content: "\\2b05"; height: inherit; }
+
+.icon-arrow-right.icon-left a:before, .icon-arrow-right.icon-right a:after, i.icon-arrow-right:before { content: "\\27a1"; height: inherit; }
+
+.icon-up.icon-left a:before, .icon-up.icon-right a:after, i.icon-up:before { content: "\\2b06"; height: inherit; }
+
+.icon-down-dir.icon-left a:before, .icon-down-dir.icon-right a:after, i.icon-down-dir:before { content: "\\25be"; height: inherit; }
+
+.icon-left-dir.icon-left a:before, .icon-left-dir.icon-right a:after, i.icon-left-dir:before { content: "\\25c2"; height: inherit; }
+
+.icon-right-dir.icon-left a:before, .icon-right-dir.icon-right a:after, i.icon-right-dir:before { content: "\\25b8"; height: inherit; }
+
+.icon-up-dir.icon-left a:before, .icon-up-dir.icon-right a:after, i.icon-up-dir:before { content: "\\25b4"; height: inherit; }
+
+.icon-down-bold.icon-left a:before, .icon-down-bold.icon-right a:after, i.icon-down-bold:before { content: "\\e4b0"; height: inherit; }
+
+.icon-left-bold.icon-left a:before, .icon-left-bold.icon-right a:after, i.icon-left-bold:before { content: "\\e4ad"; height: inherit; }
+
+.icon-right-bold.icon-left a:before, .icon-right-bold.icon-right a:after, i.icon-right-bold:before { content: "\\e4ae"; height: inherit; }
+
+.icon-up-bold.icon-left a:before, .icon-up-bold.icon-right a:after, i.icon-up-bold:before { content: "\\e4af"; height: inherit; }
+
+.icon-down-thin.icon-left a:before, .icon-down-thin.icon-right a:after, i.icon-down-thin:before { content: "\\2193"; height: inherit; }
+
+.icon-left-thin.icon-left a:before, .icon-left-thin.icon-right a:after, i.icon-left-thin:before { content: "\\2190"; height: inherit; }
+
+.icon-right-thin.icon-left a:before, .icon-right-thin.icon-right a:after, i.icon-right-thin:before { content: "\\2192"; height: inherit; }
+
+.icon-up-thin.icon-left a:before, .icon-up-thin.icon-right a:after, i.icon-up-thin:before { content: "\\2191"; height: inherit; }
+
+.icon-ccw.icon-left a:before, .icon-ccw.icon-right a:after, i.icon-ccw:before { content: "\\27f2"; height: inherit; }
+
+.icon-cw.icon-left a:before, .icon-cw.icon-right a:after, i.icon-cw:before { content: "\\27f3"; height: inherit; }
+
+.icon-arrows-ccw.icon-left a:before, .icon-arrows-ccw.icon-right a:after, i.icon-arrows-ccw:before { content: "\\1f504"; height: inherit; }
+
+.icon-level-down.icon-left a:before, .icon-level-down.icon-right a:after, i.icon-level-down:before { content: "\\21b3"; height: inherit; }
+
+.icon-level-up.icon-left a:before, .icon-level-up.icon-right a:after, i.icon-level-up:before { content: "\\21b0"; height: inherit; }
+
+.icon-shuffle.icon-left a:before, .icon-shuffle.icon-right a:after, i.icon-shuffle:before { content: "\\1f500"; height: inherit; }
+
+.icon-loop.icon-left a:before, .icon-loop.icon-right a:after, i.icon-loop:before { content: "\\1f501"; height: inherit; }
+
+.icon-switch.icon-left a:before, .icon-switch.icon-right a:after, i.icon-switch:before { content: "\\21c6"; height: inherit; }
+
+.icon-play.icon-left a:before, .icon-play.icon-right a:after, i.icon-play:before { content: "\\25b6"; height: inherit; }
+
+.icon-stop.icon-left a:before, .icon-stop.icon-right a:after, i.icon-stop:before { content: "\\25a0"; height: inherit; }
+
+.icon-pause.icon-left a:before, .icon-pause.icon-right a:after, i.icon-pause:before { content: "\\2389"; height: inherit; }
+
+.icon-record.icon-left a:before, .icon-record.icon-right a:after, i.icon-record:before { content: "\\26ab"; height: inherit; }
+
+.icon-to-end.icon-left a:before, .icon-to-end.icon-right a:after, i.icon-to-end:before { content: "\\23ed"; height: inherit; }
+
+.icon-to-start.icon-left a:before, .icon-to-start.icon-right a:after, i.icon-to-start:before { content: "\\23ee"; height: inherit; }
+
+.icon-fast-forward.icon-left a:before, .icon-fast-forward.icon-right a:after, i.icon-fast-forward:before { content: "\\23e9"; height: inherit; }
+
+.icon-fast-backward.icon-left a:before, .icon-fast-backward.icon-right a:after, i.icon-fast-backward:before { content: "\\23ea"; height: inherit; }
+
+.icon-progress-0.icon-left a:before, .icon-progress-0.icon-right a:after, i.icon-progress-0:before { content: "\\e768"; height: inherit; }
+
+.icon-progress-1.icon-left a:before, .icon-progress-1.icon-right a:after, i.icon-progress-1:before { content: "\\e769"; height: inherit; }
+
+.icon-progress-2.icon-left a:before, .icon-progress-2.icon-right a:after, i.icon-progress-2:before { content: "\\e76a"; height: inherit; }
+
+.icon-progress-3.icon-left a:before, .icon-progress-3.icon-right a:after, i.icon-progress-3:before { content: "\\e76b"; height: inherit; }
+
+.icon-target.icon-left a:before, .icon-target.icon-right a:after, i.icon-target:before { content: "\\1f3af"; height: inherit; }
+
+.icon-palette.icon-left a:before, .icon-palette.icon-right a:after, i.icon-palette:before { content: "\\1f3a8"; height: inherit; }
+
+.icon-list.icon-left a:before, .icon-list.icon-right a:after, i.icon-list:before { content: "\\e005"; height: inherit; }
+
+.icon-list-add.icon-left a:before, .icon-list-add.icon-right a:after, i.icon-list-add:before { content: "\\e003"; height: inherit; }
+
+.icon-signal.icon-left a:before, .icon-signal.icon-right a:after, i.icon-signal:before { content: "\\1f4f6"; height: inherit; }
+
+.icon-trophy.icon-left a:before, .icon-trophy.icon-right a:after, i.icon-trophy:before { content: "\\1f3c6"; height: inherit; }
+
+.icon-battery.icon-left a:before, .icon-battery.icon-right a:after, i.icon-battery:before { content: "\\1f50b"; height: inherit; }
+
+.icon-back-in-time.icon-left a:before, .icon-back-in-time.icon-right a:after, i.icon-back-in-time:before { content: "\\e771"; height: inherit; }
+
+.icon-monitor.icon-left a:before, .icon-monitor.icon-right a:after, i.icon-monitor:before { content: "\\1f4bb"; height: inherit; }
+
+.icon-mobile.icon-left a:before, .icon-mobile.icon-right a:after, i.icon-mobile:before { content: "\\1f4f1"; height: inherit; }
+
+.icon-network.icon-left a:before, .icon-network.icon-right a:after, i.icon-network:before { content: "\\e776"; height: inherit; }
+
+.icon-cd.icon-left a:before, .icon-cd.icon-right a:after, i.icon-cd:before { content: "\\1f4bf"; height: inherit; }
+
+.icon-inbox.icon-left a:before, .icon-inbox.icon-right a:after, i.icon-inbox:before { content: "\\e777"; height: inherit; }
+
+.icon-install.icon-left a:before, .icon-install.icon-right a:after, i.icon-install:before { content: "\\e778"; height: inherit; }
+
+.icon-globe.icon-left a:before, .icon-globe.icon-right a:after, i.icon-globe:before { content: "\\1f30e"; height: inherit; }
+
+.icon-cloud.icon-left a:before, .icon-cloud.icon-right a:after, i.icon-cloud:before { content: "\\2601"; height: inherit; }
+
+.icon-cloud-thunder.icon-left a:before, .icon-cloud-thunder.icon-right a:after, i.icon-cloud-thunder:before { content: "\\26c8"; height: inherit; }
+
+.icon-flash.icon-left a:before, .icon-flash.icon-right a:after, i.icon-flash:before { content: "\\26a1"; height: inherit; }
+
+.icon-moon.icon-left a:before, .icon-moon.icon-right a:after, i.icon-moon:before { content: "\\263d"; height: inherit; }
+
+.icon-flight.icon-left a:before, .icon-flight.icon-right a:after, i.icon-flight:before { content: "\\2708"; height: inherit; }
+
+.icon-paper-plane.icon-left a:before, .icon-paper-plane.icon-right a:after, i.icon-paper-plane:before { content: "\\e79b"; height: inherit; }
+
+.icon-leaf.icon-left a:before, .icon-leaf.icon-right a:after, i.icon-leaf:before { content: "\\1f342"; height: inherit; }
+
+.icon-lifebuoy.icon-left a:before, .icon-lifebuoy.icon-right a:after, i.icon-lifebuoy:before { content: "\\e788"; height: inherit; }
+
+.icon-mouse.icon-left a:before, .icon-mouse.icon-right a:after, i.icon-mouse:before { content: "\\e789"; height: inherit; }
+
+.icon-briefcase.icon-left a:before, .icon-briefcase.icon-right a:after, i.icon-briefcase:before { content: "\\1f4bc"; height: inherit; }
+
+.icon-suitcase.icon-left a:before, .icon-suitcase.icon-right a:after, i.icon-suitcase:before { content: "\\e78e"; height: inherit; }
+
+.icon-dot.icon-left a:before, .icon-dot.icon-right a:after, i.icon-dot:before { content: "\\e78b"; height: inherit; }
+
+.icon-dot-2.icon-left a:before, .icon-dot-2.icon-right a:after, i.icon-dot-2:before { content: "\\e78c"; height: inherit; }
+
+.icon-dot-3.icon-left a:before, .icon-dot-3.icon-right a:after, i.icon-dot-3:before { content: "\\e78d"; height: inherit; }
+
+.icon-brush.icon-left a:before, .icon-brush.icon-right a:after, i.icon-brush:before { content: "\\e79a"; height: inherit; }
+
+.icon-magnet.icon-left a:before, .icon-magnet.icon-right a:after, i.icon-magnet:before { content: "\\e7a1"; height: inherit; }
+
+.icon-infinity.icon-left a:before, .icon-infinity.icon-right a:after, i.icon-infinity:before { content: "\\221e"; height: inherit; }
+
+.icon-erase.icon-left a:before, .icon-erase.icon-right a:after, i.icon-erase:before { content: "\\232b"; height: inherit; }
+
+.icon-chart-pie.icon-left a:before, .icon-chart-pie.icon-right a:after, i.icon-chart-pie:before { content: "\\e751"; height: inherit; }
+
+.icon-chart-line.icon-left a:before, .icon-chart-line.icon-right a:after, i.icon-chart-line:before { content: "\\1f4c8"; height: inherit; }
+
+.icon-chart-bar.icon-left a:before, .icon-chart-bar.icon-right a:after, i.icon-chart-bar:before { content: "\\1f4ca"; height: inherit; }
+
+.icon-chart-area.icon-left a:before, .icon-chart-area.icon-right a:after, i.icon-chart-area:before { content: "\\1f53e"; height: inherit; }
+
+.icon-tape.icon-left a:before, .icon-tape.icon-right a:after, i.icon-tape:before { content: "\\2707"; height: inherit; }
+
+.icon-graduation-cap.icon-left a:before, .icon-graduation-cap.icon-right a:after, i.icon-graduation-cap:before { content: "\\1f393"; height: inherit; }
+
+.icon-language.icon-left a:before, .icon-language.icon-right a:after, i.icon-language:before { content: "\\e752"; height: inherit; }
+
+.icon-ticket.icon-left a:before, .icon-ticket.icon-right a:after, i.icon-ticket:before { content: "\\1f3ab"; height: inherit; }
+
+.icon-water.icon-left a:before, .icon-water.icon-right a:after, i.icon-water:before { content: "\\1f4a6"; height: inherit; }
+
+.icon-droplet.icon-left a:before, .icon-droplet.icon-right a:after, i.icon-droplet:before { content: "\\1f4a7"; height: inherit; }
+
+.icon-air.icon-left a:before, .icon-air.icon-right a:after, i.icon-air:before { content: "\\e753"; height: inherit; }
+
+.icon-credit-card.icon-left a:before, .icon-credit-card.icon-right a:after, i.icon-credit-card:before { content: "\\1f4b3"; height: inherit; }
+
+.icon-floppy.icon-left a:before, .icon-floppy.icon-right a:after, i.icon-floppy:before { content: "\\1f4be"; height: inherit; }
+
+.icon-clipboard.icon-left a:before, .icon-clipboard.icon-right a:after, i.icon-clipboard:before { content: "\\1f4cb"; height: inherit; }
+
+.icon-megaphone.icon-left a:before, .icon-megaphone.icon-right a:after, i.icon-megaphone:before { content: "\\1f4e3"; height: inherit; }
+
+.icon-database.icon-left a:before, .icon-database.icon-right a:after, i.icon-database:before { content: "\\e754"; height: inherit; }
+
+.icon-drive.icon-left a:before, .icon-drive.icon-right a:after, i.icon-drive:before { content: "\\e755"; height: inherit; }
+
+.icon-bucket.icon-left a:before, .icon-bucket.icon-right a:after, i.icon-bucket:before { content: "\\e756"; height: inherit; }
+
+.icon-thermometer.icon-left a:before, .icon-thermometer.icon-right a:after, i.icon-thermometer:before { content: "\\e757"; height: inherit; }
+
+.icon-key.icon-left a:before, .icon-key.icon-right a:after, i.icon-key:before { content: "\\1f511"; height: inherit; }
+
+.icon-flow-cascade.icon-left a:before, .icon-flow-cascade.icon-right a:after, i.icon-flow-cascade:before { content: "\\e790"; height: inherit; }
+
+.icon-flow-branch.icon-left a:before, .icon-flow-branch.icon-right a:after, i.icon-flow-branch:before { content: "\\e791"; height: inherit; }
+
+.icon-flow-tree.icon-left a:before, .icon-flow-tree.icon-right a:after, i.icon-flow-tree:before { content: "\\e792"; height: inherit; }
+
+.icon-flow-line.icon-left a:before, .icon-flow-line.icon-right a:after, i.icon-flow-line:before { content: "\\e793"; height: inherit; }
+
+.icon-flow-parallel.icon-left a:before, .icon-flow-parallel.icon-right a:after, i.icon-flow-parallel:before { content: "\\e794"; height: inherit; }
+
+.icon-rocket.icon-left a:before, .icon-rocket.icon-right a:after, i.icon-rocket:before { content: "\\1f680"; height: inherit; }
+
+.icon-gauge.icon-left a:before, .icon-gauge.icon-right a:after, i.icon-gauge:before { content: "\\e7a2"; height: inherit; }
+
+.icon-traffic-cone.icon-left a:before, .icon-traffic-cone.icon-right a:after, i.icon-traffic-cone:before { content: "\\e7a3"; height: inherit; }
+
+.icon-cc.icon-left a:before, .icon-cc.icon-right a:after, i.icon-cc:before { content: "\\e7a5"; height: inherit; }
+
+.icon-cc-by.icon-left a:before, .icon-cc-by.icon-right a:after, i.icon-cc-by:before { content: "\\e7a6"; height: inherit; }
+
+.icon-cc-nc.icon-left a:before, .icon-cc-nc.icon-right a:after, i.icon-cc-nc:before { content: "\\e7a7"; height: inherit; }
+
+.icon-cc-nc-eu.icon-left a:before, .icon-cc-nc-eu.icon-right a:after, i.icon-cc-nc-eu:before { content: "\\e7a8"; height: inherit; }
+
+.icon-cc-nc-jp.icon-left a:before, .icon-cc-nc-jp.icon-right a:after, i.icon-cc-nc-jp:before { content: "\\e7a9"; height: inherit; }
+
+.icon-cc-sa.icon-left a:before, .icon-cc-sa.icon-right a:after, i.icon-cc-sa:before { content: "\\e7aa"; height: inherit; }
+
+.icon-cc-nd.icon-left a:before, .icon-cc-nd.icon-right a:after, i.icon-cc-nd:before { content: "\\e7ab"; height: inherit; }
+
+.icon-cc-pd.icon-left a:before, .icon-cc-pd.icon-right a:after, i.icon-cc-pd:before { content: "\\e7ac"; height: inherit; }
+
+.icon-cc-zero.icon-left a:before, .icon-cc-zero.icon-right a:after, i.icon-cc-zero:before { content: "\\e7ad"; height: inherit; }
+
+.icon-cc-share.icon-left a:before, .icon-cc-share.icon-right a:after, i.icon-cc-share:before { content: "\\e7ae"; height: inherit; }
+
+.icon-cc-remix.icon-left a:before, .icon-cc-remix.icon-right a:after, i.icon-cc-remix:before { content: "\\e7af"; height: inherit; }
+
+.icon-github.icon-left a:before, .icon-github.icon-right a:after, i.icon-github:before { content: "\\f300"; height: inherit; }
+
+.icon-github-circled.icon-left a:before, .icon-github-circled.icon-right a:after, i.icon-github-circled:before { content: "\\f301"; height: inherit; }
+
+.icon-flickr.icon-left a:before, .icon-flickr.icon-right a:after, i.icon-flickr:before { content: "\\f303"; height: inherit; }
+
+.icon-flickr-circled.icon-left a:before, .icon-flickr-circled.icon-right a:after, i.icon-flickr-circled:before { content: "\\f304"; height: inherit; }
+
+.icon-vimeo.icon-left a:before, .icon-vimeo.icon-right a:after, i.icon-vimeo:before { content: "\\f306"; height: inherit; }
+
+.icon-vimeo-circled.icon-left a:before, .icon-vimeo-circled.icon-right a:after, i.icon-vimeo-circled:before { content: "\\f307"; height: inherit; }
+
+.icon-twitter.icon-left a:before, .icon-twitter.icon-right a:after, i.icon-twitter:before { content: "\\f309"; height: inherit; }
+
+.icon-twitter-circled.icon-left a:before, .icon-twitter-circled.icon-right a:after, i.icon-twitter-circled:before { content: "\\f30a"; height: inherit; }
+
+.icon-facebook.icon-left a:before, .icon-facebook.icon-right a:after, i.icon-facebook:before { content: "\\f30c"; height: inherit; }
+
+.icon-facebook-circled.icon-left a:before, .icon-facebook-circled.icon-right a:after, i.icon-facebook-circled:before { content: "\\f30d"; height: inherit; }
+
+.icon-facebook-squared.icon-left a:before, .icon-facebook-squared.icon-right a:after, i.icon-facebook-squared:before { content: "\\f30e"; height: inherit; }
+
+.icon-gplus.icon-left a:before, .icon-gplus.icon-right a:after, i.icon-gplus:before { content: "\\f30f"; height: inherit; }
+
+.icon-gplus-circled.icon-left a:before, .icon-gplus-circled.icon-right a:after, i.icon-gplus-circled:before { content: "\\f310"; height: inherit; }
+
+.icon-pinterest.icon-left a:before, .icon-pinterest.icon-right a:after, i.icon-pinterest:before { content: "\\f312"; height: inherit; }
+
+.icon-pinterest-circled.icon-left a:before, .icon-pinterest-circled.icon-right a:after, i.icon-pinterest-circled:before { content: "\\f313"; height: inherit; }
+
+.icon-tumblr.icon-left a:before, .icon-tumblr.icon-right a:after, i.icon-tumblr:before { content: "\\f315"; height: inherit; }
+
+.icon-tumblr-circled.icon-left a:before, .icon-tumblr-circled.icon-right a:after, i.icon-tumblr-circled:before { content: "\\f316"; height: inherit; }
+
+.icon-linkedin.icon-left a:before, .icon-linkedin.icon-right a:after, i.icon-linkedin:before { content: "\\f318"; height: inherit; }
+
+.icon-linkedin-circled.icon-left a:before, .icon-linkedin-circled.icon-right a:after, i.icon-linkedin-circled:before { content: "\\f319"; height: inherit; }
+
+.icon-dribbble.icon-left a:before, .icon-dribbble.icon-right a:after, i.icon-dribbble:before { content: "\\f31b"; height: inherit; }
+
+.icon-dribbble-circled.icon-left a:before, .icon-dribbble-circled.icon-right a:after, i.icon-dribbble-circled:before { content: "\\f31c"; height: inherit; }
+
+.icon-stumbleupon.icon-left a:before, .icon-stumbleupon.icon-right a:after, i.icon-stumbleupon:before { content: "\\f31e"; height: inherit; }
+
+.icon-stumbleupon-circled.icon-left a:before, .icon-stumbleupon-circled.icon-right a:after, i.icon-stumbleupon-circled:before { content: "\\f31f"; height: inherit; }
+
+.icon-lastfm.icon-left a:before, .icon-lastfm.icon-right a:after, i.icon-lastfm:before { content: "\\f321"; height: inherit; }
+
+.icon-lastfm-circled.icon-left a:before, .icon-lastfm-circled.icon-right a:after, i.icon-lastfm-circled:before { content: "\\f322"; height: inherit; }
+
+.icon-rdio.icon-left a:before, .icon-rdio.icon-right a:after, i.icon-rdio:before { content: "\\f324"; height: inherit; }
+
+.icon-rdio-circled.icon-left a:before, .icon-rdio-circled.icon-right a:after, i.icon-rdio-circled:before { content: "\\f325"; height: inherit; }
+
+.icon-spotify.icon-left a:before, .icon-spotify.icon-right a:after, i.icon-spotify:before { content: "\\f327"; height: inherit; }
+
+.icon-spotify-circled.icon-left a:before, .icon-spotify-circled.icon-right a:after, i.icon-spotify-circled:before { content: "\\f328"; height: inherit; }
+
+.icon-qq.icon-left a:before, .icon-qq.icon-right a:after, i.icon-qq:before { content: "\\f32a"; height: inherit; }
+
+.icon-instagram.icon-left a:before, .icon-instagram.icon-right a:after, i.icon-instagram:before { content: "\\f32d"; height: inherit; }
+
+.icon-dropbox.icon-left a:before, .icon-dropbox.icon-right a:after, i.icon-dropbox:before { content: "\\f330"; height: inherit; }
+
+.icon-evernote.icon-left a:before, .icon-evernote.icon-right a:after, i.icon-evernote:before { content: "\\f333"; height: inherit; }
+
+.icon-flattr.icon-left a:before, .icon-flattr.icon-right a:after, i.icon-flattr:before { content: "\\f336"; height: inherit; }
+
+.icon-skype.icon-left a:before, .icon-skype.icon-right a:after, i.icon-skype:before { content: "\\f339"; height: inherit; }
+
+.icon-skype-circled.icon-left a:before, .icon-skype-circled.icon-right a:after, i.icon-skype-circled:before { content: "\\f33a"; height: inherit; }
+
+.icon-renren.icon-left a:before, .icon-renren.icon-right a:after, i.icon-renren:before { content: "\\f33c"; height: inherit; }
+
+.icon-sina-weibo.icon-left a:before, .icon-sina-weibo.icon-right a:after, i.icon-sina-weibo:before { content: "\\f33f"; height: inherit; }
+
+.icon-paypal.icon-left a:before, .icon-paypal.icon-right a:after, i.icon-paypal:before { content: "\\f342"; height: inherit; }
+
+.icon-picasa.icon-left a:before, .icon-picasa.icon-right a:after, i.icon-picasa:before { content: "\\f345"; height: inherit; }
+
+.icon-soundcloud.icon-left a:before, .icon-soundcloud.icon-right a:after, i.icon-soundcloud:before { content: "\\f348"; height: inherit; }
+
+.icon-mixi.icon-left a:before, .icon-mixi.icon-right a:after, i.icon-mixi:before { content: "\\f34b"; height: inherit; }
+
+.icon-behance.icon-left a:before, .icon-behance.icon-right a:after, i.icon-behance:before { content: "\\f34e"; height: inherit; }
+
+.icon-google-circles.icon-left a:before, .icon-google-circles.icon-right a:after, i.icon-google-circles:before { content: "\\f351"; height: inherit; }
+
+.icon-vkontakte.icon-left a:before, .icon-vkontakte.icon-right a:after, i.icon-vkontakte:before { content: "\\f354"; height: inherit; }
+
+.icon-smashing.icon-left a:before, .icon-smashing.icon-right a:after, i.icon-smashing:before { content: "\\f357"; height: inherit; }
+
+.icon-sweden.icon-left a:before, .icon-sweden.icon-right a:after, i.icon-sweden:before { content: "\\f601"; height: inherit; }
+
+.icon-db-shape.icon-left a:before, .icon-db-shape.icon-right a:after, i.icon-db-shape:before { content: "\\f600"; height: inherit; }
+
+.icon-logo-db.icon-left a:before, .icon-logo-db.icon-right a:after, i.icon-logo-db:before { content: "\\f603"; height: inherit; }
+
+.fixed { position: fixed; }
+.fixed.pinned { position: absolute; }
+@media only screen and (max-width: 768px) { .fixed { position: relative !important; top: auto !important; left: auto !important; } }
+
+.unfixed { position: relative !important; top: auto !important; left: auto !important; }
+
+.text-center { text-align: center; }
+
+.text-left { text-align: left; }
+
+.text-right { text-align: right; }
+
+/* Fonts */
+@font-face { font-family: "entypo"; font-style: normal; font-weight: 400; src: url(../fonts/icons/entypo.eot); src: url("../fonts/icons/entypo.eot?#iefix") format("ie9-skip-eot"), url("../fonts/icons/entypo.woff") format("woff"), url("../fonts/icons/entypo.ttf") format("truetype"); }
+/* Typography */
+h1, h2, h3, h4, h5, h6 { font-family: "Open Sans"; font-weight: 300; color: #444444; text-rendering: optimizeLegibility; padding-top: 0.252em; line-height: 1.0665em; padding-bottom: 0.252em; }
+h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { color: #d04526; }
+
+@media only screen and (max-width: 767px) { h1, h2, h3, h4, h5, h6 { word-wrap: break-word; } }
+h1 { font-size: 67.77709px; font-size: 4.23607rem; }
+h1.xlarge { font-size: 109.66563px; font-size: 6.8541rem; }
+h1.xxlarge { font-size: 126.20665px; font-size: 7.88792rem; }
+h1.absurd { font-size: 177.44273px; font-size: 11.09017rem; }
+
+h2 { font-size: 41.88854px; font-size: 2.61803rem; }
+
+h3 { font-size: 29.79335px; font-size: 1.86208rem; }
+
+h4 { font-size: 25.88854px; font-size: 1.61803rem; }
+
+h5 { font-size: 18.4133px; font-size: 1.15083rem; }
+
+h6 { font-size: 16px; font-size: 1rem; }
+
+@media only screen and (max-width: 767px) { h1 { font-size: 41.88854px; font-size: 2.61803rem; }
+ h2 { font-size: 35.79335px; font-size: 2.23708rem; } }
+.subhead { color: #777; font-weight: normal; margin-bottom: 20px; }
+
+/*=====================================================
+ Links & Paragraph styles
+ ======================================================*/
+p { font-family: "Open Sans"; font-weight: 400; font-size: 16px; font-size: 1rem; margin-bottom: 12px; line-height: 1.5em; }
+p.lead { font-size: 20px; font-size: 1.25rem; margin-bottom: 18.4133px; }
+@media only screen and (max-width: 768px) { p { font-size: 17.6px; font-size: 1.1rem; line-height: 1.5em; } }
+
+a { color: #d04526; text-decoration: none; outline: 0; line-height: inherit; }
+a:hover { color: #c03d20; }
+
+/*=====================================================
+ Lists
+ ======================================================*/
+ul, ol { margin-bottom: 0.252em; }
+
+ul { list-style: none outside; }
+
+ol { list-style: decimal; margin-left: 30px; }
+
+ul.square, ul.circle, ul.disc { margin-left: 25px; }
+ul.square { list-style: square outside; }
+ul.circle { list-style: circle outside; }
+ul.disc { list-style: disc outside; }
+ul ul { margin: 4px 0 5px 25px; }
+
+ol ol { margin: 4px 0 5px 30px; }
+
+li { padding-bottom: 0.252em; }
+
+ul.large li { line-height: 21px; }
+
+dl dt { font-weight: bold; font-size: 16px; font-size: 1rem; }
+
+@media only screen and (max-width: 768px) { ul, ol, dl, p { text-align: left; } }
+/* Mobile */
+em { font-style: italic; line-height: inherit; }
+
+strong { font-weight: 700; line-height: inherit; }
+
+small { font-size: 56.4%; line-height: inherit; }
+
+h1 small, h2 small, h3 small, h4 small, h5 small { color: #777; }
+
+/* Blockquotes */
+blockquote { line-height: 20px; color: #777; margin: 0 0 18px; padding: 9px 20px 0 19px; border-left: 5px solid #ccc; }
+blockquote p { line-height: 20px; color: #777; }
+blockquote cite { display: block; font-size: 12px; font-size: 1.2rem; color: #555555; }
+blockquote cite:before { content: "\2014 \0020"; }
+blockquote cite a { color: #555555; }
+blockquote cite a:visited { color: #555555; }
+
+hr { border: 1px solid #ccc; clear: both; margin: 16px 0 18px; height: 0; }
+
+abbr, acronym { text-transform: uppercase; font-size: 90%; color: #222; border-bottom: 1px solid #ccc; cursor: help; }
+
+abbr { text-transform: none; }
+
+/** Print styles. Inlined to avoid required HTTP connection: www.phpied.com/delay-loading-your-print-css/ Credit to Paul Irish and HTML5 Boilerplate (html5boilerplate.com) */
+@media print { * { background: transparent !important; color: black !important; text-shadow: none !important; filter: none !important; -ms-filter: none !important; }
+ /* Black prints faster: sanbeiji.com/archives/953 */
+ p a { color: #555555 !important; text-decoration: underline; }
+ p a:visited { color: #555555 !important; text-decoration: underline; }
+ p a[href]:after { content: " (" attr(href) ")"; }
+ abbr[title]:after { content: " (" attr(title) ")"; }
+ a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; }
+ /* Don't show links for images, or javascript/internal links */
+ pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
+ thead { display: table-header-group; }
+ /* css-discuss.incutio.com/wiki/Printing_Tables */
+ tr, img { page-break-inside: avoid; }
+ @page { margin: 0.5cm; }
+ p, h2, h3 { orphans: 3; widows: 3; }
+ h2, h3 { page-break-after: avoid; } }
+.row .pull_one.one.column:first-child, .row .pull_one.two.columns:first-child, .row .pull_one.three.columns:first-child, .row .pull_one.four.columns:first-child, .row .pull_one.five.columns:first-child, .row .pull_one.six.columns:first-child, .row .pull_one.seven.columns:first-child, .row .pull_one.eight.columns:first-child, .row .pull_one.nine.columns:first-child, .row .pull_one.ten.columns:first-child, .row .pull_two.one.column:first-child, .row .pull_two.two.columns:first-child, .row .pull_two.three.columns:first-child, .row .pull_two.four.columns:first-child, .row .pull_two.five.columns:first-child, .row .pull_two.six.columns:first-child, .row .pull_two.seven.columns:first-child, .row .pull_two.eight.columns:first-child, .row .pull_two.nine.columns:first-child, .row .pull_two.eleven.columns:first-child, .row .pull_three.one.column:first-child, .row .pull_three.two.columns:first-child, .row .pull_three.three.columns:first-child, .row .pull_three.four.columns:first-child, .row .pull_three.five.columns:first-child, .row .pull_three.six.columns:first-child, .row .pull_three.seven.columns:first-child, .row .pull_three.eight.columns:first-child, .row .pull_three.ten.columns:first-child, .row .pull_three.eleven.columns:first-child, .row .pull_four.one.column:first-child, .row .pull_four.two.columns:first-child, .row .pull_four.three.columns:first-child, .row .pull_four.four.columns:first-child, .row .pull_four.five.columns:first-child, .row .pull_four.six.columns:first-child, .row .pull_four.seven.columns:first-child, .row .pull_four.nine.columns:first-child, .row .pull_four.ten.columns:first-child, .row .pull_four.eleven.columns:first-child, .row .pull_five.one.column:first-child, .row .pull_five.two.columns:first-child, .row .pull_five.three.columns:first-child, .row .pull_five.four.columns:first-child, .row .pull_five.five.columns:first-child, .row .pull_five.six.columns:first-child, .row .pull_five.eight.columns:first-child, .row .pull_five.nine.columns:first-child, .row .pull_five.ten.columns:first-child, .row .pull_five.eleven.columns:first-child, .row .pull_six.one.column:first-child, .row .pull_six.two.columns:first-child, .row .pull_six.three.columns:first-child, .row .pull_six.four.columns:first-child, .row .pull_six.five.columns:first-child, .row .pull_six.seven.columns:first-child, .row .pull_six.eight.columns:first-child, .row .pull_six.nine.columns:first-child, .row .pull_six.ten.columns:first-child, .row .pull_six.eleven.columns:first-child, .row .pull_seven.one.column:first-child, .row .pull_seven.two.columns:first-child, .row .pull_seven.three.columns:first-child, .row .pull_seven.four.columns:first-child, .row .pull_seven.six.columns:first-child, .row .pull_seven.seven.columns:first-child, .row .pull_seven.eight.columns:first-child, .row .pull_seven.nine.columns:first-child, .row .pull_seven.ten.columns:first-child, .row .pull_seven.eleven.columns:first-child, .row .pull_eight.one.column:first-child, .row .pull_eight.two.columns:first-child, .row .pull_eight.three.columns:first-child, .row .pull_eight.five.columns:first-child, .row .pull_eight.six.columns:first-child, .row .pull_eight.seven.columns:first-child, .row .pull_eight.eight.columns:first-child, .row .pull_eight.nine.columns:first-child, .row .pull_eight.ten.columns:first-child, .row .pull_eight.eleven.columns:first-child, .row .pull_nine.one.column:first-child, .row .pull_nine.two.columns:first-child, .row .pull_nine.four.columns:first-child, .row .pull_nine.five.columns:first-child, .row .pull_nine.six.columns:first-child, .row .pull_nine.seven.columns:first-child, .row .pull_nine.eight.columns:first-child, .row .pull_nine.nine.columns:first-child, .row .pull_nine.ten.columns:first-child, .row .pull_nine.eleven.columns:first-child, .row .pull_ten.one.column:first-child, .row .pull_ten.three.columns:first-child, .row .pull_ten.four.columns:first-child, .row .pull_ten.five.columns:first-child, .row .pull_ten.six.columns:first-child, .row .pull_ten.seven.columns:first-child, .row .pull_ten.eight.columns:first-child, .row .pull_ten.nine.columns:first-child, .row .pull_ten.ten.columns:first-child, .row .pull_ten.eleven.columns:first-child, .row .pull_eleven.two.columns:first-child, .row .pull_eleven.three.columns:first-child, .row .pull_eleven.four.columns:first-child, .row .pull_eleven.five.columns:first-child, .row .pull_eleven.six.columns:first-child, .row .pull_eleven.seven.columns:first-child, .row .pull_eleven.eight.columns:first-child, .row .pull_eleven.nine.columns:first-child, .row .pull_eleven.ten.columns:first-child, .row .pull_eleven.eleven.columns:first-child, .sixteen.colgrid .row .pull_one.one.column:first-child, .sixteen.colgrid .row .pull_one.two.columns:first-child, .sixteen.colgrid .row .pull_one.three.columns:first-child, .sixteen.colgrid .row .pull_one.four.columns:first-child, .sixteen.colgrid .row .pull_one.five.columns:first-child, .sixteen.colgrid .row .pull_one.six.columns:first-child, .sixteen.colgrid .row .pull_one.seven.columns:first-child, .sixteen.colgrid .row .pull_one.eight.columns:first-child, .sixteen.colgrid .row .pull_one.nine.columns:first-child, .sixteen.colgrid .row .pull_one.ten.columns:first-child, .sixteen.colgrid .row .pull_one.eleven.columns:first-child, .sixteen.colgrid .row .pull_one.twelve.columns:first-child, .sixteen.colgrid .row .pull_one.thirteen.columns:first-child, .sixteen.colgrid .row .pull_one.fourteen.columns:first-child, .sixteen.colgrid .row .pull_two.one.column:first-child, .sixteen.colgrid .row .pull_two.two.columns:first-child, .sixteen.colgrid .row .pull_two.three.columns:first-child, .sixteen.colgrid .row .pull_two.four.columns:first-child, .sixteen.colgrid .row .pull_two.five.columns:first-child, .sixteen.colgrid .row .pull_two.six.columns:first-child, .sixteen.colgrid .row .pull_two.seven.columns:first-child, .sixteen.colgrid .row .pull_two.eight.columns:first-child, .sixteen.colgrid .row .pull_two.nine.columns:first-child, .sixteen.colgrid .row .pull_two.ten.columns:first-child, .sixteen.colgrid .row .pull_two.eleven.columns:first-child, .sixteen.colgrid .row .pull_two.twelve.columns:first-child, .sixteen.colgrid .row .pull_two.thirteen.columns:first-child, .sixteen.colgrid .row .pull_two.fifteen.columns:first-child, .sixteen.colgrid .row .pull_three.one.column:first-child, .sixteen.colgrid .row .pull_three.two.columns:first-child, .sixteen.colgrid .row .pull_three.three.columns:first-child, .sixteen.colgrid .row .pull_three.four.columns:first-child, .sixteen.colgrid .row .pull_three.five.columns:first-child, .sixteen.colgrid .row .pull_three.six.columns:first-child, .sixteen.colgrid .row .pull_three.seven.columns:first-child, .sixteen.colgrid .row .pull_three.eight.columns:first-child, .sixteen.colgrid .row .pull_three.nine.columns:first-child, .sixteen.colgrid .row .pull_three.ten.columns:first-child, .sixteen.colgrid .row .pull_three.eleven.columns:first-child, .sixteen.colgrid .row .pull_three.twelve.columns:first-child, .sixteen.colgrid .row .pull_three.fourteen.columns:first-child, .sixteen.colgrid .row .pull_three.fifteen.columns:first-child, .sixteen.colgrid .row .pull_four.one.column:first-child, .sixteen.colgrid .row .pull_four.two.columns:first-child, .sixteen.colgrid .row .pull_four.three.columns:first-child, .sixteen.colgrid .row .pull_four.four.columns:first-child, .sixteen.colgrid .row .pull_four.five.columns:first-child, .sixteen.colgrid .row .pull_four.six.columns:first-child, .sixteen.colgrid .row .pull_four.seven.columns:first-child, .sixteen.colgrid .row .pull_four.eight.columns:first-child, .sixteen.colgrid .row .pull_four.nine.columns:first-child, .sixteen.colgrid .row .pull_four.ten.columns:first-child, .sixteen.colgrid .row .pull_four.eleven.columns:first-child, .sixteen.colgrid .row .pull_four.thirteen.columns:first-child, .sixteen.colgrid .row .pull_four.fourteen.columns:first-child, .sixteen.colgrid .row .pull_four.fifteen.columns:first-child, .sixteen.colgrid .row .pull_five.one.column:first-child, .sixteen.colgrid .row .pull_five.two.columns:first-child, .sixteen.colgrid .row .pull_five.three.columns:first-child, .sixteen.colgrid .row .pull_five.four.columns:first-child, .sixteen.colgrid .row .pull_five.five.columns:first-child, .sixteen.colgrid .row .pull_five.six.columns:first-child, .sixteen.colgrid .row .pull_five.seven.columns:first-child, .sixteen.colgrid .row .pull_five.eight.columns:first-child, .sixteen.colgrid .row .pull_five.nine.columns:first-child, .sixteen.colgrid .row .pull_five.ten.columns:first-child, .sixteen.colgrid .row .pull_five.twelve.columns:first-child, .sixteen.colgrid .row .pull_five.thirteen.columns:first-child, .sixteen.colgrid .row .pull_five.fourteen.columns:first-child, .sixteen.colgrid .row .pull_five.fifteen.columns:first-child, .sixteen.colgrid .row .pull_six.one.column:first-child, .sixteen.colgrid .row .pull_six.two.columns:first-child, .sixteen.colgrid .row .pull_six.three.columns:first-child, .sixteen.colgrid .row .pull_six.four.columns:first-child, .sixteen.colgrid .row .pull_six.five.columns:first-child, .sixteen.colgrid .row .pull_six.six.columns:first-child, .sixteen.colgrid .row .pull_six.seven.columns:first-child, .sixteen.colgrid .row .pull_six.eight.columns:first-child, .sixteen.colgrid .row .pull_six.nine.columns:first-child, .sixteen.colgrid .row .pull_six.eleven.columns:first-child, .sixteen.colgrid .row .pull_six.twelve.columns:first-child, .sixteen.colgrid .row .pull_six.thirteen.columns:first-child, .sixteen.colgrid .row .pull_six.fourteen.columns:first-child, .sixteen.colgrid .row .pull_six.fifteen.columns:first-child, .sixteen.colgrid .row .pull_seven.one.column:first-child, .sixteen.colgrid .row .pull_seven.two.columns:first-child, .sixteen.colgrid .row .pull_seven.three.columns:first-child, .sixteen.colgrid .row .pull_seven.four.columns:first-child, .sixteen.colgrid .row .pull_seven.five.columns:first-child, .sixteen.colgrid .row .pull_seven.six.columns:first-child, .sixteen.colgrid .row .pull_seven.seven.columns:first-child, .sixteen.colgrid .row .pull_seven.eight.columns:first-child, .sixteen.colgrid .row .pull_seven.ten.columns:first-child, .sixteen.colgrid .row .pull_seven.eleven.columns:first-child, .sixteen.colgrid .row .pull_seven.twelve.columns:first-child, .sixteen.colgrid .row .pull_seven.thirteen.columns:first-child, .sixteen.colgrid .row .pull_seven.fourteen.columns:first-child, .sixteen.colgrid .row .pull_seven.fifteen.columns:first-child, .sixteen.colgrid .row .pull_eight.one.column:first-child, .sixteen.colgrid .row .pull_eight.two.columns:first-child, .sixteen.colgrid .row .pull_eight.three.columns:first-child, .sixteen.colgrid .row .pull_eight.four.columns:first-child, .sixteen.colgrid .row .pull_eight.five.columns:first-child, .sixteen.colgrid .row .pull_eight.six.columns:first-child, .sixteen.colgrid .row .pull_eight.seven.columns:first-child, .sixteen.colgrid .row .pull_eight.nine.columns:first-child, .sixteen.colgrid .row .pull_eight.ten.columns:first-child, .sixteen.colgrid .row .pull_eight.eleven.columns:first-child, .sixteen.colgrid .row .pull_eight.twelve.columns:first-child, .sixteen.colgrid .row .pull_eight.thirteen.columns:first-child, .sixteen.colgrid .row .pull_eight.fourteen.columns:first-child, .sixteen.colgrid .row .pull_eight.fifteen.columns:first-child, .sixteen.colgrid .row .pull_nine.one.column:first-child, .sixteen.colgrid .row .pull_nine.two.columns:first-child, .sixteen.colgrid .row .pull_nine.three.columns:first-child, .sixteen.colgrid .row .pull_nine.four.columns:first-child, .sixteen.colgrid .row .pull_nine.five.columns:first-child, .sixteen.colgrid .row .pull_nine.six.columns:first-child, .sixteen.colgrid .row .pull_nine.eight.columns:first-child, .sixteen.colgrid .row .pull_nine.nine.columns:first-child, .sixteen.colgrid .row .pull_nine.ten.columns:first-child, .sixteen.colgrid .row .pull_nine.eleven.columns:first-child, .sixteen.colgrid .row .pull_nine.twelve.columns:first-child, .sixteen.colgrid .row .pull_nine.thirteen.columns:first-child, .sixteen.colgrid .row .pull_nine.fourteen.columns:first-child, .sixteen.colgrid .row .pull_nine.fifteen.columns:first-child, .sixteen.colgrid .row .pull_ten.one.column:first-child, .sixteen.colgrid .row .pull_ten.two.columns:first-child, .sixteen.colgrid .row .pull_ten.three.columns:first-child, .sixteen.colgrid .row .pull_ten.four.columns:first-child, .sixteen.colgrid .row .pull_ten.five.columns:first-child, .sixteen.colgrid .row .pull_ten.seven.columns:first-child, .sixteen.colgrid .row .pull_ten.eight.columns:first-child, .sixteen.colgrid .row .pull_ten.nine.columns:first-child, .sixteen.colgrid .row .pull_ten.ten.columns:first-child, .sixteen.colgrid .row .pull_ten.eleven.columns:first-child, .sixteen.colgrid .row .pull_ten.twelve.columns:first-child, .sixteen.colgrid .row .pull_ten.thirteen.columns:first-child, .sixteen.colgrid .row .pull_ten.fourteen.columns:first-child, .sixteen.colgrid .row .pull_ten.fifteen.columns:first-child, .sixteen.colgrid .row .pull_eleven.one.column:first-child, .sixteen.colgrid .row .pull_eleven.two.columns:first-child, .sixteen.colgrid .row .pull_eleven.three.columns:first-child, .sixteen.colgrid .row .pull_eleven.four.columns:first-child, .sixteen.colgrid .row .pull_eleven.six.columns:first-child, .sixteen.colgrid .row .pull_eleven.seven.columns:first-child, .sixteen.colgrid .row .pull_eleven.eight.columns:first-child, .sixteen.colgrid .row .pull_eleven.nine.columns:first-child, .sixteen.colgrid .row .pull_eleven.ten.columns:first-child, .sixteen.colgrid .row .pull_eleven.eleven.columns:first-child, .sixteen.colgrid .row .pull_eleven.twelve.columns:first-child, .sixteen.colgrid .row .pull_eleven.thirteen.columns:first-child, .sixteen.colgrid .row .pull_eleven.fourteen.columns:first-child, .sixteen.colgrid .row .pull_eleven.fifteen.columns:first-child, .sixteen.colgrid .row .pull_twelve.one.column:first-child, .sixteen.colgrid .row .pull_twelve.two.columns:first-child, .sixteen.colgrid .row .pull_twelve.three.columns:first-child, .sixteen.colgrid .row .pull_twelve.five.columns:first-child, .sixteen.colgrid .row .pull_twelve.six.columns:first-child, .sixteen.colgrid .row .pull_twelve.seven.columns:first-child, .sixteen.colgrid .row .pull_twelve.eight.columns:first-child, .sixteen.colgrid .row .pull_twelve.nine.columns:first-child, .sixteen.colgrid .row .pull_twelve.ten.columns:first-child, .sixteen.colgrid .row .pull_twelve.eleven.columns:first-child, .sixteen.colgrid .row .pull_twelve.twelve.columns:first-child, .sixteen.colgrid .row .pull_twelve.thirteen.columns:first-child, .sixteen.colgrid .row .pull_twelve.fourteen.columns:first-child, .sixteen.colgrid .row .pull_twelve.fifteen.columns:first-child, .sixteen.colgrid .row .pull_thirteen.one.column:first-child, .sixteen.colgrid .row .pull_thirteen.two.columns:first-child, .sixteen.colgrid .row .pull_thirteen.four.columns:first-child, .sixteen.colgrid .row .pull_thirteen.five.columns:first-child, .sixteen.colgrid .row .pull_thirteen.six.columns:first-child, .sixteen.colgrid .row .pull_thirteen.seven.columns:first-child, .sixteen.colgrid .row .pull_thirteen.eight.columns:first-child, .sixteen.colgrid .row .pull_thirteen.nine.columns:first-child, .sixteen.colgrid .row .pull_thirteen.ten.columns:first-child, .sixteen.colgrid .row .pull_thirteen.eleven.columns:first-child, .sixteen.colgrid .row .pull_thirteen.twelve.columns:first-child, .sixteen.colgrid .row .pull_thirteen.thirteen.columns:first-child, .sixteen.colgrid .row .pull_thirteen.fourteen.columns:first-child, .sixteen.colgrid .row .pull_thirteen.fifteen.columns:first-child, .sixteen.colgrid .row .pull_fourteen.one.column:first-child, .sixteen.colgrid .row .pull_fourteen.three.columns:first-child, .sixteen.colgrid .row .pull_fourteen.four.columns:first-child, .sixteen.colgrid .row .pull_fourteen.five.columns:first-child, .sixteen.colgrid .row .pull_fourteen.six.columns:first-child, .sixteen.colgrid .row .pull_fourteen.seven.columns:first-child, .sixteen.colgrid .row .pull_fourteen.eight.columns:first-child, .sixteen.colgrid .row .pull_fourteen.nine.columns:first-child, .sixteen.colgrid .row .pull_fourteen.ten.columns:first-child, .sixteen.colgrid .row .pull_fourteen.eleven.columns:first-child, .sixteen.colgrid .row .pull_fourteen.twelve.columns:first-child, .sixteen.colgrid .row .pull_fourteen.thirteen.columns:first-child, .sixteen.colgrid .row .pull_fourteen.fourteen.columns:first-child, .sixteen.colgrid .row .pull_fourteen.fifteen.columns:first-child, .sixteen.colgrid .row .pull_fifteen.two.columns:first-child, .sixteen.colgrid .row .pull_fifteen.three.columns:first-child, .sixteen.colgrid .row .pull_fifteen.four.columns:first-child, .sixteen.colgrid .row .pull_fifteen.five.columns:first-child, .sixteen.colgrid .row .pull_fifteen.six.columns:first-child, .sixteen.colgrid .row .pull_fifteen.seven.columns:first-child, .sixteen.colgrid .row .pull_fifteen.eight.columns:first-child, .sixteen.colgrid .row .pull_fifteen.nine.columns:first-child, .sixteen.colgrid .row .pull_fifteen.ten.columns:first-child, .sixteen.colgrid .row .pull_fifteen.eleven.columns:first-child, .sixteen.colgrid .row .pull_fifteen.twelve.columns:first-child, .sixteen.colgrid .row .pull_fifteen.thirteen.columns:first-child, .sixteen.colgrid .row .pull_fifteen.fourteen.columns:first-child, .sixteen.colgrid .row .pull_fifteen.fifteen.columns:first-child { margin-left: 0; }
+
+/*=================================================
+
+ +++ LE GRID +++
+ A Responsive Grid -- Gumby defaults to a standard 960 grid,
+ but you can change it to whatever you'd like.
+ ==================================================*/
+/*.container {
+ padding: 0 $gutter-in-px;
+}*/
+.row { width: 100%; max-width: 980px; min-width: 320px; margin: 0 auto; padding-left: 20px; padding-right: 20px; }
+.row .row { min-width: 0; padding-left: 0; padding-right: 0; }
+
+/* To fix the grid into a different size, set max-width to your desired width */
+.column, .columns { margin-left: 2.12766%; float: left; min-height: 1px; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }
+
+.column:first-child, .columns:first-child, .alpha { margin-left: 0; }
+
+.column.omega, .columns.omega { float: right; }
+
+/* Column Classes */
+.row .one.column { width: 6.38298%; }
+.row .one.columns { width: 6.38298%; }
+.row .two.columns { width: 14.89362%; }
+.row .three.columns { width: 23.40426%; }
+.row .four.columns { width: 31.91489%; }
+.row .five.columns { width: 40.42553%; }
+.row .six.columns { width: 48.93617%; }
+.row .seven.columns { width: 57.44681%; }
+.row .eight.columns { width: 65.95745%; }
+.row .nine.columns { width: 74.46809%; }
+.row .ten.columns { width: 82.97872%; }
+.row .eleven.columns { width: 91.48936%; }
+.row .twelve.columns { width: 100%; }
+
+/* Push and Pull Classes */
+.row .push_one { margin-left: 10.6383%; }
+.row .push_one:first-child { margin-left: 8.51064%; }
+.row .pull_one.one.column { margin-left: -14.89362%; }
+.row .pull_one.two.columns { margin-left: -23.40426%; }
+.row .pull_one.three.columns { margin-left: -31.91489%; }
+.row .pull_one.four.columns { margin-left: -40.42553%; }
+.row .pull_one.five.columns { margin-left: -48.93617%; }
+.row .pull_one.six.columns { margin-left: -57.44681%; }
+.row .pull_one.seven.columns { margin-left: -65.95745%; }
+.row .pull_one.eight.columns { margin-left: -74.46809%; }
+.row .pull_one.nine.columns { margin-left: -82.97872%; }
+.row .pull_one.ten.columns { margin-left: -91.48936%; }
+.row .push_two { margin-left: 19.14894%; }
+.row .push_two:first-child { margin-left: 17.02128%; }
+.row .pull_two.one.column { margin-left: -23.40426%; }
+.row .pull_two.two.columns { margin-left: -31.91489%; }
+.row .pull_two.three.columns { margin-left: -40.42553%; }
+.row .pull_two.four.columns { margin-left: -48.93617%; }
+.row .pull_two.five.columns { margin-left: -57.44681%; }
+.row .pull_two.six.columns { margin-left: -65.95745%; }
+.row .pull_two.seven.columns { margin-left: -74.46809%; }
+.row .pull_two.eight.columns { margin-left: -82.97872%; }
+.row .pull_two.nine.columns { margin-left: -91.48936%; }
+.row .pull_two.eleven.columns { margin-left: -108.51064%; }
+.row .push_three { margin-left: 27.65957%; }
+.row .push_three:first-child { margin-left: 25.53191%; }
+.row .pull_three.one.column { margin-left: -31.91489%; }
+.row .pull_three.two.columns { margin-left: -40.42553%; }
+.row .pull_three.three.columns { margin-left: -48.93617%; }
+.row .pull_three.four.columns { margin-left: -57.44681%; }
+.row .pull_three.five.columns { margin-left: -65.95745%; }
+.row .pull_three.six.columns { margin-left: -74.46809%; }
+.row .pull_three.seven.columns { margin-left: -82.97872%; }
+.row .pull_three.eight.columns { margin-left: -91.48936%; }
+.row .pull_three.ten.columns { margin-left: -108.51064%; }
+.row .pull_three.eleven.columns { margin-left: -117.02128%; }
+.row .push_four { margin-left: 36.17021%; }
+.row .push_four:first-child { margin-left: 34.04255%; }
+.row .pull_four.one.column { margin-left: -40.42553%; }
+.row .pull_four.two.columns { margin-left: -48.93617%; }
+.row .pull_four.three.columns { margin-left: -57.44681%; }
+.row .pull_four.four.columns { margin-left: -65.95745%; }
+.row .pull_four.five.columns { margin-left: -74.46809%; }
+.row .pull_four.six.columns { margin-left: -82.97872%; }
+.row .pull_four.seven.columns { margin-left: -91.48936%; }
+.row .pull_four.nine.columns { margin-left: -108.51064%; }
+.row .pull_four.ten.columns { margin-left: -117.02128%; }
+.row .pull_four.eleven.columns { margin-left: -125.53191%; }
+.row .push_five { margin-left: 44.68085%; }
+.row .push_five:first-child { margin-left: 42.55319%; }
+.row .pull_five.one.column { margin-left: -48.93617%; }
+.row .pull_five.two.columns { margin-left: -57.44681%; }
+.row .pull_five.three.columns { margin-left: -65.95745%; }
+.row .pull_five.four.columns { margin-left: -74.46809%; }
+.row .pull_five.five.columns { margin-left: -82.97872%; }
+.row .pull_five.six.columns { margin-left: -91.48936%; }
+.row .pull_five.eight.columns { margin-left: -108.51064%; }
+.row .pull_five.nine.columns { margin-left: -117.02128%; }
+.row .pull_five.ten.columns { margin-left: -125.53191%; }
+.row .pull_five.eleven.columns { margin-left: -134.04255%; }
+.row .push_six { margin-left: 53.19149%; }
+.row .push_six:first-child { margin-left: 51.06383%; }
+.row .pull_six.one.column { margin-left: -57.44681%; }
+.row .pull_six.two.columns { margin-left: -65.95745%; }
+.row .pull_six.three.columns { margin-left: -74.46809%; }
+.row .pull_six.four.columns { margin-left: -82.97872%; }
+.row .pull_six.five.columns { margin-left: -91.48936%; }
+.row .pull_six.seven.columns { margin-left: -108.51064%; }
+.row .pull_six.eight.columns { margin-left: -117.02128%; }
+.row .pull_six.nine.columns { margin-left: -125.53191%; }
+.row .pull_six.ten.columns { margin-left: -134.04255%; }
+.row .pull_six.eleven.columns { margin-left: -142.55319%; }
+.row .push_seven { margin-left: 61.70213%; }
+.row .push_seven:first-child { margin-left: 59.57447%; }
+.row .pull_seven.one.column { margin-left: -65.95745%; }
+.row .pull_seven.two.columns { margin-left: -74.46809%; }
+.row .pull_seven.three.columns { margin-left: -82.97872%; }
+.row .pull_seven.four.columns { margin-left: -91.48936%; }
+.row .pull_seven.six.columns { margin-left: -108.51064%; }
+.row .pull_seven.seven.columns { margin-left: -117.02128%; }
+.row .pull_seven.eight.columns { margin-left: -125.53191%; }
+.row .pull_seven.nine.columns { margin-left: -134.04255%; }
+.row .pull_seven.ten.columns { margin-left: -142.55319%; }
+.row .pull_seven.eleven.columns { margin-left: -151.06383%; }
+.row .push_eight { margin-left: 70.21277%; }
+.row .push_eight:first-child { margin-left: 68.08511%; }
+.row .pull_eight.one.column { margin-left: -74.46809%; }
+.row .pull_eight.two.columns { margin-left: -82.97872%; }
+.row .pull_eight.three.columns { margin-left: -91.48936%; }
+.row .pull_eight.five.columns { margin-left: -108.51064%; }
+.row .pull_eight.six.columns { margin-left: -117.02128%; }
+.row .pull_eight.seven.columns { margin-left: -125.53191%; }
+.row .pull_eight.eight.columns { margin-left: -134.04255%; }
+.row .pull_eight.nine.columns { margin-left: -142.55319%; }
+.row .pull_eight.ten.columns { margin-left: -151.06383%; }
+.row .pull_eight.eleven.columns { margin-left: -159.57447%; }
+.row .push_nine { margin-left: 78.7234%; }
+.row .push_nine:first-child { margin-left: 76.59574%; }
+.row .pull_nine.one.column { margin-left: -82.97872%; }
+.row .pull_nine.two.columns { margin-left: -91.48936%; }
+.row .pull_nine.four.columns { margin-left: -108.51064%; }
+.row .pull_nine.five.columns { margin-left: -117.02128%; }
+.row .pull_nine.six.columns { margin-left: -125.53191%; }
+.row .pull_nine.seven.columns { margin-left: -134.04255%; }
+.row .pull_nine.eight.columns { margin-left: -142.55319%; }
+.row .pull_nine.nine.columns { margin-left: -151.06383%; }
+.row .pull_nine.ten.columns { margin-left: -159.57447%; }
+.row .pull_nine.eleven.columns { margin-left: -168.08511%; }
+.row .push_ten { margin-left: 87.23404%; }
+.row .push_ten:first-child { margin-left: 85.10638%; }
+.row .pull_ten.one.column { margin-left: -91.48936%; }
+.row .pull_ten.three.columns { margin-left: -108.51064%; }
+.row .pull_ten.four.columns { margin-left: -117.02128%; }
+.row .pull_ten.five.columns { margin-left: -125.53191%; }
+.row .pull_ten.six.columns { margin-left: -134.04255%; }
+.row .pull_ten.seven.columns { margin-left: -142.55319%; }
+.row .pull_ten.eight.columns { margin-left: -151.06383%; }
+.row .pull_ten.nine.columns { margin-left: -159.57447%; }
+.row .pull_ten.ten.columns { margin-left: -168.08511%; }
+.row .pull_ten.eleven.columns { margin-left: -176.59574%; }
+.row .push_eleven { margin-left: 95.74468%; }
+.row .push_eleven:first-child { margin-left: 93.61702%; }
+.row .pull_eleven.two.columns { margin-left: -108.51064%; }
+.row .pull_eleven.three.columns { margin-left: -117.02128%; }
+.row .pull_eleven.four.columns { margin-left: -125.53191%; }
+.row .pull_eleven.five.columns { margin-left: -134.04255%; }
+.row .pull_eleven.six.columns { margin-left: -142.55319%; }
+.row .pull_eleven.seven.columns { margin-left: -151.06383%; }
+.row .pull_eleven.eight.columns { margin-left: -159.57447%; }
+.row .pull_eleven.nine.columns { margin-left: -168.08511%; }
+.row .pull_eleven.ten.columns { margin-left: -176.59574%; }
+.row .pull_eleven.eleven.columns { margin-left: -185.10638%; }
+
+/* Centered Classes */
+.row .one.centered { margin-left: 46.80851%; }
+.row .two.centered { margin-left: 42.55319%; }
+.row .three.centered { margin-left: 38.29787%; }
+.row .four.centered { margin-left: 34.04255%; }
+.row .five.centered { margin-left: 29.78723%; }
+.row .six.centered { margin-left: 25.53191%; }
+.row .seven.centered { margin-left: 21.2766%; }
+.row .eight.centered { margin-left: 17.02128%; }
+.row .nine.centered { margin-left: 12.76596%; }
+.row .ten.centered { margin-left: 8.51064%; }
+.row .eleven.centered { margin-left: 4.25532%; }
+
+/* Hybrid Grid Columns */
+.sixteen.colgrid .row .one.column { width: 4.25532%; }
+.sixteen.colgrid .row .one.columns { width: 4.25532%; }
+.sixteen.colgrid .row .two.columns { width: 10.6383%; }
+.sixteen.colgrid .row .three.columns { width: 17.02128%; }
+.sixteen.colgrid .row .four.columns { width: 23.40426%; }
+.sixteen.colgrid .row .five.columns { width: 29.78723%; }
+.sixteen.colgrid .row .six.columns { width: 36.17021%; }
+.sixteen.colgrid .row .seven.columns { width: 42.55319%; }
+.sixteen.colgrid .row .eight.columns { width: 48.93617%; }
+.sixteen.colgrid .row .nine.columns { width: 55.31915%; }
+.sixteen.colgrid .row .ten.columns { width: 61.70213%; }
+.sixteen.colgrid .row .eleven.columns { width: 68.08511%; }
+.sixteen.colgrid .row .twelve.columns { width: 74.46809%; }
+.sixteen.colgrid .row .thirteen.columns { width: 80.85106%; }
+.sixteen.colgrid .row .fourteen.columns { width: 87.23404%; }
+.sixteen.colgrid .row .fifteen.columns { width: 93.61702%; }
+.sixteen.colgrid .row .sixteen.columns { width: 100%; }
+
+/* Hybrid Push and Pull Classes */
+.sixteen.colgrid .row .push_one { margin-left: 8.51064%; }
+.sixteen.colgrid .row .push_one:first-child { margin-left: 6.38298%; }
+.sixteen.colgrid .row .pull_one.one.column { margin-left: -10.6383%; }
+.sixteen.colgrid .row .pull_one.two.columns { margin-left: -17.02128%; }
+.sixteen.colgrid .row .pull_one.three.columns { margin-left: -23.40426%; }
+.sixteen.colgrid .row .pull_one.four.columns { margin-left: -29.78723%; }
+.sixteen.colgrid .row .pull_one.five.columns { margin-left: -36.17021%; }
+.sixteen.colgrid .row .pull_one.six.columns { margin-left: -42.55319%; }
+.sixteen.colgrid .row .pull_one.seven.columns { margin-left: -48.93617%; }
+.sixteen.colgrid .row .pull_one.eight.columns { margin-left: -55.31915%; }
+.sixteen.colgrid .row .pull_one.nine.columns { margin-left: -61.70213%; }
+.sixteen.colgrid .row .pull_one.ten.columns { margin-left: -68.08511%; }
+.sixteen.colgrid .row .pull_one.eleven.columns { margin-left: -74.46809%; }
+.sixteen.colgrid .row .pull_one.twelve.columns { margin-left: -80.85106%; }
+.sixteen.colgrid .row .pull_one.thirteen.columns { margin-left: -87.23404%; }
+.sixteen.colgrid .row .pull_one.fourteen.columns { margin-left: -93.61702%; }
+.sixteen.colgrid .row .push_two { margin-left: 14.89362%; }
+.sixteen.colgrid .row .push_two:first-child { margin-left: 12.76596%; }
+.sixteen.colgrid .row .pull_two.one.column { margin-left: -17.02128%; }
+.sixteen.colgrid .row .pull_two.two.columns { margin-left: -23.40426%; }
+.sixteen.colgrid .row .pull_two.three.columns { margin-left: -29.78723%; }
+.sixteen.colgrid .row .pull_two.four.columns { margin-left: -36.17021%; }
+.sixteen.colgrid .row .pull_two.five.columns { margin-left: -42.55319%; }
+.sixteen.colgrid .row .pull_two.six.columns { margin-left: -48.93617%; }
+.sixteen.colgrid .row .pull_two.seven.columns { margin-left: -55.31915%; }
+.sixteen.colgrid .row .pull_two.eight.columns { margin-left: -61.70213%; }
+.sixteen.colgrid .row .pull_two.nine.columns { margin-left: -68.08511%; }
+.sixteen.colgrid .row .pull_two.ten.columns { margin-left: -74.46809%; }
+.sixteen.colgrid .row .pull_two.eleven.columns { margin-left: -80.85106%; }
+.sixteen.colgrid .row .pull_two.twelve.columns { margin-left: -87.23404%; }
+.sixteen.colgrid .row .pull_two.thirteen.columns { margin-left: -93.61702%; }
+.sixteen.colgrid .row .pull_two.fifteen.columns { margin-left: -106.38298%; }
+.sixteen.colgrid .row .push_three { margin-left: 21.2766%; }
+.sixteen.colgrid .row .push_three:first-child { margin-left: 19.14894%; }
+.sixteen.colgrid .row .pull_three.one.column { margin-left: -23.40426%; }
+.sixteen.colgrid .row .pull_three.two.columns { margin-left: -29.78723%; }
+.sixteen.colgrid .row .pull_three.three.columns { margin-left: -36.17021%; }
+.sixteen.colgrid .row .pull_three.four.columns { margin-left: -42.55319%; }
+.sixteen.colgrid .row .pull_three.five.columns { margin-left: -48.93617%; }
+.sixteen.colgrid .row .pull_three.six.columns { margin-left: -55.31915%; }
+.sixteen.colgrid .row .pull_three.seven.columns { margin-left: -61.70213%; }
+.sixteen.colgrid .row .pull_three.eight.columns { margin-left: -68.08511%; }
+.sixteen.colgrid .row .pull_three.nine.columns { margin-left: -74.46809%; }
+.sixteen.colgrid .row .pull_three.ten.columns { margin-left: -80.85106%; }
+.sixteen.colgrid .row .pull_three.eleven.columns { margin-left: -87.23404%; }
+.sixteen.colgrid .row .pull_three.twelve.columns { margin-left: -93.61702%; }
+.sixteen.colgrid .row .pull_three.fourteen.columns { margin-left: -106.38298%; }
+.sixteen.colgrid .row .pull_three.fifteen.columns { margin-left: -112.76596%; }
+.sixteen.colgrid .row .push_four { margin-left: 27.65957%; }
+.sixteen.colgrid .row .push_four:first-child { margin-left: 25.53191%; }
+.sixteen.colgrid .row .pull_four.one.column { margin-left: -29.78723%; }
+.sixteen.colgrid .row .pull_four.two.columns { margin-left: -36.17021%; }
+.sixteen.colgrid .row .pull_four.three.columns { margin-left: -42.55319%; }
+.sixteen.colgrid .row .pull_four.four.columns { margin-left: -48.93617%; }
+.sixteen.colgrid .row .pull_four.five.columns { margin-left: -55.31915%; }
+.sixteen.colgrid .row .pull_four.six.columns { margin-left: -61.70213%; }
+.sixteen.colgrid .row .pull_four.seven.columns { margin-left: -68.08511%; }
+.sixteen.colgrid .row .pull_four.eight.columns { margin-left: -74.46809%; }
+.sixteen.colgrid .row .pull_four.nine.columns { margin-left: -80.85106%; }
+.sixteen.colgrid .row .pull_four.ten.columns { margin-left: -87.23404%; }
+.sixteen.colgrid .row .pull_four.eleven.columns { margin-left: -93.61702%; }
+.sixteen.colgrid .row .pull_four.thirteen.columns { margin-left: -106.38298%; }
+.sixteen.colgrid .row .pull_four.fourteen.columns { margin-left: -112.76596%; }
+.sixteen.colgrid .row .pull_four.fifteen.columns { margin-left: -119.14894%; }
+.sixteen.colgrid .row .push_five { margin-left: 34.04255%; }
+.sixteen.colgrid .row .push_five:first-child { margin-left: 31.91489%; }
+.sixteen.colgrid .row .pull_five.one.column { margin-left: -36.17021%; }
+.sixteen.colgrid .row .pull_five.two.columns { margin-left: -42.55319%; }
+.sixteen.colgrid .row .pull_five.three.columns { margin-left: -48.93617%; }
+.sixteen.colgrid .row .pull_five.four.columns { margin-left: -55.31915%; }
+.sixteen.colgrid .row .pull_five.five.columns { margin-left: -61.70213%; }
+.sixteen.colgrid .row .pull_five.six.columns { margin-left: -68.08511%; }
+.sixteen.colgrid .row .pull_five.seven.columns { margin-left: -74.46809%; }
+.sixteen.colgrid .row .pull_five.eight.columns { margin-left: -80.85106%; }
+.sixteen.colgrid .row .pull_five.nine.columns { margin-left: -87.23404%; }
+.sixteen.colgrid .row .pull_five.ten.columns { margin-left: -93.61702%; }
+.sixteen.colgrid .row .pull_five.twelve.columns { margin-left: -106.38298%; }
+.sixteen.colgrid .row .pull_five.thirteen.columns { margin-left: -112.76596%; }
+.sixteen.colgrid .row .pull_five.fourteen.columns { margin-left: -119.14894%; }
+.sixteen.colgrid .row .pull_five.fifteen.columns { margin-left: -125.53191%; }
+.sixteen.colgrid .row .push_six { margin-left: 40.42553%; }
+.sixteen.colgrid .row .push_six:first-child { margin-left: 38.29787%; }
+.sixteen.colgrid .row .pull_six.one.column { margin-left: -42.55319%; }
+.sixteen.colgrid .row .pull_six.two.columns { margin-left: -48.93617%; }
+.sixteen.colgrid .row .pull_six.three.columns { margin-left: -55.31915%; }
+.sixteen.colgrid .row .pull_six.four.columns { margin-left: -61.70213%; }
+.sixteen.colgrid .row .pull_six.five.columns { margin-left: -68.08511%; }
+.sixteen.colgrid .row .pull_six.six.columns { margin-left: -74.46809%; }
+.sixteen.colgrid .row .pull_six.seven.columns { margin-left: -80.85106%; }
+.sixteen.colgrid .row .pull_six.eight.columns { margin-left: -87.23404%; }
+.sixteen.colgrid .row .pull_six.nine.columns { margin-left: -93.61702%; }
+.sixteen.colgrid .row .pull_six.eleven.columns { margin-left: -106.38298%; }
+.sixteen.colgrid .row .pull_six.twelve.columns { margin-left: -112.76596%; }
+.sixteen.colgrid .row .pull_six.thirteen.columns { margin-left: -119.14894%; }
+.sixteen.colgrid .row .pull_six.fourteen.columns { margin-left: -125.53191%; }
+.sixteen.colgrid .row .pull_six.fifteen.columns { margin-left: -131.91489%; }
+.sixteen.colgrid .row .push_seven { margin-left: 46.80851%; }
+.sixteen.colgrid .row .push_seven:first-child { margin-left: 44.68085%; }
+.sixteen.colgrid .row .pull_seven.one.column { margin-left: -48.93617%; }
+.sixteen.colgrid .row .pull_seven.two.columns { margin-left: -55.31915%; }
+.sixteen.colgrid .row .pull_seven.three.columns { margin-left: -61.70213%; }
+.sixteen.colgrid .row .pull_seven.four.columns { margin-left: -68.08511%; }
+.sixteen.colgrid .row .pull_seven.five.columns { margin-left: -74.46809%; }
+.sixteen.colgrid .row .pull_seven.six.columns { margin-left: -80.85106%; }
+.sixteen.colgrid .row .pull_seven.seven.columns { margin-left: -87.23404%; }
+.sixteen.colgrid .row .pull_seven.eight.columns { margin-left: -93.61702%; }
+.sixteen.colgrid .row .pull_seven.ten.columns { margin-left: -106.38298%; }
+.sixteen.colgrid .row .pull_seven.eleven.columns { margin-left: -112.76596%; }
+.sixteen.colgrid .row .pull_seven.twelve.columns { margin-left: -119.14894%; }
+.sixteen.colgrid .row .pull_seven.thirteen.columns { margin-left: -125.53191%; }
+.sixteen.colgrid .row .pull_seven.fourteen.columns { margin-left: -131.91489%; }
+.sixteen.colgrid .row .pull_seven.fifteen.columns { margin-left: -138.29787%; }
+.sixteen.colgrid .row .push_eight { margin-left: 53.19149%; }
+.sixteen.colgrid .row .push_eight:first-child { margin-left: 51.06383%; }
+.sixteen.colgrid .row .pull_eight.one.column { margin-left: -55.31915%; }
+.sixteen.colgrid .row .pull_eight.two.columns { margin-left: -61.70213%; }
+.sixteen.colgrid .row .pull_eight.three.columns { margin-left: -68.08511%; }
+.sixteen.colgrid .row .pull_eight.four.columns { margin-left: -74.46809%; }
+.sixteen.colgrid .row .pull_eight.five.columns { margin-left: -80.85106%; }
+.sixteen.colgrid .row .pull_eight.six.columns { margin-left: -87.23404%; }
+.sixteen.colgrid .row .pull_eight.seven.columns { margin-left: -93.61702%; }
+.sixteen.colgrid .row .pull_eight.nine.columns { margin-left: -106.38298%; }
+.sixteen.colgrid .row .pull_eight.ten.columns { margin-left: -112.76596%; }
+.sixteen.colgrid .row .pull_eight.eleven.columns { margin-left: -119.14894%; }
+.sixteen.colgrid .row .pull_eight.twelve.columns { margin-left: -125.53191%; }
+.sixteen.colgrid .row .pull_eight.thirteen.columns { margin-left: -131.91489%; }
+.sixteen.colgrid .row .pull_eight.fourteen.columns { margin-left: -138.29787%; }
+.sixteen.colgrid .row .pull_eight.fifteen.columns { margin-left: -144.68085%; }
+.sixteen.colgrid .row .push_nine { margin-left: 59.57447%; }
+.sixteen.colgrid .row .push_nine:first-child { margin-left: 57.44681%; }
+.sixteen.colgrid .row .pull_nine.one.column { margin-left: -61.70213%; }
+.sixteen.colgrid .row .pull_nine.two.columns { margin-left: -68.08511%; }
+.sixteen.colgrid .row .pull_nine.three.columns { margin-left: -74.46809%; }
+.sixteen.colgrid .row .pull_nine.four.columns { margin-left: -80.85106%; }
+.sixteen.colgrid .row .pull_nine.five.columns { margin-left: -87.23404%; }
+.sixteen.colgrid .row .pull_nine.six.columns { margin-left: -93.61702%; }
+.sixteen.colgrid .row .pull_nine.eight.columns { margin-left: -106.38298%; }
+.sixteen.colgrid .row .pull_nine.nine.columns { margin-left: -112.76596%; }
+.sixteen.colgrid .row .pull_nine.ten.columns { margin-left: -119.14894%; }
+.sixteen.colgrid .row .pull_nine.eleven.columns { margin-left: -125.53191%; }
+.sixteen.colgrid .row .pull_nine.twelve.columns { margin-left: -131.91489%; }
+.sixteen.colgrid .row .pull_nine.thirteen.columns { margin-left: -138.29787%; }
+.sixteen.colgrid .row .pull_nine.fourteen.columns { margin-left: -144.68085%; }
+.sixteen.colgrid .row .pull_nine.fifteen.columns { margin-left: -151.06383%; }
+.sixteen.colgrid .row .push_ten { margin-left: 65.95745%; }
+.sixteen.colgrid .row .push_ten:first-child { margin-left: 63.82979%; }
+.sixteen.colgrid .row .pull_ten.one.column { margin-left: -68.08511%; }
+.sixteen.colgrid .row .pull_ten.two.columns { margin-left: -74.46809%; }
+.sixteen.colgrid .row .pull_ten.three.columns { margin-left: -80.85106%; }
+.sixteen.colgrid .row .pull_ten.four.columns { margin-left: -87.23404%; }
+.sixteen.colgrid .row .pull_ten.five.columns { margin-left: -93.61702%; }
+.sixteen.colgrid .row .pull_ten.seven.columns { margin-left: -106.38298%; }
+.sixteen.colgrid .row .pull_ten.eight.columns { margin-left: -112.76596%; }
+.sixteen.colgrid .row .pull_ten.nine.columns { margin-left: -119.14894%; }
+.sixteen.colgrid .row .pull_ten.ten.columns { margin-left: -125.53191%; }
+.sixteen.colgrid .row .pull_ten.eleven.columns { margin-left: -131.91489%; }
+.sixteen.colgrid .row .pull_ten.twelve.columns { margin-left: -138.29787%; }
+.sixteen.colgrid .row .pull_ten.thirteen.columns { margin-left: -144.68085%; }
+.sixteen.colgrid .row .pull_ten.fourteen.columns { margin-left: -151.06383%; }
+.sixteen.colgrid .row .pull_ten.fifteen.columns { margin-left: -157.44681%; }
+.sixteen.colgrid .row .push_eleven { margin-left: 72.34043%; }
+.sixteen.colgrid .row .push_eleven:first-child { margin-left: 70.21277%; }
+.sixteen.colgrid .row .pull_eleven.one.column { margin-left: -74.46809%; }
+.sixteen.colgrid .row .pull_eleven.two.columns { margin-left: -80.85106%; }
+.sixteen.colgrid .row .pull_eleven.three.columns { margin-left: -87.23404%; }
+.sixteen.colgrid .row .pull_eleven.four.columns { margin-left: -93.61702%; }
+.sixteen.colgrid .row .pull_eleven.six.columns { margin-left: -106.38298%; }
+.sixteen.colgrid .row .pull_eleven.seven.columns { margin-left: -112.76596%; }
+.sixteen.colgrid .row .pull_eleven.eight.columns { margin-left: -119.14894%; }
+.sixteen.colgrid .row .pull_eleven.nine.columns { margin-left: -125.53191%; }
+.sixteen.colgrid .row .pull_eleven.ten.columns { margin-left: -131.91489%; }
+.sixteen.colgrid .row .pull_eleven.eleven.columns { margin-left: -138.29787%; }
+.sixteen.colgrid .row .pull_eleven.twelve.columns { margin-left: -144.68085%; }
+.sixteen.colgrid .row .pull_eleven.thirteen.columns { margin-left: -151.06383%; }
+.sixteen.colgrid .row .pull_eleven.fourteen.columns { margin-left: -157.44681%; }
+.sixteen.colgrid .row .pull_eleven.fifteen.columns { margin-left: -163.82979%; }
+.sixteen.colgrid .row .push_twelve { margin-left: 78.7234%; }
+.sixteen.colgrid .row .push_twelve:first-child { margin-left: 76.59574%; }
+.sixteen.colgrid .row .pull_twelve.one.column { margin-left: -80.85106%; }
+.sixteen.colgrid .row .pull_twelve.two.columns { margin-left: -87.23404%; }
+.sixteen.colgrid .row .pull_twelve.three.columns { margin-left: -93.61702%; }
+.sixteen.colgrid .row .pull_twelve.five.columns { margin-left: -106.38298%; }
+.sixteen.colgrid .row .pull_twelve.six.columns { margin-left: -112.76596%; }
+.sixteen.colgrid .row .pull_twelve.seven.columns { margin-left: -119.14894%; }
+.sixteen.colgrid .row .pull_twelve.eight.columns { margin-left: -125.53191%; }
+.sixteen.colgrid .row .pull_twelve.nine.columns { margin-left: -131.91489%; }
+.sixteen.colgrid .row .pull_twelve.ten.columns { margin-left: -138.29787%; }
+.sixteen.colgrid .row .pull_twelve.eleven.columns { margin-left: -144.68085%; }
+.sixteen.colgrid .row .pull_twelve.twelve.columns { margin-left: -151.06383%; }
+.sixteen.colgrid .row .pull_twelve.thirteen.columns { margin-left: -157.44681%; }
+.sixteen.colgrid .row .pull_twelve.fourteen.columns { margin-left: -163.82979%; }
+.sixteen.colgrid .row .pull_twelve.fifteen.columns { margin-left: -170.21277%; }
+.sixteen.colgrid .row .push_thirteen { margin-left: 85.10638%; }
+.sixteen.colgrid .row .push_thirteen:first-child { margin-left: 82.97872%; }
+.sixteen.colgrid .row .pull_thirteen.one.column { margin-left: -87.23404%; }
+.sixteen.colgrid .row .pull_thirteen.two.columns { margin-left: -93.61702%; }
+.sixteen.colgrid .row .pull_thirteen.four.columns { margin-left: -106.38298%; }
+.sixteen.colgrid .row .pull_thirteen.five.columns { margin-left: -112.76596%; }
+.sixteen.colgrid .row .pull_thirteen.six.columns { margin-left: -119.14894%; }
+.sixteen.colgrid .row .pull_thirteen.seven.columns { margin-left: -125.53191%; }
+.sixteen.colgrid .row .pull_thirteen.eight.columns { margin-left: -131.91489%; }
+.sixteen.colgrid .row .pull_thirteen.nine.columns { margin-left: -138.29787%; }
+.sixteen.colgrid .row .pull_thirteen.ten.columns { margin-left: -144.68085%; }
+.sixteen.colgrid .row .pull_thirteen.eleven.columns { margin-left: -151.06383%; }
+.sixteen.colgrid .row .pull_thirteen.twelve.columns { margin-left: -157.44681%; }
+.sixteen.colgrid .row .pull_thirteen.thirteen.columns { margin-left: -163.82979%; }
+.sixteen.colgrid .row .pull_thirteen.fourteen.columns { margin-left: -170.21277%; }
+.sixteen.colgrid .row .pull_thirteen.fifteen.columns { margin-left: -176.59574%; }
+.sixteen.colgrid .row .push_fourteen { margin-left: 91.48936%; }
+.sixteen.colgrid .row .push_fourteen:first-child { margin-left: 89.3617%; }
+.sixteen.colgrid .row .pull_fourteen.one.column { margin-left: -93.61702%; }
+.sixteen.colgrid .row .pull_fourteen.three.columns { margin-left: -106.38298%; }
+.sixteen.colgrid .row .pull_fourteen.four.columns { margin-left: -112.76596%; }
+.sixteen.colgrid .row .pull_fourteen.five.columns { margin-left: -119.14894%; }
+.sixteen.colgrid .row .pull_fourteen.six.columns { margin-left: -125.53191%; }
+.sixteen.colgrid .row .pull_fourteen.seven.columns { margin-left: -131.91489%; }
+.sixteen.colgrid .row .pull_fourteen.eight.columns { margin-left: -138.29787%; }
+.sixteen.colgrid .row .pull_fourteen.nine.columns { margin-left: -144.68085%; }
+.sixteen.colgrid .row .pull_fourteen.ten.columns { margin-left: -151.06383%; }
+.sixteen.colgrid .row .pull_fourteen.eleven.columns { margin-left: -157.44681%; }
+.sixteen.colgrid .row .pull_fourteen.twelve.columns { margin-left: -163.82979%; }
+.sixteen.colgrid .row .pull_fourteen.thirteen.columns { margin-left: -170.21277%; }
+.sixteen.colgrid .row .pull_fourteen.fourteen.columns { margin-left: -176.59574%; }
+.sixteen.colgrid .row .pull_fourteen.fifteen.columns { margin-left: -182.97872%; }
+.sixteen.colgrid .row .push_fifteen { margin-left: 97.87234%; }
+.sixteen.colgrid .row .push_fifteen:first-child { margin-left: 95.74468%; }
+.sixteen.colgrid .row .pull_fifteen.two.columns { margin-left: -106.38298%; }
+.sixteen.colgrid .row .pull_fifteen.three.columns { margin-left: -112.76596%; }
+.sixteen.colgrid .row .pull_fifteen.four.columns { margin-left: -119.14894%; }
+.sixteen.colgrid .row .pull_fifteen.five.columns { margin-left: -125.53191%; }
+.sixteen.colgrid .row .pull_fifteen.six.columns { margin-left: -131.91489%; }
+.sixteen.colgrid .row .pull_fifteen.seven.columns { margin-left: -138.29787%; }
+.sixteen.colgrid .row .pull_fifteen.eight.columns { margin-left: -144.68085%; }
+.sixteen.colgrid .row .pull_fifteen.nine.columns { margin-left: -151.06383%; }
+.sixteen.colgrid .row .pull_fifteen.ten.columns { margin-left: -157.44681%; }
+.sixteen.colgrid .row .pull_fifteen.eleven.columns { margin-left: -163.82979%; }
+.sixteen.colgrid .row .pull_fifteen.twelve.columns { margin-left: -170.21277%; }
+.sixteen.colgrid .row .pull_fifteen.thirteen.columns { margin-left: -176.59574%; }
+.sixteen.colgrid .row .pull_fifteen.fourteen.columns { margin-left: -182.97872%; }
+.sixteen.colgrid .row .pull_fifteen.fifteen.columns { margin-left: -189.3617%; }
+
+.row .pull_one.one.column:first-child, .row .pull_one.two.columns:first-child, .row .pull_one.three.columns:first-child, .row .pull_one.four.columns:first-child, .row .pull_one.five.columns:first-child, .row .pull_one.six.columns:first-child, .row .pull_one.seven.columns:first-child, .row .pull_one.eight.columns:first-child, .row .pull_one.nine.columns:first-child, .row .pull_one.ten.columns:first-child, .row .pull_two.one.column:first-child, .row .pull_two.two.columns:first-child, .row .pull_two.three.columns:first-child, .row .pull_two.four.columns:first-child, .row .pull_two.five.columns:first-child, .row .pull_two.six.columns:first-child, .row .pull_two.seven.columns:first-child, .row .pull_two.eight.columns:first-child, .row .pull_two.nine.columns:first-child, .row .pull_two.eleven.columns:first-child, .row .pull_three.one.column:first-child, .row .pull_three.two.columns:first-child, .row .pull_three.three.columns:first-child, .row .pull_three.four.columns:first-child, .row .pull_three.five.columns:first-child, .row .pull_three.six.columns:first-child, .row .pull_three.seven.columns:first-child, .row .pull_three.eight.columns:first-child, .row .pull_three.ten.columns:first-child, .row .pull_three.eleven.columns:first-child, .row .pull_four.one.column:first-child, .row .pull_four.two.columns:first-child, .row .pull_four.three.columns:first-child, .row .pull_four.four.columns:first-child, .row .pull_four.five.columns:first-child, .row .pull_four.six.columns:first-child, .row .pull_four.seven.columns:first-child, .row .pull_four.nine.columns:first-child, .row .pull_four.ten.columns:first-child, .row .pull_four.eleven.columns:first-child, .row .pull_five.one.column:first-child, .row .pull_five.two.columns:first-child, .row .pull_five.three.columns:first-child, .row .pull_five.four.columns:first-child, .row .pull_five.five.columns:first-child, .row .pull_five.six.columns:first-child, .row .pull_five.eight.columns:first-child, .row .pull_five.nine.columns:first-child, .row .pull_five.ten.columns:first-child, .row .pull_five.eleven.columns:first-child, .row .pull_six.one.column:first-child, .row .pull_six.two.columns:first-child, .row .pull_six.three.columns:first-child, .row .pull_six.four.columns:first-child, .row .pull_six.five.columns:first-child, .row .pull_six.seven.columns:first-child, .row .pull_six.eight.columns:first-child, .row .pull_six.nine.columns:first-child, .row .pull_six.ten.columns:first-child, .row .pull_six.eleven.columns:first-child, .row .pull_seven.one.column:first-child, .row .pull_seven.two.columns:first-child, .row .pull_seven.three.columns:first-child, .row .pull_seven.four.columns:first-child, .row .pull_seven.six.columns:first-child, .row .pull_seven.seven.columns:first-child, .row .pull_seven.eight.columns:first-child, .row .pull_seven.nine.columns:first-child, .row .pull_seven.ten.columns:first-child, .row .pull_seven.eleven.columns:first-child, .row .pull_eight.one.column:first-child, .row .pull_eight.two.columns:first-child, .row .pull_eight.three.columns:first-child, .row .pull_eight.five.columns:first-child, .row .pull_eight.six.columns:first-child, .row .pull_eight.seven.columns:first-child, .row .pull_eight.eight.columns:first-child, .row .pull_eight.nine.columns:first-child, .row .pull_eight.ten.columns:first-child, .row .pull_eight.eleven.columns:first-child, .row .pull_nine.one.column:first-child, .row .pull_nine.two.columns:first-child, .row .pull_nine.four.columns:first-child, .row .pull_nine.five.columns:first-child, .row .pull_nine.six.columns:first-child, .row .pull_nine.seven.columns:first-child, .row .pull_nine.eight.columns:first-child, .row .pull_nine.nine.columns:first-child, .row .pull_nine.ten.columns:first-child, .row .pull_nine.eleven.columns:first-child, .row .pull_ten.one.column:first-child, .row .pull_ten.three.columns:first-child, .row .pull_ten.four.columns:first-child, .row .pull_ten.five.columns:first-child, .row .pull_ten.six.columns:first-child, .row .pull_ten.seven.columns:first-child, .row .pull_ten.eight.columns:first-child, .row .pull_ten.nine.columns:first-child, .row .pull_ten.ten.columns:first-child, .row .pull_ten.eleven.columns:first-child, .row .pull_eleven.two.columns:first-child, .row .pull_eleven.three.columns:first-child, .row .pull_eleven.four.columns:first-child, .row .pull_eleven.five.columns:first-child, .row .pull_eleven.six.columns:first-child, .row .pull_eleven.seven.columns:first-child, .row .pull_eleven.eight.columns:first-child, .row .pull_eleven.nine.columns:first-child, .row .pull_eleven.ten.columns:first-child, .row .pull_eleven.eleven.columns:first-child, .sixteen.colgrid .row .pull_one.one.column:first-child, .sixteen.colgrid .row .pull_one.two.columns:first-child, .sixteen.colgrid .row .pull_one.three.columns:first-child, .sixteen.colgrid .row .pull_one.four.columns:first-child, .sixteen.colgrid .row .pull_one.five.columns:first-child, .sixteen.colgrid .row .pull_one.six.columns:first-child, .sixteen.colgrid .row .pull_one.seven.columns:first-child, .sixteen.colgrid .row .pull_one.eight.columns:first-child, .sixteen.colgrid .row .pull_one.nine.columns:first-child, .sixteen.colgrid .row .pull_one.ten.columns:first-child, .sixteen.colgrid .row .pull_one.eleven.columns:first-child, .sixteen.colgrid .row .pull_one.twelve.columns:first-child, .sixteen.colgrid .row .pull_one.thirteen.columns:first-child, .sixteen.colgrid .row .pull_one.fourteen.columns:first-child, .sixteen.colgrid .row .pull_two.one.column:first-child, .sixteen.colgrid .row .pull_two.two.columns:first-child, .sixteen.colgrid .row .pull_two.three.columns:first-child, .sixteen.colgrid .row .pull_two.four.columns:first-child, .sixteen.colgrid .row .pull_two.five.columns:first-child, .sixteen.colgrid .row .pull_two.six.columns:first-child, .sixteen.colgrid .row .pull_two.seven.columns:first-child, .sixteen.colgrid .row .pull_two.eight.columns:first-child, .sixteen.colgrid .row .pull_two.nine.columns:first-child, .sixteen.colgrid .row .pull_two.ten.columns:first-child, .sixteen.colgrid .row .pull_two.eleven.columns:first-child, .sixteen.colgrid .row .pull_two.twelve.columns:first-child, .sixteen.colgrid .row .pull_two.thirteen.columns:first-child, .sixteen.colgrid .row .pull_two.fifteen.columns:first-child, .sixteen.colgrid .row .pull_three.one.column:first-child, .sixteen.colgrid .row .pull_three.two.columns:first-child, .sixteen.colgrid .row .pull_three.three.columns:first-child, .sixteen.colgrid .row .pull_three.four.columns:first-child, .sixteen.colgrid .row .pull_three.five.columns:first-child, .sixteen.colgrid .row .pull_three.six.columns:first-child, .sixteen.colgrid .row .pull_three.seven.columns:first-child, .sixteen.colgrid .row .pull_three.eight.columns:first-child, .sixteen.colgrid .row .pull_three.nine.columns:first-child, .sixteen.colgrid .row .pull_three.ten.columns:first-child, .sixteen.colgrid .row .pull_three.eleven.columns:first-child, .sixteen.colgrid .row .pull_three.twelve.columns:first-child, .sixteen.colgrid .row .pull_three.fourteen.columns:first-child, .sixteen.colgrid .row .pull_three.fifteen.columns:first-child, .sixteen.colgrid .row .pull_four.one.column:first-child, .sixteen.colgrid .row .pull_four.two.columns:first-child, .sixteen.colgrid .row .pull_four.three.columns:first-child, .sixteen.colgrid .row .pull_four.four.columns:first-child, .sixteen.colgrid .row .pull_four.five.columns:first-child, .sixteen.colgrid .row .pull_four.six.columns:first-child, .sixteen.colgrid .row .pull_four.seven.columns:first-child, .sixteen.colgrid .row .pull_four.eight.columns:first-child, .sixteen.colgrid .row .pull_four.nine.columns:first-child, .sixteen.colgrid .row .pull_four.ten.columns:first-child, .sixteen.colgrid .row .pull_four.eleven.columns:first-child, .sixteen.colgrid .row .pull_four.thirteen.columns:first-child, .sixteen.colgrid .row .pull_four.fourteen.columns:first-child, .sixteen.colgrid .row .pull_four.fifteen.columns:first-child, .sixteen.colgrid .row .pull_five.one.column:first-child, .sixteen.colgrid .row .pull_five.two.columns:first-child, .sixteen.colgrid .row .pull_five.three.columns:first-child, .sixteen.colgrid .row .pull_five.four.columns:first-child, .sixteen.colgrid .row .pull_five.five.columns:first-child, .sixteen.colgrid .row .pull_five.six.columns:first-child, .sixteen.colgrid .row .pull_five.seven.columns:first-child, .sixteen.colgrid .row .pull_five.eight.columns:first-child, .sixteen.colgrid .row .pull_five.nine.columns:first-child, .sixteen.colgrid .row .pull_five.ten.columns:first-child, .sixteen.colgrid .row .pull_five.twelve.columns:first-child, .sixteen.colgrid .row .pull_five.thirteen.columns:first-child, .sixteen.colgrid .row .pull_five.fourteen.columns:first-child, .sixteen.colgrid .row .pull_five.fifteen.columns:first-child, .sixteen.colgrid .row .pull_six.one.column:first-child, .sixteen.colgrid .row .pull_six.two.columns:first-child, .sixteen.colgrid .row .pull_six.three.columns:first-child, .sixteen.colgrid .row .pull_six.four.columns:first-child, .sixteen.colgrid .row .pull_six.five.columns:first-child, .sixteen.colgrid .row .pull_six.six.columns:first-child, .sixteen.colgrid .row .pull_six.seven.columns:first-child, .sixteen.colgrid .row .pull_six.eight.columns:first-child, .sixteen.colgrid .row .pull_six.nine.columns:first-child, .sixteen.colgrid .row .pull_six.eleven.columns:first-child, .sixteen.colgrid .row .pull_six.twelve.columns:first-child, .sixteen.colgrid .row .pull_six.thirteen.columns:first-child, .sixteen.colgrid .row .pull_six.fourteen.columns:first-child, .sixteen.colgrid .row .pull_six.fifteen.columns:first-child, .sixteen.colgrid .row .pull_seven.one.column:first-child, .sixteen.colgrid .row .pull_seven.two.columns:first-child, .sixteen.colgrid .row .pull_seven.three.columns:first-child, .sixteen.colgrid .row .pull_seven.four.columns:first-child, .sixteen.colgrid .row .pull_seven.five.columns:first-child, .sixteen.colgrid .row .pull_seven.six.columns:first-child, .sixteen.colgrid .row .pull_seven.seven.columns:first-child, .sixteen.colgrid .row .pull_seven.eight.columns:first-child, .sixteen.colgrid .row .pull_seven.ten.columns:first-child, .sixteen.colgrid .row .pull_seven.eleven.columns:first-child, .sixteen.colgrid .row .pull_seven.twelve.columns:first-child, .sixteen.colgrid .row .pull_seven.thirteen.columns:first-child, .sixteen.colgrid .row .pull_seven.fourteen.columns:first-child, .sixteen.colgrid .row .pull_seven.fifteen.columns:first-child, .sixteen.colgrid .row .pull_eight.one.column:first-child, .sixteen.colgrid .row .pull_eight.two.columns:first-child, .sixteen.colgrid .row .pull_eight.three.columns:first-child, .sixteen.colgrid .row .pull_eight.four.columns:first-child, .sixteen.colgrid .row .pull_eight.five.columns:first-child, .sixteen.colgrid .row .pull_eight.six.columns:first-child, .sixteen.colgrid .row .pull_eight.seven.columns:first-child, .sixteen.colgrid .row .pull_eight.nine.columns:first-child, .sixteen.colgrid .row .pull_eight.ten.columns:first-child, .sixteen.colgrid .row .pull_eight.eleven.columns:first-child, .sixteen.colgrid .row .pull_eight.twelve.columns:first-child, .sixteen.colgrid .row .pull_eight.thirteen.columns:first-child, .sixteen.colgrid .row .pull_eight.fourteen.columns:first-child, .sixteen.colgrid .row .pull_eight.fifteen.columns:first-child, .sixteen.colgrid .row .pull_nine.one.column:first-child, .sixteen.colgrid .row .pull_nine.two.columns:first-child, .sixteen.colgrid .row .pull_nine.three.columns:first-child, .sixteen.colgrid .row .pull_nine.four.columns:first-child, .sixteen.colgrid .row .pull_nine.five.columns:first-child, .sixteen.colgrid .row .pull_nine.six.columns:first-child, .sixteen.colgrid .row .pull_nine.eight.columns:first-child, .sixteen.colgrid .row .pull_nine.nine.columns:first-child, .sixteen.colgrid .row .pull_nine.ten.columns:first-child, .sixteen.colgrid .row .pull_nine.eleven.columns:first-child, .sixteen.colgrid .row .pull_nine.twelve.columns:first-child, .sixteen.colgrid .row .pull_nine.thirteen.columns:first-child, .sixteen.colgrid .row .pull_nine.fourteen.columns:first-child, .sixteen.colgrid .row .pull_nine.fifteen.columns:first-child, .sixteen.colgrid .row .pull_ten.one.column:first-child, .sixteen.colgrid .row .pull_ten.two.columns:first-child, .sixteen.colgrid .row .pull_ten.three.columns:first-child, .sixteen.colgrid .row .pull_ten.four.columns:first-child, .sixteen.colgrid .row .pull_ten.five.columns:first-child, .sixteen.colgrid .row .pull_ten.seven.columns:first-child, .sixteen.colgrid .row .pull_ten.eight.columns:first-child, .sixteen.colgrid .row .pull_ten.nine.columns:first-child, .sixteen.colgrid .row .pull_ten.ten.columns:first-child, .sixteen.colgrid .row .pull_ten.eleven.columns:first-child, .sixteen.colgrid .row .pull_ten.twelve.columns:first-child, .sixteen.colgrid .row .pull_ten.thirteen.columns:first-child, .sixteen.colgrid .row .pull_ten.fourteen.columns:first-child, .sixteen.colgrid .row .pull_ten.fifteen.columns:first-child, .sixteen.colgrid .row .pull_eleven.one.column:first-child, .sixteen.colgrid .row .pull_eleven.two.columns:first-child, .sixteen.colgrid .row .pull_eleven.three.columns:first-child, .sixteen.colgrid .row .pull_eleven.four.columns:first-child, .sixteen.colgrid .row .pull_eleven.six.columns:first-child, .sixteen.colgrid .row .pull_eleven.seven.columns:first-child, .sixteen.colgrid .row .pull_eleven.eight.columns:first-child, .sixteen.colgrid .row .pull_eleven.nine.columns:first-child, .sixteen.colgrid .row .pull_eleven.ten.columns:first-child, .sixteen.colgrid .row .pull_eleven.eleven.columns:first-child, .sixteen.colgrid .row .pull_eleven.twelve.columns:first-child, .sixteen.colgrid .row .pull_eleven.thirteen.columns:first-child, .sixteen.colgrid .row .pull_eleven.fourteen.columns:first-child, .sixteen.colgrid .row .pull_eleven.fifteen.columns:first-child, .sixteen.colgrid .row .pull_twelve.one.column:first-child, .sixteen.colgrid .row .pull_twelve.two.columns:first-child, .sixteen.colgrid .row .pull_twelve.three.columns:first-child, .sixteen.colgrid .row .pull_twelve.five.columns:first-child, .sixteen.colgrid .row .pull_twelve.six.columns:first-child, .sixteen.colgrid .row .pull_twelve.seven.columns:first-child, .sixteen.colgrid .row .pull_twelve.eight.columns:first-child, .sixteen.colgrid .row .pull_twelve.nine.columns:first-child, .sixteen.colgrid .row .pull_twelve.ten.columns:first-child, .sixteen.colgrid .row .pull_twelve.eleven.columns:first-child, .sixteen.colgrid .row .pull_twelve.twelve.columns:first-child, .sixteen.colgrid .row .pull_twelve.thirteen.columns:first-child, .sixteen.colgrid .row .pull_twelve.fourteen.columns:first-child, .sixteen.colgrid .row .pull_twelve.fifteen.columns:first-child, .sixteen.colgrid .row .pull_thirteen.one.column:first-child, .sixteen.colgrid .row .pull_thirteen.two.columns:first-child, .sixteen.colgrid .row .pull_thirteen.four.columns:first-child, .sixteen.colgrid .row .pull_thirteen.five.columns:first-child, .sixteen.colgrid .row .pull_thirteen.six.columns:first-child, .sixteen.colgrid .row .pull_thirteen.seven.columns:first-child, .sixteen.colgrid .row .pull_thirteen.eight.columns:first-child, .sixteen.colgrid .row .pull_thirteen.nine.columns:first-child, .sixteen.colgrid .row .pull_thirteen.ten.columns:first-child, .sixteen.colgrid .row .pull_thirteen.eleven.columns:first-child, .sixteen.colgrid .row .pull_thirteen.twelve.columns:first-child, .sixteen.colgrid .row .pull_thirteen.thirteen.columns:first-child, .sixteen.colgrid .row .pull_thirteen.fourteen.columns:first-child, .sixteen.colgrid .row .pull_thirteen.fifteen.columns:first-child, .sixteen.colgrid .row .pull_fourteen.one.column:first-child, .sixteen.colgrid .row .pull_fourteen.three.columns:first-child, .sixteen.colgrid .row .pull_fourteen.four.columns:first-child, .sixteen.colgrid .row .pull_fourteen.five.columns:first-child, .sixteen.colgrid .row .pull_fourteen.six.columns:first-child, .sixteen.colgrid .row .pull_fourteen.seven.columns:first-child, .sixteen.colgrid .row .pull_fourteen.eight.columns:first-child, .sixteen.colgrid .row .pull_fourteen.nine.columns:first-child, .sixteen.colgrid .row .pull_fourteen.ten.columns:first-child, .sixteen.colgrid .row .pull_fourteen.eleven.columns:first-child, .sixteen.colgrid .row .pull_fourteen.twelve.columns:first-child, .sixteen.colgrid .row .pull_fourteen.thirteen.columns:first-child, .sixteen.colgrid .row .pull_fourteen.fourteen.columns:first-child, .sixteen.colgrid .row .pull_fourteen.fifteen.columns:first-child, .sixteen.colgrid .row .pull_fifteen.two.columns:first-child, .sixteen.colgrid .row .pull_fifteen.three.columns:first-child, .sixteen.colgrid .row .pull_fifteen.four.columns:first-child, .sixteen.colgrid .row .pull_fifteen.five.columns:first-child, .sixteen.colgrid .row .pull_fifteen.six.columns:first-child, .sixteen.colgrid .row .pull_fifteen.seven.columns:first-child, .sixteen.colgrid .row .pull_fifteen.eight.columns:first-child, .sixteen.colgrid .row .pull_fifteen.nine.columns:first-child, .sixteen.colgrid .row .pull_fifteen.ten.columns:first-child, .sixteen.colgrid .row .pull_fifteen.eleven.columns:first-child, .sixteen.colgrid .row .pull_fifteen.twelve.columns:first-child, .sixteen.colgrid .row .pull_fifteen.thirteen.columns:first-child, .sixteen.colgrid .row .pull_fifteen.fourteen.columns:first-child, .sixteen.colgrid .row .pull_fifteen.fifteen.columns:first-child { margin-left: 0; }
+
+.row .pull_one.eleven.columns, .row .pull_two.ten.columns, .row .pull_three.nine.columns, .row .pull_four.eight.columns, .row .pull_five.seven.columns, .row .pull_six.six.columns, .row .pull_seven.five.columns, .row .pull_eight.four.columns, .row .pull_nine.three.columns, .row .pull_ten.two.columns, .row .pull_eleven.one.columns, .sixteen.colgrid .row .pull_one.fifteen.columns, .sixteen.colgrid .row .pull_two.fourteen.columns, .sixteen.colgrid .row .pull_three.thirteen.columns, .sixteen.colgrid .row .pull_four.twelve.columns, .sixteen.colgrid .row .pull_five.eleven.columns, .sixteen.colgrid .row .pull_six.ten.columns, .sixteen.colgrid .row .pull_seven.nine.columns, .sixteen.colgrid .row .pull_eight.eight.columns, .sixteen.colgrid .row .pull_nine.seven.columns, .sixteen.colgrid .row .pull_ten.six.columns, .sixteen.colgrid .row .pull_eleven.five.columns, .sixteen.colgrid .row .pull_twelve.four.columns, .sixteen.colgrid .row .pull_thirteen.three.columns, .sixteen.colgrid .row .pull_fourteen.two.columns, .sixteen.colgrid .row .pull_fifteen.one.columns { margin-left: -100%; }
+
+/* Hybrid Centered Classes */
+.sixteen.colgrid .row .one.centered { margin-left: 47.87234%; }
+.sixteen.colgrid .row .two.centered { margin-left: 44.68085%; }
+.sixteen.colgrid .row .three.centered { margin-left: 41.48936%; }
+.sixteen.colgrid .row .four.centered { margin-left: 38.29787%; }
+.sixteen.colgrid .row .five.centered { margin-left: 35.10638%; }
+.sixteen.colgrid .row .six.centered { margin-left: 31.91489%; }
+.sixteen.colgrid .row .seven.centered { margin-left: 28.7234%; }
+.sixteen.colgrid .row .eight.centered { margin-left: 25.53191%; }
+.sixteen.colgrid .row .nine.centered { margin-left: 22.34043%; }
+.sixteen.colgrid .row .ten.centered { margin-left: 19.14894%; }
+.sixteen.colgrid .row .eleven.centered { margin-left: 15.95745%; }
+.sixteen.colgrid .row .twelve.centered { margin-left: 12.76596%; }
+.sixteen.colgrid .row .thirteen.centered { margin-left: 9.57447%; }
+.sixteen.colgrid .row .fourteen.centered { margin-left: 6.38298%; }
+.sixteen.colgrid .row .fifteen.centered { margin-left: 3.19149%; }
+
+img, object, embed { max-width: 100%; height: auto; }
+
+img { -ms-interpolation-mode: bicubic; }
+
+#map_canvas img, .map_canvas img { max-width: none !important; }
+
+/* Tile Grid */
+.tiles { display: block; overflow: hidden; }
+.tiles > li, .tiles > .tile { display: block; height: auto; float: left; padding-bottom: 0; }
+.tiles.two_up { margin-left: -4%; }
+.tiles.two_up > li, .tiles.two_up > .tile { margin-left: 4%; width: 46%; }
+.tiles.three_up, .tiles.four_up { margin-left: -2%; }
+.tiles.three_up > li, .tiles.three_up > .tile { margin-left: 2%; width: 31.3%; }
+.tiles.four_up > li, .tiles.four_up > .tile { margin-left: 2%; width: 23%; }
+.tiles.five_up { margin-left: -1.5%; }
+.tiles.five_up > li, .tiles.five_up > .tile { margin-left: 1.5%; width: 18.5%; }
+
+/* Nicolas Gallagher's micro clearfix */
+.clearfix { *zoom: 1; }
+.clearfix:before, .clearfix:after { content: ""; display: table; }
+.clearfix:after { clear: both; }
+
+.row { *zoom: 1; }
+.row:before, .row:after { content: ""; display: table; }
+.row:after { clear: both; }
+
+.valign:before { content: ' '; display: inline-block; height: 400px; vertical-align: middle; margin-right: -0.25em; }
+.valign > div, .valign > article, .valign > section, .valign > figure { display: inline-block; vertical-align: middle; }
+
+/* Mobile */
+@media only screen and (max-width: 767px) { body { -webkit-text-size-adjust: none; -ms-text-size-adjust: none; width: 100%; min-width: 0; }
+ .container { min-width: 0; margin-left: 0; margin-right: 0; }
+ .row { width: 100%; min-width: 0; margin-left: 0; margin-right: 0; }
+ .row .row .column, .row .row .columns { padding: 0; }
+ .row .centered { margin-left: 0 !important; }
+ .column, .columns { width: auto !important; float: none; margin-left: 0; margin-right: 0; }
+ .column:last-child, .columns:last-child { margin-right: 0; float: none; }
+ [class*="column"] + [class*="column"]:last-child { float: none; }
+ [class*="column"]:before { display: table; }
+ [class*="column"]:after { display: table; clear: both; }
+ [class^="push_"], [class*="push_"], [class^="pull_"], [class*="pull_"] { margin-left: 0 !important; } }
+/* Navigation (with dropdowns) */
+.navbar { width: 100%; min-height: 60px; display: block; margin-bottom: 20px; background: #4a4d50; position: relative; }
+@media only screen and (max-width: 767px) { .navbar { border: none; }
+ .navbar .column, .navbar .columns { min-height: 0; } }
+.navbar.fixed { position: fixed; z-index: 99999; }
+.navbar.pinned { position: absolute; }
+.navbar a.toggle { display: none; }
+@media only screen and (max-width: 767px) { .navbar a.toggle { top: 18%; right: 4%; width: 46px; position: absolute; text-align: center; display: inline-block; color: #fff; background: #4a4d50; height: 40px; line-height: 38px; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; font-size: 29.79335px; font-size: 1.86208rem; }
+ .navbar a.toggle:hover { background: #565a5d; }
+ .navbar a.toggle:active, .navbar a.toggle.active { background: #3e4043; } }
+
+.navbar .logo { display: inline-block; margin: 0 2.12766% 0 0; padding: 0; height: 59.36817px; line-height: 57.36817px; }
+.navbar .logo a { display: block; padding: 0; overflow: hidden; height: 59.36817px; line-height: 57.36817px; }
+.navbar .logo a img { max-height: 95%; }
+@media only screen and (max-width: 767px) { .navbar .logo { float: left; display: inline; }
+ .navbar .logo a { padding: 0; }
+ .navbar .logo a img { width: auto; height: auto; max-width: 100%; } }
+
+.navbar ul { display: table; vertical-align: middle; margin: 0; float: none; }
+@media only screen and (max-width: 767px) { .navbar ul { position: absolute; display: block; width: 100% !important; height: 0; max-height: 0; top: 60px; left: 0; overflow: hidden; text-align: center; background: #3e4043; }
+ .navbar ul.active { height: auto; max-height: 600px; z-index: 999998; -moz-transition-duration: 0.5s; -o-transition-duration: 0.5s; -webkit-transition-duration: 0.5s; transition-duration: 0.5s; -moz-box-shadow: 0 2px 2px #252728; -webkit-box-shadow: 0 2px 2px #252728; box-shadow: 0 2px 2px #252728; } }
+.navbar ul li { display: table-cell; text-align: center; padding-bottom: 0; margin: 0; height: 59.36817px; line-height: 57.36817px; }
+@media only screen and (max-width: 767px) { .navbar ul li { display: block; position: relative; min-height: 50px; max-height: 320px; height: auto; width: 100%; border-right: 0 !important; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; -moz-transition-duration: 0.5s; -o-transition-duration: 0.5s; -webkit-transition-duration: 0.5s; transition-duration: 0.5s; } }
+.navbar ul li > a { display: block; padding: 0 16px; white-space: nowrap; color: #fff; text-shadow: 0 1px 2px #191a1b, 0 1px 0 #191a1b; height: 59.36817px; line-height: 57.36817px; font-size: 16px; font-size: 1rem; }
+.navbar ul li > a i.icon-popup { position: absolute; }
+.navbar ul li .btn { border-color: #000101 !important; }
+.navbar ul li.field { margin-bottom: 0 !important; margin-right: 0; }
+@media only screen and (max-width: 767px) { .navbar ul li.field { padding: 0 20px; } }
+.navbar ul li.field input.search { background: #191a1b; border: none; color: #f2f2f2; }
+.navbar ul li .dropdown { width: auto; min-width: 0; max-width: 320px; height: 0; position: absolute; background: #fafafa; overflow: hidden; z-index: 999; }
+@media only screen and (max-width: 767px) { .navbar ul li .dropdown { width: 100%; max-width: 100%; position: relative; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; box-shadow: none !important; }
+ .navbar ul li.active .dropdown { border-bottom: 1px solid #313436; }
+ .navbar ul li.active .dropdown ul { position: relative; top: 0; background: #36393b; min-height: 50px; max-height: 250px; height: auto; overflow: auto; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; box-shadow: none !important; }
+ .navbar ul li.active .dropdown ul li { min-height: 50px; border-bottom: #3e4043; }
+ .navbar ul li.active .dropdown ul li a { color: #fff; border-bottom: 1px solid #313436; }
+ .navbar ul li.active .dropdown ul li a:hover { color: #d04526; } }
+
+@media only screen and (min-width: 768px) and (max-width: 939px) { .navbar > ul > li > .btn a { padding: 0 9.88854px 0 9.88854px !important; }
+ .navbar ul > li .dropdown ul li.active .dropdown { left: -320px; } }
+
+.navcontain { height: 80px; }
+@media only screen and (max-width: 768px) { .navcontain { height: auto; } }
+
+.pretty.navbar { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzdiODA4NSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzMxMzQzNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #7b8085), color-stop(100%, #313436)); background-image: -moz-linear-gradient(#7b8085, #313436); background-image: -webkit-linear-gradient(#7b8085, #313436); background-image: linear-gradient(#7b8085, #313436); -moz-box-shadow: inset 0 1px 1px #7b8085, 0 1px 2px rgba(0, 0, 0, 0.8) !important; -webkit-box-shadow: inset 0 1px 1px #7b8085, 0 1px 2px rgba(0, 0, 0, 0.8) !important; box-shadow: inset 0 1px 1px #7b8085, 0 1px 2px rgba(0, 0, 0, 0.8) !important; /* Remove this line if you dont want a dropshadow on your navigation*/ }
+@media only screen and (max-width: 767px) { .pretty.navbar a.toggle { border: 1px solid #3e4043; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzdiODA4NSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzRhNGQ1MCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #7b8085), color-stop(100%, #4a4d50)); background-image: -moz-linear-gradient(#7b8085, #4a4d50); background-image: -webkit-linear-gradient(#7b8085, #4a4d50); background-image: linear-gradient(#7b8085, #4a4d50); -moz-box-shadow: inset 0 1px 2px #888d91, inset 0 -1px 1px #565a5d, inset 1px 0 1px #565a5d, inset -1px 0 1px #565a5d, 0 1px 1px #63676a; -webkit-box-shadow: inset 0 1px 2px #888d91, inset 0 -1px 1px #565a5d, inset 1px 0 1px #565a5d, inset -1px 0 1px #565a5d, 0 1px 1px #63676a; box-shadow: inset 0 1px 2px #888d91, inset 0 -1px 1px #565a5d, inset 1px 0 1px #565a5d, inset -1px 0 1px #565a5d, 0 1px 1px #63676a; }
+ .pretty.navbar a.toggle i { text-shadow: 0 1px 1px #191a1b; }
+ .pretty.navbar a.toggle:hover { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzg4OGQ5MSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzU2NWE1ZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #888d91), color-stop(100%, #565a5d)); background-image: -moz-linear-gradient(#888d91, #565a5d); background-image: -webkit-linear-gradient(#888d91, #565a5d); background-image: linear-gradient(#888d91, #565a5d); }
+ .pretty.navbar a.toggle:active, .pretty.navbar a.toggle.active { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzNlNDA0MyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzRhNGQ1MCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #3e4043), color-stop(100%, #4a4d50)); background-image: -moz-linear-gradient(#3e4043, #4a4d50); background-image: -webkit-linear-gradient(#3e4043, #4a4d50); background-image: linear-gradient(#3e4043, #4a4d50); -moz-box-shadow: 0 1px 1px #63676a; -webkit-box-shadow: 0 1px 1px #63676a; box-shadow: 0 1px 1px #63676a; } }
+.pretty.navbar.row { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
+@media only screen and (max-width: 767px) { .pretty.navbar.row { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } }
+.pretty.navbar ul li.field input.search { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzE5MWExYiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzRmNTI1NSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #191a1b), color-stop(100%, #4f5255)); background-image: -moz-linear-gradient(#191a1b, #4f5255); background-image: -webkit-linear-gradient(#191a1b, #4f5255); background-image: linear-gradient(#191a1b, #4f5255); border: none; -moz-box-shadow: 0 1px 2px #888d91 !important; -webkit-box-shadow: 0 1px 2px #888d91 !important; box-shadow: 0 1px 2px #888d91 !important; /* Remove this line if you dont want a dropshadow on your navigation*/ }
+.pretty.navbar > ul > li:first-child, .pretty.navbar .pretty.navbar > ul > li:first-child a:hover { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; }
+
+.navbar li .dropdown { width: auto; min-width: 0; max-width: 320px; height: 0; position: absolute; background: #fafafa; overflow: hidden; z-index: 999; }
+@media only screen and (max-width: 767px) { .navbar li .dropdown .dropdown { width: 100%; max-width: 100%; position: relative; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; box-shadow: none !important; }
+ .navbar li .dropdown.active .dropdown { border-bottom: 1px solid #313436; }
+ .navbar li .dropdown.active .dropdown ul { position: relative; top: 0; background: #36393b; min-height: 50px; max-height: 250px; height: auto; overflow: auto; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; box-shadow: none !important; }
+ .navbar li .dropdown.active .dropdown ul li { min-height: 50px; border-bottom: #3e4043; }
+ .navbar li .dropdown.active .dropdown ul li a { color: #fff; border-bottom: 1px solid #313436; }
+ .navbar li .dropdown.active .dropdown ul li a:hover { color: #d04526; } }
+
+.navbar li .dropdown ul { margin: 0; display: block; }
+.navbar li .dropdown ul > li { position: relative; display: block; width: 100%; float: left; text-align: left; height: auto; -moz-border-radius: none; -webkit-border-radius: none; border-radius: none; }
+@media only screen and (min-width: 768px) and (max-width: 939px) { .navbar li .dropdown ul > li { max-width: 320px; word-wrap: break-word; } }
+.navbar li .dropdown ul > li a { display: block; padding: 0 20px; color: #d04526; border-bottom: 1px solid #ccc; text-shadow: none; height: 50.86172px; line-height: 48.86172px; }
+@media only screen and (max-width: 767px) { .navbar li .dropdown ul > li a { padding: 0 20px; } }
+.navbar li .dropdown ul > li .dropdown { display: none; background: white; }
+.navbar li .dropdown ul li:first-child a { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; }
+
+.gumby-no-touch .navbar ul li:hover > a, .gumby-touch .navbar ul li.active > a { position: relative; background: #868d92; z-index: 1000; }
+
+.gumby-no-touch .navbar ul li:hover .dropdown, .gumby-touch .navbar ul li.active .dropdown { min-height: 50px; max-height: 561px; overflow: visible; height: auto; width: 100%; padding: 0; border-top: 1px solid #3e4043; -moz-box-shadow: 0px 3px 4px rgba(0, 0, 0, 0.3); -webkit-box-shadow: 0px 3px 4px rgba(0, 0, 0, 0.3); box-shadow: 0px 3px 4px rgba(0, 0, 0, 0.3); }
+
+.gumby-no-touch .navbar ul li:hover .dropdown ul { position: relative; top: 0; min-height: 50px; max-height: 250px; height: auto; -moz-box-shadow: none !important; -webkit-box-shadow: none !important; box-shadow: none !important; -moz-transition-duration: 0.5s; -o-transition-duration: 0.5s; -webkit-transition-duration: 0.5s; transition-duration: 0.5s; }
+@media only screen and (max-width: 767px) { .gumby-no-touch .navbar ul li:hover .dropdown ul { overflow: auto; background: #36393b; }
+ .gumby-no-touch .navbar ul li:hover .dropdown ul li { border-bottom: #3e4043; }
+ .gumby-no-touch .navbar ul li:hover .dropdown ul li a { color: #fff; border-bottom: 1px solid #313436; }
+ .gumby-no-touch .navbar ul li:hover .dropdown ul li a:hover { color: #d04526; } }
+
+.gumby-no-touch .navbar li .dropdown ul > li:hover .dropdown, .gumby-touch .navbar li .dropdown ul > li.active .dropdown { border-top: none; display: block; position: absolute; z-index: 9999; left: 100%; top: 0; margin-top: 0; }
+@media only screen and (max-width: 767px) { .gumby-no-touch .navbar li .dropdown ul > li:hover .dropdown, .gumby-touch .navbar li .dropdown ul > li.active .dropdown { position: relative; left: 0; }
+ .gumby-no-touch .navbar li .dropdown ul > li:hover .dropdown ul, .gumby-touch .navbar li .dropdown ul > li.active .dropdown ul { background: #252728 !important; } }
+
+.gumby-no-touch .navbar li .dropdown ul li a:hover { background: #f2f2f2; }
+
+.gumby-touch .navbar a:hover { color: #fff !important; }
+
+.subnav { display: block; width: auto; overflow: hidden; margin: 0 0 18px 0; padding-top: 4px; }
+.subnav li, .subnav dt, .subnav dd { float: left; display: inline; margin-left: 9px; margin-bottom: 4px; }
+.subnav li:first-child, .subnav dt:first-child, .subnav dd:first-child { margin-left: 0; }
+.subnav dt { color: #f2f2f2; font-weight: normal; }
+.subnav li a, .subnav dd a { color: #fff; font-size: 15px; text-decoration: none; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
+.subnav li.active a, .subnav dd.active a { background: #4a4d50; padding: 5px 9px; text-shadow: 0 1px 1px #4a4d50; }
+
+/* Buttons */
+.btn, .skiplink { display: inline-block; width: auto; background: #f2f2f2; -webkit-appearance: none; font-family: "Open Sans"; font-weight: 600; padding: 0 !important; text-align: center; }
+.btn > a, .btn input, .btn button, .skiplink > a, .skiplink input, .skiplink button { display: block; padding: 0 18.4133px; color: #fff; height: 100%; }
+.btn input, .btn button, .skiplink input, .skiplink button { background: none; border: none; width: 100%; font-size: 100%; cursor: pointer; font-weight: 400; -moz-appearance: none; -webkit-appearance: none; }
+
+.btn.xlarge, .skiplink.xlarge { font-size: 29.79335px; font-size: 1.86208rem; height: 65.90355px; line-height: 63.90355px; }
+.btn.xlarge a, .skiplink.xlarge a { position: relative; padding: 0 29.79335px; }
+.btn.xlarge.icon-left a, .skiplink.xlarge.icon-left a { padding-left: 65.90355px; }
+.btn.xlarge.icon-left a:before, .skiplink.xlarge.icon-left a:before { left: 19.86223px; }
+.btn.xlarge.icon-right a, .skiplink.xlarge.icon-right a { padding-right: 65.90355px; }
+.btn.xlarge.icon-right a:after, .skiplink.xlarge.icon-right a:after { right: 19.86223px; }
+.btn.large, .skiplink.large { font-size: 25.88854px; font-size: 1.61803rem; height: 57.3971px; line-height: 55.3971px; }
+.btn.large a, .skiplink.large a { position: relative; padding: 0 25.88854px; }
+.btn.large.icon-left a, .skiplink.large.icon-left a { padding-left: 57.3971px; }
+.btn.large.icon-left a:before, .skiplink.large.icon-left a:before { left: 17.25903px; }
+.btn.large.icon-right a, .skiplink.large.icon-right a { padding-right: 57.3971px; }
+.btn.large.icon-right a:after, .skiplink.large.icon-right a:after { right: 17.25903px; }
+.btn.medium, .skiplink.medium { font-size: 16px; font-size: 1rem; height: 35.85532px; line-height: 33.85532px; }
+.btn.medium a, .skiplink.medium a { position: relative; padding: 0 16px; }
+.btn.medium.icon-left a, .skiplink.medium.icon-left a { padding-left: 35.85532px; }
+.btn.medium.icon-left a:before, .skiplink.medium.icon-left a:before { left: 10.66667px; }
+.btn.medium.icon-right a, .skiplink.medium.icon-right a { padding-right: 35.85532px; }
+.btn.medium.icon-right a:after, .skiplink.medium.icon-right a:after { right: 10.66667px; }
+.btn.medium a, .skiplink.medium a { padding: 0 18.4133px; }
+.btn.small, .skiplink.small { font-size: 9.88854px; font-size: 0.61803rem; height: 22.54177px; line-height: 20.54177px; }
+.btn.small a, .skiplink.small a { position: relative; padding: 0 9.88854px; }
+.btn.small.icon-left a, .skiplink.small.icon-left a { padding-left: 22.54177px; }
+.btn.small.icon-left a:before, .skiplink.small.icon-left a:before { left: 6.59236px; }
+.btn.small.icon-right a, .skiplink.small.icon-right a { padding-right: 22.54177px; }
+.btn.small.icon-right a:after, .skiplink.small.icon-right a:after { right: 6.59236px; }
+.btn.small a, .skiplink.small a { padding: 0 9.88854px; }
+.btn.oval, .skiplink.oval { -moz-border-radius: 1000px; -webkit-border-radius: 1000px; border-radius: 1000px; }
+.btn.pill-left, .skiplink.pill-left { -moz-border-radius: 500px 0 0 500px; -webkit-border-radius: 500px; border-radius: 500px 0 0 500px; }
+.btn.pill-right, .skiplink.pill-right { -moz-border-radius: 0 500px 500px 0; -webkit-border-radius: 0; border-radius: 0 500px 500px 0; }
+
+.btn.primary, .skiplink.primary { background: #3085d6; border: 1px solid #3085d6; }
+.btn.primary:hover, .skiplink.primary:hover { background: #5b9ede; }
+.btn.primary:active, .skiplink.primary:active { background: #236bb0; }
+.btn.secondary, .skiplink.secondary { background: #42a35a; border: 1px solid #42a35a; }
+.btn.secondary:hover, .skiplink.secondary:hover { background: #5bbd73; }
+.btn.secondary:active, .skiplink.secondary:active { background: #337f46; }
+.btn.default, .skiplink.default { background: #f2f2f2; border: 1px solid #f2f2f2; color: #555555; border: 1px solid #f2f2f2; }
+.btn.default:hover, .skiplink.default:hover { background: white; }
+.btn.default:active, .skiplink.default:active { background: #d8d8d8; }
+.btn.default:hover, .skiplink.default:hover { border: 1px solid #e5e5e5; }
+.btn.default a, .btn.default input, .btn.default button, .skiplink.default a, .skiplink.default input, .skiplink.default button { color: #555555; }
+.btn.info, .skiplink.info { background: #4a4d50; border: 1px solid #4a4d50; }
+.btn.info:hover, .skiplink.info:hover { background: #63676a; }
+.btn.info:active, .skiplink.info:active { background: #313436; }
+.btn.danger, .skiplink.danger { background: #ca3838; border: 1px solid #ca3838; }
+.btn.danger:hover, .skiplink.danger:hover { background: #d56060; }
+.btn.danger:active, .skiplink.danger:active { background: #a32c2c; }
+.btn.warning, .skiplink.warning { background: #f6b83f; border: 1px solid #f6b83f; color: #644405; }
+.btn.warning:hover, .skiplink.warning:hover { background: #f8ca70; }
+.btn.warning:active, .skiplink.warning:active { background: #f4a60e; }
+.btn.warning a, .btn.warning input, .btn.warning button, .skiplink.warning a, .skiplink.warning input, .skiplink.warning button { color: #644405; }
+.btn.success, .skiplink.success { background: #58c026; border: 1px solid #58c026; }
+.btn.success:hover, .skiplink.success:hover { background: #72d940; }
+.btn.success:active, .skiplink.success:active { background: #44951e; }
+
+.btn.metro, .metro .btn, .metro .skiplink, .skiplink.metro, .btn.pretty.squared, .pretty .squared.btn, .pretty .squared.skiplink, .pretty .btn.squared { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; }
+
+.btn.pretty, .pretty .btn, .pretty .skiplink, .skiplink.pretty, .btn.metro.rounded, .metro .rounded.btn, .metro .rounded.skiplink, .metro .btn.rounded { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
+
+.btn.pretty.primary, .pretty .primary.btn, .pretty .primary.skiplink, .skiplink.pretty.primary { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzg1YjdlNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzJhODVkYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #85b7e7), color-stop(100%, #2a85dc)); background-image: -moz-linear-gradient(#85b7e7, #2a85dc); background-image: -webkit-linear-gradient(#85b7e7, #2a85dc); background-image: linear-gradient(#85b7e7, #2a85dc); -moz-box-shadow: inset 0 0 3px #f0f6fc; -webkit-box-shadow: inset 0 0 3px #f0f6fc; box-shadow: inset 0 0 3px #f0f6fc; border: 1px solid #1f5e9b; }
+.btn.pretty.primary:hover, .pretty .primary.btn:hover, .pretty .primary.skiplink:hover, .skiplink.pretty.primary:hover { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2EyZDRmYyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzU0YjJmZSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #a2d4fc), color-stop(100%, #54b2fe)); background-image: -moz-linear-gradient(#a2d4fc, #54b2fe); background-image: -webkit-linear-gradient(#a2d4fc, #54b2fe); background-image: linear-gradient(#a2d4fc, #54b2fe); -moz-box-shadow: inset 0 0 3px white; -webkit-box-shadow: inset 0 0 3px white; box-shadow: inset 0 0 3px white; border: 1px solid #0e90f8; }
+.btn.pretty.primary:active, .pretty .primary.btn:active, .pretty .primary.skiplink:active, .skiplink.pretty.primary:active { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzJhODVkYyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzg1YjdlNyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #2a85dc), color-stop(100%, #85b7e7)); background-image: -moz-linear-gradient(#2a85dc, #85b7e7); background-image: -webkit-linear-gradient(#2a85dc, #85b7e7); background-image: linear-gradient(#2a85dc, #85b7e7); -moz-box-shadow: inset 0 0 3px white; -webkit-box-shadow: inset 0 0 3px white; box-shadow: inset 0 0 3px white; }
+.btn.pretty.primary a, .pretty .primary.btn a, .pretty .primary.skiplink a, .btn.pretty.primary input, .pretty .primary.btn input, .pretty .primary.skiplink input, .btn.pretty.primary button, .pretty .primary.btn button, .pretty .primary.skiplink button, .skiplink.pretty.primary a, .skiplink.pretty.primary input, .skiplink.pretty.primary button { text-shadow: 0 1px 1px #1a5186; }
+.btn.pretty.secondary, .pretty .secondary.btn, .pretty .secondary.skiplink, .skiplink.pretty.secondary { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzgwY2I5MiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzNjYTk1NyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #80cb92), color-stop(100%, #3ca957)); background-image: -moz-linear-gradient(#80cb92, #3ca957); background-image: -webkit-linear-gradient(#80cb92, #3ca957); background-image: linear-gradient(#80cb92, #3ca957); -moz-box-shadow: inset 0 0 3px #daf0e0; -webkit-box-shadow: inset 0 0 3px #daf0e0; box-shadow: inset 0 0 3px #daf0e0; border: 1px solid #2c6d3c; }
+.btn.pretty.secondary:hover, .pretty .secondary.btn:hover, .pretty .secondary.skiplink:hover, .skiplink.pretty.secondary:hover { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ExZDNhZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzY4YzA3ZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #a1d3ad), color-stop(100%, #68c07d)); background-image: -moz-linear-gradient(#a1d3ad, #68c07d); background-image: -webkit-linear-gradient(#a1d3ad, #68c07d); background-image: linear-gradient(#a1d3ad, #68c07d); -moz-box-shadow: inset 0 0 3px #f8fcf9; -webkit-box-shadow: inset 0 0 3px #f8fcf9; box-shadow: inset 0 0 3px #f8fcf9; border: 1px solid #469659; }
+.btn.pretty.secondary:active, .pretty .secondary.btn:active, .pretty .secondary.skiplink:active, .skiplink.pretty.secondary:active { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzNjYTk1NyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzgwY2I5MiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #3ca957), color-stop(100%, #80cb92)); background-image: -moz-linear-gradient(#3ca957, #80cb92); background-image: -webkit-linear-gradient(#3ca957, #80cb92); background-image: linear-gradient(#3ca957, #80cb92); -moz-box-shadow: inset 0 0 3px #ecf8ef; -webkit-box-shadow: inset 0 0 3px #ecf8ef; box-shadow: inset 0 0 3px #ecf8ef; }
+.btn.pretty.secondary a, .pretty .secondary.btn a, .pretty .secondary.skiplink a, .btn.pretty.secondary input, .pretty .secondary.btn input, .pretty .secondary.skiplink input, .btn.pretty.secondary button, .pretty .secondary.btn button, .pretty .secondary.skiplink button, .skiplink.pretty.secondary a, .skiplink.pretty.secondary input, .skiplink.pretty.secondary button { text-shadow: 0 1px 1px #255a32; }
+.btn.pretty.default, .pretty .default.btn, .pretty .default.skiplink, .skiplink.pretty.default { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2YzZjFmMSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #f3f1f1)); background-image: -moz-linear-gradient(#ffffff, #f3f1f1); background-image: -webkit-linear-gradient(#ffffff, #f3f1f1); background-image: linear-gradient(#ffffff, #f3f1f1); -moz-box-shadow: inset 0 0 3px white; -webkit-box-shadow: inset 0 0 3px white; box-shadow: inset 0 0 3px white; border: 1px solid #cccccc; }
+.btn.pretty.default:hover, .pretty .default.btn:hover, .pretty .default.skiplink:hover, .skiplink.pretty.default:hover { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #ffffff)); background-image: -moz-linear-gradient(#ffffff, #ffffff); background-image: -webkit-linear-gradient(#ffffff, #ffffff); background-image: linear-gradient(#ffffff, #ffffff); -moz-box-shadow: inset 0 0 3px white; -webkit-box-shadow: inset 0 0 3px white; box-shadow: inset 0 0 3px white; border: 1px solid #d9d9d9; }
+.btn.pretty.default:active, .pretty .default.btn:active, .pretty .default.skiplink:active, .skiplink.pretty.default:active { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2YzZjFmMSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f3f1f1), color-stop(100%, #ffffff)); background-image: -moz-linear-gradient(#f3f1f1, #ffffff); background-image: -webkit-linear-gradient(#f3f1f1, #ffffff); background-image: linear-gradient(#f3f1f1, #ffffff); -moz-box-shadow: inset 0 0 3px white; -webkit-box-shadow: inset 0 0 3px white; box-shadow: inset 0 0 3px white; }
+.btn.pretty.default a, .pretty .default.btn a, .pretty .default.skiplink a, .btn.pretty.default input, .pretty .default.btn input, .pretty .default.skiplink input, .btn.pretty.default button, .pretty .default.btn button, .pretty .default.skiplink button, .skiplink.pretty.default a, .skiplink.pretty.default input, .skiplink.pretty.default button { text-shadow: 0 1px 1px white; }
+.btn.pretty.info, .pretty .info.btn, .pretty .info.skiplink, .skiplink.pretty.info { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzdiODA4NSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzQ2NGQ1NCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #7b8085), color-stop(100%, #464d54)); background-image: -moz-linear-gradient(#7b8085, #464d54); background-image: -webkit-linear-gradient(#7b8085, #464d54); background-image: linear-gradient(#7b8085, #464d54); -moz-box-shadow: inset 0 0 3px #bdc0c2; -webkit-box-shadow: inset 0 0 3px #bdc0c2; box-shadow: inset 0 0 3px #bdc0c2; border: 1px solid #252728; }
+.btn.pretty.info:hover, .pretty .info.btn:hover, .pretty .info.skiplink:hover, .skiplink.pretty.info:hover { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2FlYjNiNiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzgwOGU5OCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #aeb3b6), color-stop(100%, #808e98)); background-image: -moz-linear-gradient(#aeb3b6, #808e98); background-image: -webkit-linear-gradient(#aeb3b6, #808e98); background-image: linear-gradient(#aeb3b6, #808e98); -moz-box-shadow: inset 0 0 3px #f1f2f3; -webkit-box-shadow: inset 0 0 3px #f1f2f3; box-shadow: inset 0 0 3px #f1f2f3; border: 1px solid #60676b; }
+.btn.pretty.info:active, .pretty .info.btn:active, .pretty .info.skiplink:active, .skiplink.pretty.info:active { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzQ2NGQ1NCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzdiODA4NSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #464d54), color-stop(100%, #7b8085)); background-image: -moz-linear-gradient(#464d54, #7b8085); background-image: -webkit-linear-gradient(#464d54, #7b8085); background-image: linear-gradient(#464d54, #7b8085); -moz-box-shadow: inset 0 0 3px #cbcdce; -webkit-box-shadow: inset 0 0 3px #cbcdce; box-shadow: inset 0 0 3px #cbcdce; }
+.btn.pretty.info a, .pretty .info.btn a, .pretty .info.skiplink a, .btn.pretty.info input, .pretty .info.btn input, .pretty .info.skiplink input, .btn.pretty.info button, .pretty .info.btn button, .pretty .info.skiplink button, .skiplink.pretty.info a, .skiplink.pretty.info input, .skiplink.pretty.info button { text-shadow: 0 1px 1px #191a1b; }
+.btn.pretty.danger, .pretty .danger.btn, .pretty .danger.skiplink, .skiplink.pretty.danger { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RmODk4OSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2QwMzIzMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #df8989), color-stop(100%, #d03232)); background-image: -moz-linear-gradient(#df8989, #d03232); background-image: -webkit-linear-gradient(#df8989, #d03232); background-image: linear-gradient(#df8989, #d03232); -moz-box-shadow: inset 0 0 3px #faeded; -webkit-box-shadow: inset 0 0 3px #faeded; box-shadow: inset 0 0 3px #faeded; border: 1px solid #8f2626; }
+.btn.pretty.danger:hover, .pretty .danger.btn:hover, .pretty .danger.skiplink:hover, .skiplink.pretty.danger:hover { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y3OTY5NiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Y2NGE0YSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f79696), color-stop(100%, #f64a4a)); background-image: -moz-linear-gradient(#f79696, #f64a4a); background-image: -webkit-linear-gradient(#f79696, #f64a4a); background-image: linear-gradient(#f79696, #f64a4a); -moz-box-shadow: inset 0 0 3px white; -webkit-box-shadow: inset 0 0 3px white; box-shadow: inset 0 0 3px white; border: 1px solid #e21212; }
+.btn.pretty.danger:active, .pretty .danger.btn:active, .pretty .danger.skiplink:active, .skiplink.pretty.danger:active { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2QwMzIzMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2RmODk4OSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #d03232), color-stop(100%, #df8989)); background-image: -moz-linear-gradient(#d03232, #df8989); background-image: -webkit-linear-gradient(#d03232, #df8989); background-image: linear-gradient(#d03232, #df8989); -moz-box-shadow: inset 0 0 3px white; -webkit-box-shadow: inset 0 0 3px white; box-shadow: inset 0 0 3px white; }
+.btn.pretty.danger a, .pretty .danger.btn a, .pretty .danger.skiplink a, .btn.pretty.danger input, .pretty .danger.btn input, .pretty .danger.skiplink input, .btn.pretty.danger button, .pretty .danger.btn button, .pretty .danger.skiplink button, .skiplink.pretty.danger a, .skiplink.pretty.danger input, .skiplink.pretty.danger button { text-shadow: 0 1px 1px #7b2121; }
+.btn.pretty.warning, .pretty .warning.btn, .pretty .warning.skiplink, .skiplink.pretty.warning { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZiZGNhMCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ZiYmEzYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbdca0), color-stop(100%, #fbba3a)); background-image: -moz-linear-gradient(#fbdca0, #fbba3a); background-image: -webkit-linear-gradient(#fbdca0, #fbba3a); background-image: linear-gradient(#fbdca0, #fbba3a); -moz-box-shadow: inset 0 0 3px white; -webkit-box-shadow: inset 0 0 3px white; box-shadow: inset 0 0 3px white; border: 1px solid #de960a; color: #644405; }
+.btn.pretty.warning:hover, .pretty .warning.btn:hover, .pretty .warning.skiplink:hover, .skiplink.pretty.warning:hover { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZlZWNjYSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ZmZDM3ZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #feecca), color-stop(100%, #ffd37d)); background-image: -moz-linear-gradient(#feecca, #ffd37d); background-image: -webkit-linear-gradient(#feecca, #ffd37d); background-image: linear-gradient(#feecca, #ffd37d); -moz-box-shadow: inset 0 0 3px white; -webkit-box-shadow: inset 0 0 3px white; box-shadow: inset 0 0 3px white; border: 1px solid #fcb834; }
+.btn.pretty.warning:active, .pretty .warning.btn:active, .pretty .warning.skiplink:active, .skiplink.pretty.warning:active { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZiYmEzYSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ZiZGNhMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbba3a), color-stop(100%, #fbdca0)); background-image: -moz-linear-gradient(#fbba3a, #fbdca0); background-image: -webkit-linear-gradient(#fbba3a, #fbdca0); background-image: linear-gradient(#fbba3a, #fbdca0); -moz-box-shadow: inset 0 0 3px white; -webkit-box-shadow: inset 0 0 3px white; box-shadow: inset 0 0 3px white; }
+.btn.pretty.warning a, .pretty .warning.btn a, .pretty .warning.skiplink a, .btn.pretty.warning input, .pretty .warning.btn input, .pretty .warning.skiplink input, .btn.pretty.warning button, .pretty .warning.btn button, .pretty .warning.skiplink button, .skiplink.pretty.warning a, .skiplink.pretty.warning input, .skiplink.pretty.warning button { text-shadow: 0 1px 1px #fbdca0; }
+.btn.pretty.success, .pretty .success.btn, .pretty .success.skiplink, .skiplink.pretty.success { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzkxZTI2YSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzU2YzYyMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #91e26a), color-stop(100%, #56c620)); background-image: -moz-linear-gradient(#91e26a, #56c620); background-image: -webkit-linear-gradient(#91e26a, #56c620); background-image: linear-gradient(#91e26a, #56c620); -moz-box-shadow: inset 0 0 3px #e0f7d5; -webkit-box-shadow: inset 0 0 3px #e0f7d5; box-shadow: inset 0 0 3px #e0f7d5; border: 1px solid #3b8019; }
+.btn.pretty.success:hover, .pretty .success.btn:hover, .pretty .success.skiplink:hover, .skiplink.pretty.success:hover { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzk2ZTU3MCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzY0ZGYyOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #96e570), color-stop(100%, #64df29)); background-image: -moz-linear-gradient(#96e570, #64df29); background-image: -webkit-linear-gradient(#96e570, #64df29); background-image: linear-gradient(#96e570, #64df29); -moz-box-shadow: inset 0 0 3px #e5f9db; -webkit-box-shadow: inset 0 0 3px #e5f9db; box-shadow: inset 0 0 3px #e5f9db; border: 1px solid #479f1d; }
+.btn.pretty.success:active, .pretty .success.btn:active, .pretty .success.skiplink:active, .skiplink.pretty.success:active { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzU2YzYyMCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzkxZTI2YSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #56c620), color-stop(100%, #91e26a)); background-image: -moz-linear-gradient(#56c620, #91e26a); background-image: -webkit-linear-gradient(#56c620, #91e26a); background-image: linear-gradient(#56c620, #91e26a); -moz-box-shadow: inset 0 0 3px #f0fbea; -webkit-box-shadow: inset 0 0 3px #f0fbea; box-shadow: inset 0 0 3px #f0fbea; }
+.btn.pretty.success a, .pretty .success.btn a, .pretty .success.skiplink a, .btn.pretty.success input, .pretty .success.btn input, .pretty .success.skiplink input, .btn.pretty.success button, .pretty .success.btn button, .pretty .success.skiplink button, .skiplink.pretty.success a, .skiplink.pretty.success input, .skiplink.pretty.success button { text-shadow: 0 1px 1px #316b15; }
+
+/* Icons */
+[class^="icon-"] a:before, [class*=" icon-"] a:before, [class^="icon-"] a:after, [class*=" icon-"] a:after, i[class^="icon-"], i[class*=" icon-"] { font-family: "entypo"; position: absolute; text-decoration: none; zoom: 1; }
+
+i[class^="icon-"], i[class*=" icon-"] { display: inline-block; position: static; min-width: 20px; margin: 0 5px; text-align: center; }
+
+/* Form Styles */
+form { margin: 0 0 18px; }
+form label { display: block; font-size: 16px; font-size: 1rem; line-height: 1.5em; cursor: pointer; margin-bottom: 9px; }
+form label.inline { display: inline-block; padding-right: 20px; }
+form dt { margin: 0; }
+form textarea { height: 150px; }
+form ul, form ul li { margin-left: 0; list-style-type: none; }
+form fieldset { border-width: 0.0625em; border-style: solid; padding: 1.4375em; border-color: #d8d8d8; margin: 18px 0; }
+form fieldset legend { padding: 5px 10px; }
+
+.field { position: relative; max-width: 100%; margin-bottom: 10px; vertical-align: middle; font-size: 16px; overflow: hidden; }
+.field.metro, .field .metro { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; }
+.field input, .field input[type="*"], .field textarea { max-width: 100%; width: 100%; padding: 0; margin: 0; border: none; outline: none; resize: none; -webkit-appearance: none; font-family: "Open Sans"; font-weight: 300; font-size: 16px; font-size: 1rem; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; }
+.field .input { position: relative; padding: 0 10px; background: #fff; border: 1px solid #d8d8d8; height: 35.85532px; line-height: 33.85532px; font-size: 16px; font-size: 1rem; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
+.field .input.search { height: 35.85532px; line-height: 33.85532px; -moz-border-radius: 1000px; -webkit-border-radius: 1000px; border-radius: 1000px; padding-right: 0; }
+.field .input.textarea { height: auto; }
+
+input.xnarrow, .input.xnarrow { width: 13.33333%; margin: 0; }
+input.xnarrow:last-child, .input.xnarrow:last-child { margin-left: -4px; }
+input.xnarrow:first-child, .input.xnarrow:first-child { margin-right: 3.94%; margin-left: 0; }
+input.xnarrow:first-child:last-child, .input.xnarrow:first-child:last-child { margin: 0; }
+input.narrow, .input.narrow { width: 30.66667%; margin: 0; }
+input.narrow:last-child, .input.narrow:last-child { margin-left: -4px; }
+input.narrow:first-child, .input.narrow:first-child { margin-right: 3.94%; margin-left: 0; }
+input.narrow:first-child:last-child, .input.narrow:first-child:last-child { margin: 0; }
+input.normal, .input.normal { width: 48%; margin: 0; }
+input.normal:last-child, .input.normal:last-child { margin-left: -4px; }
+input.normal:first-child, .input.normal:first-child { margin-right: 3.94%; margin-left: 0; }
+input.normal:first-child:last-child, .input.normal:first-child:last-child { margin: 0; }
+input.wide, .input.wide { width: 65.33333%; margin: 0; }
+input.wide:last-child, .input.wide:last-child { margin-left: -4px; }
+input.wide:first-child, .input.wide:first-child { margin-right: 3.94%; margin-left: 0; }
+input.wide:first-child:last-child, .input.wide:first-child:last-child { margin: 0; }
+input.xwide, .input.xwide { width: 82.66667%; margin: 0; }
+input.xwide:last-child, .input.xwide:last-child { margin-left: -4px; }
+input.xwide:first-child, .input.xwide:first-child { margin-right: 3.94%; margin-left: 0; }
+input.xwide:first-child:last-child, .input.xwide:first-child:last-child { margin: 0; }
+input.xxwide, .input.xxwide { width: 100%; margin: 0; }
+input.xxwide:last-child, .input.xxwide:last-child { margin-left: -4px; }
+input.xxwide:first-child, .input.xxwide:first-child { margin-right: 3.94%; margin-left: 0; }
+input.xxwide:first-child:last-child, .input.xxwide:first-child:last-child { margin: 0; }
+
+label + .xnarrow:last-child, label + .narrow:last-child, label + .normal:last-child, label + .wide:last-child, label + .xwide:last-child, label + .xxwide:last-child { margin-left: 0; }
+
+@media only screen and (max-width: 960px) { .xxwide:first-child, .xxwide:last-child { margin-right: 0%; } }
+/* remove inline-block white-space — A 0px font-size = 0px of white space */
+.prepend, .append { font-size: 0; white-space: nowrap; padding-bottom: 3.5px; }
+
+.prepend input, .prepend .input, .append input, .append .input { display: inline-block; max-width: 100%; margin-right: 0; margin-left: 0; }
+
+.prepend input, .prepend .input, .prepend.append input:last-child, .append *:last-child { -moz-border-radius: 0px 4px 4px 0; -webkit-border-radius: 0px; border-radius: 0px 4px 4px 0; }
+
+.append input, .append .input, .prepend.append input:first-child, .prepend *:first-child { -moz-border-radius: 4px 0 0 4px; -webkit-border-radius: 4px; border-radius: 4px 0 0 4px; }
+
+.prepend.append input { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; }
+
+.prepend.append input:last-child { margin-left: -1px; }
+
+.prepend .adjoined, .append .adjoined, .prepend .btn, .append .btn { position: relative; display: inline-block; margin-bottom: 0; z-index: 99; }
+
+.prepend .btn a, .prepend .btn input, .prepend .btn button, .append .btn a, .append .btn input, .append .btn button { padding: 0 12px; }
+
+.prepend .adjoined, .append .adjoined { padding: 0 10px 0 10px; background: #f2f2f2; border: 1px solid #d8d8d8; font-family: "Open Sans"; font-weight: 600; color: #555555; font-size: 16px; font-size: 1rem; height: 35.85532px; line-height: 33.85532px; }
+
+.prepend .adjoined, .prepend .btn { margin-right: -1px; }
+
+.adjoined:first-child { margin-left: 0 !important; }
+
+.append .adjoined, .append .btn { margin-left: -1px; }
+
+.append button, .prepend button { display: inline-block; }
+
+.prepend input:first-child, .append input:first-child, .prepend .input:first-child, .append .input:first-child { margin-right: 0; }
+
+.double input, .double .input { width: 50% !important; }
+.double input:last-child, .double .input:last-child { margin-left: -1px; }
+
+.field input, .field .input, .field textarea, .field .textarea, .field .radio span, .field .checkbox span, .field .picker { -moz-transition-duration: 0.2s; -o-transition-duration: 0.2s; -webkit-transition-duration: 0.2s; transition-duration: 0.2s; }
+.field.danger:after { font-family: "entypo"; content: "\\2716"; font-size: 16px; position: absolute; top: 14%; right: 15px; z-index: 999; color: #ca3838; }
+.field.danger.no-icon:after { display: none; }
+.field.danger.append:after, .field.danger.prepend:after { content: ""; }
+.field.danger input, .field.danger .input, .field.danger textarea, .field.danger .textarea, .field.danger .radio span, .field.danger .checkbox span, .field.danger .picker { border-color: #ca3838; background: #f0c5c5; }
+.field.danger input, .field.danger .input, .field.danger textarea, .field.danger .textarea, .field.danger .radio span, .field.danger .checkbox span, .field.danger .picker, .field.danger input::-webkit-input-placeholder, .field.danger textarea::-webkit-input-placeholder, .field.danger input:-moz-placeholder, .field.danger textarea:-moz-placeholder textarea { color: #ca3838; }
+.field.warning:after { font-family: "entypo"; content: "\\26a0"; font-size: 16px; position: absolute; top: 14%; right: 15px; z-index: 999; color: #f6b83f; }
+.field.warning.no-icon:after { display: none; }
+.field.warning.append:after, .field.warning.prepend:after { content: ""; }
+.field.warning input, .field.warning .input, .field.warning textarea, .field.warning .textarea, .field.warning .radio span, .field.warning .checkbox span, .field.warning .picker { border-color: #f6b83f; background: #fef7ea; }
+.field.warning input, .field.warning .input, .field.warning textarea, .field.warning .textarea, .field.warning .radio span, .field.warning .checkbox span, .field.warning .picker, .field.warning input::-webkit-input-placeholder, .field.warning textarea::-webkit-input-placeholder, .field.warning input:-moz-placeholder, .field.warning textarea:-moz-placeholder textarea { color: #f6b83f; }
+.field.success:after { font-family: "entypo"; content: "\\2713"; font-size: 16px; position: absolute; top: 14%; right: 15px; z-index: 999; color: #58c026; }
+.field.success.no-icon:after { display: none; }
+.field.success.append:after, .field.success.prepend:after { content: ""; }
+.field.success input, .field.success .input, .field.success textarea, .field.success .textarea, .field.success .radio span, .field.success .checkbox span, .field.success .picker { border-color: #58c026; background: #c0eeaa; }
+.field.success input, .field.success .input, .field.success textarea, .field.success .textarea, .field.success .radio span, .field.success .checkbox span, .field.success .picker, .field.success input::-webkit-input-placeholder, .field.success textarea::-webkit-input-placeholder, .field.success input:-moz-placeholder, .field.success textarea:-moz-placeholder textarea { color: #58c026; }
+.field .picker.danger { border-color: #ca3838; color: #ca3838; background: #f0c5c5; -moz-transition-duration: 0.2s; -o-transition-duration: 0.2s; -webkit-transition-duration: 0.2s; transition-duration: 0.2s; }
+.field .picker.danger select, .field .picker.danger:after { color: #ca3838; }
+.field .picker.warning { border-color: #f6b83f; color: #f6b83f; background: #fef7ea; -moz-transition-duration: 0.2s; -o-transition-duration: 0.2s; -webkit-transition-duration: 0.2s; transition-duration: 0.2s; }
+.field .picker.warning select, .field .picker.warning:after { color: #f6b83f; }
+.field .picker.success { border-color: #58c026; color: #58c026; background: #c0eeaa; -moz-transition-duration: 0.2s; -o-transition-duration: 0.2s; -webkit-transition-duration: 0.2s; transition-duration: 0.2s; }
+.field .picker.success select, .field .picker.success:after { color: #58c026; }
+
+.field .text input[type="search"] { -webkit-appearance: textfield; }
+
+.no-js .radio input { -webkit-appearance: radio; margin-left: 1px; }
+.no-js .checkbox input { -webkit-appearance: checkbox; }
+.no-js .radio input, .no-js .checkbox input { display: inline-block; width: 16px; }
+
+.js .field .radio, .js .field .checkbox { position: relative; }
+.js .field .radio.danger, .js .field .checkbox.danger { color: #ca3838; }
+.js .field .radio.danger span, .js .field .checkbox.danger span { border-color: #ca3838; color: #ca3838; background: #f0c5c5; -moz-transition-duration: 0.2s; -o-transition-duration: 0.2s; -webkit-transition-duration: 0.2s; transition-duration: 0.2s; }
+.js .field .radio.warning, .js .field .checkbox.warning { color: #f6b83f; }
+.js .field .radio.warning span, .js .field .checkbox.warning span { border-color: #f6b83f; color: #f6b83f; background: #fef7ea; -moz-transition-duration: 0.2s; -o-transition-duration: 0.2s; -webkit-transition-duration: 0.2s; transition-duration: 0.2s; }
+.js .field .radio.success, .js .field .checkbox.success { color: #58c026; color: #555555; }
+.js .field .radio.success i, .js .field .checkbox.success i { color: #58c026; }
+.js .field .radio.success span, .js .field .checkbox.success span { border-color: #58c026; color: #58c026; background: #c0eeaa; -moz-transition-duration: 0.2s; -o-transition-duration: 0.2s; -webkit-transition-duration: 0.2s; transition-duration: 0.2s; }
+.js .field .radio.checked i, .js .field .checkbox.checked i { position: absolute; top: -1px; left: -8px; line-height: 16px; }
+.js .field .radio span, .js .field .checkbox span { display: inline-block; width: 16px; height: 16px; position: relative; top: 2px; border: solid 1px #ccc; background: #fefefe; }
+.js .field .radio input[type="radio"], .js .field .radio input[type="checkbox"], .js .field .checkbox input[type="radio"], .js .field .checkbox input[type="checkbox"] { display: none; }
+.js .field .radio span { -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }
+.js .field .checkbox span { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; }
+
+.field .text input[type="search"] { -webkit-appearance: textfield; }
+
+/* Form Picker Element (<select>) */
+.picker { position: relative; width: auto; display: inline-block; margin: 0 0 2px 1.2%; overflow: hidden; border: 1px solid #e5e5e5; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; font-family: "Open Sans"; font-weight: 600; height: auto; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2YyZjJmMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #f2f2f2)); background-image: -moz-linear-gradient(#ffffff, #f2f2f2); background-image: -webkit-linear-gradient(#ffffff, #f2f2f2); background-image: linear-gradient(#ffffff, #f2f2f2); }
+.picker:after { content: "\25BE"; font-family: entypo; z-index: 0; position: absolute; right: 8%; top: 50%; margin-top: -12px; color: #555555; }
+.picker:first-child { margin-left: 0; }
+.picker select { position: relative; display: block; min-width: 100%; width: 135%; height: 34px; padding: 6px 45px 6px 15px; color: #555555; border: none; background: transparent; outline: none; -webkit-appearance: none; z-index: 99; cursor: pointer; font-size: 16px; font-size: 1rem; }
+.picker select::-ms-expand { display: none; }
+
+/* Labels */
+.badge, .label { height: 20px; display: inline-block; font-family: Helvetica, arial, verdana, sans-serif; font-weight: bold; line-height: 20px; text-align: center; color: #fff; }
+.badge a, .label a { color: #fff; }
+.badge.primary, .label.primary { background: #3085d6; border: 1px solid #3085d6; }
+.badge.secondary, .label.secondary { background: #42a35a; border: 1px solid #42a35a; }
+.badge.default, .label.default { background: #f2f2f2; border: 1px solid #f2f2f2; color: #555555; }
+.badge.default:hover, .label.default:hover { border-color: #e5e5e5; }
+.badge.default a, .label.default a { color: #555555; }
+.badge.info, .label.info { background: #4a4d50; border: 1px solid #4a4d50; }
+.badge.danger, .label.danger { background: #ca3838; border: 1px solid #ca3838; }
+.badge.warning, .label.warning { background: #f6b83f; border: 1px solid #f6b83f; color: #644405; }
+.badge.warning a, .label.warning a { color: #644405; }
+.badge.success, .label.success { background: #58c026; border: 1px solid #58c026; }
+.badge.light, .label.light { background: #fff; color: #555555; border: 1px solid #f2f2f2; }
+.badge.light a, .label.light a { color: #d04526; }
+.badge.dark, .label.dark { background: #212121; border: 1px solid #212121; }
+
+.badge { padding: 0 10px; font-size: 14px; font-size: 0.875rem; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; }
+
+.label { padding: 0 10px; font-size: 12px; font-size: 0.75rem; -moz-border-radius: 2px; -webkit-border-radius: 2px; border-radius: 2px; }
+
+.alert { padding: 0 10px; font-family: "Open Sans"; font-weight: 600; list-style-type: none; word-wrap: break-word; margin-bottom: 8px; font-size: 14px; font-size: 0.875rem; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
+.alert.primary { background: #85b7e7; border: 1px solid #3085d6; color: #1a5186; }
+.alert.secondary { background: #80cb92; border: 1px solid #42a35a; color: #255a32; }
+.alert.default { background: white; border: 1px solid #f2f2f2; color: #bfbfbf; color: #555555; border: 1px solid #f2f2f2; }
+.alert.info { background: #7b8085; border: 1px solid #4a4d50; color: #191a1b; color: #f2f2f2; }
+.alert.danger { background: #df8989; border: 1px solid #ca3838; color: #7b2121; }
+.alert.warning { background: #fbdca0; border: 1px solid #f6b83f; color: #c68609; color: #644405; }
+.alert.success { background: #91e26a; border: 1px solid #58c026; color: #316b15; }
+
+/* Tabs */
+.tabs { display: block; }
+
+.tab-nav { margin: 0; padding: 0; border-bottom: 1px solid #e5e5e5; }
+.tab-nav > li { display: inline-block; width: auto; padding: 0; margin: 0 2.12766% 0 0; cursor: default; top: 1px; -moz-box-shadow: 0 1px 0 #fff; -webkit-box-shadow: 0 1px 0 #fff; box-shadow: 0 1px 0 #fff; }
+.tab-nav > li > li { display: inline-block; width: auto; padding: 0; margin: 0 2.12766% 0 0; cursor: default; top: 1px; -moz-box-shadow: 0 1px 0 #fff; -webkit-box-shadow: 0 1px 0 #fff; box-shadow: 0 1px 0 #fff; }
+.tab-nav > li > li > a { display: block; width: auto; padding: 0 16px; margin: 0; color: #555555; font-family: "Open Sans"; font-weight: 600; border: 1px solid #e5e5e5; border-width: 1px 1px 0 1px; text-shadow: 0 1px 1px white; background: #f2f2f2; cursor: pointer; -moz-border-radius: 4px 4px 0 0; -webkit-border-radius: 4px; border-radius: 4px 4px 0 0; height: 42px; line-height: 40px; }
+.tab-nav > li > li > a:hover { text-decoration: none; background: whitesmoke; }
+.tab-nav > li > li > a:active { background: #ededed; }
+.tab-nav > li > li.active > a { height: 43px; line-height: 41px; background: #fff; cursor: default; }
+.tab-nav > li > li:last-child { margin-right: 0; }
+
+.tab-nav > li:last-child { margin-right: 0; }
+
+.tab-nav > li > a { display: block; width: auto; padding: 0 16px; margin: 0; color: #555555; font-family: "Open Sans"; font-weight: 600; border: 1px solid #e5e5e5; border-width: 1px 1px 0 1px; text-shadow: 0 1px 1px white; background: #f2f2f2; cursor: pointer; -moz-border-radius: 4px 4px 0 0; -webkit-border-radius: 4px; border-radius: 4px 4px 0 0; height: 42px; line-height: 40px; }
+.tab-nav > li > a:hover { text-decoration: none; background: whitesmoke; }
+.tab-nav > li > a:active { background: #ededed; }
+
+.tab-nav > li.active > a { height: 43px; line-height: 41px; background: #fff; }
+
+.tabs.pill .tab-nav { width: 100%; /* remove if you dont want the tabs to span the full container width */ display: table; overflow: hidden; border: 1px solid #e5e5e5; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
+.tabs.pill .tab-nav > li { display: table-cell; margin: 0; margin-left: -4px; text-align: center; top: 0; }
+.tabs.pill .tab-nav > li:first-child { margin-left: 0; }
+.tabs.pill .tab-nav > li > a { border: none; border-right: 1px solid #e5e5e5; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; height: 42px; line-height: 40px; }
+.tabs.pill .tab-nav > li:last-child > a { border-right: none; }
+
+.tab-content { display: none; padding: 20px 10px; }
+.tab-content.active { display: block; }
+
+.tabs.vertical .tab-nav { border: none; }
+.tabs.vertical .tab-nav > li { display: block; margin: 0; margin-bottom: 5px; }
+.tabs.vertical .tab-nav > li.active { position: relative; z-index: 99; }
+.tabs.vertical .tab-nav > li.active > a { border-right: 1px solid #fff; }
+.tabs.vertical .tab-nav > li > a { border: 1px solid #e5e5e5; -moz-border-radius: 4px 0 0 4px; -webkit-border-radius: 4px; border-radius: 4px 0 0 4px; }
+.tabs.vertical .tab-content { padding: 10px 0 30px 20px; margin-left: -1px; border-left: 1px solid #e5e5e5; }
+
+/* Images */
+.image { line-height: 0; margin-bottom: 20px; }
+.image.circle { -moz-border-radius: 50% !important; -webkit-border-radius: 50%; border-radius: 50% !important; overflow: hidden; width: auto; }
+.image.rounded { overflow: hidden; -moz-border-radius: 4px 4px; -webkit-border-radius: 4px; border-radius: 4px 4px; }
+.image.photo { border: 5px solid #fff; -moz-box-shadow: 0 0 1px #555555; -webkit-box-shadow: 0 0 1px #555555; box-shadow: 0 0 1px #555555; }
+.image.photo.polaroid { padding-bottom: 50px; background: #fff; }
+
+/* Video */
+body .video { width: 100%; position: relative; height: 0; padding-bottom: 56.25%; }
+body .video.twitch, body .video.youtube.show_controls { padding-top: 30px; }
+
+.video > video, .video > iframe, .video > object, .video > embed { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+
+/* Toggles */
+.drawer { position: relative; width: 100%; max-height: 0; background: #3e4144; -moz-box-shadow: inset 0 -2px 5px #313436, inset 0 2px 5px #313436; -webkit-box-shadow: inset 0 -2px 5px #313436, inset 0 2px 5px #313436; box-shadow: inset 0 -2px 5px #313436, inset 0 2px 5px #313436; overflow: hidden; -moz-transition-duration: 0.3s; -o-transition-duration: 0.3s; -webkit-transition-duration: 0.3s; transition-duration: 0.3s; }
+.drawer.active { height: auto; max-height: 800px; -moz-transition-duration: 0.5s; -o-transition-duration: 0.5s; -webkit-transition-duration: 0.5s; transition-duration: 0.5s; }
+
+.modal { width: 100%; height: 100%; position: fixed; top: 0; left: 0; z-index: 999999; background: black; background: rgba(0, 0, 0, 0.8); }
+.modal > .content { width: 50%; min-height: 50%; max-height: 65%; position: relative; top: 25%; margin: 0 auto; padding: 20px; background: #fff; z-index: 2; overflow: auto; }
+@media only screen and (max-width: 768px) { .modal > .content { width: 80%; min-height: 80%; max-height: 80%; top: 10%; } }
+@media only screen and (max-width: 767px) { .modal > .content { width: 92.5%; min-height: 92.5%; max-height: 92.5%; top: 3.75%; } }
+.modal > .content > .close { position: absolute; top: 10px; right: 10px; cursor: pointer; z-index: 3; }
+.modal, .modal > .content { visibility: hidden; filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); opacity: 0; }
+.modal.active { -moz-transition-property: opacity; -o-transition-property: opacity; -webkit-transition-property: opacity; transition-property: opacity; -moz-transition-duration: 0.3s; -o-transition-duration: 0.3s; -webkit-transition-duration: 0.3s; transition-duration: 0.3s; }
+.modal.active, .modal.active > .content { visibility: visible; filter: progid:DXImageTransform.Microsoft.Alpha(enabled=false); opacity: 1; }
+
+/* Tables */
+table { display: table; background-color: #fff; border-collapse: collapse; border-spacing: 0; margin-bottom: 20px; width: 100%; border: 1px solid #e5e5e5; }
+table caption { text-align: center; font-size: 29.79335px; padding: .75em; }
+table thead th, table tbody td, table tr td { display: table-cell; padding: 10px; vertical-align: top; text-align: left; border-top: 1px solid #e5e5e5; }
+table tr td, table tbody tr td { font-size: 16px; }
+table tr td:first-child { font-weight: bold; }
+table thead { background-color: #3085d6; color: #fff; }
+table thead tr th { font-size: 16px; font-weight: bold; vertical-align: bottom; }
+table.striped tr:nth-of-type(even), table table tr.stripe, table table tr.striped { background-color: #e5e5e5; }
+table.rounded { border-radius: 4px; border-collapse: separate; }
+table.rounded caption + thead tr:first-child th:first-child, table.rounded caption + tr td:first-child, table.rounded > thead tr:first-child th:first-child, table.rounded > thead tr:first-child td:first-child, table.rounded > tr:first-child td:first-child { border-top-left-radius: 4px; }
+table.rounded caption + thead tr:first-child th:last-child, table.rounded caption + tr td:last-child, table.rounded > thead tr:first-child th:last-child, table.rounded > thead tr:first-child td:last-child, table.rounded > tr:first-child td:last-child { border-top-right-radius: 4px; }
+table.rounded thead ~ tr:last-child td:last-child, table.rounded tbody tr:last-child td:last-child { border-bottom-right-radius: 4px; }
+table.rounded thead ~ tr:last-child td:first-child, table.rounded tbody tr:last-child td:first-child { border-bottom-left-radius: 4px; }
+table.rounded thead th, table.rounded thead td, table.rounded caption + tbody tr:first-child td, table.rounded > tbody:first-child tr:first-child td { border-top: 0; }
+
+/* Tooltips */
+.ttip { position: relative; cursor: pointer; }
+.ttip:after { display: block; background: #3085d6; border: 1px solid #3085d6; border-bottom: 0; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; padding: 0.5em 0.75em; width: auto; min-width: 130px; max-width: 500px; position: absolute; left: 0; bottom: 101%; margin-bottom: 8px; text-align: left; color: #fff; content: attr(data-tooltip); line-height: 1.5; font-size: 16px; font-weight: normal; font-style: normal; -moz-transition: opacity 0.1s ease; -o-transition: opacity 0.1s ease; -webkit-transition: opacity 0.1s ease; transition: opacity 0.1s ease; filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); opacity: 0; pointer-events: none; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzY1YTRlMSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzMwODVkNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #65a4e1), color-stop(100%, #3085d6)); background-image: -moz-linear-gradient(top, #65a4e1, #3085d6); background-image: -webkit-linear-gradient(top, #65a4e1, #3085d6); background-image: linear-gradient(to bottom, #65a4e1, #3085d6); -moz-box-shadow: 0 0 5px 0 rgba(48, 133, 214, 0.25); -webkit-box-shadow: 0 0 5px 0 rgba(48, 133, 214, 0.25); box-shadow: 0 0 5px 0 rgba(48, 133, 214, 0.25); }
+.ttip:before { content: " "; width: 0; height: 0; position: absolute; bottom: 101%; left: 8px; border-top: 9px solid #3085d6 !important; border-left: 9px solid transparent; border-right: 9px solid transparent; -moz-transition: opacity 0.1s ease; -o-transition: opacity 0.1s ease; -webkit-transition: opacity 0.1s ease; transition: opacity 0.1s ease; filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); opacity: 0; pointer-events: none; }
+.ttip:hover:after, .ttip:hover:before { -moz-transition: opacity 0.1s ease; -o-transition: opacity 0.1s ease; -webkit-transition: opacity 0.1s ease; transition: opacity 0.1s ease; filter: progid:DXImageTransform.Microsoft.Alpha(enabled=false); opacity: 1; }
+
+@media only screen and (max-width: 768px) { .ttip:after, .ttip:before { display: none; } }
+
+/* SHAME */
+.ie8 .xxwide, .ie8 .xwide, .ie8 .wide, .ie8 .normal, .ie8 .narrow, .ie8 .xnarrow { display: inline; }
+.ie8 .xxwide + input, .ie8 .xwide + input, .ie8 .wide + input, .ie8 .normal + input, .ie8 .narrow + input, .ie8 .xnarrow + input { display: inline; margin: 0 0 0 -.25em; }
+.ie8 .ttip:before, .ie8 .ttip:after { display: none; }
+.ie8 .ttip:hover:before, .ie8 .ttip:hover:after { display: block; }
+
+.ie9 .radio.checked i, .ie9 .checkbox.checked i { top: 0; }
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/sample_jquery.js b/vendor/github.com/tdewolff/minify/benchmarks/sample_jquery.js
new file mode 100644
index 0000000..79d631f
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/sample_jquery.js
@@ -0,0 +1,9205 @@
+/*!
+ * jQuery JavaScript Library v2.1.3
+ * http://jquery.com/
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ *
+ * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2014-12-18T15:11Z
+ */
+
+(function( global, factory ) {
+
+ if ( typeof module === "object" && typeof module.exports === "object" ) {
+ // For CommonJS and CommonJS-like environments where a proper `window`
+ // is present, execute the factory and get jQuery.
+ // For environments that do not have a `window` with a `document`
+ // (such as Node.js), expose a factory as module.exports.
+ // This accentuates the need for the creation of a real `window`.
+ // e.g. var jQuery = require("jquery")(window);
+ // See ticket #14549 for more info.
+ module.exports = global.document ?
+ factory( global, true ) :
+ function( w ) {
+ if ( !w.document ) {
+ throw new Error( "jQuery requires a window with a document" );
+ }
+ return factory( w );
+ };
+ } else {
+ factory( global );
+ }
+
+// Pass this if window is not defined yet
+}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Support: Firefox 18+
+// Can't be in strict mode, several libs including ASP.NET trace
+// the stack via arguments.caller.callee and Firefox dies if
+// you try to trace through "use strict" call chains. (#13335)
+//
+
+var arr = [];
+
+var slice = arr.slice;
+
+var concat = arr.concat;
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var support = {};
+
+
+
+var
+ // Use the correct document accordingly with window argument (sandbox)
+ document = window.document,
+
+ version = "2.1.3",
+
+ // Define a local copy of jQuery
+ jQuery = function( selector, context ) {
+ // The jQuery object is actually just the init constructor 'enhanced'
+ // Need init if jQuery is called (just allow error to be thrown if not included)
+ return new jQuery.fn.init( selector, context );
+ },
+
+ // Support: Android<4.1
+ // Make sure we trim BOM and NBSP
+ rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+ // Matches dashed string for camelizing
+ rmsPrefix = /^-ms-/,
+ rdashAlpha = /-([\da-z])/gi,
+
+ // Used by jQuery.camelCase as callback to replace()
+ fcamelCase = function( all, letter ) {
+ return letter.toUpperCase();
+ };
+
+jQuery.fn = jQuery.prototype = {
+ // The current version of jQuery being used
+ jquery: version,
+
+ constructor: jQuery,
+
+ // Start with an empty selector
+ selector: "",
+
+ // The default length of a jQuery object is 0
+ length: 0,
+
+ toArray: function() {
+ return slice.call( this );
+ },
+
+ // Get the Nth element in the matched element set OR
+ // Get the whole matched element set as a clean array
+ get: function( num ) {
+ return num != null ?
+
+ // Return just the one element from the set
+ ( num < 0 ? this[ num + this.length ] : this[ num ] ) :
+
+ // Return all the elements in a clean array
+ slice.call( this );
+ },
+
+ // Take an array of elements and push it onto the stack
+ // (returning the new matched element set)
+ pushStack: function( elems ) {
+
+ // Build a new jQuery matched element set
+ var ret = jQuery.merge( this.constructor(), elems );
+
+ // Add the old object onto the stack (as a reference)
+ ret.prevObject = this;
+ ret.context = this.context;
+
+ // Return the newly-formed element set
+ return ret;
+ },
+
+ // Execute a callback for every element in the matched set.
+ // (You can seed the arguments with an array of args, but this is
+ // only used internally.)
+ each: function( callback, args ) {
+ return jQuery.each( this, callback, args );
+ },
+
+ map: function( callback ) {
+ return this.pushStack( jQuery.map(this, function( elem, i ) {
+ return callback.call( elem, i, elem );
+ }));
+ },
+
+ slice: function() {
+ return this.pushStack( slice.apply( this, arguments ) );
+ },
+
+ first: function() {
+ return this.eq( 0 );
+ },
+
+ last: function() {
+ return this.eq( -1 );
+ },
+
+ eq: function( i ) {
+ var len = this.length,
+ j = +i + ( i < 0 ? len : 0 );
+ return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
+ },
+
+ end: function() {
+ return this.prevObject || this.constructor(null);
+ },
+
+ // For internal use only.
+ // Behaves like an Array's method, not like a jQuery method.
+ push: push,
+ sort: arr.sort,
+ splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+ var options, name, src, copy, copyIsArray, clone,
+ target = arguments[0] || {},
+ i = 1,
+ length = arguments.length,
+ deep = false;
+
+ // Handle a deep copy situation
+ if ( typeof target === "boolean" ) {
+ deep = target;
+
+ // Skip the boolean and the target
+ target = arguments[ i ] || {};
+ i++;
+ }
+
+ // Handle case when target is a string or something (possible in deep copy)
+ if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+ target = {};
+ }
+
+ // Extend jQuery itself if only one argument is passed
+ if ( i === length ) {
+ target = this;
+ i--;
+ }
+
+ for ( ; i < length; i++ ) {
+ // Only deal with non-null/undefined values
+ if ( (options = arguments[ i ]) != null ) {
+ // Extend the base object
+ for ( name in options ) {
+ src = target[ name ];
+ copy = options[ name ];
+
+ // Prevent never-ending loop
+ if ( target === copy ) {
+ continue;
+ }
+
+ // Recurse if we're merging plain objects or arrays
+ if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+ if ( copyIsArray ) {
+ copyIsArray = false;
+ clone = src && jQuery.isArray(src) ? src : [];
+
+ } else {
+ clone = src && jQuery.isPlainObject(src) ? src : {};
+ }
+
+ // Never move original objects, clone them
+ target[ name ] = jQuery.extend( deep, clone, copy );
+
+ // Don't bring in undefined values
+ } else if ( copy !== undefined ) {
+ target[ name ] = copy;
+ }
+ }
+ }
+ }
+
+ // Return the modified object
+ return target;
+};
+
+jQuery.extend({
+ // Unique for each copy of jQuery on the page
+ expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+ // Assume jQuery is ready without the ready module
+ isReady: true,
+
+ error: function( msg ) {
+ throw new Error( msg );
+ },
+
+ noop: function() {},
+
+ isFunction: function( obj ) {
+ return jQuery.type(obj) === "function";
+ },
+
+ isArray: Array.isArray,
+
+ isWindow: function( obj ) {
+ return obj != null && obj === obj.window;
+ },
+
+ isNumeric: function( obj ) {
+ // parseFloat NaNs numeric-cast false positives (null|true|false|"")
+ // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+ // subtraction forces infinities to NaN
+ // adding 1 corrects loss of precision from parseFloat (#15100)
+ return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0;
+ },
+
+ isPlainObject: function( obj ) {
+ // Not plain objects:
+ // - Any object or value whose internal [[Class]] property is not "[object Object]"
+ // - DOM nodes
+ // - window
+ if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+ return false;
+ }
+
+ if ( obj.constructor &&
+ !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
+ return false;
+ }
+
+ // If the function hasn't returned already, we're confident that
+ // |obj| is a plain object, created by {} or constructed with new Object
+ return true;
+ },
+
+ isEmptyObject: function( obj ) {
+ var name;
+ for ( name in obj ) {
+ return false;
+ }
+ return true;
+ },
+
+ type: function( obj ) {
+ if ( obj == null ) {
+ return obj + "";
+ }
+ // Support: Android<4.0, iOS<6 (functionish RegExp)
+ return typeof obj === "object" || typeof obj === "function" ?
+ class2type[ toString.call(obj) ] || "object" :
+ typeof obj;
+ },
+
+ // Evaluates a script in a global context
+ globalEval: function( code ) {
+ var script,
+ indirect = eval;
+
+ code = jQuery.trim( code );
+
+ if ( code ) {
+ // If the code includes a valid, prologue position
+ // strict mode pragma, execute code by injecting a
+ // script tag into the document.
+ if ( code.indexOf("use strict") === 1 ) {
+ script = document.createElement("script");
+ script.text = code;
+ document.head.appendChild( script ).parentNode.removeChild( script );
+ } else {
+ // Otherwise, avoid the DOM node creation, insertion
+ // and removal by using an indirect global eval
+ indirect( code );
+ }
+ }
+ },
+
+ // Convert dashed to camelCase; used by the css and data modules
+ // Support: IE9-11+
+ // Microsoft forgot to hump their vendor prefix (#9572)
+ camelCase: function( string ) {
+ return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+ },
+
+ nodeName: function( elem, name ) {
+ return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+ },
+
+ // args is for internal usage only
+ each: function( obj, callback, args ) {
+ var value,
+ i = 0,
+ length = obj.length,
+ isArray = isArraylike( obj );
+
+ if ( args ) {
+ if ( isArray ) {
+ for ( ; i < length; i++ ) {
+ value = callback.apply( obj[ i ], args );
+
+ if ( value === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( i in obj ) {
+ value = callback.apply( obj[ i ], args );
+
+ if ( value === false ) {
+ break;
+ }
+ }
+ }
+
+ // A special, fast, case for the most common use of each
+ } else {
+ if ( isArray ) {
+ for ( ; i < length; i++ ) {
+ value = callback.call( obj[ i ], i, obj[ i ] );
+
+ if ( value === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( i in obj ) {
+ value = callback.call( obj[ i ], i, obj[ i ] );
+
+ if ( value === false ) {
+ break;
+ }
+ }
+ }
+ }
+
+ return obj;
+ },
+
+ // Support: Android<4.1
+ trim: function( text ) {
+ return text == null ?
+ "" :
+ ( text + "" ).replace( rtrim, "" );
+ },
+
+ // results is for internal usage only
+ makeArray: function( arr, results ) {
+ var ret = results || [];
+
+ if ( arr != null ) {
+ if ( isArraylike( Object(arr) ) ) {
+ jQuery.merge( ret,
+ typeof arr === "string" ?
+ [ arr ] : arr
+ );
+ } else {
+ push.call( ret, arr );
+ }
+ }
+
+ return ret;
+ },
+
+ inArray: function( elem, arr, i ) {
+ return arr == null ? -1 : indexOf.call( arr, elem, i );
+ },
+
+ merge: function( first, second ) {
+ var len = +second.length,
+ j = 0,
+ i = first.length;
+
+ for ( ; j < len; j++ ) {
+ first[ i++ ] = second[ j ];
+ }
+
+ first.length = i;
+
+ return first;
+ },
+
+ grep: function( elems, callback, invert ) {
+ var callbackInverse,
+ matches = [],
+ i = 0,
+ length = elems.length,
+ callbackExpect = !invert;
+
+ // Go through the array, only saving the items
+ // that pass the validator function
+ for ( ; i < length; i++ ) {
+ callbackInverse = !callback( elems[ i ], i );
+ if ( callbackInverse !== callbackExpect ) {
+ matches.push( elems[ i ] );
+ }
+ }
+
+ return matches;
+ },
+
+ // arg is for internal usage only
+ map: function( elems, callback, arg ) {
+ var value,
+ i = 0,
+ length = elems.length,
+ isArray = isArraylike( elems ),
+ ret = [];
+
+ // Go through the array, translating each of the items to their new values
+ if ( isArray ) {
+ for ( ; i < length; i++ ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret.push( value );
+ }
+ }
+
+ // Go through every key on the object,
+ } else {
+ for ( i in elems ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret.push( value );
+ }
+ }
+ }
+
+ // Flatten any nested arrays
+ return concat.apply( [], ret );
+ },
+
+ // A global GUID counter for objects
+ guid: 1,
+
+ // Bind a function to a context, optionally partially applying any
+ // arguments.
+ proxy: function( fn, context ) {
+ var tmp, args, proxy;
+
+ if ( typeof context === "string" ) {
+ tmp = fn[ context ];
+ context = fn;
+ fn = tmp;
+ }
+
+ // Quick check to determine if target is callable, in the spec
+ // this throws a TypeError, but we will just return undefined.
+ if ( !jQuery.isFunction( fn ) ) {
+ return undefined;
+ }
+
+ // Simulated bind
+ args = slice.call( arguments, 2 );
+ proxy = function() {
+ return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+ };
+
+ // Set the guid of unique handler to the same of original handler, so it can be removed
+ proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+ return proxy;
+ },
+
+ now: Date.now,
+
+ // jQuery.support is not used in Core but other projects attach their
+ // properties to it so it needs to exist.
+ support: support
+});
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
+ class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+function isArraylike( obj ) {
+ var length = obj.length,
+ type = jQuery.type( obj );
+
+ if ( type === "function" || jQuery.isWindow( obj ) ) {
+ return false;
+ }
+
+ if ( obj.nodeType === 1 && length ) {
+ return true;
+ }
+
+ return type === "array" || length === 0 ||
+ typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v2.2.0-pre
+ * http://sizzlejs.com/
+ *
+ * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2014-12-16
+ */
+(function( window ) {
+
+var i,
+ support,
+ Expr,
+ getText,
+ isXML,
+ tokenize,
+ compile,
+ select,
+ outermostContext,
+ sortInput,
+ hasDuplicate,
+
+ // Local document vars
+ setDocument,
+ document,
+ docElem,
+ documentIsHTML,
+ rbuggyQSA,
+ rbuggyMatches,
+ matches,
+ contains,
+
+ // Instance-specific data
+ expando = "sizzle" + 1 * new Date(),
+ preferredDoc = window.document,
+ dirruns = 0,
+ done = 0,
+ classCache = createCache(),
+ tokenCache = createCache(),
+ compilerCache = createCache(),
+ sortOrder = function( a, b ) {
+ if ( a === b ) {
+ hasDuplicate = true;
+ }
+ return 0;
+ },
+
+ // General-purpose constants
+ MAX_NEGATIVE = 1 << 31,
+
+ // Instance methods
+ hasOwn = ({}).hasOwnProperty,
+ arr = [],
+ pop = arr.pop,
+ push_native = arr.push,
+ push = arr.push,
+ slice = arr.slice,
+ // Use a stripped-down indexOf as it's faster than native
+ // http://jsperf.com/thor-indexof-vs-for/5
+ indexOf = function( list, elem ) {
+ var i = 0,
+ len = list.length;
+ for ( ; i < len; i++ ) {
+ if ( list[i] === elem ) {
+ return i;
+ }
+ }
+ return -1;
+ },
+
+ booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+
+ // Regular expressions
+
+ // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
+ whitespace = "[\\x20\\t\\r\\n\\f]",
+ // http://www.w3.org/TR/css3-syntax/#characters
+ characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
+
+ // Loosely modeled on CSS identifier characters
+ // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
+ // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+ identifier = characterEncoding.replace( "w", "w#" ),
+
+ // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+ attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
+ // Operator (capture 2)
+ "*([*^$|!~]?=)" + whitespace +
+ // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
+ "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
+ "*\\]",
+
+ pseudos = ":(" + characterEncoding + ")(?:\\((" +
+ // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+ // 1. quoted (capture 3; capture 4 or capture 5)
+ "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+ // 2. simple (capture 6)
+ "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+ // 3. anything else (capture 2)
+ ".*" +
+ ")\\)|)",
+
+ // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+ rwhitespace = new RegExp( whitespace + "+", "g" ),
+ rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+ rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+ rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
+
+ rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
+
+ rpseudo = new RegExp( pseudos ),
+ ridentifier = new RegExp( "^" + identifier + "$" ),
+
+ matchExpr = {
+ "ID": new RegExp( "^#(" + characterEncoding + ")" ),
+ "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
+ "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
+ "ATTR": new RegExp( "^" + attributes ),
+ "PSEUDO": new RegExp( "^" + pseudos ),
+ "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+ "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+ "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+ "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+ // For use in libraries implementing .is()
+ // We use this for POS matching in `select`
+ "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+ whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+ },
+
+ rinputs = /^(?:input|select|textarea|button)$/i,
+ rheader = /^h\d$/i,
+
+ rnative = /^[^{]+\{\s*\[native \w/,
+
+ // Easily-parseable/retrievable ID or TAG or CLASS selectors
+ rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+ rsibling = /[+~]/,
+ rescape = /'|\\/g,
+
+ // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+ runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
+ funescape = function( _, escaped, escapedWhitespace ) {
+ var high = "0x" + escaped - 0x10000;
+ // NaN means non-codepoint
+ // Support: Firefox<24
+ // Workaround erroneous numeric interpretation of +"0x"
+ return high !== high || escapedWhitespace ?
+ escaped :
+ high < 0 ?
+ // BMP codepoint
+ String.fromCharCode( high + 0x10000 ) :
+ // Supplemental Plane codepoint (surrogate pair)
+ String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+ },
+
+ // Used for iframes
+ // See setDocument()
+ // Removing the function wrapper causes a "Permission Denied"
+ // error in IE
+ unloadHandler = function() {
+ setDocument();
+ };
+
+// Optimize for push.apply( _, NodeList )
+try {
+ push.apply(
+ (arr = slice.call( preferredDoc.childNodes )),
+ preferredDoc.childNodes
+ );
+ // Support: Android<4.0
+ // Detect silently failing push.apply
+ arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+ push = { apply: arr.length ?
+
+ // Leverage slice if possible
+ function( target, els ) {
+ push_native.apply( target, slice.call(els) );
+ } :
+
+ // Support: IE<9
+ // Otherwise append directly
+ function( target, els ) {
+ var j = target.length,
+ i = 0;
+ // Can't trust NodeList.length
+ while ( (target[j++] = els[i++]) ) {}
+ target.length = j - 1;
+ }
+ };
+}
+
+function Sizzle( selector, context, results, seed ) {
+ var match, elem, m, nodeType,
+ // QSA vars
+ i, groups, old, nid, newContext, newSelector;
+
+ if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+ setDocument( context );
+ }
+
+ context = context || document;
+ results = results || [];
+ nodeType = context.nodeType;
+
+ if ( typeof selector !== "string" || !selector ||
+ nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
+
+ return results;
+ }
+
+ if ( !seed && documentIsHTML ) {
+
+ // Try to shortcut find operations when possible (e.g., not under DocumentFragment)
+ if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
+ // Speed-up: Sizzle("#ID")
+ if ( (m = match[1]) ) {
+ if ( nodeType === 9 ) {
+ elem = context.getElementById( m );
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document (jQuery #6963)
+ if ( elem && elem.parentNode ) {
+ // Handle the case where IE, Opera, and Webkit return items
+ // by name instead of ID
+ if ( elem.id === m ) {
+ results.push( elem );
+ return results;
+ }
+ } else {
+ return results;
+ }
+ } else {
+ // Context is not a document
+ if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
+ contains( context, elem ) && elem.id === m ) {
+ results.push( elem );
+ return results;
+ }
+ }
+
+ // Speed-up: Sizzle("TAG")
+ } else if ( match[2] ) {
+ push.apply( results, context.getElementsByTagName( selector ) );
+ return results;
+
+ // Speed-up: Sizzle(".CLASS")
+ } else if ( (m = match[3]) && support.getElementsByClassName ) {
+ push.apply( results, context.getElementsByClassName( m ) );
+ return results;
+ }
+ }
+
+ // QSA path
+ if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
+ nid = old = expando;
+ newContext = context;
+ newSelector = nodeType !== 1 && selector;
+
+ // qSA works strangely on Element-rooted queries
+ // We can work around this by specifying an extra ID on the root
+ // and working up from there (Thanks to Andrew Dupont for the technique)
+ // IE 8 doesn't work on object elements
+ if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+ groups = tokenize( selector );
+
+ if ( (old = context.getAttribute("id")) ) {
+ nid = old.replace( rescape, "\\$&" );
+ } else {
+ context.setAttribute( "id", nid );
+ }
+ nid = "[id='" + nid + "'] ";
+
+ i = groups.length;
+ while ( i-- ) {
+ groups[i] = nid + toSelector( groups[i] );
+ }
+ newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
+ newSelector = groups.join(",");
+ }
+
+ if ( newSelector ) {
+ try {
+ push.apply( results,
+ newContext.querySelectorAll( newSelector )
+ );
+ return results;
+ } catch(qsaError) {
+ } finally {
+ if ( !old ) {
+ context.removeAttribute("id");
+ }
+ }
+ }
+ }
+ }
+
+ // All others
+ return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
+ * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ * deleting the oldest entry
+ */
+function createCache() {
+ var keys = [];
+
+ function cache( key, value ) {
+ // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+ if ( keys.push( key + " " ) > Expr.cacheLength ) {
+ // Only keep the most recent entries
+ delete cache[ keys.shift() ];
+ }
+ return (cache[ key + " " ] = value);
+ }
+ return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+ fn[ expando ] = true;
+ return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created div and expects a boolean result
+ */
+function assert( fn ) {
+ var div = document.createElement("div");
+
+ try {
+ return !!fn( div );
+ } catch (e) {
+ return false;
+ } finally {
+ // Remove from its parent by default
+ if ( div.parentNode ) {
+ div.parentNode.removeChild( div );
+ }
+ // release memory in IE
+ div = null;
+ }
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+ var arr = attrs.split("|"),
+ i = attrs.length;
+
+ while ( i-- ) {
+ Expr.attrHandle[ arr[i] ] = handler;
+ }
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+ var cur = b && a,
+ diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+ ( ~b.sourceIndex || MAX_NEGATIVE ) -
+ ( ~a.sourceIndex || MAX_NEGATIVE );
+
+ // Use IE sourceIndex if available on both nodes
+ if ( diff ) {
+ return diff;
+ }
+
+ // Check if b follows a
+ if ( cur ) {
+ while ( (cur = cur.nextSibling) ) {
+ if ( cur === b ) {
+ return -1;
+ }
+ }
+ }
+
+ return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+ return function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && elem.type === type;
+ };
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+ return function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return (name === "input" || name === "button") && elem.type === type;
+ };
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+ return markFunction(function( argument ) {
+ argument = +argument;
+ return markFunction(function( seed, matches ) {
+ var j,
+ matchIndexes = fn( [], seed.length, argument ),
+ i = matchIndexes.length;
+
+ // Match elements found at the specified indexes
+ while ( i-- ) {
+ if ( seed[ (j = matchIndexes[i]) ] ) {
+ seed[j] = !(matches[j] = seed[j]);
+ }
+ }
+ });
+ });
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+ return context && typeof context.getElementsByTagName !== "undefined" && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+ // documentElement is verified for cases where it doesn't yet exist
+ // (such as loading iframes in IE - #4833)
+ var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+ return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+ var hasCompare, parent,
+ doc = node ? node.ownerDocument || node : preferredDoc;
+
+ // If no document and documentElement is available, return
+ if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+ return document;
+ }
+
+ // Set our document
+ document = doc;
+ docElem = doc.documentElement;
+ parent = doc.defaultView;
+
+ // Support: IE>8
+ // If iframe document is assigned to "document" variable and if iframe has been reloaded,
+ // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
+ // IE6-8 do not support the defaultView property so parent will be undefined
+ if ( parent && parent !== parent.top ) {
+ // IE11 does not have attachEvent, so all must suffer
+ if ( parent.addEventListener ) {
+ parent.addEventListener( "unload", unloadHandler, false );
+ } else if ( parent.attachEvent ) {
+ parent.attachEvent( "onunload", unloadHandler );
+ }
+ }
+
+ /* Support tests
+ ---------------------------------------------------------------------- */
+ documentIsHTML = !isXML( doc );
+
+ /* Attributes
+ ---------------------------------------------------------------------- */
+
+ // Support: IE<8
+ // Verify that getAttribute really returns attributes and not properties
+ // (excepting IE8 booleans)
+ support.attributes = assert(function( div ) {
+ div.className = "i";
+ return !div.getAttribute("className");
+ });
+
+ /* getElement(s)By*
+ ---------------------------------------------------------------------- */
+
+ // Check if getElementsByTagName("*") returns only elements
+ support.getElementsByTagName = assert(function( div ) {
+ div.appendChild( doc.createComment("") );
+ return !div.getElementsByTagName("*").length;
+ });
+
+ // Support: IE<9
+ support.getElementsByClassName = rnative.test( doc.getElementsByClassName );
+
+ // Support: IE<10
+ // Check if getElementById returns elements by name
+ // The broken getElementById methods don't pick up programatically-set names,
+ // so use a roundabout getElementsByName test
+ support.getById = assert(function( div ) {
+ docElem.appendChild( div ).id = expando;
+ return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
+ });
+
+ // ID find and filter
+ if ( support.getById ) {
+ Expr.find["ID"] = function( id, context ) {
+ if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+ var m = context.getElementById( id );
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ return m && m.parentNode ? [ m ] : [];
+ }
+ };
+ Expr.filter["ID"] = function( id ) {
+ var attrId = id.replace( runescape, funescape );
+ return function( elem ) {
+ return elem.getAttribute("id") === attrId;
+ };
+ };
+ } else {
+ // Support: IE6/7
+ // getElementById is not reliable as a find shortcut
+ delete Expr.find["ID"];
+
+ Expr.filter["ID"] = function( id ) {
+ var attrId = id.replace( runescape, funescape );
+ return function( elem ) {
+ var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+ return node && node.value === attrId;
+ };
+ };
+ }
+
+ // Tag
+ Expr.find["TAG"] = support.getElementsByTagName ?
+ function( tag, context ) {
+ if ( typeof context.getElementsByTagName !== "undefined" ) {
+ return context.getElementsByTagName( tag );
+
+ // DocumentFragment nodes don't have gEBTN
+ } else if ( support.qsa ) {
+ return context.querySelectorAll( tag );
+ }
+ } :
+
+ function( tag, context ) {
+ var elem,
+ tmp = [],
+ i = 0,
+ // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
+ results = context.getElementsByTagName( tag );
+
+ // Filter out possible comments
+ if ( tag === "*" ) {
+ while ( (elem = results[i++]) ) {
+ if ( elem.nodeType === 1 ) {
+ tmp.push( elem );
+ }
+ }
+
+ return tmp;
+ }
+ return results;
+ };
+
+ // Class
+ Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
+ if ( documentIsHTML ) {
+ return context.getElementsByClassName( className );
+ }
+ };
+
+ /* QSA/matchesSelector
+ ---------------------------------------------------------------------- */
+
+ // QSA and matchesSelector support
+
+ // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+ rbuggyMatches = [];
+
+ // qSa(:focus) reports false when true (Chrome 21)
+ // We allow this because of a bug in IE8/9 that throws an error
+ // whenever `document.activeElement` is accessed on an iframe
+ // So, we allow :focus to pass through QSA all the time to avoid the IE error
+ // See http://bugs.jquery.com/ticket/13378
+ rbuggyQSA = [];
+
+ if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
+ // Build QSA regex
+ // Regex strategy adopted from Diego Perini
+ assert(function( div ) {
+ // Select is set to empty string on purpose
+ // This is to test IE's treatment of not explicitly
+ // setting a boolean content attribute,
+ // since its presence should be enough
+ // http://bugs.jquery.com/ticket/12359
+ docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" +
+ "<select id='" + expando + "-\f]' msallowcapture=''>" +
+ "<option selected=''></option></select>";
+
+ // Support: IE8, Opera 11-12.16
+ // Nothing should be selected when empty strings follow ^= or $= or *=
+ // The test attribute must be unknown in Opera but "safe" for WinRT
+ // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+ if ( div.querySelectorAll("[msallowcapture^='']").length ) {
+ rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+ }
+
+ // Support: IE8
+ // Boolean attributes and "value" are not treated correctly
+ if ( !div.querySelectorAll("[selected]").length ) {
+ rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+ }
+
+ // Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+
+ if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
+ rbuggyQSA.push("~=");
+ }
+
+ // Webkit/Opera - :checked should return selected option elements
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+ // IE8 throws error here and will not see later tests
+ if ( !div.querySelectorAll(":checked").length ) {
+ rbuggyQSA.push(":checked");
+ }
+
+ // Support: Safari 8+, iOS 8+
+ // https://bugs.webkit.org/show_bug.cgi?id=136851
+ // In-page `selector#id sibing-combinator selector` fails
+ if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) {
+ rbuggyQSA.push(".#.+[+~]");
+ }
+ });
+
+ assert(function( div ) {
+ // Support: Windows 8 Native Apps
+ // The type and name attributes are restricted during .innerHTML assignment
+ var input = doc.createElement("input");
+ input.setAttribute( "type", "hidden" );
+ div.appendChild( input ).setAttribute( "name", "D" );
+
+ // Support: IE8
+ // Enforce case-sensitivity of name attribute
+ if ( div.querySelectorAll("[name=d]").length ) {
+ rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+ }
+
+ // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+ // IE8 throws error here and will not see later tests
+ if ( !div.querySelectorAll(":enabled").length ) {
+ rbuggyQSA.push( ":enabled", ":disabled" );
+ }
+
+ // Opera 10-11 does not throw on post-comma invalid pseudos
+ div.querySelectorAll("*,:x");
+ rbuggyQSA.push(",.*:");
+ });
+ }
+
+ if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
+ docElem.webkitMatchesSelector ||
+ docElem.mozMatchesSelector ||
+ docElem.oMatchesSelector ||
+ docElem.msMatchesSelector) )) ) {
+
+ assert(function( div ) {
+ // Check to see if it's possible to do matchesSelector
+ // on a disconnected node (IE 9)
+ support.disconnectedMatch = matches.call( div, "div" );
+
+ // This should fail with an exception
+ // Gecko does not error, returns false instead
+ matches.call( div, "[s!='']:x" );
+ rbuggyMatches.push( "!=", pseudos );
+ });
+ }
+
+ rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
+ rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
+
+ /* Contains
+ ---------------------------------------------------------------------- */
+ hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+ // Element contains another
+ // Purposefully does not implement inclusive descendent
+ // As in, an element does not contain itself
+ contains = hasCompare || rnative.test( docElem.contains ) ?
+ function( a, b ) {
+ var adown = a.nodeType === 9 ? a.documentElement : a,
+ bup = b && b.parentNode;
+ return a === bup || !!( bup && bup.nodeType === 1 && (
+ adown.contains ?
+ adown.contains( bup ) :
+ a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+ ));
+ } :
+ function( a, b ) {
+ if ( b ) {
+ while ( (b = b.parentNode) ) {
+ if ( b === a ) {
+ return true;
+ }
+ }
+ }
+ return false;
+ };
+
+ /* Sorting
+ ---------------------------------------------------------------------- */
+
+ // Document order sorting
+ sortOrder = hasCompare ?
+ function( a, b ) {
+
+ // Flag for duplicate removal
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ // Sort on method existence if only one input has compareDocumentPosition
+ var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+ if ( compare ) {
+ return compare;
+ }
+
+ // Calculate position if both inputs belong to the same document
+ compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+ a.compareDocumentPosition( b ) :
+
+ // Otherwise we know they are disconnected
+ 1;
+
+ // Disconnected nodes
+ if ( compare & 1 ||
+ (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
+
+ // Choose the first element that is related to our preferred document
+ if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
+ return -1;
+ }
+ if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
+ return 1;
+ }
+
+ // Maintain original order
+ return sortInput ?
+ ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+ 0;
+ }
+
+ return compare & 4 ? -1 : 1;
+ } :
+ function( a, b ) {
+ // Exit early if the nodes are identical
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ var cur,
+ i = 0,
+ aup = a.parentNode,
+ bup = b.parentNode,
+ ap = [ a ],
+ bp = [ b ];
+
+ // Parentless nodes are either documents or disconnected
+ if ( !aup || !bup ) {
+ return a === doc ? -1 :
+ b === doc ? 1 :
+ aup ? -1 :
+ bup ? 1 :
+ sortInput ?
+ ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+ 0;
+
+ // If the nodes are siblings, we can do a quick check
+ } else if ( aup === bup ) {
+ return siblingCheck( a, b );
+ }
+
+ // Otherwise we need full lists of their ancestors for comparison
+ cur = a;
+ while ( (cur = cur.parentNode) ) {
+ ap.unshift( cur );
+ }
+ cur = b;
+ while ( (cur = cur.parentNode) ) {
+ bp.unshift( cur );
+ }
+
+ // Walk down the tree looking for a discrepancy
+ while ( ap[i] === bp[i] ) {
+ i++;
+ }
+
+ return i ?
+ // Do a sibling check if the nodes have a common ancestor
+ siblingCheck( ap[i], bp[i] ) :
+
+ // Otherwise nodes in our document sort first
+ ap[i] === preferredDoc ? -1 :
+ bp[i] === preferredDoc ? 1 :
+ 0;
+ };
+
+ return doc;
+};
+
+Sizzle.matches = function( expr, elements ) {
+ return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+ // Set document vars if needed
+ if ( ( elem.ownerDocument || elem ) !== document ) {
+ setDocument( elem );
+ }
+
+ // Make sure that attribute selectors are quoted
+ expr = expr.replace( rattributeQuotes, "='$1']" );
+
+ if ( support.matchesSelector && documentIsHTML &&
+ ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+ ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
+
+ try {
+ var ret = matches.call( elem, expr );
+
+ // IE 9's matchesSelector returns false on disconnected nodes
+ if ( ret || support.disconnectedMatch ||
+ // As well, disconnected nodes are said to be in a document
+ // fragment in IE 9
+ elem.document && elem.document.nodeType !== 11 ) {
+ return ret;
+ }
+ } catch (e) {}
+ }
+
+ return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+ // Set document vars if needed
+ if ( ( context.ownerDocument || context ) !== document ) {
+ setDocument( context );
+ }
+ return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+ // Set document vars if needed
+ if ( ( elem.ownerDocument || elem ) !== document ) {
+ setDocument( elem );
+ }
+
+ var fn = Expr.attrHandle[ name.toLowerCase() ],
+ // Don't get fooled by Object.prototype properties (jQuery #13807)
+ val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+ fn( elem, name, !documentIsHTML ) :
+ undefined;
+
+ return val !== undefined ?
+ val :
+ support.attributes || !documentIsHTML ?
+ elem.getAttribute( name ) :
+ (val = elem.getAttributeNode(name)) && val.specified ?
+ val.value :
+ null;
+};
+
+Sizzle.error = function( msg ) {
+ throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+ var elem,
+ duplicates = [],
+ j = 0,
+ i = 0;
+
+ // Unless we *know* we can detect duplicates, assume their presence
+ hasDuplicate = !support.detectDuplicates;
+ sortInput = !support.sortStable && results.slice( 0 );
+ results.sort( sortOrder );
+
+ if ( hasDuplicate ) {
+ while ( (elem = results[i++]) ) {
+ if ( elem === results[ i ] ) {
+ j = duplicates.push( i );
+ }
+ }
+ while ( j-- ) {
+ results.splice( duplicates[ j ], 1 );
+ }
+ }
+
+ // Clear input after sorting to release objects
+ // See https://github.com/jquery/sizzle/pull/225
+ sortInput = null;
+
+ return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+ var node,
+ ret = "",
+ i = 0,
+ nodeType = elem.nodeType;
+
+ if ( !nodeType ) {
+ // If no nodeType, this is expected to be an array
+ while ( (node = elem[i++]) ) {
+ // Do not traverse comment nodes
+ ret += getText( node );
+ }
+ } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+ // Use textContent for elements
+ // innerText usage removed for consistency of new lines (jQuery #11153)
+ if ( typeof elem.textContent === "string" ) {
+ return elem.textContent;
+ } else {
+ // Traverse its children
+ for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+ ret += getText( elem );
+ }
+ }
+ } else if ( nodeType === 3 || nodeType === 4 ) {
+ return elem.nodeValue;
+ }
+ // Do not include comment or processing instruction nodes
+
+ return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+ // Can be adjusted by the user
+ cacheLength: 50,
+
+ createPseudo: markFunction,
+
+ match: matchExpr,
+
+ attrHandle: {},
+
+ find: {},
+
+ relative: {
+ ">": { dir: "parentNode", first: true },
+ " ": { dir: "parentNode" },
+ "+": { dir: "previousSibling", first: true },
+ "~": { dir: "previousSibling" }
+ },
+
+ preFilter: {
+ "ATTR": function( match ) {
+ match[1] = match[1].replace( runescape, funescape );
+
+ // Move the given value to match[3] whether quoted or unquoted
+ match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
+
+ if ( match[2] === "~=" ) {
+ match[3] = " " + match[3] + " ";
+ }
+
+ return match.slice( 0, 4 );
+ },
+
+ "CHILD": function( match ) {
+ /* matches from matchExpr["CHILD"]
+ 1 type (only|nth|...)
+ 2 what (child|of-type)
+ 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+ 4 xn-component of xn+y argument ([+-]?\d*n|)
+ 5 sign of xn-component
+ 6 x of xn-component
+ 7 sign of y-component
+ 8 y of y-component
+ */
+ match[1] = match[1].toLowerCase();
+
+ if ( match[1].slice( 0, 3 ) === "nth" ) {
+ // nth-* requires argument
+ if ( !match[3] ) {
+ Sizzle.error( match[0] );
+ }
+
+ // numeric x and y parameters for Expr.filter.CHILD
+ // remember that false/true cast respectively to 0/1
+ match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+ match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+ // other types prohibit arguments
+ } else if ( match[3] ) {
+ Sizzle.error( match[0] );
+ }
+
+ return match;
+ },
+
+ "PSEUDO": function( match ) {
+ var excess,
+ unquoted = !match[6] && match[2];
+
+ if ( matchExpr["CHILD"].test( match[0] ) ) {
+ return null;
+ }
+
+ // Accept quoted arguments as-is
+ if ( match[3] ) {
+ match[2] = match[4] || match[5] || "";
+
+ // Strip excess characters from unquoted arguments
+ } else if ( unquoted && rpseudo.test( unquoted ) &&
+ // Get excess from tokenize (recursively)
+ (excess = tokenize( unquoted, true )) &&
+ // advance to the next closing parenthesis
+ (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+ // excess is a negative index
+ match[0] = match[0].slice( 0, excess );
+ match[2] = unquoted.slice( 0, excess );
+ }
+
+ // Return only captures needed by the pseudo filter method (type and argument)
+ return match.slice( 0, 3 );
+ }
+ },
+
+ filter: {
+
+ "TAG": function( nodeNameSelector ) {
+ var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+ return nodeNameSelector === "*" ?
+ function() { return true; } :
+ function( elem ) {
+ return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+ };
+ },
+
+ "CLASS": function( className ) {
+ var pattern = classCache[ className + " " ];
+
+ return pattern ||
+ (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+ classCache( className, function( elem ) {
+ return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
+ });
+ },
+
+ "ATTR": function( name, operator, check ) {
+ return function( elem ) {
+ var result = Sizzle.attr( elem, name );
+
+ if ( result == null ) {
+ return operator === "!=";
+ }
+ if ( !operator ) {
+ return true;
+ }
+
+ result += "";
+
+ return operator === "=" ? result === check :
+ operator === "!=" ? result !== check :
+ operator === "^=" ? check && result.indexOf( check ) === 0 :
+ operator === "*=" ? check && result.indexOf( check ) > -1 :
+ operator === "$=" ? check && result.slice( -check.length ) === check :
+ operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
+ operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+ false;
+ };
+ },
+
+ "CHILD": function( type, what, argument, first, last ) {
+ var simple = type.slice( 0, 3 ) !== "nth",
+ forward = type.slice( -4 ) !== "last",
+ ofType = what === "of-type";
+
+ return first === 1 && last === 0 ?
+
+ // Shortcut for :nth-*(n)
+ function( elem ) {
+ return !!elem.parentNode;
+ } :
+
+ function( elem, context, xml ) {
+ var cache, outerCache, node, diff, nodeIndex, start,
+ dir = simple !== forward ? "nextSibling" : "previousSibling",
+ parent = elem.parentNode,
+ name = ofType && elem.nodeName.toLowerCase(),
+ useCache = !xml && !ofType;
+
+ if ( parent ) {
+
+ // :(first|last|only)-(child|of-type)
+ if ( simple ) {
+ while ( dir ) {
+ node = elem;
+ while ( (node = node[ dir ]) ) {
+ if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
+ return false;
+ }
+ }
+ // Reverse direction for :only-* (if we haven't yet done so)
+ start = dir = type === "only" && !start && "nextSibling";
+ }
+ return true;
+ }
+
+ start = [ forward ? parent.firstChild : parent.lastChild ];
+
+ // non-xml :nth-child(...) stores cache data on `parent`
+ if ( forward && useCache ) {
+ // Seek `elem` from a previously-cached index
+ outerCache = parent[ expando ] || (parent[ expando ] = {});
+ cache = outerCache[ type ] || [];
+ nodeIndex = cache[0] === dirruns && cache[1];
+ diff = cache[0] === dirruns && cache[2];
+ node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+ while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+ // Fallback to seeking `elem` from the start
+ (diff = nodeIndex = 0) || start.pop()) ) {
+
+ // When found, cache indexes on `parent` and break
+ if ( node.nodeType === 1 && ++diff && node === elem ) {
+ outerCache[ type ] = [ dirruns, nodeIndex, diff ];
+ break;
+ }
+ }
+
+ // Use previously-cached element index if available
+ } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
+ diff = cache[1];
+
+ // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
+ } else {
+ // Use the same loop as above to seek `elem` from the start
+ while ( (node = ++nodeIndex && node && node[ dir ] ||
+ (diff = nodeIndex = 0) || start.pop()) ) {
+
+ if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
+ // Cache the index of each encountered element
+ if ( useCache ) {
+ (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
+ }
+
+ if ( node === elem ) {
+ break;
+ }
+ }
+ }
+ }
+
+ // Incorporate the offset, then check against cycle size
+ diff -= last;
+ return diff === first || ( diff % first === 0 && diff / first >= 0 );
+ }
+ };
+ },
+
+ "PSEUDO": function( pseudo, argument ) {
+ // pseudo-class names are case-insensitive
+ // http://www.w3.org/TR/selectors/#pseudo-classes
+ // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+ // Remember that setFilters inherits from pseudos
+ var args,
+ fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+ Sizzle.error( "unsupported pseudo: " + pseudo );
+
+ // The user may use createPseudo to indicate that
+ // arguments are needed to create the filter function
+ // just as Sizzle does
+ if ( fn[ expando ] ) {
+ return fn( argument );
+ }
+
+ // But maintain support for old signatures
+ if ( fn.length > 1 ) {
+ args = [ pseudo, pseudo, "", argument ];
+ return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+ markFunction(function( seed, matches ) {
+ var idx,
+ matched = fn( seed, argument ),
+ i = matched.length;
+ while ( i-- ) {
+ idx = indexOf( seed, matched[i] );
+ seed[ idx ] = !( matches[ idx ] = matched[i] );
+ }
+ }) :
+ function( elem ) {
+ return fn( elem, 0, args );
+ };
+ }
+
+ return fn;
+ }
+ },
+
+ pseudos: {
+ // Potentially complex pseudos
+ "not": markFunction(function( selector ) {
+ // Trim the selector passed to compile
+ // to avoid treating leading and trailing
+ // spaces as combinators
+ var input = [],
+ results = [],
+ matcher = compile( selector.replace( rtrim, "$1" ) );
+
+ return matcher[ expando ] ?
+ markFunction(function( seed, matches, context, xml ) {
+ var elem,
+ unmatched = matcher( seed, null, xml, [] ),
+ i = seed.length;
+
+ // Match elements unmatched by `matcher`
+ while ( i-- ) {
+ if ( (elem = unmatched[i]) ) {
+ seed[i] = !(matches[i] = elem);
+ }
+ }
+ }) :
+ function( elem, context, xml ) {
+ input[0] = elem;
+ matcher( input, null, xml, results );
+ // Don't keep the element (issue #299)
+ input[0] = null;
+ return !results.pop();
+ };
+ }),
+
+ "has": markFunction(function( selector ) {
+ return function( elem ) {
+ return Sizzle( selector, elem ).length > 0;
+ };
+ }),
+
+ "contains": markFunction(function( text ) {
+ text = text.replace( runescape, funescape );
+ return function( elem ) {
+ return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+ };
+ }),
+
+ // "Whether an element is represented by a :lang() selector
+ // is based solely on the element's language value
+ // being equal to the identifier C,
+ // or beginning with the identifier C immediately followed by "-".
+ // The matching of C against the element's language value is performed case-insensitively.
+ // The identifier C does not have to be a valid language name."
+ // http://www.w3.org/TR/selectors/#lang-pseudo
+ "lang": markFunction( function( lang ) {
+ // lang value must be a valid identifier
+ if ( !ridentifier.test(lang || "") ) {
+ Sizzle.error( "unsupported lang: " + lang );
+ }
+ lang = lang.replace( runescape, funescape ).toLowerCase();
+ return function( elem ) {
+ var elemLang;
+ do {
+ if ( (elemLang = documentIsHTML ?
+ elem.lang :
+ elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
+
+ elemLang = elemLang.toLowerCase();
+ return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+ }
+ } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+ return false;
+ };
+ }),
+
+ // Miscellaneous
+ "target": function( elem ) {
+ var hash = window.location && window.location.hash;
+ return hash && hash.slice( 1 ) === elem.id;
+ },
+
+ "root": function( elem ) {
+ return elem === docElem;
+ },
+
+ "focus": function( elem ) {
+ return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+ },
+
+ // Boolean properties
+ "enabled": function( elem ) {
+ return elem.disabled === false;
+ },
+
+ "disabled": function( elem ) {
+ return elem.disabled === true;
+ },
+
+ "checked": function( elem ) {
+ // In CSS3, :checked should return both checked and selected elements
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+ var nodeName = elem.nodeName.toLowerCase();
+ return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+ },
+
+ "selected": function( elem ) {
+ // Accessing this property makes selected-by-default
+ // options in Safari work properly
+ if ( elem.parentNode ) {
+ elem.parentNode.selectedIndex;
+ }
+
+ return elem.selected === true;
+ },
+
+ // Contents
+ "empty": function( elem ) {
+ // http://www.w3.org/TR/selectors/#empty-pseudo
+ // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+ // but not by others (comment: 8; processing instruction: 7; etc.)
+ // nodeType < 6 works because attributes (2) do not appear as children
+ for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+ if ( elem.nodeType < 6 ) {
+ return false;
+ }
+ }
+ return true;
+ },
+
+ "parent": function( elem ) {
+ return !Expr.pseudos["empty"]( elem );
+ },
+
+ // Element/input types
+ "header": function( elem ) {
+ return rheader.test( elem.nodeName );
+ },
+
+ "input": function( elem ) {
+ return rinputs.test( elem.nodeName );
+ },
+
+ "button": function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && elem.type === "button" || name === "button";
+ },
+
+ "text": function( elem ) {
+ var attr;
+ return elem.nodeName.toLowerCase() === "input" &&
+ elem.type === "text" &&
+
+ // Support: IE<8
+ // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+ ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
+ },
+
+ // Position-in-collection
+ "first": createPositionalPseudo(function() {
+ return [ 0 ];
+ }),
+
+ "last": createPositionalPseudo(function( matchIndexes, length ) {
+ return [ length - 1 ];
+ }),
+
+ "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ return [ argument < 0 ? argument + length : argument ];
+ }),
+
+ "even": createPositionalPseudo(function( matchIndexes, length ) {
+ var i = 0;
+ for ( ; i < length; i += 2 ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "odd": createPositionalPseudo(function( matchIndexes, length ) {
+ var i = 1;
+ for ( ; i < length; i += 2 ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ var i = argument < 0 ? argument + length : argument;
+ for ( ; --i >= 0; ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ var i = argument < 0 ? argument + length : argument;
+ for ( ; ++i < length; ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ })
+ }
+};
+
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+ Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+ Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+ var matched, match, tokens, type,
+ soFar, groups, preFilters,
+ cached = tokenCache[ selector + " " ];
+
+ if ( cached ) {
+ return parseOnly ? 0 : cached.slice( 0 );
+ }
+
+ soFar = selector;
+ groups = [];
+ preFilters = Expr.preFilter;
+
+ while ( soFar ) {
+
+ // Comma and first run
+ if ( !matched || (match = rcomma.exec( soFar )) ) {
+ if ( match ) {
+ // Don't consume trailing commas as valid
+ soFar = soFar.slice( match[0].length ) || soFar;
+ }
+ groups.push( (tokens = []) );
+ }
+
+ matched = false;
+
+ // Combinators
+ if ( (match = rcombinators.exec( soFar )) ) {
+ matched = match.shift();
+ tokens.push({
+ value: matched,
+ // Cast descendant combinators to space
+ type: match[0].replace( rtrim, " " )
+ });
+ soFar = soFar.slice( matched.length );
+ }
+
+ // Filters
+ for ( type in Expr.filter ) {
+ if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+ (match = preFilters[ type ]( match ))) ) {
+ matched = match.shift();
+ tokens.push({
+ value: matched,
+ type: type,
+ matches: match
+ });
+ soFar = soFar.slice( matched.length );
+ }
+ }
+
+ if ( !matched ) {
+ break;
+ }
+ }
+
+ // Return the length of the invalid excess
+ // if we're just parsing
+ // Otherwise, throw an error or return tokens
+ return parseOnly ?
+ soFar.length :
+ soFar ?
+ Sizzle.error( selector ) :
+ // Cache the tokens
+ tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+ var i = 0,
+ len = tokens.length,
+ selector = "";
+ for ( ; i < len; i++ ) {
+ selector += tokens[i].value;
+ }
+ return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+ var dir = combinator.dir,
+ checkNonElements = base && dir === "parentNode",
+ doneName = done++;
+
+ return combinator.first ?
+ // Check against closest ancestor/preceding element
+ function( elem, context, xml ) {
+ while ( (elem = elem[ dir ]) ) {
+ if ( elem.nodeType === 1 || checkNonElements ) {
+ return matcher( elem, context, xml );
+ }
+ }
+ } :
+
+ // Check against all ancestor/preceding elements
+ function( elem, context, xml ) {
+ var oldCache, outerCache,
+ newCache = [ dirruns, doneName ];
+
+ // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
+ if ( xml ) {
+ while ( (elem = elem[ dir ]) ) {
+ if ( elem.nodeType === 1 || checkNonElements ) {
+ if ( matcher( elem, context, xml ) ) {
+ return true;
+ }
+ }
+ }
+ } else {
+ while ( (elem = elem[ dir ]) ) {
+ if ( elem.nodeType === 1 || checkNonElements ) {
+ outerCache = elem[ expando ] || (elem[ expando ] = {});
+ if ( (oldCache = outerCache[ dir ]) &&
+ oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+ // Assign to newCache so results back-propagate to previous elements
+ return (newCache[ 2 ] = oldCache[ 2 ]);
+ } else {
+ // Reuse newcache so results back-propagate to previous elements
+ outerCache[ dir ] = newCache;
+
+ // A match means we're done; a fail means we have to keep checking
+ if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ };
+}
+
+function elementMatcher( matchers ) {
+ return matchers.length > 1 ?
+ function( elem, context, xml ) {
+ var i = matchers.length;
+ while ( i-- ) {
+ if ( !matchers[i]( elem, context, xml ) ) {
+ return false;
+ }
+ }
+ return true;
+ } :
+ matchers[0];
+}
+
+function multipleContexts( selector, contexts, results ) {
+ var i = 0,
+ len = contexts.length;
+ for ( ; i < len; i++ ) {
+ Sizzle( selector, contexts[i], results );
+ }
+ return results;
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+ var elem,
+ newUnmatched = [],
+ i = 0,
+ len = unmatched.length,
+ mapped = map != null;
+
+ for ( ; i < len; i++ ) {
+ if ( (elem = unmatched[i]) ) {
+ if ( !filter || filter( elem, context, xml ) ) {
+ newUnmatched.push( elem );
+ if ( mapped ) {
+ map.push( i );
+ }
+ }
+ }
+ }
+
+ return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+ if ( postFilter && !postFilter[ expando ] ) {
+ postFilter = setMatcher( postFilter );
+ }
+ if ( postFinder && !postFinder[ expando ] ) {
+ postFinder = setMatcher( postFinder, postSelector );
+ }
+ return markFunction(function( seed, results, context, xml ) {
+ var temp, i, elem,
+ preMap = [],
+ postMap = [],
+ preexisting = results.length,
+
+ // Get initial elements from seed or context
+ elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+ // Prefilter to get matcher input, preserving a map for seed-results synchronization
+ matcherIn = preFilter && ( seed || !selector ) ?
+ condense( elems, preMap, preFilter, context, xml ) :
+ elems,
+
+ matcherOut = matcher ?
+ // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+ postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+ // ...intermediate processing is necessary
+ [] :
+
+ // ...otherwise use results directly
+ results :
+ matcherIn;
+
+ // Find primary matches
+ if ( matcher ) {
+ matcher( matcherIn, matcherOut, context, xml );
+ }
+
+ // Apply postFilter
+ if ( postFilter ) {
+ temp = condense( matcherOut, postMap );
+ postFilter( temp, [], context, xml );
+
+ // Un-match failing elements by moving them back to matcherIn
+ i = temp.length;
+ while ( i-- ) {
+ if ( (elem = temp[i]) ) {
+ matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+ }
+ }
+ }
+
+ if ( seed ) {
+ if ( postFinder || preFilter ) {
+ if ( postFinder ) {
+ // Get the final matcherOut by condensing this intermediate into postFinder contexts
+ temp = [];
+ i = matcherOut.length;
+ while ( i-- ) {
+ if ( (elem = matcherOut[i]) ) {
+ // Restore matcherIn since elem is not yet a final match
+ temp.push( (matcherIn[i] = elem) );
+ }
+ }
+ postFinder( null, (matcherOut = []), temp, xml );
+ }
+
+ // Move matched elements from seed to results to keep them synchronized
+ i = matcherOut.length;
+ while ( i-- ) {
+ if ( (elem = matcherOut[i]) &&
+ (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
+
+ seed[temp] = !(results[temp] = elem);
+ }
+ }
+ }
+
+ // Add elements to results, through postFinder if defined
+ } else {
+ matcherOut = condense(
+ matcherOut === results ?
+ matcherOut.splice( preexisting, matcherOut.length ) :
+ matcherOut
+ );
+ if ( postFinder ) {
+ postFinder( null, results, matcherOut, xml );
+ } else {
+ push.apply( results, matcherOut );
+ }
+ }
+ });
+}
+
+function matcherFromTokens( tokens ) {
+ var checkContext, matcher, j,
+ len = tokens.length,
+ leadingRelative = Expr.relative[ tokens[0].type ],
+ implicitRelative = leadingRelative || Expr.relative[" "],
+ i = leadingRelative ? 1 : 0,
+
+ // The foundational matcher ensures that elements are reachable from top-level context(s)
+ matchContext = addCombinator( function( elem ) {
+ return elem === checkContext;
+ }, implicitRelative, true ),
+ matchAnyContext = addCombinator( function( elem ) {
+ return indexOf( checkContext, elem ) > -1;
+ }, implicitRelative, true ),
+ matchers = [ function( elem, context, xml ) {
+ var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+ (checkContext = context).nodeType ?
+ matchContext( elem, context, xml ) :
+ matchAnyContext( elem, context, xml ) );
+ // Avoid hanging onto element (issue #299)
+ checkContext = null;
+ return ret;
+ } ];
+
+ for ( ; i < len; i++ ) {
+ if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+ matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+ } else {
+ matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+ // Return special upon seeing a positional matcher
+ if ( matcher[ expando ] ) {
+ // Find the next relative operator (if any) for proper handling
+ j = ++i;
+ for ( ; j < len; j++ ) {
+ if ( Expr.relative[ tokens[j].type ] ) {
+ break;
+ }
+ }
+ return setMatcher(
+ i > 1 && elementMatcher( matchers ),
+ i > 1 && toSelector(
+ // If the preceding token was a descendant combinator, insert an implicit any-element `*`
+ tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
+ ).replace( rtrim, "$1" ),
+ matcher,
+ i < j && matcherFromTokens( tokens.slice( i, j ) ),
+ j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+ j < len && toSelector( tokens )
+ );
+ }
+ matchers.push( matcher );
+ }
+ }
+
+ return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+ var bySet = setMatchers.length > 0,
+ byElement = elementMatchers.length > 0,
+ superMatcher = function( seed, context, xml, results, outermost ) {
+ var elem, j, matcher,
+ matchedCount = 0,
+ i = "0",
+ unmatched = seed && [],
+ setMatched = [],
+ contextBackup = outermostContext,
+ // We must always have either seed elements or outermost context
+ elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
+ // Use integer dirruns iff this is the outermost matcher
+ dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
+ len = elems.length;
+
+ if ( outermost ) {
+ outermostContext = context !== document && context;
+ }
+
+ // Add elements passing elementMatchers directly to results
+ // Keep `i` a string if there are no elements so `matchedCount` will be "00" below
+ // Support: IE<9, Safari
+ // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+ for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
+ if ( byElement && elem ) {
+ j = 0;
+ while ( (matcher = elementMatchers[j++]) ) {
+ if ( matcher( elem, context, xml ) ) {
+ results.push( elem );
+ break;
+ }
+ }
+ if ( outermost ) {
+ dirruns = dirrunsUnique;
+ }
+ }
+
+ // Track unmatched elements for set filters
+ if ( bySet ) {
+ // They will have gone through all possible matchers
+ if ( (elem = !matcher && elem) ) {
+ matchedCount--;
+ }
+
+ // Lengthen the array for every element, matched or not
+ if ( seed ) {
+ unmatched.push( elem );
+ }
+ }
+ }
+
+ // Apply set filters to unmatched elements
+ matchedCount += i;
+ if ( bySet && i !== matchedCount ) {
+ j = 0;
+ while ( (matcher = setMatchers[j++]) ) {
+ matcher( unmatched, setMatched, context, xml );
+ }
+
+ if ( seed ) {
+ // Reintegrate element matches to eliminate the need for sorting
+ if ( matchedCount > 0 ) {
+ while ( i-- ) {
+ if ( !(unmatched[i] || setMatched[i]) ) {
+ setMatched[i] = pop.call( results );
+ }
+ }
+ }
+
+ // Discard index placeholder values to get only actual matches
+ setMatched = condense( setMatched );
+ }
+
+ // Add matches to results
+ push.apply( results, setMatched );
+
+ // Seedless set matches succeeding multiple successful matchers stipulate sorting
+ if ( outermost && !seed && setMatched.length > 0 &&
+ ( matchedCount + setMatchers.length ) > 1 ) {
+
+ Sizzle.uniqueSort( results );
+ }
+ }
+
+ // Override manipulation of globals by nested matchers
+ if ( outermost ) {
+ dirruns = dirrunsUnique;
+ outermostContext = contextBackup;
+ }
+
+ return unmatched;
+ };
+
+ return bySet ?
+ markFunction( superMatcher ) :
+ superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
+ var i,
+ setMatchers = [],
+ elementMatchers = [],
+ cached = compilerCache[ selector + " " ];
+
+ if ( !cached ) {
+ // Generate a function of recursive functions that can be used to check each element
+ if ( !match ) {
+ match = tokenize( selector );
+ }
+ i = match.length;
+ while ( i-- ) {
+ cached = matcherFromTokens( match[i] );
+ if ( cached[ expando ] ) {
+ setMatchers.push( cached );
+ } else {
+ elementMatchers.push( cached );
+ }
+ }
+
+ // Cache the compiled function
+ cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+
+ // Save selector and tokenization
+ cached.selector = selector;
+ }
+ return cached;
+};
+
+/**
+ * A low-level selection function that works with Sizzle's compiled
+ * selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ * selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
+ var i, tokens, token, type, find,
+ compiled = typeof selector === "function" && selector,
+ match = !seed && tokenize( (selector = compiled.selector || selector) );
+
+ results = results || [];
+
+ // Try to minimize operations if there is no seed and only one group
+ if ( match.length === 1 ) {
+
+ // Take a shortcut and set the context if the root selector is an ID
+ tokens = match[0] = match[0].slice( 0 );
+ if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+ support.getById && context.nodeType === 9 && documentIsHTML &&
+ Expr.relative[ tokens[1].type ] ) {
+
+ context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
+ if ( !context ) {
+ return results;
+
+ // Precompiled matchers will still verify ancestry, so step up a level
+ } else if ( compiled ) {
+ context = context.parentNode;
+ }
+
+ selector = selector.slice( tokens.shift().value.length );
+ }
+
+ // Fetch a seed set for right-to-left matching
+ i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+ while ( i-- ) {
+ token = tokens[i];
+
+ // Abort if we hit a combinator
+ if ( Expr.relative[ (type = token.type) ] ) {
+ break;
+ }
+ if ( (find = Expr.find[ type ]) ) {
+ // Search, expanding context for leading sibling combinators
+ if ( (seed = find(
+ token.matches[0].replace( runescape, funescape ),
+ rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
+ )) ) {
+
+ // If seed is empty or no tokens remain, we can return early
+ tokens.splice( i, 1 );
+ selector = seed.length && toSelector( tokens );
+ if ( !selector ) {
+ push.apply( results, seed );
+ return results;
+ }
+
+ break;
+ }
+ }
+ }
+ }
+
+ // Compile and execute a filtering function if one is not provided
+ // Provide `match` to avoid retokenization if we modified the selector above
+ ( compiled || compile( selector, match ) )(
+ seed,
+ context,
+ !documentIsHTML,
+ results,
+ rsibling.test( selector ) && testContext( context.parentNode ) || context
+ );
+ return results;
+};
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
+
+// Support: Chrome 14-35+
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert(function( div1 ) {
+ // Should return 1, but returns 4 (following)
+ return div1.compareDocumentPosition( document.createElement("div") ) & 1;
+});
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert(function( div ) {
+ div.innerHTML = "<a href='#'></a>";
+ return div.firstChild.getAttribute("href") === "#" ;
+}) ) {
+ addHandle( "type|href|height|width", function( elem, name, isXML ) {
+ if ( !isXML ) {
+ return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+ }
+ });
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert(function( div ) {
+ div.innerHTML = "<input/>";
+ div.firstChild.setAttribute( "value", "" );
+ return div.firstChild.getAttribute( "value" ) === "";
+}) ) {
+ addHandle( "value", function( elem, name, isXML ) {
+ if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+ return elem.defaultValue;
+ }
+ });
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert(function( div ) {
+ return div.getAttribute("disabled") == null;
+}) ) {
+ addHandle( booleans, function( elem, name, isXML ) {
+ var val;
+ if ( !isXML ) {
+ return elem[ name ] === true ? name.toLowerCase() :
+ (val = elem.getAttributeNode( name )) && val.specified ?
+ val.value :
+ null;
+ }
+ });
+}
+
+return Sizzle;
+
+})( window );
+
+
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.pseudos;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
+
+
+
+var risSimple = /^.[^:#\[\.,]*$/;
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+ if ( jQuery.isFunction( qualifier ) ) {
+ return jQuery.grep( elements, function( elem, i ) {
+ /* jshint -W018 */
+ return !!qualifier.call( elem, i, elem ) !== not;
+ });
+
+ }
+
+ if ( qualifier.nodeType ) {
+ return jQuery.grep( elements, function( elem ) {
+ return ( elem === qualifier ) !== not;
+ });
+
+ }
+
+ if ( typeof qualifier === "string" ) {
+ if ( risSimple.test( qualifier ) ) {
+ return jQuery.filter( qualifier, elements, not );
+ }
+
+ qualifier = jQuery.filter( qualifier, elements );
+ }
+
+ return jQuery.grep( elements, function( elem ) {
+ return ( indexOf.call( qualifier, elem ) >= 0 ) !== not;
+ });
+}
+
+jQuery.filter = function( expr, elems, not ) {
+ var elem = elems[ 0 ];
+
+ if ( not ) {
+ expr = ":not(" + expr + ")";
+ }
+
+ return elems.length === 1 && elem.nodeType === 1 ?
+ jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
+ jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+ return elem.nodeType === 1;
+ }));
+};
+
+jQuery.fn.extend({
+ find: function( selector ) {
+ var i,
+ len = this.length,
+ ret = [],
+ self = this;
+
+ if ( typeof selector !== "string" ) {
+ return this.pushStack( jQuery( selector ).filter(function() {
+ for ( i = 0; i < len; i++ ) {
+ if ( jQuery.contains( self[ i ], this ) ) {
+ return true;
+ }
+ }
+ }) );
+ }
+
+ for ( i = 0; i < len; i++ ) {
+ jQuery.find( selector, self[ i ], ret );
+ }
+
+ // Needed because $( selector, context ) becomes $( context ).find( selector )
+ ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
+ ret.selector = this.selector ? this.selector + " " + selector : selector;
+ return ret;
+ },
+ filter: function( selector ) {
+ return this.pushStack( winnow(this, selector || [], false) );
+ },
+ not: function( selector ) {
+ return this.pushStack( winnow(this, selector || [], true) );
+ },
+ is: function( selector ) {
+ return !!winnow(
+ this,
+
+ // If this is a positional/relative selector, check membership in the returned set
+ // so $("p:first").is("p:last") won't return true for a doc with two "p".
+ typeof selector === "string" && rneedsContext.test( selector ) ?
+ jQuery( selector ) :
+ selector || [],
+ false
+ ).length;
+ }
+});
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+var rootjQuery,
+
+ // A simple way to check for HTML strings
+ // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+ // Strict HTML recognition (#11290: must start with <)
+ rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+
+ init = jQuery.fn.init = function( selector, context ) {
+ var match, elem;
+
+ // HANDLE: $(""), $(null), $(undefined), $(false)
+ if ( !selector ) {
+ return this;
+ }
+
+ // Handle HTML strings
+ if ( typeof selector === "string" ) {
+ if ( selector[0] === "<" && selector[ selector.length - 1 ] === ">" && selector.length >= 3 ) {
+ // Assume that strings that start and end with <> are HTML and skip the regex check
+ match = [ null, selector, null ];
+
+ } else {
+ match = rquickExpr.exec( selector );
+ }
+
+ // Match html or make sure no context is specified for #id
+ if ( match && (match[1] || !context) ) {
+
+ // HANDLE: $(html) -> $(array)
+ if ( match[1] ) {
+ context = context instanceof jQuery ? context[0] : context;
+
+ // Option to run scripts is true for back-compat
+ // Intentionally let the error be thrown if parseHTML is not present
+ jQuery.merge( this, jQuery.parseHTML(
+ match[1],
+ context && context.nodeType ? context.ownerDocument || context : document,
+ true
+ ) );
+
+ // HANDLE: $(html, props)
+ if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
+ for ( match in context ) {
+ // Properties of context are called as methods if possible
+ if ( jQuery.isFunction( this[ match ] ) ) {
+ this[ match ]( context[ match ] );
+
+ // ...and otherwise set as attributes
+ } else {
+ this.attr( match, context[ match ] );
+ }
+ }
+ }
+
+ return this;
+
+ // HANDLE: $(#id)
+ } else {
+ elem = document.getElementById( match[2] );
+
+ // Support: Blackberry 4.6
+ // gEBID returns nodes no longer in the document (#6963)
+ if ( elem && elem.parentNode ) {
+ // Inject the element directly into the jQuery object
+ this.length = 1;
+ this[0] = elem;
+ }
+
+ this.context = document;
+ this.selector = selector;
+ return this;
+ }
+
+ // HANDLE: $(expr, $(...))
+ } else if ( !context || context.jquery ) {
+ return ( context || rootjQuery ).find( selector );
+
+ // HANDLE: $(expr, context)
+ // (which is just equivalent to: $(context).find(expr)
+ } else {
+ return this.constructor( context ).find( selector );
+ }
+
+ // HANDLE: $(DOMElement)
+ } else if ( selector.nodeType ) {
+ this.context = this[0] = selector;
+ this.length = 1;
+ return this;
+
+ // HANDLE: $(function)
+ // Shortcut for document ready
+ } else if ( jQuery.isFunction( selector ) ) {
+ return typeof rootjQuery.ready !== "undefined" ?
+ rootjQuery.ready( selector ) :
+ // Execute immediately if ready is not present
+ selector( jQuery );
+ }
+
+ if ( selector.selector !== undefined ) {
+ this.selector = selector.selector;
+ this.context = selector.context;
+ }
+
+ return jQuery.makeArray( selector, this );
+ };
+
+// Give the init function the jQuery prototype for later instantiation
+init.prototype = jQuery.fn;
+
+// Initialize central reference
+rootjQuery = jQuery( document );
+
+
+var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+ // Methods guaranteed to produce a unique set when starting from a unique set
+ guaranteedUnique = {
+ children: true,
+ contents: true,
+ next: true,
+ prev: true
+ };
+
+jQuery.extend({
+ dir: function( elem, dir, until ) {
+ var matched = [],
+ truncate = until !== undefined;
+
+ while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {
+ if ( elem.nodeType === 1 ) {
+ if ( truncate && jQuery( elem ).is( until ) ) {
+ break;
+ }
+ matched.push( elem );
+ }
+ }
+ return matched;
+ },
+
+ sibling: function( n, elem ) {
+ var matched = [];
+
+ for ( ; n; n = n.nextSibling ) {
+ if ( n.nodeType === 1 && n !== elem ) {
+ matched.push( n );
+ }
+ }
+
+ return matched;
+ }
+});
+
+jQuery.fn.extend({
+ has: function( target ) {
+ var targets = jQuery( target, this ),
+ l = targets.length;
+
+ return this.filter(function() {
+ var i = 0;
+ for ( ; i < l; i++ ) {
+ if ( jQuery.contains( this, targets[i] ) ) {
+ return true;
+ }
+ }
+ });
+ },
+
+ closest: function( selectors, context ) {
+ var cur,
+ i = 0,
+ l = this.length,
+ matched = [],
+ pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
+ jQuery( selectors, context || this.context ) :
+ 0;
+
+ for ( ; i < l; i++ ) {
+ for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
+ // Always skip document fragments
+ if ( cur.nodeType < 11 && (pos ?
+ pos.index(cur) > -1 :
+
+ // Don't pass non-elements to Sizzle
+ cur.nodeType === 1 &&
+ jQuery.find.matchesSelector(cur, selectors)) ) {
+
+ matched.push( cur );
+ break;
+ }
+ }
+ }
+
+ return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
+ },
+
+ // Determine the position of an element within the set
+ index: function( elem ) {
+
+ // No argument, return index in parent
+ if ( !elem ) {
+ return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+ }
+
+ // Index in selector
+ if ( typeof elem === "string" ) {
+ return indexOf.call( jQuery( elem ), this[ 0 ] );
+ }
+
+ // Locate the position of the desired element
+ return indexOf.call( this,
+
+ // If it receives a jQuery object, the first element is used
+ elem.jquery ? elem[ 0 ] : elem
+ );
+ },
+
+ add: function( selector, context ) {
+ return this.pushStack(
+ jQuery.unique(
+ jQuery.merge( this.get(), jQuery( selector, context ) )
+ )
+ );
+ },
+
+ addBack: function( selector ) {
+ return this.add( selector == null ?
+ this.prevObject : this.prevObject.filter(selector)
+ );
+ }
+});
+
+function sibling( cur, dir ) {
+ while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {}
+ return cur;
+}
+
+jQuery.each({
+ parent: function( elem ) {
+ var parent = elem.parentNode;
+ return parent && parent.nodeType !== 11 ? parent : null;
+ },
+ parents: function( elem ) {
+ return jQuery.dir( elem, "parentNode" );
+ },
+ parentsUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "parentNode", until );
+ },
+ next: function( elem ) {
+ return sibling( elem, "nextSibling" );
+ },
+ prev: function( elem ) {
+ return sibling( elem, "previousSibling" );
+ },
+ nextAll: function( elem ) {
+ return jQuery.dir( elem, "nextSibling" );
+ },
+ prevAll: function( elem ) {
+ return jQuery.dir( elem, "previousSibling" );
+ },
+ nextUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "nextSibling", until );
+ },
+ prevUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "previousSibling", until );
+ },
+ siblings: function( elem ) {
+ return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
+ },
+ children: function( elem ) {
+ return jQuery.sibling( elem.firstChild );
+ },
+ contents: function( elem ) {
+ return elem.contentDocument || jQuery.merge( [], elem.childNodes );
+ }
+}, function( name, fn ) {
+ jQuery.fn[ name ] = function( until, selector ) {
+ var matched = jQuery.map( this, fn, until );
+
+ if ( name.slice( -5 ) !== "Until" ) {
+ selector = until;
+ }
+
+ if ( selector && typeof selector === "string" ) {
+ matched = jQuery.filter( selector, matched );
+ }
+
+ if ( this.length > 1 ) {
+ // Remove duplicates
+ if ( !guaranteedUnique[ name ] ) {
+ jQuery.unique( matched );
+ }
+
+ // Reverse order for parents* and prev-derivatives
+ if ( rparentsprev.test( name ) ) {
+ matched.reverse();
+ }
+ }
+
+ return this.pushStack( matched );
+ };
+});
+var rnotwhite = (/\S+/g);
+
+
+
+// String to Object options format cache
+var optionsCache = {};
+
+// Convert String-formatted options into Object-formatted ones and store in cache
+function createOptions( options ) {
+ var object = optionsCache[ options ] = {};
+ jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
+ object[ flag ] = true;
+ });
+ return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ * options: an optional list of space-separated options that will change how
+ * the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ * once: will ensure the callback list can only be fired once (like a Deferred)
+ *
+ * memory: will keep track of previous values and will call any callback added
+ * after the list has been fired right away with the latest "memorized"
+ * values (like a Deferred)
+ *
+ * unique: will ensure a callback can only be added once (no duplicate in the list)
+ *
+ * stopOnFalse: interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+ // Convert options from String-formatted to Object-formatted if needed
+ // (we check in cache first)
+ options = typeof options === "string" ?
+ ( optionsCache[ options ] || createOptions( options ) ) :
+ jQuery.extend( {}, options );
+
+ var // Last fire value (for non-forgettable lists)
+ memory,
+ // Flag to know if list was already fired
+ fired,
+ // Flag to know if list is currently firing
+ firing,
+ // First callback to fire (used internally by add and fireWith)
+ firingStart,
+ // End of the loop when firing
+ firingLength,
+ // Index of currently firing callback (modified by remove if needed)
+ firingIndex,
+ // Actual callback list
+ list = [],
+ // Stack of fire calls for repeatable lists
+ stack = !options.once && [],
+ // Fire callbacks
+ fire = function( data ) {
+ memory = options.memory && data;
+ fired = true;
+ firingIndex = firingStart || 0;
+ firingStart = 0;
+ firingLength = list.length;
+ firing = true;
+ for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+ if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
+ memory = false; // To prevent further calls using add
+ break;
+ }
+ }
+ firing = false;
+ if ( list ) {
+ if ( stack ) {
+ if ( stack.length ) {
+ fire( stack.shift() );
+ }
+ } else if ( memory ) {
+ list = [];
+ } else {
+ self.disable();
+ }
+ }
+ },
+ // Actual Callbacks object
+ self = {
+ // Add a callback or a collection of callbacks to the list
+ add: function() {
+ if ( list ) {
+ // First, we save the current length
+ var start = list.length;
+ (function add( args ) {
+ jQuery.each( args, function( _, arg ) {
+ var type = jQuery.type( arg );
+ if ( type === "function" ) {
+ if ( !options.unique || !self.has( arg ) ) {
+ list.push( arg );
+ }
+ } else if ( arg && arg.length && type !== "string" ) {
+ // Inspect recursively
+ add( arg );
+ }
+ });
+ })( arguments );
+ // Do we need to add the callbacks to the
+ // current firing batch?
+ if ( firing ) {
+ firingLength = list.length;
+ // With memory, if we're not firing then
+ // we should call right away
+ } else if ( memory ) {
+ firingStart = start;
+ fire( memory );
+ }
+ }
+ return this;
+ },
+ // Remove a callback from the list
+ remove: function() {
+ if ( list ) {
+ jQuery.each( arguments, function( _, arg ) {
+ var index;
+ while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+ list.splice( index, 1 );
+ // Handle firing indexes
+ if ( firing ) {
+ if ( index <= firingLength ) {
+ firingLength--;
+ }
+ if ( index <= firingIndex ) {
+ firingIndex--;
+ }
+ }
+ }
+ });
+ }
+ return this;
+ },
+ // Check if a given callback is in the list.
+ // If no argument is given, return whether or not list has callbacks attached.
+ has: function( fn ) {
+ return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
+ },
+ // Remove all callbacks from the list
+ empty: function() {
+ list = [];
+ firingLength = 0;
+ return this;
+ },
+ // Have the list do nothing anymore
+ disable: function() {
+ list = stack = memory = undefined;
+ return this;
+ },
+ // Is it disabled?
+ disabled: function() {
+ return !list;
+ },
+ // Lock the list in its current state
+ lock: function() {
+ stack = undefined;
+ if ( !memory ) {
+ self.disable();
+ }
+ return this;
+ },
+ // Is it locked?
+ locked: function() {
+ return !stack;
+ },
+ // Call all callbacks with the given context and arguments
+ fireWith: function( context, args ) {
+ if ( list && ( !fired || stack ) ) {
+ args = args || [];
+ args = [ context, args.slice ? args.slice() : args ];
+ if ( firing ) {
+ stack.push( args );
+ } else {
+ fire( args );
+ }
+ }
+ return this;
+ },
+ // Call all the callbacks with the given arguments
+ fire: function() {
+ self.fireWith( this, arguments );
+ return this;
+ },
+ // To know if the callbacks have already been called at least once
+ fired: function() {
+ return !!fired;
+ }
+ };
+
+ return self;
+};
+
+
+jQuery.extend({
+
+ Deferred: function( func ) {
+ var tuples = [
+ // action, add listener, listener list, final state
+ [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
+ [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
+ [ "notify", "progress", jQuery.Callbacks("memory") ]
+ ],
+ state = "pending",
+ promise = {
+ state: function() {
+ return state;
+ },
+ always: function() {
+ deferred.done( arguments ).fail( arguments );
+ return this;
+ },
+ then: function( /* fnDone, fnFail, fnProgress */ ) {
+ var fns = arguments;
+ return jQuery.Deferred(function( newDefer ) {
+ jQuery.each( tuples, function( i, tuple ) {
+ var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
+ // deferred[ done | fail | progress ] for forwarding actions to newDefer
+ deferred[ tuple[1] ](function() {
+ var returned = fn && fn.apply( this, arguments );
+ if ( returned && jQuery.isFunction( returned.promise ) ) {
+ returned.promise()
+ .done( newDefer.resolve )
+ .fail( newDefer.reject )
+ .progress( newDefer.notify );
+ } else {
+ newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
+ }
+ });
+ });
+ fns = null;
+ }).promise();
+ },
+ // Get a promise for this deferred
+ // If obj is provided, the promise aspect is added to the object
+ promise: function( obj ) {
+ return obj != null ? jQuery.extend( obj, promise ) : promise;
+ }
+ },
+ deferred = {};
+
+ // Keep pipe for back-compat
+ promise.pipe = promise.then;
+
+ // Add list-specific methods
+ jQuery.each( tuples, function( i, tuple ) {
+ var list = tuple[ 2 ],
+ stateString = tuple[ 3 ];
+
+ // promise[ done | fail | progress ] = list.add
+ promise[ tuple[1] ] = list.add;
+
+ // Handle state
+ if ( stateString ) {
+ list.add(function() {
+ // state = [ resolved | rejected ]
+ state = stateString;
+
+ // [ reject_list | resolve_list ].disable; progress_list.lock
+ }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
+ }
+
+ // deferred[ resolve | reject | notify ]
+ deferred[ tuple[0] ] = function() {
+ deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
+ return this;
+ };
+ deferred[ tuple[0] + "With" ] = list.fireWith;
+ });
+
+ // Make the deferred a promise
+ promise.promise( deferred );
+
+ // Call given func if any
+ if ( func ) {
+ func.call( deferred, deferred );
+ }
+
+ // All done!
+ return deferred;
+ },
+
+ // Deferred helper
+ when: function( subordinate /* , ..., subordinateN */ ) {
+ var i = 0,
+ resolveValues = slice.call( arguments ),
+ length = resolveValues.length,
+
+ // the count of uncompleted subordinates
+ remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+
+ // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
+ deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+
+ // Update function for both resolve and progress values
+ updateFunc = function( i, contexts, values ) {
+ return function( value ) {
+ contexts[ i ] = this;
+ values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+ if ( values === progressValues ) {
+ deferred.notifyWith( contexts, values );
+ } else if ( !( --remaining ) ) {
+ deferred.resolveWith( contexts, values );
+ }
+ };
+ },
+
+ progressValues, progressContexts, resolveContexts;
+
+ // Add listeners to Deferred subordinates; treat others as resolved
+ if ( length > 1 ) {
+ progressValues = new Array( length );
+ progressContexts = new Array( length );
+ resolveContexts = new Array( length );
+ for ( ; i < length; i++ ) {
+ if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
+ resolveValues[ i ].promise()
+ .done( updateFunc( i, resolveContexts, resolveValues ) )
+ .fail( deferred.reject )
+ .progress( updateFunc( i, progressContexts, progressValues ) );
+ } else {
+ --remaining;
+ }
+ }
+ }
+
+ // If we're not waiting on anything, resolve the master
+ if ( !remaining ) {
+ deferred.resolveWith( resolveContexts, resolveValues );
+ }
+
+ return deferred.promise();
+ }
+});
+
+
+// The deferred used on DOM ready
+var readyList;
+
+jQuery.fn.ready = function( fn ) {
+ // Add the callback
+ jQuery.ready.promise().done( fn );
+
+ return this;
+};
+
+jQuery.extend({
+ // Is the DOM ready to be used? Set to true once it occurs.
+ isReady: false,
+
+ // A counter to track how many items to wait for before
+ // the ready event fires. See #6781
+ readyWait: 1,
+
+ // Hold (or release) the ready event
+ holdReady: function( hold ) {
+ if ( hold ) {
+ jQuery.readyWait++;
+ } else {
+ jQuery.ready( true );
+ }
+ },
+
+ // Handle when the DOM is ready
+ ready: function( wait ) {
+
+ // Abort if there are pending holds or we're already ready
+ if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+ return;
+ }
+
+ // Remember that the DOM is ready
+ jQuery.isReady = true;
+
+ // If a normal DOM Ready event fired, decrement, and wait if need be
+ if ( wait !== true && --jQuery.readyWait > 0 ) {
+ return;
+ }
+
+ // If there are functions bound, to execute
+ readyList.resolveWith( document, [ jQuery ] );
+
+ // Trigger any bound ready events
+ if ( jQuery.fn.triggerHandler ) {
+ jQuery( document ).triggerHandler( "ready" );
+ jQuery( document ).off( "ready" );
+ }
+ }
+});
+
+/**
+ * The ready event handler and self cleanup method
+ */
+function completed() {
+ document.removeEventListener( "DOMContentLoaded", completed, false );
+ window.removeEventListener( "load", completed, false );
+ jQuery.ready();
+}
+
+jQuery.ready.promise = function( obj ) {
+ if ( !readyList ) {
+
+ readyList = jQuery.Deferred();
+
+ // Catch cases where $(document).ready() is called after the browser event has already occurred.
+ // We once tried to use readyState "interactive" here, but it caused issues like the one
+ // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
+ if ( document.readyState === "complete" ) {
+ // Handle it asynchronously to allow scripts the opportunity to delay ready
+ setTimeout( jQuery.ready );
+
+ } else {
+
+ // Use the handy event callback
+ document.addEventListener( "DOMContentLoaded", completed, false );
+
+ // A fallback to window.onload, that will always work
+ window.addEventListener( "load", completed, false );
+ }
+ }
+ return readyList.promise( obj );
+};
+
+// Kick off the DOM ready check even if the user does not
+jQuery.ready.promise();
+
+
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+ var i = 0,
+ len = elems.length,
+ bulk = key == null;
+
+ // Sets many values
+ if ( jQuery.type( key ) === "object" ) {
+ chainable = true;
+ for ( i in key ) {
+ jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
+ }
+
+ // Sets one value
+ } else if ( value !== undefined ) {
+ chainable = true;
+
+ if ( !jQuery.isFunction( value ) ) {
+ raw = true;
+ }
+
+ if ( bulk ) {
+ // Bulk operations run against the entire set
+ if ( raw ) {
+ fn.call( elems, value );
+ fn = null;
+
+ // ...except when executing function values
+ } else {
+ bulk = fn;
+ fn = function( elem, key, value ) {
+ return bulk.call( jQuery( elem ), value );
+ };
+ }
+ }
+
+ if ( fn ) {
+ for ( ; i < len; i++ ) {
+ fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
+ }
+ }
+ }
+
+ return chainable ?
+ elems :
+
+ // Gets
+ bulk ?
+ fn.call( elems ) :
+ len ? fn( elems[0], key ) : emptyGet;
+};
+
+
+/**
+ * Determines whether an object can have data
+ */
+jQuery.acceptData = function( owner ) {
+ // Accepts only:
+ // - Node
+ // - Node.ELEMENT_NODE
+ // - Node.DOCUMENT_NODE
+ // - Object
+ // - Any
+ /* jshint -W018 */
+ return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
+};
+
+
+function Data() {
+ // Support: Android<4,
+ // Old WebKit does not have Object.preventExtensions/freeze method,
+ // return new empty object instead with no [[set]] accessor
+ Object.defineProperty( this.cache = {}, 0, {
+ get: function() {
+ return {};
+ }
+ });
+
+ this.expando = jQuery.expando + Data.uid++;
+}
+
+Data.uid = 1;
+Data.accepts = jQuery.acceptData;
+
+Data.prototype = {
+ key: function( owner ) {
+ // We can accept data for non-element nodes in modern browsers,
+ // but we should not, see #8335.
+ // Always return the key for a frozen object.
+ if ( !Data.accepts( owner ) ) {
+ return 0;
+ }
+
+ var descriptor = {},
+ // Check if the owner object already has a cache key
+ unlock = owner[ this.expando ];
+
+ // If not, create one
+ if ( !unlock ) {
+ unlock = Data.uid++;
+
+ // Secure it in a non-enumerable, non-writable property
+ try {
+ descriptor[ this.expando ] = { value: unlock };
+ Object.defineProperties( owner, descriptor );
+
+ // Support: Android<4
+ // Fallback to a less secure definition
+ } catch ( e ) {
+ descriptor[ this.expando ] = unlock;
+ jQuery.extend( owner, descriptor );
+ }
+ }
+
+ // Ensure the cache object
+ if ( !this.cache[ unlock ] ) {
+ this.cache[ unlock ] = {};
+ }
+
+ return unlock;
+ },
+ set: function( owner, data, value ) {
+ var prop,
+ // There may be an unlock assigned to this node,
+ // if there is no entry for this "owner", create one inline
+ // and set the unlock as though an owner entry had always existed
+ unlock = this.key( owner ),
+ cache = this.cache[ unlock ];
+
+ // Handle: [ owner, key, value ] args
+ if ( typeof data === "string" ) {
+ cache[ data ] = value;
+
+ // Handle: [ owner, { properties } ] args
+ } else {
+ // Fresh assignments by object are shallow copied
+ if ( jQuery.isEmptyObject( cache ) ) {
+ jQuery.extend( this.cache[ unlock ], data );
+ // Otherwise, copy the properties one-by-one to the cache object
+ } else {
+ for ( prop in data ) {
+ cache[ prop ] = data[ prop ];
+ }
+ }
+ }
+ return cache;
+ },
+ get: function( owner, key ) {
+ // Either a valid cache is found, or will be created.
+ // New caches will be created and the unlock returned,
+ // allowing direct access to the newly created
+ // empty data object. A valid owner object must be provided.
+ var cache = this.cache[ this.key( owner ) ];
+
+ return key === undefined ?
+ cache : cache[ key ];
+ },
+ access: function( owner, key, value ) {
+ var stored;
+ // In cases where either:
+ //
+ // 1. No key was specified
+ // 2. A string key was specified, but no value provided
+ //
+ // Take the "read" path and allow the get method to determine
+ // which value to return, respectively either:
+ //
+ // 1. The entire cache object
+ // 2. The data stored at the key
+ //
+ if ( key === undefined ||
+ ((key && typeof key === "string") && value === undefined) ) {
+
+ stored = this.get( owner, key );
+
+ return stored !== undefined ?
+ stored : this.get( owner, jQuery.camelCase(key) );
+ }
+
+ // [*]When the key is not a string, or both a key and value
+ // are specified, set or extend (existing objects) with either:
+ //
+ // 1. An object of properties
+ // 2. A key and value
+ //
+ this.set( owner, key, value );
+
+ // Since the "set" path can have two possible entry points
+ // return the expected data based on which path was taken[*]
+ return value !== undefined ? value : key;
+ },
+ remove: function( owner, key ) {
+ var i, name, camel,
+ unlock = this.key( owner ),
+ cache = this.cache[ unlock ];
+
+ if ( key === undefined ) {
+ this.cache[ unlock ] = {};
+
+ } else {
+ // Support array or space separated string of keys
+ if ( jQuery.isArray( key ) ) {
+ // If "name" is an array of keys...
+ // When data is initially created, via ("key", "val") signature,
+ // keys will be converted to camelCase.
+ // Since there is no way to tell _how_ a key was added, remove
+ // both plain key and camelCase key. #12786
+ // This will only penalize the array argument path.
+ name = key.concat( key.map( jQuery.camelCase ) );
+ } else {
+ camel = jQuery.camelCase( key );
+ // Try the string as a key before any manipulation
+ if ( key in cache ) {
+ name = [ key, camel ];
+ } else {
+ // If a key with the spaces exists, use it.
+ // Otherwise, create an array by matching non-whitespace
+ name = camel;
+ name = name in cache ?
+ [ name ] : ( name.match( rnotwhite ) || [] );
+ }
+ }
+
+ i = name.length;
+ while ( i-- ) {
+ delete cache[ name[ i ] ];
+ }
+ }
+ },
+ hasData: function( owner ) {
+ return !jQuery.isEmptyObject(
+ this.cache[ owner[ this.expando ] ] || {}
+ );
+ },
+ discard: function( owner ) {
+ if ( owner[ this.expando ] ) {
+ delete this.cache[ owner[ this.expando ] ];
+ }
+ }
+};
+var data_priv = new Data();
+
+var data_user = new Data();
+
+
+
+// Implementation Summary
+//
+// 1. Enforce API surface and semantic compatibility with 1.9.x branch
+// 2. Improve the module's maintainability by reducing the storage
+// paths to a single mechanism.
+// 3. Use the same single mechanism to support "private" and "user" data.
+// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+// 5. Avoid exposing implementation details on user objects (eg. expando properties)
+// 6. Provide a clear path for implementation upgrade to WeakMap in 2014
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+ rmultiDash = /([A-Z])/g;
+
+function dataAttr( elem, key, data ) {
+ var name;
+
+ // If nothing was found internally, try to fetch any
+ // data from the HTML5 data-* attribute
+ if ( data === undefined && elem.nodeType === 1 ) {
+ name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+ data = elem.getAttribute( name );
+
+ if ( typeof data === "string" ) {
+ try {
+ data = data === "true" ? true :
+ data === "false" ? false :
+ data === "null" ? null :
+ // Only convert to a number if it doesn't change the string
+ +data + "" === data ? +data :
+ rbrace.test( data ) ? jQuery.parseJSON( data ) :
+ data;
+ } catch( e ) {}
+
+ // Make sure we set the data so it isn't changed later
+ data_user.set( elem, key, data );
+ } else {
+ data = undefined;
+ }
+ }
+ return data;
+}
+
+jQuery.extend({
+ hasData: function( elem ) {
+ return data_user.hasData( elem ) || data_priv.hasData( elem );
+ },
+
+ data: function( elem, name, data ) {
+ return data_user.access( elem, name, data );
+ },
+
+ removeData: function( elem, name ) {
+ data_user.remove( elem, name );
+ },
+
+ // TODO: Now that all calls to _data and _removeData have been replaced
+ // with direct calls to data_priv methods, these can be deprecated.
+ _data: function( elem, name, data ) {
+ return data_priv.access( elem, name, data );
+ },
+
+ _removeData: function( elem, name ) {
+ data_priv.remove( elem, name );
+ }
+});
+
+jQuery.fn.extend({
+ data: function( key, value ) {
+ var i, name, data,
+ elem = this[ 0 ],
+ attrs = elem && elem.attributes;
+
+ // Gets all values
+ if ( key === undefined ) {
+ if ( this.length ) {
+ data = data_user.get( elem );
+
+ if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) {
+ i = attrs.length;
+ while ( i-- ) {
+
+ // Support: IE11+
+ // The attrs elements can be null (#14894)
+ if ( attrs[ i ] ) {
+ name = attrs[ i ].name;
+ if ( name.indexOf( "data-" ) === 0 ) {
+ name = jQuery.camelCase( name.slice(5) );
+ dataAttr( elem, name, data[ name ] );
+ }
+ }
+ }
+ data_priv.set( elem, "hasDataAttrs", true );
+ }
+ }
+
+ return data;
+ }
+
+ // Sets multiple values
+ if ( typeof key === "object" ) {
+ return this.each(function() {
+ data_user.set( this, key );
+ });
+ }
+
+ return access( this, function( value ) {
+ var data,
+ camelKey = jQuery.camelCase( key );
+
+ // The calling jQuery object (element matches) is not empty
+ // (and therefore has an element appears at this[ 0 ]) and the
+ // `value` parameter was not undefined. An empty jQuery object
+ // will result in `undefined` for elem = this[ 0 ] which will
+ // throw an exception if an attempt to read a data cache is made.
+ if ( elem && value === undefined ) {
+ // Attempt to get data from the cache
+ // with the key as-is
+ data = data_user.get( elem, key );
+ if ( data !== undefined ) {
+ return data;
+ }
+
+ // Attempt to get data from the cache
+ // with the key camelized
+ data = data_user.get( elem, camelKey );
+ if ( data !== undefined ) {
+ return data;
+ }
+
+ // Attempt to "discover" the data in
+ // HTML5 custom data-* attrs
+ data = dataAttr( elem, camelKey, undefined );
+ if ( data !== undefined ) {
+ return data;
+ }
+
+ // We tried really hard, but the data doesn't exist.
+ return;
+ }
+
+ // Set the data...
+ this.each(function() {
+ // First, attempt to store a copy or reference of any
+ // data that might've been store with a camelCased key.
+ var data = data_user.get( this, camelKey );
+
+ // For HTML5 data-* attribute interop, we have to
+ // store property names with dashes in a camelCase form.
+ // This might not apply to all properties...*
+ data_user.set( this, camelKey, value );
+
+ // *... In the case of properties that might _actually_
+ // have dashes, we need to also store a copy of that
+ // unchanged property.
+ if ( key.indexOf("-") !== -1 && data !== undefined ) {
+ data_user.set( this, key, value );
+ }
+ });
+ }, null, value, arguments.length > 1, null, true );
+ },
+
+ removeData: function( key ) {
+ return this.each(function() {
+ data_user.remove( this, key );
+ });
+ }
+});
+
+
+jQuery.extend({
+ queue: function( elem, type, data ) {
+ var queue;
+
+ if ( elem ) {
+ type = ( type || "fx" ) + "queue";
+ queue = data_priv.get( elem, type );
+
+ // Speed up dequeue by getting out quickly if this is just a lookup
+ if ( data ) {
+ if ( !queue || jQuery.isArray( data ) ) {
+ queue = data_priv.access( elem, type, jQuery.makeArray(data) );
+ } else {
+ queue.push( data );
+ }
+ }
+ return queue || [];
+ }
+ },
+
+ dequeue: function( elem, type ) {
+ type = type || "fx";
+
+ var queue = jQuery.queue( elem, type ),
+ startLength = queue.length,
+ fn = queue.shift(),
+ hooks = jQuery._queueHooks( elem, type ),
+ next = function() {
+ jQuery.dequeue( elem, type );
+ };
+
+ // If the fx queue is dequeued, always remove the progress sentinel
+ if ( fn === "inprogress" ) {
+ fn = queue.shift();
+ startLength--;
+ }
+
+ if ( fn ) {
+
+ // Add a progress sentinel to prevent the fx queue from being
+ // automatically dequeued
+ if ( type === "fx" ) {
+ queue.unshift( "inprogress" );
+ }
+
+ // Clear up the last queue stop function
+ delete hooks.stop;
+ fn.call( elem, next, hooks );
+ }
+
+ if ( !startLength && hooks ) {
+ hooks.empty.fire();
+ }
+ },
+
+ // Not public - generate a queueHooks object, or return the current one
+ _queueHooks: function( elem, type ) {
+ var key = type + "queueHooks";
+ return data_priv.get( elem, key ) || data_priv.access( elem, key, {
+ empty: jQuery.Callbacks("once memory").add(function() {
+ data_priv.remove( elem, [ type + "queue", key ] );
+ })
+ });
+ }
+});
+
+jQuery.fn.extend({
+ queue: function( type, data ) {
+ var setter = 2;
+
+ if ( typeof type !== "string" ) {
+ data = type;
+ type = "fx";
+ setter--;
+ }
+
+ if ( arguments.length < setter ) {
+ return jQuery.queue( this[0], type );
+ }
+
+ return data === undefined ?
+ this :
+ this.each(function() {
+ var queue = jQuery.queue( this, type, data );
+
+ // Ensure a hooks for this queue
+ jQuery._queueHooks( this, type );
+
+ if ( type === "fx" && queue[0] !== "inprogress" ) {
+ jQuery.dequeue( this, type );
+ }
+ });
+ },
+ dequeue: function( type ) {
+ return this.each(function() {
+ jQuery.dequeue( this, type );
+ });
+ },
+ clearQueue: function( type ) {
+ return this.queue( type || "fx", [] );
+ },
+ // Get a promise resolved when queues of a certain type
+ // are emptied (fx is the type by default)
+ promise: function( type, obj ) {
+ var tmp,
+ count = 1,
+ defer = jQuery.Deferred(),
+ elements = this,
+ i = this.length,
+ resolve = function() {
+ if ( !( --count ) ) {
+ defer.resolveWith( elements, [ elements ] );
+ }
+ };
+
+ if ( typeof type !== "string" ) {
+ obj = type;
+ type = undefined;
+ }
+ type = type || "fx";
+
+ while ( i-- ) {
+ tmp = data_priv.get( elements[ i ], type + "queueHooks" );
+ if ( tmp && tmp.empty ) {
+ count++;
+ tmp.empty.add( resolve );
+ }
+ }
+ resolve();
+ return defer.promise( obj );
+ }
+});
+var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;
+
+var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
+
+var isHidden = function( elem, el ) {
+ // isHidden might be called from jQuery#filter function;
+ // in that case, element will be second argument
+ elem = el || elem;
+ return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
+ };
+
+var rcheckableType = (/^(?:checkbox|radio)$/i);
+
+
+
+(function() {
+ var fragment = document.createDocumentFragment(),
+ div = fragment.appendChild( document.createElement( "div" ) ),
+ input = document.createElement( "input" );
+
+ // Support: Safari<=5.1
+ // Check state lost if the name is set (#11217)
+ // Support: Windows Web Apps (WWA)
+ // `name` and `type` must use .setAttribute for WWA (#14901)
+ input.setAttribute( "type", "radio" );
+ input.setAttribute( "checked", "checked" );
+ input.setAttribute( "name", "t" );
+
+ div.appendChild( input );
+
+ // Support: Safari<=5.1, Android<4.2
+ // Older WebKit doesn't clone checked state correctly in fragments
+ support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+ // Support: IE<=11+
+ // Make sure textarea (and checkbox) defaultValue is properly cloned
+ div.innerHTML = "<textarea>x</textarea>";
+ support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+})();
+var strundefined = typeof undefined;
+
+
+
+support.focusinBubbles = "onfocusin" in window;
+
+
+var
+ rkeyEvent = /^key/,
+ rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,
+ rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+ rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
+
+function returnTrue() {
+ return true;
+}
+
+function returnFalse() {
+ return false;
+}
+
+function safeActiveElement() {
+ try {
+ return document.activeElement;
+ } catch ( err ) { }
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+ global: {},
+
+ add: function( elem, types, handler, data, selector ) {
+
+ var handleObjIn, eventHandle, tmp,
+ events, t, handleObj,
+ special, handlers, type, namespaces, origType,
+ elemData = data_priv.get( elem );
+
+ // Don't attach events to noData or text/comment nodes (but allow plain objects)
+ if ( !elemData ) {
+ return;
+ }
+
+ // Caller can pass in an object of custom data in lieu of the handler
+ if ( handler.handler ) {
+ handleObjIn = handler;
+ handler = handleObjIn.handler;
+ selector = handleObjIn.selector;
+ }
+
+ // Make sure that the handler has a unique ID, used to find/remove it later
+ if ( !handler.guid ) {
+ handler.guid = jQuery.guid++;
+ }
+
+ // Init the element's event structure and main handler, if this is the first
+ if ( !(events = elemData.events) ) {
+ events = elemData.events = {};
+ }
+ if ( !(eventHandle = elemData.handle) ) {
+ eventHandle = elemData.handle = function( e ) {
+ // Discard the second event of a jQuery.event.trigger() and
+ // when an event is called after a page has unloaded
+ return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ?
+ jQuery.event.dispatch.apply( elem, arguments ) : undefined;
+ };
+ }
+
+ // Handle multiple events separated by a space
+ types = ( types || "" ).match( rnotwhite ) || [ "" ];
+ t = types.length;
+ while ( t-- ) {
+ tmp = rtypenamespace.exec( types[t] ) || [];
+ type = origType = tmp[1];
+ namespaces = ( tmp[2] || "" ).split( "." ).sort();
+
+ // There *must* be a type, no attaching namespace-only handlers
+ if ( !type ) {
+ continue;
+ }
+
+ // If event changes its type, use the special event handlers for the changed type
+ special = jQuery.event.special[ type ] || {};
+
+ // If selector defined, determine special event api type, otherwise given type
+ type = ( selector ? special.delegateType : special.bindType ) || type;
+
+ // Update special based on newly reset type
+ special = jQuery.event.special[ type ] || {};
+
+ // handleObj is passed to all event handlers
+ handleObj = jQuery.extend({
+ type: type,
+ origType: origType,
+ data: data,
+ handler: handler,
+ guid: handler.guid,
+ selector: selector,
+ needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+ namespace: namespaces.join(".")
+ }, handleObjIn );
+
+ // Init the event handler queue if we're the first
+ if ( !(handlers = events[ type ]) ) {
+ handlers = events[ type ] = [];
+ handlers.delegateCount = 0;
+
+ // Only use addEventListener if the special events handler returns false
+ if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+ if ( elem.addEventListener ) {
+ elem.addEventListener( type, eventHandle, false );
+ }
+ }
+ }
+
+ if ( special.add ) {
+ special.add.call( elem, handleObj );
+
+ if ( !handleObj.handler.guid ) {
+ handleObj.handler.guid = handler.guid;
+ }
+ }
+
+ // Add to the element's handler list, delegates in front
+ if ( selector ) {
+ handlers.splice( handlers.delegateCount++, 0, handleObj );
+ } else {
+ handlers.push( handleObj );
+ }
+
+ // Keep track of which events have ever been used, for event optimization
+ jQuery.event.global[ type ] = true;
+ }
+
+ },
+
+ // Detach an event or set of events from an element
+ remove: function( elem, types, handler, selector, mappedTypes ) {
+
+ var j, origCount, tmp,
+ events, t, handleObj,
+ special, handlers, type, namespaces, origType,
+ elemData = data_priv.hasData( elem ) && data_priv.get( elem );
+
+ if ( !elemData || !(events = elemData.events) ) {
+ return;
+ }
+
+ // Once for each type.namespace in types; type may be omitted
+ types = ( types || "" ).match( rnotwhite ) || [ "" ];
+ t = types.length;
+ while ( t-- ) {
+ tmp = rtypenamespace.exec( types[t] ) || [];
+ type = origType = tmp[1];
+ namespaces = ( tmp[2] || "" ).split( "." ).sort();
+
+ // Unbind all events (on this namespace, if provided) for the element
+ if ( !type ) {
+ for ( type in events ) {
+ jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+ }
+ continue;
+ }
+
+ special = jQuery.event.special[ type ] || {};
+ type = ( selector ? special.delegateType : special.bindType ) || type;
+ handlers = events[ type ] || [];
+ tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
+
+ // Remove matching events
+ origCount = j = handlers.length;
+ while ( j-- ) {
+ handleObj = handlers[ j ];
+
+ if ( ( mappedTypes || origType === handleObj.origType ) &&
+ ( !handler || handler.guid === handleObj.guid ) &&
+ ( !tmp || tmp.test( handleObj.namespace ) ) &&
+ ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+ handlers.splice( j, 1 );
+
+ if ( handleObj.selector ) {
+ handlers.delegateCount--;
+ }
+ if ( special.remove ) {
+ special.remove.call( elem, handleObj );
+ }
+ }
+ }
+
+ // Remove generic event handler if we removed something and no more handlers exist
+ // (avoids potential for endless recursion during removal of special event handlers)
+ if ( origCount && !handlers.length ) {
+ if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+ jQuery.removeEvent( elem, type, elemData.handle );
+ }
+
+ delete events[ type ];
+ }
+ }
+
+ // Remove the expando if it's no longer used
+ if ( jQuery.isEmptyObject( events ) ) {
+ delete elemData.handle;
+ data_priv.remove( elem, "events" );
+ }
+ },
+
+ trigger: function( event, data, elem, onlyHandlers ) {
+
+ var i, cur, tmp, bubbleType, ontype, handle, special,
+ eventPath = [ elem || document ],
+ type = hasOwn.call( event, "type" ) ? event.type : event,
+ namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
+
+ cur = tmp = elem = elem || document;
+
+ // Don't do events on text and comment nodes
+ if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return;
+ }
+
+ // focus/blur morphs to focusin/out; ensure we're not firing them right now
+ if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+ return;
+ }
+
+ if ( type.indexOf(".") >= 0 ) {
+ // Namespaced trigger; create a regexp to match event type in handle()
+ namespaces = type.split(".");
+ type = namespaces.shift();
+ namespaces.sort();
+ }
+ ontype = type.indexOf(":") < 0 && "on" + type;
+
+ // Caller can pass in a jQuery.Event object, Object, or just an event type string
+ event = event[ jQuery.expando ] ?
+ event :
+ new jQuery.Event( type, typeof event === "object" && event );
+
+ // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+ event.isTrigger = onlyHandlers ? 2 : 3;
+ event.namespace = namespaces.join(".");
+ event.namespace_re = event.namespace ?
+ new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
+ null;
+
+ // Clean up the event in case it is being reused
+ event.result = undefined;
+ if ( !event.target ) {
+ event.target = elem;
+ }
+
+ // Clone any incoming data and prepend the event, creating the handler arg list
+ data = data == null ?
+ [ event ] :
+ jQuery.makeArray( data, [ event ] );
+
+ // Allow special events to draw outside the lines
+ special = jQuery.event.special[ type ] || {};
+ if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+ return;
+ }
+
+ // Determine event propagation path in advance, per W3C events spec (#9951)
+ // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+ if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+ bubbleType = special.delegateType || type;
+ if ( !rfocusMorph.test( bubbleType + type ) ) {
+ cur = cur.parentNode;
+ }
+ for ( ; cur; cur = cur.parentNode ) {
+ eventPath.push( cur );
+ tmp = cur;
+ }
+
+ // Only add window if we got to document (e.g., not plain obj or detached DOM)
+ if ( tmp === (elem.ownerDocument || document) ) {
+ eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+ }
+ }
+
+ // Fire handlers on the event path
+ i = 0;
+ while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
+
+ event.type = i > 1 ?
+ bubbleType :
+ special.bindType || type;
+
+ // jQuery handler
+ handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" );
+ if ( handle ) {
+ handle.apply( cur, data );
+ }
+
+ // Native handler
+ handle = ontype && cur[ ontype ];
+ if ( handle && handle.apply && jQuery.acceptData( cur ) ) {
+ event.result = handle.apply( cur, data );
+ if ( event.result === false ) {
+ event.preventDefault();
+ }
+ }
+ }
+ event.type = type;
+
+ // If nobody prevented the default action, do it now
+ if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+ if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
+ jQuery.acceptData( elem ) ) {
+
+ // Call a native DOM method on the target with the same name name as the event.
+ // Don't do default actions on window, that's where global variables be (#6170)
+ if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
+
+ // Don't re-trigger an onFOO event when we call its FOO() method
+ tmp = elem[ ontype ];
+
+ if ( tmp ) {
+ elem[ ontype ] = null;
+ }
+
+ // Prevent re-triggering of the same event, since we already bubbled it above
+ jQuery.event.triggered = type;
+ elem[ type ]();
+ jQuery.event.triggered = undefined;
+
+ if ( tmp ) {
+ elem[ ontype ] = tmp;
+ }
+ }
+ }
+ }
+
+ return event.result;
+ },
+
+ dispatch: function( event ) {
+
+ // Make a writable jQuery.Event from the native event object
+ event = jQuery.event.fix( event );
+
+ var i, j, ret, matched, handleObj,
+ handlerQueue = [],
+ args = slice.call( arguments ),
+ handlers = ( data_priv.get( this, "events" ) || {} )[ event.type ] || [],
+ special = jQuery.event.special[ event.type ] || {};
+
+ // Use the fix-ed jQuery.Event rather than the (read-only) native event
+ args[0] = event;
+ event.delegateTarget = this;
+
+ // Call the preDispatch hook for the mapped type, and let it bail if desired
+ if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+ return;
+ }
+
+ // Determine handlers
+ handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+ // Run delegates first; they may want to stop propagation beneath us
+ i = 0;
+ while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
+ event.currentTarget = matched.elem;
+
+ j = 0;
+ while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
+
+ // Triggered event must either 1) have no namespace, or 2) have namespace(s)
+ // a subset or equal to those in the bound event (both can have no namespace).
+ if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
+
+ event.handleObj = handleObj;
+ event.data = handleObj.data;
+
+ ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
+ .apply( matched.elem, args );
+
+ if ( ret !== undefined ) {
+ if ( (event.result = ret) === false ) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ }
+ }
+ }
+ }
+
+ // Call the postDispatch hook for the mapped type
+ if ( special.postDispatch ) {
+ special.postDispatch.call( this, event );
+ }
+
+ return event.result;
+ },
+
+ handlers: function( event, handlers ) {
+ var i, matches, sel, handleObj,
+ handlerQueue = [],
+ delegateCount = handlers.delegateCount,
+ cur = event.target;
+
+ // Find delegate handlers
+ // Black-hole SVG <use> instance trees (#13180)
+ // Avoid non-left-click bubbling in Firefox (#3861)
+ if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
+
+ for ( ; cur !== this; cur = cur.parentNode || this ) {
+
+ // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+ if ( cur.disabled !== true || event.type !== "click" ) {
+ matches = [];
+ for ( i = 0; i < delegateCount; i++ ) {
+ handleObj = handlers[ i ];
+
+ // Don't conflict with Object.prototype properties (#13203)
+ sel = handleObj.selector + " ";
+
+ if ( matches[ sel ] === undefined ) {
+ matches[ sel ] = handleObj.needsContext ?
+ jQuery( sel, this ).index( cur ) >= 0 :
+ jQuery.find( sel, this, null, [ cur ] ).length;
+ }
+ if ( matches[ sel ] ) {
+ matches.push( handleObj );
+ }
+ }
+ if ( matches.length ) {
+ handlerQueue.push({ elem: cur, handlers: matches });
+ }
+ }
+ }
+ }
+
+ // Add the remaining (directly-bound) handlers
+ if ( delegateCount < handlers.length ) {
+ handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
+ }
+
+ return handlerQueue;
+ },
+
+ // Includes some event props shared by KeyEvent and MouseEvent
+ props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+
+ fixHooks: {},
+
+ keyHooks: {
+ props: "char charCode key keyCode".split(" "),
+ filter: function( event, original ) {
+
+ // Add which for key events
+ if ( event.which == null ) {
+ event.which = original.charCode != null ? original.charCode : original.keyCode;
+ }
+
+ return event;
+ }
+ },
+
+ mouseHooks: {
+ props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+ filter: function( event, original ) {
+ var eventDoc, doc, body,
+ button = original.button;
+
+ // Calculate pageX/Y if missing and clientX/Y available
+ if ( event.pageX == null && original.clientX != null ) {
+ eventDoc = event.target.ownerDocument || document;
+ doc = eventDoc.documentElement;
+ body = eventDoc.body;
+
+ event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+ event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
+ }
+
+ // Add which for click: 1 === left; 2 === middle; 3 === right
+ // Note: button is not normalized, so don't use it
+ if ( !event.which && button !== undefined ) {
+ event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+ }
+
+ return event;
+ }
+ },
+
+ fix: function( event ) {
+ if ( event[ jQuery.expando ] ) {
+ return event;
+ }
+
+ // Create a writable copy of the event object and normalize some properties
+ var i, prop, copy,
+ type = event.type,
+ originalEvent = event,
+ fixHook = this.fixHooks[ type ];
+
+ if ( !fixHook ) {
+ this.fixHooks[ type ] = fixHook =
+ rmouseEvent.test( type ) ? this.mouseHooks :
+ rkeyEvent.test( type ) ? this.keyHooks :
+ {};
+ }
+ copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+ event = new jQuery.Event( originalEvent );
+
+ i = copy.length;
+ while ( i-- ) {
+ prop = copy[ i ];
+ event[ prop ] = originalEvent[ prop ];
+ }
+
+ // Support: Cordova 2.5 (WebKit) (#13255)
+ // All events should have a target; Cordova deviceready doesn't
+ if ( !event.target ) {
+ event.target = document;
+ }
+
+ // Support: Safari 6.0+, Chrome<28
+ // Target should not be a text node (#504, #13143)
+ if ( event.target.nodeType === 3 ) {
+ event.target = event.target.parentNode;
+ }
+
+ return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
+ },
+
+ special: {
+ load: {
+ // Prevent triggered image.load events from bubbling to window.load
+ noBubble: true
+ },
+ focus: {
+ // Fire native event if possible so blur/focus sequence is correct
+ trigger: function() {
+ if ( this !== safeActiveElement() && this.focus ) {
+ this.focus();
+ return false;
+ }
+ },
+ delegateType: "focusin"
+ },
+ blur: {
+ trigger: function() {
+ if ( this === safeActiveElement() && this.blur ) {
+ this.blur();
+ return false;
+ }
+ },
+ delegateType: "focusout"
+ },
+ click: {
+ // For checkbox, fire native event so checked state will be right
+ trigger: function() {
+ if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
+ this.click();
+ return false;
+ }
+ },
+
+ // For cross-browser consistency, don't fire native .click() on links
+ _default: function( event ) {
+ return jQuery.nodeName( event.target, "a" );
+ }
+ },
+
+ beforeunload: {
+ postDispatch: function( event ) {
+
+ // Support: Firefox 20+
+ // Firefox doesn't alert if the returnValue field is not set.
+ if ( event.result !== undefined && event.originalEvent ) {
+ event.originalEvent.returnValue = event.result;
+ }
+ }
+ }
+ },
+
+ simulate: function( type, elem, event, bubble ) {
+ // Piggyback on a donor event to simulate a different one.
+ // Fake originalEvent to avoid donor's stopPropagation, but if the
+ // simulated event prevents default then we do the same on the donor.
+ var e = jQuery.extend(
+ new jQuery.Event(),
+ event,
+ {
+ type: type,
+ isSimulated: true,
+ originalEvent: {}
+ }
+ );
+ if ( bubble ) {
+ jQuery.event.trigger( e, null, elem );
+ } else {
+ jQuery.event.dispatch.call( elem, e );
+ }
+ if ( e.isDefaultPrevented() ) {
+ event.preventDefault();
+ }
+ }
+};
+
+jQuery.removeEvent = function( elem, type, handle ) {
+ if ( elem.removeEventListener ) {
+ elem.removeEventListener( type, handle, false );
+ }
+};
+
+jQuery.Event = function( src, props ) {
+ // Allow instantiation without the 'new' keyword
+ if ( !(this instanceof jQuery.Event) ) {
+ return new jQuery.Event( src, props );
+ }
+
+ // Event object
+ if ( src && src.type ) {
+ this.originalEvent = src;
+ this.type = src.type;
+
+ // Events bubbling up the document may have been marked as prevented
+ // by a handler lower down the tree; reflect the correct value.
+ this.isDefaultPrevented = src.defaultPrevented ||
+ src.defaultPrevented === undefined &&
+ // Support: Android<4.0
+ src.returnValue === false ?
+ returnTrue :
+ returnFalse;
+
+ // Event type
+ } else {
+ this.type = src;
+ }
+
+ // Put explicitly provided properties onto the event object
+ if ( props ) {
+ jQuery.extend( this, props );
+ }
+
+ // Create a timestamp if incoming event doesn't have one
+ this.timeStamp = src && src.timeStamp || jQuery.now();
+
+ // Mark it as fixed
+ this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+ isDefaultPrevented: returnFalse,
+ isPropagationStopped: returnFalse,
+ isImmediatePropagationStopped: returnFalse,
+
+ preventDefault: function() {
+ var e = this.originalEvent;
+
+ this.isDefaultPrevented = returnTrue;
+
+ if ( e && e.preventDefault ) {
+ e.preventDefault();
+ }
+ },
+ stopPropagation: function() {
+ var e = this.originalEvent;
+
+ this.isPropagationStopped = returnTrue;
+
+ if ( e && e.stopPropagation ) {
+ e.stopPropagation();
+ }
+ },
+ stopImmediatePropagation: function() {
+ var e = this.originalEvent;
+
+ this.isImmediatePropagationStopped = returnTrue;
+
+ if ( e && e.stopImmediatePropagation ) {
+ e.stopImmediatePropagation();
+ }
+
+ this.stopPropagation();
+ }
+};
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+// Support: Chrome 15+
+jQuery.each({
+ mouseenter: "mouseover",
+ mouseleave: "mouseout",
+ pointerenter: "pointerover",
+ pointerleave: "pointerout"
+}, function( orig, fix ) {
+ jQuery.event.special[ orig ] = {
+ delegateType: fix,
+ bindType: fix,
+
+ handle: function( event ) {
+ var ret,
+ target = this,
+ related = event.relatedTarget,
+ handleObj = event.handleObj;
+
+ // For mousenter/leave call the handler if related is outside the target.
+ // NB: No relatedTarget if the mouse left/entered the browser window
+ if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
+ event.type = handleObj.origType;
+ ret = handleObj.handler.apply( this, arguments );
+ event.type = fix;
+ }
+ return ret;
+ }
+ };
+});
+
+// Support: Firefox, Chrome, Safari
+// Create "bubbling" focus and blur events
+if ( !support.focusinBubbles ) {
+ jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+ // Attach a single capturing handler on the document while someone wants focusin/focusout
+ var handler = function( event ) {
+ jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+ };
+
+ jQuery.event.special[ fix ] = {
+ setup: function() {
+ var doc = this.ownerDocument || this,
+ attaches = data_priv.access( doc, fix );
+
+ if ( !attaches ) {
+ doc.addEventListener( orig, handler, true );
+ }
+ data_priv.access( doc, fix, ( attaches || 0 ) + 1 );
+ },
+ teardown: function() {
+ var doc = this.ownerDocument || this,
+ attaches = data_priv.access( doc, fix ) - 1;
+
+ if ( !attaches ) {
+ doc.removeEventListener( orig, handler, true );
+ data_priv.remove( doc, fix );
+
+ } else {
+ data_priv.access( doc, fix, attaches );
+ }
+ }
+ };
+ });
+}
+
+jQuery.fn.extend({
+
+ on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+ var origFn, type;
+
+ // Types can be a map of types/handlers
+ if ( typeof types === "object" ) {
+ // ( types-Object, selector, data )
+ if ( typeof selector !== "string" ) {
+ // ( types-Object, data )
+ data = data || selector;
+ selector = undefined;
+ }
+ for ( type in types ) {
+ this.on( type, selector, data, types[ type ], one );
+ }
+ return this;
+ }
+
+ if ( data == null && fn == null ) {
+ // ( types, fn )
+ fn = selector;
+ data = selector = undefined;
+ } else if ( fn == null ) {
+ if ( typeof selector === "string" ) {
+ // ( types, selector, fn )
+ fn = data;
+ data = undefined;
+ } else {
+ // ( types, data, fn )
+ fn = data;
+ data = selector;
+ selector = undefined;
+ }
+ }
+ if ( fn === false ) {
+ fn = returnFalse;
+ } else if ( !fn ) {
+ return this;
+ }
+
+ if ( one === 1 ) {
+ origFn = fn;
+ fn = function( event ) {
+ // Can use an empty set, since event contains the info
+ jQuery().off( event );
+ return origFn.apply( this, arguments );
+ };
+ // Use same guid so caller can remove using origFn
+ fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+ }
+ return this.each( function() {
+ jQuery.event.add( this, types, fn, data, selector );
+ });
+ },
+ one: function( types, selector, data, fn ) {
+ return this.on( types, selector, data, fn, 1 );
+ },
+ off: function( types, selector, fn ) {
+ var handleObj, type;
+ if ( types && types.preventDefault && types.handleObj ) {
+ // ( event ) dispatched jQuery.Event
+ handleObj = types.handleObj;
+ jQuery( types.delegateTarget ).off(
+ handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
+ handleObj.selector,
+ handleObj.handler
+ );
+ return this;
+ }
+ if ( typeof types === "object" ) {
+ // ( types-object [, selector] )
+ for ( type in types ) {
+ this.off( type, selector, types[ type ] );
+ }
+ return this;
+ }
+ if ( selector === false || typeof selector === "function" ) {
+ // ( types [, fn] )
+ fn = selector;
+ selector = undefined;
+ }
+ if ( fn === false ) {
+ fn = returnFalse;
+ }
+ return this.each(function() {
+ jQuery.event.remove( this, types, fn, selector );
+ });
+ },
+
+ trigger: function( type, data ) {
+ return this.each(function() {
+ jQuery.event.trigger( type, data, this );
+ });
+ },
+ triggerHandler: function( type, data ) {
+ var elem = this[0];
+ if ( elem ) {
+ return jQuery.event.trigger( type, data, elem, true );
+ }
+ }
+});
+
+
+var
+ rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
+ rtagName = /<([\w:]+)/,
+ rhtml = /<|&#?\w+;/,
+ rnoInnerhtml = /<(?:script|style|link)/i,
+ // checked="checked" or checked
+ rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+ rscriptType = /^$|\/(?:java|ecma)script/i,
+ rscriptTypeMasked = /^true\/(.*)/,
+ rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
+
+ // We have to close these tags to support XHTML (#13200)
+ wrapMap = {
+
+ // Support: IE9
+ option: [ 1, "<select multiple='multiple'>", "</select>" ],
+
+ thead: [ 1, "<table>", "</table>" ],
+ col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
+ tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+ td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+ _default: [ 0, "", "" ]
+ };
+
+// Support: IE9
+wrapMap.optgroup = wrapMap.option;
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// Support: 1.x compatibility
+// Manipulating tables requires a tbody
+function manipulationTarget( elem, content ) {
+ return jQuery.nodeName( elem, "table" ) &&
+ jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
+
+ elem.getElementsByTagName("tbody")[0] ||
+ elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
+ elem;
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+ elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type;
+ return elem;
+}
+function restoreScript( elem ) {
+ var match = rscriptTypeMasked.exec( elem.type );
+
+ if ( match ) {
+ elem.type = match[ 1 ];
+ } else {
+ elem.removeAttribute("type");
+ }
+
+ return elem;
+}
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+ var i = 0,
+ l = elems.length;
+
+ for ( ; i < l; i++ ) {
+ data_priv.set(
+ elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" )
+ );
+ }
+}
+
+function cloneCopyEvent( src, dest ) {
+ var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
+
+ if ( dest.nodeType !== 1 ) {
+ return;
+ }
+
+ // 1. Copy private data: events, handlers, etc.
+ if ( data_priv.hasData( src ) ) {
+ pdataOld = data_priv.access( src );
+ pdataCur = data_priv.set( dest, pdataOld );
+ events = pdataOld.events;
+
+ if ( events ) {
+ delete pdataCur.handle;
+ pdataCur.events = {};
+
+ for ( type in events ) {
+ for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+ jQuery.event.add( dest, type, events[ type ][ i ] );
+ }
+ }
+ }
+ }
+
+ // 2. Copy user data
+ if ( data_user.hasData( src ) ) {
+ udataOld = data_user.access( src );
+ udataCur = jQuery.extend( {}, udataOld );
+
+ data_user.set( dest, udataCur );
+ }
+}
+
+function getAll( context, tag ) {
+ var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) :
+ context.querySelectorAll ? context.querySelectorAll( tag || "*" ) :
+ [];
+
+ return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
+ jQuery.merge( [ context ], ret ) :
+ ret;
+}
+
+// Fix IE bugs, see support tests
+function fixInput( src, dest ) {
+ var nodeName = dest.nodeName.toLowerCase();
+
+ // Fails to persist the checked state of a cloned checkbox or radio button.
+ if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+ dest.checked = src.checked;
+
+ // Fails to return the selected option to the default selected state when cloning options
+ } else if ( nodeName === "input" || nodeName === "textarea" ) {
+ dest.defaultValue = src.defaultValue;
+ }
+}
+
+jQuery.extend({
+ clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+ var i, l, srcElements, destElements,
+ clone = elem.cloneNode( true ),
+ inPage = jQuery.contains( elem.ownerDocument, elem );
+
+ // Fix IE cloning issues
+ if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
+ !jQuery.isXMLDoc( elem ) ) {
+
+ // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
+ destElements = getAll( clone );
+ srcElements = getAll( elem );
+
+ for ( i = 0, l = srcElements.length; i < l; i++ ) {
+ fixInput( srcElements[ i ], destElements[ i ] );
+ }
+ }
+
+ // Copy the events from the original to the clone
+ if ( dataAndEvents ) {
+ if ( deepDataAndEvents ) {
+ srcElements = srcElements || getAll( elem );
+ destElements = destElements || getAll( clone );
+
+ for ( i = 0, l = srcElements.length; i < l; i++ ) {
+ cloneCopyEvent( srcElements[ i ], destElements[ i ] );
+ }
+ } else {
+ cloneCopyEvent( elem, clone );
+ }
+ }
+
+ // Preserve script evaluation history
+ destElements = getAll( clone, "script" );
+ if ( destElements.length > 0 ) {
+ setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+ }
+
+ // Return the cloned set
+ return clone;
+ },
+
+ buildFragment: function( elems, context, scripts, selection ) {
+ var elem, tmp, tag, wrap, contains, j,
+ fragment = context.createDocumentFragment(),
+ nodes = [],
+ i = 0,
+ l = elems.length;
+
+ for ( ; i < l; i++ ) {
+ elem = elems[ i ];
+
+ if ( elem || elem === 0 ) {
+
+ // Add nodes directly
+ if ( jQuery.type( elem ) === "object" ) {
+ // Support: QtWebKit, PhantomJS
+ // push.apply(_, arraylike) throws on ancient WebKit
+ jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+ // Convert non-html into a text node
+ } else if ( !rhtml.test( elem ) ) {
+ nodes.push( context.createTextNode( elem ) );
+
+ // Convert html into DOM nodes
+ } else {
+ tmp = tmp || fragment.appendChild( context.createElement("div") );
+
+ // Deserialize a standard representation
+ tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
+ wrap = wrapMap[ tag ] || wrapMap._default;
+ tmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[ 2 ];
+
+ // Descend through wrappers to the right content
+ j = wrap[ 0 ];
+ while ( j-- ) {
+ tmp = tmp.lastChild;
+ }
+
+ // Support: QtWebKit, PhantomJS
+ // push.apply(_, arraylike) throws on ancient WebKit
+ jQuery.merge( nodes, tmp.childNodes );
+
+ // Remember the top-level container
+ tmp = fragment.firstChild;
+
+ // Ensure the created nodes are orphaned (#12392)
+ tmp.textContent = "";
+ }
+ }
+ }
+
+ // Remove wrapper from fragment
+ fragment.textContent = "";
+
+ i = 0;
+ while ( (elem = nodes[ i++ ]) ) {
+
+ // #4087 - If origin and destination elements are the same, and this is
+ // that element, do not do anything
+ if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
+ continue;
+ }
+
+ contains = jQuery.contains( elem.ownerDocument, elem );
+
+ // Append to fragment
+ tmp = getAll( fragment.appendChild( elem ), "script" );
+
+ // Preserve script evaluation history
+ if ( contains ) {
+ setGlobalEval( tmp );
+ }
+
+ // Capture executables
+ if ( scripts ) {
+ j = 0;
+ while ( (elem = tmp[ j++ ]) ) {
+ if ( rscriptType.test( elem.type || "" ) ) {
+ scripts.push( elem );
+ }
+ }
+ }
+ }
+
+ return fragment;
+ },
+
+ cleanData: function( elems ) {
+ var data, elem, type, key,
+ special = jQuery.event.special,
+ i = 0;
+
+ for ( ; (elem = elems[ i ]) !== undefined; i++ ) {
+ if ( jQuery.acceptData( elem ) ) {
+ key = elem[ data_priv.expando ];
+
+ if ( key && (data = data_priv.cache[ key ]) ) {
+ if ( data.events ) {
+ for ( type in data.events ) {
+ if ( special[ type ] ) {
+ jQuery.event.remove( elem, type );
+
+ // This is a shortcut to avoid jQuery.event.remove's overhead
+ } else {
+ jQuery.removeEvent( elem, type, data.handle );
+ }
+ }
+ }
+ if ( data_priv.cache[ key ] ) {
+ // Discard any remaining `private` data
+ delete data_priv.cache[ key ];
+ }
+ }
+ }
+ // Discard any remaining `user` data
+ delete data_user.cache[ elem[ data_user.expando ] ];
+ }
+ }
+});
+
+jQuery.fn.extend({
+ text: function( value ) {
+ return access( this, function( value ) {
+ return value === undefined ?
+ jQuery.text( this ) :
+ this.empty().each(function() {
+ if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+ this.textContent = value;
+ }
+ });
+ }, null, value, arguments.length );
+ },
+
+ append: function() {
+ return this.domManip( arguments, function( elem ) {
+ if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+ var target = manipulationTarget( this, elem );
+ target.appendChild( elem );
+ }
+ });
+ },
+
+ prepend: function() {
+ return this.domManip( arguments, function( elem ) {
+ if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+ var target = manipulationTarget( this, elem );
+ target.insertBefore( elem, target.firstChild );
+ }
+ });
+ },
+
+ before: function() {
+ return this.domManip( arguments, function( elem ) {
+ if ( this.parentNode ) {
+ this.parentNode.insertBefore( elem, this );
+ }
+ });
+ },
+
+ after: function() {
+ return this.domManip( arguments, function( elem ) {
+ if ( this.parentNode ) {
+ this.parentNode.insertBefore( elem, this.nextSibling );
+ }
+ });
+ },
+
+ remove: function( selector, keepData /* Internal Use Only */ ) {
+ var elem,
+ elems = selector ? jQuery.filter( selector, this ) : this,
+ i = 0;
+
+ for ( ; (elem = elems[i]) != null; i++ ) {
+ if ( !keepData && elem.nodeType === 1 ) {
+ jQuery.cleanData( getAll( elem ) );
+ }
+
+ if ( elem.parentNode ) {
+ if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
+ setGlobalEval( getAll( elem, "script" ) );
+ }
+ elem.parentNode.removeChild( elem );
+ }
+ }
+
+ return this;
+ },
+
+ empty: function() {
+ var elem,
+ i = 0;
+
+ for ( ; (elem = this[i]) != null; i++ ) {
+ if ( elem.nodeType === 1 ) {
+
+ // Prevent memory leaks
+ jQuery.cleanData( getAll( elem, false ) );
+
+ // Remove any remaining nodes
+ elem.textContent = "";
+ }
+ }
+
+ return this;
+ },
+
+ clone: function( dataAndEvents, deepDataAndEvents ) {
+ dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+ deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+ return this.map(function() {
+ return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+ });
+ },
+
+ html: function( value ) {
+ return access( this, function( value ) {
+ var elem = this[ 0 ] || {},
+ i = 0,
+ l = this.length;
+
+ if ( value === undefined && elem.nodeType === 1 ) {
+ return elem.innerHTML;
+ }
+
+ // See if we can take a shortcut and just use innerHTML
+ if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+ !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
+
+ value = value.replace( rxhtmlTag, "<$1></$2>" );
+
+ try {
+ for ( ; i < l; i++ ) {
+ elem = this[ i ] || {};
+
+ // Remove element nodes and prevent memory leaks
+ if ( elem.nodeType === 1 ) {
+ jQuery.cleanData( getAll( elem, false ) );
+ elem.innerHTML = value;
+ }
+ }
+
+ elem = 0;
+
+ // If using innerHTML throws an exception, use the fallback method
+ } catch( e ) {}
+ }
+
+ if ( elem ) {
+ this.empty().append( value );
+ }
+ }, null, value, arguments.length );
+ },
+
+ replaceWith: function() {
+ var arg = arguments[ 0 ];
+
+ // Make the changes, replacing each context element with the new content
+ this.domManip( arguments, function( elem ) {
+ arg = this.parentNode;
+
+ jQuery.cleanData( getAll( this ) );
+
+ if ( arg ) {
+ arg.replaceChild( elem, this );
+ }
+ });
+
+ // Force removal if there was no new content (e.g., from empty arguments)
+ return arg && (arg.length || arg.nodeType) ? this : this.remove();
+ },
+
+ detach: function( selector ) {
+ return this.remove( selector, true );
+ },
+
+ domManip: function( args, callback ) {
+
+ // Flatten any nested arrays
+ args = concat.apply( [], args );
+
+ var fragment, first, scripts, hasScripts, node, doc,
+ i = 0,
+ l = this.length,
+ set = this,
+ iNoClone = l - 1,
+ value = args[ 0 ],
+ isFunction = jQuery.isFunction( value );
+
+ // We can't cloneNode fragments that contain checked, in WebKit
+ if ( isFunction ||
+ ( l > 1 && typeof value === "string" &&
+ !support.checkClone && rchecked.test( value ) ) ) {
+ return this.each(function( index ) {
+ var self = set.eq( index );
+ if ( isFunction ) {
+ args[ 0 ] = value.call( this, index, self.html() );
+ }
+ self.domManip( args, callback );
+ });
+ }
+
+ if ( l ) {
+ fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
+ first = fragment.firstChild;
+
+ if ( fragment.childNodes.length === 1 ) {
+ fragment = first;
+ }
+
+ if ( first ) {
+ scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+ hasScripts = scripts.length;
+
+ // Use the original fragment for the last item instead of the first because it can end up
+ // being emptied incorrectly in certain situations (#8070).
+ for ( ; i < l; i++ ) {
+ node = fragment;
+
+ if ( i !== iNoClone ) {
+ node = jQuery.clone( node, true, true );
+
+ // Keep references to cloned scripts for later restoration
+ if ( hasScripts ) {
+ // Support: QtWebKit
+ // jQuery.merge because push.apply(_, arraylike) throws
+ jQuery.merge( scripts, getAll( node, "script" ) );
+ }
+ }
+
+ callback.call( this[ i ], node, i );
+ }
+
+ if ( hasScripts ) {
+ doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+ // Reenable scripts
+ jQuery.map( scripts, restoreScript );
+
+ // Evaluate executable scripts on first document insertion
+ for ( i = 0; i < hasScripts; i++ ) {
+ node = scripts[ i ];
+ if ( rscriptType.test( node.type || "" ) &&
+ !data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
+
+ if ( node.src ) {
+ // Optional AJAX dependency, but won't run scripts if not present
+ if ( jQuery._evalUrl ) {
+ jQuery._evalUrl( node.src );
+ }
+ } else {
+ jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) );
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return this;
+ }
+});
+
+jQuery.each({
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+}, function( name, original ) {
+ jQuery.fn[ name ] = function( selector ) {
+ var elems,
+ ret = [],
+ insert = jQuery( selector ),
+ last = insert.length - 1,
+ i = 0;
+
+ for ( ; i <= last; i++ ) {
+ elems = i === last ? this : this.clone( true );
+ jQuery( insert[ i ] )[ original ]( elems );
+
+ // Support: QtWebKit
+ // .get() because push.apply(_, arraylike) throws
+ push.apply( ret, elems.get() );
+ }
+
+ return this.pushStack( ret );
+ };
+});
+
+
+var iframe,
+ elemdisplay = {};
+
+/**
+ * Retrieve the actual display of a element
+ * @param {String} name nodeName of the element
+ * @param {Object} doc Document object
+ */
+// Called only from within defaultDisplay
+function actualDisplay( name, doc ) {
+ var style,
+ elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
+
+ // getDefaultComputedStyle might be reliably used only on attached element
+ display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?
+
+ // Use of this method is a temporary fix (more like optimization) until something better comes along,
+ // since it was removed from specification and supported only in FF
+ style.display : jQuery.css( elem[ 0 ], "display" );
+
+ // We don't have any data stored on the element,
+ // so use "detach" method as fast way to get rid of the element
+ elem.detach();
+
+ return display;
+}
+
+/**
+ * Try to determine the default display value of an element
+ * @param {String} nodeName
+ */
+function defaultDisplay( nodeName ) {
+ var doc = document,
+ display = elemdisplay[ nodeName ];
+
+ if ( !display ) {
+ display = actualDisplay( nodeName, doc );
+
+ // If the simple way fails, read from inside an iframe
+ if ( display === "none" || !display ) {
+
+ // Use the already-created iframe if possible
+ iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement );
+
+ // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
+ doc = iframe[ 0 ].contentDocument;
+
+ // Support: IE
+ doc.write();
+ doc.close();
+
+ display = actualDisplay( nodeName, doc );
+ iframe.detach();
+ }
+
+ // Store the correct default display
+ elemdisplay[ nodeName ] = display;
+ }
+
+ return display;
+}
+var rmargin = (/^margin/);
+
+var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
+
+var getStyles = function( elem ) {
+ // Support: IE<=11+, Firefox<=30+ (#15098, #14150)
+ // IE throws on elements created in popups
+ // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+ if ( elem.ownerDocument.defaultView.opener ) {
+ return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
+ }
+
+ return window.getComputedStyle( elem, null );
+ };
+
+
+
+function curCSS( elem, name, computed ) {
+ var width, minWidth, maxWidth, ret,
+ style = elem.style;
+
+ computed = computed || getStyles( elem );
+
+ // Support: IE9
+ // getPropertyValue is only needed for .css('filter') (#12537)
+ if ( computed ) {
+ ret = computed.getPropertyValue( name ) || computed[ name ];
+ }
+
+ if ( computed ) {
+
+ if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+ ret = jQuery.style( elem, name );
+ }
+
+ // Support: iOS < 6
+ // A tribute to the "awesome hack by Dean Edwards"
+ // iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
+ // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
+ if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+
+ // Remember the original values
+ width = style.width;
+ minWidth = style.minWidth;
+ maxWidth = style.maxWidth;
+
+ // Put in the new values to get a computed value out
+ style.minWidth = style.maxWidth = style.width = ret;
+ ret = computed.width;
+
+ // Revert the changed values
+ style.width = width;
+ style.minWidth = minWidth;
+ style.maxWidth = maxWidth;
+ }
+ }
+
+ return ret !== undefined ?
+ // Support: IE
+ // IE returns zIndex value as an integer.
+ ret + "" :
+ ret;
+}
+
+
+function addGetHookIf( conditionFn, hookFn ) {
+ // Define the hook, we'll check on the first run if it's really needed.
+ return {
+ get: function() {
+ if ( conditionFn() ) {
+ // Hook not needed (or it's not possible to use it due
+ // to missing dependency), remove it.
+ delete this.get;
+ return;
+ }
+
+ // Hook needed; redefine it so that the support test is not executed again.
+ return (this.get = hookFn).apply( this, arguments );
+ }
+ };
+}
+
+
+(function() {
+ var pixelPositionVal, boxSizingReliableVal,
+ docElem = document.documentElement,
+ container = document.createElement( "div" ),
+ div = document.createElement( "div" );
+
+ if ( !div.style ) {
+ return;
+ }
+
+ // Support: IE9-11+
+ // Style of cloned element affects source element cloned (#8908)
+ div.style.backgroundClip = "content-box";
+ div.cloneNode( true ).style.backgroundClip = "";
+ support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+ container.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;" +
+ "position:absolute";
+ container.appendChild( div );
+
+ // Executing both pixelPosition & boxSizingReliable tests require only one layout
+ // so they're executed at the same time to save the second computation.
+ function computePixelPositionAndBoxSizingReliable() {
+ div.style.cssText =
+ // Support: Firefox<29, Android 2.3
+ // Vendor-prefix box-sizing
+ "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" +
+ "box-sizing:border-box;display:block;margin-top:1%;top:1%;" +
+ "border:1px;padding:1px;width:4px;position:absolute";
+ div.innerHTML = "";
+ docElem.appendChild( container );
+
+ var divStyle = window.getComputedStyle( div, null );
+ pixelPositionVal = divStyle.top !== "1%";
+ boxSizingReliableVal = divStyle.width === "4px";
+
+ docElem.removeChild( container );
+ }
+
+ // Support: node.js jsdom
+ // Don't assume that getComputedStyle is a property of the global object
+ if ( window.getComputedStyle ) {
+ jQuery.extend( support, {
+ pixelPosition: function() {
+
+ // This test is executed only once but we still do memoizing
+ // since we can use the boxSizingReliable pre-computing.
+ // No need to check if the test was already performed, though.
+ computePixelPositionAndBoxSizingReliable();
+ return pixelPositionVal;
+ },
+ boxSizingReliable: function() {
+ if ( boxSizingReliableVal == null ) {
+ computePixelPositionAndBoxSizingReliable();
+ }
+ return boxSizingReliableVal;
+ },
+ reliableMarginRight: function() {
+
+ // Support: Android 2.3
+ // Check if div with explicit width and no margin-right incorrectly
+ // gets computed margin-right based on width of container. (#3333)
+ // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+ // This support function is only executed once so no memoizing is needed.
+ var ret,
+ marginDiv = div.appendChild( document.createElement( "div" ) );
+
+ // Reset CSS: box-sizing; display; margin; border; padding
+ marginDiv.style.cssText = div.style.cssText =
+ // Support: Firefox<29, Android 2.3
+ // Vendor-prefix box-sizing
+ "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
+ "box-sizing:content-box;display:block;margin:0;border:0;padding:0";
+ marginDiv.style.marginRight = marginDiv.style.width = "0";
+ div.style.width = "1px";
+ docElem.appendChild( container );
+
+ ret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight );
+
+ docElem.removeChild( container );
+ div.removeChild( marginDiv );
+
+ return ret;
+ }
+ });
+ }
+})();
+
+
+// A method for quickly swapping in/out CSS properties to get correct calculations.
+jQuery.swap = function( elem, options, callback, args ) {
+ var ret, name,
+ old = {};
+
+ // Remember the old values, and insert the new ones
+ for ( name in options ) {
+ old[ name ] = elem.style[ name ];
+ elem.style[ name ] = options[ name ];
+ }
+
+ ret = callback.apply( elem, args || [] );
+
+ // Revert the old values
+ for ( name in options ) {
+ elem.style[ name ] = old[ name ];
+ }
+
+ return ret;
+};
+
+
+var
+ // Swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
+ // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+ rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+ rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
+ rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ),
+
+ cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+ cssNormalTransform = {
+ letterSpacing: "0",
+ fontWeight: "400"
+ },
+
+ cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
+
+// Return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( style, name ) {
+
+ // Shortcut for names that are not vendor prefixed
+ if ( name in style ) {
+ return name;
+ }
+
+ // Check for vendor prefixed names
+ var capName = name[0].toUpperCase() + name.slice(1),
+ origName = name,
+ i = cssPrefixes.length;
+
+ while ( i-- ) {
+ name = cssPrefixes[ i ] + capName;
+ if ( name in style ) {
+ return name;
+ }
+ }
+
+ return origName;
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+ var matches = rnumsplit.exec( value );
+ return matches ?
+ // Guard against undefined "subtract", e.g., when used as in cssHooks
+ Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
+ value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
+ var i = extra === ( isBorderBox ? "border" : "content" ) ?
+ // If we already have the right measurement, avoid augmentation
+ 4 :
+ // Otherwise initialize for horizontal or vertical properties
+ name === "width" ? 1 : 0,
+
+ val = 0;
+
+ for ( ; i < 4; i += 2 ) {
+ // Both box models exclude margin, so add it if we want it
+ if ( extra === "margin" ) {
+ val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
+ }
+
+ if ( isBorderBox ) {
+ // border-box includes padding, so remove it if we want content
+ if ( extra === "content" ) {
+ val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+ }
+
+ // At this point, extra isn't border nor margin, so remove border
+ if ( extra !== "margin" ) {
+ val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+ }
+ } else {
+ // At this point, extra isn't content, so add padding
+ val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+ // At this point, extra isn't content nor padding, so add border
+ if ( extra !== "padding" ) {
+ val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+ }
+ }
+ }
+
+ return val;
+}
+
+function getWidthOrHeight( elem, name, extra ) {
+
+ // Start with offset property, which is equivalent to the border-box value
+ var valueIsBorderBox = true,
+ val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+ styles = getStyles( elem ),
+ isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+ // Some non-html elements return undefined for offsetWidth, so check for null/undefined
+ // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+ // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+ if ( val <= 0 || val == null ) {
+ // Fall back to computed then uncomputed css if necessary
+ val = curCSS( elem, name, styles );
+ if ( val < 0 || val == null ) {
+ val = elem.style[ name ];
+ }
+
+ // Computed unit is not pixels. Stop here and return.
+ if ( rnumnonpx.test(val) ) {
+ return val;
+ }
+
+ // Check for style in case a browser which returns unreliable values
+ // for getComputedStyle silently falls back to the reliable elem.style
+ valueIsBorderBox = isBorderBox &&
+ ( support.boxSizingReliable() || val === elem.style[ name ] );
+
+ // Normalize "", auto, and prepare for extra
+ val = parseFloat( val ) || 0;
+ }
+
+ // Use the active box-sizing model to add/subtract irrelevant styles
+ return ( val +
+ augmentWidthOrHeight(
+ elem,
+ name,
+ extra || ( isBorderBox ? "border" : "content" ),
+ valueIsBorderBox,
+ styles
+ )
+ ) + "px";
+}
+
+function showHide( elements, show ) {
+ var display, elem, hidden,
+ values = [],
+ index = 0,
+ length = elements.length;
+
+ for ( ; index < length; index++ ) {
+ elem = elements[ index ];
+ if ( !elem.style ) {
+ continue;
+ }
+
+ values[ index ] = data_priv.get( elem, "olddisplay" );
+ display = elem.style.display;
+ if ( show ) {
+ // Reset the inline display of this element to learn if it is
+ // being hidden by cascaded rules or not
+ if ( !values[ index ] && display === "none" ) {
+ elem.style.display = "";
+ }
+
+ // Set elements which have been overridden with display: none
+ // in a stylesheet to whatever the default browser style is
+ // for such an element
+ if ( elem.style.display === "" && isHidden( elem ) ) {
+ values[ index ] = data_priv.access( elem, "olddisplay", defaultDisplay(elem.nodeName) );
+ }
+ } else {
+ hidden = isHidden( elem );
+
+ if ( display !== "none" || !hidden ) {
+ data_priv.set( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
+ }
+ }
+ }
+
+ // Set the display of most of the elements in a second loop
+ // to avoid the constant reflow
+ for ( index = 0; index < length; index++ ) {
+ elem = elements[ index ];
+ if ( !elem.style ) {
+ continue;
+ }
+ if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
+ elem.style.display = show ? values[ index ] || "" : "none";
+ }
+ }
+
+ return elements;
+}
+
+jQuery.extend({
+
+ // Add in style property hooks for overriding the default
+ // behavior of getting and setting a style property
+ cssHooks: {
+ opacity: {
+ get: function( elem, computed ) {
+ if ( computed ) {
+
+ // We should always get a number back from opacity
+ var ret = curCSS( elem, "opacity" );
+ return ret === "" ? "1" : ret;
+ }
+ }
+ }
+ },
+
+ // Don't automatically add "px" to these possibly-unitless properties
+ cssNumber: {
+ "columnCount": true,
+ "fillOpacity": true,
+ "flexGrow": true,
+ "flexShrink": true,
+ "fontWeight": true,
+ "lineHeight": true,
+ "opacity": true,
+ "order": true,
+ "orphans": true,
+ "widows": true,
+ "zIndex": true,
+ "zoom": true
+ },
+
+ // Add in properties whose names you wish to fix before
+ // setting or getting the value
+ cssProps: {
+ "float": "cssFloat"
+ },
+
+ // Get and set the style property on a DOM Node
+ style: function( elem, name, value, extra ) {
+
+ // Don't set styles on text and comment nodes
+ if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+ return;
+ }
+
+ // Make sure that we're working with the right name
+ var ret, type, hooks,
+ origName = jQuery.camelCase( name ),
+ style = elem.style;
+
+ name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
+
+ // Gets hook for the prefixed version, then unprefixed version
+ hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+ // Check if we're setting a value
+ if ( value !== undefined ) {
+ type = typeof value;
+
+ // Convert "+=" or "-=" to relative numbers (#7345)
+ if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+ value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
+ // Fixes bug #9237
+ type = "number";
+ }
+
+ // Make sure that null and NaN values aren't set (#7116)
+ if ( value == null || value !== value ) {
+ return;
+ }
+
+ // If a number, add 'px' to the (except for certain CSS properties)
+ if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+ value += "px";
+ }
+
+ // Support: IE9-11+
+ // background-* props affect original clone's values
+ if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
+ style[ name ] = "inherit";
+ }
+
+ // If a hook was provided, use that value, otherwise just set the specified value
+ if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
+ style[ name ] = value;
+ }
+
+ } else {
+ // If a hook was provided get the non-computed value from there
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+ return ret;
+ }
+
+ // Otherwise just get the value from the style object
+ return style[ name ];
+ }
+ },
+
+ css: function( elem, name, extra, styles ) {
+ var val, num, hooks,
+ origName = jQuery.camelCase( name );
+
+ // Make sure that we're working with the right name
+ name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
+
+ // Try prefixed name followed by the unprefixed name
+ hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+ // If a hook was provided get the computed value from there
+ if ( hooks && "get" in hooks ) {
+ val = hooks.get( elem, true, extra );
+ }
+
+ // Otherwise, if a way to get the computed value exists, use that
+ if ( val === undefined ) {
+ val = curCSS( elem, name, styles );
+ }
+
+ // Convert "normal" to computed value
+ if ( val === "normal" && name in cssNormalTransform ) {
+ val = cssNormalTransform[ name ];
+ }
+
+ // Make numeric if forced or a qualifier was provided and val looks numeric
+ if ( extra === "" || extra ) {
+ num = parseFloat( val );
+ return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
+ }
+ return val;
+ }
+});
+
+jQuery.each([ "height", "width" ], function( i, name ) {
+ jQuery.cssHooks[ name ] = {
+ get: function( elem, computed, extra ) {
+ if ( computed ) {
+
+ // Certain elements can have dimension info if we invisibly show them
+ // but it must have a current display style that would benefit
+ return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ?
+ jQuery.swap( elem, cssShow, function() {
+ return getWidthOrHeight( elem, name, extra );
+ }) :
+ getWidthOrHeight( elem, name, extra );
+ }
+ },
+
+ set: function( elem, value, extra ) {
+ var styles = extra && getStyles( elem );
+ return setPositiveNumber( elem, value, extra ?
+ augmentWidthOrHeight(
+ elem,
+ name,
+ extra,
+ jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+ styles
+ ) : 0
+ );
+ }
+ };
+});
+
+// Support: Android 2.3
+jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
+ function( elem, computed ) {
+ if ( computed ) {
+ return jQuery.swap( elem, { "display": "inline-block" },
+ curCSS, [ elem, "marginRight" ] );
+ }
+ }
+);
+
+// These hooks are used by animate to expand properties
+jQuery.each({
+ margin: "",
+ padding: "",
+ border: "Width"
+}, function( prefix, suffix ) {
+ jQuery.cssHooks[ prefix + suffix ] = {
+ expand: function( value ) {
+ var i = 0,
+ expanded = {},
+
+ // Assumes a single number if not a string
+ parts = typeof value === "string" ? value.split(" ") : [ value ];
+
+ for ( ; i < 4; i++ ) {
+ expanded[ prefix + cssExpand[ i ] + suffix ] =
+ parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+ }
+
+ return expanded;
+ }
+ };
+
+ if ( !rmargin.test( prefix ) ) {
+ jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+ }
+});
+
+jQuery.fn.extend({
+ css: function( name, value ) {
+ return access( this, function( elem, name, value ) {
+ var styles, len,
+ map = {},
+ i = 0;
+
+ if ( jQuery.isArray( name ) ) {
+ styles = getStyles( elem );
+ len = name.length;
+
+ for ( ; i < len; i++ ) {
+ map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+ }
+
+ return map;
+ }
+
+ return value !== undefined ?
+ jQuery.style( elem, name, value ) :
+ jQuery.css( elem, name );
+ }, name, value, arguments.length > 1 );
+ },
+ show: function() {
+ return showHide( this, true );
+ },
+ hide: function() {
+ return showHide( this );
+ },
+ toggle: function( state ) {
+ if ( typeof state === "boolean" ) {
+ return state ? this.show() : this.hide();
+ }
+
+ return this.each(function() {
+ if ( isHidden( this ) ) {
+ jQuery( this ).show();
+ } else {
+ jQuery( this ).hide();
+ }
+ });
+ }
+});
+
+
+function Tween( elem, options, prop, end, easing ) {
+ return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+ constructor: Tween,
+ init: function( elem, options, prop, end, easing, unit ) {
+ this.elem = elem;
+ this.prop = prop;
+ this.easing = easing || "swing";
+ this.options = options;
+ this.start = this.now = this.cur();
+ this.end = end;
+ this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+ },
+ cur: function() {
+ var hooks = Tween.propHooks[ this.prop ];
+
+ return hooks && hooks.get ?
+ hooks.get( this ) :
+ Tween.propHooks._default.get( this );
+ },
+ run: function( percent ) {
+ var eased,
+ hooks = Tween.propHooks[ this.prop ];
+
+ if ( this.options.duration ) {
+ this.pos = eased = jQuery.easing[ this.easing ](
+ percent, this.options.duration * percent, 0, 1, this.options.duration
+ );
+ } else {
+ this.pos = eased = percent;
+ }
+ this.now = ( this.end - this.start ) * eased + this.start;
+
+ if ( this.options.step ) {
+ this.options.step.call( this.elem, this.now, this );
+ }
+
+ if ( hooks && hooks.set ) {
+ hooks.set( this );
+ } else {
+ Tween.propHooks._default.set( this );
+ }
+ return this;
+ }
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+ _default: {
+ get: function( tween ) {
+ var result;
+
+ if ( tween.elem[ tween.prop ] != null &&
+ (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
+ return tween.elem[ tween.prop ];
+ }
+
+ // Passing an empty string as a 3rd parameter to .css will automatically
+ // attempt a parseFloat and fallback to a string if the parse fails.
+ // Simple values such as "10px" are parsed to Float;
+ // complex values such as "rotate(1rad)" are returned as-is.
+ result = jQuery.css( tween.elem, tween.prop, "" );
+ // Empty strings, null, undefined and "auto" are converted to 0.
+ return !result || result === "auto" ? 0 : result;
+ },
+ set: function( tween ) {
+ // Use step hook for back compat.
+ // Use cssHook if its there.
+ // Use .style if available and use plain properties where available.
+ if ( jQuery.fx.step[ tween.prop ] ) {
+ jQuery.fx.step[ tween.prop ]( tween );
+ } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
+ jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+ } else {
+ tween.elem[ tween.prop ] = tween.now;
+ }
+ }
+ }
+};
+
+// Support: IE9
+// Panic based approach to setting things on disconnected nodes
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+ set: function( tween ) {
+ if ( tween.elem.nodeType && tween.elem.parentNode ) {
+ tween.elem[ tween.prop ] = tween.now;
+ }
+ }
+};
+
+jQuery.easing = {
+ linear: function( p ) {
+ return p;
+ },
+ swing: function( p ) {
+ return 0.5 - Math.cos( p * Math.PI ) / 2;
+ }
+};
+
+jQuery.fx = Tween.prototype.init;
+
+// Back Compat <1.8 extension point
+jQuery.fx.step = {};
+
+
+
+
+var
+ fxNow, timerId,
+ rfxtypes = /^(?:toggle|show|hide)$/,
+ rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ),
+ rrun = /queueHooks$/,
+ animationPrefilters = [ defaultPrefilter ],
+ tweeners = {
+ "*": [ function( prop, value ) {
+ var tween = this.createTween( prop, value ),
+ target = tween.cur(),
+ parts = rfxnum.exec( value ),
+ unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+ // Starting value computation is required for potential unit mismatches
+ start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
+ rfxnum.exec( jQuery.css( tween.elem, prop ) ),
+ scale = 1,
+ maxIterations = 20;
+
+ if ( start && start[ 3 ] !== unit ) {
+ // Trust units reported by jQuery.css
+ unit = unit || start[ 3 ];
+
+ // Make sure we update the tween properties later on
+ parts = parts || [];
+
+ // Iteratively approximate from a nonzero starting point
+ start = +target || 1;
+
+ do {
+ // If previous iteration zeroed out, double until we get *something*.
+ // Use string for doubling so we don't accidentally see scale as unchanged below
+ scale = scale || ".5";
+
+ // Adjust and apply
+ start = start / scale;
+ jQuery.style( tween.elem, prop, start + unit );
+
+ // Update scale, tolerating zero or NaN from tween.cur(),
+ // break the loop if scale is unchanged or perfect, or if we've just had enough
+ } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
+ }
+
+ // Update tween properties
+ if ( parts ) {
+ start = tween.start = +start || +target || 0;
+ tween.unit = unit;
+ // If a +=/-= token was provided, we're doing a relative animation
+ tween.end = parts[ 1 ] ?
+ start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
+ +parts[ 2 ];
+ }
+
+ return tween;
+ } ]
+ };
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+ setTimeout(function() {
+ fxNow = undefined;
+ });
+ return ( fxNow = jQuery.now() );
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+ var which,
+ i = 0,
+ attrs = { height: type };
+
+ // If we include width, step value is 1 to do all cssExpand values,
+ // otherwise step value is 2 to skip over Left and Right
+ includeWidth = includeWidth ? 1 : 0;
+ for ( ; i < 4 ; i += 2 - includeWidth ) {
+ which = cssExpand[ i ];
+ attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+ }
+
+ if ( includeWidth ) {
+ attrs.opacity = attrs.width = type;
+ }
+
+ return attrs;
+}
+
+function createTween( value, prop, animation ) {
+ var tween,
+ collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
+ index = 0,
+ length = collection.length;
+ for ( ; index < length; index++ ) {
+ if ( (tween = collection[ index ].call( animation, prop, value )) ) {
+
+ // We're done with this property
+ return tween;
+ }
+ }
+}
+
+function defaultPrefilter( elem, props, opts ) {
+ /* jshint validthis: true */
+ var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
+ anim = this,
+ orig = {},
+ style = elem.style,
+ hidden = elem.nodeType && isHidden( elem ),
+ dataShow = data_priv.get( elem, "fxshow" );
+
+ // Handle queue: false promises
+ if ( !opts.queue ) {
+ hooks = jQuery._queueHooks( elem, "fx" );
+ if ( hooks.unqueued == null ) {
+ hooks.unqueued = 0;
+ oldfire = hooks.empty.fire;
+ hooks.empty.fire = function() {
+ if ( !hooks.unqueued ) {
+ oldfire();
+ }
+ };
+ }
+ hooks.unqueued++;
+
+ anim.always(function() {
+ // Ensure the complete handler is called before this completes
+ anim.always(function() {
+ hooks.unqueued--;
+ if ( !jQuery.queue( elem, "fx" ).length ) {
+ hooks.empty.fire();
+ }
+ });
+ });
+ }
+
+ // Height/width overflow pass
+ if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
+ // Make sure that nothing sneaks out
+ // Record all 3 overflow attributes because IE9-10 do not
+ // change the overflow attribute when overflowX and
+ // overflowY are set to the same value
+ opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+ // Set display property to inline-block for height/width
+ // animations on inline elements that are having width/height animated
+ display = jQuery.css( elem, "display" );
+
+ // Test default display if display is currently "none"
+ checkDisplay = display === "none" ?
+ data_priv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
+
+ if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
+ style.display = "inline-block";
+ }
+ }
+
+ if ( opts.overflow ) {
+ style.overflow = "hidden";
+ anim.always(function() {
+ style.overflow = opts.overflow[ 0 ];
+ style.overflowX = opts.overflow[ 1 ];
+ style.overflowY = opts.overflow[ 2 ];
+ });
+ }
+
+ // show/hide pass
+ for ( prop in props ) {
+ value = props[ prop ];
+ if ( rfxtypes.exec( value ) ) {
+ delete props[ prop ];
+ toggle = toggle || value === "toggle";
+ if ( value === ( hidden ? "hide" : "show" ) ) {
+
+ // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden
+ if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
+ hidden = true;
+ } else {
+ continue;
+ }
+ }
+ orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
+
+ // Any non-fx value stops us from restoring the original display value
+ } else {
+ display = undefined;
+ }
+ }
+
+ if ( !jQuery.isEmptyObject( orig ) ) {
+ if ( dataShow ) {
+ if ( "hidden" in dataShow ) {
+ hidden = dataShow.hidden;
+ }
+ } else {
+ dataShow = data_priv.access( elem, "fxshow", {} );
+ }
+
+ // Store state if its toggle - enables .stop().toggle() to "reverse"
+ if ( toggle ) {
+ dataShow.hidden = !hidden;
+ }
+ if ( hidden ) {
+ jQuery( elem ).show();
+ } else {
+ anim.done(function() {
+ jQuery( elem ).hide();
+ });
+ }
+ anim.done(function() {
+ var prop;
+
+ data_priv.remove( elem, "fxshow" );
+ for ( prop in orig ) {
+ jQuery.style( elem, prop, orig[ prop ] );
+ }
+ });
+ for ( prop in orig ) {
+ tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
+
+ if ( !( prop in dataShow ) ) {
+ dataShow[ prop ] = tween.start;
+ if ( hidden ) {
+ tween.end = tween.start;
+ tween.start = prop === "width" || prop === "height" ? 1 : 0;
+ }
+ }
+ }
+
+ // If this is a noop like .hide().hide(), restore an overwritten display value
+ } else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) {
+ style.display = display;
+ }
+}
+
+function propFilter( props, specialEasing ) {
+ var index, name, easing, value, hooks;
+
+ // camelCase, specialEasing and expand cssHook pass
+ for ( index in props ) {
+ name = jQuery.camelCase( index );
+ easing = specialEasing[ name ];
+ value = props[ index ];
+ if ( jQuery.isArray( value ) ) {
+ easing = value[ 1 ];
+ value = props[ index ] = value[ 0 ];
+ }
+
+ if ( index !== name ) {
+ props[ name ] = value;
+ delete props[ index ];
+ }
+
+ hooks = jQuery.cssHooks[ name ];
+ if ( hooks && "expand" in hooks ) {
+ value = hooks.expand( value );
+ delete props[ name ];
+
+ // Not quite $.extend, this won't overwrite existing keys.
+ // Reusing 'index' because we have the correct "name"
+ for ( index in value ) {
+ if ( !( index in props ) ) {
+ props[ index ] = value[ index ];
+ specialEasing[ index ] = easing;
+ }
+ }
+ } else {
+ specialEasing[ name ] = easing;
+ }
+ }
+}
+
+function Animation( elem, properties, options ) {
+ var result,
+ stopped,
+ index = 0,
+ length = animationPrefilters.length,
+ deferred = jQuery.Deferred().always( function() {
+ // Don't match elem in the :animated selector
+ delete tick.elem;
+ }),
+ tick = function() {
+ if ( stopped ) {
+ return false;
+ }
+ var currentTime = fxNow || createFxNow(),
+ remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+ // Support: Android 2.3
+ // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
+ temp = remaining / animation.duration || 0,
+ percent = 1 - temp,
+ index = 0,
+ length = animation.tweens.length;
+
+ for ( ; index < length ; index++ ) {
+ animation.tweens[ index ].run( percent );
+ }
+
+ deferred.notifyWith( elem, [ animation, percent, remaining ]);
+
+ if ( percent < 1 && length ) {
+ return remaining;
+ } else {
+ deferred.resolveWith( elem, [ animation ] );
+ return false;
+ }
+ },
+ animation = deferred.promise({
+ elem: elem,
+ props: jQuery.extend( {}, properties ),
+ opts: jQuery.extend( true, { specialEasing: {} }, options ),
+ originalProperties: properties,
+ originalOptions: options,
+ startTime: fxNow || createFxNow(),
+ duration: options.duration,
+ tweens: [],
+ createTween: function( prop, end ) {
+ var tween = jQuery.Tween( elem, animation.opts, prop, end,
+ animation.opts.specialEasing[ prop ] || animation.opts.easing );
+ animation.tweens.push( tween );
+ return tween;
+ },
+ stop: function( gotoEnd ) {
+ var index = 0,
+ // If we are going to the end, we want to run all the tweens
+ // otherwise we skip this part
+ length = gotoEnd ? animation.tweens.length : 0;
+ if ( stopped ) {
+ return this;
+ }
+ stopped = true;
+ for ( ; index < length ; index++ ) {
+ animation.tweens[ index ].run( 1 );
+ }
+
+ // Resolve when we played the last frame; otherwise, reject
+ if ( gotoEnd ) {
+ deferred.resolveWith( elem, [ animation, gotoEnd ] );
+ } else {
+ deferred.rejectWith( elem, [ animation, gotoEnd ] );
+ }
+ return this;
+ }
+ }),
+ props = animation.props;
+
+ propFilter( props, animation.opts.specialEasing );
+
+ for ( ; index < length ; index++ ) {
+ result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
+ if ( result ) {
+ return result;
+ }
+ }
+
+ jQuery.map( props, createTween, animation );
+
+ if ( jQuery.isFunction( animation.opts.start ) ) {
+ animation.opts.start.call( elem, animation );
+ }
+
+ jQuery.fx.timer(
+ jQuery.extend( tick, {
+ elem: elem,
+ anim: animation,
+ queue: animation.opts.queue
+ })
+ );
+
+ // attach callbacks from options
+ return animation.progress( animation.opts.progress )
+ .done( animation.opts.done, animation.opts.complete )
+ .fail( animation.opts.fail )
+ .always( animation.opts.always );
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+ tweener: function( props, callback ) {
+ if ( jQuery.isFunction( props ) ) {
+ callback = props;
+ props = [ "*" ];
+ } else {
+ props = props.split(" ");
+ }
+
+ var prop,
+ index = 0,
+ length = props.length;
+
+ for ( ; index < length ; index++ ) {
+ prop = props[ index ];
+ tweeners[ prop ] = tweeners[ prop ] || [];
+ tweeners[ prop ].unshift( callback );
+ }
+ },
+
+ prefilter: function( callback, prepend ) {
+ if ( prepend ) {
+ animationPrefilters.unshift( callback );
+ } else {
+ animationPrefilters.push( callback );
+ }
+ }
+});
+
+jQuery.speed = function( speed, easing, fn ) {
+ var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+ complete: fn || !fn && easing ||
+ jQuery.isFunction( speed ) && speed,
+ duration: speed,
+ easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+ };
+
+ opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+ opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+
+ // Normalize opt.queue - true/undefined/null -> "fx"
+ if ( opt.queue == null || opt.queue === true ) {
+ opt.queue = "fx";
+ }
+
+ // Queueing
+ opt.old = opt.complete;
+
+ opt.complete = function() {
+ if ( jQuery.isFunction( opt.old ) ) {
+ opt.old.call( this );
+ }
+
+ if ( opt.queue ) {
+ jQuery.dequeue( this, opt.queue );
+ }
+ };
+
+ return opt;
+};
+
+jQuery.fn.extend({
+ fadeTo: function( speed, to, easing, callback ) {
+
+ // Show any hidden elements after setting opacity to 0
+ return this.filter( isHidden ).css( "opacity", 0 ).show()
+
+ // Animate to the value specified
+ .end().animate({ opacity: to }, speed, easing, callback );
+ },
+ animate: function( prop, speed, easing, callback ) {
+ var empty = jQuery.isEmptyObject( prop ),
+ optall = jQuery.speed( speed, easing, callback ),
+ doAnimation = function() {
+ // Operate on a copy of prop so per-property easing won't be lost
+ var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+ // Empty animations, or finishing resolves immediately
+ if ( empty || data_priv.get( this, "finish" ) ) {
+ anim.stop( true );
+ }
+ };
+ doAnimation.finish = doAnimation;
+
+ return empty || optall.queue === false ?
+ this.each( doAnimation ) :
+ this.queue( optall.queue, doAnimation );
+ },
+ stop: function( type, clearQueue, gotoEnd ) {
+ var stopQueue = function( hooks ) {
+ var stop = hooks.stop;
+ delete hooks.stop;
+ stop( gotoEnd );
+ };
+
+ if ( typeof type !== "string" ) {
+ gotoEnd = clearQueue;
+ clearQueue = type;
+ type = undefined;
+ }
+ if ( clearQueue && type !== false ) {
+ this.queue( type || "fx", [] );
+ }
+
+ return this.each(function() {
+ var dequeue = true,
+ index = type != null && type + "queueHooks",
+ timers = jQuery.timers,
+ data = data_priv.get( this );
+
+ if ( index ) {
+ if ( data[ index ] && data[ index ].stop ) {
+ stopQueue( data[ index ] );
+ }
+ } else {
+ for ( index in data ) {
+ if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+ stopQueue( data[ index ] );
+ }
+ }
+ }
+
+ for ( index = timers.length; index--; ) {
+ if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
+ timers[ index ].anim.stop( gotoEnd );
+ dequeue = false;
+ timers.splice( index, 1 );
+ }
+ }
+
+ // Start the next in the queue if the last step wasn't forced.
+ // Timers currently will call their complete callbacks, which
+ // will dequeue but only if they were gotoEnd.
+ if ( dequeue || !gotoEnd ) {
+ jQuery.dequeue( this, type );
+ }
+ });
+ },
+ finish: function( type ) {
+ if ( type !== false ) {
+ type = type || "fx";
+ }
+ return this.each(function() {
+ var index,
+ data = data_priv.get( this ),
+ queue = data[ type + "queue" ],
+ hooks = data[ type + "queueHooks" ],
+ timers = jQuery.timers,
+ length = queue ? queue.length : 0;
+
+ // Enable finishing flag on private data
+ data.finish = true;
+
+ // Empty the queue first
+ jQuery.queue( this, type, [] );
+
+ if ( hooks && hooks.stop ) {
+ hooks.stop.call( this, true );
+ }
+
+ // Look for any active animations, and finish them
+ for ( index = timers.length; index--; ) {
+ if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+ timers[ index ].anim.stop( true );
+ timers.splice( index, 1 );
+ }
+ }
+
+ // Look for any animations in the old queue and finish them
+ for ( index = 0; index < length; index++ ) {
+ if ( queue[ index ] && queue[ index ].finish ) {
+ queue[ index ].finish.call( this );
+ }
+ }
+
+ // Turn off finishing flag
+ delete data.finish;
+ });
+ }
+});
+
+jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
+ var cssFn = jQuery.fn[ name ];
+ jQuery.fn[ name ] = function( speed, easing, callback ) {
+ return speed == null || typeof speed === "boolean" ?
+ cssFn.apply( this, arguments ) :
+ this.animate( genFx( name, true ), speed, easing, callback );
+ };
+});
+
+// Generate shortcuts for custom animations
+jQuery.each({
+ slideDown: genFx("show"),
+ slideUp: genFx("hide"),
+ slideToggle: genFx("toggle"),
+ fadeIn: { opacity: "show" },
+ fadeOut: { opacity: "hide" },
+ fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+ jQuery.fn[ name ] = function( speed, easing, callback ) {
+ return this.animate( props, speed, easing, callback );
+ };
+});
+
+jQuery.timers = [];
+jQuery.fx.tick = function() {
+ var timer,
+ i = 0,
+ timers = jQuery.timers;
+
+ fxNow = jQuery.now();
+
+ for ( ; i < timers.length; i++ ) {
+ timer = timers[ i ];
+ // Checks the timer has not already been removed
+ if ( !timer() && timers[ i ] === timer ) {
+ timers.splice( i--, 1 );
+ }
+ }
+
+ if ( !timers.length ) {
+ jQuery.fx.stop();
+ }
+ fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+ jQuery.timers.push( timer );
+ if ( timer() ) {
+ jQuery.fx.start();
+ } else {
+ jQuery.timers.pop();
+ }
+};
+
+jQuery.fx.interval = 13;
+
+jQuery.fx.start = function() {
+ if ( !timerId ) {
+ timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
+ }
+};
+
+jQuery.fx.stop = function() {
+ clearInterval( timerId );
+ timerId = null;
+};
+
+jQuery.fx.speeds = {
+ slow: 600,
+ fast: 200,
+ // Default speed
+ _default: 400
+};
+
+
+// Based off of the plugin by Clint Helfers, with permission.
+// http://blindsignals.com/index.php/2009/07/jquery-delay/
+jQuery.fn.delay = function( time, type ) {
+ time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+ type = type || "fx";
+
+ return this.queue( type, function( next, hooks ) {
+ var timeout = setTimeout( next, time );
+ hooks.stop = function() {
+ clearTimeout( timeout );
+ };
+ });
+};
+
+
+(function() {
+ var input = document.createElement( "input" ),
+ select = document.createElement( "select" ),
+ opt = select.appendChild( document.createElement( "option" ) );
+
+ input.type = "checkbox";
+
+ // Support: iOS<=5.1, Android<=4.2+
+ // Default value for a checkbox should be "on"
+ support.checkOn = input.value !== "";
+
+ // Support: IE<=11+
+ // Must access selectedIndex to make default options select
+ support.optSelected = opt.selected;
+
+ // Support: Android<=2.3
+ // Options inside disabled selects are incorrectly marked as disabled
+ select.disabled = true;
+ support.optDisabled = !opt.disabled;
+
+ // Support: IE<=11+
+ // An input loses its value after becoming a radio
+ input = document.createElement( "input" );
+ input.value = "t";
+ input.type = "radio";
+ support.radioValue = input.value === "t";
+})();
+
+
+var nodeHook, boolHook,
+ attrHandle = jQuery.expr.attrHandle;
+
+jQuery.fn.extend({
+ attr: function( name, value ) {
+ return access( this, jQuery.attr, name, value, arguments.length > 1 );
+ },
+
+ removeAttr: function( name ) {
+ return this.each(function() {
+ jQuery.removeAttr( this, name );
+ });
+ }
+});
+
+jQuery.extend({
+ attr: function( elem, name, value ) {
+ var hooks, ret,
+ nType = elem.nodeType;
+
+ // don't get/set attributes on text, comment and attribute nodes
+ if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+ return;
+ }
+
+ // Fallback to prop when attributes are not supported
+ if ( typeof elem.getAttribute === strundefined ) {
+ return jQuery.prop( elem, name, value );
+ }
+
+ // All attributes are lowercase
+ // Grab necessary hook if one is defined
+ if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+ name = name.toLowerCase();
+ hooks = jQuery.attrHooks[ name ] ||
+ ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
+ }
+
+ if ( value !== undefined ) {
+
+ if ( value === null ) {
+ jQuery.removeAttr( elem, name );
+
+ } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+ return ret;
+
+ } else {
+ elem.setAttribute( name, value + "" );
+ return value;
+ }
+
+ } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+ return ret;
+
+ } else {
+ ret = jQuery.find.attr( elem, name );
+
+ // Non-existent attributes return null, we normalize to undefined
+ return ret == null ?
+ undefined :
+ ret;
+ }
+ },
+
+ removeAttr: function( elem, value ) {
+ var name, propName,
+ i = 0,
+ attrNames = value && value.match( rnotwhite );
+
+ if ( attrNames && elem.nodeType === 1 ) {
+ while ( (name = attrNames[i++]) ) {
+ propName = jQuery.propFix[ name ] || name;
+
+ // Boolean attributes get special treatment (#10870)
+ if ( jQuery.expr.match.bool.test( name ) ) {
+ // Set corresponding property to false
+ elem[ propName ] = false;
+ }
+
+ elem.removeAttribute( name );
+ }
+ }
+ },
+
+ attrHooks: {
+ type: {
+ set: function( elem, value ) {
+ if ( !support.radioValue && value === "radio" &&
+ jQuery.nodeName( elem, "input" ) ) {
+ var val = elem.value;
+ elem.setAttribute( "type", value );
+ if ( val ) {
+ elem.value = val;
+ }
+ return value;
+ }
+ }
+ }
+ }
+});
+
+// Hooks for boolean attributes
+boolHook = {
+ set: function( elem, value, name ) {
+ if ( value === false ) {
+ // Remove boolean attributes when set to false
+ jQuery.removeAttr( elem, name );
+ } else {
+ elem.setAttribute( name, name );
+ }
+ return name;
+ }
+};
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
+ var getter = attrHandle[ name ] || jQuery.find.attr;
+
+ attrHandle[ name ] = function( elem, name, isXML ) {
+ var ret, handle;
+ if ( !isXML ) {
+ // Avoid an infinite loop by temporarily removing this function from the getter
+ handle = attrHandle[ name ];
+ attrHandle[ name ] = ret;
+ ret = getter( elem, name, isXML ) != null ?
+ name.toLowerCase() :
+ null;
+ attrHandle[ name ] = handle;
+ }
+ return ret;
+ };
+});
+
+
+
+
+var rfocusable = /^(?:input|select|textarea|button)$/i;
+
+jQuery.fn.extend({
+ prop: function( name, value ) {
+ return access( this, jQuery.prop, name, value, arguments.length > 1 );
+ },
+
+ removeProp: function( name ) {
+ return this.each(function() {
+ delete this[ jQuery.propFix[ name ] || name ];
+ });
+ }
+});
+
+jQuery.extend({
+ propFix: {
+ "for": "htmlFor",
+ "class": "className"
+ },
+
+ prop: function( elem, name, value ) {
+ var ret, hooks, notxml,
+ nType = elem.nodeType;
+
+ // Don't get/set properties on text, comment and attribute nodes
+ if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+ return;
+ }
+
+ notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+ if ( notxml ) {
+ // Fix name and attach hooks
+ name = jQuery.propFix[ name ] || name;
+ hooks = jQuery.propHooks[ name ];
+ }
+
+ if ( value !== undefined ) {
+ return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
+ ret :
+ ( elem[ name ] = value );
+
+ } else {
+ return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
+ ret :
+ elem[ name ];
+ }
+ },
+
+ propHooks: {
+ tabIndex: {
+ get: function( elem ) {
+ return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ?
+ elem.tabIndex :
+ -1;
+ }
+ }
+ }
+});
+
+if ( !support.optSelected ) {
+ jQuery.propHooks.selected = {
+ get: function( elem ) {
+ var parent = elem.parentNode;
+ if ( parent && parent.parentNode ) {
+ parent.parentNode.selectedIndex;
+ }
+ return null;
+ }
+ };
+}
+
+jQuery.each([
+ "tabIndex",
+ "readOnly",
+ "maxLength",
+ "cellSpacing",
+ "cellPadding",
+ "rowSpan",
+ "colSpan",
+ "useMap",
+ "frameBorder",
+ "contentEditable"
+], function() {
+ jQuery.propFix[ this.toLowerCase() ] = this;
+});
+
+
+
+
+var rclass = /[\t\r\n\f]/g;
+
+jQuery.fn.extend({
+ addClass: function( value ) {
+ var classes, elem, cur, clazz, j, finalValue,
+ proceed = typeof value === "string" && value,
+ i = 0,
+ len = this.length;
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function( j ) {
+ jQuery( this ).addClass( value.call( this, j, this.className ) );
+ });
+ }
+
+ if ( proceed ) {
+ // The disjunction here is for better compressibility (see removeClass)
+ classes = ( value || "" ).match( rnotwhite ) || [];
+
+ for ( ; i < len; i++ ) {
+ elem = this[ i ];
+ cur = elem.nodeType === 1 && ( elem.className ?
+ ( " " + elem.className + " " ).replace( rclass, " " ) :
+ " "
+ );
+
+ if ( cur ) {
+ j = 0;
+ while ( (clazz = classes[j++]) ) {
+ if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+ cur += clazz + " ";
+ }
+ }
+
+ // only assign if different to avoid unneeded rendering.
+ finalValue = jQuery.trim( cur );
+ if ( elem.className !== finalValue ) {
+ elem.className = finalValue;
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ removeClass: function( value ) {
+ var classes, elem, cur, clazz, j, finalValue,
+ proceed = arguments.length === 0 || typeof value === "string" && value,
+ i = 0,
+ len = this.length;
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function( j ) {
+ jQuery( this ).removeClass( value.call( this, j, this.className ) );
+ });
+ }
+ if ( proceed ) {
+ classes = ( value || "" ).match( rnotwhite ) || [];
+
+ for ( ; i < len; i++ ) {
+ elem = this[ i ];
+ // This expression is here for better compressibility (see addClass)
+ cur = elem.nodeType === 1 && ( elem.className ?
+ ( " " + elem.className + " " ).replace( rclass, " " ) :
+ ""
+ );
+
+ if ( cur ) {
+ j = 0;
+ while ( (clazz = classes[j++]) ) {
+ // Remove *all* instances
+ while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
+ cur = cur.replace( " " + clazz + " ", " " );
+ }
+ }
+
+ // Only assign if different to avoid unneeded rendering.
+ finalValue = value ? jQuery.trim( cur ) : "";
+ if ( elem.className !== finalValue ) {
+ elem.className = finalValue;
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ toggleClass: function( value, stateVal ) {
+ var type = typeof value;
+
+ if ( typeof stateVal === "boolean" && type === "string" ) {
+ return stateVal ? this.addClass( value ) : this.removeClass( value );
+ }
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function( i ) {
+ jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+ });
+ }
+
+ return this.each(function() {
+ if ( type === "string" ) {
+ // Toggle individual class names
+ var className,
+ i = 0,
+ self = jQuery( this ),
+ classNames = value.match( rnotwhite ) || [];
+
+ while ( (className = classNames[ i++ ]) ) {
+ // Check each className given, space separated list
+ if ( self.hasClass( className ) ) {
+ self.removeClass( className );
+ } else {
+ self.addClass( className );
+ }
+ }
+
+ // Toggle whole class name
+ } else if ( type === strundefined || type === "boolean" ) {
+ if ( this.className ) {
+ // store className if set
+ data_priv.set( this, "__className__", this.className );
+ }
+
+ // If the element has a class name or if we're passed `false`,
+ // then remove the whole classname (if there was one, the above saved it).
+ // Otherwise bring back whatever was previously saved (if anything),
+ // falling back to the empty string if nothing was stored.
+ this.className = this.className || value === false ? "" : data_priv.get( this, "__className__" ) || "";
+ }
+ });
+ },
+
+ hasClass: function( selector ) {
+ var className = " " + selector + " ",
+ i = 0,
+ l = this.length;
+ for ( ; i < l; i++ ) {
+ if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+});
+
+
+
+
+var rreturn = /\r/g;
+
+jQuery.fn.extend({
+ val: function( value ) {
+ var hooks, ret, isFunction,
+ elem = this[0];
+
+ if ( !arguments.length ) {
+ if ( elem ) {
+ hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+ return ret;
+ }
+
+ ret = elem.value;
+
+ return typeof ret === "string" ?
+ // Handle most common string cases
+ ret.replace(rreturn, "") :
+ // Handle cases where value is null/undef or number
+ ret == null ? "" : ret;
+ }
+
+ return;
+ }
+
+ isFunction = jQuery.isFunction( value );
+
+ return this.each(function( i ) {
+ var val;
+
+ if ( this.nodeType !== 1 ) {
+ return;
+ }
+
+ if ( isFunction ) {
+ val = value.call( this, i, jQuery( this ).val() );
+ } else {
+ val = value;
+ }
+
+ // Treat null/undefined as ""; convert numbers to string
+ if ( val == null ) {
+ val = "";
+
+ } else if ( typeof val === "number" ) {
+ val += "";
+
+ } else if ( jQuery.isArray( val ) ) {
+ val = jQuery.map( val, function( value ) {
+ return value == null ? "" : value + "";
+ });
+ }
+
+ hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+ // If set returns undefined, fall back to normal setting
+ if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+ this.value = val;
+ }
+ });
+ }
+});
+
+jQuery.extend({
+ valHooks: {
+ option: {
+ get: function( elem ) {
+ var val = jQuery.find.attr( elem, "value" );
+ return val != null ?
+ val :
+ // Support: IE10-11+
+ // option.text throws exceptions (#14686, #14858)
+ jQuery.trim( jQuery.text( elem ) );
+ }
+ },
+ select: {
+ get: function( elem ) {
+ var value, option,
+ options = elem.options,
+ index = elem.selectedIndex,
+ one = elem.type === "select-one" || index < 0,
+ values = one ? null : [],
+ max = one ? index + 1 : options.length,
+ i = index < 0 ?
+ max :
+ one ? index : 0;
+
+ // Loop through all the selected options
+ for ( ; i < max; i++ ) {
+ option = options[ i ];
+
+ // IE6-9 doesn't update selected after form reset (#2551)
+ if ( ( option.selected || i === index ) &&
+ // Don't return options that are disabled or in a disabled optgroup
+ ( support.optDisabled ? !option.disabled : option.getAttribute( "disabled" ) === null ) &&
+ ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
+
+ // Get the specific value for the option
+ value = jQuery( option ).val();
+
+ // We don't need an array for one selects
+ if ( one ) {
+ return value;
+ }
+
+ // Multi-Selects return an array
+ values.push( value );
+ }
+ }
+
+ return values;
+ },
+
+ set: function( elem, value ) {
+ var optionSet, option,
+ options = elem.options,
+ values = jQuery.makeArray( value ),
+ i = options.length;
+
+ while ( i-- ) {
+ option = options[ i ];
+ if ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) {
+ optionSet = true;
+ }
+ }
+
+ // Force browsers to behave consistently when non-matching value is set
+ if ( !optionSet ) {
+ elem.selectedIndex = -1;
+ }
+ return values;
+ }
+ }
+ }
+});
+
+// Radios and checkboxes getter/setter
+jQuery.each([ "radio", "checkbox" ], function() {
+ jQuery.valHooks[ this ] = {
+ set: function( elem, value ) {
+ if ( jQuery.isArray( value ) ) {
+ return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
+ }
+ }
+ };
+ if ( !support.checkOn ) {
+ jQuery.valHooks[ this ].get = function( elem ) {
+ return elem.getAttribute("value") === null ? "on" : elem.value;
+ };
+ }
+});
+
+
+
+
+// Return jQuery for attributes-only inclusion
+
+
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+ "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+ "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
+
+ // Handle event binding
+ jQuery.fn[ name ] = function( data, fn ) {
+ return arguments.length > 0 ?
+ this.on( name, null, data, fn ) :
+ this.trigger( name );
+ };
+});
+
+jQuery.fn.extend({
+ hover: function( fnOver, fnOut ) {
+ return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+ },
+
+ bind: function( types, data, fn ) {
+ return this.on( types, null, data, fn );
+ },
+ unbind: function( types, fn ) {
+ return this.off( types, null, fn );
+ },
+
+ delegate: function( selector, types, data, fn ) {
+ return this.on( types, selector, data, fn );
+ },
+ undelegate: function( selector, types, fn ) {
+ // ( namespace ) or ( selector, types [, fn] )
+ return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
+ }
+});
+
+
+var nonce = jQuery.now();
+
+var rquery = (/\?/);
+
+
+
+// Support: Android 2.3
+// Workaround failure to string-cast null input
+jQuery.parseJSON = function( data ) {
+ return JSON.parse( data + "" );
+};
+
+
+// Cross-browser xml parsing
+jQuery.parseXML = function( data ) {
+ var xml, tmp;
+ if ( !data || typeof data !== "string" ) {
+ return null;
+ }
+
+ // Support: IE9
+ try {
+ tmp = new DOMParser();
+ xml = tmp.parseFromString( data, "text/xml" );
+ } catch ( e ) {
+ xml = undefined;
+ }
+
+ if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
+ jQuery.error( "Invalid XML: " + data );
+ }
+ return xml;
+};
+
+
+var
+ rhash = /#.*$/,
+ rts = /([?&])_=[^&]*/,
+ rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
+ // #7653, #8125, #8152: local protocol detection
+ rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+ rnoContent = /^(?:GET|HEAD)$/,
+ rprotocol = /^\/\//,
+ rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
+
+ /* Prefilters
+ * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+ * 2) These are called:
+ * - BEFORE asking for a transport
+ * - AFTER param serialization (s.data is a string if s.processData is true)
+ * 3) key is the dataType
+ * 4) the catchall symbol "*" can be used
+ * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+ */
+ prefilters = {},
+
+ /* Transports bindings
+ * 1) key is the dataType
+ * 2) the catchall symbol "*" can be used
+ * 3) selection will start with transport dataType and THEN go to "*" if needed
+ */
+ transports = {},
+
+ // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+ allTypes = "*/".concat( "*" ),
+
+ // Document location
+ ajaxLocation = window.location.href,
+
+ // Segment location into parts
+ ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+ // dataTypeExpression is optional and defaults to "*"
+ return function( dataTypeExpression, func ) {
+
+ if ( typeof dataTypeExpression !== "string" ) {
+ func = dataTypeExpression;
+ dataTypeExpression = "*";
+ }
+
+ var dataType,
+ i = 0,
+ dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
+
+ if ( jQuery.isFunction( func ) ) {
+ // For each dataType in the dataTypeExpression
+ while ( (dataType = dataTypes[i++]) ) {
+ // Prepend if requested
+ if ( dataType[0] === "+" ) {
+ dataType = dataType.slice( 1 ) || "*";
+ (structure[ dataType ] = structure[ dataType ] || []).unshift( func );
+
+ // Otherwise append
+ } else {
+ (structure[ dataType ] = structure[ dataType ] || []).push( func );
+ }
+ }
+ }
+ };
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+ var inspected = {},
+ seekingTransport = ( structure === transports );
+
+ function inspect( dataType ) {
+ var selected;
+ inspected[ dataType ] = true;
+ jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+ var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+ if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+ options.dataTypes.unshift( dataTypeOrTransport );
+ inspect( dataTypeOrTransport );
+ return false;
+ } else if ( seekingTransport ) {
+ return !( selected = dataTypeOrTransport );
+ }
+ });
+ return selected;
+ }
+
+ return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+ var key, deep,
+ flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+ for ( key in src ) {
+ if ( src[ key ] !== undefined ) {
+ ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
+ }
+ }
+ if ( deep ) {
+ jQuery.extend( true, target, deep );
+ }
+
+ return target;
+}
+
+/* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+ var ct, type, finalDataType, firstDataType,
+ contents = s.contents,
+ dataTypes = s.dataTypes;
+
+ // Remove auto dataType and get content-type in the process
+ while ( dataTypes[ 0 ] === "*" ) {
+ dataTypes.shift();
+ if ( ct === undefined ) {
+ ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
+ }
+ }
+
+ // Check if we're dealing with a known content-type
+ if ( ct ) {
+ for ( type in contents ) {
+ if ( contents[ type ] && contents[ type ].test( ct ) ) {
+ dataTypes.unshift( type );
+ break;
+ }
+ }
+ }
+
+ // Check to see if we have a response for the expected dataType
+ if ( dataTypes[ 0 ] in responses ) {
+ finalDataType = dataTypes[ 0 ];
+ } else {
+ // Try convertible dataTypes
+ for ( type in responses ) {
+ if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+ finalDataType = type;
+ break;
+ }
+ if ( !firstDataType ) {
+ firstDataType = type;
+ }
+ }
+ // Or just use first one
+ finalDataType = finalDataType || firstDataType;
+ }
+
+ // If we found a dataType
+ // We add the dataType to the list if needed
+ // and return the corresponding response
+ if ( finalDataType ) {
+ if ( finalDataType !== dataTypes[ 0 ] ) {
+ dataTypes.unshift( finalDataType );
+ }
+ return responses[ finalDataType ];
+ }
+}
+
+/* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+function ajaxConvert( s, response, jqXHR, isSuccess ) {
+ var conv2, current, conv, tmp, prev,
+ converters = {},
+ // Work with a copy of dataTypes in case we need to modify it for conversion
+ dataTypes = s.dataTypes.slice();
+
+ // Create converters map with lowercased keys
+ if ( dataTypes[ 1 ] ) {
+ for ( conv in s.converters ) {
+ converters[ conv.toLowerCase() ] = s.converters[ conv ];
+ }
+ }
+
+ current = dataTypes.shift();
+
+ // Convert to each sequential dataType
+ while ( current ) {
+
+ if ( s.responseFields[ current ] ) {
+ jqXHR[ s.responseFields[ current ] ] = response;
+ }
+
+ // Apply the dataFilter if provided
+ if ( !prev && isSuccess && s.dataFilter ) {
+ response = s.dataFilter( response, s.dataType );
+ }
+
+ prev = current;
+ current = dataTypes.shift();
+
+ if ( current ) {
+
+ // There's only work to do if current dataType is non-auto
+ if ( current === "*" ) {
+
+ current = prev;
+
+ // Convert response if prev dataType is non-auto and differs from current
+ } else if ( prev !== "*" && prev !== current ) {
+
+ // Seek a direct converter
+ conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+ // If none found, seek a pair
+ if ( !conv ) {
+ for ( conv2 in converters ) {
+
+ // If conv2 outputs current
+ tmp = conv2.split( " " );
+ if ( tmp[ 1 ] === current ) {
+
+ // If prev can be converted to accepted input
+ conv = converters[ prev + " " + tmp[ 0 ] ] ||
+ converters[ "* " + tmp[ 0 ] ];
+ if ( conv ) {
+ // Condense equivalence converters
+ if ( conv === true ) {
+ conv = converters[ conv2 ];
+
+ // Otherwise, insert the intermediate dataType
+ } else if ( converters[ conv2 ] !== true ) {
+ current = tmp[ 0 ];
+ dataTypes.unshift( tmp[ 1 ] );
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ // Apply converter (if not an equivalence)
+ if ( conv !== true ) {
+
+ // Unless errors are allowed to bubble, catch and return them
+ if ( conv && s[ "throws" ] ) {
+ response = conv( response );
+ } else {
+ try {
+ response = conv( response );
+ } catch ( e ) {
+ return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return { state: "success", data: response };
+}
+
+jQuery.extend({
+
+ // Counter for holding the number of active queries
+ active: 0,
+
+ // Last-Modified header cache for next request
+ lastModified: {},
+ etag: {},
+
+ ajaxSettings: {
+ url: ajaxLocation,
+ type: "GET",
+ isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+ global: true,
+ processData: true,
+ async: true,
+ contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+ /*
+ timeout: 0,
+ data: null,
+ dataType: null,
+ username: null,
+ password: null,
+ cache: null,
+ throws: false,
+ traditional: false,
+ headers: {},
+ */
+
+ accepts: {
+ "*": allTypes,
+ text: "text/plain",
+ html: "text/html",
+ xml: "application/xml, text/xml",
+ json: "application/json, text/javascript"
+ },
+
+ contents: {
+ xml: /xml/,
+ html: /html/,
+ json: /json/
+ },
+
+ responseFields: {
+ xml: "responseXML",
+ text: "responseText",
+ json: "responseJSON"
+ },
+
+ // Data converters
+ // Keys separate source (or catchall "*") and destination types with a single space
+ converters: {
+
+ // Convert anything to text
+ "* text": String,
+
+ // Text to html (true = no transformation)
+ "text html": true,
+
+ // Evaluate text as a json expression
+ "text json": jQuery.parseJSON,
+
+ // Parse text as xml
+ "text xml": jQuery.parseXML
+ },
+
+ // For options that shouldn't be deep extended:
+ // you can add your own custom options here if
+ // and when you create one that shouldn't be
+ // deep extended (see ajaxExtend)
+ flatOptions: {
+ url: true,
+ context: true
+ }
+ },
+
+ // Creates a full fledged settings object into target
+ // with both ajaxSettings and settings fields.
+ // If target is omitted, writes into ajaxSettings.
+ ajaxSetup: function( target, settings ) {
+ return settings ?
+
+ // Building a settings object
+ ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+ // Extending ajaxSettings
+ ajaxExtend( jQuery.ajaxSettings, target );
+ },
+
+ ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+ ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+ // Main method
+ ajax: function( url, options ) {
+
+ // If url is an object, simulate pre-1.5 signature
+ if ( typeof url === "object" ) {
+ options = url;
+ url = undefined;
+ }
+
+ // Force options to be an object
+ options = options || {};
+
+ var transport,
+ // URL without anti-cache param
+ cacheURL,
+ // Response headers
+ responseHeadersString,
+ responseHeaders,
+ // timeout handle
+ timeoutTimer,
+ // Cross-domain detection vars
+ parts,
+ // To know if global events are to be dispatched
+ fireGlobals,
+ // Loop variable
+ i,
+ // Create the final options object
+ s = jQuery.ajaxSetup( {}, options ),
+ // Callbacks context
+ callbackContext = s.context || s,
+ // Context for global events is callbackContext if it is a DOM node or jQuery collection
+ globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
+ jQuery( callbackContext ) :
+ jQuery.event,
+ // Deferreds
+ deferred = jQuery.Deferred(),
+ completeDeferred = jQuery.Callbacks("once memory"),
+ // Status-dependent callbacks
+ statusCode = s.statusCode || {},
+ // Headers (they are sent all at once)
+ requestHeaders = {},
+ requestHeadersNames = {},
+ // The jqXHR state
+ state = 0,
+ // Default abort message
+ strAbort = "canceled",
+ // Fake xhr
+ jqXHR = {
+ readyState: 0,
+
+ // Builds headers hashtable if needed
+ getResponseHeader: function( key ) {
+ var match;
+ if ( state === 2 ) {
+ if ( !responseHeaders ) {
+ responseHeaders = {};
+ while ( (match = rheaders.exec( responseHeadersString )) ) {
+ responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+ }
+ }
+ match = responseHeaders[ key.toLowerCase() ];
+ }
+ return match == null ? null : match;
+ },
+
+ // Raw string
+ getAllResponseHeaders: function() {
+ return state === 2 ? responseHeadersString : null;
+ },
+
+ // Caches the header
+ setRequestHeader: function( name, value ) {
+ var lname = name.toLowerCase();
+ if ( !state ) {
+ name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+ requestHeaders[ name ] = value;
+ }
+ return this;
+ },
+
+ // Overrides response content-type header
+ overrideMimeType: function( type ) {
+ if ( !state ) {
+ s.mimeType = type;
+ }
+ return this;
+ },
+
+ // Status-dependent callbacks
+ statusCode: function( map ) {
+ var code;
+ if ( map ) {
+ if ( state < 2 ) {
+ for ( code in map ) {
+ // Lazy-add the new callback in a way that preserves old ones
+ statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+ }
+ } else {
+ // Execute the appropriate callbacks
+ jqXHR.always( map[ jqXHR.status ] );
+ }
+ }
+ return this;
+ },
+
+ // Cancel the request
+ abort: function( statusText ) {
+ var finalText = statusText || strAbort;
+ if ( transport ) {
+ transport.abort( finalText );
+ }
+ done( 0, finalText );
+ return this;
+ }
+ };
+
+ // Attach deferreds
+ deferred.promise( jqXHR ).complete = completeDeferred.add;
+ jqXHR.success = jqXHR.done;
+ jqXHR.error = jqXHR.fail;
+
+ // Remove hash character (#7531: and string promotion)
+ // Add protocol if not provided (prefilters might expect it)
+ // Handle falsy url in the settings object (#10093: consistency with old signature)
+ // We also use the url parameter if available
+ s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" )
+ .replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+ // Alias method option to type as per ticket #12004
+ s.type = options.method || options.type || s.method || s.type;
+
+ // Extract dataTypes list
+ s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
+
+ // A cross-domain request is in order when we have a protocol:host:port mismatch
+ if ( s.crossDomain == null ) {
+ parts = rurl.exec( s.url.toLowerCase() );
+ s.crossDomain = !!( parts &&
+ ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
+ ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
+ ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
+ );
+ }
+
+ // Convert data if not already a string
+ if ( s.data && s.processData && typeof s.data !== "string" ) {
+ s.data = jQuery.param( s.data, s.traditional );
+ }
+
+ // Apply prefilters
+ inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+ // If request was aborted inside a prefilter, stop there
+ if ( state === 2 ) {
+ return jqXHR;
+ }
+
+ // We can fire global events as of now if asked to
+ // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
+ fireGlobals = jQuery.event && s.global;
+
+ // Watch for a new set of requests
+ if ( fireGlobals && jQuery.active++ === 0 ) {
+ jQuery.event.trigger("ajaxStart");
+ }
+
+ // Uppercase the type
+ s.type = s.type.toUpperCase();
+
+ // Determine if request has content
+ s.hasContent = !rnoContent.test( s.type );
+
+ // Save the URL in case we're toying with the If-Modified-Since
+ // and/or If-None-Match header later on
+ cacheURL = s.url;
+
+ // More options handling for requests with no content
+ if ( !s.hasContent ) {
+
+ // If data is available, append data to url
+ if ( s.data ) {
+ cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
+ // #9682: remove data so that it's not used in an eventual retry
+ delete s.data;
+ }
+
+ // Add anti-cache in url if needed
+ if ( s.cache === false ) {
+ s.url = rts.test( cacheURL ) ?
+
+ // If there is already a '_' parameter, set its value
+ cacheURL.replace( rts, "$1_=" + nonce++ ) :
+
+ // Otherwise add one to the end
+ cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
+ }
+ }
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if ( s.ifModified ) {
+ if ( jQuery.lastModified[ cacheURL ] ) {
+ jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+ }
+ if ( jQuery.etag[ cacheURL ] ) {
+ jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+ }
+ }
+
+ // Set the correct header, if data is being sent
+ if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+ jqXHR.setRequestHeader( "Content-Type", s.contentType );
+ }
+
+ // Set the Accepts header for the server, depending on the dataType
+ jqXHR.setRequestHeader(
+ "Accept",
+ s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+ s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+ s.accepts[ "*" ]
+ );
+
+ // Check for headers option
+ for ( i in s.headers ) {
+ jqXHR.setRequestHeader( i, s.headers[ i ] );
+ }
+
+ // Allow custom headers/mimetypes and early abort
+ if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+ // Abort if not done already and return
+ return jqXHR.abort();
+ }
+
+ // Aborting is no longer a cancellation
+ strAbort = "abort";
+
+ // Install callbacks on deferreds
+ for ( i in { success: 1, error: 1, complete: 1 } ) {
+ jqXHR[ i ]( s[ i ] );
+ }
+
+ // Get transport
+ transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+ // If no transport, we auto-abort
+ if ( !transport ) {
+ done( -1, "No Transport" );
+ } else {
+ jqXHR.readyState = 1;
+
+ // Send global event
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+ }
+ // Timeout
+ if ( s.async && s.timeout > 0 ) {
+ timeoutTimer = setTimeout(function() {
+ jqXHR.abort("timeout");
+ }, s.timeout );
+ }
+
+ try {
+ state = 1;
+ transport.send( requestHeaders, done );
+ } catch ( e ) {
+ // Propagate exception as error if not done
+ if ( state < 2 ) {
+ done( -1, e );
+ // Simply rethrow otherwise
+ } else {
+ throw e;
+ }
+ }
+ }
+
+ // Callback for when everything is done
+ function done( status, nativeStatusText, responses, headers ) {
+ var isSuccess, success, error, response, modified,
+ statusText = nativeStatusText;
+
+ // Called once
+ if ( state === 2 ) {
+ return;
+ }
+
+ // State is "done" now
+ state = 2;
+
+ // Clear timeout if it exists
+ if ( timeoutTimer ) {
+ clearTimeout( timeoutTimer );
+ }
+
+ // Dereference transport for early garbage collection
+ // (no matter how long the jqXHR object will be used)
+ transport = undefined;
+
+ // Cache response headers
+ responseHeadersString = headers || "";
+
+ // Set readyState
+ jqXHR.readyState = status > 0 ? 4 : 0;
+
+ // Determine if successful
+ isSuccess = status >= 200 && status < 300 || status === 304;
+
+ // Get response data
+ if ( responses ) {
+ response = ajaxHandleResponses( s, jqXHR, responses );
+ }
+
+ // Convert no matter what (that way responseXXX fields are always set)
+ response = ajaxConvert( s, response, jqXHR, isSuccess );
+
+ // If successful, handle type chaining
+ if ( isSuccess ) {
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if ( s.ifModified ) {
+ modified = jqXHR.getResponseHeader("Last-Modified");
+ if ( modified ) {
+ jQuery.lastModified[ cacheURL ] = modified;
+ }
+ modified = jqXHR.getResponseHeader("etag");
+ if ( modified ) {
+ jQuery.etag[ cacheURL ] = modified;
+ }
+ }
+
+ // if no content
+ if ( status === 204 || s.type === "HEAD" ) {
+ statusText = "nocontent";
+
+ // if not modified
+ } else if ( status === 304 ) {
+ statusText = "notmodified";
+
+ // If we have data, let's convert it
+ } else {
+ statusText = response.state;
+ success = response.data;
+ error = response.error;
+ isSuccess = !error;
+ }
+ } else {
+ // Extract error from statusText and normalize for non-aborts
+ error = statusText;
+ if ( status || !statusText ) {
+ statusText = "error";
+ if ( status < 0 ) {
+ status = 0;
+ }
+ }
+ }
+
+ // Set data for the fake xhr object
+ jqXHR.status = status;
+ jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+ // Success/Error
+ if ( isSuccess ) {
+ deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+ } else {
+ deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+ }
+
+ // Status-dependent callbacks
+ jqXHR.statusCode( statusCode );
+ statusCode = undefined;
+
+ if ( fireGlobals ) {
+ globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+ [ jqXHR, s, isSuccess ? success : error ] );
+ }
+
+ // Complete
+ completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+ // Handle the global AJAX counter
+ if ( !( --jQuery.active ) ) {
+ jQuery.event.trigger("ajaxStop");
+ }
+ }
+ }
+
+ return jqXHR;
+ },
+
+ getJSON: function( url, data, callback ) {
+ return jQuery.get( url, data, callback, "json" );
+ },
+
+ getScript: function( url, callback ) {
+ return jQuery.get( url, undefined, callback, "script" );
+ }
+});
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+ jQuery[ method ] = function( url, data, callback, type ) {
+ // Shift arguments if data argument was omitted
+ if ( jQuery.isFunction( data ) ) {
+ type = type || callback;
+ callback = data;
+ data = undefined;
+ }
+
+ return jQuery.ajax({
+ url: url,
+ type: method,
+ dataType: type,
+ data: data,
+ success: callback
+ });
+ };
+});
+
+
+jQuery._evalUrl = function( url ) {
+ return jQuery.ajax({
+ url: url,
+ type: "GET",
+ dataType: "script",
+ async: false,
+ global: false,
+ "throws": true
+ });
+};
+
+
+jQuery.fn.extend({
+ wrapAll: function( html ) {
+ var wrap;
+
+ if ( jQuery.isFunction( html ) ) {
+ return this.each(function( i ) {
+ jQuery( this ).wrapAll( html.call(this, i) );
+ });
+ }
+
+ if ( this[ 0 ] ) {
+
+ // The elements to wrap the target around
+ wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
+
+ if ( this[ 0 ].parentNode ) {
+ wrap.insertBefore( this[ 0 ] );
+ }
+
+ wrap.map(function() {
+ var elem = this;
+
+ while ( elem.firstElementChild ) {
+ elem = elem.firstElementChild;
+ }
+
+ return elem;
+ }).append( this );
+ }
+
+ return this;
+ },
+
+ wrapInner: function( html ) {
+ if ( jQuery.isFunction( html ) ) {
+ return this.each(function( i ) {
+ jQuery( this ).wrapInner( html.call(this, i) );
+ });
+ }
+
+ return this.each(function() {
+ var self = jQuery( this ),
+ contents = self.contents();
+
+ if ( contents.length ) {
+ contents.wrapAll( html );
+
+ } else {
+ self.append( html );
+ }
+ });
+ },
+
+ wrap: function( html ) {
+ var isFunction = jQuery.isFunction( html );
+
+ return this.each(function( i ) {
+ jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
+ });
+ },
+
+ unwrap: function() {
+ return this.parent().each(function() {
+ if ( !jQuery.nodeName( this, "body" ) ) {
+ jQuery( this ).replaceWith( this.childNodes );
+ }
+ }).end();
+ }
+});
+
+
+jQuery.expr.filters.hidden = function( elem ) {
+ // Support: Opera <= 12.12
+ // Opera reports offsetWidths and offsetHeights less than zero on some elements
+ return elem.offsetWidth <= 0 && elem.offsetHeight <= 0;
+};
+jQuery.expr.filters.visible = function( elem ) {
+ return !jQuery.expr.filters.hidden( elem );
+};
+
+
+
+
+var r20 = /%20/g,
+ rbracket = /\[\]$/,
+ rCRLF = /\r?\n/g,
+ rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+ rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+function buildParams( prefix, obj, traditional, add ) {
+ var name;
+
+ if ( jQuery.isArray( obj ) ) {
+ // Serialize array item.
+ jQuery.each( obj, function( i, v ) {
+ if ( traditional || rbracket.test( prefix ) ) {
+ // Treat each array item as a scalar.
+ add( prefix, v );
+
+ } else {
+ // Item is non-scalar (array or object), encode its numeric index.
+ buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
+ }
+ });
+
+ } else if ( !traditional && jQuery.type( obj ) === "object" ) {
+ // Serialize object item.
+ for ( name in obj ) {
+ buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+ }
+
+ } else {
+ // Serialize scalar item.
+ add( prefix, obj );
+ }
+}
+
+// Serialize an array of form elements or a set of
+// key/values into a query string
+jQuery.param = function( a, traditional ) {
+ var prefix,
+ s = [],
+ add = function( key, value ) {
+ // If value is a function, invoke it and return its value
+ value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
+ s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+ };
+
+ // Set traditional to true for jQuery <= 1.3.2 behavior.
+ if ( traditional === undefined ) {
+ traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+ }
+
+ // If an array was passed in, assume that it is an array of form elements.
+ if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+ // Serialize the form elements
+ jQuery.each( a, function() {
+ add( this.name, this.value );
+ });
+
+ } else {
+ // If traditional, encode the "old" way (the way 1.3.2 or older
+ // did it), otherwise encode params recursively.
+ for ( prefix in a ) {
+ buildParams( prefix, a[ prefix ], traditional, add );
+ }
+ }
+
+ // Return the resulting serialization
+ return s.join( "&" ).replace( r20, "+" );
+};
+
+jQuery.fn.extend({
+ serialize: function() {
+ return jQuery.param( this.serializeArray() );
+ },
+ serializeArray: function() {
+ return this.map(function() {
+ // Can add propHook for "elements" to filter or add form elements
+ var elements = jQuery.prop( this, "elements" );
+ return elements ? jQuery.makeArray( elements ) : this;
+ })
+ .filter(function() {
+ var type = this.type;
+
+ // Use .is( ":disabled" ) so that fieldset[disabled] works
+ return this.name && !jQuery( this ).is( ":disabled" ) &&
+ rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+ ( this.checked || !rcheckableType.test( type ) );
+ })
+ .map(function( i, elem ) {
+ var val = jQuery( this ).val();
+
+ return val == null ?
+ null :
+ jQuery.isArray( val ) ?
+ jQuery.map( val, function( val ) {
+ return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+ }) :
+ { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+ }).get();
+ }
+});
+
+
+jQuery.ajaxSettings.xhr = function() {
+ try {
+ return new XMLHttpRequest();
+ } catch( e ) {}
+};
+
+var xhrId = 0,
+ xhrCallbacks = {},
+ xhrSuccessStatus = {
+ // file protocol always yields status code 0, assume 200
+ 0: 200,
+ // Support: IE9
+ // #1450: sometimes IE returns 1223 when it should be 204
+ 1223: 204
+ },
+ xhrSupported = jQuery.ajaxSettings.xhr();
+
+// Support: IE9
+// Open requests must be manually aborted on unload (#5280)
+// See https://support.microsoft.com/kb/2856746 for more info
+if ( window.attachEvent ) {
+ window.attachEvent( "onunload", function() {
+ for ( var key in xhrCallbacks ) {
+ xhrCallbacks[ key ]();
+ }
+ });
+}
+
+support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+support.ajax = xhrSupported = !!xhrSupported;
+
+jQuery.ajaxTransport(function( options ) {
+ var callback;
+
+ // Cross domain only allowed if supported through XMLHttpRequest
+ if ( support.cors || xhrSupported && !options.crossDomain ) {
+ return {
+ send: function( headers, complete ) {
+ var i,
+ xhr = options.xhr(),
+ id = ++xhrId;
+
+ xhr.open( options.type, options.url, options.async, options.username, options.password );
+
+ // Apply custom fields if provided
+ if ( options.xhrFields ) {
+ for ( i in options.xhrFields ) {
+ xhr[ i ] = options.xhrFields[ i ];
+ }
+ }
+
+ // Override mime type if needed
+ if ( options.mimeType && xhr.overrideMimeType ) {
+ xhr.overrideMimeType( options.mimeType );
+ }
+
+ // X-Requested-With header
+ // For cross-domain requests, seeing as conditions for a preflight are
+ // akin to a jigsaw puzzle, we simply never set it to be sure.
+ // (it can always be set on a per-request basis or even using ajaxSetup)
+ // For same-domain requests, won't change header if already provided.
+ if ( !options.crossDomain && !headers["X-Requested-With"] ) {
+ headers["X-Requested-With"] = "XMLHttpRequest";
+ }
+
+ // Set headers
+ for ( i in headers ) {
+ xhr.setRequestHeader( i, headers[ i ] );
+ }
+
+ // Callback
+ callback = function( type ) {
+ return function() {
+ if ( callback ) {
+ delete xhrCallbacks[ id ];
+ callback = xhr.onload = xhr.onerror = null;
+
+ if ( type === "abort" ) {
+ xhr.abort();
+ } else if ( type === "error" ) {
+ complete(
+ // file: protocol always yields status 0; see #8605, #14207
+ xhr.status,
+ xhr.statusText
+ );
+ } else {
+ complete(
+ xhrSuccessStatus[ xhr.status ] || xhr.status,
+ xhr.statusText,
+ // Support: IE9
+ // Accessing binary-data responseText throws an exception
+ // (#11426)
+ typeof xhr.responseText === "string" ? {
+ text: xhr.responseText
+ } : undefined,
+ xhr.getAllResponseHeaders()
+ );
+ }
+ }
+ };
+ };
+
+ // Listen to events
+ xhr.onload = callback();
+ xhr.onerror = callback("error");
+
+ // Create the abort callback
+ callback = xhrCallbacks[ id ] = callback("abort");
+
+ try {
+ // Do send the request (this may raise an exception)
+ xhr.send( options.hasContent && options.data || null );
+ } catch ( e ) {
+ // #14683: Only rethrow if this hasn't been notified as an error yet
+ if ( callback ) {
+ throw e;
+ }
+ }
+ },
+
+ abort: function() {
+ if ( callback ) {
+ callback();
+ }
+ }
+ };
+ }
+});
+
+
+
+
+// Install script dataType
+jQuery.ajaxSetup({
+ accepts: {
+ script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+ },
+ contents: {
+ script: /(?:java|ecma)script/
+ },
+ converters: {
+ "text script": function( text ) {
+ jQuery.globalEval( text );
+ return text;
+ }
+ }
+});
+
+// Handle cache's special case and crossDomain
+jQuery.ajaxPrefilter( "script", function( s ) {
+ if ( s.cache === undefined ) {
+ s.cache = false;
+ }
+ if ( s.crossDomain ) {
+ s.type = "GET";
+ }
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function( s ) {
+ // This transport only deals with cross domain requests
+ if ( s.crossDomain ) {
+ var script, callback;
+ return {
+ send: function( _, complete ) {
+ script = jQuery("<script>").prop({
+ async: true,
+ charset: s.scriptCharset,
+ src: s.url
+ }).on(
+ "load error",
+ callback = function( evt ) {
+ script.remove();
+ callback = null;
+ if ( evt ) {
+ complete( evt.type === "error" ? 404 : 200, evt.type );
+ }
+ }
+ );
+ document.head.appendChild( script[ 0 ] );
+ },
+ abort: function() {
+ if ( callback ) {
+ callback();
+ }
+ }
+ };
+ }
+});
+
+
+
+
+var oldCallbacks = [],
+ rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup({
+ jsonp: "callback",
+ jsonpCallback: function() {
+ var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
+ this[ callback ] = true;
+ return callback;
+ }
+});
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+ var callbackName, overwritten, responseContainer,
+ jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+ "url" :
+ typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
+ );
+
+ // Handle iff the expected data type is "jsonp" or we have a parameter to set
+ if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+ // Get callback name, remembering preexisting value associated with it
+ callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+ s.jsonpCallback() :
+ s.jsonpCallback;
+
+ // Insert callback into url or form data
+ if ( jsonProp ) {
+ s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+ } else if ( s.jsonp !== false ) {
+ s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+ }
+
+ // Use data converter to retrieve json after script execution
+ s.converters["script json"] = function() {
+ if ( !responseContainer ) {
+ jQuery.error( callbackName + " was not called" );
+ }
+ return responseContainer[ 0 ];
+ };
+
+ // force json dataType
+ s.dataTypes[ 0 ] = "json";
+
+ // Install callback
+ overwritten = window[ callbackName ];
+ window[ callbackName ] = function() {
+ responseContainer = arguments;
+ };
+
+ // Clean-up function (fires after converters)
+ jqXHR.always(function() {
+ // Restore preexisting value
+ window[ callbackName ] = overwritten;
+
+ // Save back as free
+ if ( s[ callbackName ] ) {
+ // make sure that re-using the options doesn't screw things around
+ s.jsonpCallback = originalSettings.jsonpCallback;
+
+ // save the callback name for future use
+ oldCallbacks.push( callbackName );
+ }
+
+ // Call if it was a function and we have a response
+ if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+ overwritten( responseContainer[ 0 ] );
+ }
+
+ responseContainer = overwritten = undefined;
+ });
+
+ // Delegate to script
+ return "script";
+ }
+});
+
+
+
+
+// data: string of html
+// context (optional): If specified, the fragment will be created in this context, defaults to document
+// keepScripts (optional): If true, will include scripts passed in the html string
+jQuery.parseHTML = function( data, context, keepScripts ) {
+ if ( !data || typeof data !== "string" ) {
+ return null;
+ }
+ if ( typeof context === "boolean" ) {
+ keepScripts = context;
+ context = false;
+ }
+ context = context || document;
+
+ var parsed = rsingleTag.exec( data ),
+ scripts = !keepScripts && [];
+
+ // Single tag
+ if ( parsed ) {
+ return [ context.createElement( parsed[1] ) ];
+ }
+
+ parsed = jQuery.buildFragment( [ data ], context, scripts );
+
+ if ( scripts && scripts.length ) {
+ jQuery( scripts ).remove();
+ }
+
+ return jQuery.merge( [], parsed.childNodes );
+};
+
+
+// Keep a copy of the old load method
+var _load = jQuery.fn.load;
+
+/**
+ * Load a url into a page
+ */
+jQuery.fn.load = function( url, params, callback ) {
+ if ( typeof url !== "string" && _load ) {
+ return _load.apply( this, arguments );
+ }
+
+ var selector, type, response,
+ self = this,
+ off = url.indexOf(" ");
+
+ if ( off >= 0 ) {
+ selector = jQuery.trim( url.slice( off ) );
+ url = url.slice( 0, off );
+ }
+
+ // If it's a function
+ if ( jQuery.isFunction( params ) ) {
+
+ // We assume that it's the callback
+ callback = params;
+ params = undefined;
+
+ // Otherwise, build a param string
+ } else if ( params && typeof params === "object" ) {
+ type = "POST";
+ }
+
+ // If we have elements to modify, make the request
+ if ( self.length > 0 ) {
+ jQuery.ajax({
+ url: url,
+
+ // if "type" variable is undefined, then "GET" method will be used
+ type: type,
+ dataType: "html",
+ data: params
+ }).done(function( responseText ) {
+
+ // Save response for use in complete callback
+ response = arguments;
+
+ self.html( selector ?
+
+ // If a selector was specified, locate the right elements in a dummy div
+ // Exclude scripts to avoid IE 'Permission Denied' errors
+ jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+ // Otherwise use the full result
+ responseText );
+
+ }).complete( callback && function( jqXHR, status ) {
+ self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
+ });
+ }
+
+ return this;
+};
+
+
+
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) {
+ jQuery.fn[ type ] = function( fn ) {
+ return this.on( type, fn );
+ };
+});
+
+
+
+
+jQuery.expr.filters.animated = function( elem ) {
+ return jQuery.grep(jQuery.timers, function( fn ) {
+ return elem === fn.elem;
+ }).length;
+};
+
+
+
+
+var docElem = window.document.documentElement;
+
+/**
+ * Gets a window from an element
+ */
+function getWindow( elem ) {
+ return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;
+}
+
+jQuery.offset = {
+ setOffset: function( elem, options, i ) {
+ var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
+ position = jQuery.css( elem, "position" ),
+ curElem = jQuery( elem ),
+ props = {};
+
+ // Set position first, in-case top/left are set even on static elem
+ if ( position === "static" ) {
+ elem.style.position = "relative";
+ }
+
+ curOffset = curElem.offset();
+ curCSSTop = jQuery.css( elem, "top" );
+ curCSSLeft = jQuery.css( elem, "left" );
+ calculatePosition = ( position === "absolute" || position === "fixed" ) &&
+ ( curCSSTop + curCSSLeft ).indexOf("auto") > -1;
+
+ // Need to be able to calculate position if either
+ // top or left is auto and position is either absolute or fixed
+ if ( calculatePosition ) {
+ curPosition = curElem.position();
+ curTop = curPosition.top;
+ curLeft = curPosition.left;
+
+ } else {
+ curTop = parseFloat( curCSSTop ) || 0;
+ curLeft = parseFloat( curCSSLeft ) || 0;
+ }
+
+ if ( jQuery.isFunction( options ) ) {
+ options = options.call( elem, i, curOffset );
+ }
+
+ if ( options.top != null ) {
+ props.top = ( options.top - curOffset.top ) + curTop;
+ }
+ if ( options.left != null ) {
+ props.left = ( options.left - curOffset.left ) + curLeft;
+ }
+
+ if ( "using" in options ) {
+ options.using.call( elem, props );
+
+ } else {
+ curElem.css( props );
+ }
+ }
+};
+
+jQuery.fn.extend({
+ offset: function( options ) {
+ if ( arguments.length ) {
+ return options === undefined ?
+ this :
+ this.each(function( i ) {
+ jQuery.offset.setOffset( this, options, i );
+ });
+ }
+
+ var docElem, win,
+ elem = this[ 0 ],
+ box = { top: 0, left: 0 },
+ doc = elem && elem.ownerDocument;
+
+ if ( !doc ) {
+ return;
+ }
+
+ docElem = doc.documentElement;
+
+ // Make sure it's not a disconnected DOM node
+ if ( !jQuery.contains( docElem, elem ) ) {
+ return box;
+ }
+
+ // Support: BlackBerry 5, iOS 3 (original iPhone)
+ // If we don't have gBCR, just use 0,0 rather than error
+ if ( typeof elem.getBoundingClientRect !== strundefined ) {
+ box = elem.getBoundingClientRect();
+ }
+ win = getWindow( doc );
+ return {
+ top: box.top + win.pageYOffset - docElem.clientTop,
+ left: box.left + win.pageXOffset - docElem.clientLeft
+ };
+ },
+
+ position: function() {
+ if ( !this[ 0 ] ) {
+ return;
+ }
+
+ var offsetParent, offset,
+ elem = this[ 0 ],
+ parentOffset = { top: 0, left: 0 };
+
+ // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent
+ if ( jQuery.css( elem, "position" ) === "fixed" ) {
+ // Assume getBoundingClientRect is there when computed position is fixed
+ offset = elem.getBoundingClientRect();
+
+ } else {
+ // Get *real* offsetParent
+ offsetParent = this.offsetParent();
+
+ // Get correct offsets
+ offset = this.offset();
+ if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
+ parentOffset = offsetParent.offset();
+ }
+
+ // Add offsetParent borders
+ parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
+ parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
+ }
+
+ // Subtract parent offsets and element margins
+ return {
+ top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+ left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
+ };
+ },
+
+ offsetParent: function() {
+ return this.map(function() {
+ var offsetParent = this.offsetParent || docElem;
+
+ while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) {
+ offsetParent = offsetParent.offsetParent;
+ }
+
+ return offsetParent || docElem;
+ });
+ }
+});
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
+ var top = "pageYOffset" === prop;
+
+ jQuery.fn[ method ] = function( val ) {
+ return access( this, function( elem, method, val ) {
+ var win = getWindow( elem );
+
+ if ( val === undefined ) {
+ return win ? win[ prop ] : elem[ method ];
+ }
+
+ if ( win ) {
+ win.scrollTo(
+ !top ? val : window.pageXOffset,
+ top ? val : window.pageYOffset
+ );
+
+ } else {
+ elem[ method ] = val;
+ }
+ }, method, val, arguments.length, null );
+ };
+});
+
+// Support: Safari<7+, Chrome<37+
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280
+// getComputedStyle returns percent when specified for top/left/bottom/right;
+// rather than make the css module depend on the offset module, just check for it here
+jQuery.each( [ "top", "left" ], function( i, prop ) {
+ jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
+ function( elem, computed ) {
+ if ( computed ) {
+ computed = curCSS( elem, prop );
+ // If curCSS returns percentage, fallback to offset
+ return rnumnonpx.test( computed ) ?
+ jQuery( elem ).position()[ prop ] + "px" :
+ computed;
+ }
+ }
+ );
+});
+
+
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+ jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
+ // Margin is only for outerHeight, outerWidth
+ jQuery.fn[ funcName ] = function( margin, value ) {
+ var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+ extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+ return access( this, function( elem, type, value ) {
+ var doc;
+
+ if ( jQuery.isWindow( elem ) ) {
+ // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
+ // isn't a whole lot we can do. See pull request at this URL for discussion:
+ // https://github.com/jquery/jquery/pull/764
+ return elem.document.documentElement[ "client" + name ];
+ }
+
+ // Get document width or height
+ if ( elem.nodeType === 9 ) {
+ doc = elem.documentElement;
+
+ // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
+ // whichever is greatest
+ return Math.max(
+ elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+ elem.body[ "offset" + name ], doc[ "offset" + name ],
+ doc[ "client" + name ]
+ );
+ }
+
+ return value === undefined ?
+ // Get width or height on the element, requesting but not forcing parseFloat
+ jQuery.css( elem, type, extra ) :
+
+ // Set width or height on the element
+ jQuery.style( elem, type, value, extra );
+ }, type, chainable ? margin : undefined, chainable, null );
+ };
+ });
+});
+
+
+// The number of elements contained in the matched element set
+jQuery.fn.size = function() {
+ return this.length;
+};
+
+jQuery.fn.andSelf = jQuery.fn.addBack;
+
+
+
+
+// Register as a named AMD module, since jQuery can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase jquery is used because AMD module names are
+// derived from file names, and jQuery is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of jQuery, it will work.
+
+// Note that for maximum portability, libraries that are not jQuery should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. jQuery is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+
+if ( typeof define === "function" && define.amd ) {
+ define( "jquery", [], function() {
+ return jQuery;
+ });
+}
+
+
+
+
+var
+ // Map over jQuery in case of overwrite
+ _jQuery = window.jQuery,
+
+ // Map over the $ in case of overwrite
+ _$ = window.$;
+
+jQuery.noConflict = function( deep ) {
+ if ( window.$ === jQuery ) {
+ window.$ = _$;
+ }
+
+ if ( deep && window.jQuery === jQuery ) {
+ window.jQuery = _jQuery;
+ }
+
+ return jQuery;
+};
+
+// Expose jQuery and $ identifiers, even in AMD
+// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// and CommonJS for browser emulators (#13566)
+if ( typeof noGlobal === strundefined ) {
+ window.jQuery = window.$ = jQuery;
+}
+
+
+
+
+return jQuery;
+
+}));
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/sample_jqueryui.js b/vendor/github.com/tdewolff/minify/benchmarks/sample_jqueryui.js
new file mode 100644
index 0000000..583a1b2
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/sample_jqueryui.js
@@ -0,0 +1,16608 @@
+/*! jQuery UI - v1.11.3 - 2015-03-01
+* http://jqueryui.com
+* Includes: core.js, widget.js, mouse.js, position.js, draggable.js, droppable.js, resizable.js, selectable.js, sortable.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, menu.js, progressbar.js, selectmenu.js, slider.js, spinner.js, tabs.js, tooltip.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js
+* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
+
+(function( factory ) {
+ if ( typeof define === "function" && define.amd ) {
+
+ // AMD. Register as an anonymous module.
+ define([ "jquery" ], factory );
+ } else {
+
+ // Browser globals
+ factory( jQuery );
+ }
+}(function( $ ) {
+/*!
+ * jQuery UI Core 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/category/ui-core/
+ */
+
+
+// $.ui might exist from components with no dependencies, e.g., $.ui.position
+$.ui = $.ui || {};
+
+$.extend( $.ui, {
+ version: "1.11.3",
+
+ keyCode: {
+ BACKSPACE: 8,
+ COMMA: 188,
+ DELETE: 46,
+ DOWN: 40,
+ END: 35,
+ ENTER: 13,
+ ESCAPE: 27,
+ HOME: 36,
+ LEFT: 37,
+ PAGE_DOWN: 34,
+ PAGE_UP: 33,
+ PERIOD: 190,
+ RIGHT: 39,
+ SPACE: 32,
+ TAB: 9,
+ UP: 38
+ }
+});
+
+// plugins
+$.fn.extend({
+ scrollParent: function( includeHidden ) {
+ var position = this.css( "position" ),
+ excludeStaticParent = position === "absolute",
+ overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,
+ scrollParent = this.parents().filter( function() {
+ var parent = $( this );
+ if ( excludeStaticParent && parent.css( "position" ) === "static" ) {
+ return false;
+ }
+ return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) + parent.css( "overflow-x" ) );
+ }).eq( 0 );
+
+ return position === "fixed" || !scrollParent.length ? $( this[ 0 ].ownerDocument || document ) : scrollParent;
+ },
+
+ uniqueId: (function() {
+ var uuid = 0;
+
+ return function() {
+ return this.each(function() {
+ if ( !this.id ) {
+ this.id = "ui-id-" + ( ++uuid );
+ }
+ });
+ };
+ })(),
+
+ removeUniqueId: function() {
+ return this.each(function() {
+ if ( /^ui-id-\d+$/.test( this.id ) ) {
+ $( this ).removeAttr( "id" );
+ }
+ });
+ }
+});
+
+// selectors
+function focusable( element, isTabIndexNotNaN ) {
+ var map, mapName, img,
+ nodeName = element.nodeName.toLowerCase();
+ if ( "area" === nodeName ) {
+ map = element.parentNode;
+ mapName = map.name;
+ if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
+ return false;
+ }
+ img = $( "img[usemap='#" + mapName + "']" )[ 0 ];
+ return !!img && visible( img );
+ }
+ return ( /^(input|select|textarea|button|object)$/.test( nodeName ) ?
+ !element.disabled :
+ "a" === nodeName ?
+ element.href || isTabIndexNotNaN :
+ isTabIndexNotNaN) &&
+ // the element and all of its ancestors must be visible
+ visible( element );
+}
+
+function visible( element ) {
+ return $.expr.filters.visible( element ) &&
+ !$( element ).parents().addBack().filter(function() {
+ return $.css( this, "visibility" ) === "hidden";
+ }).length;
+}
+
+$.extend( $.expr[ ":" ], {
+ data: $.expr.createPseudo ?
+ $.expr.createPseudo(function( dataName ) {
+ return function( elem ) {
+ return !!$.data( elem, dataName );
+ };
+ }) :
+ // support: jQuery <1.8
+ function( elem, i, match ) {
+ return !!$.data( elem, match[ 3 ] );
+ },
+
+ focusable: function( element ) {
+ return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
+ },
+
+ tabbable: function( element ) {
+ var tabIndex = $.attr( element, "tabindex" ),
+ isTabIndexNaN = isNaN( tabIndex );
+ return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
+ }
+});
+
+// support: jQuery <1.8
+if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
+ $.each( [ "Width", "Height" ], function( i, name ) {
+ var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
+ type = name.toLowerCase(),
+ orig = {
+ innerWidth: $.fn.innerWidth,
+ innerHeight: $.fn.innerHeight,
+ outerWidth: $.fn.outerWidth,
+ outerHeight: $.fn.outerHeight
+ };
+
+ function reduce( elem, size, border, margin ) {
+ $.each( side, function() {
+ size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
+ if ( border ) {
+ size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
+ }
+ if ( margin ) {
+ size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
+ }
+ });
+ return size;
+ }
+
+ $.fn[ "inner" + name ] = function( size ) {
+ if ( size === undefined ) {
+ return orig[ "inner" + name ].call( this );
+ }
+
+ return this.each(function() {
+ $( this ).css( type, reduce( this, size ) + "px" );
+ });
+ };
+
+ $.fn[ "outer" + name] = function( size, margin ) {
+ if ( typeof size !== "number" ) {
+ return orig[ "outer" + name ].call( this, size );
+ }
+
+ return this.each(function() {
+ $( this).css( type, reduce( this, size, true, margin ) + "px" );
+ });
+ };
+ });
+}
+
+// support: jQuery <1.8
+if ( !$.fn.addBack ) {
+ $.fn.addBack = function( selector ) {
+ return this.add( selector == null ?
+ this.prevObject : this.prevObject.filter( selector )
+ );
+ };
+}
+
+// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
+if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
+ $.fn.removeData = (function( removeData ) {
+ return function( key ) {
+ if ( arguments.length ) {
+ return removeData.call( this, $.camelCase( key ) );
+ } else {
+ return removeData.call( this );
+ }
+ };
+ })( $.fn.removeData );
+}
+
+// deprecated
+$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
+
+$.fn.extend({
+ focus: (function( orig ) {
+ return function( delay, fn ) {
+ return typeof delay === "number" ?
+ this.each(function() {
+ var elem = this;
+ setTimeout(function() {
+ $( elem ).focus();
+ if ( fn ) {
+ fn.call( elem );
+ }
+ }, delay );
+ }) :
+ orig.apply( this, arguments );
+ };
+ })( $.fn.focus ),
+
+ disableSelection: (function() {
+ var eventType = "onselectstart" in document.createElement( "div" ) ?
+ "selectstart" :
+ "mousedown";
+
+ return function() {
+ return this.bind( eventType + ".ui-disableSelection", function( event ) {
+ event.preventDefault();
+ });
+ };
+ })(),
+
+ enableSelection: function() {
+ return this.unbind( ".ui-disableSelection" );
+ },
+
+ zIndex: function( zIndex ) {
+ if ( zIndex !== undefined ) {
+ return this.css( "zIndex", zIndex );
+ }
+
+ if ( this.length ) {
+ var elem = $( this[ 0 ] ), position, value;
+ while ( elem.length && elem[ 0 ] !== document ) {
+ // Ignore z-index if position is set to a value where z-index is ignored by the browser
+ // This makes behavior of this function consistent across browsers
+ // WebKit always returns auto if the element is positioned
+ position = elem.css( "position" );
+ if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+ // IE returns 0 when zIndex is not specified
+ // other browsers return a string
+ // we ignore the case of nested elements with an explicit value of 0
+ // <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+ value = parseInt( elem.css( "zIndex" ), 10 );
+ if ( !isNaN( value ) && value !== 0 ) {
+ return value;
+ }
+ }
+ elem = elem.parent();
+ }
+ }
+
+ return 0;
+ }
+});
+
+// $.ui.plugin is deprecated. Use $.widget() extensions instead.
+$.ui.plugin = {
+ add: function( module, option, set ) {
+ var i,
+ proto = $.ui[ module ].prototype;
+ for ( i in set ) {
+ proto.plugins[ i ] = proto.plugins[ i ] || [];
+ proto.plugins[ i ].push( [ option, set[ i ] ] );
+ }
+ },
+ call: function( instance, name, args, allowDisconnected ) {
+ var i,
+ set = instance.plugins[ name ];
+
+ if ( !set ) {
+ return;
+ }
+
+ if ( !allowDisconnected && ( !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) ) {
+ return;
+ }
+
+ for ( i = 0; i < set.length; i++ ) {
+ if ( instance.options[ set[ i ][ 0 ] ] ) {
+ set[ i ][ 1 ].apply( instance.element, args );
+ }
+ }
+ }
+};
+
+
+/*!
+ * jQuery UI Widget 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/jQuery.widget/
+ */
+
+
+var widget_uuid = 0,
+ widget_slice = Array.prototype.slice;
+
+$.cleanData = (function( orig ) {
+ return function( elems ) {
+ var events, elem, i;
+ for ( i = 0; (elem = elems[i]) != null; i++ ) {
+ try {
+
+ // Only trigger remove when necessary to save time
+ events = $._data( elem, "events" );
+ if ( events && events.remove ) {
+ $( elem ).triggerHandler( "remove" );
+ }
+
+ // http://bugs.jquery.com/ticket/8235
+ } catch ( e ) {}
+ }
+ orig( elems );
+ };
+})( $.cleanData );
+
+$.widget = function( name, base, prototype ) {
+ var fullName, existingConstructor, constructor, basePrototype,
+ // proxiedPrototype allows the provided prototype to remain unmodified
+ // so that it can be used as a mixin for multiple widgets (#8876)
+ proxiedPrototype = {},
+ namespace = name.split( "." )[ 0 ];
+
+ name = name.split( "." )[ 1 ];
+ fullName = namespace + "-" + name;
+
+ if ( !prototype ) {
+ prototype = base;
+ base = $.Widget;
+ }
+
+ // create selector for plugin
+ $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
+ return !!$.data( elem, fullName );
+ };
+
+ $[ namespace ] = $[ namespace ] || {};
+ existingConstructor = $[ namespace ][ name ];
+ constructor = $[ namespace ][ name ] = function( options, element ) {
+ // allow instantiation without "new" keyword
+ if ( !this._createWidget ) {
+ return new constructor( options, element );
+ }
+
+ // allow instantiation without initializing for simple inheritance
+ // must use "new" keyword (the code above always passes args)
+ if ( arguments.length ) {
+ this._createWidget( options, element );
+ }
+ };
+ // extend with the existing constructor to carry over any static properties
+ $.extend( constructor, existingConstructor, {
+ version: prototype.version,
+ // copy the object used to create the prototype in case we need to
+ // redefine the widget later
+ _proto: $.extend( {}, prototype ),
+ // track widgets that inherit from this widget in case this widget is
+ // redefined after a widget inherits from it
+ _childConstructors: []
+ });
+
+ basePrototype = new base();
+ // we need to make the options hash a property directly on the new instance
+ // otherwise we'll modify the options hash on the prototype that we're
+ // inheriting from
+ basePrototype.options = $.widget.extend( {}, basePrototype.options );
+ $.each( prototype, function( prop, value ) {
+ if ( !$.isFunction( value ) ) {
+ proxiedPrototype[ prop ] = value;
+ return;
+ }
+ proxiedPrototype[ prop ] = (function() {
+ var _super = function() {
+ return base.prototype[ prop ].apply( this, arguments );
+ },
+ _superApply = function( args ) {
+ return base.prototype[ prop ].apply( this, args );
+ };
+ return function() {
+ var __super = this._super,
+ __superApply = this._superApply,
+ returnValue;
+
+ this._super = _super;
+ this._superApply = _superApply;
+
+ returnValue = value.apply( this, arguments );
+
+ this._super = __super;
+ this._superApply = __superApply;
+
+ return returnValue;
+ };
+ })();
+ });
+ constructor.prototype = $.widget.extend( basePrototype, {
+ // TODO: remove support for widgetEventPrefix
+ // always use the name + a colon as the prefix, e.g., draggable:start
+ // don't prefix for widgets that aren't DOM-based
+ widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name
+ }, proxiedPrototype, {
+ constructor: constructor,
+ namespace: namespace,
+ widgetName: name,
+ widgetFullName: fullName
+ });
+
+ // If this widget is being redefined then we need to find all widgets that
+ // are inheriting from it and redefine all of them so that they inherit from
+ // the new version of this widget. We're essentially trying to replace one
+ // level in the prototype chain.
+ if ( existingConstructor ) {
+ $.each( existingConstructor._childConstructors, function( i, child ) {
+ var childPrototype = child.prototype;
+
+ // redefine the child widget using the same prototype that was
+ // originally used, but inherit from the new version of the base
+ $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
+ });
+ // remove the list of existing child constructors from the old constructor
+ // so the old child constructors can be garbage collected
+ delete existingConstructor._childConstructors;
+ } else {
+ base._childConstructors.push( constructor );
+ }
+
+ $.widget.bridge( name, constructor );
+
+ return constructor;
+};
+
+$.widget.extend = function( target ) {
+ var input = widget_slice.call( arguments, 1 ),
+ inputIndex = 0,
+ inputLength = input.length,
+ key,
+ value;
+ for ( ; inputIndex < inputLength; inputIndex++ ) {
+ for ( key in input[ inputIndex ] ) {
+ value = input[ inputIndex ][ key ];
+ if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
+ // Clone objects
+ if ( $.isPlainObject( value ) ) {
+ target[ key ] = $.isPlainObject( target[ key ] ) ?
+ $.widget.extend( {}, target[ key ], value ) :
+ // Don't extend strings, arrays, etc. with objects
+ $.widget.extend( {}, value );
+ // Copy everything else by reference
+ } else {
+ target[ key ] = value;
+ }
+ }
+ }
+ }
+ return target;
+};
+
+$.widget.bridge = function( name, object ) {
+ var fullName = object.prototype.widgetFullName || name;
+ $.fn[ name ] = function( options ) {
+ var isMethodCall = typeof options === "string",
+ args = widget_slice.call( arguments, 1 ),
+ returnValue = this;
+
+ if ( isMethodCall ) {
+ this.each(function() {
+ var methodValue,
+ instance = $.data( this, fullName );
+ if ( options === "instance" ) {
+ returnValue = instance;
+ return false;
+ }
+ if ( !instance ) {
+ return $.error( "cannot call methods on " + name + " prior to initialization; " +
+ "attempted to call method '" + options + "'" );
+ }
+ if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
+ return $.error( "no such method '" + options + "' for " + name + " widget instance" );
+ }
+ methodValue = instance[ options ].apply( instance, args );
+ if ( methodValue !== instance && methodValue !== undefined ) {
+ returnValue = methodValue && methodValue.jquery ?
+ returnValue.pushStack( methodValue.get() ) :
+ methodValue;
+ return false;
+ }
+ });
+ } else {
+
+ // Allow multiple hashes to be passed on init
+ if ( args.length ) {
+ options = $.widget.extend.apply( null, [ options ].concat(args) );
+ }
+
+ this.each(function() {
+ var instance = $.data( this, fullName );
+ if ( instance ) {
+ instance.option( options || {} );
+ if ( instance._init ) {
+ instance._init();
+ }
+ } else {
+ $.data( this, fullName, new object( options, this ) );
+ }
+ });
+ }
+
+ return returnValue;
+ };
+};
+
+$.Widget = function( /* options, element */ ) {};
+$.Widget._childConstructors = [];
+
+$.Widget.prototype = {
+ widgetName: "widget",
+ widgetEventPrefix: "",
+ defaultElement: "<div>",
+ options: {
+ disabled: false,
+
+ // callbacks
+ create: null
+ },
+ _createWidget: function( options, element ) {
+ element = $( element || this.defaultElement || this )[ 0 ];
+ this.element = $( element );
+ this.uuid = widget_uuid++;
+ this.eventNamespace = "." + this.widgetName + this.uuid;
+
+ this.bindings = $();
+ this.hoverable = $();
+ this.focusable = $();
+
+ if ( element !== this ) {
+ $.data( element, this.widgetFullName, this );
+ this._on( true, this.element, {
+ remove: function( event ) {
+ if ( event.target === element ) {
+ this.destroy();
+ }
+ }
+ });
+ this.document = $( element.style ?
+ // element within the document
+ element.ownerDocument :
+ // element is window or document
+ element.document || element );
+ this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
+ }
+
+ this.options = $.widget.extend( {},
+ this.options,
+ this._getCreateOptions(),
+ options );
+
+ this._create();
+ this._trigger( "create", null, this._getCreateEventData() );
+ this._init();
+ },
+ _getCreateOptions: $.noop,
+ _getCreateEventData: $.noop,
+ _create: $.noop,
+ _init: $.noop,
+
+ destroy: function() {
+ this._destroy();
+ // we can probably remove the unbind calls in 2.0
+ // all event bindings should go through this._on()
+ this.element
+ .unbind( this.eventNamespace )
+ .removeData( this.widgetFullName )
+ // support: jquery <1.6.3
+ // http://bugs.jquery.com/ticket/9413
+ .removeData( $.camelCase( this.widgetFullName ) );
+ this.widget()
+ .unbind( this.eventNamespace )
+ .removeAttr( "aria-disabled" )
+ .removeClass(
+ this.widgetFullName + "-disabled " +
+ "ui-state-disabled" );
+
+ // clean up events and states
+ this.bindings.unbind( this.eventNamespace );
+ this.hoverable.removeClass( "ui-state-hover" );
+ this.focusable.removeClass( "ui-state-focus" );
+ },
+ _destroy: $.noop,
+
+ widget: function() {
+ return this.element;
+ },
+
+ option: function( key, value ) {
+ var options = key,
+ parts,
+ curOption,
+ i;
+
+ if ( arguments.length === 0 ) {
+ // don't return a reference to the internal hash
+ return $.widget.extend( {}, this.options );
+ }
+
+ if ( typeof key === "string" ) {
+ // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
+ options = {};
+ parts = key.split( "." );
+ key = parts.shift();
+ if ( parts.length ) {
+ curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
+ for ( i = 0; i < parts.length - 1; i++ ) {
+ curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
+ curOption = curOption[ parts[ i ] ];
+ }
+ key = parts.pop();
+ if ( arguments.length === 1 ) {
+ return curOption[ key ] === undefined ? null : curOption[ key ];
+ }
+ curOption[ key ] = value;
+ } else {
+ if ( arguments.length === 1 ) {
+ return this.options[ key ] === undefined ? null : this.options[ key ];
+ }
+ options[ key ] = value;
+ }
+ }
+
+ this._setOptions( options );
+
+ return this;
+ },
+ _setOptions: function( options ) {
+ var key;
+
+ for ( key in options ) {
+ this._setOption( key, options[ key ] );
+ }
+
+ return this;
+ },
+ _setOption: function( key, value ) {
+ this.options[ key ] = value;
+
+ if ( key === "disabled" ) {
+ this.widget()
+ .toggleClass( this.widgetFullName + "-disabled", !!value );
+
+ // If the widget is becoming disabled, then nothing is interactive
+ if ( value ) {
+ this.hoverable.removeClass( "ui-state-hover" );
+ this.focusable.removeClass( "ui-state-focus" );
+ }
+ }
+
+ return this;
+ },
+
+ enable: function() {
+ return this._setOptions({ disabled: false });
+ },
+ disable: function() {
+ return this._setOptions({ disabled: true });
+ },
+
+ _on: function( suppressDisabledCheck, element, handlers ) {
+ var delegateElement,
+ instance = this;
+
+ // no suppressDisabledCheck flag, shuffle arguments
+ if ( typeof suppressDisabledCheck !== "boolean" ) {
+ handlers = element;
+ element = suppressDisabledCheck;
+ suppressDisabledCheck = false;
+ }
+
+ // no element argument, shuffle and use this.element
+ if ( !handlers ) {
+ handlers = element;
+ element = this.element;
+ delegateElement = this.widget();
+ } else {
+ element = delegateElement = $( element );
+ this.bindings = this.bindings.add( element );
+ }
+
+ $.each( handlers, function( event, handler ) {
+ function handlerProxy() {
+ // allow widgets to customize the disabled handling
+ // - disabled as an array instead of boolean
+ // - disabled class as method for disabling individual parts
+ if ( !suppressDisabledCheck &&
+ ( instance.options.disabled === true ||
+ $( this ).hasClass( "ui-state-disabled" ) ) ) {
+ return;
+ }
+ return ( typeof handler === "string" ? instance[ handler ] : handler )
+ .apply( instance, arguments );
+ }
+
+ // copy the guid so direct unbinding works
+ if ( typeof handler !== "string" ) {
+ handlerProxy.guid = handler.guid =
+ handler.guid || handlerProxy.guid || $.guid++;
+ }
+
+ var match = event.match( /^([\w:-]*)\s*(.*)$/ ),
+ eventName = match[1] + instance.eventNamespace,
+ selector = match[2];
+ if ( selector ) {
+ delegateElement.delegate( selector, eventName, handlerProxy );
+ } else {
+ element.bind( eventName, handlerProxy );
+ }
+ });
+ },
+
+ _off: function( element, eventName ) {
+ eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) +
+ this.eventNamespace;
+ element.unbind( eventName ).undelegate( eventName );
+
+ // Clear the stack to avoid memory leaks (#10056)
+ this.bindings = $( this.bindings.not( element ).get() );
+ this.focusable = $( this.focusable.not( element ).get() );
+ this.hoverable = $( this.hoverable.not( element ).get() );
+ },
+
+ _delay: function( handler, delay ) {
+ function handlerProxy() {
+ return ( typeof handler === "string" ? instance[ handler ] : handler )
+ .apply( instance, arguments );
+ }
+ var instance = this;
+ return setTimeout( handlerProxy, delay || 0 );
+ },
+
+ _hoverable: function( element ) {
+ this.hoverable = this.hoverable.add( element );
+ this._on( element, {
+ mouseenter: function( event ) {
+ $( event.currentTarget ).addClass( "ui-state-hover" );
+ },
+ mouseleave: function( event ) {
+ $( event.currentTarget ).removeClass( "ui-state-hover" );
+ }
+ });
+ },
+
+ _focusable: function( element ) {
+ this.focusable = this.focusable.add( element );
+ this._on( element, {
+ focusin: function( event ) {
+ $( event.currentTarget ).addClass( "ui-state-focus" );
+ },
+ focusout: function( event ) {
+ $( event.currentTarget ).removeClass( "ui-state-focus" );
+ }
+ });
+ },
+
+ _trigger: function( type, event, data ) {
+ var prop, orig,
+ callback = this.options[ type ];
+
+ data = data || {};
+ event = $.Event( event );
+ event.type = ( type === this.widgetEventPrefix ?
+ type :
+ this.widgetEventPrefix + type ).toLowerCase();
+ // the original event may come from any element
+ // so we need to reset the target on the new event
+ event.target = this.element[ 0 ];
+
+ // copy original event properties over to the new event
+ orig = event.originalEvent;
+ if ( orig ) {
+ for ( prop in orig ) {
+ if ( !( prop in event ) ) {
+ event[ prop ] = orig[ prop ];
+ }
+ }
+ }
+
+ this.element.trigger( event, data );
+ return !( $.isFunction( callback ) &&
+ callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
+ event.isDefaultPrevented() );
+ }
+};
+
+$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
+ $.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
+ if ( typeof options === "string" ) {
+ options = { effect: options };
+ }
+ var hasOptions,
+ effectName = !options ?
+ method :
+ options === true || typeof options === "number" ?
+ defaultEffect :
+ options.effect || defaultEffect;
+ options = options || {};
+ if ( typeof options === "number" ) {
+ options = { duration: options };
+ }
+ hasOptions = !$.isEmptyObject( options );
+ options.complete = callback;
+ if ( options.delay ) {
+ element.delay( options.delay );
+ }
+ if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
+ element[ method ]( options );
+ } else if ( effectName !== method && element[ effectName ] ) {
+ element[ effectName ]( options.duration, options.easing, callback );
+ } else {
+ element.queue(function( next ) {
+ $( this )[ method ]();
+ if ( callback ) {
+ callback.call( element[ 0 ] );
+ }
+ next();
+ });
+ }
+ };
+});
+
+var widget = $.widget;
+
+
+/*!
+ * jQuery UI Mouse 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/mouse/
+ */
+
+
+var mouseHandled = false;
+$( document ).mouseup( function() {
+ mouseHandled = false;
+});
+
+var mouse = $.widget("ui.mouse", {
+ version: "1.11.3",
+ options: {
+ cancel: "input,textarea,button,select,option",
+ distance: 1,
+ delay: 0
+ },
+ _mouseInit: function() {
+ var that = this;
+
+ this.element
+ .bind("mousedown." + this.widgetName, function(event) {
+ return that._mouseDown(event);
+ })
+ .bind("click." + this.widgetName, function(event) {
+ if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
+ $.removeData(event.target, that.widgetName + ".preventClickEvent");
+ event.stopImmediatePropagation();
+ return false;
+ }
+ });
+
+ this.started = false;
+ },
+
+ // TODO: make sure destroying one instance of mouse doesn't mess with
+ // other instances of mouse
+ _mouseDestroy: function() {
+ this.element.unbind("." + this.widgetName);
+ if ( this._mouseMoveDelegate ) {
+ this.document
+ .unbind("mousemove." + this.widgetName, this._mouseMoveDelegate)
+ .unbind("mouseup." + this.widgetName, this._mouseUpDelegate);
+ }
+ },
+
+ _mouseDown: function(event) {
+ // don't let more than one widget handle mouseStart
+ if ( mouseHandled ) {
+ return;
+ }
+
+ this._mouseMoved = false;
+
+ // we may have missed mouseup (out of window)
+ (this._mouseStarted && this._mouseUp(event));
+
+ this._mouseDownEvent = event;
+
+ var that = this,
+ btnIsLeft = (event.which === 1),
+ // event.target.nodeName works around a bug in IE 8 with
+ // disabled inputs (#7620)
+ elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
+ if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
+ return true;
+ }
+
+ this.mouseDelayMet = !this.options.delay;
+ if (!this.mouseDelayMet) {
+ this._mouseDelayTimer = setTimeout(function() {
+ that.mouseDelayMet = true;
+ }, this.options.delay);
+ }
+
+ if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+ this._mouseStarted = (this._mouseStart(event) !== false);
+ if (!this._mouseStarted) {
+ event.preventDefault();
+ return true;
+ }
+ }
+
+ // Click event may never have fired (Gecko & Opera)
+ if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
+ $.removeData(event.target, this.widgetName + ".preventClickEvent");
+ }
+
+ // these delegates are required to keep context
+ this._mouseMoveDelegate = function(event) {
+ return that._mouseMove(event);
+ };
+ this._mouseUpDelegate = function(event) {
+ return that._mouseUp(event);
+ };
+
+ this.document
+ .bind( "mousemove." + this.widgetName, this._mouseMoveDelegate )
+ .bind( "mouseup." + this.widgetName, this._mouseUpDelegate );
+
+ event.preventDefault();
+
+ mouseHandled = true;
+ return true;
+ },
+
+ _mouseMove: function(event) {
+ // Only check for mouseups outside the document if you've moved inside the document
+ // at least once. This prevents the firing of mouseup in the case of IE<9, which will
+ // fire a mousemove event if content is placed under the cursor. See #7778
+ // Support: IE <9
+ if ( this._mouseMoved ) {
+ // IE mouseup check - mouseup happened when mouse was out of window
+ if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
+ return this._mouseUp(event);
+
+ // Iframe mouseup check - mouseup occurred in another document
+ } else if ( !event.which ) {
+ return this._mouseUp( event );
+ }
+ }
+
+ if ( event.which || event.button ) {
+ this._mouseMoved = true;
+ }
+
+ if (this._mouseStarted) {
+ this._mouseDrag(event);
+ return event.preventDefault();
+ }
+
+ if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+ this._mouseStarted =
+ (this._mouseStart(this._mouseDownEvent, event) !== false);
+ (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
+ }
+
+ return !this._mouseStarted;
+ },
+
+ _mouseUp: function(event) {
+ this.document
+ .unbind( "mousemove." + this.widgetName, this._mouseMoveDelegate )
+ .unbind( "mouseup." + this.widgetName, this._mouseUpDelegate );
+
+ if (this._mouseStarted) {
+ this._mouseStarted = false;
+
+ if (event.target === this._mouseDownEvent.target) {
+ $.data(event.target, this.widgetName + ".preventClickEvent", true);
+ }
+
+ this._mouseStop(event);
+ }
+
+ mouseHandled = false;
+ return false;
+ },
+
+ _mouseDistanceMet: function(event) {
+ return (Math.max(
+ Math.abs(this._mouseDownEvent.pageX - event.pageX),
+ Math.abs(this._mouseDownEvent.pageY - event.pageY)
+ ) >= this.options.distance
+ );
+ },
+
+ _mouseDelayMet: function(/* event */) {
+ return this.mouseDelayMet;
+ },
+
+ // These are placeholder methods, to be overriden by extending plugin
+ _mouseStart: function(/* event */) {},
+ _mouseDrag: function(/* event */) {},
+ _mouseStop: function(/* event */) {},
+ _mouseCapture: function(/* event */) { return true; }
+});
+
+
+/*!
+ * jQuery UI Position 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/position/
+ */
+
+(function() {
+
+$.ui = $.ui || {};
+
+var cachedScrollbarWidth, supportsOffsetFractions,
+ max = Math.max,
+ abs = Math.abs,
+ round = Math.round,
+ rhorizontal = /left|center|right/,
+ rvertical = /top|center|bottom/,
+ roffset = /[\+\-]\d+(\.[\d]+)?%?/,
+ rposition = /^\w+/,
+ rpercent = /%$/,
+ _position = $.fn.position;
+
+function getOffsets( offsets, width, height ) {
+ return [
+ parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
+ parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
+ ];
+}
+
+function parseCss( element, property ) {
+ return parseInt( $.css( element, property ), 10 ) || 0;
+}
+
+function getDimensions( elem ) {
+ var raw = elem[0];
+ if ( raw.nodeType === 9 ) {
+ return {
+ width: elem.width(),
+ height: elem.height(),
+ offset: { top: 0, left: 0 }
+ };
+ }
+ if ( $.isWindow( raw ) ) {
+ return {
+ width: elem.width(),
+ height: elem.height(),
+ offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
+ };
+ }
+ if ( raw.preventDefault ) {
+ return {
+ width: 0,
+ height: 0,
+ offset: { top: raw.pageY, left: raw.pageX }
+ };
+ }
+ return {
+ width: elem.outerWidth(),
+ height: elem.outerHeight(),
+ offset: elem.offset()
+ };
+}
+
+$.position = {
+ scrollbarWidth: function() {
+ if ( cachedScrollbarWidth !== undefined ) {
+ return cachedScrollbarWidth;
+ }
+ var w1, w2,
+ div = $( "<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
+ innerDiv = div.children()[0];
+
+ $( "body" ).append( div );
+ w1 = innerDiv.offsetWidth;
+ div.css( "overflow", "scroll" );
+
+ w2 = innerDiv.offsetWidth;
+
+ if ( w1 === w2 ) {
+ w2 = div[0].clientWidth;
+ }
+
+ div.remove();
+
+ return (cachedScrollbarWidth = w1 - w2);
+ },
+ getScrollInfo: function( within ) {
+ var overflowX = within.isWindow || within.isDocument ? "" :
+ within.element.css( "overflow-x" ),
+ overflowY = within.isWindow || within.isDocument ? "" :
+ within.element.css( "overflow-y" ),
+ hasOverflowX = overflowX === "scroll" ||
+ ( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
+ hasOverflowY = overflowY === "scroll" ||
+ ( overflowY === "auto" && within.height < within.element[0].scrollHeight );
+ return {
+ width: hasOverflowY ? $.position.scrollbarWidth() : 0,
+ height: hasOverflowX ? $.position.scrollbarWidth() : 0
+ };
+ },
+ getWithinInfo: function( element ) {
+ var withinElement = $( element || window ),
+ isWindow = $.isWindow( withinElement[0] ),
+ isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9;
+ return {
+ element: withinElement,
+ isWindow: isWindow,
+ isDocument: isDocument,
+ offset: withinElement.offset() || { left: 0, top: 0 },
+ scrollLeft: withinElement.scrollLeft(),
+ scrollTop: withinElement.scrollTop(),
+
+ // support: jQuery 1.6.x
+ // jQuery 1.6 doesn't support .outerWidth/Height() on documents or windows
+ width: isWindow || isDocument ? withinElement.width() : withinElement.outerWidth(),
+ height: isWindow || isDocument ? withinElement.height() : withinElement.outerHeight()
+ };
+ }
+};
+
+$.fn.position = function( options ) {
+ if ( !options || !options.of ) {
+ return _position.apply( this, arguments );
+ }
+
+ // make a copy, we don't want to modify arguments
+ options = $.extend( {}, options );
+
+ var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
+ target = $( options.of ),
+ within = $.position.getWithinInfo( options.within ),
+ scrollInfo = $.position.getScrollInfo( within ),
+ collision = ( options.collision || "flip" ).split( " " ),
+ offsets = {};
+
+ dimensions = getDimensions( target );
+ if ( target[0].preventDefault ) {
+ // force left top to allow flipping
+ options.at = "left top";
+ }
+ targetWidth = dimensions.width;
+ targetHeight = dimensions.height;
+ targetOffset = dimensions.offset;
+ // clone to reuse original targetOffset later
+ basePosition = $.extend( {}, targetOffset );
+
+ // force my and at to have valid horizontal and vertical positions
+ // if a value is missing or invalid, it will be converted to center
+ $.each( [ "my", "at" ], function() {
+ var pos = ( options[ this ] || "" ).split( " " ),
+ horizontalOffset,
+ verticalOffset;
+
+ if ( pos.length === 1) {
+ pos = rhorizontal.test( pos[ 0 ] ) ?
+ pos.concat( [ "center" ] ) :
+ rvertical.test( pos[ 0 ] ) ?
+ [ "center" ].concat( pos ) :
+ [ "center", "center" ];
+ }
+ pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
+ pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
+
+ // calculate offsets
+ horizontalOffset = roffset.exec( pos[ 0 ] );
+ verticalOffset = roffset.exec( pos[ 1 ] );
+ offsets[ this ] = [
+ horizontalOffset ? horizontalOffset[ 0 ] : 0,
+ verticalOffset ? verticalOffset[ 0 ] : 0
+ ];
+
+ // reduce to just the positions without the offsets
+ options[ this ] = [
+ rposition.exec( pos[ 0 ] )[ 0 ],
+ rposition.exec( pos[ 1 ] )[ 0 ]
+ ];
+ });
+
+ // normalize collision option
+ if ( collision.length === 1 ) {
+ collision[ 1 ] = collision[ 0 ];
+ }
+
+ if ( options.at[ 0 ] === "right" ) {
+ basePosition.left += targetWidth;
+ } else if ( options.at[ 0 ] === "center" ) {
+ basePosition.left += targetWidth / 2;
+ }
+
+ if ( options.at[ 1 ] === "bottom" ) {
+ basePosition.top += targetHeight;
+ } else if ( options.at[ 1 ] === "center" ) {
+ basePosition.top += targetHeight / 2;
+ }
+
+ atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
+ basePosition.left += atOffset[ 0 ];
+ basePosition.top += atOffset[ 1 ];
+
+ return this.each(function() {
+ var collisionPosition, using,
+ elem = $( this ),
+ elemWidth = elem.outerWidth(),
+ elemHeight = elem.outerHeight(),
+ marginLeft = parseCss( this, "marginLeft" ),
+ marginTop = parseCss( this, "marginTop" ),
+ collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
+ collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
+ position = $.extend( {}, basePosition ),
+ myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
+
+ if ( options.my[ 0 ] === "right" ) {
+ position.left -= elemWidth;
+ } else if ( options.my[ 0 ] === "center" ) {
+ position.left -= elemWidth / 2;
+ }
+
+ if ( options.my[ 1 ] === "bottom" ) {
+ position.top -= elemHeight;
+ } else if ( options.my[ 1 ] === "center" ) {
+ position.top -= elemHeight / 2;
+ }
+
+ position.left += myOffset[ 0 ];
+ position.top += myOffset[ 1 ];
+
+ // if the browser doesn't support fractions, then round for consistent results
+ if ( !supportsOffsetFractions ) {
+ position.left = round( position.left );
+ position.top = round( position.top );
+ }
+
+ collisionPosition = {
+ marginLeft: marginLeft,
+ marginTop: marginTop
+ };
+
+ $.each( [ "left", "top" ], function( i, dir ) {
+ if ( $.ui.position[ collision[ i ] ] ) {
+ $.ui.position[ collision[ i ] ][ dir ]( position, {
+ targetWidth: targetWidth,
+ targetHeight: targetHeight,
+ elemWidth: elemWidth,
+ elemHeight: elemHeight,
+ collisionPosition: collisionPosition,
+ collisionWidth: collisionWidth,
+ collisionHeight: collisionHeight,
+ offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
+ my: options.my,
+ at: options.at,
+ within: within,
+ elem: elem
+ });
+ }
+ });
+
+ if ( options.using ) {
+ // adds feedback as second argument to using callback, if present
+ using = function( props ) {
+ var left = targetOffset.left - position.left,
+ right = left + targetWidth - elemWidth,
+ top = targetOffset.top - position.top,
+ bottom = top + targetHeight - elemHeight,
+ feedback = {
+ target: {
+ element: target,
+ left: targetOffset.left,
+ top: targetOffset.top,
+ width: targetWidth,
+ height: targetHeight
+ },
+ element: {
+ element: elem,
+ left: position.left,
+ top: position.top,
+ width: elemWidth,
+ height: elemHeight
+ },
+ horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
+ vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
+ };
+ if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
+ feedback.horizontal = "center";
+ }
+ if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
+ feedback.vertical = "middle";
+ }
+ if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
+ feedback.important = "horizontal";
+ } else {
+ feedback.important = "vertical";
+ }
+ options.using.call( this, props, feedback );
+ };
+ }
+
+ elem.offset( $.extend( position, { using: using } ) );
+ });
+};
+
+$.ui.position = {
+ fit: {
+ left: function( position, data ) {
+ var within = data.within,
+ withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
+ outerWidth = within.width,
+ collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+ overLeft = withinOffset - collisionPosLeft,
+ overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
+ newOverRight;
+
+ // element is wider than within
+ if ( data.collisionWidth > outerWidth ) {
+ // element is initially over the left side of within
+ if ( overLeft > 0 && overRight <= 0 ) {
+ newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
+ position.left += overLeft - newOverRight;
+ // element is initially over right side of within
+ } else if ( overRight > 0 && overLeft <= 0 ) {
+ position.left = withinOffset;
+ // element is initially over both left and right sides of within
+ } else {
+ if ( overLeft > overRight ) {
+ position.left = withinOffset + outerWidth - data.collisionWidth;
+ } else {
+ position.left = withinOffset;
+ }
+ }
+ // too far left -> align with left edge
+ } else if ( overLeft > 0 ) {
+ position.left += overLeft;
+ // too far right -> align with right edge
+ } else if ( overRight > 0 ) {
+ position.left -= overRight;
+ // adjust based on position and margin
+ } else {
+ position.left = max( position.left - collisionPosLeft, position.left );
+ }
+ },
+ top: function( position, data ) {
+ var within = data.within,
+ withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
+ outerHeight = data.within.height,
+ collisionPosTop = position.top - data.collisionPosition.marginTop,
+ overTop = withinOffset - collisionPosTop,
+ overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
+ newOverBottom;
+
+ // element is taller than within
+ if ( data.collisionHeight > outerHeight ) {
+ // element is initially over the top of within
+ if ( overTop > 0 && overBottom <= 0 ) {
+ newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
+ position.top += overTop - newOverBottom;
+ // element is initially over bottom of within
+ } else if ( overBottom > 0 && overTop <= 0 ) {
+ position.top = withinOffset;
+ // element is initially over both top and bottom of within
+ } else {
+ if ( overTop > overBottom ) {
+ position.top = withinOffset + outerHeight - data.collisionHeight;
+ } else {
+ position.top = withinOffset;
+ }
+ }
+ // too far up -> align with top
+ } else if ( overTop > 0 ) {
+ position.top += overTop;
+ // too far down -> align with bottom edge
+ } else if ( overBottom > 0 ) {
+ position.top -= overBottom;
+ // adjust based on position and margin
+ } else {
+ position.top = max( position.top - collisionPosTop, position.top );
+ }
+ }
+ },
+ flip: {
+ left: function( position, data ) {
+ var within = data.within,
+ withinOffset = within.offset.left + within.scrollLeft,
+ outerWidth = within.width,
+ offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
+ collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+ overLeft = collisionPosLeft - offsetLeft,
+ overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
+ myOffset = data.my[ 0 ] === "left" ?
+ -data.elemWidth :
+ data.my[ 0 ] === "right" ?
+ data.elemWidth :
+ 0,
+ atOffset = data.at[ 0 ] === "left" ?
+ data.targetWidth :
+ data.at[ 0 ] === "right" ?
+ -data.targetWidth :
+ 0,
+ offset = -2 * data.offset[ 0 ],
+ newOverRight,
+ newOverLeft;
+
+ if ( overLeft < 0 ) {
+ newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
+ if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
+ position.left += myOffset + atOffset + offset;
+ }
+ } else if ( overRight > 0 ) {
+ newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
+ if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
+ position.left += myOffset + atOffset + offset;
+ }
+ }
+ },
+ top: function( position, data ) {
+ var within = data.within,
+ withinOffset = within.offset.top + within.scrollTop,
+ outerHeight = within.height,
+ offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
+ collisionPosTop = position.top - data.collisionPosition.marginTop,
+ overTop = collisionPosTop - offsetTop,
+ overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
+ top = data.my[ 1 ] === "top",
+ myOffset = top ?
+ -data.elemHeight :
+ data.my[ 1 ] === "bottom" ?
+ data.elemHeight :
+ 0,
+ atOffset = data.at[ 1 ] === "top" ?
+ data.targetHeight :
+ data.at[ 1 ] === "bottom" ?
+ -data.targetHeight :
+ 0,
+ offset = -2 * data.offset[ 1 ],
+ newOverTop,
+ newOverBottom;
+ if ( overTop < 0 ) {
+ newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
+ if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {
+ position.top += myOffset + atOffset + offset;
+ }
+ } else if ( overBottom > 0 ) {
+ newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
+ if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {
+ position.top += myOffset + atOffset + offset;
+ }
+ }
+ }
+ },
+ flipfit: {
+ left: function() {
+ $.ui.position.flip.left.apply( this, arguments );
+ $.ui.position.fit.left.apply( this, arguments );
+ },
+ top: function() {
+ $.ui.position.flip.top.apply( this, arguments );
+ $.ui.position.fit.top.apply( this, arguments );
+ }
+ }
+};
+
+// fraction support test
+(function() {
+ var testElement, testElementParent, testElementStyle, offsetLeft, i,
+ body = document.getElementsByTagName( "body" )[ 0 ],
+ div = document.createElement( "div" );
+
+ //Create a "fake body" for testing based on method used in jQuery.support
+ testElement = document.createElement( body ? "div" : "body" );
+ testElementStyle = {
+ visibility: "hidden",
+ width: 0,
+ height: 0,
+ border: 0,
+ margin: 0,
+ background: "none"
+ };
+ if ( body ) {
+ $.extend( testElementStyle, {
+ position: "absolute",
+ left: "-1000px",
+ top: "-1000px"
+ });
+ }
+ for ( i in testElementStyle ) {
+ testElement.style[ i ] = testElementStyle[ i ];
+ }
+ testElement.appendChild( div );
+ testElementParent = body || document.documentElement;
+ testElementParent.insertBefore( testElement, testElementParent.firstChild );
+
+ div.style.cssText = "position: absolute; left: 10.7432222px;";
+
+ offsetLeft = $( div ).offset().left;
+ supportsOffsetFractions = offsetLeft > 10 && offsetLeft < 11;
+
+ testElement.innerHTML = "";
+ testElementParent.removeChild( testElement );
+})();
+
+})();
+
+var position = $.ui.position;
+
+
+/*!
+ * jQuery UI Draggable 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/draggable/
+ */
+
+
+$.widget("ui.draggable", $.ui.mouse, {
+ version: "1.11.3",
+ widgetEventPrefix: "drag",
+ options: {
+ addClasses: true,
+ appendTo: "parent",
+ axis: false,
+ connectToSortable: false,
+ containment: false,
+ cursor: "auto",
+ cursorAt: false,
+ grid: false,
+ handle: false,
+ helper: "original",
+ iframeFix: false,
+ opacity: false,
+ refreshPositions: false,
+ revert: false,
+ revertDuration: 500,
+ scope: "default",
+ scroll: true,
+ scrollSensitivity: 20,
+ scrollSpeed: 20,
+ snap: false,
+ snapMode: "both",
+ snapTolerance: 20,
+ stack: false,
+ zIndex: false,
+
+ // callbacks
+ drag: null,
+ start: null,
+ stop: null
+ },
+ _create: function() {
+
+ if ( this.options.helper === "original" ) {
+ this._setPositionRelative();
+ }
+ if (this.options.addClasses){
+ this.element.addClass("ui-draggable");
+ }
+ if (this.options.disabled){
+ this.element.addClass("ui-draggable-disabled");
+ }
+ this._setHandleClassName();
+
+ this._mouseInit();
+ },
+
+ _setOption: function( key, value ) {
+ this._super( key, value );
+ if ( key === "handle" ) {
+ this._removeHandleClassName();
+ this._setHandleClassName();
+ }
+ },
+
+ _destroy: function() {
+ if ( ( this.helper || this.element ).is( ".ui-draggable-dragging" ) ) {
+ this.destroyOnClear = true;
+ return;
+ }
+ this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" );
+ this._removeHandleClassName();
+ this._mouseDestroy();
+ },
+
+ _mouseCapture: function(event) {
+ var o = this.options;
+
+ this._blurActiveElement( event );
+
+ // among others, prevent a drag on a resizable-handle
+ if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
+ return false;
+ }
+
+ //Quit if we're not on a valid handle
+ this.handle = this._getHandle(event);
+ if (!this.handle) {
+ return false;
+ }
+
+ this._blockFrames( o.iframeFix === true ? "iframe" : o.iframeFix );
+
+ return true;
+
+ },
+
+ _blockFrames: function( selector ) {
+ this.iframeBlocks = this.document.find( selector ).map(function() {
+ var iframe = $( this );
+
+ return $( "<div>" )
+ .css( "position", "absolute" )
+ .appendTo( iframe.parent() )
+ .outerWidth( iframe.outerWidth() )
+ .outerHeight( iframe.outerHeight() )
+ .offset( iframe.offset() )[ 0 ];
+ });
+ },
+
+ _unblockFrames: function() {
+ if ( this.iframeBlocks ) {
+ this.iframeBlocks.remove();
+ delete this.iframeBlocks;
+ }
+ },
+
+ _blurActiveElement: function( event ) {
+ var document = this.document[ 0 ];
+
+ // Only need to blur if the event occurred on the draggable itself, see #10527
+ if ( !this.handleElement.is( event.target ) ) {
+ return;
+ }
+
+ // support: IE9
+ // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
+ try {
+
+ // Support: IE9, IE10
+ // If the <body> is blurred, IE will switch windows, see #9520
+ if ( document.activeElement && document.activeElement.nodeName.toLowerCase() !== "body" ) {
+
+ // Blur any element that currently has focus, see #4261
+ $( document.activeElement ).blur();
+ }
+ } catch ( error ) {}
+ },
+
+ _mouseStart: function(event) {
+
+ var o = this.options;
+
+ //Create and append the visible helper
+ this.helper = this._createHelper(event);
+
+ this.helper.addClass("ui-draggable-dragging");
+
+ //Cache the helper size
+ this._cacheHelperProportions();
+
+ //If ddmanager is used for droppables, set the global draggable
+ if ($.ui.ddmanager) {
+ $.ui.ddmanager.current = this;
+ }
+
+ /*
+ * - Position generation -
+ * This block generates everything position related - it's the core of draggables.
+ */
+
+ //Cache the margins of the original element
+ this._cacheMargins();
+
+ //Store the helper's css position
+ this.cssPosition = this.helper.css( "position" );
+ this.scrollParent = this.helper.scrollParent( true );
+ this.offsetParent = this.helper.offsetParent();
+ this.hasFixedAncestor = this.helper.parents().filter(function() {
+ return $( this ).css( "position" ) === "fixed";
+ }).length > 0;
+
+ //The element's absolute position on the page minus margins
+ this.positionAbs = this.element.offset();
+ this._refreshOffsets( event );
+
+ //Generate the original position
+ this.originalPosition = this.position = this._generatePosition( event, false );
+ this.originalPageX = event.pageX;
+ this.originalPageY = event.pageY;
+
+ //Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+ (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+
+ //Set a containment if given in the options
+ this._setContainment();
+
+ //Trigger event + callbacks
+ if (this._trigger("start", event) === false) {
+ this._clear();
+ return false;
+ }
+
+ //Recache the helper size
+ this._cacheHelperProportions();
+
+ //Prepare the droppable offsets
+ if ($.ui.ddmanager && !o.dropBehaviour) {
+ $.ui.ddmanager.prepareOffsets(this, event);
+ }
+
+ // Reset helper's right/bottom css if they're set and set explicit width/height instead
+ // as this prevents resizing of elements with right/bottom set (see #7772)
+ this._normalizeRightBottom();
+
+ this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+
+ //If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
+ if ( $.ui.ddmanager ) {
+ $.ui.ddmanager.dragStart(this, event);
+ }
+
+ return true;
+ },
+
+ _refreshOffsets: function( event ) {
+ this.offset = {
+ top: this.positionAbs.top - this.margins.top,
+ left: this.positionAbs.left - this.margins.left,
+ scroll: false,
+ parent: this._getParentOffset(),
+ relative: this._getRelativeOffset()
+ };
+
+ this.offset.click = {
+ left: event.pageX - this.offset.left,
+ top: event.pageY - this.offset.top
+ };
+ },
+
+ _mouseDrag: function(event, noPropagation) {
+ // reset any necessary cached properties (see #5009)
+ if ( this.hasFixedAncestor ) {
+ this.offset.parent = this._getParentOffset();
+ }
+
+ //Compute the helpers position
+ this.position = this._generatePosition( event, true );
+ this.positionAbs = this._convertPositionTo("absolute");
+
+ //Call plugins and callbacks and use the resulting position if something is returned
+ if (!noPropagation) {
+ var ui = this._uiHash();
+ if (this._trigger("drag", event, ui) === false) {
+ this._mouseUp({});
+ return false;
+ }
+ this.position = ui.position;
+ }
+
+ this.helper[ 0 ].style.left = this.position.left + "px";
+ this.helper[ 0 ].style.top = this.position.top + "px";
+
+ if ($.ui.ddmanager) {
+ $.ui.ddmanager.drag(this, event);
+ }
+
+ return false;
+ },
+
+ _mouseStop: function(event) {
+
+ //If we are using droppables, inform the manager about the drop
+ var that = this,
+ dropped = false;
+ if ($.ui.ddmanager && !this.options.dropBehaviour) {
+ dropped = $.ui.ddmanager.drop(this, event);
+ }
+
+ //if a drop comes from outside (a sortable)
+ if (this.dropped) {
+ dropped = this.dropped;
+ this.dropped = false;
+ }
+
+ if ((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
+ $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
+ if (that._trigger("stop", event) !== false) {
+ that._clear();
+ }
+ });
+ } else {
+ if (this._trigger("stop", event) !== false) {
+ this._clear();
+ }
+ }
+
+ return false;
+ },
+
+ _mouseUp: function( event ) {
+ this._unblockFrames();
+
+ //If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
+ if ( $.ui.ddmanager ) {
+ $.ui.ddmanager.dragStop(this, event);
+ }
+
+ // Only need to focus if the event occurred on the draggable itself, see #10527
+ if ( this.handleElement.is( event.target ) ) {
+ // The interaction is over; whether or not the click resulted in a drag, focus the element
+ this.element.focus();
+ }
+
+ return $.ui.mouse.prototype._mouseUp.call(this, event);
+ },
+
+ cancel: function() {
+
+ if (this.helper.is(".ui-draggable-dragging")) {
+ this._mouseUp({});
+ } else {
+ this._clear();
+ }
+
+ return this;
+
+ },
+
+ _getHandle: function(event) {
+ return this.options.handle ?
+ !!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
+ true;
+ },
+
+ _setHandleClassName: function() {
+ this.handleElement = this.options.handle ?
+ this.element.find( this.options.handle ) : this.element;
+ this.handleElement.addClass( "ui-draggable-handle" );
+ },
+
+ _removeHandleClassName: function() {
+ this.handleElement.removeClass( "ui-draggable-handle" );
+ },
+
+ _createHelper: function(event) {
+
+ var o = this.options,
+ helperIsFunction = $.isFunction( o.helper ),
+ helper = helperIsFunction ?
+ $( o.helper.apply( this.element[ 0 ], [ event ] ) ) :
+ ( o.helper === "clone" ?
+ this.element.clone().removeAttr( "id" ) :
+ this.element );
+
+ if (!helper.parents("body").length) {
+ helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
+ }
+
+ // http://bugs.jqueryui.com/ticket/9446
+ // a helper function can return the original element
+ // which wouldn't have been set to relative in _create
+ if ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {
+ this._setPositionRelative();
+ }
+
+ if (helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
+ helper.css("position", "absolute");
+ }
+
+ return helper;
+
+ },
+
+ _setPositionRelative: function() {
+ if ( !( /^(?:r|a|f)/ ).test( this.element.css( "position" ) ) ) {
+ this.element[ 0 ].style.position = "relative";
+ }
+ },
+
+ _adjustOffsetFromHelper: function(obj) {
+ if (typeof obj === "string") {
+ obj = obj.split(" ");
+ }
+ if ($.isArray(obj)) {
+ obj = { left: +obj[0], top: +obj[1] || 0 };
+ }
+ if ("left" in obj) {
+ this.offset.click.left = obj.left + this.margins.left;
+ }
+ if ("right" in obj) {
+ this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+ }
+ if ("top" in obj) {
+ this.offset.click.top = obj.top + this.margins.top;
+ }
+ if ("bottom" in obj) {
+ this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+ }
+ },
+
+ _isRootNode: function( element ) {
+ return ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];
+ },
+
+ _getParentOffset: function() {
+
+ //Get the offsetParent and cache its position
+ var po = this.offsetParent.offset(),
+ document = this.document[ 0 ];
+
+ // This is a special case where we need to modify a offset calculated on start, since the following happened:
+ // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+ // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+ // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+ if (this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+ po.left += this.scrollParent.scrollLeft();
+ po.top += this.scrollParent.scrollTop();
+ }
+
+ if ( this._isRootNode( this.offsetParent[ 0 ] ) ) {
+ po = { top: 0, left: 0 };
+ }
+
+ return {
+ top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
+ left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
+ };
+
+ },
+
+ _getRelativeOffset: function() {
+ if ( this.cssPosition !== "relative" ) {
+ return { top: 0, left: 0 };
+ }
+
+ var p = this.element.position(),
+ scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
+
+ return {
+ top: p.top - ( parseInt(this.helper.css( "top" ), 10) || 0 ) + ( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),
+ left: p.left - ( parseInt(this.helper.css( "left" ), 10) || 0 ) + ( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )
+ };
+
+ },
+
+ _cacheMargins: function() {
+ this.margins = {
+ left: (parseInt(this.element.css("marginLeft"), 10) || 0),
+ top: (parseInt(this.element.css("marginTop"), 10) || 0),
+ right: (parseInt(this.element.css("marginRight"), 10) || 0),
+ bottom: (parseInt(this.element.css("marginBottom"), 10) || 0)
+ };
+ },
+
+ _cacheHelperProportions: function() {
+ this.helperProportions = {
+ width: this.helper.outerWidth(),
+ height: this.helper.outerHeight()
+ };
+ },
+
+ _setContainment: function() {
+
+ var isUserScrollable, c, ce,
+ o = this.options,
+ document = this.document[ 0 ];
+
+ this.relativeContainer = null;
+
+ if ( !o.containment ) {
+ this.containment = null;
+ return;
+ }
+
+ if ( o.containment === "window" ) {
+ this.containment = [
+ $( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
+ $( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
+ $( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left,
+ $( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
+ ];
+ return;
+ }
+
+ if ( o.containment === "document") {
+ this.containment = [
+ 0,
+ 0,
+ $( document ).width() - this.helperProportions.width - this.margins.left,
+ ( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
+ ];
+ return;
+ }
+
+ if ( o.containment.constructor === Array ) {
+ this.containment = o.containment;
+ return;
+ }
+
+ if ( o.containment === "parent" ) {
+ o.containment = this.helper[ 0 ].parentNode;
+ }
+
+ c = $( o.containment );
+ ce = c[ 0 ];
+
+ if ( !ce ) {
+ return;
+ }
+
+ isUserScrollable = /(scroll|auto)/.test( c.css( "overflow" ) );
+
+ this.containment = [
+ ( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
+ ( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ),
+ ( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -
+ ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) -
+ ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) -
+ this.helperProportions.width -
+ this.margins.left -
+ this.margins.right,
+ ( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -
+ ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) -
+ ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) -
+ this.helperProportions.height -
+ this.margins.top -
+ this.margins.bottom
+ ];
+ this.relativeContainer = c;
+ },
+
+ _convertPositionTo: function(d, pos) {
+
+ if (!pos) {
+ pos = this.position;
+ }
+
+ var mod = d === "absolute" ? 1 : -1,
+ scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
+
+ return {
+ top: (
+ pos.top + // The absolute mouse position
+ this.offset.relative.top * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.top * mod - // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.offset.scroll.top : ( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod)
+ ),
+ left: (
+ pos.left + // The absolute mouse position
+ this.offset.relative.left * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.left * mod - // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.offset.scroll.left : ( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod)
+ )
+ };
+
+ },
+
+ _generatePosition: function( event, constrainPosition ) {
+
+ var containment, co, top, left,
+ o = this.options,
+ scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),
+ pageX = event.pageX,
+ pageY = event.pageY;
+
+ // Cache the scroll
+ if ( !scrollIsRootNode || !this.offset.scroll ) {
+ this.offset.scroll = {
+ top: this.scrollParent.scrollTop(),
+ left: this.scrollParent.scrollLeft()
+ };
+ }
+
+ /*
+ * - Position constraining -
+ * Constrain the position to a mix of grid, containment.
+ */
+
+ // If we are not dragging yet, we won't check for options
+ if ( constrainPosition ) {
+ if ( this.containment ) {
+ if ( this.relativeContainer ){
+ co = this.relativeContainer.offset();
+ containment = [
+ this.containment[ 0 ] + co.left,
+ this.containment[ 1 ] + co.top,
+ this.containment[ 2 ] + co.left,
+ this.containment[ 3 ] + co.top
+ ];
+ } else {
+ containment = this.containment;
+ }
+
+ if (event.pageX - this.offset.click.left < containment[0]) {
+ pageX = containment[0] + this.offset.click.left;
+ }
+ if (event.pageY - this.offset.click.top < containment[1]) {
+ pageY = containment[1] + this.offset.click.top;
+ }
+ if (event.pageX - this.offset.click.left > containment[2]) {
+ pageX = containment[2] + this.offset.click.left;
+ }
+ if (event.pageY - this.offset.click.top > containment[3]) {
+ pageY = containment[3] + this.offset.click.top;
+ }
+ }
+
+ if (o.grid) {
+ //Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
+ top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
+ pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+
+ left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
+ pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+ }
+
+ if ( o.axis === "y" ) {
+ pageX = this.originalPageX;
+ }
+
+ if ( o.axis === "x" ) {
+ pageY = this.originalPageY;
+ }
+ }
+
+ return {
+ top: (
+ pageY - // The absolute mouse position
+ this.offset.click.top - // Click offset (relative to the element)
+ this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.top + // The offsetParent's offset without borders (offset + border)
+ ( this.cssPosition === "fixed" ? -this.offset.scroll.top : ( scrollIsRootNode ? 0 : this.offset.scroll.top ) )
+ ),
+ left: (
+ pageX - // The absolute mouse position
+ this.offset.click.left - // Click offset (relative to the element)
+ this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.left + // The offsetParent's offset without borders (offset + border)
+ ( this.cssPosition === "fixed" ? -this.offset.scroll.left : ( scrollIsRootNode ? 0 : this.offset.scroll.left ) )
+ )
+ };
+
+ },
+
+ _clear: function() {
+ this.helper.removeClass("ui-draggable-dragging");
+ if (this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
+ this.helper.remove();
+ }
+ this.helper = null;
+ this.cancelHelperRemoval = false;
+ if ( this.destroyOnClear ) {
+ this.destroy();
+ }
+ },
+
+ _normalizeRightBottom: function() {
+ if ( this.options.axis !== "y" && this.helper.css( "right" ) !== "auto" ) {
+ this.helper.width( this.helper.width() );
+ this.helper.css( "right", "auto" );
+ }
+ if ( this.options.axis !== "x" && this.helper.css( "bottom" ) !== "auto" ) {
+ this.helper.height( this.helper.height() );
+ this.helper.css( "bottom", "auto" );
+ }
+ },
+
+ // From now on bulk stuff - mainly helpers
+
+ _trigger: function( type, event, ui ) {
+ ui = ui || this._uiHash();
+ $.ui.plugin.call( this, type, [ event, ui, this ], true );
+
+ // Absolute position and offset (see #6884 ) have to be recalculated after plugins
+ if ( /^(drag|start|stop)/.test( type ) ) {
+ this.positionAbs = this._convertPositionTo( "absolute" );
+ ui.offset = this.positionAbs;
+ }
+ return $.Widget.prototype._trigger.call( this, type, event, ui );
+ },
+
+ plugins: {},
+
+ _uiHash: function() {
+ return {
+ helper: this.helper,
+ position: this.position,
+ originalPosition: this.originalPosition,
+ offset: this.positionAbs
+ };
+ }
+
+});
+
+$.ui.plugin.add( "draggable", "connectToSortable", {
+ start: function( event, ui, draggable ) {
+ var uiSortable = $.extend( {}, ui, {
+ item: draggable.element
+ });
+
+ draggable.sortables = [];
+ $( draggable.options.connectToSortable ).each(function() {
+ var sortable = $( this ).sortable( "instance" );
+
+ if ( sortable && !sortable.options.disabled ) {
+ draggable.sortables.push( sortable );
+
+ // refreshPositions is called at drag start to refresh the containerCache
+ // which is used in drag. This ensures it's initialized and synchronized
+ // with any changes that might have happened on the page since initialization.
+ sortable.refreshPositions();
+ sortable._trigger("activate", event, uiSortable);
+ }
+ });
+ },
+ stop: function( event, ui, draggable ) {
+ var uiSortable = $.extend( {}, ui, {
+ item: draggable.element
+ });
+
+ draggable.cancelHelperRemoval = false;
+
+ $.each( draggable.sortables, function() {
+ var sortable = this;
+
+ if ( sortable.isOver ) {
+ sortable.isOver = 0;
+
+ // Allow this sortable to handle removing the helper
+ draggable.cancelHelperRemoval = true;
+ sortable.cancelHelperRemoval = false;
+
+ // Use _storedCSS To restore properties in the sortable,
+ // as this also handles revert (#9675) since the draggable
+ // may have modified them in unexpected ways (#8809)
+ sortable._storedCSS = {
+ position: sortable.placeholder.css( "position" ),
+ top: sortable.placeholder.css( "top" ),
+ left: sortable.placeholder.css( "left" )
+ };
+
+ sortable._mouseStop(event);
+
+ // Once drag has ended, the sortable should return to using
+ // its original helper, not the shared helper from draggable
+ sortable.options.helper = sortable.options._helper;
+ } else {
+ // Prevent this Sortable from removing the helper.
+ // However, don't set the draggable to remove the helper
+ // either as another connected Sortable may yet handle the removal.
+ sortable.cancelHelperRemoval = true;
+
+ sortable._trigger( "deactivate", event, uiSortable );
+ }
+ });
+ },
+ drag: function( event, ui, draggable ) {
+ $.each( draggable.sortables, function() {
+ var innermostIntersecting = false,
+ sortable = this;
+
+ // Copy over variables that sortable's _intersectsWith uses
+ sortable.positionAbs = draggable.positionAbs;
+ sortable.helperProportions = draggable.helperProportions;
+ sortable.offset.click = draggable.offset.click;
+
+ if ( sortable._intersectsWith( sortable.containerCache ) ) {
+ innermostIntersecting = true;
+
+ $.each( draggable.sortables, function() {
+ // Copy over variables that sortable's _intersectsWith uses
+ this.positionAbs = draggable.positionAbs;
+ this.helperProportions = draggable.helperProportions;
+ this.offset.click = draggable.offset.click;
+
+ if ( this !== sortable &&
+ this._intersectsWith( this.containerCache ) &&
+ $.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {
+ innermostIntersecting = false;
+ }
+
+ return innermostIntersecting;
+ });
+ }
+
+ if ( innermostIntersecting ) {
+ // If it intersects, we use a little isOver variable and set it once,
+ // so that the move-in stuff gets fired only once.
+ if ( !sortable.isOver ) {
+ sortable.isOver = 1;
+
+ sortable.currentItem = ui.helper
+ .appendTo( sortable.element )
+ .data( "ui-sortable-item", true );
+
+ // Store helper option to later restore it
+ sortable.options._helper = sortable.options.helper;
+
+ sortable.options.helper = function() {
+ return ui.helper[ 0 ];
+ };
+
+ // Fire the start events of the sortable with our passed browser event,
+ // and our own helper (so it doesn't create a new one)
+ event.target = sortable.currentItem[ 0 ];
+ sortable._mouseCapture( event, true );
+ sortable._mouseStart( event, true, true );
+
+ // Because the browser event is way off the new appended portlet,
+ // modify necessary variables to reflect the changes
+ sortable.offset.click.top = draggable.offset.click.top;
+ sortable.offset.click.left = draggable.offset.click.left;
+ sortable.offset.parent.left -= draggable.offset.parent.left -
+ sortable.offset.parent.left;
+ sortable.offset.parent.top -= draggable.offset.parent.top -
+ sortable.offset.parent.top;
+
+ draggable._trigger( "toSortable", event );
+
+ // Inform draggable that the helper is in a valid drop zone,
+ // used solely in the revert option to handle "valid/invalid".
+ draggable.dropped = sortable.element;
+
+ // Need to refreshPositions of all sortables in the case that
+ // adding to one sortable changes the location of the other sortables (#9675)
+ $.each( draggable.sortables, function() {
+ this.refreshPositions();
+ });
+
+ // hack so receive/update callbacks work (mostly)
+ draggable.currentItem = draggable.element;
+ sortable.fromOutside = draggable;
+ }
+
+ if ( sortable.currentItem ) {
+ sortable._mouseDrag( event );
+ // Copy the sortable's position because the draggable's can potentially reflect
+ // a relative position, while sortable is always absolute, which the dragged
+ // element has now become. (#8809)
+ ui.position = sortable.position;
+ }
+ } else {
+ // If it doesn't intersect with the sortable, and it intersected before,
+ // we fake the drag stop of the sortable, but make sure it doesn't remove
+ // the helper by using cancelHelperRemoval.
+ if ( sortable.isOver ) {
+
+ sortable.isOver = 0;
+ sortable.cancelHelperRemoval = true;
+
+ // Calling sortable's mouseStop would trigger a revert,
+ // so revert must be temporarily false until after mouseStop is called.
+ sortable.options._revert = sortable.options.revert;
+ sortable.options.revert = false;
+
+ sortable._trigger( "out", event, sortable._uiHash( sortable ) );
+ sortable._mouseStop( event, true );
+
+ // restore sortable behaviors that were modfied
+ // when the draggable entered the sortable area (#9481)
+ sortable.options.revert = sortable.options._revert;
+ sortable.options.helper = sortable.options._helper;
+
+ if ( sortable.placeholder ) {
+ sortable.placeholder.remove();
+ }
+
+ // Recalculate the draggable's offset considering the sortable
+ // may have modified them in unexpected ways (#8809)
+ draggable._refreshOffsets( event );
+ ui.position = draggable._generatePosition( event, true );
+
+ draggable._trigger( "fromSortable", event );
+
+ // Inform draggable that the helper is no longer in a valid drop zone
+ draggable.dropped = false;
+
+ // Need to refreshPositions of all sortables just in case removing
+ // from one sortable changes the location of other sortables (#9675)
+ $.each( draggable.sortables, function() {
+ this.refreshPositions();
+ });
+ }
+ }
+ });
+ }
+});
+
+$.ui.plugin.add("draggable", "cursor", {
+ start: function( event, ui, instance ) {
+ var t = $( "body" ),
+ o = instance.options;
+
+ if (t.css("cursor")) {
+ o._cursor = t.css("cursor");
+ }
+ t.css("cursor", o.cursor);
+ },
+ stop: function( event, ui, instance ) {
+ var o = instance.options;
+ if (o._cursor) {
+ $("body").css("cursor", o._cursor);
+ }
+ }
+});
+
+$.ui.plugin.add("draggable", "opacity", {
+ start: function( event, ui, instance ) {
+ var t = $( ui.helper ),
+ o = instance.options;
+ if (t.css("opacity")) {
+ o._opacity = t.css("opacity");
+ }
+ t.css("opacity", o.opacity);
+ },
+ stop: function( event, ui, instance ) {
+ var o = instance.options;
+ if (o._opacity) {
+ $(ui.helper).css("opacity", o._opacity);
+ }
+ }
+});
+
+$.ui.plugin.add("draggable", "scroll", {
+ start: function( event, ui, i ) {
+ if ( !i.scrollParentNotHidden ) {
+ i.scrollParentNotHidden = i.helper.scrollParent( false );
+ }
+
+ if ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] && i.scrollParentNotHidden[ 0 ].tagName !== "HTML" ) {
+ i.overflowOffset = i.scrollParentNotHidden.offset();
+ }
+ },
+ drag: function( event, ui, i ) {
+
+ var o = i.options,
+ scrolled = false,
+ scrollParent = i.scrollParentNotHidden[ 0 ],
+ document = i.document[ 0 ];
+
+ if ( scrollParent !== document && scrollParent.tagName !== "HTML" ) {
+ if ( !o.axis || o.axis !== "x" ) {
+ if ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY < o.scrollSensitivity ) {
+ scrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;
+ } else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {
+ scrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;
+ }
+ }
+
+ if ( !o.axis || o.axis !== "y" ) {
+ if ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX < o.scrollSensitivity ) {
+ scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;
+ } else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {
+ scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;
+ }
+ }
+
+ } else {
+
+ if (!o.axis || o.axis !== "x") {
+ if (event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
+ scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+ } else if ($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
+ scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+ }
+ }
+
+ if (!o.axis || o.axis !== "y") {
+ if (event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
+ scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+ } else if ($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
+ scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+ }
+ }
+
+ }
+
+ if (scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+ $.ui.ddmanager.prepareOffsets(i, event);
+ }
+
+ }
+});
+
+$.ui.plugin.add("draggable", "snap", {
+ start: function( event, ui, i ) {
+
+ var o = i.options;
+
+ i.snapElements = [];
+
+ $(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() {
+ var $t = $(this),
+ $o = $t.offset();
+ if (this !== i.element[0]) {
+ i.snapElements.push({
+ item: this,
+ width: $t.outerWidth(), height: $t.outerHeight(),
+ top: $o.top, left: $o.left
+ });
+ }
+ });
+
+ },
+ drag: function( event, ui, inst ) {
+
+ var ts, bs, ls, rs, l, r, t, b, i, first,
+ o = inst.options,
+ d = o.snapTolerance,
+ x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
+ y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
+
+ for (i = inst.snapElements.length - 1; i >= 0; i--){
+
+ l = inst.snapElements[i].left - inst.margins.left;
+ r = l + inst.snapElements[i].width;
+ t = inst.snapElements[i].top - inst.margins.top;
+ b = t + inst.snapElements[i].height;
+
+ if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {
+ if (inst.snapElements[i].snapping) {
+ (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+ }
+ inst.snapElements[i].snapping = false;
+ continue;
+ }
+
+ if (o.snapMode !== "inner") {
+ ts = Math.abs(t - y2) <= d;
+ bs = Math.abs(b - y1) <= d;
+ ls = Math.abs(l - x2) <= d;
+ rs = Math.abs(r - x1) <= d;
+ if (ts) {
+ ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top;
+ }
+ if (bs) {
+ ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top;
+ }
+ if (ls) {
+ ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left;
+ }
+ if (rs) {
+ ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left;
+ }
+ }
+
+ first = (ts || bs || ls || rs);
+
+ if (o.snapMode !== "outer") {
+ ts = Math.abs(t - y1) <= d;
+ bs = Math.abs(b - y2) <= d;
+ ls = Math.abs(l - x1) <= d;
+ rs = Math.abs(r - x2) <= d;
+ if (ts) {
+ ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top;
+ }
+ if (bs) {
+ ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top;
+ }
+ if (ls) {
+ ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left;
+ }
+ if (rs) {
+ ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left;
+ }
+ }
+
+ if (!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
+ (inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+ }
+ inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
+
+ }
+
+ }
+});
+
+$.ui.plugin.add("draggable", "stack", {
+ start: function( event, ui, instance ) {
+ var min,
+ o = instance.options,
+ group = $.makeArray($(o.stack)).sort(function(a, b) {
+ return (parseInt($(a).css("zIndex"), 10) || 0) - (parseInt($(b).css("zIndex"), 10) || 0);
+ });
+
+ if (!group.length) { return; }
+
+ min = parseInt($(group[0]).css("zIndex"), 10) || 0;
+ $(group).each(function(i) {
+ $(this).css("zIndex", min + i);
+ });
+ this.css("zIndex", (min + group.length));
+ }
+});
+
+$.ui.plugin.add("draggable", "zIndex", {
+ start: function( event, ui, instance ) {
+ var t = $( ui.helper ),
+ o = instance.options;
+
+ if (t.css("zIndex")) {
+ o._zIndex = t.css("zIndex");
+ }
+ t.css("zIndex", o.zIndex);
+ },
+ stop: function( event, ui, instance ) {
+ var o = instance.options;
+
+ if (o._zIndex) {
+ $(ui.helper).css("zIndex", o._zIndex);
+ }
+ }
+});
+
+var draggable = $.ui.draggable;
+
+
+/*!
+ * jQuery UI Droppable 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/droppable/
+ */
+
+
+$.widget( "ui.droppable", {
+ version: "1.11.3",
+ widgetEventPrefix: "drop",
+ options: {
+ accept: "*",
+ activeClass: false,
+ addClasses: true,
+ greedy: false,
+ hoverClass: false,
+ scope: "default",
+ tolerance: "intersect",
+
+ // callbacks
+ activate: null,
+ deactivate: null,
+ drop: null,
+ out: null,
+ over: null
+ },
+ _create: function() {
+
+ var proportions,
+ o = this.options,
+ accept = o.accept;
+
+ this.isover = false;
+ this.isout = true;
+
+ this.accept = $.isFunction( accept ) ? accept : function( d ) {
+ return d.is( accept );
+ };
+
+ this.proportions = function( /* valueToWrite */ ) {
+ if ( arguments.length ) {
+ // Store the droppable's proportions
+ proportions = arguments[ 0 ];
+ } else {
+ // Retrieve or derive the droppable's proportions
+ return proportions ?
+ proportions :
+ proportions = {
+ width: this.element[ 0 ].offsetWidth,
+ height: this.element[ 0 ].offsetHeight
+ };
+ }
+ };
+
+ this._addToManager( o.scope );
+
+ o.addClasses && this.element.addClass( "ui-droppable" );
+
+ },
+
+ _addToManager: function( scope ) {
+ // Add the reference and positions to the manager
+ $.ui.ddmanager.droppables[ scope ] = $.ui.ddmanager.droppables[ scope ] || [];
+ $.ui.ddmanager.droppables[ scope ].push( this );
+ },
+
+ _splice: function( drop ) {
+ var i = 0;
+ for ( ; i < drop.length; i++ ) {
+ if ( drop[ i ] === this ) {
+ drop.splice( i, 1 );
+ }
+ }
+ },
+
+ _destroy: function() {
+ var drop = $.ui.ddmanager.droppables[ this.options.scope ];
+
+ this._splice( drop );
+
+ this.element.removeClass( "ui-droppable ui-droppable-disabled" );
+ },
+
+ _setOption: function( key, value ) {
+
+ if ( key === "accept" ) {
+ this.accept = $.isFunction( value ) ? value : function( d ) {
+ return d.is( value );
+ };
+ } else if ( key === "scope" ) {
+ var drop = $.ui.ddmanager.droppables[ this.options.scope ];
+
+ this._splice( drop );
+ this._addToManager( value );
+ }
+
+ this._super( key, value );
+ },
+
+ _activate: function( event ) {
+ var draggable = $.ui.ddmanager.current;
+ if ( this.options.activeClass ) {
+ this.element.addClass( this.options.activeClass );
+ }
+ if ( draggable ){
+ this._trigger( "activate", event, this.ui( draggable ) );
+ }
+ },
+
+ _deactivate: function( event ) {
+ var draggable = $.ui.ddmanager.current;
+ if ( this.options.activeClass ) {
+ this.element.removeClass( this.options.activeClass );
+ }
+ if ( draggable ){
+ this._trigger( "deactivate", event, this.ui( draggable ) );
+ }
+ },
+
+ _over: function( event ) {
+
+ var draggable = $.ui.ddmanager.current;
+
+ // Bail if draggable and droppable are same element
+ if ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {
+ return;
+ }
+
+ if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
+ if ( this.options.hoverClass ) {
+ this.element.addClass( this.options.hoverClass );
+ }
+ this._trigger( "over", event, this.ui( draggable ) );
+ }
+
+ },
+
+ _out: function( event ) {
+
+ var draggable = $.ui.ddmanager.current;
+
+ // Bail if draggable and droppable are same element
+ if ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {
+ return;
+ }
+
+ if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
+ if ( this.options.hoverClass ) {
+ this.element.removeClass( this.options.hoverClass );
+ }
+ this._trigger( "out", event, this.ui( draggable ) );
+ }
+
+ },
+
+ _drop: function( event, custom ) {
+
+ var draggable = custom || $.ui.ddmanager.current,
+ childrenIntersection = false;
+
+ // Bail if draggable and droppable are same element
+ if ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {
+ return false;
+ }
+
+ this.element.find( ":data(ui-droppable)" ).not( ".ui-draggable-dragging" ).each(function() {
+ var inst = $( this ).droppable( "instance" );
+ if (
+ inst.options.greedy &&
+ !inst.options.disabled &&
+ inst.options.scope === draggable.options.scope &&
+ inst.accept.call( inst.element[ 0 ], ( draggable.currentItem || draggable.element ) ) &&
+ $.ui.intersect( draggable, $.extend( inst, { offset: inst.element.offset() } ), inst.options.tolerance, event )
+ ) { childrenIntersection = true; return false; }
+ });
+ if ( childrenIntersection ) {
+ return false;
+ }
+
+ if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
+ if ( this.options.activeClass ) {
+ this.element.removeClass( this.options.activeClass );
+ }
+ if ( this.options.hoverClass ) {
+ this.element.removeClass( this.options.hoverClass );
+ }
+ this._trigger( "drop", event, this.ui( draggable ) );
+ return this.element;
+ }
+
+ return false;
+
+ },
+
+ ui: function( c ) {
+ return {
+ draggable: ( c.currentItem || c.element ),
+ helper: c.helper,
+ position: c.position,
+ offset: c.positionAbs
+ };
+ }
+
+});
+
+$.ui.intersect = (function() {
+ function isOverAxis( x, reference, size ) {
+ return ( x >= reference ) && ( x < ( reference + size ) );
+ }
+
+ return function( draggable, droppable, toleranceMode, event ) {
+
+ if ( !droppable.offset ) {
+ return false;
+ }
+
+ var x1 = ( draggable.positionAbs || draggable.position.absolute ).left + draggable.margins.left,
+ y1 = ( draggable.positionAbs || draggable.position.absolute ).top + draggable.margins.top,
+ x2 = x1 + draggable.helperProportions.width,
+ y2 = y1 + draggable.helperProportions.height,
+ l = droppable.offset.left,
+ t = droppable.offset.top,
+ r = l + droppable.proportions().width,
+ b = t + droppable.proportions().height;
+
+ switch ( toleranceMode ) {
+ case "fit":
+ return ( l <= x1 && x2 <= r && t <= y1 && y2 <= b );
+ case "intersect":
+ return ( l < x1 + ( draggable.helperProportions.width / 2 ) && // Right Half
+ x2 - ( draggable.helperProportions.width / 2 ) < r && // Left Half
+ t < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half
+ y2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half
+ case "pointer":
+ return isOverAxis( event.pageY, t, droppable.proportions().height ) && isOverAxis( event.pageX, l, droppable.proportions().width );
+ case "touch":
+ return (
+ ( y1 >= t && y1 <= b ) || // Top edge touching
+ ( y2 >= t && y2 <= b ) || // Bottom edge touching
+ ( y1 < t && y2 > b ) // Surrounded vertically
+ ) && (
+ ( x1 >= l && x1 <= r ) || // Left edge touching
+ ( x2 >= l && x2 <= r ) || // Right edge touching
+ ( x1 < l && x2 > r ) // Surrounded horizontally
+ );
+ default:
+ return false;
+ }
+ };
+})();
+
+/*
+ This manager tracks offsets of draggables and droppables
+*/
+$.ui.ddmanager = {
+ current: null,
+ droppables: { "default": [] },
+ prepareOffsets: function( t, event ) {
+
+ var i, j,
+ m = $.ui.ddmanager.droppables[ t.options.scope ] || [],
+ type = event ? event.type : null, // workaround for #2317
+ list = ( t.currentItem || t.element ).find( ":data(ui-droppable)" ).addBack();
+
+ droppablesLoop: for ( i = 0; i < m.length; i++ ) {
+
+ // No disabled and non-accepted
+ if ( m[ i ].options.disabled || ( t && !m[ i ].accept.call( m[ i ].element[ 0 ], ( t.currentItem || t.element ) ) ) ) {
+ continue;
+ }
+
+ // Filter out elements in the current dragged item
+ for ( j = 0; j < list.length; j++ ) {
+ if ( list[ j ] === m[ i ].element[ 0 ] ) {
+ m[ i ].proportions().height = 0;
+ continue droppablesLoop;
+ }
+ }
+
+ m[ i ].visible = m[ i ].element.css( "display" ) !== "none";
+ if ( !m[ i ].visible ) {
+ continue;
+ }
+
+ // Activate the droppable if used directly from draggables
+ if ( type === "mousedown" ) {
+ m[ i ]._activate.call( m[ i ], event );
+ }
+
+ m[ i ].offset = m[ i ].element.offset();
+ m[ i ].proportions({ width: m[ i ].element[ 0 ].offsetWidth, height: m[ i ].element[ 0 ].offsetHeight });
+
+ }
+
+ },
+ drop: function( draggable, event ) {
+
+ var dropped = false;
+ // Create a copy of the droppables in case the list changes during the drop (#9116)
+ $.each( ( $.ui.ddmanager.droppables[ draggable.options.scope ] || [] ).slice(), function() {
+
+ if ( !this.options ) {
+ return;
+ }
+ if ( !this.options.disabled && this.visible && $.ui.intersect( draggable, this, this.options.tolerance, event ) ) {
+ dropped = this._drop.call( this, event ) || dropped;
+ }
+
+ if ( !this.options.disabled && this.visible && this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
+ this.isout = true;
+ this.isover = false;
+ this._deactivate.call( this, event );
+ }
+
+ });
+ return dropped;
+
+ },
+ dragStart: function( draggable, event ) {
+ // Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
+ draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
+ if ( !draggable.options.refreshPositions ) {
+ $.ui.ddmanager.prepareOffsets( draggable, event );
+ }
+ });
+ },
+ drag: function( draggable, event ) {
+
+ // If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
+ if ( draggable.options.refreshPositions ) {
+ $.ui.ddmanager.prepareOffsets( draggable, event );
+ }
+
+ // Run through all droppables and check their positions based on specific tolerance options
+ $.each( $.ui.ddmanager.droppables[ draggable.options.scope ] || [], function() {
+
+ if ( this.options.disabled || this.greedyChild || !this.visible ) {
+ return;
+ }
+
+ var parentInstance, scope, parent,
+ intersects = $.ui.intersect( draggable, this, this.options.tolerance, event ),
+ c = !intersects && this.isover ? "isout" : ( intersects && !this.isover ? "isover" : null );
+ if ( !c ) {
+ return;
+ }
+
+ if ( this.options.greedy ) {
+ // find droppable parents with same scope
+ scope = this.options.scope;
+ parent = this.element.parents( ":data(ui-droppable)" ).filter(function() {
+ return $( this ).droppable( "instance" ).options.scope === scope;
+ });
+
+ if ( parent.length ) {
+ parentInstance = $( parent[ 0 ] ).droppable( "instance" );
+ parentInstance.greedyChild = ( c === "isover" );
+ }
+ }
+
+ // we just moved into a greedy child
+ if ( parentInstance && c === "isover" ) {
+ parentInstance.isover = false;
+ parentInstance.isout = true;
+ parentInstance._out.call( parentInstance, event );
+ }
+
+ this[ c ] = true;
+ this[c === "isout" ? "isover" : "isout"] = false;
+ this[c === "isover" ? "_over" : "_out"].call( this, event );
+
+ // we just moved out of a greedy child
+ if ( parentInstance && c === "isout" ) {
+ parentInstance.isout = false;
+ parentInstance.isover = true;
+ parentInstance._over.call( parentInstance, event );
+ }
+ });
+
+ },
+ dragStop: function( draggable, event ) {
+ draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
+ // Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
+ if ( !draggable.options.refreshPositions ) {
+ $.ui.ddmanager.prepareOffsets( draggable, event );
+ }
+ }
+};
+
+var droppable = $.ui.droppable;
+
+
+/*!
+ * jQuery UI Resizable 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/resizable/
+ */
+
+
+$.widget("ui.resizable", $.ui.mouse, {
+ version: "1.11.3",
+ widgetEventPrefix: "resize",
+ options: {
+ alsoResize: false,
+ animate: false,
+ animateDuration: "slow",
+ animateEasing: "swing",
+ aspectRatio: false,
+ autoHide: false,
+ containment: false,
+ ghost: false,
+ grid: false,
+ handles: "e,s,se",
+ helper: false,
+ maxHeight: null,
+ maxWidth: null,
+ minHeight: 10,
+ minWidth: 10,
+ // See #7960
+ zIndex: 90,
+
+ // callbacks
+ resize: null,
+ start: null,
+ stop: null
+ },
+
+ _num: function( value ) {
+ return parseInt( value, 10 ) || 0;
+ },
+
+ _isNumber: function( value ) {
+ return !isNaN( parseInt( value, 10 ) );
+ },
+
+ _hasScroll: function( el, a ) {
+
+ if ( $( el ).css( "overflow" ) === "hidden") {
+ return false;
+ }
+
+ var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
+ has = false;
+
+ if ( el[ scroll ] > 0 ) {
+ return true;
+ }
+
+ // TODO: determine which cases actually cause this to happen
+ // if the element doesn't have the scroll set, see if it's possible to
+ // set the scroll
+ el[ scroll ] = 1;
+ has = ( el[ scroll ] > 0 );
+ el[ scroll ] = 0;
+ return has;
+ },
+
+ _create: function() {
+
+ var n, i, handle, axis, hname,
+ that = this,
+ o = this.options;
+ this.element.addClass("ui-resizable");
+
+ $.extend(this, {
+ _aspectRatio: !!(o.aspectRatio),
+ aspectRatio: o.aspectRatio,
+ originalElement: this.element,
+ _proportionallyResizeElements: [],
+ _helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
+ });
+
+ // Wrap the element if it cannot hold child nodes
+ if (this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)) {
+
+ this.element.wrap(
+ $("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
+ position: this.element.css("position"),
+ width: this.element.outerWidth(),
+ height: this.element.outerHeight(),
+ top: this.element.css("top"),
+ left: this.element.css("left")
+ })
+ );
+
+ this.element = this.element.parent().data(
+ "ui-resizable", this.element.resizable( "instance" )
+ );
+
+ this.elementIsWrapper = true;
+
+ this.element.css({
+ marginLeft: this.originalElement.css("marginLeft"),
+ marginTop: this.originalElement.css("marginTop"),
+ marginRight: this.originalElement.css("marginRight"),
+ marginBottom: this.originalElement.css("marginBottom")
+ });
+ this.originalElement.css({
+ marginLeft: 0,
+ marginTop: 0,
+ marginRight: 0,
+ marginBottom: 0
+ });
+ // support: Safari
+ // Prevent Safari textarea resize
+ this.originalResizeStyle = this.originalElement.css("resize");
+ this.originalElement.css("resize", "none");
+
+ this._proportionallyResizeElements.push( this.originalElement.css({
+ position: "static",
+ zoom: 1,
+ display: "block"
+ }) );
+
+ // support: IE9
+ // avoid IE jump (hard set the margin)
+ this.originalElement.css({ margin: this.originalElement.css("margin") });
+
+ this._proportionallyResize();
+ }
+
+ this.handles = o.handles ||
+ ( !$(".ui-resizable-handle", this.element).length ?
+ "e,s,se" : {
+ n: ".ui-resizable-n",
+ e: ".ui-resizable-e",
+ s: ".ui-resizable-s",
+ w: ".ui-resizable-w",
+ se: ".ui-resizable-se",
+ sw: ".ui-resizable-sw",
+ ne: ".ui-resizable-ne",
+ nw: ".ui-resizable-nw"
+ } );
+
+ if (this.handles.constructor === String) {
+
+ if ( this.handles === "all") {
+ this.handles = "n,e,s,w,se,sw,ne,nw";
+ }
+
+ n = this.handles.split(",");
+ this.handles = {};
+
+ for (i = 0; i < n.length; i++) {
+
+ handle = $.trim(n[i]);
+ hname = "ui-resizable-" + handle;
+ axis = $("<div class='ui-resizable-handle " + hname + "'></div>");
+
+ axis.css({ zIndex: o.zIndex });
+
+ // TODO : What's going on here?
+ if ("se" === handle) {
+ axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se");
+ }
+
+ this.handles[handle] = ".ui-resizable-" + handle;
+ this.element.append(axis);
+ }
+
+ }
+
+ this._renderAxis = function(target) {
+
+ var i, axis, padPos, padWrapper;
+
+ target = target || this.element;
+
+ for (i in this.handles) {
+
+ if (this.handles[i].constructor === String) {
+ this.handles[i] = this.element.children( this.handles[ i ] ).first().show();
+ }
+
+ if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)) {
+
+ axis = $(this.handles[i], this.element);
+
+ padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
+
+ padPos = [ "padding",
+ /ne|nw|n/.test(i) ? "Top" :
+ /se|sw|s/.test(i) ? "Bottom" :
+ /^e$/.test(i) ? "Right" : "Left" ].join("");
+
+ target.css(padPos, padWrapper);
+
+ this._proportionallyResize();
+
+ }
+
+ // TODO: What's that good for? There's not anything to be executed left
+ if (!$(this.handles[i]).length) {
+ continue;
+ }
+ }
+ };
+
+ // TODO: make renderAxis a prototype function
+ this._renderAxis(this.element);
+
+ this._handles = $(".ui-resizable-handle", this.element)
+ .disableSelection();
+
+ this._handles.mouseover(function() {
+ if (!that.resizing) {
+ if (this.className) {
+ axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
+ }
+ that.axis = axis && axis[1] ? axis[1] : "se";
+ }
+ });
+
+ if (o.autoHide) {
+ this._handles.hide();
+ $(this.element)
+ .addClass("ui-resizable-autohide")
+ .mouseenter(function() {
+ if (o.disabled) {
+ return;
+ }
+ $(this).removeClass("ui-resizable-autohide");
+ that._handles.show();
+ })
+ .mouseleave(function() {
+ if (o.disabled) {
+ return;
+ }
+ if (!that.resizing) {
+ $(this).addClass("ui-resizable-autohide");
+ that._handles.hide();
+ }
+ });
+ }
+
+ this._mouseInit();
+
+ },
+
+ _destroy: function() {
+
+ this._mouseDestroy();
+
+ var wrapper,
+ _destroy = function(exp) {
+ $(exp)
+ .removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
+ .removeData("resizable")
+ .removeData("ui-resizable")
+ .unbind(".resizable")
+ .find(".ui-resizable-handle")
+ .remove();
+ };
+
+ // TODO: Unwrap at same DOM position
+ if (this.elementIsWrapper) {
+ _destroy(this.element);
+ wrapper = this.element;
+ this.originalElement.css({
+ position: wrapper.css("position"),
+ width: wrapper.outerWidth(),
+ height: wrapper.outerHeight(),
+ top: wrapper.css("top"),
+ left: wrapper.css("left")
+ }).insertAfter( wrapper );
+ wrapper.remove();
+ }
+
+ this.originalElement.css("resize", this.originalResizeStyle);
+ _destroy(this.originalElement);
+
+ return this;
+ },
+
+ _mouseCapture: function(event) {
+ var i, handle,
+ capture = false;
+
+ for (i in this.handles) {
+ handle = $(this.handles[i])[0];
+ if (handle === event.target || $.contains(handle, event.target)) {
+ capture = true;
+ }
+ }
+
+ return !this.options.disabled && capture;
+ },
+
+ _mouseStart: function(event) {
+
+ var curleft, curtop, cursor,
+ o = this.options,
+ el = this.element;
+
+ this.resizing = true;
+
+ this._renderProxy();
+
+ curleft = this._num(this.helper.css("left"));
+ curtop = this._num(this.helper.css("top"));
+
+ if (o.containment) {
+ curleft += $(o.containment).scrollLeft() || 0;
+ curtop += $(o.containment).scrollTop() || 0;
+ }
+
+ this.offset = this.helper.offset();
+ this.position = { left: curleft, top: curtop };
+
+ this.size = this._helper ? {
+ width: this.helper.width(),
+ height: this.helper.height()
+ } : {
+ width: el.width(),
+ height: el.height()
+ };
+
+ this.originalSize = this._helper ? {
+ width: el.outerWidth(),
+ height: el.outerHeight()
+ } : {
+ width: el.width(),
+ height: el.height()
+ };
+
+ this.sizeDiff = {
+ width: el.outerWidth() - el.width(),
+ height: el.outerHeight() - el.height()
+ };
+
+ this.originalPosition = { left: curleft, top: curtop };
+ this.originalMousePosition = { left: event.pageX, top: event.pageY };
+
+ this.aspectRatio = (typeof o.aspectRatio === "number") ?
+ o.aspectRatio :
+ ((this.originalSize.width / this.originalSize.height) || 1);
+
+ cursor = $(".ui-resizable-" + this.axis).css("cursor");
+ $("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor);
+
+ el.addClass("ui-resizable-resizing");
+ this._propagate("start", event);
+ return true;
+ },
+
+ _mouseDrag: function(event) {
+
+ var data, props,
+ smp = this.originalMousePosition,
+ a = this.axis,
+ dx = (event.pageX - smp.left) || 0,
+ dy = (event.pageY - smp.top) || 0,
+ trigger = this._change[a];
+
+ this._updatePrevProperties();
+
+ if (!trigger) {
+ return false;
+ }
+
+ data = trigger.apply(this, [ event, dx, dy ]);
+
+ this._updateVirtualBoundaries(event.shiftKey);
+ if (this._aspectRatio || event.shiftKey) {
+ data = this._updateRatio(data, event);
+ }
+
+ data = this._respectSize(data, event);
+
+ this._updateCache(data);
+
+ this._propagate("resize", event);
+
+ props = this._applyChanges();
+
+ if ( !this._helper && this._proportionallyResizeElements.length ) {
+ this._proportionallyResize();
+ }
+
+ if ( !$.isEmptyObject( props ) ) {
+ this._updatePrevProperties();
+ this._trigger( "resize", event, this.ui() );
+ this._applyChanges();
+ }
+
+ return false;
+ },
+
+ _mouseStop: function(event) {
+
+ this.resizing = false;
+ var pr, ista, soffseth, soffsetw, s, left, top,
+ o = this.options, that = this;
+
+ if (this._helper) {
+
+ pr = this._proportionallyResizeElements;
+ ista = pr.length && (/textarea/i).test(pr[0].nodeName);
+ soffseth = ista && this._hasScroll(pr[0], "left") ? 0 : that.sizeDiff.height;
+ soffsetw = ista ? 0 : that.sizeDiff.width;
+
+ s = {
+ width: (that.helper.width() - soffsetw),
+ height: (that.helper.height() - soffseth)
+ };
+ left = (parseInt(that.element.css("left"), 10) +
+ (that.position.left - that.originalPosition.left)) || null;
+ top = (parseInt(that.element.css("top"), 10) +
+ (that.position.top - that.originalPosition.top)) || null;
+
+ if (!o.animate) {
+ this.element.css($.extend(s, { top: top, left: left }));
+ }
+
+ that.helper.height(that.size.height);
+ that.helper.width(that.size.width);
+
+ if (this._helper && !o.animate) {
+ this._proportionallyResize();
+ }
+ }
+
+ $("body").css("cursor", "auto");
+
+ this.element.removeClass("ui-resizable-resizing");
+
+ this._propagate("stop", event);
+
+ if (this._helper) {
+ this.helper.remove();
+ }
+
+ return false;
+
+ },
+
+ _updatePrevProperties: function() {
+ this.prevPosition = {
+ top: this.position.top,
+ left: this.position.left
+ };
+ this.prevSize = {
+ width: this.size.width,
+ height: this.size.height
+ };
+ },
+
+ _applyChanges: function() {
+ var props = {};
+
+ if ( this.position.top !== this.prevPosition.top ) {
+ props.top = this.position.top + "px";
+ }
+ if ( this.position.left !== this.prevPosition.left ) {
+ props.left = this.position.left + "px";
+ }
+ if ( this.size.width !== this.prevSize.width ) {
+ props.width = this.size.width + "px";
+ }
+ if ( this.size.height !== this.prevSize.height ) {
+ props.height = this.size.height + "px";
+ }
+
+ this.helper.css( props );
+
+ return props;
+ },
+
+ _updateVirtualBoundaries: function(forceAspectRatio) {
+ var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
+ o = this.options;
+
+ b = {
+ minWidth: this._isNumber(o.minWidth) ? o.minWidth : 0,
+ maxWidth: this._isNumber(o.maxWidth) ? o.maxWidth : Infinity,
+ minHeight: this._isNumber(o.minHeight) ? o.minHeight : 0,
+ maxHeight: this._isNumber(o.maxHeight) ? o.maxHeight : Infinity
+ };
+
+ if (this._aspectRatio || forceAspectRatio) {
+ pMinWidth = b.minHeight * this.aspectRatio;
+ pMinHeight = b.minWidth / this.aspectRatio;
+ pMaxWidth = b.maxHeight * this.aspectRatio;
+ pMaxHeight = b.maxWidth / this.aspectRatio;
+
+ if (pMinWidth > b.minWidth) {
+ b.minWidth = pMinWidth;
+ }
+ if (pMinHeight > b.minHeight) {
+ b.minHeight = pMinHeight;
+ }
+ if (pMaxWidth < b.maxWidth) {
+ b.maxWidth = pMaxWidth;
+ }
+ if (pMaxHeight < b.maxHeight) {
+ b.maxHeight = pMaxHeight;
+ }
+ }
+ this._vBoundaries = b;
+ },
+
+ _updateCache: function(data) {
+ this.offset = this.helper.offset();
+ if (this._isNumber(data.left)) {
+ this.position.left = data.left;
+ }
+ if (this._isNumber(data.top)) {
+ this.position.top = data.top;
+ }
+ if (this._isNumber(data.height)) {
+ this.size.height = data.height;
+ }
+ if (this._isNumber(data.width)) {
+ this.size.width = data.width;
+ }
+ },
+
+ _updateRatio: function( data ) {
+
+ var cpos = this.position,
+ csize = this.size,
+ a = this.axis;
+
+ if (this._isNumber(data.height)) {
+ data.width = (data.height * this.aspectRatio);
+ } else if (this._isNumber(data.width)) {
+ data.height = (data.width / this.aspectRatio);
+ }
+
+ if (a === "sw") {
+ data.left = cpos.left + (csize.width - data.width);
+ data.top = null;
+ }
+ if (a === "nw") {
+ data.top = cpos.top + (csize.height - data.height);
+ data.left = cpos.left + (csize.width - data.width);
+ }
+
+ return data;
+ },
+
+ _respectSize: function( data ) {
+
+ var o = this._vBoundaries,
+ a = this.axis,
+ ismaxw = this._isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width),
+ ismaxh = this._isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
+ isminw = this._isNumber(data.width) && o.minWidth && (o.minWidth > data.width),
+ isminh = this._isNumber(data.height) && o.minHeight && (o.minHeight > data.height),
+ dw = this.originalPosition.left + this.originalSize.width,
+ dh = this.position.top + this.size.height,
+ cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
+ if (isminw) {
+ data.width = o.minWidth;
+ }
+ if (isminh) {
+ data.height = o.minHeight;
+ }
+ if (ismaxw) {
+ data.width = o.maxWidth;
+ }
+ if (ismaxh) {
+ data.height = o.maxHeight;
+ }
+
+ if (isminw && cw) {
+ data.left = dw - o.minWidth;
+ }
+ if (ismaxw && cw) {
+ data.left = dw - o.maxWidth;
+ }
+ if (isminh && ch) {
+ data.top = dh - o.minHeight;
+ }
+ if (ismaxh && ch) {
+ data.top = dh - o.maxHeight;
+ }
+
+ // Fixing jump error on top/left - bug #2330
+ if (!data.width && !data.height && !data.left && data.top) {
+ data.top = null;
+ } else if (!data.width && !data.height && !data.top && data.left) {
+ data.left = null;
+ }
+
+ return data;
+ },
+
+ _getPaddingPlusBorderDimensions: function( element ) {
+ var i = 0,
+ widths = [],
+ borders = [
+ element.css( "borderTopWidth" ),
+ element.css( "borderRightWidth" ),
+ element.css( "borderBottomWidth" ),
+ element.css( "borderLeftWidth" )
+ ],
+ paddings = [
+ element.css( "paddingTop" ),
+ element.css( "paddingRight" ),
+ element.css( "paddingBottom" ),
+ element.css( "paddingLeft" )
+ ];
+
+ for ( ; i < 4; i++ ) {
+ widths[ i ] = ( parseInt( borders[ i ], 10 ) || 0 );
+ widths[ i ] += ( parseInt( paddings[ i ], 10 ) || 0 );
+ }
+
+ return {
+ height: widths[ 0 ] + widths[ 2 ],
+ width: widths[ 1 ] + widths[ 3 ]
+ };
+ },
+
+ _proportionallyResize: function() {
+
+ if (!this._proportionallyResizeElements.length) {
+ return;
+ }
+
+ var prel,
+ i = 0,
+ element = this.helper || this.element;
+
+ for ( ; i < this._proportionallyResizeElements.length; i++) {
+
+ prel = this._proportionallyResizeElements[i];
+
+ // TODO: Seems like a bug to cache this.outerDimensions
+ // considering that we are in a loop.
+ if (!this.outerDimensions) {
+ this.outerDimensions = this._getPaddingPlusBorderDimensions( prel );
+ }
+
+ prel.css({
+ height: (element.height() - this.outerDimensions.height) || 0,
+ width: (element.width() - this.outerDimensions.width) || 0
+ });
+
+ }
+
+ },
+
+ _renderProxy: function() {
+
+ var el = this.element, o = this.options;
+ this.elementOffset = el.offset();
+
+ if (this._helper) {
+
+ this.helper = this.helper || $("<div style='overflow:hidden;'></div>");
+
+ this.helper.addClass(this._helper).css({
+ width: this.element.outerWidth() - 1,
+ height: this.element.outerHeight() - 1,
+ position: "absolute",
+ left: this.elementOffset.left + "px",
+ top: this.elementOffset.top + "px",
+ zIndex: ++o.zIndex //TODO: Don't modify option
+ });
+
+ this.helper
+ .appendTo("body")
+ .disableSelection();
+
+ } else {
+ this.helper = this.element;
+ }
+
+ },
+
+ _change: {
+ e: function(event, dx) {
+ return { width: this.originalSize.width + dx };
+ },
+ w: function(event, dx) {
+ var cs = this.originalSize, sp = this.originalPosition;
+ return { left: sp.left + dx, width: cs.width - dx };
+ },
+ n: function(event, dx, dy) {
+ var cs = this.originalSize, sp = this.originalPosition;
+ return { top: sp.top + dy, height: cs.height - dy };
+ },
+ s: function(event, dx, dy) {
+ return { height: this.originalSize.height + dy };
+ },
+ se: function(event, dx, dy) {
+ return $.extend(this._change.s.apply(this, arguments),
+ this._change.e.apply(this, [ event, dx, dy ]));
+ },
+ sw: function(event, dx, dy) {
+ return $.extend(this._change.s.apply(this, arguments),
+ this._change.w.apply(this, [ event, dx, dy ]));
+ },
+ ne: function(event, dx, dy) {
+ return $.extend(this._change.n.apply(this, arguments),
+ this._change.e.apply(this, [ event, dx, dy ]));
+ },
+ nw: function(event, dx, dy) {
+ return $.extend(this._change.n.apply(this, arguments),
+ this._change.w.apply(this, [ event, dx, dy ]));
+ }
+ },
+
+ _propagate: function(n, event) {
+ $.ui.plugin.call(this, n, [ event, this.ui() ]);
+ (n !== "resize" && this._trigger(n, event, this.ui()));
+ },
+
+ plugins: {},
+
+ ui: function() {
+ return {
+ originalElement: this.originalElement,
+ element: this.element,
+ helper: this.helper,
+ position: this.position,
+ size: this.size,
+ originalSize: this.originalSize,
+ originalPosition: this.originalPosition
+ };
+ }
+
+});
+
+/*
+ * Resizable Extensions
+ */
+
+$.ui.plugin.add("resizable", "animate", {
+
+ stop: function( event ) {
+ var that = $(this).resizable( "instance" ),
+ o = that.options,
+ pr = that._proportionallyResizeElements,
+ ista = pr.length && (/textarea/i).test(pr[0].nodeName),
+ soffseth = ista && that._hasScroll(pr[0], "left") ? 0 : that.sizeDiff.height,
+ soffsetw = ista ? 0 : that.sizeDiff.width,
+ style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },
+ left = (parseInt(that.element.css("left"), 10) +
+ (that.position.left - that.originalPosition.left)) || null,
+ top = (parseInt(that.element.css("top"), 10) +
+ (that.position.top - that.originalPosition.top)) || null;
+
+ that.element.animate(
+ $.extend(style, top && left ? { top: top, left: left } : {}), {
+ duration: o.animateDuration,
+ easing: o.animateEasing,
+ step: function() {
+
+ var data = {
+ width: parseInt(that.element.css("width"), 10),
+ height: parseInt(that.element.css("height"), 10),
+ top: parseInt(that.element.css("top"), 10),
+ left: parseInt(that.element.css("left"), 10)
+ };
+
+ if (pr && pr.length) {
+ $(pr[0]).css({ width: data.width, height: data.height });
+ }
+
+ // propagating resize, and updating values for each animation step
+ that._updateCache(data);
+ that._propagate("resize", event);
+
+ }
+ }
+ );
+ }
+
+});
+
+$.ui.plugin.add( "resizable", "containment", {
+
+ start: function() {
+ var element, p, co, ch, cw, width, height,
+ that = $( this ).resizable( "instance" ),
+ o = that.options,
+ el = that.element,
+ oc = o.containment,
+ ce = ( oc instanceof $ ) ? oc.get( 0 ) : ( /parent/.test( oc ) ) ? el.parent().get( 0 ) : oc;
+
+ if ( !ce ) {
+ return;
+ }
+
+ that.containerElement = $( ce );
+
+ if ( /document/.test( oc ) || oc === document ) {
+ that.containerOffset = {
+ left: 0,
+ top: 0
+ };
+ that.containerPosition = {
+ left: 0,
+ top: 0
+ };
+
+ that.parentData = {
+ element: $( document ),
+ left: 0,
+ top: 0,
+ width: $( document ).width(),
+ height: $( document ).height() || document.body.parentNode.scrollHeight
+ };
+ } else {
+ element = $( ce );
+ p = [];
+ $([ "Top", "Right", "Left", "Bottom" ]).each(function( i, name ) {
+ p[ i ] = that._num( element.css( "padding" + name ) );
+ });
+
+ that.containerOffset = element.offset();
+ that.containerPosition = element.position();
+ that.containerSize = {
+ height: ( element.innerHeight() - p[ 3 ] ),
+ width: ( element.innerWidth() - p[ 1 ] )
+ };
+
+ co = that.containerOffset;
+ ch = that.containerSize.height;
+ cw = that.containerSize.width;
+ width = ( that._hasScroll ( ce, "left" ) ? ce.scrollWidth : cw );
+ height = ( that._hasScroll ( ce ) ? ce.scrollHeight : ch ) ;
+
+ that.parentData = {
+ element: ce,
+ left: co.left,
+ top: co.top,
+ width: width,
+ height: height
+ };
+ }
+ },
+
+ resize: function( event ) {
+ var woset, hoset, isParent, isOffsetRelative,
+ that = $( this ).resizable( "instance" ),
+ o = that.options,
+ co = that.containerOffset,
+ cp = that.position,
+ pRatio = that._aspectRatio || event.shiftKey,
+ cop = {
+ top: 0,
+ left: 0
+ },
+ ce = that.containerElement,
+ continueResize = true;
+
+ if ( ce[ 0 ] !== document && ( /static/ ).test( ce.css( "position" ) ) ) {
+ cop = co;
+ }
+
+ if ( cp.left < ( that._helper ? co.left : 0 ) ) {
+ that.size.width = that.size.width +
+ ( that._helper ?
+ ( that.position.left - co.left ) :
+ ( that.position.left - cop.left ) );
+
+ if ( pRatio ) {
+ that.size.height = that.size.width / that.aspectRatio;
+ continueResize = false;
+ }
+ that.position.left = o.helper ? co.left : 0;
+ }
+
+ if ( cp.top < ( that._helper ? co.top : 0 ) ) {
+ that.size.height = that.size.height +
+ ( that._helper ?
+ ( that.position.top - co.top ) :
+ that.position.top );
+
+ if ( pRatio ) {
+ that.size.width = that.size.height * that.aspectRatio;
+ continueResize = false;
+ }
+ that.position.top = that._helper ? co.top : 0;
+ }
+
+ isParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 );
+ isOffsetRelative = /relative|absolute/.test( that.containerElement.css( "position" ) );
+
+ if ( isParent && isOffsetRelative ) {
+ that.offset.left = that.parentData.left + that.position.left;
+ that.offset.top = that.parentData.top + that.position.top;
+ } else {
+ that.offset.left = that.element.offset().left;
+ that.offset.top = that.element.offset().top;
+ }
+
+ woset = Math.abs( that.sizeDiff.width +
+ (that._helper ?
+ that.offset.left - cop.left :
+ (that.offset.left - co.left)) );
+
+ hoset = Math.abs( that.sizeDiff.height +
+ (that._helper ?
+ that.offset.top - cop.top :
+ (that.offset.top - co.top)) );
+
+ if ( woset + that.size.width >= that.parentData.width ) {
+ that.size.width = that.parentData.width - woset;
+ if ( pRatio ) {
+ that.size.height = that.size.width / that.aspectRatio;
+ continueResize = false;
+ }
+ }
+
+ if ( hoset + that.size.height >= that.parentData.height ) {
+ that.size.height = that.parentData.height - hoset;
+ if ( pRatio ) {
+ that.size.width = that.size.height * that.aspectRatio;
+ continueResize = false;
+ }
+ }
+
+ if ( !continueResize ) {
+ that.position.left = that.prevPosition.left;
+ that.position.top = that.prevPosition.top;
+ that.size.width = that.prevSize.width;
+ that.size.height = that.prevSize.height;
+ }
+ },
+
+ stop: function() {
+ var that = $( this ).resizable( "instance" ),
+ o = that.options,
+ co = that.containerOffset,
+ cop = that.containerPosition,
+ ce = that.containerElement,
+ helper = $( that.helper ),
+ ho = helper.offset(),
+ w = helper.outerWidth() - that.sizeDiff.width,
+ h = helper.outerHeight() - that.sizeDiff.height;
+
+ if ( that._helper && !o.animate && ( /relative/ ).test( ce.css( "position" ) ) ) {
+ $( this ).css({
+ left: ho.left - cop.left - co.left,
+ width: w,
+ height: h
+ });
+ }
+
+ if ( that._helper && !o.animate && ( /static/ ).test( ce.css( "position" ) ) ) {
+ $( this ).css({
+ left: ho.left - cop.left - co.left,
+ width: w,
+ height: h
+ });
+ }
+ }
+});
+
+$.ui.plugin.add("resizable", "alsoResize", {
+
+ start: function() {
+ var that = $(this).resizable( "instance" ),
+ o = that.options,
+ _store = function(exp) {
+ $(exp).each(function() {
+ var el = $(this);
+ el.data("ui-resizable-alsoresize", {
+ width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
+ left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10)
+ });
+ });
+ };
+
+ if (typeof(o.alsoResize) === "object" && !o.alsoResize.parentNode) {
+ if (o.alsoResize.length) {
+ o.alsoResize = o.alsoResize[0];
+ _store(o.alsoResize);
+ } else {
+ $.each(o.alsoResize, function(exp) {
+ _store(exp);
+ });
+ }
+ } else {
+ _store(o.alsoResize);
+ }
+ },
+
+ resize: function(event, ui) {
+ var that = $(this).resizable( "instance" ),
+ o = that.options,
+ os = that.originalSize,
+ op = that.originalPosition,
+ delta = {
+ height: (that.size.height - os.height) || 0,
+ width: (that.size.width - os.width) || 0,
+ top: (that.position.top - op.top) || 0,
+ left: (that.position.left - op.left) || 0
+ },
+
+ _alsoResize = function(exp, c) {
+ $(exp).each(function() {
+ var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
+ css = c && c.length ?
+ c :
+ el.parents(ui.originalElement[0]).length ?
+ [ "width", "height" ] :
+ [ "width", "height", "top", "left" ];
+
+ $.each(css, function(i, prop) {
+ var sum = (start[prop] || 0) + (delta[prop] || 0);
+ if (sum && sum >= 0) {
+ style[prop] = sum || null;
+ }
+ });
+
+ el.css(style);
+ });
+ };
+
+ if (typeof(o.alsoResize) === "object" && !o.alsoResize.nodeType) {
+ $.each(o.alsoResize, function(exp, c) {
+ _alsoResize(exp, c);
+ });
+ } else {
+ _alsoResize(o.alsoResize);
+ }
+ },
+
+ stop: function() {
+ $(this).removeData("resizable-alsoresize");
+ }
+});
+
+$.ui.plugin.add("resizable", "ghost", {
+
+ start: function() {
+
+ var that = $(this).resizable( "instance" ), o = that.options, cs = that.size;
+
+ that.ghost = that.originalElement.clone();
+ that.ghost
+ .css({
+ opacity: 0.25,
+ display: "block",
+ position: "relative",
+ height: cs.height,
+ width: cs.width,
+ margin: 0,
+ left: 0,
+ top: 0
+ })
+ .addClass("ui-resizable-ghost")
+ .addClass(typeof o.ghost === "string" ? o.ghost : "");
+
+ that.ghost.appendTo(that.helper);
+
+ },
+
+ resize: function() {
+ var that = $(this).resizable( "instance" );
+ if (that.ghost) {
+ that.ghost.css({
+ position: "relative",
+ height: that.size.height,
+ width: that.size.width
+ });
+ }
+ },
+
+ stop: function() {
+ var that = $(this).resizable( "instance" );
+ if (that.ghost && that.helper) {
+ that.helper.get(0).removeChild(that.ghost.get(0));
+ }
+ }
+
+});
+
+$.ui.plugin.add("resizable", "grid", {
+
+ resize: function() {
+ var outerDimensions,
+ that = $(this).resizable( "instance" ),
+ o = that.options,
+ cs = that.size,
+ os = that.originalSize,
+ op = that.originalPosition,
+ a = that.axis,
+ grid = typeof o.grid === "number" ? [ o.grid, o.grid ] : o.grid,
+ gridX = (grid[0] || 1),
+ gridY = (grid[1] || 1),
+ ox = Math.round((cs.width - os.width) / gridX) * gridX,
+ oy = Math.round((cs.height - os.height) / gridY) * gridY,
+ newWidth = os.width + ox,
+ newHeight = os.height + oy,
+ isMaxWidth = o.maxWidth && (o.maxWidth < newWidth),
+ isMaxHeight = o.maxHeight && (o.maxHeight < newHeight),
+ isMinWidth = o.minWidth && (o.minWidth > newWidth),
+ isMinHeight = o.minHeight && (o.minHeight > newHeight);
+
+ o.grid = grid;
+
+ if (isMinWidth) {
+ newWidth += gridX;
+ }
+ if (isMinHeight) {
+ newHeight += gridY;
+ }
+ if (isMaxWidth) {
+ newWidth -= gridX;
+ }
+ if (isMaxHeight) {
+ newHeight -= gridY;
+ }
+
+ if (/^(se|s|e)$/.test(a)) {
+ that.size.width = newWidth;
+ that.size.height = newHeight;
+ } else if (/^(ne)$/.test(a)) {
+ that.size.width = newWidth;
+ that.size.height = newHeight;
+ that.position.top = op.top - oy;
+ } else if (/^(sw)$/.test(a)) {
+ that.size.width = newWidth;
+ that.size.height = newHeight;
+ that.position.left = op.left - ox;
+ } else {
+ if ( newHeight - gridY <= 0 || newWidth - gridX <= 0) {
+ outerDimensions = that._getPaddingPlusBorderDimensions( this );
+ }
+
+ if ( newHeight - gridY > 0 ) {
+ that.size.height = newHeight;
+ that.position.top = op.top - oy;
+ } else {
+ newHeight = gridY - outerDimensions.height;
+ that.size.height = newHeight;
+ that.position.top = op.top + os.height - newHeight;
+ }
+ if ( newWidth - gridX > 0 ) {
+ that.size.width = newWidth;
+ that.position.left = op.left - ox;
+ } else {
+ newWidth = gridX - outerDimensions.width;
+ that.size.width = newWidth;
+ that.position.left = op.left + os.width - newWidth;
+ }
+ }
+ }
+
+});
+
+var resizable = $.ui.resizable;
+
+
+/*!
+ * jQuery UI Selectable 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/selectable/
+ */
+
+
+var selectable = $.widget("ui.selectable", $.ui.mouse, {
+ version: "1.11.3",
+ options: {
+ appendTo: "body",
+ autoRefresh: true,
+ distance: 0,
+ filter: "*",
+ tolerance: "touch",
+
+ // callbacks
+ selected: null,
+ selecting: null,
+ start: null,
+ stop: null,
+ unselected: null,
+ unselecting: null
+ },
+ _create: function() {
+ var selectees,
+ that = this;
+
+ this.element.addClass("ui-selectable");
+
+ this.dragged = false;
+
+ // cache selectee children based on filter
+ this.refresh = function() {
+ selectees = $(that.options.filter, that.element[0]);
+ selectees.addClass("ui-selectee");
+ selectees.each(function() {
+ var $this = $(this),
+ pos = $this.offset();
+ $.data(this, "selectable-item", {
+ element: this,
+ $element: $this,
+ left: pos.left,
+ top: pos.top,
+ right: pos.left + $this.outerWidth(),
+ bottom: pos.top + $this.outerHeight(),
+ startselected: false,
+ selected: $this.hasClass("ui-selected"),
+ selecting: $this.hasClass("ui-selecting"),
+ unselecting: $this.hasClass("ui-unselecting")
+ });
+ });
+ };
+ this.refresh();
+
+ this.selectees = selectees.addClass("ui-selectee");
+
+ this._mouseInit();
+
+ this.helper = $("<div class='ui-selectable-helper'></div>");
+ },
+
+ _destroy: function() {
+ this.selectees
+ .removeClass("ui-selectee")
+ .removeData("selectable-item");
+ this.element
+ .removeClass("ui-selectable ui-selectable-disabled");
+ this._mouseDestroy();
+ },
+
+ _mouseStart: function(event) {
+ var that = this,
+ options = this.options;
+
+ this.opos = [ event.pageX, event.pageY ];
+
+ if (this.options.disabled) {
+ return;
+ }
+
+ this.selectees = $(options.filter, this.element[0]);
+
+ this._trigger("start", event);
+
+ $(options.appendTo).append(this.helper);
+ // position helper (lasso)
+ this.helper.css({
+ "left": event.pageX,
+ "top": event.pageY,
+ "width": 0,
+ "height": 0
+ });
+
+ if (options.autoRefresh) {
+ this.refresh();
+ }
+
+ this.selectees.filter(".ui-selected").each(function() {
+ var selectee = $.data(this, "selectable-item");
+ selectee.startselected = true;
+ if (!event.metaKey && !event.ctrlKey) {
+ selectee.$element.removeClass("ui-selected");
+ selectee.selected = false;
+ selectee.$element.addClass("ui-unselecting");
+ selectee.unselecting = true;
+ // selectable UNSELECTING callback
+ that._trigger("unselecting", event, {
+ unselecting: selectee.element
+ });
+ }
+ });
+
+ $(event.target).parents().addBack().each(function() {
+ var doSelect,
+ selectee = $.data(this, "selectable-item");
+ if (selectee) {
+ doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass("ui-selected");
+ selectee.$element
+ .removeClass(doSelect ? "ui-unselecting" : "ui-selected")
+ .addClass(doSelect ? "ui-selecting" : "ui-unselecting");
+ selectee.unselecting = !doSelect;
+ selectee.selecting = doSelect;
+ selectee.selected = doSelect;
+ // selectable (UN)SELECTING callback
+ if (doSelect) {
+ that._trigger("selecting", event, {
+ selecting: selectee.element
+ });
+ } else {
+ that._trigger("unselecting", event, {
+ unselecting: selectee.element
+ });
+ }
+ return false;
+ }
+ });
+
+ },
+
+ _mouseDrag: function(event) {
+
+ this.dragged = true;
+
+ if (this.options.disabled) {
+ return;
+ }
+
+ var tmp,
+ that = this,
+ options = this.options,
+ x1 = this.opos[0],
+ y1 = this.opos[1],
+ x2 = event.pageX,
+ y2 = event.pageY;
+
+ if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; }
+ if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; }
+ this.helper.css({ left: x1, top: y1, width: x2 - x1, height: y2 - y1 });
+
+ this.selectees.each(function() {
+ var selectee = $.data(this, "selectable-item"),
+ hit = false;
+
+ //prevent helper from being selected if appendTo: selectable
+ if (!selectee || selectee.element === that.element[0]) {
+ return;
+ }
+
+ if (options.tolerance === "touch") {
+ hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
+ } else if (options.tolerance === "fit") {
+ hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
+ }
+
+ if (hit) {
+ // SELECT
+ if (selectee.selected) {
+ selectee.$element.removeClass("ui-selected");
+ selectee.selected = false;
+ }
+ if (selectee.unselecting) {
+ selectee.$element.removeClass("ui-unselecting");
+ selectee.unselecting = false;
+ }
+ if (!selectee.selecting) {
+ selectee.$element.addClass("ui-selecting");
+ selectee.selecting = true;
+ // selectable SELECTING callback
+ that._trigger("selecting", event, {
+ selecting: selectee.element
+ });
+ }
+ } else {
+ // UNSELECT
+ if (selectee.selecting) {
+ if ((event.metaKey || event.ctrlKey) && selectee.startselected) {
+ selectee.$element.removeClass("ui-selecting");
+ selectee.selecting = false;
+ selectee.$element.addClass("ui-selected");
+ selectee.selected = true;
+ } else {
+ selectee.$element.removeClass("ui-selecting");
+ selectee.selecting = false;
+ if (selectee.startselected) {
+ selectee.$element.addClass("ui-unselecting");
+ selectee.unselecting = true;
+ }
+ // selectable UNSELECTING callback
+ that._trigger("unselecting", event, {
+ unselecting: selectee.element
+ });
+ }
+ }
+ if (selectee.selected) {
+ if (!event.metaKey && !event.ctrlKey && !selectee.startselected) {
+ selectee.$element.removeClass("ui-selected");
+ selectee.selected = false;
+
+ selectee.$element.addClass("ui-unselecting");
+ selectee.unselecting = true;
+ // selectable UNSELECTING callback
+ that._trigger("unselecting", event, {
+ unselecting: selectee.element
+ });
+ }
+ }
+ }
+ });
+
+ return false;
+ },
+
+ _mouseStop: function(event) {
+ var that = this;
+
+ this.dragged = false;
+
+ $(".ui-unselecting", this.element[0]).each(function() {
+ var selectee = $.data(this, "selectable-item");
+ selectee.$element.removeClass("ui-unselecting");
+ selectee.unselecting = false;
+ selectee.startselected = false;
+ that._trigger("unselected", event, {
+ unselected: selectee.element
+ });
+ });
+ $(".ui-selecting", this.element[0]).each(function() {
+ var selectee = $.data(this, "selectable-item");
+ selectee.$element.removeClass("ui-selecting").addClass("ui-selected");
+ selectee.selecting = false;
+ selectee.selected = true;
+ selectee.startselected = true;
+ that._trigger("selected", event, {
+ selected: selectee.element
+ });
+ });
+ this._trigger("stop", event);
+
+ this.helper.remove();
+
+ return false;
+ }
+
+});
+
+
+/*!
+ * jQuery UI Sortable 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/sortable/
+ */
+
+
+var sortable = $.widget("ui.sortable", $.ui.mouse, {
+ version: "1.11.3",
+ widgetEventPrefix: "sort",
+ ready: false,
+ options: {
+ appendTo: "parent",
+ axis: false,
+ connectWith: false,
+ containment: false,
+ cursor: "auto",
+ cursorAt: false,
+ dropOnEmpty: true,
+ forcePlaceholderSize: false,
+ forceHelperSize: false,
+ grid: false,
+ handle: false,
+ helper: "original",
+ items: "> *",
+ opacity: false,
+ placeholder: false,
+ revert: false,
+ scroll: true,
+ scrollSensitivity: 20,
+ scrollSpeed: 20,
+ scope: "default",
+ tolerance: "intersect",
+ zIndex: 1000,
+
+ // callbacks
+ activate: null,
+ beforeStop: null,
+ change: null,
+ deactivate: null,
+ out: null,
+ over: null,
+ receive: null,
+ remove: null,
+ sort: null,
+ start: null,
+ stop: null,
+ update: null
+ },
+
+ _isOverAxis: function( x, reference, size ) {
+ return ( x >= reference ) && ( x < ( reference + size ) );
+ },
+
+ _isFloating: function( item ) {
+ return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display"));
+ },
+
+ _create: function() {
+
+ var o = this.options;
+ this.containerCache = {};
+ this.element.addClass("ui-sortable");
+
+ //Get the items
+ this.refresh();
+
+ //Let's determine if the items are being displayed horizontally
+ this.floating = this.items.length ? o.axis === "x" || this._isFloating(this.items[0].item) : false;
+
+ //Let's determine the parent's offset
+ this.offset = this.element.offset();
+
+ //Initialize mouse events for interaction
+ this._mouseInit();
+
+ this._setHandleClassName();
+
+ //We're ready to go
+ this.ready = true;
+
+ },
+
+ _setOption: function( key, value ) {
+ this._super( key, value );
+
+ if ( key === "handle" ) {
+ this._setHandleClassName();
+ }
+ },
+
+ _setHandleClassName: function() {
+ this.element.find( ".ui-sortable-handle" ).removeClass( "ui-sortable-handle" );
+ $.each( this.items, function() {
+ ( this.instance.options.handle ?
+ this.item.find( this.instance.options.handle ) : this.item )
+ .addClass( "ui-sortable-handle" );
+ });
+ },
+
+ _destroy: function() {
+ this.element
+ .removeClass( "ui-sortable ui-sortable-disabled" )
+ .find( ".ui-sortable-handle" )
+ .removeClass( "ui-sortable-handle" );
+ this._mouseDestroy();
+
+ for ( var i = this.items.length - 1; i >= 0; i-- ) {
+ this.items[i].item.removeData(this.widgetName + "-item");
+ }
+
+ return this;
+ },
+
+ _mouseCapture: function(event, overrideHandle) {
+ var currentItem = null,
+ validHandle = false,
+ that = this;
+
+ if (this.reverting) {
+ return false;
+ }
+
+ if(this.options.disabled || this.options.type === "static") {
+ return false;
+ }
+
+ //We have to refresh the items data once first
+ this._refreshItems(event);
+
+ //Find out if the clicked node (or one of its parents) is a actual item in this.items
+ $(event.target).parents().each(function() {
+ if($.data(this, that.widgetName + "-item") === that) {
+ currentItem = $(this);
+ return false;
+ }
+ });
+ if($.data(event.target, that.widgetName + "-item") === that) {
+ currentItem = $(event.target);
+ }
+
+ if(!currentItem) {
+ return false;
+ }
+ if(this.options.handle && !overrideHandle) {
+ $(this.options.handle, currentItem).find("*").addBack().each(function() {
+ if(this === event.target) {
+ validHandle = true;
+ }
+ });
+ if(!validHandle) {
+ return false;
+ }
+ }
+
+ this.currentItem = currentItem;
+ this._removeCurrentsFromItems();
+ return true;
+
+ },
+
+ _mouseStart: function(event, overrideHandle, noActivation) {
+
+ var i, body,
+ o = this.options;
+
+ this.currentContainer = this;
+
+ //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
+ this.refreshPositions();
+
+ //Create and append the visible helper
+ this.helper = this._createHelper(event);
+
+ //Cache the helper size
+ this._cacheHelperProportions();
+
+ /*
+ * - Position generation -
+ * This block generates everything position related - it's the core of draggables.
+ */
+
+ //Cache the margins of the original element
+ this._cacheMargins();
+
+ //Get the next scrolling parent
+ this.scrollParent = this.helper.scrollParent();
+
+ //The element's absolute position on the page minus margins
+ this.offset = this.currentItem.offset();
+ this.offset = {
+ top: this.offset.top - this.margins.top,
+ left: this.offset.left - this.margins.left
+ };
+
+ $.extend(this.offset, {
+ click: { //Where the click happened, relative to the element
+ left: event.pageX - this.offset.left,
+ top: event.pageY - this.offset.top
+ },
+ parent: this._getParentOffset(),
+ relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+ });
+
+ // Only after we got the offset, we can change the helper's position to absolute
+ // TODO: Still need to figure out a way to make relative sorting possible
+ this.helper.css("position", "absolute");
+ this.cssPosition = this.helper.css("position");
+
+ //Generate the original position
+ this.originalPosition = this._generatePosition(event);
+ this.originalPageX = event.pageX;
+ this.originalPageY = event.pageY;
+
+ //Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+ (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+
+ //Cache the former DOM position
+ this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
+
+ //If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
+ if(this.helper[0] !== this.currentItem[0]) {
+ this.currentItem.hide();
+ }
+
+ //Create the placeholder
+ this._createPlaceholder();
+
+ //Set a containment if given in the options
+ if(o.containment) {
+ this._setContainment();
+ }
+
+ if( o.cursor && o.cursor !== "auto" ) { // cursor option
+ body = this.document.find( "body" );
+
+ // support: IE
+ this.storedCursor = body.css( "cursor" );
+ body.css( "cursor", o.cursor );
+
+ this.storedStylesheet = $( "<style>*{ cursor: "+o.cursor+" !important; }</style>" ).appendTo( body );
+ }
+
+ if(o.opacity) { // opacity option
+ if (this.helper.css("opacity")) {
+ this._storedOpacity = this.helper.css("opacity");
+ }
+ this.helper.css("opacity", o.opacity);
+ }
+
+ if(o.zIndex) { // zIndex option
+ if (this.helper.css("zIndex")) {
+ this._storedZIndex = this.helper.css("zIndex");
+ }
+ this.helper.css("zIndex", o.zIndex);
+ }
+
+ //Prepare scrolling
+ if(this.scrollParent[0] !== this.document[0] && this.scrollParent[0].tagName !== "HTML") {
+ this.overflowOffset = this.scrollParent.offset();
+ }
+
+ //Call callbacks
+ this._trigger("start", event, this._uiHash());
+
+ //Recache the helper size
+ if(!this._preserveHelperProportions) {
+ this._cacheHelperProportions();
+ }
+
+
+ //Post "activate" events to possible containers
+ if( !noActivation ) {
+ for ( i = this.containers.length - 1; i >= 0; i-- ) {
+ this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );
+ }
+ }
+
+ //Prepare possible droppables
+ if($.ui.ddmanager) {
+ $.ui.ddmanager.current = this;
+ }
+
+ if ($.ui.ddmanager && !o.dropBehaviour) {
+ $.ui.ddmanager.prepareOffsets(this, event);
+ }
+
+ this.dragging = true;
+
+ this.helper.addClass("ui-sortable-helper");
+ this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+ return true;
+
+ },
+
+ _mouseDrag: function(event) {
+ var i, item, itemElement, intersection,
+ o = this.options,
+ scrolled = false;
+
+ //Compute the helpers position
+ this.position = this._generatePosition(event);
+ this.positionAbs = this._convertPositionTo("absolute");
+
+ if (!this.lastPositionAbs) {
+ this.lastPositionAbs = this.positionAbs;
+ }
+
+ //Do scrolling
+ if(this.options.scroll) {
+ if(this.scrollParent[0] !== this.document[0] && this.scrollParent[0].tagName !== "HTML") {
+
+ if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
+ this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
+ } else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) {
+ this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
+ }
+
+ if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
+ this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
+ } else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) {
+ this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
+ }
+
+ } else {
+
+ if(event.pageY - this.document.scrollTop() < o.scrollSensitivity) {
+ scrolled = this.document.scrollTop(this.document.scrollTop() - o.scrollSpeed);
+ } else if(this.window.height() - (event.pageY - this.document.scrollTop()) < o.scrollSensitivity) {
+ scrolled = this.document.scrollTop(this.document.scrollTop() + o.scrollSpeed);
+ }
+
+ if(event.pageX - this.document.scrollLeft() < o.scrollSensitivity) {
+ scrolled = this.document.scrollLeft(this.document.scrollLeft() - o.scrollSpeed);
+ } else if(this.window.width() - (event.pageX - this.document.scrollLeft()) < o.scrollSensitivity) {
+ scrolled = this.document.scrollLeft(this.document.scrollLeft() + o.scrollSpeed);
+ }
+
+ }
+
+ if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+ $.ui.ddmanager.prepareOffsets(this, event);
+ }
+ }
+
+ //Regenerate the absolute position used for position checks
+ this.positionAbs = this._convertPositionTo("absolute");
+
+ //Set the helper position
+ if(!this.options.axis || this.options.axis !== "y") {
+ this.helper[0].style.left = this.position.left+"px";
+ }
+ if(!this.options.axis || this.options.axis !== "x") {
+ this.helper[0].style.top = this.position.top+"px";
+ }
+
+ //Rearrange
+ for (i = this.items.length - 1; i >= 0; i--) {
+
+ //Cache variables and intersection, continue if no intersection
+ item = this.items[i];
+ itemElement = item.item[0];
+ intersection = this._intersectsWithPointer(item);
+ if (!intersection) {
+ continue;
+ }
+
+ // Only put the placeholder inside the current Container, skip all
+ // items from other containers. This works because when moving
+ // an item from one container to another the
+ // currentContainer is switched before the placeholder is moved.
+ //
+ // Without this, moving items in "sub-sortables" can cause
+ // the placeholder to jitter between the outer and inner container.
+ if (item.instance !== this.currentContainer) {
+ continue;
+ }
+
+ // cannot intersect with itself
+ // no useless actions that have been done before
+ // no action if the item moved is the parent of the item checked
+ if (itemElement !== this.currentItem[0] &&
+ this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement &&
+ !$.contains(this.placeholder[0], itemElement) &&
+ (this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true)
+ ) {
+
+ this.direction = intersection === 1 ? "down" : "up";
+
+ if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) {
+ this._rearrange(event, item);
+ } else {
+ break;
+ }
+
+ this._trigger("change", event, this._uiHash());
+ break;
+ }
+ }
+
+ //Post events to containers
+ this._contactContainers(event);
+
+ //Interconnect with droppables
+ if($.ui.ddmanager) {
+ $.ui.ddmanager.drag(this, event);
+ }
+
+ //Call callbacks
+ this._trigger("sort", event, this._uiHash());
+
+ this.lastPositionAbs = this.positionAbs;
+ return false;
+
+ },
+
+ _mouseStop: function(event, noPropagation) {
+
+ if(!event) {
+ return;
+ }
+
+ //If we are using droppables, inform the manager about the drop
+ if ($.ui.ddmanager && !this.options.dropBehaviour) {
+ $.ui.ddmanager.drop(this, event);
+ }
+
+ if(this.options.revert) {
+ var that = this,
+ cur = this.placeholder.offset(),
+ axis = this.options.axis,
+ animation = {};
+
+ if ( !axis || axis === "x" ) {
+ animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollLeft);
+ }
+ if ( !axis || axis === "y" ) {
+ animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollTop);
+ }
+ this.reverting = true;
+ $(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() {
+ that._clear(event);
+ });
+ } else {
+ this._clear(event, noPropagation);
+ }
+
+ return false;
+
+ },
+
+ cancel: function() {
+
+ if(this.dragging) {
+
+ this._mouseUp({ target: null });
+
+ if(this.options.helper === "original") {
+ this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+ } else {
+ this.currentItem.show();
+ }
+
+ //Post deactivating events to containers
+ for (var i = this.containers.length - 1; i >= 0; i--){
+ this.containers[i]._trigger("deactivate", null, this._uiHash(this));
+ if(this.containers[i].containerCache.over) {
+ this.containers[i]._trigger("out", null, this._uiHash(this));
+ this.containers[i].containerCache.over = 0;
+ }
+ }
+
+ }
+
+ if (this.placeholder) {
+ //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+ if(this.placeholder[0].parentNode) {
+ this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+ }
+ if(this.options.helper !== "original" && this.helper && this.helper[0].parentNode) {
+ this.helper.remove();
+ }
+
+ $.extend(this, {
+ helper: null,
+ dragging: false,
+ reverting: false,
+ _noFinalSort: null
+ });
+
+ if(this.domPosition.prev) {
+ $(this.domPosition.prev).after(this.currentItem);
+ } else {
+ $(this.domPosition.parent).prepend(this.currentItem);
+ }
+ }
+
+ return this;
+
+ },
+
+ serialize: function(o) {
+
+ var items = this._getItemsAsjQuery(o && o.connected),
+ str = [];
+ o = o || {};
+
+ $(items).each(function() {
+ var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/));
+ if (res) {
+ str.push((o.key || res[1]+"[]")+"="+(o.key && o.expression ? res[1] : res[2]));
+ }
+ });
+
+ if(!str.length && o.key) {
+ str.push(o.key + "=");
+ }
+
+ return str.join("&");
+
+ },
+
+ toArray: function(o) {
+
+ var items = this._getItemsAsjQuery(o && o.connected),
+ ret = [];
+
+ o = o || {};
+
+ items.each(function() { ret.push($(o.item || this).attr(o.attribute || "id") || ""); });
+ return ret;
+
+ },
+
+ /* Be careful with the following core functions */
+ _intersectsWith: function(item) {
+
+ var x1 = this.positionAbs.left,
+ x2 = x1 + this.helperProportions.width,
+ y1 = this.positionAbs.top,
+ y2 = y1 + this.helperProportions.height,
+ l = item.left,
+ r = l + item.width,
+ t = item.top,
+ b = t + item.height,
+ dyClick = this.offset.click.top,
+ dxClick = this.offset.click.left,
+ isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ),
+ isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ),
+ isOverElement = isOverElementHeight && isOverElementWidth;
+
+ if ( this.options.tolerance === "pointer" ||
+ this.options.forcePointerForContainers ||
+ (this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"])
+ ) {
+ return isOverElement;
+ } else {
+
+ return (l < x1 + (this.helperProportions.width / 2) && // Right Half
+ x2 - (this.helperProportions.width / 2) < r && // Left Half
+ t < y1 + (this.helperProportions.height / 2) && // Bottom Half
+ y2 - (this.helperProportions.height / 2) < b ); // Top Half
+
+ }
+ },
+
+ _intersectsWithPointer: function(item) {
+
+ var isOverElementHeight = (this.options.axis === "x") || this._isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
+ isOverElementWidth = (this.options.axis === "y") || this._isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
+ isOverElement = isOverElementHeight && isOverElementWidth,
+ verticalDirection = this._getDragVerticalDirection(),
+ horizontalDirection = this._getDragHorizontalDirection();
+
+ if (!isOverElement) {
+ return false;
+ }
+
+ return this.floating ?
+ ( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 )
+ : ( verticalDirection && (verticalDirection === "down" ? 2 : 1) );
+
+ },
+
+ _intersectsWithSides: function(item) {
+
+ var isOverBottomHalf = this._isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
+ isOverRightHalf = this._isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
+ verticalDirection = this._getDragVerticalDirection(),
+ horizontalDirection = this._getDragHorizontalDirection();
+
+ if (this.floating && horizontalDirection) {
+ return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf));
+ } else {
+ return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf));
+ }
+
+ },
+
+ _getDragVerticalDirection: function() {
+ var delta = this.positionAbs.top - this.lastPositionAbs.top;
+ return delta !== 0 && (delta > 0 ? "down" : "up");
+ },
+
+ _getDragHorizontalDirection: function() {
+ var delta = this.positionAbs.left - this.lastPositionAbs.left;
+ return delta !== 0 && (delta > 0 ? "right" : "left");
+ },
+
+ refresh: function(event) {
+ this._refreshItems(event);
+ this._setHandleClassName();
+ this.refreshPositions();
+ return this;
+ },
+
+ _connectWith: function() {
+ var options = this.options;
+ return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith;
+ },
+
+ _getItemsAsjQuery: function(connected) {
+
+ var i, j, cur, inst,
+ items = [],
+ queries = [],
+ connectWith = this._connectWith();
+
+ if(connectWith && connected) {
+ for (i = connectWith.length - 1; i >= 0; i--){
+ cur = $(connectWith[i], this.document[0]);
+ for ( j = cur.length - 1; j >= 0; j--){
+ inst = $.data(cur[j], this.widgetFullName);
+ if(inst && inst !== this && !inst.options.disabled) {
+ queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]);
+ }
+ }
+ }
+ }
+
+ queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]);
+
+ function addItems() {
+ items.push( this );
+ }
+ for (i = queries.length - 1; i >= 0; i--){
+ queries[i][0].each( addItems );
+ }
+
+ return $(items);
+
+ },
+
+ _removeCurrentsFromItems: function() {
+
+ var list = this.currentItem.find(":data(" + this.widgetName + "-item)");
+
+ this.items = $.grep(this.items, function (item) {
+ for (var j=0; j < list.length; j++) {
+ if(list[j] === item.item[0]) {
+ return false;
+ }
+ }
+ return true;
+ });
+
+ },
+
+ _refreshItems: function(event) {
+
+ this.items = [];
+ this.containers = [this];
+
+ var i, j, cur, inst, targetData, _queries, item, queriesLength,
+ items = this.items,
+ queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]],
+ connectWith = this._connectWith();
+
+ if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down
+ for (i = connectWith.length - 1; i >= 0; i--){
+ cur = $(connectWith[i], this.document[0]);
+ for (j = cur.length - 1; j >= 0; j--){
+ inst = $.data(cur[j], this.widgetFullName);
+ if(inst && inst !== this && !inst.options.disabled) {
+ queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
+ this.containers.push(inst);
+ }
+ }
+ }
+ }
+
+ for (i = queries.length - 1; i >= 0; i--) {
+ targetData = queries[i][1];
+ _queries = queries[i][0];
+
+ for (j=0, queriesLength = _queries.length; j < queriesLength; j++) {
+ item = $(_queries[j]);
+
+ item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager)
+
+ items.push({
+ item: item,
+ instance: targetData,
+ width: 0, height: 0,
+ left: 0, top: 0
+ });
+ }
+ }
+
+ },
+
+ refreshPositions: function(fast) {
+
+ //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
+ if(this.offsetParent && this.helper) {
+ this.offset.parent = this._getParentOffset();
+ }
+
+ var i, item, t, p;
+
+ for (i = this.items.length - 1; i >= 0; i--){
+ item = this.items[i];
+
+ //We ignore calculating positions of all connected containers when we're not over them
+ if(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) {
+ continue;
+ }
+
+ t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
+
+ if (!fast) {
+ item.width = t.outerWidth();
+ item.height = t.outerHeight();
+ }
+
+ p = t.offset();
+ item.left = p.left;
+ item.top = p.top;
+ }
+
+ if(this.options.custom && this.options.custom.refreshContainers) {
+ this.options.custom.refreshContainers.call(this);
+ } else {
+ for (i = this.containers.length - 1; i >= 0; i--){
+ p = this.containers[i].element.offset();
+ this.containers[i].containerCache.left = p.left;
+ this.containers[i].containerCache.top = p.top;
+ this.containers[i].containerCache.width = this.containers[i].element.outerWidth();
+ this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
+ }
+ }
+
+ return this;
+ },
+
+ _createPlaceholder: function(that) {
+ that = that || this;
+ var className,
+ o = that.options;
+
+ if(!o.placeholder || o.placeholder.constructor === String) {
+ className = o.placeholder;
+ o.placeholder = {
+ element: function() {
+
+ var nodeName = that.currentItem[0].nodeName.toLowerCase(),
+ element = $( "<" + nodeName + ">", that.document[0] )
+ .addClass(className || that.currentItem[0].className+" ui-sortable-placeholder")
+ .removeClass("ui-sortable-helper");
+
+ if ( nodeName === "tr" ) {
+ that.currentItem.children().each(function() {
+ $( "<td>&#160;</td>", that.document[0] )
+ .attr( "colspan", $( this ).attr( "colspan" ) || 1 )
+ .appendTo( element );
+ });
+ } else if ( nodeName === "img" ) {
+ element.attr( "src", that.currentItem.attr( "src" ) );
+ }
+
+ if ( !className ) {
+ element.css( "visibility", "hidden" );
+ }
+
+ return element;
+ },
+ update: function(container, p) {
+
+ // 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
+ // 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
+ if(className && !o.forcePlaceholderSize) {
+ return;
+ }
+
+ //If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
+ if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); }
+ if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); }
+ }
+ };
+ }
+
+ //Create the placeholder
+ that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));
+
+ //Append it after the actual current item
+ that.currentItem.after(that.placeholder);
+
+ //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
+ o.placeholder.update(that, that.placeholder);
+
+ },
+
+ _contactContainers: function(event) {
+ var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom, floating, axis,
+ innermostContainer = null,
+ innermostIndex = null;
+
+ // get innermost container that intersects with item
+ for (i = this.containers.length - 1; i >= 0; i--) {
+
+ // never consider a container that's located within the item itself
+ if($.contains(this.currentItem[0], this.containers[i].element[0])) {
+ continue;
+ }
+
+ if(this._intersectsWith(this.containers[i].containerCache)) {
+
+ // if we've already found a container and it's more "inner" than this, then continue
+ if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) {
+ continue;
+ }
+
+ innermostContainer = this.containers[i];
+ innermostIndex = i;
+
+ } else {
+ // container doesn't intersect. trigger "out" event if necessary
+ if(this.containers[i].containerCache.over) {
+ this.containers[i]._trigger("out", event, this._uiHash(this));
+ this.containers[i].containerCache.over = 0;
+ }
+ }
+
+ }
+
+ // if no intersecting containers found, return
+ if(!innermostContainer) {
+ return;
+ }
+
+ // move the item into the container if it's not there already
+ if(this.containers.length === 1) {
+ if (!this.containers[innermostIndex].containerCache.over) {
+ this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+ this.containers[innermostIndex].containerCache.over = 1;
+ }
+ } else {
+
+ //When entering a new container, we will find the item with the least distance and append our item near it
+ dist = 10000;
+ itemWithLeastDistance = null;
+ floating = innermostContainer.floating || this._isFloating(this.currentItem);
+ posProperty = floating ? "left" : "top";
+ sizeProperty = floating ? "width" : "height";
+ axis = floating ? "clientX" : "clientY";
+
+ for (j = this.items.length - 1; j >= 0; j--) {
+ if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) {
+ continue;
+ }
+ if(this.items[j].item[0] === this.currentItem[0]) {
+ continue;
+ }
+
+ cur = this.items[j].item.offset()[posProperty];
+ nearBottom = false;
+ if ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {
+ nearBottom = true;
+ }
+
+ if ( Math.abs( event[ axis ] - cur ) < dist ) {
+ dist = Math.abs( event[ axis ] - cur );
+ itemWithLeastDistance = this.items[ j ];
+ this.direction = nearBottom ? "up": "down";
+ }
+ }
+
+ //Check if dropOnEmpty is enabled
+ if(!itemWithLeastDistance && !this.options.dropOnEmpty) {
+ return;
+ }
+
+ if(this.currentContainer === this.containers[innermostIndex]) {
+ if ( !this.currentContainer.containerCache.over ) {
+ this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash() );
+ this.currentContainer.containerCache.over = 1;
+ }
+ return;
+ }
+
+ itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);
+ this._trigger("change", event, this._uiHash());
+ this.containers[innermostIndex]._trigger("change", event, this._uiHash(this));
+ this.currentContainer = this.containers[innermostIndex];
+
+ //Update the placeholder
+ this.options.placeholder.update(this.currentContainer, this.placeholder);
+
+ this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+ this.containers[innermostIndex].containerCache.over = 1;
+ }
+
+
+ },
+
+ _createHelper: function(event) {
+
+ var o = this.options,
+ helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem);
+
+ //Add the helper to the DOM if that didn't happen already
+ if(!helper.parents("body").length) {
+ $(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
+ }
+
+ if(helper[0] === this.currentItem[0]) {
+ this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
+ }
+
+ if(!helper[0].style.width || o.forceHelperSize) {
+ helper.width(this.currentItem.width());
+ }
+ if(!helper[0].style.height || o.forceHelperSize) {
+ helper.height(this.currentItem.height());
+ }
+
+ return helper;
+
+ },
+
+ _adjustOffsetFromHelper: function(obj) {
+ if (typeof obj === "string") {
+ obj = obj.split(" ");
+ }
+ if ($.isArray(obj)) {
+ obj = {left: +obj[0], top: +obj[1] || 0};
+ }
+ if ("left" in obj) {
+ this.offset.click.left = obj.left + this.margins.left;
+ }
+ if ("right" in obj) {
+ this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+ }
+ if ("top" in obj) {
+ this.offset.click.top = obj.top + this.margins.top;
+ }
+ if ("bottom" in obj) {
+ this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+ }
+ },
+
+ _getParentOffset: function() {
+
+
+ //Get the offsetParent and cache its position
+ this.offsetParent = this.helper.offsetParent();
+ var po = this.offsetParent.offset();
+
+ // This is a special case where we need to modify a offset calculated on start, since the following happened:
+ // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+ // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+ // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+ if(this.cssPosition === "absolute" && this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+ po.left += this.scrollParent.scrollLeft();
+ po.top += this.scrollParent.scrollTop();
+ }
+
+ // This needs to be actually done for all browsers, since pageX/pageY includes this information
+ // with an ugly IE fix
+ if( this.offsetParent[0] === this.document[0].body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
+ po = { top: 0, left: 0 };
+ }
+
+ return {
+ top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+ left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+ };
+
+ },
+
+ _getRelativeOffset: function() {
+
+ if(this.cssPosition === "relative") {
+ var p = this.currentItem.position();
+ return {
+ top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+ left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+ };
+ } else {
+ return { top: 0, left: 0 };
+ }
+
+ },
+
+ _cacheMargins: function() {
+ this.margins = {
+ left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
+ top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
+ };
+ },
+
+ _cacheHelperProportions: function() {
+ this.helperProportions = {
+ width: this.helper.outerWidth(),
+ height: this.helper.outerHeight()
+ };
+ },
+
+ _setContainment: function() {
+
+ var ce, co, over,
+ o = this.options;
+ if(o.containment === "parent") {
+ o.containment = this.helper[0].parentNode;
+ }
+ if(o.containment === "document" || o.containment === "window") {
+ this.containment = [
+ 0 - this.offset.relative.left - this.offset.parent.left,
+ 0 - this.offset.relative.top - this.offset.parent.top,
+ o.containment === "document" ? this.document.width() : this.window.width() - this.helperProportions.width - this.margins.left,
+ (o.containment === "document" ? this.document.width() : this.window.height() || this.document[0].body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
+ ];
+ }
+
+ if(!(/^(document|window|parent)$/).test(o.containment)) {
+ ce = $(o.containment)[0];
+ co = $(o.containment).offset();
+ over = ($(ce).css("overflow") !== "hidden");
+
+ this.containment = [
+ co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
+ co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
+ co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
+ co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
+ ];
+ }
+
+ },
+
+ _convertPositionTo: function(d, pos) {
+
+ if(!pos) {
+ pos = this.position;
+ }
+ var mod = d === "absolute" ? 1 : -1,
+ scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
+ scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+
+ return {
+ top: (
+ pos.top + // The absolute mouse position
+ this.offset.relative.top * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.top * mod - // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
+ ),
+ left: (
+ pos.left + // The absolute mouse position
+ this.offset.relative.left * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.left * mod - // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
+ )
+ };
+
+ },
+
+ _generatePosition: function(event) {
+
+ var top, left,
+ o = this.options,
+ pageX = event.pageX,
+ pageY = event.pageY,
+ scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+
+ // This is another very weird special case that only happens for relative elements:
+ // 1. If the css position is relative
+ // 2. and the scroll parent is the document or similar to the offset parent
+ // we have to refresh the relative offset during the scroll so there are no jumps
+ if(this.cssPosition === "relative" && !(this.scrollParent[0] !== this.document[0] && this.scrollParent[0] !== this.offsetParent[0])) {
+ this.offset.relative = this._getRelativeOffset();
+ }
+
+ /*
+ * - Position constraining -
+ * Constrain the position to a mix of grid, containment.
+ */
+
+ if(this.originalPosition) { //If we are not dragging yet, we won't check for options
+
+ if(this.containment) {
+ if(event.pageX - this.offset.click.left < this.containment[0]) {
+ pageX = this.containment[0] + this.offset.click.left;
+ }
+ if(event.pageY - this.offset.click.top < this.containment[1]) {
+ pageY = this.containment[1] + this.offset.click.top;
+ }
+ if(event.pageX - this.offset.click.left > this.containment[2]) {
+ pageX = this.containment[2] + this.offset.click.left;
+ }
+ if(event.pageY - this.offset.click.top > this.containment[3]) {
+ pageY = this.containment[3] + this.offset.click.top;
+ }
+ }
+
+ if(o.grid) {
+ top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
+ pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+
+ left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
+ pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+ }
+
+ }
+
+ return {
+ top: (
+ pageY - // The absolute mouse position
+ this.offset.click.top - // Click offset (relative to the element)
+ this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.top + // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
+ ),
+ left: (
+ pageX - // The absolute mouse position
+ this.offset.click.left - // Click offset (relative to the element)
+ this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.left + // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
+ )
+ };
+
+ },
+
+ _rearrange: function(event, i, a, hardRefresh) {
+
+ a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling));
+
+ //Various things done here to improve the performance:
+ // 1. we create a setTimeout, that calls refreshPositions
+ // 2. on the instance, we have a counter variable, that get's higher after every append
+ // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
+ // 4. this lets only the last addition to the timeout stack through
+ this.counter = this.counter ? ++this.counter : 1;
+ var counter = this.counter;
+
+ this._delay(function() {
+ if(counter === this.counter) {
+ this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
+ }
+ });
+
+ },
+
+ _clear: function(event, noPropagation) {
+
+ this.reverting = false;
+ // We delay all events that have to be triggered to after the point where the placeholder has been removed and
+ // everything else normalized again
+ var i,
+ delayedTriggers = [];
+
+ // We first have to update the dom position of the actual currentItem
+ // Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
+ if(!this._noFinalSort && this.currentItem.parent().length) {
+ this.placeholder.before(this.currentItem);
+ }
+ this._noFinalSort = null;
+
+ if(this.helper[0] === this.currentItem[0]) {
+ for(i in this._storedCSS) {
+ if(this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") {
+ this._storedCSS[i] = "";
+ }
+ }
+ this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+ } else {
+ this.currentItem.show();
+ }
+
+ if(this.fromOutside && !noPropagation) {
+ delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
+ }
+ if((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) {
+ delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
+ }
+
+ // Check if the items Container has Changed and trigger appropriate
+ // events.
+ if (this !== this.currentContainer) {
+ if(!noPropagation) {
+ delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
+ delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); }; }).call(this, this.currentContainer));
+ delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this)); }; }).call(this, this.currentContainer));
+ }
+ }
+
+
+ //Post events to containers
+ function delayEvent( type, instance, container ) {
+ return function( event ) {
+ container._trigger( type, event, instance._uiHash( instance ) );
+ };
+ }
+ for (i = this.containers.length - 1; i >= 0; i--){
+ if (!noPropagation) {
+ delayedTriggers.push( delayEvent( "deactivate", this, this.containers[ i ] ) );
+ }
+ if(this.containers[i].containerCache.over) {
+ delayedTriggers.push( delayEvent( "out", this, this.containers[ i ] ) );
+ this.containers[i].containerCache.over = 0;
+ }
+ }
+
+ //Do what was originally in plugins
+ if ( this.storedCursor ) {
+ this.document.find( "body" ).css( "cursor", this.storedCursor );
+ this.storedStylesheet.remove();
+ }
+ if(this._storedOpacity) {
+ this.helper.css("opacity", this._storedOpacity);
+ }
+ if(this._storedZIndex) {
+ this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex);
+ }
+
+ this.dragging = false;
+
+ if(!noPropagation) {
+ this._trigger("beforeStop", event, this._uiHash());
+ }
+
+ //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+ this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+
+ if ( !this.cancelHelperRemoval ) {
+ if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {
+ this.helper.remove();
+ }
+ this.helper = null;
+ }
+
+ if(!noPropagation) {
+ for (i=0; i < delayedTriggers.length; i++) {
+ delayedTriggers[i].call(this, event);
+ } //Trigger all delayed events
+ this._trigger("stop", event, this._uiHash());
+ }
+
+ this.fromOutside = false;
+ return !this.cancelHelperRemoval;
+
+ },
+
+ _trigger: function() {
+ if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
+ this.cancel();
+ }
+ },
+
+ _uiHash: function(_inst) {
+ var inst = _inst || this;
+ return {
+ helper: inst.helper,
+ placeholder: inst.placeholder || $([]),
+ position: inst.position,
+ originalPosition: inst.originalPosition,
+ offset: inst.positionAbs,
+ item: inst.currentItem,
+ sender: _inst ? _inst.element : null
+ };
+ }
+
+});
+
+
+/*!
+ * jQuery UI Accordion 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/accordion/
+ */
+
+
+var accordion = $.widget( "ui.accordion", {
+ version: "1.11.3",
+ options: {
+ active: 0,
+ animate: {},
+ collapsible: false,
+ event: "click",
+ header: "> li > :first-child,> :not(li):even",
+ heightStyle: "auto",
+ icons: {
+ activeHeader: "ui-icon-triangle-1-s",
+ header: "ui-icon-triangle-1-e"
+ },
+
+ // callbacks
+ activate: null,
+ beforeActivate: null
+ },
+
+ hideProps: {
+ borderTopWidth: "hide",
+ borderBottomWidth: "hide",
+ paddingTop: "hide",
+ paddingBottom: "hide",
+ height: "hide"
+ },
+
+ showProps: {
+ borderTopWidth: "show",
+ borderBottomWidth: "show",
+ paddingTop: "show",
+ paddingBottom: "show",
+ height: "show"
+ },
+
+ _create: function() {
+ var options = this.options;
+ this.prevShow = this.prevHide = $();
+ this.element.addClass( "ui-accordion ui-widget ui-helper-reset" )
+ // ARIA
+ .attr( "role", "tablist" );
+
+ // don't allow collapsible: false and active: false / null
+ if ( !options.collapsible && (options.active === false || options.active == null) ) {
+ options.active = 0;
+ }
+
+ this._processPanels();
+ // handle negative values
+ if ( options.active < 0 ) {
+ options.active += this.headers.length;
+ }
+ this._refresh();
+ },
+
+ _getCreateEventData: function() {
+ return {
+ header: this.active,
+ panel: !this.active.length ? $() : this.active.next()
+ };
+ },
+
+ _createIcons: function() {
+ var icons = this.options.icons;
+ if ( icons ) {
+ $( "<span>" )
+ .addClass( "ui-accordion-header-icon ui-icon " + icons.header )
+ .prependTo( this.headers );
+ this.active.children( ".ui-accordion-header-icon" )
+ .removeClass( icons.header )
+ .addClass( icons.activeHeader );
+ this.headers.addClass( "ui-accordion-icons" );
+ }
+ },
+
+ _destroyIcons: function() {
+ this.headers
+ .removeClass( "ui-accordion-icons" )
+ .children( ".ui-accordion-header-icon" )
+ .remove();
+ },
+
+ _destroy: function() {
+ var contents;
+
+ // clean up main element
+ this.element
+ .removeClass( "ui-accordion ui-widget ui-helper-reset" )
+ .removeAttr( "role" );
+
+ // clean up headers
+ this.headers
+ .removeClass( "ui-accordion-header ui-accordion-header-active ui-state-default " +
+ "ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-expanded" )
+ .removeAttr( "aria-selected" )
+ .removeAttr( "aria-controls" )
+ .removeAttr( "tabIndex" )
+ .removeUniqueId();
+
+ this._destroyIcons();
+
+ // clean up content panels
+ contents = this.headers.next()
+ .removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom " +
+ "ui-accordion-content ui-accordion-content-active ui-state-disabled" )
+ .css( "display", "" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-hidden" )
+ .removeAttr( "aria-labelledby" )
+ .removeUniqueId();
+
+ if ( this.options.heightStyle !== "content" ) {
+ contents.css( "height", "" );
+ }
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "active" ) {
+ // _activate() will handle invalid values and update this.options
+ this._activate( value );
+ return;
+ }
+
+ if ( key === "event" ) {
+ if ( this.options.event ) {
+ this._off( this.headers, this.options.event );
+ }
+ this._setupEvents( value );
+ }
+
+ this._super( key, value );
+
+ // setting collapsible: false while collapsed; open first panel
+ if ( key === "collapsible" && !value && this.options.active === false ) {
+ this._activate( 0 );
+ }
+
+ if ( key === "icons" ) {
+ this._destroyIcons();
+ if ( value ) {
+ this._createIcons();
+ }
+ }
+
+ // #5332 - opacity doesn't cascade to positioned elements in IE
+ // so we need to add the disabled class to the headers and panels
+ if ( key === "disabled" ) {
+ this.element
+ .toggleClass( "ui-state-disabled", !!value )
+ .attr( "aria-disabled", value );
+ this.headers.add( this.headers.next() )
+ .toggleClass( "ui-state-disabled", !!value );
+ }
+ },
+
+ _keydown: function( event ) {
+ if ( event.altKey || event.ctrlKey ) {
+ return;
+ }
+
+ var keyCode = $.ui.keyCode,
+ length = this.headers.length,
+ currentIndex = this.headers.index( event.target ),
+ toFocus = false;
+
+ switch ( event.keyCode ) {
+ case keyCode.RIGHT:
+ case keyCode.DOWN:
+ toFocus = this.headers[ ( currentIndex + 1 ) % length ];
+ break;
+ case keyCode.LEFT:
+ case keyCode.UP:
+ toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
+ break;
+ case keyCode.SPACE:
+ case keyCode.ENTER:
+ this._eventHandler( event );
+ break;
+ case keyCode.HOME:
+ toFocus = this.headers[ 0 ];
+ break;
+ case keyCode.END:
+ toFocus = this.headers[ length - 1 ];
+ break;
+ }
+
+ if ( toFocus ) {
+ $( event.target ).attr( "tabIndex", -1 );
+ $( toFocus ).attr( "tabIndex", 0 );
+ toFocus.focus();
+ event.preventDefault();
+ }
+ },
+
+ _panelKeyDown: function( event ) {
+ if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {
+ $( event.currentTarget ).prev().focus();
+ }
+ },
+
+ refresh: function() {
+ var options = this.options;
+ this._processPanels();
+
+ // was collapsed or no panel
+ if ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) {
+ options.active = false;
+ this.active = $();
+ // active false only when collapsible is true
+ } else if ( options.active === false ) {
+ this._activate( 0 );
+ // was active, but active panel is gone
+ } else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+ // all remaining panel are disabled
+ if ( this.headers.length === this.headers.find(".ui-state-disabled").length ) {
+ options.active = false;
+ this.active = $();
+ // activate previous panel
+ } else {
+ this._activate( Math.max( 0, options.active - 1 ) );
+ }
+ // was active, active panel still exists
+ } else {
+ // make sure active index is correct
+ options.active = this.headers.index( this.active );
+ }
+
+ this._destroyIcons();
+
+ this._refresh();
+ },
+
+ _processPanels: function() {
+ var prevHeaders = this.headers,
+ prevPanels = this.panels;
+
+ this.headers = this.element.find( this.options.header )
+ .addClass( "ui-accordion-header ui-state-default ui-corner-all" );
+
+ this.panels = this.headers.next()
+ .addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" )
+ .filter( ":not(.ui-accordion-content-active)" )
+ .hide();
+
+ // Avoid memory leaks (#10056)
+ if ( prevPanels ) {
+ this._off( prevHeaders.not( this.headers ) );
+ this._off( prevPanels.not( this.panels ) );
+ }
+ },
+
+ _refresh: function() {
+ var maxHeight,
+ options = this.options,
+ heightStyle = options.heightStyle,
+ parent = this.element.parent();
+
+ this.active = this._findActive( options.active )
+ .addClass( "ui-accordion-header-active ui-state-active ui-corner-top" )
+ .removeClass( "ui-corner-all" );
+ this.active.next()
+ .addClass( "ui-accordion-content-active" )
+ .show();
+
+ this.headers
+ .attr( "role", "tab" )
+ .each(function() {
+ var header = $( this ),
+ headerId = header.uniqueId().attr( "id" ),
+ panel = header.next(),
+ panelId = panel.uniqueId().attr( "id" );
+ header.attr( "aria-controls", panelId );
+ panel.attr( "aria-labelledby", headerId );
+ })
+ .next()
+ .attr( "role", "tabpanel" );
+
+ this.headers
+ .not( this.active )
+ .attr({
+ "aria-selected": "false",
+ "aria-expanded": "false",
+ tabIndex: -1
+ })
+ .next()
+ .attr({
+ "aria-hidden": "true"
+ })
+ .hide();
+
+ // make sure at least one header is in the tab order
+ if ( !this.active.length ) {
+ this.headers.eq( 0 ).attr( "tabIndex", 0 );
+ } else {
+ this.active.attr({
+ "aria-selected": "true",
+ "aria-expanded": "true",
+ tabIndex: 0
+ })
+ .next()
+ .attr({
+ "aria-hidden": "false"
+ });
+ }
+
+ this._createIcons();
+
+ this._setupEvents( options.event );
+
+ if ( heightStyle === "fill" ) {
+ maxHeight = parent.height();
+ this.element.siblings( ":visible" ).each(function() {
+ var elem = $( this ),
+ position = elem.css( "position" );
+
+ if ( position === "absolute" || position === "fixed" ) {
+ return;
+ }
+ maxHeight -= elem.outerHeight( true );
+ });
+
+ this.headers.each(function() {
+ maxHeight -= $( this ).outerHeight( true );
+ });
+
+ this.headers.next()
+ .each(function() {
+ $( this ).height( Math.max( 0, maxHeight -
+ $( this ).innerHeight() + $( this ).height() ) );
+ })
+ .css( "overflow", "auto" );
+ } else if ( heightStyle === "auto" ) {
+ maxHeight = 0;
+ this.headers.next()
+ .each(function() {
+ maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() );
+ })
+ .height( maxHeight );
+ }
+ },
+
+ _activate: function( index ) {
+ var active = this._findActive( index )[ 0 ];
+
+ // trying to activate the already active panel
+ if ( active === this.active[ 0 ] ) {
+ return;
+ }
+
+ // trying to collapse, simulate a click on the currently active header
+ active = active || this.active[ 0 ];
+
+ this._eventHandler({
+ target: active,
+ currentTarget: active,
+ preventDefault: $.noop
+ });
+ },
+
+ _findActive: function( selector ) {
+ return typeof selector === "number" ? this.headers.eq( selector ) : $();
+ },
+
+ _setupEvents: function( event ) {
+ var events = {
+ keydown: "_keydown"
+ };
+ if ( event ) {
+ $.each( event.split( " " ), function( index, eventName ) {
+ events[ eventName ] = "_eventHandler";
+ });
+ }
+
+ this._off( this.headers.add( this.headers.next() ) );
+ this._on( this.headers, events );
+ this._on( this.headers.next(), { keydown: "_panelKeyDown" });
+ this._hoverable( this.headers );
+ this._focusable( this.headers );
+ },
+
+ _eventHandler: function( event ) {
+ var options = this.options,
+ active = this.active,
+ clicked = $( event.currentTarget ),
+ clickedIsActive = clicked[ 0 ] === active[ 0 ],
+ collapsing = clickedIsActive && options.collapsible,
+ toShow = collapsing ? $() : clicked.next(),
+ toHide = active.next(),
+ eventData = {
+ oldHeader: active,
+ oldPanel: toHide,
+ newHeader: collapsing ? $() : clicked,
+ newPanel: toShow
+ };
+
+ event.preventDefault();
+
+ if (
+ // click on active header, but not collapsible
+ ( clickedIsActive && !options.collapsible ) ||
+ // allow canceling activation
+ ( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+ return;
+ }
+
+ options.active = collapsing ? false : this.headers.index( clicked );
+
+ // when the call to ._toggle() comes after the class changes
+ // it causes a very odd bug in IE 8 (see #6720)
+ this.active = clickedIsActive ? $() : clicked;
+ this._toggle( eventData );
+
+ // switch classes
+ // corner classes on the previously active header stay after the animation
+ active.removeClass( "ui-accordion-header-active ui-state-active" );
+ if ( options.icons ) {
+ active.children( ".ui-accordion-header-icon" )
+ .removeClass( options.icons.activeHeader )
+ .addClass( options.icons.header );
+ }
+
+ if ( !clickedIsActive ) {
+ clicked
+ .removeClass( "ui-corner-all" )
+ .addClass( "ui-accordion-header-active ui-state-active ui-corner-top" );
+ if ( options.icons ) {
+ clicked.children( ".ui-accordion-header-icon" )
+ .removeClass( options.icons.header )
+ .addClass( options.icons.activeHeader );
+ }
+
+ clicked
+ .next()
+ .addClass( "ui-accordion-content-active" );
+ }
+ },
+
+ _toggle: function( data ) {
+ var toShow = data.newPanel,
+ toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
+
+ // handle activating a panel during the animation for another activation
+ this.prevShow.add( this.prevHide ).stop( true, true );
+ this.prevShow = toShow;
+ this.prevHide = toHide;
+
+ if ( this.options.animate ) {
+ this._animate( toShow, toHide, data );
+ } else {
+ toHide.hide();
+ toShow.show();
+ this._toggleComplete( data );
+ }
+
+ toHide.attr({
+ "aria-hidden": "true"
+ });
+ toHide.prev().attr({
+ "aria-selected": "false",
+ "aria-expanded": "false"
+ });
+ // if we're switching panels, remove the old header from the tab order
+ // if we're opening from collapsed state, remove the previous header from the tab order
+ // if we're collapsing, then keep the collapsing header in the tab order
+ if ( toShow.length && toHide.length ) {
+ toHide.prev().attr({
+ "tabIndex": -1,
+ "aria-expanded": "false"
+ });
+ } else if ( toShow.length ) {
+ this.headers.filter(function() {
+ return parseInt( $( this ).attr( "tabIndex" ), 10 ) === 0;
+ })
+ .attr( "tabIndex", -1 );
+ }
+
+ toShow
+ .attr( "aria-hidden", "false" )
+ .prev()
+ .attr({
+ "aria-selected": "true",
+ "aria-expanded": "true",
+ tabIndex: 0
+ });
+ },
+
+ _animate: function( toShow, toHide, data ) {
+ var total, easing, duration,
+ that = this,
+ adjust = 0,
+ down = toShow.length &&
+ ( !toHide.length || ( toShow.index() < toHide.index() ) ),
+ animate = this.options.animate || {},
+ options = down && animate.down || animate,
+ complete = function() {
+ that._toggleComplete( data );
+ };
+
+ if ( typeof options === "number" ) {
+ duration = options;
+ }
+ if ( typeof options === "string" ) {
+ easing = options;
+ }
+ // fall back from options to animation in case of partial down settings
+ easing = easing || options.easing || animate.easing;
+ duration = duration || options.duration || animate.duration;
+
+ if ( !toHide.length ) {
+ return toShow.animate( this.showProps, duration, easing, complete );
+ }
+ if ( !toShow.length ) {
+ return toHide.animate( this.hideProps, duration, easing, complete );
+ }
+
+ total = toShow.show().outerHeight();
+ toHide.animate( this.hideProps, {
+ duration: duration,
+ easing: easing,
+ step: function( now, fx ) {
+ fx.now = Math.round( now );
+ }
+ });
+ toShow
+ .hide()
+ .animate( this.showProps, {
+ duration: duration,
+ easing: easing,
+ complete: complete,
+ step: function( now, fx ) {
+ fx.now = Math.round( now );
+ if ( fx.prop !== "height" ) {
+ adjust += fx.now;
+ } else if ( that.options.heightStyle !== "content" ) {
+ fx.now = Math.round( total - toHide.outerHeight() - adjust );
+ adjust = 0;
+ }
+ }
+ });
+ },
+
+ _toggleComplete: function( data ) {
+ var toHide = data.oldPanel;
+
+ toHide
+ .removeClass( "ui-accordion-content-active" )
+ .prev()
+ .removeClass( "ui-corner-top" )
+ .addClass( "ui-corner-all" );
+
+ // Work around for rendering bug in IE (#5421)
+ if ( toHide.length ) {
+ toHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className;
+ }
+ this._trigger( "activate", null, data );
+ }
+});
+
+
+/*!
+ * jQuery UI Menu 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/menu/
+ */
+
+
+var menu = $.widget( "ui.menu", {
+ version: "1.11.3",
+ defaultElement: "<ul>",
+ delay: 300,
+ options: {
+ icons: {
+ submenu: "ui-icon-carat-1-e"
+ },
+ items: "> *",
+ menus: "ul",
+ position: {
+ my: "left-1 top",
+ at: "right top"
+ },
+ role: "menu",
+
+ // callbacks
+ blur: null,
+ focus: null,
+ select: null
+ },
+
+ _create: function() {
+ this.activeMenu = this.element;
+
+ // Flag used to prevent firing of the click handler
+ // as the event bubbles up through nested menus
+ this.mouseHandled = false;
+ this.element
+ .uniqueId()
+ .addClass( "ui-menu ui-widget ui-widget-content" )
+ .toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length )
+ .attr({
+ role: this.options.role,
+ tabIndex: 0
+ });
+
+ if ( this.options.disabled ) {
+ this.element
+ .addClass( "ui-state-disabled" )
+ .attr( "aria-disabled", "true" );
+ }
+
+ this._on({
+ // Prevent focus from sticking to links inside menu after clicking
+ // them (focus should always stay on UL during navigation).
+ "mousedown .ui-menu-item": function( event ) {
+ event.preventDefault();
+ },
+ "click .ui-menu-item": function( event ) {
+ var target = $( event.target );
+ if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
+ this.select( event );
+
+ // Only set the mouseHandled flag if the event will bubble, see #9469.
+ if ( !event.isPropagationStopped() ) {
+ this.mouseHandled = true;
+ }
+
+ // Open submenu on click
+ if ( target.has( ".ui-menu" ).length ) {
+ this.expand( event );
+ } else if ( !this.element.is( ":focus" ) && $( this.document[ 0 ].activeElement ).closest( ".ui-menu" ).length ) {
+
+ // Redirect focus to the menu
+ this.element.trigger( "focus", [ true ] );
+
+ // If the active item is on the top level, let it stay active.
+ // Otherwise, blur the active item since it is no longer visible.
+ if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
+ clearTimeout( this.timer );
+ }
+ }
+ }
+ },
+ "mouseenter .ui-menu-item": function( event ) {
+ // Ignore mouse events while typeahead is active, see #10458.
+ // Prevents focusing the wrong item when typeahead causes a scroll while the mouse
+ // is over an item in the menu
+ if ( this.previousFilter ) {
+ return;
+ }
+ var target = $( event.currentTarget );
+ // Remove ui-state-active class from siblings of the newly focused menu item
+ // to avoid a jump caused by adjacent elements both having a class with a border
+ target.siblings( ".ui-state-active" ).removeClass( "ui-state-active" );
+ this.focus( event, target );
+ },
+ mouseleave: "collapseAll",
+ "mouseleave .ui-menu": "collapseAll",
+ focus: function( event, keepActiveItem ) {
+ // If there's already an active item, keep it active
+ // If not, activate the first item
+ var item = this.active || this.element.find( this.options.items ).eq( 0 );
+
+ if ( !keepActiveItem ) {
+ this.focus( event, item );
+ }
+ },
+ blur: function( event ) {
+ this._delay(function() {
+ if ( !$.contains( this.element[0], this.document[0].activeElement ) ) {
+ this.collapseAll( event );
+ }
+ });
+ },
+ keydown: "_keydown"
+ });
+
+ this.refresh();
+
+ // Clicks outside of a menu collapse any open menus
+ this._on( this.document, {
+ click: function( event ) {
+ if ( this._closeOnDocumentClick( event ) ) {
+ this.collapseAll( event );
+ }
+
+ // Reset the mouseHandled flag
+ this.mouseHandled = false;
+ }
+ });
+ },
+
+ _destroy: function() {
+ // Destroy (sub)menus
+ this.element
+ .removeAttr( "aria-activedescendant" )
+ .find( ".ui-menu" ).addBack()
+ .removeClass( "ui-menu ui-widget ui-widget-content ui-menu-icons ui-front" )
+ .removeAttr( "role" )
+ .removeAttr( "tabIndex" )
+ .removeAttr( "aria-labelledby" )
+ .removeAttr( "aria-expanded" )
+ .removeAttr( "aria-hidden" )
+ .removeAttr( "aria-disabled" )
+ .removeUniqueId()
+ .show();
+
+ // Destroy menu items
+ this.element.find( ".ui-menu-item" )
+ .removeClass( "ui-menu-item" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-disabled" )
+ .removeUniqueId()
+ .removeClass( "ui-state-hover" )
+ .removeAttr( "tabIndex" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-haspopup" )
+ .children().each( function() {
+ var elem = $( this );
+ if ( elem.data( "ui-menu-submenu-carat" ) ) {
+ elem.remove();
+ }
+ });
+
+ // Destroy menu dividers
+ this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
+ },
+
+ _keydown: function( event ) {
+ var match, prev, character, skip,
+ preventDefault = true;
+
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.PAGE_UP:
+ this.previousPage( event );
+ break;
+ case $.ui.keyCode.PAGE_DOWN:
+ this.nextPage( event );
+ break;
+ case $.ui.keyCode.HOME:
+ this._move( "first", "first", event );
+ break;
+ case $.ui.keyCode.END:
+ this._move( "last", "last", event );
+ break;
+ case $.ui.keyCode.UP:
+ this.previous( event );
+ break;
+ case $.ui.keyCode.DOWN:
+ this.next( event );
+ break;
+ case $.ui.keyCode.LEFT:
+ this.collapse( event );
+ break;
+ case $.ui.keyCode.RIGHT:
+ if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
+ this.expand( event );
+ }
+ break;
+ case $.ui.keyCode.ENTER:
+ case $.ui.keyCode.SPACE:
+ this._activate( event );
+ break;
+ case $.ui.keyCode.ESCAPE:
+ this.collapse( event );
+ break;
+ default:
+ preventDefault = false;
+ prev = this.previousFilter || "";
+ character = String.fromCharCode( event.keyCode );
+ skip = false;
+
+ clearTimeout( this.filterTimer );
+
+ if ( character === prev ) {
+ skip = true;
+ } else {
+ character = prev + character;
+ }
+
+ match = this._filterMenuItems( character );
+ match = skip && match.index( this.active.next() ) !== -1 ?
+ this.active.nextAll( ".ui-menu-item" ) :
+ match;
+
+ // If no matches on the current filter, reset to the last character pressed
+ // to move down the menu to the first item that starts with that character
+ if ( !match.length ) {
+ character = String.fromCharCode( event.keyCode );
+ match = this._filterMenuItems( character );
+ }
+
+ if ( match.length ) {
+ this.focus( event, match );
+ this.previousFilter = character;
+ this.filterTimer = this._delay(function() {
+ delete this.previousFilter;
+ }, 1000 );
+ } else {
+ delete this.previousFilter;
+ }
+ }
+
+ if ( preventDefault ) {
+ event.preventDefault();
+ }
+ },
+
+ _activate: function( event ) {
+ if ( !this.active.is( ".ui-state-disabled" ) ) {
+ if ( this.active.is( "[aria-haspopup='true']" ) ) {
+ this.expand( event );
+ } else {
+ this.select( event );
+ }
+ }
+ },
+
+ refresh: function() {
+ var menus, items,
+ that = this,
+ icon = this.options.icons.submenu,
+ submenus = this.element.find( this.options.menus );
+
+ this.element.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length );
+
+ // Initialize nested menus
+ submenus.filter( ":not(.ui-menu)" )
+ .addClass( "ui-menu ui-widget ui-widget-content ui-front" )
+ .hide()
+ .attr({
+ role: this.options.role,
+ "aria-hidden": "true",
+ "aria-expanded": "false"
+ })
+ .each(function() {
+ var menu = $( this ),
+ item = menu.parent(),
+ submenuCarat = $( "<span>" )
+ .addClass( "ui-menu-icon ui-icon " + icon )
+ .data( "ui-menu-submenu-carat", true );
+
+ item
+ .attr( "aria-haspopup", "true" )
+ .prepend( submenuCarat );
+ menu.attr( "aria-labelledby", item.attr( "id" ) );
+ });
+
+ menus = submenus.add( this.element );
+ items = menus.find( this.options.items );
+
+ // Initialize menu-items containing spaces and/or dashes only as dividers
+ items.not( ".ui-menu-item" ).each(function() {
+ var item = $( this );
+ if ( that._isDivider( item ) ) {
+ item.addClass( "ui-widget-content ui-menu-divider" );
+ }
+ });
+
+ // Don't refresh list items that are already adapted
+ items.not( ".ui-menu-item, .ui-menu-divider" )
+ .addClass( "ui-menu-item" )
+ .uniqueId()
+ .attr({
+ tabIndex: -1,
+ role: this._itemRole()
+ });
+
+ // Add aria-disabled attribute to any disabled menu item
+ items.filter( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
+
+ // If the active item has been removed, blur the menu
+ if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+ this.blur();
+ }
+ },
+
+ _itemRole: function() {
+ return {
+ menu: "menuitem",
+ listbox: "option"
+ }[ this.options.role ];
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "icons" ) {
+ this.element.find( ".ui-menu-icon" )
+ .removeClass( this.options.icons.submenu )
+ .addClass( value.submenu );
+ }
+ if ( key === "disabled" ) {
+ this.element
+ .toggleClass( "ui-state-disabled", !!value )
+ .attr( "aria-disabled", value );
+ }
+ this._super( key, value );
+ },
+
+ focus: function( event, item ) {
+ var nested, focused;
+ this.blur( event, event && event.type === "focus" );
+
+ this._scrollIntoView( item );
+
+ this.active = item.first();
+ focused = this.active.addClass( "ui-state-focus" ).removeClass( "ui-state-active" );
+ // Only update aria-activedescendant if there's a role
+ // otherwise we assume focus is managed elsewhere
+ if ( this.options.role ) {
+ this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
+ }
+
+ // Highlight active parent menu item, if any
+ this.active
+ .parent()
+ .closest( ".ui-menu-item" )
+ .addClass( "ui-state-active" );
+
+ if ( event && event.type === "keydown" ) {
+ this._close();
+ } else {
+ this.timer = this._delay(function() {
+ this._close();
+ }, this.delay );
+ }
+
+ nested = item.children( ".ui-menu" );
+ if ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {
+ this._startOpening(nested);
+ }
+ this.activeMenu = item.parent();
+
+ this._trigger( "focus", event, { item: item } );
+ },
+
+ _scrollIntoView: function( item ) {
+ var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
+ if ( this._hasScroll() ) {
+ borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
+ paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
+ offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
+ scroll = this.activeMenu.scrollTop();
+ elementHeight = this.activeMenu.height();
+ itemHeight = item.outerHeight();
+
+ if ( offset < 0 ) {
+ this.activeMenu.scrollTop( scroll + offset );
+ } else if ( offset + itemHeight > elementHeight ) {
+ this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
+ }
+ }
+ },
+
+ blur: function( event, fromFocus ) {
+ if ( !fromFocus ) {
+ clearTimeout( this.timer );
+ }
+
+ if ( !this.active ) {
+ return;
+ }
+
+ this.active.removeClass( "ui-state-focus" );
+ this.active = null;
+
+ this._trigger( "blur", event, { item: this.active } );
+ },
+
+ _startOpening: function( submenu ) {
+ clearTimeout( this.timer );
+
+ // Don't open if already open fixes a Firefox bug that caused a .5 pixel
+ // shift in the submenu position when mousing over the carat icon
+ if ( submenu.attr( "aria-hidden" ) !== "true" ) {
+ return;
+ }
+
+ this.timer = this._delay(function() {
+ this._close();
+ this._open( submenu );
+ }, this.delay );
+ },
+
+ _open: function( submenu ) {
+ var position = $.extend({
+ of: this.active
+ }, this.options.position );
+
+ clearTimeout( this.timer );
+ this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
+ .hide()
+ .attr( "aria-hidden", "true" );
+
+ submenu
+ .show()
+ .removeAttr( "aria-hidden" )
+ .attr( "aria-expanded", "true" )
+ .position( position );
+ },
+
+ collapseAll: function( event, all ) {
+ clearTimeout( this.timer );
+ this.timer = this._delay(function() {
+ // If we were passed an event, look for the submenu that contains the event
+ var currentMenu = all ? this.element :
+ $( event && event.target ).closest( this.element.find( ".ui-menu" ) );
+
+ // If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
+ if ( !currentMenu.length ) {
+ currentMenu = this.element;
+ }
+
+ this._close( currentMenu );
+
+ this.blur( event );
+ this.activeMenu = currentMenu;
+ }, this.delay );
+ },
+
+ // With no arguments, closes the currently active menu - if nothing is active
+ // it closes all menus. If passed an argument, it will search for menus BELOW
+ _close: function( startMenu ) {
+ if ( !startMenu ) {
+ startMenu = this.active ? this.active.parent() : this.element;
+ }
+
+ startMenu
+ .find( ".ui-menu" )
+ .hide()
+ .attr( "aria-hidden", "true" )
+ .attr( "aria-expanded", "false" )
+ .end()
+ .find( ".ui-state-active" ).not( ".ui-state-focus" )
+ .removeClass( "ui-state-active" );
+ },
+
+ _closeOnDocumentClick: function( event ) {
+ return !$( event.target ).closest( ".ui-menu" ).length;
+ },
+
+ _isDivider: function( item ) {
+
+ // Match hyphen, em dash, en dash
+ return !/[^\-\u2014\u2013\s]/.test( item.text() );
+ },
+
+ collapse: function( event ) {
+ var newItem = this.active &&
+ this.active.parent().closest( ".ui-menu-item", this.element );
+ if ( newItem && newItem.length ) {
+ this._close();
+ this.focus( event, newItem );
+ }
+ },
+
+ expand: function( event ) {
+ var newItem = this.active &&
+ this.active
+ .children( ".ui-menu " )
+ .find( this.options.items )
+ .first();
+
+ if ( newItem && newItem.length ) {
+ this._open( newItem.parent() );
+
+ // Delay so Firefox will not hide activedescendant change in expanding submenu from AT
+ this._delay(function() {
+ this.focus( event, newItem );
+ });
+ }
+ },
+
+ next: function( event ) {
+ this._move( "next", "first", event );
+ },
+
+ previous: function( event ) {
+ this._move( "prev", "last", event );
+ },
+
+ isFirstItem: function() {
+ return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
+ },
+
+ isLastItem: function() {
+ return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
+ },
+
+ _move: function( direction, filter, event ) {
+ var next;
+ if ( this.active ) {
+ if ( direction === "first" || direction === "last" ) {
+ next = this.active
+ [ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
+ .eq( -1 );
+ } else {
+ next = this.active
+ [ direction + "All" ]( ".ui-menu-item" )
+ .eq( 0 );
+ }
+ }
+ if ( !next || !next.length || !this.active ) {
+ next = this.activeMenu.find( this.options.items )[ filter ]();
+ }
+
+ this.focus( event, next );
+ },
+
+ nextPage: function( event ) {
+ var item, base, height;
+
+ if ( !this.active ) {
+ this.next( event );
+ return;
+ }
+ if ( this.isLastItem() ) {
+ return;
+ }
+ if ( this._hasScroll() ) {
+ base = this.active.offset().top;
+ height = this.element.height();
+ this.active.nextAll( ".ui-menu-item" ).each(function() {
+ item = $( this );
+ return item.offset().top - base - height < 0;
+ });
+
+ this.focus( event, item );
+ } else {
+ this.focus( event, this.activeMenu.find( this.options.items )
+ [ !this.active ? "first" : "last" ]() );
+ }
+ },
+
+ previousPage: function( event ) {
+ var item, base, height;
+ if ( !this.active ) {
+ this.next( event );
+ return;
+ }
+ if ( this.isFirstItem() ) {
+ return;
+ }
+ if ( this._hasScroll() ) {
+ base = this.active.offset().top;
+ height = this.element.height();
+ this.active.prevAll( ".ui-menu-item" ).each(function() {
+ item = $( this );
+ return item.offset().top - base + height > 0;
+ });
+
+ this.focus( event, item );
+ } else {
+ this.focus( event, this.activeMenu.find( this.options.items ).first() );
+ }
+ },
+
+ _hasScroll: function() {
+ return this.element.outerHeight() < this.element.prop( "scrollHeight" );
+ },
+
+ select: function( event ) {
+ // TODO: It should never be possible to not have an active item at this
+ // point, but the tests don't trigger mouseenter before click.
+ this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
+ var ui = { item: this.active };
+ if ( !this.active.has( ".ui-menu" ).length ) {
+ this.collapseAll( event, true );
+ }
+ this._trigger( "select", event, ui );
+ },
+
+ _filterMenuItems: function(character) {
+ var escapedCharacter = character.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ),
+ regex = new RegExp( "^" + escapedCharacter, "i" );
+
+ return this.activeMenu
+ .find( this.options.items )
+
+ // Only match on items, not dividers or other content (#10571)
+ .filter( ".ui-menu-item" )
+ .filter(function() {
+ return regex.test( $.trim( $( this ).text() ) );
+ });
+ }
+});
+
+
+/*!
+ * jQuery UI Autocomplete 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/autocomplete/
+ */
+
+
+$.widget( "ui.autocomplete", {
+ version: "1.11.3",
+ defaultElement: "<input>",
+ options: {
+ appendTo: null,
+ autoFocus: false,
+ delay: 300,
+ minLength: 1,
+ position: {
+ my: "left top",
+ at: "left bottom",
+ collision: "none"
+ },
+ source: null,
+
+ // callbacks
+ change: null,
+ close: null,
+ focus: null,
+ open: null,
+ response: null,
+ search: null,
+ select: null
+ },
+
+ requestIndex: 0,
+ pending: 0,
+
+ _create: function() {
+ // Some browsers only repeat keydown events, not keypress events,
+ // so we use the suppressKeyPress flag to determine if we've already
+ // handled the keydown event. #7269
+ // Unfortunately the code for & in keypress is the same as the up arrow,
+ // so we use the suppressKeyPressRepeat flag to avoid handling keypress
+ // events when we know the keydown event was used to modify the
+ // search term. #7799
+ var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
+ nodeName = this.element[ 0 ].nodeName.toLowerCase(),
+ isTextarea = nodeName === "textarea",
+ isInput = nodeName === "input";
+
+ this.isMultiLine =
+ // Textareas are always multi-line
+ isTextarea ? true :
+ // Inputs are always single-line, even if inside a contentEditable element
+ // IE also treats inputs as contentEditable
+ isInput ? false :
+ // All other element types are determined by whether or not they're contentEditable
+ this.element.prop( "isContentEditable" );
+
+ this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
+ this.isNewMenu = true;
+
+ this.element
+ .addClass( "ui-autocomplete-input" )
+ .attr( "autocomplete", "off" );
+
+ this._on( this.element, {
+ keydown: function( event ) {
+ if ( this.element.prop( "readOnly" ) ) {
+ suppressKeyPress = true;
+ suppressInput = true;
+ suppressKeyPressRepeat = true;
+ return;
+ }
+
+ suppressKeyPress = false;
+ suppressInput = false;
+ suppressKeyPressRepeat = false;
+ var keyCode = $.ui.keyCode;
+ switch ( event.keyCode ) {
+ case keyCode.PAGE_UP:
+ suppressKeyPress = true;
+ this._move( "previousPage", event );
+ break;
+ case keyCode.PAGE_DOWN:
+ suppressKeyPress = true;
+ this._move( "nextPage", event );
+ break;
+ case keyCode.UP:
+ suppressKeyPress = true;
+ this._keyEvent( "previous", event );
+ break;
+ case keyCode.DOWN:
+ suppressKeyPress = true;
+ this._keyEvent( "next", event );
+ break;
+ case keyCode.ENTER:
+ // when menu is open and has focus
+ if ( this.menu.active ) {
+ // #6055 - Opera still allows the keypress to occur
+ // which causes forms to submit
+ suppressKeyPress = true;
+ event.preventDefault();
+ this.menu.select( event );
+ }
+ break;
+ case keyCode.TAB:
+ if ( this.menu.active ) {
+ this.menu.select( event );
+ }
+ break;
+ case keyCode.ESCAPE:
+ if ( this.menu.element.is( ":visible" ) ) {
+ if ( !this.isMultiLine ) {
+ this._value( this.term );
+ }
+ this.close( event );
+ // Different browsers have different default behavior for escape
+ // Single press can mean undo or clear
+ // Double press in IE means clear the whole form
+ event.preventDefault();
+ }
+ break;
+ default:
+ suppressKeyPressRepeat = true;
+ // search timeout should be triggered before the input value is changed
+ this._searchTimeout( event );
+ break;
+ }
+ },
+ keypress: function( event ) {
+ if ( suppressKeyPress ) {
+ suppressKeyPress = false;
+ if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+ event.preventDefault();
+ }
+ return;
+ }
+ if ( suppressKeyPressRepeat ) {
+ return;
+ }
+
+ // replicate some key handlers to allow them to repeat in Firefox and Opera
+ var keyCode = $.ui.keyCode;
+ switch ( event.keyCode ) {
+ case keyCode.PAGE_UP:
+ this._move( "previousPage", event );
+ break;
+ case keyCode.PAGE_DOWN:
+ this._move( "nextPage", event );
+ break;
+ case keyCode.UP:
+ this._keyEvent( "previous", event );
+ break;
+ case keyCode.DOWN:
+ this._keyEvent( "next", event );
+ break;
+ }
+ },
+ input: function( event ) {
+ if ( suppressInput ) {
+ suppressInput = false;
+ event.preventDefault();
+ return;
+ }
+ this._searchTimeout( event );
+ },
+ focus: function() {
+ this.selectedItem = null;
+ this.previous = this._value();
+ },
+ blur: function( event ) {
+ if ( this.cancelBlur ) {
+ delete this.cancelBlur;
+ return;
+ }
+
+ clearTimeout( this.searching );
+ this.close( event );
+ this._change( event );
+ }
+ });
+
+ this._initSource();
+ this.menu = $( "<ul>" )
+ .addClass( "ui-autocomplete ui-front" )
+ .appendTo( this._appendTo() )
+ .menu({
+ // disable ARIA support, the live region takes care of that
+ role: null
+ })
+ .hide()
+ .menu( "instance" );
+
+ this._on( this.menu.element, {
+ mousedown: function( event ) {
+ // prevent moving focus out of the text field
+ event.preventDefault();
+
+ // IE doesn't prevent moving focus even with event.preventDefault()
+ // so we set a flag to know when we should ignore the blur event
+ this.cancelBlur = true;
+ this._delay(function() {
+ delete this.cancelBlur;
+ });
+
+ // clicking on the scrollbar causes focus to shift to the body
+ // but we can't detect a mouseup or a click immediately afterward
+ // so we have to track the next mousedown and close the menu if
+ // the user clicks somewhere outside of the autocomplete
+ var menuElement = this.menu.element[ 0 ];
+ if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
+ this._delay(function() {
+ var that = this;
+ this.document.one( "mousedown", function( event ) {
+ if ( event.target !== that.element[ 0 ] &&
+ event.target !== menuElement &&
+ !$.contains( menuElement, event.target ) ) {
+ that.close();
+ }
+ });
+ });
+ }
+ },
+ menufocus: function( event, ui ) {
+ var label, item;
+ // support: Firefox
+ // Prevent accidental activation of menu items in Firefox (#7024 #9118)
+ if ( this.isNewMenu ) {
+ this.isNewMenu = false;
+ if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {
+ this.menu.blur();
+
+ this.document.one( "mousemove", function() {
+ $( event.target ).trigger( event.originalEvent );
+ });
+
+ return;
+ }
+ }
+
+ item = ui.item.data( "ui-autocomplete-item" );
+ if ( false !== this._trigger( "focus", event, { item: item } ) ) {
+ // use value to match what will end up in the input, if it was a key event
+ if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
+ this._value( item.value );
+ }
+ }
+
+ // Announce the value in the liveRegion
+ label = ui.item.attr( "aria-label" ) || item.value;
+ if ( label && $.trim( label ).length ) {
+ this.liveRegion.children().hide();
+ $( "<div>" ).text( label ).appendTo( this.liveRegion );
+ }
+ },
+ menuselect: function( event, ui ) {
+ var item = ui.item.data( "ui-autocomplete-item" ),
+ previous = this.previous;
+
+ // only trigger when focus was lost (click on menu)
+ if ( this.element[ 0 ] !== this.document[ 0 ].activeElement ) {
+ this.element.focus();
+ this.previous = previous;
+ // #6109 - IE triggers two focus events and the second
+ // is asynchronous, so we need to reset the previous
+ // term synchronously and asynchronously :-(
+ this._delay(function() {
+ this.previous = previous;
+ this.selectedItem = item;
+ });
+ }
+
+ if ( false !== this._trigger( "select", event, { item: item } ) ) {
+ this._value( item.value );
+ }
+ // reset the term after the select event
+ // this allows custom select handling to work properly
+ this.term = this._value();
+
+ this.close( event );
+ this.selectedItem = item;
+ }
+ });
+
+ this.liveRegion = $( "<span>", {
+ role: "status",
+ "aria-live": "assertive",
+ "aria-relevant": "additions"
+ })
+ .addClass( "ui-helper-hidden-accessible" )
+ .appendTo( this.document[ 0 ].body );
+
+ // turning off autocomplete prevents the browser from remembering the
+ // value when navigating through history, so we re-enable autocomplete
+ // if the page is unloaded before the widget is destroyed. #7790
+ this._on( this.window, {
+ beforeunload: function() {
+ this.element.removeAttr( "autocomplete" );
+ }
+ });
+ },
+
+ _destroy: function() {
+ clearTimeout( this.searching );
+ this.element
+ .removeClass( "ui-autocomplete-input" )
+ .removeAttr( "autocomplete" );
+ this.menu.element.remove();
+ this.liveRegion.remove();
+ },
+
+ _setOption: function( key, value ) {
+ this._super( key, value );
+ if ( key === "source" ) {
+ this._initSource();
+ }
+ if ( key === "appendTo" ) {
+ this.menu.element.appendTo( this._appendTo() );
+ }
+ if ( key === "disabled" && value && this.xhr ) {
+ this.xhr.abort();
+ }
+ },
+
+ _appendTo: function() {
+ var element = this.options.appendTo;
+
+ if ( element ) {
+ element = element.jquery || element.nodeType ?
+ $( element ) :
+ this.document.find( element ).eq( 0 );
+ }
+
+ if ( !element || !element[ 0 ] ) {
+ element = this.element.closest( ".ui-front" );
+ }
+
+ if ( !element.length ) {
+ element = this.document[ 0 ].body;
+ }
+
+ return element;
+ },
+
+ _initSource: function() {
+ var array, url,
+ that = this;
+ if ( $.isArray( this.options.source ) ) {
+ array = this.options.source;
+ this.source = function( request, response ) {
+ response( $.ui.autocomplete.filter( array, request.term ) );
+ };
+ } else if ( typeof this.options.source === "string" ) {
+ url = this.options.source;
+ this.source = function( request, response ) {
+ if ( that.xhr ) {
+ that.xhr.abort();
+ }
+ that.xhr = $.ajax({
+ url: url,
+ data: request,
+ dataType: "json",
+ success: function( data ) {
+ response( data );
+ },
+ error: function() {
+ response([]);
+ }
+ });
+ };
+ } else {
+ this.source = this.options.source;
+ }
+ },
+
+ _searchTimeout: function( event ) {
+ clearTimeout( this.searching );
+ this.searching = this._delay(function() {
+
+ // Search if the value has changed, or if the user retypes the same value (see #7434)
+ var equalValues = this.term === this._value(),
+ menuVisible = this.menu.element.is( ":visible" ),
+ modifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;
+
+ if ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) {
+ this.selectedItem = null;
+ this.search( null, event );
+ }
+ }, this.options.delay );
+ },
+
+ search: function( value, event ) {
+ value = value != null ? value : this._value();
+
+ // always save the actual value, not the one passed as an argument
+ this.term = this._value();
+
+ if ( value.length < this.options.minLength ) {
+ return this.close( event );
+ }
+
+ if ( this._trigger( "search", event ) === false ) {
+ return;
+ }
+
+ return this._search( value );
+ },
+
+ _search: function( value ) {
+ this.pending++;
+ this.element.addClass( "ui-autocomplete-loading" );
+ this.cancelSearch = false;
+
+ this.source( { term: value }, this._response() );
+ },
+
+ _response: function() {
+ var index = ++this.requestIndex;
+
+ return $.proxy(function( content ) {
+ if ( index === this.requestIndex ) {
+ this.__response( content );
+ }
+
+ this.pending--;
+ if ( !this.pending ) {
+ this.element.removeClass( "ui-autocomplete-loading" );
+ }
+ }, this );
+ },
+
+ __response: function( content ) {
+ if ( content ) {
+ content = this._normalize( content );
+ }
+ this._trigger( "response", null, { content: content } );
+ if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
+ this._suggest( content );
+ this._trigger( "open" );
+ } else {
+ // use ._close() instead of .close() so we don't cancel future searches
+ this._close();
+ }
+ },
+
+ close: function( event ) {
+ this.cancelSearch = true;
+ this._close( event );
+ },
+
+ _close: function( event ) {
+ if ( this.menu.element.is( ":visible" ) ) {
+ this.menu.element.hide();
+ this.menu.blur();
+ this.isNewMenu = true;
+ this._trigger( "close", event );
+ }
+ },
+
+ _change: function( event ) {
+ if ( this.previous !== this._value() ) {
+ this._trigger( "change", event, { item: this.selectedItem } );
+ }
+ },
+
+ _normalize: function( items ) {
+ // assume all items have the right format when the first item is complete
+ if ( items.length && items[ 0 ].label && items[ 0 ].value ) {
+ return items;
+ }
+ return $.map( items, function( item ) {
+ if ( typeof item === "string" ) {
+ return {
+ label: item,
+ value: item
+ };
+ }
+ return $.extend( {}, item, {
+ label: item.label || item.value,
+ value: item.value || item.label
+ });
+ });
+ },
+
+ _suggest: function( items ) {
+ var ul = this.menu.element.empty();
+ this._renderMenu( ul, items );
+ this.isNewMenu = true;
+ this.menu.refresh();
+
+ // size and position menu
+ ul.show();
+ this._resizeMenu();
+ ul.position( $.extend({
+ of: this.element
+ }, this.options.position ) );
+
+ if ( this.options.autoFocus ) {
+ this.menu.next();
+ }
+ },
+
+ _resizeMenu: function() {
+ var ul = this.menu.element;
+ ul.outerWidth( Math.max(
+ // Firefox wraps long text (possibly a rounding bug)
+ // so we add 1px to avoid the wrapping (#7513)
+ ul.width( "" ).outerWidth() + 1,
+ this.element.outerWidth()
+ ) );
+ },
+
+ _renderMenu: function( ul, items ) {
+ var that = this;
+ $.each( items, function( index, item ) {
+ that._renderItemData( ul, item );
+ });
+ },
+
+ _renderItemData: function( ul, item ) {
+ return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
+ },
+
+ _renderItem: function( ul, item ) {
+ return $( "<li>" ).text( item.label ).appendTo( ul );
+ },
+
+ _move: function( direction, event ) {
+ if ( !this.menu.element.is( ":visible" ) ) {
+ this.search( null, event );
+ return;
+ }
+ if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
+ this.menu.isLastItem() && /^next/.test( direction ) ) {
+
+ if ( !this.isMultiLine ) {
+ this._value( this.term );
+ }
+
+ this.menu.blur();
+ return;
+ }
+ this.menu[ direction ]( event );
+ },
+
+ widget: function() {
+ return this.menu.element;
+ },
+
+ _value: function() {
+ return this.valueMethod.apply( this.element, arguments );
+ },
+
+ _keyEvent: function( keyEvent, event ) {
+ if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+ this._move( keyEvent, event );
+
+ // prevents moving cursor to beginning/end of the text field in some browsers
+ event.preventDefault();
+ }
+ }
+});
+
+$.extend( $.ui.autocomplete, {
+ escapeRegex: function( value ) {
+ return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
+ },
+ filter: function( array, term ) {
+ var matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), "i" );
+ return $.grep( array, function( value ) {
+ return matcher.test( value.label || value.value || value );
+ });
+ }
+});
+
+// live region extension, adding a `messages` option
+// NOTE: This is an experimental API. We are still investigating
+// a full solution for string manipulation and internationalization.
+$.widget( "ui.autocomplete", $.ui.autocomplete, {
+ options: {
+ messages: {
+ noResults: "No search results.",
+ results: function( amount ) {
+ return amount + ( amount > 1 ? " results are" : " result is" ) +
+ " available, use up and down arrow keys to navigate.";
+ }
+ }
+ },
+
+ __response: function( content ) {
+ var message;
+ this._superApply( arguments );
+ if ( this.options.disabled || this.cancelSearch ) {
+ return;
+ }
+ if ( content && content.length ) {
+ message = this.options.messages.results( content.length );
+ } else {
+ message = this.options.messages.noResults;
+ }
+ this.liveRegion.children().hide();
+ $( "<div>" ).text( message ).appendTo( this.liveRegion );
+ }
+});
+
+var autocomplete = $.ui.autocomplete;
+
+
+/*!
+ * jQuery UI Button 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/button/
+ */
+
+
+var lastActive,
+ baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
+ typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
+ formResetHandler = function() {
+ var form = $( this );
+ setTimeout(function() {
+ form.find( ":ui-button" ).button( "refresh" );
+ }, 1 );
+ },
+ radioGroup = function( radio ) {
+ var name = radio.name,
+ form = radio.form,
+ radios = $( [] );
+ if ( name ) {
+ name = name.replace( /'/g, "\\'" );
+ if ( form ) {
+ radios = $( form ).find( "[name='" + name + "'][type=radio]" );
+ } else {
+ radios = $( "[name='" + name + "'][type=radio]", radio.ownerDocument )
+ .filter(function() {
+ return !this.form;
+ });
+ }
+ }
+ return radios;
+ };
+
+$.widget( "ui.button", {
+ version: "1.11.3",
+ defaultElement: "<button>",
+ options: {
+ disabled: null,
+ text: true,
+ label: null,
+ icons: {
+ primary: null,
+ secondary: null
+ }
+ },
+ _create: function() {
+ this.element.closest( "form" )
+ .unbind( "reset" + this.eventNamespace )
+ .bind( "reset" + this.eventNamespace, formResetHandler );
+
+ if ( typeof this.options.disabled !== "boolean" ) {
+ this.options.disabled = !!this.element.prop( "disabled" );
+ } else {
+ this.element.prop( "disabled", this.options.disabled );
+ }
+
+ this._determineButtonType();
+ this.hasTitle = !!this.buttonElement.attr( "title" );
+
+ var that = this,
+ options = this.options,
+ toggleButton = this.type === "checkbox" || this.type === "radio",
+ activeClass = !toggleButton ? "ui-state-active" : "";
+
+ if ( options.label === null ) {
+ options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html());
+ }
+
+ this._hoverable( this.buttonElement );
+
+ this.buttonElement
+ .addClass( baseClasses )
+ .attr( "role", "button" )
+ .bind( "mouseenter" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return;
+ }
+ if ( this === lastActive ) {
+ $( this ).addClass( "ui-state-active" );
+ }
+ })
+ .bind( "mouseleave" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return;
+ }
+ $( this ).removeClass( activeClass );
+ })
+ .bind( "click" + this.eventNamespace, function( event ) {
+ if ( options.disabled ) {
+ event.preventDefault();
+ event.stopImmediatePropagation();
+ }
+ });
+
+ // Can't use _focusable() because the element that receives focus
+ // and the element that gets the ui-state-focus class are different
+ this._on({
+ focus: function() {
+ this.buttonElement.addClass( "ui-state-focus" );
+ },
+ blur: function() {
+ this.buttonElement.removeClass( "ui-state-focus" );
+ }
+ });
+
+ if ( toggleButton ) {
+ this.element.bind( "change" + this.eventNamespace, function() {
+ that.refresh();
+ });
+ }
+
+ if ( this.type === "checkbox" ) {
+ this.buttonElement.bind( "click" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return false;
+ }
+ });
+ } else if ( this.type === "radio" ) {
+ this.buttonElement.bind( "click" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return false;
+ }
+ $( this ).addClass( "ui-state-active" );
+ that.buttonElement.attr( "aria-pressed", "true" );
+
+ var radio = that.element[ 0 ];
+ radioGroup( radio )
+ .not( radio )
+ .map(function() {
+ return $( this ).button( "widget" )[ 0 ];
+ })
+ .removeClass( "ui-state-active" )
+ .attr( "aria-pressed", "false" );
+ });
+ } else {
+ this.buttonElement
+ .bind( "mousedown" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return false;
+ }
+ $( this ).addClass( "ui-state-active" );
+ lastActive = this;
+ that.document.one( "mouseup", function() {
+ lastActive = null;
+ });
+ })
+ .bind( "mouseup" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return false;
+ }
+ $( this ).removeClass( "ui-state-active" );
+ })
+ .bind( "keydown" + this.eventNamespace, function(event) {
+ if ( options.disabled ) {
+ return false;
+ }
+ if ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) {
+ $( this ).addClass( "ui-state-active" );
+ }
+ })
+ // see #8559, we bind to blur here in case the button element loses
+ // focus between keydown and keyup, it would be left in an "active" state
+ .bind( "keyup" + this.eventNamespace + " blur" + this.eventNamespace, function() {
+ $( this ).removeClass( "ui-state-active" );
+ });
+
+ if ( this.buttonElement.is("a") ) {
+ this.buttonElement.keyup(function(event) {
+ if ( event.keyCode === $.ui.keyCode.SPACE ) {
+ // TODO pass through original event correctly (just as 2nd argument doesn't work)
+ $( this ).click();
+ }
+ });
+ }
+ }
+
+ this._setOption( "disabled", options.disabled );
+ this._resetButton();
+ },
+
+ _determineButtonType: function() {
+ var ancestor, labelSelector, checked;
+
+ if ( this.element.is("[type=checkbox]") ) {
+ this.type = "checkbox";
+ } else if ( this.element.is("[type=radio]") ) {
+ this.type = "radio";
+ } else if ( this.element.is("input") ) {
+ this.type = "input";
+ } else {
+ this.type = "button";
+ }
+
+ if ( this.type === "checkbox" || this.type === "radio" ) {
+ // we don't search against the document in case the element
+ // is disconnected from the DOM
+ ancestor = this.element.parents().last();
+ labelSelector = "label[for='" + this.element.attr("id") + "']";
+ this.buttonElement = ancestor.find( labelSelector );
+ if ( !this.buttonElement.length ) {
+ ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
+ this.buttonElement = ancestor.filter( labelSelector );
+ if ( !this.buttonElement.length ) {
+ this.buttonElement = ancestor.find( labelSelector );
+ }
+ }
+ this.element.addClass( "ui-helper-hidden-accessible" );
+
+ checked = this.element.is( ":checked" );
+ if ( checked ) {
+ this.buttonElement.addClass( "ui-state-active" );
+ }
+ this.buttonElement.prop( "aria-pressed", checked );
+ } else {
+ this.buttonElement = this.element;
+ }
+ },
+
+ widget: function() {
+ return this.buttonElement;
+ },
+
+ _destroy: function() {
+ this.element
+ .removeClass( "ui-helper-hidden-accessible" );
+ this.buttonElement
+ .removeClass( baseClasses + " ui-state-active " + typeClasses )
+ .removeAttr( "role" )
+ .removeAttr( "aria-pressed" )
+ .html( this.buttonElement.find(".ui-button-text").html() );
+
+ if ( !this.hasTitle ) {
+ this.buttonElement.removeAttr( "title" );
+ }
+ },
+
+ _setOption: function( key, value ) {
+ this._super( key, value );
+ if ( key === "disabled" ) {
+ this.widget().toggleClass( "ui-state-disabled", !!value );
+ this.element.prop( "disabled", !!value );
+ if ( value ) {
+ if ( this.type === "checkbox" || this.type === "radio" ) {
+ this.buttonElement.removeClass( "ui-state-focus" );
+ } else {
+ this.buttonElement.removeClass( "ui-state-focus ui-state-active" );
+ }
+ }
+ return;
+ }
+ this._resetButton();
+ },
+
+ refresh: function() {
+ //See #8237 & #8828
+ var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" );
+
+ if ( isDisabled !== this.options.disabled ) {
+ this._setOption( "disabled", isDisabled );
+ }
+ if ( this.type === "radio" ) {
+ radioGroup( this.element[0] ).each(function() {
+ if ( $( this ).is( ":checked" ) ) {
+ $( this ).button( "widget" )
+ .addClass( "ui-state-active" )
+ .attr( "aria-pressed", "true" );
+ } else {
+ $( this ).button( "widget" )
+ .removeClass( "ui-state-active" )
+ .attr( "aria-pressed", "false" );
+ }
+ });
+ } else if ( this.type === "checkbox" ) {
+ if ( this.element.is( ":checked" ) ) {
+ this.buttonElement
+ .addClass( "ui-state-active" )
+ .attr( "aria-pressed", "true" );
+ } else {
+ this.buttonElement
+ .removeClass( "ui-state-active" )
+ .attr( "aria-pressed", "false" );
+ }
+ }
+ },
+
+ _resetButton: function() {
+ if ( this.type === "input" ) {
+ if ( this.options.label ) {
+ this.element.val( this.options.label );
+ }
+ return;
+ }
+ var buttonElement = this.buttonElement.removeClass( typeClasses ),
+ buttonText = $( "<span></span>", this.document[0] )
+ .addClass( "ui-button-text" )
+ .html( this.options.label )
+ .appendTo( buttonElement.empty() )
+ .text(),
+ icons = this.options.icons,
+ multipleIcons = icons.primary && icons.secondary,
+ buttonClasses = [];
+
+ if ( icons.primary || icons.secondary ) {
+ if ( this.options.text ) {
+ buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
+ }
+
+ if ( icons.primary ) {
+ buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
+ }
+
+ if ( icons.secondary ) {
+ buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
+ }
+
+ if ( !this.options.text ) {
+ buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
+
+ if ( !this.hasTitle ) {
+ buttonElement.attr( "title", $.trim( buttonText ) );
+ }
+ }
+ } else {
+ buttonClasses.push( "ui-button-text-only" );
+ }
+ buttonElement.addClass( buttonClasses.join( " " ) );
+ }
+});
+
+$.widget( "ui.buttonset", {
+ version: "1.11.3",
+ options: {
+ items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"
+ },
+
+ _create: function() {
+ this.element.addClass( "ui-buttonset" );
+ },
+
+ _init: function() {
+ this.refresh();
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "disabled" ) {
+ this.buttons.button( "option", key, value );
+ }
+
+ this._super( key, value );
+ },
+
+ refresh: function() {
+ var rtl = this.element.css( "direction" ) === "rtl",
+ allButtons = this.element.find( this.options.items ),
+ existingButtons = allButtons.filter( ":ui-button" );
+
+ // Initialize new buttons
+ allButtons.not( ":ui-button" ).button();
+
+ // Refresh existing buttons
+ existingButtons.button( "refresh" );
+
+ this.buttons = allButtons
+ .map(function() {
+ return $( this ).button( "widget" )[ 0 ];
+ })
+ .removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
+ .filter( ":first" )
+ .addClass( rtl ? "ui-corner-right" : "ui-corner-left" )
+ .end()
+ .filter( ":last" )
+ .addClass( rtl ? "ui-corner-left" : "ui-corner-right" )
+ .end()
+ .end();
+ },
+
+ _destroy: function() {
+ this.element.removeClass( "ui-buttonset" );
+ this.buttons
+ .map(function() {
+ return $( this ).button( "widget" )[ 0 ];
+ })
+ .removeClass( "ui-corner-left ui-corner-right" )
+ .end()
+ .button( "destroy" );
+ }
+});
+
+var button = $.ui.button;
+
+
+/*!
+ * jQuery UI Datepicker 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/datepicker/
+ */
+
+
+$.extend($.ui, { datepicker: { version: "1.11.3" } });
+
+var datepicker_instActive;
+
+function datepicker_getZindex( elem ) {
+ var position, value;
+ while ( elem.length && elem[ 0 ] !== document ) {
+ // Ignore z-index if position is set to a value where z-index is ignored by the browser
+ // This makes behavior of this function consistent across browsers
+ // WebKit always returns auto if the element is positioned
+ position = elem.css( "position" );
+ if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+ // IE returns 0 when zIndex is not specified
+ // other browsers return a string
+ // we ignore the case of nested elements with an explicit value of 0
+ // <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+ value = parseInt( elem.css( "zIndex" ), 10 );
+ if ( !isNaN( value ) && value !== 0 ) {
+ return value;
+ }
+ }
+ elem = elem.parent();
+ }
+
+ return 0;
+}
+/* Date picker manager.
+ Use the singleton instance of this class, $.datepicker, to interact with the date picker.
+ Settings for (groups of) date pickers are maintained in an instance object,
+ allowing multiple different settings on the same page. */
+
+function Datepicker() {
+ this._curInst = null; // The current instance in use
+ this._keyEvent = false; // If the last event was a key event
+ this._disabledInputs = []; // List of date picker inputs that have been disabled
+ this._datepickerShowing = false; // True if the popup picker is showing , false if not
+ this._inDialog = false; // True if showing within a "dialog", false if not
+ this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division
+ this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class
+ this._appendClass = "ui-datepicker-append"; // The name of the append marker class
+ this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class
+ this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class
+ this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class
+ this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class
+ this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class
+ this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class
+ this.regional = []; // Available regional settings, indexed by language code
+ this.regional[""] = { // Default regional settings
+ closeText: "Done", // Display text for close link
+ prevText: "Prev", // Display text for previous month link
+ nextText: "Next", // Display text for next month link
+ currentText: "Today", // Display text for current month link
+ monthNames: ["January","February","March","April","May","June",
+ "July","August","September","October","November","December"], // Names of months for drop-down and formatting
+ monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], // For formatting
+ dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], // For formatting
+ dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], // For formatting
+ dayNamesMin: ["Su","Mo","Tu","We","Th","Fr","Sa"], // Column headings for days starting at Sunday
+ weekHeader: "Wk", // Column header for week of the year
+ dateFormat: "mm/dd/yy", // See format options on parseDate
+ firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
+ isRTL: false, // True if right-to-left language, false if left-to-right
+ showMonthAfterYear: false, // True if the year select precedes month, false for month then year
+ yearSuffix: "" // Additional text to append to the year in the month headers
+ };
+ this._defaults = { // Global defaults for all the date picker instances
+ showOn: "focus", // "focus" for popup on focus,
+ // "button" for trigger button, or "both" for either
+ showAnim: "fadeIn", // Name of jQuery animation for popup
+ showOptions: {}, // Options for enhanced animations
+ defaultDate: null, // Used when field is blank: actual date,
+ // +/-number for offset from today, null for today
+ appendText: "", // Display text following the input box, e.g. showing the format
+ buttonText: "...", // Text for trigger button
+ buttonImage: "", // URL for trigger button image
+ buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
+ hideIfNoPrevNext: false, // True to hide next/previous month links
+ // if not applicable, false to just disable them
+ navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
+ gotoCurrent: false, // True if today link goes back to current selection instead
+ changeMonth: false, // True if month can be selected directly, false if only prev/next
+ changeYear: false, // True if year can be selected directly, false if only prev/next
+ yearRange: "c-10:c+10", // Range of years to display in drop-down,
+ // either relative to today's year (-nn:+nn), relative to currently displayed year
+ // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
+ showOtherMonths: false, // True to show dates in other months, false to leave blank
+ selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
+ showWeek: false, // True to show week of the year, false to not show it
+ calculateWeek: this.iso8601Week, // How to calculate the week of the year,
+ // takes a Date and returns the number of the week for it
+ shortYearCutoff: "+10", // Short year values < this are in the current century,
+ // > this are in the previous century,
+ // string value starting with "+" for current year + value
+ minDate: null, // The earliest selectable date, or null for no limit
+ maxDate: null, // The latest selectable date, or null for no limit
+ duration: "fast", // Duration of display/closure
+ beforeShowDay: null, // Function that takes a date and returns an array with
+ // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "",
+ // [2] = cell title (optional), e.g. $.datepicker.noWeekends
+ beforeShow: null, // Function that takes an input field and
+ // returns a set of custom settings for the date picker
+ onSelect: null, // Define a callback function when a date is selected
+ onChangeMonthYear: null, // Define a callback function when the month or year is changed
+ onClose: null, // Define a callback function when the datepicker is closed
+ numberOfMonths: 1, // Number of months to show at a time
+ showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
+ stepMonths: 1, // Number of months to step back/forward
+ stepBigMonths: 12, // Number of months to step back/forward for the big links
+ altField: "", // Selector for an alternate field to store selected dates into
+ altFormat: "", // The date format to use for the alternate field
+ constrainInput: true, // The input is constrained by the current date format
+ showButtonPanel: false, // True to show button panel, false to not show it
+ autoSize: false, // True to size the input for the date format, false to leave as is
+ disabled: false // The initial disabled state
+ };
+ $.extend(this._defaults, this.regional[""]);
+ this.regional.en = $.extend( true, {}, this.regional[ "" ]);
+ this.regional[ "en-US" ] = $.extend( true, {}, this.regional.en );
+ this.dpDiv = datepicker_bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"));
+}
+
+$.extend(Datepicker.prototype, {
+ /* Class name added to elements to indicate already configured with a date picker. */
+ markerClassName: "hasDatepicker",
+
+ //Keep track of the maximum number of rows displayed (see #7043)
+ maxRows: 4,
+
+ // TODO rename to "widget" when switching to widget factory
+ _widgetDatepicker: function() {
+ return this.dpDiv;
+ },
+
+ /* Override the default settings for all instances of the date picker.
+ * @param settings object - the new settings to use as defaults (anonymous object)
+ * @return the manager object
+ */
+ setDefaults: function(settings) {
+ datepicker_extendRemove(this._defaults, settings || {});
+ return this;
+ },
+
+ /* Attach the date picker to a jQuery selection.
+ * @param target element - the target input field or division or span
+ * @param settings object - the new settings to use for this date picker instance (anonymous)
+ */
+ _attachDatepicker: function(target, settings) {
+ var nodeName, inline, inst;
+ nodeName = target.nodeName.toLowerCase();
+ inline = (nodeName === "div" || nodeName === "span");
+ if (!target.id) {
+ this.uuid += 1;
+ target.id = "dp" + this.uuid;
+ }
+ inst = this._newInst($(target), inline);
+ inst.settings = $.extend({}, settings || {});
+ if (nodeName === "input") {
+ this._connectDatepicker(target, inst);
+ } else if (inline) {
+ this._inlineDatepicker(target, inst);
+ }
+ },
+
+ /* Create a new instance object. */
+ _newInst: function(target, inline) {
+ var id = target[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"); // escape jQuery meta chars
+ return {id: id, input: target, // associated target
+ selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
+ drawMonth: 0, drawYear: 0, // month being drawn
+ inline: inline, // is datepicker inline or not
+ dpDiv: (!inline ? this.dpDiv : // presentation div
+ datepicker_bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))};
+ },
+
+ /* Attach the date picker to an input field. */
+ _connectDatepicker: function(target, inst) {
+ var input = $(target);
+ inst.append = $([]);
+ inst.trigger = $([]);
+ if (input.hasClass(this.markerClassName)) {
+ return;
+ }
+ this._attachments(input, inst);
+ input.addClass(this.markerClassName).keydown(this._doKeyDown).
+ keypress(this._doKeyPress).keyup(this._doKeyUp);
+ this._autoSize(inst);
+ $.data(target, "datepicker", inst);
+ //If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
+ if( inst.settings.disabled ) {
+ this._disableDatepicker( target );
+ }
+ },
+
+ /* Make attachments based on settings. */
+ _attachments: function(input, inst) {
+ var showOn, buttonText, buttonImage,
+ appendText = this._get(inst, "appendText"),
+ isRTL = this._get(inst, "isRTL");
+
+ if (inst.append) {
+ inst.append.remove();
+ }
+ if (appendText) {
+ inst.append = $("<span class='" + this._appendClass + "'>" + appendText + "</span>");
+ input[isRTL ? "before" : "after"](inst.append);
+ }
+
+ input.unbind("focus", this._showDatepicker);
+
+ if (inst.trigger) {
+ inst.trigger.remove();
+ }
+
+ showOn = this._get(inst, "showOn");
+ if (showOn === "focus" || showOn === "both") { // pop-up date picker when in the marked field
+ input.focus(this._showDatepicker);
+ }
+ if (showOn === "button" || showOn === "both") { // pop-up date picker when button clicked
+ buttonText = this._get(inst, "buttonText");
+ buttonImage = this._get(inst, "buttonImage");
+ inst.trigger = $(this._get(inst, "buttonImageOnly") ?
+ $("<img/>").addClass(this._triggerClass).
+ attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
+ $("<button type='button'></button>").addClass(this._triggerClass).
+ html(!buttonImage ? buttonText : $("<img/>").attr(
+ { src:buttonImage, alt:buttonText, title:buttonText })));
+ input[isRTL ? "before" : "after"](inst.trigger);
+ inst.trigger.click(function() {
+ if ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) {
+ $.datepicker._hideDatepicker();
+ } else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) {
+ $.datepicker._hideDatepicker();
+ $.datepicker._showDatepicker(input[0]);
+ } else {
+ $.datepicker._showDatepicker(input[0]);
+ }
+ return false;
+ });
+ }
+ },
+
+ /* Apply the maximum length for the date format. */
+ _autoSize: function(inst) {
+ if (this._get(inst, "autoSize") && !inst.inline) {
+ var findMax, max, maxI, i,
+ date = new Date(2009, 12 - 1, 20), // Ensure double digits
+ dateFormat = this._get(inst, "dateFormat");
+
+ if (dateFormat.match(/[DM]/)) {
+ findMax = function(names) {
+ max = 0;
+ maxI = 0;
+ for (i = 0; i < names.length; i++) {
+ if (names[i].length > max) {
+ max = names[i].length;
+ maxI = i;
+ }
+ }
+ return maxI;
+ };
+ date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
+ "monthNames" : "monthNamesShort"))));
+ date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
+ "dayNames" : "dayNamesShort"))) + 20 - date.getDay());
+ }
+ inst.input.attr("size", this._formatDate(inst, date).length);
+ }
+ },
+
+ /* Attach an inline date picker to a div. */
+ _inlineDatepicker: function(target, inst) {
+ var divSpan = $(target);
+ if (divSpan.hasClass(this.markerClassName)) {
+ return;
+ }
+ divSpan.addClass(this.markerClassName).append(inst.dpDiv);
+ $.data(target, "datepicker", inst);
+ this._setDate(inst, this._getDefaultDate(inst), true);
+ this._updateDatepicker(inst);
+ this._updateAlternate(inst);
+ //If disabled option is true, disable the datepicker before showing it (see ticket #5665)
+ if( inst.settings.disabled ) {
+ this._disableDatepicker( target );
+ }
+ // Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
+ // http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
+ inst.dpDiv.css( "display", "block" );
+ },
+
+ /* Pop-up the date picker in a "dialog" box.
+ * @param input element - ignored
+ * @param date string or Date - the initial date to display
+ * @param onSelect function - the function to call when a date is selected
+ * @param settings object - update the dialog date picker instance's settings (anonymous object)
+ * @param pos int[2] - coordinates for the dialog's position within the screen or
+ * event - with x/y coordinates or
+ * leave empty for default (screen centre)
+ * @return the manager object
+ */
+ _dialogDatepicker: function(input, date, onSelect, settings, pos) {
+ var id, browserWidth, browserHeight, scrollX, scrollY,
+ inst = this._dialogInst; // internal instance
+
+ if (!inst) {
+ this.uuid += 1;
+ id = "dp" + this.uuid;
+ this._dialogInput = $("<input type='text' id='" + id +
+ "' style='position: absolute; top: -100px; width: 0px;'/>");
+ this._dialogInput.keydown(this._doKeyDown);
+ $("body").append(this._dialogInput);
+ inst = this._dialogInst = this._newInst(this._dialogInput, false);
+ inst.settings = {};
+ $.data(this._dialogInput[0], "datepicker", inst);
+ }
+ datepicker_extendRemove(inst.settings, settings || {});
+ date = (date && date.constructor === Date ? this._formatDate(inst, date) : date);
+ this._dialogInput.val(date);
+
+ this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
+ if (!this._pos) {
+ browserWidth = document.documentElement.clientWidth;
+ browserHeight = document.documentElement.clientHeight;
+ scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
+ scrollY = document.documentElement.scrollTop || document.body.scrollTop;
+ this._pos = // should use actual width/height below
+ [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
+ }
+
+ // move input on screen for focus, but hidden behind dialog
+ this._dialogInput.css("left", (this._pos[0] + 20) + "px").css("top", this._pos[1] + "px");
+ inst.settings.onSelect = onSelect;
+ this._inDialog = true;
+ this.dpDiv.addClass(this._dialogClass);
+ this._showDatepicker(this._dialogInput[0]);
+ if ($.blockUI) {
+ $.blockUI(this.dpDiv);
+ }
+ $.data(this._dialogInput[0], "datepicker", inst);
+ return this;
+ },
+
+ /* Detach a datepicker from its control.
+ * @param target element - the target input field or division or span
+ */
+ _destroyDatepicker: function(target) {
+ var nodeName,
+ $target = $(target),
+ inst = $.data(target, "datepicker");
+
+ if (!$target.hasClass(this.markerClassName)) {
+ return;
+ }
+
+ nodeName = target.nodeName.toLowerCase();
+ $.removeData(target, "datepicker");
+ if (nodeName === "input") {
+ inst.append.remove();
+ inst.trigger.remove();
+ $target.removeClass(this.markerClassName).
+ unbind("focus", this._showDatepicker).
+ unbind("keydown", this._doKeyDown).
+ unbind("keypress", this._doKeyPress).
+ unbind("keyup", this._doKeyUp);
+ } else if (nodeName === "div" || nodeName === "span") {
+ $target.removeClass(this.markerClassName).empty();
+ }
+
+ if ( datepicker_instActive === inst ) {
+ datepicker_instActive = null;
+ }
+ },
+
+ /* Enable the date picker to a jQuery selection.
+ * @param target element - the target input field or division or span
+ */
+ _enableDatepicker: function(target) {
+ var nodeName, inline,
+ $target = $(target),
+ inst = $.data(target, "datepicker");
+
+ if (!$target.hasClass(this.markerClassName)) {
+ return;
+ }
+
+ nodeName = target.nodeName.toLowerCase();
+ if (nodeName === "input") {
+ target.disabled = false;
+ inst.trigger.filter("button").
+ each(function() { this.disabled = false; }).end().
+ filter("img").css({opacity: "1.0", cursor: ""});
+ } else if (nodeName === "div" || nodeName === "span") {
+ inline = $target.children("." + this._inlineClass);
+ inline.children().removeClass("ui-state-disabled");
+ inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+ prop("disabled", false);
+ }
+ this._disabledInputs = $.map(this._disabledInputs,
+ function(value) { return (value === target ? null : value); }); // delete entry
+ },
+
+ /* Disable the date picker to a jQuery selection.
+ * @param target element - the target input field or division or span
+ */
+ _disableDatepicker: function(target) {
+ var nodeName, inline,
+ $target = $(target),
+ inst = $.data(target, "datepicker");
+
+ if (!$target.hasClass(this.markerClassName)) {
+ return;
+ }
+
+ nodeName = target.nodeName.toLowerCase();
+ if (nodeName === "input") {
+ target.disabled = true;
+ inst.trigger.filter("button").
+ each(function() { this.disabled = true; }).end().
+ filter("img").css({opacity: "0.5", cursor: "default"});
+ } else if (nodeName === "div" || nodeName === "span") {
+ inline = $target.children("." + this._inlineClass);
+ inline.children().addClass("ui-state-disabled");
+ inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+ prop("disabled", true);
+ }
+ this._disabledInputs = $.map(this._disabledInputs,
+ function(value) { return (value === target ? null : value); }); // delete entry
+ this._disabledInputs[this._disabledInputs.length] = target;
+ },
+
+ /* Is the first field in a jQuery collection disabled as a datepicker?
+ * @param target element - the target input field or division or span
+ * @return boolean - true if disabled, false if enabled
+ */
+ _isDisabledDatepicker: function(target) {
+ if (!target) {
+ return false;
+ }
+ for (var i = 0; i < this._disabledInputs.length; i++) {
+ if (this._disabledInputs[i] === target) {
+ return true;
+ }
+ }
+ return false;
+ },
+
+ /* Retrieve the instance data for the target control.
+ * @param target element - the target input field or division or span
+ * @return object - the associated instance data
+ * @throws error if a jQuery problem getting data
+ */
+ _getInst: function(target) {
+ try {
+ return $.data(target, "datepicker");
+ }
+ catch (err) {
+ throw "Missing instance data for this datepicker";
+ }
+ },
+
+ /* Update or retrieve the settings for a date picker attached to an input field or division.
+ * @param target element - the target input field or division or span
+ * @param name object - the new settings to update or
+ * string - the name of the setting to change or retrieve,
+ * when retrieving also "all" for all instance settings or
+ * "defaults" for all global defaults
+ * @param value any - the new value for the setting
+ * (omit if above is an object or to retrieve a value)
+ */
+ _optionDatepicker: function(target, name, value) {
+ var settings, date, minDate, maxDate,
+ inst = this._getInst(target);
+
+ if (arguments.length === 2 && typeof name === "string") {
+ return (name === "defaults" ? $.extend({}, $.datepicker._defaults) :
+ (inst ? (name === "all" ? $.extend({}, inst.settings) :
+ this._get(inst, name)) : null));
+ }
+
+ settings = name || {};
+ if (typeof name === "string") {
+ settings = {};
+ settings[name] = value;
+ }
+
+ if (inst) {
+ if (this._curInst === inst) {
+ this._hideDatepicker();
+ }
+
+ date = this._getDateDatepicker(target, true);
+ minDate = this._getMinMaxDate(inst, "min");
+ maxDate = this._getMinMaxDate(inst, "max");
+ datepicker_extendRemove(inst.settings, settings);
+ // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
+ if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) {
+ inst.settings.minDate = this._formatDate(inst, minDate);
+ }
+ if (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) {
+ inst.settings.maxDate = this._formatDate(inst, maxDate);
+ }
+ if ( "disabled" in settings ) {
+ if ( settings.disabled ) {
+ this._disableDatepicker(target);
+ } else {
+ this._enableDatepicker(target);
+ }
+ }
+ this._attachments($(target), inst);
+ this._autoSize(inst);
+ this._setDate(inst, date);
+ this._updateAlternate(inst);
+ this._updateDatepicker(inst);
+ }
+ },
+
+ // change method deprecated
+ _changeDatepicker: function(target, name, value) {
+ this._optionDatepicker(target, name, value);
+ },
+
+ /* Redraw the date picker attached to an input field or division.
+ * @param target element - the target input field or division or span
+ */
+ _refreshDatepicker: function(target) {
+ var inst = this._getInst(target);
+ if (inst) {
+ this._updateDatepicker(inst);
+ }
+ },
+
+ /* Set the dates for a jQuery selection.
+ * @param target element - the target input field or division or span
+ * @param date Date - the new date
+ */
+ _setDateDatepicker: function(target, date) {
+ var inst = this._getInst(target);
+ if (inst) {
+ this._setDate(inst, date);
+ this._updateDatepicker(inst);
+ this._updateAlternate(inst);
+ }
+ },
+
+ /* Get the date(s) for the first entry in a jQuery selection.
+ * @param target element - the target input field or division or span
+ * @param noDefault boolean - true if no default date is to be used
+ * @return Date - the current date
+ */
+ _getDateDatepicker: function(target, noDefault) {
+ var inst = this._getInst(target);
+ if (inst && !inst.inline) {
+ this._setDateFromField(inst, noDefault);
+ }
+ return (inst ? this._getDate(inst) : null);
+ },
+
+ /* Handle keystrokes. */
+ _doKeyDown: function(event) {
+ var onSelect, dateStr, sel,
+ inst = $.datepicker._getInst(event.target),
+ handled = true,
+ isRTL = inst.dpDiv.is(".ui-datepicker-rtl");
+
+ inst._keyEvent = true;
+ if ($.datepicker._datepickerShowing) {
+ switch (event.keyCode) {
+ case 9: $.datepicker._hideDatepicker();
+ handled = false;
+ break; // hide on tab out
+ case 13: sel = $("td." + $.datepicker._dayOverClass + ":not(." +
+ $.datepicker._currentClass + ")", inst.dpDiv);
+ if (sel[0]) {
+ $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
+ }
+
+ onSelect = $.datepicker._get(inst, "onSelect");
+ if (onSelect) {
+ dateStr = $.datepicker._formatDate(inst);
+
+ // trigger custom callback
+ onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
+ } else {
+ $.datepicker._hideDatepicker();
+ }
+
+ return false; // don't submit the form
+ case 27: $.datepicker._hideDatepicker();
+ break; // hide on escape
+ case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+ -$.datepicker._get(inst, "stepBigMonths") :
+ -$.datepicker._get(inst, "stepMonths")), "M");
+ break; // previous month/year on page up/+ ctrl
+ case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+ +$.datepicker._get(inst, "stepBigMonths") :
+ +$.datepicker._get(inst, "stepMonths")), "M");
+ break; // next month/year on page down/+ ctrl
+ case 35: if (event.ctrlKey || event.metaKey) {
+ $.datepicker._clearDate(event.target);
+ }
+ handled = event.ctrlKey || event.metaKey;
+ break; // clear on ctrl or command +end
+ case 36: if (event.ctrlKey || event.metaKey) {
+ $.datepicker._gotoToday(event.target);
+ }
+ handled = event.ctrlKey || event.metaKey;
+ break; // current on ctrl or command +home
+ case 37: if (event.ctrlKey || event.metaKey) {
+ $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), "D");
+ }
+ handled = event.ctrlKey || event.metaKey;
+ // -1 day on ctrl or command +left
+ if (event.originalEvent.altKey) {
+ $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+ -$.datepicker._get(inst, "stepBigMonths") :
+ -$.datepicker._get(inst, "stepMonths")), "M");
+ }
+ // next month/year on alt +left on Mac
+ break;
+ case 38: if (event.ctrlKey || event.metaKey) {
+ $.datepicker._adjustDate(event.target, -7, "D");
+ }
+ handled = event.ctrlKey || event.metaKey;
+ break; // -1 week on ctrl or command +up
+ case 39: if (event.ctrlKey || event.metaKey) {
+ $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), "D");
+ }
+ handled = event.ctrlKey || event.metaKey;
+ // +1 day on ctrl or command +right
+ if (event.originalEvent.altKey) {
+ $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+ +$.datepicker._get(inst, "stepBigMonths") :
+ +$.datepicker._get(inst, "stepMonths")), "M");
+ }
+ // next month/year on alt +right
+ break;
+ case 40: if (event.ctrlKey || event.metaKey) {
+ $.datepicker._adjustDate(event.target, +7, "D");
+ }
+ handled = event.ctrlKey || event.metaKey;
+ break; // +1 week on ctrl or command +down
+ default: handled = false;
+ }
+ } else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home
+ $.datepicker._showDatepicker(this);
+ } else {
+ handled = false;
+ }
+
+ if (handled) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ },
+
+ /* Filter entered characters - based on date format. */
+ _doKeyPress: function(event) {
+ var chars, chr,
+ inst = $.datepicker._getInst(event.target);
+
+ if ($.datepicker._get(inst, "constrainInput")) {
+ chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat"));
+ chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);
+ return event.ctrlKey || event.metaKey || (chr < " " || !chars || chars.indexOf(chr) > -1);
+ }
+ },
+
+ /* Synchronise manual entry and field/alternate field. */
+ _doKeyUp: function(event) {
+ var date,
+ inst = $.datepicker._getInst(event.target);
+
+ if (inst.input.val() !== inst.lastVal) {
+ try {
+ date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
+ (inst.input ? inst.input.val() : null),
+ $.datepicker._getFormatConfig(inst));
+
+ if (date) { // only if valid
+ $.datepicker._setDateFromField(inst);
+ $.datepicker._updateAlternate(inst);
+ $.datepicker._updateDatepicker(inst);
+ }
+ }
+ catch (err) {
+ }
+ }
+ return true;
+ },
+
+ /* Pop-up the date picker for a given input field.
+ * If false returned from beforeShow event handler do not show.
+ * @param input element - the input field attached to the date picker or
+ * event - if triggered by focus
+ */
+ _showDatepicker: function(input) {
+ input = input.target || input;
+ if (input.nodeName.toLowerCase() !== "input") { // find from button/image trigger
+ input = $("input", input.parentNode)[0];
+ }
+
+ if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here
+ return;
+ }
+
+ var inst, beforeShow, beforeShowSettings, isFixed,
+ offset, showAnim, duration;
+
+ inst = $.datepicker._getInst(input);
+ if ($.datepicker._curInst && $.datepicker._curInst !== inst) {
+ $.datepicker._curInst.dpDiv.stop(true, true);
+ if ( inst && $.datepicker._datepickerShowing ) {
+ $.datepicker._hideDatepicker( $.datepicker._curInst.input[0] );
+ }
+ }
+
+ beforeShow = $.datepicker._get(inst, "beforeShow");
+ beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};
+ if(beforeShowSettings === false){
+ return;
+ }
+ datepicker_extendRemove(inst.settings, beforeShowSettings);
+
+ inst.lastVal = null;
+ $.datepicker._lastInput = input;
+ $.datepicker._setDateFromField(inst);
+
+ if ($.datepicker._inDialog) { // hide cursor
+ input.value = "";
+ }
+ if (!$.datepicker._pos) { // position below input
+ $.datepicker._pos = $.datepicker._findPos(input);
+ $.datepicker._pos[1] += input.offsetHeight; // add the height
+ }
+
+ isFixed = false;
+ $(input).parents().each(function() {
+ isFixed |= $(this).css("position") === "fixed";
+ return !isFixed;
+ });
+
+ offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
+ $.datepicker._pos = null;
+ //to avoid flashes on Firefox
+ inst.dpDiv.empty();
+ // determine sizing offscreen
+ inst.dpDiv.css({position: "absolute", display: "block", top: "-1000px"});
+ $.datepicker._updateDatepicker(inst);
+ // fix width for dynamic number of date pickers
+ // and adjust position before showing
+ offset = $.datepicker._checkOffset(inst, offset, isFixed);
+ inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
+ "static" : (isFixed ? "fixed" : "absolute")), display: "none",
+ left: offset.left + "px", top: offset.top + "px"});
+
+ if (!inst.inline) {
+ showAnim = $.datepicker._get(inst, "showAnim");
+ duration = $.datepicker._get(inst, "duration");
+ inst.dpDiv.css( "z-index", datepicker_getZindex( $( input ) ) + 1 );
+ $.datepicker._datepickerShowing = true;
+
+ if ( $.effects && $.effects.effect[ showAnim ] ) {
+ inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration);
+ } else {
+ inst.dpDiv[showAnim || "show"](showAnim ? duration : null);
+ }
+
+ if ( $.datepicker._shouldFocusInput( inst ) ) {
+ inst.input.focus();
+ }
+
+ $.datepicker._curInst = inst;
+ }
+ },
+
+ /* Generate the date picker content. */
+ _updateDatepicker: function(inst) {
+ this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
+ datepicker_instActive = inst; // for delegate hover events
+ inst.dpDiv.empty().append(this._generateHTML(inst));
+ this._attachHandlers(inst);
+
+ var origyearshtml,
+ numMonths = this._getNumberOfMonths(inst),
+ cols = numMonths[1],
+ width = 17,
+ activeCell = inst.dpDiv.find( "." + this._dayOverClass + " a" );
+
+ if ( activeCell.length > 0 ) {
+ datepicker_handleMouseover.apply( activeCell.get( 0 ) );
+ }
+
+ inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");
+ if (cols > 1) {
+ inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em");
+ }
+ inst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? "add" : "remove") +
+ "Class"]("ui-datepicker-multi");
+ inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") +
+ "Class"]("ui-datepicker-rtl");
+
+ if (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {
+ inst.input.focus();
+ }
+
+ // deffered render of the years select (to avoid flashes on Firefox)
+ if( inst.yearshtml ){
+ origyearshtml = inst.yearshtml;
+ setTimeout(function(){
+ //assure that inst.yearshtml didn't change.
+ if( origyearshtml === inst.yearshtml && inst.yearshtml ){
+ inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml);
+ }
+ origyearshtml = inst.yearshtml = null;
+ }, 0);
+ }
+ },
+
+ // #6694 - don't focus the input if it's already focused
+ // this breaks the change event in IE
+ // Support: IE and jQuery <1.9
+ _shouldFocusInput: function( inst ) {
+ return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" );
+ },
+
+ /* Check positioning to remain on screen. */
+ _checkOffset: function(inst, offset, isFixed) {
+ var dpWidth = inst.dpDiv.outerWidth(),
+ dpHeight = inst.dpDiv.outerHeight(),
+ inputWidth = inst.input ? inst.input.outerWidth() : 0,
+ inputHeight = inst.input ? inst.input.outerHeight() : 0,
+ viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()),
+ viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());
+
+ offset.left -= (this._get(inst, "isRTL") ? (dpWidth - inputWidth) : 0);
+ offset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0;
+ offset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
+
+ // now check if datepicker is showing outside window viewport - move to a better place if so.
+ offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
+ Math.abs(offset.left + dpWidth - viewWidth) : 0);
+ offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
+ Math.abs(dpHeight + inputHeight) : 0);
+
+ return offset;
+ },
+
+ /* Find an object's position on the screen. */
+ _findPos: function(obj) {
+ var position,
+ inst = this._getInst(obj),
+ isRTL = this._get(inst, "isRTL");
+
+ while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) {
+ obj = obj[isRTL ? "previousSibling" : "nextSibling"];
+ }
+
+ position = $(obj).offset();
+ return [position.left, position.top];
+ },
+
+ /* Hide the date picker from view.
+ * @param input element - the input field attached to the date picker
+ */
+ _hideDatepicker: function(input) {
+ var showAnim, duration, postProcess, onClose,
+ inst = this._curInst;
+
+ if (!inst || (input && inst !== $.data(input, "datepicker"))) {
+ return;
+ }
+
+ if (this._datepickerShowing) {
+ showAnim = this._get(inst, "showAnim");
+ duration = this._get(inst, "duration");
+ postProcess = function() {
+ $.datepicker._tidyDialog(inst);
+ };
+
+ // DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
+ if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {
+ inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess);
+ } else {
+ inst.dpDiv[(showAnim === "slideDown" ? "slideUp" :
+ (showAnim === "fadeIn" ? "fadeOut" : "hide"))]((showAnim ? duration : null), postProcess);
+ }
+
+ if (!showAnim) {
+ postProcess();
+ }
+ this._datepickerShowing = false;
+
+ onClose = this._get(inst, "onClose");
+ if (onClose) {
+ onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ""), inst]);
+ }
+
+ this._lastInput = null;
+ if (this._inDialog) {
+ this._dialogInput.css({ position: "absolute", left: "0", top: "-100px" });
+ if ($.blockUI) {
+ $.unblockUI();
+ $("body").append(this.dpDiv);
+ }
+ }
+ this._inDialog = false;
+ }
+ },
+
+ /* Tidy up after a dialog display. */
+ _tidyDialog: function(inst) {
+ inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar");
+ },
+
+ /* Close date picker if clicked elsewhere. */
+ _checkExternalClick: function(event) {
+ if (!$.datepicker._curInst) {
+ return;
+ }
+
+ var $target = $(event.target),
+ inst = $.datepicker._getInst($target[0]);
+
+ if ( ( ( $target[0].id !== $.datepicker._mainDivId &&
+ $target.parents("#" + $.datepicker._mainDivId).length === 0 &&
+ !$target.hasClass($.datepicker.markerClassName) &&
+ !$target.closest("." + $.datepicker._triggerClass).length &&
+ $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) ||
+ ( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) {
+ $.datepicker._hideDatepicker();
+ }
+ },
+
+ /* Adjust one of the date sub-fields. */
+ _adjustDate: function(id, offset, period) {
+ var target = $(id),
+ inst = this._getInst(target[0]);
+
+ if (this._isDisabledDatepicker(target[0])) {
+ return;
+ }
+ this._adjustInstDate(inst, offset +
+ (period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning
+ period);
+ this._updateDatepicker(inst);
+ },
+
+ /* Action for current link. */
+ _gotoToday: function(id) {
+ var date,
+ target = $(id),
+ inst = this._getInst(target[0]);
+
+ if (this._get(inst, "gotoCurrent") && inst.currentDay) {
+ inst.selectedDay = inst.currentDay;
+ inst.drawMonth = inst.selectedMonth = inst.currentMonth;
+ inst.drawYear = inst.selectedYear = inst.currentYear;
+ } else {
+ date = new Date();
+ inst.selectedDay = date.getDate();
+ inst.drawMonth = inst.selectedMonth = date.getMonth();
+ inst.drawYear = inst.selectedYear = date.getFullYear();
+ }
+ this._notifyChange(inst);
+ this._adjustDate(target);
+ },
+
+ /* Action for selecting a new month/year. */
+ _selectMonthYear: function(id, select, period) {
+ var target = $(id),
+ inst = this._getInst(target[0]);
+
+ inst["selected" + (period === "M" ? "Month" : "Year")] =
+ inst["draw" + (period === "M" ? "Month" : "Year")] =
+ parseInt(select.options[select.selectedIndex].value,10);
+
+ this._notifyChange(inst);
+ this._adjustDate(target);
+ },
+
+ /* Action for selecting a day. */
+ _selectDay: function(id, month, year, td) {
+ var inst,
+ target = $(id);
+
+ if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
+ return;
+ }
+
+ inst = this._getInst(target[0]);
+ inst.selectedDay = inst.currentDay = $("a", td).html();
+ inst.selectedMonth = inst.currentMonth = month;
+ inst.selectedYear = inst.currentYear = year;
+ this._selectDate(id, this._formatDate(inst,
+ inst.currentDay, inst.currentMonth, inst.currentYear));
+ },
+
+ /* Erase the input field and hide the date picker. */
+ _clearDate: function(id) {
+ var target = $(id);
+ this._selectDate(target, "");
+ },
+
+ /* Update the input field with the selected date. */
+ _selectDate: function(id, dateStr) {
+ var onSelect,
+ target = $(id),
+ inst = this._getInst(target[0]);
+
+ dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
+ if (inst.input) {
+ inst.input.val(dateStr);
+ }
+ this._updateAlternate(inst);
+
+ onSelect = this._get(inst, "onSelect");
+ if (onSelect) {
+ onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback
+ } else if (inst.input) {
+ inst.input.trigger("change"); // fire the change event
+ }
+
+ if (inst.inline){
+ this._updateDatepicker(inst);
+ } else {
+ this._hideDatepicker();
+ this._lastInput = inst.input[0];
+ if (typeof(inst.input[0]) !== "object") {
+ inst.input.focus(); // restore focus
+ }
+ this._lastInput = null;
+ }
+ },
+
+ /* Update any alternate field to synchronise with the main field. */
+ _updateAlternate: function(inst) {
+ var altFormat, date, dateStr,
+ altField = this._get(inst, "altField");
+
+ if (altField) { // update alternate field too
+ altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat");
+ date = this._getDate(inst);
+ dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
+ $(altField).each(function() { $(this).val(dateStr); });
+ }
+ },
+
+ /* Set as beforeShowDay function to prevent selection of weekends.
+ * @param date Date - the date to customise
+ * @return [boolean, string] - is this date selectable?, what is its CSS class?
+ */
+ noWeekends: function(date) {
+ var day = date.getDay();
+ return [(day > 0 && day < 6), ""];
+ },
+
+ /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
+ * @param date Date - the date to get the week for
+ * @return number - the number of the week within the year that contains this date
+ */
+ iso8601Week: function(date) {
+ var time,
+ checkDate = new Date(date.getTime());
+
+ // Find Thursday of this week starting on Monday
+ checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
+
+ time = checkDate.getTime();
+ checkDate.setMonth(0); // Compare with Jan 1
+ checkDate.setDate(1);
+ return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
+ },
+
+ /* Parse a string value into a date object.
+ * See formatDate below for the possible formats.
+ *
+ * @param format string - the expected format of the date
+ * @param value string - the date in the above format
+ * @param settings Object - attributes include:
+ * shortYearCutoff number - the cutoff year for determining the century (optional)
+ * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional)
+ * dayNames string[7] - names of the days from Sunday (optional)
+ * monthNamesShort string[12] - abbreviated names of the months (optional)
+ * monthNames string[12] - names of the months (optional)
+ * @return Date - the extracted date value or null if value is blank
+ */
+ parseDate: function (format, value, settings) {
+ if (format == null || value == null) {
+ throw "Invalid arguments";
+ }
+
+ value = (typeof value === "object" ? value.toString() : value + "");
+ if (value === "") {
+ return null;
+ }
+
+ var iFormat, dim, extra,
+ iValue = 0,
+ shortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff,
+ shortYearCutoff = (typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp :
+ new Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)),
+ dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
+ dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
+ monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
+ monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
+ year = -1,
+ month = -1,
+ day = -1,
+ doy = -1,
+ literal = false,
+ date,
+ // Check whether a format character is doubled
+ lookAhead = function(match) {
+ var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+ if (matches) {
+ iFormat++;
+ }
+ return matches;
+ },
+ // Extract a number from the string value
+ getNumber = function(match) {
+ var isDoubled = lookAhead(match),
+ size = (match === "@" ? 14 : (match === "!" ? 20 :
+ (match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))),
+ minSize = (match === "y" ? size : 1),
+ digits = new RegExp("^\\d{" + minSize + "," + size + "}"),
+ num = value.substring(iValue).match(digits);
+ if (!num) {
+ throw "Missing number at position " + iValue;
+ }
+ iValue += num[0].length;
+ return parseInt(num[0], 10);
+ },
+ // Extract a name from the string value and convert to an index
+ getName = function(match, shortNames, longNames) {
+ var index = -1,
+ names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
+ return [ [k, v] ];
+ }).sort(function (a, b) {
+ return -(a[1].length - b[1].length);
+ });
+
+ $.each(names, function (i, pair) {
+ var name = pair[1];
+ if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {
+ index = pair[0];
+ iValue += name.length;
+ return false;
+ }
+ });
+ if (index !== -1) {
+ return index + 1;
+ } else {
+ throw "Unknown name at position " + iValue;
+ }
+ },
+ // Confirm that a literal character matches the string value
+ checkLiteral = function() {
+ if (value.charAt(iValue) !== format.charAt(iFormat)) {
+ throw "Unexpected literal at position " + iValue;
+ }
+ iValue++;
+ };
+
+ for (iFormat = 0; iFormat < format.length; iFormat++) {
+ if (literal) {
+ if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+ literal = false;
+ } else {
+ checkLiteral();
+ }
+ } else {
+ switch (format.charAt(iFormat)) {
+ case "d":
+ day = getNumber("d");
+ break;
+ case "D":
+ getName("D", dayNamesShort, dayNames);
+ break;
+ case "o":
+ doy = getNumber("o");
+ break;
+ case "m":
+ month = getNumber("m");
+ break;
+ case "M":
+ month = getName("M", monthNamesShort, monthNames);
+ break;
+ case "y":
+ year = getNumber("y");
+ break;
+ case "@":
+ date = new Date(getNumber("@"));
+ year = date.getFullYear();
+ month = date.getMonth() + 1;
+ day = date.getDate();
+ break;
+ case "!":
+ date = new Date((getNumber("!") - this._ticksTo1970) / 10000);
+ year = date.getFullYear();
+ month = date.getMonth() + 1;
+ day = date.getDate();
+ break;
+ case "'":
+ if (lookAhead("'")){
+ checkLiteral();
+ } else {
+ literal = true;
+ }
+ break;
+ default:
+ checkLiteral();
+ }
+ }
+ }
+
+ if (iValue < value.length){
+ extra = value.substr(iValue);
+ if (!/^\s+/.test(extra)) {
+ throw "Extra/unparsed characters found in date: " + extra;
+ }
+ }
+
+ if (year === -1) {
+ year = new Date().getFullYear();
+ } else if (year < 100) {
+ year += new Date().getFullYear() - new Date().getFullYear() % 100 +
+ (year <= shortYearCutoff ? 0 : -100);
+ }
+
+ if (doy > -1) {
+ month = 1;
+ day = doy;
+ do {
+ dim = this._getDaysInMonth(year, month - 1);
+ if (day <= dim) {
+ break;
+ }
+ month++;
+ day -= dim;
+ } while (true);
+ }
+
+ date = this._daylightSavingAdjust(new Date(year, month - 1, day));
+ if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {
+ throw "Invalid date"; // E.g. 31/02/00
+ }
+ return date;
+ },
+
+ /* Standard date formats. */
+ ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601)
+ COOKIE: "D, dd M yy",
+ ISO_8601: "yy-mm-dd",
+ RFC_822: "D, d M y",
+ RFC_850: "DD, dd-M-y",
+ RFC_1036: "D, d M y",
+ RFC_1123: "D, d M yy",
+ RFC_2822: "D, d M yy",
+ RSS: "D, d M y", // RFC 822
+ TICKS: "!",
+ TIMESTAMP: "@",
+ W3C: "yy-mm-dd", // ISO 8601
+
+ _ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
+ Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
+
+ /* Format a date object into a string value.
+ * The format can be combinations of the following:
+ * d - day of month (no leading zero)
+ * dd - day of month (two digit)
+ * o - day of year (no leading zeros)
+ * oo - day of year (three digit)
+ * D - day name short
+ * DD - day name long
+ * m - month of year (no leading zero)
+ * mm - month of year (two digit)
+ * M - month name short
+ * MM - month name long
+ * y - year (two digit)
+ * yy - year (four digit)
+ * @ - Unix timestamp (ms since 01/01/1970)
+ * ! - Windows ticks (100ns since 01/01/0001)
+ * "..." - literal text
+ * '' - single quote
+ *
+ * @param format string - the desired format of the date
+ * @param date Date - the date value to format
+ * @param settings Object - attributes include:
+ * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional)
+ * dayNames string[7] - names of the days from Sunday (optional)
+ * monthNamesShort string[12] - abbreviated names of the months (optional)
+ * monthNames string[12] - names of the months (optional)
+ * @return string - the date in the above format
+ */
+ formatDate: function (format, date, settings) {
+ if (!date) {
+ return "";
+ }
+
+ var iFormat,
+ dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
+ dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
+ monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
+ monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
+ // Check whether a format character is doubled
+ lookAhead = function(match) {
+ var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+ if (matches) {
+ iFormat++;
+ }
+ return matches;
+ },
+ // Format a number, with leading zero if necessary
+ formatNumber = function(match, value, len) {
+ var num = "" + value;
+ if (lookAhead(match)) {
+ while (num.length < len) {
+ num = "0" + num;
+ }
+ }
+ return num;
+ },
+ // Format a name, short or long as requested
+ formatName = function(match, value, shortNames, longNames) {
+ return (lookAhead(match) ? longNames[value] : shortNames[value]);
+ },
+ output = "",
+ literal = false;
+
+ if (date) {
+ for (iFormat = 0; iFormat < format.length; iFormat++) {
+ if (literal) {
+ if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+ literal = false;
+ } else {
+ output += format.charAt(iFormat);
+ }
+ } else {
+ switch (format.charAt(iFormat)) {
+ case "d":
+ output += formatNumber("d", date.getDate(), 2);
+ break;
+ case "D":
+ output += formatName("D", date.getDay(), dayNamesShort, dayNames);
+ break;
+ case "o":
+ output += formatNumber("o",
+ Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
+ break;
+ case "m":
+ output += formatNumber("m", date.getMonth() + 1, 2);
+ break;
+ case "M":
+ output += formatName("M", date.getMonth(), monthNamesShort, monthNames);
+ break;
+ case "y":
+ output += (lookAhead("y") ? date.getFullYear() :
+ (date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100);
+ break;
+ case "@":
+ output += date.getTime();
+ break;
+ case "!":
+ output += date.getTime() * 10000 + this._ticksTo1970;
+ break;
+ case "'":
+ if (lookAhead("'")) {
+ output += "'";
+ } else {
+ literal = true;
+ }
+ break;
+ default:
+ output += format.charAt(iFormat);
+ }
+ }
+ }
+ }
+ return output;
+ },
+
+ /* Extract all possible characters from the date format. */
+ _possibleChars: function (format) {
+ var iFormat,
+ chars = "",
+ literal = false,
+ // Check whether a format character is doubled
+ lookAhead = function(match) {
+ var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+ if (matches) {
+ iFormat++;
+ }
+ return matches;
+ };
+
+ for (iFormat = 0; iFormat < format.length; iFormat++) {
+ if (literal) {
+ if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+ literal = false;
+ } else {
+ chars += format.charAt(iFormat);
+ }
+ } else {
+ switch (format.charAt(iFormat)) {
+ case "d": case "m": case "y": case "@":
+ chars += "0123456789";
+ break;
+ case "D": case "M":
+ return null; // Accept anything
+ case "'":
+ if (lookAhead("'")) {
+ chars += "'";
+ } else {
+ literal = true;
+ }
+ break;
+ default:
+ chars += format.charAt(iFormat);
+ }
+ }
+ }
+ return chars;
+ },
+
+ /* Get a setting value, defaulting if necessary. */
+ _get: function(inst, name) {
+ return inst.settings[name] !== undefined ?
+ inst.settings[name] : this._defaults[name];
+ },
+
+ /* Parse existing date and initialise date picker. */
+ _setDateFromField: function(inst, noDefault) {
+ if (inst.input.val() === inst.lastVal) {
+ return;
+ }
+
+ var dateFormat = this._get(inst, "dateFormat"),
+ dates = inst.lastVal = inst.input ? inst.input.val() : null,
+ defaultDate = this._getDefaultDate(inst),
+ date = defaultDate,
+ settings = this._getFormatConfig(inst);
+
+ try {
+ date = this.parseDate(dateFormat, dates, settings) || defaultDate;
+ } catch (event) {
+ dates = (noDefault ? "" : dates);
+ }
+ inst.selectedDay = date.getDate();
+ inst.drawMonth = inst.selectedMonth = date.getMonth();
+ inst.drawYear = inst.selectedYear = date.getFullYear();
+ inst.currentDay = (dates ? date.getDate() : 0);
+ inst.currentMonth = (dates ? date.getMonth() : 0);
+ inst.currentYear = (dates ? date.getFullYear() : 0);
+ this._adjustInstDate(inst);
+ },
+
+ /* Retrieve the default date shown on opening. */
+ _getDefaultDate: function(inst) {
+ return this._restrictMinMax(inst,
+ this._determineDate(inst, this._get(inst, "defaultDate"), new Date()));
+ },
+
+ /* A date may be specified as an exact value or a relative one. */
+ _determineDate: function(inst, date, defaultDate) {
+ var offsetNumeric = function(offset) {
+ var date = new Date();
+ date.setDate(date.getDate() + offset);
+ return date;
+ },
+ offsetString = function(offset) {
+ try {
+ return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
+ offset, $.datepicker._getFormatConfig(inst));
+ }
+ catch (e) {
+ // Ignore
+ }
+
+ var date = (offset.toLowerCase().match(/^c/) ?
+ $.datepicker._getDate(inst) : null) || new Date(),
+ year = date.getFullYear(),
+ month = date.getMonth(),
+ day = date.getDate(),
+ pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,
+ matches = pattern.exec(offset);
+
+ while (matches) {
+ switch (matches[2] || "d") {
+ case "d" : case "D" :
+ day += parseInt(matches[1],10); break;
+ case "w" : case "W" :
+ day += parseInt(matches[1],10) * 7; break;
+ case "m" : case "M" :
+ month += parseInt(matches[1],10);
+ day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+ break;
+ case "y": case "Y" :
+ year += parseInt(matches[1],10);
+ day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+ break;
+ }
+ matches = pattern.exec(offset);
+ }
+ return new Date(year, month, day);
+ },
+ newDate = (date == null || date === "" ? defaultDate : (typeof date === "string" ? offsetString(date) :
+ (typeof date === "number" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
+
+ newDate = (newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate);
+ if (newDate) {
+ newDate.setHours(0);
+ newDate.setMinutes(0);
+ newDate.setSeconds(0);
+ newDate.setMilliseconds(0);
+ }
+ return this._daylightSavingAdjust(newDate);
+ },
+
+ /* Handle switch to/from daylight saving.
+ * Hours may be non-zero on daylight saving cut-over:
+ * > 12 when midnight changeover, but then cannot generate
+ * midnight datetime, so jump to 1AM, otherwise reset.
+ * @param date (Date) the date to check
+ * @return (Date) the corrected date
+ */
+ _daylightSavingAdjust: function(date) {
+ if (!date) {
+ return null;
+ }
+ date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
+ return date;
+ },
+
+ /* Set the date(s) directly. */
+ _setDate: function(inst, date, noChange) {
+ var clear = !date,
+ origMonth = inst.selectedMonth,
+ origYear = inst.selectedYear,
+ newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
+
+ inst.selectedDay = inst.currentDay = newDate.getDate();
+ inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
+ inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
+ if ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) {
+ this._notifyChange(inst);
+ }
+ this._adjustInstDate(inst);
+ if (inst.input) {
+ inst.input.val(clear ? "" : this._formatDate(inst));
+ }
+ },
+
+ /* Retrieve the date(s) directly. */
+ _getDate: function(inst) {
+ var startDate = (!inst.currentYear || (inst.input && inst.input.val() === "") ? null :
+ this._daylightSavingAdjust(new Date(
+ inst.currentYear, inst.currentMonth, inst.currentDay)));
+ return startDate;
+ },
+
+ /* Attach the onxxx handlers. These are declared statically so
+ * they work with static code transformers like Caja.
+ */
+ _attachHandlers: function(inst) {
+ var stepMonths = this._get(inst, "stepMonths"),
+ id = "#" + inst.id.replace( /\\\\/g, "\\" );
+ inst.dpDiv.find("[data-handler]").map(function () {
+ var handler = {
+ prev: function () {
+ $.datepicker._adjustDate(id, -stepMonths, "M");
+ },
+ next: function () {
+ $.datepicker._adjustDate(id, +stepMonths, "M");
+ },
+ hide: function () {
+ $.datepicker._hideDatepicker();
+ },
+ today: function () {
+ $.datepicker._gotoToday(id);
+ },
+ selectDay: function () {
+ $.datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this);
+ return false;
+ },
+ selectMonth: function () {
+ $.datepicker._selectMonthYear(id, this, "M");
+ return false;
+ },
+ selectYear: function () {
+ $.datepicker._selectMonthYear(id, this, "Y");
+ return false;
+ }
+ };
+ $(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]);
+ });
+ },
+
+ /* Generate the HTML for the current state of the date picker. */
+ _generateHTML: function(inst) {
+ var maxDraw, prevText, prev, nextText, next, currentText, gotoDate,
+ controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,
+ monthNames, monthNamesShort, beforeShowDay, showOtherMonths,
+ selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,
+ cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,
+ printDate, dRow, tbody, daySettings, otherMonth, unselectable,
+ tempDate = new Date(),
+ today = this._daylightSavingAdjust(
+ new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time
+ isRTL = this._get(inst, "isRTL"),
+ showButtonPanel = this._get(inst, "showButtonPanel"),
+ hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"),
+ navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"),
+ numMonths = this._getNumberOfMonths(inst),
+ showCurrentAtPos = this._get(inst, "showCurrentAtPos"),
+ stepMonths = this._get(inst, "stepMonths"),
+ isMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1),
+ currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
+ new Date(inst.currentYear, inst.currentMonth, inst.currentDay))),
+ minDate = this._getMinMaxDate(inst, "min"),
+ maxDate = this._getMinMaxDate(inst, "max"),
+ drawMonth = inst.drawMonth - showCurrentAtPos,
+ drawYear = inst.drawYear;
+
+ if (drawMonth < 0) {
+ drawMonth += 12;
+ drawYear--;
+ }
+ if (maxDate) {
+ maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
+ maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
+ maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
+ while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
+ drawMonth--;
+ if (drawMonth < 0) {
+ drawMonth = 11;
+ drawYear--;
+ }
+ }
+ }
+ inst.drawMonth = drawMonth;
+ inst.drawYear = drawYear;
+
+ prevText = this._get(inst, "prevText");
+ prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
+ this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
+ this._getFormatConfig(inst)));
+
+ prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
+ "<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" +
+ " title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>" :
+ (hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+ prevText +"'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>"));
+
+ nextText = this._get(inst, "nextText");
+ nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
+ this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
+ this._getFormatConfig(inst)));
+
+ next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
+ "<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" +
+ " title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>" :
+ (hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+ nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>"));
+
+ currentText = this._get(inst, "currentText");
+ gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today);
+ currentText = (!navigationAsDateFormat ? currentText :
+ this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
+
+ controls = (!inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" +
+ this._get(inst, "closeText") + "</button>" : "");
+
+ buttonPanel = (showButtonPanel) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (isRTL ? controls : "") +
+ (this._isInRange(inst, gotoDate) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" +
+ ">" + currentText + "</button>" : "") + (isRTL ? "" : controls) + "</div>" : "";
+
+ firstDay = parseInt(this._get(inst, "firstDay"),10);
+ firstDay = (isNaN(firstDay) ? 0 : firstDay);
+
+ showWeek = this._get(inst, "showWeek");
+ dayNames = this._get(inst, "dayNames");
+ dayNamesMin = this._get(inst, "dayNamesMin");
+ monthNames = this._get(inst, "monthNames");
+ monthNamesShort = this._get(inst, "monthNamesShort");
+ beforeShowDay = this._get(inst, "beforeShowDay");
+ showOtherMonths = this._get(inst, "showOtherMonths");
+ selectOtherMonths = this._get(inst, "selectOtherMonths");
+ defaultDate = this._getDefaultDate(inst);
+ html = "";
+ dow;
+ for (row = 0; row < numMonths[0]; row++) {
+ group = "";
+ this.maxRows = 4;
+ for (col = 0; col < numMonths[1]; col++) {
+ selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
+ cornerClass = " ui-corner-all";
+ calender = "";
+ if (isMultiMonth) {
+ calender += "<div class='ui-datepicker-group";
+ if (numMonths[1] > 1) {
+ switch (col) {
+ case 0: calender += " ui-datepicker-group-first";
+ cornerClass = " ui-corner-" + (isRTL ? "right" : "left"); break;
+ case numMonths[1]-1: calender += " ui-datepicker-group-last";
+ cornerClass = " ui-corner-" + (isRTL ? "left" : "right"); break;
+ default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break;
+ }
+ }
+ calender += "'>";
+ }
+ calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
+ (/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") +
+ (/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") +
+ this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
+ row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
+ "</div><table class='ui-datepicker-calendar'><thead>" +
+ "<tr>";
+ thead = (showWeek ? "<th class='ui-datepicker-week-col'>" + this._get(inst, "weekHeader") + "</th>" : "");
+ for (dow = 0; dow < 7; dow++) { // days of the week
+ day = (dow + firstDay) % 7;
+ thead += "<th scope='col'" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" +
+ "<span title='" + dayNames[day] + "'>" + dayNamesMin[day] + "</span></th>";
+ }
+ calender += thead + "</tr></thead><tbody>";
+ daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
+ if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) {
+ inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
+ }
+ leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
+ curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
+ numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
+ this.maxRows = numRows;
+ printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
+ for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows
+ calender += "<tr>";
+ tbody = (!showWeek ? "" : "<td class='ui-datepicker-week-col'>" +
+ this._get(inst, "calculateWeek")(printDate) + "</td>");
+ for (dow = 0; dow < 7; dow++) { // create date picker days
+ daySettings = (beforeShowDay ?
+ beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, ""]);
+ otherMonth = (printDate.getMonth() !== drawMonth);
+ unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
+ (minDate && printDate < minDate) || (maxDate && printDate > maxDate);
+ tbody += "<td class='" +
+ ((dow + firstDay + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + // highlight weekends
+ (otherMonth ? " ui-datepicker-other-month" : "") + // highlight days from other months
+ ((printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent) || // user pressed key
+ (defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ?
+ // or defaultDate is current printedDate and defaultDate is selectedDate
+ " " + this._dayOverClass : "") + // highlight selected day
+ (unselectable ? " " + this._unselectableClass + " ui-state-disabled": "") + // highlight unselectable days
+ (otherMonth && !showOtherMonths ? "" : " " + daySettings[1] + // highlight custom dates
+ (printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "") + // highlight selected day
+ (printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "")) + "'" + // highlight today (if different)
+ ((!otherMonth || showOtherMonths) && daySettings[2] ? " title='" + daySettings[2].replace(/'/g, "&#39;") + "'" : "") + // cell title
+ (unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'") + ">" + // actions
+ (otherMonth && !showOtherMonths ? "&#xa0;" : // display for other months
+ (unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" +
+ (printDate.getTime() === today.getTime() ? " ui-state-highlight" : "") +
+ (printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "") + // highlight selected day
+ (otherMonth ? " ui-priority-secondary" : "") + // distinguish dates from other months
+ "' href='#'>" + printDate.getDate() + "</a>")) + "</td>"; // display selectable date
+ printDate.setDate(printDate.getDate() + 1);
+ printDate = this._daylightSavingAdjust(printDate);
+ }
+ calender += tbody + "</tr>";
+ }
+ drawMonth++;
+ if (drawMonth > 11) {
+ drawMonth = 0;
+ drawYear++;
+ }
+ calender += "</tbody></table>" + (isMultiMonth ? "</div>" +
+ ((numMonths[0] > 0 && col === numMonths[1]-1) ? "<div class='ui-datepicker-row-break'></div>" : "") : "");
+ group += calender;
+ }
+ html += group;
+ }
+ html += buttonPanel;
+ inst._keyEvent = false;
+ return html;
+ },
+
+ /* Generate the month and year header. */
+ _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
+ secondary, monthNames, monthNamesShort) {
+
+ var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,
+ changeMonth = this._get(inst, "changeMonth"),
+ changeYear = this._get(inst, "changeYear"),
+ showMonthAfterYear = this._get(inst, "showMonthAfterYear"),
+ html = "<div class='ui-datepicker-title'>",
+ monthHtml = "";
+
+ // month selection
+ if (secondary || !changeMonth) {
+ monthHtml += "<span class='ui-datepicker-month'>" + monthNames[drawMonth] + "</span>";
+ } else {
+ inMinYear = (minDate && minDate.getFullYear() === drawYear);
+ inMaxYear = (maxDate && maxDate.getFullYear() === drawYear);
+ monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>";
+ for ( month = 0; month < 12; month++) {
+ if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) {
+ monthHtml += "<option value='" + month + "'" +
+ (month === drawMonth ? " selected='selected'" : "") +
+ ">" + monthNamesShort[month] + "</option>";
+ }
+ }
+ monthHtml += "</select>";
+ }
+
+ if (!showMonthAfterYear) {
+ html += monthHtml + (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "");
+ }
+
+ // year selection
+ if ( !inst.yearshtml ) {
+ inst.yearshtml = "";
+ if (secondary || !changeYear) {
+ html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
+ } else {
+ // determine range of years to display
+ years = this._get(inst, "yearRange").split(":");
+ thisYear = new Date().getFullYear();
+ determineYear = function(value) {
+ var year = (value.match(/c[+\-].*/) ? drawYear + parseInt(value.substring(1), 10) :
+ (value.match(/[+\-].*/) ? thisYear + parseInt(value, 10) :
+ parseInt(value, 10)));
+ return (isNaN(year) ? thisYear : year);
+ };
+ year = determineYear(years[0]);
+ endYear = Math.max(year, determineYear(years[1] || ""));
+ year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
+ endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
+ inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";
+ for (; year <= endYear; year++) {
+ inst.yearshtml += "<option value='" + year + "'" +
+ (year === drawYear ? " selected='selected'" : "") +
+ ">" + year + "</option>";
+ }
+ inst.yearshtml += "</select>";
+
+ html += inst.yearshtml;
+ inst.yearshtml = null;
+ }
+ }
+
+ html += this._get(inst, "yearSuffix");
+ if (showMonthAfterYear) {
+ html += (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "") + monthHtml;
+ }
+ html += "</div>"; // Close datepicker_header
+ return html;
+ },
+
+ /* Adjust one of the date sub-fields. */
+ _adjustInstDate: function(inst, offset, period) {
+ var year = inst.drawYear + (period === "Y" ? offset : 0),
+ month = inst.drawMonth + (period === "M" ? offset : 0),
+ day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === "D" ? offset : 0),
+ date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day)));
+
+ inst.selectedDay = date.getDate();
+ inst.drawMonth = inst.selectedMonth = date.getMonth();
+ inst.drawYear = inst.selectedYear = date.getFullYear();
+ if (period === "M" || period === "Y") {
+ this._notifyChange(inst);
+ }
+ },
+
+ /* Ensure a date is within any min/max bounds. */
+ _restrictMinMax: function(inst, date) {
+ var minDate = this._getMinMaxDate(inst, "min"),
+ maxDate = this._getMinMaxDate(inst, "max"),
+ newDate = (minDate && date < minDate ? minDate : date);
+ return (maxDate && newDate > maxDate ? maxDate : newDate);
+ },
+
+ /* Notify change of month/year. */
+ _notifyChange: function(inst) {
+ var onChange = this._get(inst, "onChangeMonthYear");
+ if (onChange) {
+ onChange.apply((inst.input ? inst.input[0] : null),
+ [inst.selectedYear, inst.selectedMonth + 1, inst]);
+ }
+ },
+
+ /* Determine the number of months to show. */
+ _getNumberOfMonths: function(inst) {
+ var numMonths = this._get(inst, "numberOfMonths");
+ return (numMonths == null ? [1, 1] : (typeof numMonths === "number" ? [1, numMonths] : numMonths));
+ },
+
+ /* Determine the current maximum date - ensure no time components are set. */
+ _getMinMaxDate: function(inst, minMax) {
+ return this._determineDate(inst, this._get(inst, minMax + "Date"), null);
+ },
+
+ /* Find the number of days in a given month. */
+ _getDaysInMonth: function(year, month) {
+ return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
+ },
+
+ /* Find the day of the week of the first of a month. */
+ _getFirstDayOfMonth: function(year, month) {
+ return new Date(year, month, 1).getDay();
+ },
+
+ /* Determines if we should allow a "next/prev" month display change. */
+ _canAdjustMonth: function(inst, offset, curYear, curMonth) {
+ var numMonths = this._getNumberOfMonths(inst),
+ date = this._daylightSavingAdjust(new Date(curYear,
+ curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
+
+ if (offset < 0) {
+ date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
+ }
+ return this._isInRange(inst, date);
+ },
+
+ /* Is the given date in the accepted range? */
+ _isInRange: function(inst, date) {
+ var yearSplit, currentYear,
+ minDate = this._getMinMaxDate(inst, "min"),
+ maxDate = this._getMinMaxDate(inst, "max"),
+ minYear = null,
+ maxYear = null,
+ years = this._get(inst, "yearRange");
+ if (years){
+ yearSplit = years.split(":");
+ currentYear = new Date().getFullYear();
+ minYear = parseInt(yearSplit[0], 10);
+ maxYear = parseInt(yearSplit[1], 10);
+ if ( yearSplit[0].match(/[+\-].*/) ) {
+ minYear += currentYear;
+ }
+ if ( yearSplit[1].match(/[+\-].*/) ) {
+ maxYear += currentYear;
+ }
+ }
+
+ return ((!minDate || date.getTime() >= minDate.getTime()) &&
+ (!maxDate || date.getTime() <= maxDate.getTime()) &&
+ (!minYear || date.getFullYear() >= minYear) &&
+ (!maxYear || date.getFullYear() <= maxYear));
+ },
+
+ /* Provide the configuration settings for formatting/parsing. */
+ _getFormatConfig: function(inst) {
+ var shortYearCutoff = this._get(inst, "shortYearCutoff");
+ shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff :
+ new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
+ return {shortYearCutoff: shortYearCutoff,
+ dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"),
+ monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")};
+ },
+
+ /* Format the given date for display. */
+ _formatDate: function(inst, day, month, year) {
+ if (!day) {
+ inst.currentDay = inst.selectedDay;
+ inst.currentMonth = inst.selectedMonth;
+ inst.currentYear = inst.selectedYear;
+ }
+ var date = (day ? (typeof day === "object" ? day :
+ this._daylightSavingAdjust(new Date(year, month, day))) :
+ this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
+ return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst));
+ }
+});
+
+/*
+ * Bind hover events for datepicker elements.
+ * Done via delegate so the binding only occurs once in the lifetime of the parent div.
+ * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
+ */
+function datepicker_bindHover(dpDiv) {
+ var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
+ return dpDiv.delegate(selector, "mouseout", function() {
+ $(this).removeClass("ui-state-hover");
+ if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+ $(this).removeClass("ui-datepicker-prev-hover");
+ }
+ if (this.className.indexOf("ui-datepicker-next") !== -1) {
+ $(this).removeClass("ui-datepicker-next-hover");
+ }
+ })
+ .delegate( selector, "mouseover", datepicker_handleMouseover );
+}
+
+function datepicker_handleMouseover() {
+ if (!$.datepicker._isDisabledDatepicker( datepicker_instActive.inline? datepicker_instActive.dpDiv.parent()[0] : datepicker_instActive.input[0])) {
+ $(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
+ $(this).addClass("ui-state-hover");
+ if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+ $(this).addClass("ui-datepicker-prev-hover");
+ }
+ if (this.className.indexOf("ui-datepicker-next") !== -1) {
+ $(this).addClass("ui-datepicker-next-hover");
+ }
+ }
+}
+
+/* jQuery extend now ignores nulls! */
+function datepicker_extendRemove(target, props) {
+ $.extend(target, props);
+ for (var name in props) {
+ if (props[name] == null) {
+ target[name] = props[name];
+ }
+ }
+ return target;
+}
+
+/* Invoke the datepicker functionality.
+ @param options string - a command, optionally followed by additional parameters or
+ Object - settings for attaching new datepicker functionality
+ @return jQuery object */
+$.fn.datepicker = function(options){
+
+ /* Verify an empty collection wasn't passed - Fixes #6976 */
+ if ( !this.length ) {
+ return this;
+ }
+
+ /* Initialise the date picker. */
+ if (!$.datepicker.initialized) {
+ $(document).mousedown($.datepicker._checkExternalClick);
+ $.datepicker.initialized = true;
+ }
+
+ /* Append datepicker main container to body if not exist. */
+ if ($("#"+$.datepicker._mainDivId).length === 0) {
+ $("body").append($.datepicker.dpDiv);
+ }
+
+ var otherArgs = Array.prototype.slice.call(arguments, 1);
+ if (typeof options === "string" && (options === "isDisabled" || options === "getDate" || options === "widget")) {
+ return $.datepicker["_" + options + "Datepicker"].
+ apply($.datepicker, [this[0]].concat(otherArgs));
+ }
+ if (options === "option" && arguments.length === 2 && typeof arguments[1] === "string") {
+ return $.datepicker["_" + options + "Datepicker"].
+ apply($.datepicker, [this[0]].concat(otherArgs));
+ }
+ return this.each(function() {
+ typeof options === "string" ?
+ $.datepicker["_" + options + "Datepicker"].
+ apply($.datepicker, [this].concat(otherArgs)) :
+ $.datepicker._attachDatepicker(this, options);
+ });
+};
+
+$.datepicker = new Datepicker(); // singleton instance
+$.datepicker.initialized = false;
+$.datepicker.uuid = new Date().getTime();
+$.datepicker.version = "1.11.3";
+
+var datepicker = $.datepicker;
+
+
+/*!
+ * jQuery UI Dialog 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/dialog/
+ */
+
+
+var dialog = $.widget( "ui.dialog", {
+ version: "1.11.3",
+ options: {
+ appendTo: "body",
+ autoOpen: true,
+ buttons: [],
+ closeOnEscape: true,
+ closeText: "Close",
+ dialogClass: "",
+ draggable: true,
+ hide: null,
+ height: "auto",
+ maxHeight: null,
+ maxWidth: null,
+ minHeight: 150,
+ minWidth: 150,
+ modal: false,
+ position: {
+ my: "center",
+ at: "center",
+ of: window,
+ collision: "fit",
+ // Ensure the titlebar is always visible
+ using: function( pos ) {
+ var topOffset = $( this ).css( pos ).offset().top;
+ if ( topOffset < 0 ) {
+ $( this ).css( "top", pos.top - topOffset );
+ }
+ }
+ },
+ resizable: true,
+ show: null,
+ title: null,
+ width: 300,
+
+ // callbacks
+ beforeClose: null,
+ close: null,
+ drag: null,
+ dragStart: null,
+ dragStop: null,
+ focus: null,
+ open: null,
+ resize: null,
+ resizeStart: null,
+ resizeStop: null
+ },
+
+ sizeRelatedOptions: {
+ buttons: true,
+ height: true,
+ maxHeight: true,
+ maxWidth: true,
+ minHeight: true,
+ minWidth: true,
+ width: true
+ },
+
+ resizableRelatedOptions: {
+ maxHeight: true,
+ maxWidth: true,
+ minHeight: true,
+ minWidth: true
+ },
+
+ _create: function() {
+ this.originalCss = {
+ display: this.element[ 0 ].style.display,
+ width: this.element[ 0 ].style.width,
+ minHeight: this.element[ 0 ].style.minHeight,
+ maxHeight: this.element[ 0 ].style.maxHeight,
+ height: this.element[ 0 ].style.height
+ };
+ this.originalPosition = {
+ parent: this.element.parent(),
+ index: this.element.parent().children().index( this.element )
+ };
+ this.originalTitle = this.element.attr( "title" );
+ this.options.title = this.options.title || this.originalTitle;
+
+ this._createWrapper();
+
+ this.element
+ .show()
+ .removeAttr( "title" )
+ .addClass( "ui-dialog-content ui-widget-content" )
+ .appendTo( this.uiDialog );
+
+ this._createTitlebar();
+ this._createButtonPane();
+
+ if ( this.options.draggable && $.fn.draggable ) {
+ this._makeDraggable();
+ }
+ if ( this.options.resizable && $.fn.resizable ) {
+ this._makeResizable();
+ }
+
+ this._isOpen = false;
+
+ this._trackFocus();
+ },
+
+ _init: function() {
+ if ( this.options.autoOpen ) {
+ this.open();
+ }
+ },
+
+ _appendTo: function() {
+ var element = this.options.appendTo;
+ if ( element && (element.jquery || element.nodeType) ) {
+ return $( element );
+ }
+ return this.document.find( element || "body" ).eq( 0 );
+ },
+
+ _destroy: function() {
+ var next,
+ originalPosition = this.originalPosition;
+
+ this._destroyOverlay();
+
+ this.element
+ .removeUniqueId()
+ .removeClass( "ui-dialog-content ui-widget-content" )
+ .css( this.originalCss )
+ // Without detaching first, the following becomes really slow
+ .detach();
+
+ this.uiDialog.stop( true, true ).remove();
+
+ if ( this.originalTitle ) {
+ this.element.attr( "title", this.originalTitle );
+ }
+
+ next = originalPosition.parent.children().eq( originalPosition.index );
+ // Don't try to place the dialog next to itself (#8613)
+ if ( next.length && next[ 0 ] !== this.element[ 0 ] ) {
+ next.before( this.element );
+ } else {
+ originalPosition.parent.append( this.element );
+ }
+ },
+
+ widget: function() {
+ return this.uiDialog;
+ },
+
+ disable: $.noop,
+ enable: $.noop,
+
+ close: function( event ) {
+ var activeElement,
+ that = this;
+
+ if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
+ return;
+ }
+
+ this._isOpen = false;
+ this._focusedElement = null;
+ this._destroyOverlay();
+ this._untrackInstance();
+
+ if ( !this.opener.filter( ":focusable" ).focus().length ) {
+
+ // support: IE9
+ // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
+ try {
+ activeElement = this.document[ 0 ].activeElement;
+
+ // Support: IE9, IE10
+ // If the <body> is blurred, IE will switch windows, see #4520
+ if ( activeElement && activeElement.nodeName.toLowerCase() !== "body" ) {
+
+ // Hiding a focused element doesn't trigger blur in WebKit
+ // so in case we have nothing to focus on, explicitly blur the active element
+ // https://bugs.webkit.org/show_bug.cgi?id=47182
+ $( activeElement ).blur();
+ }
+ } catch ( error ) {}
+ }
+
+ this._hide( this.uiDialog, this.options.hide, function() {
+ that._trigger( "close", event );
+ });
+ },
+
+ isOpen: function() {
+ return this._isOpen;
+ },
+
+ moveToTop: function() {
+ this._moveToTop();
+ },
+
+ _moveToTop: function( event, silent ) {
+ var moved = false,
+ zIndicies = this.uiDialog.siblings( ".ui-front:visible" ).map(function() {
+ return +$( this ).css( "z-index" );
+ }).get(),
+ zIndexMax = Math.max.apply( null, zIndicies );
+
+ if ( zIndexMax >= +this.uiDialog.css( "z-index" ) ) {
+ this.uiDialog.css( "z-index", zIndexMax + 1 );
+ moved = true;
+ }
+
+ if ( moved && !silent ) {
+ this._trigger( "focus", event );
+ }
+ return moved;
+ },
+
+ open: function() {
+ var that = this;
+ if ( this._isOpen ) {
+ if ( this._moveToTop() ) {
+ this._focusTabbable();
+ }
+ return;
+ }
+
+ this._isOpen = true;
+ this.opener = $( this.document[ 0 ].activeElement );
+
+ this._size();
+ this._position();
+ this._createOverlay();
+ this._moveToTop( null, true );
+
+ // Ensure the overlay is moved to the top with the dialog, but only when
+ // opening. The overlay shouldn't move after the dialog is open so that
+ // modeless dialogs opened after the modal dialog stack properly.
+ if ( this.overlay ) {
+ this.overlay.css( "z-index", this.uiDialog.css( "z-index" ) - 1 );
+ }
+
+ this._show( this.uiDialog, this.options.show, function() {
+ that._focusTabbable();
+ that._trigger( "focus" );
+ });
+
+ // Track the dialog immediately upon openening in case a focus event
+ // somehow occurs outside of the dialog before an element inside the
+ // dialog is focused (#10152)
+ this._makeFocusTarget();
+
+ this._trigger( "open" );
+ },
+
+ _focusTabbable: function() {
+ // Set focus to the first match:
+ // 1. An element that was focused previously
+ // 2. First element inside the dialog matching [autofocus]
+ // 3. Tabbable element inside the content element
+ // 4. Tabbable element inside the buttonpane
+ // 5. The close button
+ // 6. The dialog itself
+ var hasFocus = this._focusedElement;
+ if ( !hasFocus ) {
+ hasFocus = this.element.find( "[autofocus]" );
+ }
+ if ( !hasFocus.length ) {
+ hasFocus = this.element.find( ":tabbable" );
+ }
+ if ( !hasFocus.length ) {
+ hasFocus = this.uiDialogButtonPane.find( ":tabbable" );
+ }
+ if ( !hasFocus.length ) {
+ hasFocus = this.uiDialogTitlebarClose.filter( ":tabbable" );
+ }
+ if ( !hasFocus.length ) {
+ hasFocus = this.uiDialog;
+ }
+ hasFocus.eq( 0 ).focus();
+ },
+
+ _keepFocus: function( event ) {
+ function checkFocus() {
+ var activeElement = this.document[0].activeElement,
+ isActive = this.uiDialog[0] === activeElement ||
+ $.contains( this.uiDialog[0], activeElement );
+ if ( !isActive ) {
+ this._focusTabbable();
+ }
+ }
+ event.preventDefault();
+ checkFocus.call( this );
+ // support: IE
+ // IE <= 8 doesn't prevent moving focus even with event.preventDefault()
+ // so we check again later
+ this._delay( checkFocus );
+ },
+
+ _createWrapper: function() {
+ this.uiDialog = $("<div>")
+ .addClass( "ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " +
+ this.options.dialogClass )
+ .hide()
+ .attr({
+ // Setting tabIndex makes the div focusable
+ tabIndex: -1,
+ role: "dialog"
+ })
+ .appendTo( this._appendTo() );
+
+ this._on( this.uiDialog, {
+ keydown: function( event ) {
+ if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
+ event.keyCode === $.ui.keyCode.ESCAPE ) {
+ event.preventDefault();
+ this.close( event );
+ return;
+ }
+
+ // prevent tabbing out of dialogs
+ if ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) {
+ return;
+ }
+ var tabbables = this.uiDialog.find( ":tabbable" ),
+ first = tabbables.filter( ":first" ),
+ last = tabbables.filter( ":last" );
+
+ if ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) {
+ this._delay(function() {
+ first.focus();
+ });
+ event.preventDefault();
+ } else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) {
+ this._delay(function() {
+ last.focus();
+ });
+ event.preventDefault();
+ }
+ },
+ mousedown: function( event ) {
+ if ( this._moveToTop( event ) ) {
+ this._focusTabbable();
+ }
+ }
+ });
+
+ // We assume that any existing aria-describedby attribute means
+ // that the dialog content is marked up properly
+ // otherwise we brute force the content as the description
+ if ( !this.element.find( "[aria-describedby]" ).length ) {
+ this.uiDialog.attr({
+ "aria-describedby": this.element.uniqueId().attr( "id" )
+ });
+ }
+ },
+
+ _createTitlebar: function() {
+ var uiDialogTitle;
+
+ this.uiDialogTitlebar = $( "<div>" )
+ .addClass( "ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix" )
+ .prependTo( this.uiDialog );
+ this._on( this.uiDialogTitlebar, {
+ mousedown: function( event ) {
+ // Don't prevent click on close button (#8838)
+ // Focusing a dialog that is partially scrolled out of view
+ // causes the browser to scroll it into view, preventing the click event
+ if ( !$( event.target ).closest( ".ui-dialog-titlebar-close" ) ) {
+ // Dialog isn't getting focus when dragging (#8063)
+ this.uiDialog.focus();
+ }
+ }
+ });
+
+ // support: IE
+ // Use type="button" to prevent enter keypresses in textboxes from closing the
+ // dialog in IE (#9312)
+ this.uiDialogTitlebarClose = $( "<button type='button'></button>" )
+ .button({
+ label: this.options.closeText,
+ icons: {
+ primary: "ui-icon-closethick"
+ },
+ text: false
+ })
+ .addClass( "ui-dialog-titlebar-close" )
+ .appendTo( this.uiDialogTitlebar );
+ this._on( this.uiDialogTitlebarClose, {
+ click: function( event ) {
+ event.preventDefault();
+ this.close( event );
+ }
+ });
+
+ uiDialogTitle = $( "<span>" )
+ .uniqueId()
+ .addClass( "ui-dialog-title" )
+ .prependTo( this.uiDialogTitlebar );
+ this._title( uiDialogTitle );
+
+ this.uiDialog.attr({
+ "aria-labelledby": uiDialogTitle.attr( "id" )
+ });
+ },
+
+ _title: function( title ) {
+ if ( !this.options.title ) {
+ title.html( "&#160;" );
+ }
+ title.text( this.options.title );
+ },
+
+ _createButtonPane: function() {
+ this.uiDialogButtonPane = $( "<div>" )
+ .addClass( "ui-dialog-buttonpane ui-widget-content ui-helper-clearfix" );
+
+ this.uiButtonSet = $( "<div>" )
+ .addClass( "ui-dialog-buttonset" )
+ .appendTo( this.uiDialogButtonPane );
+
+ this._createButtons();
+ },
+
+ _createButtons: function() {
+ var that = this,
+ buttons = this.options.buttons;
+
+ // if we already have a button pane, remove it
+ this.uiDialogButtonPane.remove();
+ this.uiButtonSet.empty();
+
+ if ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) {
+ this.uiDialog.removeClass( "ui-dialog-buttons" );
+ return;
+ }
+
+ $.each( buttons, function( name, props ) {
+ var click, buttonOptions;
+ props = $.isFunction( props ) ?
+ { click: props, text: name } :
+ props;
+ // Default to a non-submitting button
+ props = $.extend( { type: "button" }, props );
+ // Change the context for the click callback to be the main element
+ click = props.click;
+ props.click = function() {
+ click.apply( that.element[ 0 ], arguments );
+ };
+ buttonOptions = {
+ icons: props.icons,
+ text: props.showText
+ };
+ delete props.icons;
+ delete props.showText;
+ $( "<button></button>", props )
+ .button( buttonOptions )
+ .appendTo( that.uiButtonSet );
+ });
+ this.uiDialog.addClass( "ui-dialog-buttons" );
+ this.uiDialogButtonPane.appendTo( this.uiDialog );
+ },
+
+ _makeDraggable: function() {
+ var that = this,
+ options = this.options;
+
+ function filteredUi( ui ) {
+ return {
+ position: ui.position,
+ offset: ui.offset
+ };
+ }
+
+ this.uiDialog.draggable({
+ cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
+ handle: ".ui-dialog-titlebar",
+ containment: "document",
+ start: function( event, ui ) {
+ $( this ).addClass( "ui-dialog-dragging" );
+ that._blockFrames();
+ that._trigger( "dragStart", event, filteredUi( ui ) );
+ },
+ drag: function( event, ui ) {
+ that._trigger( "drag", event, filteredUi( ui ) );
+ },
+ stop: function( event, ui ) {
+ var left = ui.offset.left - that.document.scrollLeft(),
+ top = ui.offset.top - that.document.scrollTop();
+
+ options.position = {
+ my: "left top",
+ at: "left" + (left >= 0 ? "+" : "") + left + " " +
+ "top" + (top >= 0 ? "+" : "") + top,
+ of: that.window
+ };
+ $( this ).removeClass( "ui-dialog-dragging" );
+ that._unblockFrames();
+ that._trigger( "dragStop", event, filteredUi( ui ) );
+ }
+ });
+ },
+
+ _makeResizable: function() {
+ var that = this,
+ options = this.options,
+ handles = options.resizable,
+ // .ui-resizable has position: relative defined in the stylesheet
+ // but dialogs have to use absolute or fixed positioning
+ position = this.uiDialog.css("position"),
+ resizeHandles = typeof handles === "string" ?
+ handles :
+ "n,e,s,w,se,sw,ne,nw";
+
+ function filteredUi( ui ) {
+ return {
+ originalPosition: ui.originalPosition,
+ originalSize: ui.originalSize,
+ position: ui.position,
+ size: ui.size
+ };
+ }
+
+ this.uiDialog.resizable({
+ cancel: ".ui-dialog-content",
+ containment: "document",
+ alsoResize: this.element,
+ maxWidth: options.maxWidth,
+ maxHeight: options.maxHeight,
+ minWidth: options.minWidth,
+ minHeight: this._minHeight(),
+ handles: resizeHandles,
+ start: function( event, ui ) {
+ $( this ).addClass( "ui-dialog-resizing" );
+ that._blockFrames();
+ that._trigger( "resizeStart", event, filteredUi( ui ) );
+ },
+ resize: function( event, ui ) {
+ that._trigger( "resize", event, filteredUi( ui ) );
+ },
+ stop: function( event, ui ) {
+ var offset = that.uiDialog.offset(),
+ left = offset.left - that.document.scrollLeft(),
+ top = offset.top - that.document.scrollTop();
+
+ options.height = that.uiDialog.height();
+ options.width = that.uiDialog.width();
+ options.position = {
+ my: "left top",
+ at: "left" + (left >= 0 ? "+" : "") + left + " " +
+ "top" + (top >= 0 ? "+" : "") + top,
+ of: that.window
+ };
+ $( this ).removeClass( "ui-dialog-resizing" );
+ that._unblockFrames();
+ that._trigger( "resizeStop", event, filteredUi( ui ) );
+ }
+ })
+ .css( "position", position );
+ },
+
+ _trackFocus: function() {
+ this._on( this.widget(), {
+ focusin: function( event ) {
+ this._makeFocusTarget();
+ this._focusedElement = $( event.target );
+ }
+ });
+ },
+
+ _makeFocusTarget: function() {
+ this._untrackInstance();
+ this._trackingInstances().unshift( this );
+ },
+
+ _untrackInstance: function() {
+ var instances = this._trackingInstances(),
+ exists = $.inArray( this, instances );
+ if ( exists !== -1 ) {
+ instances.splice( exists, 1 );
+ }
+ },
+
+ _trackingInstances: function() {
+ var instances = this.document.data( "ui-dialog-instances" );
+ if ( !instances ) {
+ instances = [];
+ this.document.data( "ui-dialog-instances", instances );
+ }
+ return instances;
+ },
+
+ _minHeight: function() {
+ var options = this.options;
+
+ return options.height === "auto" ?
+ options.minHeight :
+ Math.min( options.minHeight, options.height );
+ },
+
+ _position: function() {
+ // Need to show the dialog to get the actual offset in the position plugin
+ var isVisible = this.uiDialog.is( ":visible" );
+ if ( !isVisible ) {
+ this.uiDialog.show();
+ }
+ this.uiDialog.position( this.options.position );
+ if ( !isVisible ) {
+ this.uiDialog.hide();
+ }
+ },
+
+ _setOptions: function( options ) {
+ var that = this,
+ resize = false,
+ resizableOptions = {};
+
+ $.each( options, function( key, value ) {
+ that._setOption( key, value );
+
+ if ( key in that.sizeRelatedOptions ) {
+ resize = true;
+ }
+ if ( key in that.resizableRelatedOptions ) {
+ resizableOptions[ key ] = value;
+ }
+ });
+
+ if ( resize ) {
+ this._size();
+ this._position();
+ }
+ if ( this.uiDialog.is( ":data(ui-resizable)" ) ) {
+ this.uiDialog.resizable( "option", resizableOptions );
+ }
+ },
+
+ _setOption: function( key, value ) {
+ var isDraggable, isResizable,
+ uiDialog = this.uiDialog;
+
+ if ( key === "dialogClass" ) {
+ uiDialog
+ .removeClass( this.options.dialogClass )
+ .addClass( value );
+ }
+
+ if ( key === "disabled" ) {
+ return;
+ }
+
+ this._super( key, value );
+
+ if ( key === "appendTo" ) {
+ this.uiDialog.appendTo( this._appendTo() );
+ }
+
+ if ( key === "buttons" ) {
+ this._createButtons();
+ }
+
+ if ( key === "closeText" ) {
+ this.uiDialogTitlebarClose.button({
+ // Ensure that we always pass a string
+ label: "" + value
+ });
+ }
+
+ if ( key === "draggable" ) {
+ isDraggable = uiDialog.is( ":data(ui-draggable)" );
+ if ( isDraggable && !value ) {
+ uiDialog.draggable( "destroy" );
+ }
+
+ if ( !isDraggable && value ) {
+ this._makeDraggable();
+ }
+ }
+
+ if ( key === "position" ) {
+ this._position();
+ }
+
+ if ( key === "resizable" ) {
+ // currently resizable, becoming non-resizable
+ isResizable = uiDialog.is( ":data(ui-resizable)" );
+ if ( isResizable && !value ) {
+ uiDialog.resizable( "destroy" );
+ }
+
+ // currently resizable, changing handles
+ if ( isResizable && typeof value === "string" ) {
+ uiDialog.resizable( "option", "handles", value );
+ }
+
+ // currently non-resizable, becoming resizable
+ if ( !isResizable && value !== false ) {
+ this._makeResizable();
+ }
+ }
+
+ if ( key === "title" ) {
+ this._title( this.uiDialogTitlebar.find( ".ui-dialog-title" ) );
+ }
+ },
+
+ _size: function() {
+ // If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
+ // divs will both have width and height set, so we need to reset them
+ var nonContentHeight, minContentHeight, maxContentHeight,
+ options = this.options;
+
+ // Reset content sizing
+ this.element.show().css({
+ width: "auto",
+ minHeight: 0,
+ maxHeight: "none",
+ height: 0
+ });
+
+ if ( options.minWidth > options.width ) {
+ options.width = options.minWidth;
+ }
+
+ // reset wrapper sizing
+ // determine the height of all the non-content elements
+ nonContentHeight = this.uiDialog.css({
+ height: "auto",
+ width: options.width
+ })
+ .outerHeight();
+ minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
+ maxContentHeight = typeof options.maxHeight === "number" ?
+ Math.max( 0, options.maxHeight - nonContentHeight ) :
+ "none";
+
+ if ( options.height === "auto" ) {
+ this.element.css({
+ minHeight: minContentHeight,
+ maxHeight: maxContentHeight,
+ height: "auto"
+ });
+ } else {
+ this.element.height( Math.max( 0, options.height - nonContentHeight ) );
+ }
+
+ if ( this.uiDialog.is( ":data(ui-resizable)" ) ) {
+ this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
+ }
+ },
+
+ _blockFrames: function() {
+ this.iframeBlocks = this.document.find( "iframe" ).map(function() {
+ var iframe = $( this );
+
+ return $( "<div>" )
+ .css({
+ position: "absolute",
+ width: iframe.outerWidth(),
+ height: iframe.outerHeight()
+ })
+ .appendTo( iframe.parent() )
+ .offset( iframe.offset() )[0];
+ });
+ },
+
+ _unblockFrames: function() {
+ if ( this.iframeBlocks ) {
+ this.iframeBlocks.remove();
+ delete this.iframeBlocks;
+ }
+ },
+
+ _allowInteraction: function( event ) {
+ if ( $( event.target ).closest( ".ui-dialog" ).length ) {
+ return true;
+ }
+
+ // TODO: Remove hack when datepicker implements
+ // the .ui-front logic (#8989)
+ return !!$( event.target ).closest( ".ui-datepicker" ).length;
+ },
+
+ _createOverlay: function() {
+ if ( !this.options.modal ) {
+ return;
+ }
+
+ // We use a delay in case the overlay is created from an
+ // event that we're going to be cancelling (#2804)
+ var isOpening = true;
+ this._delay(function() {
+ isOpening = false;
+ });
+
+ if ( !this.document.data( "ui-dialog-overlays" ) ) {
+
+ // Prevent use of anchors and inputs
+ // Using _on() for an event handler shared across many instances is
+ // safe because the dialogs stack and must be closed in reverse order
+ this._on( this.document, {
+ focusin: function( event ) {
+ if ( isOpening ) {
+ return;
+ }
+
+ if ( !this._allowInteraction( event ) ) {
+ event.preventDefault();
+ this._trackingInstances()[ 0 ]._focusTabbable();
+ }
+ }
+ });
+ }
+
+ this.overlay = $( "<div>" )
+ .addClass( "ui-widget-overlay ui-front" )
+ .appendTo( this._appendTo() );
+ this._on( this.overlay, {
+ mousedown: "_keepFocus"
+ });
+ this.document.data( "ui-dialog-overlays",
+ (this.document.data( "ui-dialog-overlays" ) || 0) + 1 );
+ },
+
+ _destroyOverlay: function() {
+ if ( !this.options.modal ) {
+ return;
+ }
+
+ if ( this.overlay ) {
+ var overlays = this.document.data( "ui-dialog-overlays" ) - 1;
+
+ if ( !overlays ) {
+ this.document
+ .unbind( "focusin" )
+ .removeData( "ui-dialog-overlays" );
+ } else {
+ this.document.data( "ui-dialog-overlays", overlays );
+ }
+
+ this.overlay.remove();
+ this.overlay = null;
+ }
+ }
+});
+
+
+/*!
+ * jQuery UI Progressbar 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/progressbar/
+ */
+
+
+var progressbar = $.widget( "ui.progressbar", {
+ version: "1.11.3",
+ options: {
+ max: 100,
+ value: 0,
+
+ change: null,
+ complete: null
+ },
+
+ min: 0,
+
+ _create: function() {
+ // Constrain initial value
+ this.oldValue = this.options.value = this._constrainedValue();
+
+ this.element
+ .addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+ .attr({
+ // Only set static values, aria-valuenow and aria-valuemax are
+ // set inside _refreshValue()
+ role: "progressbar",
+ "aria-valuemin": this.min
+ });
+
+ this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
+ .appendTo( this.element );
+
+ this._refreshValue();
+ },
+
+ _destroy: function() {
+ this.element
+ .removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-valuemin" )
+ .removeAttr( "aria-valuemax" )
+ .removeAttr( "aria-valuenow" );
+
+ this.valueDiv.remove();
+ },
+
+ value: function( newValue ) {
+ if ( newValue === undefined ) {
+ return this.options.value;
+ }
+
+ this.options.value = this._constrainedValue( newValue );
+ this._refreshValue();
+ },
+
+ _constrainedValue: function( newValue ) {
+ if ( newValue === undefined ) {
+ newValue = this.options.value;
+ }
+
+ this.indeterminate = newValue === false;
+
+ // sanitize value
+ if ( typeof newValue !== "number" ) {
+ newValue = 0;
+ }
+
+ return this.indeterminate ? false :
+ Math.min( this.options.max, Math.max( this.min, newValue ) );
+ },
+
+ _setOptions: function( options ) {
+ // Ensure "value" option is set after other values (like max)
+ var value = options.value;
+ delete options.value;
+
+ this._super( options );
+
+ this.options.value = this._constrainedValue( value );
+ this._refreshValue();
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "max" ) {
+ // Don't allow a max less than min
+ value = Math.max( this.min, value );
+ }
+ if ( key === "disabled" ) {
+ this.element
+ .toggleClass( "ui-state-disabled", !!value )
+ .attr( "aria-disabled", value );
+ }
+ this._super( key, value );
+ },
+
+ _percentage: function() {
+ return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
+ },
+
+ _refreshValue: function() {
+ var value = this.options.value,
+ percentage = this._percentage();
+
+ this.valueDiv
+ .toggle( this.indeterminate || value > this.min )
+ .toggleClass( "ui-corner-right", value === this.options.max )
+ .width( percentage.toFixed(0) + "%" );
+
+ this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate );
+
+ if ( this.indeterminate ) {
+ this.element.removeAttr( "aria-valuenow" );
+ if ( !this.overlayDiv ) {
+ this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv );
+ }
+ } else {
+ this.element.attr({
+ "aria-valuemax": this.options.max,
+ "aria-valuenow": value
+ });
+ if ( this.overlayDiv ) {
+ this.overlayDiv.remove();
+ this.overlayDiv = null;
+ }
+ }
+
+ if ( this.oldValue !== value ) {
+ this.oldValue = value;
+ this._trigger( "change" );
+ }
+ if ( value === this.options.max ) {
+ this._trigger( "complete" );
+ }
+ }
+});
+
+
+/*!
+ * jQuery UI Selectmenu 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/selectmenu
+ */
+
+
+var selectmenu = $.widget( "ui.selectmenu", {
+ version: "1.11.3",
+ defaultElement: "<select>",
+ options: {
+ appendTo: null,
+ disabled: null,
+ icons: {
+ button: "ui-icon-triangle-1-s"
+ },
+ position: {
+ my: "left top",
+ at: "left bottom",
+ collision: "none"
+ },
+ width: null,
+
+ // callbacks
+ change: null,
+ close: null,
+ focus: null,
+ open: null,
+ select: null
+ },
+
+ _create: function() {
+ var selectmenuId = this.element.uniqueId().attr( "id" );
+ this.ids = {
+ element: selectmenuId,
+ button: selectmenuId + "-button",
+ menu: selectmenuId + "-menu"
+ };
+
+ this._drawButton();
+ this._drawMenu();
+
+ if ( this.options.disabled ) {
+ this.disable();
+ }
+ },
+
+ _drawButton: function() {
+ var that = this;
+
+ // Associate existing label with the new button
+ this.label = $( "label[for='" + this.ids.element + "']" ).attr( "for", this.ids.button );
+ this._on( this.label, {
+ click: function( event ) {
+ this.button.focus();
+ event.preventDefault();
+ }
+ });
+
+ // Hide original select element
+ this.element.hide();
+
+ // Create button
+ this.button = $( "<span>", {
+ "class": "ui-selectmenu-button ui-widget ui-state-default ui-corner-all",
+ tabindex: this.options.disabled ? -1 : 0,
+ id: this.ids.button,
+ role: "combobox",
+ "aria-expanded": "false",
+ "aria-autocomplete": "list",
+ "aria-owns": this.ids.menu,
+ "aria-haspopup": "true"
+ })
+ .insertAfter( this.element );
+
+ $( "<span>", {
+ "class": "ui-icon " + this.options.icons.button
+ })
+ .prependTo( this.button );
+
+ this.buttonText = $( "<span>", {
+ "class": "ui-selectmenu-text"
+ })
+ .appendTo( this.button );
+
+ this._setText( this.buttonText, this.element.find( "option:selected" ).text() );
+ this._resizeButton();
+
+ this._on( this.button, this._buttonEvents );
+ this.button.one( "focusin", function() {
+
+ // Delay rendering the menu items until the button receives focus.
+ // The menu may have already been rendered via a programmatic open.
+ if ( !that.menuItems ) {
+ that._refreshMenu();
+ }
+ });
+ this._hoverable( this.button );
+ this._focusable( this.button );
+ },
+
+ _drawMenu: function() {
+ var that = this;
+
+ // Create menu
+ this.menu = $( "<ul>", {
+ "aria-hidden": "true",
+ "aria-labelledby": this.ids.button,
+ id: this.ids.menu
+ });
+
+ // Wrap menu
+ this.menuWrap = $( "<div>", {
+ "class": "ui-selectmenu-menu ui-front"
+ })
+ .append( this.menu )
+ .appendTo( this._appendTo() );
+
+ // Initialize menu widget
+ this.menuInstance = this.menu
+ .menu({
+ role: "listbox",
+ select: function( event, ui ) {
+ event.preventDefault();
+
+ // support: IE8
+ // If the item was selected via a click, the text selection
+ // will be destroyed in IE
+ that._setSelection();
+
+ that._select( ui.item.data( "ui-selectmenu-item" ), event );
+ },
+ focus: function( event, ui ) {
+ var item = ui.item.data( "ui-selectmenu-item" );
+
+ // Prevent inital focus from firing and check if its a newly focused item
+ if ( that.focusIndex != null && item.index !== that.focusIndex ) {
+ that._trigger( "focus", event, { item: item } );
+ if ( !that.isOpen ) {
+ that._select( item, event );
+ }
+ }
+ that.focusIndex = item.index;
+
+ that.button.attr( "aria-activedescendant",
+ that.menuItems.eq( item.index ).attr( "id" ) );
+ }
+ })
+ .menu( "instance" );
+
+ // Adjust menu styles to dropdown
+ this.menu
+ .addClass( "ui-corner-bottom" )
+ .removeClass( "ui-corner-all" );
+
+ // Don't close the menu on mouseleave
+ this.menuInstance._off( this.menu, "mouseleave" );
+
+ // Cancel the menu's collapseAll on document click
+ this.menuInstance._closeOnDocumentClick = function() {
+ return false;
+ };
+
+ // Selects often contain empty items, but never contain dividers
+ this.menuInstance._isDivider = function() {
+ return false;
+ };
+ },
+
+ refresh: function() {
+ this._refreshMenu();
+ this._setText( this.buttonText, this._getSelectedItem().text() );
+ if ( !this.options.width ) {
+ this._resizeButton();
+ }
+ },
+
+ _refreshMenu: function() {
+ this.menu.empty();
+
+ var item,
+ options = this.element.find( "option" );
+
+ if ( !options.length ) {
+ return;
+ }
+
+ this._parseOptions( options );
+ this._renderMenu( this.menu, this.items );
+
+ this.menuInstance.refresh();
+ this.menuItems = this.menu.find( "li" ).not( ".ui-selectmenu-optgroup" );
+
+ item = this._getSelectedItem();
+
+ // Update the menu to have the correct item focused
+ this.menuInstance.focus( null, item );
+ this._setAria( item.data( "ui-selectmenu-item" ) );
+
+ // Set disabled state
+ this._setOption( "disabled", this.element.prop( "disabled" ) );
+ },
+
+ open: function( event ) {
+ if ( this.options.disabled ) {
+ return;
+ }
+
+ // If this is the first time the menu is being opened, render the items
+ if ( !this.menuItems ) {
+ this._refreshMenu();
+ } else {
+
+ // Menu clears focus on close, reset focus to selected item
+ this.menu.find( ".ui-state-focus" ).removeClass( "ui-state-focus" );
+ this.menuInstance.focus( null, this._getSelectedItem() );
+ }
+
+ this.isOpen = true;
+ this._toggleAttr();
+ this._resizeMenu();
+ this._position();
+
+ this._on( this.document, this._documentClick );
+
+ this._trigger( "open", event );
+ },
+
+ _position: function() {
+ this.menuWrap.position( $.extend( { of: this.button }, this.options.position ) );
+ },
+
+ close: function( event ) {
+ if ( !this.isOpen ) {
+ return;
+ }
+
+ this.isOpen = false;
+ this._toggleAttr();
+
+ this.range = null;
+ this._off( this.document );
+
+ this._trigger( "close", event );
+ },
+
+ widget: function() {
+ return this.button;
+ },
+
+ menuWidget: function() {
+ return this.menu;
+ },
+
+ _renderMenu: function( ul, items ) {
+ var that = this,
+ currentOptgroup = "";
+
+ $.each( items, function( index, item ) {
+ if ( item.optgroup !== currentOptgroup ) {
+ $( "<li>", {
+ "class": "ui-selectmenu-optgroup ui-menu-divider" +
+ ( item.element.parent( "optgroup" ).prop( "disabled" ) ?
+ " ui-state-disabled" :
+ "" ),
+ text: item.optgroup
+ })
+ .appendTo( ul );
+
+ currentOptgroup = item.optgroup;
+ }
+
+ that._renderItemData( ul, item );
+ });
+ },
+
+ _renderItemData: function( ul, item ) {
+ return this._renderItem( ul, item ).data( "ui-selectmenu-item", item );
+ },
+
+ _renderItem: function( ul, item ) {
+ var li = $( "<li>" );
+
+ if ( item.disabled ) {
+ li.addClass( "ui-state-disabled" );
+ }
+ this._setText( li, item.label );
+
+ return li.appendTo( ul );
+ },
+
+ _setText: function( element, value ) {
+ if ( value ) {
+ element.text( value );
+ } else {
+ element.html( "&#160;" );
+ }
+ },
+
+ _move: function( direction, event ) {
+ var item, next,
+ filter = ".ui-menu-item";
+
+ if ( this.isOpen ) {
+ item = this.menuItems.eq( this.focusIndex );
+ } else {
+ item = this.menuItems.eq( this.element[ 0 ].selectedIndex );
+ filter += ":not(.ui-state-disabled)";
+ }
+
+ if ( direction === "first" || direction === "last" ) {
+ next = item[ direction === "first" ? "prevAll" : "nextAll" ]( filter ).eq( -1 );
+ } else {
+ next = item[ direction + "All" ]( filter ).eq( 0 );
+ }
+
+ if ( next.length ) {
+ this.menuInstance.focus( event, next );
+ }
+ },
+
+ _getSelectedItem: function() {
+ return this.menuItems.eq( this.element[ 0 ].selectedIndex );
+ },
+
+ _toggle: function( event ) {
+ this[ this.isOpen ? "close" : "open" ]( event );
+ },
+
+ _setSelection: function() {
+ var selection;
+
+ if ( !this.range ) {
+ return;
+ }
+
+ if ( window.getSelection ) {
+ selection = window.getSelection();
+ selection.removeAllRanges();
+ selection.addRange( this.range );
+
+ // support: IE8
+ } else {
+ this.range.select();
+ }
+
+ // support: IE
+ // Setting the text selection kills the button focus in IE, but
+ // restoring the focus doesn't kill the selection.
+ this.button.focus();
+ },
+
+ _documentClick: {
+ mousedown: function( event ) {
+ if ( !this.isOpen ) {
+ return;
+ }
+
+ if ( !$( event.target ).closest( ".ui-selectmenu-menu, #" + this.ids.button ).length ) {
+ this.close( event );
+ }
+ }
+ },
+
+ _buttonEvents: {
+
+ // Prevent text selection from being reset when interacting with the selectmenu (#10144)
+ mousedown: function() {
+ var selection;
+
+ if ( window.getSelection ) {
+ selection = window.getSelection();
+ if ( selection.rangeCount ) {
+ this.range = selection.getRangeAt( 0 );
+ }
+
+ // support: IE8
+ } else {
+ this.range = document.selection.createRange();
+ }
+ },
+
+ click: function( event ) {
+ this._setSelection();
+ this._toggle( event );
+ },
+
+ keydown: function( event ) {
+ var preventDefault = true;
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.TAB:
+ case $.ui.keyCode.ESCAPE:
+ this.close( event );
+ preventDefault = false;
+ break;
+ case $.ui.keyCode.ENTER:
+ if ( this.isOpen ) {
+ this._selectFocusedItem( event );
+ }
+ break;
+ case $.ui.keyCode.UP:
+ if ( event.altKey ) {
+ this._toggle( event );
+ } else {
+ this._move( "prev", event );
+ }
+ break;
+ case $.ui.keyCode.DOWN:
+ if ( event.altKey ) {
+ this._toggle( event );
+ } else {
+ this._move( "next", event );
+ }
+ break;
+ case $.ui.keyCode.SPACE:
+ if ( this.isOpen ) {
+ this._selectFocusedItem( event );
+ } else {
+ this._toggle( event );
+ }
+ break;
+ case $.ui.keyCode.LEFT:
+ this._move( "prev", event );
+ break;
+ case $.ui.keyCode.RIGHT:
+ this._move( "next", event );
+ break;
+ case $.ui.keyCode.HOME:
+ case $.ui.keyCode.PAGE_UP:
+ this._move( "first", event );
+ break;
+ case $.ui.keyCode.END:
+ case $.ui.keyCode.PAGE_DOWN:
+ this._move( "last", event );
+ break;
+ default:
+ this.menu.trigger( event );
+ preventDefault = false;
+ }
+
+ if ( preventDefault ) {
+ event.preventDefault();
+ }
+ }
+ },
+
+ _selectFocusedItem: function( event ) {
+ var item = this.menuItems.eq( this.focusIndex );
+ if ( !item.hasClass( "ui-state-disabled" ) ) {
+ this._select( item.data( "ui-selectmenu-item" ), event );
+ }
+ },
+
+ _select: function( item, event ) {
+ var oldIndex = this.element[ 0 ].selectedIndex;
+
+ // Change native select element
+ this.element[ 0 ].selectedIndex = item.index;
+ this._setText( this.buttonText, item.label );
+ this._setAria( item );
+ this._trigger( "select", event, { item: item } );
+
+ if ( item.index !== oldIndex ) {
+ this._trigger( "change", event, { item: item } );
+ }
+
+ this.close( event );
+ },
+
+ _setAria: function( item ) {
+ var id = this.menuItems.eq( item.index ).attr( "id" );
+
+ this.button.attr({
+ "aria-labelledby": id,
+ "aria-activedescendant": id
+ });
+ this.menu.attr( "aria-activedescendant", id );
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "icons" ) {
+ this.button.find( "span.ui-icon" )
+ .removeClass( this.options.icons.button )
+ .addClass( value.button );
+ }
+
+ this._super( key, value );
+
+ if ( key === "appendTo" ) {
+ this.menuWrap.appendTo( this._appendTo() );
+ }
+
+ if ( key === "disabled" ) {
+ this.menuInstance.option( "disabled", value );
+ this.button
+ .toggleClass( "ui-state-disabled", value )
+ .attr( "aria-disabled", value );
+
+ this.element.prop( "disabled", value );
+ if ( value ) {
+ this.button.attr( "tabindex", -1 );
+ this.close();
+ } else {
+ this.button.attr( "tabindex", 0 );
+ }
+ }
+
+ if ( key === "width" ) {
+ this._resizeButton();
+ }
+ },
+
+ _appendTo: function() {
+ var element = this.options.appendTo;
+
+ if ( element ) {
+ element = element.jquery || element.nodeType ?
+ $( element ) :
+ this.document.find( element ).eq( 0 );
+ }
+
+ if ( !element || !element[ 0 ] ) {
+ element = this.element.closest( ".ui-front" );
+ }
+
+ if ( !element.length ) {
+ element = this.document[ 0 ].body;
+ }
+
+ return element;
+ },
+
+ _toggleAttr: function() {
+ this.button
+ .toggleClass( "ui-corner-top", this.isOpen )
+ .toggleClass( "ui-corner-all", !this.isOpen )
+ .attr( "aria-expanded", this.isOpen );
+ this.menuWrap.toggleClass( "ui-selectmenu-open", this.isOpen );
+ this.menu.attr( "aria-hidden", !this.isOpen );
+ },
+
+ _resizeButton: function() {
+ var width = this.options.width;
+
+ if ( !width ) {
+ width = this.element.show().outerWidth();
+ this.element.hide();
+ }
+
+ this.button.outerWidth( width );
+ },
+
+ _resizeMenu: function() {
+ this.menu.outerWidth( Math.max(
+ this.button.outerWidth(),
+
+ // support: IE10
+ // IE10 wraps long text (possibly a rounding bug)
+ // so we add 1px to avoid the wrapping
+ this.menu.width( "" ).outerWidth() + 1
+ ) );
+ },
+
+ _getCreateOptions: function() {
+ return { disabled: this.element.prop( "disabled" ) };
+ },
+
+ _parseOptions: function( options ) {
+ var data = [];
+ options.each(function( index, item ) {
+ var option = $( item ),
+ optgroup = option.parent( "optgroup" );
+ data.push({
+ element: option,
+ index: index,
+ value: option.val(),
+ label: option.text(),
+ optgroup: optgroup.attr( "label" ) || "",
+ disabled: optgroup.prop( "disabled" ) || option.prop( "disabled" )
+ });
+ });
+ this.items = data;
+ },
+
+ _destroy: function() {
+ this.menuWrap.remove();
+ this.button.remove();
+ this.element.show();
+ this.element.removeUniqueId();
+ this.label.attr( "for", this.ids.element );
+ }
+});
+
+
+/*!
+ * jQuery UI Slider 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/slider/
+ */
+
+
+var slider = $.widget( "ui.slider", $.ui.mouse, {
+ version: "1.11.3",
+ widgetEventPrefix: "slide",
+
+ options: {
+ animate: false,
+ distance: 0,
+ max: 100,
+ min: 0,
+ orientation: "horizontal",
+ range: false,
+ step: 1,
+ value: 0,
+ values: null,
+
+ // callbacks
+ change: null,
+ slide: null,
+ start: null,
+ stop: null
+ },
+
+ // number of pages in a slider
+ // (how many times can you page up/down to go through the whole range)
+ numPages: 5,
+
+ _create: function() {
+ this._keySliding = false;
+ this._mouseSliding = false;
+ this._animateOff = true;
+ this._handleIndex = null;
+ this._detectOrientation();
+ this._mouseInit();
+ this._calculateNewMax();
+
+ this.element
+ .addClass( "ui-slider" +
+ " ui-slider-" + this.orientation +
+ " ui-widget" +
+ " ui-widget-content" +
+ " ui-corner-all");
+
+ this._refresh();
+ this._setOption( "disabled", this.options.disabled );
+
+ this._animateOff = false;
+ },
+
+ _refresh: function() {
+ this._createRange();
+ this._createHandles();
+ this._setupEvents();
+ this._refreshValue();
+ },
+
+ _createHandles: function() {
+ var i, handleCount,
+ options = this.options,
+ existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
+ handle = "<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>",
+ handles = [];
+
+ handleCount = ( options.values && options.values.length ) || 1;
+
+ if ( existingHandles.length > handleCount ) {
+ existingHandles.slice( handleCount ).remove();
+ existingHandles = existingHandles.slice( 0, handleCount );
+ }
+
+ for ( i = existingHandles.length; i < handleCount; i++ ) {
+ handles.push( handle );
+ }
+
+ this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
+
+ this.handle = this.handles.eq( 0 );
+
+ this.handles.each(function( i ) {
+ $( this ).data( "ui-slider-handle-index", i );
+ });
+ },
+
+ _createRange: function() {
+ var options = this.options,
+ classes = "";
+
+ if ( options.range ) {
+ if ( options.range === true ) {
+ if ( !options.values ) {
+ options.values = [ this._valueMin(), this._valueMin() ];
+ } else if ( options.values.length && options.values.length !== 2 ) {
+ options.values = [ options.values[0], options.values[0] ];
+ } else if ( $.isArray( options.values ) ) {
+ options.values = options.values.slice(0);
+ }
+ }
+
+ if ( !this.range || !this.range.length ) {
+ this.range = $( "<div></div>" )
+ .appendTo( this.element );
+
+ classes = "ui-slider-range" +
+ // note: this isn't the most fittingly semantic framework class for this element,
+ // but worked best visually with a variety of themes
+ " ui-widget-header ui-corner-all";
+ } else {
+ this.range.removeClass( "ui-slider-range-min ui-slider-range-max" )
+ // Handle range switching from true to min/max
+ .css({
+ "left": "",
+ "bottom": ""
+ });
+ }
+
+ this.range.addClass( classes +
+ ( ( options.range === "min" || options.range === "max" ) ? " ui-slider-range-" + options.range : "" ) );
+ } else {
+ if ( this.range ) {
+ this.range.remove();
+ }
+ this.range = null;
+ }
+ },
+
+ _setupEvents: function() {
+ this._off( this.handles );
+ this._on( this.handles, this._handleEvents );
+ this._hoverable( this.handles );
+ this._focusable( this.handles );
+ },
+
+ _destroy: function() {
+ this.handles.remove();
+ if ( this.range ) {
+ this.range.remove();
+ }
+
+ this.element
+ .removeClass( "ui-slider" +
+ " ui-slider-horizontal" +
+ " ui-slider-vertical" +
+ " ui-widget" +
+ " ui-widget-content" +
+ " ui-corner-all" );
+
+ this._mouseDestroy();
+ },
+
+ _mouseCapture: function( event ) {
+ var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
+ that = this,
+ o = this.options;
+
+ if ( o.disabled ) {
+ return false;
+ }
+
+ this.elementSize = {
+ width: this.element.outerWidth(),
+ height: this.element.outerHeight()
+ };
+ this.elementOffset = this.element.offset();
+
+ position = { x: event.pageX, y: event.pageY };
+ normValue = this._normValueFromMouse( position );
+ distance = this._valueMax() - this._valueMin() + 1;
+ this.handles.each(function( i ) {
+ var thisDistance = Math.abs( normValue - that.values(i) );
+ if (( distance > thisDistance ) ||
+ ( distance === thisDistance &&
+ (i === that._lastChangedValue || that.values(i) === o.min ))) {
+ distance = thisDistance;
+ closestHandle = $( this );
+ index = i;
+ }
+ });
+
+ allowed = this._start( event, index );
+ if ( allowed === false ) {
+ return false;
+ }
+ this._mouseSliding = true;
+
+ this._handleIndex = index;
+
+ closestHandle
+ .addClass( "ui-state-active" )
+ .focus();
+
+ offset = closestHandle.offset();
+ mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
+ this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
+ left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
+ top: event.pageY - offset.top -
+ ( closestHandle.height() / 2 ) -
+ ( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
+ ( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) +
+ ( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
+ };
+
+ if ( !this.handles.hasClass( "ui-state-hover" ) ) {
+ this._slide( event, index, normValue );
+ }
+ this._animateOff = true;
+ return true;
+ },
+
+ _mouseStart: function() {
+ return true;
+ },
+
+ _mouseDrag: function( event ) {
+ var position = { x: event.pageX, y: event.pageY },
+ normValue = this._normValueFromMouse( position );
+
+ this._slide( event, this._handleIndex, normValue );
+
+ return false;
+ },
+
+ _mouseStop: function( event ) {
+ this.handles.removeClass( "ui-state-active" );
+ this._mouseSliding = false;
+
+ this._stop( event, this._handleIndex );
+ this._change( event, this._handleIndex );
+
+ this._handleIndex = null;
+ this._clickOffset = null;
+ this._animateOff = false;
+
+ return false;
+ },
+
+ _detectOrientation: function() {
+ this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
+ },
+
+ _normValueFromMouse: function( position ) {
+ var pixelTotal,
+ pixelMouse,
+ percentMouse,
+ valueTotal,
+ valueMouse;
+
+ if ( this.orientation === "horizontal" ) {
+ pixelTotal = this.elementSize.width;
+ pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
+ } else {
+ pixelTotal = this.elementSize.height;
+ pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
+ }
+
+ percentMouse = ( pixelMouse / pixelTotal );
+ if ( percentMouse > 1 ) {
+ percentMouse = 1;
+ }
+ if ( percentMouse < 0 ) {
+ percentMouse = 0;
+ }
+ if ( this.orientation === "vertical" ) {
+ percentMouse = 1 - percentMouse;
+ }
+
+ valueTotal = this._valueMax() - this._valueMin();
+ valueMouse = this._valueMin() + percentMouse * valueTotal;
+
+ return this._trimAlignValue( valueMouse );
+ },
+
+ _start: function( event, index ) {
+ var uiHash = {
+ handle: this.handles[ index ],
+ value: this.value()
+ };
+ if ( this.options.values && this.options.values.length ) {
+ uiHash.value = this.values( index );
+ uiHash.values = this.values();
+ }
+ return this._trigger( "start", event, uiHash );
+ },
+
+ _slide: function( event, index, newVal ) {
+ var otherVal,
+ newValues,
+ allowed;
+
+ if ( this.options.values && this.options.values.length ) {
+ otherVal = this.values( index ? 0 : 1 );
+
+ if ( ( this.options.values.length === 2 && this.options.range === true ) &&
+ ( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
+ ) {
+ newVal = otherVal;
+ }
+
+ if ( newVal !== this.values( index ) ) {
+ newValues = this.values();
+ newValues[ index ] = newVal;
+ // A slide can be canceled by returning false from the slide callback
+ allowed = this._trigger( "slide", event, {
+ handle: this.handles[ index ],
+ value: newVal,
+ values: newValues
+ } );
+ otherVal = this.values( index ? 0 : 1 );
+ if ( allowed !== false ) {
+ this.values( index, newVal );
+ }
+ }
+ } else {
+ if ( newVal !== this.value() ) {
+ // A slide can be canceled by returning false from the slide callback
+ allowed = this._trigger( "slide", event, {
+ handle: this.handles[ index ],
+ value: newVal
+ } );
+ if ( allowed !== false ) {
+ this.value( newVal );
+ }
+ }
+ }
+ },
+
+ _stop: function( event, index ) {
+ var uiHash = {
+ handle: this.handles[ index ],
+ value: this.value()
+ };
+ if ( this.options.values && this.options.values.length ) {
+ uiHash.value = this.values( index );
+ uiHash.values = this.values();
+ }
+
+ this._trigger( "stop", event, uiHash );
+ },
+
+ _change: function( event, index ) {
+ if ( !this._keySliding && !this._mouseSliding ) {
+ var uiHash = {
+ handle: this.handles[ index ],
+ value: this.value()
+ };
+ if ( this.options.values && this.options.values.length ) {
+ uiHash.value = this.values( index );
+ uiHash.values = this.values();
+ }
+
+ //store the last changed value index for reference when handles overlap
+ this._lastChangedValue = index;
+
+ this._trigger( "change", event, uiHash );
+ }
+ },
+
+ value: function( newValue ) {
+ if ( arguments.length ) {
+ this.options.value = this._trimAlignValue( newValue );
+ this._refreshValue();
+ this._change( null, 0 );
+ return;
+ }
+
+ return this._value();
+ },
+
+ values: function( index, newValue ) {
+ var vals,
+ newValues,
+ i;
+
+ if ( arguments.length > 1 ) {
+ this.options.values[ index ] = this._trimAlignValue( newValue );
+ this._refreshValue();
+ this._change( null, index );
+ return;
+ }
+
+ if ( arguments.length ) {
+ if ( $.isArray( arguments[ 0 ] ) ) {
+ vals = this.options.values;
+ newValues = arguments[ 0 ];
+ for ( i = 0; i < vals.length; i += 1 ) {
+ vals[ i ] = this._trimAlignValue( newValues[ i ] );
+ this._change( null, i );
+ }
+ this._refreshValue();
+ } else {
+ if ( this.options.values && this.options.values.length ) {
+ return this._values( index );
+ } else {
+ return this.value();
+ }
+ }
+ } else {
+ return this._values();
+ }
+ },
+
+ _setOption: function( key, value ) {
+ var i,
+ valsLength = 0;
+
+ if ( key === "range" && this.options.range === true ) {
+ if ( value === "min" ) {
+ this.options.value = this._values( 0 );
+ this.options.values = null;
+ } else if ( value === "max" ) {
+ this.options.value = this._values( this.options.values.length - 1 );
+ this.options.values = null;
+ }
+ }
+
+ if ( $.isArray( this.options.values ) ) {
+ valsLength = this.options.values.length;
+ }
+
+ if ( key === "disabled" ) {
+ this.element.toggleClass( "ui-state-disabled", !!value );
+ }
+
+ this._super( key, value );
+
+ switch ( key ) {
+ case "orientation":
+ this._detectOrientation();
+ this.element
+ .removeClass( "ui-slider-horizontal ui-slider-vertical" )
+ .addClass( "ui-slider-" + this.orientation );
+ this._refreshValue();
+
+ // Reset positioning from previous orientation
+ this.handles.css( value === "horizontal" ? "bottom" : "left", "" );
+ break;
+ case "value":
+ this._animateOff = true;
+ this._refreshValue();
+ this._change( null, 0 );
+ this._animateOff = false;
+ break;
+ case "values":
+ this._animateOff = true;
+ this._refreshValue();
+ for ( i = 0; i < valsLength; i += 1 ) {
+ this._change( null, i );
+ }
+ this._animateOff = false;
+ break;
+ case "step":
+ case "min":
+ case "max":
+ this._animateOff = true;
+ this._calculateNewMax();
+ this._refreshValue();
+ this._animateOff = false;
+ break;
+ case "range":
+ this._animateOff = true;
+ this._refresh();
+ this._animateOff = false;
+ break;
+ }
+ },
+
+ //internal value getter
+ // _value() returns value trimmed by min and max, aligned by step
+ _value: function() {
+ var val = this.options.value;
+ val = this._trimAlignValue( val );
+
+ return val;
+ },
+
+ //internal values getter
+ // _values() returns array of values trimmed by min and max, aligned by step
+ // _values( index ) returns single value trimmed by min and max, aligned by step
+ _values: function( index ) {
+ var val,
+ vals,
+ i;
+
+ if ( arguments.length ) {
+ val = this.options.values[ index ];
+ val = this._trimAlignValue( val );
+
+ return val;
+ } else if ( this.options.values && this.options.values.length ) {
+ // .slice() creates a copy of the array
+ // this copy gets trimmed by min and max and then returned
+ vals = this.options.values.slice();
+ for ( i = 0; i < vals.length; i += 1) {
+ vals[ i ] = this._trimAlignValue( vals[ i ] );
+ }
+
+ return vals;
+ } else {
+ return [];
+ }
+ },
+
+ // returns the step-aligned value that val is closest to, between (inclusive) min and max
+ _trimAlignValue: function( val ) {
+ if ( val <= this._valueMin() ) {
+ return this._valueMin();
+ }
+ if ( val >= this._valueMax() ) {
+ return this._valueMax();
+ }
+ var step = ( this.options.step > 0 ) ? this.options.step : 1,
+ valModStep = (val - this._valueMin()) % step,
+ alignValue = val - valModStep;
+
+ if ( Math.abs(valModStep) * 2 >= step ) {
+ alignValue += ( valModStep > 0 ) ? step : ( -step );
+ }
+
+ // Since JavaScript has problems with large floats, round
+ // the final value to 5 digits after the decimal point (see #4124)
+ return parseFloat( alignValue.toFixed(5) );
+ },
+
+ _calculateNewMax: function() {
+ var max = this.options.max,
+ min = this._valueMin(),
+ step = this.options.step,
+ aboveMin = Math.floor( ( max - min ) / step ) * step;
+ max = aboveMin + min;
+ this.max = parseFloat( max.toFixed( this._precision() ) );
+ },
+
+ _precision: function() {
+ var precision = this._precisionOf( this.options.step );
+ if ( this.options.min !== null ) {
+ precision = Math.max( precision, this._precisionOf( this.options.min ) );
+ }
+ return precision;
+ },
+
+ _precisionOf: function( num ) {
+ var str = num.toString(),
+ decimal = str.indexOf( "." );
+ return decimal === -1 ? 0 : str.length - decimal - 1;
+ },
+
+ _valueMin: function() {
+ return this.options.min;
+ },
+
+ _valueMax: function() {
+ return this.max;
+ },
+
+ _refreshValue: function() {
+ var lastValPercent, valPercent, value, valueMin, valueMax,
+ oRange = this.options.range,
+ o = this.options,
+ that = this,
+ animate = ( !this._animateOff ) ? o.animate : false,
+ _set = {};
+
+ if ( this.options.values && this.options.values.length ) {
+ this.handles.each(function( i ) {
+ valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;
+ _set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+ $( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+ if ( that.options.range === true ) {
+ if ( that.orientation === "horizontal" ) {
+ if ( i === 0 ) {
+ that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
+ }
+ if ( i === 1 ) {
+ that.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+ }
+ } else {
+ if ( i === 0 ) {
+ that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
+ }
+ if ( i === 1 ) {
+ that.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+ }
+ }
+ }
+ lastValPercent = valPercent;
+ });
+ } else {
+ value = this.value();
+ valueMin = this._valueMin();
+ valueMax = this._valueMax();
+ valPercent = ( valueMax !== valueMin ) ?
+ ( value - valueMin ) / ( valueMax - valueMin ) * 100 :
+ 0;
+ _set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+ this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+
+ if ( oRange === "min" && this.orientation === "horizontal" ) {
+ this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate );
+ }
+ if ( oRange === "max" && this.orientation === "horizontal" ) {
+ this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+ }
+ if ( oRange === "min" && this.orientation === "vertical" ) {
+ this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate );
+ }
+ if ( oRange === "max" && this.orientation === "vertical" ) {
+ this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+ }
+ }
+ },
+
+ _handleEvents: {
+ keydown: function( event ) {
+ var allowed, curVal, newVal, step,
+ index = $( event.target ).data( "ui-slider-handle-index" );
+
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.HOME:
+ case $.ui.keyCode.END:
+ case $.ui.keyCode.PAGE_UP:
+ case $.ui.keyCode.PAGE_DOWN:
+ case $.ui.keyCode.UP:
+ case $.ui.keyCode.RIGHT:
+ case $.ui.keyCode.DOWN:
+ case $.ui.keyCode.LEFT:
+ event.preventDefault();
+ if ( !this._keySliding ) {
+ this._keySliding = true;
+ $( event.target ).addClass( "ui-state-active" );
+ allowed = this._start( event, index );
+ if ( allowed === false ) {
+ return;
+ }
+ }
+ break;
+ }
+
+ step = this.options.step;
+ if ( this.options.values && this.options.values.length ) {
+ curVal = newVal = this.values( index );
+ } else {
+ curVal = newVal = this.value();
+ }
+
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.HOME:
+ newVal = this._valueMin();
+ break;
+ case $.ui.keyCode.END:
+ newVal = this._valueMax();
+ break;
+ case $.ui.keyCode.PAGE_UP:
+ newVal = this._trimAlignValue(
+ curVal + ( ( this._valueMax() - this._valueMin() ) / this.numPages )
+ );
+ break;
+ case $.ui.keyCode.PAGE_DOWN:
+ newVal = this._trimAlignValue(
+ curVal - ( (this._valueMax() - this._valueMin()) / this.numPages ) );
+ break;
+ case $.ui.keyCode.UP:
+ case $.ui.keyCode.RIGHT:
+ if ( curVal === this._valueMax() ) {
+ return;
+ }
+ newVal = this._trimAlignValue( curVal + step );
+ break;
+ case $.ui.keyCode.DOWN:
+ case $.ui.keyCode.LEFT:
+ if ( curVal === this._valueMin() ) {
+ return;
+ }
+ newVal = this._trimAlignValue( curVal - step );
+ break;
+ }
+
+ this._slide( event, index, newVal );
+ },
+ keyup: function( event ) {
+ var index = $( event.target ).data( "ui-slider-handle-index" );
+
+ if ( this._keySliding ) {
+ this._keySliding = false;
+ this._stop( event, index );
+ this._change( event, index );
+ $( event.target ).removeClass( "ui-state-active" );
+ }
+ }
+ }
+});
+
+
+/*!
+ * jQuery UI Spinner 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/spinner/
+ */
+
+
+function spinner_modifier( fn ) {
+ return function() {
+ var previous = this.element.val();
+ fn.apply( this, arguments );
+ this._refresh();
+ if ( previous !== this.element.val() ) {
+ this._trigger( "change" );
+ }
+ };
+}
+
+var spinner = $.widget( "ui.spinner", {
+ version: "1.11.3",
+ defaultElement: "<input>",
+ widgetEventPrefix: "spin",
+ options: {
+ culture: null,
+ icons: {
+ down: "ui-icon-triangle-1-s",
+ up: "ui-icon-triangle-1-n"
+ },
+ incremental: true,
+ max: null,
+ min: null,
+ numberFormat: null,
+ page: 10,
+ step: 1,
+
+ change: null,
+ spin: null,
+ start: null,
+ stop: null
+ },
+
+ _create: function() {
+ // handle string values that need to be parsed
+ this._setOption( "max", this.options.max );
+ this._setOption( "min", this.options.min );
+ this._setOption( "step", this.options.step );
+
+ // Only format if there is a value, prevents the field from being marked
+ // as invalid in Firefox, see #9573.
+ if ( this.value() !== "" ) {
+ // Format the value, but don't constrain.
+ this._value( this.element.val(), true );
+ }
+
+ this._draw();
+ this._on( this._events );
+ this._refresh();
+
+ // turning off autocomplete prevents the browser from remembering the
+ // value when navigating through history, so we re-enable autocomplete
+ // if the page is unloaded before the widget is destroyed. #7790
+ this._on( this.window, {
+ beforeunload: function() {
+ this.element.removeAttr( "autocomplete" );
+ }
+ });
+ },
+
+ _getCreateOptions: function() {
+ var options = {},
+ element = this.element;
+
+ $.each( [ "min", "max", "step" ], function( i, option ) {
+ var value = element.attr( option );
+ if ( value !== undefined && value.length ) {
+ options[ option ] = value;
+ }
+ });
+
+ return options;
+ },
+
+ _events: {
+ keydown: function( event ) {
+ if ( this._start( event ) && this._keydown( event ) ) {
+ event.preventDefault();
+ }
+ },
+ keyup: "_stop",
+ focus: function() {
+ this.previous = this.element.val();
+ },
+ blur: function( event ) {
+ if ( this.cancelBlur ) {
+ delete this.cancelBlur;
+ return;
+ }
+
+ this._stop();
+ this._refresh();
+ if ( this.previous !== this.element.val() ) {
+ this._trigger( "change", event );
+ }
+ },
+ mousewheel: function( event, delta ) {
+ if ( !delta ) {
+ return;
+ }
+ if ( !this.spinning && !this._start( event ) ) {
+ return false;
+ }
+
+ this._spin( (delta > 0 ? 1 : -1) * this.options.step, event );
+ clearTimeout( this.mousewheelTimer );
+ this.mousewheelTimer = this._delay(function() {
+ if ( this.spinning ) {
+ this._stop( event );
+ }
+ }, 100 );
+ event.preventDefault();
+ },
+ "mousedown .ui-spinner-button": function( event ) {
+ var previous;
+
+ // We never want the buttons to have focus; whenever the user is
+ // interacting with the spinner, the focus should be on the input.
+ // If the input is focused then this.previous is properly set from
+ // when the input first received focus. If the input is not focused
+ // then we need to set this.previous based on the value before spinning.
+ previous = this.element[0] === this.document[0].activeElement ?
+ this.previous : this.element.val();
+ function checkFocus() {
+ var isActive = this.element[0] === this.document[0].activeElement;
+ if ( !isActive ) {
+ this.element.focus();
+ this.previous = previous;
+ // support: IE
+ // IE sets focus asynchronously, so we need to check if focus
+ // moved off of the input because the user clicked on the button.
+ this._delay(function() {
+ this.previous = previous;
+ });
+ }
+ }
+
+ // ensure focus is on (or stays on) the text field
+ event.preventDefault();
+ checkFocus.call( this );
+
+ // support: IE
+ // IE doesn't prevent moving focus even with event.preventDefault()
+ // so we set a flag to know when we should ignore the blur event
+ // and check (again) if focus moved off of the input.
+ this.cancelBlur = true;
+ this._delay(function() {
+ delete this.cancelBlur;
+ checkFocus.call( this );
+ });
+
+ if ( this._start( event ) === false ) {
+ return;
+ }
+
+ this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+ },
+ "mouseup .ui-spinner-button": "_stop",
+ "mouseenter .ui-spinner-button": function( event ) {
+ // button will add ui-state-active if mouse was down while mouseleave and kept down
+ if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) {
+ return;
+ }
+
+ if ( this._start( event ) === false ) {
+ return false;
+ }
+ this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+ },
+ // TODO: do we really want to consider this a stop?
+ // shouldn't we just stop the repeater and wait until mouseup before
+ // we trigger the stop event?
+ "mouseleave .ui-spinner-button": "_stop"
+ },
+
+ _draw: function() {
+ var uiSpinner = this.uiSpinner = this.element
+ .addClass( "ui-spinner-input" )
+ .attr( "autocomplete", "off" )
+ .wrap( this._uiSpinnerHtml() )
+ .parent()
+ // add buttons
+ .append( this._buttonHtml() );
+
+ this.element.attr( "role", "spinbutton" );
+
+ // button bindings
+ this.buttons = uiSpinner.find( ".ui-spinner-button" )
+ .attr( "tabIndex", -1 )
+ .button()
+ .removeClass( "ui-corner-all" );
+
+ // IE 6 doesn't understand height: 50% for the buttons
+ // unless the wrapper has an explicit height
+ if ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) &&
+ uiSpinner.height() > 0 ) {
+ uiSpinner.height( uiSpinner.height() );
+ }
+
+ // disable spinner if element was already disabled
+ if ( this.options.disabled ) {
+ this.disable();
+ }
+ },
+
+ _keydown: function( event ) {
+ var options = this.options,
+ keyCode = $.ui.keyCode;
+
+ switch ( event.keyCode ) {
+ case keyCode.UP:
+ this._repeat( null, 1, event );
+ return true;
+ case keyCode.DOWN:
+ this._repeat( null, -1, event );
+ return true;
+ case keyCode.PAGE_UP:
+ this._repeat( null, options.page, event );
+ return true;
+ case keyCode.PAGE_DOWN:
+ this._repeat( null, -options.page, event );
+ return true;
+ }
+
+ return false;
+ },
+
+ _uiSpinnerHtml: function() {
+ return "<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>";
+ },
+
+ _buttonHtml: function() {
+ return "" +
+ "<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>" +
+ "<span class='ui-icon " + this.options.icons.up + "'>&#9650;</span>" +
+ "</a>" +
+ "<a class='ui-spinner-button ui-spinner-down ui-corner-br'>" +
+ "<span class='ui-icon " + this.options.icons.down + "'>&#9660;</span>" +
+ "</a>";
+ },
+
+ _start: function( event ) {
+ if ( !this.spinning && this._trigger( "start", event ) === false ) {
+ return false;
+ }
+
+ if ( !this.counter ) {
+ this.counter = 1;
+ }
+ this.spinning = true;
+ return true;
+ },
+
+ _repeat: function( i, steps, event ) {
+ i = i || 500;
+
+ clearTimeout( this.timer );
+ this.timer = this._delay(function() {
+ this._repeat( 40, steps, event );
+ }, i );
+
+ this._spin( steps * this.options.step, event );
+ },
+
+ _spin: function( step, event ) {
+ var value = this.value() || 0;
+
+ if ( !this.counter ) {
+ this.counter = 1;
+ }
+
+ value = this._adjustValue( value + step * this._increment( this.counter ) );
+
+ if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false) {
+ this._value( value );
+ this.counter++;
+ }
+ },
+
+ _increment: function( i ) {
+ var incremental = this.options.incremental;
+
+ if ( incremental ) {
+ return $.isFunction( incremental ) ?
+ incremental( i ) :
+ Math.floor( i * i * i / 50000 - i * i / 500 + 17 * i / 200 + 1 );
+ }
+
+ return 1;
+ },
+
+ _precision: function() {
+ var precision = this._precisionOf( this.options.step );
+ if ( this.options.min !== null ) {
+ precision = Math.max( precision, this._precisionOf( this.options.min ) );
+ }
+ return precision;
+ },
+
+ _precisionOf: function( num ) {
+ var str = num.toString(),
+ decimal = str.indexOf( "." );
+ return decimal === -1 ? 0 : str.length - decimal - 1;
+ },
+
+ _adjustValue: function( value ) {
+ var base, aboveMin,
+ options = this.options;
+
+ // make sure we're at a valid step
+ // - find out where we are relative to the base (min or 0)
+ base = options.min !== null ? options.min : 0;
+ aboveMin = value - base;
+ // - round to the nearest step
+ aboveMin = Math.round(aboveMin / options.step) * options.step;
+ // - rounding is based on 0, so adjust back to our base
+ value = base + aboveMin;
+
+ // fix precision from bad JS floating point math
+ value = parseFloat( value.toFixed( this._precision() ) );
+
+ // clamp the value
+ if ( options.max !== null && value > options.max) {
+ return options.max;
+ }
+ if ( options.min !== null && value < options.min ) {
+ return options.min;
+ }
+
+ return value;
+ },
+
+ _stop: function( event ) {
+ if ( !this.spinning ) {
+ return;
+ }
+
+ clearTimeout( this.timer );
+ clearTimeout( this.mousewheelTimer );
+ this.counter = 0;
+ this.spinning = false;
+ this._trigger( "stop", event );
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "culture" || key === "numberFormat" ) {
+ var prevValue = this._parse( this.element.val() );
+ this.options[ key ] = value;
+ this.element.val( this._format( prevValue ) );
+ return;
+ }
+
+ if ( key === "max" || key === "min" || key === "step" ) {
+ if ( typeof value === "string" ) {
+ value = this._parse( value );
+ }
+ }
+ if ( key === "icons" ) {
+ this.buttons.first().find( ".ui-icon" )
+ .removeClass( this.options.icons.up )
+ .addClass( value.up );
+ this.buttons.last().find( ".ui-icon" )
+ .removeClass( this.options.icons.down )
+ .addClass( value.down );
+ }
+
+ this._super( key, value );
+
+ if ( key === "disabled" ) {
+ this.widget().toggleClass( "ui-state-disabled", !!value );
+ this.element.prop( "disabled", !!value );
+ this.buttons.button( value ? "disable" : "enable" );
+ }
+ },
+
+ _setOptions: spinner_modifier(function( options ) {
+ this._super( options );
+ }),
+
+ _parse: function( val ) {
+ if ( typeof val === "string" && val !== "" ) {
+ val = window.Globalize && this.options.numberFormat ?
+ Globalize.parseFloat( val, 10, this.options.culture ) : +val;
+ }
+ return val === "" || isNaN( val ) ? null : val;
+ },
+
+ _format: function( value ) {
+ if ( value === "" ) {
+ return "";
+ }
+ return window.Globalize && this.options.numberFormat ?
+ Globalize.format( value, this.options.numberFormat, this.options.culture ) :
+ value;
+ },
+
+ _refresh: function() {
+ this.element.attr({
+ "aria-valuemin": this.options.min,
+ "aria-valuemax": this.options.max,
+ // TODO: what should we do with values that can't be parsed?
+ "aria-valuenow": this._parse( this.element.val() )
+ });
+ },
+
+ isValid: function() {
+ var value = this.value();
+
+ // null is invalid
+ if ( value === null ) {
+ return false;
+ }
+
+ // if value gets adjusted, it's invalid
+ return value === this._adjustValue( value );
+ },
+
+ // update the value without triggering change
+ _value: function( value, allowAny ) {
+ var parsed;
+ if ( value !== "" ) {
+ parsed = this._parse( value );
+ if ( parsed !== null ) {
+ if ( !allowAny ) {
+ parsed = this._adjustValue( parsed );
+ }
+ value = this._format( parsed );
+ }
+ }
+ this.element.val( value );
+ this._refresh();
+ },
+
+ _destroy: function() {
+ this.element
+ .removeClass( "ui-spinner-input" )
+ .prop( "disabled", false )
+ .removeAttr( "autocomplete" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-valuemin" )
+ .removeAttr( "aria-valuemax" )
+ .removeAttr( "aria-valuenow" );
+ this.uiSpinner.replaceWith( this.element );
+ },
+
+ stepUp: spinner_modifier(function( steps ) {
+ this._stepUp( steps );
+ }),
+ _stepUp: function( steps ) {
+ if ( this._start() ) {
+ this._spin( (steps || 1) * this.options.step );
+ this._stop();
+ }
+ },
+
+ stepDown: spinner_modifier(function( steps ) {
+ this._stepDown( steps );
+ }),
+ _stepDown: function( steps ) {
+ if ( this._start() ) {
+ this._spin( (steps || 1) * -this.options.step );
+ this._stop();
+ }
+ },
+
+ pageUp: spinner_modifier(function( pages ) {
+ this._stepUp( (pages || 1) * this.options.page );
+ }),
+
+ pageDown: spinner_modifier(function( pages ) {
+ this._stepDown( (pages || 1) * this.options.page );
+ }),
+
+ value: function( newVal ) {
+ if ( !arguments.length ) {
+ return this._parse( this.element.val() );
+ }
+ spinner_modifier( this._value ).call( this, newVal );
+ },
+
+ widget: function() {
+ return this.uiSpinner;
+ }
+});
+
+
+/*!
+ * jQuery UI Tabs 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/tabs/
+ */
+
+
+var tabs = $.widget( "ui.tabs", {
+ version: "1.11.3",
+ delay: 300,
+ options: {
+ active: null,
+ collapsible: false,
+ event: "click",
+ heightStyle: "content",
+ hide: null,
+ show: null,
+
+ // callbacks
+ activate: null,
+ beforeActivate: null,
+ beforeLoad: null,
+ load: null
+ },
+
+ _isLocal: (function() {
+ var rhash = /#.*$/;
+
+ return function( anchor ) {
+ var anchorUrl, locationUrl;
+
+ // support: IE7
+ // IE7 doesn't normalize the href property when set via script (#9317)
+ anchor = anchor.cloneNode( false );
+
+ anchorUrl = anchor.href.replace( rhash, "" );
+ locationUrl = location.href.replace( rhash, "" );
+
+ // decoding may throw an error if the URL isn't UTF-8 (#9518)
+ try {
+ anchorUrl = decodeURIComponent( anchorUrl );
+ } catch ( error ) {}
+ try {
+ locationUrl = decodeURIComponent( locationUrl );
+ } catch ( error ) {}
+
+ return anchor.hash.length > 1 && anchorUrl === locationUrl;
+ };
+ })(),
+
+ _create: function() {
+ var that = this,
+ options = this.options;
+
+ this.running = false;
+
+ this.element
+ .addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" )
+ .toggleClass( "ui-tabs-collapsible", options.collapsible );
+
+ this._processTabs();
+ options.active = this._initialActive();
+
+ // Take disabling tabs via class attribute from HTML
+ // into account and update option properly.
+ if ( $.isArray( options.disabled ) ) {
+ options.disabled = $.unique( options.disabled.concat(
+ $.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {
+ return that.tabs.index( li );
+ })
+ ) ).sort();
+ }
+
+ // check for length avoids error when initializing empty list
+ if ( this.options.active !== false && this.anchors.length ) {
+ this.active = this._findActive( options.active );
+ } else {
+ this.active = $();
+ }
+
+ this._refresh();
+
+ if ( this.active.length ) {
+ this.load( options.active );
+ }
+ },
+
+ _initialActive: function() {
+ var active = this.options.active,
+ collapsible = this.options.collapsible,
+ locationHash = location.hash.substring( 1 );
+
+ if ( active === null ) {
+ // check the fragment identifier in the URL
+ if ( locationHash ) {
+ this.tabs.each(function( i, tab ) {
+ if ( $( tab ).attr( "aria-controls" ) === locationHash ) {
+ active = i;
+ return false;
+ }
+ });
+ }
+
+ // check for a tab marked active via a class
+ if ( active === null ) {
+ active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );
+ }
+
+ // no active tab, set to false
+ if ( active === null || active === -1 ) {
+ active = this.tabs.length ? 0 : false;
+ }
+ }
+
+ // handle numbers: negative, out of range
+ if ( active !== false ) {
+ active = this.tabs.index( this.tabs.eq( active ) );
+ if ( active === -1 ) {
+ active = collapsible ? false : 0;
+ }
+ }
+
+ // don't allow collapsible: false and active: false
+ if ( !collapsible && active === false && this.anchors.length ) {
+ active = 0;
+ }
+
+ return active;
+ },
+
+ _getCreateEventData: function() {
+ return {
+ tab: this.active,
+ panel: !this.active.length ? $() : this._getPanelForTab( this.active )
+ };
+ },
+
+ _tabKeydown: function( event ) {
+ var focusedTab = $( this.document[0].activeElement ).closest( "li" ),
+ selectedIndex = this.tabs.index( focusedTab ),
+ goingForward = true;
+
+ if ( this._handlePageNav( event ) ) {
+ return;
+ }
+
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.RIGHT:
+ case $.ui.keyCode.DOWN:
+ selectedIndex++;
+ break;
+ case $.ui.keyCode.UP:
+ case $.ui.keyCode.LEFT:
+ goingForward = false;
+ selectedIndex--;
+ break;
+ case $.ui.keyCode.END:
+ selectedIndex = this.anchors.length - 1;
+ break;
+ case $.ui.keyCode.HOME:
+ selectedIndex = 0;
+ break;
+ case $.ui.keyCode.SPACE:
+ // Activate only, no collapsing
+ event.preventDefault();
+ clearTimeout( this.activating );
+ this._activate( selectedIndex );
+ return;
+ case $.ui.keyCode.ENTER:
+ // Toggle (cancel delayed activation, allow collapsing)
+ event.preventDefault();
+ clearTimeout( this.activating );
+ // Determine if we should collapse or activate
+ this._activate( selectedIndex === this.options.active ? false : selectedIndex );
+ return;
+ default:
+ return;
+ }
+
+ // Focus the appropriate tab, based on which key was pressed
+ event.preventDefault();
+ clearTimeout( this.activating );
+ selectedIndex = this._focusNextTab( selectedIndex, goingForward );
+
+ // Navigating with control/command key will prevent automatic activation
+ if ( !event.ctrlKey && !event.metaKey ) {
+
+ // Update aria-selected immediately so that AT think the tab is already selected.
+ // Otherwise AT may confuse the user by stating that they need to activate the tab,
+ // but the tab will already be activated by the time the announcement finishes.
+ focusedTab.attr( "aria-selected", "false" );
+ this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );
+
+ this.activating = this._delay(function() {
+ this.option( "active", selectedIndex );
+ }, this.delay );
+ }
+ },
+
+ _panelKeydown: function( event ) {
+ if ( this._handlePageNav( event ) ) {
+ return;
+ }
+
+ // Ctrl+up moves focus to the current tab
+ if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {
+ event.preventDefault();
+ this.active.focus();
+ }
+ },
+
+ // Alt+page up/down moves focus to the previous/next tab (and activates)
+ _handlePageNav: function( event ) {
+ if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {
+ this._activate( this._focusNextTab( this.options.active - 1, false ) );
+ return true;
+ }
+ if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {
+ this._activate( this._focusNextTab( this.options.active + 1, true ) );
+ return true;
+ }
+ },
+
+ _findNextTab: function( index, goingForward ) {
+ var lastTabIndex = this.tabs.length - 1;
+
+ function constrain() {
+ if ( index > lastTabIndex ) {
+ index = 0;
+ }
+ if ( index < 0 ) {
+ index = lastTabIndex;
+ }
+ return index;
+ }
+
+ while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {
+ index = goingForward ? index + 1 : index - 1;
+ }
+
+ return index;
+ },
+
+ _focusNextTab: function( index, goingForward ) {
+ index = this._findNextTab( index, goingForward );
+ this.tabs.eq( index ).focus();
+ return index;
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "active" ) {
+ // _activate() will handle invalid values and update this.options
+ this._activate( value );
+ return;
+ }
+
+ if ( key === "disabled" ) {
+ // don't use the widget factory's disabled handling
+ this._setupDisabled( value );
+ return;
+ }
+
+ this._super( key, value);
+
+ if ( key === "collapsible" ) {
+ this.element.toggleClass( "ui-tabs-collapsible", value );
+ // Setting collapsible: false while collapsed; open first panel
+ if ( !value && this.options.active === false ) {
+ this._activate( 0 );
+ }
+ }
+
+ if ( key === "event" ) {
+ this._setupEvents( value );
+ }
+
+ if ( key === "heightStyle" ) {
+ this._setupHeightStyle( value );
+ }
+ },
+
+ _sanitizeSelector: function( hash ) {
+ return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
+ },
+
+ refresh: function() {
+ var options = this.options,
+ lis = this.tablist.children( ":has(a[href])" );
+
+ // get disabled tabs from class attribute from HTML
+ // this will get converted to a boolean if needed in _refresh()
+ options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {
+ return lis.index( tab );
+ });
+
+ this._processTabs();
+
+ // was collapsed or no tabs
+ if ( options.active === false || !this.anchors.length ) {
+ options.active = false;
+ this.active = $();
+ // was active, but active tab is gone
+ } else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {
+ // all remaining tabs are disabled
+ if ( this.tabs.length === options.disabled.length ) {
+ options.active = false;
+ this.active = $();
+ // activate previous tab
+ } else {
+ this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );
+ }
+ // was active, active tab still exists
+ } else {
+ // make sure active index is correct
+ options.active = this.tabs.index( this.active );
+ }
+
+ this._refresh();
+ },
+
+ _refresh: function() {
+ this._setupDisabled( this.options.disabled );
+ this._setupEvents( this.options.event );
+ this._setupHeightStyle( this.options.heightStyle );
+
+ this.tabs.not( this.active ).attr({
+ "aria-selected": "false",
+ "aria-expanded": "false",
+ tabIndex: -1
+ });
+ this.panels.not( this._getPanelForTab( this.active ) )
+ .hide()
+ .attr({
+ "aria-hidden": "true"
+ });
+
+ // Make sure one tab is in the tab order
+ if ( !this.active.length ) {
+ this.tabs.eq( 0 ).attr( "tabIndex", 0 );
+ } else {
+ this.active
+ .addClass( "ui-tabs-active ui-state-active" )
+ .attr({
+ "aria-selected": "true",
+ "aria-expanded": "true",
+ tabIndex: 0
+ });
+ this._getPanelForTab( this.active )
+ .show()
+ .attr({
+ "aria-hidden": "false"
+ });
+ }
+ },
+
+ _processTabs: function() {
+ var that = this,
+ prevTabs = this.tabs,
+ prevAnchors = this.anchors,
+ prevPanels = this.panels;
+
+ this.tablist = this._getList()
+ .addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
+ .attr( "role", "tablist" )
+
+ // Prevent users from focusing disabled tabs via click
+ .delegate( "> li", "mousedown" + this.eventNamespace, function( event ) {
+ if ( $( this ).is( ".ui-state-disabled" ) ) {
+ event.preventDefault();
+ }
+ })
+
+ // support: IE <9
+ // Preventing the default action in mousedown doesn't prevent IE
+ // from focusing the element, so if the anchor gets focused, blur.
+ // We don't have to worry about focusing the previously focused
+ // element since clicking on a non-focusable element should focus
+ // the body anyway.
+ .delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() {
+ if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
+ this.blur();
+ }
+ });
+
+ this.tabs = this.tablist.find( "> li:has(a[href])" )
+ .addClass( "ui-state-default ui-corner-top" )
+ .attr({
+ role: "tab",
+ tabIndex: -1
+ });
+
+ this.anchors = this.tabs.map(function() {
+ return $( "a", this )[ 0 ];
+ })
+ .addClass( "ui-tabs-anchor" )
+ .attr({
+ role: "presentation",
+ tabIndex: -1
+ });
+
+ this.panels = $();
+
+ this.anchors.each(function( i, anchor ) {
+ var selector, panel, panelId,
+ anchorId = $( anchor ).uniqueId().attr( "id" ),
+ tab = $( anchor ).closest( "li" ),
+ originalAriaControls = tab.attr( "aria-controls" );
+
+ // inline tab
+ if ( that._isLocal( anchor ) ) {
+ selector = anchor.hash;
+ panelId = selector.substring( 1 );
+ panel = that.element.find( that._sanitizeSelector( selector ) );
+ // remote tab
+ } else {
+ // If the tab doesn't already have aria-controls,
+ // generate an id by using a throw-away element
+ panelId = tab.attr( "aria-controls" ) || $( {} ).uniqueId()[ 0 ].id;
+ selector = "#" + panelId;
+ panel = that.element.find( selector );
+ if ( !panel.length ) {
+ panel = that._createPanel( panelId );
+ panel.insertAfter( that.panels[ i - 1 ] || that.tablist );
+ }
+ panel.attr( "aria-live", "polite" );
+ }
+
+ if ( panel.length) {
+ that.panels = that.panels.add( panel );
+ }
+ if ( originalAriaControls ) {
+ tab.data( "ui-tabs-aria-controls", originalAriaControls );
+ }
+ tab.attr({
+ "aria-controls": panelId,
+ "aria-labelledby": anchorId
+ });
+ panel.attr( "aria-labelledby", anchorId );
+ });
+
+ this.panels
+ .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+ .attr( "role", "tabpanel" );
+
+ // Avoid memory leaks (#10056)
+ if ( prevTabs ) {
+ this._off( prevTabs.not( this.tabs ) );
+ this._off( prevAnchors.not( this.anchors ) );
+ this._off( prevPanels.not( this.panels ) );
+ }
+ },
+
+ // allow overriding how to find the list for rare usage scenarios (#7715)
+ _getList: function() {
+ return this.tablist || this.element.find( "ol,ul" ).eq( 0 );
+ },
+
+ _createPanel: function( id ) {
+ return $( "<div>" )
+ .attr( "id", id )
+ .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+ .data( "ui-tabs-destroy", true );
+ },
+
+ _setupDisabled: function( disabled ) {
+ if ( $.isArray( disabled ) ) {
+ if ( !disabled.length ) {
+ disabled = false;
+ } else if ( disabled.length === this.anchors.length ) {
+ disabled = true;
+ }
+ }
+
+ // disable tabs
+ for ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) {
+ if ( disabled === true || $.inArray( i, disabled ) !== -1 ) {
+ $( li )
+ .addClass( "ui-state-disabled" )
+ .attr( "aria-disabled", "true" );
+ } else {
+ $( li )
+ .removeClass( "ui-state-disabled" )
+ .removeAttr( "aria-disabled" );
+ }
+ }
+
+ this.options.disabled = disabled;
+ },
+
+ _setupEvents: function( event ) {
+ var events = {};
+ if ( event ) {
+ $.each( event.split(" "), function( index, eventName ) {
+ events[ eventName ] = "_eventHandler";
+ });
+ }
+
+ this._off( this.anchors.add( this.tabs ).add( this.panels ) );
+ // Always prevent the default action, even when disabled
+ this._on( true, this.anchors, {
+ click: function( event ) {
+ event.preventDefault();
+ }
+ });
+ this._on( this.anchors, events );
+ this._on( this.tabs, { keydown: "_tabKeydown" } );
+ this._on( this.panels, { keydown: "_panelKeydown" } );
+
+ this._focusable( this.tabs );
+ this._hoverable( this.tabs );
+ },
+
+ _setupHeightStyle: function( heightStyle ) {
+ var maxHeight,
+ parent = this.element.parent();
+
+ if ( heightStyle === "fill" ) {
+ maxHeight = parent.height();
+ maxHeight -= this.element.outerHeight() - this.element.height();
+
+ this.element.siblings( ":visible" ).each(function() {
+ var elem = $( this ),
+ position = elem.css( "position" );
+
+ if ( position === "absolute" || position === "fixed" ) {
+ return;
+ }
+ maxHeight -= elem.outerHeight( true );
+ });
+
+ this.element.children().not( this.panels ).each(function() {
+ maxHeight -= $( this ).outerHeight( true );
+ });
+
+ this.panels.each(function() {
+ $( this ).height( Math.max( 0, maxHeight -
+ $( this ).innerHeight() + $( this ).height() ) );
+ })
+ .css( "overflow", "auto" );
+ } else if ( heightStyle === "auto" ) {
+ maxHeight = 0;
+ this.panels.each(function() {
+ maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
+ }).height( maxHeight );
+ }
+ },
+
+ _eventHandler: function( event ) {
+ var options = this.options,
+ active = this.active,
+ anchor = $( event.currentTarget ),
+ tab = anchor.closest( "li" ),
+ clickedIsActive = tab[ 0 ] === active[ 0 ],
+ collapsing = clickedIsActive && options.collapsible,
+ toShow = collapsing ? $() : this._getPanelForTab( tab ),
+ toHide = !active.length ? $() : this._getPanelForTab( active ),
+ eventData = {
+ oldTab: active,
+ oldPanel: toHide,
+ newTab: collapsing ? $() : tab,
+ newPanel: toShow
+ };
+
+ event.preventDefault();
+
+ if ( tab.hasClass( "ui-state-disabled" ) ||
+ // tab is already loading
+ tab.hasClass( "ui-tabs-loading" ) ||
+ // can't switch durning an animation
+ this.running ||
+ // click on active header, but not collapsible
+ ( clickedIsActive && !options.collapsible ) ||
+ // allow canceling activation
+ ( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+ return;
+ }
+
+ options.active = collapsing ? false : this.tabs.index( tab );
+
+ this.active = clickedIsActive ? $() : tab;
+ if ( this.xhr ) {
+ this.xhr.abort();
+ }
+
+ if ( !toHide.length && !toShow.length ) {
+ $.error( "jQuery UI Tabs: Mismatching fragment identifier." );
+ }
+
+ if ( toShow.length ) {
+ this.load( this.tabs.index( tab ), event );
+ }
+ this._toggle( event, eventData );
+ },
+
+ // handles show/hide for selecting tabs
+ _toggle: function( event, eventData ) {
+ var that = this,
+ toShow = eventData.newPanel,
+ toHide = eventData.oldPanel;
+
+ this.running = true;
+
+ function complete() {
+ that.running = false;
+ that._trigger( "activate", event, eventData );
+ }
+
+ function show() {
+ eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" );
+
+ if ( toShow.length && that.options.show ) {
+ that._show( toShow, that.options.show, complete );
+ } else {
+ toShow.show();
+ complete();
+ }
+ }
+
+ // start out by hiding, then showing, then completing
+ if ( toHide.length && this.options.hide ) {
+ this._hide( toHide, this.options.hide, function() {
+ eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+ show();
+ });
+ } else {
+ eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+ toHide.hide();
+ show();
+ }
+
+ toHide.attr( "aria-hidden", "true" );
+ eventData.oldTab.attr({
+ "aria-selected": "false",
+ "aria-expanded": "false"
+ });
+ // If we're switching tabs, remove the old tab from the tab order.
+ // If we're opening from collapsed state, remove the previous tab from the tab order.
+ // If we're collapsing, then keep the collapsing tab in the tab order.
+ if ( toShow.length && toHide.length ) {
+ eventData.oldTab.attr( "tabIndex", -1 );
+ } else if ( toShow.length ) {
+ this.tabs.filter(function() {
+ return $( this ).attr( "tabIndex" ) === 0;
+ })
+ .attr( "tabIndex", -1 );
+ }
+
+ toShow.attr( "aria-hidden", "false" );
+ eventData.newTab.attr({
+ "aria-selected": "true",
+ "aria-expanded": "true",
+ tabIndex: 0
+ });
+ },
+
+ _activate: function( index ) {
+ var anchor,
+ active = this._findActive( index );
+
+ // trying to activate the already active panel
+ if ( active[ 0 ] === this.active[ 0 ] ) {
+ return;
+ }
+
+ // trying to collapse, simulate a click on the current active header
+ if ( !active.length ) {
+ active = this.active;
+ }
+
+ anchor = active.find( ".ui-tabs-anchor" )[ 0 ];
+ this._eventHandler({
+ target: anchor,
+ currentTarget: anchor,
+ preventDefault: $.noop
+ });
+ },
+
+ _findActive: function( index ) {
+ return index === false ? $() : this.tabs.eq( index );
+ },
+
+ _getIndex: function( index ) {
+ // meta-function to give users option to provide a href string instead of a numerical index.
+ if ( typeof index === "string" ) {
+ index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) );
+ }
+
+ return index;
+ },
+
+ _destroy: function() {
+ if ( this.xhr ) {
+ this.xhr.abort();
+ }
+
+ this.element.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" );
+
+ this.tablist
+ .removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
+ .removeAttr( "role" );
+
+ this.anchors
+ .removeClass( "ui-tabs-anchor" )
+ .removeAttr( "role" )
+ .removeAttr( "tabIndex" )
+ .removeUniqueId();
+
+ this.tablist.unbind( this.eventNamespace );
+
+ this.tabs.add( this.panels ).each(function() {
+ if ( $.data( this, "ui-tabs-destroy" ) ) {
+ $( this ).remove();
+ } else {
+ $( this )
+ .removeClass( "ui-state-default ui-state-active ui-state-disabled " +
+ "ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel" )
+ .removeAttr( "tabIndex" )
+ .removeAttr( "aria-live" )
+ .removeAttr( "aria-busy" )
+ .removeAttr( "aria-selected" )
+ .removeAttr( "aria-labelledby" )
+ .removeAttr( "aria-hidden" )
+ .removeAttr( "aria-expanded" )
+ .removeAttr( "role" );
+ }
+ });
+
+ this.tabs.each(function() {
+ var li = $( this ),
+ prev = li.data( "ui-tabs-aria-controls" );
+ if ( prev ) {
+ li
+ .attr( "aria-controls", prev )
+ .removeData( "ui-tabs-aria-controls" );
+ } else {
+ li.removeAttr( "aria-controls" );
+ }
+ });
+
+ this.panels.show();
+
+ if ( this.options.heightStyle !== "content" ) {
+ this.panels.css( "height", "" );
+ }
+ },
+
+ enable: function( index ) {
+ var disabled = this.options.disabled;
+ if ( disabled === false ) {
+ return;
+ }
+
+ if ( index === undefined ) {
+ disabled = false;
+ } else {
+ index = this._getIndex( index );
+ if ( $.isArray( disabled ) ) {
+ disabled = $.map( disabled, function( num ) {
+ return num !== index ? num : null;
+ });
+ } else {
+ disabled = $.map( this.tabs, function( li, num ) {
+ return num !== index ? num : null;
+ });
+ }
+ }
+ this._setupDisabled( disabled );
+ },
+
+ disable: function( index ) {
+ var disabled = this.options.disabled;
+ if ( disabled === true ) {
+ return;
+ }
+
+ if ( index === undefined ) {
+ disabled = true;
+ } else {
+ index = this._getIndex( index );
+ if ( $.inArray( index, disabled ) !== -1 ) {
+ return;
+ }
+ if ( $.isArray( disabled ) ) {
+ disabled = $.merge( [ index ], disabled ).sort();
+ } else {
+ disabled = [ index ];
+ }
+ }
+ this._setupDisabled( disabled );
+ },
+
+ load: function( index, event ) {
+ index = this._getIndex( index );
+ var that = this,
+ tab = this.tabs.eq( index ),
+ anchor = tab.find( ".ui-tabs-anchor" ),
+ panel = this._getPanelForTab( tab ),
+ eventData = {
+ tab: tab,
+ panel: panel
+ };
+
+ // not remote
+ if ( this._isLocal( anchor[ 0 ] ) ) {
+ return;
+ }
+
+ this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
+
+ // support: jQuery <1.8
+ // jQuery <1.8 returns false if the request is canceled in beforeSend,
+ // but as of 1.8, $.ajax() always returns a jqXHR object.
+ if ( this.xhr && this.xhr.statusText !== "canceled" ) {
+ tab.addClass( "ui-tabs-loading" );
+ panel.attr( "aria-busy", "true" );
+
+ this.xhr
+ .success(function( response ) {
+ // support: jQuery <1.8
+ // http://bugs.jquery.com/ticket/11778
+ setTimeout(function() {
+ panel.html( response );
+ that._trigger( "load", event, eventData );
+ }, 1 );
+ })
+ .complete(function( jqXHR, status ) {
+ // support: jQuery <1.8
+ // http://bugs.jquery.com/ticket/11778
+ setTimeout(function() {
+ if ( status === "abort" ) {
+ that.panels.stop( false, true );
+ }
+
+ tab.removeClass( "ui-tabs-loading" );
+ panel.removeAttr( "aria-busy" );
+
+ if ( jqXHR === that.xhr ) {
+ delete that.xhr;
+ }
+ }, 1 );
+ });
+ }
+ },
+
+ _ajaxSettings: function( anchor, event, eventData ) {
+ var that = this;
+ return {
+ url: anchor.attr( "href" ),
+ beforeSend: function( jqXHR, settings ) {
+ return that._trigger( "beforeLoad", event,
+ $.extend( { jqXHR: jqXHR, ajaxSettings: settings }, eventData ) );
+ }
+ };
+ },
+
+ _getPanelForTab: function( tab ) {
+ var id = $( tab ).attr( "aria-controls" );
+ return this.element.find( this._sanitizeSelector( "#" + id ) );
+ }
+});
+
+
+/*!
+ * jQuery UI Tooltip 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/tooltip/
+ */
+
+
+var tooltip = $.widget( "ui.tooltip", {
+ version: "1.11.3",
+ options: {
+ content: function() {
+ // support: IE<9, Opera in jQuery <1.7
+ // .text() can't accept undefined, so coerce to a string
+ var title = $( this ).attr( "title" ) || "";
+ // Escape title, since we're going from an attribute to raw HTML
+ return $( "<a>" ).text( title ).html();
+ },
+ hide: true,
+ // Disabled elements have inconsistent behavior across browsers (#8661)
+ items: "[title]:not([disabled])",
+ position: {
+ my: "left top+15",
+ at: "left bottom",
+ collision: "flipfit flip"
+ },
+ show: true,
+ tooltipClass: null,
+ track: false,
+
+ // callbacks
+ close: null,
+ open: null
+ },
+
+ _addDescribedBy: function( elem, id ) {
+ var describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ );
+ describedby.push( id );
+ elem
+ .data( "ui-tooltip-id", id )
+ .attr( "aria-describedby", $.trim( describedby.join( " " ) ) );
+ },
+
+ _removeDescribedBy: function( elem ) {
+ var id = elem.data( "ui-tooltip-id" ),
+ describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ),
+ index = $.inArray( id, describedby );
+
+ if ( index !== -1 ) {
+ describedby.splice( index, 1 );
+ }
+
+ elem.removeData( "ui-tooltip-id" );
+ describedby = $.trim( describedby.join( " " ) );
+ if ( describedby ) {
+ elem.attr( "aria-describedby", describedby );
+ } else {
+ elem.removeAttr( "aria-describedby" );
+ }
+ },
+
+ _create: function() {
+ this._on({
+ mouseover: "open",
+ focusin: "open"
+ });
+
+ // IDs of generated tooltips, needed for destroy
+ this.tooltips = {};
+
+ // IDs of parent tooltips where we removed the title attribute
+ this.parents = {};
+
+ if ( this.options.disabled ) {
+ this._disable();
+ }
+
+ // Append the aria-live region so tooltips announce correctly
+ this.liveRegion = $( "<div>" )
+ .attr({
+ role: "log",
+ "aria-live": "assertive",
+ "aria-relevant": "additions"
+ })
+ .addClass( "ui-helper-hidden-accessible" )
+ .appendTo( this.document[ 0 ].body );
+ },
+
+ _setOption: function( key, value ) {
+ var that = this;
+
+ if ( key === "disabled" ) {
+ this[ value ? "_disable" : "_enable" ]();
+ this.options[ key ] = value;
+ // disable element style changes
+ return;
+ }
+
+ this._super( key, value );
+
+ if ( key === "content" ) {
+ $.each( this.tooltips, function( id, tooltipData ) {
+ that._updateContent( tooltipData.element );
+ });
+ }
+ },
+
+ _disable: function() {
+ var that = this;
+
+ // close open tooltips
+ $.each( this.tooltips, function( id, tooltipData ) {
+ var event = $.Event( "blur" );
+ event.target = event.currentTarget = tooltipData.element[ 0 ];
+ that.close( event, true );
+ });
+
+ // remove title attributes to prevent native tooltips
+ this.element.find( this.options.items ).addBack().each(function() {
+ var element = $( this );
+ if ( element.is( "[title]" ) ) {
+ element
+ .data( "ui-tooltip-title", element.attr( "title" ) )
+ .removeAttr( "title" );
+ }
+ });
+ },
+
+ _enable: function() {
+ // restore title attributes
+ this.element.find( this.options.items ).addBack().each(function() {
+ var element = $( this );
+ if ( element.data( "ui-tooltip-title" ) ) {
+ element.attr( "title", element.data( "ui-tooltip-title" ) );
+ }
+ });
+ },
+
+ open: function( event ) {
+ var that = this,
+ target = $( event ? event.target : this.element )
+ // we need closest here due to mouseover bubbling,
+ // but always pointing at the same event target
+ .closest( this.options.items );
+
+ // No element to show a tooltip for or the tooltip is already open
+ if ( !target.length || target.data( "ui-tooltip-id" ) ) {
+ return;
+ }
+
+ if ( target.attr( "title" ) ) {
+ target.data( "ui-tooltip-title", target.attr( "title" ) );
+ }
+
+ target.data( "ui-tooltip-open", true );
+
+ // kill parent tooltips, custom or native, for hover
+ if ( event && event.type === "mouseover" ) {
+ target.parents().each(function() {
+ var parent = $( this ),
+ blurEvent;
+ if ( parent.data( "ui-tooltip-open" ) ) {
+ blurEvent = $.Event( "blur" );
+ blurEvent.target = blurEvent.currentTarget = this;
+ that.close( blurEvent, true );
+ }
+ if ( parent.attr( "title" ) ) {
+ parent.uniqueId();
+ that.parents[ this.id ] = {
+ element: this,
+ title: parent.attr( "title" )
+ };
+ parent.attr( "title", "" );
+ }
+ });
+ }
+
+ this._updateContent( target, event );
+ },
+
+ _updateContent: function( target, event ) {
+ var content,
+ contentOption = this.options.content,
+ that = this,
+ eventType = event ? event.type : null;
+
+ if ( typeof contentOption === "string" ) {
+ return this._open( event, target, contentOption );
+ }
+
+ content = contentOption.call( target[0], function( response ) {
+ // ignore async response if tooltip was closed already
+ if ( !target.data( "ui-tooltip-open" ) ) {
+ return;
+ }
+ // IE may instantly serve a cached response for ajax requests
+ // delay this call to _open so the other call to _open runs first
+ that._delay(function() {
+ // jQuery creates a special event for focusin when it doesn't
+ // exist natively. To improve performance, the native event
+ // object is reused and the type is changed. Therefore, we can't
+ // rely on the type being correct after the event finished
+ // bubbling, so we set it back to the previous value. (#8740)
+ if ( event ) {
+ event.type = eventType;
+ }
+ this._open( event, target, response );
+ });
+ });
+ if ( content ) {
+ this._open( event, target, content );
+ }
+ },
+
+ _open: function( event, target, content ) {
+ var tooltipData, tooltip, events, delayedShow, a11yContent,
+ positionOption = $.extend( {}, this.options.position );
+
+ if ( !content ) {
+ return;
+ }
+
+ // Content can be updated multiple times. If the tooltip already
+ // exists, then just update the content and bail.
+ tooltipData = this._find( target );
+ if ( tooltipData ) {
+ tooltipData.tooltip.find( ".ui-tooltip-content" ).html( content );
+ return;
+ }
+
+ // if we have a title, clear it to prevent the native tooltip
+ // we have to check first to avoid defining a title if none exists
+ // (we don't want to cause an element to start matching [title])
+ //
+ // We use removeAttr only for key events, to allow IE to export the correct
+ // accessible attributes. For mouse events, set to empty string to avoid
+ // native tooltip showing up (happens only when removing inside mouseover).
+ if ( target.is( "[title]" ) ) {
+ if ( event && event.type === "mouseover" ) {
+ target.attr( "title", "" );
+ } else {
+ target.removeAttr( "title" );
+ }
+ }
+
+ tooltipData = this._tooltip( target );
+ tooltip = tooltipData.tooltip;
+ this._addDescribedBy( target, tooltip.attr( "id" ) );
+ tooltip.find( ".ui-tooltip-content" ).html( content );
+
+ // Support: Voiceover on OS X, JAWS on IE <= 9
+ // JAWS announces deletions even when aria-relevant="additions"
+ // Voiceover will sometimes re-read the entire log region's contents from the beginning
+ this.liveRegion.children().hide();
+ if ( content.clone ) {
+ a11yContent = content.clone();
+ a11yContent.removeAttr( "id" ).find( "[id]" ).removeAttr( "id" );
+ } else {
+ a11yContent = content;
+ }
+ $( "<div>" ).html( a11yContent ).appendTo( this.liveRegion );
+
+ function position( event ) {
+ positionOption.of = event;
+ if ( tooltip.is( ":hidden" ) ) {
+ return;
+ }
+ tooltip.position( positionOption );
+ }
+ if ( this.options.track && event && /^mouse/.test( event.type ) ) {
+ this._on( this.document, {
+ mousemove: position
+ });
+ // trigger once to override element-relative positioning
+ position( event );
+ } else {
+ tooltip.position( $.extend({
+ of: target
+ }, this.options.position ) );
+ }
+
+ tooltip.hide();
+
+ this._show( tooltip, this.options.show );
+ // Handle tracking tooltips that are shown with a delay (#8644). As soon
+ // as the tooltip is visible, position the tooltip using the most recent
+ // event.
+ if ( this.options.show && this.options.show.delay ) {
+ delayedShow = this.delayedShow = setInterval(function() {
+ if ( tooltip.is( ":visible" ) ) {
+ position( positionOption.of );
+ clearInterval( delayedShow );
+ }
+ }, $.fx.interval );
+ }
+
+ this._trigger( "open", event, { tooltip: tooltip } );
+
+ events = {
+ keyup: function( event ) {
+ if ( event.keyCode === $.ui.keyCode.ESCAPE ) {
+ var fakeEvent = $.Event(event);
+ fakeEvent.currentTarget = target[0];
+ this.close( fakeEvent, true );
+ }
+ }
+ };
+
+ // Only bind remove handler for delegated targets. Non-delegated
+ // tooltips will handle this in destroy.
+ if ( target[ 0 ] !== this.element[ 0 ] ) {
+ events.remove = function() {
+ this._removeTooltip( tooltip );
+ };
+ }
+
+ if ( !event || event.type === "mouseover" ) {
+ events.mouseleave = "close";
+ }
+ if ( !event || event.type === "focusin" ) {
+ events.focusout = "close";
+ }
+ this._on( true, target, events );
+ },
+
+ close: function( event ) {
+ var tooltip,
+ that = this,
+ target = $( event ? event.currentTarget : this.element ),
+ tooltipData = this._find( target );
+
+ // The tooltip may already be closed
+ if ( !tooltipData ) {
+ return;
+ }
+
+ tooltip = tooltipData.tooltip;
+
+ // disabling closes the tooltip, so we need to track when we're closing
+ // to avoid an infinite loop in case the tooltip becomes disabled on close
+ if ( tooltipData.closing ) {
+ return;
+ }
+
+ // Clear the interval for delayed tracking tooltips
+ clearInterval( this.delayedShow );
+
+ // only set title if we had one before (see comment in _open())
+ // If the title attribute has changed since open(), don't restore
+ if ( target.data( "ui-tooltip-title" ) && !target.attr( "title" ) ) {
+ target.attr( "title", target.data( "ui-tooltip-title" ) );
+ }
+
+ this._removeDescribedBy( target );
+
+ tooltipData.hiding = true;
+ tooltip.stop( true );
+ this._hide( tooltip, this.options.hide, function() {
+ that._removeTooltip( $( this ) );
+ });
+
+ target.removeData( "ui-tooltip-open" );
+ this._off( target, "mouseleave focusout keyup" );
+
+ // Remove 'remove' binding only on delegated targets
+ if ( target[ 0 ] !== this.element[ 0 ] ) {
+ this._off( target, "remove" );
+ }
+ this._off( this.document, "mousemove" );
+
+ if ( event && event.type === "mouseleave" ) {
+ $.each( this.parents, function( id, parent ) {
+ $( parent.element ).attr( "title", parent.title );
+ delete that.parents[ id ];
+ });
+ }
+
+ tooltipData.closing = true;
+ this._trigger( "close", event, { tooltip: tooltip } );
+ if ( !tooltipData.hiding ) {
+ tooltipData.closing = false;
+ }
+ },
+
+ _tooltip: function( element ) {
+ var tooltip = $( "<div>" )
+ .attr( "role", "tooltip" )
+ .addClass( "ui-tooltip ui-widget ui-corner-all ui-widget-content " +
+ ( this.options.tooltipClass || "" ) ),
+ id = tooltip.uniqueId().attr( "id" );
+
+ $( "<div>" )
+ .addClass( "ui-tooltip-content" )
+ .appendTo( tooltip );
+
+ tooltip.appendTo( this.document[0].body );
+
+ return this.tooltips[ id ] = {
+ element: element,
+ tooltip: tooltip
+ };
+ },
+
+ _find: function( target ) {
+ var id = target.data( "ui-tooltip-id" );
+ return id ? this.tooltips[ id ] : null;
+ },
+
+ _removeTooltip: function( tooltip ) {
+ tooltip.remove();
+ delete this.tooltips[ tooltip.attr( "id" ) ];
+ },
+
+ _destroy: function() {
+ var that = this;
+
+ // close open tooltips
+ $.each( this.tooltips, function( id, tooltipData ) {
+ // Delegate to close method to handle common cleanup
+ var event = $.Event( "blur" ),
+ element = tooltipData.element;
+ event.target = event.currentTarget = element[ 0 ];
+ that.close( event, true );
+
+ // Remove immediately; destroying an open tooltip doesn't use the
+ // hide animation
+ $( "#" + id ).remove();
+
+ // Restore the title
+ if ( element.data( "ui-tooltip-title" ) ) {
+ // If the title attribute has changed since open(), don't restore
+ if ( !element.attr( "title" ) ) {
+ element.attr( "title", element.data( "ui-tooltip-title" ) );
+ }
+ element.removeData( "ui-tooltip-title" );
+ }
+ });
+ this.liveRegion.remove();
+ }
+});
+
+
+/*!
+ * jQuery UI Effects 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/category/effects-core/
+ */
+
+
+var dataSpace = "ui-effects-",
+
+ // Create a local jQuery because jQuery Color relies on it and the
+ // global may not exist with AMD and a custom build (#10199)
+ jQuery = $;
+
+$.effects = {
+ effect: {}
+};
+
+/*!
+ * jQuery Color Animations v2.1.2
+ * https://github.com/jquery/jquery-color
+ *
+ * Copyright 2014 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * Date: Wed Jan 16 08:47:09 2013 -0600
+ */
+(function( jQuery, undefined ) {
+
+ var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
+
+ // plusequals test for += 100 -= 100
+ rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
+ // a set of RE's that can match strings and generate color tuples.
+ stringParsers = [ {
+ re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+ parse: function( execResult ) {
+ return [
+ execResult[ 1 ],
+ execResult[ 2 ],
+ execResult[ 3 ],
+ execResult[ 4 ]
+ ];
+ }
+ }, {
+ re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+ parse: function( execResult ) {
+ return [
+ execResult[ 1 ] * 2.55,
+ execResult[ 2 ] * 2.55,
+ execResult[ 3 ] * 2.55,
+ execResult[ 4 ]
+ ];
+ }
+ }, {
+ // this regex ignores A-F because it's compared against an already lowercased string
+ re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
+ parse: function( execResult ) {
+ return [
+ parseInt( execResult[ 1 ], 16 ),
+ parseInt( execResult[ 2 ], 16 ),
+ parseInt( execResult[ 3 ], 16 )
+ ];
+ }
+ }, {
+ // this regex ignores A-F because it's compared against an already lowercased string
+ re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
+ parse: function( execResult ) {
+ return [
+ parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
+ parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
+ parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
+ ];
+ }
+ }, {
+ re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+ space: "hsla",
+ parse: function( execResult ) {
+ return [
+ execResult[ 1 ],
+ execResult[ 2 ] / 100,
+ execResult[ 3 ] / 100,
+ execResult[ 4 ]
+ ];
+ }
+ } ],
+
+ // jQuery.Color( )
+ color = jQuery.Color = function( color, green, blue, alpha ) {
+ return new jQuery.Color.fn.parse( color, green, blue, alpha );
+ },
+ spaces = {
+ rgba: {
+ props: {
+ red: {
+ idx: 0,
+ type: "byte"
+ },
+ green: {
+ idx: 1,
+ type: "byte"
+ },
+ blue: {
+ idx: 2,
+ type: "byte"
+ }
+ }
+ },
+
+ hsla: {
+ props: {
+ hue: {
+ idx: 0,
+ type: "degrees"
+ },
+ saturation: {
+ idx: 1,
+ type: "percent"
+ },
+ lightness: {
+ idx: 2,
+ type: "percent"
+ }
+ }
+ }
+ },
+ propTypes = {
+ "byte": {
+ floor: true,
+ max: 255
+ },
+ "percent": {
+ max: 1
+ },
+ "degrees": {
+ mod: 360,
+ floor: true
+ }
+ },
+ support = color.support = {},
+
+ // element for support tests
+ supportElem = jQuery( "<p>" )[ 0 ],
+
+ // colors = jQuery.Color.names
+ colors,
+
+ // local aliases of functions called often
+ each = jQuery.each;
+
+// determine rgba support immediately
+supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
+support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
+
+// define cache name and alpha properties
+// for rgba and hsla spaces
+each( spaces, function( spaceName, space ) {
+ space.cache = "_" + spaceName;
+ space.props.alpha = {
+ idx: 3,
+ type: "percent",
+ def: 1
+ };
+});
+
+function clamp( value, prop, allowEmpty ) {
+ var type = propTypes[ prop.type ] || {};
+
+ if ( value == null ) {
+ return (allowEmpty || !prop.def) ? null : prop.def;
+ }
+
+ // ~~ is an short way of doing floor for positive numbers
+ value = type.floor ? ~~value : parseFloat( value );
+
+ // IE will pass in empty strings as value for alpha,
+ // which will hit this case
+ if ( isNaN( value ) ) {
+ return prop.def;
+ }
+
+ if ( type.mod ) {
+ // we add mod before modding to make sure that negatives values
+ // get converted properly: -10 -> 350
+ return (value + type.mod) % type.mod;
+ }
+
+ // for now all property types without mod have min and max
+ return 0 > value ? 0 : type.max < value ? type.max : value;
+}
+
+function stringParse( string ) {
+ var inst = color(),
+ rgba = inst._rgba = [];
+
+ string = string.toLowerCase();
+
+ each( stringParsers, function( i, parser ) {
+ var parsed,
+ match = parser.re.exec( string ),
+ values = match && parser.parse( match ),
+ spaceName = parser.space || "rgba";
+
+ if ( values ) {
+ parsed = inst[ spaceName ]( values );
+
+ // if this was an rgba parse the assignment might happen twice
+ // oh well....
+ inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
+ rgba = inst._rgba = parsed._rgba;
+
+ // exit each( stringParsers ) here because we matched
+ return false;
+ }
+ });
+
+ // Found a stringParser that handled it
+ if ( rgba.length ) {
+
+ // if this came from a parsed string, force "transparent" when alpha is 0
+ // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
+ if ( rgba.join() === "0,0,0,0" ) {
+ jQuery.extend( rgba, colors.transparent );
+ }
+ return inst;
+ }
+
+ // named colors
+ return colors[ string ];
+}
+
+color.fn = jQuery.extend( color.prototype, {
+ parse: function( red, green, blue, alpha ) {
+ if ( red === undefined ) {
+ this._rgba = [ null, null, null, null ];
+ return this;
+ }
+ if ( red.jquery || red.nodeType ) {
+ red = jQuery( red ).css( green );
+ green = undefined;
+ }
+
+ var inst = this,
+ type = jQuery.type( red ),
+ rgba = this._rgba = [];
+
+ // more than 1 argument specified - assume ( red, green, blue, alpha )
+ if ( green !== undefined ) {
+ red = [ red, green, blue, alpha ];
+ type = "array";
+ }
+
+ if ( type === "string" ) {
+ return this.parse( stringParse( red ) || colors._default );
+ }
+
+ if ( type === "array" ) {
+ each( spaces.rgba.props, function( key, prop ) {
+ rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
+ });
+ return this;
+ }
+
+ if ( type === "object" ) {
+ if ( red instanceof color ) {
+ each( spaces, function( spaceName, space ) {
+ if ( red[ space.cache ] ) {
+ inst[ space.cache ] = red[ space.cache ].slice();
+ }
+ });
+ } else {
+ each( spaces, function( spaceName, space ) {
+ var cache = space.cache;
+ each( space.props, function( key, prop ) {
+
+ // if the cache doesn't exist, and we know how to convert
+ if ( !inst[ cache ] && space.to ) {
+
+ // if the value was null, we don't need to copy it
+ // if the key was alpha, we don't need to copy it either
+ if ( key === "alpha" || red[ key ] == null ) {
+ return;
+ }
+ inst[ cache ] = space.to( inst._rgba );
+ }
+
+ // this is the only case where we allow nulls for ALL properties.
+ // call clamp with alwaysAllowEmpty
+ inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
+ });
+
+ // everything defined but alpha?
+ if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
+ // use the default of 1
+ inst[ cache ][ 3 ] = 1;
+ if ( space.from ) {
+ inst._rgba = space.from( inst[ cache ] );
+ }
+ }
+ });
+ }
+ return this;
+ }
+ },
+ is: function( compare ) {
+ var is = color( compare ),
+ same = true,
+ inst = this;
+
+ each( spaces, function( _, space ) {
+ var localCache,
+ isCache = is[ space.cache ];
+ if (isCache) {
+ localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
+ each( space.props, function( _, prop ) {
+ if ( isCache[ prop.idx ] != null ) {
+ same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
+ return same;
+ }
+ });
+ }
+ return same;
+ });
+ return same;
+ },
+ _space: function() {
+ var used = [],
+ inst = this;
+ each( spaces, function( spaceName, space ) {
+ if ( inst[ space.cache ] ) {
+ used.push( spaceName );
+ }
+ });
+ return used.pop();
+ },
+ transition: function( other, distance ) {
+ var end = color( other ),
+ spaceName = end._space(),
+ space = spaces[ spaceName ],
+ startColor = this.alpha() === 0 ? color( "transparent" ) : this,
+ start = startColor[ space.cache ] || space.to( startColor._rgba ),
+ result = start.slice();
+
+ end = end[ space.cache ];
+ each( space.props, function( key, prop ) {
+ var index = prop.idx,
+ startValue = start[ index ],
+ endValue = end[ index ],
+ type = propTypes[ prop.type ] || {};
+
+ // if null, don't override start value
+ if ( endValue === null ) {
+ return;
+ }
+ // if null - use end
+ if ( startValue === null ) {
+ result[ index ] = endValue;
+ } else {
+ if ( type.mod ) {
+ if ( endValue - startValue > type.mod / 2 ) {
+ startValue += type.mod;
+ } else if ( startValue - endValue > type.mod / 2 ) {
+ startValue -= type.mod;
+ }
+ }
+ result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
+ }
+ });
+ return this[ spaceName ]( result );
+ },
+ blend: function( opaque ) {
+ // if we are already opaque - return ourself
+ if ( this._rgba[ 3 ] === 1 ) {
+ return this;
+ }
+
+ var rgb = this._rgba.slice(),
+ a = rgb.pop(),
+ blend = color( opaque )._rgba;
+
+ return color( jQuery.map( rgb, function( v, i ) {
+ return ( 1 - a ) * blend[ i ] + a * v;
+ }));
+ },
+ toRgbaString: function() {
+ var prefix = "rgba(",
+ rgba = jQuery.map( this._rgba, function( v, i ) {
+ return v == null ? ( i > 2 ? 1 : 0 ) : v;
+ });
+
+ if ( rgba[ 3 ] === 1 ) {
+ rgba.pop();
+ prefix = "rgb(";
+ }
+
+ return prefix + rgba.join() + ")";
+ },
+ toHslaString: function() {
+ var prefix = "hsla(",
+ hsla = jQuery.map( this.hsla(), function( v, i ) {
+ if ( v == null ) {
+ v = i > 2 ? 1 : 0;
+ }
+
+ // catch 1 and 2
+ if ( i && i < 3 ) {
+ v = Math.round( v * 100 ) + "%";
+ }
+ return v;
+ });
+
+ if ( hsla[ 3 ] === 1 ) {
+ hsla.pop();
+ prefix = "hsl(";
+ }
+ return prefix + hsla.join() + ")";
+ },
+ toHexString: function( includeAlpha ) {
+ var rgba = this._rgba.slice(),
+ alpha = rgba.pop();
+
+ if ( includeAlpha ) {
+ rgba.push( ~~( alpha * 255 ) );
+ }
+
+ return "#" + jQuery.map( rgba, function( v ) {
+
+ // default to 0 when nulls exist
+ v = ( v || 0 ).toString( 16 );
+ return v.length === 1 ? "0" + v : v;
+ }).join("");
+ },
+ toString: function() {
+ return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
+ }
+});
+color.fn.parse.prototype = color.fn;
+
+// hsla conversions adapted from:
+// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
+
+function hue2rgb( p, q, h ) {
+ h = ( h + 1 ) % 1;
+ if ( h * 6 < 1 ) {
+ return p + ( q - p ) * h * 6;
+ }
+ if ( h * 2 < 1) {
+ return q;
+ }
+ if ( h * 3 < 2 ) {
+ return p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6;
+ }
+ return p;
+}
+
+spaces.hsla.to = function( rgba ) {
+ if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
+ return [ null, null, null, rgba[ 3 ] ];
+ }
+ var r = rgba[ 0 ] / 255,
+ g = rgba[ 1 ] / 255,
+ b = rgba[ 2 ] / 255,
+ a = rgba[ 3 ],
+ max = Math.max( r, g, b ),
+ min = Math.min( r, g, b ),
+ diff = max - min,
+ add = max + min,
+ l = add * 0.5,
+ h, s;
+
+ if ( min === max ) {
+ h = 0;
+ } else if ( r === max ) {
+ h = ( 60 * ( g - b ) / diff ) + 360;
+ } else if ( g === max ) {
+ h = ( 60 * ( b - r ) / diff ) + 120;
+ } else {
+ h = ( 60 * ( r - g ) / diff ) + 240;
+ }
+
+ // chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
+ // otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
+ if ( diff === 0 ) {
+ s = 0;
+ } else if ( l <= 0.5 ) {
+ s = diff / add;
+ } else {
+ s = diff / ( 2 - add );
+ }
+ return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
+};
+
+spaces.hsla.from = function( hsla ) {
+ if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
+ return [ null, null, null, hsla[ 3 ] ];
+ }
+ var h = hsla[ 0 ] / 360,
+ s = hsla[ 1 ],
+ l = hsla[ 2 ],
+ a = hsla[ 3 ],
+ q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
+ p = 2 * l - q;
+
+ return [
+ Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
+ Math.round( hue2rgb( p, q, h ) * 255 ),
+ Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
+ a
+ ];
+};
+
+each( spaces, function( spaceName, space ) {
+ var props = space.props,
+ cache = space.cache,
+ to = space.to,
+ from = space.from;
+
+ // makes rgba() and hsla()
+ color.fn[ spaceName ] = function( value ) {
+
+ // generate a cache for this space if it doesn't exist
+ if ( to && !this[ cache ] ) {
+ this[ cache ] = to( this._rgba );
+ }
+ if ( value === undefined ) {
+ return this[ cache ].slice();
+ }
+
+ var ret,
+ type = jQuery.type( value ),
+ arr = ( type === "array" || type === "object" ) ? value : arguments,
+ local = this[ cache ].slice();
+
+ each( props, function( key, prop ) {
+ var val = arr[ type === "object" ? key : prop.idx ];
+ if ( val == null ) {
+ val = local[ prop.idx ];
+ }
+ local[ prop.idx ] = clamp( val, prop );
+ });
+
+ if ( from ) {
+ ret = color( from( local ) );
+ ret[ cache ] = local;
+ return ret;
+ } else {
+ return color( local );
+ }
+ };
+
+ // makes red() green() blue() alpha() hue() saturation() lightness()
+ each( props, function( key, prop ) {
+ // alpha is included in more than one space
+ if ( color.fn[ key ] ) {
+ return;
+ }
+ color.fn[ key ] = function( value ) {
+ var vtype = jQuery.type( value ),
+ fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
+ local = this[ fn ](),
+ cur = local[ prop.idx ],
+ match;
+
+ if ( vtype === "undefined" ) {
+ return cur;
+ }
+
+ if ( vtype === "function" ) {
+ value = value.call( this, cur );
+ vtype = jQuery.type( value );
+ }
+ if ( value == null && prop.empty ) {
+ return this;
+ }
+ if ( vtype === "string" ) {
+ match = rplusequals.exec( value );
+ if ( match ) {
+ value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
+ }
+ }
+ local[ prop.idx ] = value;
+ return this[ fn ]( local );
+ };
+ });
+});
+
+// add cssHook and .fx.step function for each named hook.
+// accept a space separated string of properties
+color.hook = function( hook ) {
+ var hooks = hook.split( " " );
+ each( hooks, function( i, hook ) {
+ jQuery.cssHooks[ hook ] = {
+ set: function( elem, value ) {
+ var parsed, curElem,
+ backgroundColor = "";
+
+ if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) {
+ value = color( parsed || value );
+ if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
+ curElem = hook === "backgroundColor" ? elem.parentNode : elem;
+ while (
+ (backgroundColor === "" || backgroundColor === "transparent") &&
+ curElem && curElem.style
+ ) {
+ try {
+ backgroundColor = jQuery.css( curElem, "backgroundColor" );
+ curElem = curElem.parentNode;
+ } catch ( e ) {
+ }
+ }
+
+ value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
+ backgroundColor :
+ "_default" );
+ }
+
+ value = value.toRgbaString();
+ }
+ try {
+ elem.style[ hook ] = value;
+ } catch ( e ) {
+ // wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
+ }
+ }
+ };
+ jQuery.fx.step[ hook ] = function( fx ) {
+ if ( !fx.colorInit ) {
+ fx.start = color( fx.elem, hook );
+ fx.end = color( fx.end );
+ fx.colorInit = true;
+ }
+ jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
+ };
+ });
+
+};
+
+color.hook( stepHooks );
+
+jQuery.cssHooks.borderColor = {
+ expand: function( value ) {
+ var expanded = {};
+
+ each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
+ expanded[ "border" + part + "Color" ] = value;
+ });
+ return expanded;
+ }
+};
+
+// Basic color names only.
+// Usage of any of the other color names requires adding yourself or including
+// jquery.color.svg-names.js.
+colors = jQuery.Color.names = {
+ // 4.1. Basic color keywords
+ aqua: "#00ffff",
+ black: "#000000",
+ blue: "#0000ff",
+ fuchsia: "#ff00ff",
+ gray: "#808080",
+ green: "#008000",
+ lime: "#00ff00",
+ maroon: "#800000",
+ navy: "#000080",
+ olive: "#808000",
+ purple: "#800080",
+ red: "#ff0000",
+ silver: "#c0c0c0",
+ teal: "#008080",
+ white: "#ffffff",
+ yellow: "#ffff00",
+
+ // 4.2.3. "transparent" color keyword
+ transparent: [ null, null, null, 0 ],
+
+ _default: "#ffffff"
+};
+
+})( jQuery );
+
+/******************************************************************************/
+/****************************** CLASS ANIMATIONS ******************************/
+/******************************************************************************/
+(function() {
+
+var classAnimationActions = [ "add", "remove", "toggle" ],
+ shorthandStyles = {
+ border: 1,
+ borderBottom: 1,
+ borderColor: 1,
+ borderLeft: 1,
+ borderRight: 1,
+ borderTop: 1,
+ borderWidth: 1,
+ margin: 1,
+ padding: 1
+ };
+
+$.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) {
+ $.fx.step[ prop ] = function( fx ) {
+ if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
+ jQuery.style( fx.elem, prop, fx.end );
+ fx.setAttr = true;
+ }
+ };
+});
+
+function getElementStyles( elem ) {
+ var key, len,
+ style = elem.ownerDocument.defaultView ?
+ elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
+ elem.currentStyle,
+ styles = {};
+
+ if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
+ len = style.length;
+ while ( len-- ) {
+ key = style[ len ];
+ if ( typeof style[ key ] === "string" ) {
+ styles[ $.camelCase( key ) ] = style[ key ];
+ }
+ }
+ // support: Opera, IE <9
+ } else {
+ for ( key in style ) {
+ if ( typeof style[ key ] === "string" ) {
+ styles[ key ] = style[ key ];
+ }
+ }
+ }
+
+ return styles;
+}
+
+function styleDifference( oldStyle, newStyle ) {
+ var diff = {},
+ name, value;
+
+ for ( name in newStyle ) {
+ value = newStyle[ name ];
+ if ( oldStyle[ name ] !== value ) {
+ if ( !shorthandStyles[ name ] ) {
+ if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
+ diff[ name ] = value;
+ }
+ }
+ }
+ }
+
+ return diff;
+}
+
+// support: jQuery <1.8
+if ( !$.fn.addBack ) {
+ $.fn.addBack = function( selector ) {
+ return this.add( selector == null ?
+ this.prevObject : this.prevObject.filter( selector )
+ );
+ };
+}
+
+$.effects.animateClass = function( value, duration, easing, callback ) {
+ var o = $.speed( duration, easing, callback );
+
+ return this.queue( function() {
+ var animated = $( this ),
+ baseClass = animated.attr( "class" ) || "",
+ applyClassChange,
+ allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
+
+ // map the animated objects to store the original styles.
+ allAnimations = allAnimations.map(function() {
+ var el = $( this );
+ return {
+ el: el,
+ start: getElementStyles( this )
+ };
+ });
+
+ // apply class change
+ applyClassChange = function() {
+ $.each( classAnimationActions, function(i, action) {
+ if ( value[ action ] ) {
+ animated[ action + "Class" ]( value[ action ] );
+ }
+ });
+ };
+ applyClassChange();
+
+ // map all animated objects again - calculate new styles and diff
+ allAnimations = allAnimations.map(function() {
+ this.end = getElementStyles( this.el[ 0 ] );
+ this.diff = styleDifference( this.start, this.end );
+ return this;
+ });
+
+ // apply original class
+ animated.attr( "class", baseClass );
+
+ // map all animated objects again - this time collecting a promise
+ allAnimations = allAnimations.map(function() {
+ var styleInfo = this,
+ dfd = $.Deferred(),
+ opts = $.extend({}, o, {
+ queue: false,
+ complete: function() {
+ dfd.resolve( styleInfo );
+ }
+ });
+
+ this.el.animate( this.diff, opts );
+ return dfd.promise();
+ });
+
+ // once all animations have completed:
+ $.when.apply( $, allAnimations.get() ).done(function() {
+
+ // set the final class
+ applyClassChange();
+
+ // for each animated element,
+ // clear all css properties that were animated
+ $.each( arguments, function() {
+ var el = this.el;
+ $.each( this.diff, function(key) {
+ el.css( key, "" );
+ });
+ });
+
+ // this is guarnteed to be there if you use jQuery.speed()
+ // it also handles dequeuing the next anim...
+ o.complete.call( animated[ 0 ] );
+ });
+ });
+};
+
+$.fn.extend({
+ addClass: (function( orig ) {
+ return function( classNames, speed, easing, callback ) {
+ return speed ?
+ $.effects.animateClass.call( this,
+ { add: classNames }, speed, easing, callback ) :
+ orig.apply( this, arguments );
+ };
+ })( $.fn.addClass ),
+
+ removeClass: (function( orig ) {
+ return function( classNames, speed, easing, callback ) {
+ return arguments.length > 1 ?
+ $.effects.animateClass.call( this,
+ { remove: classNames }, speed, easing, callback ) :
+ orig.apply( this, arguments );
+ };
+ })( $.fn.removeClass ),
+
+ toggleClass: (function( orig ) {
+ return function( classNames, force, speed, easing, callback ) {
+ if ( typeof force === "boolean" || force === undefined ) {
+ if ( !speed ) {
+ // without speed parameter
+ return orig.apply( this, arguments );
+ } else {
+ return $.effects.animateClass.call( this,
+ (force ? { add: classNames } : { remove: classNames }),
+ speed, easing, callback );
+ }
+ } else {
+ // without force parameter
+ return $.effects.animateClass.call( this,
+ { toggle: classNames }, force, speed, easing );
+ }
+ };
+ })( $.fn.toggleClass ),
+
+ switchClass: function( remove, add, speed, easing, callback) {
+ return $.effects.animateClass.call( this, {
+ add: add,
+ remove: remove
+ }, speed, easing, callback );
+ }
+});
+
+})();
+
+/******************************************************************************/
+/*********************************** EFFECTS **********************************/
+/******************************************************************************/
+
+(function() {
+
+$.extend( $.effects, {
+ version: "1.11.3",
+
+ // Saves a set of properties in a data storage
+ save: function( element, set ) {
+ for ( var i = 0; i < set.length; i++ ) {
+ if ( set[ i ] !== null ) {
+ element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
+ }
+ }
+ },
+
+ // Restores a set of previously saved properties from a data storage
+ restore: function( element, set ) {
+ var val, i;
+ for ( i = 0; i < set.length; i++ ) {
+ if ( set[ i ] !== null ) {
+ val = element.data( dataSpace + set[ i ] );
+ // support: jQuery 1.6.2
+ // http://bugs.jquery.com/ticket/9917
+ // jQuery 1.6.2 incorrectly returns undefined for any falsy value.
+ // We can't differentiate between "" and 0 here, so we just assume
+ // empty string since it's likely to be a more common value...
+ if ( val === undefined ) {
+ val = "";
+ }
+ element.css( set[ i ], val );
+ }
+ }
+ },
+
+ setMode: function( el, mode ) {
+ if (mode === "toggle") {
+ mode = el.is( ":hidden" ) ? "show" : "hide";
+ }
+ return mode;
+ },
+
+ // Translates a [top,left] array into a baseline value
+ // this should be a little more flexible in the future to handle a string & hash
+ getBaseline: function( origin, original ) {
+ var y, x;
+ switch ( origin[ 0 ] ) {
+ case "top": y = 0; break;
+ case "middle": y = 0.5; break;
+ case "bottom": y = 1; break;
+ default: y = origin[ 0 ] / original.height;
+ }
+ switch ( origin[ 1 ] ) {
+ case "left": x = 0; break;
+ case "center": x = 0.5; break;
+ case "right": x = 1; break;
+ default: x = origin[ 1 ] / original.width;
+ }
+ return {
+ x: x,
+ y: y
+ };
+ },
+
+ // Wraps the element around a wrapper that copies position properties
+ createWrapper: function( element ) {
+
+ // if the element is already wrapped, return it
+ if ( element.parent().is( ".ui-effects-wrapper" )) {
+ return element.parent();
+ }
+
+ // wrap the element
+ var props = {
+ width: element.outerWidth(true),
+ height: element.outerHeight(true),
+ "float": element.css( "float" )
+ },
+ wrapper = $( "<div></div>" )
+ .addClass( "ui-effects-wrapper" )
+ .css({
+ fontSize: "100%",
+ background: "transparent",
+ border: "none",
+ margin: 0,
+ padding: 0
+ }),
+ // Store the size in case width/height are defined in % - Fixes #5245
+ size = {
+ width: element.width(),
+ height: element.height()
+ },
+ active = document.activeElement;
+
+ // support: Firefox
+ // Firefox incorrectly exposes anonymous content
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=561664
+ try {
+ active.id;
+ } catch ( e ) {
+ active = document.body;
+ }
+
+ element.wrap( wrapper );
+
+ // Fixes #7595 - Elements lose focus when wrapped.
+ if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+ $( active ).focus();
+ }
+
+ wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element
+
+ // transfer positioning properties to the wrapper
+ if ( element.css( "position" ) === "static" ) {
+ wrapper.css({ position: "relative" });
+ element.css({ position: "relative" });
+ } else {
+ $.extend( props, {
+ position: element.css( "position" ),
+ zIndex: element.css( "z-index" )
+ });
+ $.each([ "top", "left", "bottom", "right" ], function(i, pos) {
+ props[ pos ] = element.css( pos );
+ if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
+ props[ pos ] = "auto";
+ }
+ });
+ element.css({
+ position: "relative",
+ top: 0,
+ left: 0,
+ right: "auto",
+ bottom: "auto"
+ });
+ }
+ element.css(size);
+
+ return wrapper.css( props ).show();
+ },
+
+ removeWrapper: function( element ) {
+ var active = document.activeElement;
+
+ if ( element.parent().is( ".ui-effects-wrapper" ) ) {
+ element.parent().replaceWith( element );
+
+ // Fixes #7595 - Elements lose focus when wrapped.
+ if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+ $( active ).focus();
+ }
+ }
+
+ return element;
+ },
+
+ setTransition: function( element, list, factor, value ) {
+ value = value || {};
+ $.each( list, function( i, x ) {
+ var unit = element.cssUnit( x );
+ if ( unit[ 0 ] > 0 ) {
+ value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
+ }
+ });
+ return value;
+ }
+});
+
+// return an effect options object for the given parameters:
+function _normalizeArguments( effect, options, speed, callback ) {
+
+ // allow passing all options as the first parameter
+ if ( $.isPlainObject( effect ) ) {
+ options = effect;
+ effect = effect.effect;
+ }
+
+ // convert to an object
+ effect = { effect: effect };
+
+ // catch (effect, null, ...)
+ if ( options == null ) {
+ options = {};
+ }
+
+ // catch (effect, callback)
+ if ( $.isFunction( options ) ) {
+ callback = options;
+ speed = null;
+ options = {};
+ }
+
+ // catch (effect, speed, ?)
+ if ( typeof options === "number" || $.fx.speeds[ options ] ) {
+ callback = speed;
+ speed = options;
+ options = {};
+ }
+
+ // catch (effect, options, callback)
+ if ( $.isFunction( speed ) ) {
+ callback = speed;
+ speed = null;
+ }
+
+ // add options to effect
+ if ( options ) {
+ $.extend( effect, options );
+ }
+
+ speed = speed || options.duration;
+ effect.duration = $.fx.off ? 0 :
+ typeof speed === "number" ? speed :
+ speed in $.fx.speeds ? $.fx.speeds[ speed ] :
+ $.fx.speeds._default;
+
+ effect.complete = callback || options.complete;
+
+ return effect;
+}
+
+function standardAnimationOption( option ) {
+ // Valid standard speeds (nothing, number, named speed)
+ if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {
+ return true;
+ }
+
+ // Invalid strings - treat as "normal" speed
+ if ( typeof option === "string" && !$.effects.effect[ option ] ) {
+ return true;
+ }
+
+ // Complete callback
+ if ( $.isFunction( option ) ) {
+ return true;
+ }
+
+ // Options hash (but not naming an effect)
+ if ( typeof option === "object" && !option.effect ) {
+ return true;
+ }
+
+ // Didn't match any standard API
+ return false;
+}
+
+$.fn.extend({
+ effect: function( /* effect, options, speed, callback */ ) {
+ var args = _normalizeArguments.apply( this, arguments ),
+ mode = args.mode,
+ queue = args.queue,
+ effectMethod = $.effects.effect[ args.effect ];
+
+ if ( $.fx.off || !effectMethod ) {
+ // delegate to the original method (e.g., .show()) if possible
+ if ( mode ) {
+ return this[ mode ]( args.duration, args.complete );
+ } else {
+ return this.each( function() {
+ if ( args.complete ) {
+ args.complete.call( this );
+ }
+ });
+ }
+ }
+
+ function run( next ) {
+ var elem = $( this ),
+ complete = args.complete,
+ mode = args.mode;
+
+ function done() {
+ if ( $.isFunction( complete ) ) {
+ complete.call( elem[0] );
+ }
+ if ( $.isFunction( next ) ) {
+ next();
+ }
+ }
+
+ // If the element already has the correct final state, delegate to
+ // the core methods so the internal tracking of "olddisplay" works.
+ if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
+ elem[ mode ]();
+ done();
+ } else {
+ effectMethod.call( elem[0], args, done );
+ }
+ }
+
+ return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
+ },
+
+ show: (function( orig ) {
+ return function( option ) {
+ if ( standardAnimationOption( option ) ) {
+ return orig.apply( this, arguments );
+ } else {
+ var args = _normalizeArguments.apply( this, arguments );
+ args.mode = "show";
+ return this.effect.call( this, args );
+ }
+ };
+ })( $.fn.show ),
+
+ hide: (function( orig ) {
+ return function( option ) {
+ if ( standardAnimationOption( option ) ) {
+ return orig.apply( this, arguments );
+ } else {
+ var args = _normalizeArguments.apply( this, arguments );
+ args.mode = "hide";
+ return this.effect.call( this, args );
+ }
+ };
+ })( $.fn.hide ),
+
+ toggle: (function( orig ) {
+ return function( option ) {
+ if ( standardAnimationOption( option ) || typeof option === "boolean" ) {
+ return orig.apply( this, arguments );
+ } else {
+ var args = _normalizeArguments.apply( this, arguments );
+ args.mode = "toggle";
+ return this.effect.call( this, args );
+ }
+ };
+ })( $.fn.toggle ),
+
+ // helper functions
+ cssUnit: function(key) {
+ var style = this.css( key ),
+ val = [];
+
+ $.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
+ if ( style.indexOf( unit ) > 0 ) {
+ val = [ parseFloat( style ), unit ];
+ }
+ });
+ return val;
+ }
+});
+
+})();
+
+/******************************************************************************/
+/*********************************** EASING ***********************************/
+/******************************************************************************/
+
+(function() {
+
+// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
+
+var baseEasings = {};
+
+$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
+ baseEasings[ name ] = function( p ) {
+ return Math.pow( p, i + 2 );
+ };
+});
+
+$.extend( baseEasings, {
+ Sine: function( p ) {
+ return 1 - Math.cos( p * Math.PI / 2 );
+ },
+ Circ: function( p ) {
+ return 1 - Math.sqrt( 1 - p * p );
+ },
+ Elastic: function( p ) {
+ return p === 0 || p === 1 ? p :
+ -Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
+ },
+ Back: function( p ) {
+ return p * p * ( 3 * p - 2 );
+ },
+ Bounce: function( p ) {
+ var pow2,
+ bounce = 4;
+
+ while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
+ return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
+ }
+});
+
+$.each( baseEasings, function( name, easeIn ) {
+ $.easing[ "easeIn" + name ] = easeIn;
+ $.easing[ "easeOut" + name ] = function( p ) {
+ return 1 - easeIn( 1 - p );
+ };
+ $.easing[ "easeInOut" + name ] = function( p ) {
+ return p < 0.5 ?
+ easeIn( p * 2 ) / 2 :
+ 1 - easeIn( p * -2 + 2 ) / 2;
+ };
+});
+
+})();
+
+var effect = $.effects;
+
+
+/*!
+ * jQuery UI Effects Blind 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/blind-effect/
+ */
+
+
+var effectBlind = $.effects.effect.blind = function( o, done ) {
+ // Create element
+ var el = $( this ),
+ rvertical = /up|down|vertical/,
+ rpositivemotion = /up|left|vertical|horizontal/,
+ props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+ mode = $.effects.setMode( el, o.mode || "hide" ),
+ direction = o.direction || "up",
+ vertical = rvertical.test( direction ),
+ ref = vertical ? "height" : "width",
+ ref2 = vertical ? "top" : "left",
+ motion = rpositivemotion.test( direction ),
+ animation = {},
+ show = mode === "show",
+ wrapper, distance, margin;
+
+ // if already wrapped, the wrapper's properties are my property. #6245
+ if ( el.parent().is( ".ui-effects-wrapper" ) ) {
+ $.effects.save( el.parent(), props );
+ } else {
+ $.effects.save( el, props );
+ }
+ el.show();
+ wrapper = $.effects.createWrapper( el ).css({
+ overflow: "hidden"
+ });
+
+ distance = wrapper[ ref ]();
+ margin = parseFloat( wrapper.css( ref2 ) ) || 0;
+
+ animation[ ref ] = show ? distance : 0;
+ if ( !motion ) {
+ el
+ .css( vertical ? "bottom" : "right", 0 )
+ .css( vertical ? "top" : "left", "auto" )
+ .css({ position: "absolute" });
+
+ animation[ ref2 ] = show ? margin : distance + margin;
+ }
+
+ // start at 0 if we are showing
+ if ( show ) {
+ wrapper.css( ref, 0 );
+ if ( !motion ) {
+ wrapper.css( ref2, margin + distance );
+ }
+ }
+
+ // Animate
+ wrapper.animate( animation, {
+ duration: o.duration,
+ easing: o.easing,
+ queue: false,
+ complete: function() {
+ if ( mode === "hide" ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ }
+ });
+};
+
+
+/*!
+ * jQuery UI Effects Bounce 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/bounce-effect/
+ */
+
+
+var effectBounce = $.effects.effect.bounce = function( o, done ) {
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+
+ // defaults:
+ mode = $.effects.setMode( el, o.mode || "effect" ),
+ hide = mode === "hide",
+ show = mode === "show",
+ direction = o.direction || "up",
+ distance = o.distance,
+ times = o.times || 5,
+
+ // number of internal animations
+ anims = times * 2 + ( show || hide ? 1 : 0 ),
+ speed = o.duration / anims,
+ easing = o.easing,
+
+ // utility:
+ ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+ motion = ( direction === "up" || direction === "left" ),
+ i,
+ upAnim,
+ downAnim,
+
+ // we will need to re-assemble the queue to stack our animations in place
+ queue = el.queue(),
+ queuelen = queue.length;
+
+ // Avoid touching opacity to prevent clearType and PNG issues in IE
+ if ( show || hide ) {
+ props.push( "opacity" );
+ }
+
+ $.effects.save( el, props );
+ el.show();
+ $.effects.createWrapper( el ); // Create Wrapper
+
+ // default distance for the BIGGEST bounce is the outer Distance / 3
+ if ( !distance ) {
+ distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
+ }
+
+ if ( show ) {
+ downAnim = { opacity: 1 };
+ downAnim[ ref ] = 0;
+
+ // if we are showing, force opacity 0 and set the initial position
+ // then do the "first" animation
+ el.css( "opacity", 0 )
+ .css( ref, motion ? -distance * 2 : distance * 2 )
+ .animate( downAnim, speed, easing );
+ }
+
+ // start at the smallest distance if we are hiding
+ if ( hide ) {
+ distance = distance / Math.pow( 2, times - 1 );
+ }
+
+ downAnim = {};
+ downAnim[ ref ] = 0;
+ // Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
+ for ( i = 0; i < times; i++ ) {
+ upAnim = {};
+ upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+
+ el.animate( upAnim, speed, easing )
+ .animate( downAnim, speed, easing );
+
+ distance = hide ? distance * 2 : distance / 2;
+ }
+
+ // Last Bounce when Hiding
+ if ( hide ) {
+ upAnim = { opacity: 0 };
+ upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+
+ el.animate( upAnim, speed, easing );
+ }
+
+ el.queue(function() {
+ if ( hide ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ });
+
+ // inject all the animations we just queued to be first in line (after "inprogress")
+ if ( queuelen > 1) {
+ queue.splice.apply( queue,
+ [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+ }
+ el.dequeue();
+
+};
+
+
+/*!
+ * jQuery UI Effects Clip 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/clip-effect/
+ */
+
+
+var effectClip = $.effects.effect.clip = function( o, done ) {
+ // Create element
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+ mode = $.effects.setMode( el, o.mode || "hide" ),
+ show = mode === "show",
+ direction = o.direction || "vertical",
+ vert = direction === "vertical",
+ size = vert ? "height" : "width",
+ position = vert ? "top" : "left",
+ animation = {},
+ wrapper, animate, distance;
+
+ // Save & Show
+ $.effects.save( el, props );
+ el.show();
+
+ // Create Wrapper
+ wrapper = $.effects.createWrapper( el ).css({
+ overflow: "hidden"
+ });
+ animate = ( el[0].tagName === "IMG" ) ? wrapper : el;
+ distance = animate[ size ]();
+
+ // Shift
+ if ( show ) {
+ animate.css( size, 0 );
+ animate.css( position, distance / 2 );
+ }
+
+ // Create Animation Object:
+ animation[ size ] = show ? distance : 0;
+ animation[ position ] = show ? 0 : distance / 2;
+
+ // Animate
+ animate.animate( animation, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: function() {
+ if ( !show ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ }
+ });
+
+};
+
+
+/*!
+ * jQuery UI Effects Drop 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/drop-effect/
+ */
+
+
+var effectDrop = $.effects.effect.drop = function( o, done ) {
+
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ],
+ mode = $.effects.setMode( el, o.mode || "hide" ),
+ show = mode === "show",
+ direction = o.direction || "left",
+ ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+ motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg",
+ animation = {
+ opacity: show ? 1 : 0
+ },
+ distance;
+
+ // Adjust
+ $.effects.save( el, props );
+ el.show();
+ $.effects.createWrapper( el );
+
+ distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ) / 2;
+
+ if ( show ) {
+ el
+ .css( "opacity", 0 )
+ .css( ref, motion === "pos" ? -distance : distance );
+ }
+
+ // Animation
+ animation[ ref ] = ( show ?
+ ( motion === "pos" ? "+=" : "-=" ) :
+ ( motion === "pos" ? "-=" : "+=" ) ) +
+ distance;
+
+ // Animate
+ el.animate( animation, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: function() {
+ if ( mode === "hide" ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ }
+ });
+};
+
+
+/*!
+ * jQuery UI Effects Explode 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/explode-effect/
+ */
+
+
+var effectExplode = $.effects.effect.explode = function( o, done ) {
+
+ var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,
+ cells = rows,
+ el = $( this ),
+ mode = $.effects.setMode( el, o.mode || "hide" ),
+ show = mode === "show",
+
+ // show and then visibility:hidden the element before calculating offset
+ offset = el.show().css( "visibility", "hidden" ).offset(),
+
+ // width and height of a piece
+ width = Math.ceil( el.outerWidth() / cells ),
+ height = Math.ceil( el.outerHeight() / rows ),
+ pieces = [],
+
+ // loop
+ i, j, left, top, mx, my;
+
+ // children animate complete:
+ function childComplete() {
+ pieces.push( this );
+ if ( pieces.length === rows * cells ) {
+ animComplete();
+ }
+ }
+
+ // clone the element for each row and cell.
+ for ( i = 0; i < rows ; i++ ) { // ===>
+ top = offset.top + i * height;
+ my = i - ( rows - 1 ) / 2 ;
+
+ for ( j = 0; j < cells ; j++ ) { // |||
+ left = offset.left + j * width;
+ mx = j - ( cells - 1 ) / 2 ;
+
+ // Create a clone of the now hidden main element that will be absolute positioned
+ // within a wrapper div off the -left and -top equal to size of our pieces
+ el
+ .clone()
+ .appendTo( "body" )
+ .wrap( "<div></div>" )
+ .css({
+ position: "absolute",
+ visibility: "visible",
+ left: -j * width,
+ top: -i * height
+ })
+
+ // select the wrapper - make it overflow: hidden and absolute positioned based on
+ // where the original was located +left and +top equal to the size of pieces
+ .parent()
+ .addClass( "ui-effects-explode" )
+ .css({
+ position: "absolute",
+ overflow: "hidden",
+ width: width,
+ height: height,
+ left: left + ( show ? mx * width : 0 ),
+ top: top + ( show ? my * height : 0 ),
+ opacity: show ? 0 : 1
+ }).animate({
+ left: left + ( show ? 0 : mx * width ),
+ top: top + ( show ? 0 : my * height ),
+ opacity: show ? 1 : 0
+ }, o.duration || 500, o.easing, childComplete );
+ }
+ }
+
+ function animComplete() {
+ el.css({
+ visibility: "visible"
+ });
+ $( pieces ).remove();
+ if ( !show ) {
+ el.hide();
+ }
+ done();
+ }
+};
+
+
+/*!
+ * jQuery UI Effects Fade 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/fade-effect/
+ */
+
+
+var effectFade = $.effects.effect.fade = function( o, done ) {
+ var el = $( this ),
+ mode = $.effects.setMode( el, o.mode || "toggle" );
+
+ el.animate({
+ opacity: mode
+ }, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: done
+ });
+};
+
+
+/*!
+ * jQuery UI Effects Fold 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/fold-effect/
+ */
+
+
+var effectFold = $.effects.effect.fold = function( o, done ) {
+
+ // Create element
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+ mode = $.effects.setMode( el, o.mode || "hide" ),
+ show = mode === "show",
+ hide = mode === "hide",
+ size = o.size || 15,
+ percent = /([0-9]+)%/.exec( size ),
+ horizFirst = !!o.horizFirst,
+ widthFirst = show !== horizFirst,
+ ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ],
+ duration = o.duration / 2,
+ wrapper, distance,
+ animation1 = {},
+ animation2 = {};
+
+ $.effects.save( el, props );
+ el.show();
+
+ // Create Wrapper
+ wrapper = $.effects.createWrapper( el ).css({
+ overflow: "hidden"
+ });
+ distance = widthFirst ?
+ [ wrapper.width(), wrapper.height() ] :
+ [ wrapper.height(), wrapper.width() ];
+
+ if ( percent ) {
+ size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
+ }
+ if ( show ) {
+ wrapper.css( horizFirst ? {
+ height: 0,
+ width: size
+ } : {
+ height: size,
+ width: 0
+ });
+ }
+
+ // Animation
+ animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size;
+ animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0;
+
+ // Animate
+ wrapper
+ .animate( animation1, duration, o.easing )
+ .animate( animation2, duration, o.easing, function() {
+ if ( hide ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ });
+
+};
+
+
+/*!
+ * jQuery UI Effects Highlight 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/highlight-effect/
+ */
+
+
+var effectHighlight = $.effects.effect.highlight = function( o, done ) {
+ var elem = $( this ),
+ props = [ "backgroundImage", "backgroundColor", "opacity" ],
+ mode = $.effects.setMode( elem, o.mode || "show" ),
+ animation = {
+ backgroundColor: elem.css( "backgroundColor" )
+ };
+
+ if (mode === "hide") {
+ animation.opacity = 0;
+ }
+
+ $.effects.save( elem, props );
+
+ elem
+ .show()
+ .css({
+ backgroundImage: "none",
+ backgroundColor: o.color || "#ffff99"
+ })
+ .animate( animation, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: function() {
+ if ( mode === "hide" ) {
+ elem.hide();
+ }
+ $.effects.restore( elem, props );
+ done();
+ }
+ });
+};
+
+
+/*!
+ * jQuery UI Effects Size 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/size-effect/
+ */
+
+
+var effectSize = $.effects.effect.size = function( o, done ) {
+
+ // Create element
+ var original, baseline, factor,
+ el = $( this ),
+ props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ],
+
+ // Always restore
+ props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ],
+
+ // Copy for children
+ props2 = [ "width", "height", "overflow" ],
+ cProps = [ "fontSize" ],
+ vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
+ hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
+
+ // Set options
+ mode = $.effects.setMode( el, o.mode || "effect" ),
+ restore = o.restore || mode !== "effect",
+ scale = o.scale || "both",
+ origin = o.origin || [ "middle", "center" ],
+ position = el.css( "position" ),
+ props = restore ? props0 : props1,
+ zero = {
+ height: 0,
+ width: 0,
+ outerHeight: 0,
+ outerWidth: 0
+ };
+
+ if ( mode === "show" ) {
+ el.show();
+ }
+ original = {
+ height: el.height(),
+ width: el.width(),
+ outerHeight: el.outerHeight(),
+ outerWidth: el.outerWidth()
+ };
+
+ if ( o.mode === "toggle" && mode === "show" ) {
+ el.from = o.to || zero;
+ el.to = o.from || original;
+ } else {
+ el.from = o.from || ( mode === "show" ? zero : original );
+ el.to = o.to || ( mode === "hide" ? zero : original );
+ }
+
+ // Set scaling factor
+ factor = {
+ from: {
+ y: el.from.height / original.height,
+ x: el.from.width / original.width
+ },
+ to: {
+ y: el.to.height / original.height,
+ x: el.to.width / original.width
+ }
+ };
+
+ // Scale the css box
+ if ( scale === "box" || scale === "both" ) {
+
+ // Vertical props scaling
+ if ( factor.from.y !== factor.to.y ) {
+ props = props.concat( vProps );
+ el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from );
+ el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to );
+ }
+
+ // Horizontal props scaling
+ if ( factor.from.x !== factor.to.x ) {
+ props = props.concat( hProps );
+ el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from );
+ el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to );
+ }
+ }
+
+ // Scale the content
+ if ( scale === "content" || scale === "both" ) {
+
+ // Vertical props scaling
+ if ( factor.from.y !== factor.to.y ) {
+ props = props.concat( cProps ).concat( props2 );
+ el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from );
+ el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to );
+ }
+ }
+
+ $.effects.save( el, props );
+ el.show();
+ $.effects.createWrapper( el );
+ el.css( "overflow", "hidden" ).css( el.from );
+
+ // Adjust
+ if (origin) { // Calculate baseline shifts
+ baseline = $.effects.getBaseline( origin, original );
+ el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;
+ el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;
+ el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;
+ el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;
+ }
+ el.css( el.from ); // set top & left
+
+ // Animate
+ if ( scale === "content" || scale === "both" ) { // Scale the children
+
+ // Add margins/font-size
+ vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps);
+ hProps = hProps.concat([ "marginLeft", "marginRight" ]);
+ props2 = props0.concat(vProps).concat(hProps);
+
+ el.find( "*[width]" ).each( function() {
+ var child = $( this ),
+ c_original = {
+ height: child.height(),
+ width: child.width(),
+ outerHeight: child.outerHeight(),
+ outerWidth: child.outerWidth()
+ };
+ if (restore) {
+ $.effects.save(child, props2);
+ }
+
+ child.from = {
+ height: c_original.height * factor.from.y,
+ width: c_original.width * factor.from.x,
+ outerHeight: c_original.outerHeight * factor.from.y,
+ outerWidth: c_original.outerWidth * factor.from.x
+ };
+ child.to = {
+ height: c_original.height * factor.to.y,
+ width: c_original.width * factor.to.x,
+ outerHeight: c_original.height * factor.to.y,
+ outerWidth: c_original.width * factor.to.x
+ };
+
+ // Vertical props scaling
+ if ( factor.from.y !== factor.to.y ) {
+ child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from );
+ child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to );
+ }
+
+ // Horizontal props scaling
+ if ( factor.from.x !== factor.to.x ) {
+ child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from );
+ child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to );
+ }
+
+ // Animate children
+ child.css( child.from );
+ child.animate( child.to, o.duration, o.easing, function() {
+
+ // Restore children
+ if ( restore ) {
+ $.effects.restore( child, props2 );
+ }
+ });
+ });
+ }
+
+ // Animate
+ el.animate( el.to, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: function() {
+ if ( el.to.opacity === 0 ) {
+ el.css( "opacity", el.from.opacity );
+ }
+ if ( mode === "hide" ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ if ( !restore ) {
+
+ // we need to calculate our new positioning based on the scaling
+ if ( position === "static" ) {
+ el.css({
+ position: "relative",
+ top: el.to.top,
+ left: el.to.left
+ });
+ } else {
+ $.each([ "top", "left" ], function( idx, pos ) {
+ el.css( pos, function( _, str ) {
+ var val = parseInt( str, 10 ),
+ toRef = idx ? el.to.left : el.to.top;
+
+ // if original was "auto", recalculate the new value from wrapper
+ if ( str === "auto" ) {
+ return toRef + "px";
+ }
+
+ return val + toRef + "px";
+ });
+ });
+ }
+ }
+
+ $.effects.removeWrapper( el );
+ done();
+ }
+ });
+
+};
+
+
+/*!
+ * jQuery UI Effects Scale 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/scale-effect/
+ */
+
+
+var effectScale = $.effects.effect.scale = function( o, done ) {
+
+ // Create element
+ var el = $( this ),
+ options = $.extend( true, {}, o ),
+ mode = $.effects.setMode( el, o.mode || "effect" ),
+ percent = parseInt( o.percent, 10 ) ||
+ ( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
+ direction = o.direction || "both",
+ origin = o.origin,
+ original = {
+ height: el.height(),
+ width: el.width(),
+ outerHeight: el.outerHeight(),
+ outerWidth: el.outerWidth()
+ },
+ factor = {
+ y: direction !== "horizontal" ? (percent / 100) : 1,
+ x: direction !== "vertical" ? (percent / 100) : 1
+ };
+
+ // We are going to pass this effect to the size effect:
+ options.effect = "size";
+ options.queue = false;
+ options.complete = done;
+
+ // Set default origin and restore for show/hide
+ if ( mode !== "effect" ) {
+ options.origin = origin || [ "middle", "center" ];
+ options.restore = true;
+ }
+
+ options.from = o.from || ( mode === "show" ? {
+ height: 0,
+ width: 0,
+ outerHeight: 0,
+ outerWidth: 0
+ } : original );
+ options.to = {
+ height: original.height * factor.y,
+ width: original.width * factor.x,
+ outerHeight: original.outerHeight * factor.y,
+ outerWidth: original.outerWidth * factor.x
+ };
+
+ // Fade option to support puff
+ if ( options.fade ) {
+ if ( mode === "show" ) {
+ options.from.opacity = 0;
+ options.to.opacity = 1;
+ }
+ if ( mode === "hide" ) {
+ options.from.opacity = 1;
+ options.to.opacity = 0;
+ }
+ }
+
+ // Animate
+ el.effect( options );
+
+};
+
+
+/*!
+ * jQuery UI Effects Puff 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/puff-effect/
+ */
+
+
+var effectPuff = $.effects.effect.puff = function( o, done ) {
+ var elem = $( this ),
+ mode = $.effects.setMode( elem, o.mode || "hide" ),
+ hide = mode === "hide",
+ percent = parseInt( o.percent, 10 ) || 150,
+ factor = percent / 100,
+ original = {
+ height: elem.height(),
+ width: elem.width(),
+ outerHeight: elem.outerHeight(),
+ outerWidth: elem.outerWidth()
+ };
+
+ $.extend( o, {
+ effect: "scale",
+ queue: false,
+ fade: true,
+ mode: mode,
+ complete: done,
+ percent: hide ? percent : 100,
+ from: hide ?
+ original :
+ {
+ height: original.height * factor,
+ width: original.width * factor,
+ outerHeight: original.outerHeight * factor,
+ outerWidth: original.outerWidth * factor
+ }
+ });
+
+ elem.effect( o );
+};
+
+
+/*!
+ * jQuery UI Effects Pulsate 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/pulsate-effect/
+ */
+
+
+var effectPulsate = $.effects.effect.pulsate = function( o, done ) {
+ var elem = $( this ),
+ mode = $.effects.setMode( elem, o.mode || "show" ),
+ show = mode === "show",
+ hide = mode === "hide",
+ showhide = ( show || mode === "hide" ),
+
+ // showing or hiding leaves of the "last" animation
+ anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
+ duration = o.duration / anims,
+ animateTo = 0,
+ queue = elem.queue(),
+ queuelen = queue.length,
+ i;
+
+ if ( show || !elem.is(":visible")) {
+ elem.css( "opacity", 0 ).show();
+ animateTo = 1;
+ }
+
+ // anims - 1 opacity "toggles"
+ for ( i = 1; i < anims; i++ ) {
+ elem.animate({
+ opacity: animateTo
+ }, duration, o.easing );
+ animateTo = 1 - animateTo;
+ }
+
+ elem.animate({
+ opacity: animateTo
+ }, duration, o.easing);
+
+ elem.queue(function() {
+ if ( hide ) {
+ elem.hide();
+ }
+ done();
+ });
+
+ // We just queued up "anims" animations, we need to put them next in the queue
+ if ( queuelen > 1 ) {
+ queue.splice.apply( queue,
+ [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+ }
+ elem.dequeue();
+};
+
+
+/*!
+ * jQuery UI Effects Shake 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/shake-effect/
+ */
+
+
+var effectShake = $.effects.effect.shake = function( o, done ) {
+
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+ mode = $.effects.setMode( el, o.mode || "effect" ),
+ direction = o.direction || "left",
+ distance = o.distance || 20,
+ times = o.times || 3,
+ anims = times * 2 + 1,
+ speed = Math.round( o.duration / anims ),
+ ref = (direction === "up" || direction === "down") ? "top" : "left",
+ positiveMotion = (direction === "up" || direction === "left"),
+ animation = {},
+ animation1 = {},
+ animation2 = {},
+ i,
+
+ // we will need to re-assemble the queue to stack our animations in place
+ queue = el.queue(),
+ queuelen = queue.length;
+
+ $.effects.save( el, props );
+ el.show();
+ $.effects.createWrapper( el );
+
+ // Animation
+ animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
+ animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
+ animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
+
+ // Animate
+ el.animate( animation, speed, o.easing );
+
+ // Shakes
+ for ( i = 1; i < times; i++ ) {
+ el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing );
+ }
+ el
+ .animate( animation1, speed, o.easing )
+ .animate( animation, speed / 2, o.easing )
+ .queue(function() {
+ if ( mode === "hide" ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ });
+
+ // inject all the animations we just queued to be first in line (after "inprogress")
+ if ( queuelen > 1) {
+ queue.splice.apply( queue,
+ [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+ }
+ el.dequeue();
+
+};
+
+
+/*!
+ * jQuery UI Effects Slide 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/slide-effect/
+ */
+
+
+var effectSlide = $.effects.effect.slide = function( o, done ) {
+
+ // Create element
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "width", "height" ],
+ mode = $.effects.setMode( el, o.mode || "show" ),
+ show = mode === "show",
+ direction = o.direction || "left",
+ ref = (direction === "up" || direction === "down") ? "top" : "left",
+ positiveMotion = (direction === "up" || direction === "left"),
+ distance,
+ animation = {};
+
+ // Adjust
+ $.effects.save( el, props );
+ el.show();
+ distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true );
+
+ $.effects.createWrapper( el ).css({
+ overflow: "hidden"
+ });
+
+ if ( show ) {
+ el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance );
+ }
+
+ // Animation
+ animation[ ref ] = ( show ?
+ ( positiveMotion ? "+=" : "-=") :
+ ( positiveMotion ? "-=" : "+=")) +
+ distance;
+
+ // Animate
+ el.animate( animation, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: function() {
+ if ( mode === "hide" ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ }
+ });
+};
+
+
+/*!
+ * jQuery UI Effects Transfer 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/transfer-effect/
+ */
+
+
+var effectTransfer = $.effects.effect.transfer = function( o, done ) {
+ var elem = $( this ),
+ target = $( o.to ),
+ targetFixed = target.css( "position" ) === "fixed",
+ body = $("body"),
+ fixTop = targetFixed ? body.scrollTop() : 0,
+ fixLeft = targetFixed ? body.scrollLeft() : 0,
+ endPosition = target.offset(),
+ animation = {
+ top: endPosition.top - fixTop,
+ left: endPosition.left - fixLeft,
+ height: target.innerHeight(),
+ width: target.innerWidth()
+ },
+ startPosition = elem.offset(),
+ transfer = $( "<div class='ui-effects-transfer'></div>" )
+ .appendTo( document.body )
+ .addClass( o.className )
+ .css({
+ top: startPosition.top - fixTop,
+ left: startPosition.left - fixLeft,
+ height: elem.innerHeight(),
+ width: elem.innerWidth(),
+ position: targetFixed ? "fixed" : "absolute"
+ })
+ .animate( animation, o.duration, o.easing, function() {
+ transfer.remove();
+ done();
+ });
+};
+
+
+
+})); \ No newline at end of file
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/sample_large.json b/vendor/github.com/tdewolff/minify/benchmarks/sample_large.json
new file mode 100644
index 0000000..2ea0fd1
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/sample_large.json
@@ -0,0 +1,27002 @@
+[
+ {
+ "_id": "553d03af30f2089e11c4ef43",
+ "index": 0,
+ "guid": "25c94a9c-f41c-4ce6-b65c-87f30031ea41",
+ "isActive": true,
+ "balance": "$2,330.24",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "green",
+ "name": "Lina Cherry",
+ "gender": "female",
+ "company": "EXOTECHNO",
+ "email": "linacherry@exotechno.com",
+ "phone": "+1 (910) 556-2815",
+ "address": "896 Hill Street, Gardiner, New Jersey, 1481",
+ "about": "Qui commodo et do Lorem incididunt elit amet exercitation culpa sint. Ipsum sit ut eu cupidatat magna labore officia do tempor. Laborum ipsum sit eiusmod incididunt. Non id duis consequat consequat laboris. Reprehenderit commodo non Lorem do enim excepteur proident irure laborum officia excepteur. Tempor ad non esse sit proident dolor nulla ut amet deserunt.\r\n",
+ "registered": "2015-01-18T02:03:22 -01:00",
+ "latitude": 31.315312,
+ "longitude": 113.695962,
+ "tags": [
+ "dolore",
+ "est",
+ "veniam",
+ "fugiat",
+ "adipisicing",
+ "esse",
+ "ea"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Frazier Sloan"
+ },
+ {
+ "id": 1,
+ "name": "Perry Montoya"
+ },
+ {
+ "id": 2,
+ "name": "Autumn Sears"
+ }
+ ],
+ "greeting": "Hello, Lina Cherry! You have 8 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af5781f7ba6ad84942",
+ "index": 1,
+ "guid": "a6f41e85-d3aa-4dd6-829e-c727bccf66e2",
+ "isActive": true,
+ "balance": "$1,957.01",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "blue",
+ "name": "Shirley Hickman",
+ "gender": "female",
+ "company": "QUILM",
+ "email": "shirleyhickman@quilm.com",
+ "phone": "+1 (820) 518-3053",
+ "address": "653 Rockaway Parkway, Oretta, Marshall Islands, 9434",
+ "about": "Aute voluptate elit ut dolore ad amet fugiat consequat adipisicing nisi. Eu anim cillum laboris fugiat mollit adipisicing fugiat cillum amet consequat dolor ut. Labore deserunt aliquip duis nisi qui officia aute incididunt ad amet eiusmod velit enim nulla. Ullamco proident tempor enim dolor anim. Lorem nisi officia eu nulla officia.\r\n",
+ "registered": "2014-03-14T18:44:37 -01:00",
+ "latitude": 73.91345,
+ "longitude": 67.473381,
+ "tags": [
+ "id",
+ "anim",
+ "irure",
+ "excepteur",
+ "excepteur",
+ "excepteur",
+ "esse"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Sandy Hurst"
+ },
+ {
+ "id": 1,
+ "name": "Maryann Mcmahon"
+ },
+ {
+ "id": 2,
+ "name": "Amalia Romero"
+ }
+ ],
+ "greeting": "Hello, Shirley Hickman! You have 9 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af731e19a5eb6f0d6d",
+ "index": 2,
+ "guid": "b9ad3896-642f-42ee-957b-7c243a932e02",
+ "isActive": false,
+ "balance": "$3,425.47",
+ "picture": "http://placehold.it/32x32",
+ "age": 22,
+ "eyeColor": "blue",
+ "name": "Graciela Mcdowell",
+ "gender": "female",
+ "company": "BEZAL",
+ "email": "gracielamcdowell@bezal.com",
+ "phone": "+1 (850) 565-3519",
+ "address": "435 Conover Street, Coultervillle, Georgia, 2256",
+ "about": "Lorem deserunt irure dolore officia. Labore culpa culpa ad cillum id sit. Nulla Lorem minim anim officia id ex laborum ut quis reprehenderit pariatur sunt. Voluptate fugiat Lorem do ex amet consectetur elit cillum consectetur. Occaecat dolor dolor labore laborum anim qui minim sint non occaecat. Aliqua laborum amet dolor amet occaecat proident dolor consectetur reprehenderit consequat mollit ad. Qui nulla do amet cillum minim exercitation.\r\n",
+ "registered": "2014-01-02T13:41:55 -01:00",
+ "latitude": -89.580493,
+ "longitude": 114.67216,
+ "tags": [
+ "aliqua",
+ "et",
+ "fugiat",
+ "aute",
+ "laborum",
+ "elit",
+ "eu"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "John Sherman"
+ },
+ {
+ "id": 1,
+ "name": "Pearl Melendez"
+ },
+ {
+ "id": 2,
+ "name": "Gilda York"
+ }
+ ],
+ "greeting": "Hello, Graciela Mcdowell! You have 6 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afa798170de2a4f752",
+ "index": 3,
+ "guid": "51a51992-7201-430f-8a39-95ad1522e4de",
+ "isActive": true,
+ "balance": "$2,256.19",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "blue",
+ "name": "Merle Haynes",
+ "gender": "female",
+ "company": "AMRIL",
+ "email": "merlehaynes@amril.com",
+ "phone": "+1 (853) 473-3121",
+ "address": "965 Durland Place, Sugartown, Virgin Islands, 248",
+ "about": "Aliqua officia consectetur in incididunt. Duis ipsum nostrud qui cupidatat minim. Consequat voluptate cupidatat et duis sunt elit id irure occaecat. Dolor culpa ullamco anim cupidatat in cillum nisi. Est non est aliquip sint id veniam ex excepteur in ad labore magna. Ea tempor occaecat adipisicing nostrud ullamco pariatur ut anim laboris adipisicing. Culpa ipsum cillum sint ea in labore ullamco.\r\n",
+ "registered": "2015-02-08T21:51:12 -01:00",
+ "latitude": -28.195799,
+ "longitude": 140.636697,
+ "tags": [
+ "Lorem",
+ "exercitation",
+ "anim",
+ "adipisicing",
+ "qui",
+ "ipsum",
+ "et"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Schultz Zamora"
+ },
+ {
+ "id": 1,
+ "name": "Gamble Schwartz"
+ },
+ {
+ "id": 2,
+ "name": "Martinez Stevenson"
+ }
+ ],
+ "greeting": "Hello, Merle Haynes! You have 3 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af0fef5166da29c20d",
+ "index": 4,
+ "guid": "5248f624-8caf-4321-abb8-0bbbde6511a8",
+ "isActive": true,
+ "balance": "$2,677.59",
+ "picture": "http://placehold.it/32x32",
+ "age": 26,
+ "eyeColor": "blue",
+ "name": "Ethel Ball",
+ "gender": "female",
+ "company": "KONNECT",
+ "email": "ethelball@konnect.com",
+ "phone": "+1 (901) 578-3601",
+ "address": "235 Stillwell Place, Longoria, Colorado, 4197",
+ "about": "Do aute pariatur cillum laboris duis excepteur. Laborum eiusmod occaecat nulla laboris quis. Veniam irure aliqua qui dolore ipsum velit.\r\n",
+ "registered": "2014-08-26T13:56:35 -02:00",
+ "latitude": 71.208479,
+ "longitude": 105.301909,
+ "tags": [
+ "ut",
+ "sint",
+ "ullamco",
+ "aute",
+ "magna",
+ "do",
+ "duis"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Dennis Jennings"
+ },
+ {
+ "id": 1,
+ "name": "Adeline Ryan"
+ },
+ {
+ "id": 2,
+ "name": "Paulette Jensen"
+ }
+ ],
+ "greeting": "Hello, Ethel Ball! You have 6 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af89f7f218e9b86f56",
+ "index": 5,
+ "guid": "4b9924a2-76ab-400f-8b4a-1f4d2a8c52e2",
+ "isActive": true,
+ "balance": "$1,674.57",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "brown",
+ "name": "Boone Jackson",
+ "gender": "male",
+ "company": "SUPREMIA",
+ "email": "boonejackson@supremia.com",
+ "phone": "+1 (845) 410-3403",
+ "address": "523 Huron Street, Grapeview, Vermont, 5988",
+ "about": "Reprehenderit quis sunt reprehenderit excepteur amet ipsum nostrud do. Ea voluptate sit reprehenderit cupidatat laborum irure elit voluptate ut duis. Nulla voluptate eiusmod fugiat ex commodo exercitation elit cillum ad anim proident. Eiusmod dolore id et deserunt non aliqua consectetur non. Sunt do magna laborum qui exercitation fugiat aliqua cillum sit anim consequat incididunt ea.\r\n",
+ "registered": "2014-08-02T16:55:36 -02:00",
+ "latitude": -52.435401,
+ "longitude": 38.972149,
+ "tags": [
+ "nulla",
+ "esse",
+ "ullamco",
+ "aute",
+ "non",
+ "tempor",
+ "tempor"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Tracie Kramer"
+ },
+ {
+ "id": 1,
+ "name": "Nona Nicholson"
+ },
+ {
+ "id": 2,
+ "name": "Mae Rodriquez"
+ }
+ ],
+ "greeting": "Hello, Boone Jackson! You have 1 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af4068ddfe1a3c6185",
+ "index": 6,
+ "guid": "78bcc2cd-4b83-4e8c-be2b-72ba1f048e5e",
+ "isActive": true,
+ "balance": "$1,396.39",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "blue",
+ "name": "Hodge Gilliam",
+ "gender": "male",
+ "company": "DIGIAL",
+ "email": "hodgegilliam@digial.com",
+ "phone": "+1 (824) 545-3228",
+ "address": "293 Fiske Place, Elwood, Minnesota, 2115",
+ "about": "Nostrud nulla dolore ex voluptate anim qui fugiat non aliqua cillum anim. Sunt eu esse cupidatat proident dolore laboris. Dolor eu eiusmod dolor occaecat adipisicing commodo exercitation pariatur consectetur esse elit fugiat do adipisicing. Cillum aliqua esse ex laboris adipisicing adipisicing velit id adipisicing esse voluptate voluptate.\r\n",
+ "registered": "2014-10-10T22:01:10 -02:00",
+ "latitude": -19.014124,
+ "longitude": 12.264572,
+ "tags": [
+ "consequat",
+ "amet",
+ "dolor",
+ "voluptate",
+ "non",
+ "et",
+ "officia"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Mathews Irwin"
+ },
+ {
+ "id": 1,
+ "name": "Mclean Martin"
+ },
+ {
+ "id": 2,
+ "name": "Ora Dickerson"
+ }
+ ],
+ "greeting": "Hello, Hodge Gilliam! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af2208b6fdd5ce72d7",
+ "index": 7,
+ "guid": "a0d97326-b6f2-406f-9546-49cd04058b0a",
+ "isActive": true,
+ "balance": "$3,384.60",
+ "picture": "http://placehold.it/32x32",
+ "age": 32,
+ "eyeColor": "green",
+ "name": "Rachelle Gentry",
+ "gender": "female",
+ "company": "MYOPIUM",
+ "email": "rachellegentry@myopium.com",
+ "phone": "+1 (809) 591-3232",
+ "address": "609 Chestnut Avenue, Matheny, New Mexico, 5788",
+ "about": "Laborum labore est laborum est sunt veniam reprehenderit labore fugiat. Labore quis aute mollit incididunt incididunt velit adipisicing eiusmod ipsum ex ipsum velit culpa. Dolore ad esse sit qui sunt. Sunt deserunt eu minim sint incididunt fugiat amet enim sint minim eu nulla commodo.\r\n",
+ "registered": "2015-01-04T18:23:33 -01:00",
+ "latitude": -81.907299,
+ "longitude": 72.975338,
+ "tags": [
+ "minim",
+ "ea",
+ "labore",
+ "nostrud",
+ "commodo",
+ "ipsum",
+ "dolore"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Rosalie Little"
+ },
+ {
+ "id": 1,
+ "name": "Delia Saunders"
+ },
+ {
+ "id": 2,
+ "name": "Jamie Charles"
+ }
+ ],
+ "greeting": "Hello, Rachelle Gentry! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afc0d3a428d9b1c6ad",
+ "index": 8,
+ "guid": "c7c368f4-0f3e-4eb3-b0e4-b58c252527b9",
+ "isActive": true,
+ "balance": "$1,921.23",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "green",
+ "name": "Marsh Tillman",
+ "gender": "male",
+ "company": "SNIPS",
+ "email": "marshtillman@snips.com",
+ "phone": "+1 (898) 436-2399",
+ "address": "386 Noble Street, Motley, Alabama, 7019",
+ "about": "Adipisicing aliquip officia ipsum anim aliquip velit. Qui ea adipisicing anim Lorem elit culpa est minim Lorem magna. Adipisicing incididunt deserunt cillum esse deserunt ea non culpa fugiat exercitation veniam esse veniam. Ullamco aute id fugiat eiusmod ullamco laborum minim pariatur voluptate laborum id mollit reprehenderit ipsum.\r\n",
+ "registered": "2015-01-02T16:31:00 -01:00",
+ "latitude": -86.520612,
+ "longitude": 2.408368,
+ "tags": [
+ "in",
+ "culpa",
+ "mollit",
+ "nostrud",
+ "enim",
+ "et",
+ "proident"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Tammi Moore"
+ },
+ {
+ "id": 1,
+ "name": "Best Michael"
+ },
+ {
+ "id": 2,
+ "name": "Penelope Gross"
+ }
+ ],
+ "greeting": "Hello, Marsh Tillman! You have 5 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af4691eaf47e138e4a",
+ "index": 9,
+ "guid": "3fa90be4-fe12-4e28-a261-0958ce9cfe79",
+ "isActive": true,
+ "balance": "$1,826.48",
+ "picture": "http://placehold.it/32x32",
+ "age": 22,
+ "eyeColor": "brown",
+ "name": "Kristina Mathews",
+ "gender": "female",
+ "company": "EXTRO",
+ "email": "kristinamathews@extro.com",
+ "phone": "+1 (889) 515-2838",
+ "address": "115 Bokee Court, Hebron, Illinois, 1058",
+ "about": "Laboris esse reprehenderit incididunt elit irure tempor esse consequat minim veniam irure voluptate. Nostrud deserunt irure laborum velit exercitation in. Mollit qui aute mollit deserunt. Excepteur quis ipsum quis anim sunt. Voluptate velit aliquip tempor non ad. Commodo cillum excepteur nulla anim exercitation aliquip.\r\n",
+ "registered": "2014-11-01T09:16:14 -01:00",
+ "latitude": -80.095888,
+ "longitude": 168.217585,
+ "tags": [
+ "sunt",
+ "nostrud",
+ "dolore",
+ "ipsum",
+ "officia",
+ "sint",
+ "ipsum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Lindsey Warren"
+ },
+ {
+ "id": 1,
+ "name": "Jennings Jenkins"
+ },
+ {
+ "id": 2,
+ "name": "Mooney Cleveland"
+ }
+ ],
+ "greeting": "Hello, Kristina Mathews! You have 10 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af78d8e1f7f3fc696d",
+ "index": 10,
+ "guid": "fe179b16-0495-4440-8607-a1b8e5b2d411",
+ "isActive": true,
+ "balance": "$3,108.12",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "green",
+ "name": "Rowland Trujillo",
+ "gender": "male",
+ "company": "BLEEKO",
+ "email": "rowlandtrujillo@bleeko.com",
+ "phone": "+1 (910) 456-2298",
+ "address": "515 Vandervoort Place, Williams, Missouri, 7560",
+ "about": "Lorem eu Lorem ex commodo culpa non cupidatat nulla do. Labore anim culpa nulla esse qui duis. Deserunt dolor sunt ad nisi est sunt quis pariatur deserunt do duis et laborum magna. Elit nostrud consectetur excepteur qui elit sunt ad nisi veniam aute. Ut reprehenderit aliqua consequat consequat aute adipisicing ea elit eiusmod. Ullamco duis sunt dolor tempor excepteur sint.\r\n",
+ "registered": "2014-01-01T19:01:23 -01:00",
+ "latitude": 81.298438,
+ "longitude": -123.134821,
+ "tags": [
+ "voluptate",
+ "ut",
+ "culpa",
+ "amet",
+ "tempor",
+ "amet",
+ "fugiat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Shaw Pratt"
+ },
+ {
+ "id": 1,
+ "name": "Summer Barnett"
+ },
+ {
+ "id": 2,
+ "name": "Cohen Roy"
+ }
+ ],
+ "greeting": "Hello, Rowland Trujillo! You have 2 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af7f286c302acd29e8",
+ "index": 11,
+ "guid": "fc87e548-6b0e-4845-955e-9ce1b08e416e",
+ "isActive": true,
+ "balance": "$2,625.93",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "green",
+ "name": "Ester Beach",
+ "gender": "female",
+ "company": "AFFLUEX",
+ "email": "esterbeach@affluex.com",
+ "phone": "+1 (975) 452-3788",
+ "address": "180 Douglass Street, Gratton, Oregon, 5827",
+ "about": "Velit sit laboris in laboris. Fugiat eiusmod magna laborum officia. Ut eu sunt irure cupidatat irure id nostrud nostrud incididunt nulla. Veniam ut aliquip aliquip sint fugiat proident in do aute voluptate anim.\r\n",
+ "registered": "2015-03-21T19:01:21 -01:00",
+ "latitude": 19.593497,
+ "longitude": 56.436513,
+ "tags": [
+ "ex",
+ "ad",
+ "esse",
+ "veniam",
+ "culpa",
+ "ad",
+ "voluptate"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Randi Ramos"
+ },
+ {
+ "id": 1,
+ "name": "Dale Heath"
+ },
+ {
+ "id": 2,
+ "name": "Carol Aguilar"
+ }
+ ],
+ "greeting": "Hello, Ester Beach! You have 4 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afdb3c184cadf7fd75",
+ "index": 12,
+ "guid": "390dc267-0367-49f9-93ca-52c297d6fddd",
+ "isActive": false,
+ "balance": "$3,611.13",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "green",
+ "name": "Mercedes Foreman",
+ "gender": "female",
+ "company": "DREAMIA",
+ "email": "mercedesforeman@dreamia.com",
+ "phone": "+1 (896) 479-3342",
+ "address": "218 Senator Street, Century, Federated States Of Micronesia, 4670",
+ "about": "Consectetur exercitation nostrud fugiat sint laboris. Ullamco do proident deserunt aliqua velit voluptate laborum. Ad cillum fugiat exercitation officia aute enim officia sint cillum consequat mollit. Culpa adipisicing ea dolor esse sunt nostrud officia sint aute occaecat duis esse do qui.\r\n",
+ "registered": "2014-02-18T08:16:36 -01:00",
+ "latitude": 2.556578,
+ "longitude": 138.785817,
+ "tags": [
+ "ut",
+ "ut",
+ "ut",
+ "irure",
+ "cupidatat",
+ "et",
+ "ut"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Moody Walls"
+ },
+ {
+ "id": 1,
+ "name": "Hart Justice"
+ },
+ {
+ "id": 2,
+ "name": "Tamera Rowland"
+ }
+ ],
+ "greeting": "Hello, Mercedes Foreman! You have 9 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afa7d5d0e65e3ec35b",
+ "index": 13,
+ "guid": "5ec74544-7cc0-48d2-87f1-20263bbffd34",
+ "isActive": true,
+ "balance": "$3,517.10",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "brown",
+ "name": "Janis Villarreal",
+ "gender": "female",
+ "company": "PLASTO",
+ "email": "janisvillarreal@plasto.com",
+ "phone": "+1 (855) 485-2594",
+ "address": "886 Howard Place, Waukeenah, South Dakota, 354",
+ "about": "Nulla fugiat Lorem aliqua anim sunt elit ea eu. Minim tempor quis mollit aliquip magna magna pariatur dolore culpa in. Anim anim eu occaecat magna magna fugiat adipisicing do minim laboris. Eu cupidatat in nulla dolor mollit adipisicing laboris elit elit aliquip laborum enim amet incididunt. Mollit laboris do cillum esse. Velit anim laborum non excepteur pariatur exercitation incididunt et voluptate.\r\n",
+ "registered": "2014-01-05T09:58:31 -01:00",
+ "latitude": 71.086809,
+ "longitude": -79.611784,
+ "tags": [
+ "voluptate",
+ "nisi",
+ "tempor",
+ "eiusmod",
+ "laboris",
+ "qui",
+ "nisi"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Lakisha Hayes"
+ },
+ {
+ "id": 1,
+ "name": "Mcgee Navarro"
+ },
+ {
+ "id": 2,
+ "name": "Byrd Welch"
+ }
+ ],
+ "greeting": "Hello, Janis Villarreal! You have 1 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03affcf40c30e61a992f",
+ "index": 14,
+ "guid": "14e0e54c-c3a2-4a33-8290-3d8dc719e2b8",
+ "isActive": true,
+ "balance": "$2,071.61",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "brown",
+ "name": "Vinson Rojas",
+ "gender": "male",
+ "company": "NURPLEX",
+ "email": "vinsonrojas@nurplex.com",
+ "phone": "+1 (867) 572-2917",
+ "address": "952 Wolf Place, Bawcomville, Puerto Rico, 6566",
+ "about": "Do esse occaecat fugiat ut labore sint sunt quis pariatur anim cillum pariatur ad ex. Eiusmod culpa eiusmod tempor magna deserunt. Ut voluptate nulla cupidatat proident duis et non quis est et aliqua. Laborum ut minim enim irure fugiat veniam amet est Lorem. Et laboris aute deserunt magna dolor. Anim officia deserunt consectetur exercitation et consequat ullamco qui duis cupidatat sit irure mollit. Quis ad laboris voluptate veniam ipsum ut tempor dolor.\r\n",
+ "registered": "2014-04-26T04:30:52 -02:00",
+ "latitude": 60.987324,
+ "longitude": 86.697819,
+ "tags": [
+ "aute",
+ "labore",
+ "ea",
+ "ad",
+ "cillum",
+ "ad",
+ "do"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Janice Tate"
+ },
+ {
+ "id": 1,
+ "name": "Aguilar Lamb"
+ },
+ {
+ "id": 2,
+ "name": "Mattie Nunez"
+ }
+ ],
+ "greeting": "Hello, Vinson Rojas! You have 7 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afa30e186d33273982",
+ "index": 15,
+ "guid": "0639c047-b8a3-4858-83c1-340d31d67d88",
+ "isActive": false,
+ "balance": "$3,453.71",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "green",
+ "name": "Whitney Hurley",
+ "gender": "male",
+ "company": "ISBOL",
+ "email": "whitneyhurley@isbol.com",
+ "phone": "+1 (807) 538-2748",
+ "address": "558 Delevan Street, Madaket, Michigan, 7256",
+ "about": "Occaecat fugiat est consequat excepteur exercitation occaecat reprehenderit velit proident consectetur. Occaecat eu cillum consequat sint qui consequat ipsum consequat adipisicing. Aute enim aliquip dolore sit duis tempor id. Nulla veniam magna labore duis exercitation est consequat ut id fugiat ut et pariatur id. Ad enim velit duis enim qui esse proident proident sunt nostrud consequat eiusmod elit. Cillum et Lorem cupidatat ex. Magna minim proident deserunt dolore aliqua elit sunt.\r\n",
+ "registered": "2014-01-30T14:16:27 -01:00",
+ "latitude": -78.198268,
+ "longitude": 149.448597,
+ "tags": [
+ "quis",
+ "culpa",
+ "fugiat",
+ "nisi",
+ "do",
+ "et",
+ "culpa"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Vivian Marks"
+ },
+ {
+ "id": 1,
+ "name": "Susan Oliver"
+ },
+ {
+ "id": 2,
+ "name": "Celia Young"
+ }
+ ],
+ "greeting": "Hello, Whitney Hurley! You have 4 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af065074dc3cfbbece",
+ "index": 16,
+ "guid": "59f54a85-a005-4bec-a2fb-f7e38bae215b",
+ "isActive": true,
+ "balance": "$2,724.06",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "green",
+ "name": "Berg Spears",
+ "gender": "male",
+ "company": "CHILLIUM",
+ "email": "bergspears@chillium.com",
+ "phone": "+1 (920) 554-3332",
+ "address": "997 Sunnyside Avenue, Elrama, Nebraska, 9641",
+ "about": "Minim ipsum eiusmod duis veniam consectetur ea ullamco enim sit consequat proident. Incididunt tempor nisi minim sunt sit officia enim occaecat sint do irure aute. Amet non adipisicing ex nisi aliqua eu aute. Aliqua anim culpa anim incididunt proident occaecat veniam tempor occaecat anim. Tempor voluptate fugiat excepteur consequat sunt cillum in irure enim deserunt fugiat. Laborum adipisicing irure commodo consectetur laboris tempor ullamco consectetur elit culpa non.\r\n",
+ "registered": "2015-03-20T00:47:46 -01:00",
+ "latitude": 44.675715,
+ "longitude": -174.688011,
+ "tags": [
+ "dolor",
+ "ut",
+ "excepteur",
+ "deserunt",
+ "voluptate",
+ "nisi",
+ "veniam"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Beasley Fowler"
+ },
+ {
+ "id": 1,
+ "name": "Evelyn Combs"
+ },
+ {
+ "id": 2,
+ "name": "Amy Terry"
+ }
+ ],
+ "greeting": "Hello, Berg Spears! You have 2 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afbfa2f8b2c13d2148",
+ "index": 17,
+ "guid": "bbf8e543-5588-4534-ba2c-56faa2cafb10",
+ "isActive": true,
+ "balance": "$3,420.42",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "green",
+ "name": "Kimberley Mcknight",
+ "gender": "female",
+ "company": "KIGGLE",
+ "email": "kimberleymcknight@kiggle.com",
+ "phone": "+1 (875) 490-2941",
+ "address": "730 Willmohr Street, Dola, Wyoming, 4555",
+ "about": "Occaecat sit occaecat fugiat ad dolore proident reprehenderit ut consectetur irure magna aliquip eiusmod esse. Ut commodo qui adipisicing anim mollit occaecat Lorem. Enim do fugiat eiusmod ut elit duis cillum esse. Aute ut magna elit pariatur ex nisi. Sunt id magna occaecat exercitation consectetur proident non irure minim do dolore do duis. Ut laboris veniam do mollit ad. Id ipsum ullamco in eu minim.\r\n",
+ "registered": "2014-01-04T21:22:15 -01:00",
+ "latitude": 88.787941,
+ "longitude": -35.655773,
+ "tags": [
+ "id",
+ "do",
+ "nulla",
+ "in",
+ "consectetur",
+ "amet",
+ "est"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Oconnor Coleman"
+ },
+ {
+ "id": 1,
+ "name": "Leann Stewart"
+ },
+ {
+ "id": 2,
+ "name": "Magdalena Rush"
+ }
+ ],
+ "greeting": "Hello, Kimberley Mcknight! You have 8 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af9da62b82dbf14400",
+ "index": 18,
+ "guid": "31bb1718-15f0-4b48-95ec-c1950eedb53f",
+ "isActive": false,
+ "balance": "$3,507.13",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "brown",
+ "name": "Conner Wright",
+ "gender": "male",
+ "company": "GOGOL",
+ "email": "connerwright@gogol.com",
+ "phone": "+1 (859) 422-2384",
+ "address": "137 Schroeders Avenue, Grayhawk, California, 8460",
+ "about": "Adipisicing eu laboris nulla labore sit laborum aliquip mollit nostrud culpa ea ipsum amet nisi. Deserunt non elit occaecat labore. Exercitation do ad sunt deserunt.\r\n",
+ "registered": "2015-02-14T16:40:19 -01:00",
+ "latitude": -51.907663,
+ "longitude": 15.376408,
+ "tags": [
+ "aute",
+ "reprehenderit",
+ "esse",
+ "anim",
+ "est",
+ "voluptate",
+ "sit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Daugherty Rasmussen"
+ },
+ {
+ "id": 1,
+ "name": "Karin Woodward"
+ },
+ {
+ "id": 2,
+ "name": "Sheena Serrano"
+ }
+ ],
+ "greeting": "Hello, Conner Wright! You have 7 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af8c057c3f0570ee6e",
+ "index": 19,
+ "guid": "8fb085b7-ef1a-46ba-994c-1cc50881a482",
+ "isActive": false,
+ "balance": "$2,300.77",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "green",
+ "name": "Rich Albert",
+ "gender": "male",
+ "company": "ZORK",
+ "email": "richalbert@zork.com",
+ "phone": "+1 (828) 447-3600",
+ "address": "994 Clifford Place, Harold, Indiana, 824",
+ "about": "Consectetur exercitation veniam nulla occaecat tempor tempor minim. Aliquip exercitation ad ullamco tempor do fugiat amet ex consectetur in. Dolore consequat ea pariatur elit elit eiusmod. Nostrud amet aute in pariatur irure magna deserunt voluptate dolor ullamco dolor magna id sint. Amet aute aliqua culpa ex ut ut et nulla veniam exercitation esse ut est ut.\r\n",
+ "registered": "2015-01-09T00:14:36 -01:00",
+ "latitude": -39.067116,
+ "longitude": 167.034139,
+ "tags": [
+ "incididunt",
+ "qui",
+ "esse",
+ "et",
+ "in",
+ "culpa",
+ "cupidatat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Hines Joseph"
+ },
+ {
+ "id": 1,
+ "name": "Reba Vang"
+ },
+ {
+ "id": 2,
+ "name": "Alice Keith"
+ }
+ ],
+ "greeting": "Hello, Rich Albert! You have 4 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af5f2f03e2c2eee854",
+ "index": 20,
+ "guid": "926c815e-05b1-4284-803f-cdd20f1da68a",
+ "isActive": true,
+ "balance": "$1,237.83",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "green",
+ "name": "Elliott Nash",
+ "gender": "male",
+ "company": "REMOTION",
+ "email": "elliottnash@remotion.com",
+ "phone": "+1 (914) 448-2164",
+ "address": "271 Roosevelt Court, Bowie, Palau, 4537",
+ "about": "Excepteur cupidatat aliquip magna deserunt magna dolore proident commodo dolor fugiat est adipisicing anim. Ea qui magna pariatur reprehenderit reprehenderit consectetur officia incididunt Lorem irure quis irure exercitation amet. Sunt quis nulla non deserunt et magna ex veniam laboris reprehenderit ullamco consectetur qui ullamco. Ea Lorem labore dolor officia adipisicing do esse.\r\n",
+ "registered": "2014-03-10T01:22:57 -01:00",
+ "latitude": 22.926641,
+ "longitude": -24.509767,
+ "tags": [
+ "laborum",
+ "ut",
+ "in",
+ "deserunt",
+ "duis",
+ "ex",
+ "ea"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Krystal Velez"
+ },
+ {
+ "id": 1,
+ "name": "Mildred Mcdaniel"
+ },
+ {
+ "id": 2,
+ "name": "Betty Barrett"
+ }
+ ],
+ "greeting": "Hello, Elliott Nash! You have 1 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af858f91229292418c",
+ "index": 21,
+ "guid": "12df9f3f-ed43-4e1c-8be6-68a22227ac5a",
+ "isActive": true,
+ "balance": "$2,587.51",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "brown",
+ "name": "Carlene Vazquez",
+ "gender": "female",
+ "company": "QUILK",
+ "email": "carlenevazquez@quilk.com",
+ "phone": "+1 (914) 585-2176",
+ "address": "167 Jefferson Avenue, Kimmell, Northern Mariana Islands, 5209",
+ "about": "Adipisicing tempor labore aute sunt duis pariatur esse voluptate amet consequat in laboris dolore. Tempor adipisicing exercitation sit occaecat nulla Lorem exercitation officia aliquip. Duis dolore cillum reprehenderit in sint officia. Fugiat sint voluptate officia id nostrud laboris eiusmod. In fugiat sunt minim do ad culpa cupidatat incididunt. Nostrud laboris qui quis occaecat sit. Incididunt aliquip enim in do.\r\n",
+ "registered": "2014-09-21T20:40:33 -02:00",
+ "latitude": -11.253022,
+ "longitude": 81.275723,
+ "tags": [
+ "exercitation",
+ "est",
+ "ex",
+ "cupidatat",
+ "mollit",
+ "incididunt",
+ "dolore"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Leon Spencer"
+ },
+ {
+ "id": 1,
+ "name": "Bass Conley"
+ },
+ {
+ "id": 2,
+ "name": "Mabel Holcomb"
+ }
+ ],
+ "greeting": "Hello, Carlene Vazquez! You have 2 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03affc4346f66565ac5c",
+ "index": 22,
+ "guid": "4ad24ab8-e3e8-4a05-8ecc-9496eb172c3e",
+ "isActive": false,
+ "balance": "$1,647.36",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "green",
+ "name": "Herring Byrd",
+ "gender": "male",
+ "company": "MEDESIGN",
+ "email": "herringbyrd@medesign.com",
+ "phone": "+1 (987) 593-3511",
+ "address": "801 Dahl Court, Belleview, Washington, 9832",
+ "about": "Fugiat est nostrud labore sunt reprehenderit aliquip laborum qui est reprehenderit. Cupidatat nostrud aliquip officia duis non voluptate ut exercitation mollit officia ex. Do consectetur ullamco deserunt labore. Dolore exercitation veniam laboris dolor. Nostrud exercitation exercitation qui sint nisi est nulla culpa anim sit exercitation ad. Lorem est in excepteur esse est nostrud deserunt esse dolore magna eiusmod.\r\n",
+ "registered": "2014-12-28T19:01:51 -01:00",
+ "latitude": -7.542103,
+ "longitude": 85.902596,
+ "tags": [
+ "et",
+ "anim",
+ "in",
+ "ullamco",
+ "tempor",
+ "magna",
+ "occaecat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Flossie Bailey"
+ },
+ {
+ "id": 1,
+ "name": "Clara Benjamin"
+ },
+ {
+ "id": 2,
+ "name": "Baxter Vargas"
+ }
+ ],
+ "greeting": "Hello, Herring Byrd! You have 3 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afcdb93bfe4ff6bb59",
+ "index": 23,
+ "guid": "c30a7a97-a1cc-4f32-8451-8a4405e2a741",
+ "isActive": true,
+ "balance": "$3,714.01",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "brown",
+ "name": "Rena Delaney",
+ "gender": "female",
+ "company": "GINK",
+ "email": "renadelaney@gink.com",
+ "phone": "+1 (905) 491-2408",
+ "address": "935 Bowery Street, Carlos, Massachusetts, 7861",
+ "about": "Quis magna culpa voluptate voluptate veniam ea laborum quis nisi velit enim. Irure deserunt magna ex qui nostrud veniam. Dolor pariatur aliqua eu sunt veniam est exercitation labore do laboris. Id nulla commodo nisi velit non aute deserunt exercitation nisi dolor quis do eiusmod. Et sint nostrud cupidatat proident consequat nulla laboris nisi. Eiusmod laborum minim exercitation occaecat duis esse commodo qui velit consectetur est excepteur quis enim. Eiusmod ipsum consequat dolore non aliqua est.\r\n",
+ "registered": "2014-10-10T08:24:07 -02:00",
+ "latitude": -82.002775,
+ "longitude": -171.301394,
+ "tags": [
+ "incididunt",
+ "voluptate",
+ "excepteur",
+ "do",
+ "laborum",
+ "incididunt",
+ "consectetur"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "George Rodriguez"
+ },
+ {
+ "id": 1,
+ "name": "Kay Parks"
+ },
+ {
+ "id": 2,
+ "name": "Williams Meyer"
+ }
+ ],
+ "greeting": "Hello, Rena Delaney! You have 3 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af3c39c2f6c1508810",
+ "index": 24,
+ "guid": "2acfa260-90c7-4a2f-a81e-697db310bc59",
+ "isActive": true,
+ "balance": "$1,104.84",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "blue",
+ "name": "Rachael Mckay",
+ "gender": "female",
+ "company": "COMVERGES",
+ "email": "rachaelmckay@comverges.com",
+ "phone": "+1 (837) 513-3857",
+ "address": "694 Bedell Lane, Greenock, Tennessee, 873",
+ "about": "Aliquip aliqua sint enim non deserunt elit ipsum enim aute dolore ullamco culpa adipisicing irure. Nulla non ullamco ex consectetur voluptate nulla veniam minim laborum officia voluptate elit tempor velit. Consequat fugiat ut dolore elit esse nulla sit id ipsum nisi ex quis cupidatat.\r\n",
+ "registered": "2014-02-24T22:58:14 -01:00",
+ "latitude": -49.754199,
+ "longitude": -69.941761,
+ "tags": [
+ "ad",
+ "magna",
+ "mollit",
+ "ut",
+ "aliquip",
+ "esse",
+ "laboris"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Stevenson Hewitt"
+ },
+ {
+ "id": 1,
+ "name": "Underwood Rivas"
+ },
+ {
+ "id": 2,
+ "name": "Hull Hardin"
+ }
+ ],
+ "greeting": "Hello, Rachael Mckay! You have 3 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af660fa089f22842fb",
+ "index": 25,
+ "guid": "b61a4da7-4789-43ed-bfa3-2a27a1a71062",
+ "isActive": true,
+ "balance": "$1,550.85",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "blue",
+ "name": "Guerra Butler",
+ "gender": "male",
+ "company": "SENMEI",
+ "email": "guerrabutler@senmei.com",
+ "phone": "+1 (983) 491-2676",
+ "address": "521 Seaview Court, Chalfant, Wisconsin, 7018",
+ "about": "Et ea nostrud aliquip enim esse. Magna tempor minim elit aute sit pariatur reprehenderit occaecat nostrud officia consequat fugiat ipsum nostrud. Adipisicing consectetur mollit do culpa dolore consequat duis. Reprehenderit occaecat non incididunt deserunt ex eu minim in consectetur do quis magna cillum esse. Fugiat do aute officia labore do aliquip id qui duis consequat pariatur cupidatat ut nostrud. Sit irure officia reprehenderit ipsum cillum sunt nisi elit minim quis commodo cupidatat proident velit. Consequat non pariatur id commodo elit commodo dolor aliqua amet elit.\r\n",
+ "registered": "2014-10-14T04:58:50 -02:00",
+ "latitude": 43.041732,
+ "longitude": 2.196515,
+ "tags": [
+ "veniam",
+ "enim",
+ "cupidatat",
+ "nostrud",
+ "non",
+ "consectetur",
+ "velit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Goodman Whitfield"
+ },
+ {
+ "id": 1,
+ "name": "Aurora Ortega"
+ },
+ {
+ "id": 2,
+ "name": "Hartman Love"
+ }
+ ],
+ "greeting": "Hello, Guerra Butler! You have 5 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af3704a0c571911a2c",
+ "index": 26,
+ "guid": "e1373e70-7d66-4090-b883-b4678303f214",
+ "isActive": true,
+ "balance": "$1,859.74",
+ "picture": "http://placehold.it/32x32",
+ "age": 22,
+ "eyeColor": "blue",
+ "name": "Russo Dalton",
+ "gender": "male",
+ "company": "GLUKGLUK",
+ "email": "russodalton@glukgluk.com",
+ "phone": "+1 (854) 458-2532",
+ "address": "958 Canal Avenue, Vernon, Delaware, 1099",
+ "about": "Ullamco tempor ad qui esse voluptate minim anim non aliqua nostrud. Ullamco quis nulla minim esse velit excepteur cillum in reprehenderit adipisicing. Eu dolor cupidatat qui cupidatat ex amet eu qui culpa ea aliqua et duis ut.\r\n",
+ "registered": "2014-03-30T18:34:19 -02:00",
+ "latitude": -29.017893,
+ "longitude": -116.824538,
+ "tags": [
+ "ullamco",
+ "laboris",
+ "labore",
+ "labore",
+ "in",
+ "minim",
+ "ad"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Coleen Patterson"
+ },
+ {
+ "id": 1,
+ "name": "Langley Conrad"
+ },
+ {
+ "id": 2,
+ "name": "Duncan Baxter"
+ }
+ ],
+ "greeting": "Hello, Russo Dalton! You have 1 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af675c8f3b353f4937",
+ "index": 27,
+ "guid": "3b7e5c4f-4e6d-4a07-8863-084490e2fafa",
+ "isActive": true,
+ "balance": "$1,902.40",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "green",
+ "name": "Polly Farmer",
+ "gender": "female",
+ "company": "XYLAR",
+ "email": "pollyfarmer@xylar.com",
+ "phone": "+1 (954) 531-3812",
+ "address": "518 Christopher Avenue, Salvo, American Samoa, 6652",
+ "about": "Eu ad officia ea dolor. Nostrud incididunt eiusmod officia aliquip id fugiat occaecat qui. Sunt non consequat duis anim excepteur est exercitation quis ea eu minim sit consequat ea. Reprehenderit do proident incididunt cupidatat excepteur deserunt nisi. Fugiat minim anim est consequat est commodo anim deserunt Lorem labore anim. Elit minim duis id cupidatat deserunt dolor Lorem enim ad sunt.\r\n",
+ "registered": "2014-12-19T17:38:15 -01:00",
+ "latitude": 62.381451,
+ "longitude": 48.856332,
+ "tags": [
+ "cillum",
+ "amet",
+ "velit",
+ "magna",
+ "magna",
+ "est",
+ "officia"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Maureen Rich"
+ },
+ {
+ "id": 1,
+ "name": "Jodi Ross"
+ },
+ {
+ "id": 2,
+ "name": "Sherman Branch"
+ }
+ ],
+ "greeting": "Hello, Polly Farmer! You have 5 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afb7a4581e9725da03",
+ "index": 28,
+ "guid": "4d0eea09-aa72-400d-b61e-af0a2fe4b7ac",
+ "isActive": true,
+ "balance": "$2,051.72",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "blue",
+ "name": "Anderson Davis",
+ "gender": "male",
+ "company": "INTERODEO",
+ "email": "andersondavis@interodeo.com",
+ "phone": "+1 (996) 563-2156",
+ "address": "859 Jardine Place, Hessville, Ohio, 4899",
+ "about": "Reprehenderit dolor nulla magna dolor est reprehenderit minim ex proident. Aliqua est eiusmod excepteur elit eu dolore officia nostrud esse veniam exercitation. Occaecat qui sint ut occaecat officia velit ullamco. Velit ipsum nostrud occaecat excepteur eiusmod amet. Pariatur velit ex veniam do deserunt eiusmod enim. Irure minim culpa ex id ea proident proident commodo. Enim ut occaecat ea eiusmod minim.\r\n",
+ "registered": "2015-04-25T09:24:44 -02:00",
+ "latitude": -70.160236,
+ "longitude": -22.681933,
+ "tags": [
+ "proident",
+ "ut",
+ "elit",
+ "veniam",
+ "velit",
+ "voluptate",
+ "labore"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Francis Payne"
+ },
+ {
+ "id": 1,
+ "name": "Ava Daugherty"
+ },
+ {
+ "id": 2,
+ "name": "Bray Buckley"
+ }
+ ],
+ "greeting": "Hello, Anderson Davis! You have 7 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af1893963496856a3e",
+ "index": 29,
+ "guid": "9b72fbfb-7075-4add-a0d8-17cfd16bf70a",
+ "isActive": true,
+ "balance": "$1,729.51",
+ "picture": "http://placehold.it/32x32",
+ "age": 30,
+ "eyeColor": "blue",
+ "name": "Johnnie Nixon",
+ "gender": "female",
+ "company": "NIQUENT",
+ "email": "johnnienixon@niquent.com",
+ "phone": "+1 (873) 474-2908",
+ "address": "350 Cleveland Street, Breinigsville, Louisiana, 4467",
+ "about": "Voluptate eu qui quis anim. Velit sit commodo aute id Lorem pariatur eu duis dolor mollit est aute minim adipisicing. Dolor reprehenderit id et eiusmod et laborum. Aute labore elit aute do adipisicing magna. Consectetur deserunt minim nisi pariatur aliquip aute dolore commodo sint. Ad duis nisi anim duis officia ad. Est irure deserunt qui duis.\r\n",
+ "registered": "2015-01-23T08:18:05 -01:00",
+ "latitude": 81.403125,
+ "longitude": 120.093293,
+ "tags": [
+ "reprehenderit",
+ "officia",
+ "aliqua",
+ "magna",
+ "excepteur",
+ "dolor",
+ "laborum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Tanya Vinson"
+ },
+ {
+ "id": 1,
+ "name": "Annette Boone"
+ },
+ {
+ "id": 2,
+ "name": "Cobb Lara"
+ }
+ ],
+ "greeting": "Hello, Johnnie Nixon! You have 1 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af97b902c79a093b2a",
+ "index": 30,
+ "guid": "08599c90-d1ca-4a82-bcde-a92379fa6505",
+ "isActive": true,
+ "balance": "$2,540.95",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "blue",
+ "name": "Ilene Diaz",
+ "gender": "female",
+ "company": "ARTIQ",
+ "email": "ilenediaz@artiq.com",
+ "phone": "+1 (819) 419-3706",
+ "address": "513 Lafayette Walk, Lopezo, Idaho, 5314",
+ "about": "Labore laborum mollit occaecat nulla excepteur commodo magna do. Sint excepteur duis duis nisi aute quis. Eu culpa cupidatat magna magna reprehenderit incididunt exercitation cupidatat elit do nulla dolor. Ullamco incididunt magna veniam enim anim commodo deserunt eu sunt ea nisi quis nostrud voluptate. Sint excepteur sint enim laboris.\r\n",
+ "registered": "2015-03-20T17:50:05 -01:00",
+ "latitude": -17.134981,
+ "longitude": 109.962966,
+ "tags": [
+ "est",
+ "pariatur",
+ "nisi",
+ "elit",
+ "qui",
+ "reprehenderit",
+ "reprehenderit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Nguyen Kirkland"
+ },
+ {
+ "id": 1,
+ "name": "Mann Watson"
+ },
+ {
+ "id": 2,
+ "name": "Lucy Preston"
+ }
+ ],
+ "greeting": "Hello, Ilene Diaz! You have 8 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af45ab9330e3fd1731",
+ "index": 31,
+ "guid": "8e134923-8317-4dc0-b774-95af7b655450",
+ "isActive": true,
+ "balance": "$2,303.29",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "brown",
+ "name": "Marcie Malone",
+ "gender": "female",
+ "company": "FLEXIGEN",
+ "email": "marciemalone@flexigen.com",
+ "phone": "+1 (858) 505-3337",
+ "address": "615 Strong Place, Wakarusa, New Hampshire, 728",
+ "about": "Culpa elit duis pariatur occaecat anim id amet do labore do quis mollit mollit cupidatat. Lorem aute officia pariatur excepteur. Lorem duis veniam exercitation dolor tempor.\r\n",
+ "registered": "2014-07-03T16:10:55 -02:00",
+ "latitude": -80.666426,
+ "longitude": 161.698729,
+ "tags": [
+ "elit",
+ "et",
+ "elit",
+ "labore",
+ "anim",
+ "esse",
+ "aliquip"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Vickie Humphrey"
+ },
+ {
+ "id": 1,
+ "name": "Earline Murphy"
+ },
+ {
+ "id": 2,
+ "name": "Katharine Miller"
+ }
+ ],
+ "greeting": "Hello, Marcie Malone! You have 5 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afdbb99f5e9e776282",
+ "index": 32,
+ "guid": "0addca4f-0c09-4e19-b3fd-a91d5a7a6989",
+ "isActive": false,
+ "balance": "$1,437.59",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "green",
+ "name": "Chrystal Petty",
+ "gender": "female",
+ "company": "PORTALIS",
+ "email": "chrystalpetty@portalis.com",
+ "phone": "+1 (948) 540-2333",
+ "address": "874 Hillel Place, Bennett, Maine, 9364",
+ "about": "Adipisicing cupidatat laborum elit enim Lorem aute sunt quis cillum commodo. Tempor irure irure elit veniam elit ex labore veniam ad consectetur aliquip nisi. Deserunt irure do minim sint velit occaecat sit laborum Lorem quis ullamco consectetur esse aliqua. Pariatur labore nostrud nisi exercitation est consectetur esse minim esse. Ex non aliqua fugiat est.\r\n",
+ "registered": "2015-02-14T09:10:50 -01:00",
+ "latitude": -12.902836,
+ "longitude": 86.21872,
+ "tags": [
+ "aliquip",
+ "pariatur",
+ "ullamco",
+ "cupidatat",
+ "eu",
+ "mollit",
+ "officia"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Lacey Buck"
+ },
+ {
+ "id": 1,
+ "name": "Bertha Crane"
+ },
+ {
+ "id": 2,
+ "name": "Francesca Bruce"
+ }
+ ],
+ "greeting": "Hello, Chrystal Petty! You have 3 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af980ff6e0fabec5d6",
+ "index": 33,
+ "guid": "a91b1a2c-ca3d-45e8-a800-ca13f5cefdb0",
+ "isActive": false,
+ "balance": "$3,078.99",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "blue",
+ "name": "Meagan Rowe",
+ "gender": "female",
+ "company": "LUNCHPOD",
+ "email": "meaganrowe@lunchpod.com",
+ "phone": "+1 (955) 526-2419",
+ "address": "767 Wythe Place, Sedley, Utah, 6019",
+ "about": "Ex pariatur velit adipisicing ut aliqua do aliqua do quis elit. Occaecat non incididunt anim esse anim aute eu mollit mollit ex deserunt consequat. Reprehenderit labore amet aliquip nulla ad nostrud aliquip adipisicing laborum cillum velit pariatur consectetur. Reprehenderit proident culpa ut duis voluptate non proident ad. Ullamco eu sint elit sit non. Ex nulla fugiat ipsum duis.\r\n",
+ "registered": "2014-10-14T07:05:08 -02:00",
+ "latitude": -84.703016,
+ "longitude": 31.472619,
+ "tags": [
+ "consectetur",
+ "sit",
+ "amet",
+ "duis",
+ "amet",
+ "consequat",
+ "id"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Sharron Dawson"
+ },
+ {
+ "id": 1,
+ "name": "Jenifer Donovan"
+ },
+ {
+ "id": 2,
+ "name": "Emily Head"
+ }
+ ],
+ "greeting": "Hello, Meagan Rowe! You have 4 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af5f391ed91e552216",
+ "index": 34,
+ "guid": "1580f657-c1b2-4b84-a2da-b49d9f932f9a",
+ "isActive": true,
+ "balance": "$3,404.09",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "green",
+ "name": "Melisa Pitts",
+ "gender": "female",
+ "company": "RADIANTIX",
+ "email": "melisapitts@radiantix.com",
+ "phone": "+1 (984) 401-3424",
+ "address": "222 Crown Street, Bakersville, West Virginia, 9770",
+ "about": "Amet laborum tempor velit mollit. Consequat duis voluptate fugiat sunt consequat pariatur occaecat. Lorem est cillum sint officia anim irure laboris non velit amet. Dolore aute aliquip proident excepteur velit consectetur cupidatat irure mollit cupidatat deserunt do. Occaecat officia adipisicing amet ea elit qui elit fugiat excepteur deserunt.\r\n",
+ "registered": "2015-04-05T14:40:53 -02:00",
+ "latitude": -89.777622,
+ "longitude": -81.96614,
+ "tags": [
+ "nostrud",
+ "id",
+ "reprehenderit",
+ "deserunt",
+ "officia",
+ "laboris",
+ "exercitation"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Cherie Briggs"
+ },
+ {
+ "id": 1,
+ "name": "Cornelia Russell"
+ },
+ {
+ "id": 2,
+ "name": "Wendy Williams"
+ }
+ ],
+ "greeting": "Hello, Melisa Pitts! You have 4 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afb15216b76fd8ac34",
+ "index": 35,
+ "guid": "c8a5cb1f-7be7-448a-8a24-477b06af7f42",
+ "isActive": false,
+ "balance": "$1,957.10",
+ "picture": "http://placehold.it/32x32",
+ "age": 22,
+ "eyeColor": "green",
+ "name": "Nolan Mitchell",
+ "gender": "male",
+ "company": "VOIPA",
+ "email": "nolanmitchell@voipa.com",
+ "phone": "+1 (948) 513-2521",
+ "address": "132 Lester Court, Titanic, Virginia, 2785",
+ "about": "Ut velit id consequat enim excepteur laboris anim. Amet cupidatat Lorem consectetur pariatur mollit deserunt. Tempor nostrud tempor ex adipisicing id pariatur. Qui aliqua do ad aute.\r\n",
+ "registered": "2015-03-07T23:05:39 -01:00",
+ "latitude": 43.961726,
+ "longitude": -8.025719,
+ "tags": [
+ "voluptate",
+ "dolore",
+ "tempor",
+ "minim",
+ "irure",
+ "enim",
+ "Lorem"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Flowers Emerson"
+ },
+ {
+ "id": 1,
+ "name": "Walter Lindsay"
+ },
+ {
+ "id": 2,
+ "name": "Griffin Goodman"
+ }
+ ],
+ "greeting": "Hello, Nolan Mitchell! You have 1 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af704a1a9b29f01d2d",
+ "index": 36,
+ "guid": "64a51521-dd7c-418f-ac0f-2e4f4d93de80",
+ "isActive": false,
+ "balance": "$2,017.08",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "brown",
+ "name": "Catalina Duncan",
+ "gender": "female",
+ "company": "ELPRO",
+ "email": "catalinaduncan@elpro.com",
+ "phone": "+1 (836) 458-2736",
+ "address": "913 Green Street, Westwood, Florida, 3012",
+ "about": "Voluptate nisi aute ea sunt fugiat nulla amet commodo consequat id magna pariatur. Irure cillum deserunt mollit enim sit cupidatat in nulla ullamco. Enim magna anim dolore ut exercitation veniam eu cupidatat in proident. Nostrud veniam culpa ad adipisicing. Consequat proident culpa pariatur adipisicing exercitation id minim ad nulla.\r\n",
+ "registered": "2014-10-27T22:46:24 -01:00",
+ "latitude": 52.593996,
+ "longitude": -146.808423,
+ "tags": [
+ "fugiat",
+ "aute",
+ "culpa",
+ "exercitation",
+ "ex",
+ "cillum",
+ "quis"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Casey Palmer"
+ },
+ {
+ "id": 1,
+ "name": "Nannie Brady"
+ },
+ {
+ "id": 2,
+ "name": "Compton Good"
+ }
+ ],
+ "greeting": "Hello, Catalina Duncan! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af1abb389cec9d8da1",
+ "index": 37,
+ "guid": "48f1b315-65ea-41b9-ac2f-3fcade05311f",
+ "isActive": false,
+ "balance": "$3,080.63",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "brown",
+ "name": "Marks Kane",
+ "gender": "male",
+ "company": "ZILLATIDE",
+ "email": "markskane@zillatide.com",
+ "phone": "+1 (852) 466-2964",
+ "address": "146 Hastings Street, Gulf, Texas, 9294",
+ "about": "Nulla est magna id et consectetur dolore excepteur. Irure velit Lorem ipsum commodo esse veniam reprehenderit aliquip cupidatat enim elit ea cupidatat nisi. Irure et fugiat ex minim occaecat consectetur.\r\n",
+ "registered": "2014-08-18T11:50:24 -02:00",
+ "latitude": -0.705316,
+ "longitude": -26.453947,
+ "tags": [
+ "culpa",
+ "amet",
+ "nulla",
+ "consectetur",
+ "velit",
+ "magna",
+ "velit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Stella Stafford"
+ },
+ {
+ "id": 1,
+ "name": "Jewel Ingram"
+ },
+ {
+ "id": 2,
+ "name": "Knox Waters"
+ }
+ ],
+ "greeting": "Hello, Marks Kane! You have 10 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af95c3f23564039f6c",
+ "index": 38,
+ "guid": "86d45963-ee8f-426b-aed2-ae4537aa4638",
+ "isActive": true,
+ "balance": "$2,993.80",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "brown",
+ "name": "Lowery Olson",
+ "gender": "male",
+ "company": "COMDOM",
+ "email": "loweryolson@comdom.com",
+ "phone": "+1 (874) 509-2122",
+ "address": "204 Bainbridge Street, Zortman, Guam, 1556",
+ "about": "Eu esse adipisicing culpa irure elit esse ea id consequat et eu laborum anim. Pariatur reprehenderit enim duis ut non velit sunt mollit officia ea ad. Laborum magna cillum enim do deserunt magna non. Mollit ut fugiat consectetur excepteur. Tempor quis aliqua amet consequat deserunt qui eiusmod.\r\n",
+ "registered": "2014-02-01T05:55:51 -01:00",
+ "latitude": -75.338501,
+ "longitude": 31.294436,
+ "tags": [
+ "anim",
+ "nisi",
+ "elit",
+ "nulla",
+ "ut",
+ "eiusmod",
+ "mollit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Eugenia Whitney"
+ },
+ {
+ "id": 1,
+ "name": "Maxwell Miranda"
+ },
+ {
+ "id": 2,
+ "name": "Sallie Gaines"
+ }
+ ],
+ "greeting": "Hello, Lowery Olson! You have 2 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af704721da856f48ad",
+ "index": 39,
+ "guid": "19de7ced-3e6f-4e03-9f24-8e73062250d0",
+ "isActive": true,
+ "balance": "$1,402.43",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "blue",
+ "name": "Mcdaniel Wilkerson",
+ "gender": "male",
+ "company": "SPRINGBEE",
+ "email": "mcdanielwilkerson@springbee.com",
+ "phone": "+1 (865) 482-3993",
+ "address": "604 Highland Place, Day, Alaska, 1438",
+ "about": "Ipsum elit ipsum officia enim. Aliqua amet eiusmod nostrud mollit reprehenderit. Aliqua occaecat eu fugiat aute velit exercitation ex quis laboris veniam. Veniam amet occaecat non magna pariatur in laboris pariatur et excepteur.\r\n",
+ "registered": "2014-03-06T08:35:59 -01:00",
+ "latitude": 87.812235,
+ "longitude": 96.982831,
+ "tags": [
+ "excepteur",
+ "duis",
+ "tempor",
+ "velit",
+ "sit",
+ "culpa",
+ "adipisicing"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Henderson Sims"
+ },
+ {
+ "id": 1,
+ "name": "Patrick Shaffer"
+ },
+ {
+ "id": 2,
+ "name": "Patterson Brown"
+ }
+ ],
+ "greeting": "Hello, Mcdaniel Wilkerson! You have 8 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afc7d1c72f0aa03458",
+ "index": 40,
+ "guid": "6989c349-251d-4c6b-8c2e-7a42db1e9d3d",
+ "isActive": true,
+ "balance": "$2,266.50",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "brown",
+ "name": "Lorna Miles",
+ "gender": "female",
+ "company": "OPTYK",
+ "email": "lornamiles@optyk.com",
+ "phone": "+1 (971) 464-3926",
+ "address": "443 Woods Place, Norvelt, District Of Columbia, 730",
+ "about": "Aute ea et laborum pariatur proident ullamco anim sunt aliquip. Est velit exercitation tempor consectetur incididunt non qui non irure. Ad deserunt excepteur ea cillum magna quis duis in ut ex. Sit sunt veniam laborum voluptate sit ea id esse ut id minim laborum aliquip.\r\n",
+ "registered": "2015-04-24T21:13:36 -02:00",
+ "latitude": 33.53052,
+ "longitude": 140.321995,
+ "tags": [
+ "occaecat",
+ "nulla",
+ "commodo",
+ "deserunt",
+ "ullamco",
+ "eu",
+ "nisi"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Terrell Bush"
+ },
+ {
+ "id": 1,
+ "name": "Holcomb Blackwell"
+ },
+ {
+ "id": 2,
+ "name": "Guthrie Collier"
+ }
+ ],
+ "greeting": "Hello, Lorna Miles! You have 4 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03affb1f45e1ce9aa6f0",
+ "index": 41,
+ "guid": "046c7e8f-3f6f-4254-87d4-1b4371632829",
+ "isActive": true,
+ "balance": "$2,597.16",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "green",
+ "name": "Felicia Tran",
+ "gender": "female",
+ "company": "EARWAX",
+ "email": "feliciatran@earwax.com",
+ "phone": "+1 (958) 480-3911",
+ "address": "456 Remsen Avenue, Haena, New York, 1291",
+ "about": "Culpa dolor anim aliquip ea deserunt velit excepteur ullamco aute nisi mollit excepteur aliquip. Voluptate occaecat voluptate cillum sit. Nulla laboris velit dolore laborum duis ad amet commodo ad do elit qui reprehenderit. Anim magna excepteur non qui mollit magna irure dolor.\r\n",
+ "registered": "2014-02-18T09:33:51 -01:00",
+ "latitude": -38.749344,
+ "longitude": -30.052509,
+ "tags": [
+ "tempor",
+ "elit",
+ "magna",
+ "esse",
+ "esse",
+ "irure",
+ "quis"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Flora Fitzpatrick"
+ },
+ {
+ "id": 1,
+ "name": "Marissa Duffy"
+ },
+ {
+ "id": 2,
+ "name": "Jimmie Hays"
+ }
+ ],
+ "greeting": "Hello, Felicia Tran! You have 4 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afffd3f8e4e44aaba1",
+ "index": 42,
+ "guid": "21607502-0e45-4067-9ddf-529ce60e63b8",
+ "isActive": true,
+ "balance": "$2,779.15",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "blue",
+ "name": "Clark Gutierrez",
+ "gender": "male",
+ "company": "GOKO",
+ "email": "clarkgutierrez@goko.com",
+ "phone": "+1 (861) 484-3189",
+ "address": "174 Billings Place, Oasis, North Carolina, 7230",
+ "about": "Cillum ea deserunt cupidatat pariatur ea fugiat nulla minim consequat elit ea ut elit consequat. Reprehenderit officia dolor occaecat reprehenderit tempor esse. Culpa eiusmod minim minim veniam culpa minim qui officia id cillum mollit dolore ut. Velit commodo dolor adipisicing et duis pariatur nostrud adipisicing anim fugiat et labore. Incididunt irure sunt irure veniam dolore exercitation laborum enim veniam.\r\n",
+ "registered": "2014-01-02T23:25:53 -01:00",
+ "latitude": -40.945705,
+ "longitude": 26.028266,
+ "tags": [
+ "labore",
+ "sunt",
+ "duis",
+ "sunt",
+ "ex",
+ "anim",
+ "labore"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Hannah Odonnell"
+ },
+ {
+ "id": 1,
+ "name": "Mollie Alford"
+ },
+ {
+ "id": 2,
+ "name": "Melanie Ellis"
+ }
+ ],
+ "greeting": "Hello, Clark Gutierrez! You have 3 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afe998d5c2df6fe79e",
+ "index": 43,
+ "guid": "29e46f27-aeca-46a7-962c-6e064ac2a22c",
+ "isActive": true,
+ "balance": "$3,102.48",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "blue",
+ "name": "Lavonne Blevins",
+ "gender": "female",
+ "company": "ENDIPINE",
+ "email": "lavonneblevins@endipine.com",
+ "phone": "+1 (939) 438-3401",
+ "address": "145 Forrest Street, Ferney, Connecticut, 8023",
+ "about": "Enim consequat officia reprehenderit deserunt eiusmod mollit. Incididunt aute sit cillum dolor ea ipsum. Laborum sit veniam sunt duis aute. Commodo id laborum nisi nostrud minim laboris officia do quis mollit. Consectetur aliqua sint quis labore.\r\n",
+ "registered": "2014-05-04T12:10:52 -02:00",
+ "latitude": -57.078646,
+ "longitude": 39.835816,
+ "tags": [
+ "tempor",
+ "velit",
+ "ipsum",
+ "culpa",
+ "aliquip",
+ "sunt",
+ "proident"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Molly Fields"
+ },
+ {
+ "id": 1,
+ "name": "Marquez Cox"
+ },
+ {
+ "id": 2,
+ "name": "Zamora Morales"
+ }
+ ],
+ "greeting": "Hello, Lavonne Blevins! You have 4 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af46a671c30d058c0a",
+ "index": 44,
+ "guid": "16df8c70-6f86-406e-bed5-e269f58fccc6",
+ "isActive": false,
+ "balance": "$3,300.37",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "blue",
+ "name": "Carpenter Pugh",
+ "gender": "male",
+ "company": "GEEKKO",
+ "email": "carpenterpugh@geekko.com",
+ "phone": "+1 (916) 415-3970",
+ "address": "285 Thomas Street, Edinburg, South Carolina, 9139",
+ "about": "Ad et culpa deserunt eiusmod nulla irure aliqua commodo adipisicing ea laborum et laboris. Amet duis nisi adipisicing Lorem tempor id duis voluptate proident pariatur consectetur. Velit occaecat minim laboris aliquip aliquip culpa. Dolor sunt eu nulla commodo culpa enim sint ad magna id proident. Sint tempor qui ea non aliquip fugiat nisi sit consectetur. Non velit elit et consectetur enim nostrud sint anim qui amet id dolor Lorem quis. Qui incididunt mollit aliqua labore consequat nisi aliqua excepteur ea ea.\r\n",
+ "registered": "2014-01-25T13:19:05 -01:00",
+ "latitude": 71.311446,
+ "longitude": 125.959748,
+ "tags": [
+ "minim",
+ "nisi",
+ "cillum",
+ "sit",
+ "aute",
+ "Lorem",
+ "incididunt"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Hyde Olsen"
+ },
+ {
+ "id": 1,
+ "name": "Santiago Valdez"
+ },
+ {
+ "id": 2,
+ "name": "Spears Hyde"
+ }
+ ],
+ "greeting": "Hello, Carpenter Pugh! You have 5 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03aff909ea76ba1b2dbc",
+ "index": 45,
+ "guid": "8b6c8560-676e-4796-8df5-6fdde823d1a8",
+ "isActive": false,
+ "balance": "$3,451.99",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "brown",
+ "name": "Millicent Mcgee",
+ "gender": "female",
+ "company": "BIOHAB",
+ "email": "millicentmcgee@biohab.com",
+ "phone": "+1 (942) 572-3890",
+ "address": "251 Anchorage Place, Ernstville, Rhode Island, 215",
+ "about": "Mollit cillum voluptate sunt in mollit incididunt quis minim aute officia amet esse. Cillum ipsum commodo nisi ipsum exercitation quis cupidatat dolore. Consectetur irure quis Lorem laborum qui cillum enim mollit. Lorem dolore et tempor veniam consectetur.\r\n",
+ "registered": "2014-10-21T23:25:47 -02:00",
+ "latitude": -82.706664,
+ "longitude": 36.404064,
+ "tags": [
+ "cupidatat",
+ "adipisicing",
+ "mollit",
+ "aute",
+ "qui",
+ "eiusmod",
+ "est"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Allison Cochran"
+ },
+ {
+ "id": 1,
+ "name": "Ines Hicks"
+ },
+ {
+ "id": 2,
+ "name": "Katheryn Hatfield"
+ }
+ ],
+ "greeting": "Hello, Millicent Mcgee! You have 4 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af65da001d4344816b",
+ "index": 46,
+ "guid": "747564b2-f575-494c-806f-efb132b25a15",
+ "isActive": true,
+ "balance": "$2,905.38",
+ "picture": "http://placehold.it/32x32",
+ "age": 28,
+ "eyeColor": "blue",
+ "name": "Ebony Parker",
+ "gender": "female",
+ "company": "LUNCHPAD",
+ "email": "ebonyparker@lunchpad.com",
+ "phone": "+1 (905) 513-3020",
+ "address": "173 Story Court, Tolu, Pennsylvania, 9326",
+ "about": "Commodo laborum do exercitation ex aliqua. Sit ullamco ut nostrud cillum culpa duis labore. Anim sint dolor consequat eiusmod aute.\r\n",
+ "registered": "2014-05-21T03:46:41 -02:00",
+ "latitude": 12.672661,
+ "longitude": -111.547222,
+ "tags": [
+ "est",
+ "amet",
+ "ad",
+ "eiusmod",
+ "officia",
+ "nostrud",
+ "sunt"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Freeman Graves"
+ },
+ {
+ "id": 1,
+ "name": "Rosalind Maxwell"
+ },
+ {
+ "id": 2,
+ "name": "Stacey Bryan"
+ }
+ ],
+ "greeting": "Hello, Ebony Parker! You have 4 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af47e831dcd6cadc1f",
+ "index": 47,
+ "guid": "7ae63a76-ac98-4188-a517-2c43964b3cf8",
+ "isActive": true,
+ "balance": "$3,542.73",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "blue",
+ "name": "Macdonald Cross",
+ "gender": "male",
+ "company": "SLOFAST",
+ "email": "macdonaldcross@slofast.com",
+ "phone": "+1 (884) 405-3166",
+ "address": "246 Church Lane, Brownsville, Oklahoma, 8976",
+ "about": "Sit proident pariatur Lorem duis. Ea occaecat cupidatat ipsum elit commodo magna tempor Lorem consectetur velit mollit laboris sunt duis. Eiusmod Lorem fugiat dolore adipisicing ipsum sit exercitation dolor tempor.\r\n",
+ "registered": "2015-03-09T09:59:19 -01:00",
+ "latitude": 38.452848,
+ "longitude": 133.567167,
+ "tags": [
+ "magna",
+ "eu",
+ "non",
+ "incididunt",
+ "eu",
+ "proident",
+ "duis"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Chavez Mccarthy"
+ },
+ {
+ "id": 1,
+ "name": "Tabitha Foley"
+ },
+ {
+ "id": 2,
+ "name": "Lidia Larsen"
+ }
+ ],
+ "greeting": "Hello, Macdonald Cross! You have 4 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afa3e565cefddeca44",
+ "index": 48,
+ "guid": "7cf531d0-0568-4451-97bb-2ec7cba40dbc",
+ "isActive": true,
+ "balance": "$1,171.29",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "brown",
+ "name": "Reid Shannon",
+ "gender": "male",
+ "company": "XINWARE",
+ "email": "reidshannon@xinware.com",
+ "phone": "+1 (983) 579-3335",
+ "address": "702 Elliott Place, Riviera, Kansas, 9498",
+ "about": "Magna consectetur exercitation minim excepteur tempor. Mollit non ullamco qui ipsum cupidatat exercitation enim et mollit aliqua et deserunt mollit. Adipisicing aliqua eiusmod veniam Lorem proident mollit quis in mollit commodo labore in. Incididunt cillum consequat labore consequat mollit deserunt voluptate duis eu excepteur. Consequat enim consequat labore non occaecat commodo.\r\n",
+ "registered": "2015-02-18T11:23:58 -01:00",
+ "latitude": 67.589043,
+ "longitude": -75.471728,
+ "tags": [
+ "consectetur",
+ "amet",
+ "sunt",
+ "mollit",
+ "sint",
+ "fugiat",
+ "ex"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Traci Bean"
+ },
+ {
+ "id": 1,
+ "name": "Estelle Cotton"
+ },
+ {
+ "id": 2,
+ "name": "Teri Warner"
+ }
+ ],
+ "greeting": "Hello, Reid Shannon! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afc6b97e1146359cbc",
+ "index": 49,
+ "guid": "342e2a20-4635-4b5f-a48a-4907222ea679",
+ "isActive": false,
+ "balance": "$3,683.49",
+ "picture": "http://placehold.it/32x32",
+ "age": 32,
+ "eyeColor": "green",
+ "name": "Lindsay Vega",
+ "gender": "male",
+ "company": "SULTRAXIN",
+ "email": "lindsayvega@sultraxin.com",
+ "phone": "+1 (960) 597-3359",
+ "address": "803 Crawford Avenue, Crucible, Kentucky, 3626",
+ "about": "Eiusmod laboris magna pariatur est excepteur voluptate reprehenderit. Incididunt dolor ut eiusmod excepteur esse qui ea dolore reprehenderit minim consectetur sit non. Quis dolor voluptate exercitation adipisicing elit dolor deserunt ipsum et laboris. Quis commodo id culpa eiusmod ex proident. Dolor veniam et aliqua nulla cupidatat ullamco minim fugiat laborum non.\r\n",
+ "registered": "2014-04-07T15:30:17 -02:00",
+ "latitude": -4.991415,
+ "longitude": 142.00427,
+ "tags": [
+ "consectetur",
+ "non",
+ "nulla",
+ "elit",
+ "mollit",
+ "adipisicing",
+ "occaecat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Cummings Horn"
+ },
+ {
+ "id": 1,
+ "name": "Conway Carney"
+ },
+ {
+ "id": 2,
+ "name": "Kari Pope"
+ }
+ ],
+ "greeting": "Hello, Lindsay Vega! You have 6 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af70543c0fb0f42f56",
+ "index": 50,
+ "guid": "e067f8c6-a2eb-4683-9aaa-3274372c0ce6",
+ "isActive": false,
+ "balance": "$1,541.35",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "green",
+ "name": "Diann Calderon",
+ "gender": "female",
+ "company": "LIQUIDOC",
+ "email": "dianncalderon@liquidoc.com",
+ "phone": "+1 (999) 595-3470",
+ "address": "777 Tiffany Place, Munjor, Mississippi, 2308",
+ "about": "Eu id dolor exercitation sunt laboris reprehenderit. Irure esse quis amet consequat nostrud cillum proident ut magna sint. Reprehenderit aliquip aute quis duis et consequat. Amet non irure consequat velit excepteur mollit quis deserunt ut exercitation.\r\n",
+ "registered": "2014-07-19T09:10:41 -02:00",
+ "latitude": 81.47527,
+ "longitude": -124.517813,
+ "tags": [
+ "ullamco",
+ "elit",
+ "irure",
+ "ipsum",
+ "laborum",
+ "qui",
+ "non"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Estrada Lancaster"
+ },
+ {
+ "id": 1,
+ "name": "Frederick Sellers"
+ },
+ {
+ "id": 2,
+ "name": "Sharon Long"
+ }
+ ],
+ "greeting": "Hello, Diann Calderon! You have 7 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af90038b87aa40679d",
+ "index": 51,
+ "guid": "4fba25c5-9566-4de7-98e0-aa993a91bf70",
+ "isActive": true,
+ "balance": "$3,039.00",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "blue",
+ "name": "Heidi Guerrero",
+ "gender": "female",
+ "company": "ZAGGLES",
+ "email": "heidiguerrero@zaggles.com",
+ "phone": "+1 (980) 530-2535",
+ "address": "156 Brown Street, Roosevelt, Montana, 9232",
+ "about": "Dolor enim eu labore adipisicing minim. Enim magna irure nostrud anim irure aliquip sint consectetur elit elit duis officia minim ipsum. Quis do fugiat anim nulla magna incididunt minim labore do eu reprehenderit magna amet. Irure dolor labore id voluptate Lorem Lorem laboris eiusmod sint aute anim. Tempor nostrud duis veniam sit ex incididunt ipsum nostrud. Ullamco qui incididunt eu sit id officia do officia velit sit.\r\n",
+ "registered": "2015-03-13T12:51:08 -01:00",
+ "latitude": -82.379725,
+ "longitude": -28.245604,
+ "tags": [
+ "esse",
+ "deserunt",
+ "non",
+ "ipsum",
+ "officia",
+ "deserunt",
+ "aliquip"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Fran Stone"
+ },
+ {
+ "id": 1,
+ "name": "Cain Cervantes"
+ },
+ {
+ "id": 2,
+ "name": "Lena Clayton"
+ }
+ ],
+ "greeting": "Hello, Heidi Guerrero! You have 7 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afe87f6004a18c7e20",
+ "index": 52,
+ "guid": "1f5f4d97-33ba-45c4-abf7-ad51d786134c",
+ "isActive": false,
+ "balance": "$1,206.54",
+ "picture": "http://placehold.it/32x32",
+ "age": 28,
+ "eyeColor": "brown",
+ "name": "Lenore Chambers",
+ "gender": "female",
+ "company": "PYRAMI",
+ "email": "lenorechambers@pyrami.com",
+ "phone": "+1 (803) 454-3363",
+ "address": "216 Tompkins Place, Indio, North Dakota, 6031",
+ "about": "Non non duis qui laboris labore fugiat. Magna aliquip dolore enim pariatur ullamco ipsum eu amet magna voluptate dolor labore nisi. Irure ea minim non voluptate. Ipsum aliquip do commodo sunt irure eu veniam deserunt excepteur est ad elit. Tempor sit esse ipsum voluptate incididunt occaecat do minim non labore exercitation.\r\n",
+ "registered": "2015-04-06T00:20:04 -02:00",
+ "latitude": -53.976221,
+ "longitude": -32.696467,
+ "tags": [
+ "duis",
+ "exercitation",
+ "laboris",
+ "nulla",
+ "excepteur",
+ "non",
+ "officia"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Buchanan Herman"
+ },
+ {
+ "id": 1,
+ "name": "Holman Griffith"
+ },
+ {
+ "id": 2,
+ "name": "West Day"
+ }
+ ],
+ "greeting": "Hello, Lenore Chambers! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af29d0c6c8e785439d",
+ "index": 53,
+ "guid": "3f73b5e4-f264-482f-a965-7155752865c5",
+ "isActive": true,
+ "balance": "$2,037.65",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "green",
+ "name": "Koch Chavez",
+ "gender": "male",
+ "company": "PORTALINE",
+ "email": "kochchavez@portaline.com",
+ "phone": "+1 (814) 584-2179",
+ "address": "603 Alabama Avenue, Joppa, Maryland, 7048",
+ "about": "Eiusmod non culpa consequat id esse fugiat mollit quis anim consequat mollit do. Lorem amet dolore anim duis. Culpa veniam labore voluptate dolor ullamco. Labore nostrud nisi aliqua laborum esse elit enim irure ut labore do duis tempor do. Labore quis officia adipisicing aliquip ullamco ut. Culpa tempor ea incididunt commodo pariatur anim reprehenderit aliquip occaecat laborum elit. Lorem excepteur cupidatat anim consectetur.\r\n",
+ "registered": "2014-10-04T08:28:27 -02:00",
+ "latitude": 78.179096,
+ "longitude": -158.756713,
+ "tags": [
+ "commodo",
+ "qui",
+ "veniam",
+ "magna",
+ "duis",
+ "excepteur",
+ "ad"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Drake Robertson"
+ },
+ {
+ "id": 1,
+ "name": "Molina Clay"
+ },
+ {
+ "id": 2,
+ "name": "Morse Carr"
+ }
+ ],
+ "greeting": "Hello, Koch Chavez! You have 9 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afac4cea747ca59256",
+ "index": 54,
+ "guid": "d15d6c50-8695-491a-817a-35559b0b7f76",
+ "isActive": true,
+ "balance": "$1,836.88",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "blue",
+ "name": "Glenda Griffin",
+ "gender": "female",
+ "company": "ISOSTREAM",
+ "email": "glendagriffin@isostream.com",
+ "phone": "+1 (916) 445-3241",
+ "address": "236 Jaffray Street, Knowlton, Hawaii, 4012",
+ "about": "Adipisicing eiusmod consectetur sunt dolor officia. Minim excepteur aute ea est non laborum pariatur ipsum aute ex. Occaecat dolore laborum cupidatat culpa ea ut officia occaecat est. Esse qui adipisicing magna ex occaecat cillum enim deserunt deserunt magna nisi irure laborum nostrud. Qui aute laboris esse officia eiusmod do ex pariatur amet voluptate deserunt.\r\n",
+ "registered": "2014-09-29T20:21:02 -02:00",
+ "latitude": -84.583466,
+ "longitude": 66.333721,
+ "tags": [
+ "aliqua",
+ "excepteur",
+ "aliquip",
+ "irure",
+ "ut",
+ "irure",
+ "proident"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Kris Savage"
+ },
+ {
+ "id": 1,
+ "name": "Collins Burton"
+ },
+ {
+ "id": 2,
+ "name": "Leila Brewer"
+ }
+ ],
+ "greeting": "Hello, Glenda Griffin! You have 5 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afd4c8fcacf5b9d77d",
+ "index": 55,
+ "guid": "60e9d0f2-65ad-4e19-adc7-5eeb5f8529ad",
+ "isActive": true,
+ "balance": "$3,221.91",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "blue",
+ "name": "Beatrice Christensen",
+ "gender": "female",
+ "company": "REALYSIS",
+ "email": "beatricechristensen@realysis.com",
+ "phone": "+1 (974) 544-3635",
+ "address": "400 Throop Avenue, Orason, Arizona, 5703",
+ "about": "Voluptate qui fugiat tempor velit qui tempor velit proident esse. Consectetur ad anim eu in occaecat Lorem reprehenderit dolore excepteur excepteur irure dolor irure magna. Elit qui officia ut elit aliquip tempor magna culpa est eu. Irure mollit consectetur eiusmod ea id veniam consequat do occaecat non nisi. Esse minim proident proident enim nulla nisi fugiat eu. Sint do qui adipisicing ea ipsum culpa laborum aliquip nisi exercitation qui. Cupidatat sit voluptate non labore amet sit fugiat nostrud.\r\n",
+ "registered": "2014-01-12T11:29:49 -01:00",
+ "latitude": 45.621268,
+ "longitude": 65.801295,
+ "tags": [
+ "ipsum",
+ "excepteur",
+ "occaecat",
+ "Lorem",
+ "minim",
+ "dolore",
+ "mollit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Santos Stephenson"
+ },
+ {
+ "id": 1,
+ "name": "Bryant Cunningham"
+ },
+ {
+ "id": 2,
+ "name": "Hardin Figueroa"
+ }
+ ],
+ "greeting": "Hello, Beatrice Christensen! You have 9 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af77c1c834b84489ec",
+ "index": 56,
+ "guid": "26539bc8-68d8-456f-9799-6f0be1278d16",
+ "isActive": true,
+ "balance": "$1,363.88",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "brown",
+ "name": "Frieda Lane",
+ "gender": "female",
+ "company": "ZOXY",
+ "email": "friedalane@zoxy.com",
+ "phone": "+1 (842) 492-3179",
+ "address": "151 Grattan Street, Deseret, Arkansas, 3253",
+ "about": "Irure ipsum adipisicing culpa nisi pariatur in aliqua sint. Labore veniam dolore tempor dolor sit esse nostrud in culpa magna consequat. Anim ipsum nostrud mollit laboris consectetur occaecat occaecat. Dolor proident sint non nulla aute labore ipsum velit.\r\n",
+ "registered": "2014-10-26T16:36:13 -01:00",
+ "latitude": 56.267571,
+ "longitude": -109.204763,
+ "tags": [
+ "magna",
+ "nostrud",
+ "ipsum",
+ "consectetur",
+ "ullamco",
+ "esse",
+ "cupidatat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Barlow Cummings"
+ },
+ {
+ "id": 1,
+ "name": "Allen Guerra"
+ },
+ {
+ "id": 2,
+ "name": "Eve Fitzgerald"
+ }
+ ],
+ "greeting": "Hello, Frieda Lane! You have 7 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afdd052b02cc9a84ff",
+ "index": 57,
+ "guid": "dc57949a-44af-45d6-bbed-911dd5de60fc",
+ "isActive": false,
+ "balance": "$1,799.49",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "brown",
+ "name": "Potter Kirk",
+ "gender": "male",
+ "company": "LUXURIA",
+ "email": "potterkirk@luxuria.com",
+ "phone": "+1 (829) 585-3426",
+ "address": "680 Conduit Boulevard, Stewartville, Nevada, 821",
+ "about": "Qui nisi mollit laboris cillum dolore ipsum anim occaecat. Veniam consequat reprehenderit anim ullamco voluptate aute veniam sit esse est laborum occaecat. Commodo commodo enim dolor duis dolor voluptate in labore.\r\n",
+ "registered": "2014-02-17T16:36:46 -01:00",
+ "latitude": 82.806894,
+ "longitude": -0.512497,
+ "tags": [
+ "et",
+ "amet",
+ "tempor",
+ "voluptate",
+ "elit",
+ "dolore",
+ "aliqua"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Lawanda Andrews"
+ },
+ {
+ "id": 1,
+ "name": "Bonnie Morton"
+ },
+ {
+ "id": 2,
+ "name": "Dillon Mckinney"
+ }
+ ],
+ "greeting": "Hello, Potter Kirk! You have 6 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af48998710a17f5d27",
+ "index": 58,
+ "guid": "96d40d94-5110-475e-8ee2-9f14e4044542",
+ "isActive": false,
+ "balance": "$2,908.75",
+ "picture": "http://placehold.it/32x32",
+ "age": 32,
+ "eyeColor": "brown",
+ "name": "Nielsen Livingston",
+ "gender": "male",
+ "company": "EXTRAGENE",
+ "email": "nielsenlivingston@extragene.com",
+ "phone": "+1 (965) 493-2660",
+ "address": "130 Brightwater Court, Bentley, New Jersey, 4825",
+ "about": "Excepteur excepteur ut qui culpa non aliquip consequat adipisicing. Ut in sunt pariatur tempor consectetur nostrud labore excepteur in. Esse minim adipisicing nulla amet aliquip ullamco in et reprehenderit duis. Reprehenderit nisi fugiat pariatur mollit sint laboris mollit. Occaecat cillum non ea culpa elit ut sint esse irure anim veniam sit aliqua sunt. Deserunt aliquip enim tempor voluptate tempor irure sit deserunt. Non aliqua amet mollit tempor mollit magna laboris est.\r\n",
+ "registered": "2015-02-12T02:34:59 -01:00",
+ "latitude": -64.298715,
+ "longitude": -2.479647,
+ "tags": [
+ "nisi",
+ "cupidatat",
+ "et",
+ "deserunt",
+ "ex",
+ "veniam",
+ "reprehenderit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Wanda Mcclain"
+ },
+ {
+ "id": 1,
+ "name": "Delgado Holloway"
+ },
+ {
+ "id": 2,
+ "name": "Sharlene Silva"
+ }
+ ],
+ "greeting": "Hello, Nielsen Livingston! You have 3 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afc98c45830a41c309",
+ "index": 59,
+ "guid": "8c28e4b0-7204-4ab4-999b-b68e0edd63fd",
+ "isActive": false,
+ "balance": "$1,116.18",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "blue",
+ "name": "Susanne Armstrong",
+ "gender": "female",
+ "company": "VENOFLEX",
+ "email": "susannearmstrong@venoflex.com",
+ "phone": "+1 (927) 403-3722",
+ "address": "838 Milford Street, Townsend, Marshall Islands, 571",
+ "about": "Incididunt ea do adipisicing cupidatat adipisicing exercitation esse. Quis amet fugiat ex adipisicing enim sunt anim excepteur quis. Aute dolore id ipsum sit exercitation.\r\n",
+ "registered": "2014-10-05T23:07:09 -02:00",
+ "latitude": 8.146438,
+ "longitude": -124.911942,
+ "tags": [
+ "ad",
+ "amet",
+ "pariatur",
+ "ex",
+ "nulla",
+ "culpa",
+ "anim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Lilly Powers"
+ },
+ {
+ "id": 1,
+ "name": "Melba Shields"
+ },
+ {
+ "id": 2,
+ "name": "Imelda West"
+ }
+ ],
+ "greeting": "Hello, Susanne Armstrong! You have 9 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af576af85811a30978",
+ "index": 60,
+ "guid": "6dc283e6-52e7-4985-97a4-a06dcdb98255",
+ "isActive": true,
+ "balance": "$2,609.76",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "green",
+ "name": "Reilly Gray",
+ "gender": "male",
+ "company": "MEGALL",
+ "email": "reillygray@megall.com",
+ "phone": "+1 (813) 546-3474",
+ "address": "505 Stoddard Place, Leeper, Georgia, 5043",
+ "about": "Id labore velit minim excepteur eiusmod minim officia aute ullamco quis. Veniam ullamco quis ipsum Lorem veniam ipsum consequat et aute. Amet quis est fugiat quis excepteur. Et consequat dolor Lorem reprehenderit ut sit est labore eiusmod adipisicing laborum. Voluptate incididunt consequat nulla mollit fugiat.\r\n",
+ "registered": "2014-10-09T18:50:10 -02:00",
+ "latitude": 69.120138,
+ "longitude": -16.358898,
+ "tags": [
+ "mollit",
+ "excepteur",
+ "ipsum",
+ "do",
+ "eu",
+ "dolore",
+ "exercitation"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Pauline Obrien"
+ },
+ {
+ "id": 1,
+ "name": "Santana Morrow"
+ },
+ {
+ "id": 2,
+ "name": "Sue Decker"
+ }
+ ],
+ "greeting": "Hello, Reilly Gray! You have 8 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afc35f336a38319729",
+ "index": 61,
+ "guid": "5a015062-666d-4491-8621-9205d0ebb7d9",
+ "isActive": false,
+ "balance": "$3,107.30",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "brown",
+ "name": "Robyn Cook",
+ "gender": "female",
+ "company": "CEPRENE",
+ "email": "robyncook@ceprene.com",
+ "phone": "+1 (854) 596-3938",
+ "address": "871 Waldane Court, Rote, Virgin Islands, 3882",
+ "about": "Sunt ex pariatur fugiat occaecat aute id. Consectetur deserunt nisi officia in do magna non consectetur est occaecat eu non. Incididunt labore excepteur magna deserunt commodo anim cillum id aute ullamco sit fugiat ut. Incididunt irure laboris esse aute est do nostrud occaecat non et eu sunt.\r\n",
+ "registered": "2014-06-01T07:47:57 -02:00",
+ "latitude": 2.348676,
+ "longitude": -68.13371,
+ "tags": [
+ "laborum",
+ "Lorem",
+ "id",
+ "laboris",
+ "excepteur",
+ "anim",
+ "do"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Naomi Estrada"
+ },
+ {
+ "id": 1,
+ "name": "Olivia Booker"
+ },
+ {
+ "id": 2,
+ "name": "Paul Gregory"
+ }
+ ],
+ "greeting": "Hello, Robyn Cook! You have 10 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af8f3575b65435e018",
+ "index": 62,
+ "guid": "e5cf41f9-0df7-4ede-ab81-0c2f3a74d7a2",
+ "isActive": false,
+ "balance": "$2,865.53",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "blue",
+ "name": "Foster Manning",
+ "gender": "male",
+ "company": "SCHOOLIO",
+ "email": "fostermanning@schoolio.com",
+ "phone": "+1 (993) 510-3178",
+ "address": "302 Java Street, Kula, Colorado, 3822",
+ "about": "Minim nostrud do ut aliqua elit elit dolor veniam cillum officia sunt. Mollit reprehenderit qui occaecat adipisicing non cillum non tempor sint ullamco ut irure. Enim velit ut laborum commodo aliqua laborum laboris magna deserunt excepteur nulla mollit. Qui nulla Lorem nulla officia veniam Lorem duis adipisicing. Ex ea do anim fugiat enim ex elit. Nisi laboris aliqua anim magna culpa commodo non pariatur labore.\r\n",
+ "registered": "2014-01-23T11:15:49 -01:00",
+ "latitude": 60.512077,
+ "longitude": -146.621863,
+ "tags": [
+ "quis",
+ "sint",
+ "consectetur",
+ "voluptate",
+ "deserunt",
+ "eu",
+ "esse"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Gentry Cruz"
+ },
+ {
+ "id": 1,
+ "name": "Eleanor Santiago"
+ },
+ {
+ "id": 2,
+ "name": "Lucinda Battle"
+ }
+ ],
+ "greeting": "Hello, Foster Manning! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af8947eec3b4316b50",
+ "index": 63,
+ "guid": "1a278307-54f3-4e57-bcc6-eba228cc3fbb",
+ "isActive": true,
+ "balance": "$2,991.38",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "blue",
+ "name": "Leonor Roberts",
+ "gender": "female",
+ "company": "LYRICHORD",
+ "email": "leonorroberts@lyrichord.com",
+ "phone": "+1 (904) 448-2128",
+ "address": "398 Greenpoint Avenue, Mahtowa, Vermont, 3422",
+ "about": "Exercitation et labore amet deserunt nulla ut irure. Aute occaecat laboris cupidatat veniam exercitation nostrud amet velit cillum. Reprehenderit veniam cillum adipisicing deserunt ex do laboris velit in commodo esse. Commodo magna mollit labore eiusmod eu veniam. Id enim proident aliqua duis adipisicing incididunt cupidatat proident sunt. Cupidatat exercitation id cupidatat incididunt consequat enim sunt consequat esse laborum minim ipsum eu laboris.\r\n",
+ "registered": "2014-11-01T19:04:03 -01:00",
+ "latitude": 19.215848,
+ "longitude": 138.86875,
+ "tags": [
+ "aute",
+ "deserunt",
+ "est",
+ "magna",
+ "officia",
+ "fugiat",
+ "id"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Lynda Wade"
+ },
+ {
+ "id": 1,
+ "name": "Hatfield Mendez"
+ },
+ {
+ "id": 2,
+ "name": "Ingram Whitley"
+ }
+ ],
+ "greeting": "Hello, Leonor Roberts! You have 3 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03aff243e863edaf9baf",
+ "index": 64,
+ "guid": "b0254649-357e-4726-8513-32d79d0b6850",
+ "isActive": false,
+ "balance": "$2,175.93",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "brown",
+ "name": "Lopez Golden",
+ "gender": "male",
+ "company": "ZOSIS",
+ "email": "lopezgolden@zosis.com",
+ "phone": "+1 (867) 566-3847",
+ "address": "883 Arlington Avenue, Catherine, Minnesota, 9176",
+ "about": "Enim aliqua occaecat labore deserunt culpa minim fugiat ipsum eiusmod cupidatat in magna. Sint aute Lorem ipsum ea est. Non nisi consectetur pariatur laborum tempor veniam incididunt ad consectetur quis est dolore.\r\n",
+ "registered": "2014-02-28T17:37:03 -01:00",
+ "latitude": 76.960301,
+ "longitude": 101.87673,
+ "tags": [
+ "irure",
+ "velit",
+ "Lorem",
+ "ullamco",
+ "consequat",
+ "reprehenderit",
+ "incididunt"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Castro Franco"
+ },
+ {
+ "id": 1,
+ "name": "Garrison Acevedo"
+ },
+ {
+ "id": 2,
+ "name": "Gena Glass"
+ }
+ ],
+ "greeting": "Hello, Lopez Golden! You have 3 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af7e48a6932c5860fa",
+ "index": 65,
+ "guid": "c8f01acd-e358-4db1-b627-b0ff19df8276",
+ "isActive": false,
+ "balance": "$3,588.12",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "green",
+ "name": "Mercer Chan",
+ "gender": "male",
+ "company": "XOGGLE",
+ "email": "mercerchan@xoggle.com",
+ "phone": "+1 (884) 555-2144",
+ "address": "807 Bills Place, Slovan, New Mexico, 1560",
+ "about": "Do esse ea fugiat sit. Culpa adipisicing eu tempor aliquip veniam qui in dolor veniam voluptate in qui quis. Nulla ullamco elit labore incididunt occaecat cupidatat elit Lorem. Exercitation qui cillum id nulla culpa irure et ipsum sit.\r\n",
+ "registered": "2014-12-29T22:16:53 -01:00",
+ "latitude": -44.420047,
+ "longitude": 92.59095,
+ "tags": [
+ "consectetur",
+ "mollit",
+ "officia",
+ "ipsum",
+ "eu",
+ "aliquip",
+ "tempor"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Hoffman Valenzuela"
+ },
+ {
+ "id": 1,
+ "name": "Schmidt Page"
+ },
+ {
+ "id": 2,
+ "name": "Mcknight Mckee"
+ }
+ ],
+ "greeting": "Hello, Mercer Chan! You have 2 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afc95c55e8eb4d6372",
+ "index": 66,
+ "guid": "b51e976e-684e-407f-b94f-b6f8970c06bf",
+ "isActive": true,
+ "balance": "$2,734.50",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "green",
+ "name": "Althea Howell",
+ "gender": "female",
+ "company": "KINETICA",
+ "email": "altheahowell@kinetica.com",
+ "phone": "+1 (890) 494-2537",
+ "address": "634 Clove Road, Shaft, Alabama, 2930",
+ "about": "Ullamco incididunt fugiat reprehenderit proident aute aute anim excepteur est adipisicing est anim minim eiusmod. Dolor tempor non nisi consequat id id commodo ex mollit Lorem. Eiusmod velit laboris deserunt anim occaecat irure.\r\n",
+ "registered": "2014-01-11T18:33:54 -01:00",
+ "latitude": -86.03484,
+ "longitude": 179.462807,
+ "tags": [
+ "aliqua",
+ "qui",
+ "adipisicing",
+ "commodo",
+ "elit",
+ "tempor",
+ "nisi"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Sparks Best"
+ },
+ {
+ "id": 1,
+ "name": "Darcy Larson"
+ },
+ {
+ "id": 2,
+ "name": "Michelle English"
+ }
+ ],
+ "greeting": "Hello, Althea Howell! You have 9 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af6d646e0fe3043409",
+ "index": 67,
+ "guid": "62aef444-8b35-42c4-9de8-59373d75cf0e",
+ "isActive": false,
+ "balance": "$2,858.22",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "green",
+ "name": "Joni Delacruz",
+ "gender": "female",
+ "company": "PLASMOX",
+ "email": "jonidelacruz@plasmox.com",
+ "phone": "+1 (981) 513-3210",
+ "address": "371 Meserole Street, Ahwahnee, Illinois, 1955",
+ "about": "Non sit ad eu aliquip voluptate amet deserunt deserunt incididunt occaecat veniam culpa ipsum est. Officia culpa dolor sint aliquip id ad duis fugiat ipsum tempor nisi officia excepteur tempor. Nostrud enim proident pariatur sit laboris nostrud non ipsum ea sunt aute id commodo. Qui anim sint veniam do aliqua quis velit aute voluptate deserunt incididunt ea sit consequat. Minim nisi reprehenderit commodo laboris tempor labore reprehenderit incididunt aliquip nulla id. Magna proident ipsum nisi adipisicing in est pariatur consectetur ipsum pariatur.\r\n",
+ "registered": "2014-10-07T23:12:40 -02:00",
+ "latitude": 43.309353,
+ "longitude": -112.043717,
+ "tags": [
+ "mollit",
+ "nostrud",
+ "deserunt",
+ "nostrud",
+ "minim",
+ "in",
+ "officia"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Sherri Kaufman"
+ },
+ {
+ "id": 1,
+ "name": "Sharp Simpson"
+ },
+ {
+ "id": 2,
+ "name": "Carolyn Curtis"
+ }
+ ],
+ "greeting": "Hello, Joni Delacruz! You have 7 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af425d0caf33b2b160",
+ "index": 68,
+ "guid": "57a73406-e504-4c7d-8d67-aae268630e76",
+ "isActive": false,
+ "balance": "$3,322.45",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "green",
+ "name": "Petra Hoover",
+ "gender": "female",
+ "company": "HOPELI",
+ "email": "petrahoover@hopeli.com",
+ "phone": "+1 (945) 569-2652",
+ "address": "447 Garnet Street, Harleigh, Missouri, 311",
+ "about": "Velit pariatur velit ex dolor. Adipisicing elit tempor amet ipsum id laboris excepteur eu. Officia duis qui mollit adipisicing aliqua labore eu laborum. Esse consequat eu esse excepteur non adipisicing. Enim est cupidatat duis veniam nisi.\r\n",
+ "registered": "2014-08-02T20:32:44 -02:00",
+ "latitude": -73.44357,
+ "longitude": 7.71268,
+ "tags": [
+ "duis",
+ "sit",
+ "velit",
+ "est",
+ "ipsum",
+ "sit",
+ "consectetur"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Marci Lowery"
+ },
+ {
+ "id": 1,
+ "name": "Kim Sandoval"
+ },
+ {
+ "id": 2,
+ "name": "Bird Fletcher"
+ }
+ ],
+ "greeting": "Hello, Petra Hoover! You have 8 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af544954b4665518d5",
+ "index": 69,
+ "guid": "9fdd4f6b-286c-4ac4-bffb-bde7a5f2d22f",
+ "isActive": false,
+ "balance": "$2,734.15",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "brown",
+ "name": "Davis Sharpe",
+ "gender": "male",
+ "company": "TUBALUM",
+ "email": "davissharpe@tubalum.com",
+ "phone": "+1 (974) 520-2377",
+ "address": "100 Agate Court, Boling, Oregon, 3644",
+ "about": "Est minim cillum dolor tempor ut ad minim magna. Nisi fugiat elit ex elit tempor in cupidatat mollit. Cillum exercitation ea quis tempor tempor aliquip ipsum ut in qui. Ullamco sit magna commodo fugiat voluptate sit laborum mollit dolore. Do ad in proident cillum commodo culpa minim consequat adipisicing duis.\r\n",
+ "registered": "2014-09-24T11:03:11 -02:00",
+ "latitude": -69.145098,
+ "longitude": -141.109588,
+ "tags": [
+ "labore",
+ "reprehenderit",
+ "velit",
+ "duis",
+ "elit",
+ "esse",
+ "deserunt"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Ballard Bartlett"
+ },
+ {
+ "id": 1,
+ "name": "Saundra Moon"
+ },
+ {
+ "id": 2,
+ "name": "Leticia Levine"
+ }
+ ],
+ "greeting": "Hello, Davis Sharpe! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afeb02a4653cca1ecc",
+ "index": 70,
+ "guid": "bb73353a-9273-4785-83ec-5a476cecc1ee",
+ "isActive": false,
+ "balance": "$3,155.93",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "green",
+ "name": "Stout Moody",
+ "gender": "male",
+ "company": "RETROTEX",
+ "email": "stoutmoody@retrotex.com",
+ "phone": "+1 (921) 406-2198",
+ "address": "651 Monaco Place, Weeksville, Federated States Of Micronesia, 5362",
+ "about": "Veniam consectetur elit ea exercitation sint veniam duis et proident sunt. Fugiat irure velit ea ex fugiat sit magna id eu. Ut commodo est proident ut anim consectetur laborum. Anim occaecat sit sunt sunt nisi cillum occaecat officia laboris dolor. Nostrud in ipsum nisi dolore velit.\r\n",
+ "registered": "2015-04-22T20:51:16 -02:00",
+ "latitude": 9.876533,
+ "longitude": -66.668492,
+ "tags": [
+ "amet",
+ "amet",
+ "ut",
+ "tempor",
+ "laborum",
+ "laboris",
+ "dolore"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Maura Torres"
+ },
+ {
+ "id": 1,
+ "name": "Hester Dominguez"
+ },
+ {
+ "id": 2,
+ "name": "Dawson Estes"
+ }
+ ],
+ "greeting": "Hello, Stout Moody! You have 7 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afe5c95e1858cb28db",
+ "index": 71,
+ "guid": "ceea29cc-03be-4cda-9000-f96c3d44eefc",
+ "isActive": true,
+ "balance": "$3,333.61",
+ "picture": "http://placehold.it/32x32",
+ "age": 22,
+ "eyeColor": "brown",
+ "name": "Deann Dean",
+ "gender": "female",
+ "company": "LOCAZONE",
+ "email": "deanndean@locazone.com",
+ "phone": "+1 (847) 565-3783",
+ "address": "618 High Street, Lewis, South Dakota, 3555",
+ "about": "Nostrud elit proident aliquip tempor dolor labore nulla et nulla ipsum et. Minim Lorem esse duis pariatur consectetur do cillum deserunt. Anim culpa veniam voluptate in eiusmod sint sit excepteur labore esse. Sunt in irure occaecat ad proident do laboris pariatur amet minim velit irure esse elit. Dolore consequat veniam dolore excepteur commodo consectetur ea pariatur aliquip tempor in. Irure elit labore sint est labore eiusmod ipsum aliquip labore nisi cupidatat proident.\r\n",
+ "registered": "2014-01-01T03:07:35 -01:00",
+ "latitude": 71.093771,
+ "longitude": -143.368019,
+ "tags": [
+ "nostrud",
+ "ea",
+ "voluptate",
+ "mollit",
+ "cupidatat",
+ "adipisicing",
+ "reprehenderit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Dudley Cortez"
+ },
+ {
+ "id": 1,
+ "name": "Rush Wilcox"
+ },
+ {
+ "id": 2,
+ "name": "Elva Frederick"
+ }
+ ],
+ "greeting": "Hello, Deann Dean! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af8b3115e4d4e17f79",
+ "index": 72,
+ "guid": "392674a6-77b4-4ff0-a072-dbf450bf5eb0",
+ "isActive": false,
+ "balance": "$3,517.63",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "brown",
+ "name": "Shelly Mcintyre",
+ "gender": "female",
+ "company": "BOINK",
+ "email": "shellymcintyre@boink.com",
+ "phone": "+1 (857) 451-2538",
+ "address": "519 Albemarle Road, Conway, Puerto Rico, 2239",
+ "about": "Ad enim qui consequat aliqua Lorem consectetur irure occaecat culpa esse enim elit. Ullamco quis nisi ex aliqua velit ut dolor nostrud elit cillum pariatur aute deserunt anim. Aliquip aute sint labore elit aute exercitation quis. Velit ad sint occaecat minim labore reprehenderit eiusmod irure reprehenderit. Nisi id aliqua aliqua magna commodo excepteur culpa mollit eiusmod mollit.\r\n",
+ "registered": "2014-05-07T07:32:44 -02:00",
+ "latitude": -35.400206,
+ "longitude": -143.069486,
+ "tags": [
+ "eu",
+ "aliqua",
+ "occaecat",
+ "irure",
+ "magna",
+ "id",
+ "nulla"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Vonda Dunlap"
+ },
+ {
+ "id": 1,
+ "name": "Duke Johnston"
+ },
+ {
+ "id": 2,
+ "name": "Cote Porter"
+ }
+ ],
+ "greeting": "Hello, Shelly Mcintyre! You have 1 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afeaba14c0786273f0",
+ "index": 73,
+ "guid": "4d3dd40b-e449-4249-95c6-5594986917cf",
+ "isActive": false,
+ "balance": "$3,459.30",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "green",
+ "name": "Franco Dotson",
+ "gender": "male",
+ "company": "PROGENEX",
+ "email": "francodotson@progenex.com",
+ "phone": "+1 (855) 563-2249",
+ "address": "186 Newton Street, Blue, Michigan, 8690",
+ "about": "Amet eiusmod dolor irure nisi esse reprehenderit. Aute dolor ipsum commodo anim cupidatat. Duis amet quis amet adipisicing et deserunt voluptate velit. Et tempor anim et ad elit eu sit ipsum proident sint eiusmod. In quis quis labore id enim ullamco cillum sit incididunt. Aliqua occaecat tempor aliqua fugiat Lorem nisi fugiat labore consequat exercitation anim voluptate. Aliqua eiusmod laborum quis fugiat officia Lorem.\r\n",
+ "registered": "2014-02-03T06:29:41 -01:00",
+ "latitude": -72.787337,
+ "longitude": 142.451362,
+ "tags": [
+ "elit",
+ "ad",
+ "dolore",
+ "ad",
+ "commodo",
+ "enim",
+ "proident"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Stanton Scott"
+ },
+ {
+ "id": 1,
+ "name": "Loraine Pollard"
+ },
+ {
+ "id": 2,
+ "name": "Cherry Giles"
+ }
+ ],
+ "greeting": "Hello, Franco Dotson! You have 9 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afb96332104562167c",
+ "index": 74,
+ "guid": "a3e8dada-09ae-4bae-a958-d1455cbff3e4",
+ "isActive": false,
+ "balance": "$1,621.60",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "brown",
+ "name": "Alison Hudson",
+ "gender": "female",
+ "company": "NETROPIC",
+ "email": "alisonhudson@netropic.com",
+ "phone": "+1 (800) 465-2189",
+ "address": "761 Grimes Road, Kersey, Nebraska, 4680",
+ "about": "Excepteur esse commodo eiusmod ex tempor ut tempor sit. Nulla anim exercitation id sunt sunt exercitation reprehenderit. Fugiat labore pariatur esse aliqua Lorem sit nisi. Pariatur commodo consectetur consequat esse elit velit Lorem minim cillum duis duis culpa qui amet. Ipsum aute id quis laboris excepteur tempor eiusmod est qui minim consectetur anim.\r\n",
+ "registered": "2014-04-27T03:12:53 -02:00",
+ "latitude": -38.893172,
+ "longitude": -126.273223,
+ "tags": [
+ "nostrud",
+ "culpa",
+ "dolore",
+ "officia",
+ "esse",
+ "mollit",
+ "incididunt"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Acosta Potts"
+ },
+ {
+ "id": 1,
+ "name": "Amanda Bradley"
+ },
+ {
+ "id": 2,
+ "name": "Lucas Dorsey"
+ }
+ ],
+ "greeting": "Hello, Alison Hudson! You have 1 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af8036dc49d8ea57b5",
+ "index": 75,
+ "guid": "9ffbad43-c235-4279-b225-9628498c6308",
+ "isActive": false,
+ "balance": "$1,579.90",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "brown",
+ "name": "Simone Davenport",
+ "gender": "female",
+ "company": "EQUICOM",
+ "email": "simonedavenport@equicom.com",
+ "phone": "+1 (865) 553-3667",
+ "address": "207 Dunne Place, Woodburn, Wyoming, 6612",
+ "about": "Velit esse non laboris eiusmod quis. Ipsum dolore eu excepteur sit qui ad consequat. Cupidatat exercitation aute proident pariatur culpa minim. Consectetur dolore enim tempor officia esse commodo qui sunt. Incididunt dolor duis laborum laboris amet cillum veniam sit consequat amet.\r\n",
+ "registered": "2015-01-23T06:20:39 -01:00",
+ "latitude": 66.434258,
+ "longitude": -17.450692,
+ "tags": [
+ "cupidatat",
+ "ut",
+ "sunt",
+ "nulla",
+ "minim",
+ "dolor",
+ "eu"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Wells Simmons"
+ },
+ {
+ "id": 1,
+ "name": "Fulton Odom"
+ },
+ {
+ "id": 2,
+ "name": "Sonja Bowers"
+ }
+ ],
+ "greeting": "Hello, Simone Davenport! You have 1 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af83bea55e0be2b3df",
+ "index": 76,
+ "guid": "12af7966-2d98-47d5-a3e7-786db266a769",
+ "isActive": true,
+ "balance": "$3,648.00",
+ "picture": "http://placehold.it/32x32",
+ "age": 32,
+ "eyeColor": "brown",
+ "name": "Malone Cantrell",
+ "gender": "male",
+ "company": "ZYPLE",
+ "email": "malonecantrell@zyple.com",
+ "phone": "+1 (949) 586-3883",
+ "address": "895 Harrison Avenue, Outlook, California, 5782",
+ "about": "Duis laborum aute id aliqua deserunt irure pariatur irure proident et minim. Occaecat consectetur aliqua minim deserunt voluptate aute sint sunt proident nisi. Ad consequat reprehenderit non voluptate ea sit amet proident. Aliqua ut ipsum id exercitation tempor magna commodo id nostrud consequat duis reprehenderit non labore. Quis minim et ad ullamco ad amet deserunt id consequat magna laboris sunt. Deserunt excepteur aute non nisi sint do aliquip laboris duis elit.\r\n",
+ "registered": "2014-12-09T02:52:10 -01:00",
+ "latitude": 18.326673,
+ "longitude": 97.032321,
+ "tags": [
+ "qui",
+ "ipsum",
+ "reprehenderit",
+ "incididunt",
+ "cillum",
+ "labore",
+ "occaecat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Dickerson Rivers"
+ },
+ {
+ "id": 1,
+ "name": "Young Snider"
+ },
+ {
+ "id": 2,
+ "name": "Fletcher Munoz"
+ }
+ ],
+ "greeting": "Hello, Malone Cantrell! You have 3 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afecd1a791d138f53d",
+ "index": 77,
+ "guid": "0cff2d9c-fc8a-459c-9b20-83d614b86fe7",
+ "isActive": true,
+ "balance": "$1,797.21",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "green",
+ "name": "Webster Hester",
+ "gender": "male",
+ "company": "CENTREXIN",
+ "email": "websterhester@centrexin.com",
+ "phone": "+1 (836) 482-3612",
+ "address": "469 Farragut Road, Camptown, Indiana, 7479",
+ "about": "Commodo esse anim magna ipsum aliqua. Anim reprehenderit esse ipsum consectetur nulla irure Lorem ex ullamco et aliquip commodo deserunt elit. Occaecat quis voluptate duis officia ex.\r\n",
+ "registered": "2014-04-04T00:47:00 -02:00",
+ "latitude": -83.455095,
+ "longitude": -43.395994,
+ "tags": [
+ "laboris",
+ "enim",
+ "voluptate",
+ "Lorem",
+ "occaecat",
+ "magna",
+ "laboris"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Fisher Hodge"
+ },
+ {
+ "id": 1,
+ "name": "Consuelo French"
+ },
+ {
+ "id": 2,
+ "name": "Letha Fleming"
+ }
+ ],
+ "greeting": "Hello, Webster Hester! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af7ada082856c9bf03",
+ "index": 78,
+ "guid": "f6442641-ef1d-40d6-b415-7c2616307847",
+ "isActive": true,
+ "balance": "$3,694.91",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "blue",
+ "name": "Gay Hart",
+ "gender": "female",
+ "company": "ISOPLEX",
+ "email": "gayhart@isoplex.com",
+ "phone": "+1 (966) 539-3573",
+ "address": "476 Dumont Avenue, Brownlee, Palau, 6249",
+ "about": "Tempor anim sint deserunt cillum Lorem ad laborum qui sint minim. Eiusmod ullamco aliqua proident exercitation esse nisi eu ipsum exercitation ad. Sunt deserunt veniam non cupidatat in. Sit do ullamco ex eu commodo qui duis ex sint labore consequat consequat. Eiusmod magna ut minim nulla elit veniam pariatur labore commodo reprehenderit minim proident ad.\r\n",
+ "registered": "2014-01-05T13:02:30 -01:00",
+ "latitude": -35.839548,
+ "longitude": -174.83368,
+ "tags": [
+ "nisi",
+ "ut",
+ "non",
+ "excepteur",
+ "non",
+ "sit",
+ "cupidatat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Kasey Townsend"
+ },
+ {
+ "id": 1,
+ "name": "Leblanc Harper"
+ },
+ {
+ "id": 2,
+ "name": "Ashlee Maldonado"
+ }
+ ],
+ "greeting": "Hello, Gay Hart! You have 9 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afd548636054a4fe7f",
+ "index": 79,
+ "guid": "38ca0f28-1df2-4bb5-9393-31f2177b23ff",
+ "isActive": true,
+ "balance": "$2,380.92",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "green",
+ "name": "Nelson Barr",
+ "gender": "male",
+ "company": "MAZUDA",
+ "email": "nelsonbarr@mazuda.com",
+ "phone": "+1 (892) 565-3733",
+ "address": "828 Clarendon Road, Beaulieu, Northern Mariana Islands, 3432",
+ "about": "Id nulla duis nostrud ex sunt voluptate velit ad. Ipsum magna ullamco ad incididunt laboris Lorem aliquip pariatur. Id amet tempor Lorem consequat adipisicing qui occaecat elit esse qui deserunt.\r\n",
+ "registered": "2015-02-02T06:55:08 -01:00",
+ "latitude": 39.05668,
+ "longitude": -44.484774,
+ "tags": [
+ "aliqua",
+ "nulla",
+ "do",
+ "qui",
+ "velit",
+ "eiusmod",
+ "aliquip"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Adrienne Vance"
+ },
+ {
+ "id": 1,
+ "name": "Mallory Jacobson"
+ },
+ {
+ "id": 2,
+ "name": "Walters Conway"
+ }
+ ],
+ "greeting": "Hello, Nelson Barr! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af0dad3343f62c7125",
+ "index": 80,
+ "guid": "5ca455d7-d3f4-4024-91ab-9859048cb585",
+ "isActive": false,
+ "balance": "$3,856.58",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "green",
+ "name": "Oliver Weber",
+ "gender": "male",
+ "company": "GEEKULAR",
+ "email": "oliverweber@geekular.com",
+ "phone": "+1 (880) 584-3806",
+ "address": "944 Evergreen Avenue, Enetai, Washington, 2113",
+ "about": "Enim ipsum dolor quis tempor aliqua qui. Nostrud consequat ut do Lorem. Lorem deserunt veniam consequat eiusmod ea ullamco elit proident aute labore non sunt. Do incididunt dolore amet quis mollit eu pariatur consectetur ut ex ad laborum sit. Aute eu enim sit nulla sint.\r\n",
+ "registered": "2015-03-05T20:57:18 -01:00",
+ "latitude": 57.32528,
+ "longitude": -111.309001,
+ "tags": [
+ "duis",
+ "eiusmod",
+ "ut",
+ "officia",
+ "velit",
+ "adipisicing",
+ "cillum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Harriett Small"
+ },
+ {
+ "id": 1,
+ "name": "Kristie Newton"
+ },
+ {
+ "id": 2,
+ "name": "Margo Mcmillan"
+ }
+ ],
+ "greeting": "Hello, Oliver Weber! You have 10 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af63cee6228e27e73f",
+ "index": 81,
+ "guid": "c0bf155a-7e82-4c90-81ff-0fdc220e2c17",
+ "isActive": false,
+ "balance": "$2,498.11",
+ "picture": "http://placehold.it/32x32",
+ "age": 30,
+ "eyeColor": "green",
+ "name": "Pena Hull",
+ "gender": "male",
+ "company": "SPLINX",
+ "email": "penahull@splinx.com",
+ "phone": "+1 (955) 478-2208",
+ "address": "615 Montrose Avenue, Staples, Massachusetts, 9827",
+ "about": "Quis ipsum fugiat reprehenderit voluptate qui laborum dolor ullamco voluptate pariatur cupidatat cillum aute do. Consequat reprehenderit id do aliqua ullamco cillum mollit do incididunt pariatur. In eiusmod sunt enim consectetur aliquip laborum deserunt in et deserunt.\r\n",
+ "registered": "2014-11-04T01:59:09 -01:00",
+ "latitude": -28.789359,
+ "longitude": -32.331669,
+ "tags": [
+ "officia",
+ "ex",
+ "pariatur",
+ "nulla",
+ "aliquip",
+ "duis",
+ "proident"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Eileen Grimes"
+ },
+ {
+ "id": 1,
+ "name": "Aline Santos"
+ },
+ {
+ "id": 2,
+ "name": "Mercado Johns"
+ }
+ ],
+ "greeting": "Hello, Pena Hull! You have 3 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afae92cdb478dba37b",
+ "index": 82,
+ "guid": "31aaaa0e-5903-408e-b4dc-fd5c9383896b",
+ "isActive": false,
+ "balance": "$2,251.49",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "brown",
+ "name": "Carly Patel",
+ "gender": "female",
+ "company": "ZAJ",
+ "email": "carlypatel@zaj.com",
+ "phone": "+1 (926) 569-2426",
+ "address": "865 Varick Street, Shawmut, Tennessee, 4822",
+ "about": "Consectetur cupidatat occaecat officia pariatur proident in aute laborum fugiat incididunt quis quis. Culpa est velit irure officia in pariatur cillum excepteur pariatur sint exercitation eiusmod. Ad ullamco dolore elit tempor minim anim pariatur tempor officia ea nostrud irure amet qui. Pariatur aliqua ullamco cupidatat eu deserunt ipsum dolore.\r\n",
+ "registered": "2015-04-08T18:03:19 -02:00",
+ "latitude": 47.620888,
+ "longitude": -98.833289,
+ "tags": [
+ "aliquip",
+ "aliquip",
+ "fugiat",
+ "ea",
+ "anim",
+ "ut",
+ "voluptate"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Dyer Wiggins"
+ },
+ {
+ "id": 1,
+ "name": "Atkinson Salinas"
+ },
+ {
+ "id": 2,
+ "name": "Downs Rhodes"
+ }
+ ],
+ "greeting": "Hello, Carly Patel! You have 4 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af325033e55e8475c5",
+ "index": 83,
+ "guid": "eb68f18c-648b-4368-a626-c94a0822cdf3",
+ "isActive": false,
+ "balance": "$3,070.25",
+ "picture": "http://placehold.it/32x32",
+ "age": 22,
+ "eyeColor": "brown",
+ "name": "Wong Leblanc",
+ "gender": "male",
+ "company": "SQUISH",
+ "email": "wongleblanc@squish.com",
+ "phone": "+1 (903) 433-2898",
+ "address": "109 Montgomery Street, Ezel, Wisconsin, 7077",
+ "about": "Ipsum deserunt ex esse culpa ipsum incididunt laboris eu anim cillum cupidatat. Elit ea anim ullamco et est deserunt dolor sit aute fugiat et nostrud dolore laboris. Mollit ex laborum ex id irure anim non dolore commodo ullamco duis laboris laboris laborum.\r\n",
+ "registered": "2014-11-23T20:15:56 -01:00",
+ "latitude": 19.423651,
+ "longitude": 11.541432,
+ "tags": [
+ "culpa",
+ "laborum",
+ "sint",
+ "aliqua",
+ "veniam",
+ "ex",
+ "culpa"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Acevedo Witt"
+ },
+ {
+ "id": 1,
+ "name": "Sanders Jarvis"
+ },
+ {
+ "id": 2,
+ "name": "Ellis Rosario"
+ }
+ ],
+ "greeting": "Hello, Wong Leblanc! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af479c28b640c56c36",
+ "index": 84,
+ "guid": "0e9132dd-58fd-4a69-85a2-50e78457aa7b",
+ "isActive": true,
+ "balance": "$3,766.31",
+ "picture": "http://placehold.it/32x32",
+ "age": 28,
+ "eyeColor": "green",
+ "name": "Araceli Knox",
+ "gender": "female",
+ "company": "EZENT",
+ "email": "araceliknox@ezent.com",
+ "phone": "+1 (908) 485-2251",
+ "address": "189 Thornton Street, Twilight, Delaware, 8923",
+ "about": "Irure anim quis sit adipisicing nostrud eiusmod magna. Dolor voluptate laborum elit tempor duis id consectetur. Officia cupidatat ex ea sunt id velit enim velit qui consequat velit. Aliqua aliqua mollit sit consectetur Lorem labore aliquip ut sint velit nulla amet pariatur. Nisi esse et reprehenderit est aliquip.\r\n",
+ "registered": "2015-02-14T18:19:34 -01:00",
+ "latitude": 26.232541,
+ "longitude": 33.122957,
+ "tags": [
+ "reprehenderit",
+ "do",
+ "tempor",
+ "mollit",
+ "consectetur",
+ "laboris",
+ "ullamco"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Mayo Pearson"
+ },
+ {
+ "id": 1,
+ "name": "Day Cannon"
+ },
+ {
+ "id": 2,
+ "name": "Trevino Mathis"
+ }
+ ],
+ "greeting": "Hello, Araceli Knox! You have 10 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af368e8d513b7f9f99",
+ "index": 85,
+ "guid": "1d8f8331-1c30-43ee-b454-0c3dbb02faa7",
+ "isActive": false,
+ "balance": "$2,069.11",
+ "picture": "http://placehold.it/32x32",
+ "age": 28,
+ "eyeColor": "blue",
+ "name": "Cunningham Price",
+ "gender": "male",
+ "company": "EXOPLODE",
+ "email": "cunninghamprice@exoplode.com",
+ "phone": "+1 (902) 448-3109",
+ "address": "959 Grafton Street, Dale, American Samoa, 5434",
+ "about": "Deserunt do aute dolore et aliqua fugiat fugiat esse occaecat velit mollit qui. Veniam reprehenderit consectetur pariatur ullamco laboris. Duis esse tempor ea adipisicing non laborum velit. Nulla id qui proident Lorem. Nulla nulla mollit in est deserunt fugiat commodo non id sit excepteur minim pariatur. Dolor non culpa incididunt culpa fugiat labore minim.\r\n",
+ "registered": "2014-10-12T02:31:02 -02:00",
+ "latitude": 66.870636,
+ "longitude": -131.07294,
+ "tags": [
+ "ex",
+ "quis",
+ "culpa",
+ "ullamco",
+ "ex",
+ "dolore",
+ "cupidatat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Bettye Oneill"
+ },
+ {
+ "id": 1,
+ "name": "Savannah Shaw"
+ },
+ {
+ "id": 2,
+ "name": "Sheryl Riggs"
+ }
+ ],
+ "greeting": "Hello, Cunningham Price! You have 10 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af73e3a5acf3fbdd09",
+ "index": 86,
+ "guid": "b1eb90a8-e183-43b4-98e9-f0b83265e12a",
+ "isActive": false,
+ "balance": "$3,585.01",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "blue",
+ "name": "Conley Frank",
+ "gender": "male",
+ "company": "BISBA",
+ "email": "conleyfrank@bisba.com",
+ "phone": "+1 (976) 476-3095",
+ "address": "586 Manhattan Avenue, Rosewood, Ohio, 3627",
+ "about": "Incididunt incididunt occaecat esse laborum sit ex do mollit sit non ex. Ex sit minim ullamco excepteur fugiat anim sit laboris veniam elit laboris incididunt. Mollit dolor magna fugiat sunt cillum non quis labore culpa. Fugiat aliquip nostrud quis ad duis cillum ad aute pariatur.\r\n",
+ "registered": "2014-05-07T22:27:08 -02:00",
+ "latitude": 40.134801,
+ "longitude": -155.83285,
+ "tags": [
+ "ex",
+ "nisi",
+ "est",
+ "enim",
+ "occaecat",
+ "pariatur",
+ "ex"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Sweet Hubbard"
+ },
+ {
+ "id": 1,
+ "name": "Colleen Mayo"
+ },
+ {
+ "id": 2,
+ "name": "Holder Goodwin"
+ }
+ ],
+ "greeting": "Hello, Conley Frank! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03aff84a25ada344edd3",
+ "index": 87,
+ "guid": "28236113-5461-4ae1-911b-e788fe93d8bc",
+ "isActive": false,
+ "balance": "$1,591.89",
+ "picture": "http://placehold.it/32x32",
+ "age": 22,
+ "eyeColor": "brown",
+ "name": "Woodward Clarke",
+ "gender": "male",
+ "company": "ZILIDIUM",
+ "email": "woodwardclarke@zilidium.com",
+ "phone": "+1 (975) 533-3099",
+ "address": "130 Milton Street, Jacksonburg, Louisiana, 5638",
+ "about": "Sit nisi proident duis elit sunt enim. Consectetur excepteur quis ut sunt tempor est. Ea et fugiat occaecat commodo sunt aliquip enim do laborum ea fugiat enim. Deserunt consequat dolor dolor et aliquip laboris enim adipisicing sunt laborum. Tempor pariatur voluptate labore amet nulla est et ad quis. Ullamco voluptate mollit ut incididunt deserunt tempor reprehenderit ullamco velit et. Aliqua pariatur fugiat ullamco ea deserunt magna dolor voluptate adipisicing quis in velit ullamco.\r\n",
+ "registered": "2014-07-31T20:21:19 -02:00",
+ "latitude": 50.061218,
+ "longitude": -41.461195,
+ "tags": [
+ "magna",
+ "nulla",
+ "irure",
+ "culpa",
+ "consequat",
+ "pariatur",
+ "ad"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Manuela Norman"
+ },
+ {
+ "id": 1,
+ "name": "Shanna Farrell"
+ },
+ {
+ "id": 2,
+ "name": "Cross Singleton"
+ }
+ ],
+ "greeting": "Hello, Woodward Clarke! You have 5 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af977bac11969aa60f",
+ "index": 88,
+ "guid": "3aa9379d-f5a4-44ae-8c42-f99eb67d6b7d",
+ "isActive": false,
+ "balance": "$2,352.89",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "brown",
+ "name": "Gracie Calhoun",
+ "gender": "female",
+ "company": "MAXEMIA",
+ "email": "graciecalhoun@maxemia.com",
+ "phone": "+1 (976) 467-2407",
+ "address": "158 Bevy Court, Manila, Idaho, 8981",
+ "about": "Enim elit pariatur eu commodo laboris exercitation. Reprehenderit occaecat non non eu amet quis ullamco magna. Qui aliqua pariatur non nisi excepteur non qui culpa voluptate ut culpa est et. Ea veniam excepteur excepteur labore cillum ullamco nulla ut incididunt elit. In proident aliqua dolor qui nulla veniam culpa incididunt nostrud fugiat non do in esse.\r\n",
+ "registered": "2014-12-21T05:00:24 -01:00",
+ "latitude": -89.874861,
+ "longitude": 29.863813,
+ "tags": [
+ "incididunt",
+ "id",
+ "nulla",
+ "eiusmod",
+ "deserunt",
+ "in",
+ "eu"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Garner Massey"
+ },
+ {
+ "id": 1,
+ "name": "Carrie Klein"
+ },
+ {
+ "id": 2,
+ "name": "Hewitt Beard"
+ }
+ ],
+ "greeting": "Hello, Gracie Calhoun! You have 8 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af58118b6eb8f16938",
+ "index": 89,
+ "guid": "475d9a91-e426-473a-8ae4-032a354d3012",
+ "isActive": false,
+ "balance": "$1,022.39",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "blue",
+ "name": "Pope Pickett",
+ "gender": "male",
+ "company": "ISOLOGICA",
+ "email": "popepickett@isologica.com",
+ "phone": "+1 (890) 507-3433",
+ "address": "586 Herkimer Place, Vincent, New Hampshire, 8066",
+ "about": "Ad nisi nisi ea amet do voluptate culpa. Ipsum non esse amet Lorem laboris voluptate ipsum exercitation. Labore elit et aliquip aliqua velit dolore laboris. Id commodo occaecat aliquip veniam reprehenderit incididunt elit. Aliquip ipsum et quis nisi sunt nulla consectetur officia veniam cillum aliquip. Fugiat eiusmod id voluptate ipsum esse labore ut.\r\n",
+ "registered": "2014-05-09T07:17:02 -02:00",
+ "latitude": -51.995953,
+ "longitude": 28.057017,
+ "tags": [
+ "amet",
+ "commodo",
+ "eiusmod",
+ "eiusmod",
+ "reprehenderit",
+ "non",
+ "tempor"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Beryl Maynard"
+ },
+ {
+ "id": 1,
+ "name": "Ferrell Hunter"
+ },
+ {
+ "id": 2,
+ "name": "Deidre Chang"
+ }
+ ],
+ "greeting": "Hello, Pope Pickett! You have 4 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af4a09c27721418d21",
+ "index": 90,
+ "guid": "03fe31ef-c7cf-4104-8838-b99e238e217c",
+ "isActive": false,
+ "balance": "$2,143.16",
+ "picture": "http://placehold.it/32x32",
+ "age": 26,
+ "eyeColor": "blue",
+ "name": "Juanita Vaughan",
+ "gender": "female",
+ "company": "NITRACYR",
+ "email": "juanitavaughan@nitracyr.com",
+ "phone": "+1 (869) 482-3832",
+ "address": "839 Bay Parkway, Stockdale, Maine, 9505",
+ "about": "Esse commodo elit in excepteur enim sunt commodo. Proident culpa do incididunt veniam qui occaecat enim aute. In ea aliqua nostrud velit ad ullamco magna eiusmod.\r\n",
+ "registered": "2014-12-15T01:58:22 -01:00",
+ "latitude": -42.092677,
+ "longitude": 97.889346,
+ "tags": [
+ "magna",
+ "nostrud",
+ "occaecat",
+ "aliqua",
+ "mollit",
+ "officia",
+ "exercitation"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Reva Hinton"
+ },
+ {
+ "id": 1,
+ "name": "Alyson Harris"
+ },
+ {
+ "id": 2,
+ "name": "Miller Valentine"
+ }
+ ],
+ "greeting": "Hello, Juanita Vaughan! You have 8 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af2538eae6a5f5351e",
+ "index": 91,
+ "guid": "cb437252-4dc2-4367-ad73-4ab031f27d51",
+ "isActive": false,
+ "balance": "$3,933.68",
+ "picture": "http://placehold.it/32x32",
+ "age": 28,
+ "eyeColor": "green",
+ "name": "Lynn Gallagher",
+ "gender": "male",
+ "company": "MANUFACT",
+ "email": "lynngallagher@manufact.com",
+ "phone": "+1 (969) 433-3900",
+ "address": "156 Covert Street, Coyote, Utah, 1709",
+ "about": "Et nostrud commodo ut ex consequat incididunt ex elit dolor ea commodo. Veniam aliquip ex reprehenderit exercitation reprehenderit duis tempor Lorem commodo pariatur voluptate ipsum ad fugiat. Irure cillum consectetur anim ipsum irure duis ut veniam proident esse aute laborum elit nostrud. Quis esse labore irure nulla consectetur.\r\n",
+ "registered": "2014-06-17T15:49:31 -02:00",
+ "latitude": 88.337983,
+ "longitude": -44.764583,
+ "tags": [
+ "amet",
+ "eiusmod",
+ "enim",
+ "do",
+ "do",
+ "veniam",
+ "cupidatat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Veronica Norton"
+ },
+ {
+ "id": 1,
+ "name": "Esther Castillo"
+ },
+ {
+ "id": 2,
+ "name": "Hillary Raymond"
+ }
+ ],
+ "greeting": "Hello, Lynn Gallagher! You have 9 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afef9a457c9cdd0087",
+ "index": 92,
+ "guid": "f0e5c502-298d-46d8-8662-0d03c805c375",
+ "isActive": true,
+ "balance": "$3,863.67",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "brown",
+ "name": "Nunez Petersen",
+ "gender": "male",
+ "company": "AMTAS",
+ "email": "nunezpetersen@amtas.com",
+ "phone": "+1 (811) 469-3196",
+ "address": "720 Herbert Street, Elbert, West Virginia, 4075",
+ "about": "Magna exercitation eiusmod aute eu aliqua exercitation in commodo. Nostrud officia pariatur aliquip nisi minim cillum aliquip excepteur nostrud Lorem tempor. Nostrud cillum tempor veniam sit adipisicing consequat commodo dolor dolor eiusmod tempor ex ex. Nostrud excepteur sunt qui eu. Laborum ex incididunt cillum duis enim minim cillum voluptate minim do labore elit do minim. Eu ea adipisicing voluptate mollit esse excepteur mollit aliquip sint in dolor. Anim minim sunt laboris sit id duis quis.\r\n",
+ "registered": "2014-05-08T04:06:05 -02:00",
+ "latitude": 6.597411,
+ "longitude": 144.472601,
+ "tags": [
+ "non",
+ "consequat",
+ "deserunt",
+ "officia",
+ "pariatur",
+ "ullamco",
+ "et"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Hopper Gomez"
+ },
+ {
+ "id": 1,
+ "name": "Nichols Rivera"
+ },
+ {
+ "id": 2,
+ "name": "Lang Hernandez"
+ }
+ ],
+ "greeting": "Hello, Nunez Petersen! You have 6 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af2e08326bf8d8ef13",
+ "index": 93,
+ "guid": "61b61a7d-f68c-44d7-bf03-5220a5c50f8b",
+ "isActive": true,
+ "balance": "$2,322.27",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "blue",
+ "name": "Hazel Farley",
+ "gender": "female",
+ "company": "GEOLOGIX",
+ "email": "hazelfarley@geologix.com",
+ "phone": "+1 (861) 593-3636",
+ "address": "217 Wilson Street, Topaz, Virginia, 7489",
+ "about": "In sunt occaecat irure do reprehenderit et ullamco ex tempor esse aliquip ea. Sit incididunt amet aliquip id exercitation officia ut. Ea aliquip sunt eiusmod esse labore laborum officia officia dolor magna duis amet exercitation ex. Occaecat ea labore tempor deserunt cillum ipsum reprehenderit magna Lorem amet laboris aliquip ea laborum. Minim pariatur qui mollit elit amet irure sint ad. Nisi excepteur enim culpa mollit aliqua pariatur laboris est. Nostrud fugiat labore eu et.\r\n",
+ "registered": "2014-10-13T18:47:07 -02:00",
+ "latitude": 54.454326,
+ "longitude": 40.571849,
+ "tags": [
+ "velit",
+ "do",
+ "deserunt",
+ "fugiat",
+ "officia",
+ "commodo",
+ "ad"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Neva Mcguire"
+ },
+ {
+ "id": 1,
+ "name": "Melody Todd"
+ },
+ {
+ "id": 2,
+ "name": "May Bender"
+ }
+ ],
+ "greeting": "Hello, Hazel Farley! You have 6 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af93ee2ba58b8e9f9f",
+ "index": 94,
+ "guid": "a7eaf306-7e53-4aac-9afe-1d7c85bb7b0d",
+ "isActive": false,
+ "balance": "$3,221.49",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "blue",
+ "name": "Soto Anderson",
+ "gender": "male",
+ "company": "DIGIFAD",
+ "email": "sotoanderson@digifad.com",
+ "phone": "+1 (814) 596-2576",
+ "address": "873 Grant Avenue, Graball, Florida, 4201",
+ "about": "Consectetur ut laborum veniam quis elit. Qui aliquip excepteur aliquip aute occaecat magna eu labore sint fugiat enim sint voluptate. Ea minim duis nisi irure pariatur. Excepteur laborum consequat ut esse exercitation dolore. Exercitation est anim sint mollit consequat do. Fugiat deserunt dolore id esse ullamco exercitation minim incididunt eiusmod Lorem non cupidatat ad.\r\n",
+ "registered": "2014-10-22T00:38:58 -02:00",
+ "latitude": 76.846134,
+ "longitude": -49.404503,
+ "tags": [
+ "sint",
+ "ut",
+ "labore",
+ "ullamco",
+ "laborum",
+ "veniam",
+ "cupidatat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Ayers Langley"
+ },
+ {
+ "id": 1,
+ "name": "Dale Orr"
+ },
+ {
+ "id": 2,
+ "name": "Newman Lott"
+ }
+ ],
+ "greeting": "Hello, Soto Anderson! You have 5 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af3bba3fd13b980f74",
+ "index": 95,
+ "guid": "0a64c44e-c209-4940-954e-62119e83bfda",
+ "isActive": false,
+ "balance": "$3,718.12",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "green",
+ "name": "Patsy Cole",
+ "gender": "female",
+ "company": "LYRIA",
+ "email": "patsycole@lyria.com",
+ "phone": "+1 (840) 449-3338",
+ "address": "889 Grand Avenue, Torboy, Texas, 602",
+ "about": "Incididunt tempor aute culpa id id esse minim. Do excepteur esse ad consectetur ex pariatur amet. Nulla laboris velit esse nostrud in tempor aute enim voluptate cupidatat cupidatat et aute tempor. Aliquip ex duis cillum dolore dolor sint ipsum occaecat id non cupidatat culpa voluptate proident. Anim cupidatat sit labore nisi occaecat sit in ex voluptate est magna fugiat dolore. Ad fugiat ad aliquip amet mollit velit excepteur enim sit reprehenderit velit occaecat nostrud officia.\r\n",
+ "registered": "2014-07-18T17:15:13 -02:00",
+ "latitude": -40.026726,
+ "longitude": 26.504388,
+ "tags": [
+ "do",
+ "incididunt",
+ "velit",
+ "Lorem",
+ "consectetur",
+ "fugiat",
+ "cupidatat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Rojas Morris"
+ },
+ {
+ "id": 1,
+ "name": "Sophia Gamble"
+ },
+ {
+ "id": 2,
+ "name": "Gilmore Frost"
+ }
+ ],
+ "greeting": "Hello, Patsy Cole! You have 2 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af3c8b5f638abc2f70",
+ "index": 96,
+ "guid": "79f2b44d-df73-4003-a335-4433b6042ad9",
+ "isActive": true,
+ "balance": "$3,796.29",
+ "picture": "http://placehold.it/32x32",
+ "age": 32,
+ "eyeColor": "green",
+ "name": "Burgess Merritt",
+ "gender": "male",
+ "company": "COMSTAR",
+ "email": "burgessmerritt@comstar.com",
+ "phone": "+1 (983) 581-2697",
+ "address": "344 Post Court, Mapletown, Guam, 4195",
+ "about": "Velit excepteur consequat pariatur elit ut. Et ipsum exercitation fugiat nostrud non. Voluptate Lorem et occaecat velit et.\r\n",
+ "registered": "2014-08-21T20:00:34 -02:00",
+ "latitude": 42.694038,
+ "longitude": 12.896139,
+ "tags": [
+ "sunt",
+ "officia",
+ "et",
+ "Lorem",
+ "tempor",
+ "velit",
+ "quis"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Jill Turner"
+ },
+ {
+ "id": 1,
+ "name": "Kathy Holman"
+ },
+ {
+ "id": 2,
+ "name": "Minnie Gill"
+ }
+ ],
+ "greeting": "Hello, Burgess Merritt! You have 7 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af991e8f9bb3c3785f",
+ "index": 97,
+ "guid": "739180b0-52fc-415a-8893-6eadf4188cd5",
+ "isActive": true,
+ "balance": "$3,815.65",
+ "picture": "http://placehold.it/32x32",
+ "age": 22,
+ "eyeColor": "blue",
+ "name": "Ford Oneil",
+ "gender": "male",
+ "company": "KONGENE",
+ "email": "fordoneil@kongene.com",
+ "phone": "+1 (821) 431-2965",
+ "address": "512 Erskine Loop, Stockwell, Alaska, 3478",
+ "about": "Quis culpa dolore labore voluptate nisi Lorem sunt quis. Pariatur occaecat elit ut pariatur ut Lorem magna ipsum sint ut. Do minim sunt culpa amet dolor minim non exercitation velit magna proident voluptate aute magna. Mollit id cillum ea ipsum qui proident consequat cupidatat aliquip ea irure.\r\n",
+ "registered": "2014-05-14T05:17:51 -02:00",
+ "latitude": -12.166597,
+ "longitude": -67.500296,
+ "tags": [
+ "deserunt",
+ "proident",
+ "veniam",
+ "sit",
+ "consectetur",
+ "Lorem",
+ "minim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Imogene Avery"
+ },
+ {
+ "id": 1,
+ "name": "Elisa Brock"
+ },
+ {
+ "id": 2,
+ "name": "Walker Mullins"
+ }
+ ],
+ "greeting": "Hello, Ford Oneil! You have 10 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afb1479f6974147294",
+ "index": 98,
+ "guid": "83e2b5dd-b6d5-4ce8-a663-dc026bf19bce",
+ "isActive": false,
+ "balance": "$1,088.03",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "green",
+ "name": "Johnson Ray",
+ "gender": "male",
+ "company": "BIZMATIC",
+ "email": "johnsonray@bizmatic.com",
+ "phone": "+1 (867) 478-3653",
+ "address": "607 Front Street, Statenville, District Of Columbia, 6132",
+ "about": "Nostrud excepteur incididunt incididunt consectetur elit duis cillum ullamco adipisicing. Dolore et et cillum reprehenderit qui ullamco quis occaecat cillum. Duis esse deserunt sit commodo. Id nostrud aliquip consequat commodo labore esse cillum pariatur ullamco sunt. Fugiat sit ut voluptate aute commodo adipisicing cupidatat voluptate nisi. Ea nostrud sunt in incididunt in mollit nulla nulla qui in. Ipsum duis elit cillum proident cupidatat consectetur sint enim laboris reprehenderit cillum excepteur labore ea.\r\n",
+ "registered": "2014-10-24T04:53:13 -02:00",
+ "latitude": 38.892673,
+ "longitude": 112.172261,
+ "tags": [
+ "amet",
+ "officia",
+ "Lorem",
+ "eiusmod",
+ "velit",
+ "non",
+ "nulla"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Berta Graham"
+ },
+ {
+ "id": 1,
+ "name": "Reese Hoffman"
+ },
+ {
+ "id": 2,
+ "name": "Winnie Blankenship"
+ }
+ ],
+ "greeting": "Hello, Johnson Ray! You have 4 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af5f0ee75645bf4018",
+ "index": 99,
+ "guid": "f3c18a45-4003-4a60-8748-32c03b679b64",
+ "isActive": true,
+ "balance": "$3,842.23",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "green",
+ "name": "Trujillo Callahan",
+ "gender": "male",
+ "company": "CORIANDER",
+ "email": "trujillocallahan@coriander.com",
+ "phone": "+1 (936) 581-3364",
+ "address": "196 Lincoln Place, Cherokee, New York, 8526",
+ "about": "Fugiat et incididunt mollit ad ullamco ipsum officia esse dolor dolor pariatur aliqua ullamco. Elit aliqua eiusmod ut dolor aliquip dolore id culpa consectetur est commodo consequat Lorem cillum. Ullamco esse proident nisi minim nisi consectetur proident.\r\n",
+ "registered": "2014-11-14T16:54:43 -01:00",
+ "latitude": 65.879189,
+ "longitude": 121.784566,
+ "tags": [
+ "irure",
+ "velit",
+ "deserunt",
+ "aliquip",
+ "velit",
+ "qui",
+ "labore"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Griffith Mayer"
+ },
+ {
+ "id": 1,
+ "name": "Rocha Whitaker"
+ },
+ {
+ "id": 2,
+ "name": "Roy Franklin"
+ }
+ ],
+ "greeting": "Hello, Trujillo Callahan! You have 4 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af10734cd70cf96406",
+ "index": 100,
+ "guid": "bfb1996d-a30c-40ef-a37c-3ca3ecba2b11",
+ "isActive": false,
+ "balance": "$2,125.02",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "blue",
+ "name": "Pennington Hanson",
+ "gender": "male",
+ "company": "NAXDIS",
+ "email": "penningtonhanson@naxdis.com",
+ "phone": "+1 (877) 546-2575",
+ "address": "809 Oriental Boulevard, Interlochen, North Carolina, 3233",
+ "about": "Ea amet qui eiusmod eu exercitation veniam tempor laborum cillum nostrud dolor tempor. Aliquip eu commodo aute commodo minim sint ad officia quis incididunt ad reprehenderit irure. Fugiat eiusmod id cillum quis commodo aliquip ipsum adipisicing qui sint eiusmod minim. Deserunt ex tempor minim sint eu cupidatat consequat et adipisicing. Consequat excepteur ut tempor non. Do ullamco est fugiat id qui qui minim mollit tempor sunt irure cupidatat incididunt. Minim aute nisi nostrud sit exercitation velit pariatur aute irure culpa ea Lorem Lorem.\r\n",
+ "registered": "2014-09-15T11:29:29 -02:00",
+ "latitude": -55.964824,
+ "longitude": -140.657611,
+ "tags": [
+ "ex",
+ "ea",
+ "occaecat",
+ "excepteur",
+ "cupidatat",
+ "nulla",
+ "aliqua"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Caitlin Cantu"
+ },
+ {
+ "id": 1,
+ "name": "Sanchez Bennett"
+ },
+ {
+ "id": 2,
+ "name": "Phyllis Paul"
+ }
+ ],
+ "greeting": "Hello, Pennington Hanson! You have 4 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03affc7e7f78c2fa2254",
+ "index": 101,
+ "guid": "cfb24a78-c4fd-4e9c-a2b9-42ace0cd7eeb",
+ "isActive": false,
+ "balance": "$1,524.46",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "brown",
+ "name": "Ramona Baird",
+ "gender": "female",
+ "company": "QUONATA",
+ "email": "ramonabaird@quonata.com",
+ "phone": "+1 (803) 410-3770",
+ "address": "314 Miller Avenue, Springdale, Connecticut, 3863",
+ "about": "Elit sit elit eiusmod sint sit deserunt aliquip sunt consectetur laborum id consequat anim irure. Mollit ut incididunt excepteur sint enim nulla tempor magna tempor dolore dolore fugiat mollit. Velit irure laboris aliquip labore reprehenderit commodo quis.\r\n",
+ "registered": "2014-03-13T23:01:28 -01:00",
+ "latitude": -69.411459,
+ "longitude": -68.226005,
+ "tags": [
+ "qui",
+ "duis",
+ "est",
+ "eiusmod",
+ "enim",
+ "laborum",
+ "nostrud"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Priscilla Garza"
+ },
+ {
+ "id": 1,
+ "name": "Penny Banks"
+ },
+ {
+ "id": 2,
+ "name": "Contreras Gordon"
+ }
+ ],
+ "greeting": "Hello, Ramona Baird! You have 3 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af16e2ed83f672f4fd",
+ "index": 102,
+ "guid": "f64ee8aa-fbb9-4666-bd0a-94138552bd5f",
+ "isActive": true,
+ "balance": "$1,951.91",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "green",
+ "name": "Reyes Garcia",
+ "gender": "male",
+ "company": "MAXIMIND",
+ "email": "reyesgarcia@maximind.com",
+ "phone": "+1 (854) 440-2494",
+ "address": "197 Turner Place, Berlin, South Carolina, 7693",
+ "about": "Aliqua excepteur reprehenderit aute dolore aliqua. Sint occaecat exercitation excepteur mollit deserunt incididunt exercitation voluptate et mollit enim id. Ea consectetur ut cillum cillum aliqua. Non consequat minim commodo aute excepteur magna commodo. Eu anim qui pariatur ipsum reprehenderit aliqua. Pariatur ea ad magna fugiat incididunt nisi in et veniam ad est dolor voluptate. Sunt proident ipsum do cupidatat occaecat velit enim aliquip anim nisi.\r\n",
+ "registered": "2014-09-04T07:51:39 -02:00",
+ "latitude": -84.118065,
+ "longitude": -120.86918,
+ "tags": [
+ "esse",
+ "elit",
+ "officia",
+ "veniam",
+ "voluptate",
+ "ad",
+ "do"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Gallegos Beck"
+ },
+ {
+ "id": 1,
+ "name": "Josie Carpenter"
+ },
+ {
+ "id": 2,
+ "name": "Mai Ballard"
+ }
+ ],
+ "greeting": "Hello, Reyes Garcia! You have 5 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af0a275d1aa2defd77",
+ "index": 103,
+ "guid": "fdbba489-88d2-4eb9-ab79-c00bb23beb2a",
+ "isActive": true,
+ "balance": "$1,721.19",
+ "picture": "http://placehold.it/32x32",
+ "age": 26,
+ "eyeColor": "green",
+ "name": "Waller Fuller",
+ "gender": "male",
+ "company": "QUILCH",
+ "email": "wallerfuller@quilch.com",
+ "phone": "+1 (884) 582-3761",
+ "address": "450 McClancy Place, Jacksonwald, Rhode Island, 5034",
+ "about": "Quis exercitation incididunt proident non enim eu aliqua reprehenderit occaecat ipsum ex. Aliquip laborum quis sit tempor. Ipsum aliquip est eiusmod labore. Lorem ea cupidatat eiusmod excepteur nisi do.\r\n",
+ "registered": "2014-01-02T06:36:43 -01:00",
+ "latitude": 28.75847,
+ "longitude": -12.638341,
+ "tags": [
+ "commodo",
+ "dolore",
+ "consectetur",
+ "dolor",
+ "reprehenderit",
+ "ea",
+ "ut"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Janie Eaton"
+ },
+ {
+ "id": 1,
+ "name": "Rochelle Sexton"
+ },
+ {
+ "id": 2,
+ "name": "Lea Bright"
+ }
+ ],
+ "greeting": "Hello, Waller Fuller! You have 9 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af71775859a9e2477e",
+ "index": 104,
+ "guid": "97a63b52-35d7-4d94-939c-b7a9749e89d0",
+ "isActive": true,
+ "balance": "$2,616.28",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "brown",
+ "name": "Sandoval Woodard",
+ "gender": "male",
+ "company": "GREEKER",
+ "email": "sandovalwoodard@greeker.com",
+ "phone": "+1 (899) 533-3347",
+ "address": "417 Grace Court, Singer, Pennsylvania, 9627",
+ "about": "Minim reprehenderit sint voluptate laborum qui proident dolor culpa eu consectetur. Nulla velit consequat fugiat exercitation qui magna cillum ea sit sit. Occaecat ex irure elit labore amet deserunt amet cupidatat.\r\n",
+ "registered": "2014-02-09T10:35:31 -01:00",
+ "latitude": -26.576033,
+ "longitude": 81.12902,
+ "tags": [
+ "duis",
+ "deserunt",
+ "reprehenderit",
+ "sit",
+ "sint",
+ "commodo",
+ "laboris"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Mara Rios"
+ },
+ {
+ "id": 1,
+ "name": "Claire Austin"
+ },
+ {
+ "id": 2,
+ "name": "Holly Wilder"
+ }
+ ],
+ "greeting": "Hello, Sandoval Woodard! You have 8 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af463f587f4200509e",
+ "index": 105,
+ "guid": "2af76401-317e-4c07-9f93-ce38370f67a9",
+ "isActive": true,
+ "balance": "$1,042.21",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "brown",
+ "name": "Deana Cote",
+ "gender": "female",
+ "company": "PEARLESSA",
+ "email": "deanacote@pearlessa.com",
+ "phone": "+1 (861) 412-3978",
+ "address": "149 Neptune Avenue, Dubois, Oklahoma, 6191",
+ "about": "Est veniam enim velit magna anim aliqua sunt fugiat. Enim commodo ad aliqua ut aliqua veniam. Do voluptate aute id nostrud excepteur irure. Laboris amet commodo pariatur fugiat ut sunt dolor irure Lorem eiusmod consequat duis sint voluptate. Aliquip est irure esse reprehenderit consequat do ut nostrud occaecat cillum.\r\n",
+ "registered": "2014-11-24T23:25:25 -01:00",
+ "latitude": 62.071304,
+ "longitude": 12.03914,
+ "tags": [
+ "ad",
+ "laboris",
+ "anim",
+ "anim",
+ "sint",
+ "enim",
+ "commodo"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Warren Becker"
+ },
+ {
+ "id": 1,
+ "name": "Sullivan Valencia"
+ },
+ {
+ "id": 2,
+ "name": "Jeanette Chapman"
+ }
+ ],
+ "greeting": "Hello, Deana Cote! You have 1 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03affa3441b7b80f3c04",
+ "index": 106,
+ "guid": "289e5378-b35a-4072-88e7-10fc8c2745f5",
+ "isActive": false,
+ "balance": "$1,527.01",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "green",
+ "name": "Jana Church",
+ "gender": "female",
+ "company": "COMBOGEN",
+ "email": "janachurch@combogen.com",
+ "phone": "+1 (957) 457-2607",
+ "address": "807 Vanderveer Street, Genoa, Kansas, 6077",
+ "about": "Amet anim reprehenderit irure cillum culpa est est magna ut eiusmod. Quis ad proident exercitation in mollit enim irure laborum. Magna ad sunt laborum fugiat culpa pariatur elit deserunt enim sit dolore esse velit.\r\n",
+ "registered": "2015-04-21T16:44:30 -02:00",
+ "latitude": 5.866274,
+ "longitude": 52.138734,
+ "tags": [
+ "dolore",
+ "consectetur",
+ "ipsum",
+ "qui",
+ "et",
+ "tempor",
+ "Lorem"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Anastasia Meadows"
+ },
+ {
+ "id": 1,
+ "name": "Shawn Tanner"
+ },
+ {
+ "id": 2,
+ "name": "Bishop Kennedy"
+ }
+ ],
+ "greeting": "Hello, Jana Church! You have 2 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af41582011317ac935",
+ "index": 107,
+ "guid": "e0b8e997-7a4e-4343-9e7e-53f8436efe5d",
+ "isActive": false,
+ "balance": "$2,227.30",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "green",
+ "name": "Marta Slater",
+ "gender": "female",
+ "company": "EWAVES",
+ "email": "martaslater@ewaves.com",
+ "phone": "+1 (809) 542-3984",
+ "address": "488 Hawthorne Street, Jenkinsville, Kentucky, 9501",
+ "about": "Commodo esse incididunt reprehenderit aute laboris. Veniam labore cupidatat ad Lorem dolore duis. Exercitation id minim officia proident dolore anim exercitation et ipsum est id exercitation non esse. Officia esse reprehenderit irure aute minim ut veniam. Nostrud sunt enim exercitation magna sit laborum non ut irure Lorem. Et eiusmod enim incididunt amet sunt ullamco esse aute sint dolore aute. Anim adipisicing culpa et est exercitation.\r\n",
+ "registered": "2014-06-07T14:08:16 -02:00",
+ "latitude": -28.500231,
+ "longitude": -103.757493,
+ "tags": [
+ "ex",
+ "sint",
+ "commodo",
+ "veniam",
+ "quis",
+ "adipisicing",
+ "voluptate"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Pickett Dickson"
+ },
+ {
+ "id": 1,
+ "name": "Meadows Sanchez"
+ },
+ {
+ "id": 2,
+ "name": "Cardenas Barrera"
+ }
+ ],
+ "greeting": "Hello, Marta Slater! You have 2 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af0c78504a91fbbc6d",
+ "index": 108,
+ "guid": "217907ab-8f3e-4146-9b36-e9342da9d2a1",
+ "isActive": true,
+ "balance": "$1,502.35",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "brown",
+ "name": "Josefina Tucker",
+ "gender": "female",
+ "company": "ILLUMITY",
+ "email": "josefinatucker@illumity.com",
+ "phone": "+1 (840) 424-2833",
+ "address": "458 Visitation Place, Thornport, Mississippi, 5714",
+ "about": "Ad minim cillum quis Lorem excepteur magna aliqua ea irure consequat dolor excepteur aliquip. Eu cillum occaecat officia esse in exercitation cillum nulla tempor. Aliqua cupidatat id Lorem incididunt consectetur consectetur exercitation. Aliquip adipisicing tempor esse officia pariatur labore nisi. Dolor anim aliquip non cillum adipisicing occaecat ipsum ullamco eiusmod eiusmod sint velit minim. Ad ex veniam minim tempor aute laborum et commodo eiusmod duis cupidatat in enim.\r\n",
+ "registered": "2014-03-30T13:39:18 -02:00",
+ "latitude": -5.501574,
+ "longitude": 78.577095,
+ "tags": [
+ "et",
+ "fugiat",
+ "anim",
+ "incididunt",
+ "culpa",
+ "irure",
+ "aute"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Ina Bates"
+ },
+ {
+ "id": 1,
+ "name": "Barry Carroll"
+ },
+ {
+ "id": 2,
+ "name": "Frances Guzman"
+ }
+ ],
+ "greeting": "Hello, Josefina Tucker! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03aff1c396785dcf8cb3",
+ "index": 109,
+ "guid": "90184aa9-88dd-4a03-a28d-bff70d1a9c6f",
+ "isActive": false,
+ "balance": "$2,427.75",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "blue",
+ "name": "Chan Hodges",
+ "gender": "male",
+ "company": "AQUASSEUR",
+ "email": "chanhodges@aquasseur.com",
+ "phone": "+1 (867) 482-3852",
+ "address": "705 Hendrickson Place, Snyderville, Montana, 316",
+ "about": "Excepteur dolor adipisicing laborum reprehenderit non consequat eu proident ea quis velit. Adipisicing sint laborum officia exercitation nostrud Lorem occaecat id ipsum aliqua ad. Laborum aliqua minim irure qui sit nostrud voluptate ad est. Deserunt mollit excepteur elit pariatur ipsum mollit. Nulla deserunt adipisicing dolor est ex. Commodo laboris commodo enim minim nostrud aliqua eu irure magna officia laboris sint occaecat. Tempor excepteur ex Lorem veniam adipisicing ipsum sit ea dolore elit minim mollit eu.\r\n",
+ "registered": "2014-05-07T01:12:15 -02:00",
+ "latitude": -30.203037,
+ "longitude": 43.860668,
+ "tags": [
+ "Lorem",
+ "excepteur",
+ "consequat",
+ "incididunt",
+ "sint",
+ "ea",
+ "ea"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Lynn Dennis"
+ },
+ {
+ "id": 1,
+ "name": "Lucile Houston"
+ },
+ {
+ "id": 2,
+ "name": "Higgins Hardy"
+ }
+ ],
+ "greeting": "Hello, Chan Hodges! You have 3 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af2e48d3fcd04397d7",
+ "index": 110,
+ "guid": "580c1ea8-ecff-4908-9b6c-44c264819d10",
+ "isActive": true,
+ "balance": "$3,464.69",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "green",
+ "name": "Rae Wooten",
+ "gender": "female",
+ "company": "AEORA",
+ "email": "raewooten@aeora.com",
+ "phone": "+1 (851) 505-3449",
+ "address": "595 Clymer Street, Barrelville, North Dakota, 9343",
+ "about": "Adipisicing do labore aliqua nisi ex occaecat laboris est elit ipsum et velit velit. Eiusmod proident eiusmod do qui culpa consectetur voluptate culpa excepteur pariatur sunt. Excepteur Lorem deserunt laboris do excepteur laborum.\r\n",
+ "registered": "2014-11-06T20:39:23 -01:00",
+ "latitude": 38.802311,
+ "longitude": 86.62138,
+ "tags": [
+ "deserunt",
+ "id",
+ "incididunt",
+ "sit",
+ "in",
+ "enim",
+ "laborum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Ericka Ayala"
+ },
+ {
+ "id": 1,
+ "name": "Elvia Aguirre"
+ },
+ {
+ "id": 2,
+ "name": "Emma Walter"
+ }
+ ],
+ "greeting": "Hello, Rae Wooten! You have 4 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afbdaefc2ce9f5146f",
+ "index": 111,
+ "guid": "e75db0ca-cc7c-4272-ac3a-c33a663d8ab0",
+ "isActive": false,
+ "balance": "$3,703.81",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "green",
+ "name": "Kate Atkinson",
+ "gender": "female",
+ "company": "COMTENT",
+ "email": "kateatkinson@comtent.com",
+ "phone": "+1 (840) 541-2531",
+ "address": "605 Ridgewood Place, Stevens, Maryland, 1957",
+ "about": "Commodo ipsum aute enim sunt ea commodo amet commodo aliqua sunt amet exercitation ipsum. Sit duis nulla duis et sunt in. Culpa culpa ex ut fugiat adipisicing.\r\n",
+ "registered": "2014-01-31T00:10:51 -01:00",
+ "latitude": 0.768971,
+ "longitude": 98.832612,
+ "tags": [
+ "occaecat",
+ "anim",
+ "magna",
+ "deserunt",
+ "reprehenderit",
+ "reprehenderit",
+ "deserunt"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Iris Holland"
+ },
+ {
+ "id": 1,
+ "name": "Rebecca Maddox"
+ },
+ {
+ "id": 2,
+ "name": "Noemi Gillespie"
+ }
+ ],
+ "greeting": "Hello, Kate Atkinson! You have 6 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af96183511a9607080",
+ "index": 112,
+ "guid": "6e2217a2-cd8d-4139-884f-6dad380ef0c6",
+ "isActive": false,
+ "balance": "$2,160.40",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "blue",
+ "name": "Benjamin Dyer",
+ "gender": "male",
+ "company": "VIRXO",
+ "email": "benjamindyer@virxo.com",
+ "phone": "+1 (825) 541-3058",
+ "address": "675 Jackson Court, Sylvanite, Hawaii, 3626",
+ "about": "Et ut dolor fugiat adipisicing aliquip amet et minim dolore fugiat nulla sint cupidatat do. Laborum tempor irure dolore quis. Esse in nulla aliquip aliqua Lorem velit occaecat nostrud occaecat anim proident ipsum ipsum aliquip. Do deserunt consequat pariatur sunt ea in. Ullamco sunt sunt cillum esse enim anim voluptate reprehenderit consectetur reprehenderit consectetur elit laboris. Nisi consequat anim cillum veniam minim magna ea laboris.\r\n",
+ "registered": "2014-03-15T13:49:26 -01:00",
+ "latitude": 62.697901,
+ "longitude": -138.858446,
+ "tags": [
+ "labore",
+ "proident",
+ "tempor",
+ "id",
+ "nostrud",
+ "consequat",
+ "pariatur"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Berry King"
+ },
+ {
+ "id": 1,
+ "name": "Patty Knight"
+ },
+ {
+ "id": 2,
+ "name": "Mayra Mcdonald"
+ }
+ ],
+ "greeting": "Hello, Benjamin Dyer! You have 7 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afbf55bd790f3140b1",
+ "index": 113,
+ "guid": "9ccaed05-c9cc-40b8-82fb-01d13612227c",
+ "isActive": false,
+ "balance": "$1,706.94",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "green",
+ "name": "Fernandez Mccormick",
+ "gender": "male",
+ "company": "MONDICIL",
+ "email": "fernandezmccormick@mondicil.com",
+ "phone": "+1 (964) 540-2341",
+ "address": "204 Osborn Street, Rockhill, Arizona, 4578",
+ "about": "Qui sunt voluptate aliqua aute anim tempor adipisicing sunt ad labore ullamco ipsum commodo sunt. Fugiat qui consectetur occaecat Lorem laborum deserunt officia reprehenderit laboris consectetur quis duis eiusmod do. Amet Lorem excepteur aliqua esse ipsum consectetur magna eiusmod nisi aliquip minim labore irure.\r\n",
+ "registered": "2014-12-24T00:26:19 -01:00",
+ "latitude": -13.692006,
+ "longitude": -8.595504,
+ "tags": [
+ "irure",
+ "esse",
+ "consequat",
+ "aliquip",
+ "ut",
+ "ut",
+ "incididunt"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Rollins Yang"
+ },
+ {
+ "id": 1,
+ "name": "Moon Hale"
+ },
+ {
+ "id": 2,
+ "name": "Gilbert Hunt"
+ }
+ ],
+ "greeting": "Hello, Fernandez Mccormick! You have 6 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af5eea05a1b576f555",
+ "index": 114,
+ "guid": "0f5c6a2c-ff22-48d8-af8d-a1b36d550e70",
+ "isActive": true,
+ "balance": "$3,163.27",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "blue",
+ "name": "Viola Sharp",
+ "gender": "female",
+ "company": "COMBOT",
+ "email": "violasharp@combot.com",
+ "phone": "+1 (990) 501-2099",
+ "address": "858 Gerald Court, Falconaire, Arkansas, 5204",
+ "about": "Eu labore cillum consectetur sit. Dolore irure ea adipisicing consectetur minim aute quis non Lorem elit. Aliquip in ea elit exercitation ipsum mollit duis laboris.\r\n",
+ "registered": "2014-05-31T23:53:40 -02:00",
+ "latitude": -81.348512,
+ "longitude": -26.430547,
+ "tags": [
+ "consectetur",
+ "aliqua",
+ "nostrud",
+ "tempor",
+ "excepteur",
+ "pariatur",
+ "qui"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Cherry Mcconnell"
+ },
+ {
+ "id": 1,
+ "name": "Geneva Williamson"
+ },
+ {
+ "id": 2,
+ "name": "Richardson Floyd"
+ }
+ ],
+ "greeting": "Hello, Viola Sharp! You have 4 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af09e09fa8461b0a31",
+ "index": 115,
+ "guid": "80667778-6c16-4ab8-8bdb-0ec1dd4d73e8",
+ "isActive": true,
+ "balance": "$2,631.65",
+ "picture": "http://placehold.it/32x32",
+ "age": 22,
+ "eyeColor": "blue",
+ "name": "Jefferson Hancock",
+ "gender": "male",
+ "company": "DOGSPA",
+ "email": "jeffersonhancock@dogspa.com",
+ "phone": "+1 (940) 506-3253",
+ "address": "667 Bouck Court, Kennedyville, Nevada, 6400",
+ "about": "Proident magna eiusmod ad cillum cillum anim non officia consectetur commodo irure occaecat proident. Et magna enim nisi pariatur adipisicing do do incididunt ut adipisicing in. Exercitation qui commodo cillum pariatur tempor enim irure minim sunt consequat laborum in. Amet ullamco ad commodo nisi tempor laborum fugiat tempor consectetur. Labore nisi sit cillum ex adipisicing cupidatat sunt consectetur ad amet incididunt. Laboris nostrud id officia irure ex dolore voluptate.\r\n",
+ "registered": "2014-12-01T03:27:28 -01:00",
+ "latitude": -7.57548,
+ "longitude": -127.335741,
+ "tags": [
+ "mollit",
+ "ex",
+ "in",
+ "officia",
+ "tempor",
+ "ex",
+ "Lorem"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Maryanne Walker"
+ },
+ {
+ "id": 1,
+ "name": "Janelle Curry"
+ },
+ {
+ "id": 2,
+ "name": "Hensley Burch"
+ }
+ ],
+ "greeting": "Hello, Jefferson Hancock! You have 5 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af688e7650286c338c",
+ "index": 116,
+ "guid": "41408f89-ae55-4ea3-993b-7bb141beb2e5",
+ "isActive": false,
+ "balance": "$3,975.16",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "green",
+ "name": "Eva Terrell",
+ "gender": "female",
+ "company": "ACCRUEX",
+ "email": "evaterrell@accruex.com",
+ "phone": "+1 (972) 551-2668",
+ "address": "570 Frank Court, Vallonia, New Jersey, 3964",
+ "about": "Cupidatat elit magna nostrud et Lorem eu sint eu tempor elit Lorem sit. Amet enim qui consectetur adipisicing occaecat excepteur aliquip quis incididunt non sint dolor. Consequat magna exercitation fugiat eu in qui elit sunt adipisicing do est. Consectetur mollit magna ea consequat enim ea dolor nostrud.\r\n",
+ "registered": "2014-05-31T21:40:22 -02:00",
+ "latitude": 50.990084,
+ "longitude": -57.908585,
+ "tags": [
+ "ut",
+ "nostrud",
+ "aute",
+ "irure",
+ "et",
+ "dolor",
+ "deserunt"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Hansen Hooper"
+ },
+ {
+ "id": 1,
+ "name": "Evangeline Morgan"
+ },
+ {
+ "id": 2,
+ "name": "Carson Fox"
+ }
+ ],
+ "greeting": "Hello, Eva Terrell! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afefc3939af454d94c",
+ "index": 117,
+ "guid": "e49d4585-47f7-4ca3-bddf-c639e606e94b",
+ "isActive": true,
+ "balance": "$1,726.52",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "blue",
+ "name": "House Blanchard",
+ "gender": "male",
+ "company": "ROCKABYE",
+ "email": "houseblanchard@rockabye.com",
+ "phone": "+1 (916) 589-2332",
+ "address": "345 Lawrence Street, Ironton, Marshall Islands, 1280",
+ "about": "Magna labore est adipisicing enim veniam laborum ad. Do reprehenderit labore quis excepteur fugiat non eu Lorem exercitation sit Lorem adipisicing exercitation. Cillum est officia ullamco elit sint. Reprehenderit cillum reprehenderit eu tempor eiusmod consequat labore sunt.\r\n",
+ "registered": "2014-04-01T02:55:29 -02:00",
+ "latitude": 80.524984,
+ "longitude": 144.525705,
+ "tags": [
+ "irure",
+ "qui",
+ "commodo",
+ "exercitation",
+ "mollit",
+ "ipsum",
+ "do"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Luna White"
+ },
+ {
+ "id": 1,
+ "name": "Karla Hill"
+ },
+ {
+ "id": 2,
+ "name": "Nicholson Chase"
+ }
+ ],
+ "greeting": "Hello, House Blanchard! You have 7 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af5a0d42ceb69ddbfe",
+ "index": 118,
+ "guid": "cdca9a6f-a2ef-476c-92b7-3c70161b2b7b",
+ "isActive": false,
+ "balance": "$2,569.46",
+ "picture": "http://placehold.it/32x32",
+ "age": 28,
+ "eyeColor": "blue",
+ "name": "Dorthy Bond",
+ "gender": "female",
+ "company": "ORBALIX",
+ "email": "dorthybond@orbalix.com",
+ "phone": "+1 (997) 594-2333",
+ "address": "265 Hopkins Street, Albany, Georgia, 6466",
+ "about": "Labore exercitation sit laboris pariatur pariatur est aute. Consectetur qui esse incididunt aute officia occaecat aliqua. Officia est velit mollit laborum ut fugiat. Consectetur et dolore sunt pariatur irure consectetur ut irure voluptate adipisicing nisi laboris. Ipsum eiusmod amet enim nisi Lorem. Qui dolor occaecat dolor id excepteur cillum. Commodo culpa exercitation commodo ipsum proident veniam nisi amet consequat cupidatat.\r\n",
+ "registered": "2014-03-16T02:31:16 -01:00",
+ "latitude": 9.690073,
+ "longitude": 54.556764,
+ "tags": [
+ "elit",
+ "in",
+ "ea",
+ "culpa",
+ "aliqua",
+ "sint",
+ "anim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Montoya Oconnor"
+ },
+ {
+ "id": 1,
+ "name": "Kelly Gould"
+ },
+ {
+ "id": 2,
+ "name": "Townsend Flowers"
+ }
+ ],
+ "greeting": "Hello, Dorthy Bond! You have 3 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afa40a64fd7a819e37",
+ "index": 119,
+ "guid": "b502ef15-f00e-4f4c-9c21-fd59a16f6a01",
+ "isActive": false,
+ "balance": "$1,511.13",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "brown",
+ "name": "Prince Yates",
+ "gender": "male",
+ "company": "OVOLO",
+ "email": "princeyates@ovolo.com",
+ "phone": "+1 (935) 560-2316",
+ "address": "703 Garden Street, Onton, Virgin Islands, 9365",
+ "about": "Tempor non id tempor velit est laborum aliqua ipsum cillum voluptate laboris commodo et. Non do esse quis Lorem excepteur dolor deserunt duis irure dolore aliquip ipsum aute officia. Et in sint aute ipsum proident ut. Magna ex amet enim esse excepteur aliquip.\r\n",
+ "registered": "2014-08-31T01:16:51 -02:00",
+ "latitude": -6.281448,
+ "longitude": 62.346208,
+ "tags": [
+ "eu",
+ "non",
+ "qui",
+ "qui",
+ "qui",
+ "aliquip",
+ "adipisicing"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Addie Zimmerman"
+ },
+ {
+ "id": 1,
+ "name": "Brandy Cain"
+ },
+ {
+ "id": 2,
+ "name": "Terri Allen"
+ }
+ ],
+ "greeting": "Hello, Prince Yates! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af167cd65ce49c152d",
+ "index": 120,
+ "guid": "3a180a30-6e90-44f7-90c4-d9eab6a3f2b1",
+ "isActive": false,
+ "balance": "$2,159.17",
+ "picture": "http://placehold.it/32x32",
+ "age": 30,
+ "eyeColor": "green",
+ "name": "Rutledge Schroeder",
+ "gender": "male",
+ "company": "ACCEL",
+ "email": "rutledgeschroeder@accel.com",
+ "phone": "+1 (911) 598-2777",
+ "address": "932 Wortman Avenue, Sparkill, Colorado, 1477",
+ "about": "Aute fugiat dolore et velit officia et cupidatat cupidatat dolore pariatur adipisicing dolore dolor consectetur. Nostrud aute cillum tempor in pariatur ea ad. Cillum eu ipsum proident dolor. Veniam in dolore irure quis ea nulla occaecat tempor in enim nostrud minim do. Enim enim cillum pariatur in dolor. Nisi adipisicing elit ad et nulla voluptate velit elit aliquip voluptate eu esse non ea.\r\n",
+ "registered": "2014-03-09T03:53:30 -01:00",
+ "latitude": -81.910773,
+ "longitude": -88.210435,
+ "tags": [
+ "ullamco",
+ "non",
+ "duis",
+ "occaecat",
+ "pariatur",
+ "ut",
+ "mollit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Brittney Evans"
+ },
+ {
+ "id": 1,
+ "name": "Rosario Lewis"
+ },
+ {
+ "id": 2,
+ "name": "Tommie Dale"
+ }
+ ],
+ "greeting": "Hello, Rutledge Schroeder! You have 2 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af5d6e121ff6aefeab",
+ "index": 121,
+ "guid": "487415b9-4178-4474-927b-8d6e649de368",
+ "isActive": true,
+ "balance": "$2,013.61",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "brown",
+ "name": "Margaret Bowen",
+ "gender": "female",
+ "company": "CYTREK",
+ "email": "margaretbowen@cytrek.com",
+ "phone": "+1 (900) 596-2790",
+ "address": "952 Hewes Street, Bartonsville, Vermont, 2154",
+ "about": "Reprehenderit et non aute eu non. Deserunt deserunt dolore nostrud cupidatat officia anim laborum adipisicing adipisicing. Laboris eiusmod consectetur esse aute. Officia velit cupidatat ut excepteur cupidatat aliqua. Duis irure ullamco sint id ullamco tempor reprehenderit eiusmod aute proident. Sint Lorem culpa Lorem dolore.\r\n",
+ "registered": "2014-03-15T01:29:08 -01:00",
+ "latitude": 0.508045,
+ "longitude": 58.735399,
+ "tags": [
+ "nisi",
+ "qui",
+ "eiusmod",
+ "esse",
+ "commodo",
+ "laboris",
+ "officia"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Ernestine Marshall"
+ },
+ {
+ "id": 1,
+ "name": "Selma Baker"
+ },
+ {
+ "id": 2,
+ "name": "Stewart Kinney"
+ }
+ ],
+ "greeting": "Hello, Margaret Bowen! You have 6 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afccd50418bfbe2434",
+ "index": 122,
+ "guid": "dce58a53-f4b3-499a-b55f-559349c1ad72",
+ "isActive": false,
+ "balance": "$3,771.90",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "green",
+ "name": "Mcclain Pruitt",
+ "gender": "male",
+ "company": "PHARMACON",
+ "email": "mcclainpruitt@pharmacon.com",
+ "phone": "+1 (952) 501-3857",
+ "address": "927 Cypress Avenue, Robbins, Minnesota, 6467",
+ "about": "Do cillum dolor culpa consequat adipisicing incididunt. Dolor duis voluptate nostrud consequat occaecat reprehenderit mollit in. Veniam eiusmod ipsum labore do duis tempor velit.\r\n",
+ "registered": "2014-02-02T23:31:13 -01:00",
+ "latitude": -56.468645,
+ "longitude": 48.460494,
+ "tags": [
+ "reprehenderit",
+ "ullamco",
+ "irure",
+ "reprehenderit",
+ "aute",
+ "eu",
+ "non"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Page Sullivan"
+ },
+ {
+ "id": 1,
+ "name": "Rosetta Lloyd"
+ },
+ {
+ "id": 2,
+ "name": "Jaclyn Wagner"
+ }
+ ],
+ "greeting": "Hello, Mcclain Pruitt! You have 8 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af66141984519579c2",
+ "index": 123,
+ "guid": "da1171d9-835b-452f-8bd6-1c7ea793c514",
+ "isActive": false,
+ "balance": "$1,712.83",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "brown",
+ "name": "Dana Schneider",
+ "gender": "female",
+ "company": "ZILLIDIUM",
+ "email": "danaschneider@zillidium.com",
+ "phone": "+1 (804) 438-3696",
+ "address": "141 Prospect Place, Cascades, New Mexico, 1446",
+ "about": "Id eu adipisicing eiusmod ex in cillum do aute occaecat sunt sunt ipsum veniam est. Proident Lorem aute magna enim consequat. Reprehenderit pariatur do nulla amet. Ullamco nulla elit exercitation ea veniam dolore cillum et ut tempor commodo nisi.\r\n",
+ "registered": "2014-11-24T11:07:20 -01:00",
+ "latitude": 43.587361,
+ "longitude": -179.031358,
+ "tags": [
+ "Lorem",
+ "elit",
+ "mollit",
+ "anim",
+ "exercitation",
+ "occaecat",
+ "cupidatat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Merritt Stein"
+ },
+ {
+ "id": 1,
+ "name": "Holloway Daniels"
+ },
+ {
+ "id": 2,
+ "name": "Blake Huff"
+ }
+ ],
+ "greeting": "Hello, Dana Schneider! You have 10 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af6813b61e8be7e1c1",
+ "index": 124,
+ "guid": "12324a55-510f-4584-aa72-9ef7243cee95",
+ "isActive": false,
+ "balance": "$1,851.37",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "brown",
+ "name": "Becker Rice",
+ "gender": "male",
+ "company": "OMATOM",
+ "email": "beckerrice@omatom.com",
+ "phone": "+1 (807) 514-2354",
+ "address": "237 Exeter Street, Moscow, Alabama, 2943",
+ "about": "Occaecat adipisicing aliquip tempor ullamco do occaecat nostrud ullamco id excepteur qui nisi. Excepteur veniam labore nulla consectetur anim officia aliquip id ut. Duis anim ipsum laboris sint. Velit ex officia deserunt qui consectetur adipisicing occaecat do fugiat anim in eu. Excepteur ipsum enim est est in ut nisi nisi proident.\r\n",
+ "registered": "2014-03-15T11:39:37 -01:00",
+ "latitude": -30.525497,
+ "longitude": -34.844655,
+ "tags": [
+ "occaecat",
+ "ex",
+ "dolore",
+ "sunt",
+ "sint",
+ "est",
+ "ex"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Rivas Ramsey"
+ },
+ {
+ "id": 1,
+ "name": "Simon Buchanan"
+ },
+ {
+ "id": 2,
+ "name": "Cynthia Shepard"
+ }
+ ],
+ "greeting": "Hello, Becker Rice! You have 3 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af455dbe1bee78f916",
+ "index": 125,
+ "guid": "9cf827c5-e864-4901-ba14-372016a284f3",
+ "isActive": true,
+ "balance": "$3,222.72",
+ "picture": "http://placehold.it/32x32",
+ "age": 30,
+ "eyeColor": "brown",
+ "name": "Whitley David",
+ "gender": "male",
+ "company": "DOGTOWN",
+ "email": "whitleydavid@dogtown.com",
+ "phone": "+1 (826) 522-2871",
+ "address": "103 Stuart Street, Dargan, Illinois, 8785",
+ "about": "Elit id non sint veniam. Incididunt culpa officia amet minim. Ad qui non nisi amet irure qui nisi do.\r\n",
+ "registered": "2015-02-16T13:15:45 -01:00",
+ "latitude": 57.926372,
+ "longitude": -24.737008,
+ "tags": [
+ "aute",
+ "culpa",
+ "mollit",
+ "elit",
+ "cillum",
+ "qui",
+ "nisi"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Moore Anthony"
+ },
+ {
+ "id": 1,
+ "name": "Francisca Camacho"
+ },
+ {
+ "id": 2,
+ "name": "Crosby Mann"
+ }
+ ],
+ "greeting": "Hello, Whitley David! You have 7 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af227ea66a4dee19bc",
+ "index": 126,
+ "guid": "2dc89692-047c-45e3-b84a-04d2e95fea26",
+ "isActive": true,
+ "balance": "$1,359.54",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "blue",
+ "name": "Jeannine Mcbride",
+ "gender": "female",
+ "company": "GEOFORMA",
+ "email": "jeanninemcbride@geoforma.com",
+ "phone": "+1 (879) 408-2931",
+ "address": "301 Gaylord Drive, Ola, Missouri, 6807",
+ "about": "Non qui reprehenderit nostrud sit ex aliqua. Dolore aliqua fugiat aute commodo id et occaecat reprehenderit nostrud. Do elit magna aliqua et incididunt incididunt ad qui incididunt. Ad quis elit id eu proident elit ipsum. Amet eu amet do ad aute pariatur.\r\n",
+ "registered": "2014-03-10T07:29:29 -01:00",
+ "latitude": -23.413954,
+ "longitude": 63.173887,
+ "tags": [
+ "ullamco",
+ "amet",
+ "voluptate",
+ "voluptate",
+ "anim",
+ "irure",
+ "fugiat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Tania Schultz"
+ },
+ {
+ "id": 1,
+ "name": "Carey Hopkins"
+ },
+ {
+ "id": 2,
+ "name": "Meredith Holden"
+ }
+ ],
+ "greeting": "Hello, Jeannine Mcbride! You have 6 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afc446fcb4109fe6bd",
+ "index": 127,
+ "guid": "c42471bd-1e39-4469-925d-7ea3cb30abca",
+ "isActive": false,
+ "balance": "$1,368.99",
+ "picture": "http://placehold.it/32x32",
+ "age": 30,
+ "eyeColor": "brown",
+ "name": "Rosanna Dixon",
+ "gender": "female",
+ "company": "FURNIGEER",
+ "email": "rosannadixon@furnigeer.com",
+ "phone": "+1 (828) 508-3959",
+ "address": "563 Adler Place, Fingerville, Oregon, 196",
+ "about": "Qui tempor ad reprehenderit id exercitation adipisicing pariatur et. Fugiat consequat elit cillum id in aute. Ipsum exercitation aliquip duis ad velit veniam. Nisi in nulla consectetur qui. Pariatur ipsum veniam nostrud fugiat irure voluptate eu. Veniam ut nulla esse velit. Ullamco cupidatat exercitation occaecat enim deserunt excepteur voluptate Lorem ad mollit deserunt.\r\n",
+ "registered": "2014-08-10T08:57:11 -02:00",
+ "latitude": 82.336419,
+ "longitude": -79.917365,
+ "tags": [
+ "laborum",
+ "minim",
+ "officia",
+ "consequat",
+ "esse",
+ "laboris",
+ "reprehenderit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Byers Lynch"
+ },
+ {
+ "id": 1,
+ "name": "Velma Grant"
+ },
+ {
+ "id": 2,
+ "name": "Tisha Tyson"
+ }
+ ],
+ "greeting": "Hello, Rosanna Dixon! You have 9 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afbae56cf2999d1c1a",
+ "index": 128,
+ "guid": "368a3e3c-96c8-4157-a56c-50861db5e104",
+ "isActive": false,
+ "balance": "$3,356.01",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "blue",
+ "name": "Tucker Hood",
+ "gender": "male",
+ "company": "POSHOME",
+ "email": "tuckerhood@poshome.com",
+ "phone": "+1 (837) 412-3242",
+ "address": "379 Eldert Lane, Coral, Federated States Of Micronesia, 5886",
+ "about": "Fugiat cillum qui duis exercitation ad officia nisi et culpa. Adipisicing est quis in nulla commodo ex occaecat cupidatat pariatur amet quis anim. Velit consectetur amet qui proident veniam duis commodo pariatur deserunt fugiat anim. Aliqua est aliqua anim occaecat fugiat et est enim eiusmod non. Qui culpa duis ea ea proident non cillum. Sint enim sint et officia ea culpa cupidatat aliqua tempor aliqua ullamco culpa. Fugiat consequat do minim ad magna incididunt irure.\r\n",
+ "registered": "2014-11-06T01:32:54 -01:00",
+ "latitude": 38.746173,
+ "longitude": -94.381565,
+ "tags": [
+ "consectetur",
+ "ut",
+ "esse",
+ "irure",
+ "qui",
+ "dolor",
+ "officia"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Kelley Avila"
+ },
+ {
+ "id": 1,
+ "name": "Battle Ford"
+ },
+ {
+ "id": 2,
+ "name": "Judith Reese"
+ }
+ ],
+ "greeting": "Hello, Tucker Hood! You have 4 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af1859fe5856ab9b7f",
+ "index": 129,
+ "guid": "bdd5a940-d1af-43ea-969b-e6a0484667e9",
+ "isActive": true,
+ "balance": "$1,398.64",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "green",
+ "name": "Fitzgerald Bradshaw",
+ "gender": "male",
+ "company": "ZIDANT",
+ "email": "fitzgeraldbradshaw@zidant.com",
+ "phone": "+1 (885) 484-3053",
+ "address": "406 Furman Street, Hiwasse, South Dakota, 4421",
+ "about": "Ullamco officia magna incididunt id culpa nostrud deserunt occaecat officia proident mollit sunt. Lorem dolor duis ad veniam sit nostrud Lorem exercitation tempor nisi. Laboris dolor irure aliquip excepteur fugiat exercitation officia anim consequat mollit. Ipsum exercitation sit labore cillum.\r\n",
+ "registered": "2015-04-03T09:44:23 -02:00",
+ "latitude": -60.550902,
+ "longitude": -160.141841,
+ "tags": [
+ "laboris",
+ "sunt",
+ "aute",
+ "aliqua",
+ "incididunt",
+ "duis",
+ "irure"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Marisol Doyle"
+ },
+ {
+ "id": 1,
+ "name": "Erna Pennington"
+ },
+ {
+ "id": 2,
+ "name": "Willa Boyd"
+ }
+ ],
+ "greeting": "Hello, Fitzgerald Bradshaw! You have 4 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af46a70d368d9584f6",
+ "index": 130,
+ "guid": "631cb3cf-a238-4e08-b021-82dd8a029ec2",
+ "isActive": true,
+ "balance": "$3,939.44",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "brown",
+ "name": "Mejia Macdonald",
+ "gender": "male",
+ "company": "VOLAX",
+ "email": "mejiamacdonald@volax.com",
+ "phone": "+1 (906) 466-2603",
+ "address": "624 Beayer Place, Westboro, Puerto Rico, 9157",
+ "about": "Magna eu sint quis do anim officia tempor mollit. Quis eiusmod ullamco irure veniam duis ut qui commodo consectetur tempor irure dolore occaecat irure. Cillum esse dolor Lorem laborum qui sint sunt. Et commodo ipsum consequat incididunt quis voluptate id et velit ullamco tempor sit fugiat in.\r\n",
+ "registered": "2014-09-15T05:29:49 -02:00",
+ "latitude": 54.873664,
+ "longitude": -30.967046,
+ "tags": [
+ "cillum",
+ "ex",
+ "mollit",
+ "nostrud",
+ "eu",
+ "velit",
+ "sint"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Yates Pittman"
+ },
+ {
+ "id": 1,
+ "name": "Avis Dillard"
+ },
+ {
+ "id": 2,
+ "name": "Gillespie Merrill"
+ }
+ ],
+ "greeting": "Hello, Mejia Macdonald! You have 8 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afecaacf34aba7b0ee",
+ "index": 131,
+ "guid": "ed64aeba-eab1-4090-9af3-315d57ee1058",
+ "isActive": false,
+ "balance": "$3,950.65",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "blue",
+ "name": "Shawna Pacheco",
+ "gender": "female",
+ "company": "MICRONAUT",
+ "email": "shawnapacheco@micronaut.com",
+ "phone": "+1 (800) 474-2278",
+ "address": "219 Duryea Place, Greer, Michigan, 5303",
+ "about": "Quis quis aliqua amet sunt eiusmod mollit labore adipisicing et qui et. Qui fugiat labore id proident nulla ipsum eiusmod quis eiusmod consequat eiusmod velit excepteur sit. Ut ut commodo et velit amet tempor incididunt.\r\n",
+ "registered": "2015-03-16T08:51:14 -01:00",
+ "latitude": -64.281969,
+ "longitude": -121.581436,
+ "tags": [
+ "Lorem",
+ "mollit",
+ "fugiat",
+ "ad",
+ "sit",
+ "enim",
+ "adipisicing"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Small Delgado"
+ },
+ {
+ "id": 1,
+ "name": "Perez George"
+ },
+ {
+ "id": 2,
+ "name": "Shannon Thornton"
+ }
+ ],
+ "greeting": "Hello, Shawna Pacheco! You have 6 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afa9665e2fea649df1",
+ "index": 132,
+ "guid": "ae6afeb4-59a4-4305-a4e1-1a0ece6b0ce1",
+ "isActive": true,
+ "balance": "$3,129.88",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "brown",
+ "name": "Dora Blackburn",
+ "gender": "female",
+ "company": "ZENTILITY",
+ "email": "dorablackburn@zentility.com",
+ "phone": "+1 (912) 563-2799",
+ "address": "988 Ditmas Avenue, Cazadero, Nebraska, 2473",
+ "about": "Labore sunt mollit laborum ut proident eiusmod deserunt labore do. Pariatur velit proident minim eiusmod consequat consequat in cillum. Fugiat sunt tempor excepteur sit ut magna cillum.\r\n",
+ "registered": "2015-01-15T04:07:06 -01:00",
+ "latitude": -62.786908,
+ "longitude": 104.724633,
+ "tags": [
+ "reprehenderit",
+ "fugiat",
+ "anim",
+ "do",
+ "dolore",
+ "in",
+ "laborum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Goldie Mccarty"
+ },
+ {
+ "id": 1,
+ "name": "Norma Trevino"
+ },
+ {
+ "id": 2,
+ "name": "Silvia Peters"
+ }
+ ],
+ "greeting": "Hello, Dora Blackburn! You have 2 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af8eeac5c748e846f3",
+ "index": 133,
+ "guid": "22529534-c071-40c5-aaca-e7a57323bfb2",
+ "isActive": true,
+ "balance": "$3,063.23",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "brown",
+ "name": "Jo Phelps",
+ "gender": "female",
+ "company": "UNIA",
+ "email": "jophelps@unia.com",
+ "phone": "+1 (881) 569-2898",
+ "address": "701 Knight Court, Islandia, Wyoming, 3056",
+ "about": "Lorem sunt do reprehenderit esse officia in in deserunt occaecat amet nostrud aliquip ex. Mollit est voluptate ad adipisicing laborum pariatur et reprehenderit. Cillum et occaecat commodo ex excepteur aute voluptate laborum deserunt magna incididunt. Excepteur qui consectetur et mollit cillum ipsum quis nisi anim nostrud ex labore. Aliquip esse deserunt adipisicing consequat do qui amet.\r\n",
+ "registered": "2014-10-01T10:28:43 -02:00",
+ "latitude": 34.274503,
+ "longitude": -160.736323,
+ "tags": [
+ "occaecat",
+ "pariatur",
+ "non",
+ "ullamco",
+ "ipsum",
+ "eu",
+ "esse"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Velez Boyle"
+ },
+ {
+ "id": 1,
+ "name": "Samantha Monroe"
+ },
+ {
+ "id": 2,
+ "name": "Mendoza Powell"
+ }
+ ],
+ "greeting": "Hello, Jo Phelps! You have 6 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03affcc66a8edd4fe967",
+ "index": 134,
+ "guid": "78cb3b74-14e6-44f1-9772-93bcbd66614c",
+ "isActive": true,
+ "balance": "$2,229.87",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "green",
+ "name": "Angelita Noel",
+ "gender": "female",
+ "company": "ISOLOGIA",
+ "email": "angelitanoel@isologia.com",
+ "phone": "+1 (917) 588-2715",
+ "address": "393 Highland Avenue, Fannett, California, 3593",
+ "about": "Pariatur adipisicing anim enim sunt nisi veniam. Id excepteur nostrud occaecat proident fugiat cillum. Ullamco est sit deserunt ex nulla nulla.\r\n",
+ "registered": "2015-01-28T22:43:54 -01:00",
+ "latitude": 88.214122,
+ "longitude": -135.219689,
+ "tags": [
+ "adipisicing",
+ "voluptate",
+ "ipsum",
+ "cillum",
+ "nisi",
+ "et",
+ "laboris"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Renee Mills"
+ },
+ {
+ "id": 1,
+ "name": "Sofia Nieves"
+ },
+ {
+ "id": 2,
+ "name": "Lynette Casey"
+ }
+ ],
+ "greeting": "Hello, Angelita Noel! You have 7 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af18b1d7ed1a414eea",
+ "index": 135,
+ "guid": "3b38c866-241b-426d-9dc9-615a4f5b65eb",
+ "isActive": false,
+ "balance": "$3,918.53",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "brown",
+ "name": "Lucille Foster",
+ "gender": "female",
+ "company": "MEDIOT",
+ "email": "lucillefoster@mediot.com",
+ "phone": "+1 (901) 529-2355",
+ "address": "574 Ashland Place, Eden, Indiana, 8787",
+ "about": "Magna labore est enim amet ea mollit laboris in et nostrud deserunt. Amet tempor sunt fugiat consequat culpa deserunt pariatur cillum est tempor deserunt incididunt deserunt. Reprehenderit enim sunt dolore dolore irure. Laboris qui magna nisi duis laborum deserunt.\r\n",
+ "registered": "2014-12-10T10:29:28 -01:00",
+ "latitude": 56.468436,
+ "longitude": -69.942543,
+ "tags": [
+ "consequat",
+ "sint",
+ "non",
+ "ea",
+ "cupidatat",
+ "velit",
+ "ipsum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Terra Santana"
+ },
+ {
+ "id": 1,
+ "name": "Janna Reynolds"
+ },
+ {
+ "id": 2,
+ "name": "Yvonne Hamilton"
+ }
+ ],
+ "greeting": "Hello, Lucille Foster! You have 3 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af0d4ae0371c49ce86",
+ "index": 136,
+ "guid": "8657ee45-62fd-4815-acf2-3855a9f9412b",
+ "isActive": false,
+ "balance": "$1,064.77",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "blue",
+ "name": "Candice Edwards",
+ "gender": "female",
+ "company": "JETSILK",
+ "email": "candiceedwards@jetsilk.com",
+ "phone": "+1 (938) 563-2867",
+ "address": "612 Calyer Street, Wheaton, Palau, 6991",
+ "about": "Laboris velit officia mollit fugiat esse ipsum aliqua. Dolor ut excepteur ullamco aliquip magna. Eiusmod enim ullamco adipisicing aute nulla cillum. Ipsum enim voluptate adipisicing officia do adipisicing. Culpa ad aute sunt aliqua in dolor reprehenderit culpa ad laboris sit.\r\n",
+ "registered": "2014-12-07T13:22:58 -01:00",
+ "latitude": -62.815302,
+ "longitude": -173.646313,
+ "tags": [
+ "amet",
+ "cupidatat",
+ "labore",
+ "reprehenderit",
+ "deserunt",
+ "proident",
+ "adipisicing"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Helene Short"
+ },
+ {
+ "id": 1,
+ "name": "Mullins Randall"
+ },
+ {
+ "id": 2,
+ "name": "Farrell England"
+ }
+ ],
+ "greeting": "Hello, Candice Edwards! You have 2 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03affafa8767b5735087",
+ "index": 137,
+ "guid": "10f1b82b-4afd-41d4-83ca-c02aa4ceb115",
+ "isActive": false,
+ "balance": "$2,689.19",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "blue",
+ "name": "Crawford Ewing",
+ "gender": "male",
+ "company": "GLEAMINK",
+ "email": "crawfordewing@gleamink.com",
+ "phone": "+1 (881) 549-2021",
+ "address": "649 Hyman Court, Rose, Northern Mariana Islands, 4769",
+ "about": "Nostrud magna commodo ea id labore sit mollit magna. Ex tempor dolore laborum sunt non elit. Irure nostrud incididunt duis occaecat aute culpa enim ad tempor nulla voluptate labore laborum.\r\n",
+ "registered": "2014-05-19T08:37:13 -02:00",
+ "latitude": -35.176506,
+ "longitude": -38.208465,
+ "tags": [
+ "est",
+ "laborum",
+ "laboris",
+ "sit",
+ "incididunt",
+ "eu",
+ "occaecat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Hall Mcfarland"
+ },
+ {
+ "id": 1,
+ "name": "Myrna Thomas"
+ },
+ {
+ "id": 2,
+ "name": "Kim Wilkinson"
+ }
+ ],
+ "greeting": "Hello, Crawford Ewing! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af320b24ec816de7a1",
+ "index": 138,
+ "guid": "321af363-969a-4f6e-8aef-3708b280bf0b",
+ "isActive": false,
+ "balance": "$3,828.48",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "green",
+ "name": "Mclaughlin House",
+ "gender": "male",
+ "company": "ACLIMA",
+ "email": "mclaughlinhouse@aclima.com",
+ "phone": "+1 (880) 505-2935",
+ "address": "347 Ridgecrest Terrace, Katonah, Washington, 4228",
+ "about": "Ut dolor ut voluptate eiusmod ullamco deserunt pariatur minim cillum fugiat occaecat minim aute eu. Sit sint deserunt minim cillum. Ipsum sunt id labore non. In duis cillum culpa exercitation. Tempor nostrud officia aute aute velit nostrud sunt ipsum. Qui culpa elit enim minim sunt et magna occaecat aliqua.\r\n",
+ "registered": "2015-01-23T17:28:31 -01:00",
+ "latitude": -55.26802,
+ "longitude": -157.204731,
+ "tags": [
+ "in",
+ "exercitation",
+ "duis",
+ "pariatur",
+ "nisi",
+ "ad",
+ "id"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Mccullough Wilson"
+ },
+ {
+ "id": 1,
+ "name": "Peck Whitehead"
+ },
+ {
+ "id": 2,
+ "name": "Ruiz Reyes"
+ }
+ ],
+ "greeting": "Hello, Mclaughlin House! You have 6 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afe230f4cc42d5ce8d",
+ "index": 139,
+ "guid": "39d2b460-2966-428e-bf02-2c1f0634bdfd",
+ "isActive": true,
+ "balance": "$1,555.48",
+ "picture": "http://placehold.it/32x32",
+ "age": 30,
+ "eyeColor": "green",
+ "name": "Robinson Hammond",
+ "gender": "male",
+ "company": "HOMELUX",
+ "email": "robinsonhammond@homelux.com",
+ "phone": "+1 (986) 485-2378",
+ "address": "642 Church Avenue, Starks, Massachusetts, 1673",
+ "about": "In cillum elit in velit excepteur. Laborum enim culpa velit excepteur ullamco duis ipsum dolore. Amet reprehenderit ut et minim consectetur commodo tempor excepteur labore esse in commodo incididunt. Nulla excepteur consectetur dolor deserunt enim enim excepteur cillum ea reprehenderit. Fugiat esse nulla fugiat consectetur ullamco occaecat duis tempor Lorem. Exercitation dolor sunt ex ut ad ipsum consequat.\r\n",
+ "registered": "2014-02-24T03:33:41 -01:00",
+ "latitude": 81.652274,
+ "longitude": 64.241683,
+ "tags": [
+ "fugiat",
+ "incididunt",
+ "occaecat",
+ "velit",
+ "irure",
+ "et",
+ "dolor"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Suzanne Johnson"
+ },
+ {
+ "id": 1,
+ "name": "Morrison Hobbs"
+ },
+ {
+ "id": 2,
+ "name": "Tonia Faulkner"
+ }
+ ],
+ "greeting": "Hello, Robinson Hammond! You have 5 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af65fd712e2e62b564",
+ "index": 140,
+ "guid": "164d4d61-f77b-49ea-8bb8-85ad2d5276bb",
+ "isActive": true,
+ "balance": "$3,471.22",
+ "picture": "http://placehold.it/32x32",
+ "age": 22,
+ "eyeColor": "brown",
+ "name": "Rhoda Ayers",
+ "gender": "female",
+ "company": "CIRCUM",
+ "email": "rhodaayers@circum.com",
+ "phone": "+1 (896) 404-2891",
+ "address": "882 Homecrest Court, Bannock, Tennessee, 866",
+ "about": "Anim laboris esse reprehenderit magna duis nisi in cillum. Excepteur ex amet sint ut elit cupidatat exercitation reprehenderit consequat aute non irure. Enim laborum esse Lorem aute incididunt dolore laborum consectetur magna qui nulla sint veniam. Laboris proident velit adipisicing enim commodo ea ipsum.\r\n",
+ "registered": "2014-07-24T23:54:47 -02:00",
+ "latitude": 38.291747,
+ "longitude": 3.240288,
+ "tags": [
+ "do",
+ "consectetur",
+ "irure",
+ "laboris",
+ "in",
+ "labore",
+ "non"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Coleman Fuentes"
+ },
+ {
+ "id": 1,
+ "name": "Taylor Sargent"
+ },
+ {
+ "id": 2,
+ "name": "Rhodes Nielsen"
+ }
+ ],
+ "greeting": "Hello, Rhoda Ayers! You have 5 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af61d83b9871fe8f32",
+ "index": 141,
+ "guid": "387259e6-d487-462c-bde3-6b10fed67ed2",
+ "isActive": false,
+ "balance": "$3,586.38",
+ "picture": "http://placehold.it/32x32",
+ "age": 22,
+ "eyeColor": "blue",
+ "name": "Steele Barlow",
+ "gender": "male",
+ "company": "ZAYA",
+ "email": "steelebarlow@zaya.com",
+ "phone": "+1 (862) 444-2720",
+ "address": "570 Pioneer Street, Bluetown, Wisconsin, 5549",
+ "about": "Qui non ipsum magna culpa officia in qui. Excepteur qui eiusmod nostrud ea officia tempor quis tempor. Dolore aliqua dolor eiusmod et nisi cupidatat culpa sint aute. Sint aliqua minim consectetur non occaecat ex ut mollit aliqua consectetur. Voluptate occaecat irure do mollit cillum esse qui. Excepteur ullamco reprehenderit aliqua est voluptate adipisicing irure quis incididunt aliquip ullamco.\r\n",
+ "registered": "2014-02-02T17:27:26 -01:00",
+ "latitude": 58.255141,
+ "longitude": -97.783083,
+ "tags": [
+ "sunt",
+ "in",
+ "exercitation",
+ "id",
+ "est",
+ "deserunt",
+ "incididunt"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Crystal Wyatt"
+ },
+ {
+ "id": 1,
+ "name": "Jannie Mccall"
+ },
+ {
+ "id": 2,
+ "name": "Pruitt Hall"
+ }
+ ],
+ "greeting": "Hello, Steele Barlow! You have 2 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af6a637fa973b66be7",
+ "index": 142,
+ "guid": "dcdf238b-9257-47cb-b355-de5461c35ead",
+ "isActive": true,
+ "balance": "$1,868.33",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "green",
+ "name": "Rogers Perry",
+ "gender": "male",
+ "company": "EMPIRICA",
+ "email": "rogersperry@empirica.com",
+ "phone": "+1 (981) 530-3850",
+ "address": "352 Stryker Court, Itmann, Delaware, 4203",
+ "about": "Minim officia qui ipsum incididunt cupidatat do eu excepteur consectetur adipisicing sit Lorem labore proident. Excepteur duis minim non adipisicing non est proident adipisicing irure reprehenderit dolore. Occaecat tempor sint reprehenderit Lorem nostrud ut nulla culpa nisi deserunt adipisicing fugiat pariatur dolor. Eu reprehenderit nulla sit eu quis proident aute culpa.\r\n",
+ "registered": "2015-04-14T16:49:11 -02:00",
+ "latitude": 65.038472,
+ "longitude": 86.112638,
+ "tags": [
+ "velit",
+ "commodo",
+ "amet",
+ "veniam",
+ "aliqua",
+ "sit",
+ "cupidatat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Robert Mueller"
+ },
+ {
+ "id": 1,
+ "name": "Hayden Clemons"
+ },
+ {
+ "id": 2,
+ "name": "Booth Rutledge"
+ }
+ ],
+ "greeting": "Hello, Rogers Perry! You have 4 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af29d1e5bff8c8a30f",
+ "index": 143,
+ "guid": "97b9ac4e-886b-41d6-b9b6-90a1f08267a7",
+ "isActive": false,
+ "balance": "$1,816.62",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "green",
+ "name": "Owen Holt",
+ "gender": "male",
+ "company": "MITROC",
+ "email": "owenholt@mitroc.com",
+ "phone": "+1 (956) 406-2688",
+ "address": "772 Schermerhorn Street, Williston, American Samoa, 2084",
+ "about": "Ut et laboris excepteur culpa id esse cillum aute dolor nostrud nostrud commodo deserunt duis. Eiusmod commodo qui enim irure occaecat. Aliquip sunt incididunt labore qui voluptate id officia labore laborum. Exercitation ullamco ipsum consectetur cupidatat ex dolor ut nostrud pariatur mollit mollit dolor. Officia minim laborum cillum irure laborum minim velit magna.\r\n",
+ "registered": "2014-07-02T05:09:25 -02:00",
+ "latitude": -48.668051,
+ "longitude": -162.237187,
+ "tags": [
+ "in",
+ "aliquip",
+ "cupidatat",
+ "veniam",
+ "deserunt",
+ "quis",
+ "reprehenderit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Johanna Francis"
+ },
+ {
+ "id": 1,
+ "name": "Chandler Dillon"
+ },
+ {
+ "id": 2,
+ "name": "Tameka Roth"
+ }
+ ],
+ "greeting": "Hello, Owen Holt! You have 4 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af8935883d95443388",
+ "index": 144,
+ "guid": "a1bb1924-63b3-4e81-9f69-9be39326983a",
+ "isActive": true,
+ "balance": "$2,029.07",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "green",
+ "name": "Levy Burks",
+ "gender": "male",
+ "company": "ZILLANET",
+ "email": "levyburks@zillanet.com",
+ "phone": "+1 (957) 539-3216",
+ "address": "672 Oxford Walk, Kenwood, Ohio, 2096",
+ "about": "Occaecat ut minim eiusmod velit duis aute veniam amet proident aute laborum esse. Qui laborum commodo et ipsum nostrud consectetur mollit deserunt cillum enim qui esse culpa mollit. Dolor aliqua aute nostrud fugiat nulla aliquip elit labore proident id elit in magna. Aliquip et ut cupidatat magna minim elit duis eu velit labore.\r\n",
+ "registered": "2014-08-25T06:27:50 -02:00",
+ "latitude": 7.783321,
+ "longitude": 13.943999,
+ "tags": [
+ "et",
+ "proident",
+ "anim",
+ "proident",
+ "Lorem",
+ "commodo",
+ "consequat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Solomon Rose"
+ },
+ {
+ "id": 1,
+ "name": "Beach Bernard"
+ },
+ {
+ "id": 2,
+ "name": "Cruz Robles"
+ }
+ ],
+ "greeting": "Hello, Levy Burks! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af9e767ce0d587d6d0",
+ "index": 145,
+ "guid": "1c946e66-fd2f-4e07-b34d-49234c4a3490",
+ "isActive": true,
+ "balance": "$1,223.30",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "blue",
+ "name": "Ball Gonzales",
+ "gender": "male",
+ "company": "TASMANIA",
+ "email": "ballgonzales@tasmania.com",
+ "phone": "+1 (811) 584-2615",
+ "address": "946 Independence Avenue, Tioga, Louisiana, 5603",
+ "about": "Reprehenderit dolor consectetur occaecat dolor eiusmod. Occaecat eiusmod tempor ipsum adipisicing ipsum qui magna ipsum ex. Eu ipsum enim est fugiat elit voluptate cupidatat laborum labore exercitation laboris nisi. Commodo reprehenderit occaecat commodo consequat culpa duis fugiat occaecat pariatur minim. Non ullamco ex esse sit minim quis nulla dolor magna adipisicing aliquip irure voluptate. Nisi velit et ea consectetur excepteur qui minim consectetur.\r\n",
+ "registered": "2015-01-18T18:00:32 -01:00",
+ "latitude": -14.61634,
+ "longitude": -161.318463,
+ "tags": [
+ "in",
+ "eu",
+ "occaecat",
+ "irure",
+ "mollit",
+ "ex",
+ "amet"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Dunlap Brooks"
+ },
+ {
+ "id": 1,
+ "name": "Leona Bolton"
+ },
+ {
+ "id": 2,
+ "name": "Kelly Lawson"
+ }
+ ],
+ "greeting": "Hello, Ball Gonzales! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03affeb12fd9ee85f1a7",
+ "index": 146,
+ "guid": "daf2a26e-c873-4243-b39e-6d602c894042",
+ "isActive": false,
+ "balance": "$2,922.09",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "green",
+ "name": "Louise Carrillo",
+ "gender": "female",
+ "company": "COLAIRE",
+ "email": "louisecarrillo@colaire.com",
+ "phone": "+1 (922) 452-3716",
+ "address": "225 Glenmore Avenue, Croom, Idaho, 1797",
+ "about": "Culpa ullamco est excepteur deserunt minim magna sit sunt. Id pariatur nulla in Lorem cupidatat. Eu quis amet tempor fugiat pariatur veniam dolor. Veniam occaecat laboris consectetur ad minim labore ipsum culpa ullamco velit aliqua.\r\n",
+ "registered": "2014-01-14T04:01:13 -01:00",
+ "latitude": 61.679556,
+ "longitude": -175.795407,
+ "tags": [
+ "non",
+ "Lorem",
+ "esse",
+ "ad",
+ "excepteur",
+ "aliqua",
+ "dolore"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "April Parsons"
+ },
+ {
+ "id": 1,
+ "name": "Janette Randolph"
+ },
+ {
+ "id": 2,
+ "name": "Haynes Reed"
+ }
+ ],
+ "greeting": "Hello, Louise Carrillo! You have 10 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af418669c0aa564197",
+ "index": 147,
+ "guid": "5f432142-9d06-4761-9ea9-bf2c0367ffcd",
+ "isActive": true,
+ "balance": "$1,637.22",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "brown",
+ "name": "Allie Webster",
+ "gender": "female",
+ "company": "VETRON",
+ "email": "alliewebster@vetron.com",
+ "phone": "+1 (857) 508-2651",
+ "address": "254 Albee Square, Drytown, New Hampshire, 8964",
+ "about": "Eiusmod nostrud veniam consequat culpa aliquip. Qui culpa nulla excepteur ad non cupidatat excepteur ut. Quis deserunt nisi est commodo labore veniam pariatur labore. Nulla aliqua culpa excepteur ut sit quis Lorem.\r\n",
+ "registered": "2015-02-17T05:53:50 -01:00",
+ "latitude": -78.793981,
+ "longitude": -23.765378,
+ "tags": [
+ "laboris",
+ "proident",
+ "nisi",
+ "dolore",
+ "ut",
+ "magna",
+ "magna"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Brigitte Henson"
+ },
+ {
+ "id": 1,
+ "name": "Elsie Jacobs"
+ },
+ {
+ "id": 2,
+ "name": "Sheppard Kelley"
+ }
+ ],
+ "greeting": "Hello, Allie Webster! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af97f4928f6f496829",
+ "index": 148,
+ "guid": "3d3035e7-4f47-435b-b423-892361be91db",
+ "isActive": true,
+ "balance": "$3,843.32",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "green",
+ "name": "Roth Greene",
+ "gender": "male",
+ "company": "QUONK",
+ "email": "rothgreene@quonk.com",
+ "phone": "+1 (963) 569-2021",
+ "address": "898 Charles Place, Kapowsin, Maine, 7501",
+ "about": "Fugiat labore consequat aliqua tempor ex velit ad nostrud esse aute non est cillum. Deserunt fugiat pariatur esse dolore aliqua elit mollit sint et aute deserunt sit consectetur ut. Commodo officia esse proident laboris ex dolore aute deserunt est elit deserunt duis.\r\n",
+ "registered": "2014-01-20T01:36:21 -01:00",
+ "latitude": -71.047737,
+ "longitude": -68.010302,
+ "tags": [
+ "qui",
+ "proident",
+ "commodo",
+ "esse",
+ "enim",
+ "consequat",
+ "nulla"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Amparo Burt"
+ },
+ {
+ "id": 1,
+ "name": "Cameron Osborn"
+ },
+ {
+ "id": 2,
+ "name": "Montgomery Sheppard"
+ }
+ ],
+ "greeting": "Hello, Roth Greene! You have 6 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af4cf344b579c989b6",
+ "index": 149,
+ "guid": "993c86a0-30fb-425b-acca-ddfb951ee934",
+ "isActive": false,
+ "balance": "$1,824.60",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "brown",
+ "name": "Peterson Oneal",
+ "gender": "male",
+ "company": "KYAGORO",
+ "email": "petersononeal@kyagoro.com",
+ "phone": "+1 (980) 542-2751",
+ "address": "142 Kingsway Place, Lindcove, Utah, 4444",
+ "about": "Eu Lorem magna ea sint dolore adipisicing enim exercitation. Nulla aliquip cillum occaecat exercitation commodo laborum veniam id ut eiusmod ex non excepteur. Magna quis ex eiusmod exercitation ut voluptate dolor occaecat officia sit adipisicing cillum magna. Mollit laborum officia consequat proident eu reprehenderit id. Laboris nisi nostrud voluptate ea. Exercitation reprehenderit consequat consequat officia laboris amet qui aliqua nostrud cillum dolore officia.\r\n",
+ "registered": "2014-07-05T02:01:48 -02:00",
+ "latitude": 60.813447,
+ "longitude": -18.531146,
+ "tags": [
+ "voluptate",
+ "sunt",
+ "cupidatat",
+ "dolore",
+ "adipisicing",
+ "dolore",
+ "dolor"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Howe Steele"
+ },
+ {
+ "id": 1,
+ "name": "Katrina Burris"
+ },
+ {
+ "id": 2,
+ "name": "Roseann Willis"
+ }
+ ],
+ "greeting": "Hello, Peterson Oneal! You have 9 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af2aeb8cdf285ebdce",
+ "index": 150,
+ "guid": "5ee48304-f580-430f-880d-d79dc86e5b6b",
+ "isActive": true,
+ "balance": "$1,352.90",
+ "picture": "http://placehold.it/32x32",
+ "age": 21,
+ "eyeColor": "blue",
+ "name": "Jeri Sweet",
+ "gender": "female",
+ "company": "COMTEXT",
+ "email": "jerisweet@comtext.com",
+ "phone": "+1 (918) 432-2014",
+ "address": "594 Eastern Parkway, Hampstead, West Virginia, 8553",
+ "about": "Enim id reprehenderit adipisicing mollit mollit ea ea et. Sint ut est laborum qui magna in mollit qui quis. Eiusmod occaecat elit minim laborum officia proident ea deserunt nostrud. Laborum nostrud velit incididunt deserunt veniam incididunt eu. Incididunt non ipsum occaecat excepteur minim sint eiusmod ipsum adipisicing. Velit nulla quis adipisicing eu aute sit commodo sit cillum esse sint elit aute.\r\n",
+ "registered": "2015-04-08T04:40:53 -02:00",
+ "latitude": 55.944714,
+ "longitude": 117.543142,
+ "tags": [
+ "consectetur",
+ "aliquip",
+ "laboris",
+ "nostrud",
+ "anim",
+ "eiusmod",
+ "commodo"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Ellen Berg"
+ },
+ {
+ "id": 1,
+ "name": "Church Castaneda"
+ },
+ {
+ "id": 2,
+ "name": "Sutton Potter"
+ }
+ ],
+ "greeting": "Hello, Jeri Sweet! You have 10 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af117705ab4db66a4e",
+ "index": 151,
+ "guid": "56d5de5b-be39-4ea6-87a8-ab30b18b654c",
+ "isActive": true,
+ "balance": "$3,404.19",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "brown",
+ "name": "Maritza Phillips",
+ "gender": "female",
+ "company": "LIQUICOM",
+ "email": "maritzaphillips@liquicom.com",
+ "phone": "+1 (934) 455-2397",
+ "address": "558 Woodpoint Road, Walland, Virginia, 8246",
+ "about": "Sunt eu non proident qui anim ad anim dolor in est est. Lorem enim eu adipisicing id sunt cupidatat minim velit. Reprehenderit quis do laboris fugiat nostrud et pariatur. Tempor Lorem exercitation cupidatat non labore aute ad amet amet labore fugiat in. Id labore pariatur commodo occaecat exercitation sint laboris amet voluptate ut adipisicing. Anim velit nostrud eu incididunt laborum deserunt ea mollit eiusmod commodo adipisicing duis. Do mollit pariatur irure est veniam eiusmod commodo irure laboris laborum qui.\r\n",
+ "registered": "2014-06-15T10:01:37 -02:00",
+ "latitude": -42.449411,
+ "longitude": 144.818691,
+ "tags": [
+ "velit",
+ "ad",
+ "ullamco",
+ "nisi",
+ "anim",
+ "sit",
+ "nulla"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Jacklyn Franks"
+ },
+ {
+ "id": 1,
+ "name": "Tasha Everett"
+ },
+ {
+ "id": 2,
+ "name": "Morgan Hendrix"
+ }
+ ],
+ "greeting": "Hello, Maritza Phillips! You have 7 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af0df4a014c88eb175",
+ "index": 152,
+ "guid": "18d19d3e-61ad-4f62-a39a-39a603241ad6",
+ "isActive": false,
+ "balance": "$3,831.52",
+ "picture": "http://placehold.it/32x32",
+ "age": 26,
+ "eyeColor": "blue",
+ "name": "Caroline Barton",
+ "gender": "female",
+ "company": "MARQET",
+ "email": "carolinebarton@marqet.com",
+ "phone": "+1 (973) 589-2341",
+ "address": "308 Franklin Avenue, Oneida, Florida, 5086",
+ "about": "Nulla Lorem minim pariatur incididunt aute occaecat velit proident sint ea pariatur. Labore minim mollit sit ipsum irure mollit. Officia irure non ut enim consequat sit aliqua consequat adipisicing Lorem ipsum do est. Consectetur proident eiusmod ullamco proident. Cillum cupidatat nisi sint do deserunt sunt proident cupidatat culpa commodo adipisicing do. Ex et duis est laborum mollit ullamco aliquip voluptate cupidatat commodo nulla deserunt.\r\n",
+ "registered": "2014-09-11T01:49:37 -02:00",
+ "latitude": -87.972368,
+ "longitude": -115.053278,
+ "tags": [
+ "non",
+ "commodo",
+ "et",
+ "labore",
+ "mollit",
+ "duis",
+ "magna"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Kerr Myers"
+ },
+ {
+ "id": 1,
+ "name": "Carla Hogan"
+ },
+ {
+ "id": 2,
+ "name": "Mcdonald Stuart"
+ }
+ ],
+ "greeting": "Hello, Caroline Barton! You have 5 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af4e39600902c6e470",
+ "index": 153,
+ "guid": "375e3244-c9da-4cd4-8802-f2817ffc8164",
+ "isActive": true,
+ "balance": "$3,371.20",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "blue",
+ "name": "Dotson Watts",
+ "gender": "male",
+ "company": "ZOUNDS",
+ "email": "dotsonwatts@zounds.com",
+ "phone": "+1 (807) 422-2513",
+ "address": "533 Joralemon Street, Brethren, Texas, 8541",
+ "about": "Et id in nisi aliqua excepteur voluptate ex. Exercitation eiusmod sunt nostrud reprehenderit quis eu incididunt aliquip fugiat. Id consequat culpa aliquip sint nostrud. Pariatur eiusmod irure ullamco elit ipsum enim sint cupidatat magna ipsum incididunt. Laboris adipisicing anim sunt eiusmod. Officia cupidatat officia sint minim laboris cupidatat cupidatat magna voluptate aliqua.\r\n",
+ "registered": "2014-03-29T10:38:14 -01:00",
+ "latitude": 30.355224,
+ "longitude": -51.626908,
+ "tags": [
+ "esse",
+ "mollit",
+ "mollit",
+ "velit",
+ "voluptate",
+ "cupidatat",
+ "esse"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Faye Owen"
+ },
+ {
+ "id": 1,
+ "name": "Debra Rosa"
+ },
+ {
+ "id": 2,
+ "name": "Cathleen Richardson"
+ }
+ ],
+ "greeting": "Hello, Dotson Watts! You have 2 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af681a1883612f8091",
+ "index": 154,
+ "guid": "17245afe-6f02-48ac-99ba-2b3e5e10f167",
+ "isActive": false,
+ "balance": "$3,233.51",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "blue",
+ "name": "Cannon Conner",
+ "gender": "male",
+ "company": "PRIMORDIA",
+ "email": "cannonconner@primordia.com",
+ "phone": "+1 (931) 436-3128",
+ "address": "940 Monroe Street, Glidden, Guam, 7831",
+ "about": "Nulla aute culpa elit sunt consequat veniam laboris duis qui. Est excepteur officia dolore tempor labore commodo elit consectetur laboris proident proident voluptate velit in. Ullamco duis velit labore ad nostrud esse proident magna non. Quis et commodo veniam sit. Ad elit anim adipisicing minim adipisicing nulla laboris commodo minim ad dolore culpa. Reprehenderit nisi cillum culpa pariatur et aliqua ex elit veniam do irure officia dolor consequat.\r\n",
+ "registered": "2014-12-20T09:41:07 -01:00",
+ "latitude": 33.157788,
+ "longitude": -35.203219,
+ "tags": [
+ "veniam",
+ "do",
+ "velit",
+ "voluptate",
+ "minim",
+ "tempor",
+ "elit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Bender Winters"
+ },
+ {
+ "id": 1,
+ "name": "Flynn Nelson"
+ },
+ {
+ "id": 2,
+ "name": "Dawn Douglas"
+ }
+ ],
+ "greeting": "Hello, Cannon Conner! You have 9 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03aff62e9258bb5361bd",
+ "index": 155,
+ "guid": "cd99217e-6cc1-411e-bd2c-6b9d19386a28",
+ "isActive": true,
+ "balance": "$3,428.10",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "blue",
+ "name": "King Mays",
+ "gender": "male",
+ "company": "STEELTAB",
+ "email": "kingmays@steeltab.com",
+ "phone": "+1 (923) 418-2237",
+ "address": "418 Riverdale Avenue, Gadsden, Alaska, 8942",
+ "about": "Eu deserunt mollit commodo minim minim non. Qui consequat Lorem aute labore aliquip aliquip nisi ipsum. Enim aute cillum do aliquip ad pariatur consectetur aute.\r\n",
+ "registered": "2014-07-24T12:35:46 -02:00",
+ "latitude": 38.510465,
+ "longitude": 6.479282,
+ "tags": [
+ "irure",
+ "elit",
+ "deserunt",
+ "magna",
+ "aliqua",
+ "elit",
+ "tempor"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Mckenzie Perkins"
+ },
+ {
+ "id": 1,
+ "name": "Stephenson Bradford"
+ },
+ {
+ "id": 2,
+ "name": "Marietta Ferrell"
+ }
+ ],
+ "greeting": "Hello, King Mays! You have 4 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afaff3c723d193d805",
+ "index": 156,
+ "guid": "e5983828-aa53-4809-83c7-5df351013626",
+ "isActive": true,
+ "balance": "$2,946.11",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "brown",
+ "name": "Medina Contreras",
+ "gender": "male",
+ "company": "IMAGINART",
+ "email": "medinacontreras@imaginart.com",
+ "phone": "+1 (832) 559-3415",
+ "address": "206 Raleigh Place, Veyo, District Of Columbia, 3713",
+ "about": "Nisi mollit nisi voluptate nisi proident enim id anim aliquip elit adipisicing. Officia cupidatat labore enim occaecat proident minim Lorem consectetur Lorem dolor velit laborum enim laborum. Aliquip eiusmod proident nisi culpa enim aliqua ex duis ullamco fugiat dolore ut do. Nisi laboris qui deserunt Lorem aute dolor enim duis.\r\n",
+ "registered": "2015-04-14T16:55:24 -02:00",
+ "latitude": 69.472724,
+ "longitude": -161.462229,
+ "tags": [
+ "id",
+ "reprehenderit",
+ "non",
+ "cillum",
+ "exercitation",
+ "esse",
+ "consequat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Helena Adams"
+ },
+ {
+ "id": 1,
+ "name": "Floyd Dejesus"
+ },
+ {
+ "id": 2,
+ "name": "Alta Lee"
+ }
+ ],
+ "greeting": "Hello, Medina Contreras! You have 1 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03aff6de1706062df5bc",
+ "index": 157,
+ "guid": "2f538ffa-3052-41a4-9f19-8768129c3758",
+ "isActive": true,
+ "balance": "$3,899.99",
+ "picture": "http://placehold.it/32x32",
+ "age": 22,
+ "eyeColor": "green",
+ "name": "Kirk Sosa",
+ "gender": "male",
+ "company": "VIAGRAND",
+ "email": "kirksosa@viagrand.com",
+ "phone": "+1 (945) 495-2204",
+ "address": "895 Pierrepont Place, Austinburg, New York, 6527",
+ "about": "Enim duis magna deserunt occaecat. Adipisicing reprehenderit adipisicing magna ea officia ad laborum dolore aliqua incididunt. Exercitation incididunt dolore laborum commodo cillum. Sint velit ut non magna Lorem tempor ipsum elit qui duis consectetur anim labore. Lorem irure ut Lorem incididunt Lorem aliquip adipisicing mollit. Cupidatat fugiat ipsum sint Lorem sint irure sunt pariatur dolore exercitation enim sunt occaecat nostrud. Fugiat mollit labore magna dolor reprehenderit cillum id voluptate nostrud fugiat quis mollit ipsum.\r\n",
+ "registered": "2014-07-05T20:06:52 -02:00",
+ "latitude": -70.332774,
+ "longitude": 157.197997,
+ "tags": [
+ "adipisicing",
+ "velit",
+ "sit",
+ "ut",
+ "dolor",
+ "eu",
+ "proident"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Melva Gay"
+ },
+ {
+ "id": 1,
+ "name": "Daphne Moran"
+ },
+ {
+ "id": 2,
+ "name": "Nina Richard"
+ }
+ ],
+ "greeting": "Hello, Kirk Sosa! You have 1 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af9c7776f0b449f005",
+ "index": 158,
+ "guid": "bbb8e9e3-ebed-4c67-946a-8f29fa369da2",
+ "isActive": true,
+ "balance": "$3,544.29",
+ "picture": "http://placehold.it/32x32",
+ "age": 21,
+ "eyeColor": "blue",
+ "name": "Aguirre Sutton",
+ "gender": "male",
+ "company": "OATFARM",
+ "email": "aguirresutton@oatfarm.com",
+ "phone": "+1 (935) 597-2112",
+ "address": "346 Etna Street, Hollymead, North Carolina, 5005",
+ "about": "Reprehenderit est aliquip veniam dolor elit magna Lorem proident labore magna ut. Ipsum non esse officia amet ipsum laborum nostrud consequat aute mollit do adipisicing est do. Ullamco magna ex officia anim eu aute anim laborum Lorem qui. Incididunt voluptate amet irure dolor excepteur excepteur ea nostrud reprehenderit. Ex Lorem aute dolor culpa laborum occaecat. Exercitation irure ex occaecat esse proident cupidatat consectetur.\r\n",
+ "registered": "2014-04-04T14:54:05 -02:00",
+ "latitude": 84.748428,
+ "longitude": 92.415364,
+ "tags": [
+ "ipsum",
+ "deserunt",
+ "qui",
+ "laboris",
+ "laboris",
+ "deserunt",
+ "nisi"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Moran Elliott"
+ },
+ {
+ "id": 1,
+ "name": "Myra Peterson"
+ },
+ {
+ "id": 2,
+ "name": "Tia Wood"
+ }
+ ],
+ "greeting": "Hello, Aguirre Sutton! You have 10 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af68e0513490bbc101",
+ "index": 159,
+ "guid": "565a1f8c-35c4-413d-a840-0c73926bed4d",
+ "isActive": true,
+ "balance": "$3,979.33",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "blue",
+ "name": "Galloway Garrison",
+ "gender": "male",
+ "company": "SUPPORTAL",
+ "email": "gallowaygarrison@supportal.com",
+ "phone": "+1 (912) 529-3437",
+ "address": "516 Hunts Lane, Takilma, Connecticut, 3968",
+ "about": "Non fugiat ea velit enim mollit. Sit nulla laboris tempor et reprehenderit non quis elit proident aute fugiat. Adipisicing quis dolore est minim nulla dolor irure tempor.\r\n",
+ "registered": "2014-01-17T09:34:38 -01:00",
+ "latitude": -65.848046,
+ "longitude": -142.528775,
+ "tags": [
+ "laborum",
+ "nisi",
+ "incididunt",
+ "velit",
+ "sint",
+ "non",
+ "Lorem"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Calhoun Luna"
+ },
+ {
+ "id": 1,
+ "name": "Cecilia Kerr"
+ },
+ {
+ "id": 2,
+ "name": "Angelina Smith"
+ }
+ ],
+ "greeting": "Hello, Galloway Garrison! You have 7 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af3fb66fd03aaaf3d3",
+ "index": 160,
+ "guid": "d5935376-cf85-4cd4-98df-2f793794808b",
+ "isActive": true,
+ "balance": "$2,737.50",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "brown",
+ "name": "Leach Solis",
+ "gender": "male",
+ "company": "CONFERIA",
+ "email": "leachsolis@conferia.com",
+ "phone": "+1 (806) 490-2247",
+ "address": "697 Dean Street, Worton, South Carolina, 2155",
+ "about": "Qui cupidatat consectetur officia irure ex incididunt nisi magna veniam. Ad Lorem exercitation cupidatat magna ullamco. Ipsum occaecat mollit commodo sint reprehenderit veniam consectetur sint. Lorem irure veniam amet voluptate deserunt magna id ea cupidatat in reprehenderit. Aliqua sint quis anim laboris Lorem excepteur irure veniam est veniam dolore consequat. Dolore officia nisi aute reprehenderit amet consectetur anim laboris cillum.\r\n",
+ "registered": "2014-06-27T00:39:16 -02:00",
+ "latitude": -34.61102,
+ "longitude": -147.64255,
+ "tags": [
+ "incididunt",
+ "consectetur",
+ "dolor",
+ "eu",
+ "do",
+ "nostrud",
+ "veniam"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Natasha Boyer"
+ },
+ {
+ "id": 1,
+ "name": "Hendrix Joyce"
+ },
+ {
+ "id": 2,
+ "name": "Burke Finch"
+ }
+ ],
+ "greeting": "Hello, Leach Solis! You have 6 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afc127b7c38c25f9ef",
+ "index": 161,
+ "guid": "9fb91305-e7d7-4ed5-9d25-3c1e842cf9f1",
+ "isActive": false,
+ "balance": "$2,954.12",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "brown",
+ "name": "Latonya Koch",
+ "gender": "female",
+ "company": "MEDMEX",
+ "email": "latonyakoch@medmex.com",
+ "phone": "+1 (912) 535-2612",
+ "address": "605 Anthony Street, Caroleen, Rhode Island, 905",
+ "about": "Irure aliqua ullamco magna eiusmod consectetur exercitation nostrud nostrud et duis eu velit duis. Sint pariatur ad adipisicing proident aliqua reprehenderit. Eiusmod nulla culpa culpa exercitation. Lorem Lorem et aliquip voluptate eiusmod laboris aliqua labore proident adipisicing duis eiusmod ad.\r\n",
+ "registered": "2015-01-08T09:58:12 -01:00",
+ "latitude": 43.102147,
+ "longitude": 38.880626,
+ "tags": [
+ "fugiat",
+ "officia",
+ "ipsum",
+ "anim",
+ "ex",
+ "eu",
+ "ea"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Lorraine Harding"
+ },
+ {
+ "id": 1,
+ "name": "Carolina Stark"
+ },
+ {
+ "id": 2,
+ "name": "Faulkner Madden"
+ }
+ ],
+ "greeting": "Hello, Latonya Koch! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af80d340e61a7f91bf",
+ "index": 162,
+ "guid": "5f04a37d-9a93-4ede-b470-0a724ecc445f",
+ "isActive": true,
+ "balance": "$1,399.49",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "blue",
+ "name": "Burnett Macias",
+ "gender": "male",
+ "company": "COMTRACT",
+ "email": "burnettmacias@comtract.com",
+ "phone": "+1 (965) 538-2850",
+ "address": "228 Devon Avenue, Adamstown, Pennsylvania, 588",
+ "about": "Voluptate in adipisicing occaecat non mollit sit dolore proident eiusmod nulla ut deserunt nulla. Proident nisi occaecat cupidatat incididunt qui magna et eu pariatur dolor reprehenderit. In officia labore tempor dolor est magna qui proident. Ut laborum culpa aliqua non nostrud reprehenderit eiusmod nulla id occaecat incididunt est. Voluptate cillum est est laboris magna consequat commodo eiusmod sint amet. Voluptate anim cillum ex anim mollit do exercitation. Excepteur qui culpa eu consequat aliqua.\r\n",
+ "registered": "2014-11-30T06:47:25 -01:00",
+ "latitude": -89.075252,
+ "longitude": 46.702657,
+ "tags": [
+ "officia",
+ "eiusmod",
+ "voluptate",
+ "officia",
+ "consequat",
+ "cillum",
+ "do"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Johns Watkins"
+ },
+ {
+ "id": 1,
+ "name": "Briggs Castro"
+ },
+ {
+ "id": 2,
+ "name": "James Mendoza"
+ }
+ ],
+ "greeting": "Hello, Burnett Macias! You have 6 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af1fafb2099212e611",
+ "index": 163,
+ "guid": "a8b6bc38-0f0a-42a9-85b0-bde30f8e7a33",
+ "isActive": true,
+ "balance": "$3,327.42",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "brown",
+ "name": "Lily Bentley",
+ "gender": "female",
+ "company": "PLASMOS",
+ "email": "lilybentley@plasmos.com",
+ "phone": "+1 (910) 449-2740",
+ "address": "285 Metrotech Courtr, Woodruff, Oklahoma, 5001",
+ "about": "Incididunt incididunt veniam ea irure nulla dolore officia labore ea. Eu exercitation excepteur ipsum et dolor excepteur non eu elit ex. Est pariatur eu do cupidatat esse.\r\n",
+ "registered": "2014-04-03T18:28:26 -02:00",
+ "latitude": -69.438938,
+ "longitude": 25.634816,
+ "tags": [
+ "nostrud",
+ "consequat",
+ "eu",
+ "adipisicing",
+ "cupidatat",
+ "qui",
+ "enim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Sims Hartman"
+ },
+ {
+ "id": 1,
+ "name": "Ada Montgomery"
+ },
+ {
+ "id": 2,
+ "name": "Madelyn Carver"
+ }
+ ],
+ "greeting": "Hello, Lily Bentley! You have 2 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afc8afcbe60726b5a7",
+ "index": 164,
+ "guid": "b424d165-c0b9-4c90-830a-309df1f52a74",
+ "isActive": true,
+ "balance": "$2,165.25",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "brown",
+ "name": "Audrey Rocha",
+ "gender": "female",
+ "company": "ZILENCIO",
+ "email": "audreyrocha@zilencio.com",
+ "phone": "+1 (829) 573-3559",
+ "address": "130 Cranberry Street, Sexton, Kansas, 8773",
+ "about": "Exercitation enim nostrud ipsum consequat non id cupidatat do officia. In et aliquip anim eiusmod consectetur. Excepteur ipsum tempor qui ea excepteur quis sint exercitation fugiat aute aute fugiat aliqua.\r\n",
+ "registered": "2015-02-15T23:32:10 -01:00",
+ "latitude": -34.779057,
+ "longitude": -20.97665,
+ "tags": [
+ "eu",
+ "velit",
+ "consequat",
+ "nisi",
+ "eu",
+ "dolore",
+ "deserunt"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Lee Freeman"
+ },
+ {
+ "id": 1,
+ "name": "Alejandra Frye"
+ },
+ {
+ "id": 2,
+ "name": "Donna Harrison"
+ }
+ ],
+ "greeting": "Hello, Audrey Rocha! You have 1 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af492d57f1bb8fa3e1",
+ "index": 165,
+ "guid": "cb25084c-3343-498f-a627-4155345262dd",
+ "isActive": false,
+ "balance": "$3,446.24",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "blue",
+ "name": "Dianna Juarez",
+ "gender": "female",
+ "company": "FARMEX",
+ "email": "diannajuarez@farmex.com",
+ "phone": "+1 (976) 417-3646",
+ "address": "439 Clarkson Avenue, Waterford, Kentucky, 1755",
+ "about": "Excepteur adipisicing aliquip commodo qui esse ad proident qui enim consectetur sunt aliquip sunt irure. Lorem deserunt magna minim incididunt esse enim fugiat tempor anim. Incididunt et adipisicing ut ipsum culpa elit ea cillum. Pariatur adipisicing sunt adipisicing nostrud ut. Id magna officia ex eu elit nisi quis labore nisi aliqua. Culpa non cillum sint Lorem do duis reprehenderit occaecat.\r\n",
+ "registered": "2015-02-22T11:51:50 -01:00",
+ "latitude": 55.361882,
+ "longitude": -8.506734,
+ "tags": [
+ "amet",
+ "proident",
+ "nulla",
+ "ea",
+ "exercitation",
+ "ut",
+ "sunt"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Ashley Velasquez"
+ },
+ {
+ "id": 1,
+ "name": "Carole Sykes"
+ },
+ {
+ "id": 2,
+ "name": "Decker Snow"
+ }
+ ],
+ "greeting": "Hello, Dianna Juarez! You have 8 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af0d78ccadd35ba60f",
+ "index": 166,
+ "guid": "e1ef06ea-9976-4601-84b2-7de98643fa6c",
+ "isActive": true,
+ "balance": "$1,104.87",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "green",
+ "name": "Miriam Weaver",
+ "gender": "female",
+ "company": "EDECINE",
+ "email": "miriamweaver@edecine.com",
+ "phone": "+1 (821) 580-2623",
+ "address": "518 Sullivan Place, Esmont, Mississippi, 2003",
+ "about": "Anim exercitation minim cillum aute duis labore nisi deserunt. Officia dolore eiusmod in ex nostrud. Ea reprehenderit enim aliquip in aliquip commodo qui sint culpa irure eiusmod.\r\n",
+ "registered": "2015-01-10T10:17:53 -01:00",
+ "latitude": -3.433492,
+ "longitude": -164.077278,
+ "tags": [
+ "eu",
+ "eu",
+ "ad",
+ "reprehenderit",
+ "quis",
+ "excepteur",
+ "consequat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Sheree Erickson"
+ },
+ {
+ "id": 1,
+ "name": "Mable Byers"
+ },
+ {
+ "id": 2,
+ "name": "Debbie Herring"
+ }
+ ],
+ "greeting": "Hello, Miriam Weaver! You have 4 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af9ea9ffcaf0d01e2f",
+ "index": 167,
+ "guid": "0703a7b9-34ec-4c6d-8e93-92e4d28ac7a9",
+ "isActive": true,
+ "balance": "$2,306.98",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "green",
+ "name": "Wright Stout",
+ "gender": "male",
+ "company": "OVERFORK",
+ "email": "wrightstout@overfork.com",
+ "phone": "+1 (957) 593-3437",
+ "address": "932 Dewitt Avenue, Calvary, Montana, 4579",
+ "about": "Minim tempor cupidatat est culpa. Esse excepteur et irure ex ad aliquip. Et nisi id tempor aliqua aliqua sit Lorem magna. Proident aliqua nisi est nulla ea deserunt magna consectetur amet duis laborum nostrud eu. Est nostrud ea nisi velit aute Lorem nisi culpa ipsum culpa irure id quis. Pariatur officia proident fugiat tempor reprehenderit tempor. Voluptate magna quis consequat enim.\r\n",
+ "registered": "2015-02-10T11:14:18 -01:00",
+ "latitude": 50.999123,
+ "longitude": 30.71866,
+ "tags": [
+ "mollit",
+ "quis",
+ "ullamco",
+ "non",
+ "minim",
+ "et",
+ "eiusmod"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Shelley Velazquez"
+ },
+ {
+ "id": 1,
+ "name": "Wolf Carson"
+ },
+ {
+ "id": 2,
+ "name": "Lelia Blair"
+ }
+ ],
+ "greeting": "Hello, Wright Stout! You have 10 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af985bdf270f8d01c4",
+ "index": 168,
+ "guid": "08febcd3-c891-4d3e-8d7e-3a3068828383",
+ "isActive": true,
+ "balance": "$1,695.78",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "green",
+ "name": "Lizzie Mccullough",
+ "gender": "female",
+ "company": "QUALITERN",
+ "email": "lizziemccullough@qualitern.com",
+ "phone": "+1 (973) 456-3514",
+ "address": "194 Newel Street, Springhill, North Dakota, 2363",
+ "about": "Et tempor aliquip labore dolore pariatur laborum deserunt id non officia eiusmod deserunt ea anim. Laborum ut eu exercitation commodo aliquip dolore cupidatat incididunt mollit sunt anim est cupidatat cillum. Irure fugiat aute irure aute id in adipisicing fugiat enim exercitation mollit. Voluptate irure anim aliqua proident in voluptate sint labore consequat ea fugiat voluptate aliqua.\r\n",
+ "registered": "2014-01-13T08:50:47 -01:00",
+ "latitude": 64.330663,
+ "longitude": 98.369605,
+ "tags": [
+ "nulla",
+ "cillum",
+ "amet",
+ "aute",
+ "ex",
+ "sint",
+ "et"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Christie Shepherd"
+ },
+ {
+ "id": 1,
+ "name": "Richmond Webb"
+ },
+ {
+ "id": 2,
+ "name": "Teresa Flores"
+ }
+ ],
+ "greeting": "Hello, Lizzie Mccullough! You have 1 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af37e9bd756cc60b83",
+ "index": 169,
+ "guid": "fc25227f-d4d3-47b4-87c6-899ae7108e3c",
+ "isActive": false,
+ "balance": "$3,667.24",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "brown",
+ "name": "Millie Kim",
+ "gender": "female",
+ "company": "VORATAK",
+ "email": "milliekim@voratak.com",
+ "phone": "+1 (810) 510-2562",
+ "address": "965 Lloyd Court, Joes, Maryland, 695",
+ "about": "Consequat cillum fugiat consectetur cupidatat culpa. Occaecat duis est dolore eu proident cillum quis deserunt quis nostrud veniam culpa. Reprehenderit fugiat consequat nostrud et mollit veniam cupidatat non. Dolor Lorem sunt officia occaecat magna Lorem excepteur et.\r\n",
+ "registered": "2014-07-10T20:26:18 -02:00",
+ "latitude": 85.227702,
+ "longitude": 164.754601,
+ "tags": [
+ "ipsum",
+ "ipsum",
+ "elit",
+ "do",
+ "id",
+ "aliqua",
+ "voluptate"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Kaufman Knowles"
+ },
+ {
+ "id": 1,
+ "name": "Lindsey Ferguson"
+ },
+ {
+ "id": 2,
+ "name": "Grant Hopper"
+ }
+ ],
+ "greeting": "Hello, Millie Kim! You have 3 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af127fc725429892c7",
+ "index": 170,
+ "guid": "3302c8f9-32a0-46b6-a01b-3d2de13263bb",
+ "isActive": false,
+ "balance": "$1,402.76",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "brown",
+ "name": "Bell Logan",
+ "gender": "male",
+ "company": "POLARIA",
+ "email": "belllogan@polaria.com",
+ "phone": "+1 (818) 491-3313",
+ "address": "900 Classon Avenue, Malo, Hawaii, 3690",
+ "about": "Laboris quis consectetur est dolor excepteur nulla. Reprehenderit labore ullamco eu mollit nisi sint dolor ea voluptate incididunt sunt. Deserunt ex esse cupidatat ullamco cupidatat cupidatat ad. Dolore enim deserunt do non esse.\r\n",
+ "registered": "2014-11-13T01:20:47 -01:00",
+ "latitude": 62.812192,
+ "longitude": 110.853576,
+ "tags": [
+ "amet",
+ "commodo",
+ "exercitation",
+ "voluptate",
+ "aute",
+ "anim",
+ "irure"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Arnold Ruiz"
+ },
+ {
+ "id": 1,
+ "name": "Haley Gates"
+ },
+ {
+ "id": 2,
+ "name": "Dolly May"
+ }
+ ],
+ "greeting": "Hello, Bell Logan! You have 1 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afbff00941e07935ad",
+ "index": 171,
+ "guid": "ba867242-186e-42ab-a34d-dd19bbf9f699",
+ "isActive": false,
+ "balance": "$3,005.65",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "blue",
+ "name": "Burris Glenn",
+ "gender": "male",
+ "company": "INTERFIND",
+ "email": "burrisglenn@interfind.com",
+ "phone": "+1 (899) 556-3782",
+ "address": "288 Sackett Street, Blandburg, Arizona, 7904",
+ "about": "Dolore tempor incididunt id cupidatat officia fugiat ex magna magna eiusmod duis dolore. Proident dolore aliqua Lorem Lorem sint commodo velit exercitation est. Aliquip Lorem et eiusmod dolor id magna esse adipisicing officia laboris labore. Lorem laboris officia id velit reprehenderit non. Velit amet irure dolore exercitation duis proident dolore consequat incididunt duis ad. Amet pariatur nostrud nostrud quis aliqua magna consectetur adipisicing culpa mollit aliquip duis aute Lorem.\r\n",
+ "registered": "2014-09-12T11:27:20 -02:00",
+ "latitude": 30.384555,
+ "longitude": -7.757927,
+ "tags": [
+ "excepteur",
+ "qui",
+ "exercitation",
+ "eiusmod",
+ "enim",
+ "dolore",
+ "nostrud"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Eaton Riddle"
+ },
+ {
+ "id": 1,
+ "name": "Jessie Weeks"
+ },
+ {
+ "id": 2,
+ "name": "Sarah Poole"
+ }
+ ],
+ "greeting": "Hello, Burris Glenn! You have 2 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af8d7250b6611285b5",
+ "index": 172,
+ "guid": "238b9d38-134b-4b76-a2ef-b4ff391e4f92",
+ "isActive": true,
+ "balance": "$2,900.72",
+ "picture": "http://placehold.it/32x32",
+ "age": 26,
+ "eyeColor": "green",
+ "name": "Barbra Hutchinson",
+ "gender": "female",
+ "company": "HOTCAKES",
+ "email": "barbrahutchinson@hotcakes.com",
+ "phone": "+1 (940) 527-2749",
+ "address": "815 Gelston Avenue, Belva, Arkansas, 5490",
+ "about": "Anim eiusmod anim laborum deserunt aliqua reprehenderit do ex. Amet ea sunt exercitation et ipsum cillum. Nulla deserunt eiusmod eiusmod minim sint veniam culpa laborum.\r\n",
+ "registered": "2014-04-13T18:30:17 -02:00",
+ "latitude": -60.600724,
+ "longitude": 44.99519,
+ "tags": [
+ "incididunt",
+ "dolore",
+ "Lorem",
+ "do",
+ "pariatur",
+ "incididunt",
+ "incididunt"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Joanna Ware"
+ },
+ {
+ "id": 1,
+ "name": "Jensen Mcintosh"
+ },
+ {
+ "id": 2,
+ "name": "Duffy Hendricks"
+ }
+ ],
+ "greeting": "Hello, Barbra Hutchinson! You have 1 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af46b23b63057652e8",
+ "index": 173,
+ "guid": "d76a23b6-dec4-462a-8bba-f9387dae1ba1",
+ "isActive": true,
+ "balance": "$1,835.84",
+ "picture": "http://placehold.it/32x32",
+ "age": 30,
+ "eyeColor": "green",
+ "name": "Parsons Dudley",
+ "gender": "male",
+ "company": "XLEEN",
+ "email": "parsonsdudley@xleen.com",
+ "phone": "+1 (857) 406-2325",
+ "address": "884 Willoughby Street, Wilmington, Nevada, 3737",
+ "about": "Dolor laborum dolor Lorem sunt sit id ex dolor in id ipsum laboris sit. Aliqua aliquip nostrud enim irure minim labore nostrud dolore proident occaecat do excepteur. Et dolor fugiat elit consequat.\r\n",
+ "registered": "2014-10-17T13:48:11 -02:00",
+ "latitude": 85.1949,
+ "longitude": 76.592477,
+ "tags": [
+ "deserunt",
+ "reprehenderit",
+ "velit",
+ "deserunt",
+ "voluptate",
+ "elit",
+ "ea"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Malinda Summers"
+ },
+ {
+ "id": 1,
+ "name": "Glenna Booth"
+ },
+ {
+ "id": 2,
+ "name": "Roberts Stanton"
+ }
+ ],
+ "greeting": "Hello, Parsons Dudley! You have 8 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af74ea03abb4d146fc",
+ "index": 174,
+ "guid": "af014537-3e2b-41ab-9260-321e5ff2d85a",
+ "isActive": false,
+ "balance": "$2,700.37",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "brown",
+ "name": "Marcy Peck",
+ "gender": "female",
+ "company": "XUMONK",
+ "email": "marcypeck@xumonk.com",
+ "phone": "+1 (954) 599-2488",
+ "address": "686 Goodwin Place, Hachita, New Jersey, 3294",
+ "about": "Est amet ex ullamco deserunt exercitation do cupidatat ea est deserunt. Sunt enim aliquip ex ea nisi culpa est pariatur amet qui eu. In non commodo irure magna fugiat exercitation occaecat pariatur excepteur aliqua eu Lorem non exercitation. Reprehenderit proident sunt ea aliquip exercitation proident esse. Proident anim esse laborum non commodo aliqua officia sint laboris laboris reprehenderit sint consectetur qui. In anim officia qui incididunt in reprehenderit enim sint consectetur cillum. Nostrud minim ut nisi elit cupidatat exercitation consectetur dolore magna ad consectetur Lorem.\r\n",
+ "registered": "2014-07-14T18:48:56 -02:00",
+ "latitude": -0.254387,
+ "longitude": 9.242858,
+ "tags": [
+ "sit",
+ "incididunt",
+ "dolor",
+ "labore",
+ "ad",
+ "officia",
+ "aliquip"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Leonard Newman"
+ },
+ {
+ "id": 1,
+ "name": "Pugh Gilmore"
+ },
+ {
+ "id": 2,
+ "name": "Claudia Bryant"
+ }
+ ],
+ "greeting": "Hello, Marcy Peck! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afb6658109b3fc284e",
+ "index": 175,
+ "guid": "e03b114a-5051-45fa-a9ca-ba4302b4ad99",
+ "isActive": true,
+ "balance": "$1,257.13",
+ "picture": "http://placehold.it/32x32",
+ "age": 30,
+ "eyeColor": "brown",
+ "name": "Gallagher Walsh",
+ "gender": "male",
+ "company": "QUARX",
+ "email": "gallagherwalsh@quarx.com",
+ "phone": "+1 (878) 457-2357",
+ "address": "132 Concord Street, Suitland, Marshall Islands, 3036",
+ "about": "Pariatur proident consectetur ex exercitation in esse laboris amet anim. Cillum amet sint nisi proident anim cillum commodo adipisicing. Ea eiusmod adipisicing qui magna cillum. Minim dolore anim consequat qui do id consequat. Labore dolor duis elit quis laborum magna deserunt do. Aliqua sunt esse amet irure sint duis est in nulla.\r\n",
+ "registered": "2014-06-28T18:36:39 -02:00",
+ "latitude": -49.291653,
+ "longitude": 34.574669,
+ "tags": [
+ "magna",
+ "eiusmod",
+ "cupidatat",
+ "sunt",
+ "laboris",
+ "dolor",
+ "sit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Levine Roman"
+ },
+ {
+ "id": 1,
+ "name": "Socorro Hawkins"
+ },
+ {
+ "id": 2,
+ "name": "Patti Herrera"
+ }
+ ],
+ "greeting": "Hello, Gallagher Walsh! You have 5 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af9807a975f3ba8cb4",
+ "index": 176,
+ "guid": "099a785f-70bf-4354-b0c8-c24d3cac088f",
+ "isActive": true,
+ "balance": "$3,252.42",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "blue",
+ "name": "Eliza Sawyer",
+ "gender": "female",
+ "company": "PLUTORQUE",
+ "email": "elizasawyer@plutorque.com",
+ "phone": "+1 (947) 590-3181",
+ "address": "952 Lefferts Place, Disautel, Georgia, 6924",
+ "about": "Do elit quis eiusmod amet sint. Consequat laboris in aliqua excepteur magna non. Ullamco dolor est pariatur minim ea consectetur dolor qui incididunt minim excepteur dolore nostrud.\r\n",
+ "registered": "2014-10-27T13:34:47 -01:00",
+ "latitude": -2.945834,
+ "longitude": 169.930581,
+ "tags": [
+ "labore",
+ "quis",
+ "esse",
+ "et",
+ "mollit",
+ "nostrud",
+ "velit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Ila Patrick"
+ },
+ {
+ "id": 1,
+ "name": "Cox Mosley"
+ },
+ {
+ "id": 2,
+ "name": "Jody Arnold"
+ }
+ ],
+ "greeting": "Hello, Eliza Sawyer! You have 3 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afdae2e7b0a494f06b",
+ "index": 177,
+ "guid": "c7860bba-71e8-4bbd-b35e-01db8b712c20",
+ "isActive": false,
+ "balance": "$3,523.90",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "brown",
+ "name": "Clarke Gallegos",
+ "gender": "male",
+ "company": "SIGNIDYNE",
+ "email": "clarkegallegos@signidyne.com",
+ "phone": "+1 (935) 455-3485",
+ "address": "183 Monroe Place, Northchase, Virgin Islands, 5858",
+ "about": "Anim consectetur officia ad id labore ad fugiat in ullamco eu ex fugiat ad. Elit voluptate deserunt ex id voluptate enim mollit ullamco occaecat. Officia commodo nisi voluptate Lorem irure minim cillum amet qui non in. Aute pariatur cillum et veniam est sint sit et mollit dolore labore. Proident mollit officia ut esse occaecat aliquip consectetur voluptate mollit nostrud. Velit fugiat exercitation nisi sit ut dolore Lorem ut dolor sunt enim magna in.\r\n",
+ "registered": "2015-02-23T09:03:04 -01:00",
+ "latitude": -84.932332,
+ "longitude": 118.233872,
+ "tags": [
+ "elit",
+ "in",
+ "consectetur",
+ "laborum",
+ "labore",
+ "in",
+ "dolor"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Kane Drake"
+ },
+ {
+ "id": 1,
+ "name": "Susie Alvarado"
+ },
+ {
+ "id": 2,
+ "name": "Franklin Beasley"
+ }
+ ],
+ "greeting": "Hello, Clarke Gallegos! You have 10 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af6ce2dd4eda03c13d",
+ "index": 178,
+ "guid": "5b3873dd-f5ae-4e3a-adc8-4bec2ec58675",
+ "isActive": false,
+ "balance": "$1,614.13",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "blue",
+ "name": "Larson Bird",
+ "gender": "male",
+ "company": "ASSISTIA",
+ "email": "larsonbird@assistia.com",
+ "phone": "+1 (865) 512-2766",
+ "address": "945 Remsen Street, Remington, Colorado, 7017",
+ "about": "In exercitation proident id laborum in tempor. Elit aute dolore Lorem occaecat veniam adipisicing culpa aliquip. Fugiat occaecat minim aliqua irure magna aliquip eu occaecat sit veniam commodo dolor occaecat. Aliqua laborum sit et laboris. Ad nostrud aliqua consectetur sunt enim cillum. Ea consequat eu mollit cillum pariatur dolore. Adipisicing culpa reprehenderit fugiat quis laboris.\r\n",
+ "registered": "2014-07-15T06:07:39 -02:00",
+ "latitude": -22.747196,
+ "longitude": -62.572642,
+ "tags": [
+ "veniam",
+ "ut",
+ "sunt",
+ "anim",
+ "labore",
+ "cupidatat",
+ "laboris"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Tate Pierce"
+ },
+ {
+ "id": 1,
+ "name": "Cecelia Middleton"
+ },
+ {
+ "id": 2,
+ "name": "Cathy Lawrence"
+ }
+ ],
+ "greeting": "Hello, Larson Bird! You have 5 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af3f084216653b7cfc",
+ "index": 179,
+ "guid": "a779b862-c38b-46fa-93f9-a85333723c9e",
+ "isActive": true,
+ "balance": "$1,893.49",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "blue",
+ "name": "Hancock Dodson",
+ "gender": "male",
+ "company": "SOFTMICRO",
+ "email": "hancockdodson@softmicro.com",
+ "phone": "+1 (938) 489-2150",
+ "address": "385 Robert Street, Russellville, Vermont, 926",
+ "about": "Aliqua ea amet labore consectetur elit aliquip incididunt minim commodo nisi elit. Excepteur et Lorem eu irure voluptate dolor. Laboris non elit nulla sint. Et excepteur pariatur ea est reprehenderit tempor amet in tempor cupidatat pariatur. Culpa nisi ad sunt quis velit eu veniam cillum id.\r\n",
+ "registered": "2014-07-06T19:43:07 -02:00",
+ "latitude": 83.038133,
+ "longitude": 67.652564,
+ "tags": [
+ "eiusmod",
+ "exercitation",
+ "exercitation",
+ "culpa",
+ "excepteur",
+ "enim",
+ "pariatur"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Lois Cobb"
+ },
+ {
+ "id": 1,
+ "name": "Walls Cabrera"
+ },
+ {
+ "id": 2,
+ "name": "Arlene Coffey"
+ }
+ ],
+ "greeting": "Hello, Hancock Dodson! You have 8 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af75de941ad27b974b",
+ "index": 180,
+ "guid": "a6417377-4906-43be-8e42-93ab81952579",
+ "isActive": true,
+ "balance": "$3,756.10",
+ "picture": "http://placehold.it/32x32",
+ "age": 22,
+ "eyeColor": "blue",
+ "name": "Knight Sanders",
+ "gender": "male",
+ "company": "ORBOID",
+ "email": "knightsanders@orboid.com",
+ "phone": "+1 (996) 479-3476",
+ "address": "159 Oxford Street, Rushford, Minnesota, 5080",
+ "about": "Labore cillum esse aute sit exercitation minim. Nulla labore ad minim minim nostrud deserunt officia incididunt velit nostrud duis nulla. In deserunt eiusmod eu culpa duis eu consectetur mollit commodo aute. Reprehenderit do eiusmod occaecat dolor cillum laborum ex. Aute nostrud reprehenderit qui in quis irure eu. Laborum voluptate aute nostrud Lorem cupidatat aute.\r\n",
+ "registered": "2015-02-20T02:19:58 -01:00",
+ "latitude": 30.253932,
+ "longitude": 50.379771,
+ "tags": [
+ "dolore",
+ "consequat",
+ "amet",
+ "minim",
+ "duis",
+ "dolor",
+ "elit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Glass Wells"
+ },
+ {
+ "id": 1,
+ "name": "June Meyers"
+ },
+ {
+ "id": 2,
+ "name": "Lara Benton"
+ }
+ ],
+ "greeting": "Hello, Knight Sanders! You have 7 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af4c7d40e01767335f",
+ "index": 181,
+ "guid": "c54e5a1b-7577-416c-b87a-f1059a81099f",
+ "isActive": false,
+ "balance": "$2,101.98",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "blue",
+ "name": "Porter Murray",
+ "gender": "male",
+ "company": "CABLAM",
+ "email": "portermurray@cablam.com",
+ "phone": "+1 (801) 500-3828",
+ "address": "487 Lawn Court, Ripley, New Mexico, 5524",
+ "about": "Tempor in minim pariatur cillum. Non consectetur aliquip mollit pariatur. Exercitation velit reprehenderit ullamco esse dolor duis sunt magna. Laboris anim laboris dolor proident aliqua velit proident consectetur ullamco excepteur proident elit. Amet ex dolor ex deserunt consectetur ea veniam sunt nulla tempor magna fugiat eiusmod.\r\n",
+ "registered": "2014-05-29T23:58:24 -02:00",
+ "latitude": -64.90712,
+ "longitude": 16.104403,
+ "tags": [
+ "eu",
+ "magna",
+ "id",
+ "ut",
+ "nisi",
+ "eiusmod",
+ "sit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Luella Taylor"
+ },
+ {
+ "id": 1,
+ "name": "Quinn Lopez"
+ },
+ {
+ "id": 2,
+ "name": "Gretchen Vaughn"
+ }
+ ],
+ "greeting": "Hello, Porter Murray! You have 10 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af43b8da759d3d1f33",
+ "index": 182,
+ "guid": "e2946b91-0364-4c91-87c8-0cf2b172c8ad",
+ "isActive": false,
+ "balance": "$3,208.69",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "brown",
+ "name": "Gibbs Richmond",
+ "gender": "male",
+ "company": "LINGOAGE",
+ "email": "gibbsrichmond@lingoage.com",
+ "phone": "+1 (804) 410-3787",
+ "address": "101 Midwood Street, Brandywine, Alabama, 9067",
+ "about": "Labore sit nulla eu magna incididunt aliqua. Commodo sunt dolore voluptate amet incididunt adipisicing officia ipsum pariatur Lorem do. Non quis sunt minim quis labore laborum cupidatat. Anim laboris ea reprehenderit incididunt laborum consequat.\r\n",
+ "registered": "2014-12-30T20:00:02 -01:00",
+ "latitude": 71.531628,
+ "longitude": -160.792976,
+ "tags": [
+ "aliquip",
+ "aute",
+ "deserunt",
+ "eiusmod",
+ "amet",
+ "commodo",
+ "pariatur"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Nikki Rosales"
+ },
+ {
+ "id": 1,
+ "name": "Twila Rogers"
+ },
+ {
+ "id": 2,
+ "name": "Hester Mullen"
+ }
+ ],
+ "greeting": "Hello, Gibbs Richmond! You have 2 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af4e4cf5199b38753b",
+ "index": 183,
+ "guid": "9f27cb4f-24fa-4330-8087-163ff167fa3a",
+ "isActive": true,
+ "balance": "$1,959.39",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "green",
+ "name": "Dominique Marquez",
+ "gender": "female",
+ "company": "VIDTO",
+ "email": "dominiquemarquez@vidto.com",
+ "phone": "+1 (834) 467-3555",
+ "address": "754 Ocean Avenue, Nipinnawasee, Illinois, 9402",
+ "about": "Ut labore adipisicing nulla commodo culpa nulla qui duis tempor nostrud ad velit magna. Consequat aute non irure eiusmod laboris adipisicing labore ad nostrud sint. Est ut veniam proident laborum nulla esse. Exercitation sint voluptate non voluptate ea mollit voluptate aliqua veniam consequat adipisicing ex.\r\n",
+ "registered": "2014-11-08T08:52:20 -01:00",
+ "latitude": -77.923139,
+ "longitude": 130.720868,
+ "tags": [
+ "velit",
+ "proident",
+ "qui",
+ "irure",
+ "in",
+ "incididunt",
+ "excepteur"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Copeland Spence"
+ },
+ {
+ "id": 1,
+ "name": "Tami Nolan"
+ },
+ {
+ "id": 2,
+ "name": "James Campbell"
+ }
+ ],
+ "greeting": "Hello, Dominique Marquez! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afcd45184f918ac4b4",
+ "index": 184,
+ "guid": "6b6f9d7f-dde7-4465-a5f5-94983f9d4c82",
+ "isActive": false,
+ "balance": "$2,059.02",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "blue",
+ "name": "Violet Cardenas",
+ "gender": "female",
+ "company": "ECOLIGHT",
+ "email": "violetcardenas@ecolight.com",
+ "phone": "+1 (860) 516-3225",
+ "address": "968 Adams Street, Orovada, Missouri, 3343",
+ "about": "Et enim est in sunt laborum incididunt dolore magna in Lorem. Ullamco et non proident veniam est aute velit. Non tempor esse ad Lorem amet voluptate.\r\n",
+ "registered": "2014-06-19T04:36:58 -02:00",
+ "latitude": 40.127989,
+ "longitude": 14.78973,
+ "tags": [
+ "qui",
+ "mollit",
+ "culpa",
+ "fugiat",
+ "pariatur",
+ "nisi",
+ "sint"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Christensen Blake"
+ },
+ {
+ "id": 1,
+ "name": "Chen Wheeler"
+ },
+ {
+ "id": 2,
+ "name": "Francine Thompson"
+ }
+ ],
+ "greeting": "Hello, Violet Cardenas! You have 3 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af11975b0964fd8ecb",
+ "index": 185,
+ "guid": "35562f95-ac2c-4e18-bf27-539f7644c858",
+ "isActive": true,
+ "balance": "$3,193.17",
+ "picture": "http://placehold.it/32x32",
+ "age": 21,
+ "eyeColor": "brown",
+ "name": "Mia Christian",
+ "gender": "female",
+ "company": "RODEMCO",
+ "email": "miachristian@rodemco.com",
+ "phone": "+1 (986) 550-2757",
+ "address": "715 Dooley Street, Delwood, Oregon, 6569",
+ "about": "Ad officia pariatur cupidatat proident in officia ea consequat adipisicing pariatur irure. Consequat enim et laborum sint reprehenderit tempor velit velit commodo pariatur laborum culpa irure do. Incididunt commodo eu tempor exercitation sunt reprehenderit laborum quis eiusmod elit.\r\n",
+ "registered": "2014-03-04T08:09:13 -01:00",
+ "latitude": -35.68445,
+ "longitude": -16.587335,
+ "tags": [
+ "do",
+ "ea",
+ "aute",
+ "cupidatat",
+ "eiusmod",
+ "et",
+ "mollit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Yesenia Skinner"
+ },
+ {
+ "id": 1,
+ "name": "Carrillo Daniel"
+ },
+ {
+ "id": 2,
+ "name": "Clements Rodgers"
+ }
+ ],
+ "greeting": "Hello, Mia Christian! You have 5 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af0245b26fae46c4df",
+ "index": 186,
+ "guid": "da1b473e-873e-48da-b248-046c22851df8",
+ "isActive": false,
+ "balance": "$3,600.30",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "blue",
+ "name": "Valeria Joyner",
+ "gender": "female",
+ "company": "OZEAN",
+ "email": "valeriajoyner@ozean.com",
+ "phone": "+1 (982) 588-2978",
+ "address": "908 Ocean Court, Newkirk, Federated States Of Micronesia, 6693",
+ "about": "Incididunt adipisicing eu labore adipisicing tempor aliqua aute dolor commodo amet dolor ex. Est labore est labore dolor ut ipsum. Proident ea nulla ullamco laborum. Est nisi aute mollit ea eiusmod commodo amet culpa irure deserunt eiusmod pariatur ea.\r\n",
+ "registered": "2014-08-16T01:08:28 -02:00",
+ "latitude": 26.07774,
+ "longitude": -150.870656,
+ "tags": [
+ "reprehenderit",
+ "consectetur",
+ "minim",
+ "eu",
+ "velit",
+ "pariatur",
+ "dolor"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Luann Wong"
+ },
+ {
+ "id": 1,
+ "name": "Aimee Melton"
+ },
+ {
+ "id": 2,
+ "name": "Jordan Chen"
+ }
+ ],
+ "greeting": "Hello, Valeria Joyner! You have 8 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af3a7d89e1ca8c781c",
+ "index": 187,
+ "guid": "5956c236-5d5f-4864-b5c5-c0dbf11f781d",
+ "isActive": true,
+ "balance": "$1,743.23",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "green",
+ "name": "Avery Barber",
+ "gender": "male",
+ "company": "BUZZMAKER",
+ "email": "averybarber@buzzmaker.com",
+ "phone": "+1 (935) 476-2477",
+ "address": "612 Kane Street, Calpine, South Dakota, 6720",
+ "about": "Duis dolore anim laborum proident duis eiusmod laboris exercitation non veniam aliquip officia voluptate. Non voluptate mollit nostrud eu ut amet excepteur irure nisi esse. Commodo est ut Lorem sunt eiusmod amet exercitation culpa aute velit nostrud ipsum mollit proident. Consequat quis nisi tempor nisi.\r\n",
+ "registered": "2015-01-18T06:12:33 -01:00",
+ "latitude": -66.454778,
+ "longitude": 4.629758,
+ "tags": [
+ "nisi",
+ "sit",
+ "amet",
+ "ea",
+ "id",
+ "quis",
+ "tempor"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Meyer Bridges"
+ },
+ {
+ "id": 1,
+ "name": "Armstrong Lambert"
+ },
+ {
+ "id": 2,
+ "name": "Freda Hahn"
+ }
+ ],
+ "greeting": "Hello, Avery Barber! You have 5 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af846a06368a7b444c",
+ "index": 188,
+ "guid": "3a24e076-c55c-4908-81e7-8354f75ff6ac",
+ "isActive": false,
+ "balance": "$1,225.09",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "green",
+ "name": "Blackwell Robinson",
+ "gender": "male",
+ "company": "HARMONEY",
+ "email": "blackwellrobinson@harmoney.com",
+ "phone": "+1 (916) 590-2752",
+ "address": "162 Jodie Court, Sheatown, Puerto Rico, 438",
+ "about": "Sit aliqua qui voluptate reprehenderit aliquip duis pariatur qui cillum pariatur reprehenderit nisi duis in. Laboris aute deserunt reprehenderit anim nostrud id dolor fugiat aliquip cillum eiusmod dolor. Dolore officia deserunt cupidatat ipsum enim quis amet. Aliqua et in officia culpa nulla voluptate est ex dolore excepteur.\r\n",
+ "registered": "2014-06-10T22:02:45 -02:00",
+ "latitude": -46.61739,
+ "longitude": 17.558323,
+ "tags": [
+ "elit",
+ "voluptate",
+ "anim",
+ "nostrud",
+ "cillum",
+ "enim",
+ "qui"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Hawkins Hensley"
+ },
+ {
+ "id": 1,
+ "name": "Myers Greer"
+ },
+ {
+ "id": 2,
+ "name": "Jarvis Stokes"
+ }
+ ],
+ "greeting": "Hello, Blackwell Robinson! You have 5 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afc8f588ba48341413",
+ "index": 189,
+ "guid": "6750510d-46e1-4852-ae11-fea4bbab2de1",
+ "isActive": false,
+ "balance": "$3,128.68",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "green",
+ "name": "Dodson Burnett",
+ "gender": "male",
+ "company": "DEMINIMUM",
+ "email": "dodsonburnett@deminimum.com",
+ "phone": "+1 (889) 448-3710",
+ "address": "832 Irwin Street, Robinson, Michigan, 2040",
+ "about": "Labore ut commodo nisi labore reprehenderit id incididunt exercitation laborum eiusmod proident. Adipisicing eu nisi cillum laborum. Laborum tempor proident elit sunt laborum voluptate fugiat ipsum sunt eu irure cupidatat ullamco. Nostrud cupidatat ad est duis Lorem. Minim irure minim mollit non occaecat labore ea sit irure. Ex dolore nulla et incididunt esse ullamco voluptate. Ipsum adipisicing cupidatat minim magna.\r\n",
+ "registered": "2014-04-04T05:02:33 -02:00",
+ "latitude": 35.837558,
+ "longitude": 95.924194,
+ "tags": [
+ "dolore",
+ "dolor",
+ "commodo",
+ "proident",
+ "exercitation",
+ "officia",
+ "occaecat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Avila Benson"
+ },
+ {
+ "id": 1,
+ "name": "Theresa Colon"
+ },
+ {
+ "id": 2,
+ "name": "Snyder Mercer"
+ }
+ ],
+ "greeting": "Hello, Dodson Burnett! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afa4c688a36542149f",
+ "index": 190,
+ "guid": "642b9b21-92ac-4b96-a5a7-c45bf0576b40",
+ "isActive": true,
+ "balance": "$3,272.84",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "blue",
+ "name": "Gill Garrett",
+ "gender": "male",
+ "company": "COFINE",
+ "email": "gillgarrett@cofine.com",
+ "phone": "+1 (918) 494-2791",
+ "address": "783 Chestnut Street, Cornucopia, Nebraska, 7122",
+ "about": "Magna magna cillum dolor cillum nisi culpa qui deserunt magna ad ad commodo. Ullamco amet minim anim irure dolore consectetur enim fugiat adipisicing. Id exercitation nulla ex eu est consectetur do minim excepteur. Ea pariatur ipsum ullamco ipsum laboris labore pariatur dolore sint. Est ea do laboris nulla duis occaecat est cupidatat non duis eu.\r\n",
+ "registered": "2014-09-14T01:50:27 -02:00",
+ "latitude": 15.540069,
+ "longitude": -8.080332,
+ "tags": [
+ "exercitation",
+ "ut",
+ "tempor",
+ "elit",
+ "eu",
+ "elit",
+ "id"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Ramsey Ochoa"
+ },
+ {
+ "id": 1,
+ "name": "Vicki Fisher"
+ },
+ {
+ "id": 2,
+ "name": "Hampton Fry"
+ }
+ ],
+ "greeting": "Hello, Gill Garrett! You have 4 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af3077528fb0d681d7",
+ "index": 191,
+ "guid": "b236ef74-77c2-444d-89cf-2c2ba4b175cb",
+ "isActive": false,
+ "balance": "$3,198.89",
+ "picture": "http://placehold.it/32x32",
+ "age": 26,
+ "eyeColor": "blue",
+ "name": "Anthony Riley",
+ "gender": "male",
+ "company": "NIKUDA",
+ "email": "anthonyriley@nikuda.com",
+ "phone": "+1 (862) 593-3538",
+ "address": "489 Taylor Street, Winfred, Wyoming, 7563",
+ "about": "Ad nostrud veniam amet occaecat ipsum nisi laborum eiusmod velit laboris veniam Lorem. Amet aute esse eiusmod in cillum aute consectetur fugiat aute non Lorem officia. Adipisicing in consectetur sit do labore velit irure sit exercitation cupidatat velit.\r\n",
+ "registered": "2015-04-17T02:39:15 -02:00",
+ "latitude": -33.675489,
+ "longitude": -153.809945,
+ "tags": [
+ "irure",
+ "cupidatat",
+ "excepteur",
+ "sunt",
+ "in",
+ "est",
+ "culpa"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Megan Levy"
+ },
+ {
+ "id": 1,
+ "name": "Joyce Cline"
+ },
+ {
+ "id": 2,
+ "name": "Stevens Buckner"
+ }
+ ],
+ "greeting": "Hello, Anthony Riley! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03affd25e8822d402809",
+ "index": 192,
+ "guid": "87286750-21e9-487f-97e7-6d7e9d4594be",
+ "isActive": false,
+ "balance": "$3,847.91",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "blue",
+ "name": "Ola Mccray",
+ "gender": "female",
+ "company": "PROSURE",
+ "email": "olamccray@prosure.com",
+ "phone": "+1 (907) 478-3751",
+ "address": "287 Gem Street, Calverton, California, 4311",
+ "about": "Laboris laborum exercitation labore minim commodo elit laboris velit incididunt sit consequat. Exercitation amet anim ad est sit exercitation cillum mollit qui commodo non proident laboris minim. Quis quis sint qui labore laborum commodo ex sunt labore ullamco et in cupidatat dolore.\r\n",
+ "registered": "2014-12-28T21:21:31 -01:00",
+ "latitude": -86.404846,
+ "longitude": -158.824491,
+ "tags": [
+ "ea",
+ "qui",
+ "veniam",
+ "commodo",
+ "labore",
+ "aliquip",
+ "qui"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Lowe Kelly"
+ },
+ {
+ "id": 1,
+ "name": "Willis Lynn"
+ },
+ {
+ "id": 2,
+ "name": "Karyn Parrish"
+ }
+ ],
+ "greeting": "Hello, Ola Mccray! You have 10 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af5f677ca7c586bccd",
+ "index": 193,
+ "guid": "6c469315-1ad0-4181-a67c-5bbcac8adec1",
+ "isActive": true,
+ "balance": "$3,312.31",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "brown",
+ "name": "Whitney Mejia",
+ "gender": "female",
+ "company": "XURBAN",
+ "email": "whitneymejia@xurban.com",
+ "phone": "+1 (952) 541-2206",
+ "address": "732 Wallabout Street, Brady, Indiana, 9660",
+ "about": "Ex pariatur aliqua ut quis duis cillum ex velit excepteur. Commodo ipsum nisi minim ipsum laboris commodo et incididunt ullamco. Proident adipisicing et labore Lorem. Laborum elit nisi eu nostrud.\r\n",
+ "registered": "2014-06-07T23:00:24 -02:00",
+ "latitude": -9.652805,
+ "longitude": -159.203198,
+ "tags": [
+ "excepteur",
+ "est",
+ "deserunt",
+ "culpa",
+ "dolor",
+ "esse",
+ "sint"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Victoria Osborne"
+ },
+ {
+ "id": 1,
+ "name": "Jacqueline Jimenez"
+ },
+ {
+ "id": 2,
+ "name": "Olson Martinez"
+ }
+ ],
+ "greeting": "Hello, Whitney Mejia! You have 4 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afcc1e095f09c3f5fb",
+ "index": 194,
+ "guid": "2647cca8-27ed-42c8-b287-707717bf448b",
+ "isActive": false,
+ "balance": "$3,829.96",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "brown",
+ "name": "Erika Workman",
+ "gender": "female",
+ "company": "ANDRYX",
+ "email": "erikaworkman@andryx.com",
+ "phone": "+1 (826) 552-2226",
+ "address": "184 Fillmore Place, Steinhatchee, Palau, 4971",
+ "about": "Irure in eiusmod sit aliqua. Velit magna cupidatat id commodo tempor reprehenderit ea sit ut fugiat reprehenderit ullamco. Laborum laboris nulla ad nisi ut ipsum in excepteur officia velit elit qui nisi. Irure in eiusmod nostrud incididunt culpa laborum sit magna eiusmod. Proident tempor esse culpa adipisicing nostrud Lorem id aliquip.\r\n",
+ "registered": "2014-08-20T16:17:50 -02:00",
+ "latitude": -8.378364,
+ "longitude": 91.353803,
+ "tags": [
+ "ea",
+ "commodo",
+ "ullamco",
+ "labore",
+ "cillum",
+ "non",
+ "est"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Ruth Moss"
+ },
+ {
+ "id": 1,
+ "name": "Charmaine Copeland"
+ },
+ {
+ "id": 2,
+ "name": "Vazquez William"
+ }
+ ],
+ "greeting": "Hello, Erika Workman! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afabdc320cdffc1a5e",
+ "index": 195,
+ "guid": "17275bdb-d636-4cfa-919e-e20c954e9cdb",
+ "isActive": true,
+ "balance": "$1,189.33",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "brown",
+ "name": "Shelton Cooke",
+ "gender": "male",
+ "company": "URBANSHEE",
+ "email": "sheltoncooke@urbanshee.com",
+ "phone": "+1 (884) 416-2778",
+ "address": "103 Montague Terrace, Summerset, Northern Mariana Islands, 5888",
+ "about": "Ut laboris pariatur amet aute proident proident. Deserunt tempor aliquip pariatur non enim et. Esse velit laboris ad ad ea ullamco. Esse id eiusmod deserunt commodo. Duis sit cillum amet sint do eu amet ex mollit aute quis.\r\n",
+ "registered": "2014-06-18T23:31:38 -02:00",
+ "latitude": 35.969177,
+ "longitude": 86.500054,
+ "tags": [
+ "consequat",
+ "sint",
+ "aliquip",
+ "ipsum",
+ "adipisicing",
+ "nostrud",
+ "quis"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Elaine Hayden"
+ },
+ {
+ "id": 1,
+ "name": "Corine Barnes"
+ },
+ {
+ "id": 2,
+ "name": "Nelda Glover"
+ }
+ ],
+ "greeting": "Hello, Shelton Cooke! You have 2 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af92a64cdc05cce839",
+ "index": 196,
+ "guid": "568f6cae-be5c-4350-9397-c68f33b34457",
+ "isActive": true,
+ "balance": "$2,128.19",
+ "picture": "http://placehold.it/32x32",
+ "age": 28,
+ "eyeColor": "blue",
+ "name": "Terrie Quinn",
+ "gender": "female",
+ "company": "BILLMED",
+ "email": "terriequinn@billmed.com",
+ "phone": "+1 (886) 531-3353",
+ "address": "701 Whitty Lane, Barronett, Washington, 998",
+ "about": "Culpa commodo ea do tempor adipisicing anim Lorem mollit labore ad occaecat deserunt amet laborum. Deserunt in incididunt ea voluptate officia eiusmod ut velit occaecat sit eu eiusmod aliqua. Cupidatat eu reprehenderit amet dolore. Nostrud aute sit in cillum exercitation deserunt in consequat dolor Lorem et irure nisi et. Veniam ex esse est sit Lorem ad enim veniam laborum eiusmod anim exercitation fugiat sunt. Veniam ex incididunt pariatur excepteur id irure ullamco tempor nisi laboris aliqua nisi et.\r\n",
+ "registered": "2014-05-16T02:18:52 -02:00",
+ "latitude": 57.353827,
+ "longitude": 98.565731,
+ "tags": [
+ "magna",
+ "anim",
+ "pariatur",
+ "ea",
+ "deserunt",
+ "reprehenderit",
+ "commodo"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Henrietta Pate"
+ },
+ {
+ "id": 1,
+ "name": "Tanner Harrington"
+ },
+ {
+ "id": 2,
+ "name": "Dalton Bray"
+ }
+ ],
+ "greeting": "Hello, Terrie Quinn! You have 1 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af39322f273040445f",
+ "index": 197,
+ "guid": "ef94f1ba-8a04-4f73-bb37-13c31bb8c98a",
+ "isActive": true,
+ "balance": "$3,613.78",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "brown",
+ "name": "Wood Mcclure",
+ "gender": "male",
+ "company": "PHOTOBIN",
+ "email": "woodmcclure@photobin.com",
+ "phone": "+1 (837) 552-2946",
+ "address": "957 Seagate Avenue, Makena, Massachusetts, 2993",
+ "about": "Veniam sint elit est consectetur cillum ad ullamco Lorem. Eiusmod ex in enim proident ut excepteur. Sunt laboris non duis fugiat laborum dolor. Dolore incididunt ut ad velit mollit ut nostrud in. Velit mollit cupidatat proident cupidatat mollit cillum reprehenderit. Tempor sint cillum incididunt anim Lorem laboris consectetur quis laboris exercitation.\r\n",
+ "registered": "2015-01-03T11:51:11 -01:00",
+ "latitude": -42.511049,
+ "longitude": 167.546433,
+ "tags": [
+ "aute",
+ "laborum",
+ "do",
+ "aute",
+ "Lorem",
+ "commodo",
+ "qui"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Harrison Jordan"
+ },
+ {
+ "id": 1,
+ "name": "Amie Vincent"
+ },
+ {
+ "id": 2,
+ "name": "Suzette Higgins"
+ }
+ ],
+ "greeting": "Hello, Wood Mcclure! You have 7 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afd851c5e3ac197e2e",
+ "index": 198,
+ "guid": "ce48842b-f10f-441b-8819-1e6bb5238909",
+ "isActive": false,
+ "balance": "$1,717.15",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "green",
+ "name": "Regina Leach",
+ "gender": "female",
+ "company": "TELPOD",
+ "email": "reginaleach@telpod.com",
+ "phone": "+1 (855) 456-2359",
+ "address": "229 Rugby Road, Sperryville, Tennessee, 1527",
+ "about": "Proident sint fugiat reprehenderit culpa aute deserunt. Adipisicing enim dolor sint ea. Consequat amet ipsum velit ipsum ipsum occaecat ex consectetur minim id cillum.\r\n",
+ "registered": "2015-02-12T20:20:35 -01:00",
+ "latitude": 63.973931,
+ "longitude": -95.57132,
+ "tags": [
+ "id",
+ "culpa",
+ "nisi",
+ "amet",
+ "nostrud",
+ "culpa",
+ "ad"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Bridget Mcneil"
+ },
+ {
+ "id": 1,
+ "name": "Irma Carter"
+ },
+ {
+ "id": 2,
+ "name": "Angie Frazier"
+ }
+ ],
+ "greeting": "Hello, Regina Leach! You have 8 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af31c47f1707964e69",
+ "index": 199,
+ "guid": "8d40c0db-0c2f-4aa8-8f8b-6acab6a4748e",
+ "isActive": true,
+ "balance": "$3,193.71",
+ "picture": "http://placehold.it/32x32",
+ "age": 26,
+ "eyeColor": "blue",
+ "name": "Rosanne Stevens",
+ "gender": "female",
+ "company": "KINDALOO",
+ "email": "rosannestevens@kindaloo.com",
+ "phone": "+1 (802) 485-3842",
+ "address": "990 Duffield Street, Linganore, Wisconsin, 7015",
+ "about": "Aute ad qui aute cupidatat adipisicing ex eu qui non fugiat aute consequat. Consectetur eu officia ea elit adipisicing. Amet laborum aute exercitation ut ut laboris minim. Mollit tempor dolor minim cupidatat irure incididunt et excepteur. Sint mollit cillum ad cupidatat officia voluptate. Eiusmod nisi id proident ea culpa elit tempor.\r\n",
+ "registered": "2014-08-08T12:59:34 -02:00",
+ "latitude": -23.086053,
+ "longitude": 0.295103,
+ "tags": [
+ "nisi",
+ "adipisicing",
+ "laborum",
+ "voluptate",
+ "veniam",
+ "labore",
+ "anim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Figueroa Berry"
+ },
+ {
+ "id": 1,
+ "name": "Bright Huber"
+ },
+ {
+ "id": 2,
+ "name": "Wilkinson Hampton"
+ }
+ ],
+ "greeting": "Hello, Rosanne Stevens! You have 7 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af490d6646fe03b844",
+ "index": 200,
+ "guid": "453649c8-d552-4301-ac33-5ed15eef948a",
+ "isActive": false,
+ "balance": "$1,678.75",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "brown",
+ "name": "Joanne Mooney",
+ "gender": "female",
+ "company": "ROUGHIES",
+ "email": "joannemooney@roughies.com",
+ "phone": "+1 (916) 452-2476",
+ "address": "307 Doughty Street, Martinez, Delaware, 1290",
+ "about": "Labore sit ex et reprehenderit duis. Id consectetur deserunt amet excepteur mollit ullamco reprehenderit quis quis ipsum nulla exercitation minim. Labore consequat ex enim laboris consequat eu incididunt occaecat non. Dolor adipisicing qui qui ullamco nostrud do mollit ut pariatur deserunt excepteur esse non velit. Voluptate qui ullamco ut est commodo duis consequat veniam.\r\n",
+ "registered": "2014-01-06T17:08:41 -01:00",
+ "latitude": 14.920726,
+ "longitude": -24.047877,
+ "tags": [
+ "non",
+ "ullamco",
+ "anim",
+ "dolore",
+ "irure",
+ "id",
+ "id"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Skinner Harvey"
+ },
+ {
+ "id": 1,
+ "name": "Osborn Medina"
+ },
+ {
+ "id": 2,
+ "name": "Katina Howe"
+ }
+ ],
+ "greeting": "Hello, Joanne Mooney! You have 4 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afae06713301c7c027",
+ "index": 201,
+ "guid": "37e03db0-0b4e-41fd-83dc-cdf696ff119f",
+ "isActive": false,
+ "balance": "$3,727.79",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "blue",
+ "name": "Ivy Wolfe",
+ "gender": "female",
+ "company": "QUINEX",
+ "email": "ivywolfe@quinex.com",
+ "phone": "+1 (896) 500-2615",
+ "address": "256 Everett Avenue, Farmers, American Samoa, 667",
+ "about": "Fugiat fugiat non quis commodo non magna ex. Ut anim labore incididunt aliqua ea sunt veniam labore. Dolore veniam adipisicing pariatur consectetur tempor proident voluptate velit duis eu ullamco adipisicing elit.\r\n",
+ "registered": "2014-10-25T16:50:07 -02:00",
+ "latitude": 62.493216,
+ "longitude": 138.222958,
+ "tags": [
+ "non",
+ "Lorem",
+ "id",
+ "reprehenderit",
+ "do",
+ "exercitation",
+ "Lorem"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Sophie Ward"
+ },
+ {
+ "id": 1,
+ "name": "Helga Stanley"
+ },
+ {
+ "id": 2,
+ "name": "Chris Keller"
+ }
+ ],
+ "greeting": "Hello, Ivy Wolfe! You have 10 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03aff86d23197feefb59",
+ "index": 202,
+ "guid": "d1350be7-7c18-476a-84ab-2299ca9c1491",
+ "isActive": true,
+ "balance": "$2,956.17",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "green",
+ "name": "White Morrison",
+ "gender": "male",
+ "company": "TROLLERY",
+ "email": "whitemorrison@trollery.com",
+ "phone": "+1 (812) 584-3648",
+ "address": "854 Oceanic Avenue, Goldfield, Ohio, 5001",
+ "about": "Culpa eu consequat exercitation est ea nostrud occaecat voluptate velit commodo nisi et. Duis non aute adipisicing eu esse consequat. Esse do cillum magna consequat excepteur. Velit velit ex sunt anim reprehenderit exercitation aliquip enim. Non eu veniam consequat eu Lorem sit. Velit duis dolore sint aute id adipisicing deserunt Lorem pariatur sit. Eu labore laborum ea irure officia commodo proident quis commodo id reprehenderit magna nulla.\r\n",
+ "registered": "2014-04-14T09:47:56 -02:00",
+ "latitude": -65.42354,
+ "longitude": 106.860803,
+ "tags": [
+ "sint",
+ "excepteur",
+ "qui",
+ "amet",
+ "aute",
+ "deserunt",
+ "dolor"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Maldonado Shelton"
+ },
+ {
+ "id": 1,
+ "name": "Peggy Chaney"
+ },
+ {
+ "id": 2,
+ "name": "Marguerite Underwood"
+ }
+ ],
+ "greeting": "Hello, White Morrison! You have 4 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afacb2f218f82373e6",
+ "index": 203,
+ "guid": "3d5c0058-95d0-498a-9434-3f573da0a027",
+ "isActive": true,
+ "balance": "$1,380.48",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "green",
+ "name": "Bowman Craig",
+ "gender": "male",
+ "company": "ESCHOIR",
+ "email": "bowmancraig@eschoir.com",
+ "phone": "+1 (807) 556-3571",
+ "address": "827 Minna Street, Terlingua, Louisiana, 1223",
+ "about": "Sunt enim nisi elit nulla duis sint exercitation sint ut. Ipsum incididunt magna laboris pariatur ullamco ex est quis. Do tempor ad incididunt culpa sunt eu Lorem esse laboris velit laborum consequat aute sunt. Culpa velit dolore cupidatat id minim.\r\n",
+ "registered": "2014-01-27T09:06:28 -01:00",
+ "latitude": -0.551394,
+ "longitude": 78.04572,
+ "tags": [
+ "non",
+ "sint",
+ "adipisicing",
+ "aute",
+ "dolore",
+ "qui",
+ "sint"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Jackie Berger"
+ },
+ {
+ "id": 1,
+ "name": "Earnestine Caldwell"
+ },
+ {
+ "id": 2,
+ "name": "Britney Brennan"
+ }
+ ],
+ "greeting": "Hello, Bowman Craig! You have 6 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af855e4f2640cd0cb0",
+ "index": 204,
+ "guid": "db6e9071-4a79-4b75-83e2-50c01125723b",
+ "isActive": true,
+ "balance": "$2,914.65",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "green",
+ "name": "Beverly Goff",
+ "gender": "female",
+ "company": "RETRACK",
+ "email": "beverlygoff@retrack.com",
+ "phone": "+1 (957) 471-3754",
+ "address": "648 Prospect Street, Detroit, Idaho, 1848",
+ "about": "Fugiat ut laboris sit deserunt eiusmod elit reprehenderit qui elit nulla non consequat duis. Amet cillum nisi amet nostrud commodo do labore occaecat aute esse mollit occaecat aliquip eiusmod. Quis magna minim laboris ullamco deserunt nostrud ad pariatur non consequat esse aliquip voluptate sint. Laboris proident exercitation pariatur ut labore et voluptate commodo adipisicing minim.\r\n",
+ "registered": "2014-09-22T21:08:54 -02:00",
+ "latitude": 52.262832,
+ "longitude": -159.054421,
+ "tags": [
+ "do",
+ "cupidatat",
+ "aliquip",
+ "velit",
+ "commodo",
+ "fugiat",
+ "voluptate"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Price Compton"
+ },
+ {
+ "id": 1,
+ "name": "Richards Crosby"
+ },
+ {
+ "id": 2,
+ "name": "Beth Campos"
+ }
+ ],
+ "greeting": "Hello, Beverly Goff! You have 9 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af30352dff33dcceef",
+ "index": 205,
+ "guid": "0a6c1d38-9e3a-47a9-a23d-d9682fdd2ff4",
+ "isActive": true,
+ "balance": "$2,896.43",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "green",
+ "name": "Clarissa Gibbs",
+ "gender": "female",
+ "company": "ZORROMOP",
+ "email": "clarissagibbs@zorromop.com",
+ "phone": "+1 (938) 563-3454",
+ "address": "145 Kimball Street, Kidder, New Hampshire, 398",
+ "about": "Laboris labore id consequat deserunt nostrud ea tempor consectetur. Quis do enim incididunt consequat deserunt exercitation in nisi sunt labore ex proident qui elit. Sunt sit ex Lorem sunt quis proident esse.\r\n",
+ "registered": "2014-05-30T21:39:28 -02:00",
+ "latitude": 89.008975,
+ "longitude": 96.804468,
+ "tags": [
+ "esse",
+ "aliquip",
+ "eiusmod",
+ "ea",
+ "sit",
+ "incididunt",
+ "commodo"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Toni Strong"
+ },
+ {
+ "id": 1,
+ "name": "Holmes Forbes"
+ },
+ {
+ "id": 2,
+ "name": "Rodriquez Jones"
+ }
+ ],
+ "greeting": "Hello, Clarissa Gibbs! You have 10 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af0778af508b776a30",
+ "index": 206,
+ "guid": "088831d3-e02a-4f77-823b-7c7eb84f2f76",
+ "isActive": false,
+ "balance": "$3,643.96",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "blue",
+ "name": "Parrish Alexander",
+ "gender": "male",
+ "company": "VELITY",
+ "email": "parrishalexander@velity.com",
+ "phone": "+1 (977) 447-3073",
+ "address": "251 Kent Street, Nicut, Maine, 3602",
+ "about": "Commodo Lorem officia aliqua aliqua mollit Lorem eu excepteur pariatur. Dolor in et consequat ipsum exercitation duis velit mollit voluptate aliqua dolor voluptate. Laborum sunt exercitation eiusmod cillum minim excepteur sit sint ullamco tempor. Ut sunt non consequat consequat laborum consectetur commodo id est. Adipisicing esse quis ullamco fugiat incididunt. Incididunt minim consequat fugiat laborum dolor amet ipsum elit ea.\r\n",
+ "registered": "2014-05-03T17:52:35 -02:00",
+ "latitude": -0.205698,
+ "longitude": -22.849141,
+ "tags": [
+ "minim",
+ "excepteur",
+ "ullamco",
+ "aute",
+ "eiusmod",
+ "cupidatat",
+ "do"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Barbara Gilbert"
+ },
+ {
+ "id": 1,
+ "name": "Felecia Gardner"
+ },
+ {
+ "id": 2,
+ "name": "Padilla Mcleod"
+ }
+ ],
+ "greeting": "Hello, Parrish Alexander! You have 3 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03affd30a9d76585cf71",
+ "index": 207,
+ "guid": "0ed545ef-524a-4fed-bfc8-ae5f1ef608a4",
+ "isActive": true,
+ "balance": "$3,017.30",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "brown",
+ "name": "Hogan Molina",
+ "gender": "male",
+ "company": "TRI@TRIBALOG",
+ "email": "hoganmolina@tri@tribalog.com",
+ "phone": "+1 (844) 546-3228",
+ "address": "947 Times Placez, Corinne, Utah, 6789",
+ "about": "Consequat pariatur laboris nostrud amet non qui incididunt. Magna culpa magna non cillum aute ullamco ad aliquip fugiat. Cupidatat dolore sunt ad do consectetur cupidatat est dolor ullamco do quis sint occaecat. Officia Lorem proident enim sint nostrud qui.\r\n",
+ "registered": "2015-01-27T03:04:28 -01:00",
+ "latitude": 50.775548,
+ "longitude": -173.656793,
+ "tags": [
+ "non",
+ "proident",
+ "quis",
+ "anim",
+ "quis",
+ "consequat",
+ "culpa"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Della Bonner"
+ },
+ {
+ "id": 1,
+ "name": "Elizabeth Huffman"
+ },
+ {
+ "id": 2,
+ "name": "Mays Harmon"
+ }
+ ],
+ "greeting": "Hello, Hogan Molina! You have 8 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afd14c991eb230cd3e",
+ "index": 208,
+ "guid": "c21fa73a-7912-4ef1-a55a-ac8c8f68f569",
+ "isActive": false,
+ "balance": "$1,929.90",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "brown",
+ "name": "Jane Haney",
+ "gender": "female",
+ "company": "SECURIA",
+ "email": "janehaney@securia.com",
+ "phone": "+1 (995) 581-2398",
+ "address": "693 Chauncey Street, Gouglersville, West Virginia, 9950",
+ "about": "Lorem incididunt ut dolor ullamco amet. Mollit ea laborum proident laboris velit do laborum. Qui incididunt culpa aute mollit nulla officia amet consectetur eiusmod labore quis laboris. Elit reprehenderit sit pariatur commodo ullamco ex proident pariatur fugiat. Ut magna deserunt fugiat ullamco ut proident do cupidatat excepteur aliquip cillum. Et nisi anim consequat incididunt laborum. Veniam consectetur aute proident sunt reprehenderit adipisicing amet officia magna esse mollit fugiat esse minim.\r\n",
+ "registered": "2014-10-08T19:55:18 -02:00",
+ "latitude": -59.73834,
+ "longitude": -139.204897,
+ "tags": [
+ "aliquip",
+ "ea",
+ "qui",
+ "ipsum",
+ "velit",
+ "eu",
+ "labore"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Thompson Soto"
+ },
+ {
+ "id": 1,
+ "name": "Lindsay Lester"
+ },
+ {
+ "id": 2,
+ "name": "Kara Cooley"
+ }
+ ],
+ "greeting": "Hello, Jane Haney! You have 4 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af5762abb6e88945ac",
+ "index": 209,
+ "guid": "7644be74-dc48-4d10-9e3b-c434a2ceb69d",
+ "isActive": false,
+ "balance": "$1,399.20",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "blue",
+ "name": "Josephine Mcgowan",
+ "gender": "female",
+ "company": "GYNK",
+ "email": "josephinemcgowan@gynk.com",
+ "phone": "+1 (822) 409-3720",
+ "address": "479 Centre Street, Whipholt, Virginia, 7458",
+ "about": "Mollit qui esse reprehenderit culpa. Cillum quis occaecat deserunt sunt esse. Culpa minim tempor in cupidatat. Duis id in eu ut. Fugiat in exercitation nulla tempor. Esse veniam anim do labore dolore ut pariatur in sint.\r\n",
+ "registered": "2014-07-03T01:55:06 -02:00",
+ "latitude": 46.367108,
+ "longitude": -58.539703,
+ "tags": [
+ "ea",
+ "commodo",
+ "commodo",
+ "eiusmod",
+ "minim",
+ "deserunt",
+ "Lorem"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "May Guy"
+ },
+ {
+ "id": 1,
+ "name": "Davenport Burgess"
+ },
+ {
+ "id": 2,
+ "name": "Katelyn Cameron"
+ }
+ ],
+ "greeting": "Hello, Josephine Mcgowan! You have 10 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afe218927f39bfe679",
+ "index": 210,
+ "guid": "0f7d672c-fa4b-4c8c-820c-b99468a4f23e",
+ "isActive": false,
+ "balance": "$1,718.89",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "brown",
+ "name": "Rice Mason",
+ "gender": "male",
+ "company": "CAPSCREEN",
+ "email": "ricemason@capscreen.com",
+ "phone": "+1 (973) 412-2952",
+ "address": "490 Commercial Street, Hilltop, Florida, 1623",
+ "about": "Ex aliqua ea do et. Enim nisi veniam consequat enim Lorem exercitation. Eiusmod minim ea quis labore consectetur velit excepteur proident deserunt. Amet mollit reprehenderit enim fugiat id reprehenderit anim sint duis veniam tempor Lorem non do.\r\n",
+ "registered": "2015-03-12T00:09:42 -01:00",
+ "latitude": 25.637301,
+ "longitude": -114.695085,
+ "tags": [
+ "occaecat",
+ "cillum",
+ "id",
+ "enim",
+ "amet",
+ "voluptate",
+ "anim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Erma Garner"
+ },
+ {
+ "id": 1,
+ "name": "Bentley Craft"
+ },
+ {
+ "id": 2,
+ "name": "Stacie Moses"
+ }
+ ],
+ "greeting": "Hello, Rice Mason! You have 8 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afa00cfcda6c9678c5",
+ "index": 211,
+ "guid": "5fc72a94-ba93-4c1b-b553-45703fa4830b",
+ "isActive": false,
+ "balance": "$3,858.44",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "green",
+ "name": "Ellison Barron",
+ "gender": "male",
+ "company": "XELEGYL",
+ "email": "ellisonbarron@xelegyl.com",
+ "phone": "+1 (807) 525-2193",
+ "address": "286 Stone Avenue, Durham, Texas, 4776",
+ "about": "Qui Lorem ea est enim nostrud non mollit incididunt consectetur. Nostrud velit occaecat deserunt id irure do non laboris quis nisi. Amet reprehenderit ex ipsum duis tempor nulla tempor minim laboris pariatur consectetur non. Exercitation Lorem laboris laboris elit sint laborum elit sit aliqua occaecat. Anim non ad qui sint nisi nostrud tempor reprehenderit.\r\n",
+ "registered": "2014-11-26T18:40:32 -01:00",
+ "latitude": 40.286572,
+ "longitude": -66.732257,
+ "tags": [
+ "qui",
+ "veniam",
+ "ea",
+ "do",
+ "voluptate",
+ "pariatur",
+ "ipsum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Nixon Kline"
+ },
+ {
+ "id": 1,
+ "name": "Spencer Nguyen"
+ },
+ {
+ "id": 2,
+ "name": "Aileen Hansen"
+ }
+ ],
+ "greeting": "Hello, Ellison Barron! You have 6 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af4b63484d24152a8d",
+ "index": 212,
+ "guid": "568dc18d-e7b5-4049-beed-e99caaa098d6",
+ "isActive": false,
+ "balance": "$1,506.24",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "brown",
+ "name": "Sybil Sanford",
+ "gender": "female",
+ "company": "DIGIGENE",
+ "email": "sybilsanford@digigene.com",
+ "phone": "+1 (829) 599-3447",
+ "address": "612 Cook Street, Sandston, Guam, 863",
+ "about": "Exercitation proident deserunt consectetur laborum ut aliquip laboris. Deserunt occaecat sit exercitation esse excepteur reprehenderit ea dolor consectetur sit. Fugiat ipsum est elit duis incididunt. Id duis est et incididunt in quis labore nulla proident cillum sunt amet adipisicing excepteur. Amet exercitation culpa aliqua et pariatur nulla ad ea eu cupidatat.\r\n",
+ "registered": "2014-06-12T18:29:03 -02:00",
+ "latitude": 50.048205,
+ "longitude": 173.216555,
+ "tags": [
+ "excepteur",
+ "elit",
+ "exercitation",
+ "laboris",
+ "laborum",
+ "non",
+ "velit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Barker Morse"
+ },
+ {
+ "id": 1,
+ "name": "Wilma Horton"
+ },
+ {
+ "id": 2,
+ "name": "Schwartz Clements"
+ }
+ ],
+ "greeting": "Hello, Sybil Sanford! You have 6 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af52551d65be1ec527",
+ "index": 213,
+ "guid": "ce208595-f698-493e-bb4f-31d245203c0c",
+ "isActive": false,
+ "balance": "$2,959.03",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "blue",
+ "name": "Lisa Wolf",
+ "gender": "female",
+ "company": "ZERBINA",
+ "email": "lisawolf@zerbina.com",
+ "phone": "+1 (932) 598-2388",
+ "address": "143 Branton Street, Sabillasville, Alaska, 2788",
+ "about": "Excepteur ut excepteur mollit commodo officia ad. Magna aliqua consequat minim dolor consectetur amet tempor sunt amet do. Anim Lorem Lorem nostrud velit id ullamco exercitation duis. Officia ipsum commodo enim sit ullamco et amet. Eiusmod ex ipsum esse commodo laborum do pariatur cillum magna cupidatat. Nostrud qui aute dolore nostrud mollit laborum nisi.\r\n",
+ "registered": "2014-01-07T09:50:42 -01:00",
+ "latitude": -24.244946,
+ "longitude": -79.22855,
+ "tags": [
+ "quis",
+ "cillum",
+ "duis",
+ "laborum",
+ "irure",
+ "cupidatat",
+ "voluptate"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Jan Browning"
+ },
+ {
+ "id": 1,
+ "name": "Houston Mcpherson"
+ },
+ {
+ "id": 2,
+ "name": "Leigh Wilkins"
+ }
+ ],
+ "greeting": "Hello, Lisa Wolf! You have 7 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afd70a71469208fd7b",
+ "index": 214,
+ "guid": "d0b973e2-044d-4cae-b3d5-8baff48fee9e",
+ "isActive": false,
+ "balance": "$2,229.45",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "green",
+ "name": "Todd Davidson",
+ "gender": "male",
+ "company": "ZAPHIRE",
+ "email": "todddavidson@zaphire.com",
+ "phone": "+1 (882) 455-3214",
+ "address": "946 Ellery Street, Seymour, District Of Columbia, 3435",
+ "about": "Consequat esse laborum dolor eu aliqua exercitation quis mollit mollit veniam. Velit nisi labore deserunt minim occaecat reprehenderit nulla exercitation cupidatat. Culpa excepteur ad irure consequat cupidatat dolore sit. Veniam enim deserunt ex dolore cillum id. Veniam do cupidatat minim pariatur Lorem deserunt laboris. Id labore mollit sit dolore aliqua qui aliqua qui.\r\n",
+ "registered": "2014-09-20T12:10:26 -02:00",
+ "latitude": 85.099741,
+ "longitude": -155.443024,
+ "tags": [
+ "aliqua",
+ "adipisicing",
+ "ipsum",
+ "proident",
+ "dolor",
+ "laborum",
+ "consectetur"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Kent Neal"
+ },
+ {
+ "id": 1,
+ "name": "Joan Le"
+ },
+ {
+ "id": 2,
+ "name": "Trudy Ramirez"
+ }
+ ],
+ "greeting": "Hello, Todd Davidson! You have 1 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af74a25ec083474bba",
+ "index": 215,
+ "guid": "85b1c5cc-aa38-4c1b-8bef-29254f2d6cc4",
+ "isActive": true,
+ "balance": "$1,303.71",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "brown",
+ "name": "Zimmerman Acosta",
+ "gender": "male",
+ "company": "BOILICON",
+ "email": "zimmermanacosta@boilicon.com",
+ "phone": "+1 (971) 422-3489",
+ "address": "335 Cedar Street, Romeville, New York, 4277",
+ "about": "Velit reprehenderit duis commodo esse non in nulla labore. Do duis in cupidatat ea nostrud. Proident culpa aute deserunt do anim veniam cillum consectetur. Irure anim laboris ullamco duis aute. Magna ut magna nostrud consectetur magna deserunt ullamco.\r\n",
+ "registered": "2014-09-17T06:15:00 -02:00",
+ "latitude": -66.512444,
+ "longitude": 59.400484,
+ "tags": [
+ "sint",
+ "cupidatat",
+ "amet",
+ "esse",
+ "id",
+ "cillum",
+ "laboris"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Trisha Salas"
+ },
+ {
+ "id": 1,
+ "name": "Bradshaw Espinoza"
+ },
+ {
+ "id": 2,
+ "name": "Brooke Ellison"
+ }
+ ],
+ "greeting": "Hello, Zimmerman Acosta! You have 7 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afe7ff6a63e247873a",
+ "index": 216,
+ "guid": "3214807d-5a67-4822-9654-173fe6471f20",
+ "isActive": true,
+ "balance": "$2,893.78",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "brown",
+ "name": "Lupe Cash",
+ "gender": "female",
+ "company": "VINCH",
+ "email": "lupecash@vinch.com",
+ "phone": "+1 (875) 516-2828",
+ "address": "826 Rogers Avenue, Matthews, North Carolina, 4527",
+ "about": "Adipisicing ex sunt ex tempor reprehenderit ullamco officia adipisicing dolore cillum sit ullamco amet consectetur. Ex pariatur duis culpa ad mollit commodo amet. Ipsum aliqua nulla amet pariatur amet veniam mollit duis tempor consequat ullamco. Nisi minim esse occaecat incididunt duis. Culpa cillum mollit cupidatat irure dolore laborum esse nulla magna. Quis cupidatat consectetur incididunt fugiat laboris incididunt dolor dolore sint laboris proident.\r\n",
+ "registered": "2014-11-16T10:56:40 -01:00",
+ "latitude": 21.762745,
+ "longitude": 153.593566,
+ "tags": [
+ "eu",
+ "ut",
+ "deserunt",
+ "dolore",
+ "aute",
+ "magna",
+ "adipisicing"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Margery Park"
+ },
+ {
+ "id": 1,
+ "name": "Cheri Padilla"
+ },
+ {
+ "id": 2,
+ "name": "Elsa Rollins"
+ }
+ ],
+ "greeting": "Hello, Lupe Cash! You have 6 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af16c2fb6ed9987f30",
+ "index": 217,
+ "guid": "0e5c7ce3-c951-4a16-a5f2-769a2532d77a",
+ "isActive": false,
+ "balance": "$3,100.29",
+ "picture": "http://placehold.it/32x32",
+ "age": 32,
+ "eyeColor": "brown",
+ "name": "Odessa Mack",
+ "gender": "female",
+ "company": "ZAGGLE",
+ "email": "odessamack@zaggle.com",
+ "phone": "+1 (875) 437-3309",
+ "address": "279 Corbin Place, Wheatfields, Connecticut, 5958",
+ "about": "Tempor velit dolore esse ad elit. Et eu tempor dolor sint laboris sunt in pariatur enim commodo. Tempor occaecat ea irure ut id veniam irure adipisicing.\r\n",
+ "registered": "2014-01-18T08:10:57 -01:00",
+ "latitude": -21.13577,
+ "longitude": 78.282885,
+ "tags": [
+ "in",
+ "do",
+ "dolore",
+ "deserunt",
+ "amet",
+ "mollit",
+ "ullamco"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Gonzalez Bass"
+ },
+ {
+ "id": 1,
+ "name": "Donovan Duran"
+ },
+ {
+ "id": 2,
+ "name": "Olive Galloway"
+ }
+ ],
+ "greeting": "Hello, Odessa Mack! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afec3c242411b4fd3d",
+ "index": 218,
+ "guid": "5979fb1d-5375-44e3-8569-9b95943b44e1",
+ "isActive": true,
+ "balance": "$1,066.11",
+ "picture": "http://placehold.it/32x32",
+ "age": 30,
+ "eyeColor": "blue",
+ "name": "Fern Guthrie",
+ "gender": "female",
+ "company": "ROCKYARD",
+ "email": "fernguthrie@rockyard.com",
+ "phone": "+1 (817) 484-2971",
+ "address": "217 Emmons Avenue, Golconda, South Carolina, 8787",
+ "about": "Deserunt excepteur sint esse dolor velit duis nostrud officia. Est consectetur enim dolor exercitation excepteur ipsum proident consectetur mollit aliquip esse dolor fugiat. Veniam ullamco consequat exercitation labore cupidatat sit ipsum.\r\n",
+ "registered": "2014-09-06T08:52:04 -02:00",
+ "latitude": -4.88841,
+ "longitude": -23.144087,
+ "tags": [
+ "proident",
+ "ad",
+ "amet",
+ "eiusmod",
+ "ex",
+ "dolore",
+ "exercitation"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Beatriz Sweeney"
+ },
+ {
+ "id": 1,
+ "name": "Melendez Burke"
+ },
+ {
+ "id": 2,
+ "name": "Cortez Kemp"
+ }
+ ],
+ "greeting": "Hello, Fern Guthrie! You have 7 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afa617401767921d0d",
+ "index": 219,
+ "guid": "f286bdd2-724f-4a4d-a2e0-2fff257822e8",
+ "isActive": false,
+ "balance": "$2,339.24",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "blue",
+ "name": "Adele Prince",
+ "gender": "female",
+ "company": "BIOSPAN",
+ "email": "adeleprince@biospan.com",
+ "phone": "+1 (925) 455-3930",
+ "address": "693 Elliott Walk, Delshire, Rhode Island, 8272",
+ "about": "Commodo ut nostrud nostrud aliquip duis laborum nisi sunt irure non nostrud minim ad aliqua. Sit eu do ut deserunt. Pariatur in aliqua Lorem cillum ea adipisicing minim veniam officia enim excepteur aute. Adipisicing fugiat duis consectetur proident sit Lorem minim. Exercitation nulla qui nisi officia quis irure consectetur Lorem tempor.\r\n",
+ "registered": "2014-10-15T17:56:56 -02:00",
+ "latitude": 31.597814,
+ "longitude": -144.451135,
+ "tags": [
+ "exercitation",
+ "pariatur",
+ "mollit",
+ "minim",
+ "cillum",
+ "incididunt",
+ "amet"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Ryan Dunn"
+ },
+ {
+ "id": 1,
+ "name": "Tamra Richards"
+ },
+ {
+ "id": 2,
+ "name": "Mcpherson Wiley"
+ }
+ ],
+ "greeting": "Hello, Adele Prince! You have 8 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af5e05dea0a03fd52e",
+ "index": 220,
+ "guid": "aeb9f8aa-867d-42df-aaff-6b76d48f6932",
+ "isActive": true,
+ "balance": "$1,654.40",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "brown",
+ "name": "Rosa Horne",
+ "gender": "female",
+ "company": "JAMNATION",
+ "email": "rosahorne@jamnation.com",
+ "phone": "+1 (831) 590-2983",
+ "address": "637 Nassau Street, Utting, Pennsylvania, 5803",
+ "about": "Lorem exercitation aliquip commodo cillum. Minim velit commodo laboris pariatur veniam occaecat non consectetur. Officia quis nostrud mollit consequat minim aute velit irure occaecat mollit. Cupidatat id veniam exercitation laborum elit culpa mollit excepteur sunt. Laboris nulla id in elit incididunt commodo occaecat excepteur quis. Sunt minim exercitation dolore aliqua Lorem pariatur proident ad officia minim.\r\n",
+ "registered": "2015-04-23T14:06:56 -02:00",
+ "latitude": -12.968285,
+ "longitude": -116.736743,
+ "tags": [
+ "enim",
+ "ex",
+ "est",
+ "exercitation",
+ "id",
+ "in",
+ "ullamco"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Beard Reilly"
+ },
+ {
+ "id": 1,
+ "name": "Castaneda Bullock"
+ },
+ {
+ "id": 2,
+ "name": "Alexandria Noble"
+ }
+ ],
+ "greeting": "Hello, Rosa Horne! You have 10 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af2dc39414ac6ece02",
+ "index": 221,
+ "guid": "4a99bdd3-d1b4-4f74-b743-311dfb57a497",
+ "isActive": false,
+ "balance": "$3,731.14",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "blue",
+ "name": "Kirkland Salazar",
+ "gender": "male",
+ "company": "SURETECH",
+ "email": "kirklandsalazar@suretech.com",
+ "phone": "+1 (853) 594-3694",
+ "address": "868 Benson Avenue, Frizzleburg, Oklahoma, 9717",
+ "about": "Pariatur ipsum magna duis ipsum fugiat nulla minim do anim voluptate duis. Consequat aliqua sunt sint sint proident consequat aliqua Lorem qui in nostrud. Amet labore et excepteur qui incididunt est minim proident pariatur cillum labore laborum ullamco excepteur. In deserunt consequat culpa ea id id. Sit id esse aliqua cillum in adipisicing.\r\n",
+ "registered": "2014-06-08T22:02:10 -02:00",
+ "latitude": -37.423486,
+ "longitude": -50.124008,
+ "tags": [
+ "minim",
+ "eiusmod",
+ "voluptate",
+ "ullamco",
+ "velit",
+ "amet",
+ "occaecat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "William Moreno"
+ },
+ {
+ "id": 1,
+ "name": "Alexandra Atkins"
+ },
+ {
+ "id": 2,
+ "name": "Doreen Crawford"
+ }
+ ],
+ "greeting": "Hello, Kirkland Salazar! You have 10 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af09df7124c2bdc4e0",
+ "index": 222,
+ "guid": "d7d4de4c-0371-4b42-b34c-a675cb6d83ee",
+ "isActive": true,
+ "balance": "$1,433.17",
+ "picture": "http://placehold.it/32x32",
+ "age": 26,
+ "eyeColor": "brown",
+ "name": "Weaver Allison",
+ "gender": "male",
+ "company": "VIRVA",
+ "email": "weaverallison@virva.com",
+ "phone": "+1 (849) 554-3132",
+ "address": "516 Court Street, Noxen, Kansas, 9001",
+ "about": "Irure qui consequat qui do ut. Ex minim quis ea duis enim magna enim aute. Veniam dolore elit minim eu exercitation irure ut. Eiusmod sunt pariatur sunt enim voluptate incididunt esse occaecat. Mollit nulla quis deserunt sint velit veniam duis voluptate id nostrud ad ad aliqua quis. Culpa velit minim amet ex aliqua irure sunt veniam officia sit veniam. Pariatur est elit magna ea laboris.\r\n",
+ "registered": "2015-04-17T22:13:54 -02:00",
+ "latitude": -85.892727,
+ "longitude": 24.646256,
+ "tags": [
+ "consequat",
+ "ex",
+ "nisi",
+ "elit",
+ "pariatur",
+ "minim",
+ "adipisicing"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Riley Duke"
+ },
+ {
+ "id": 1,
+ "name": "Sabrina Cooper"
+ },
+ {
+ "id": 2,
+ "name": "Susana Jefferson"
+ }
+ ],
+ "greeting": "Hello, Weaver Allison! You have 10 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afe517c587697595cb",
+ "index": 223,
+ "guid": "f2cd44e5-c37a-4629-94ea-eef88bbe8d3f",
+ "isActive": false,
+ "balance": "$3,220.59",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "blue",
+ "name": "Wheeler Hines",
+ "gender": "male",
+ "company": "TRANSLINK",
+ "email": "wheelerhines@translink.com",
+ "phone": "+1 (975) 450-2764",
+ "address": "908 John Street, Wanship, Kentucky, 6096",
+ "about": "Culpa irure duis laborum cupidatat reprehenderit sint voluptate nulla sint ullamco pariatur enim. Proident nisi non officia nostrud aute commodo pariatur duis ullamco veniam incididunt sunt aliqua tempor. Ea minim sit sit culpa dolor.\r\n",
+ "registered": "2015-03-02T03:23:38 -01:00",
+ "latitude": 20.70596,
+ "longitude": -155.705377,
+ "tags": [
+ "nulla",
+ "consectetur",
+ "reprehenderit",
+ "laborum",
+ "commodo",
+ "do",
+ "velit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Farmer Patton"
+ },
+ {
+ "id": 1,
+ "name": "Terry Kent"
+ },
+ {
+ "id": 2,
+ "name": "Ewing Pace"
+ }
+ ],
+ "greeting": "Hello, Wheeler Hines! You have 1 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af4b0c5ec7f553cd75",
+ "index": 224,
+ "guid": "cfd34428-a7e8-4ec3-9d56-601db02d9eef",
+ "isActive": false,
+ "balance": "$3,979.53",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "green",
+ "name": "Verna Nichols",
+ "gender": "female",
+ "company": "RECRITUBE",
+ "email": "vernanichols@recritube.com",
+ "phone": "+1 (839) 457-2502",
+ "address": "853 Pine Street, Hasty, Mississippi, 6073",
+ "about": "Ipsum non est excepteur quis. Ex aliquip ad velit sit nisi duis veniam. Veniam commodo sit sint Lorem occaecat ad qui excepteur eu proident occaecat enim commodo. Cillum sit mollit nisi irure proident.\r\n",
+ "registered": "2014-04-15T02:20:19 -02:00",
+ "latitude": -87.061023,
+ "longitude": -23.88917,
+ "tags": [
+ "incididunt",
+ "in",
+ "officia",
+ "ex",
+ "consectetur",
+ "voluptate",
+ "eiusmod"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Fischer Walters"
+ },
+ {
+ "id": 1,
+ "name": "Alberta Woods"
+ },
+ {
+ "id": 2,
+ "name": "Liz Deleon"
+ }
+ ],
+ "greeting": "Hello, Verna Nichols! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afa9251e012b845ae7",
+ "index": 225,
+ "guid": "012e9b1a-7062-4514-a71f-c7ba4048f376",
+ "isActive": false,
+ "balance": "$1,507.62",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "blue",
+ "name": "Lynch Sparks",
+ "gender": "male",
+ "company": "FANFARE",
+ "email": "lynchsparks@fanfare.com",
+ "phone": "+1 (934) 563-3829",
+ "address": "974 Henry Street, Levant, Montana, 7868",
+ "about": "Labore cupidatat adipisicing eu incididunt ullamco aute minim do pariatur et eu. Consequat quis culpa consequat laborum ea tempor velit ad. Sunt consequat tempor proident duis ea deserunt. Consequat aliquip exercitation non pariatur dolore eiusmod.\r\n",
+ "registered": "2015-03-17T08:46:37 -01:00",
+ "latitude": -0.488154,
+ "longitude": -78.696558,
+ "tags": [
+ "irure",
+ "velit",
+ "nostrud",
+ "irure",
+ "in",
+ "commodo",
+ "cupidatat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Tiffany Harrell"
+ },
+ {
+ "id": 1,
+ "name": "Hess Ratliff"
+ },
+ {
+ "id": 2,
+ "name": "Hicks Wallace"
+ }
+ ],
+ "greeting": "Hello, Lynch Sparks! You have 4 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afc75224b81b5f546a",
+ "index": 226,
+ "guid": "44f5a855-ec56-4406-b374-73824c7e9265",
+ "isActive": true,
+ "balance": "$1,040.39",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "blue",
+ "name": "Woodard Swanson",
+ "gender": "male",
+ "company": "TWIIST",
+ "email": "woodardswanson@twiist.com",
+ "phone": "+1 (860) 529-2645",
+ "address": "240 Brooklyn Avenue, Albrightsville, North Dakota, 9232",
+ "about": "Exercitation in aliqua non id eu sint sint deserunt do elit elit Lorem. Do cillum irure veniam in sint elit. Ullamco mollit in exercitation sunt officia aliqua nostrud voluptate. Cupidatat occaecat cillum eiusmod adipisicing sunt esse sint proident. Irure irure consectetur Lorem elit in enim minim esse elit nulla ipsum nisi. Aliquip commodo occaecat ipsum sit anim laborum tempor exercitation tempor nisi dolore voluptate aliqua. Cillum laboris qui velit cupidatat laborum.\r\n",
+ "registered": "2015-03-21T09:07:56 -01:00",
+ "latitude": -28.720015,
+ "longitude": -47.996373,
+ "tags": [
+ "commodo",
+ "commodo",
+ "magna",
+ "sit",
+ "minim",
+ "dolore",
+ "laborum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Jenkins Snyder"
+ },
+ {
+ "id": 1,
+ "name": "Guzman Donaldson"
+ },
+ {
+ "id": 2,
+ "name": "Knowles Vasquez"
+ }
+ ],
+ "greeting": "Hello, Woodard Swanson! You have 4 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af867cb193fce34f67",
+ "index": 227,
+ "guid": "31b7f6b1-b61d-43b4-944b-457f75ca8940",
+ "isActive": false,
+ "balance": "$3,143.62",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "brown",
+ "name": "Kathryn Pena",
+ "gender": "female",
+ "company": "OPTICON",
+ "email": "kathrynpena@opticon.com",
+ "phone": "+1 (826) 429-2247",
+ "address": "598 Matthews Place, Wollochet, Maryland, 5472",
+ "about": "Exercitation nulla minim voluptate ad adipisicing culpa id. Labore ipsum voluptate labore ad veniam fugiat ut aute occaecat ad ipsum nostrud sint cupidatat. Consequat ullamco est consequat consequat sunt. Ut velit sunt eu fugiat ipsum duis culpa veniam laboris sint aute cillum nulla adipisicing. In incididunt sit veniam id ullamco Lorem ea adipisicing laborum elit velit ipsum eu. Eiusmod pariatur aute enim irure occaecat ex. Anim nisi velit dolore commodo ullamco nulla cupidatat nisi non.\r\n",
+ "registered": "2014-12-07T01:03:57 -01:00",
+ "latitude": 62.056499,
+ "longitude": -120.680344,
+ "tags": [
+ "ullamco",
+ "consequat",
+ "mollit",
+ "proident",
+ "anim",
+ "nulla",
+ "sint"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Webb Puckett"
+ },
+ {
+ "id": 1,
+ "name": "Alyce Carey"
+ },
+ {
+ "id": 2,
+ "name": "Harper Holmes"
+ }
+ ],
+ "greeting": "Hello, Kathryn Pena! You have 3 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af6887b4e59a46854a",
+ "index": 228,
+ "guid": "1b3ad38c-2466-4d2d-961b-d0ae07db3b27",
+ "isActive": false,
+ "balance": "$2,486.28",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "green",
+ "name": "Dixie Kidd",
+ "gender": "female",
+ "company": "REPETWIRE",
+ "email": "dixiekidd@repetwire.com",
+ "phone": "+1 (910) 408-3932",
+ "address": "843 Kermit Place, Thynedale, Hawaii, 4469",
+ "about": "Incididunt minim do ut ullamco fugiat aliquip sint. Adipisicing mollit do voluptate laboris. Esse elit consequat ex ullamco ea sunt. Minim eu culpa officia quis ea ea do in duis dolor. Sit nostrud velit velit anim elit et do eu consectetur velit.\r\n",
+ "registered": "2014-07-13T22:17:13 -02:00",
+ "latitude": 31.945785,
+ "longitude": 174.521555,
+ "tags": [
+ "Lorem",
+ "elit",
+ "sint",
+ "aliquip",
+ "id",
+ "in",
+ "nulla"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Bobbie Fulton"
+ },
+ {
+ "id": 1,
+ "name": "Sherrie Ortiz"
+ },
+ {
+ "id": 2,
+ "name": "Alston Britt"
+ }
+ ],
+ "greeting": "Hello, Dixie Kidd! You have 7 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af09deb89f7ce577fa",
+ "index": 229,
+ "guid": "33bd69d8-19d1-477b-96ce-7c6cfbc02805",
+ "isActive": false,
+ "balance": "$2,433.09",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "blue",
+ "name": "Manning Mclaughlin",
+ "gender": "male",
+ "company": "JUNIPOOR",
+ "email": "manningmclaughlin@junipoor.com",
+ "phone": "+1 (861) 404-2241",
+ "address": "436 Cherry Street, Guthrie, Arizona, 9515",
+ "about": "Quis dolore non eu ex consequat. Minim velit quis est adipisicing. Officia culpa Lorem ut minim fugiat. Incididunt aliquip aliqua consequat nisi.\r\n",
+ "registered": "2014-04-15T06:54:25 -02:00",
+ "latitude": -65.492665,
+ "longitude": 51.957217,
+ "tags": [
+ "anim",
+ "esse",
+ "et",
+ "sint",
+ "labore",
+ "non",
+ "non"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Stafford Norris"
+ },
+ {
+ "id": 1,
+ "name": "Morin Schmidt"
+ },
+ {
+ "id": 2,
+ "name": "Cora Hughes"
+ }
+ ],
+ "greeting": "Hello, Manning Mclaughlin! You have 3 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afbeed5eeb42b69ccf",
+ "index": 230,
+ "guid": "a617b9e7-0d9f-4820-b385-a7454fc7c564",
+ "isActive": false,
+ "balance": "$1,611.17",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "green",
+ "name": "Kimberly Wall",
+ "gender": "female",
+ "company": "STUCCO",
+ "email": "kimberlywall@stucco.com",
+ "phone": "+1 (896) 424-3668",
+ "address": "837 Division Avenue, Forbestown, Arkansas, 1921",
+ "about": "Amet amet dolor est ut cillum nulla consectetur excepteur est laboris ipsum consectetur eu ut. Duis officia Lorem occaecat et voluptate non sint occaecat irure ex consectetur elit. Do incididunt pariatur nulla velit exercitation aliqua ad ex occaecat laboris voluptate ipsum eiusmod. Occaecat amet anim incididunt et id ullamco ullamco ex quis.\r\n",
+ "registered": "2014-10-02T20:21:04 -02:00",
+ "latitude": 40.305712,
+ "longitude": -104.767543,
+ "tags": [
+ "tempor",
+ "do",
+ "tempor",
+ "et",
+ "magna",
+ "nisi",
+ "duis"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Curtis Talley"
+ },
+ {
+ "id": 1,
+ "name": "Ramirez Weiss"
+ },
+ {
+ "id": 2,
+ "name": "Hope Lyons"
+ }
+ ],
+ "greeting": "Hello, Kimberly Wall! You have 4 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afa8ddd7018d37ba0c",
+ "index": 231,
+ "guid": "2ce01ebc-594d-4fb3-b0b6-34697400e949",
+ "isActive": true,
+ "balance": "$2,969.76",
+ "picture": "http://placehold.it/32x32",
+ "age": 28,
+ "eyeColor": "blue",
+ "name": "Jewell Adkins",
+ "gender": "female",
+ "company": "TERRAGEN",
+ "email": "jewelladkins@terragen.com",
+ "phone": "+1 (820) 550-3992",
+ "address": "142 Bushwick Court, Roulette, Nevada, 3364",
+ "about": "Id culpa laboris pariatur aliquip. Ex aliquip pariatur veniam reprehenderit consequat elit consectetur in qui incididunt. Non officia magna Lorem exercitation excepteur eiusmod nisi. Do minim velit nulla sint culpa cupidatat eiusmod culpa. Ex labore dolor aute esse veniam velit eiusmod. Occaecat anim ex nostrud adipisicing eiusmod dolore ea. Minim nostrud veniam anim laborum est esse magna reprehenderit officia voluptate duis amet labore do.\r\n",
+ "registered": "2014-01-31T22:38:01 -01:00",
+ "latitude": 0.319124,
+ "longitude": 155.217671,
+ "tags": [
+ "qui",
+ "sunt",
+ "dolor",
+ "incididunt",
+ "qui",
+ "nostrud",
+ "eu"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Wagner Mckenzie"
+ },
+ {
+ "id": 1,
+ "name": "Mindy Finley"
+ },
+ {
+ "id": 2,
+ "name": "Landry Downs"
+ }
+ ],
+ "greeting": "Hello, Jewell Adkins! You have 3 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af1c68f0ee0e0df861",
+ "index": 232,
+ "guid": "b907dbd4-bfd9-4dc8-aa2a-e08fc1f35b51",
+ "isActive": true,
+ "balance": "$2,158.25",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "brown",
+ "name": "Hinton Waller",
+ "gender": "male",
+ "company": "ZENTHALL",
+ "email": "hintonwaller@zenthall.com",
+ "phone": "+1 (998) 438-2358",
+ "address": "832 Cobek Court, Rosburg, New Jersey, 1668",
+ "about": "Irure veniam sunt aliquip laboris amet nisi magna. Labore nostrud veniam velit eu in laborum. Voluptate duis consequat cupidatat mollit elit. Cupidatat sit voluptate deserunt excepteur ullamco ut et. Deserunt Lorem reprehenderit sunt culpa in.\r\n",
+ "registered": "2014-06-15T16:35:47 -02:00",
+ "latitude": -25.697619,
+ "longitude": 120.495505,
+ "tags": [
+ "officia",
+ "cupidatat",
+ "consequat",
+ "laborum",
+ "aute",
+ "anim",
+ "excepteur"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Schroeder Bishop"
+ },
+ {
+ "id": 1,
+ "name": "Marshall Gonzalez"
+ },
+ {
+ "id": 2,
+ "name": "Lorene Alston"
+ }
+ ],
+ "greeting": "Hello, Hinton Waller! You have 7 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af3b363310d368e863",
+ "index": 233,
+ "guid": "91e05ef0-4f68-4bcf-9c25-9d8e0cf6b4fe",
+ "isActive": true,
+ "balance": "$2,634.37",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "green",
+ "name": "Jean Bowman",
+ "gender": "female",
+ "company": "TURNLING",
+ "email": "jeanbowman@turnling.com",
+ "phone": "+1 (937) 425-2900",
+ "address": "645 Stryker Street, Villarreal, Marshall Islands, 7114",
+ "about": "Ex nulla ea consectetur dolor aliquip mollit velit magna magna esse aute. Veniam veniam consectetur ex aliquip aliqua magna esse incididunt aliqua esse nisi mollit qui. Laboris duis eu consequat et. Voluptate occaecat elit tempor labore excepteur proident. Dolor minim veniam reprehenderit incididunt velit duis veniam magna magna officia commodo occaecat. Velit est laboris sit excepteur ipsum sit adipisicing. Et amet consequat officia non consequat fugiat esse irure dolor tempor aliquip.\r\n",
+ "registered": "2014-01-24T06:48:09 -01:00",
+ "latitude": -47.673527,
+ "longitude": 18.13321,
+ "tags": [
+ "deserunt",
+ "Lorem",
+ "ex",
+ "non",
+ "qui",
+ "nostrud",
+ "consectetur"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Jacobs Tyler"
+ },
+ {
+ "id": 1,
+ "name": "Patrice Mcfadden"
+ },
+ {
+ "id": 2,
+ "name": "Davidson Roach"
+ }
+ ],
+ "greeting": "Hello, Jean Bowman! You have 1 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afd095e3f74c0567ed",
+ "index": 234,
+ "guid": "e76a4a69-514e-488c-8c47-4c963585a678",
+ "isActive": true,
+ "balance": "$3,043.77",
+ "picture": "http://placehold.it/32x32",
+ "age": 22,
+ "eyeColor": "brown",
+ "name": "Sanford Alvarez",
+ "gender": "male",
+ "company": "STEELFAB",
+ "email": "sanfordalvarez@steelfab.com",
+ "phone": "+1 (854) 534-3286",
+ "address": "770 Harbor Court, Lowgap, Georgia, 3450",
+ "about": "Do mollit duis nostrud adipisicing adipisicing laborum aute consectetur anim sit. Labore et velit ipsum nisi anim commodo occaecat veniam nostrud enim consequat nulla elit. In duis voluptate incididunt est ut.\r\n",
+ "registered": "2015-02-13T12:50:22 -01:00",
+ "latitude": 80.043482,
+ "longitude": 58.798267,
+ "tags": [
+ "quis",
+ "eu",
+ "veniam",
+ "in",
+ "exercitation",
+ "eu",
+ "in"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Camacho Roberson"
+ },
+ {
+ "id": 1,
+ "name": "Lydia Wise"
+ },
+ {
+ "id": 2,
+ "name": "Kelley Bauer"
+ }
+ ],
+ "greeting": "Hello, Sanford Alvarez! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af76e4caac1daebe25",
+ "index": 235,
+ "guid": "3337d373-9262-47bb-a16d-cbfc165f3bdc",
+ "isActive": false,
+ "balance": "$1,938.12",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "green",
+ "name": "Barrett Lowe",
+ "gender": "male",
+ "company": "GEEKY",
+ "email": "barrettlowe@geeky.com",
+ "phone": "+1 (830) 526-2278",
+ "address": "736 Oakland Place, Saranap, Virgin Islands, 3209",
+ "about": "Aliquip eiusmod occaecat laboris excepteur. Voluptate adipisicing ipsum ad est adipisicing. Ea in non aute excepteur consequat ea cillum irure eiusmod et tempor consequat dolor. Esse labore occaecat labore aliqua non enim aute. Ut sunt aliquip exercitation in amet veniam voluptate aliquip cillum ad. Occaecat magna adipisicing laboris esse aliqua voluptate nostrud. Est amet dolor nostrud non mollit do.\r\n",
+ "registered": "2014-05-11T13:51:31 -02:00",
+ "latitude": -35.358785,
+ "longitude": -96.569469,
+ "tags": [
+ "ipsum",
+ "amet",
+ "occaecat",
+ "amet",
+ "nulla",
+ "in",
+ "laboris"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Danielle Landry"
+ },
+ {
+ "id": 1,
+ "name": "Wyatt Hess"
+ },
+ {
+ "id": 2,
+ "name": "Macias Perez"
+ }
+ ],
+ "greeting": "Hello, Barrett Lowe! You have 9 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af8e8b5c853a0cb41d",
+ "index": 236,
+ "guid": "e3ac1b1d-563f-4073-b6f4-5f410a116e35",
+ "isActive": false,
+ "balance": "$2,882.83",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "green",
+ "name": "Cassie Simon",
+ "gender": "female",
+ "company": "RODEOMAD",
+ "email": "cassiesimon@rodeomad.com",
+ "phone": "+1 (873) 574-3274",
+ "address": "464 Mermaid Avenue, Eagletown, Colorado, 2367",
+ "about": "Ea consectetur ut consectetur ut do. Est culpa magna incididunt dolor voluptate proident eu eu tempor quis sit consequat. Pariatur sint consectetur mollit ad anim amet irure do. Ea sunt aliqua fugiat occaecat ut anim nostrud culpa eiusmod deserunt. Velit dolor aliqua ipsum do velit dolore magna culpa magna cillum nisi ut. Laboris duis mollit commodo minim laboris ipsum irure ea ullamco.\r\n",
+ "registered": "2014-09-07T11:58:31 -02:00",
+ "latitude": 80.932221,
+ "longitude": 75.544899,
+ "tags": [
+ "minim",
+ "dolor",
+ "Lorem",
+ "commodo",
+ "veniam",
+ "aliqua",
+ "irure"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Gordon Holder"
+ },
+ {
+ "id": 1,
+ "name": "Golden Flynn"
+ },
+ {
+ "id": 2,
+ "name": "Aurelia James"
+ }
+ ],
+ "greeting": "Hello, Cassie Simon! You have 4 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af468e8da42d27ae1b",
+ "index": 237,
+ "guid": "188ecb64-64a9-4c48-b4e8-5f0861520782",
+ "isActive": true,
+ "balance": "$1,089.22",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "green",
+ "name": "Collier Washington",
+ "gender": "male",
+ "company": "MANGELICA",
+ "email": "collierwashington@mangelica.com",
+ "phone": "+1 (803) 464-3492",
+ "address": "128 Doone Court, Buxton, Vermont, 327",
+ "about": "Dolore culpa qui aute in reprehenderit ea nisi deserunt in. Irure qui sunt nulla ullamco magna laboris labore labore excepteur. Ullamco excepteur excepteur anim officia amet exercitation minim laboris fugiat cupidatat. Ad consequat minim magna id consectetur.\r\n",
+ "registered": "2014-01-25T10:27:09 -01:00",
+ "latitude": -8.689492,
+ "longitude": 16.944853,
+ "tags": [
+ "laboris",
+ "veniam",
+ "fugiat",
+ "id",
+ "do",
+ "incididunt",
+ "sint"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Pate Howard"
+ },
+ {
+ "id": 1,
+ "name": "Becky Solomon"
+ },
+ {
+ "id": 2,
+ "name": "Velasquez Stephens"
+ }
+ ],
+ "greeting": "Hello, Collier Washington! You have 7 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afdf28b112094878d1",
+ "index": 238,
+ "guid": "8c8763df-11b9-4113-86fd-022f4b6b3d17",
+ "isActive": false,
+ "balance": "$2,065.74",
+ "picture": "http://placehold.it/32x32",
+ "age": 22,
+ "eyeColor": "green",
+ "name": "Alvarez Strickland",
+ "gender": "male",
+ "company": "ORBIXTAR",
+ "email": "alvarezstrickland@orbixtar.com",
+ "phone": "+1 (822) 456-3718",
+ "address": "890 Coyle Street, Machias, Minnesota, 8908",
+ "about": "Reprehenderit sit adipisicing ad dolore consequat velit nisi voluptate id dolore aute elit cillum sunt. Ut id mollit irure nisi laborum. Tempor ullamco id mollit anim labore cupidatat sunt laboris. Irure id ea est quis. Quis amet esse ad amet excepteur duis anim veniam irure eiusmod non labore pariatur. Do nostrud amet exercitation Lorem ex adipisicing nulla pariatur elit. Minim fugiat voluptate nulla labore tempor voluptate fugiat.\r\n",
+ "registered": "2015-02-02T09:26:06 -01:00",
+ "latitude": 74.422243,
+ "longitude": 97.085506,
+ "tags": [
+ "est",
+ "id",
+ "officia",
+ "anim",
+ "magna",
+ "ex",
+ "non"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Cline Barry"
+ },
+ {
+ "id": 1,
+ "name": "Stark Mccoy"
+ },
+ {
+ "id": 2,
+ "name": "Nell Baldwin"
+ }
+ ],
+ "greeting": "Hello, Alvarez Strickland! You have 10 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03affab05790177bc8d3",
+ "index": 239,
+ "guid": "20ddfd4d-81a1-45f3-aaf6-9edb11b92095",
+ "isActive": false,
+ "balance": "$3,915.11",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "brown",
+ "name": "Gabriela Lang",
+ "gender": "female",
+ "company": "GEEKWAGON",
+ "email": "gabrielalang@geekwagon.com",
+ "phone": "+1 (814) 420-3302",
+ "address": "708 Irvington Place, Juntura, New Mexico, 4250",
+ "about": "Amet reprehenderit enim commodo fugiat officia sit. Do eu do ipsum esse reprehenderit proident eiusmod. Nulla dolor sit magna irure non aliquip ex cillum occaecat nostrud velit. Sit qui amet consectetur consectetur sit proident nostrud magna quis consequat commodo. Ullamco aliqua dolore cupidatat velit in occaecat mollit deserunt aliquip occaecat nostrud. Laborum proident pariatur officia aliquip minim aliqua commodo elit velit laborum incididunt.\r\n",
+ "registered": "2015-01-25T08:35:16 -01:00",
+ "latitude": -18.240866,
+ "longitude": 144.93535,
+ "tags": [
+ "officia",
+ "eiusmod",
+ "amet",
+ "ea",
+ "et",
+ "fugiat",
+ "cillum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Faith Wynn"
+ },
+ {
+ "id": 1,
+ "name": "Virginia Burns"
+ },
+ {
+ "id": 2,
+ "name": "Jaime Key"
+ }
+ ],
+ "greeting": "Hello, Gabriela Lang! You have 5 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afe45b4fd102b25a1f",
+ "index": 240,
+ "guid": "a1713f43-abb3-43c4-99dc-77cd8e5fb88d",
+ "isActive": false,
+ "balance": "$3,202.37",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "blue",
+ "name": "Spence Fernandez",
+ "gender": "male",
+ "company": "COGNICODE",
+ "email": "spencefernandez@cognicode.com",
+ "phone": "+1 (924) 422-3710",
+ "address": "891 Hunterfly Place, Dorneyville, Alabama, 3236",
+ "about": "Eu excepteur consequat ex magna excepteur incididunt sint. Officia qui ex aliqua elit eu eiusmod proident laborum cupidatat. Et laboris sunt occaecat cupidatat nulla irure. Eu eiusmod ex sunt consequat reprehenderit dolore.\r\n",
+ "registered": "2014-12-19T08:07:13 -01:00",
+ "latitude": 57.268071,
+ "longitude": -46.956944,
+ "tags": [
+ "dolore",
+ "commodo",
+ "commodo",
+ "amet",
+ "excepteur",
+ "aliqua",
+ "Lorem"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Bush Henderson"
+ },
+ {
+ "id": 1,
+ "name": "Mona Travis"
+ },
+ {
+ "id": 2,
+ "name": "Eula Walton"
+ }
+ ],
+ "greeting": "Hello, Spence Fernandez! You have 5 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03affa5557a2623d7a77",
+ "index": 241,
+ "guid": "30822c73-a833-4997-85d4-a96f5e3e7908",
+ "isActive": false,
+ "balance": "$1,741.30",
+ "picture": "http://placehold.it/32x32",
+ "age": 26,
+ "eyeColor": "blue",
+ "name": "Cochran Lucas",
+ "gender": "male",
+ "company": "KENEGY",
+ "email": "cochranlucas@kenegy.com",
+ "phone": "+1 (905) 554-3963",
+ "address": "813 Lorraine Street, Adelino, Illinois, 6698",
+ "about": "Ad qui ut id aliqua ipsum anim. Lorem do eu reprehenderit nulla voluptate velit eu. Anim velit ipsum officia est elit sit. Velit laboris ullamco dolore occaecat ipsum ullamco. Voluptate dolor aliqua et non enim aute. Nostrud anim laboris deserunt ullamco non veniam ea et.\r\n",
+ "registered": "2015-01-20T08:07:06 -01:00",
+ "latitude": -57.022068,
+ "longitude": -85.583048,
+ "tags": [
+ "occaecat",
+ "reprehenderit",
+ "proident",
+ "labore",
+ "non",
+ "eiusmod",
+ "ipsum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Gardner Reid"
+ },
+ {
+ "id": 1,
+ "name": "Nadia Cohen"
+ },
+ {
+ "id": 2,
+ "name": "Reynolds Leonard"
+ }
+ ],
+ "greeting": "Hello, Cochran Lucas! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afe97fd854c78f2e99",
+ "index": 242,
+ "guid": "4054ded7-e4f4-4953-847f-50b13fa8517b",
+ "isActive": true,
+ "balance": "$2,934.27",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "blue",
+ "name": "Clarice Case",
+ "gender": "female",
+ "company": "WAZZU",
+ "email": "claricecase@wazzu.com",
+ "phone": "+1 (824) 482-2972",
+ "address": "533 Highland Boulevard, Smeltertown, Missouri, 4499",
+ "about": "Excepteur consequat consectetur laborum qui aliquip cillum dolor adipisicing excepteur esse ipsum. Elit cupidatat fugiat non culpa adipisicing anim nisi enim est. Esse eu ullamco nisi et. Ad exercitation irure sit ipsum mollit. Ut dolor minim occaecat cillum voluptate proident cillum minim Lorem ex tempor nulla consequat aute.\r\n",
+ "registered": "2014-02-28T09:04:37 -01:00",
+ "latitude": 31.52208,
+ "longitude": -84.870825,
+ "tags": [
+ "esse",
+ "quis",
+ "laboris",
+ "sit",
+ "anim",
+ "adipisicing",
+ "cupidatat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Carmen Green"
+ },
+ {
+ "id": 1,
+ "name": "Lou Henry"
+ },
+ {
+ "id": 2,
+ "name": "Donaldson Knapp"
+ }
+ ],
+ "greeting": "Hello, Clarice Case! You have 3 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af415a0ec21a9cfab0",
+ "index": 243,
+ "guid": "a538e798-2eea-4dba-b1f0-54f3a59f4b4f",
+ "isActive": true,
+ "balance": "$3,126.63",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "brown",
+ "name": "Wise Black",
+ "gender": "male",
+ "company": "CODAX",
+ "email": "wiseblack@codax.com",
+ "phone": "+1 (828) 572-3807",
+ "address": "844 Trucklemans Lane, Richmond, Oregon, 4131",
+ "about": "Exercitation cupidatat voluptate elit Lorem reprehenderit excepteur velit. Esse proident nostrud nostrud ea pariatur labore Lorem irure fugiat aute sint quis laboris. Mollit consequat labore voluptate sit non magna incididunt aliqua tempor. Ad exercitation consectetur mollit deserunt aliquip anim nisi qui exercitation magna enim dolor ipsum commodo. Esse laboris culpa incididunt nostrud.\r\n",
+ "registered": "2014-12-10T11:08:28 -01:00",
+ "latitude": -80.882172,
+ "longitude": -69.667738,
+ "tags": [
+ "nostrud",
+ "sint",
+ "aute",
+ "amet",
+ "aliquip",
+ "reprehenderit",
+ "labore"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Bradford Leon"
+ },
+ {
+ "id": 1,
+ "name": "Frank Collins"
+ },
+ {
+ "id": 2,
+ "name": "Janell Chandler"
+ }
+ ],
+ "greeting": "Hello, Wise Black! You have 3 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af39853b18e741c80d",
+ "index": 244,
+ "guid": "7120e67d-5f58-4f88-a861-bdae546e20a6",
+ "isActive": false,
+ "balance": "$1,700.19",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "green",
+ "name": "Diane Sampson",
+ "gender": "female",
+ "company": "COMVENE",
+ "email": "dianesampson@comvene.com",
+ "phone": "+1 (811) 537-3499",
+ "address": "625 Will Place, Cetronia, Federated States Of Micronesia, 2725",
+ "about": "Tempor est sit commodo esse id. Eu laborum reprehenderit culpa eu consectetur adipisicing veniam sint adipisicing. Nostrud tempor occaecat esse incididunt exercitation ullamco consectetur nisi ullamco duis qui magna. Commodo proident nulla irure minim exercitation deserunt exercitation Lorem esse irure. Et eiusmod ea quis excepteur aliqua.\r\n",
+ "registered": "2014-01-02T11:10:39 -01:00",
+ "latitude": 46.975365,
+ "longitude": -68.681706,
+ "tags": [
+ "consectetur",
+ "ea",
+ "Lorem",
+ "incididunt",
+ "aute",
+ "ea",
+ "fugiat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Hamilton Lindsey"
+ },
+ {
+ "id": 1,
+ "name": "Swanson Ashley"
+ },
+ {
+ "id": 2,
+ "name": "Kendra Bell"
+ }
+ ],
+ "greeting": "Hello, Diane Sampson! You have 8 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afb1ee763b89891841",
+ "index": 245,
+ "guid": "5dc86daf-b676-4eda-a399-9056e4f28ac9",
+ "isActive": false,
+ "balance": "$3,077.36",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "brown",
+ "name": "Cleo Robbins",
+ "gender": "female",
+ "company": "UPDAT",
+ "email": "cleorobbins@updat.com",
+ "phone": "+1 (908) 586-3136",
+ "address": "569 Morgan Avenue, Westerville, South Dakota, 5029",
+ "about": "Pariatur laboris ea nulla laboris elit duis ex eiusmod duis nisi. Irure amet non est commodo non minim cupidatat. Proident ipsum et commodo anim veniam pariatur voluptate. Qui non amet quis esse laborum officia mollit velit consectetur eu duis magna. Tempor eiusmod mollit esse adipisicing elit aliqua velit Lorem. Eu dolore nulla ullamco dolore. Mollit qui proident proident culpa amet in elit quis do duis labore non laboris.\r\n",
+ "registered": "2014-11-03T11:35:25 -01:00",
+ "latitude": 68.676481,
+ "longitude": -116.983347,
+ "tags": [
+ "aute",
+ "voluptate",
+ "minim",
+ "aliqua",
+ "qui",
+ "cupidatat",
+ "quis"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Marva Abbott"
+ },
+ {
+ "id": 1,
+ "name": "Marsha Carlson"
+ },
+ {
+ "id": 2,
+ "name": "Chandra Owens"
+ }
+ ],
+ "greeting": "Hello, Cleo Robbins! You have 5 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af81a587883d9d0555",
+ "index": 246,
+ "guid": "c2342dae-1281-4d00-b6ff-9456c748b7ee",
+ "isActive": false,
+ "balance": "$3,004.79",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "blue",
+ "name": "Esmeralda Haley",
+ "gender": "female",
+ "company": "ZEROLOGY",
+ "email": "esmeraldahaley@zerology.com",
+ "phone": "+1 (951) 583-3880",
+ "address": "836 Pulaski Street, Kansas, Puerto Rico, 8086",
+ "about": "Ipsum aute quis id occaecat id Lorem duis labore. Adipisicing ex laboris elit mollit. Consequat officia duis exercitation quis in sunt ea ex ut fugiat mollit. Do cupidatat aute laborum minim ex aliqua laboris elit laborum aliqua nostrud.\r\n",
+ "registered": "2014-05-10T02:29:37 -02:00",
+ "latitude": -64.989019,
+ "longitude": -79.246957,
+ "tags": [
+ "ut",
+ "enim",
+ "Lorem",
+ "non",
+ "consectetur",
+ "aliqua",
+ "nulla"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Torres Hebert"
+ },
+ {
+ "id": 1,
+ "name": "Paige Mercado"
+ },
+ {
+ "id": 2,
+ "name": "Aisha Russo"
+ }
+ ],
+ "greeting": "Hello, Esmeralda Haley! You have 8 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af9d7b1f85d524bf63",
+ "index": 247,
+ "guid": "e061f8e0-0000-4fae-8f35-e9683e96d1af",
+ "isActive": true,
+ "balance": "$3,791.23",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "brown",
+ "name": "Lee Durham",
+ "gender": "male",
+ "company": "KNOWLYSIS",
+ "email": "leedurham@knowlysis.com",
+ "phone": "+1 (987) 502-2847",
+ "address": "199 Chester Avenue, Bellfountain, Michigan, 2129",
+ "about": "Laborum exercitation ipsum esse occaecat qui ut fugiat. Reprehenderit eu aliqua deserunt commodo culpa. Mollit magna enim aute qui in. Reprehenderit eu qui commodo voluptate ipsum exercitation dolor ullamco qui aute. Reprehenderit labore dolore Lorem magna dolor consectetur.\r\n",
+ "registered": "2014-03-19T12:25:12 -01:00",
+ "latitude": -6.126301,
+ "longitude": -86.168371,
+ "tags": [
+ "est",
+ "tempor",
+ "quis",
+ "duis",
+ "ad",
+ "proident",
+ "sint"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Andrews Kirby"
+ },
+ {
+ "id": 1,
+ "name": "Craig Barker"
+ },
+ {
+ "id": 2,
+ "name": "Lucia Reeves"
+ }
+ ],
+ "greeting": "Hello, Lee Durham! You have 5 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af5bd2297c2de8f1df",
+ "index": 248,
+ "guid": "186ea221-2de9-4ed0-8e63-8c2dbd97e00e",
+ "isActive": false,
+ "balance": "$2,270.80",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "green",
+ "name": "Branch Marsh",
+ "gender": "male",
+ "company": "NORSUL",
+ "email": "branchmarsh@norsul.com",
+ "phone": "+1 (937) 542-2557",
+ "address": "222 Dorset Street, Fivepointville, Nebraska, 8590",
+ "about": "Dolor fugiat elit esse non. Aliqua anim aute qui id ea dolore dolore mollit aliqua amet elit. Mollit laboris duis cupidatat ea est id magna enim pariatur amet id irure deserunt. Irure aliquip laboris enim qui ullamco culpa exercitation.\r\n",
+ "registered": "2014-06-06T18:24:31 -02:00",
+ "latitude": 5.1487,
+ "longitude": 56.524881,
+ "tags": [
+ "anim",
+ "non",
+ "ullamco",
+ "in",
+ "id",
+ "nulla",
+ "aliqua"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Roach Matthews"
+ },
+ {
+ "id": 1,
+ "name": "Joyce Gibson"
+ },
+ {
+ "id": 2,
+ "name": "Dollie Suarez"
+ }
+ ],
+ "greeting": "Hello, Branch Marsh! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afedea7ef97440c2a9",
+ "index": 249,
+ "guid": "275420c6-e7b1-43b8-bf57-c44a7848b91f",
+ "isActive": false,
+ "balance": "$2,948.34",
+ "picture": "http://placehold.it/32x32",
+ "age": 30,
+ "eyeColor": "blue",
+ "name": "Marcella Clark",
+ "gender": "female",
+ "company": "ANIVET",
+ "email": "marcellaclark@anivet.com",
+ "phone": "+1 (911) 446-2373",
+ "address": "263 Landis Court, Chemung, Wyoming, 8586",
+ "about": "Adipisicing Lorem nulla incididunt ea Lorem labore voluptate consectetur tempor occaecat enim et aute consequat. Proident fugiat labore do proident duis et excepteur officia veniam ea. Commodo cupidatat consectetur eu sint magna tempor culpa dolor. Dolore proident dolor dolor nulla Lorem aliqua consequat qui sint cupidatat. Consequat aliquip non et cillum culpa eu non eu adipisicing velit.\r\n",
+ "registered": "2014-06-29T13:21:01 -02:00",
+ "latitude": -8.793978,
+ "longitude": -114.6902,
+ "tags": [
+ "veniam",
+ "laboris",
+ "ut",
+ "excepteur",
+ "qui",
+ "minim",
+ "nisi"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Bianca Morin"
+ },
+ {
+ "id": 1,
+ "name": "Martha Fischer"
+ },
+ {
+ "id": 2,
+ "name": "Flores Cherry"
+ }
+ ],
+ "greeting": "Hello, Marcella Clark! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af26f02592d44482c1",
+ "index": 250,
+ "guid": "6ebae281-7edd-4af9-82bf-6744f014d804",
+ "isActive": false,
+ "balance": "$3,662.05",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "brown",
+ "name": "Banks Sloan",
+ "gender": "male",
+ "company": "PIGZART",
+ "email": "bankssloan@pigzart.com",
+ "phone": "+1 (956) 509-2887",
+ "address": "164 Catherine Street, Why, California, 4004",
+ "about": "Eu ullamco nisi ea amet minim duis enim occaecat sit Lorem. Exercitation ut deserunt irure occaecat officia sunt anim deserunt. Elit quis adipisicing ullamco nulla aute qui. Nulla reprehenderit ea do ullamco veniam cillum culpa laborum pariatur do nisi labore incididunt nostrud. Exercitation dolore laborum quis ipsum magna enim velit sit eiusmod esse eiusmod laboris nostrud officia. Mollit sunt eiusmod enim aliquip labore aliquip laboris excepteur ea incididunt in consectetur. Voluptate dolore consectetur dolor aute culpa amet tempor exercitation.\r\n",
+ "registered": "2014-07-03T06:35:35 -02:00",
+ "latitude": 54.116113,
+ "longitude": 77.315809,
+ "tags": [
+ "cupidatat",
+ "aliquip",
+ "laboris",
+ "pariatur",
+ "velit",
+ "tempor",
+ "deserunt"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Noel Montoya"
+ },
+ {
+ "id": 1,
+ "name": "Mendez Sears"
+ },
+ {
+ "id": 2,
+ "name": "Kirsten Hickman"
+ }
+ ],
+ "greeting": "Hello, Banks Sloan! You have 5 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afc4db621870b3bc63",
+ "index": 251,
+ "guid": "2eebde86-48d0-43bc-8a9c-8258efd65a67",
+ "isActive": true,
+ "balance": "$3,469.81",
+ "picture": "http://placehold.it/32x32",
+ "age": 32,
+ "eyeColor": "green",
+ "name": "Gayle Hurst",
+ "gender": "female",
+ "company": "TOURMANIA",
+ "email": "gaylehurst@tourmania.com",
+ "phone": "+1 (887) 552-2908",
+ "address": "850 McDonald Avenue, Courtland, Indiana, 8172",
+ "about": "Eiusmod proident non adipisicing ad quis Lorem consequat velit ad. Pariatur cillum ex ullamco culpa magna elit sunt pariatur minim exercitation. Nisi laboris fugiat eu laborum anim non qui Lorem fugiat veniam dolore ad commodo deserunt. Consequat minim commodo dolor consectetur. Aliquip veniam sint sint irure labore mollit incididunt consectetur id laborum veniam nulla consequat. Id ullamco qui sunt proident adipisicing do aliqua.\r\n",
+ "registered": "2014-12-03T10:59:44 -01:00",
+ "latitude": -66.108765,
+ "longitude": -125.550282,
+ "tags": [
+ "voluptate",
+ "deserunt",
+ "velit",
+ "nisi",
+ "amet",
+ "non",
+ "consequat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Mcintosh Mcmahon"
+ },
+ {
+ "id": 1,
+ "name": "Lamb Romero"
+ },
+ {
+ "id": 2,
+ "name": "Luz Mcdowell"
+ }
+ ],
+ "greeting": "Hello, Gayle Hurst! You have 1 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af1a04a740898c0d4c",
+ "index": 252,
+ "guid": "91434ea3-86c2-44ab-bf26-35ef3881a473",
+ "isActive": false,
+ "balance": "$1,204.04",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "brown",
+ "name": "Susanna Sherman",
+ "gender": "female",
+ "company": "RODEOLOGY",
+ "email": "susannasherman@rodeology.com",
+ "phone": "+1 (947) 510-2492",
+ "address": "794 Mill Street, Barclay, Palau, 1145",
+ "about": "Duis id culpa magna elit cillum esse deserunt occaecat fugiat. Nulla cupidatat qui et fugiat laborum sit adipisicing do commodo consectetur consequat. Sint adipisicing consectetur cupidatat excepteur voluptate in laboris dolore. Mollit excepteur do officia sunt qui velit ea non officia. Dolore mollit sit magna dolor minim sit consectetur dolore nulla minim. Exercitation id aute ad tempor commodo aliquip sunt anim consectetur esse sunt ex. Dolore dolore deserunt sit consectetur.\r\n",
+ "registered": "2015-02-18T10:51:12 -01:00",
+ "latitude": -80.237747,
+ "longitude": 179.56529,
+ "tags": [
+ "ad",
+ "proident",
+ "amet",
+ "aliquip",
+ "tempor",
+ "aliqua",
+ "et"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Lilian Melendez"
+ },
+ {
+ "id": 1,
+ "name": "Brandie York"
+ },
+ {
+ "id": 2,
+ "name": "Haney Haynes"
+ }
+ ],
+ "greeting": "Hello, Susanna Sherman! You have 4 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af3a322e095ca30aba",
+ "index": 253,
+ "guid": "99f888d5-3f7a-4d4b-81f9-64de0b74235d",
+ "isActive": true,
+ "balance": "$2,493.76",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "blue",
+ "name": "Dena Zamora",
+ "gender": "female",
+ "company": "GEEKMOSIS",
+ "email": "denazamora@geekmosis.com",
+ "phone": "+1 (949) 587-3243",
+ "address": "195 Williams Avenue, Shelby, Northern Mariana Islands, 7014",
+ "about": "Amet est sint consequat nisi in exercitation nostrud enim exercitation. Ut proident in culpa Lorem velit duis consequat velit exercitation ex deserunt est sint nostrud. Ipsum dolore excepteur exercitation sunt. Aute adipisicing sint mollit labore. Nulla dolore minim sint sunt nisi consectetur voluptate cupidatat. Incididunt nostrud non magna ut nostrud. Minim deserunt non deserunt in.\r\n",
+ "registered": "2014-01-30T15:50:52 -01:00",
+ "latitude": -12.172676,
+ "longitude": 73.083967,
+ "tags": [
+ "dolore",
+ "qui",
+ "voluptate",
+ "anim",
+ "elit",
+ "occaecat",
+ "laboris"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Mari Schwartz"
+ },
+ {
+ "id": 1,
+ "name": "Ramos Stevenson"
+ },
+ {
+ "id": 2,
+ "name": "Isabel Ball"
+ }
+ ],
+ "greeting": "Hello, Dena Zamora! You have 10 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af02d8de0b59502a15",
+ "index": 254,
+ "guid": "6b7f11ce-4fdc-46ef-b788-8ab05b7964db",
+ "isActive": false,
+ "balance": "$3,537.20",
+ "picture": "http://placehold.it/32x32",
+ "age": 28,
+ "eyeColor": "blue",
+ "name": "Chang Jennings",
+ "gender": "male",
+ "company": "OHMNET",
+ "email": "changjennings@ohmnet.com",
+ "phone": "+1 (871) 420-3962",
+ "address": "624 Haring Street, Blodgett, Washington, 8712",
+ "about": "Quis nisi ut officia ullamco excepteur voluptate ipsum velit. Id aliquip fugiat mollit laboris qui ad fugiat. Dolore ea et enim tempor quis irure quis Lorem culpa esse esse elit laborum. Eiusmod enim fugiat dolore nulla eiusmod nulla ex sint occaecat velit. Do adipisicing veniam et duis elit esse veniam consectetur duis aliqua eiusmod aliquip occaecat nostrud.\r\n",
+ "registered": "2014-08-31T20:34:43 -02:00",
+ "latitude": 73.715086,
+ "longitude": 72.463762,
+ "tags": [
+ "ea",
+ "aute",
+ "quis",
+ "do",
+ "consequat",
+ "ut",
+ "anim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Barrera Ryan"
+ },
+ {
+ "id": 1,
+ "name": "Christian Jensen"
+ },
+ {
+ "id": 2,
+ "name": "Yang Jackson"
+ }
+ ],
+ "greeting": "Hello, Chang Jennings! You have 8 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af3d591e84c21cc44e",
+ "index": 255,
+ "guid": "81ff6d40-78ec-413d-ade5-af32348f7499",
+ "isActive": true,
+ "balance": "$2,369.05",
+ "picture": "http://placehold.it/32x32",
+ "age": 22,
+ "eyeColor": "brown",
+ "name": "Darla Kramer",
+ "gender": "female",
+ "company": "CUJO",
+ "email": "darlakramer@cujo.com",
+ "phone": "+1 (884) 424-2059",
+ "address": "849 Waldorf Court, Shrewsbury, Massachusetts, 3893",
+ "about": "Commodo commodo mollit ex pariatur Lorem. Ex eu ea mollit elit labore sint. Qui duis ipsum id irure adipisicing in laborum minim ad ut enim deserunt veniam. Officia reprehenderit non ea incididunt consequat eu occaecat. Veniam minim fugiat sunt eu veniam. Veniam cupidatat in quis anim nostrud enim pariatur elit eiusmod mollit ex.\r\n",
+ "registered": "2014-12-24T01:43:58 -01:00",
+ "latitude": -33.411866,
+ "longitude": -29.293533,
+ "tags": [
+ "sunt",
+ "irure",
+ "velit",
+ "magna",
+ "eiusmod",
+ "ea",
+ "culpa"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Boyd Nicholson"
+ },
+ {
+ "id": 1,
+ "name": "Julianne Rodriquez"
+ },
+ {
+ "id": 2,
+ "name": "Elma Gilliam"
+ }
+ ],
+ "greeting": "Hello, Darla Kramer! You have 2 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afef11b890bf7af0a0",
+ "index": 256,
+ "guid": "10c81e3d-c5af-4b7b-a9ad-9d3d3622ca2f",
+ "isActive": true,
+ "balance": "$2,236.81",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "brown",
+ "name": "Connie Irwin",
+ "gender": "female",
+ "company": "NETBOOK",
+ "email": "connieirwin@netbook.com",
+ "phone": "+1 (805) 478-3868",
+ "address": "260 Boulevard Court, Newry, Tennessee, 2220",
+ "about": "Nulla elit mollit ex fugiat anim anim ea culpa magna nisi consectetur reprehenderit labore. Sit veniam mollit nulla cupidatat qui nisi ex. Exercitation Lorem enim Lorem laborum commodo do.\r\n",
+ "registered": "2014-08-31T14:00:52 -02:00",
+ "latitude": -31.752948,
+ "longitude": 8.322954,
+ "tags": [
+ "sunt",
+ "laborum",
+ "veniam",
+ "laboris",
+ "sit",
+ "commodo",
+ "nulla"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Pansy Martin"
+ },
+ {
+ "id": 1,
+ "name": "Katy Dickerson"
+ },
+ {
+ "id": 2,
+ "name": "Valarie Gentry"
+ }
+ ],
+ "greeting": "Hello, Connie Irwin! You have 2 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af03099ebfe48f480e",
+ "index": 257,
+ "guid": "b6912623-29d4-40f9-a7cd-b5aad0a1a40c",
+ "isActive": false,
+ "balance": "$3,898.34",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "green",
+ "name": "Powers Little",
+ "gender": "male",
+ "company": "ZOLAVO",
+ "email": "powerslittle@zolavo.com",
+ "phone": "+1 (948) 411-3159",
+ "address": "747 Perry Terrace, Bradenville, Wisconsin, 2128",
+ "about": "Dolor deserunt aute nostrud nisi amet amet cillum dolore sit ad sit irure qui. Cupidatat minim eiusmod aliqua consectetur excepteur occaecat aliquip mollit id pariatur sunt. Et excepteur labore excepteur duis nostrud proident est nostrud adipisicing. Esse elit eu do dolore incididunt non est qui velit. Non est culpa eiusmod duis nulla mollit aliqua eiusmod id non exercitation.\r\n",
+ "registered": "2014-09-21T15:01:18 -02:00",
+ "latitude": 34.959693,
+ "longitude": 117.676643,
+ "tags": [
+ "nostrud",
+ "ut",
+ "aliqua",
+ "velit",
+ "sint",
+ "aliqua",
+ "culpa"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Hallie Saunders"
+ },
+ {
+ "id": 1,
+ "name": "Rosa Charles"
+ },
+ {
+ "id": 2,
+ "name": "Rosella Tillman"
+ }
+ ],
+ "greeting": "Hello, Powers Little! You have 10 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af6f1a182c482760c7",
+ "index": 258,
+ "guid": "52d74ac4-60d4-4212-988d-07a606dd0a01",
+ "isActive": true,
+ "balance": "$3,126.78",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "blue",
+ "name": "Sargent Moore",
+ "gender": "male",
+ "company": "MAKINGWAY",
+ "email": "sargentmoore@makingway.com",
+ "phone": "+1 (803) 489-3142",
+ "address": "604 Hoyt Street, Driftwood, Delaware, 2482",
+ "about": "Deserunt amet officia cupidatat labore velit commodo dolore duis aliquip non eu est aliqua id. Anim ad ut ad et labore ex qui ipsum est irure quis mollit. Quis velit cillum consequat elit sint ea esse mollit cupidatat. Labore cillum aliqua labore ad.\r\n",
+ "registered": "2014-03-11T08:06:57 -01:00",
+ "latitude": 31.395103,
+ "longitude": 41.463795,
+ "tags": [
+ "officia",
+ "duis",
+ "sunt",
+ "eiusmod",
+ "esse",
+ "amet",
+ "Lorem"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Oneill Michael"
+ },
+ {
+ "id": 1,
+ "name": "Graham Gross"
+ },
+ {
+ "id": 2,
+ "name": "Barron Mathews"
+ }
+ ],
+ "greeting": "Hello, Sargent Moore! You have 7 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af55bea23558a78bf5",
+ "index": 259,
+ "guid": "d4e05ade-cfd4-467b-88c4-abf2d513238f",
+ "isActive": true,
+ "balance": "$1,640.70",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "brown",
+ "name": "Mary Warren",
+ "gender": "female",
+ "company": "EARTHMARK",
+ "email": "marywarren@earthmark.com",
+ "phone": "+1 (909) 560-2460",
+ "address": "790 Martense Street, Macdona, American Samoa, 5968",
+ "about": "Tempor mollit exercitation reprehenderit cillum excepteur aliquip. Minim cillum proident esse et nulla amet commodo ut sunt cillum magna ipsum. Ad sint incididunt nostrud et sit tempor velit dolor quis minim eiusmod magna voluptate. Nisi laborum officia amet officia.\r\n",
+ "registered": "2014-12-09T04:21:08 -01:00",
+ "latitude": 75.878748,
+ "longitude": 17.831631,
+ "tags": [
+ "duis",
+ "non",
+ "amet",
+ "cupidatat",
+ "deserunt",
+ "laborum",
+ "eu"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Velazquez Jenkins"
+ },
+ {
+ "id": 1,
+ "name": "Bernadette Cleveland"
+ },
+ {
+ "id": 2,
+ "name": "Miles Trujillo"
+ }
+ ],
+ "greeting": "Hello, Mary Warren! You have 1 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af916192a6a6f4ea60",
+ "index": 260,
+ "guid": "d99124b9-53f6-41cc-b994-9fe100a249fe",
+ "isActive": false,
+ "balance": "$2,058.40",
+ "picture": "http://placehold.it/32x32",
+ "age": 21,
+ "eyeColor": "brown",
+ "name": "Payne Pratt",
+ "gender": "male",
+ "company": "GRAINSPOT",
+ "email": "paynepratt@grainspot.com",
+ "phone": "+1 (895) 454-3195",
+ "address": "654 Guernsey Street, Bynum, Ohio, 4271",
+ "about": "Elit dolore amet deserunt aute eu eiusmod do adipisicing ipsum commodo proident anim ut. Non ex tempor elit exercitation ex esse laborum aliquip laboris consequat. Nisi tempor in ad adipisicing aliquip do. Id laborum magna nulla irure adipisicing mollit enim irure culpa.\r\n",
+ "registered": "2014-04-02T16:12:45 -02:00",
+ "latitude": -76.363151,
+ "longitude": -178.839351,
+ "tags": [
+ "amet",
+ "nulla",
+ "occaecat",
+ "fugiat",
+ "ex",
+ "nulla",
+ "dolore"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Hubbard Barnett"
+ },
+ {
+ "id": 1,
+ "name": "Goodwin Roy"
+ },
+ {
+ "id": 2,
+ "name": "Lloyd Beach"
+ }
+ ],
+ "greeting": "Hello, Payne Pratt! You have 7 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03aff0b41b9237aa90c4",
+ "index": 261,
+ "guid": "aa04b06d-6763-46f8-973e-8c7856431a1b",
+ "isActive": false,
+ "balance": "$3,963.04",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "green",
+ "name": "Suarez Ramos",
+ "gender": "male",
+ "company": "GLUID",
+ "email": "suarezramos@gluid.com",
+ "phone": "+1 (960) 453-2477",
+ "address": "941 Fay Court, Roderfield, Louisiana, 3012",
+ "about": "Nostrud sunt et mollit consequat culpa ullamco nulla quis minim voluptate deserunt deserunt magna. Aliquip magna sit dolor ut aliquip cillum esse est do magna cillum eu. Mollit Lorem dolor occaecat do.\r\n",
+ "registered": "2015-01-18T02:48:09 -01:00",
+ "latitude": 50.289171,
+ "longitude": -65.905419,
+ "tags": [
+ "est",
+ "cillum",
+ "veniam",
+ "minim",
+ "sunt",
+ "minim",
+ "adipisicing"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Abby Heath"
+ },
+ {
+ "id": 1,
+ "name": "Hebert Aguilar"
+ },
+ {
+ "id": 2,
+ "name": "Mckinney Foreman"
+ }
+ ],
+ "greeting": "Hello, Suarez Ramos! You have 10 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afdfa70096f98ad813",
+ "index": 262,
+ "guid": "5ca04e6a-7226-401b-a844-98bc61d006a9",
+ "isActive": true,
+ "balance": "$3,035.82",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "blue",
+ "name": "Ingrid Walls",
+ "gender": "female",
+ "company": "CANOPOLY",
+ "email": "ingridwalls@canopoly.com",
+ "phone": "+1 (854) 483-3798",
+ "address": "705 Kansas Place, Cotopaxi, Idaho, 7114",
+ "about": "Ex minim eu labore dolore ea ea id aliquip eiusmod cupidatat ut ut. Reprehenderit pariatur cillum non labore excepteur velit pariatur amet. Dolore elit veniam cupidatat sit. Culpa dolore laborum sint aliquip nostrud do aliqua commodo voluptate. Pariatur ut commodo cillum culpa do elit nostrud.\r\n",
+ "registered": "2014-02-19T01:47:20 -01:00",
+ "latitude": 40.569785,
+ "longitude": 95.770034,
+ "tags": [
+ "labore",
+ "aute",
+ "aliquip",
+ "quis",
+ "amet",
+ "ad",
+ "id"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Jeannette Justice"
+ },
+ {
+ "id": 1,
+ "name": "Geraldine Rowland"
+ },
+ {
+ "id": 2,
+ "name": "Carter Villarreal"
+ }
+ ],
+ "greeting": "Hello, Ingrid Walls! You have 7 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afbc6a8e361ade2a13",
+ "index": 263,
+ "guid": "5b28c381-4994-41d9-ab4a-767e889c7605",
+ "isActive": true,
+ "balance": "$2,902.08",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "blue",
+ "name": "Roxanne Hayes",
+ "gender": "female",
+ "company": "QUORDATE",
+ "email": "roxannehayes@quordate.com",
+ "phone": "+1 (945) 501-2393",
+ "address": "735 Hooper Street, Woodlands, New Hampshire, 6992",
+ "about": "Labore excepteur elit quis proident dolor dolore nostrud ullamco velit amet. Anim officia minim reprehenderit id minim ullamco aliquip commodo ex. Officia aliqua fugiat pariatur quis est ad. Laboris nisi reprehenderit incididunt eiusmod incididunt sunt non et eu incididunt nulla deserunt dolor. Aute laboris ipsum proident id dolore deserunt laborum laboris labore magna minim. Exercitation non consequat voluptate ad.\r\n",
+ "registered": "2014-08-01T22:05:10 -02:00",
+ "latitude": 34.785442,
+ "longitude": -111.443329,
+ "tags": [
+ "magna",
+ "ullamco",
+ "do",
+ "amet",
+ "aliquip",
+ "aliquip",
+ "nulla"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Owens Navarro"
+ },
+ {
+ "id": 1,
+ "name": "Laurel Welch"
+ },
+ {
+ "id": 2,
+ "name": "Lawrence Rojas"
+ }
+ ],
+ "greeting": "Hello, Roxanne Hayes! You have 3 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af1893120509637ac0",
+ "index": 264,
+ "guid": "29eabf6c-831c-4672-905a-c94c9b495dc7",
+ "isActive": false,
+ "balance": "$2,771.71",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "blue",
+ "name": "Weeks Tate",
+ "gender": "male",
+ "company": "EURON",
+ "email": "weekstate@euron.com",
+ "phone": "+1 (840) 465-3746",
+ "address": "931 Cox Place, Emison, Maine, 3653",
+ "about": "Reprehenderit ea nostrud ullamco non velit consectetur. Proident dolore occaecat velit nisi dolore enim laborum ullamco. Amet ut enim qui nisi duis ipsum adipisicing ullamco incididunt qui sunt ex consectetur. Ipsum anim eu exercitation commodo voluptate sint occaecat dolor aliquip. Aliquip deserunt ullamco fugiat elit laborum non cupidatat nisi.\r\n",
+ "registered": "2014-12-07T12:41:03 -01:00",
+ "latitude": 89.52824,
+ "longitude": 134.978959,
+ "tags": [
+ "ex",
+ "in",
+ "excepteur",
+ "aliqua",
+ "quis",
+ "Lorem",
+ "quis"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Candy Lamb"
+ },
+ {
+ "id": 1,
+ "name": "Carmela Nunez"
+ },
+ {
+ "id": 2,
+ "name": "Tammy Hurley"
+ }
+ ],
+ "greeting": "Hello, Weeks Tate! You have 2 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af780d6fb5bf43f3ae",
+ "index": 265,
+ "guid": "a865be2f-66c9-47fa-8dac-8dd8e3178134",
+ "isActive": true,
+ "balance": "$2,800.67",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "green",
+ "name": "Julie Marks",
+ "gender": "female",
+ "company": "ZILLAN",
+ "email": "juliemarks@zillan.com",
+ "phone": "+1 (927) 466-3529",
+ "address": "437 Miller Place, Celeryville, Utah, 8590",
+ "about": "Lorem irure ut mollit aliquip aliquip cupidatat consequat consectetur Lorem. Culpa nulla ullamco laborum adipisicing qui. Aliquip veniam magna aliqua officia labore qui eu. Do dolore sit cillum adipisicing cupidatat dolore amet proident. Nulla veniam elit non laboris deserunt exercitation voluptate irure officia dolore occaecat.\r\n",
+ "registered": "2015-03-06T12:21:38 -01:00",
+ "latitude": 39.643173,
+ "longitude": 178.046401,
+ "tags": [
+ "dolor",
+ "ea",
+ "in",
+ "irure",
+ "exercitation",
+ "in",
+ "ullamco"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Short Oliver"
+ },
+ {
+ "id": 1,
+ "name": "Rose Young"
+ },
+ {
+ "id": 2,
+ "name": "Rosalinda Spears"
+ }
+ ],
+ "greeting": "Hello, Julie Marks! You have 2 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af549a6d72fff60109",
+ "index": 266,
+ "guid": "c75286f4-cc55-4c00-9f43-00c70f9dfdfa",
+ "isActive": true,
+ "balance": "$2,109.22",
+ "picture": "http://placehold.it/32x32",
+ "age": 32,
+ "eyeColor": "blue",
+ "name": "Singleton Fowler",
+ "gender": "male",
+ "company": "TYPHONICA",
+ "email": "singletonfowler@typhonica.com",
+ "phone": "+1 (935) 531-3138",
+ "address": "194 Mersereau Court, Bodega, West Virginia, 7606",
+ "about": "Ea laborum pariatur laborum voluptate esse nulla esse sint nulla aute. Enim anim incididunt tempor ex id reprehenderit consequat non et laborum aliquip duis occaecat proident. Ullamco et duis culpa voluptate proident laboris eu irure. Magna amet id voluptate labore labore adipisicing pariatur aliquip deserunt amet ut tempor ex culpa. Exercitation velit laboris veniam deserunt non sint enim veniam in magna laboris amet et. Nostrud cillum amet anim amet commodo sunt do ullamco.\r\n",
+ "registered": "2014-09-09T11:34:06 -02:00",
+ "latitude": 0.751033,
+ "longitude": -89.795097,
+ "tags": [
+ "qui",
+ "id",
+ "sunt",
+ "exercitation",
+ "eiusmod",
+ "commodo",
+ "minim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Chaney Combs"
+ },
+ {
+ "id": 1,
+ "name": "Michael Terry"
+ },
+ {
+ "id": 2,
+ "name": "Lewis Mcknight"
+ }
+ ],
+ "greeting": "Hello, Singleton Fowler! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af1e0e5688ec95334b",
+ "index": 267,
+ "guid": "777b097f-34bf-474d-af67-90f77ac6953d",
+ "isActive": true,
+ "balance": "$3,549.87",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "blue",
+ "name": "Kellie Coleman",
+ "gender": "female",
+ "company": "GEEKFARM",
+ "email": "kelliecoleman@geekfarm.com",
+ "phone": "+1 (855) 577-2380",
+ "address": "540 Clay Street, Wyano, Virginia, 5759",
+ "about": "Voluptate dolore incididunt cillum et anim incididunt dolore fugiat in nostrud nisi officia aliquip laboris. Nulla exercitation ullamco aute fugiat laborum culpa nostrud minim. Lorem consectetur in ipsum amet. Cupidatat deserunt aute minim esse consectetur nisi tempor pariatur reprehenderit nulla aliqua. Culpa do ipsum fugiat esse ea eu minim fugiat eu est. Ad est eu occaecat et eu aliqua dolor nulla. Laborum commodo dolor aliqua dolor cupidatat aliquip.\r\n",
+ "registered": "2015-02-17T15:51:53 -01:00",
+ "latitude": -33.00788,
+ "longitude": 141.298076,
+ "tags": [
+ "Lorem",
+ "occaecat",
+ "occaecat",
+ "quis",
+ "esse",
+ "adipisicing",
+ "commodo"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Janet Stewart"
+ },
+ {
+ "id": 1,
+ "name": "Navarro Rush"
+ },
+ {
+ "id": 2,
+ "name": "Lourdes Wright"
+ }
+ ],
+ "greeting": "Hello, Kellie Coleman! You have 2 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af3ecb092f163b24e5",
+ "index": 268,
+ "guid": "5cf2cd66-9539-4ab2-9864-471ac296f322",
+ "isActive": false,
+ "balance": "$3,699.25",
+ "picture": "http://placehold.it/32x32",
+ "age": 32,
+ "eyeColor": "blue",
+ "name": "Wall Rasmussen",
+ "gender": "male",
+ "company": "KENGEN",
+ "email": "wallrasmussen@kengen.com",
+ "phone": "+1 (992) 500-3874",
+ "address": "984 Johnson Street, Helen, Florida, 2835",
+ "about": "Tempor sit eu nulla laboris irure excepteur do id deserunt anim. Do dolore dolore duis consequat ea nulla dolore. Enim nostrud veniam amet consequat ullamco. Officia esse incididunt do qui. Veniam amet veniam do ut. Ex anim dolor consequat ut aliquip amet aliquip adipisicing velit culpa voluptate officia labore.\r\n",
+ "registered": "2014-12-11T19:39:38 -01:00",
+ "latitude": 74.047812,
+ "longitude": -162.468701,
+ "tags": [
+ "consectetur",
+ "fugiat",
+ "est",
+ "velit",
+ "ipsum",
+ "nisi",
+ "aute"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Cara Woodward"
+ },
+ {
+ "id": 1,
+ "name": "Burks Serrano"
+ },
+ {
+ "id": 2,
+ "name": "Maxine Albert"
+ }
+ ],
+ "greeting": "Hello, Wall Rasmussen! You have 1 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af10279d167265a832",
+ "index": 269,
+ "guid": "2012f450-35eb-4c5f-962d-329e5ae039a6",
+ "isActive": true,
+ "balance": "$1,673.01",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "brown",
+ "name": "Lynne Joseph",
+ "gender": "female",
+ "company": "EXOBLUE",
+ "email": "lynnejoseph@exoblue.com",
+ "phone": "+1 (885) 441-2131",
+ "address": "892 Forbell Street, Oceola, Texas, 5677",
+ "about": "Exercitation qui fugiat sunt nisi mollit adipisicing laboris duis aliqua. Nulla anim enim in culpa ipsum consequat consectetur aute ipsum officia. Sint eu culpa in occaecat magna sit ut qui incididunt anim irure consequat.\r\n",
+ "registered": "2014-03-12T18:06:31 -01:00",
+ "latitude": 56.949691,
+ "longitude": -73.817975,
+ "tags": [
+ "ut",
+ "eu",
+ "laboris",
+ "nulla",
+ "quis",
+ "consequat",
+ "id"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Katherine Vang"
+ },
+ {
+ "id": 1,
+ "name": "Thelma Keith"
+ },
+ {
+ "id": 2,
+ "name": "Matthews Nash"
+ }
+ ],
+ "greeting": "Hello, Lynne Joseph! You have 7 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afe41022e048653e66",
+ "index": 270,
+ "guid": "3eb272d1-0276-4ded-a995-a2a2e79f92af",
+ "isActive": true,
+ "balance": "$2,981.11",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "brown",
+ "name": "Nichole Velez",
+ "gender": "female",
+ "company": "OCEANICA",
+ "email": "nicholevelez@oceanica.com",
+ "phone": "+1 (952) 553-2749",
+ "address": "151 Heath Place, Chaparrito, Guam, 8682",
+ "about": "Fugiat enim cupidatat pariatur aliqua do culpa esse sint adipisicing mollit proident veniam. Adipisicing irure elit enim Lorem ipsum labore minim laboris cillum. Velit exercitation exercitation laborum fugiat sunt cupidatat et mollit culpa minim dolor do culpa cillum. Aliquip esse esse nostrud ut excepteur nulla aute dolor consectetur adipisicing proident labore ullamco do. Lorem velit duis non ad id incididunt officia et ut qui nostrud proident.\r\n",
+ "registered": "2014-07-17T03:29:27 -02:00",
+ "latitude": -65.404905,
+ "longitude": 0.424453,
+ "tags": [
+ "deserunt",
+ "voluptate",
+ "laboris",
+ "nisi",
+ "sunt",
+ "fugiat",
+ "dolor"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Evangelina Mcdaniel"
+ },
+ {
+ "id": 1,
+ "name": "Blankenship Barrett"
+ },
+ {
+ "id": 2,
+ "name": "Shelia Vazquez"
+ }
+ ],
+ "greeting": "Hello, Nichole Velez! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afb50871ef0b7fca2e",
+ "index": 271,
+ "guid": "439800f6-37e8-4ac9-af25-58026b64639e",
+ "isActive": true,
+ "balance": "$1,735.18",
+ "picture": "http://placehold.it/32x32",
+ "age": 32,
+ "eyeColor": "blue",
+ "name": "Keith Spencer",
+ "gender": "male",
+ "company": "DIGIGEN",
+ "email": "keithspencer@digigen.com",
+ "phone": "+1 (811) 476-3229",
+ "address": "503 Rost Place, Elliston, Alaska, 1848",
+ "about": "Veniam et fugiat aliquip eu sunt Lorem cillum occaecat. Ullamco quis enim labore est sint et excepteur non minim incididunt eu sint mollit. Nostrud anim reprehenderit qui nisi consequat irure veniam sunt. Proident eu exercitation id qui velit Lorem commodo nulla aute qui mollit. Laborum commodo minim ipsum occaecat.\r\n",
+ "registered": "2014-08-28T01:25:24 -02:00",
+ "latitude": -16.298572,
+ "longitude": -63.528439,
+ "tags": [
+ "et",
+ "non",
+ "eiusmod",
+ "pariatur",
+ "Lorem",
+ "et",
+ "adipisicing"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Carlson Conley"
+ },
+ {
+ "id": 1,
+ "name": "Sloan Holcomb"
+ },
+ {
+ "id": 2,
+ "name": "Colette Byrd"
+ }
+ ],
+ "greeting": "Hello, Keith Spencer! You have 9 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afe655ae38ea9eb602",
+ "index": 272,
+ "guid": "c17c2027-aa5d-4ac8-81c4-664c9548a745",
+ "isActive": true,
+ "balance": "$1,178.92",
+ "picture": "http://placehold.it/32x32",
+ "age": 28,
+ "eyeColor": "green",
+ "name": "Antonia Bailey",
+ "gender": "female",
+ "company": "TURNABOUT",
+ "email": "antoniabailey@turnabout.com",
+ "phone": "+1 (998) 530-2781",
+ "address": "860 Prescott Place, Draper, District Of Columbia, 3637",
+ "about": "Aliquip do deserunt ea magna sint id anim do tempor enim consectetur minim duis. Voluptate incididunt duis officia culpa reprehenderit ipsum fugiat elit. Consequat eiusmod proident incididunt ullamco magna fugiat irure occaecat exercitation sint officia duis et occaecat. Magna fugiat nisi ut Lorem qui. Ullamco culpa magna anim ut aute. Et ea eu amet sint labore laboris occaecat minim voluptate adipisicing.\r\n",
+ "registered": "2014-11-27T16:37:27 -01:00",
+ "latitude": 69.207038,
+ "longitude": -76.937791,
+ "tags": [
+ "non",
+ "Lorem",
+ "nisi",
+ "officia",
+ "id",
+ "sunt",
+ "et"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Lara Benjamin"
+ },
+ {
+ "id": 1,
+ "name": "Young Vargas"
+ },
+ {
+ "id": 2,
+ "name": "Chasity Delaney"
+ }
+ ],
+ "greeting": "Hello, Antonia Bailey! You have 6 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af6343c992d2f229a2",
+ "index": 273,
+ "guid": "6b447392-7165-430b-9e28-82e455a727ae",
+ "isActive": true,
+ "balance": "$3,392.30",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "green",
+ "name": "Carver Rodriguez",
+ "gender": "male",
+ "company": "AMTAP",
+ "email": "carverrodriguez@amtap.com",
+ "phone": "+1 (856) 417-3314",
+ "address": "655 Otsego Street, Eastmont, New York, 1587",
+ "about": "Incididunt esse excepteur mollit anim adipisicing do aute velit amet ipsum in anim mollit nisi. Sunt ut ipsum ipsum magna. Commodo velit irure dolore exercitation Lorem magna nulla nisi pariatur. Lorem mollit adipisicing dolore officia eu aute occaecat minim non laboris reprehenderit minim. Dolor cillum mollit sit magna culpa amet incididunt ea consequat voluptate amet labore dolor. Reprehenderit deserunt mollit commodo qui id pariatur magna do pariatur officia.\r\n",
+ "registered": "2014-07-20T11:58:34 -02:00",
+ "latitude": -66.373138,
+ "longitude": 58.424144,
+ "tags": [
+ "sunt",
+ "est",
+ "do",
+ "cillum",
+ "id",
+ "cillum",
+ "ex"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Gale Parks"
+ },
+ {
+ "id": 1,
+ "name": "Gross Meyer"
+ },
+ {
+ "id": 2,
+ "name": "Fitzpatrick Mckay"
+ }
+ ],
+ "greeting": "Hello, Carver Rodriguez! You have 5 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af70231a790f5ccce6",
+ "index": 274,
+ "guid": "aa5f65ee-f9a2-4858-80dd-90fdaa6995c6",
+ "isActive": true,
+ "balance": "$2,105.11",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "blue",
+ "name": "Jeanine Hewitt",
+ "gender": "female",
+ "company": "INQUALA",
+ "email": "jeaninehewitt@inquala.com",
+ "phone": "+1 (988) 424-2795",
+ "address": "419 Sumner Place, Clara, North Carolina, 8845",
+ "about": "Mollit ipsum proident ullamco dolor voluptate non tempor culpa. Nisi exercitation ad esse amet consequat commodo commodo. Consequat dolor mollit magna fugiat adipisicing et.\r\n",
+ "registered": "2015-03-12T19:31:04 -01:00",
+ "latitude": 80.844879,
+ "longitude": -175.394604,
+ "tags": [
+ "qui",
+ "nostrud",
+ "ad",
+ "ex",
+ "in",
+ "veniam",
+ "magna"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Betsy Rivas"
+ },
+ {
+ "id": 1,
+ "name": "Irene Hardin"
+ },
+ {
+ "id": 2,
+ "name": "Edwina Butler"
+ }
+ ],
+ "greeting": "Hello, Jeanine Hewitt! You have 3 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af7f74ae0b1a251d58",
+ "index": 275,
+ "guid": "cac0bddc-088a-441d-9451-d27509e0ebaa",
+ "isActive": false,
+ "balance": "$2,903.23",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "green",
+ "name": "Lori Whitfield",
+ "gender": "female",
+ "company": "SUSTENZA",
+ "email": "loriwhitfield@sustenza.com",
+ "phone": "+1 (953) 460-2428",
+ "address": "873 Arion Place, Blackgum, Connecticut, 7151",
+ "about": "Labore occaecat deserunt excepteur sit nisi laborum elit sunt pariatur sint nulla ipsum laborum. Aliqua qui ut elit sit magna aute proident excepteur dolor irure consequat ex ullamco sunt. Incididunt est excepteur magna velit dolore culpa voluptate nostrud tempor nulla nulla. Et eiusmod do sit ad nulla labore irure est amet eu id magna. Aliquip ullamco occaecat aliquip ad in eiusmod officia consectetur ad Lorem sit.\r\n",
+ "registered": "2014-03-01T06:46:09 -01:00",
+ "latitude": 41.056575,
+ "longitude": -11.73475,
+ "tags": [
+ "duis",
+ "aute",
+ "eu",
+ "et",
+ "irure",
+ "aliqua",
+ "laborum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Natalie Ortega"
+ },
+ {
+ "id": 1,
+ "name": "Osborne Love"
+ },
+ {
+ "id": 2,
+ "name": "Trina Dalton"
+ }
+ ],
+ "greeting": "Hello, Lori Whitfield! You have 8 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afcc1c76584ee84741",
+ "index": 276,
+ "guid": "cdaee5e8-7e93-449d-9f4c-d9bf85326e19",
+ "isActive": true,
+ "balance": "$3,250.77",
+ "picture": "http://placehold.it/32x32",
+ "age": 22,
+ "eyeColor": "green",
+ "name": "Michael Patterson",
+ "gender": "male",
+ "company": "OVATION",
+ "email": "michaelpatterson@ovation.com",
+ "phone": "+1 (867) 575-3129",
+ "address": "553 Jay Street, Ladera, South Carolina, 2693",
+ "about": "Reprehenderit est velit eu nulla dolore nostrud officia pariatur. In elit non tempor elit nostrud officia anim ad exercitation et velit amet amet consectetur. Ullamco mollit ipsum enim non officia do dolor irure pariatur ullamco nulla cillum in ad. Lorem consequat nulla do sunt esse aliquip. Sunt laborum eiusmod dolor ex nisi officia ut sit in eu. Laboris eu eiusmod labore magna nisi sint adipisicing veniam elit tempor nisi magna.\r\n",
+ "registered": "2015-01-26T21:12:20 -01:00",
+ "latitude": 28.334962,
+ "longitude": -64.788916,
+ "tags": [
+ "culpa",
+ "enim",
+ "consectetur",
+ "ea",
+ "voluptate",
+ "proident",
+ "ipsum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Hendricks Conrad"
+ },
+ {
+ "id": 1,
+ "name": "Maynard Baxter"
+ },
+ {
+ "id": 2,
+ "name": "Pace Farmer"
+ }
+ ],
+ "greeting": "Hello, Michael Patterson! You have 4 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af5a1396f504ee0198",
+ "index": 277,
+ "guid": "32c7d9a7-50b5-4ab9-8dc8-da186eeab911",
+ "isActive": false,
+ "balance": "$2,428.86",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "blue",
+ "name": "Baker Rich",
+ "gender": "male",
+ "company": "TELEPARK",
+ "email": "bakerrich@telepark.com",
+ "phone": "+1 (807) 553-2296",
+ "address": "941 Fleet Street, Longbranch, Rhode Island, 8474",
+ "about": "Ea do laborum ea Lorem. Elit anim id exercitation amet. Commodo nulla non labore nulla aute sit ea culpa exercitation commodo exercitation dolore magna. Nostrud enim ut amet cupidatat proident deserunt sunt nostrud ipsum velit. Aliquip nostrud minim voluptate exercitation eiusmod laboris irure Lorem dolor ea irure consectetur. Esse nisi culpa sint commodo.\r\n",
+ "registered": "2015-01-09T20:58:43 -01:00",
+ "latitude": 4.44009,
+ "longitude": 108.496158,
+ "tags": [
+ "velit",
+ "duis",
+ "tempor",
+ "adipisicing",
+ "aliqua",
+ "quis",
+ "anim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Sara Ross"
+ },
+ {
+ "id": 1,
+ "name": "Laverne Branch"
+ },
+ {
+ "id": 2,
+ "name": "Herman Davis"
+ }
+ ],
+ "greeting": "Hello, Baker Rich! You have 6 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afbfab60cefd285f3a",
+ "index": 278,
+ "guid": "f12c9216-cef5-4a6c-a2fb-d4b7868f8006",
+ "isActive": false,
+ "balance": "$1,507.49",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "green",
+ "name": "Bond Payne",
+ "gender": "male",
+ "company": "SPACEWAX",
+ "email": "bondpayne@spacewax.com",
+ "phone": "+1 (996) 484-2129",
+ "address": "670 Micieli Place, Herlong, Pennsylvania, 9340",
+ "about": "Elit eiusmod aliqua nisi nostrud reprehenderit non aliqua ad amet id. Qui Lorem magna mollit reprehenderit velit. Esse cillum est cupidatat nulla culpa incididunt ea fugiat est. Exercitation est esse enim laborum aliquip ut. Nostrud do ex Lorem aliqua in nostrud.\r\n",
+ "registered": "2014-09-04T12:04:42 -02:00",
+ "latitude": 26.245567,
+ "longitude": 134.685761,
+ "tags": [
+ "fugiat",
+ "commodo",
+ "labore",
+ "irure",
+ "qui",
+ "laboris",
+ "qui"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Bessie Daugherty"
+ },
+ {
+ "id": 1,
+ "name": "Hunter Buckley"
+ },
+ {
+ "id": 2,
+ "name": "Munoz Nixon"
+ }
+ ],
+ "greeting": "Hello, Bond Payne! You have 2 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afae40003dd168ed4f",
+ "index": 279,
+ "guid": "fe043803-5365-47ab-9aa0-a8442a8303f9",
+ "isActive": false,
+ "balance": "$3,163.37",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "brown",
+ "name": "Ronda Vinson",
+ "gender": "female",
+ "company": "TRASOLA",
+ "email": "rondavinson@trasola.com",
+ "phone": "+1 (968) 433-3418",
+ "address": "288 Wyckoff Avenue, Swartzville, Oklahoma, 9352",
+ "about": "Ad labore exercitation ipsum irure quis ad reprehenderit consectetur aliquip mollit voluptate. Occaecat officia do dolor ad minim adipisicing proident fugiat. In ut adipisicing voluptate aliquip aliqua quis laborum nulla sint laboris consectetur. Dolor est quis dolore sint proident consectetur pariatur dolor sunt dolore commodo. Nisi ipsum enim cillum laborum ullamco dolore id occaecat fugiat consequat. Elit ad in officia anim anim culpa id in voluptate occaecat amet id.\r\n",
+ "registered": "2014-04-01T11:55:04 -02:00",
+ "latitude": 65.800066,
+ "longitude": -178.207529,
+ "tags": [
+ "ullamco",
+ "laboris",
+ "aute",
+ "aliqua",
+ "exercitation",
+ "ullamco",
+ "ipsum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Greer Boone"
+ },
+ {
+ "id": 1,
+ "name": "Marisa Lara"
+ },
+ {
+ "id": 2,
+ "name": "Doyle Diaz"
+ }
+ ],
+ "greeting": "Hello, Ronda Vinson! You have 10 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af98f3b5ded1aab4ab",
+ "index": 280,
+ "guid": "388748eb-4a7e-44b3-b7d2-b726e9cf19e5",
+ "isActive": false,
+ "balance": "$2,518.55",
+ "picture": "http://placehold.it/32x32",
+ "age": 30,
+ "eyeColor": "brown",
+ "name": "Smith Kirkland",
+ "gender": "male",
+ "company": "CONFRENZY",
+ "email": "smithkirkland@confrenzy.com",
+ "phone": "+1 (817) 542-2434",
+ "address": "299 Colonial Court, Jardine, Kansas, 3055",
+ "about": "Lorem fugiat elit dolor ea magna pariatur consequat eu id commodo dolor cillum in. Est elit anim quis officia magna exercitation aliquip. Aliquip dolore laboris eiusmod eiusmod nulla in culpa veniam eiusmod exercitation laboris magna do aute.\r\n",
+ "registered": "2014-01-09T08:54:35 -01:00",
+ "latitude": 78.394741,
+ "longitude": -48.706974,
+ "tags": [
+ "proident",
+ "sit",
+ "ipsum",
+ "ex",
+ "nulla",
+ "officia",
+ "sit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Claudette Watson"
+ },
+ {
+ "id": 1,
+ "name": "Robles Preston"
+ },
+ {
+ "id": 2,
+ "name": "Andrea Malone"
+ }
+ ],
+ "greeting": "Hello, Smith Kirkland! You have 8 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af326c3efc26a08ed3",
+ "index": 281,
+ "guid": "46d7ef86-861d-462e-852e-ae4aac364a7f",
+ "isActive": false,
+ "balance": "$1,680.40",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "green",
+ "name": "Carroll Humphrey",
+ "gender": "male",
+ "company": "ENOMEN",
+ "email": "carrollhumphrey@enomen.com",
+ "phone": "+1 (938) 403-3233",
+ "address": "339 Batchelder Street, Nogal, Kentucky, 7449",
+ "about": "Ea sunt non sit duis. Duis nulla quis ipsum fugiat labore Lorem consectetur veniam. Irure duis labore ad commodo incididunt ex velit sit mollit ex magna anim duis. Et non nostrud Lorem laboris enim adipisicing tempor eu amet. Labore eu Lorem id fugiat.\r\n",
+ "registered": "2014-11-08T01:54:01 -01:00",
+ "latitude": -27.148825,
+ "longitude": 56.416568,
+ "tags": [
+ "ipsum",
+ "sunt",
+ "reprehenderit",
+ "amet",
+ "sint",
+ "nulla",
+ "duis"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Key Murphy"
+ },
+ {
+ "id": 1,
+ "name": "Allyson Miller"
+ },
+ {
+ "id": 2,
+ "name": "Forbes Petty"
+ }
+ ],
+ "greeting": "Hello, Carroll Humphrey! You have 4 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af1395c53dd14b13ae",
+ "index": 282,
+ "guid": "57702900-04ee-4987-ac33-f12b1ded591e",
+ "isActive": true,
+ "balance": "$2,711.82",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "brown",
+ "name": "Douglas Buck",
+ "gender": "male",
+ "company": "ORBIN",
+ "email": "douglasbuck@orbin.com",
+ "phone": "+1 (839) 526-2788",
+ "address": "633 Livonia Avenue, Graniteville, Mississippi, 2446",
+ "about": "Culpa proident occaecat enim sit nostrud ad in elit aute esse. Consequat ex magna ex cillum magna aute aute eu duis. Aliquip magna commodo nisi cillum non consequat ea adipisicing irure. Pariatur sunt cupidatat nisi sit. Adipisicing amet eu pariatur officia mollit reprehenderit. Eu quis ea esse ullamco adipisicing eiusmod aliqua ut est magna ut. Enim duis ipsum eiusmod nulla laborum mollit cupidatat minim.\r\n",
+ "registered": "2014-08-28T17:38:18 -02:00",
+ "latitude": 35.335568,
+ "longitude": 1.475846,
+ "tags": [
+ "ullamco",
+ "ea",
+ "do",
+ "nulla",
+ "pariatur",
+ "nulla",
+ "ullamco"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Finch Crane"
+ },
+ {
+ "id": 1,
+ "name": "Lacy Bruce"
+ },
+ {
+ "id": 2,
+ "name": "Marla Rowe"
+ }
+ ],
+ "greeting": "Hello, Douglas Buck! You have 6 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af0ace0285e3140414",
+ "index": 283,
+ "guid": "007fcf70-bd61-49a8-9c7b-0035fe81f058",
+ "isActive": false,
+ "balance": "$3,261.22",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "green",
+ "name": "Winters Dawson",
+ "gender": "male",
+ "company": "MIRACULA",
+ "email": "wintersdawson@miracula.com",
+ "phone": "+1 (884) 495-2832",
+ "address": "903 Hall Street, Jessie, Montana, 6295",
+ "about": "Pariatur aute elit enim id eiusmod aliqua exercitation aliquip. Dolor qui fugiat duis tempor proident mollit ipsum cillum. Incididunt ullamco sit proident minim. Adipisicing adipisicing id consequat laboris. Esse aute officia ad irure cupidatat. Nisi magna Lorem sit magna nostrud enim officia aute ea.\r\n",
+ "registered": "2014-08-08T11:32:46 -02:00",
+ "latitude": -89.804852,
+ "longitude": 57.180023,
+ "tags": [
+ "nisi",
+ "magna",
+ "labore",
+ "aliqua",
+ "qui",
+ "sint",
+ "voluptate"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Julia Donovan"
+ },
+ {
+ "id": 1,
+ "name": "Ann Head"
+ },
+ {
+ "id": 2,
+ "name": "Murphy Pitts"
+ }
+ ],
+ "greeting": "Hello, Winters Dawson! You have 2 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af822adc7d0ba04a17",
+ "index": 284,
+ "guid": "ae1e57f4-c49e-4a63-a792-52f8bb13ccd3",
+ "isActive": false,
+ "balance": "$2,856.38",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "brown",
+ "name": "Annmarie Briggs",
+ "gender": "female",
+ "company": "OPTIQUE",
+ "email": "annmariebriggs@optique.com",
+ "phone": "+1 (810) 551-2936",
+ "address": "879 Vandervoort Avenue, Dotsero, North Dakota, 5625",
+ "about": "Qui elit ex pariatur pariatur et adipisicing. Dolor amet enim cillum cillum deserunt. Mollit ad eiusmod pariatur culpa nisi consequat veniam sint.\r\n",
+ "registered": "2014-10-20T20:23:45 -02:00",
+ "latitude": -64.720431,
+ "longitude": -59.415479,
+ "tags": [
+ "aute",
+ "est",
+ "id",
+ "laborum",
+ "deserunt",
+ "veniam",
+ "ea"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Giles Russell"
+ },
+ {
+ "id": 1,
+ "name": "Scott Williams"
+ },
+ {
+ "id": 2,
+ "name": "Livingston Mitchell"
+ }
+ ],
+ "greeting": "Hello, Annmarie Briggs! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af8e43b590ea6679a4",
+ "index": 285,
+ "guid": "1e5c3748-b9af-4244-a7ef-d7ca81bd2499",
+ "isActive": true,
+ "balance": "$3,973.85",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "blue",
+ "name": "Hollie Emerson",
+ "gender": "female",
+ "company": "BOILCAT",
+ "email": "hollieemerson@boilcat.com",
+ "phone": "+1 (941) 544-2434",
+ "address": "502 Seagate Terrace, Ventress, Maryland, 888",
+ "about": "Sint esse amet mollit veniam ad Lorem ipsum do id proident ipsum deserunt amet. Officia id cupidatat ipsum consectetur. Dolor ex sint deserunt exercitation sint consequat aliqua ipsum nulla officia. Sint Lorem Lorem qui dolore pariatur qui esse. Sit incididunt aliquip pariatur duis minim occaecat esse dolore elit cupidatat id. Exercitation ex Lorem duis anim non ut cupidatat. Elit commodo excepteur et do laborum esse.\r\n",
+ "registered": "2014-12-10T09:46:46 -01:00",
+ "latitude": 45.71726,
+ "longitude": 0.652141,
+ "tags": [
+ "mollit",
+ "duis",
+ "proident",
+ "adipisicing",
+ "laboris",
+ "labore",
+ "dolor"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Shepard Lindsay"
+ },
+ {
+ "id": 1,
+ "name": "Karen Goodman"
+ },
+ {
+ "id": 2,
+ "name": "Strickland Duncan"
+ }
+ ],
+ "greeting": "Hello, Hollie Emerson! You have 2 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af45cf5fd110045ea4",
+ "index": 286,
+ "guid": "420e71f9-678f-4bc5-9828-ee4411f69d42",
+ "isActive": true,
+ "balance": "$3,395.05",
+ "picture": "http://placehold.it/32x32",
+ "age": 26,
+ "eyeColor": "blue",
+ "name": "Whitehead Palmer",
+ "gender": "male",
+ "company": "CORPULSE",
+ "email": "whiteheadpalmer@corpulse.com",
+ "phone": "+1 (852) 543-2788",
+ "address": "788 Dunham Place, Cowiche, Hawaii, 1043",
+ "about": "Sit nostrud non sit sunt aute cillum sunt aliqua. Labore laboris exercitation cupidatat amet cupidatat proident cillum veniam consectetur ipsum. Nostrud adipisicing commodo nulla elit laborum tempor commodo culpa. Magna labore minim ut officia ea pariatur consectetur duis Lorem. Reprehenderit eu ullamco dolor occaecat eiusmod ex nulla consectetur velit. Adipisicing aliquip sit consectetur proident.\r\n",
+ "registered": "2014-01-31T07:56:16 -01:00",
+ "latitude": 58.364623,
+ "longitude": 164.350074,
+ "tags": [
+ "ex",
+ "eiusmod",
+ "sint",
+ "incididunt",
+ "laboris",
+ "Lorem",
+ "proident"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Paula Brady"
+ },
+ {
+ "id": 1,
+ "name": "Cash Good"
+ },
+ {
+ "id": 2,
+ "name": "Gwendolyn Kane"
+ }
+ ],
+ "greeting": "Hello, Whitehead Palmer! You have 7 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03aff090a107f985cd5d",
+ "index": 287,
+ "guid": "68583ee5-374f-4c21-8830-b7348441bbc9",
+ "isActive": false,
+ "balance": "$3,813.17",
+ "picture": "http://placehold.it/32x32",
+ "age": 21,
+ "eyeColor": "brown",
+ "name": "Petty Stafford",
+ "gender": "male",
+ "company": "TELEQUIET",
+ "email": "pettystafford@telequiet.com",
+ "phone": "+1 (823) 428-3782",
+ "address": "311 Clara Street, Hatteras, Arizona, 667",
+ "about": "Proident ullamco veniam exercitation sint nostrud anim culpa ad voluptate veniam laborum ut mollit. Aliqua eu ipsum labore occaecat irure ut enim id. Ullamco quis pariatur laboris duis qui est dolor ex sint. Proident labore est minim consequat sunt id anim magna incididunt. Aliqua non consequat voluptate id adipisicing deserunt proident cillum qui elit Lorem.\r\n",
+ "registered": "2014-08-12T12:22:03 -02:00",
+ "latitude": -17.063685,
+ "longitude": 119.667755,
+ "tags": [
+ "do",
+ "nostrud",
+ "tempor",
+ "qui",
+ "enim",
+ "proident",
+ "qui"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Frost Ingram"
+ },
+ {
+ "id": 1,
+ "name": "Wiley Waters"
+ },
+ {
+ "id": 2,
+ "name": "Beverley Olson"
+ }
+ ],
+ "greeting": "Hello, Petty Stafford! You have 9 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afc3651533221348e5",
+ "index": 288,
+ "guid": "9a22e008-4112-49b9-8f09-9def1a3cfbb2",
+ "isActive": true,
+ "balance": "$1,871.53",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "brown",
+ "name": "Graves Whitney",
+ "gender": "male",
+ "company": "EQUITAX",
+ "email": "graveswhitney@equitax.com",
+ "phone": "+1 (810) 457-3935",
+ "address": "935 Quentin Road, Dyckesville, Arkansas, 5792",
+ "about": "Ullamco id non reprehenderit ex enim enim eiusmod ea nisi dolore labore. Aute aliquip sint officia nulla aliqua sit voluptate minim. Dolore velit voluptate nisi consectetur incididunt dolor voluptate est tempor commodo ad ex dolore. Reprehenderit dolor ipsum labore incididunt voluptate aliquip cillum ea commodo proident ad deserunt. Proident reprehenderit qui id quis sunt nulla mollit minim dolor pariatur. Mollit sunt quis sunt minim anim sint laborum proident nostrud enim veniam.\r\n",
+ "registered": "2015-03-20T21:48:45 -01:00",
+ "latitude": 11.390925,
+ "longitude": -122.408413,
+ "tags": [
+ "fugiat",
+ "ullamco",
+ "ex",
+ "id",
+ "sint",
+ "aliqua",
+ "enim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Estela Miranda"
+ },
+ {
+ "id": 1,
+ "name": "Mcneil Gaines"
+ },
+ {
+ "id": 2,
+ "name": "Marianne Wilkerson"
+ }
+ ],
+ "greeting": "Hello, Graves Whitney! You have 2 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af78b4c4e6ded901f1",
+ "index": 289,
+ "guid": "d1bd2f7e-5192-47bd-8037-4a3c450b763a",
+ "isActive": true,
+ "balance": "$3,269.43",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "blue",
+ "name": "Dorothy Sims",
+ "gender": "female",
+ "company": "EXOTERIC",
+ "email": "dorothysims@exoteric.com",
+ "phone": "+1 (948) 579-2331",
+ "address": "780 Hausman Street, Virgie, Nevada, 5226",
+ "about": "Commodo sit laboris sunt cillum labore sit. Cupidatat officia dolor enim nostrud elit. Dolor amet voluptate ullamco ex do nostrud consectetur dolor tempor irure laboris proident mollit duis. Occaecat deserunt sunt excepteur tempor consectetur proident sunt magna culpa non aliqua laborum do. Labore et dolor mollit proident ut consequat pariatur proident Lorem nisi ea veniam laborum.\r\n",
+ "registered": "2014-07-27T13:00:15 -02:00",
+ "latitude": -54.428253,
+ "longitude": -127.5643,
+ "tags": [
+ "aliqua",
+ "voluptate",
+ "nulla",
+ "mollit",
+ "pariatur",
+ "culpa",
+ "exercitation"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Bennett Shaffer"
+ },
+ {
+ "id": 1,
+ "name": "Ana Brown"
+ },
+ {
+ "id": 2,
+ "name": "Larsen Miles"
+ }
+ ],
+ "greeting": "Hello, Dorothy Sims! You have 3 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af936da21c41ac114b",
+ "index": 290,
+ "guid": "0962d945-9036-40cd-a1a7-07c8e23bb23f",
+ "isActive": false,
+ "balance": "$2,971.18",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "blue",
+ "name": "Barnes Bush",
+ "gender": "male",
+ "company": "ACUMENTOR",
+ "email": "barnesbush@acumentor.com",
+ "phone": "+1 (898) 471-2142",
+ "address": "157 Dictum Court, Norwood, New Jersey, 4642",
+ "about": "Nisi sunt incididunt est anim in laborum Lorem reprehenderit ullamco. Laborum velit proident et adipisicing est velit veniam nostrud labore anim. Veniam reprehenderit irure sunt velit adipisicing magna sunt.\r\n",
+ "registered": "2014-05-02T19:47:47 -02:00",
+ "latitude": 89.414585,
+ "longitude": -109.844274,
+ "tags": [
+ "pariatur",
+ "irure",
+ "veniam",
+ "et",
+ "in",
+ "consequat",
+ "incididunt"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Muriel Blackwell"
+ },
+ {
+ "id": 1,
+ "name": "Luisa Collier"
+ },
+ {
+ "id": 2,
+ "name": "Whitaker Tran"
+ }
+ ],
+ "greeting": "Hello, Barnes Bush! You have 3 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afd3e7491f5ad29991",
+ "index": 291,
+ "guid": "2ee6f850-73fb-4c31-a5ac-97885e0c452d",
+ "isActive": true,
+ "balance": "$3,271.08",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "green",
+ "name": "Riddle Fitzpatrick",
+ "gender": "male",
+ "company": "DUFLEX",
+ "email": "riddlefitzpatrick@duflex.com",
+ "phone": "+1 (821) 435-2782",
+ "address": "681 Ridge Court, Wintersburg, Marshall Islands, 2761",
+ "about": "Nulla nostrud irure sunt mollit ullamco nostrud incididunt tempor. Ad qui commodo mollit Lorem incididunt laboris. Dolore irure aliqua pariatur amet aliquip tempor. Ea tempor duis veniam ipsum pariatur ex est veniam dolor sit aliqua occaecat. Excepteur reprehenderit fugiat consequat esse quis incididunt aliquip. Do nisi cillum sint veniam consectetur in adipisicing mollit dolor deserunt reprehenderit cupidatat cillum.\r\n",
+ "registered": "2014-03-27T02:49:07 -01:00",
+ "latitude": -3.929126,
+ "longitude": -51.205272,
+ "tags": [
+ "in",
+ "consequat",
+ "sit",
+ "est",
+ "sunt",
+ "tempor",
+ "proident"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Stone Duffy"
+ },
+ {
+ "id": 1,
+ "name": "Jerry Hays"
+ },
+ {
+ "id": 2,
+ "name": "Gutierrez Gutierrez"
+ }
+ ],
+ "greeting": "Hello, Riddle Fitzpatrick! You have 2 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af54c0363d5fc45dbe",
+ "index": 292,
+ "guid": "8c5adf0a-1ec7-4e94-b0b5-e9c719d027c5",
+ "isActive": true,
+ "balance": "$1,899.28",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "green",
+ "name": "Roslyn Odonnell",
+ "gender": "female",
+ "company": "ZYTRAX",
+ "email": "roslynodonnell@zytrax.com",
+ "phone": "+1 (990) 571-2908",
+ "address": "512 Dekoven Court, Fairfield, Georgia, 5604",
+ "about": "Culpa culpa sunt culpa pariatur quis reprehenderit do quis aliqua proident qui eu. Magna id Lorem ut elit cupidatat eiusmod sint cillum nostrud laborum. Non excepteur labore nostrud laborum eiusmod quis ea sunt. Veniam ipsum reprehenderit dolore officia. Nisi veniam minim adipisicing id ullamco. Sit reprehenderit veniam non aute ut culpa proident fugiat velit culpa voluptate.\r\n",
+ "registered": "2014-12-01T00:48:40 -01:00",
+ "latitude": -30.869778,
+ "longitude": 139.577162,
+ "tags": [
+ "in",
+ "ullamco",
+ "Lorem",
+ "id",
+ "et",
+ "dolor",
+ "fugiat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Gabrielle Alford"
+ },
+ {
+ "id": 1,
+ "name": "Benson Ellis"
+ },
+ {
+ "id": 2,
+ "name": "Ruthie Blevins"
+ }
+ ],
+ "greeting": "Hello, Roslyn Odonnell! You have 5 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af4a8ea772d2f6a557",
+ "index": 293,
+ "guid": "059ee697-d9fb-4612-811e-efda8b4e7ac8",
+ "isActive": false,
+ "balance": "$2,620.33",
+ "picture": "http://placehold.it/32x32",
+ "age": 21,
+ "eyeColor": "blue",
+ "name": "Merrill Fields",
+ "gender": "male",
+ "company": "ANARCO",
+ "email": "merrillfields@anarco.com",
+ "phone": "+1 (836) 444-3511",
+ "address": "461 Brevoort Place, Ruffin, Virgin Islands, 8122",
+ "about": "Ad Lorem occaecat aliqua aute duis. Labore proident eiusmod qui incididunt culpa fugiat veniam voluptate Lorem sint. Deserunt adipisicing qui deserunt excepteur laborum qui ipsum nulla quis proident. Adipisicing amet reprehenderit id eiusmod eiusmod deserunt ad id. Officia aute ut aute consectetur ipsum officia.\r\n",
+ "registered": "2014-08-07T00:55:03 -02:00",
+ "latitude": 77.897046,
+ "longitude": 67.932798,
+ "tags": [
+ "enim",
+ "consectetur",
+ "est",
+ "esse",
+ "nulla",
+ "in",
+ "enim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Staci Cox"
+ },
+ {
+ "id": 1,
+ "name": "Leanne Morales"
+ },
+ {
+ "id": 2,
+ "name": "Watts Pugh"
+ }
+ ],
+ "greeting": "Hello, Merrill Fields! You have 7 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afa22567d4123d5c8e",
+ "index": 294,
+ "guid": "93a31d87-c2b0-425c-9dd4-74052e9da4aa",
+ "isActive": true,
+ "balance": "$2,415.18",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "blue",
+ "name": "Mccoy Olsen",
+ "gender": "male",
+ "company": "UNISURE",
+ "email": "mccoyolsen@unisure.com",
+ "phone": "+1 (925) 584-2777",
+ "address": "824 Whitney Avenue, Trucksville, Colorado, 8773",
+ "about": "Eu exercitation aliqua dolore id tempor deserunt eu duis pariatur. Do nostrud officia culpa ut. Ullamco ipsum exercitation proident anim reprehenderit ipsum tempor incididunt pariatur labore in nostrud. Incididunt eu fugiat do dolor cupidatat amet voluptate non consectetur reprehenderit culpa deserunt id.\r\n",
+ "registered": "2015-03-29T14:43:03 -02:00",
+ "latitude": 21.124414,
+ "longitude": -116.668408,
+ "tags": [
+ "veniam",
+ "est",
+ "mollit",
+ "cillum",
+ "exercitation",
+ "cillum",
+ "ex"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Odom Valdez"
+ },
+ {
+ "id": 1,
+ "name": "Rene Hyde"
+ },
+ {
+ "id": 2,
+ "name": "Gina Mcgee"
+ }
+ ],
+ "greeting": "Hello, Mccoy Olsen! You have 4 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af7ade0f4462747684",
+ "index": 295,
+ "guid": "b4ebc1ba-639d-423d-aa4a-730bb51c6e39",
+ "isActive": false,
+ "balance": "$1,407.57",
+ "picture": "http://placehold.it/32x32",
+ "age": 28,
+ "eyeColor": "blue",
+ "name": "Greta Cochran",
+ "gender": "female",
+ "company": "BRISTO",
+ "email": "gretacochran@bristo.com",
+ "phone": "+1 (863) 479-3129",
+ "address": "750 Morton Street, Camas, Vermont, 3526",
+ "about": "Non enim duis veniam cupidatat quis ea. Pariatur eiusmod aliqua sint commodo. Culpa ad excepteur proident ipsum exercitation sunt cupidatat eiusmod aliquip commodo. Exercitation quis ipsum dolore in sunt ex sunt.\r\n",
+ "registered": "2014-03-13T16:53:44 -01:00",
+ "latitude": 50.105824,
+ "longitude": 74.341763,
+ "tags": [
+ "esse",
+ "aliqua",
+ "ipsum",
+ "exercitation",
+ "enim",
+ "deserunt",
+ "laboris"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Lyons Hicks"
+ },
+ {
+ "id": 1,
+ "name": "Marylou Hatfield"
+ },
+ {
+ "id": 2,
+ "name": "Juana Parker"
+ }
+ ],
+ "greeting": "Hello, Greta Cochran! You have 3 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af4a4238cecd39ebba",
+ "index": 296,
+ "guid": "77430c65-6423-45c6-8c0b-d06e13068dcf",
+ "isActive": true,
+ "balance": "$1,554.19",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "green",
+ "name": "Lauren Graves",
+ "gender": "female",
+ "company": "PORTICA",
+ "email": "laurengraves@portica.com",
+ "phone": "+1 (980) 500-3613",
+ "address": "652 Halleck Street, Crown, Minnesota, 2452",
+ "about": "Amet cupidatat reprehenderit elit duis laboris ullamco. Consectetur commodo cupidatat ad et culpa consectetur nulla laboris nostrud. Enim esse et reprehenderit magna eiusmod enim aliquip id sint quis cupidatat dolore enim. Est Lorem aute dolor nisi. Occaecat sit adipisicing dolor dolore excepteur duis. Laboris cupidatat quis incididunt duis do exercitation sint esse in laboris. Occaecat mollit labore labore qui non labore veniam aliquip dolore officia ut deserunt adipisicing labore.\r\n",
+ "registered": "2014-07-26T10:40:09 -02:00",
+ "latitude": 75.569039,
+ "longitude": -41.861481,
+ "tags": [
+ "laboris",
+ "officia",
+ "est",
+ "esse",
+ "ex",
+ "commodo",
+ "consectetur"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Gail Maxwell"
+ },
+ {
+ "id": 1,
+ "name": "Angelique Bryan"
+ },
+ {
+ "id": 2,
+ "name": "Workman Cross"
+ }
+ ],
+ "greeting": "Hello, Lauren Graves! You have 5 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af5f5291db32b47b4f",
+ "index": 297,
+ "guid": "56473bf3-ccf8-40e9-bcaa-0ce4c2f09ff0",
+ "isActive": false,
+ "balance": "$3,733.07",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "brown",
+ "name": "Serena Mccarthy",
+ "gender": "female",
+ "company": "GOLOGY",
+ "email": "serenamccarthy@gology.com",
+ "phone": "+1 (835) 404-2643",
+ "address": "234 Juliana Place, Kenmar, New Mexico, 337",
+ "about": "Tempor mollit veniam tempor dolor. Proident esse est aute aliquip tempor proident dolore ad labore. Eiusmod velit eu esse reprehenderit enim. Anim ex ex tempor officia eu quis cupidatat eiusmod laboris magna pariatur. Non dolor consequat fugiat sunt tempor pariatur do incididunt dolore cillum reprehenderit tempor duis occaecat.\r\n",
+ "registered": "2014-04-07T02:12:32 -02:00",
+ "latitude": 62.638378,
+ "longitude": -153.146524,
+ "tags": [
+ "ad",
+ "id",
+ "aute",
+ "voluptate",
+ "eu",
+ "proident",
+ "culpa"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Sasha Foley"
+ },
+ {
+ "id": 1,
+ "name": "Perkins Larsen"
+ },
+ {
+ "id": 2,
+ "name": "Bertie Shannon"
+ }
+ ],
+ "greeting": "Hello, Serena Mccarthy! You have 8 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af45aada12f5c49ec6",
+ "index": 298,
+ "guid": "72abe943-af50-4e3e-961e-1598d9d45245",
+ "isActive": true,
+ "balance": "$1,387.84",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "green",
+ "name": "Jennie Bean",
+ "gender": "female",
+ "company": "ZOGAK",
+ "email": "jenniebean@zogak.com",
+ "phone": "+1 (916) 431-3167",
+ "address": "868 Dikeman Street, Wyoming, Alabama, 6015",
+ "about": "Aute anim culpa cupidatat adipisicing ipsum deserunt cupidatat commodo incididunt esse pariatur cillum. Occaecat tempor elit pariatur amet aliqua. Non qui quis esse commodo labore labore laborum exercitation nostrud. Quis aute ad proident tempor ad labore id officia ipsum dolore. Lorem proident veniam voluptate do dolore dolor cillum ad. Voluptate fugiat velit id exercitation veniam officia ex elit. Consequat nostrud fugiat esse do commodo.\r\n",
+ "registered": "2015-03-23T00:10:40 -01:00",
+ "latitude": -37.777766,
+ "longitude": -167.346684,
+ "tags": [
+ "mollit",
+ "culpa",
+ "esse",
+ "ea",
+ "id",
+ "est",
+ "et"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Concepcion Cotton"
+ },
+ {
+ "id": 1,
+ "name": "Solis Warner"
+ },
+ {
+ "id": 2,
+ "name": "Debora Vega"
+ }
+ ],
+ "greeting": "Hello, Jennie Bean! You have 10 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af5f3425e70bd481f8",
+ "index": 299,
+ "guid": "47f883fb-7267-418c-9848-8df5808642da",
+ "isActive": true,
+ "balance": "$1,208.29",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "green",
+ "name": "Jeanie Horn",
+ "gender": "female",
+ "company": "SUREMAX",
+ "email": "jeaniehorn@suremax.com",
+ "phone": "+1 (998) 448-2281",
+ "address": "401 Barbey Street, Jugtown, Illinois, 6843",
+ "about": "Sunt excepteur velit ea reprehenderit est officia mollit. Sint ut commodo officia officia sunt adipisicing anim eu aliquip. Voluptate tempor ipsum irure voluptate enim esse duis voluptate. Ipsum consectetur culpa sunt pariatur ut ullamco esse. Adipisicing consequat sit et qui culpa deserunt adipisicing veniam aliquip in et.\r\n",
+ "registered": "2014-12-20T11:49:19 -01:00",
+ "latitude": -81.626041,
+ "longitude": 92.082628,
+ "tags": [
+ "pariatur",
+ "ut",
+ "veniam",
+ "dolor",
+ "aliqua",
+ "ea",
+ "esse"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Newton Carney"
+ },
+ {
+ "id": 1,
+ "name": "Wolfe Pope"
+ },
+ {
+ "id": 2,
+ "name": "Blackburn Calderon"
+ }
+ ],
+ "greeting": "Hello, Jeanie Horn! You have 6 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afa41c02d99f320725",
+ "index": 300,
+ "guid": "4b84c4e0-3796-4775-8735-02626f483640",
+ "isActive": false,
+ "balance": "$1,309.67",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "green",
+ "name": "Charlene Lancaster",
+ "gender": "female",
+ "company": "APEXIA",
+ "email": "charlenelancaster@apexia.com",
+ "phone": "+1 (844) 430-3940",
+ "address": "246 Desmond Court, Chase, Missouri, 1645",
+ "about": "Consequat fugiat qui magna voluptate culpa velit aliquip commodo consequat pariatur qui do. Officia laboris aliquip laboris quis commodo veniam minim cillum eiusmod. Aliqua reprehenderit cupidatat sit laborum ullamco ex voluptate aliquip fugiat irure do. Non laborum incididunt reprehenderit nostrud enim ipsum incididunt ad minim sit nostrud.\r\n",
+ "registered": "2014-04-03T04:13:33 -02:00",
+ "latitude": 77.546185,
+ "longitude": -35.346537,
+ "tags": [
+ "sit",
+ "ipsum",
+ "deserunt",
+ "quis",
+ "enim",
+ "consequat",
+ "laboris"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Hernandez Sellers"
+ },
+ {
+ "id": 1,
+ "name": "Odonnell Long"
+ },
+ {
+ "id": 2,
+ "name": "Nancy Guerrero"
+ }
+ ],
+ "greeting": "Hello, Charlene Lancaster! You have 2 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af75901dca5caa8bc9",
+ "index": 301,
+ "guid": "8a49942d-99cb-45b1-9755-f6adcbc43014",
+ "isActive": false,
+ "balance": "$1,463.13",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "blue",
+ "name": "Jayne Stone",
+ "gender": "female",
+ "company": "TALKOLA",
+ "email": "jaynestone@talkola.com",
+ "phone": "+1 (820) 484-2010",
+ "address": "531 Fleet Place, Florence, Oregon, 2057",
+ "about": "Aliqua sit commodo nulla fugiat deserunt ullamco quis id ad Lorem. Aliqua elit eu consequat pariatur nisi magna magna dolor nulla ullamco aliqua quis elit. Pariatur sint nulla veniam magna. Proident cillum laboris eu eu esse. Sint laborum laboris magna fugiat adipisicing consectetur officia Lorem qui. Amet incididunt aliqua id irure ea culpa non ad. Excepteur ad reprehenderit dolor quis do velit minim.\r\n",
+ "registered": "2014-01-26T06:29:58 -01:00",
+ "latitude": 81.754906,
+ "longitude": -138.122577,
+ "tags": [
+ "fugiat",
+ "mollit",
+ "velit",
+ "incididunt",
+ "quis",
+ "qui",
+ "commodo"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Angeline Cervantes"
+ },
+ {
+ "id": 1,
+ "name": "Lenora Clayton"
+ },
+ {
+ "id": 2,
+ "name": "Haley Chambers"
+ }
+ ],
+ "greeting": "Hello, Jayne Stone! You have 7 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afa58042ee5ba47cf1",
+ "index": 302,
+ "guid": "c711dfe4-fc1f-460a-ae47-f91355f192b4",
+ "isActive": false,
+ "balance": "$3,100.68",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "blue",
+ "name": "Gertrude Herman",
+ "gender": "female",
+ "company": "NIMON",
+ "email": "gertrudeherman@nimon.com",
+ "phone": "+1 (826) 469-2449",
+ "address": "416 Berriman Street, Gibbsville, Federated States Of Micronesia, 9613",
+ "about": "Velit incididunt eiusmod anim Lorem deserunt veniam cupidatat. Magna dolore id do ut excepteur officia reprehenderit sunt consequat ut exercitation culpa non quis. Voluptate culpa ipsum adipisicing cupidatat excepteur culpa esse ex qui voluptate deserunt non adipisicing. Dolore aliquip cupidatat anim consequat voluptate aute minim. Velit id sit enim minim. Sunt consequat esse laborum nisi aliqua amet cillum magna labore sit sit tempor dolor sit.\r\n",
+ "registered": "2014-01-25T08:40:01 -01:00",
+ "latitude": 72.529444,
+ "longitude": -179.540706,
+ "tags": [
+ "anim",
+ "culpa",
+ "ex",
+ "eiusmod",
+ "qui",
+ "aliquip",
+ "excepteur"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Alyssa Griffith"
+ },
+ {
+ "id": 1,
+ "name": "Bowers Day"
+ },
+ {
+ "id": 2,
+ "name": "Casandra Chavez"
+ }
+ ],
+ "greeting": "Hello, Gertrude Herman! You have 9 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afc2b33f94640e8385",
+ "index": 303,
+ "guid": "789433d0-a7d8-4a84-97a5-e4030b33e3c0",
+ "isActive": false,
+ "balance": "$2,271.55",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "green",
+ "name": "Cleveland Robertson",
+ "gender": "male",
+ "company": "DEEPENDS",
+ "email": "clevelandrobertson@deepends.com",
+ "phone": "+1 (827) 581-3465",
+ "address": "338 Delmonico Place, Edgewater, South Dakota, 6678",
+ "about": "Aliquip adipisicing pariatur aliquip do irure anim dolore sint ullamco. Sunt ipsum adipisicing qui culpa. Cillum tempor cupidatat deserunt eu aute. Amet mollit ex duis esse ex consequat. Elit duis esse sunt anim laborum exercitation laborum minim in nisi pariatur. Amet ipsum cillum deserunt sint quis deserunt laboris mollit tempor eiusmod consectetur culpa cillum. Sit magna proident commodo exercitation Lorem ad ut laborum et dolor ex ipsum pariatur.\r\n",
+ "registered": "2014-11-27T02:38:29 -01:00",
+ "latitude": -75.184232,
+ "longitude": -120.791023,
+ "tags": [
+ "deserunt",
+ "elit",
+ "cupidatat",
+ "eiusmod",
+ "velit",
+ "laborum",
+ "aute"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Hopkins Clay"
+ },
+ {
+ "id": 1,
+ "name": "Bobbi Carr"
+ },
+ {
+ "id": 2,
+ "name": "Holt Griffin"
+ }
+ ],
+ "greeting": "Hello, Cleveland Robertson! You have 10 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af5070ad049aaac293",
+ "index": 304,
+ "guid": "0ad7e3b1-3cc1-4694-a544-d6c35e5e7ca3",
+ "isActive": false,
+ "balance": "$1,502.97",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "brown",
+ "name": "Coffey Savage",
+ "gender": "male",
+ "company": "PYRAMAX",
+ "email": "coffeysavage@pyramax.com",
+ "phone": "+1 (901) 450-3806",
+ "address": "756 Gunnison Court, Rodanthe, Puerto Rico, 2703",
+ "about": "Ullamco sint aliquip quis cillum aliquip ad culpa ad. Mollit in minim sit esse occaecat velit sint qui id reprehenderit ad. Reprehenderit deserunt nisi laboris amet nisi. Officia officia laboris ipsum aliquip ex excepteur amet aute. Cupidatat elit ex cupidatat consequat sint aliqua excepteur labore. Voluptate velit laboris officia cupidatat non occaecat laborum labore.\r\n",
+ "registered": "2014-01-29T01:30:38 -01:00",
+ "latitude": 44.985578,
+ "longitude": 131.532084,
+ "tags": [
+ "laboris",
+ "sint",
+ "tempor",
+ "qui",
+ "cillum",
+ "et",
+ "dolore"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Adrian Burton"
+ },
+ {
+ "id": 1,
+ "name": "Melissa Brewer"
+ },
+ {
+ "id": 2,
+ "name": "Candace Christensen"
+ }
+ ],
+ "greeting": "Hello, Coffey Savage! You have 6 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afebe27f94564f7adc",
+ "index": 305,
+ "guid": "4c48e5e2-9832-4b67-b3b4-ff3ce1e13a67",
+ "isActive": true,
+ "balance": "$3,579.32",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "green",
+ "name": "Jordan Stephenson",
+ "gender": "male",
+ "company": "QUANTASIS",
+ "email": "jordanstephenson@quantasis.com",
+ "phone": "+1 (931) 415-2170",
+ "address": "318 Wythe Avenue, Bourg, Michigan, 2787",
+ "about": "Ea est nostrud mollit incididunt exercitation. Fugiat irure occaecat eiusmod ex incididunt velit mollit labore. Pariatur duis qui officia labore consequat proident exercitation occaecat.\r\n",
+ "registered": "2014-12-26T23:33:15 -01:00",
+ "latitude": 22.271735,
+ "longitude": 124.66356,
+ "tags": [
+ "minim",
+ "sit",
+ "eu",
+ "ex",
+ "Lorem",
+ "pariatur",
+ "minim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Lora Cunningham"
+ },
+ {
+ "id": 1,
+ "name": "Combs Figueroa"
+ },
+ {
+ "id": 2,
+ "name": "Jessica Lane"
+ }
+ ],
+ "greeting": "Hello, Jordan Stephenson! You have 7 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af1b1e58acfce4cd1b",
+ "index": 306,
+ "guid": "2fc8e4e6-053d-456b-94f3-7420644d9c42",
+ "isActive": false,
+ "balance": "$2,336.46",
+ "picture": "http://placehold.it/32x32",
+ "age": 21,
+ "eyeColor": "brown",
+ "name": "Lane Cummings",
+ "gender": "male",
+ "company": "RUBADUB",
+ "email": "lanecummings@rubadub.com",
+ "phone": "+1 (939) 554-3241",
+ "address": "955 Meadow Street, Windsor, Nebraska, 6455",
+ "about": "Cillum irure laborum et ipsum. Excepteur duis voluptate elit veniam esse incididunt cupidatat cillum incididunt adipisicing anim. Nisi ut veniam officia sint minim duis ipsum quis incididunt magna et veniam. Culpa eiusmod enim id esse officia. Sit nostrud Lorem occaecat sunt sint veniam sit enim reprehenderit laboris labore.\r\n",
+ "registered": "2014-08-18T18:40:28 -02:00",
+ "latitude": -78.24968,
+ "longitude": -152.065261,
+ "tags": [
+ "veniam",
+ "deserunt",
+ "ea",
+ "nostrud",
+ "cupidatat",
+ "ipsum",
+ "dolore"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Raquel Guerra"
+ },
+ {
+ "id": 1,
+ "name": "Richard Fitzgerald"
+ },
+ {
+ "id": 2,
+ "name": "Rosie Kirk"
+ }
+ ],
+ "greeting": "Hello, Lane Cummings! You have 4 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af4d5be9ef758ccced",
+ "index": 307,
+ "guid": "3a312572-e199-4044-adad-b86f9e8e947d",
+ "isActive": true,
+ "balance": "$3,284.71",
+ "picture": "http://placehold.it/32x32",
+ "age": 26,
+ "eyeColor": "green",
+ "name": "Burt Andrews",
+ "gender": "male",
+ "company": "STRALOY",
+ "email": "burtandrews@straloy.com",
+ "phone": "+1 (847) 429-3004",
+ "address": "981 Brigham Street, Hiseville, Wyoming, 6394",
+ "about": "Lorem quis excepteur elit cupidatat labore in voluptate quis. Sint ea anim labore commodo Lorem. Non reprehenderit deserunt pariatur laborum fugiat duis exercitation sit mollit tempor veniam qui consequat. Deserunt qui laboris velit in ad eiusmod Lorem eu incididunt incididunt ut. Fugiat adipisicing non nostrud ex sunt ad nostrud ad magna voluptate. Sit officia minim consequat deserunt et enim Lorem cupidatat esse amet esse in sint cillum. Cupidatat fugiat minim adipisicing nisi.\r\n",
+ "registered": "2015-01-25T10:34:33 -01:00",
+ "latitude": -5.292824,
+ "longitude": 107.75004,
+ "tags": [
+ "incididunt",
+ "nisi",
+ "ullamco",
+ "fugiat",
+ "deserunt",
+ "culpa",
+ "quis"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Alford Morton"
+ },
+ {
+ "id": 1,
+ "name": "Puckett Mckinney"
+ },
+ {
+ "id": 2,
+ "name": "Marcia Livingston"
+ }
+ ],
+ "greeting": "Hello, Burt Andrews! You have 6 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af5eb79046d642ee08",
+ "index": 308,
+ "guid": "2caa4229-9f2f-48ac-8eb4-558592cc097f",
+ "isActive": true,
+ "balance": "$3,952.64",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "blue",
+ "name": "Nanette Mcclain",
+ "gender": "female",
+ "company": "ASSURITY",
+ "email": "nanettemcclain@assurity.com",
+ "phone": "+1 (845) 474-2484",
+ "address": "497 Wilson Avenue, Layhill, California, 7505",
+ "about": "Laboris sint nostrud dolor proident. Amet ad reprehenderit labore minim eu aliqua quis esse dolor. Aliquip nisi ipsum sunt fugiat proident eu nisi. Ex commodo nulla voluptate aliqua cillum. Et dolor nostrud laborum pariatur irure anim commodo tempor consectetur.\r\n",
+ "registered": "2014-04-16T18:21:20 -02:00",
+ "latitude": 11.836742,
+ "longitude": 12.676375,
+ "tags": [
+ "reprehenderit",
+ "occaecat",
+ "aliquip",
+ "voluptate",
+ "non",
+ "consequat",
+ "qui"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Stanley Holloway"
+ },
+ {
+ "id": 1,
+ "name": "Pam Silva"
+ },
+ {
+ "id": 2,
+ "name": "Petersen Armstrong"
+ }
+ ],
+ "greeting": "Hello, Nanette Mcclain! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afb4c88f8f6ee6a6e9",
+ "index": 309,
+ "guid": "cabdf1ab-b1e0-44fd-bb55-b22fb172e492",
+ "isActive": true,
+ "balance": "$1,545.62",
+ "picture": "http://placehold.it/32x32",
+ "age": 26,
+ "eyeColor": "blue",
+ "name": "Sheri Powers",
+ "gender": "female",
+ "company": "SHEPARD",
+ "email": "sheripowers@shepard.com",
+ "phone": "+1 (831) 473-2175",
+ "address": "634 Willow Place, Lemoyne, Indiana, 449",
+ "about": "Ad culpa aliquip ipsum proident sunt irure consectetur ex qui velit labore ullamco. Reprehenderit reprehenderit id occaecat eiusmod ea aute ullamco quis fugiat irure. Cillum nulla non fugiat do sit consectetur ex veniam veniam ex eiusmod consectetur. Esse sit adipisicing nostrud qui deserunt. Eu proident laborum adipisicing eiusmod et cupidatat quis in ea proident sint dolor duis.\r\n",
+ "registered": "2014-03-26T13:43:59 -01:00",
+ "latitude": -60.253952,
+ "longitude": 19.560606,
+ "tags": [
+ "exercitation",
+ "dolore",
+ "ad",
+ "dolor",
+ "velit",
+ "incididunt",
+ "est"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Brennan Shields"
+ },
+ {
+ "id": 1,
+ "name": "Rosalyn West"
+ },
+ {
+ "id": 2,
+ "name": "Kenya Gray"
+ }
+ ],
+ "greeting": "Hello, Sheri Powers! You have 7 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afd1615a0284ad61ac",
+ "index": 310,
+ "guid": "61c7420a-fd90-4527-8ddc-de8c5fa470d4",
+ "isActive": true,
+ "balance": "$3,752.41",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "blue",
+ "name": "Moses Obrien",
+ "gender": "male",
+ "company": "ENTROPIX",
+ "email": "mosesobrien@entropix.com",
+ "phone": "+1 (881) 543-2973",
+ "address": "613 Randolph Street, Sharon, Palau, 6967",
+ "about": "Pariatur nostrud commodo eu do incididunt ut ex qui esse ut cupidatat. Veniam voluptate cupidatat nulla consequat aliqua consectetur ut nisi eu reprehenderit nisi fugiat. Ut qui consequat non dolore officia voluptate eiusmod irure mollit et tempor elit.\r\n",
+ "registered": "2014-10-01T09:11:50 -02:00",
+ "latitude": 60.645993,
+ "longitude": 78.11593,
+ "tags": [
+ "est",
+ "occaecat",
+ "qui",
+ "in",
+ "veniam",
+ "consectetur",
+ "duis"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Tillman Morrow"
+ },
+ {
+ "id": 1,
+ "name": "Randall Decker"
+ },
+ {
+ "id": 2,
+ "name": "Marian Cook"
+ }
+ ],
+ "greeting": "Hello, Moses Obrien! You have 8 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af0533961a15a043de",
+ "index": 311,
+ "guid": "6f304799-d249-4ff6-90f9-a2ee58f476e4",
+ "isActive": true,
+ "balance": "$2,189.78",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "green",
+ "name": "Mcfadden Estrada",
+ "gender": "male",
+ "company": "GLOBOIL",
+ "email": "mcfaddenestrada@globoil.com",
+ "phone": "+1 (882) 424-2507",
+ "address": "628 Heyward Street, Taft, Northern Mariana Islands, 4635",
+ "about": "Sunt in qui aute occaecat aliquip quis sit irure Lorem aute. Officia minim nostrud sit ut cupidatat laboris incididunt proident cillum ullamco aute amet sunt. Mollit aute nulla consectetur voluptate reprehenderit mollit voluptate laboris aliquip quis ex sint dolor culpa. Aute elit esse nisi est deserunt cillum eu Lorem commodo aute ad incididunt ad. Dolor id do pariatur duis enim deserunt.\r\n",
+ "registered": "2015-04-04T02:44:17 -02:00",
+ "latitude": 67.624434,
+ "longitude": 141.260212,
+ "tags": [
+ "reprehenderit",
+ "ipsum",
+ "nostrud",
+ "ea",
+ "nulla",
+ "veniam",
+ "et"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Dona Booker"
+ },
+ {
+ "id": 1,
+ "name": "Gould Gregory"
+ },
+ {
+ "id": 2,
+ "name": "Rivers Manning"
+ }
+ ],
+ "greeting": "Hello, Mcfadden Estrada! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af3fb7640fa2d0fcd6",
+ "index": 312,
+ "guid": "c765c102-bf22-4cb1-bd21-538dc284425b",
+ "isActive": false,
+ "balance": "$1,780.91",
+ "picture": "http://placehold.it/32x32",
+ "age": 26,
+ "eyeColor": "blue",
+ "name": "Amber Cruz",
+ "gender": "female",
+ "company": "MOMENTIA",
+ "email": "ambercruz@momentia.com",
+ "phone": "+1 (857) 582-2623",
+ "address": "319 Gerritsen Avenue, Fairlee, Washington, 3711",
+ "about": "Incididunt Lorem incididunt amet duis ipsum mollit aute velit proident. Veniam incididunt cillum pariatur ullamco id ut amet culpa. Culpa laborum magna quis deserunt nulla aliquip amet elit duis voluptate est nostrud est sint. Reprehenderit commodo proident laborum nulla consectetur do dolor nulla aliqua exercitation. Proident excepteur eu eiusmod eiusmod reprehenderit Lorem in.\r\n",
+ "registered": "2015-03-13T15:36:22 -01:00",
+ "latitude": -28.161854,
+ "longitude": -104.117035,
+ "tags": [
+ "ipsum",
+ "aliquip",
+ "tempor",
+ "enim",
+ "duis",
+ "aliquip",
+ "eu"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Gates Santiago"
+ },
+ {
+ "id": 1,
+ "name": "Corina Battle"
+ },
+ {
+ "id": 2,
+ "name": "Rosales Roberts"
+ }
+ ],
+ "greeting": "Hello, Amber Cruz! You have 1 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afe861ab17b42719b4",
+ "index": 313,
+ "guid": "6b122171-4fb8-43d9-9b45-1f3bf254485b",
+ "isActive": true,
+ "balance": "$3,573.69",
+ "picture": "http://placehold.it/32x32",
+ "age": 21,
+ "eyeColor": "brown",
+ "name": "Maricela Wade",
+ "gender": "female",
+ "company": "GEEKOL",
+ "email": "maricelawade@geekol.com",
+ "phone": "+1 (888) 409-2949",
+ "address": "231 Garden Place, Fidelis, Massachusetts, 2943",
+ "about": "Aliquip nulla consequat qui et ipsum non reprehenderit. Adipisicing irure culpa eu dolore duis ut enim cupidatat est ut non officia commodo. Aliquip eiusmod occaecat qui id et sit. Labore occaecat amet enim laboris non tempor ad elit fugiat exercitation sunt. Aliqua deserunt tempor ad nisi sit in eiusmod qui.\r\n",
+ "registered": "2015-04-23T14:44:52 -02:00",
+ "latitude": -36.430193,
+ "longitude": -131.342611,
+ "tags": [
+ "pariatur",
+ "id",
+ "sit",
+ "esse",
+ "ad",
+ "commodo",
+ "occaecat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Ratliff Mendez"
+ },
+ {
+ "id": 1,
+ "name": "Ursula Whitley"
+ },
+ {
+ "id": 2,
+ "name": "Audra Golden"
+ }
+ ],
+ "greeting": "Hello, Maricela Wade! You have 7 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af38f51fe657189fca",
+ "index": 314,
+ "guid": "cd444dd4-e22f-45af-8c28-30ccce7db35f",
+ "isActive": true,
+ "balance": "$3,714.92",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "brown",
+ "name": "Effie Franco",
+ "gender": "female",
+ "company": "XTH",
+ "email": "effiefranco@xth.com",
+ "phone": "+1 (929) 484-3821",
+ "address": "399 Crooke Avenue, Cuylerville, Tennessee, 3614",
+ "about": "Minim voluptate consectetur dolore consequat reprehenderit quis nulla velit enim voluptate officia. Voluptate commodo consequat duis culpa ex. Ad consequat quis tempor consequat cillum. Mollit enim qui labore ad duis anim. Ut velit non est velit qui excepteur ad sunt. Do adipisicing dolore laboris exercitation aliquip.\r\n",
+ "registered": "2014-11-08T02:13:37 -01:00",
+ "latitude": 1.583925,
+ "longitude": 52.143667,
+ "tags": [
+ "ipsum",
+ "exercitation",
+ "exercitation",
+ "et",
+ "consequat",
+ "eiusmod",
+ "ad"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Mitzi Acevedo"
+ },
+ {
+ "id": 1,
+ "name": "Powell Glass"
+ },
+ {
+ "id": 2,
+ "name": "Janine Chan"
+ }
+ ],
+ "greeting": "Hello, Effie Franco! You have 4 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afc573d5ef9642bb3a",
+ "index": 315,
+ "guid": "f42887a6-2286-433d-9582-6afe3d362131",
+ "isActive": false,
+ "balance": "$2,941.80",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "green",
+ "name": "Marquita Valenzuela",
+ "gender": "female",
+ "company": "QUILTIGEN",
+ "email": "marquitavalenzuela@quiltigen.com",
+ "phone": "+1 (946) 451-2867",
+ "address": "879 Guider Avenue, Guilford, Wisconsin, 6097",
+ "about": "Labore proident nulla aliqua officia consectetur. Elit esse id nostrud fugiat enim. Aliquip tempor culpa id incididunt ex id proident et exercitation amet tempor irure. Anim et proident dolore ut aliqua labore ipsum veniam pariatur qui esse ullamco Lorem excepteur. Aliqua eiusmod ut voluptate est proident et ex culpa deserunt sit non. Veniam cillum et reprehenderit laboris qui reprehenderit ullamco.\r\n",
+ "registered": "2015-02-27T21:07:28 -01:00",
+ "latitude": 52.401236,
+ "longitude": 145.599979,
+ "tags": [
+ "consequat",
+ "duis",
+ "eiusmod",
+ "laborum",
+ "ipsum",
+ "non",
+ "adipisicing"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Leslie Page"
+ },
+ {
+ "id": 1,
+ "name": "Helen Mckee"
+ },
+ {
+ "id": 2,
+ "name": "Sondra Howell"
+ }
+ ],
+ "greeting": "Hello, Marquita Valenzuela! You have 4 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af926976832e3e434d",
+ "index": 316,
+ "guid": "d8616aac-7e6c-410e-86a8-9a3d19219146",
+ "isActive": false,
+ "balance": "$3,756.60",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "green",
+ "name": "Alba Best",
+ "gender": "female",
+ "company": "VERAQ",
+ "email": "albabest@veraq.com",
+ "phone": "+1 (938) 572-2664",
+ "address": "850 Bay Street, Dana, Delaware, 5804",
+ "about": "Ut fugiat consectetur amet labore aute dolor aliquip in mollit enim ut exercitation irure proident. Anim duis culpa consequat labore excepteur nostrud occaecat in nisi. Reprehenderit esse veniam do cillum occaecat. Esse fugiat aute ad ut ut elit. Voluptate in occaecat cillum nisi consectetur voluptate consequat adipisicing non in amet.\r\n",
+ "registered": "2014-01-09T14:31:02 -01:00",
+ "latitude": 41.915982,
+ "longitude": 17.890365,
+ "tags": [
+ "veniam",
+ "consequat",
+ "aliqua",
+ "nulla",
+ "ullamco",
+ "sint",
+ "aliqua"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Vicky Larson"
+ },
+ {
+ "id": 1,
+ "name": "Harding English"
+ },
+ {
+ "id": 2,
+ "name": "Meghan Delacruz"
+ }
+ ],
+ "greeting": "Hello, Alba Best! You have 9 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af71e247d3fac35900",
+ "index": 317,
+ "guid": "4b1766f7-3533-4689-8e89-c1192da6ac71",
+ "isActive": false,
+ "balance": "$3,650.23",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "blue",
+ "name": "Cristina Kaufman",
+ "gender": "female",
+ "company": "KANGLE",
+ "email": "cristinakaufman@kangle.com",
+ "phone": "+1 (936) 579-3986",
+ "address": "743 Manor Court, Baker, American Samoa, 7814",
+ "about": "Sint nostrud voluptate Lorem ex culpa mollit proident voluptate laboris consectetur. Nisi consequat occaecat mollit ex cupidatat. Cillum non ex nostrud enim aliquip. Deserunt aute minim laboris magna ea. Ex ex amet minim non non commodo laboris. Nostrud est cupidatat deserunt anim dolor qui duis irure commodo ea deserunt ut aliqua id. Eu ullamco irure reprehenderit magna ex in.\r\n",
+ "registered": "2014-12-28T21:47:56 -01:00",
+ "latitude": 74.128221,
+ "longitude": -67.693502,
+ "tags": [
+ "nostrud",
+ "veniam",
+ "pariatur",
+ "laboris",
+ "qui",
+ "exercitation",
+ "adipisicing"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Russell Simpson"
+ },
+ {
+ "id": 1,
+ "name": "Taylor Curtis"
+ },
+ {
+ "id": 2,
+ "name": "Clemons Hoover"
+ }
+ ],
+ "greeting": "Hello, Cristina Kaufman! You have 6 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03affa48e69932f87326",
+ "index": 318,
+ "guid": "8daa0355-14b9-4329-8292-d74525e272f3",
+ "isActive": true,
+ "balance": "$3,696.34",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "brown",
+ "name": "Noelle Lowery",
+ "gender": "female",
+ "company": "FARMAGE",
+ "email": "noellelowery@farmage.com",
+ "phone": "+1 (809) 471-2752",
+ "address": "892 Girard Street, Fresno, Ohio, 9460",
+ "about": "Sunt nulla ex reprehenderit Lorem fugiat sit est quis id consectetur sunt ipsum. Commodo aliqua nostrud sunt adipisicing in ex ut eiusmod voluptate anim minim velit deserunt. Proident qui aliquip aliquip aliqua ut veniam ut aute eu dolore. Sunt enim velit eiusmod enim ipsum adipisicing ex pariatur. Esse adipisicing exercitation qui sit ea laborum sunt amet.\r\n",
+ "registered": "2014-10-30T00:59:46 -01:00",
+ "latitude": -86.298186,
+ "longitude": 91.46867,
+ "tags": [
+ "velit",
+ "ad",
+ "qui",
+ "aliquip",
+ "consectetur",
+ "veniam",
+ "culpa"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Nellie Sandoval"
+ },
+ {
+ "id": 1,
+ "name": "Austin Fletcher"
+ },
+ {
+ "id": 2,
+ "name": "Simmons Sharpe"
+ }
+ ],
+ "greeting": "Hello, Noelle Lowery! You have 5 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03aff2081876aee40908",
+ "index": 319,
+ "guid": "66f2265d-a618-44d9-b2fc-ded5fff26a79",
+ "isActive": false,
+ "balance": "$1,597.11",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "blue",
+ "name": "Iva Bartlett",
+ "gender": "female",
+ "company": "NETERIA",
+ "email": "ivabartlett@neteria.com",
+ "phone": "+1 (950) 529-3617",
+ "address": "253 Kensington Walk, Rosedale, Louisiana, 1281",
+ "about": "Est nisi ad anim deserunt elit dolor aliqua ex commodo reprehenderit ullamco minim laborum Lorem. Nisi sint non adipisicing occaecat ipsum aliqua anim. Nisi id nostrud occaecat non ad sunt incididunt esse elit aliqua pariatur consectetur Lorem tempor.\r\n",
+ "registered": "2015-03-05T22:47:46 -01:00",
+ "latitude": 15.188845,
+ "longitude": 49.246677,
+ "tags": [
+ "labore",
+ "proident",
+ "et",
+ "consequat",
+ "deserunt",
+ "non",
+ "est"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Thomas Moon"
+ },
+ {
+ "id": 1,
+ "name": "Leanna Levine"
+ },
+ {
+ "id": 2,
+ "name": "Lilia Moody"
+ }
+ ],
+ "greeting": "Hello, Iva Bartlett! You have 1 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af4d95f87fa1046712",
+ "index": 320,
+ "guid": "d004f465-69fd-41fe-8137-e7de326d03cb",
+ "isActive": true,
+ "balance": "$2,928.01",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "blue",
+ "name": "Sawyer Torres",
+ "gender": "male",
+ "company": "SPHERIX",
+ "email": "sawyertorres@spherix.com",
+ "phone": "+1 (961) 460-2459",
+ "address": "372 Mill Lane, Corriganville, Idaho, 4698",
+ "about": "Aliquip mollit amet exercitation nostrud. Aliquip laborum voluptate fugiat nulla. Eiusmod ullamco voluptate ipsum aliquip fugiat amet ea elit dolore ad. Voluptate esse ullamco eiusmod quis. Exercitation est voluptate laboris esse voluptate ipsum ullamco ullamco eu et amet Lorem.\r\n",
+ "registered": "2014-09-07T12:52:29 -02:00",
+ "latitude": -46.684002,
+ "longitude": 79.775628,
+ "tags": [
+ "ea",
+ "ullamco",
+ "cupidatat",
+ "anim",
+ "quis",
+ "pariatur",
+ "exercitation"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Mcgowan Dominguez"
+ },
+ {
+ "id": 1,
+ "name": "Winifred Estes"
+ },
+ {
+ "id": 2,
+ "name": "Palmer Dean"
+ }
+ ],
+ "greeting": "Hello, Sawyer Torres! You have 7 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af49d4b87f723975ae",
+ "index": 321,
+ "guid": "f7d746c2-9c2b-4e9d-8d1b-681e24740638",
+ "isActive": false,
+ "balance": "$1,357.18",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "brown",
+ "name": "Foreman Cortez",
+ "gender": "male",
+ "company": "DANCERITY",
+ "email": "foremancortez@dancerity.com",
+ "phone": "+1 (896) 552-3937",
+ "address": "542 Willow Street, Hinsdale, New Hampshire, 6287",
+ "about": "Dolore elit reprehenderit cupidatat voluptate duis eiusmod aute commodo est cupidatat nulla id incididunt sit. Duis aliquip aliqua cillum tempor adipisicing. Proident non elit id officia reprehenderit culpa incididunt sit fugiat eiusmod consequat ipsum quis. Occaecat commodo est anim magna amet culpa eiusmod sunt est ex exercitation eiusmod laboris. Amet tempor reprehenderit nostrud aute est esse aliqua sint nisi pariatur nisi in. Consequat aliquip est minim sint occaecat reprehenderit aliquip sunt tempor nisi enim dolor deserunt ex. Cillum anim consequat ad magna quis Lorem dolor culpa aute nisi.\r\n",
+ "registered": "2015-03-11T04:04:50 -01:00",
+ "latitude": -17.34637,
+ "longitude": 41.776312,
+ "tags": [
+ "esse",
+ "laboris",
+ "consequat",
+ "magna",
+ "aute",
+ "amet",
+ "qui"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Margret Wilcox"
+ },
+ {
+ "id": 1,
+ "name": "Hutchinson Frederick"
+ },
+ {
+ "id": 2,
+ "name": "Courtney Mcintyre"
+ }
+ ],
+ "greeting": "Hello, Foreman Cortez! You have 3 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afbd7b99de2b48f0f7",
+ "index": 322,
+ "guid": "7913df16-7b01-4b44-8f77-4da882183a46",
+ "isActive": true,
+ "balance": "$1,607.40",
+ "picture": "http://placehold.it/32x32",
+ "age": 28,
+ "eyeColor": "brown",
+ "name": "Charlotte Dunlap",
+ "gender": "female",
+ "company": "MARVANE",
+ "email": "charlottedunlap@marvane.com",
+ "phone": "+1 (883) 543-2009",
+ "address": "105 Beadel Street, Charco, Maine, 4764",
+ "about": "Mollit laborum sunt ex reprehenderit ut anim aliquip irure duis non cupidatat. Mollit officia deserunt mollit culpa elit amet ut elit dolor adipisicing non et. Deserunt id sunt exercitation officia elit eiusmod cillum ea exercitation Lorem aliquip qui id. Consequat incididunt ut fugiat culpa aliqua amet qui officia aliquip nostrud dolore voluptate fugiat. Enim aliquip deserunt irure labore minim cillum non. Ea reprehenderit qui ad ea.\r\n",
+ "registered": "2014-02-07T22:53:32 -01:00",
+ "latitude": 6.153332,
+ "longitude": -78.663468,
+ "tags": [
+ "deserunt",
+ "velit",
+ "eu",
+ "velit",
+ "aliqua",
+ "non",
+ "mollit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Jennifer Johnston"
+ },
+ {
+ "id": 1,
+ "name": "Nita Porter"
+ },
+ {
+ "id": 2,
+ "name": "Watkins Dotson"
+ }
+ ],
+ "greeting": "Hello, Charlotte Dunlap! You have 1 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af3ca0bf0a5599c41a",
+ "index": 323,
+ "guid": "b1ac9b5d-201b-43d9-9072-bb0947189bb7",
+ "isActive": true,
+ "balance": "$1,878.95",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "green",
+ "name": "Hilda Scott",
+ "gender": "female",
+ "company": "DADABASE",
+ "email": "hildascott@dadabase.com",
+ "phone": "+1 (843) 416-3276",
+ "address": "883 Seba Avenue, Tivoli, Utah, 9393",
+ "about": "Excepteur enim mollit quis dolore consectetur laborum. Non ipsum officia do aute do minim. Eiusmod sit consequat aute ea irure reprehenderit et est sint deserunt eu. Est laboris reprehenderit ea ex et qui sint sit consectetur ipsum duis ut. Incididunt deserunt occaecat adipisicing dolor fugiat irure incididunt incididunt. Officia non minim aute est ad Lorem ea sint. Sunt pariatur aute proident aute cupidatat aute ad.\r\n",
+ "registered": "2015-02-05T22:06:18 -01:00",
+ "latitude": -69.13537,
+ "longitude": -176.270177,
+ "tags": [
+ "irure",
+ "aute",
+ "dolore",
+ "exercitation",
+ "laboris",
+ "do",
+ "culpa"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Lessie Pollard"
+ },
+ {
+ "id": 1,
+ "name": "Mccarthy Giles"
+ },
+ {
+ "id": 2,
+ "name": "French Hudson"
+ }
+ ],
+ "greeting": "Hello, Hilda Scott! You have 9 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03affdf6bd0c04f65573",
+ "index": 324,
+ "guid": "d99bd234-72d9-437f-b386-c20a57bcd94a",
+ "isActive": true,
+ "balance": "$3,685.05",
+ "picture": "http://placehold.it/32x32",
+ "age": 22,
+ "eyeColor": "green",
+ "name": "Anita Potts",
+ "gender": "female",
+ "company": "CYCLONICA",
+ "email": "anitapotts@cyclonica.com",
+ "phone": "+1 (838) 461-3175",
+ "address": "258 Cambridge Place, Emory, West Virginia, 5287",
+ "about": "Adipisicing ipsum nulla nisi occaecat officia consectetur eiusmod aliquip laboris ipsum. Aliqua qui qui fugiat duis velit. Et culpa sit cupidatat minim ad enim ex elit ex. Do occaecat sit in aute mollit occaecat est. Amet voluptate fugiat minim reprehenderit. Non cupidatat consequat laborum magna anim occaecat velit adipisicing aliquip mollit veniam quis consequat aliqua. Sit ut excepteur fugiat laborum esse quis fugiat.\r\n",
+ "registered": "2014-11-03T01:32:55 -01:00",
+ "latitude": -59.287084,
+ "longitude": 7.891504,
+ "tags": [
+ "cillum",
+ "tempor",
+ "mollit",
+ "voluptate",
+ "in",
+ "magna",
+ "excepteur"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Blanca Bradley"
+ },
+ {
+ "id": 1,
+ "name": "Enid Dorsey"
+ },
+ {
+ "id": 2,
+ "name": "Alexis Davenport"
+ }
+ ],
+ "greeting": "Hello, Anita Potts! You have 3 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af3745178fe666323b",
+ "index": 325,
+ "guid": "2efc647c-ff18-494b-a81c-9d73268cfff3",
+ "isActive": true,
+ "balance": "$1,210.11",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "green",
+ "name": "Rowe Simmons",
+ "gender": "male",
+ "company": "ZILPHUR",
+ "email": "rowesimmons@zilphur.com",
+ "phone": "+1 (939) 557-3333",
+ "address": "690 Ash Street, Bordelonville, Virginia, 1308",
+ "about": "Commodo irure elit in laborum veniam proident laborum cupidatat. Exercitation ut aute laboris adipisicing irure nostrud Lorem aliqua voluptate ut velit culpa labore. Consequat voluptate do do et do dolor cillum ad voluptate laborum. Ad sit ullamco dolore labore consequat ea excepteur sit sint qui enim eu Lorem. Fugiat eiusmod ea id est do do.\r\n",
+ "registered": "2014-01-15T10:27:45 -01:00",
+ "latitude": -1.568799,
+ "longitude": 51.095171,
+ "tags": [
+ "voluptate",
+ "eu",
+ "velit",
+ "pariatur",
+ "in",
+ "labore",
+ "voluptate"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Beck Odom"
+ },
+ {
+ "id": 1,
+ "name": "England Bowers"
+ },
+ {
+ "id": 2,
+ "name": "Madeline Cantrell"
+ }
+ ],
+ "greeting": "Hello, Rowe Simmons! You have 5 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af49f9b129e46c2638",
+ "index": 326,
+ "guid": "ac2e692b-f52f-45cb-ab48-7234e605336b",
+ "isActive": true,
+ "balance": "$1,011.52",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "brown",
+ "name": "Juarez Rivers",
+ "gender": "male",
+ "company": "DOGNOSIS",
+ "email": "juarezrivers@dognosis.com",
+ "phone": "+1 (978) 420-2364",
+ "address": "293 Flatbush Avenue, Caroline, Florida, 9065",
+ "about": "Laborum proident enim duis minim. Exercitation ex ullamco commodo incididunt. Lorem do ex nostrud minim incididunt qui aliqua.\r\n",
+ "registered": "2015-01-09T04:36:30 -01:00",
+ "latitude": 74.199169,
+ "longitude": -10.283291,
+ "tags": [
+ "velit",
+ "id",
+ "amet",
+ "pariatur",
+ "aliqua",
+ "do",
+ "Lorem"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Blair Snider"
+ },
+ {
+ "id": 1,
+ "name": "Mccormick Munoz"
+ },
+ {
+ "id": 2,
+ "name": "Billie Hester"
+ }
+ ],
+ "greeting": "Hello, Juarez Rivers! You have 10 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afc5b6619d73f35730",
+ "index": 327,
+ "guid": "27ff135e-3d26-4eb1-841f-0ee785a6e20f",
+ "isActive": true,
+ "balance": "$2,005.78",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "green",
+ "name": "Gonzales Hodge",
+ "gender": "male",
+ "company": "BIFLEX",
+ "email": "gonzaleshodge@biflex.com",
+ "phone": "+1 (954) 540-3636",
+ "address": "715 Seigel Court, Rockbridge, Texas, 3787",
+ "about": "Velit exercitation occaecat dolor magna ex dolore nostrud fugiat proident consequat eu esse incididunt. Eiusmod Lorem commodo excepteur tempor excepteur velit quis. Do cillum cupidatat laborum sint sit magna officia culpa sit amet. Culpa nostrud voluptate dolor minim aute adipisicing. Deserunt occaecat exercitation velit dolore culpa Lorem. Consectetur deserunt eu dolore irure sint id irure deserunt.\r\n",
+ "registered": "2014-04-19T19:52:26 -02:00",
+ "latitude": -35.166275,
+ "longitude": -8.127876,
+ "tags": [
+ "tempor",
+ "irure",
+ "aliquip",
+ "Lorem",
+ "est",
+ "voluptate",
+ "magna"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Nieves French"
+ },
+ {
+ "id": 1,
+ "name": "Jenny Fleming"
+ },
+ {
+ "id": 2,
+ "name": "Shepherd Hart"
+ }
+ ],
+ "greeting": "Hello, Gonzales Hodge! You have 6 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afaef35f963c5c7b51",
+ "index": 328,
+ "guid": "8add4d62-488e-44b6-bc67-759c5d90f765",
+ "isActive": false,
+ "balance": "$1,879.65",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "brown",
+ "name": "Fox Townsend",
+ "gender": "male",
+ "company": "MEDICROIX",
+ "email": "foxtownsend@medicroix.com",
+ "phone": "+1 (832) 443-3059",
+ "address": "986 Wyckoff Street, Masthope, Guam, 8092",
+ "about": "Ad eiusmod irure sint in ad minim veniam excepteur duis aute officia enim Lorem. In dolore voluptate magna veniam laboris fugiat. Nisi cillum eiusmod labore exercitation tempor elit officia sit ut aliqua magna aliqua voluptate. Commodo et exercitation tempor consequat consequat commodo exercitation duis eiusmod eu do anim. Velit amet voluptate nulla velit magna veniam nulla laboris tempor consequat. Irure exercitation officia amet incididunt qui culpa pariatur excepteur. Id tempor qui duis ad non duis do qui irure ex dolor velit id sit.\r\n",
+ "registered": "2015-01-14T04:04:14 -01:00",
+ "latitude": 80.401871,
+ "longitude": 67.00774,
+ "tags": [
+ "cillum",
+ "ut",
+ "voluptate",
+ "commodo",
+ "magna",
+ "excepteur",
+ "minim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Moreno Harper"
+ },
+ {
+ "id": 1,
+ "name": "Misty Maldonado"
+ },
+ {
+ "id": 2,
+ "name": "Ginger Barr"
+ }
+ ],
+ "greeting": "Hello, Fox Townsend! You have 8 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afd3a9fadc8be5a357",
+ "index": 329,
+ "guid": "11b48be3-0308-4d48-ac86-48c6513e99e2",
+ "isActive": true,
+ "balance": "$1,916.96",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "blue",
+ "name": "Shari Vance",
+ "gender": "female",
+ "company": "COMVEYER",
+ "email": "sharivance@comveyer.com",
+ "phone": "+1 (995) 576-3018",
+ "address": "242 Columbia Place, Accoville, Alaska, 6250",
+ "about": "Et ut qui commodo ut proident irure voluptate cillum laboris. Duis non anim fugiat nulla aliquip id. Ut irure et nulla culpa consectetur.\r\n",
+ "registered": "2014-05-17T17:51:29 -02:00",
+ "latitude": -21.746981,
+ "longitude": 75.606382,
+ "tags": [
+ "incididunt",
+ "excepteur",
+ "excepteur",
+ "est",
+ "mollit",
+ "ex",
+ "cillum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Madge Jacobson"
+ },
+ {
+ "id": 1,
+ "name": "Ray Conway"
+ },
+ {
+ "id": 2,
+ "name": "Keisha Weber"
+ }
+ ],
+ "greeting": "Hello, Shari Vance! You have 8 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af50347001afb26607",
+ "index": 330,
+ "guid": "4f62fb70-3920-44bc-8325-71a906ba6ccf",
+ "isActive": true,
+ "balance": "$1,061.49",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "blue",
+ "name": "Elinor Small",
+ "gender": "female",
+ "company": "RODEOCEAN",
+ "email": "elinorsmall@rodeocean.com",
+ "phone": "+1 (811) 488-3323",
+ "address": "639 Herzl Street, Clarktown, District Of Columbia, 7138",
+ "about": "Irure veniam aliqua velit qui mollit mollit mollit labore aliquip id quis occaecat sunt elit. Occaecat nulla pariatur tempor dolor minim aute consectetur voluptate esse exercitation proident commodo officia nulla. Ut nulla occaecat dolor officia ea. Veniam nisi veniam labore quis dolore consectetur nostrud enim. Dolor eu nostrud exercitation et ea dolore dolor deserunt labore magna qui. Consectetur pariatur irure voluptate ea eiusmod labore pariatur dolor ullamco sit dolor. Quis nostrud excepteur minim reprehenderit cupidatat elit labore cillum reprehenderit laboris reprehenderit ex enim.\r\n",
+ "registered": "2015-02-20T11:29:18 -01:00",
+ "latitude": -82.688146,
+ "longitude": 34.738925,
+ "tags": [
+ "reprehenderit",
+ "duis",
+ "ullamco",
+ "amet",
+ "id",
+ "ullamco",
+ "in"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Ayala Newton"
+ },
+ {
+ "id": 1,
+ "name": "York Mcmillan"
+ },
+ {
+ "id": 2,
+ "name": "Minerva Hull"
+ }
+ ],
+ "greeting": "Hello, Elinor Small! You have 8 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afa62ec0291b70b880",
+ "index": 331,
+ "guid": "f0fc8557-a204-46dc-a7f4-520dd34e3750",
+ "isActive": true,
+ "balance": "$1,191.71",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "blue",
+ "name": "Lula Grimes",
+ "gender": "female",
+ "company": "FROSNEX",
+ "email": "lulagrimes@frosnex.com",
+ "phone": "+1 (913) 419-3204",
+ "address": "483 Gold Street, Freelandville, New York, 9541",
+ "about": "Non aliqua enim reprehenderit ipsum laboris qui est ipsum ea enim occaecat consectetur. Sint adipisicing Lorem adipisicing exercitation anim commodo tempor adipisicing minim laborum. Ut consequat laborum adipisicing ullamco occaecat sit. Fugiat tempor incididunt mollit ad eu magna eu magna proident qui Lorem culpa voluptate. Nostrud adipisicing ea qui consequat consectetur et cillum fugiat fugiat aliqua sint sit do.\r\n",
+ "registered": "2014-12-11T10:53:01 -01:00",
+ "latitude": -78.972496,
+ "longitude": 4.552091,
+ "tags": [
+ "qui",
+ "cillum",
+ "duis",
+ "do",
+ "in",
+ "pariatur",
+ "esse"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Warner Santos"
+ },
+ {
+ "id": 1,
+ "name": "Lillie Johns"
+ },
+ {
+ "id": 2,
+ "name": "Hanson Patel"
+ }
+ ],
+ "greeting": "Hello, Lula Grimes! You have 3 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af7c03d0d79ebbcb98",
+ "index": 332,
+ "guid": "4b9208d9-cfd1-4c35-b5bc-881ffe742c2f",
+ "isActive": false,
+ "balance": "$1,151.27",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "brown",
+ "name": "Myrtle Wiggins",
+ "gender": "female",
+ "company": "FLUM",
+ "email": "myrtlewiggins@flum.com",
+ "phone": "+1 (931) 564-2516",
+ "address": "987 Seaview Avenue, Farmington, North Carolina, 787",
+ "about": "Nulla commodo esse sunt nostrud voluptate voluptate aute adipisicing. Eiusmod et minim officia nisi aliqua qui non eiusmod elit culpa deserunt nisi non veniam. Eu cillum excepteur esse enim quis et do veniam officia labore tempor elit. Elit labore ad sunt adipisicing ea excepteur. Adipisicing eu dolore eu aute aliqua aliquip proident voluptate officia excepteur.\r\n",
+ "registered": "2014-05-24T14:35:55 -02:00",
+ "latitude": 83.808474,
+ "longitude": 70.435941,
+ "tags": [
+ "proident",
+ "exercitation",
+ "aliquip",
+ "reprehenderit",
+ "occaecat",
+ "veniam",
+ "ipsum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Mcintyre Salinas"
+ },
+ {
+ "id": 1,
+ "name": "Curry Rhodes"
+ },
+ {
+ "id": 2,
+ "name": "Bradley Leblanc"
+ }
+ ],
+ "greeting": "Hello, Myrtle Wiggins! You have 5 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afd606dcd03e92dd46",
+ "index": 333,
+ "guid": "c342fc57-8e62-40a5-ba50-b660d3ee1e18",
+ "isActive": false,
+ "balance": "$1,253.09",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "blue",
+ "name": "Cindy Witt",
+ "gender": "female",
+ "company": "CHORIZON",
+ "email": "cindywitt@chorizon.com",
+ "phone": "+1 (940) 404-2390",
+ "address": "203 Cumberland Walk, Stollings, Connecticut, 9051",
+ "about": "Pariatur magna deserunt occaecat dolore fugiat cupidatat est incididunt duis anim sit enim in adipisicing. Est nulla enim adipisicing magna fugiat enim. Adipisicing aute nulla enim eu cupidatat consectetur laborum elit anim voluptate in veniam. Voluptate laboris proident ullamco ad consequat amet consectetur mollit proident sunt. Proident ullamco adipisicing esse culpa deserunt officia excepteur culpa dolore. Veniam veniam eiusmod est est duis aute dolor culpa anim sint consectetur id proident.\r\n",
+ "registered": "2015-01-27T12:00:21 -01:00",
+ "latitude": 55.956976,
+ "longitude": -121.802634,
+ "tags": [
+ "proident",
+ "ipsum",
+ "excepteur",
+ "minim",
+ "eiusmod",
+ "ad",
+ "quis"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Roberta Jarvis"
+ },
+ {
+ "id": 1,
+ "name": "Murray Rosario"
+ },
+ {
+ "id": 2,
+ "name": "Howell Knox"
+ }
+ ],
+ "greeting": "Hello, Cindy Witt! You have 4 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afdb861e2b0efe994f",
+ "index": 334,
+ "guid": "ffbc5e7e-566b-447e-a50e-b8baf03d6e8f",
+ "isActive": false,
+ "balance": "$2,827.27",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "blue",
+ "name": "Augusta Pearson",
+ "gender": "female",
+ "company": "FURNITECH",
+ "email": "augustapearson@furnitech.com",
+ "phone": "+1 (860) 402-3223",
+ "address": "123 Kiely Place, Belfair, South Carolina, 5730",
+ "about": "Quis et eu adipisicing amet pariatur tempor mollit consectetur aliquip tempor nisi nostrud. Enim consequat exercitation aute do veniam cupidatat minim duis proident deserunt consequat cupidatat esse aliqua. Cupidatat mollit tempor consectetur laboris laboris cillum dolor.\r\n",
+ "registered": "2015-02-01T15:44:06 -01:00",
+ "latitude": -78.324832,
+ "longitude": -10.84187,
+ "tags": [
+ "ut",
+ "reprehenderit",
+ "deserunt",
+ "ullamco",
+ "Lorem",
+ "aliquip",
+ "consectetur"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "David Cannon"
+ },
+ {
+ "id": 1,
+ "name": "Herrera Mathis"
+ },
+ {
+ "id": 2,
+ "name": "Marjorie Price"
+ }
+ ],
+ "greeting": "Hello, Augusta Pearson! You have 9 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af876d019770702ce0",
+ "index": 335,
+ "guid": "8a7dbc55-4795-4652-874d-260c304accbb",
+ "isActive": true,
+ "balance": "$1,600.98",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "brown",
+ "name": "Le Oneill",
+ "gender": "male",
+ "company": "CYTRAK",
+ "email": "leoneill@cytrak.com",
+ "phone": "+1 (944) 482-3612",
+ "address": "469 Friel Place, Boyd, Rhode Island, 8474",
+ "about": "Veniam sit irure minim est officia amet velit commodo sit voluptate qui proident adipisicing. Sit laborum do tempor duis enim occaecat culpa fugiat ipsum reprehenderit aliquip. Labore officia anim laboris sit commodo sunt nostrud officia veniam sint dolore excepteur. Aliqua Lorem ipsum sunt et sunt ipsum. Sunt mollit nisi consequat anim tempor nulla et aute esse laborum.\r\n",
+ "registered": "2014-08-09T23:31:40 -02:00",
+ "latitude": -52.038446,
+ "longitude": 1.52238,
+ "tags": [
+ "dolore",
+ "irure",
+ "eiusmod",
+ "commodo",
+ "pariatur",
+ "excepteur",
+ "eiusmod"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Carr Shaw"
+ },
+ {
+ "id": 1,
+ "name": "Shana Riggs"
+ },
+ {
+ "id": 2,
+ "name": "Valenzuela Frank"
+ }
+ ],
+ "greeting": "Hello, Le Oneill! You have 7 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af0b1d162a52ab8f4a",
+ "index": 336,
+ "guid": "990e24b9-01b0-48f6-805a-a93270edd2c3",
+ "isActive": false,
+ "balance": "$2,052.75",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "blue",
+ "name": "Jimenez Hubbard",
+ "gender": "male",
+ "company": "SUREPLEX",
+ "email": "jimenezhubbard@sureplex.com",
+ "phone": "+1 (904) 434-3412",
+ "address": "649 Lott Street, Falmouth, Pennsylvania, 1688",
+ "about": "Est est cupidatat exercitation sit adipisicing cupidatat in veniam. Amet cillum consequat consequat occaecat voluptate nostrud occaecat velit commodo adipisicing. Ullamco nostrud tempor pariatur et cillum ex ut esse esse ut eu officia. Ad consequat ullamco officia adipisicing qui dolore enim enim deserunt ipsum adipisicing velit mollit. Cupidatat officia officia ullamco ipsum est excepteur eu labore sunt.\r\n",
+ "registered": "2015-02-25T21:24:35 -01:00",
+ "latitude": -49.574719,
+ "longitude": -36.831653,
+ "tags": [
+ "eu",
+ "excepteur",
+ "proident",
+ "fugiat",
+ "do",
+ "esse",
+ "consequat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Darlene Mayo"
+ },
+ {
+ "id": 1,
+ "name": "Tyson Goodwin"
+ },
+ {
+ "id": 2,
+ "name": "Herminia Clarke"
+ }
+ ],
+ "greeting": "Hello, Jimenez Hubbard! You have 2 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afd45d91573bbf3dce",
+ "index": 337,
+ "guid": "8d5c8e6c-2b74-4607-86e3-d9ea60816e48",
+ "isActive": true,
+ "balance": "$2,131.56",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "green",
+ "name": "Hays Norman",
+ "gender": "male",
+ "company": "BLURRYBUS",
+ "email": "haysnorman@blurrybus.com",
+ "phone": "+1 (980) 421-2827",
+ "address": "952 Nautilus Avenue, Lupton, Oklahoma, 6917",
+ "about": "Ipsum in sint eiusmod adipisicing adipisicing Lorem ex Lorem. Veniam anim dolore mollit sunt enim non consequat sit. Fugiat irure duis amet amet eiusmod culpa ex. Est Lorem eu adipisicing tempor deserunt. Lorem eu sint pariatur culpa Lorem Lorem cupidatat laborum. Consequat aliqua ullamco sint Lorem sunt enim sint magna proident minim duis est Lorem magna. Qui aliqua minim aliqua nisi.\r\n",
+ "registered": "2014-04-01T10:41:58 -02:00",
+ "latitude": 88.993961,
+ "longitude": -149.695739,
+ "tags": [
+ "qui",
+ "sit",
+ "incididunt",
+ "aliquip",
+ "cillum",
+ "voluptate",
+ "et"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Chambers Farrell"
+ },
+ {
+ "id": 1,
+ "name": "Angelia Singleton"
+ },
+ {
+ "id": 2,
+ "name": "Estella Calhoun"
+ }
+ ],
+ "greeting": "Hello, Hays Norman! You have 5 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af873307c0f14e5df2",
+ "index": 338,
+ "guid": "0f252e25-549e-4e54-ad4a-c9a91486d400",
+ "isActive": false,
+ "balance": "$1,658.97",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "blue",
+ "name": "Hudson Massey",
+ "gender": "male",
+ "company": "GYNKO",
+ "email": "hudsonmassey@gynko.com",
+ "phone": "+1 (926) 548-2908",
+ "address": "665 Bleecker Street, Tecolotito, Kansas, 5013",
+ "about": "Et officia sit do laborum nulla enim adipisicing excepteur sint irure. Exercitation id labore minim fugiat occaecat adipisicing sit occaecat duis Lorem dolor occaecat minim. Excepteur sunt tempor ut reprehenderit Lorem nulla ipsum cillum. Velit duis anim minim non labore. Excepteur consequat do deserunt Lorem. Eiusmod consectetur nulla adipisicing est pariatur occaecat excepteur eiusmod consectetur laborum qui et fugiat. Commodo in exercitation ipsum tempor eiusmod tempor nulla aliquip exercitation.\r\n",
+ "registered": "2015-02-24T07:36:26 -01:00",
+ "latitude": -47.991233,
+ "longitude": 130.89648,
+ "tags": [
+ "incididunt",
+ "consequat",
+ "ut",
+ "anim",
+ "nisi",
+ "ea",
+ "irure"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Kitty Klein"
+ },
+ {
+ "id": 1,
+ "name": "Talley Beard"
+ },
+ {
+ "id": 2,
+ "name": "Zelma Pickett"
+ }
+ ],
+ "greeting": "Hello, Hudson Massey! You have 9 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afe13475f14f542372",
+ "index": 339,
+ "guid": "17d65f95-952e-4707-8ae7-f2bbf74c6d75",
+ "isActive": true,
+ "balance": "$1,483.89",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "green",
+ "name": "Harriet Maynard",
+ "gender": "female",
+ "company": "ZILLACOM",
+ "email": "harrietmaynard@zillacom.com",
+ "phone": "+1 (914) 448-2200",
+ "address": "754 Russell Street, Chapin, Kentucky, 1113",
+ "about": "Laborum sit enim commodo cupidatat ipsum enim consequat aliquip non minim. Ullamco adipisicing ea est adipisicing mollit et occaecat laboris culpa incididunt. Elit minim velit consequat aliquip adipisicing exercitation reprehenderit exercitation ex velit aute aliqua est. Sit labore excepteur sint proident cillum ad ipsum dolore proident commodo deserunt ipsum nostrud labore. Ea nostrud ad amet ipsum pariatur est elit veniam sint ullamco magna consectetur enim incididunt.\r\n",
+ "registered": "2014-01-06T14:58:17 -01:00",
+ "latitude": 68.673059,
+ "longitude": 81.983958,
+ "tags": [
+ "amet",
+ "ullamco",
+ "adipisicing",
+ "tempor",
+ "aliquip",
+ "sunt",
+ "enim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Essie Hunter"
+ },
+ {
+ "id": 1,
+ "name": "Tamara Chang"
+ },
+ {
+ "id": 2,
+ "name": "Clay Vaughan"
+ }
+ ],
+ "greeting": "Hello, Harriet Maynard! You have 2 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afb1e75eaa3a8a3452",
+ "index": 340,
+ "guid": "29b5d0e3-f87d-4abb-bb92-f937babea891",
+ "isActive": true,
+ "balance": "$3,402.23",
+ "picture": "http://placehold.it/32x32",
+ "age": 30,
+ "eyeColor": "green",
+ "name": "Bettie Hinton",
+ "gender": "female",
+ "company": "TERAPRENE",
+ "email": "bettiehinton@teraprene.com",
+ "phone": "+1 (805) 403-3155",
+ "address": "476 Rockaway Avenue, Winston, Mississippi, 2741",
+ "about": "Magna tempor do proident est in veniam exercitation adipisicing culpa. Consectetur veniam nostrud enim in. Aute sunt occaecat voluptate officia magna.\r\n",
+ "registered": "2014-05-19T12:41:45 -02:00",
+ "latitude": 25.079277,
+ "longitude": -121.265965,
+ "tags": [
+ "nostrud",
+ "ad",
+ "et",
+ "ullamco",
+ "exercitation",
+ "amet",
+ "culpa"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Liliana Harris"
+ },
+ {
+ "id": 1,
+ "name": "Gwen Valentine"
+ },
+ {
+ "id": 2,
+ "name": "Farley Gallagher"
+ }
+ ],
+ "greeting": "Hello, Bettie Hinton! You have 1 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af2db2d8b24c3dbd00",
+ "index": 341,
+ "guid": "8b44ae14-0dc6-421b-b2ec-fcad8d437500",
+ "isActive": true,
+ "balance": "$2,937.31",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "blue",
+ "name": "Mcfarland Norton",
+ "gender": "male",
+ "company": "HOUSEDOWN",
+ "email": "mcfarlandnorton@housedown.com",
+ "phone": "+1 (860) 556-3752",
+ "address": "859 Hanover Place, Canoochee, Montana, 8846",
+ "about": "Exercitation adipisicing nisi eiusmod cillum sit dolor irure sint est mollit. Consequat ut mollit irure voluptate proident eu officia sint esse. Velit laborum dolore veniam Lorem quis exercitation in ipsum ex quis dolor duis ipsum consequat. Minim culpa irure aliqua laboris nostrud tempor. Do amet non quis magna nulla qui irure fugiat excepteur voluptate elit exercitation voluptate. Sit enim cupidatat in aliqua cupidatat laboris excepteur occaecat anim.\r\n",
+ "registered": "2014-04-20T14:53:42 -02:00",
+ "latitude": 86.717505,
+ "longitude": -171.355177,
+ "tags": [
+ "adipisicing",
+ "aliqua",
+ "nulla",
+ "laborum",
+ "quis",
+ "dolore",
+ "sint"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Lesa Castillo"
+ },
+ {
+ "id": 1,
+ "name": "Selena Raymond"
+ },
+ {
+ "id": 2,
+ "name": "Sadie Petersen"
+ }
+ ],
+ "greeting": "Hello, Mcfarland Norton! You have 8 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af1a46f736f5175d22",
+ "index": 342,
+ "guid": "9cba6ac3-a21c-43f7-afe8-7806c5348dbb",
+ "isActive": true,
+ "balance": "$2,998.26",
+ "picture": "http://placehold.it/32x32",
+ "age": 32,
+ "eyeColor": "brown",
+ "name": "Esperanza Gomez",
+ "gender": "female",
+ "company": "BITREX",
+ "email": "esperanzagomez@bitrex.com",
+ "phone": "+1 (854) 490-3484",
+ "address": "449 Verona Place, Henrietta, North Dakota, 3403",
+ "about": "Id amet officia reprehenderit eu nostrud. Nisi excepteur ad ex magna. Exercitation esse id ex cupidatat exercitation. Ad tempor dolor proident quis id commodo ea aliquip ipsum proident. Laborum sunt esse sunt enim culpa. Magna occaecat est qui aliquip officia mollit elit ipsum aute magna dolor fugiat velit deserunt.\r\n",
+ "registered": "2014-06-23T05:31:55 -02:00",
+ "latitude": -72.565931,
+ "longitude": -86.339442,
+ "tags": [
+ "occaecat",
+ "excepteur",
+ "anim",
+ "dolore",
+ "est",
+ "incididunt",
+ "duis"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Belinda Rivera"
+ },
+ {
+ "id": 1,
+ "name": "Harris Hernandez"
+ },
+ {
+ "id": 2,
+ "name": "Silva Farley"
+ }
+ ],
+ "greeting": "Hello, Esperanza Gomez! You have 7 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af2285eb946a66d2d1",
+ "index": 343,
+ "guid": "3b3a7817-e35a-4298-a99d-bf077d4b3d98",
+ "isActive": true,
+ "balance": "$2,820.70",
+ "picture": "http://placehold.it/32x32",
+ "age": 28,
+ "eyeColor": "brown",
+ "name": "Dorothea Mcguire",
+ "gender": "female",
+ "company": "COMTEST",
+ "email": "dorotheamcguire@comtest.com",
+ "phone": "+1 (802) 416-2991",
+ "address": "315 Dekalb Avenue, Northridge, Maryland, 171",
+ "about": "Minim veniam culpa eiusmod aliqua aliqua tempor commodo do. Culpa sit duis eu eiusmod cillum eiusmod sunt dolor aliquip dolor in. Irure nostrud excepteur consequat deserunt fugiat labore non mollit elit. Irure consequat ipsum eu nulla adipisicing in eiusmod minim sunt aute et cillum. Dolore excepteur occaecat eu occaecat laborum enim nulla esse ut dolor sint. Est proident occaecat labore officia.\r\n",
+ "registered": "2014-04-12T18:38:28 -02:00",
+ "latitude": -77.815972,
+ "longitude": -9.841032,
+ "tags": [
+ "ad",
+ "tempor",
+ "sit",
+ "quis",
+ "eu",
+ "magna",
+ "culpa"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Ophelia Todd"
+ },
+ {
+ "id": 1,
+ "name": "Bonita Bender"
+ },
+ {
+ "id": 2,
+ "name": "Valencia Anderson"
+ }
+ ],
+ "greeting": "Hello, Dorothea Mcguire! You have 3 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afb000fd5a4b8e5e9b",
+ "index": 344,
+ "guid": "91b3a1d3-49b3-4087-a274-7d2565e40ba6",
+ "isActive": false,
+ "balance": "$2,342.88",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "green",
+ "name": "Georgia Langley",
+ "gender": "female",
+ "company": "HYPLEX",
+ "email": "georgialangley@hyplex.com",
+ "phone": "+1 (978) 573-2832",
+ "address": "190 Oliver Street, Hackneyville, Hawaii, 593",
+ "about": "Nostrud quis eu veniam est ad enim voluptate. Lorem reprehenderit duis anim consectetur. Ea nisi consequat cupidatat esse.\r\n",
+ "registered": "2014-03-30T15:14:35 -02:00",
+ "latitude": 80.728159,
+ "longitude": -86.691904,
+ "tags": [
+ "est",
+ "aliqua",
+ "nulla",
+ "qui",
+ "laborum",
+ "quis",
+ "in"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Stephens Orr"
+ },
+ {
+ "id": 1,
+ "name": "Denise Lott"
+ },
+ {
+ "id": 2,
+ "name": "Nola Cole"
+ }
+ ],
+ "greeting": "Hello, Georgia Langley! You have 8 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03affb3c26fed99a937a",
+ "index": 345,
+ "guid": "568b6443-97c0-4794-a293-099d724dc875",
+ "isActive": true,
+ "balance": "$2,400.25",
+ "picture": "http://placehold.it/32x32",
+ "age": 28,
+ "eyeColor": "green",
+ "name": "Yvette Morris",
+ "gender": "female",
+ "company": "MULTIFLEX",
+ "email": "yvettemorris@multiflex.com",
+ "phone": "+1 (928) 534-2696",
+ "address": "331 Cameron Court, Moquino, Arizona, 1056",
+ "about": "Culpa sunt ad ex voluptate pariatur ipsum excepteur culpa fugiat ad aliqua. Nulla nisi sunt commodo mollit sunt nulla irure quis id veniam Lorem sint voluptate. Quis labore tempor veniam aliquip occaecat proident aliquip nulla laboris ad fugiat.\r\n",
+ "registered": "2014-02-08T00:54:03 -01:00",
+ "latitude": 19.050757,
+ "longitude": -98.598269,
+ "tags": [
+ "quis",
+ "elit",
+ "ad",
+ "eiusmod",
+ "dolor",
+ "qui",
+ "laborum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Juliet Gamble"
+ },
+ {
+ "id": 1,
+ "name": "Bridgett Frost"
+ },
+ {
+ "id": 2,
+ "name": "Cantrell Merritt"
+ }
+ ],
+ "greeting": "Hello, Yvette Morris! You have 9 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af0549907346fb9557",
+ "index": 346,
+ "guid": "bfa36762-9c8e-4c00-b305-718c27fe8721",
+ "isActive": false,
+ "balance": "$2,927.45",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "blue",
+ "name": "Jolene Turner",
+ "gender": "female",
+ "company": "ENERSAVE",
+ "email": "joleneturner@enersave.com",
+ "phone": "+1 (853) 583-3802",
+ "address": "388 Turnbull Avenue, Wakulla, Arkansas, 6648",
+ "about": "Et elit mollit ullamco enim ad eu consequat enim eu ullamco officia labore esse exercitation. Enim enim velit eu velit culpa sint velit aliquip. Proident pariatur irure pariatur esse esse ad et sit eiusmod qui labore et proident. Sit occaecat aliquip do id nostrud est. Nisi minim proident aliqua laborum ea aute Lorem laborum excepteur reprehenderit.\r\n",
+ "registered": "2014-01-08T02:30:12 -01:00",
+ "latitude": 7.872699,
+ "longitude": -4.884031,
+ "tags": [
+ "ea",
+ "nostrud",
+ "pariatur",
+ "ea",
+ "voluptate",
+ "laboris",
+ "commodo"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Joy Holman"
+ },
+ {
+ "id": 1,
+ "name": "Jackson Gill"
+ },
+ {
+ "id": 2,
+ "name": "Shields Oneil"
+ }
+ ],
+ "greeting": "Hello, Jolene Turner! You have 1 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af4a40e55509177cce",
+ "index": 347,
+ "guid": "9b083653-9918-43d1-82f5-65e92f1146c0",
+ "isActive": false,
+ "balance": "$1,177.14",
+ "picture": "http://placehold.it/32x32",
+ "age": 28,
+ "eyeColor": "brown",
+ "name": "Huff Avery",
+ "gender": "male",
+ "company": "ESCENTA",
+ "email": "huffavery@escenta.com",
+ "phone": "+1 (920) 505-2993",
+ "address": "343 Lloyd Street, Bison, Nevada, 6190",
+ "about": "In ut aute occaecat nostrud veniam minim. Irure proident officia est excepteur qui ad. Nulla Lorem eiusmod aliquip commodo. Proident reprehenderit duis esse commodo eu fugiat ex. Proident labore ea id minim excepteur ad ad laborum occaecat laboris. Ad ad sint anim sit veniam qui labore. Veniam et reprehenderit anim tempor.\r\n",
+ "registered": "2014-04-24T20:19:13 -02:00",
+ "latitude": 80.754522,
+ "longitude": 89.880677,
+ "tags": [
+ "non",
+ "ad",
+ "officia",
+ "dolore",
+ "culpa",
+ "magna",
+ "commodo"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Christa Brock"
+ },
+ {
+ "id": 1,
+ "name": "Melinda Mullins"
+ },
+ {
+ "id": 2,
+ "name": "Agnes Ray"
+ }
+ ],
+ "greeting": "Hello, Huff Avery! You have 9 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af6b8f16170677f63e",
+ "index": 348,
+ "guid": "6e616a81-defc-401c-9839-8ef555f754d1",
+ "isActive": true,
+ "balance": "$3,130.45",
+ "picture": "http://placehold.it/32x32",
+ "age": 21,
+ "eyeColor": "blue",
+ "name": "Florine Graham",
+ "gender": "female",
+ "company": "QIMONK",
+ "email": "florinegraham@qimonk.com",
+ "phone": "+1 (814) 484-2284",
+ "address": "658 Navy Walk, Cavalero, New Jersey, 1102",
+ "about": "Tempor deserunt sint exercitation est consequat laboris enim aute voluptate commodo veniam. Dolore nisi amet esse non deserunt minim excepteur esse culpa proident cillum. Minim et amet mollit quis velit consequat nisi. Sit nisi ut veniam sint aliqua. Nulla incididunt Lorem ad aliqua commodo ad enim qui Lorem minim cupidatat consequat nulla. Ad exercitation ipsum reprehenderit irure labore. Labore dolor veniam ad ad pariatur ut.\r\n",
+ "registered": "2014-01-23T23:35:00 -01:00",
+ "latitude": -54.621344,
+ "longitude": 2.453945,
+ "tags": [
+ "occaecat",
+ "tempor",
+ "commodo",
+ "voluptate",
+ "anim",
+ "reprehenderit",
+ "qui"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Burton Hoffman"
+ },
+ {
+ "id": 1,
+ "name": "Carmella Blankenship"
+ },
+ {
+ "id": 2,
+ "name": "Fuentes Callahan"
+ }
+ ],
+ "greeting": "Hello, Florine Graham! You have 10 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af97489486c10b9781",
+ "index": 349,
+ "guid": "63fbd38b-a7a5-462a-b1ea-831fe46e371b",
+ "isActive": true,
+ "balance": "$1,460.35",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "green",
+ "name": "Alisa Mayer",
+ "gender": "female",
+ "company": "ZOMBOID",
+ "email": "alisamayer@zomboid.com",
+ "phone": "+1 (884) 422-3171",
+ "address": "216 Williams Place, Crenshaw, Marshall Islands, 9227",
+ "about": "Laboris nostrud dolor laboris quis dolore laboris pariatur qui exercitation. Magna incididunt adipisicing nisi aute in. Irure consectetur do cillum nulla. Est ex sint magna ipsum minim sit consectetur et magna adipisicing Lorem irure ea. Veniam cillum nisi qui labore. Laboris velit fugiat veniam sit.\r\n",
+ "registered": "2015-04-11T12:43:40 -02:00",
+ "latitude": -54.095905,
+ "longitude": 29.644141,
+ "tags": [
+ "labore",
+ "sit",
+ "qui",
+ "eiusmod",
+ "irure",
+ "culpa",
+ "ullamco"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Morales Whitaker"
+ },
+ {
+ "id": 1,
+ "name": "Elnora Franklin"
+ },
+ {
+ "id": 2,
+ "name": "Sandra Hanson"
+ }
+ ],
+ "greeting": "Hello, Alisa Mayer! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af7abb648a108cad77",
+ "index": 350,
+ "guid": "0e44ce87-fa5e-4554-8fba-09ad8086e6dc",
+ "isActive": true,
+ "balance": "$1,207.74",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "brown",
+ "name": "Barr Cantu",
+ "gender": "male",
+ "company": "FREAKIN",
+ "email": "barrcantu@freakin.com",
+ "phone": "+1 (906) 464-3524",
+ "address": "799 Harway Avenue, Mulino, Georgia, 7416",
+ "about": "Tempor elit do elit elit deserunt commodo aliqua dolore sint fugiat. Aliqua non reprehenderit dolor quis irure incididunt Lorem Lorem qui. Exercitation elit irure incididunt aliqua duis pariatur officia mollit esse dolor ex sit tempor.\r\n",
+ "registered": "2014-08-07T22:16:49 -02:00",
+ "latitude": -43.206397,
+ "longitude": -80.636264,
+ "tags": [
+ "esse",
+ "eu",
+ "enim",
+ "eiusmod",
+ "qui",
+ "laborum",
+ "dolor"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Dominguez Bennett"
+ },
+ {
+ "id": 1,
+ "name": "Pearson Paul"
+ },
+ {
+ "id": 2,
+ "name": "Mcbride Baird"
+ }
+ ],
+ "greeting": "Hello, Barr Cantu! You have 6 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af58f6181866c7ddf8",
+ "index": 351,
+ "guid": "4d6f4850-4cb7-4014-a20b-b5df87d34950",
+ "isActive": true,
+ "balance": "$3,695.72",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "brown",
+ "name": "Lancaster Garza",
+ "gender": "male",
+ "company": "CENTREGY",
+ "email": "lancastergarza@centregy.com",
+ "phone": "+1 (910) 550-3041",
+ "address": "989 Gatling Place, Grimsley, Virgin Islands, 385",
+ "about": "Cupidatat sit magna voluptate cupidatat occaecat reprehenderit ipsum enim nostrud velit ut excepteur anim do. Irure sunt aliqua laborum minim excepteur esse est eu nulla veniam cillum laboris. Amet magna labore adipisicing aliquip et pariatur proident fugiat mollit sint ut esse elit ullamco. Ad et excepteur sit fugiat irure proident do elit veniam. Ut aliqua anim ullamco nulla adipisicing culpa cillum. Est culpa quis ad eu eiusmod. Consequat nulla velit cupidatat ea ipsum culpa non dolore.\r\n",
+ "registered": "2014-02-28T01:48:39 -01:00",
+ "latitude": -60.033371,
+ "longitude": 17.439391,
+ "tags": [
+ "dolore",
+ "nulla",
+ "duis",
+ "ad",
+ "sint",
+ "dolore",
+ "deserunt"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Jerri Banks"
+ },
+ {
+ "id": 1,
+ "name": "Hardy Gordon"
+ },
+ {
+ "id": 2,
+ "name": "Norman Garcia"
+ }
+ ],
+ "greeting": "Hello, Lancaster Garza! You have 1 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af108b959162e41215",
+ "index": 352,
+ "guid": "706661e5-cd92-4b55-acbb-3f5b858afbc1",
+ "isActive": false,
+ "balance": "$2,763.16",
+ "picture": "http://placehold.it/32x32",
+ "age": 28,
+ "eyeColor": "brown",
+ "name": "Valentine Beck",
+ "gender": "male",
+ "company": "ULTRASURE",
+ "email": "valentinebeck@ultrasure.com",
+ "phone": "+1 (865) 498-3114",
+ "address": "385 Oak Street, Gerton, Colorado, 3447",
+ "about": "Qui sit cillum ad irure ex cupidatat amet exercitation voluptate. Tempor voluptate reprehenderit est sit nisi aliquip ex Lorem in ut nisi amet deserunt cillum. Officia veniam excepteur voluptate id commodo deserunt. Excepteur enim mollit ipsum fugiat ex Lorem id dolore proident mollit aliquip cupidatat duis adipisicing.\r\n",
+ "registered": "2014-01-19T00:12:35 -01:00",
+ "latitude": -14.713029,
+ "longitude": -102.935951,
+ "tags": [
+ "nostrud",
+ "ullamco",
+ "sint",
+ "in",
+ "adipisicing",
+ "irure",
+ "nulla"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Laura Carpenter"
+ },
+ {
+ "id": 1,
+ "name": "Harmon Ballard"
+ },
+ {
+ "id": 2,
+ "name": "Lester Fuller"
+ }
+ ],
+ "greeting": "Hello, Valentine Beck! You have 3 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af7d5b23ba89d533bd",
+ "index": 353,
+ "guid": "ca648ad7-5cb4-4eee-bdc3-020d8292ae26",
+ "isActive": false,
+ "balance": "$1,299.05",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "brown",
+ "name": "Bernard Eaton",
+ "gender": "male",
+ "company": "HAIRPORT",
+ "email": "bernardeaton@hairport.com",
+ "phone": "+1 (960) 508-2781",
+ "address": "991 Maple Street, Klondike, Vermont, 3152",
+ "about": "Reprehenderit sint ullamco ullamco magna consequat. Esse dolor esse id et culpa Lorem excepteur incididunt esse laborum. Ad dolor voluptate reprehenderit elit laboris. Aliquip enim est exercitation officia Lorem eiusmod. Fugiat aute qui eiusmod anim commodo laboris ullamco elit Lorem nostrud aute incididunt commodo. Veniam ex laborum tempor dolore.\r\n",
+ "registered": "2014-03-25T20:27:26 -01:00",
+ "latitude": -54.190173,
+ "longitude": 84.548845,
+ "tags": [
+ "esse",
+ "dolore",
+ "excepteur",
+ "nostrud",
+ "qui",
+ "occaecat",
+ "dolor"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Mckee Sexton"
+ },
+ {
+ "id": 1,
+ "name": "Bonner Bright"
+ },
+ {
+ "id": 2,
+ "name": "Constance Woodard"
+ }
+ ],
+ "greeting": "Hello, Bernard Eaton! You have 3 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afa1db8951dc533f9d",
+ "index": 354,
+ "guid": "5342bab6-0819-44cf-b30a-a4a95abdc35b",
+ "isActive": false,
+ "balance": "$1,890.84",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "green",
+ "name": "Madden Rios",
+ "gender": "male",
+ "company": "TINGLES",
+ "email": "maddenrios@tingles.com",
+ "phone": "+1 (983) 464-2270",
+ "address": "226 Reed Street, Columbus, Minnesota, 8307",
+ "about": "Eu proident aliquip magna voluptate ex et officia eiusmod sint qui aliqua. Irure occaecat irure nulla deserunt laboris sit ea ipsum sint eiusmod non officia ut. Fugiat ea nulla aliquip tempor. Tempor dolore incididunt in do. Mollit eiusmod dolore exercitation sunt enim. Exercitation culpa aliquip reprehenderit non occaecat irure eiusmod voluptate ad ut nostrud laborum occaecat.\r\n",
+ "registered": "2014-05-27T04:25:36 -02:00",
+ "latitude": 21.12129,
+ "longitude": 81.1535,
+ "tags": [
+ "exercitation",
+ "amet",
+ "dolore",
+ "nostrud",
+ "aliquip",
+ "commodo",
+ "dolore"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Robbins Austin"
+ },
+ {
+ "id": 1,
+ "name": "Cheryl Wilder"
+ },
+ {
+ "id": 2,
+ "name": "Adams Cote"
+ }
+ ],
+ "greeting": "Hello, Madden Rios! You have 7 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af627c211e931037f1",
+ "index": 355,
+ "guid": "94a31bdc-817c-4c7f-8be9-5d4862f586a0",
+ "isActive": true,
+ "balance": "$2,849.12",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "brown",
+ "name": "Morrow Becker",
+ "gender": "male",
+ "company": "TETAK",
+ "email": "morrowbecker@tetak.com",
+ "phone": "+1 (834) 536-3372",
+ "address": "841 Ryerson Street, Brule, New Mexico, 9537",
+ "about": "Ullamco pariatur voluptate ipsum nisi duis occaecat reprehenderit. Et tempor aute qui anim. Nostrud dolor aliqua exercitation aute enim. Lorem nostrud ullamco deserunt tempor. Ex enim aliqua Lorem consectetur.\r\n",
+ "registered": "2014-10-19T20:05:09 -02:00",
+ "latitude": 37.313612,
+ "longitude": 42.266277,
+ "tags": [
+ "ut",
+ "culpa",
+ "elit",
+ "sunt",
+ "ullamco",
+ "nostrud",
+ "eiusmod"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Heath Valencia"
+ },
+ {
+ "id": 1,
+ "name": "Buckner Chapman"
+ },
+ {
+ "id": 2,
+ "name": "Glenn Church"
+ }
+ ],
+ "greeting": "Hello, Morrow Becker! You have 8 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af9369b301a18534c0",
+ "index": 356,
+ "guid": "2f65d22a-b4d5-4f14-bb99-518f2e22ea85",
+ "isActive": false,
+ "balance": "$1,698.28",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "blue",
+ "name": "Elise Meadows",
+ "gender": "female",
+ "company": "UXMOX",
+ "email": "elisemeadows@uxmox.com",
+ "phone": "+1 (888) 420-3086",
+ "address": "664 Gardner Avenue, Dawn, Alabama, 8713",
+ "about": "Adipisicing non incididunt veniam dolore deserunt et amet esse. Ea ipsum esse anim laboris sunt ad. Do dolor sit voluptate sit officia reprehenderit commodo cillum. Qui commodo velit nisi nisi deserunt consectetur amet.\r\n",
+ "registered": "2014-05-05T04:28:56 -02:00",
+ "latitude": -25.831515,
+ "longitude": 37.940889,
+ "tags": [
+ "aliquip",
+ "exercitation",
+ "aute",
+ "esse",
+ "elit",
+ "occaecat",
+ "minim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Mamie Tanner"
+ },
+ {
+ "id": 1,
+ "name": "Concetta Kennedy"
+ },
+ {
+ "id": 2,
+ "name": "Stein Slater"
+ }
+ ],
+ "greeting": "Hello, Elise Meadows! You have 5 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af8f614c684d8aff31",
+ "index": 357,
+ "guid": "b32205c7-c92b-4db2-9a97-6d0da9d58f42",
+ "isActive": true,
+ "balance": "$2,499.67",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "green",
+ "name": "Pacheco Dickson",
+ "gender": "male",
+ "company": "MAGNEMO",
+ "email": "pachecodickson@magnemo.com",
+ "phone": "+1 (825) 454-3659",
+ "address": "755 Ainslie Street, Lydia, Illinois, 4921",
+ "about": "Et voluptate proident tempor nostrud. Ea et dolor consequat anim anim minim veniam et ullamco esse. Id ea non ullamco anim culpa occaecat. Officia aliqua occaecat est quis. Ea culpa adipisicing occaecat veniam velit consectetur Lorem commodo qui.\r\n",
+ "registered": "2014-02-17T15:54:17 -01:00",
+ "latitude": 76.776097,
+ "longitude": -56.19864,
+ "tags": [
+ "ipsum",
+ "enim",
+ "esse",
+ "esse",
+ "ullamco",
+ "amet",
+ "enim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Delacruz Sanchez"
+ },
+ {
+ "id": 1,
+ "name": "Michele Barrera"
+ },
+ {
+ "id": 2,
+ "name": "Peters Tucker"
+ }
+ ],
+ "greeting": "Hello, Pacheco Dickson! You have 2 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af4b5e4b8ad265f8e4",
+ "index": 358,
+ "guid": "d44db507-66fd-424d-8892-f5b0e5c3eb1a",
+ "isActive": false,
+ "balance": "$1,449.74",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "blue",
+ "name": "Dolores Bates",
+ "gender": "female",
+ "company": "POOCHIES",
+ "email": "doloresbates@poochies.com",
+ "phone": "+1 (957) 473-2741",
+ "address": "205 Broadway , Glendale, Missouri, 2750",
+ "about": "Est nulla consequat deserunt Lorem Lorem ut qui cillum non occaecat ullamco in. Duis dolor enim ex dolor ex. Minim pariatur aute enim et irure consequat ut ullamco consequat. Magna qui id velit proident fugiat eu. Commodo cillum nostrud nulla est proident quis voluptate velit occaecat. Sint id eiusmod labore consequat anim.\r\n",
+ "registered": "2014-07-16T07:54:48 -02:00",
+ "latitude": -17.748888,
+ "longitude": -166.372201,
+ "tags": [
+ "et",
+ "eu",
+ "Lorem",
+ "nisi",
+ "enim",
+ "adipisicing",
+ "officia"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Bryan Carroll"
+ },
+ {
+ "id": 1,
+ "name": "Estes Guzman"
+ },
+ {
+ "id": 2,
+ "name": "Kelli Hodges"
+ }
+ ],
+ "greeting": "Hello, Dolores Bates! You have 5 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af34e17fc9dfd7d625",
+ "index": 359,
+ "guid": "4627c1fb-1b32-40d1-99a2-d8a1e878f595",
+ "isActive": false,
+ "balance": "$1,707.73",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "brown",
+ "name": "Rios Dennis",
+ "gender": "male",
+ "company": "RENOVIZE",
+ "email": "riosdennis@renovize.com",
+ "phone": "+1 (983) 441-2507",
+ "address": "602 Lenox Road, Deercroft, Oregon, 5199",
+ "about": "Duis magna duis do quis consequat consequat nostrud do sit adipisicing id ut anim est. Commodo ex minim proident labore enim aliqua tempor sint sunt ad. Mollit enim nostrud aliquip labore ipsum id pariatur. Voluptate ea non excepteur do consequat fugiat amet ut incididunt reprehenderit velit reprehenderit reprehenderit in. Reprehenderit irure magna ea amet ad sint cillum consectetur quis excepteur id.\r\n",
+ "registered": "2014-03-07T06:46:08 -01:00",
+ "latitude": 29.970026,
+ "longitude": 117.964088,
+ "tags": [
+ "adipisicing",
+ "aute",
+ "dolor",
+ "laborum",
+ "eu",
+ "occaecat",
+ "ad"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Duran Houston"
+ },
+ {
+ "id": 1,
+ "name": "Dorsey Hardy"
+ },
+ {
+ "id": 2,
+ "name": "Dianne Wooten"
+ }
+ ],
+ "greeting": "Hello, Rios Dennis! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af85f608cc4ed283ac",
+ "index": 360,
+ "guid": "6d9c1342-2423-4b5e-ae29-b533dba9072d",
+ "isActive": false,
+ "balance": "$1,223.75",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "blue",
+ "name": "Anna Ayala",
+ "gender": "female",
+ "company": "COMCUR",
+ "email": "annaayala@comcur.com",
+ "phone": "+1 (805) 516-3302",
+ "address": "646 Bridgewater Street, Dennard, Federated States Of Micronesia, 6712",
+ "about": "Anim eu laborum quis dolor aliquip mollit non. Lorem esse non tempor anim dolore. Irure dolor cillum id cupidatat do laborum ad do enim sint consequat. Veniam est exercitation nulla magna. Sunt veniam elit fugiat anim. Do occaecat nisi nostrud est aute dolor sit sunt esse officia. Aute minim pariatur occaecat ad pariatur in minim ea laboris cillum irure sit nulla ut.\r\n",
+ "registered": "2014-10-08T18:55:19 -02:00",
+ "latitude": 18.084609,
+ "longitude": 8.717642,
+ "tags": [
+ "id",
+ "culpa",
+ "id",
+ "do",
+ "adipisicing",
+ "officia",
+ "fugiat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Wilkerson Aguirre"
+ },
+ {
+ "id": 1,
+ "name": "Nicole Walter"
+ },
+ {
+ "id": 2,
+ "name": "Villarreal Atkinson"
+ }
+ ],
+ "greeting": "Hello, Anna Ayala! You have 10 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af3ec1e1ea992d9b20",
+ "index": 361,
+ "guid": "f09bb0d0-3eea-4f79-98c1-1b485a95ea7f",
+ "isActive": true,
+ "balance": "$1,909.67",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "green",
+ "name": "Wilcox Holland",
+ "gender": "male",
+ "company": "PREMIANT",
+ "email": "wilcoxholland@premiant.com",
+ "phone": "+1 (860) 596-3340",
+ "address": "177 Clark Street, Fulford, South Dakota, 9916",
+ "about": "Aute proident ad commodo laborum fugiat ea tempor nisi labore tempor fugiat. Aute ullamco magna occaecat id deserunt fugiat veniam laboris sunt eiusmod nisi. Consectetur ex anim duis est magna sunt. Ullamco duis fugiat aliquip nisi ex. Excepteur eiusmod reprehenderit laborum ipsum dolore velit est quis labore reprehenderit. Aute aliqua cupidatat consequat aute laborum exercitation sit labore incididunt nisi nisi.\r\n",
+ "registered": "2015-02-15T07:56:07 -01:00",
+ "latitude": -89.915263,
+ "longitude": -4.196903,
+ "tags": [
+ "ipsum",
+ "irure",
+ "laborum",
+ "elit",
+ "ex",
+ "enim",
+ "excepteur"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Jacquelyn Maddox"
+ },
+ {
+ "id": 1,
+ "name": "Queen Gillespie"
+ },
+ {
+ "id": 2,
+ "name": "Hattie Dyer"
+ }
+ ],
+ "greeting": "Hello, Wilcox Holland! You have 3 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af584edca4ad4dbf04",
+ "index": 362,
+ "guid": "67c52fd6-ed96-4256-92aa-73dbe2604830",
+ "isActive": false,
+ "balance": "$2,814.66",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "blue",
+ "name": "Cassandra King",
+ "gender": "female",
+ "company": "PRISMATIC",
+ "email": "cassandraking@prismatic.com",
+ "phone": "+1 (916) 460-3263",
+ "address": "129 Chester Court, Baden, Puerto Rico, 1790",
+ "about": "Magna nostrud exercitation magna ipsum sint sint et dolor magna qui ex. Anim sunt dolor excepteur commodo eu. Consectetur reprehenderit ex sint nostrud eiusmod excepteur consequat exercitation mollit dolor elit ad. Nostrud aliqua esse minim voluptate excepteur commodo anim eiusmod tempor. Pariatur eu aute do voluptate magna.\r\n",
+ "registered": "2014-04-26T08:22:09 -02:00",
+ "latitude": 89.67597,
+ "longitude": 36.827428,
+ "tags": [
+ "minim",
+ "non",
+ "ipsum",
+ "sunt",
+ "culpa",
+ "exercitation",
+ "enim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Margie Knight"
+ },
+ {
+ "id": 1,
+ "name": "Virgie Mcdonald"
+ },
+ {
+ "id": 2,
+ "name": "Good Mccormick"
+ }
+ ],
+ "greeting": "Hello, Cassandra King! You have 4 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af97f9873d0018ffdd",
+ "index": 363,
+ "guid": "011e57e0-ee5f-4614-a096-c1a88746f550",
+ "isActive": true,
+ "balance": "$2,426.07",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "green",
+ "name": "Karina Yang",
+ "gender": "female",
+ "company": "ISOTRACK",
+ "email": "karinayang@isotrack.com",
+ "phone": "+1 (800) 429-3906",
+ "address": "758 Ridge Boulevard, Sunbury, Michigan, 8731",
+ "about": "Commodo consequat sit velit fugiat pariatur magna non. Excepteur officia quis duis elit nostrud in commodo minim elit do et aute id. Ea laboris irure adipisicing amet et deserunt aliquip sint. Cupidatat voluptate culpa laboris non do sit veniam consequat dolor. Esse quis aliquip ipsum dolor dolor aliqua proident commodo adipisicing incididunt fugiat est qui enim.\r\n",
+ "registered": "2015-04-02T16:49:51 -02:00",
+ "latitude": 56.900681,
+ "longitude": 22.940244,
+ "tags": [
+ "aute",
+ "nulla",
+ "proident",
+ "aute",
+ "nulla",
+ "ea",
+ "officia"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Roberson Hale"
+ },
+ {
+ "id": 1,
+ "name": "Shelby Hunt"
+ },
+ {
+ "id": 2,
+ "name": "Strong Sharp"
+ }
+ ],
+ "greeting": "Hello, Karina Yang! You have 2 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af8ad1da4ab5d5ea77",
+ "index": 364,
+ "guid": "58a5e5eb-2d75-4e19-9d9e-97b60c0a3bea",
+ "isActive": true,
+ "balance": "$3,181.24",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "blue",
+ "name": "Tessa Mcconnell",
+ "gender": "female",
+ "company": "DENTREX",
+ "email": "tessamcconnell@dentrex.com",
+ "phone": "+1 (831) 462-2311",
+ "address": "722 Richmond Street, Fostoria, Nebraska, 3574",
+ "about": "Pariatur consectetur in ea consectetur incididunt ea laboris proident eu. Veniam consectetur excepteur aliqua est fugiat est reprehenderit esse deserunt duis proident proident eu ex. Excepteur ut ad ad dolor culpa commodo fugiat nisi veniam aliqua commodo dolore esse. Cupidatat tempor proident ipsum proident dolore velit id magna.\r\n",
+ "registered": "2015-01-07T07:28:20 -01:00",
+ "latitude": 26.561475,
+ "longitude": 30.208282,
+ "tags": [
+ "aliqua",
+ "minim",
+ "veniam",
+ "dolore",
+ "aliquip",
+ "consequat",
+ "consequat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Melton Williamson"
+ },
+ {
+ "id": 1,
+ "name": "Brenda Floyd"
+ },
+ {
+ "id": 2,
+ "name": "Diaz Hancock"
+ }
+ ],
+ "greeting": "Hello, Tessa Mcconnell! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af33fcadc4c0d0c99d",
+ "index": 365,
+ "guid": "7b8e9bcd-d75e-4650-aaad-8167e3a11622",
+ "isActive": true,
+ "balance": "$1,869.09",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "blue",
+ "name": "Marie Walker",
+ "gender": "female",
+ "company": "NETAGY",
+ "email": "mariewalker@netagy.com",
+ "phone": "+1 (868) 438-3868",
+ "address": "572 Bedford Avenue, Morgandale, Wyoming, 4266",
+ "about": "Occaecat adipisicing eu do mollit. Voluptate elit consequat exercitation amet qui ipsum ipsum dolor reprehenderit laborum. Lorem eiusmod nulla est officia fugiat incididunt laboris consectetur duis id enim. Lorem incididunt ea magna irure sit eiusmod ipsum. Nulla proident eu cupidatat laborum laborum reprehenderit nulla excepteur voluptate occaecat aliqua non. Voluptate elit officia dolore aliqua laborum velit nisi. Adipisicing adipisicing cupidatat dolor culpa eiusmod laborum nisi dolore excepteur cupidatat sint Lorem labore aliqua.\r\n",
+ "registered": "2015-04-24T13:58:13 -02:00",
+ "latitude": -17.425207,
+ "longitude": 58.709565,
+ "tags": [
+ "duis",
+ "voluptate",
+ "dolor",
+ "occaecat",
+ "minim",
+ "labore",
+ "culpa"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Aida Curry"
+ },
+ {
+ "id": 1,
+ "name": "Tammie Burch"
+ },
+ {
+ "id": 2,
+ "name": "Maria Terrell"
+ }
+ ],
+ "greeting": "Hello, Marie Walker! You have 4 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af79649f26a8ecb997",
+ "index": 366,
+ "guid": "76df6acc-f694-4032-83ce-ef0d90adbaff",
+ "isActive": true,
+ "balance": "$2,909.57",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "blue",
+ "name": "Garcia Hooper",
+ "gender": "male",
+ "company": "STREZZO",
+ "email": "garciahooper@strezzo.com",
+ "phone": "+1 (872) 439-2934",
+ "address": "980 Virginia Place, Boonville, California, 4431",
+ "about": "Mollit eiusmod ullamco velit elit ea. Esse ea nisi voluptate aliqua eiusmod culpa ea sint et culpa officia cupidatat laborum ex. Esse excepteur exercitation dolore id eiusmod magna eu magna laboris veniam ut laboris. Dolor tempor voluptate sint ea laborum consectetur velit reprehenderit commodo magna minim. Consequat quis cillum minim proident qui minim ut cillum aliqua ex pariatur ipsum. Esse cillum reprehenderit laborum est dolore ad.\r\n",
+ "registered": "2014-08-20T21:24:24 -02:00",
+ "latitude": -14.955611,
+ "longitude": 126.409103,
+ "tags": [
+ "anim",
+ "esse",
+ "consequat",
+ "non",
+ "laborum",
+ "mollit",
+ "nostrud"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Wilder Morgan"
+ },
+ {
+ "id": 1,
+ "name": "Natalia Fox"
+ },
+ {
+ "id": 2,
+ "name": "Bridgette Blanchard"
+ }
+ ],
+ "greeting": "Hello, Garcia Hooper! You have 6 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af3cfff82448dbf7e2",
+ "index": 367,
+ "guid": "345b1408-1a9d-48ad-bf0c-de637429b37d",
+ "isActive": true,
+ "balance": "$3,684.05",
+ "picture": "http://placehold.it/32x32",
+ "age": 21,
+ "eyeColor": "brown",
+ "name": "Maddox White",
+ "gender": "male",
+ "company": "ZENOLUX",
+ "email": "maddoxwhite@zenolux.com",
+ "phone": "+1 (980) 452-3984",
+ "address": "671 Schaefer Street, Marenisco, Indiana, 3831",
+ "about": "Pariatur qui nisi nostrud anim in commodo. Sint minim duis commodo dolor consectetur quis anim fugiat incididunt et irure ipsum mollit. Reprehenderit enim reprehenderit dolore consectetur nisi consectetur velit. Reprehenderit ea sint elit do ex cillum incididunt dolore irure excepteur reprehenderit culpa elit.\r\n",
+ "registered": "2014-02-22T15:10:57 -01:00",
+ "latitude": -81.54645,
+ "longitude": 22.304376,
+ "tags": [
+ "veniam",
+ "sit",
+ "anim",
+ "fugiat",
+ "ea",
+ "Lorem",
+ "culpa"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Bernadine Hill"
+ },
+ {
+ "id": 1,
+ "name": "Pierce Chase"
+ },
+ {
+ "id": 2,
+ "name": "Jones Bond"
+ }
+ ],
+ "greeting": "Hello, Maddox White! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afc5367f0006b12cf7",
+ "index": 368,
+ "guid": "7ea2d8bc-49ab-4e08-b561-5b4198a3da7a",
+ "isActive": true,
+ "balance": "$2,210.23",
+ "picture": "http://placehold.it/32x32",
+ "age": 28,
+ "eyeColor": "blue",
+ "name": "Isabella Oconnor",
+ "gender": "female",
+ "company": "EXTRAWEAR",
+ "email": "isabellaoconnor@extrawear.com",
+ "phone": "+1 (948) 459-2296",
+ "address": "354 Wolcott Street, Brazos, Palau, 4690",
+ "about": "Veniam esse qui proident excepteur cillum irure magna aliquip incididunt. Ut sint in esse ex ex tempor ullamco exercitation sint nisi. Exercitation sint veniam irure consequat reprehenderit ex labore dolor do excepteur do. Occaecat qui ad do irure. Enim est sint aliquip reprehenderit eu aliquip eiusmod tempor proident excepteur nulla ex voluptate. Laboris exercitation laborum do ea amet irure cupidatat sint id mollit.\r\n",
+ "registered": "2014-05-28T03:40:46 -02:00",
+ "latitude": -56.474263,
+ "longitude": -126.109251,
+ "tags": [
+ "ut",
+ "ullamco",
+ "ut",
+ "in",
+ "culpa",
+ "dolor",
+ "culpa"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Fleming Gould"
+ },
+ {
+ "id": 1,
+ "name": "Vanessa Flowers"
+ },
+ {
+ "id": 2,
+ "name": "Kristi Yates"
+ }
+ ],
+ "greeting": "Hello, Isabella Oconnor! You have 10 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af865fc58f0e189c1b",
+ "index": 369,
+ "guid": "03e1e0b9-a105-434a-8c88-a7d885753db5",
+ "isActive": true,
+ "balance": "$2,261.84",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "green",
+ "name": "Case Zimmerman",
+ "gender": "male",
+ "company": "COREPAN",
+ "email": "casezimmerman@corepan.com",
+ "phone": "+1 (948) 482-3114",
+ "address": "274 Diamond Street, Caledonia, Northern Mariana Islands, 8570",
+ "about": "Cillum do duis commodo qui nostrud. Enim dolor quis amet sunt adipisicing incididunt velit eu. Mollit quis amet velit laboris nulla eu. Commodo aliquip dolor et nisi sunt esse anim aliqua voluptate. Lorem occaecat velit aute occaecat esse occaecat ullamco sit ex labore Lorem dolor. Aliqua do laboris enim aliquip minim.\r\n",
+ "registered": "2014-04-27T22:24:15 -02:00",
+ "latitude": -13.241957,
+ "longitude": -15.224278,
+ "tags": [
+ "id",
+ "ea",
+ "mollit",
+ "sunt",
+ "exercitation",
+ "nulla",
+ "est"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Milagros Cain"
+ },
+ {
+ "id": 1,
+ "name": "Nash Allen"
+ },
+ {
+ "id": 2,
+ "name": "Rita Schroeder"
+ }
+ ],
+ "greeting": "Hello, Case Zimmerman! You have 6 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af88795ddb6109e5e7",
+ "index": 370,
+ "guid": "6508199b-cc6d-4ded-86a8-03f9346915c4",
+ "isActive": true,
+ "balance": "$1,363.75",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "brown",
+ "name": "Cooley Evans",
+ "gender": "male",
+ "company": "EMOLTRA",
+ "email": "cooleyevans@emoltra.com",
+ "phone": "+1 (993) 471-3014",
+ "address": "371 Moore Street, Holcombe, Washington, 649",
+ "about": "Cupidatat officia nisi in mollit commodo laboris ea adipisicing elit ex velit. Deserunt cupidatat occaecat elit ipsum est exercitation ea et fugiat reprehenderit veniam ipsum eu. Sunt ut ex ut nostrud et proident sint laboris enim Lorem adipisicing aliquip ipsum. Qui excepteur ea ad fugiat irure nulla Lorem dolor aliquip. Tempor magna dolor occaecat occaecat mollit ea laborum.\r\n",
+ "registered": "2014-03-26T03:59:20 -01:00",
+ "latitude": -68.204817,
+ "longitude": -146.382668,
+ "tags": [
+ "fugiat",
+ "exercitation",
+ "duis",
+ "veniam",
+ "reprehenderit",
+ "qui",
+ "eu"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Lorena Lewis"
+ },
+ {
+ "id": 1,
+ "name": "Phoebe Dale"
+ },
+ {
+ "id": 2,
+ "name": "Dee Bowen"
+ }
+ ],
+ "greeting": "Hello, Cooley Evans! You have 5 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afd3e21a2f0b13f72d",
+ "index": 371,
+ "guid": "7cf8c9cb-f78f-46e1-a561-17b8b55b9a89",
+ "isActive": false,
+ "balance": "$2,718.70",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "green",
+ "name": "Bernice Marshall",
+ "gender": "female",
+ "company": "APEXTRI",
+ "email": "bernicemarshall@apextri.com",
+ "phone": "+1 (914) 541-2630",
+ "address": "695 Willoughby Avenue, Irwin, Massachusetts, 6685",
+ "about": "Labore et minim mollit ullamco ut proident duis ipsum commodo eu excepteur incididunt. Sit eiusmod voluptate laboris pariatur et dolor et fugiat. Magna aliqua deserunt quis aliqua exercitation labore culpa elit.\r\n",
+ "registered": "2014-10-20T08:23:33 -02:00",
+ "latitude": -87.96241,
+ "longitude": -169.833146,
+ "tags": [
+ "velit",
+ "officia",
+ "esse",
+ "officia",
+ "cillum",
+ "sit",
+ "laborum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Sheila Baker"
+ },
+ {
+ "id": 1,
+ "name": "Therese Kinney"
+ },
+ {
+ "id": 2,
+ "name": "Terry Pruitt"
+ }
+ ],
+ "greeting": "Hello, Bernice Marshall! You have 4 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af3106728653529866",
+ "index": 372,
+ "guid": "b07ed19a-b1ed-4915-a5b4-a408e525a3d7",
+ "isActive": false,
+ "balance": "$1,835.98",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "green",
+ "name": "Olsen Sullivan",
+ "gender": "male",
+ "company": "GEEKOLOGY",
+ "email": "olsensullivan@geekology.com",
+ "phone": "+1 (988) 597-3480",
+ "address": "250 Woodruff Avenue, Devon, Tennessee, 4538",
+ "about": "Ipsum nulla non et esse et anim sit anim laborum. Fugiat sint aliqua pariatur mollit deserunt non enim. Fugiat eu elit exercitation quis elit labore aliqua ex. Ullamco quis consequat velit qui minim mollit consectetur ad occaecat qui magna laborum incididunt. Incididunt qui excepteur anim nisi esse occaecat adipisicing veniam. Aliquip excepteur aliquip exercitation exercitation duis sint fugiat ut ipsum ullamco qui fugiat. Et laboris est consectetur est eu laboris sit.\r\n",
+ "registered": "2014-10-25T01:27:32 -02:00",
+ "latitude": -78.665019,
+ "longitude": -72.544473,
+ "tags": [
+ "irure",
+ "eiusmod",
+ "laborum",
+ "sint",
+ "enim",
+ "non",
+ "minim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Reyna Lloyd"
+ },
+ {
+ "id": 1,
+ "name": "Ella Wagner"
+ },
+ {
+ "id": 2,
+ "name": "Horton Schneider"
+ }
+ ],
+ "greeting": "Hello, Olsen Sullivan! You have 10 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afc231f21ccbd7e1a9",
+ "index": 373,
+ "guid": "97b82728-84b0-4563-aa80-9a1b2740e166",
+ "isActive": false,
+ "balance": "$3,923.63",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "green",
+ "name": "Vaughan Stein",
+ "gender": "male",
+ "company": "WARETEL",
+ "email": "vaughanstein@waretel.com",
+ "phone": "+1 (820) 543-2500",
+ "address": "412 Devoe Street, Haring, Wisconsin, 6591",
+ "about": "Nostrud ea sunt dolore irure duis et commodo. Aliqua adipisicing fugiat veniam et amet cupidatat adipisicing laboris. Sunt fugiat cillum ut dolor magna eiusmod duis minim proident amet. Veniam nulla pariatur cupidatat cillum dolore nisi amet incididunt. Magna ullamco deserunt ipsum cillum quis officia et esse id.\r\n",
+ "registered": "2014-03-18T01:34:31 -01:00",
+ "latitude": -74.531592,
+ "longitude": -100.24273,
+ "tags": [
+ "ex",
+ "fugiat",
+ "proident",
+ "amet",
+ "irure",
+ "voluptate",
+ "excepteur"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Kristy Daniels"
+ },
+ {
+ "id": 1,
+ "name": "Green Huff"
+ },
+ {
+ "id": 2,
+ "name": "Frye Rice"
+ }
+ ],
+ "greeting": "Hello, Vaughan Stein! You have 1 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afc9a9c7488f16af7e",
+ "index": 374,
+ "guid": "7e7fbc22-e098-45de-9e3c-2a2a3c6a9b5e",
+ "isActive": true,
+ "balance": "$2,854.04",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "green",
+ "name": "Lillian Ramsey",
+ "gender": "female",
+ "company": "UTARA",
+ "email": "lillianramsey@utara.com",
+ "phone": "+1 (987) 512-3503",
+ "address": "834 Tapscott Street, Belvoir, Delaware, 6610",
+ "about": "Deserunt ad eu Lorem aliquip. Do qui exercitation nisi id voluptate mollit nisi veniam irure non deserunt cillum proident duis. Lorem amet qui esse est esse aute est pariatur dolor eiusmod nisi elit cillum tempor. Minim aliqua anim officia est elit eiusmod elit nulla reprehenderit incididunt officia esse anim excepteur.\r\n",
+ "registered": "2014-11-27T05:21:37 -01:00",
+ "latitude": -19.633454,
+ "longitude": -41.417423,
+ "tags": [
+ "nulla",
+ "sit",
+ "consequat",
+ "eiusmod",
+ "eu",
+ "esse",
+ "duis"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Abbott Buchanan"
+ },
+ {
+ "id": 1,
+ "name": "Maryellen Shepard"
+ },
+ {
+ "id": 2,
+ "name": "Liza David"
+ }
+ ],
+ "greeting": "Hello, Lillian Ramsey! You have 4 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af40a6d38293dd50b2",
+ "index": 375,
+ "guid": "2b7dbc56-9698-43c2-88ae-13916c327825",
+ "isActive": false,
+ "balance": "$1,003.52",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "blue",
+ "name": "Goff Anthony",
+ "gender": "male",
+ "company": "THREDZ",
+ "email": "goffanthony@thredz.com",
+ "phone": "+1 (980) 552-3532",
+ "address": "979 Howard Avenue, Canby, American Samoa, 8183",
+ "about": "Quis amet labore consectetur eiusmod Lorem. Commodo dolor Lorem consequat aute consectetur. Sunt esse exercitation sunt cupidatat culpa proident do aliqua elit aliqua minim. Ullamco aute Lorem non duis. Quis cupidatat ut duis officia aliqua. Excepteur sunt do excepteur officia mollit ipsum esse ullamco.\r\n",
+ "registered": "2014-04-26T10:21:15 -02:00",
+ "latitude": -22.071411,
+ "longitude": -95.711062,
+ "tags": [
+ "fugiat",
+ "excepteur",
+ "ex",
+ "adipisicing",
+ "duis",
+ "ea",
+ "incididunt"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Lola Camacho"
+ },
+ {
+ "id": 1,
+ "name": "Sellers Mann"
+ },
+ {
+ "id": 2,
+ "name": "Tracy Mcbride"
+ }
+ ],
+ "greeting": "Hello, Goff Anthony! You have 1 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af8241a39bffeb9036",
+ "index": 376,
+ "guid": "85e88587-ca31-43d3-bf8e-0fafd8ae2ea7",
+ "isActive": true,
+ "balance": "$3,655.10",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "green",
+ "name": "Chase Schultz",
+ "gender": "male",
+ "company": "ZOINAGE",
+ "email": "chaseschultz@zoinage.com",
+ "phone": "+1 (834) 536-3321",
+ "address": "666 Vanderbilt Avenue, Watchtower, Ohio, 4457",
+ "about": "Proident sunt esse minim ipsum dolor mollit occaecat fugiat eiusmod aliquip tempor irure cupidatat. Ipsum nisi et sint eu. Deserunt fugiat pariatur minim ut sunt proident sint. Culpa consequat ea do non enim fugiat anim dolore ullamco exercitation. Elit veniam aliquip aute cillum enim ad tempor elit qui reprehenderit sint dolor nostrud elit. Esse eiusmod sint eu eiusmod et culpa consequat Lorem sunt culpa dolore ex consectetur. Reprehenderit commodo dolore est labore.\r\n",
+ "registered": "2014-06-03T00:06:19 -02:00",
+ "latitude": -13.585377,
+ "longitude": -148.011394,
+ "tags": [
+ "cillum",
+ "nostrud",
+ "ad",
+ "Lorem",
+ "in",
+ "nulla",
+ "velit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Colon Hopkins"
+ },
+ {
+ "id": 1,
+ "name": "Clayton Holden"
+ },
+ {
+ "id": 2,
+ "name": "Lott Dixon"
+ }
+ ],
+ "greeting": "Hello, Chase Schultz! You have 8 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af7839aef42ccb0ccc",
+ "index": 377,
+ "guid": "cc69d8a2-341b-4874-8f01-f5d3e93896df",
+ "isActive": true,
+ "balance": "$2,403.01",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "blue",
+ "name": "Ware Lynch",
+ "gender": "male",
+ "company": "MUSAPHICS",
+ "email": "warelynch@musaphics.com",
+ "phone": "+1 (989) 521-2739",
+ "address": "527 Polhemus Place, Deltaville, Louisiana, 998",
+ "about": "Laboris excepteur sint est id irure voluptate mollit ullamco cupidatat laboris commodo veniam. Officia cupidatat cupidatat eiusmod quis irure adipisicing veniam dolor. Cillum nulla aute adipisicing enim qui ullamco nisi ut culpa deserunt sint amet nisi laborum. Cupidatat ea consectetur enim dolor veniam aliqua adipisicing sunt qui Lorem consectetur labore consectetur. Dolore Lorem minim fugiat excepteur sint. Fugiat sunt ipsum nulla pariatur adipisicing est commodo eiusmod reprehenderit id nisi pariatur.\r\n",
+ "registered": "2014-08-09T05:23:49 -02:00",
+ "latitude": 75.680516,
+ "longitude": 61.691401,
+ "tags": [
+ "proident",
+ "quis",
+ "nisi",
+ "qui",
+ "officia",
+ "nostrud",
+ "qui"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Brock Grant"
+ },
+ {
+ "id": 1,
+ "name": "Casey Tyson"
+ },
+ {
+ "id": 2,
+ "name": "Hodges Hood"
+ }
+ ],
+ "greeting": "Hello, Ware Lynch! You have 1 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afce8b8e11526db894",
+ "index": 378,
+ "guid": "b99b861a-b4c6-4085-8263-08dc0b9c4d9c",
+ "isActive": false,
+ "balance": "$3,532.57",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "brown",
+ "name": "Rivera Avila",
+ "gender": "male",
+ "company": "OVIUM",
+ "email": "riveraavila@ovium.com",
+ "phone": "+1 (878) 412-2751",
+ "address": "525 Mill Road, Tryon, Idaho, 785",
+ "about": "Et amet adipisicing cupidatat dolor eiusmod quis commodo. Ad ullamco et do consequat officia nulla. Dolor do anim enim aliqua excepteur sit sunt.\r\n",
+ "registered": "2015-02-20T12:10:31 -01:00",
+ "latitude": -37.724399,
+ "longitude": -91.835961,
+ "tags": [
+ "eu",
+ "est",
+ "deserunt",
+ "nostrud",
+ "cupidatat",
+ "amet",
+ "dolore"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Chelsea Ford"
+ },
+ {
+ "id": 1,
+ "name": "Guadalupe Reese"
+ },
+ {
+ "id": 2,
+ "name": "Freida Bradshaw"
+ }
+ ],
+ "greeting": "Hello, Rivera Avila! You have 5 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af0a0067025731c78e",
+ "index": 379,
+ "guid": "e6d3defd-9875-4a41-bcb3-1771201f8e48",
+ "isActive": true,
+ "balance": "$2,547.30",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "green",
+ "name": "Jodie Doyle",
+ "gender": "female",
+ "company": "BEDDER",
+ "email": "jodiedoyle@bedder.com",
+ "phone": "+1 (810) 570-3237",
+ "address": "600 Louisa Street, Chamberino, New Hampshire, 7738",
+ "about": "Dolor anim veniam exercitation aliquip nulla incididunt labore aliquip ea. Voluptate non incididunt sunt nulla cupidatat. Nulla reprehenderit ea aliquip proident Lorem.\r\n",
+ "registered": "2015-04-03T23:49:27 -02:00",
+ "latitude": -34.023187,
+ "longitude": -134.817257,
+ "tags": [
+ "tempor",
+ "esse",
+ "sit",
+ "quis",
+ "laboris",
+ "anim",
+ "elit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Wallace Pennington"
+ },
+ {
+ "id": 1,
+ "name": "Brady Boyd"
+ },
+ {
+ "id": 2,
+ "name": "Alana Macdonald"
+ }
+ ],
+ "greeting": "Hello, Jodie Doyle! You have 10 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afc1e3270fd8c1459d",
+ "index": 380,
+ "guid": "4d61e120-bd68-4a1e-bc20-b93ec9922dc7",
+ "isActive": false,
+ "balance": "$3,614.31",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "brown",
+ "name": "Kinney Pittman",
+ "gender": "male",
+ "company": "KOFFEE",
+ "email": "kinneypittman@koffee.com",
+ "phone": "+1 (836) 560-2752",
+ "address": "621 Little Street, Monument, Maine, 4891",
+ "about": "Aliquip proident esse eiusmod cillum incididunt consectetur nisi est. Adipisicing consectetur aliquip laborum elit magna excepteur reprehenderit irure. Cillum ex consectetur incididunt nostrud culpa. Elit sint velit est reprehenderit adipisicing eiusmod sit laborum do officia amet id.\r\n",
+ "registered": "2014-06-26T11:45:53 -02:00",
+ "latitude": -31.099025,
+ "longitude": 166.64565,
+ "tags": [
+ "ad",
+ "consectetur",
+ "labore",
+ "commodo",
+ "quis",
+ "esse",
+ "enim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Phillips Dillard"
+ },
+ {
+ "id": 1,
+ "name": "Krista Merrill"
+ },
+ {
+ "id": 2,
+ "name": "Huffman Pacheco"
+ }
+ ],
+ "greeting": "Hello, Kinney Pittman! You have 3 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afd2f4a0bd621a21f6",
+ "index": 381,
+ "guid": "e8ffecbd-7415-49fa-8bf1-c533fd999479",
+ "isActive": false,
+ "balance": "$2,956.32",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "blue",
+ "name": "Kayla Delgado",
+ "gender": "female",
+ "company": "PODUNK",
+ "email": "kayladelgado@podunk.com",
+ "phone": "+1 (930) 461-2764",
+ "address": "627 Newport Street, Reno, Utah, 9605",
+ "about": "Sit quis sint consectetur culpa commodo reprehenderit enim aute laboris non. Officia id tempor nulla elit eiusmod ad ea quis ea duis nulla in. Incididunt fugiat cupidatat ad aliqua sunt eiusmod. Labore ex dolor quis sit.\r\n",
+ "registered": "2014-02-26T03:40:47 -01:00",
+ "latitude": -44.463273,
+ "longitude": -115.290277,
+ "tags": [
+ "ut",
+ "excepteur",
+ "qui",
+ "id",
+ "anim",
+ "voluptate",
+ "proident"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Evans George"
+ },
+ {
+ "id": 1,
+ "name": "Hood Thornton"
+ },
+ {
+ "id": 2,
+ "name": "Fields Blackburn"
+ }
+ ],
+ "greeting": "Hello, Kayla Delgado! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afdd469f3d23e5b93b",
+ "index": 382,
+ "guid": "67a4a6c3-16b1-4b12-91f8-e068ffbbc57a",
+ "isActive": true,
+ "balance": "$1,104.31",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "green",
+ "name": "Robertson Mccarty",
+ "gender": "male",
+ "company": "OLUCORE",
+ "email": "robertsonmccarty@olucore.com",
+ "phone": "+1 (812) 410-3400",
+ "address": "311 Flatlands Avenue, Lowell, West Virginia, 7798",
+ "about": "Sunt qui excepteur incididunt veniam commodo laboris proident. Tempor occaecat deserunt Lorem esse et magna proident velit deserunt cupidatat dolor. Tempor duis veniam nostrud sit duis excepteur minim quis.\r\n",
+ "registered": "2014-07-10T09:13:07 -02:00",
+ "latitude": 47.366773,
+ "longitude": -5.835817,
+ "tags": [
+ "officia",
+ "aute",
+ "ipsum",
+ "occaecat",
+ "ut",
+ "enim",
+ "occaecat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Logan Trevino"
+ },
+ {
+ "id": 1,
+ "name": "Orr Peters"
+ },
+ {
+ "id": 2,
+ "name": "Little Phelps"
+ }
+ ],
+ "greeting": "Hello, Robertson Mccarty! You have 8 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af2e5f627ca8c426af",
+ "index": 383,
+ "guid": "3db0eab1-6659-4a5a-954c-d01566df4945",
+ "isActive": false,
+ "balance": "$3,080.15",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "brown",
+ "name": "Greene Boyle",
+ "gender": "male",
+ "company": "CEMENTION",
+ "email": "greeneboyle@cemention.com",
+ "phone": "+1 (869) 403-3429",
+ "address": "826 Dewey Place, Dahlen, Virginia, 1886",
+ "about": "Ullamco adipisicing veniam excepteur sit velit. Anim exercitation ex consectetur dolor exercitation consequat et culpa. Sit dolor dolor ipsum mollit irure dolore dolor irure consequat nostrud.\r\n",
+ "registered": "2015-03-20T08:35:12 -01:00",
+ "latitude": 64.428281,
+ "longitude": 53.633232,
+ "tags": [
+ "culpa",
+ "non",
+ "ex",
+ "id",
+ "non",
+ "duis",
+ "laborum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Edith Monroe"
+ },
+ {
+ "id": 1,
+ "name": "Norris Powell"
+ },
+ {
+ "id": 2,
+ "name": "Kaye Noel"
+ }
+ ],
+ "greeting": "Hello, Greene Boyle! You have 1 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afab3f39948a6786f1",
+ "index": 384,
+ "guid": "2baee2a8-7e56-4fd1-b596-856a415bc8ff",
+ "isActive": false,
+ "balance": "$1,617.44",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "green",
+ "name": "Heather Mills",
+ "gender": "female",
+ "company": "FUTURIS",
+ "email": "heathermills@futuris.com",
+ "phone": "+1 (821) 527-3017",
+ "address": "587 Cooke Court, Abiquiu, Florida, 1364",
+ "about": "Nisi duis sunt veniam adipisicing dolor nulla cupidatat in enim. Id ullamco qui irure nostrud ea in amet dolore. Veniam magna Lorem veniam deserunt in. Quis ea nisi nostrud quis laboris labore esse. Irure occaecat ut consequat fugiat laboris cillum minim. Sint amet nostrud nisi cupidatat deserunt ex. Excepteur cupidatat cupidatat nisi laborum cillum ipsum et duis consequat mollit commodo laboris occaecat.\r\n",
+ "registered": "2015-01-03T10:55:57 -01:00",
+ "latitude": 84.237579,
+ "longitude": 87.079069,
+ "tags": [
+ "eu",
+ "culpa",
+ "sit",
+ "laborum",
+ "fugiat",
+ "do",
+ "est"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Latasha Nieves"
+ },
+ {
+ "id": 1,
+ "name": "Eddie Casey"
+ },
+ {
+ "id": 2,
+ "name": "Genevieve Foster"
+ }
+ ],
+ "greeting": "Hello, Heather Mills! You have 6 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af19332240734a2886",
+ "index": 385,
+ "guid": "83602ff9-1d56-41c1-80be-49c0930d87a8",
+ "isActive": true,
+ "balance": "$3,533.17",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "green",
+ "name": "Hurst Santana",
+ "gender": "male",
+ "company": "ENDICIL",
+ "email": "hurstsantana@endicil.com",
+ "phone": "+1 (935) 553-3428",
+ "address": "245 Lewis Place, Marysville, Texas, 6258",
+ "about": "Aliquip enim enim est irure reprehenderit eiusmod velit adipisicing minim adipisicing. Id anim ad duis commodo sit dolor consectetur sit. In eiusmod aliqua ipsum enim reprehenderit velit irure velit consequat incididunt magna cillum in sunt.\r\n",
+ "registered": "2014-11-01T17:36:59 -01:00",
+ "latitude": -1.97514,
+ "longitude": -147.267204,
+ "tags": [
+ "duis",
+ "non",
+ "ullamco",
+ "id",
+ "Lorem",
+ "cupidatat",
+ "eu"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Salas Reynolds"
+ },
+ {
+ "id": 1,
+ "name": "Weiss Hamilton"
+ },
+ {
+ "id": 2,
+ "name": "Rebekah Edwards"
+ }
+ ],
+ "greeting": "Hello, Hurst Santana! You have 3 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af40d211bff6216d93",
+ "index": 386,
+ "guid": "f7c4c9a6-4aea-4c5f-bec2-db3d8e7f24f9",
+ "isActive": true,
+ "balance": "$2,314.66",
+ "picture": "http://placehold.it/32x32",
+ "age": 26,
+ "eyeColor": "blue",
+ "name": "Cooper Short",
+ "gender": "male",
+ "company": "ZIPAK",
+ "email": "coopershort@zipak.com",
+ "phone": "+1 (939) 480-3456",
+ "address": "160 Jackson Street, Riceville, Guam, 218",
+ "about": "Pariatur eu magna dolor labore sint reprehenderit. Ullamco exercitation sunt nostrud culpa exercitation dolor fugiat dolore. Reprehenderit officia dolor ex duis aliqua tempor nisi adipisicing velit nisi ex. Cillum in amet esse enim elit labore cupidatat non magna occaecat nostrud. Cupidatat adipisicing duis cillum officia dolore. Dolore aliquip adipisicing non ut Lorem enim Lorem cillum dolor Lorem consequat nulla. Est sunt aliquip laborum veniam est velit adipisicing et consequat sunt occaecat laborum ullamco.\r\n",
+ "registered": "2015-02-12T04:26:47 -01:00",
+ "latitude": -32.71077,
+ "longitude": 36.67887,
+ "tags": [
+ "aliqua",
+ "reprehenderit",
+ "commodo",
+ "duis",
+ "reprehenderit",
+ "ea",
+ "commodo"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Gaines Randall"
+ },
+ {
+ "id": 1,
+ "name": "Cooke England"
+ },
+ {
+ "id": 2,
+ "name": "Brandi Ewing"
+ }
+ ],
+ "greeting": "Hello, Cooper Short! You have 5 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afcf640abc46c3bd0c",
+ "index": 387,
+ "guid": "93454f40-c590-45e5-9577-f46d0302e406",
+ "isActive": false,
+ "balance": "$1,283.85",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "green",
+ "name": "Mariana Mcfarland",
+ "gender": "female",
+ "company": "UTARIAN",
+ "email": "marianamcfarland@utarian.com",
+ "phone": "+1 (981) 429-2744",
+ "address": "364 Jamison Lane, Innsbrook, Alaska, 8116",
+ "about": "Eiusmod mollit dolor tempor amet quis ea quis aliquip eu nulla qui cillum. Dolor culpa Lorem aute sunt voluptate et consequat in consequat cupidatat excepteur laborum consequat. Adipisicing proident eu ullamco magna pariatur cupidatat culpa exercitation anim et. Cupidatat proident voluptate eiusmod tempor nulla reprehenderit do veniam. Quis ea et aliqua aliqua mollit adipisicing esse nostrud aliquip voluptate exercitation.\r\n",
+ "registered": "2015-03-22T01:39:48 -01:00",
+ "latitude": -60.872411,
+ "longitude": 129.444707,
+ "tags": [
+ "sit",
+ "duis",
+ "duis",
+ "exercitation",
+ "in",
+ "tempor",
+ "culpa"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Crane Thomas"
+ },
+ {
+ "id": 1,
+ "name": "Wilda Wilkinson"
+ },
+ {
+ "id": 2,
+ "name": "Saunders House"
+ }
+ ],
+ "greeting": "Hello, Mariana Mcfarland! You have 5 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af71cb2869e15c1a5e",
+ "index": 388,
+ "guid": "287b8326-d676-451b-91db-a6b4ef32f1e4",
+ "isActive": false,
+ "balance": "$2,675.60",
+ "picture": "http://placehold.it/32x32",
+ "age": 28,
+ "eyeColor": "green",
+ "name": "Shauna Wilson",
+ "gender": "female",
+ "company": "OBLIQ",
+ "email": "shaunawilson@obliq.com",
+ "phone": "+1 (942) 598-2993",
+ "address": "657 Nevins Street, Trona, District Of Columbia, 8939",
+ "about": "Duis velit quis cupidatat labore consectetur qui. Mollit sit labore veniam irure magna in in cillum. Aute commodo adipisicing ea ea.\r\n",
+ "registered": "2014-03-30T17:55:18 -02:00",
+ "latitude": -79.542565,
+ "longitude": -29.788841,
+ "tags": [
+ "aliquip",
+ "irure",
+ "officia",
+ "in",
+ "voluptate",
+ "non",
+ "deserunt"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Caldwell Whitehead"
+ },
+ {
+ "id": 1,
+ "name": "Bailey Reyes"
+ },
+ {
+ "id": 2,
+ "name": "Lela Hammond"
+ }
+ ],
+ "greeting": "Hello, Shauna Wilson! You have 8 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af27064c6d05694de6",
+ "index": 389,
+ "guid": "5633255e-5069-404c-9296-7c3286a7338d",
+ "isActive": true,
+ "balance": "$2,587.72",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "green",
+ "name": "Stokes Johnson",
+ "gender": "male",
+ "company": "BULLZONE",
+ "email": "stokesjohnson@bullzone.com",
+ "phone": "+1 (903) 569-2824",
+ "address": "788 Temple Court, Libertytown, New York, 1567",
+ "about": "Non anim velit nostrud sint sit laborum nisi. Incididunt in ex proident laboris proident velit sit labore id ut mollit dolor dolor veniam. Sit aute qui est minim excepteur consequat nostrud proident mollit reprehenderit proident voluptate laboris voluptate. Dolore Lorem in commodo incididunt ex enim exercitation et voluptate aliquip. Velit est occaecat do enim. Ad ipsum do et nisi.\r\n",
+ "registered": "2014-01-20T06:24:42 -01:00",
+ "latitude": 25.412803,
+ "longitude": -41.775741,
+ "tags": [
+ "magna",
+ "non",
+ "dolore",
+ "proident",
+ "culpa",
+ "ut",
+ "labore"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Gloria Hobbs"
+ },
+ {
+ "id": 1,
+ "name": "Henry Faulkner"
+ },
+ {
+ "id": 2,
+ "name": "Tina Ayers"
+ }
+ ],
+ "greeting": "Hello, Stokes Johnson! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af67500ecf19ec1e1b",
+ "index": 390,
+ "guid": "9a4c58c6-0eda-443a-b926-175b613916b9",
+ "isActive": true,
+ "balance": "$1,609.82",
+ "picture": "http://placehold.it/32x32",
+ "age": 21,
+ "eyeColor": "brown",
+ "name": "Castillo Fuentes",
+ "gender": "male",
+ "company": "BEDLAM",
+ "email": "castillofuentes@bedlam.com",
+ "phone": "+1 (876) 536-3910",
+ "address": "655 Rapelye Street, Succasunna, North Carolina, 5549",
+ "about": "Do irure cillum tempor est elit qui officia exercitation eu elit cupidatat. Tempor amet elit incididunt reprehenderit consectetur voluptate pariatur in ut sit. Fugiat voluptate irure pariatur velit velit eu esse et qui do do do sunt. Aliquip mollit ex eu sunt consectetur. Sit aute in mollit nostrud cillum magna sit ad enim deserunt commodo. Aute non quis in velit culpa ex sit ad irure reprehenderit consectetur veniam.\r\n",
+ "registered": "2014-03-30T21:48:49 -02:00",
+ "latitude": 13.555764,
+ "longitude": 89.339764,
+ "tags": [
+ "esse",
+ "exercitation",
+ "pariatur",
+ "excepteur",
+ "veniam",
+ "magna",
+ "est"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Kidd Sargent"
+ },
+ {
+ "id": 1,
+ "name": "Dina Nielsen"
+ },
+ {
+ "id": 2,
+ "name": "Espinoza Barlow"
+ }
+ ],
+ "greeting": "Hello, Castillo Fuentes! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afca26c2fc1b3407e6",
+ "index": 391,
+ "guid": "ce1f830a-bfcc-44a5-8789-d3490dc01508",
+ "isActive": false,
+ "balance": "$2,814.30",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "green",
+ "name": "Nettie Wyatt",
+ "gender": "female",
+ "company": "KOZGENE",
+ "email": "nettiewyatt@kozgene.com",
+ "phone": "+1 (969) 558-3483",
+ "address": "505 Hinckley Place, Hemlock, Connecticut, 3112",
+ "about": "Proident dolore occaecat sit aliqua cupidatat proident ad exercitation aliquip ipsum mollit deserunt et. Sint est laborum labore tempor veniam. Dolore irure culpa aliqua velit ex ullamco sit aute quis dolore elit proident. Ad et pariatur mollit ullamco reprehenderit culpa occaecat sit qui magna. Deserunt irure est consectetur magna sunt et sint amet. Dolore velit et elit nisi. Lorem Lorem voluptate ipsum consequat ipsum deserunt sit adipisicing dolore ut elit consectetur.\r\n",
+ "registered": "2014-01-01T17:00:20 -01:00",
+ "latitude": -8.747276,
+ "longitude": 92.177421,
+ "tags": [
+ "labore",
+ "anim",
+ "dolore",
+ "consequat",
+ "exercitation",
+ "deserunt",
+ "veniam"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Walton Mccall"
+ },
+ {
+ "id": 1,
+ "name": "Joann Hall"
+ },
+ {
+ "id": 2,
+ "name": "Mccray Perry"
+ }
+ ],
+ "greeting": "Hello, Nettie Wyatt! You have 1 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af441b2e5905f6d0f2",
+ "index": 392,
+ "guid": "e3b65f9b-4ee0-466b-8d3d-ccdcae6cbcc6",
+ "isActive": true,
+ "balance": "$1,144.43",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "brown",
+ "name": "Josefa Mueller",
+ "gender": "female",
+ "company": "NSPIRE",
+ "email": "josefamueller@nspire.com",
+ "phone": "+1 (898) 505-3067",
+ "address": "144 Horace Court, Belmont, South Carolina, 6528",
+ "about": "Cupidatat sint amet esse pariatur occaecat voluptate Lorem est adipisicing nulla. Do laboris Lorem eu ullamco duis reprehenderit enim velit. Exercitation non reprehenderit nostrud exercitation incididunt ipsum culpa nostrud. Consectetur reprehenderit mollit nulla esse. Ex sunt eiusmod laborum aute. Esse commodo officia aliquip veniam qui occaecat.\r\n",
+ "registered": "2014-12-25T22:23:06 -01:00",
+ "latitude": -39.705105,
+ "longitude": 127.406133,
+ "tags": [
+ "reprehenderit",
+ "aliquip",
+ "deserunt",
+ "nisi",
+ "amet",
+ "non",
+ "ullamco"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Jocelyn Clemons"
+ },
+ {
+ "id": 1,
+ "name": "Kelsey Rutledge"
+ },
+ {
+ "id": 2,
+ "name": "Celina Holt"
+ }
+ ],
+ "greeting": "Hello, Josefa Mueller! You have 8 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03aff5dde54a3de92c3d",
+ "index": 393,
+ "guid": "3783853c-37ed-437e-bcfe-845e95b44641",
+ "isActive": true,
+ "balance": "$1,462.91",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "blue",
+ "name": "Erin Francis",
+ "gender": "female",
+ "company": "HALAP",
+ "email": "erinfrancis@halap.com",
+ "phone": "+1 (903) 517-3105",
+ "address": "289 Bayard Street, Biddle, Rhode Island, 5605",
+ "about": "Nostrud sit irure ipsum commodo adipisicing adipisicing dolore eiusmod aliqua reprehenderit incididunt. Duis elit Lorem laborum magna ullamco voluptate cillum laboris culpa sunt. Consectetur sit est consequat sit velit.\r\n",
+ "registered": "2014-03-13T03:37:51 -01:00",
+ "latitude": 70.07267,
+ "longitude": 107.735483,
+ "tags": [
+ "qui",
+ "incididunt",
+ "officia",
+ "minim",
+ "mollit",
+ "irure",
+ "nisi"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Bauer Dillon"
+ },
+ {
+ "id": 1,
+ "name": "Roman Roth"
+ },
+ {
+ "id": 2,
+ "name": "Laurie Burks"
+ }
+ ],
+ "greeting": "Hello, Erin Francis! You have 2 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af1f772cac5aa80db9",
+ "index": 394,
+ "guid": "9625fce0-aa79-4ad8-9664-fe7d2501f2be",
+ "isActive": false,
+ "balance": "$2,992.56",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "blue",
+ "name": "Holden Rose",
+ "gender": "male",
+ "company": "EMTRAK",
+ "email": "holdenrose@emtrak.com",
+ "phone": "+1 (978) 404-3199",
+ "address": "290 Abbey Court, Heil, Pennsylvania, 4524",
+ "about": "Dolore laborum dolor esse tempor anim in ipsum sint reprehenderit officia ad minim minim mollit. Ex est esse nulla consectetur qui minim nulla. Occaecat dolore cupidatat adipisicing amet enim aliquip reprehenderit et esse ad.\r\n",
+ "registered": "2014-09-13T12:54:24 -02:00",
+ "latitude": -19.335032,
+ "longitude": -61.262311,
+ "tags": [
+ "nulla",
+ "in",
+ "dolor",
+ "adipisicing",
+ "elit",
+ "et",
+ "esse"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Desiree Bernard"
+ },
+ {
+ "id": 1,
+ "name": "Jenna Robles"
+ },
+ {
+ "id": 2,
+ "name": "Tamika Gonzales"
+ }
+ ],
+ "greeting": "Hello, Holden Rose! You have 4 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afd002f7ce93637980",
+ "index": 395,
+ "guid": "2c1d24b1-e66f-470b-9598-9a9c9784abd1",
+ "isActive": false,
+ "balance": "$3,024.92",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "brown",
+ "name": "Sweeney Brooks",
+ "gender": "male",
+ "company": "ATOMICA",
+ "email": "sweeneybrooks@atomica.com",
+ "phone": "+1 (810) 529-2308",
+ "address": "526 Walker Court, Vale, Oklahoma, 8185",
+ "about": "Enim amet culpa enim nulla consectetur nulla anim in ea tempor exercitation do. Aliqua officia laboris id amet consectetur aliquip amet occaecat in eu voluptate id aliquip. Lorem labore est id nostrud nostrud exercitation.\r\n",
+ "registered": "2014-09-19T07:13:24 -02:00",
+ "latitude": -3.533997,
+ "longitude": -152.897236,
+ "tags": [
+ "duis",
+ "esse",
+ "cupidatat",
+ "ea",
+ "excepteur",
+ "commodo",
+ "sint"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Edwards Bolton"
+ },
+ {
+ "id": 1,
+ "name": "Cabrera Lawson"
+ },
+ {
+ "id": 2,
+ "name": "Juliette Carrillo"
+ }
+ ],
+ "greeting": "Hello, Sweeney Brooks! You have 3 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af4a6eb972b0c1b61b",
+ "index": 396,
+ "guid": "13f9f882-37e0-4c2d-b0ff-38025cfae073",
+ "isActive": true,
+ "balance": "$3,684.36",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "green",
+ "name": "Hobbs Parsons",
+ "gender": "male",
+ "company": "FLEETMIX",
+ "email": "hobbsparsons@fleetmix.com",
+ "phone": "+1 (867) 479-2092",
+ "address": "310 Holly Street, Cecilia, Kansas, 263",
+ "about": "Et aliquip sint nulla labore pariatur anim veniam anim aliquip. Enim nulla quis fugiat officia consequat excepteur dolor velit eiusmod ex. Labore aute incididunt duis ex sint laboris quis non tempor dolore est. Veniam deserunt occaecat nulla occaecat est nulla eiusmod tempor. Voluptate qui eiusmod Lorem cupidatat esse adipisicing ullamco duis amet adipisicing dolore non pariatur.\r\n",
+ "registered": "2015-01-17T01:08:17 -01:00",
+ "latitude": 47.537764,
+ "longitude": 54.045607,
+ "tags": [
+ "proident",
+ "officia",
+ "cillum",
+ "reprehenderit",
+ "culpa",
+ "voluptate",
+ "incididunt"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Dean Randolph"
+ },
+ {
+ "id": 1,
+ "name": "Vang Reed"
+ },
+ {
+ "id": 2,
+ "name": "Opal Webster"
+ }
+ ],
+ "greeting": "Hello, Hobbs Parsons! You have 9 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af4008b3dad2cf3e40",
+ "index": 397,
+ "guid": "fb093282-ba84-49ea-9d64-13f71c89391f",
+ "isActive": true,
+ "balance": "$2,339.41",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "brown",
+ "name": "Rasmussen Henson",
+ "gender": "male",
+ "company": "NEBULEAN",
+ "email": "rasmussenhenson@nebulean.com",
+ "phone": "+1 (952) 458-3178",
+ "address": "758 Powell Street, Weedville, Kentucky, 2552",
+ "about": "Ex nisi magna pariatur officia ullamco velit qui voluptate et commodo commodo consequat cupidatat aliqua. Enim irure proident nulla cupidatat incididunt do. Nisi velit nostrud aliqua id. Ullamco dolore adipisicing amet laborum tempor proident Lorem ex eiusmod. Sit dolor excepteur laborum adipisicing. Ad aliqua cillum ad nisi cillum aliquip non exercitation reprehenderit nisi culpa. Culpa labore quis ad consequat magna ea eiusmod adipisicing nulla laborum reprehenderit.\r\n",
+ "registered": "2015-03-25T10:01:44 -01:00",
+ "latitude": 39.807767,
+ "longitude": 4.446677,
+ "tags": [
+ "officia",
+ "veniam",
+ "veniam",
+ "non",
+ "id",
+ "reprehenderit",
+ "excepteur"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Jeanne Jacobs"
+ },
+ {
+ "id": 1,
+ "name": "Pitts Kelley"
+ },
+ {
+ "id": 2,
+ "name": "Bethany Greene"
+ }
+ ],
+ "greeting": "Hello, Rasmussen Henson! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afeb1363c25080f3f2",
+ "index": 398,
+ "guid": "52f1b32e-5be0-498a-8abf-e027ebb537b6",
+ "isActive": false,
+ "balance": "$3,233.79",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "green",
+ "name": "Mcclure Burt",
+ "gender": "male",
+ "company": "LEXICONDO",
+ "email": "mcclureburt@lexicondo.com",
+ "phone": "+1 (835) 431-3846",
+ "address": "984 Ridgewood Avenue, Brookfield, Mississippi, 3057",
+ "about": "Nisi ad sit velit incididunt laboris cupidatat amet cillum incididunt ex sit fugiat cupidatat. Sint voluptate veniam id cillum est aliqua do velit minim aute mollit sunt aute. Nostrud exercitation Lorem eu aliquip. Sit nulla culpa fugiat sit culpa in ad magna incididunt consequat eiusmod eu reprehenderit et.\r\n",
+ "registered": "2014-12-25T00:31:50 -01:00",
+ "latitude": -77.466538,
+ "longitude": 21.267102,
+ "tags": [
+ "voluptate",
+ "veniam",
+ "amet",
+ "ex",
+ "consequat",
+ "non",
+ "Lorem"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Maribel Osborn"
+ },
+ {
+ "id": 1,
+ "name": "Mack Sheppard"
+ },
+ {
+ "id": 2,
+ "name": "Lynnette Oneal"
+ }
+ ],
+ "greeting": "Hello, Mcclure Burt! You have 3 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af823a467feac5bbd7",
+ "index": 399,
+ "guid": "4ff466b7-d150-4d26-8642-b961bae85417",
+ "isActive": true,
+ "balance": "$2,211.26",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "green",
+ "name": "Deanna Steele",
+ "gender": "female",
+ "company": "GEOFARM",
+ "email": "deannasteele@geofarm.com",
+ "phone": "+1 (839) 445-3036",
+ "address": "367 Kingston Avenue, Basye, Montana, 7273",
+ "about": "Elit consequat duis magna dolor ipsum adipisicing id sint non adipisicing. Sunt fugiat sit id irure velit aliqua ad cillum enim eiusmod dolor commodo. Esse irure elit adipisicing ipsum cupidatat sint adipisicing laborum nisi cupidatat ea elit. Duis ea Lorem incididunt deserunt pariatur eiusmod proident irure aute. Ut adipisicing ad ullamco laboris adipisicing proident in aute laborum aliquip consequat eiusmod sint cupidatat. Excepteur culpa occaecat duis sit magna voluptate et ea sunt anim. Et non fugiat aliqua anim Lorem amet nisi irure mollit consequat minim tempor Lorem ex.\r\n",
+ "registered": "2014-08-19T14:02:06 -02:00",
+ "latitude": -37.856189,
+ "longitude": 156.044739,
+ "tags": [
+ "ea",
+ "elit",
+ "quis",
+ "velit",
+ "ad",
+ "sint",
+ "Lorem"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Leola Burris"
+ },
+ {
+ "id": 1,
+ "name": "Allison Willis"
+ },
+ {
+ "id": 2,
+ "name": "Sampson Sweet"
+ }
+ ],
+ "greeting": "Hello, Deanna Steele! You have 1 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af88afc6fb3e499e85",
+ "index": 400,
+ "guid": "a0277471-6f9a-4063-9026-46f69a769a49",
+ "isActive": false,
+ "balance": "$3,672.67",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "brown",
+ "name": "Lana Berg",
+ "gender": "female",
+ "company": "PLAYCE",
+ "email": "lanaberg@playce.com",
+ "phone": "+1 (951) 491-2108",
+ "address": "832 Emerson Place, Lawrence, North Dakota, 9240",
+ "about": "Nisi officia nostrud aliqua anim laboris ipsum ad. Exercitation dolor dolore id quis minim exercitation in enim duis ullamco labore veniam do. Nostrud in aliqua ad commodo velit enim est anim enim laboris.\r\n",
+ "registered": "2014-09-10T13:30:10 -02:00",
+ "latitude": 63.517311,
+ "longitude": -107.54524,
+ "tags": [
+ "nulla",
+ "et",
+ "duis",
+ "enim",
+ "adipisicing",
+ "aute",
+ "est"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Atkins Castaneda"
+ },
+ {
+ "id": 1,
+ "name": "Kerry Potter"
+ },
+ {
+ "id": 2,
+ "name": "Doris Phillips"
+ }
+ ],
+ "greeting": "Hello, Lana Berg! You have 6 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af7ec3cb406a98f980",
+ "index": 401,
+ "guid": "934f429b-f21d-4931-9151-eb608aa6de8c",
+ "isActive": true,
+ "balance": "$3,668.65",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "green",
+ "name": "Ortiz Franks",
+ "gender": "male",
+ "company": "LIMAGE",
+ "email": "ortizfranks@limage.com",
+ "phone": "+1 (968) 414-3526",
+ "address": "565 Moffat Street, Allendale, Maryland, 5192",
+ "about": "Magna reprehenderit sint ullamco sunt quis commodo tempor exercitation irure aliqua irure mollit aute. Cupidatat nulla duis do eu fugiat. Minim ad aliqua laboris proident exercitation aute nisi magna duis aute exercitation cupidatat qui. In proident laboris non duis ad cupidatat nulla exercitation ullamco.\r\n",
+ "registered": "2014-08-20T01:16:38 -02:00",
+ "latitude": -83.947675,
+ "longitude": -103.429176,
+ "tags": [
+ "reprehenderit",
+ "elit",
+ "reprehenderit",
+ "esse",
+ "do",
+ "laborum",
+ "ut"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Mosley Everett"
+ },
+ {
+ "id": 1,
+ "name": "Reeves Hendrix"
+ },
+ {
+ "id": 2,
+ "name": "Catherine Barton"
+ }
+ ],
+ "greeting": "Hello, Ortiz Franks! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af62c4f1f4d1fcaae8",
+ "index": 402,
+ "guid": "b60f9f96-c014-4a87-8acd-723d993d6c53",
+ "isActive": false,
+ "balance": "$1,438.80",
+ "picture": "http://placehold.it/32x32",
+ "age": 22,
+ "eyeColor": "brown",
+ "name": "Sharpe Myers",
+ "gender": "male",
+ "company": "FIBEROX",
+ "email": "sharpemyers@fiberox.com",
+ "phone": "+1 (828) 563-2526",
+ "address": "886 Bush Street, Duryea, Hawaii, 4975",
+ "about": "Adipisicing pariatur pariatur excepteur id tempor eu elit. Veniam irure velit et nostrud duis magna. Do laboris occaecat nostrud consectetur excepteur sunt qui quis. Culpa enim aliquip ea sunt occaecat ex sunt esse minim occaecat.\r\n",
+ "registered": "2014-08-25T04:56:34 -02:00",
+ "latitude": -19.671962,
+ "longitude": -7.379191,
+ "tags": [
+ "enim",
+ "tempor",
+ "occaecat",
+ "culpa",
+ "commodo",
+ "minim",
+ "ipsum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Tanisha Hogan"
+ },
+ {
+ "id": 1,
+ "name": "Christine Stuart"
+ },
+ {
+ "id": 2,
+ "name": "Martina Watts"
+ }
+ ],
+ "greeting": "Hello, Sharpe Myers! You have 10 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afcb3fc1f042ddaeed",
+ "index": 403,
+ "guid": "0007e481-c635-48ed-8877-4ba8851e473f",
+ "isActive": true,
+ "balance": "$2,126.72",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "blue",
+ "name": "Tyler Owen",
+ "gender": "male",
+ "company": "GEEKOSIS",
+ "email": "tylerowen@geekosis.com",
+ "phone": "+1 (993) 408-2082",
+ "address": "685 Baycliff Terrace, Moraida, Arizona, 2604",
+ "about": "Amet commodo proident ea mollit occaecat laborum incididunt. Enim minim aliqua tempor incididunt. Magna cupidatat laborum enim irure ut id Lorem esse velit est aute. Nulla nisi sunt est dolore pariatur velit qui ipsum ut do.\r\n",
+ "registered": "2014-07-03T04:00:06 -02:00",
+ "latitude": 69.519412,
+ "longitude": 23.414198,
+ "tags": [
+ "pariatur",
+ "proident",
+ "veniam",
+ "quis",
+ "labore",
+ "irure",
+ "ea"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Cecile Rosa"
+ },
+ {
+ "id": 1,
+ "name": "Leah Richardson"
+ },
+ {
+ "id": 2,
+ "name": "Randolph Conner"
+ }
+ ],
+ "greeting": "Hello, Tyler Owen! You have 10 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afa1f33c106a5bd5b3",
+ "index": 404,
+ "guid": "b8811a6b-ac79-4ede-9c0c-71d013e4fb91",
+ "isActive": false,
+ "balance": "$1,586.14",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "green",
+ "name": "Dejesus Winters",
+ "gender": "male",
+ "company": "CAXT",
+ "email": "dejesuswinters@caxt.com",
+ "phone": "+1 (861) 549-3469",
+ "address": "358 Howard Alley, Gorham, Arkansas, 6134",
+ "about": "Laboris cupidatat veniam minim eiusmod laboris id sunt elit cillum mollit irure sit ullamco excepteur. Consequat tempor consequat elit esse commodo do ipsum deserunt magna tempor. Sunt adipisicing exercitation tempor eiusmod ex Lorem laborum excepteur commodo ullamco Lorem. Esse qui ea officia culpa nulla tempor dolor minim. Non sint sint aliquip commodo ullamco. Non exercitation esse cillum eu culpa magna commodo occaecat minim amet id.\r\n",
+ "registered": "2015-03-08T18:23:09 -01:00",
+ "latitude": -69.940875,
+ "longitude": -29.148669,
+ "tags": [
+ "voluptate",
+ "officia",
+ "voluptate",
+ "nulla",
+ "proident",
+ "laboris",
+ "Lorem"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Johnston Nelson"
+ },
+ {
+ "id": 1,
+ "name": "Walsh Douglas"
+ },
+ {
+ "id": 2,
+ "name": "Vasquez Mays"
+ }
+ ],
+ "greeting": "Hello, Dejesus Winters! You have 7 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af855b5c5ebdc06b9a",
+ "index": 405,
+ "guid": "79635f25-5a18-4603-8ac1-fac1fd3b343b",
+ "isActive": true,
+ "balance": "$3,371.29",
+ "picture": "http://placehold.it/32x32",
+ "age": 30,
+ "eyeColor": "green",
+ "name": "Christi Perkins",
+ "gender": "female",
+ "company": "CINCYR",
+ "email": "christiperkins@cincyr.com",
+ "phone": "+1 (909) 554-3055",
+ "address": "858 Underhill Avenue, Trail, Nevada, 9534",
+ "about": "Mollit consectetur aute elit amet qui voluptate sit. Deserunt laboris laboris officia culpa quis id labore fugiat do duis dolore. Ullamco ullamco labore deserunt cupidatat aliqua sunt excepteur dolore et. Amet est nisi labore excepteur fugiat commodo ipsum amet do voluptate.\r\n",
+ "registered": "2014-12-29T22:23:29 -01:00",
+ "latitude": -38.497768,
+ "longitude": 146.600093,
+ "tags": [
+ "aute",
+ "et",
+ "quis",
+ "aliquip",
+ "duis",
+ "non",
+ "excepteur"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Gibson Bradford"
+ },
+ {
+ "id": 1,
+ "name": "Wendi Ferrell"
+ },
+ {
+ "id": 2,
+ "name": "Angela Contreras"
+ }
+ ],
+ "greeting": "Hello, Christi Perkins! You have 10 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afdd67a715ee288997",
+ "index": 406,
+ "guid": "faac1ec6-f43b-4ed3-b35d-35772be24f81",
+ "isActive": true,
+ "balance": "$2,690.39",
+ "picture": "http://placehold.it/32x32",
+ "age": 28,
+ "eyeColor": "blue",
+ "name": "Guy Adams",
+ "gender": "male",
+ "company": "CORECOM",
+ "email": "guyadams@corecom.com",
+ "phone": "+1 (995) 506-2077",
+ "address": "880 Brightwater Avenue, Craig, New Jersey, 2558",
+ "about": "Qui in minim irure id et minim sint nulla. Aliqua mollit amet ad esse nulla in mollit amet. Ipsum consequat Lorem nisi exercitation velit Lorem eiusmod magna pariatur consequat ullamco pariatur ipsum aute. Tempor enim fugiat eu amet enim. Qui culpa ullamco duis ut adipisicing elit officia cupidatat officia. Officia enim quis ex enim enim. Magna excepteur et laborum esse voluptate incididunt esse irure dolor dolore nostrud sint.\r\n",
+ "registered": "2014-11-02T21:49:30 -01:00",
+ "latitude": 0.197564,
+ "longitude": 74.993029,
+ "tags": [
+ "adipisicing",
+ "ea",
+ "dolor",
+ "nulla",
+ "excepteur",
+ "commodo",
+ "magna"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Monique Dejesus"
+ },
+ {
+ "id": 1,
+ "name": "Potts Lee"
+ },
+ {
+ "id": 2,
+ "name": "Hurley Sosa"
+ }
+ ],
+ "greeting": "Hello, Guy Adams! You have 3 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af16638603bc740952",
+ "index": 407,
+ "guid": "5a3bdcf7-5de6-470f-a0c1-983fe5a967ef",
+ "isActive": true,
+ "balance": "$3,001.97",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "brown",
+ "name": "Reed Gay",
+ "gender": "male",
+ "company": "UNQ",
+ "email": "reedgay@unq.com",
+ "phone": "+1 (896) 461-2353",
+ "address": "753 Tech Place, Fillmore, Marshall Islands, 4214",
+ "about": "Aliquip labore aliqua aliqua aute aute eiusmod ad esse tempor aliquip aliqua qui. Ullamco ad et proident voluptate ad ea velit Lorem do eiusmod veniam laboris reprehenderit. Proident laboris dolore ut aute adipisicing eiusmod ipsum non consequat irure. Qui laborum tempor occaecat nulla id. Non enim in est ut fugiat ea ipsum nostrud aliqua ex nulla elit elit. Dolor laboris fugiat occaecat sit aliquip incididunt dolore minim elit ex minim. Culpa proident sunt nulla id.\r\n",
+ "registered": "2014-11-30T05:28:46 -01:00",
+ "latitude": 77.369711,
+ "longitude": 155.657509,
+ "tags": [
+ "ut",
+ "in",
+ "incididunt",
+ "esse",
+ "consectetur",
+ "aliqua",
+ "sunt"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Daniel Moran"
+ },
+ {
+ "id": 1,
+ "name": "Ofelia Richard"
+ },
+ {
+ "id": 2,
+ "name": "Carissa Sutton"
+ }
+ ],
+ "greeting": "Hello, Reed Gay! You have 5 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af398617a1a5d3e34d",
+ "index": 408,
+ "guid": "26195fb5-55bb-41d6-8d93-db40a82fdaaa",
+ "isActive": false,
+ "balance": "$3,903.34",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "green",
+ "name": "Gladys Elliott",
+ "gender": "female",
+ "company": "ENDIPIN",
+ "email": "gladyselliott@endipin.com",
+ "phone": "+1 (987) 566-3741",
+ "address": "700 Dank Court, Stewart, Georgia, 486",
+ "about": "Non est excepteur magna reprehenderit dolore et magna aute. Irure sint velit proident eu sint. Aliquip ut culpa aliqua dolor sit nostrud ex nulla duis irure elit anim ullamco tempor. Pariatur occaecat incididunt excepteur tempor ut reprehenderit velit dolore deserunt Lorem non nostrud.\r\n",
+ "registered": "2015-02-02T19:38:57 -01:00",
+ "latitude": 79.054374,
+ "longitude": 41.556104,
+ "tags": [
+ "in",
+ "fugiat",
+ "aute",
+ "ut",
+ "consectetur",
+ "elit",
+ "minim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Deloris Peterson"
+ },
+ {
+ "id": 1,
+ "name": "Linda Wood"
+ },
+ {
+ "id": 2,
+ "name": "Mills Garrison"
+ }
+ ],
+ "greeting": "Hello, Gladys Elliott! You have 9 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af2b27e7c1b9191ba5",
+ "index": 409,
+ "guid": "d830fa99-9e41-4f3a-87d0-86a8615ba4cc",
+ "isActive": false,
+ "balance": "$3,306.36",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "green",
+ "name": "Daisy Luna",
+ "gender": "female",
+ "company": "ASSISTIX",
+ "email": "daisyluna@assistix.com",
+ "phone": "+1 (880) 411-2892",
+ "address": "127 Stillwell Avenue, Tyhee, Virgin Islands, 9839",
+ "about": "Esse nisi aliqua nisi et ipsum cupidatat esse. Id id officia sit veniam ad deserunt nisi exercitation incididunt nisi. Adipisicing occaecat nulla magna dolor. Id cillum adipisicing enim magna veniam. Adipisicing do dolor occaecat anim amet eiusmod.\r\n",
+ "registered": "2014-06-12T22:34:39 -02:00",
+ "latitude": -65.306375,
+ "longitude": -41.116726,
+ "tags": [
+ "incididunt",
+ "magna",
+ "laborum",
+ "quis",
+ "non",
+ "ad",
+ "qui"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Ollie Kerr"
+ },
+ {
+ "id": 1,
+ "name": "Morris Smith"
+ },
+ {
+ "id": 2,
+ "name": "Tara Solis"
+ }
+ ],
+ "greeting": "Hello, Daisy Luna! You have 7 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af75889d99e1eeecf2",
+ "index": 410,
+ "guid": "6a98c178-8fad-4dac-bba2-d70a91008ed7",
+ "isActive": true,
+ "balance": "$2,266.15",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "blue",
+ "name": "Corinne Boyer",
+ "gender": "female",
+ "company": "INSOURCE",
+ "email": "corinneboyer@insource.com",
+ "phone": "+1 (985) 411-3042",
+ "address": "484 Hart Street, Cataract, Colorado, 7424",
+ "about": "Officia velit aute qui minim cupidatat. Exercitation dolor culpa enim anim tempor non labore. In consequat cupidatat cillum esse id cupidatat ex.\r\n",
+ "registered": "2014-01-12T22:49:06 -01:00",
+ "latitude": -39.369137,
+ "longitude": -1.950691,
+ "tags": [
+ "commodo",
+ "sunt",
+ "labore",
+ "nisi",
+ "Lorem",
+ "enim",
+ "do"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Elena Joyce"
+ },
+ {
+ "id": 1,
+ "name": "Buckley Finch"
+ },
+ {
+ "id": 2,
+ "name": "Kristin Koch"
+ }
+ ],
+ "greeting": "Hello, Corinne Boyer! You have 5 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af6033d5cf37ec4b31",
+ "index": 411,
+ "guid": "1f90db52-720b-40b2-84bd-29f932339ec4",
+ "isActive": true,
+ "balance": "$2,217.89",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "brown",
+ "name": "Mcleod Harding",
+ "gender": "male",
+ "company": "AQUACINE",
+ "email": "mcleodharding@aquacine.com",
+ "phone": "+1 (976) 597-3746",
+ "address": "575 Bowne Street, Curtice, Vermont, 1651",
+ "about": "Dolore aliqua sint ut minim dolor ullamco ad do reprehenderit esse sint tempor. Reprehenderit sint duis exercitation non sint. Exercitation anim nulla cillum officia. Do nulla anim in culpa ipsum eiusmod eu duis pariatur. Laborum dolore exercitation veniam do. Reprehenderit sint duis veniam magna tempor culpa laborum consequat ut. Ut proident incididunt ex ex pariatur officia et ut voluptate labore.\r\n",
+ "registered": "2014-01-17T12:55:24 -01:00",
+ "latitude": -41.697554,
+ "longitude": -108.412808,
+ "tags": [
+ "est",
+ "ex",
+ "irure",
+ "enim",
+ "non",
+ "minim",
+ "ad"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Mccall Stark"
+ },
+ {
+ "id": 1,
+ "name": "Kathie Madden"
+ },
+ {
+ "id": 2,
+ "name": "Rodgers Macias"
+ }
+ ],
+ "greeting": "Hello, Mcleod Harding! You have 2 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af32e7b64788a9ce0a",
+ "index": 412,
+ "guid": "3a623fed-de17-4e3d-acb0-cfacf6926872",
+ "isActive": false,
+ "balance": "$2,756.94",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "green",
+ "name": "Pat Watkins",
+ "gender": "female",
+ "company": "SYNTAC",
+ "email": "patwatkins@syntac.com",
+ "phone": "+1 (897) 407-2648",
+ "address": "706 Rose Street, Kieler, Minnesota, 1921",
+ "about": "Sint sunt reprehenderit excepteur Lorem ad ullamco laborum. Enim consequat commodo id amet ad pariatur est. Sint ex nostrud dolore nostrud aliqua cillum. Magna deserunt nulla nulla reprehenderit nisi aliquip aliquip. Reprehenderit ad Lorem sit Lorem ipsum proident. Nisi occaecat fugiat occaecat laboris dolore nulla et velit. Reprehenderit amet consectetur fugiat anim.\r\n",
+ "registered": "2015-02-07T16:08:18 -01:00",
+ "latitude": 20.742088,
+ "longitude": 47.20608,
+ "tags": [
+ "do",
+ "velit",
+ "aliqua",
+ "culpa",
+ "commodo",
+ "qui",
+ "minim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Stephanie Castro"
+ },
+ {
+ "id": 1,
+ "name": "Tran Mendoza"
+ },
+ {
+ "id": 2,
+ "name": "Patel Bentley"
+ }
+ ],
+ "greeting": "Hello, Pat Watkins! You have 8 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afe546099f1ea8959a",
+ "index": 413,
+ "guid": "32d92e09-0d40-49e5-bf08-c9b47398b3da",
+ "isActive": true,
+ "balance": "$2,947.66",
+ "picture": "http://placehold.it/32x32",
+ "age": 30,
+ "eyeColor": "green",
+ "name": "Stefanie Hartman",
+ "gender": "female",
+ "company": "HONOTRON",
+ "email": "stefaniehartman@honotron.com",
+ "phone": "+1 (932) 523-2552",
+ "address": "138 Albany Avenue, Idledale, New Mexico, 1129",
+ "about": "Magna duis eu ex sit proident. Officia ex exercitation dolor commodo ex proident exercitation ullamco labore eu laborum quis. Duis officia eiusmod voluptate ipsum nisi eiusmod irure sint nostrud duis laborum ex occaecat qui.\r\n",
+ "registered": "2014-05-02T01:55:49 -02:00",
+ "latitude": -56.491568,
+ "longitude": -5.729524,
+ "tags": [
+ "quis",
+ "ipsum",
+ "fugiat",
+ "adipisicing",
+ "laborum",
+ "veniam",
+ "aliquip"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Baird Montgomery"
+ },
+ {
+ "id": 1,
+ "name": "Brewer Carver"
+ },
+ {
+ "id": 2,
+ "name": "Rodriguez Rocha"
+ }
+ ],
+ "greeting": "Hello, Stefanie Hartman! You have 6 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af9b7a1949ca6629df",
+ "index": 414,
+ "guid": "cfaa43bc-f813-455e-82c7-b6140797b3c3",
+ "isActive": true,
+ "balance": "$2,347.56",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "blue",
+ "name": "Emilia Freeman",
+ "gender": "female",
+ "company": "AUTOGRATE",
+ "email": "emiliafreeman@autograte.com",
+ "phone": "+1 (988) 572-3938",
+ "address": "165 Gates Avenue, Woodlake, Alabama, 5526",
+ "about": "Anim enim ad velit nulla occaecat fugiat id ad sunt aute deserunt adipisicing. Consectetur do nostrud do minim ipsum ad. Quis officia quis nisi reprehenderit excepteur pariatur occaecat voluptate consequat non culpa non commodo. Ullamco sunt proident ea cupidatat velit minim magna proident ut incididunt do amet labore eiusmod.\r\n",
+ "registered": "2014-08-05T07:43:26 -02:00",
+ "latitude": -12.078536,
+ "longitude": -121.046154,
+ "tags": [
+ "mollit",
+ "mollit",
+ "duis",
+ "velit",
+ "sint",
+ "commodo",
+ "amet"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Frankie Frye"
+ },
+ {
+ "id": 1,
+ "name": "Brianna Harrison"
+ },
+ {
+ "id": 2,
+ "name": "Letitia Juarez"
+ }
+ ],
+ "greeting": "Hello, Emilia Freeman! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03aff7e57acb860a3145",
+ "index": 415,
+ "guid": "f29fc474-9928-4d4d-b0fd-8d02d3ce9325",
+ "isActive": true,
+ "balance": "$2,581.19",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "blue",
+ "name": "Bean Velasquez",
+ "gender": "male",
+ "company": "GINKOGENE",
+ "email": "beanvelasquez@ginkogene.com",
+ "phone": "+1 (912) 546-2506",
+ "address": "999 Vandam Street, Germanton, Illinois, 6665",
+ "about": "Irure excepteur amet ipsum ullamco proident. Reprehenderit dolor culpa et excepteur elit quis tempor ex reprehenderit dolor culpa. Sunt qui excepteur culpa veniam dolore consectetur laborum sit nostrud ut aute laboris. Cillum culpa et aute exercitation ea magna ut.\r\n",
+ "registered": "2014-07-02T21:24:41 -02:00",
+ "latitude": 22.492719,
+ "longitude": -169.451739,
+ "tags": [
+ "et",
+ "in",
+ "irure",
+ "occaecat",
+ "aute",
+ "nulla",
+ "tempor"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Blanche Sykes"
+ },
+ {
+ "id": 1,
+ "name": "Sonya Snow"
+ },
+ {
+ "id": 2,
+ "name": "Joseph Weaver"
+ }
+ ],
+ "greeting": "Hello, Bean Velasquez! You have 9 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af6b3c1af51a6926e1",
+ "index": 416,
+ "guid": "de22f28f-64fb-46b7-a606-bcf2dbdb09fc",
+ "isActive": true,
+ "balance": "$2,528.57",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "blue",
+ "name": "Horne Erickson",
+ "gender": "male",
+ "company": "QUALITEX",
+ "email": "horneerickson@qualitex.com",
+ "phone": "+1 (978) 496-2850",
+ "address": "133 Reeve Place, Brantleyville, Missouri, 386",
+ "about": "Ut commodo eu magna proident culpa non nulla. Aliquip quis esse aliqua occaecat duis exercitation qui ea et excepteur eiusmod sit velit sunt. Labore ullamco elit esse aliqua enim nulla ut voluptate excepteur tempor laborum mollit exercitation excepteur.\r\n",
+ "registered": "2014-05-19T12:45:56 -02:00",
+ "latitude": 15.703726,
+ "longitude": 150.20948,
+ "tags": [
+ "ullamco",
+ "velit",
+ "qui",
+ "veniam",
+ "commodo",
+ "duis",
+ "laborum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Albert Byers"
+ },
+ {
+ "id": 1,
+ "name": "Hayes Herring"
+ },
+ {
+ "id": 2,
+ "name": "Eloise Stout"
+ }
+ ],
+ "greeting": "Hello, Horne Erickson! You have 3 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afa40da5eba62d574a",
+ "index": 417,
+ "guid": "c428bfa4-652f-42b2-b9b0-ffafaa99fe87",
+ "isActive": false,
+ "balance": "$1,484.88",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "brown",
+ "name": "Britt Velazquez",
+ "gender": "male",
+ "company": "ICOLOGY",
+ "email": "brittvelazquez@icology.com",
+ "phone": "+1 (996) 482-3955",
+ "address": "385 Dahill Road, Boykin, Oregon, 8572",
+ "about": "Sint laborum enim mollit aute tempor. Ut non exercitation enim nisi officia nisi ipsum labore consectetur ea sit do id cupidatat. Cupidatat exercitation labore minim do esse ex do et ullamco nulla est elit.\r\n",
+ "registered": "2015-02-26T07:37:35 -01:00",
+ "latitude": -84.867593,
+ "longitude": -123.205378,
+ "tags": [
+ "ex",
+ "quis",
+ "id",
+ "do",
+ "mollit",
+ "cupidatat",
+ "amet"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Boyle Carson"
+ },
+ {
+ "id": 1,
+ "name": "Wade Blair"
+ },
+ {
+ "id": 2,
+ "name": "English Mccullough"
+ }
+ ],
+ "greeting": "Hello, Britt Velazquez! You have 4 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03aff27f53b6d596f5c0",
+ "index": 418,
+ "guid": "f4631867-b06c-412b-b660-e30330bf7ed9",
+ "isActive": false,
+ "balance": "$2,955.55",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "green",
+ "name": "Oneal Shepherd",
+ "gender": "male",
+ "company": "SEQUITUR",
+ "email": "onealshepherd@sequitur.com",
+ "phone": "+1 (953) 453-2194",
+ "address": "357 Dunne Court, Nutrioso, Federated States Of Micronesia, 9540",
+ "about": "Incididunt ipsum nostrud culpa laboris in laboris elit. Laboris ullamco nostrud commodo mollit proident elit aute reprehenderit in anim. Eu ex id laborum consequat sit exercitation sit culpa veniam amet minim nostrud sint. Consequat aliqua duis sit cupidatat aute Lorem. Fugiat ut non cupidatat voluptate culpa ea ipsum non adipisicing eu proident.\r\n",
+ "registered": "2014-12-05T10:34:58 -01:00",
+ "latitude": 21.697635,
+ "longitude": -59.499075,
+ "tags": [
+ "cillum",
+ "mollit",
+ "nisi",
+ "fugiat",
+ "ut",
+ "non",
+ "consequat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Jeannie Webb"
+ },
+ {
+ "id": 1,
+ "name": "Marina Flores"
+ },
+ {
+ "id": 2,
+ "name": "Cook Kim"
+ }
+ ],
+ "greeting": "Hello, Oneal Shepherd! You have 3 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af44199a4ce49bf3e2",
+ "index": 419,
+ "guid": "6e3fd401-e6aa-45e1-8ad6-6baeb76bf886",
+ "isActive": false,
+ "balance": "$1,113.07",
+ "picture": "http://placehold.it/32x32",
+ "age": 32,
+ "eyeColor": "blue",
+ "name": "Garrett Knowles",
+ "gender": "male",
+ "company": "SONGLINES",
+ "email": "garrettknowles@songlines.com",
+ "phone": "+1 (897) 458-2999",
+ "address": "168 Poly Place, Whitehaven, South Dakota, 5166",
+ "about": "Labore quis in ad nostrud quis do amet. Aute amet elit anim mollit in consequat. Ut ad do non enim incididunt sunt excepteur magna nisi nostrud amet in ut. Non tempor ullamco ex incididunt consectetur eiusmod laborum reprehenderit.\r\n",
+ "registered": "2014-08-25T14:04:06 -02:00",
+ "latitude": 39.9028,
+ "longitude": -172.748784,
+ "tags": [
+ "enim",
+ "pariatur",
+ "do",
+ "velit",
+ "cillum",
+ "commodo",
+ "velit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Deborah Ferguson"
+ },
+ {
+ "id": 1,
+ "name": "Bowen Hopper"
+ },
+ {
+ "id": 2,
+ "name": "Massey Logan"
+ }
+ ],
+ "greeting": "Hello, Garrett Knowles! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af9aa2458c8850ad1f",
+ "index": 420,
+ "guid": "04e9a3e6-39a2-4f59-aec6-e78028dea35b",
+ "isActive": true,
+ "balance": "$2,335.22",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "brown",
+ "name": "Latoya Ruiz",
+ "gender": "female",
+ "company": "CIPROMOX",
+ "email": "latoyaruiz@cipromox.com",
+ "phone": "+1 (819) 464-2521",
+ "address": "161 Danforth Street, Brutus, Puerto Rico, 1286",
+ "about": "Mollit sunt reprehenderit cillum cillum Lorem commodo labore quis. Dolor nostrud non elit reprehenderit adipisicing velit esse est. Mollit do aliquip officia culpa ad non reprehenderit magna ad laborum irure elit ex laboris. Laboris esse velit mollit aliqua nostrud eu commodo. Mollit esse cillum cillum minim duis duis nulla nisi ex sint occaecat esse culpa.\r\n",
+ "registered": "2014-01-02T11:19:42 -01:00",
+ "latitude": -76.854143,
+ "longitude": 74.108416,
+ "tags": [
+ "laborum",
+ "amet",
+ "in",
+ "dolore",
+ "ullamco",
+ "aute",
+ "aliquip"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Margarita Gates"
+ },
+ {
+ "id": 1,
+ "name": "Snow May"
+ },
+ {
+ "id": 2,
+ "name": "Benita Glenn"
+ }
+ ],
+ "greeting": "Hello, Latoya Ruiz! You have 9 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af492fe5942ff61fee",
+ "index": 421,
+ "guid": "526d68a6-6900-4c7c-b311-98f67aef02a2",
+ "isActive": false,
+ "balance": "$2,838.64",
+ "picture": "http://placehold.it/32x32",
+ "age": 22,
+ "eyeColor": "brown",
+ "name": "Mcmillan Riddle",
+ "gender": "male",
+ "company": "ENTHAZE",
+ "email": "mcmillanriddle@enthaze.com",
+ "phone": "+1 (859) 536-3125",
+ "address": "831 Lois Avenue, Lisco, Michigan, 417",
+ "about": "Occaecat magna id exercitation consectetur. Sunt magna et ea id laboris elit adipisicing elit irure. Dolor sunt sint sit cillum est occaecat minim voluptate sit.\r\n",
+ "registered": "2014-12-19T21:00:29 -01:00",
+ "latitude": -77.179598,
+ "longitude": -119.453389,
+ "tags": [
+ "enim",
+ "id",
+ "Lorem",
+ "sint",
+ "nostrud",
+ "esse",
+ "quis"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Alicia Weeks"
+ },
+ {
+ "id": 1,
+ "name": "Lambert Poole"
+ },
+ {
+ "id": 2,
+ "name": "Carey Hutchinson"
+ }
+ ],
+ "greeting": "Hello, Mcmillan Riddle! You have 10 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af3ece94bfc0ad7c73",
+ "index": 422,
+ "guid": "4b0596e2-7af1-45ca-a257-5a288165759b",
+ "isActive": true,
+ "balance": "$3,516.64",
+ "picture": "http://placehold.it/32x32",
+ "age": 21,
+ "eyeColor": "blue",
+ "name": "Alfreda Ware",
+ "gender": "female",
+ "company": "NORALEX",
+ "email": "alfredaware@noralex.com",
+ "phone": "+1 (870) 474-2865",
+ "address": "899 Cyrus Avenue, Eagleville, Nebraska, 6232",
+ "about": "Ullamco do amet proident velit duis commodo sint ad sunt laboris aliqua in aliqua incididunt. Reprehenderit amet ullamco incididunt proident deserunt magna. Dolor id laboris id Lorem ex fugiat laboris ex in nisi non. Laborum aliquip eiusmod amet elit labore deserunt consectetur nisi id veniam commodo. Culpa adipisicing velit dolor aliqua nisi exercitation culpa minim et ex amet irure. Quis consequat eu nostrud magna est culpa laborum ad pariatur non commodo.\r\n",
+ "registered": "2014-01-22T18:55:00 -01:00",
+ "latitude": -65.83221,
+ "longitude": 92.831011,
+ "tags": [
+ "deserunt",
+ "ipsum",
+ "sunt",
+ "proident",
+ "irure",
+ "elit",
+ "duis"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Weber Mcintosh"
+ },
+ {
+ "id": 1,
+ "name": "Alma Hendricks"
+ },
+ {
+ "id": 2,
+ "name": "Simpson Dudley"
+ }
+ ],
+ "greeting": "Hello, Alfreda Ware! You have 5 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03aff7386dd9ca3ccda7",
+ "index": 423,
+ "guid": "968a085f-4d79-4d26-8aee-6171950c7bcd",
+ "isActive": false,
+ "balance": "$2,767.76",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "brown",
+ "name": "Washington Summers",
+ "gender": "male",
+ "company": "ENTOGROK",
+ "email": "washingtonsummers@entogrok.com",
+ "phone": "+1 (946) 450-3475",
+ "address": "886 Shale Street, Greenbackville, Wyoming, 1507",
+ "about": "Reprehenderit adipisicing officia consectetur nulla. Nulla incididunt velit magna pariatur eiusmod laborum proident fugiat enim ullamco dolore velit. Quis nisi irure officia ea dolore et aliquip culpa laboris ea amet.\r\n",
+ "registered": "2014-12-03T21:38:04 -01:00",
+ "latitude": 26.001296,
+ "longitude": -21.398012,
+ "tags": [
+ "elit",
+ "Lorem",
+ "mollit",
+ "sint",
+ "pariatur",
+ "nisi",
+ "eiusmod"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Kathrine Booth"
+ },
+ {
+ "id": 1,
+ "name": "Vera Stanton"
+ },
+ {
+ "id": 2,
+ "name": "Brittany Peck"
+ }
+ ],
+ "greeting": "Hello, Washington Summers! You have 7 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af9fa5e1d48fa776c2",
+ "index": 424,
+ "guid": "7a9f35ca-d30d-408e-98b4-28f2d69d200d",
+ "isActive": true,
+ "balance": "$1,716.66",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "green",
+ "name": "Marion Newman",
+ "gender": "female",
+ "company": "SENMAO",
+ "email": "marionnewman@senmao.com",
+ "phone": "+1 (817) 540-2211",
+ "address": "162 Bartlett Place, Wells, California, 9341",
+ "about": "Aliqua adipisicing sint sit culpa magna culpa et labore non laboris consectetur ipsum culpa ipsum. Laboris magna quis ad proident aliqua officia adipisicing magna enim duis aliquip. Ad occaecat incididunt sit est adipisicing sint est laborum laborum anim nostrud mollit velit. Amet magna exercitation cupidatat aute mollit consequat in duis velit. Ullamco ullamco laboris ipsum ad voluptate occaecat culpa nulla aliqua esse dolor consectetur.\r\n",
+ "registered": "2015-02-26T04:20:01 -01:00",
+ "latitude": -84.974525,
+ "longitude": -25.861524,
+ "tags": [
+ "officia",
+ "magna",
+ "duis",
+ "consequat",
+ "veniam",
+ "ut",
+ "cillum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Marlene Gilmore"
+ },
+ {
+ "id": 1,
+ "name": "Cole Bryant"
+ },
+ {
+ "id": 2,
+ "name": "Patricia Walsh"
+ }
+ ],
+ "greeting": "Hello, Marion Newman! You have 4 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af5cd0e306790e1832",
+ "index": 425,
+ "guid": "d23eaa56-732e-42cb-af40-b5acb82c31c9",
+ "isActive": true,
+ "balance": "$3,939.86",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "brown",
+ "name": "Valerie Roman",
+ "gender": "female",
+ "company": "ENQUILITY",
+ "email": "valerieroman@enquility.com",
+ "phone": "+1 (837) 426-3975",
+ "address": "358 Ferry Place, Biehle, Indiana, 8337",
+ "about": "Amet cillum elit et tempor est commodo ullamco. Magna anim commodo deserunt qui sint consequat proident magna. Exercitation nulla nostrud enim qui elit tempor qui Lorem eu cupidatat fugiat magna deserunt. Aute aliquip sunt consectetur qui laborum consequat esse.\r\n",
+ "registered": "2014-03-27T22:05:36 -01:00",
+ "latitude": 55.476471,
+ "longitude": 122.928026,
+ "tags": [
+ "officia",
+ "culpa",
+ "Lorem",
+ "ad",
+ "cupidatat",
+ "id",
+ "duis"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Charity Hawkins"
+ },
+ {
+ "id": 1,
+ "name": "Ochoa Herrera"
+ },
+ {
+ "id": 2,
+ "name": "Rosemarie Sawyer"
+ }
+ ],
+ "greeting": "Hello, Valerie Roman! You have 1 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afaa826e15a0379d6c",
+ "index": 426,
+ "guid": "da4e2664-5260-4d31-8aeb-cabf3dab0b02",
+ "isActive": false,
+ "balance": "$1,785.25",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "blue",
+ "name": "Miranda Patrick",
+ "gender": "female",
+ "company": "PRINTSPAN",
+ "email": "mirandapatrick@printspan.com",
+ "phone": "+1 (952) 407-3695",
+ "address": "841 Forest Place, Gasquet, Palau, 7513",
+ "about": "Non culpa nulla incididunt eiusmod enim consectetur anim elit cillum mollit ad est mollit consectetur. Reprehenderit est et labore ea mollit do est adipisicing id aliqua consequat. Irure deserunt enim dolore minim eiusmod. Consectetur pariatur duis enim minim sit sit est id pariatur amet nulla. Id irure laborum aliquip est officia ipsum anim est Lorem exercitation dolore.\r\n",
+ "registered": "2014-01-17T10:58:42 -01:00",
+ "latitude": -61.278814,
+ "longitude": 142.952302,
+ "tags": [
+ "est",
+ "do",
+ "excepteur",
+ "aliquip",
+ "ad",
+ "sunt",
+ "et"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Snider Mosley"
+ },
+ {
+ "id": 1,
+ "name": "Katie Arnold"
+ },
+ {
+ "id": 2,
+ "name": "Kerri Gallegos"
+ }
+ ],
+ "greeting": "Hello, Miranda Patrick! You have 9 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af14f7d3a13702fbca",
+ "index": 427,
+ "guid": "55bb847b-29b7-4381-b7f4-67d98504c0d8",
+ "isActive": true,
+ "balance": "$3,507.30",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "blue",
+ "name": "Phelps Drake",
+ "gender": "male",
+ "company": "PORTICO",
+ "email": "phelpsdrake@portico.com",
+ "phone": "+1 (956) 424-2869",
+ "address": "807 Autumn Avenue, Loretto, Northern Mariana Islands, 511",
+ "about": "Do minim est nisi proident laborum. Fugiat culpa duis consectetur consequat do consectetur aliquip qui cupidatat ad incididunt. Laboris ea Lorem qui tempor esse.\r\n",
+ "registered": "2014-09-29T21:28:32 -02:00",
+ "latitude": 89.376464,
+ "longitude": -25.506249,
+ "tags": [
+ "magna",
+ "amet",
+ "consectetur",
+ "duis",
+ "non",
+ "excepteur",
+ "ipsum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Kirby Alvarado"
+ },
+ {
+ "id": 1,
+ "name": "Patton Beasley"
+ },
+ {
+ "id": 2,
+ "name": "Beulah Bird"
+ }
+ ],
+ "greeting": "Hello, Phelps Drake! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af9572fa41eede4bf2",
+ "index": 428,
+ "guid": "07a09608-e795-4121-81d6-feb2bdb8b351",
+ "isActive": true,
+ "balance": "$3,992.80",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "brown",
+ "name": "Ward Pierce",
+ "gender": "male",
+ "company": "ACCIDENCY",
+ "email": "wardpierce@accidency.com",
+ "phone": "+1 (891) 468-2248",
+ "address": "221 Bayview Place, Greenbush, Washington, 6654",
+ "about": "Cillum officia ex incididunt pariatur culpa voluptate ad enim do mollit incididunt magna. Do sint aute aliquip sit Lorem. Sint laboris commodo cillum in veniam. Excepteur officia pariatur ipsum voluptate in ullamco ea et sint ex eiusmod amet. Do laborum tempor irure enim eu ut fugiat sint culpa aliquip in.\r\n",
+ "registered": "2015-04-10T01:03:21 -02:00",
+ "latitude": -45.072922,
+ "longitude": -58.523866,
+ "tags": [
+ "veniam",
+ "esse",
+ "fugiat",
+ "dolor",
+ "enim",
+ "anim",
+ "culpa"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Campbell Middleton"
+ },
+ {
+ "id": 1,
+ "name": "Grimes Lawrence"
+ },
+ {
+ "id": 2,
+ "name": "Witt Dodson"
+ }
+ ],
+ "greeting": "Hello, Ward Pierce! You have 5 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af5bdf42084f5b7344",
+ "index": 429,
+ "guid": "f1500399-d71b-4bd1-a49d-88f178dc9d25",
+ "isActive": true,
+ "balance": "$1,686.71",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "brown",
+ "name": "Stacy Cobb",
+ "gender": "female",
+ "company": "PARAGONIA",
+ "email": "stacycobb@paragonia.com",
+ "phone": "+1 (908) 536-2102",
+ "address": "304 Frost Street, Geyserville, Massachusetts, 1287",
+ "about": "Fugiat ea fugiat do enim mollit id sunt culpa labore aliquip quis nulla aliqua culpa. Consectetur quis excepteur proident commodo excepteur incididunt reprehenderit sit nulla nisi eu. Cupidatat cupidatat velit Lorem voluptate reprehenderit qui officia exercitation magna reprehenderit. Officia commodo et est velit nisi cillum qui dolor cupidatat velit aliqua excepteur. Sit culpa enim ad pariatur.\r\n",
+ "registered": "2014-10-15T12:40:01 -02:00",
+ "latitude": -20.763319,
+ "longitude": -76.378158,
+ "tags": [
+ "Lorem",
+ "aliquip",
+ "laborum",
+ "adipisicing",
+ "aliquip",
+ "dolor",
+ "laboris"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Bruce Cabrera"
+ },
+ {
+ "id": 1,
+ "name": "Florence Coffey"
+ },
+ {
+ "id": 2,
+ "name": "Mayer Sanders"
+ }
+ ],
+ "greeting": "Hello, Stacy Cobb! You have 10 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af902000fc98e3e0a6",
+ "index": 430,
+ "guid": "584bd2b2-04d4-499a-b997-3df94e6cffab",
+ "isActive": false,
+ "balance": "$1,094.42",
+ "picture": "http://placehold.it/32x32",
+ "age": 26,
+ "eyeColor": "brown",
+ "name": "Inez Wells",
+ "gender": "female",
+ "company": "BEADZZA",
+ "email": "inezwells@beadzza.com",
+ "phone": "+1 (986) 419-3873",
+ "address": "475 Lexington Avenue, Kohatk, Tennessee, 5830",
+ "about": "Aliqua esse officia culpa commodo tempor nisi esse magna cupidatat. Proident veniam tempor et fugiat exercitation exercitation Lorem eu excepteur dolor exercitation incididunt. Minim amet culpa quis sint occaecat voluptate adipisicing veniam incididunt veniam sunt anim.\r\n",
+ "registered": "2014-12-23T03:16:39 -01:00",
+ "latitude": -39.259836,
+ "longitude": -28.405503,
+ "tags": [
+ "culpa",
+ "deserunt",
+ "voluptate",
+ "eu",
+ "do",
+ "eu",
+ "non"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Bolton Meyers"
+ },
+ {
+ "id": 1,
+ "name": "Tonya Benton"
+ },
+ {
+ "id": 2,
+ "name": "Louisa Murray"
+ }
+ ],
+ "greeting": "Hello, Inez Wells! You have 1 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af0d83c95ceb738954",
+ "index": 431,
+ "guid": "fb762e9c-d2f3-4bee-a8a2-a48e6fc445fe",
+ "isActive": false,
+ "balance": "$1,385.56",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "green",
+ "name": "Williamson Taylor",
+ "gender": "male",
+ "company": "INVENTURE",
+ "email": "williamsontaylor@inventure.com",
+ "phone": "+1 (807) 407-3024",
+ "address": "392 Falmouth Street, Davenport, Wisconsin, 6171",
+ "about": "Deserunt est eiusmod qui aliquip incididunt ipsum aute ut. Magna nisi amet quis ipsum veniam sunt anim pariatur ex ad ullamco laboris qui. Ex ex excepteur et irure ipsum commodo dolore eiusmod ex sit fugiat sit tempor. Cillum aute exercitation ea pariatur Lorem ad voluptate enim laboris in. Est esse labore fugiat amet reprehenderit enim tempor. Tempor consectetur esse ipsum sunt.\r\n",
+ "registered": "2014-04-30T21:28:49 -02:00",
+ "latitude": 25.05685,
+ "longitude": 63.52146,
+ "tags": [
+ "enim",
+ "do",
+ "fugiat",
+ "consequat",
+ "ullamco",
+ "sint",
+ "ullamco"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Earlene Lopez"
+ },
+ {
+ "id": 1,
+ "name": "Barnett Vaughn"
+ },
+ {
+ "id": 2,
+ "name": "Eunice Richmond"
+ }
+ ],
+ "greeting": "Hello, Williamson Taylor! You have 8 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af62641a38de8dd89f",
+ "index": 432,
+ "guid": "f0b5f94c-9fa9-4036-9a2f-aa22d6f7a5b2",
+ "isActive": false,
+ "balance": "$1,791.34",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "blue",
+ "name": "Marilyn Rosales",
+ "gender": "female",
+ "company": "DOGNOST",
+ "email": "marilynrosales@dognost.com",
+ "phone": "+1 (926) 581-2111",
+ "address": "817 Saratoga Avenue, Cassel, Delaware, 5280",
+ "about": "Aute pariatur adipisicing voluptate proident nostrud ipsum duis. Labore id laborum aliqua voluptate in labore sint dolor amet incididunt nostrud deserunt aute dolor. Ea eiusmod tempor occaecat elit. Laboris occaecat laborum ipsum eu id commodo aliqua. Eiusmod incididunt exercitation id fugiat exercitation deserunt. Fugiat nulla incididunt incididunt mollit incididunt nostrud veniam consectetur culpa veniam reprehenderit.\r\n",
+ "registered": "2015-03-26T20:50:13 -01:00",
+ "latitude": -54.399272,
+ "longitude": -167.207946,
+ "tags": [
+ "incididunt",
+ "magna",
+ "ut",
+ "deserunt",
+ "tempor",
+ "fugiat",
+ "id"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Lesley Rogers"
+ },
+ {
+ "id": 1,
+ "name": "Ladonna Mullen"
+ },
+ {
+ "id": 2,
+ "name": "Bette Marquez"
+ }
+ ],
+ "greeting": "Hello, Marilyn Rosales! You have 5 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af76ead20d72ab1ae0",
+ "index": 433,
+ "guid": "0ff16317-e49d-495a-bfa8-a648ac692558",
+ "isActive": true,
+ "balance": "$3,803.98",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "blue",
+ "name": "Ida Spence",
+ "gender": "female",
+ "company": "MINGA",
+ "email": "idaspence@minga.com",
+ "phone": "+1 (985) 578-2951",
+ "address": "938 Winthrop Street, Jacumba, American Samoa, 2953",
+ "about": "Duis nostrud eu pariatur reprehenderit do. Officia cillum reprehenderit magna aliqua incididunt tempor qui cupidatat aute exercitation minim ipsum aliquip cillum. Aute exercitation sint pariatur veniam culpa et nostrud proident et sint amet fugiat consectetur nostrud. Do sunt amet aliquip dolor et dolor deserunt veniam qui ad. Non esse quis qui quis enim reprehenderit sint Lorem. Do Lorem dolore dolor amet cillum deserunt reprehenderit qui ea.\r\n",
+ "registered": "2014-11-25T10:55:23 -01:00",
+ "latitude": -81.187129,
+ "longitude": 93.605298,
+ "tags": [
+ "voluptate",
+ "fugiat",
+ "amet",
+ "ad",
+ "Lorem",
+ "labore",
+ "id"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Stuart Nolan"
+ },
+ {
+ "id": 1,
+ "name": "Horn Campbell"
+ },
+ {
+ "id": 2,
+ "name": "Bartlett Cardenas"
+ }
+ ],
+ "greeting": "Hello, Ida Spence! You have 4 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afe31660ba28723f93",
+ "index": 434,
+ "guid": "e92fa0f3-af28-4a69-85e1-32727b74a4d9",
+ "isActive": true,
+ "balance": "$1,439.80",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "green",
+ "name": "Savage Blake",
+ "gender": "male",
+ "company": "GENESYNK",
+ "email": "savageblake@genesynk.com",
+ "phone": "+1 (832) 536-3796",
+ "address": "357 Madison Street, Advance, Ohio, 8476",
+ "about": "Excepteur cillum incididunt dolor et nulla do occaecat anim dolor. Aliqua fugiat qui officia ut non quis minim laborum non. Non fugiat in aute eiusmod amet nisi nisi aliqua eiusmod enim laborum magna.\r\n",
+ "registered": "2015-01-12T20:57:07 -01:00",
+ "latitude": -57.227437,
+ "longitude": 143.794171,
+ "tags": [
+ "id",
+ "anim",
+ "ea",
+ "do",
+ "in",
+ "officia",
+ "officia"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Grace Wheeler"
+ },
+ {
+ "id": 1,
+ "name": "Miranda Thompson"
+ },
+ {
+ "id": 2,
+ "name": "Jami Christian"
+ }
+ ],
+ "greeting": "Hello, Savage Blake! You have 10 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afd5d245e3345727cc",
+ "index": 435,
+ "guid": "f77a8295-3cdf-4287-9c36-231612257ae5",
+ "isActive": false,
+ "balance": "$2,442.37",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "blue",
+ "name": "Woods Skinner",
+ "gender": "male",
+ "company": "TROPOLIS",
+ "email": "woodsskinner@tropolis.com",
+ "phone": "+1 (879) 408-3993",
+ "address": "780 Pineapple Street, Fairview, Louisiana, 5759",
+ "about": "In cillum eu non officia labore. Sunt ipsum deserunt velit incididunt eiusmod deserunt duis officia. Pariatur consectetur et occaecat ea dolor reprehenderit exercitation in consectetur consectetur. Tempor velit esse occaecat ea dolore consequat duis. Ipsum quis pariatur ea proident ex irure voluptate cupidatat laborum nostrud nisi proident amet.\r\n",
+ "registered": "2014-06-09T03:54:14 -02:00",
+ "latitude": -20.671485,
+ "longitude": -74.453214,
+ "tags": [
+ "culpa",
+ "culpa",
+ "amet",
+ "sit",
+ "aute",
+ "tempor",
+ "non"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Diana Daniel"
+ },
+ {
+ "id": 1,
+ "name": "Kristine Rodgers"
+ },
+ {
+ "id": 2,
+ "name": "Hahn Joyner"
+ }
+ ],
+ "greeting": "Hello, Woods Skinner! You have 2 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afd96de48ebadb6fa8",
+ "index": 436,
+ "guid": "ad774fb9-623c-4dc5-a792-893bac07a9fd",
+ "isActive": false,
+ "balance": "$1,403.73",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "blue",
+ "name": "Georgette Wong",
+ "gender": "female",
+ "company": "OPPORTECH",
+ "email": "georgettewong@opportech.com",
+ "phone": "+1 (910) 595-2088",
+ "address": "598 Coles Street, Lithium, Idaho, 3267",
+ "about": "Adipisicing eiusmod adipisicing pariatur culpa minim occaecat amet qui exercitation ullamco id sint do. Culpa laboris nulla laboris id minim in voluptate nostrud ad veniam pariatur sit occaecat sint. Ad duis ex reprehenderit Lorem id labore aliquip ad officia. Reprehenderit dolore sint laborum cillum. Esse dolor ad aliquip esse eiusmod excepteur. Nostrud irure enim Lorem in labore reprehenderit. Commodo adipisicing ut nulla laboris aliqua nulla anim.\r\n",
+ "registered": "2014-11-03T16:50:57 -01:00",
+ "latitude": 89.656206,
+ "longitude": 3.931018,
+ "tags": [
+ "veniam",
+ "laboris",
+ "est",
+ "et",
+ "laborum",
+ "quis",
+ "aliquip"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Salazar Melton"
+ },
+ {
+ "id": 1,
+ "name": "Maude Chen"
+ },
+ {
+ "id": 2,
+ "name": "Etta Barber"
+ }
+ ],
+ "greeting": "Hello, Georgette Wong! You have 1 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af248c72b6a3933c43",
+ "index": 437,
+ "guid": "a8141310-bcec-4141-90aa-f184f785a248",
+ "isActive": false,
+ "balance": "$1,151.90",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "blue",
+ "name": "Edna Bridges",
+ "gender": "female",
+ "company": "SENSATE",
+ "email": "ednabridges@sensate.com",
+ "phone": "+1 (877) 535-3479",
+ "address": "260 Stewart Street, Konterra, New Hampshire, 221",
+ "about": "Pariatur sunt ad ullamco deserunt. Labore irure mollit et non ipsum in. Eu et nisi consectetur aliqua sunt amet. Id veniam id Lorem duis ut ad cillum ex non cillum quis cupidatat nostrud dolore.\r\n",
+ "registered": "2015-02-02T05:48:42 -01:00",
+ "latitude": -75.613682,
+ "longitude": -176.515958,
+ "tags": [
+ "excepteur",
+ "irure",
+ "non",
+ "eiusmod",
+ "voluptate",
+ "proident",
+ "ullamco"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Fanny Lambert"
+ },
+ {
+ "id": 1,
+ "name": "Charles Hahn"
+ },
+ {
+ "id": 2,
+ "name": "Hill Robinson"
+ }
+ ],
+ "greeting": "Hello, Edna Bridges! You have 4 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af4d03e4b09d487f2e",
+ "index": 438,
+ "guid": "3d638cf5-40c9-41d3-a3bc-573e886e6139",
+ "isActive": true,
+ "balance": "$2,064.01",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "brown",
+ "name": "Blanchard Hensley",
+ "gender": "male",
+ "company": "ZYTREX",
+ "email": "blanchardhensley@zytrex.com",
+ "phone": "+1 (888) 592-2836",
+ "address": "521 Taaffe Place, Sutton, Maine, 2783",
+ "about": "Labore labore laborum excepteur officia labore Lorem nisi nulla incididunt nulla occaecat. Eu culpa pariatur ut excepteur. Pariatur do pariatur enim id incididunt irure consectetur proident. Minim sint elit ullamco elit elit Lorem. Ut ad id irure aliquip sit laboris commodo officia proident consequat dolore.\r\n",
+ "registered": "2014-04-06T16:36:20 -02:00",
+ "latitude": 15.416688,
+ "longitude": -78.959414,
+ "tags": [
+ "esse",
+ "sint",
+ "officia",
+ "Lorem",
+ "sit",
+ "enim",
+ "elit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Jillian Greer"
+ },
+ {
+ "id": 1,
+ "name": "Alexander Stokes"
+ },
+ {
+ "id": 2,
+ "name": "Calderon Burnett"
+ }
+ ],
+ "greeting": "Hello, Blanchard Hensley! You have 10 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afae1ab7f093fe5936",
+ "index": 439,
+ "guid": "82b30d67-fe73-413c-aa28-2c434ec94f8c",
+ "isActive": true,
+ "balance": "$1,994.77",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "blue",
+ "name": "Lauri Benson",
+ "gender": "female",
+ "company": "TEMORAK",
+ "email": "lauribenson@temorak.com",
+ "phone": "+1 (871) 583-2678",
+ "address": "371 Meeker Avenue, Kylertown, Utah, 7888",
+ "about": "Mollit nulla deserunt proident occaecat id enim incididunt. Reprehenderit proident ipsum eiusmod officia elit ea in qui eiusmod ad velit adipisicing commodo mollit. Ullamco sit culpa deserunt cillum consectetur aliquip exercitation occaecat culpa officia fugiat ex consequat commodo. Lorem ipsum ullamco officia magna velit ut cupidatat culpa excepteur laboris ex sunt.\r\n",
+ "registered": "2014-03-06T23:24:52 -01:00",
+ "latitude": -49.833501,
+ "longitude": -60.084369,
+ "tags": [
+ "labore",
+ "veniam",
+ "excepteur",
+ "pariatur",
+ "qui",
+ "et",
+ "culpa"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Kristen Colon"
+ },
+ {
+ "id": 1,
+ "name": "Latisha Mercer"
+ },
+ {
+ "id": 2,
+ "name": "Fannie Garrett"
+ }
+ ],
+ "greeting": "Hello, Lauri Benson! You have 3 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afeb8f8f569e00a823",
+ "index": 440,
+ "guid": "5ff41bc2-ce90-441d-b560-5454e4d0f2f8",
+ "isActive": true,
+ "balance": "$3,818.65",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "blue",
+ "name": "Mathis Ochoa",
+ "gender": "male",
+ "company": "IDEGO",
+ "email": "mathisochoa@idego.com",
+ "phone": "+1 (815) 577-2902",
+ "address": "794 Anna Court, Maplewood, West Virginia, 8927",
+ "about": "Lorem labore dolor quis aliquip labore consectetur tempor et nostrud fugiat reprehenderit id minim quis. In pariatur sit ut sint anim Lorem exercitation incididunt. Id nisi cillum in sint nostrud proident ut deserunt minim pariatur. Duis ex exercitation deserunt minim ullamco sit. Nostrud dolore reprehenderit nulla aute ex ullamco eiusmod excepteur exercitation non eu incididunt aliquip proident. Veniam magna est reprehenderit velit aliqua tempor exercitation sint enim non fugiat amet. Fugiat ea dolore velit incididunt ut commodo labore excepteur quis ad cupidatat velit quis.\r\n",
+ "registered": "2014-04-30T05:47:23 -02:00",
+ "latitude": -65.156562,
+ "longitude": -2.826987,
+ "tags": [
+ "enim",
+ "amet",
+ "laborum",
+ "ipsum",
+ "minim",
+ "duis",
+ "pariatur"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Vega Fisher"
+ },
+ {
+ "id": 1,
+ "name": "Hickman Fry"
+ },
+ {
+ "id": 2,
+ "name": "Kathleen Riley"
+ }
+ ],
+ "greeting": "Hello, Mathis Ochoa! You have 6 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af992a1e1b31502fe4",
+ "index": 441,
+ "guid": "279b69ad-93cf-48b2-95ae-daf7f9cf691e",
+ "isActive": false,
+ "balance": "$2,008.10",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "blue",
+ "name": "Corrine Levy",
+ "gender": "female",
+ "company": "TSUNAMIA",
+ "email": "corrinelevy@tsunamia.com",
+ "phone": "+1 (813) 559-2997",
+ "address": "959 Harden Street, Unionville, Virginia, 1823",
+ "about": "Laboris nostrud aliqua labore cillum cupidatat enim deserunt est veniam in mollit esse dolor. Nulla anim consequat commodo ex elit officia ipsum tempor adipisicing enim. Non exercitation irure sunt sit excepteur fugiat elit id ad in. Proident nulla non laborum sit ut nisi eiusmod nostrud mollit velit do minim.\r\n",
+ "registered": "2014-12-11T18:43:38 -01:00",
+ "latitude": -39.351366,
+ "longitude": -59.127112,
+ "tags": [
+ "nulla",
+ "in",
+ "id",
+ "culpa",
+ "pariatur",
+ "dolor",
+ "est"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Ruby Cline"
+ },
+ {
+ "id": 1,
+ "name": "Turner Buckner"
+ },
+ {
+ "id": 2,
+ "name": "Hooper Mccray"
+ }
+ ],
+ "greeting": "Hello, Corrine Levy! You have 6 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af1e4ac95797af8cc6",
+ "index": 442,
+ "guid": "c12fdb72-8865-48ba-8ada-6a0a13b6b492",
+ "isActive": false,
+ "balance": "$3,861.77",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "green",
+ "name": "Annie Kelly",
+ "gender": "female",
+ "company": "QUIZKA",
+ "email": "anniekelly@quizka.com",
+ "phone": "+1 (992) 430-3346",
+ "address": "262 Victor Road, Bladensburg, Florida, 132",
+ "about": "Cillum consequat magna quis consectetur ut reprehenderit sunt do aliquip minim elit est ut incididunt. Aliquip excepteur commodo aliquip sit deserunt nostrud voluptate eiusmod elit elit et esse est. Cillum et voluptate in aliqua dolore. Commodo qui occaecat in nostrud Lorem eu. Lorem dolore magna excepteur ullamco qui fugiat et. Duis sint fugiat pariatur quis. Irure esse et ad magna reprehenderit proident.\r\n",
+ "registered": "2014-06-18T16:07:59 -02:00",
+ "latitude": -65.728278,
+ "longitude": -73.324851,
+ "tags": [
+ "in",
+ "exercitation",
+ "officia",
+ "ex",
+ "in",
+ "excepteur",
+ "tempor"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Ashley Lynn"
+ },
+ {
+ "id": 1,
+ "name": "Erickson Parrish"
+ },
+ {
+ "id": 2,
+ "name": "Foley Mejia"
+ }
+ ],
+ "greeting": "Hello, Annie Kelly! You have 8 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afcda4d5902de0fb7f",
+ "index": 443,
+ "guid": "91b7a93e-0952-41de-88a1-6e05b088d766",
+ "isActive": true,
+ "balance": "$1,250.20",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "green",
+ "name": "Cathryn Osborne",
+ "gender": "female",
+ "company": "YOGASM",
+ "email": "cathrynosborne@yogasm.com",
+ "phone": "+1 (837) 418-2581",
+ "address": "715 Bridge Street, Dellview, Texas, 2825",
+ "about": "Ipsum eiusmod est labore ipsum qui dolor ad. Magna ullamco tempor exercitation deserunt labore proident qui esse velit ad in aute. Ut aute aute incididunt eu laboris Lorem culpa Lorem nostrud ullamco esse nisi. Amet ex tempor ex dolor fugiat incididunt et mollit ullamco. Pariatur sunt quis quis anim magna in sunt in minim nostrud id nulla duis.\r\n",
+ "registered": "2014-04-28T00:40:02 -02:00",
+ "latitude": 72.38195,
+ "longitude": -108.713267,
+ "tags": [
+ "ex",
+ "ex",
+ "non",
+ "ut",
+ "nisi",
+ "magna",
+ "consectetur"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Celeste Jimenez"
+ },
+ {
+ "id": 1,
+ "name": "Briana Martinez"
+ },
+ {
+ "id": 2,
+ "name": "Monica Workman"
+ }
+ ],
+ "greeting": "Hello, Cathryn Osborne! You have 5 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af1615846fc4358db4",
+ "index": 444,
+ "guid": "15f5e987-03ac-4e84-8388-4ab337980122",
+ "isActive": true,
+ "balance": "$2,662.45",
+ "picture": "http://placehold.it/32x32",
+ "age": 26,
+ "eyeColor": "brown",
+ "name": "Deanne Moss",
+ "gender": "female",
+ "company": "MUSANPOLY",
+ "email": "deannemoss@musanpoly.com",
+ "phone": "+1 (852) 491-3634",
+ "address": "917 Suydam Street, Lodoga, Guam, 1143",
+ "about": "Ea nostrud mollit exercitation duis officia minim esse dolore. Excepteur id incididunt pariatur sint exercitation. Qui duis mollit eiusmod excepteur aute proident nostrud labore non proident est ipsum velit.\r\n",
+ "registered": "2014-10-18T12:14:13 -02:00",
+ "latitude": -17.068665,
+ "longitude": -64.612724,
+ "tags": [
+ "ullamco",
+ "adipisicing",
+ "cillum",
+ "do",
+ "quis",
+ "aute",
+ "et"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Sonia Copeland"
+ },
+ {
+ "id": 1,
+ "name": "Ortega William"
+ },
+ {
+ "id": 2,
+ "name": "Hilary Cooke"
+ }
+ ],
+ "greeting": "Hello, Deanne Moss! You have 6 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afb398ec1a41707580",
+ "index": 445,
+ "guid": "4040747a-0483-4854-905c-a737888b5736",
+ "isActive": false,
+ "balance": "$2,870.32",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "blue",
+ "name": "Garza Hayden",
+ "gender": "male",
+ "company": "MANTRIX",
+ "email": "garzahayden@mantrix.com",
+ "phone": "+1 (919) 471-3201",
+ "address": "785 Bradford Street, Marbury, Alaska, 2157",
+ "about": "Commodo exercitation eiusmod est ipsum consequat dolore et minim cillum. Nostrud minim consectetur aliquip enim enim ea et occaecat officia pariatur. Labore quis incididunt irure aliquip cillum magna magna tempor mollit sunt velit duis elit eu. Cupidatat quis commodo ipsum velit adipisicing non dolore mollit sint cupidatat fugiat dolor laborum. Nulla deserunt labore culpa ea laboris fugiat veniam mollit voluptate esse.\r\n",
+ "registered": "2015-03-02T20:41:37 -01:00",
+ "latitude": 19.462044,
+ "longitude": -21.468506,
+ "tags": [
+ "nulla",
+ "voluptate",
+ "do",
+ "eu",
+ "nisi",
+ "esse",
+ "dolor"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Maggie Barnes"
+ },
+ {
+ "id": 1,
+ "name": "Juliana Glover"
+ },
+ {
+ "id": 2,
+ "name": "Mandy Quinn"
+ }
+ ],
+ "greeting": "Hello, Garza Hayden! You have 9 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af464637619f14917e",
+ "index": 446,
+ "guid": "596e5fce-aadb-40dc-ab4c-bc2aa6d46e06",
+ "isActive": true,
+ "balance": "$1,455.51",
+ "picture": "http://placehold.it/32x32",
+ "age": 32,
+ "eyeColor": "blue",
+ "name": "Clare Pate",
+ "gender": "female",
+ "company": "FUTURIZE",
+ "email": "clarepate@futurize.com",
+ "phone": "+1 (835) 506-3864",
+ "address": "439 Narrows Avenue, Iola, District Of Columbia, 2833",
+ "about": "Adipisicing aliquip reprehenderit reprehenderit ea tempor officia ad. Consectetur irure ad ex enim. Consequat consectetur sint fugiat non fugiat eiusmod non ex. Ea eiusmod aliqua sint do. Lorem laboris cupidatat do id ea elit deserunt nulla quis labore laboris adipisicing nisi.\r\n",
+ "registered": "2014-10-06T21:56:36 -02:00",
+ "latitude": -23.13582,
+ "longitude": 29.77683,
+ "tags": [
+ "do",
+ "culpa",
+ "sunt",
+ "duis",
+ "duis",
+ "tempor",
+ "ipsum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Elba Harrington"
+ },
+ {
+ "id": 1,
+ "name": "Deirdre Bray"
+ },
+ {
+ "id": 2,
+ "name": "Camille Mcclure"
+ }
+ ],
+ "greeting": "Hello, Clare Pate! You have 3 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03affef812fdcffe9bbd",
+ "index": 447,
+ "guid": "974ce8da-aabd-4d7c-87ed-e79064619ac5",
+ "isActive": false,
+ "balance": "$2,564.31",
+ "picture": "http://placehold.it/32x32",
+ "age": 26,
+ "eyeColor": "brown",
+ "name": "Judy Jordan",
+ "gender": "female",
+ "company": "HOMETOWN",
+ "email": "judyjordan@hometown.com",
+ "phone": "+1 (980) 520-2167",
+ "address": "191 Tompkins Avenue, Independence, New York, 3545",
+ "about": "Mollit laboris quis mollit ipsum voluptate excepteur ex irure aute nostrud magna anim sunt. Sint culpa reprehenderit labore pariatur Lorem ea excepteur eiusmod sit ex aute ipsum minim. Lorem est qui qui consectetur sit magna consequat quis ex sint. Sit non Lorem magna deserunt occaecat eu est et. Reprehenderit pariatur eu eu commodo laborum aute sit velit officia.\r\n",
+ "registered": "2014-10-12T13:28:46 -02:00",
+ "latitude": -47.798186,
+ "longitude": -64.913037,
+ "tags": [
+ "occaecat",
+ "exercitation",
+ "nulla",
+ "et",
+ "tempor",
+ "do",
+ "quis"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Matilda Vincent"
+ },
+ {
+ "id": 1,
+ "name": "Dionne Higgins"
+ },
+ {
+ "id": 2,
+ "name": "Elisabeth Leach"
+ }
+ ],
+ "greeting": "Hello, Judy Jordan! You have 4 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af9e8d9014049ada49",
+ "index": 448,
+ "guid": "7d963516-d7cc-4032-8115-b76636cbfa56",
+ "isActive": false,
+ "balance": "$2,240.19",
+ "picture": "http://placehold.it/32x32",
+ "age": 30,
+ "eyeColor": "green",
+ "name": "Everett Mcneil",
+ "gender": "male",
+ "company": "INRT",
+ "email": "everettmcneil@inrt.com",
+ "phone": "+1 (910) 511-3723",
+ "address": "142 Luquer Street, Wawona, North Carolina, 8445",
+ "about": "Dolore ad culpa fugiat est sint non enim tempor. Aliquip sit dolore occaecat eiusmod do reprehenderit dolor et anim adipisicing excepteur nulla excepteur quis. Nostrud dolore nulla ullamco mollit nulla sint ut. Mollit anim minim dolore in aute eu proident ex non ad adipisicing incididunt aliqua voluptate. Consectetur voluptate ut duis occaecat tempor nulla nostrud id in magna tempor irure dolore pariatur. Pariatur labore cupidatat dolor aute consequat do. Aute cupidatat nisi minim qui ut consequat duis consequat ullamco non.\r\n",
+ "registered": "2014-07-17T19:58:11 -02:00",
+ "latitude": 84.621095,
+ "longitude": -122.035827,
+ "tags": [
+ "ea",
+ "amet",
+ "commodo",
+ "aute",
+ "magna",
+ "eu",
+ "dolore"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Claudine Carter"
+ },
+ {
+ "id": 1,
+ "name": "Anne Frazier"
+ },
+ {
+ "id": 2,
+ "name": "Poole Stevens"
+ }
+ ],
+ "greeting": "Hello, Everett Mcneil! You have 2 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af8c023368d8362dcf",
+ "index": 449,
+ "guid": "a5c55108-8e3c-45e5-b4ce-bc3d8c24fa14",
+ "isActive": true,
+ "balance": "$3,965.69",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "brown",
+ "name": "Louella Berry",
+ "gender": "female",
+ "company": "ANIXANG",
+ "email": "louellaberry@anixang.com",
+ "phone": "+1 (994) 565-3477",
+ "address": "293 Bond Street, Strong, Connecticut, 9586",
+ "about": "Fugiat ullamco laboris aute exercitation et. Irure dolore ad sunt culpa aliquip ex commodo eu sint ad irure. Elit in eu excepteur nisi. Officia amet non minim officia laboris enim adipisicing anim consequat magna excepteur adipisicing duis. Eiusmod exercitation mollit veniam excepteur nulla. Eu aliquip labore excepteur fugiat veniam occaecat magna nulla ex. Incididunt culpa id occaecat velit ullamco ad.\r\n",
+ "registered": "2015-01-29T01:06:28 -01:00",
+ "latitude": 25.312359,
+ "longitude": -29.30884,
+ "tags": [
+ "consectetur",
+ "officia",
+ "irure",
+ "excepteur",
+ "eiusmod",
+ "quis",
+ "irure"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Nadine Huber"
+ },
+ {
+ "id": 1,
+ "name": "Rose Hampton"
+ },
+ {
+ "id": 2,
+ "name": "Yolanda Mooney"
+ }
+ ],
+ "greeting": "Hello, Louella Berry! You have 7 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af321885a61e93e348",
+ "index": 450,
+ "guid": "aeb34776-7f9d-4bcc-98f8-a3c985d117b1",
+ "isActive": false,
+ "balance": "$1,583.55",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "brown",
+ "name": "Isabelle Harvey",
+ "gender": "female",
+ "company": "PHORMULA",
+ "email": "isabelleharvey@phormula.com",
+ "phone": "+1 (916) 457-3276",
+ "address": "843 Cheever Place, Beechmont, South Carolina, 3576",
+ "about": "Mollit eiusmod enim ut nostrud esse cillum ex adipisicing quis consectetur excepteur. Cupidatat nostrud qui fugiat tempor. Proident velit proident est pariatur aliqua dolor eiusmod. Aliqua ipsum fugiat ullamco ex dolor cillum minim anim. Amet proident aliquip velit consequat proident. Dolore et est cupidatat anim eiusmod pariatur laborum consequat reprehenderit Lorem esse.\r\n",
+ "registered": "2014-05-15T16:19:53 -02:00",
+ "latitude": -66.538944,
+ "longitude": 123.315295,
+ "tags": [
+ "reprehenderit",
+ "laboris",
+ "velit",
+ "in",
+ "irure",
+ "ex",
+ "quis"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Barber Medina"
+ },
+ {
+ "id": 1,
+ "name": "Roxie Howe"
+ },
+ {
+ "id": 2,
+ "name": "Burns Wolfe"
+ }
+ ],
+ "greeting": "Hello, Isabelle Harvey! You have 4 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afdfb327d78e16045a",
+ "index": 451,
+ "guid": "1d3e6a79-9b05-4946-9106-4692dd98b6db",
+ "isActive": true,
+ "balance": "$3,272.12",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "green",
+ "name": "Amelia Ward",
+ "gender": "female",
+ "company": "QABOOS",
+ "email": "ameliaward@qaboos.com",
+ "phone": "+1 (873) 494-2191",
+ "address": "690 Garfield Place, Dalton, Rhode Island, 2737",
+ "about": "Adipisicing fugiat aliqua sit ea minim velit fugiat eu mollit tempor est. Irure duis enim reprehenderit veniam non mollit anim aliqua. Laborum est Lorem ullamco aliqua esse mollit aute ipsum officia nulla. Elit aute adipisicing exercitation dolore amet ipsum nisi commodo dolore sit commodo. Id do cillum occaecat consequat culpa consectetur ea anim sint pariatur commodo Lorem ut. Elit et veniam anim culpa. Commodo minim veniam aute ad est eu aliqua sint ullamco.\r\n",
+ "registered": "2015-03-24T17:47:38 -01:00",
+ "latitude": -11.532981,
+ "longitude": 96.911783,
+ "tags": [
+ "nostrud",
+ "consequat",
+ "laboris",
+ "pariatur",
+ "irure",
+ "dolor",
+ "voluptate"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Georgina Stanley"
+ },
+ {
+ "id": 1,
+ "name": "Hoover Keller"
+ },
+ {
+ "id": 2,
+ "name": "Robbie Morrison"
+ }
+ ],
+ "greeting": "Hello, Amelia Ward! You have 5 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af2ff43a9c49f78871",
+ "index": 452,
+ "guid": "bc407936-7246-477b-bb81-486df5392bf1",
+ "isActive": false,
+ "balance": "$1,545.86",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "blue",
+ "name": "Morgan Shelton",
+ "gender": "male",
+ "company": "PROSELY",
+ "email": "morganshelton@prosely.com",
+ "phone": "+1 (818) 418-2716",
+ "address": "839 Bushwick Place, Lumberton, Pennsylvania, 289",
+ "about": "Nostrud ad non et adipisicing id pariatur. Culpa dolore in occaecat aute officia sint do officia fugiat. Sint aliqua dolore nulla est aliqua labore exercitation irure duis. Dolor ullamco fugiat amet occaecat duis quis aliquip. Ipsum nulla cupidatat nulla irure incididunt commodo velit proident tempor enim.\r\n",
+ "registered": "2014-11-22T19:40:41 -01:00",
+ "latitude": -85.981596,
+ "longitude": 65.212181,
+ "tags": [
+ "tempor",
+ "est",
+ "est",
+ "officia",
+ "incididunt",
+ "non",
+ "ipsum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Mcmahon Chaney"
+ },
+ {
+ "id": 1,
+ "name": "Rhea Underwood"
+ },
+ {
+ "id": 2,
+ "name": "Durham Craig"
+ }
+ ],
+ "greeting": "Hello, Morgan Shelton! You have 10 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af4090d19274478bbd",
+ "index": 453,
+ "guid": "c08335b5-ed5a-41d1-879c-5de04ea0003c",
+ "isActive": false,
+ "balance": "$2,776.19",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "brown",
+ "name": "Delores Berger",
+ "gender": "female",
+ "company": "CODACT",
+ "email": "deloresberger@codact.com",
+ "phone": "+1 (807) 499-3562",
+ "address": "142 Essex Street, Lloyd, Oklahoma, 7799",
+ "about": "Occaecat consequat exercitation ullamco reprehenderit pariatur. Fugiat in qui commodo est minim amet adipisicing consequat cillum elit excepteur exercitation ullamco culpa. Cillum dolore amet et id et laborum laboris incididunt consectetur ipsum sit sint ad. Voluptate culpa commodo occaecat consectetur nostrud pariatur. Ipsum est ipsum fugiat proident non laborum nostrud dolore amet nulla ipsum consequat duis qui. Pariatur quis culpa exercitation anim aliqua minim.\r\n",
+ "registered": "2015-02-05T16:06:25 -01:00",
+ "latitude": 29.67617,
+ "longitude": 29.601668,
+ "tags": [
+ "in",
+ "magna",
+ "sint",
+ "proident",
+ "id",
+ "laborum",
+ "sint"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Pollard Caldwell"
+ },
+ {
+ "id": 1,
+ "name": "Rachel Brennan"
+ },
+ {
+ "id": 2,
+ "name": "Dunn Goff"
+ }
+ ],
+ "greeting": "Hello, Delores Berger! You have 3 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03aff94e061e8a63675a",
+ "index": 454,
+ "guid": "7f5c7514-3571-4acd-9437-5b20a5854c24",
+ "isActive": false,
+ "balance": "$2,475.81",
+ "picture": "http://placehold.it/32x32",
+ "age": 32,
+ "eyeColor": "brown",
+ "name": "Rhonda Compton",
+ "gender": "female",
+ "company": "INCUBUS",
+ "email": "rhondacompton@incubus.com",
+ "phone": "+1 (957) 560-2455",
+ "address": "997 Verona Street, Santel, Kansas, 2264",
+ "about": "Voluptate nulla veniam veniam commodo sint est nostrud minim do. Anim occaecat pariatur ad dolor incididunt culpa do exercitation sit. Eu qui do aliquip est eu commodo voluptate cillum consectetur ipsum laboris commodo. Nisi qui ullamco magna exercitation ea quis dolor commodo anim voluptate qui. Ea quis aliqua consectetur esse excepteur mollit esse.\r\n",
+ "registered": "2014-05-15T12:14:25 -02:00",
+ "latitude": 53.901236,
+ "longitude": 162.969851,
+ "tags": [
+ "anim",
+ "ex",
+ "irure",
+ "minim",
+ "proident",
+ "et",
+ "non"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Noreen Crosby"
+ },
+ {
+ "id": 1,
+ "name": "Deena Campos"
+ },
+ {
+ "id": 2,
+ "name": "Brooks Gibbs"
+ }
+ ],
+ "greeting": "Hello, Rhonda Compton! You have 8 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af3e3db1253f927923",
+ "index": 455,
+ "guid": "f107e968-97d1-4c01-8716-2f4e5b7319c2",
+ "isActive": true,
+ "balance": "$1,622.86",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "brown",
+ "name": "Rowena Strong",
+ "gender": "female",
+ "company": "GUSHKOOL",
+ "email": "rowenastrong@gushkool.com",
+ "phone": "+1 (832) 561-3994",
+ "address": "297 Beaumont Street, Yonah, Kentucky, 2484",
+ "about": "Ut in ut veniam ea. Culpa in ullamco excepteur eu ullamco cillum elit voluptate ipsum excepteur culpa sunt quis elit. Qui culpa commodo duis ut pariatur ad sunt. Ea veniam minim fugiat cupidatat ipsum voluptate et elit nisi non.\r\n",
+ "registered": "2014-01-06T10:27:29 -01:00",
+ "latitude": -80.172953,
+ "longitude": -146.544889,
+ "tags": [
+ "fugiat",
+ "non",
+ "nulla",
+ "nisi",
+ "est",
+ "laboris",
+ "nostrud"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Wilson Forbes"
+ },
+ {
+ "id": 1,
+ "name": "Kaitlin Jones"
+ },
+ {
+ "id": 2,
+ "name": "Lolita Alexander"
+ }
+ ],
+ "greeting": "Hello, Rowena Strong! You have 1 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af9a08a6b3445b8bd1",
+ "index": 456,
+ "guid": "4fa9595b-e238-40e1-a4de-94ef75c04051",
+ "isActive": false,
+ "balance": "$2,380.22",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "brown",
+ "name": "Justine Gilbert",
+ "gender": "female",
+ "company": "PERKLE",
+ "email": "justinegilbert@perkle.com",
+ "phone": "+1 (829) 591-3620",
+ "address": "452 Euclid Avenue, Iberia, Mississippi, 6021",
+ "about": "Ad exercitation fugiat eu excepteur enim ipsum ad consequat commodo id sint eu. Culpa ex irure tempor fugiat officia. Laboris excepteur consectetur dolor deserunt reprehenderit est ex non sunt consectetur commodo adipisicing. Enim sint esse duis ea incididunt. Non sit fugiat irure nostrud dolore elit nulla excepteur in consectetur.\r\n",
+ "registered": "2014-07-08T21:21:20 -02:00",
+ "latitude": -8.211935,
+ "longitude": 4.083645,
+ "tags": [
+ "ipsum",
+ "consequat",
+ "elit",
+ "commodo",
+ "commodo",
+ "veniam",
+ "dolor"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Humphrey Gardner"
+ },
+ {
+ "id": 1,
+ "name": "Keller Mcleod"
+ },
+ {
+ "id": 2,
+ "name": "Pamela Molina"
+ }
+ ],
+ "greeting": "Hello, Justine Gilbert! You have 3 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afe5cad9609fd37ffd",
+ "index": 457,
+ "guid": "2d9c763a-ff32-448f-817b-e62b74565417",
+ "isActive": false,
+ "balance": "$2,130.98",
+ "picture": "http://placehold.it/32x32",
+ "age": 21,
+ "eyeColor": "blue",
+ "name": "Harrell Bonner",
+ "gender": "male",
+ "company": "EVENTEX",
+ "email": "harrellbonner@eventex.com",
+ "phone": "+1 (945) 557-2651",
+ "address": "923 Bath Avenue, Tedrow, Montana, 2514",
+ "about": "Cillum esse incididunt mollit quis tempor do quis esse et officia ad nulla id. Irure eu enim amet anim ut. Quis enim qui pariatur voluptate in incididunt tempor sit ea veniam sint.\r\n",
+ "registered": "2014-06-27T18:48:56 -02:00",
+ "latitude": -67.806388,
+ "longitude": -166.04947,
+ "tags": [
+ "irure",
+ "anim",
+ "dolor",
+ "velit",
+ "enim",
+ "occaecat",
+ "aliquip"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Tabatha Huffman"
+ },
+ {
+ "id": 1,
+ "name": "Head Harmon"
+ },
+ {
+ "id": 2,
+ "name": "Adkins Haney"
+ }
+ ],
+ "greeting": "Hello, Harrell Bonner! You have 1 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afa8f4bce79ec5e589",
+ "index": 458,
+ "guid": "25b62640-41eb-4f19-b653-34fee2a33e75",
+ "isActive": true,
+ "balance": "$3,610.47",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "green",
+ "name": "Guerrero Soto",
+ "gender": "male",
+ "company": "MARTGO",
+ "email": "guerrerosoto@martgo.com",
+ "phone": "+1 (818) 573-3811",
+ "address": "610 Colonial Road, Ilchester, North Dakota, 3898",
+ "about": "Ad deserunt veniam nulla mollit laborum duis dolore. Incididunt cupidatat ea consequat amet. Non sint culpa Lorem veniam cupidatat ut eu exercitation cillum ex Lorem sint. Voluptate nostrud non duis sint elit proident et ullamco. Veniam est mollit velit do anim officia ad duis. Et est aliquip Lorem aliquip sint id anim anim aute exercitation. Aliqua amet sit exercitation velit sunt reprehenderit sunt Lorem eu.\r\n",
+ "registered": "2014-02-22T05:58:55 -01:00",
+ "latitude": 47.297149,
+ "longitude": 9.664552,
+ "tags": [
+ "commodo",
+ "consectetur",
+ "non",
+ "sint",
+ "voluptate",
+ "esse",
+ "eiusmod"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Glover Lester"
+ },
+ {
+ "id": 1,
+ "name": "Alissa Cooley"
+ },
+ {
+ "id": 2,
+ "name": "Blevins Mcgowan"
+ }
+ ],
+ "greeting": "Hello, Guerrero Soto! You have 1 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afe866f53cdc346b56",
+ "index": 459,
+ "guid": "d0e9b8f4-868d-4f85-8b35-e9b1b02afe28",
+ "isActive": false,
+ "balance": "$1,218.23",
+ "picture": "http://placehold.it/32x32",
+ "age": 32,
+ "eyeColor": "green",
+ "name": "Vilma Guy",
+ "gender": "female",
+ "company": "SATIANCE",
+ "email": "vilmaguy@satiance.com",
+ "phone": "+1 (914) 491-3517",
+ "address": "607 Carroll Street, Salunga, Maryland, 5993",
+ "about": "Sunt officia ad Lorem proident sunt quis excepteur non sunt sunt duis eiusmod non voluptate. Laboris tempor duis dolor nulla enim. Ad proident qui quis proident cillum esse sunt consequat. Exercitation non deserunt tempor pariatur consequat Lorem deserunt fugiat aute ut laboris voluptate. Est quis consectetur consequat aute eu. Anim consectetur non pariatur cupidatat consectetur. Qui duis adipisicing cupidatat et Lorem voluptate adipisicing.\r\n",
+ "registered": "2015-04-23T04:07:28 -02:00",
+ "latitude": 13.322448,
+ "longitude": 30.7853,
+ "tags": [
+ "tempor",
+ "magna",
+ "ex",
+ "dolor",
+ "magna",
+ "id",
+ "veniam"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Madeleine Burgess"
+ },
+ {
+ "id": 1,
+ "name": "Black Cameron"
+ },
+ {
+ "id": 2,
+ "name": "Angel Mason"
+ }
+ ],
+ "greeting": "Hello, Vilma Guy! You have 9 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03aff3ec75f59a3cc735",
+ "index": 460,
+ "guid": "7a70e528-1aad-4e1b-ae43-0d318d89ebc6",
+ "isActive": true,
+ "balance": "$1,535.42",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "green",
+ "name": "Neal Garner",
+ "gender": "male",
+ "company": "IRACK",
+ "email": "nealgarner@irack.com",
+ "phone": "+1 (941) 490-3964",
+ "address": "648 Village Court, Babb, Hawaii, 2608",
+ "about": "Aliqua cupidatat ipsum eiusmod tempor nulla ex minim eiusmod velit eu non ea eu. Tempor culpa dolor nisi adipisicing. Aliqua occaecat nostrud est dolor sint amet id ullamco ipsum Lorem magna. Aute veniam ex culpa mollit elit Lorem. Pariatur Lorem aute labore do veniam adipisicing reprehenderit mollit do. Occaecat ullamco tempor laboris labore do.\r\n",
+ "registered": "2014-12-18T19:09:15 -01:00",
+ "latitude": -8.607565,
+ "longitude": 175.644954,
+ "tags": [
+ "velit",
+ "non",
+ "ea",
+ "magna",
+ "amet",
+ "elit",
+ "est"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Browning Craft"
+ },
+ {
+ "id": 1,
+ "name": "Fay Moses"
+ },
+ {
+ "id": 2,
+ "name": "Sylvia Barron"
+ }
+ ],
+ "greeting": "Hello, Neal Garner! You have 10 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af7caafeee88a5f2c2",
+ "index": 461,
+ "guid": "3f47efde-8627-4534-97b4-72d3abd161de",
+ "isActive": true,
+ "balance": "$1,685.49",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "brown",
+ "name": "Olga Kline",
+ "gender": "female",
+ "company": "XYMONK",
+ "email": "olgakline@xymonk.com",
+ "phone": "+1 (844) 554-2362",
+ "address": "987 Bank Street, Axis, Arizona, 3040",
+ "about": "Nostrud est et aute commodo occaecat do ad amet quis est. Proident proident consectetur ea excepteur enim nisi et laborum. Duis ullamco proident esse sit voluptate cillum culpa ullamco occaecat ipsum. Adipisicing ut in ullamco nisi. Deserunt dolor amet duis amet.\r\n",
+ "registered": "2014-12-25T23:29:00 -01:00",
+ "latitude": 43.848494,
+ "longitude": -123.573815,
+ "tags": [
+ "cupidatat",
+ "aliquip",
+ "est",
+ "dolor",
+ "velit",
+ "ad",
+ "ullamco"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Alisha Nguyen"
+ },
+ {
+ "id": 1,
+ "name": "Keri Hansen"
+ },
+ {
+ "id": 2,
+ "name": "Bates Sanford"
+ }
+ ],
+ "greeting": "Hello, Olga Kline! You have 2 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af8cdf40998bd7d49f",
+ "index": 462,
+ "guid": "99c45c69-484d-48eb-8cee-4e9380e43a5c",
+ "isActive": false,
+ "balance": "$1,252.47",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "brown",
+ "name": "Romero Morse",
+ "gender": "male",
+ "company": "TECHTRIX",
+ "email": "romeromorse@techtrix.com",
+ "phone": "+1 (899) 479-3221",
+ "address": "211 Dearborn Court, Hendersonville, Arkansas, 8102",
+ "about": "Adipisicing labore et in laborum reprehenderit culpa Lorem culpa voluptate nisi laborum sunt quis. Culpa ipsum ea reprehenderit pariatur excepteur cupidatat aliquip dolore aliquip consectetur elit quis nisi. Quis cillum dolor cillum non deserunt commodo consectetur et non eiusmod nisi reprehenderit consectetur. Sint veniam labore eu laboris velit sit. Sunt irure sint incididunt elit minim est et et laborum. Magna occaecat ex aliqua velit esse duis et occaecat aliqua ut labore. Amet exercitation occaecat aute incididunt aute consequat cillum elit incididunt.\r\n",
+ "registered": "2014-08-15T04:42:14 -02:00",
+ "latitude": 52.70795,
+ "longitude": 37.741084,
+ "tags": [
+ "dolore",
+ "incididunt",
+ "sint",
+ "quis",
+ "incididunt",
+ "excepteur",
+ "dolor"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Elvira Horton"
+ },
+ {
+ "id": 1,
+ "name": "Christina Clements"
+ },
+ {
+ "id": 2,
+ "name": "Arline Wolf"
+ }
+ ],
+ "greeting": "Hello, Romero Morse! You have 3 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af11bd0607ea129133",
+ "index": 463,
+ "guid": "26022e83-2d50-4dc2-b4a1-74208614f041",
+ "isActive": true,
+ "balance": "$2,509.83",
+ "picture": "http://placehold.it/32x32",
+ "age": 22,
+ "eyeColor": "blue",
+ "name": "Hammond Browning",
+ "gender": "male",
+ "company": "KAGGLE",
+ "email": "hammondbrowning@kaggle.com",
+ "phone": "+1 (979) 530-3699",
+ "address": "986 Lombardy Street, Teasdale, Nevada, 8442",
+ "about": "Eiusmod excepteur cupidatat enim cupidatat sint id velit amet sunt sunt sunt duis. Ut incididunt consequat mollit culpa eiusmod amet sunt enim consectetur nulla. Ea laboris magna mollit elit. Est velit nostrud irure ut. Ad ut sit elit in sunt mollit. Ipsum elit enim eu elit laborum occaecat dolor cupidatat.\r\n",
+ "registered": "2014-05-16T12:48:10 -02:00",
+ "latitude": 89.603365,
+ "longitude": -113.14235,
+ "tags": [
+ "nostrud",
+ "dolor",
+ "Lorem",
+ "laboris",
+ "fugiat",
+ "pariatur",
+ "qui"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Morton Mcpherson"
+ },
+ {
+ "id": 1,
+ "name": "Antoinette Wilkins"
+ },
+ {
+ "id": 2,
+ "name": "Parks Davidson"
+ }
+ ],
+ "greeting": "Hello, Hammond Browning! You have 8 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af4388673bd0236250",
+ "index": 464,
+ "guid": "c5c46a90-56cf-4f0f-bf5d-efe66ff17bec",
+ "isActive": true,
+ "balance": "$2,443.17",
+ "picture": "http://placehold.it/32x32",
+ "age": 30,
+ "eyeColor": "green",
+ "name": "Franks Neal",
+ "gender": "male",
+ "company": "FUTURITY",
+ "email": "franksneal@futurity.com",
+ "phone": "+1 (819) 547-2023",
+ "address": "160 Borinquen Pl, Walton, New Jersey, 2935",
+ "about": "Adipisicing nostrud velit do officia reprehenderit irure. Reprehenderit voluptate consequat dolor velit eu exercitation. Ad irure sunt proident ut. Commodo laboris culpa cupidatat non consectetur commodo consequat incididunt eiusmod reprehenderit adipisicing proident incididunt. Officia anim ea cillum nisi officia velit ad aliquip.\r\n",
+ "registered": "2014-12-19T19:16:24 -01:00",
+ "latitude": -72.82498,
+ "longitude": 0.746442,
+ "tags": [
+ "consequat",
+ "esse",
+ "velit",
+ "magna",
+ "sint",
+ "sint",
+ "exercitation"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Ross Le"
+ },
+ {
+ "id": 1,
+ "name": "Erica Ramirez"
+ },
+ {
+ "id": 2,
+ "name": "Christy Acosta"
+ }
+ ],
+ "greeting": "Hello, Franks Neal! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afdc18d83df7d3d641",
+ "index": 465,
+ "guid": "1652ed5e-a8c9-4ce8-87a8-ec7076991b25",
+ "isActive": false,
+ "balance": "$3,416.75",
+ "picture": "http://placehold.it/32x32",
+ "age": 32,
+ "eyeColor": "green",
+ "name": "Serrano Salas",
+ "gender": "male",
+ "company": "ISOSURE",
+ "email": "serranosalas@isosure.com",
+ "phone": "+1 (897) 529-3061",
+ "address": "491 Stratford Road, Cartwright, Marshall Islands, 1390",
+ "about": "Labore veniam ipsum deserunt magna elit do nostrud labore aliqua commodo in non. Ullamco anim nisi voluptate et. Ullamco duis adipisicing pariatur veniam adipisicing cillum adipisicing exercitation dolor occaecat incididunt.\r\n",
+ "registered": "2014-06-08T03:46:26 -02:00",
+ "latitude": 57.690811,
+ "longitude": 45.451636,
+ "tags": [
+ "ipsum",
+ "eu",
+ "labore",
+ "ea",
+ "excepteur",
+ "ut",
+ "laboris"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Slater Espinoza"
+ },
+ {
+ "id": 1,
+ "name": "Angelica Ellison"
+ },
+ {
+ "id": 2,
+ "name": "Rosemary Cash"
+ }
+ ],
+ "greeting": "Hello, Serrano Salas! You have 2 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af5d96d3e2d1f4c02b",
+ "index": 466,
+ "guid": "7c6d7d3a-7096-4b79-a389-057062422655",
+ "isActive": false,
+ "balance": "$3,037.48",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "blue",
+ "name": "Park Park",
+ "gender": "male",
+ "company": "INDEXIA",
+ "email": "parkpark@indexia.com",
+ "phone": "+1 (910) 579-3595",
+ "address": "667 Lacon Court, Umapine, Georgia, 6178",
+ "about": "Minim cillum aliquip cupidatat qui est aute voluptate. Ut elit tempor ad qui ex nostrud occaecat minim. Id velit sunt sit veniam pariatur est ea id nostrud occaecat ut cupidatat exercitation.\r\n",
+ "registered": "2014-12-18T18:03:39 -01:00",
+ "latitude": 65.689918,
+ "longitude": 134.917855,
+ "tags": [
+ "esse",
+ "pariatur",
+ "labore",
+ "consectetur",
+ "pariatur",
+ "culpa",
+ "irure"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Pearlie Padilla"
+ },
+ {
+ "id": 1,
+ "name": "Adriana Rollins"
+ },
+ {
+ "id": 2,
+ "name": "Hughes Mack"
+ }
+ ],
+ "greeting": "Hello, Park Park! You have 10 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af8c4bcaded3ee5b12",
+ "index": 467,
+ "guid": "f3d6178f-8102-437e-87ac-7d90368a5736",
+ "isActive": true,
+ "balance": "$2,646.70",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "blue",
+ "name": "Mckay Bass",
+ "gender": "male",
+ "company": "JASPER",
+ "email": "mckaybass@jasper.com",
+ "phone": "+1 (856) 551-2354",
+ "address": "306 Langham Street, Edgar, Virgin Islands, 4231",
+ "about": "Laboris dolore incididunt tempor anim consequat. Sit cillum est labore proident deserunt deserunt Lorem qui velit. Nisi occaecat elit enim enim ut labore irure ea. In tempor elit ad officia est magna anim non consequat esse quis cillum. Id ea fugiat dolor cupidatat minim.\r\n",
+ "registered": "2014-07-09T11:09:33 -02:00",
+ "latitude": -81.398928,
+ "longitude": -1.255471,
+ "tags": [
+ "ad",
+ "ut",
+ "labore",
+ "sunt",
+ "quis",
+ "incididunt",
+ "nulla"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Sally Duran"
+ },
+ {
+ "id": 1,
+ "name": "Abigail Galloway"
+ },
+ {
+ "id": 2,
+ "name": "Middleton Guthrie"
+ }
+ ],
+ "greeting": "Hello, Mckay Bass! You have 7 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af7c07b92dd78272dc",
+ "index": 468,
+ "guid": "97370cfd-6953-4cec-9d96-c1acb3e542e9",
+ "isActive": false,
+ "balance": "$3,974.53",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "blue",
+ "name": "Thornton Sweeney",
+ "gender": "male",
+ "company": "COMVEYOR",
+ "email": "thorntonsweeney@comveyor.com",
+ "phone": "+1 (970) 462-2171",
+ "address": "380 Atlantic Avenue, Chumuckla, Colorado, 2271",
+ "about": "Cillum eiusmod magna commodo qui est et Lorem pariatur labore velit minim incididunt. Lorem pariatur laborum anim ex veniam culpa laboris. Veniam minim magna reprehenderit cupidatat velit sint. Do cupidatat mollit nulla laborum dolore Lorem dolor minim eu. Nostrud non pariatur pariatur mollit fugiat sint nostrud.\r\n",
+ "registered": "2015-03-21T10:14:39 -01:00",
+ "latitude": -85.612311,
+ "longitude": 41.244139,
+ "tags": [
+ "labore",
+ "duis",
+ "aliquip",
+ "ullamco",
+ "cillum",
+ "pariatur",
+ "elit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Henson Burke"
+ },
+ {
+ "id": 1,
+ "name": "Francis Kemp"
+ },
+ {
+ "id": 2,
+ "name": "Loretta Prince"
+ }
+ ],
+ "greeting": "Hello, Thornton Sweeney! You have 1 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af9e032cce70ac5d29",
+ "index": 469,
+ "guid": "bf0186e5-daa7-4ce4-b526-0c3d3bce5463",
+ "isActive": false,
+ "balance": "$2,236.53",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "blue",
+ "name": "Sherry Dunn",
+ "gender": "female",
+ "company": "TELLIFLY",
+ "email": "sherrydunn@tellifly.com",
+ "phone": "+1 (984) 510-3722",
+ "address": "679 Krier Place, Malott, Vermont, 7836",
+ "about": "Sint tempor magna quis aute velit aliquip cillum consectetur. Anim sunt exercitation sint consequat do Lorem eu anim deserunt cillum fugiat sunt commodo. Occaecat fugiat do adipisicing in aliquip duis. Magna deserunt aliqua in aute deserunt. Ad ipsum quis nisi ex irure sunt anim irure ipsum veniam veniam veniam minim.\r\n",
+ "registered": "2014-05-14T23:16:13 -02:00",
+ "latitude": 3.966406,
+ "longitude": -56.119398,
+ "tags": [
+ "duis",
+ "non",
+ "laborum",
+ "eiusmod",
+ "excepteur",
+ "nisi",
+ "non"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Bullock Richards"
+ },
+ {
+ "id": 1,
+ "name": "Willie Wiley"
+ },
+ {
+ "id": 2,
+ "name": "Lakeisha Horne"
+ }
+ ],
+ "greeting": "Hello, Sherry Dunn! You have 10 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af720ca7342e9e7efe",
+ "index": 470,
+ "guid": "3bb9dcbd-7537-46ea-bf47-c61821cb032d",
+ "isActive": true,
+ "balance": "$2,099.54",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "green",
+ "name": "Hale Reilly",
+ "gender": "male",
+ "company": "ZOLAR",
+ "email": "halereilly@zolar.com",
+ "phone": "+1 (979) 558-2960",
+ "address": "699 Pilling Street, Homeworth, Minnesota, 801",
+ "about": "Anim dolor consectetur commodo est excepteur veniam qui laboris deserunt incididunt dolore. Minim est irure ipsum ipsum laborum nisi nulla qui pariatur occaecat ex. Deserunt quis officia reprehenderit nulla cupidatat dolor. Dolor est adipisicing velit proident veniam ea. Labore aute voluptate laboris sunt irure enim ullamco ex minim et eu enim proident. Culpa consequat in quis officia cupidatat elit aliquip id irure.\r\n",
+ "registered": "2014-12-23T19:40:16 -01:00",
+ "latitude": 89.048204,
+ "longitude": 86.031373,
+ "tags": [
+ "sint",
+ "mollit",
+ "et",
+ "officia",
+ "ipsum",
+ "non",
+ "amet"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Buck Bullock"
+ },
+ {
+ "id": 1,
+ "name": "Finley Noble"
+ },
+ {
+ "id": 2,
+ "name": "Adela Salazar"
+ }
+ ],
+ "greeting": "Hello, Hale Reilly! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03aff5eb02f6456cd1ea",
+ "index": 471,
+ "guid": "0dd7694a-2218-42fa-9293-23637c129ff8",
+ "isActive": false,
+ "balance": "$1,416.45",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "green",
+ "name": "Wilkins Moreno",
+ "gender": "male",
+ "company": "JUMPSTACK",
+ "email": "wilkinsmoreno@jumpstack.com",
+ "phone": "+1 (814) 583-3340",
+ "address": "205 Union Avenue, Saddlebrooke, New Mexico, 1056",
+ "about": "Exercitation dolore occaecat ut fugiat et dolore. Reprehenderit culpa est consequat consequat duis commodo. Qui laborum irure culpa nulla sit cupidatat cillum aliquip reprehenderit pariatur officia labore. Pariatur eu sit eiusmod nulla veniam mollit sint enim occaecat nostrud ea laboris. Ad cupidatat nisi commodo non magna labore culpa incididunt amet. Adipisicing magna officia veniam incididunt velit. Occaecat qui officia magna eiusmod irure elit minim dolore non quis elit cillum ut minim.\r\n",
+ "registered": "2014-08-21T02:56:57 -02:00",
+ "latitude": -67.456299,
+ "longitude": -176.551629,
+ "tags": [
+ "incididunt",
+ "ut",
+ "aliqua",
+ "ipsum",
+ "officia",
+ "consectetur",
+ "elit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Lottie Atkins"
+ },
+ {
+ "id": 1,
+ "name": "Nora Crawford"
+ },
+ {
+ "id": 2,
+ "name": "Mavis Allison"
+ }
+ ],
+ "greeting": "Hello, Wilkins Moreno! You have 8 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afe7f21a33e8e750ca",
+ "index": 472,
+ "guid": "22110bd8-8d38-40e5-89ac-3fdf260f6163",
+ "isActive": false,
+ "balance": "$1,618.29",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "blue",
+ "name": "Leta Duke",
+ "gender": "female",
+ "company": "SOLGAN",
+ "email": "letaduke@solgan.com",
+ "phone": "+1 (918) 421-3087",
+ "address": "380 Cove Lane, Blanford, Alabama, 3732",
+ "about": "Culpa et laborum amet excepteur anim Lorem velit esse ea ad fugiat. Aliqua id nostrud amet est id Lorem qui incididunt nulla irure. Anim laborum voluptate anim proident sunt quis sint excepteur quis occaecat cillum consequat anim. Velit laborum aute nostrud culpa adipisicing et elit commodo ullamco ut officia quis.\r\n",
+ "registered": "2014-08-19T07:03:02 -02:00",
+ "latitude": 30.284702,
+ "longitude": 21.754729,
+ "tags": [
+ "magna",
+ "magna",
+ "aliquip",
+ "incididunt",
+ "commodo",
+ "et",
+ "reprehenderit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Gray Cooper"
+ },
+ {
+ "id": 1,
+ "name": "Lorie Jefferson"
+ },
+ {
+ "id": 2,
+ "name": "Patrica Hines"
+ }
+ ],
+ "greeting": "Hello, Leta Duke! You have 7 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af970174fda6a92168",
+ "index": 473,
+ "guid": "8f85ad01-01f5-4cd8-8f03-ab3ab6141950",
+ "isActive": true,
+ "balance": "$3,578.37",
+ "picture": "http://placehold.it/32x32",
+ "age": 21,
+ "eyeColor": "blue",
+ "name": "Shaffer Patton",
+ "gender": "male",
+ "company": "EXOSWITCH",
+ "email": "shafferpatton@exoswitch.com",
+ "phone": "+1 (959) 455-2307",
+ "address": "429 Alton Place, Tilleda, Illinois, 620",
+ "about": "Dolore minim culpa et est ea mollit laboris. Laborum magna sint elit sit. Incididunt sunt voluptate quis Lorem cupidatat incididunt ad culpa veniam. Ex nostrud adipisicing Lorem aute aliqua ea sint id anim. Esse officia cupidatat consectetur officia qui eiusmod commodo. Lorem duis sunt elit ea commodo nisi consectetur voluptate do deserunt.\r\n",
+ "registered": "2015-01-31T09:23:19 -01:00",
+ "latitude": 42.407019,
+ "longitude": 87.016634,
+ "tags": [
+ "aliqua",
+ "enim",
+ "labore",
+ "ut",
+ "nostrud",
+ "veniam",
+ "enim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Lila Kent"
+ },
+ {
+ "id": 1,
+ "name": "Christian Pace"
+ },
+ {
+ "id": 2,
+ "name": "Carney Nichols"
+ }
+ ],
+ "greeting": "Hello, Shaffer Patton! You have 5 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afed81eec94aebec77",
+ "index": 474,
+ "guid": "c08e53ea-0ece-49a4-adc7-b41941fd8f55",
+ "isActive": true,
+ "balance": "$2,404.00",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "green",
+ "name": "Kline Walters",
+ "gender": "male",
+ "company": "ISONUS",
+ "email": "klinewalters@isonus.com",
+ "phone": "+1 (803) 545-2040",
+ "address": "463 Gallatin Place, Glenbrook, Missouri, 4101",
+ "about": "Quis et aliquip dolor duis labore tempor nulla in elit. Adipisicing sint irure est non nostrud eu reprehenderit. Nulla nostrud id ad aliquip.\r\n",
+ "registered": "2014-04-13T20:45:33 -02:00",
+ "latitude": 16.785036,
+ "longitude": -74.693608,
+ "tags": [
+ "commodo",
+ "eu",
+ "occaecat",
+ "voluptate",
+ "ullamco",
+ "occaecat",
+ "qui"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Klein Woods"
+ },
+ {
+ "id": 1,
+ "name": "Rosario Deleon"
+ },
+ {
+ "id": 2,
+ "name": "Jasmine Sparks"
+ }
+ ],
+ "greeting": "Hello, Kline Walters! You have 1 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afbe69baa0b7450cae",
+ "index": 475,
+ "guid": "1ef52685-a0e6-4fd6-a0f4-6d26d4111536",
+ "isActive": true,
+ "balance": "$1,641.60",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "blue",
+ "name": "Tracey Harrell",
+ "gender": "female",
+ "company": "VALREDA",
+ "email": "traceyharrell@valreda.com",
+ "phone": "+1 (993) 479-3434",
+ "address": "375 Seton Place, Fedora, Oregon, 9452",
+ "about": "Lorem commodo commodo ut ullamco mollit. Cupidatat velit fugiat sunt eu culpa in do esse nostrud esse irure consectetur cillum. Est duis officia aliquip reprehenderit sit quis minim esse est. Aute in laboris adipisicing est nostrud. Mollit consectetur exercitation in officia enim exercitation excepteur pariatur magna culpa deserunt. Exercitation esse deserunt id ad tempor Lorem id magna in. Excepteur incididunt duis occaecat dolore qui enim tempor amet.\r\n",
+ "registered": "2014-12-20T04:44:52 -01:00",
+ "latitude": 82.146234,
+ "longitude": -46.631144,
+ "tags": [
+ "proident",
+ "culpa",
+ "laborum",
+ "deserunt",
+ "deserunt",
+ "qui",
+ "ad"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Wynn Ratliff"
+ },
+ {
+ "id": 1,
+ "name": "Lorrie Wallace"
+ },
+ {
+ "id": 2,
+ "name": "Pratt Swanson"
+ }
+ ],
+ "greeting": "Hello, Tracey Harrell! You have 4 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af02ae41ab3365596b",
+ "index": 476,
+ "guid": "0c5dfc24-e376-4d2c-a755-ad6873842949",
+ "isActive": true,
+ "balance": "$3,677.47",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "green",
+ "name": "Sykes Snyder",
+ "gender": "male",
+ "company": "PROFLEX",
+ "email": "sykessnyder@proflex.com",
+ "phone": "+1 (831) 416-2525",
+ "address": "319 Burnett Street, Keller, Federated States Of Micronesia, 1374",
+ "about": "Et voluptate irure duis veniam officia aute laborum. Id amet mollit sit laborum mollit Lorem ullamco adipisicing cillum aliqua ipsum eu cillum fugiat. Duis qui anim pariatur pariatur non exercitation commodo tempor nisi ipsum veniam sint.\r\n",
+ "registered": "2015-02-01T08:37:05 -01:00",
+ "latitude": -48.781157,
+ "longitude": 141.180748,
+ "tags": [
+ "qui",
+ "tempor",
+ "minim",
+ "qui",
+ "quis",
+ "ullamco",
+ "nostrud"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Oneil Donaldson"
+ },
+ {
+ "id": 1,
+ "name": "Tricia Vasquez"
+ },
+ {
+ "id": 2,
+ "name": "Mullen Pena"
+ }
+ ],
+ "greeting": "Hello, Sykes Snyder! You have 6 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afac2bd8cb5c2e9188",
+ "index": 477,
+ "guid": "acd56db0-be0e-4885-b239-516ca9874d67",
+ "isActive": false,
+ "balance": "$1,439.25",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "brown",
+ "name": "Callie Puckett",
+ "gender": "female",
+ "company": "ONTALITY",
+ "email": "calliepuckett@ontality.com",
+ "phone": "+1 (862) 513-2588",
+ "address": "652 Harwood Place, Riner, South Dakota, 276",
+ "about": "Ipsum incididunt veniam cillum dolor mollit voluptate adipisicing minim cupidatat aute eu dolor aliqua do. Consectetur voluptate culpa ut incididunt tempor sit eiusmod mollit in proident. Eu quis pariatur ullamco cillum nostrud commodo laborum aliquip quis sit. Exercitation qui eu ea adipisicing. Fugiat velit magna nostrud qui sunt nulla aliquip veniam Lorem.\r\n",
+ "registered": "2014-09-20T23:21:23 -02:00",
+ "latitude": -44.428595,
+ "longitude": 134.86061,
+ "tags": [
+ "consequat",
+ "in",
+ "officia",
+ "esse",
+ "do",
+ "reprehenderit",
+ "dolor"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Annabelle Carey"
+ },
+ {
+ "id": 1,
+ "name": "Lina Holmes"
+ },
+ {
+ "id": 2,
+ "name": "Autumn Kidd"
+ }
+ ],
+ "greeting": "Hello, Callie Puckett! You have 6 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af30da256d3888384b",
+ "index": 478,
+ "guid": "4eb408ce-3a74-402d-bff0-ed3347ba0edf",
+ "isActive": true,
+ "balance": "$3,233.72",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "brown",
+ "name": "Shirley Fulton",
+ "gender": "female",
+ "company": "ROBOID",
+ "email": "shirleyfulton@roboid.com",
+ "phone": "+1 (941) 420-3876",
+ "address": "465 Sunnyside Court, Homestead, Puerto Rico, 7732",
+ "about": "Adipisicing ea est nulla sint non. Elit cillum quis consequat eu tempor tempor consectetur quis occaecat sunt quis id qui. Minim ea ut eu do nostrud excepteur amet occaecat excepteur consequat velit. Laborum velit nulla est do proident Lorem irure fugiat proident Lorem non anim.\r\n",
+ "registered": "2015-03-04T00:03:40 -01:00",
+ "latitude": -58.091781,
+ "longitude": -84.031729,
+ "tags": [
+ "elit",
+ "ipsum",
+ "dolor",
+ "ad",
+ "velit",
+ "nulla",
+ "aliquip"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Sandy Ortiz"
+ },
+ {
+ "id": 1,
+ "name": "Gilliam Britt"
+ },
+ {
+ "id": 2,
+ "name": "Maryann Mclaughlin"
+ }
+ ],
+ "greeting": "Hello, Shirley Fulton! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af7960ea38a852de77",
+ "index": 479,
+ "guid": "282cb39c-1eab-4228-be22-2091b9dcaad1",
+ "isActive": true,
+ "balance": "$3,930.49",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "blue",
+ "name": "Amalia Norris",
+ "gender": "female",
+ "company": "ARCHITAX",
+ "email": "amalianorris@architax.com",
+ "phone": "+1 (882) 587-2333",
+ "address": "999 Noll Street, Ellerslie, Michigan, 768",
+ "about": "Ipsum amet nisi consectetur Lorem occaecat sint. Occaecat irure sint magna aliqua Lorem magna ad id magna tempor laboris. Cillum id reprehenderit tempor sint in nostrud Lorem cupidatat ullamco consectetur. Non consectetur labore excepteur consectetur nisi pariatur labore irure amet magna eu minim deserunt.\r\n",
+ "registered": "2014-06-05T14:50:15 -02:00",
+ "latitude": 8.148369,
+ "longitude": -150.120335,
+ "tags": [
+ "in",
+ "nulla",
+ "deserunt",
+ "sint",
+ "dolore",
+ "reprehenderit",
+ "proident"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Wiggins Schmidt"
+ },
+ {
+ "id": 1,
+ "name": "Obrien Hughes"
+ },
+ {
+ "id": 2,
+ "name": "Fry Wall"
+ }
+ ],
+ "greeting": "Hello, Amalia Norris! You have 8 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afb2e4d3027a6207f6",
+ "index": 480,
+ "guid": "eb0dae89-04a8-4f77-86f1-1e60cd60a306",
+ "isActive": true,
+ "balance": "$3,071.08",
+ "picture": "http://placehold.it/32x32",
+ "age": 26,
+ "eyeColor": "brown",
+ "name": "Graciela Talley",
+ "gender": "female",
+ "company": "DATACATOR",
+ "email": "gracielatalley@datacator.com",
+ "phone": "+1 (915) 510-3185",
+ "address": "147 Baughman Place, Dixie, Nebraska, 7912",
+ "about": "Irure adipisicing non voluptate anim sint quis pariatur cillum cupidatat laborum laborum dolore consectetur. Elit dolore irure aliquip dolor commodo duis commodo sint Lorem proident consequat. In reprehenderit sit laboris ipsum sint minim aliquip.\r\n",
+ "registered": "2015-04-15T09:40:37 -02:00",
+ "latitude": -47.334415,
+ "longitude": 151.226419,
+ "tags": [
+ "nulla",
+ "ut",
+ "dolor",
+ "nisi",
+ "anim",
+ "sunt",
+ "anim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Cervantes Weiss"
+ },
+ {
+ "id": 1,
+ "name": "John Lyons"
+ },
+ {
+ "id": 2,
+ "name": "Pearl Adkins"
+ }
+ ],
+ "greeting": "Hello, Graciela Talley! You have 4 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afb88e13a30e8691ef",
+ "index": 481,
+ "guid": "8a1e26fd-91f3-4012-84a3-d478b0a8fc7d",
+ "isActive": false,
+ "balance": "$3,782.42",
+ "picture": "http://placehold.it/32x32",
+ "age": 22,
+ "eyeColor": "green",
+ "name": "Gilda Mckenzie",
+ "gender": "female",
+ "company": "SONGBIRD",
+ "email": "gildamckenzie@songbird.com",
+ "phone": "+1 (859) 410-3728",
+ "address": "305 Cass Place, Enlow, Wyoming, 4280",
+ "about": "Consequat ea do ut anim cillum do esse mollit. Veniam proident reprehenderit laboris deserunt velit occaecat est qui. Proident ea elit ea ipsum elit tempor est consectetur tempor cillum. Ut pariatur quis cupidatat consectetur reprehenderit culpa irure exercitation labore proident magna.\r\n",
+ "registered": "2014-12-10T12:48:08 -01:00",
+ "latitude": 1.071684,
+ "longitude": -2.936903,
+ "tags": [
+ "velit",
+ "est",
+ "nostrud",
+ "culpa",
+ "elit",
+ "et",
+ "consequat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Alvarado Finley"
+ },
+ {
+ "id": 1,
+ "name": "Merle Downs"
+ },
+ {
+ "id": 2,
+ "name": "Ethel Waller"
+ }
+ ],
+ "greeting": "Hello, Gilda Mckenzie! You have 8 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af724fc32bcf49e3bb",
+ "index": 482,
+ "guid": "e7a7f51c-2b92-45d0-8b76-c3762e3f7ec0",
+ "isActive": false,
+ "balance": "$1,961.92",
+ "picture": "http://placehold.it/32x32",
+ "age": 22,
+ "eyeColor": "brown",
+ "name": "Mcguire Bishop",
+ "gender": "male",
+ "company": "EXOSPACE",
+ "email": "mcguirebishop@exospace.com",
+ "phone": "+1 (995) 599-3850",
+ "address": "550 Jamaica Avenue, Hobucken, California, 721",
+ "about": "Eu nisi consequat enim commodo. Ut cupidatat nisi do cupidatat anim eiusmod. Sint ut in labore laboris tempor veniam. Irure ea aliqua consequat dolor incididunt veniam id laboris sit. Ullamco qui officia cillum culpa. Tempor ex ea ullamco consequat aliquip elit. Occaecat eu adipisicing laboris deserunt minim non consequat exercitation id qui veniam eu adipisicing.\r\n",
+ "registered": "2014-04-04T15:39:15 -02:00",
+ "latitude": -83.429826,
+ "longitude": -132.848888,
+ "tags": [
+ "elit",
+ "reprehenderit",
+ "et",
+ "excepteur",
+ "Lorem",
+ "laborum",
+ "aliqua"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Barton Gonzalez"
+ },
+ {
+ "id": 1,
+ "name": "Butler Alston"
+ },
+ {
+ "id": 2,
+ "name": "Watson Bowman"
+ }
+ ],
+ "greeting": "Hello, Mcguire Bishop! You have 2 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afd2def2f853ba4561",
+ "index": 483,
+ "guid": "4c755b6f-f9bc-4baf-b039-1b142e9faad5",
+ "isActive": true,
+ "balance": "$3,006.07",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "green",
+ "name": "Adeline Tyler",
+ "gender": "female",
+ "company": "KINETICUT",
+ "email": "adelinetyler@kineticut.com",
+ "phone": "+1 (859) 427-2136",
+ "address": "825 Montgomery Place, Muse, Indiana, 2758",
+ "about": "Eiusmod exercitation incididunt id tempor in nulla adipisicing ut non nulla in. Est quis ea elit cupidatat mollit cupidatat. Consequat ad dolore ad officia culpa officia commodo consectetur non eu magna. Velit minim aute et ex adipisicing esse fugiat aliqua anim. Labore incididunt labore sunt minim cupidatat Lorem veniam duis ea. Incididunt sit sit ad ea commodo officia excepteur excepteur. Officia quis minim minim qui.\r\n",
+ "registered": "2014-03-11T14:29:53 -01:00",
+ "latitude": 54.083461,
+ "longitude": -54.600233,
+ "tags": [
+ "labore",
+ "cupidatat",
+ "ut",
+ "adipisicing",
+ "excepteur",
+ "fugiat",
+ "cillum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Paulette Mcfadden"
+ },
+ {
+ "id": 1,
+ "name": "Delaney Roach"
+ },
+ {
+ "id": 2,
+ "name": "Gomez Alvarez"
+ }
+ ],
+ "greeting": "Hello, Adeline Tyler! You have 10 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afc6a7a362c3266a8d",
+ "index": 484,
+ "guid": "c252bfe3-0c94-4fd6-968f-ecb564f33cf0",
+ "isActive": true,
+ "balance": "$2,300.12",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "brown",
+ "name": "Tracie Roberson",
+ "gender": "female",
+ "company": "SHOPABOUT",
+ "email": "tracieroberson@shopabout.com",
+ "phone": "+1 (947) 570-3977",
+ "address": "207 Matthews Court, Bainbridge, Palau, 3361",
+ "about": "Deserunt laborum qui incididunt tempor. Officia minim mollit labore excepteur. Quis laborum reprehenderit commodo do consectetur sit reprehenderit esse. Laboris aute sit id consectetur minim. Ea in minim nulla duis veniam voluptate nostrud et magna ex. Ipsum reprehenderit quis minim laboris aute.\r\n",
+ "registered": "2015-02-16T22:05:56 -01:00",
+ "latitude": 7.134492,
+ "longitude": 76.290043,
+ "tags": [
+ "velit",
+ "velit",
+ "ex",
+ "incididunt",
+ "quis",
+ "eu",
+ "magna"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Nona Wise"
+ },
+ {
+ "id": 1,
+ "name": "Mae Bauer"
+ },
+ {
+ "id": 2,
+ "name": "Ora Lowe"
+ }
+ ],
+ "greeting": "Hello, Tracie Roberson! You have 10 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afeb4e262d3fff3b58",
+ "index": 485,
+ "guid": "04b019ae-7984-401d-8d63-ca34e0d83eb3",
+ "isActive": true,
+ "balance": "$3,486.26",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "brown",
+ "name": "Mason Landry",
+ "gender": "male",
+ "company": "DRAGBOT",
+ "email": "masonlandry@dragbot.com",
+ "phone": "+1 (841) 462-2191",
+ "address": "965 Belvidere Street, Bayview, Northern Mariana Islands, 2960",
+ "about": "Deserunt laborum ut proident laboris aliqua Lorem laboris irure. Eu laborum fugiat amet nulla mollit consequat ipsum do adipisicing ad eiusmod reprehenderit. Ipsum veniam nisi commodo ut mollit consectetur laboris dolore mollit. Dolore adipisicing dolor cillum anim sit quis qui nostrud ipsum. Minim exercitation do do in anim.\r\n",
+ "registered": "2014-06-14T13:52:19 -02:00",
+ "latitude": -13.174927,
+ "longitude": -49.366551,
+ "tags": [
+ "minim",
+ "Lorem",
+ "velit",
+ "elit",
+ "sunt",
+ "aute",
+ "sit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Rachelle Hess"
+ },
+ {
+ "id": 1,
+ "name": "Rosalie Perez"
+ },
+ {
+ "id": 2,
+ "name": "Delia Simon"
+ }
+ ],
+ "greeting": "Hello, Mason Landry! You have 1 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af99d0fec74bc06b93",
+ "index": 486,
+ "guid": "47b6c1bd-0930-46f4-b722-0063c7a4e8ec",
+ "isActive": false,
+ "balance": "$2,147.48",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "brown",
+ "name": "Jamie Holder",
+ "gender": "female",
+ "company": "ISOTERNIA",
+ "email": "jamieholder@isoternia.com",
+ "phone": "+1 (839) 413-3857",
+ "address": "662 Ferris Street, Cumminsville, Washington, 5815",
+ "about": "Exercitation incididunt amet qui aute ut amet fugiat fugiat quis. Laboris reprehenderit do pariatur voluptate. Enim eiusmod amet amet commodo magna ea pariatur. Aliqua ea minim velit consectetur culpa excepteur.\r\n",
+ "registered": "2014-04-18T19:38:11 -02:00",
+ "latitude": 31.54975,
+ "longitude": -164.275953,
+ "tags": [
+ "labore",
+ "consectetur",
+ "fugiat",
+ "est",
+ "adipisicing",
+ "duis",
+ "elit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Tammi Flynn"
+ },
+ {
+ "id": 1,
+ "name": "Berger James"
+ },
+ {
+ "id": 2,
+ "name": "Meyers Washington"
+ }
+ ],
+ "greeting": "Hello, Jamie Holder! You have 8 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af51dc22bf896ffce3",
+ "index": 487,
+ "guid": "8d8773d1-6945-4af3-ba2f-a4b737cf658b",
+ "isActive": true,
+ "balance": "$1,592.24",
+ "picture": "http://placehold.it/32x32",
+ "age": 28,
+ "eyeColor": "brown",
+ "name": "Penelope Howard",
+ "gender": "female",
+ "company": "TERSANKI",
+ "email": "penelopehoward@tersanki.com",
+ "phone": "+1 (870) 584-3909",
+ "address": "261 Fillmore Avenue, Harviell, Massachusetts, 7509",
+ "about": "Consequat aute aliqua tempor sunt do ipsum mollit voluptate aliqua. Duis sit elit pariatur incididunt ullamco. Cillum anim reprehenderit laboris magna ipsum. Magna adipisicing minim ea fugiat reprehenderit eu cupidatat. Labore minim consequat anim dolore ad minim sint ex non esse. Nulla officia dolore non aliqua voluptate duis elit eu exercitation pariatur velit eiusmod velit et.\r\n",
+ "registered": "2014-07-19T10:18:13 -02:00",
+ "latitude": 65.332626,
+ "longitude": -171.898181,
+ "tags": [
+ "officia",
+ "voluptate",
+ "anim",
+ "elit",
+ "culpa",
+ "nulla",
+ "excepteur"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Kristina Solomon"
+ },
+ {
+ "id": 1,
+ "name": "Lindsey Stephens"
+ },
+ {
+ "id": 2,
+ "name": "Valdez Strickland"
+ }
+ ],
+ "greeting": "Hello, Penelope Howard! You have 10 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afd235e66064388ef2",
+ "index": 488,
+ "guid": "1474c1a4-58c0-4720-8743-f67b4d10dce8",
+ "isActive": false,
+ "balance": "$2,730.17",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "blue",
+ "name": "Summer Barry",
+ "gender": "female",
+ "company": "SLOGANAUT",
+ "email": "summerbarry@sloganaut.com",
+ "phone": "+1 (942) 461-3041",
+ "address": "427 Central Avenue, Freeburn, Tennessee, 9348",
+ "about": "Aute aliqua culpa incididunt nulla cillum nostrud culpa pariatur aliquip irure irure. Ea magna ex mollit excepteur deserunt eiusmod exercitation laborum commodo. Cillum et ad Lorem ex nisi tempor labore duis do quis. Irure irure ullamco anim deserunt excepteur magna nulla velit cillum ad laborum irure. Ad ex minim amet id reprehenderit eiusmod veniam sit occaecat deserunt anim dolore culpa non.\r\n",
+ "registered": "2014-12-09T03:13:32 -01:00",
+ "latitude": -44.390564,
+ "longitude": -1.276703,
+ "tags": [
+ "velit",
+ "excepteur",
+ "labore",
+ "sint",
+ "nisi",
+ "fugiat",
+ "incididunt"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Ester Mccoy"
+ },
+ {
+ "id": 1,
+ "name": "Sosa Baldwin"
+ },
+ {
+ "id": 2,
+ "name": "Boyer Lang"
+ }
+ ],
+ "greeting": "Hello, Summer Barry! You have 5 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afb9fb66e296dd0691",
+ "index": 489,
+ "guid": "44bb4f4e-233e-417c-8ffa-9a5c13310782",
+ "isActive": false,
+ "balance": "$3,688.82",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "brown",
+ "name": "Mcdowell Wynn",
+ "gender": "male",
+ "company": "MATRIXITY",
+ "email": "mcdowellwynn@matrixity.com",
+ "phone": "+1 (813) 567-3870",
+ "address": "444 Battery Avenue, Gambrills, Wisconsin, 3989",
+ "about": "Duis voluptate pariatur veniam commodo do quis est duis. Sunt exercitation quis eiusmod ad tempor dolor ad excepteur quis ut ea est consectetur aliqua. Ad ullamco elit sunt incididunt pariatur. Velit deserunt nostrud ullamco velit eu id. Magna laborum ea qui officia reprehenderit cupidatat sunt ullamco. Aute voluptate velit irure proident excepteur do esse est est aute nisi consectetur.\r\n",
+ "registered": "2015-03-06T10:14:25 -01:00",
+ "latitude": -43.862712,
+ "longitude": 51.763568,
+ "tags": [
+ "id",
+ "Lorem",
+ "dolore",
+ "sit",
+ "eu",
+ "aliquip",
+ "culpa"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Randi Burns"
+ },
+ {
+ "id": 1,
+ "name": "Martin Key"
+ },
+ {
+ "id": 2,
+ "name": "Gay Fernandez"
+ }
+ ],
+ "greeting": "Hello, Mcdowell Wynn! You have 7 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af820222fa0c9ce506",
+ "index": 490,
+ "guid": "8c4a35ff-430d-41a1-9a1e-6c86f8a24733",
+ "isActive": false,
+ "balance": "$1,356.96",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "blue",
+ "name": "Dickson Henderson",
+ "gender": "male",
+ "company": "ZANILLA",
+ "email": "dicksonhenderson@zanilla.com",
+ "phone": "+1 (847) 463-2065",
+ "address": "761 Cropsey Avenue, Wright, Delaware, 6500",
+ "about": "Occaecat cillum tempor in anim dolor culpa in eiusmod ex aliquip commodo eu eiusmod occaecat. Exercitation eiusmod ea occaecat cupidatat nulla nostrud proident proident magna do consectetur pariatur. Officia quis aliqua deserunt commodo commodo ea mollit sit.\r\n",
+ "registered": "2014-03-20T04:28:21 -01:00",
+ "latitude": 36.673659,
+ "longitude": -38.473736,
+ "tags": [
+ "duis",
+ "dolor",
+ "ut",
+ "est",
+ "cillum",
+ "velit",
+ "ipsum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Jacobson Travis"
+ },
+ {
+ "id": 1,
+ "name": "Dale Walton"
+ },
+ {
+ "id": 2,
+ "name": "Carol Lucas"
+ }
+ ],
+ "greeting": "Hello, Dickson Henderson! You have 4 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af2fbb6867cff1800b",
+ "index": 491,
+ "guid": "cd60c840-7507-47cf-8802-05827985084b",
+ "isActive": true,
+ "balance": "$1,804.33",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "brown",
+ "name": "Mercedes Reid",
+ "gender": "female",
+ "company": "PYRAMIA",
+ "email": "mercedesreid@pyramia.com",
+ "phone": "+1 (982) 414-2975",
+ "address": "191 Vermont Street, Manitou, American Samoa, 6328",
+ "about": "Dolore voluptate proident pariatur esse dolore consectetur sit aliqua. Excepteur sunt reprehenderit excepteur esse consequat incididunt. Incididunt non eu excepteur quis esse anim culpa ullamco velit cupidatat cillum sit. Consectetur in incididunt culpa Lorem tempor laboris amet proident occaecat eiusmod enim deserunt. Aliquip sunt nisi ipsum amet sint mollit velit enim laboris.\r\n",
+ "registered": "2014-02-10T07:30:55 -01:00",
+ "latitude": -54.033292,
+ "longitude": 59.997076,
+ "tags": [
+ "sit",
+ "dolor",
+ "eiusmod",
+ "proident",
+ "cillum",
+ "id",
+ "esse"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Bridges Cohen"
+ },
+ {
+ "id": 1,
+ "name": "Love Leonard"
+ },
+ {
+ "id": 2,
+ "name": "Benton Case"
+ }
+ ],
+ "greeting": "Hello, Mercedes Reid! You have 1 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afb75cc9fe17de54ea",
+ "index": 492,
+ "guid": "fa94b1af-bb57-4e9b-83d2-f4a20c2cb4ce",
+ "isActive": false,
+ "balance": "$3,077.06",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "brown",
+ "name": "Summers Green",
+ "gender": "male",
+ "company": "SULFAX",
+ "email": "summersgreen@sulfax.com",
+ "phone": "+1 (807) 463-3551",
+ "address": "755 Sutton Street, Osage, Ohio, 7544",
+ "about": "Excepteur non amet cupidatat nostrud id tempor qui velit sint. Ex culpa adipisicing aliquip aliquip velit cupidatat velit laborum dolor Lorem ex officia aliqua. Occaecat fugiat voluptate reprehenderit adipisicing. Elit exercitation eu duis dolore enim Lorem commodo eu magna nisi ipsum nostrud do.\r\n",
+ "registered": "2014-03-22T22:42:16 -01:00",
+ "latitude": -45.937616,
+ "longitude": -15.597617,
+ "tags": [
+ "nulla",
+ "aute",
+ "velit",
+ "qui",
+ "eiusmod",
+ "veniam",
+ "occaecat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Tamera Henry"
+ },
+ {
+ "id": 1,
+ "name": "Janis Knapp"
+ },
+ {
+ "id": 2,
+ "name": "Lakisha Black"
+ }
+ ],
+ "greeting": "Hello, Summers Green! You have 2 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af949e68c4f4b2c7a1",
+ "index": 493,
+ "guid": "79cd9dee-7e87-4fe5-ab8f-417bce14c2a5",
+ "isActive": false,
+ "balance": "$3,560.97",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "blue",
+ "name": "Janice Leon",
+ "gender": "female",
+ "company": "BALUBA",
+ "email": "janiceleon@baluba.com",
+ "phone": "+1 (977) 515-2468",
+ "address": "988 Chase Court, Dragoon, Louisiana, 4226",
+ "about": "Excepteur aliqua deserunt amet tempor sint reprehenderit dolor irure culpa tempor ad aliquip. Enim adipisicing exercitation excepteur amet id culpa proident dolore esse quis. Veniam deserunt velit Lorem id. Voluptate occaecat deserunt tempor commodo culpa laborum aute esse irure proident sint culpa.\r\n",
+ "registered": "2014-06-07T20:15:34 -02:00",
+ "latitude": 71.458691,
+ "longitude": 101.668415,
+ "tags": [
+ "anim",
+ "ex",
+ "exercitation",
+ "quis",
+ "officia",
+ "nulla",
+ "nulla"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Mattie Collins"
+ },
+ {
+ "id": 1,
+ "name": "Schneider Chandler"
+ },
+ {
+ "id": 2,
+ "name": "Burch Sampson"
+ }
+ ],
+ "greeting": "Hello, Janice Leon! You have 9 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af430678f9935708a7",
+ "index": 494,
+ "guid": "28a64f86-eede-4956-b8f0-c967b78d7750",
+ "isActive": true,
+ "balance": "$1,517.07",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "green",
+ "name": "Vivian Lindsey",
+ "gender": "female",
+ "company": "MOBILDATA",
+ "email": "vivianlindsey@mobildata.com",
+ "phone": "+1 (820) 435-2562",
+ "address": "401 Campus Road, Coldiron, Idaho, 5023",
+ "about": "Veniam aute aute et laborum minim elit ullamco. Eu excepteur et et officia ullamco aliqua adipisicing incididunt veniam est in nisi dolor cillum. Consequat qui eu irure ex excepteur Lorem ad officia dolor amet. Ad ut culpa adipisicing in.\r\n",
+ "registered": "2015-03-22T02:47:24 -01:00",
+ "latitude": 58.98551,
+ "longitude": -46.750379,
+ "tags": [
+ "nostrud",
+ "eu",
+ "anim",
+ "cillum",
+ "minim",
+ "cillum",
+ "est"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Knapp Ashley"
+ },
+ {
+ "id": 1,
+ "name": "Howard Bell"
+ },
+ {
+ "id": 2,
+ "name": "Sexton Robbins"
+ }
+ ],
+ "greeting": "Hello, Vivian Lindsey! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afeb44497295fe7cd8",
+ "index": 495,
+ "guid": "7a899004-fba9-4753-868f-b60efa9e9364",
+ "isActive": true,
+ "balance": "$3,712.94",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "green",
+ "name": "Susan Abbott",
+ "gender": "female",
+ "company": "EMERGENT",
+ "email": "susanabbott@emergent.com",
+ "phone": "+1 (973) 480-2345",
+ "address": "523 Sullivan Street, Bethany, New Hampshire, 4287",
+ "about": "Commodo amet nostrud exercitation culpa consectetur mollit irure veniam sunt nostrud dolor qui ex. Pariatur incididunt ullamco nostrud aute. Ipsum reprehenderit Lorem officia mollit pariatur labore. Deserunt ullamco laborum qui enim amet occaecat tempor quis aliqua excepteur irure incididunt veniam qui. Non nulla nulla ad culpa minim.\r\n",
+ "registered": "2014-05-08T10:15:33 -02:00",
+ "latitude": -68.789962,
+ "longitude": 6.625069,
+ "tags": [
+ "qui",
+ "laboris",
+ "sit",
+ "culpa",
+ "cillum",
+ "nulla",
+ "non"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Sears Carlson"
+ },
+ {
+ "id": 1,
+ "name": "Celia Owens"
+ },
+ {
+ "id": 2,
+ "name": "Evelyn Haley"
+ }
+ ],
+ "greeting": "Hello, Susan Abbott! You have 2 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af6e7834ca0a85f1bc",
+ "index": 496,
+ "guid": "4dbe236b-fc66-49d8-8dcf-5b7e849e50eb",
+ "isActive": true,
+ "balance": "$2,945.26",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "green",
+ "name": "Amy Hebert",
+ "gender": "female",
+ "company": "XPLOR",
+ "email": "amyhebert@xplor.com",
+ "phone": "+1 (837) 556-3862",
+ "address": "225 Knickerbocker Avenue, Carlton, Maine, 7919",
+ "about": "Consectetur magna ullamco aliqua pariatur. Est duis non voluptate labore labore velit nisi non laboris culpa ullamco. Do et pariatur occaecat quis eiusmod aute sit commodo incididunt enim non anim sint.\r\n",
+ "registered": "2014-10-04T07:28:47 -02:00",
+ "latitude": 46.091269,
+ "longitude": 136.498819,
+ "tags": [
+ "duis",
+ "labore",
+ "consequat",
+ "labore",
+ "sint",
+ "ipsum",
+ "adipisicing"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Kemp Mercado"
+ },
+ {
+ "id": 1,
+ "name": "Conrad Russo"
+ },
+ {
+ "id": 2,
+ "name": "Preston Durham"
+ }
+ ],
+ "greeting": "Hello, Amy Hebert! You have 7 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af38a4aaaf95eaa52a",
+ "index": 497,
+ "guid": "0aeda30f-eb62-4cf7-8952-0e6e3bc3a081",
+ "isActive": true,
+ "balance": "$3,681.82",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "brown",
+ "name": "Kimberley Kirby",
+ "gender": "female",
+ "company": "ZILLAR",
+ "email": "kimberleykirby@zillar.com",
+ "phone": "+1 (969) 434-3800",
+ "address": "605 Story Street, Lorraine, Utah, 5980",
+ "about": "Commodo consectetur elit duis id nulla magna cillum cupidatat. Irure mollit cillum do sunt dolor commodo aliquip cupidatat enim elit. Aute dolore nostrud sint ut ipsum esse tempor Lorem voluptate. Laboris proident culpa sit laborum mollit aute et cupidatat enim ipsum sint elit consectetur irure. Consectetur dolor do ad do ut eu.\r\n",
+ "registered": "2015-03-08T02:32:09 -01:00",
+ "latitude": -30.662678,
+ "longitude": 126.753153,
+ "tags": [
+ "cillum",
+ "occaecat",
+ "dolore",
+ "et",
+ "nostrud",
+ "culpa",
+ "fugiat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Harvey Barker"
+ },
+ {
+ "id": 1,
+ "name": "Fowler Reeves"
+ },
+ {
+ "id": 2,
+ "name": "Leann Marsh"
+ }
+ ],
+ "greeting": "Hello, Kimberley Kirby! You have 8 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af20d95fe7228920df",
+ "index": 498,
+ "guid": "756a007e-c249-4fa4-9b72-7affad9eba10",
+ "isActive": true,
+ "balance": "$1,189.53",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "blue",
+ "name": "Magdalena Matthews",
+ "gender": "female",
+ "company": "INTERGEEK",
+ "email": "magdalenamatthews@intergeek.com",
+ "phone": "+1 (822) 566-3402",
+ "address": "554 Sapphire Street, Hannasville, West Virginia, 1902",
+ "about": "Pariatur proident deserunt irure sunt quis aute occaecat commodo nulla. Amet ipsum ipsum incididunt deserunt officia reprehenderit reprehenderit consequat dolor ea mollit ut consequat labore. Aute est id velit laboris sint aute nisi. Est quis deserunt culpa commodo do ut et qui cupidatat minim voluptate quis id reprehenderit.\r\n",
+ "registered": "2014-05-18T10:37:28 -02:00",
+ "latitude": 86.39645,
+ "longitude": 126.494575,
+ "tags": [
+ "esse",
+ "exercitation",
+ "elit",
+ "do",
+ "ea",
+ "velit",
+ "veniam"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Karin Gibson"
+ },
+ {
+ "id": 1,
+ "name": "Huber Suarez"
+ },
+ {
+ "id": 2,
+ "name": "Sheena Clark"
+ }
+ ],
+ "greeting": "Hello, Magdalena Matthews! You have 2 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afd2c9e203a12e96e8",
+ "index": 499,
+ "guid": "e5897230-3f33-4ccf-b26e-98b13cb0efd7",
+ "isActive": false,
+ "balance": "$2,383.35",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "blue",
+ "name": "Reba Morin",
+ "gender": "female",
+ "company": "NIXELT",
+ "email": "rebamorin@nixelt.com",
+ "phone": "+1 (945) 556-2429",
+ "address": "881 Chester Street, Orick, Virginia, 2179",
+ "about": "Laboris eu esse aliquip officia eiusmod consectetur Lorem eiusmod fugiat adipisicing. Ad incididunt minim veniam laborum incididunt consequat est consequat adipisicing Lorem. In consectetur id reprehenderit aliqua irure consectetur officia sint. Esse aute occaecat sint in.\r\n",
+ "registered": "2014-05-08T14:30:19 -02:00",
+ "latitude": 32.778963,
+ "longitude": -69.498136,
+ "tags": [
+ "ex",
+ "magna",
+ "dolor",
+ "anim",
+ "est",
+ "fugiat",
+ "culpa"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Vargas Fischer"
+ },
+ {
+ "id": 1,
+ "name": "Moss Cherry"
+ },
+ {
+ "id": 2,
+ "name": "Alice Sloan"
+ }
+ ],
+ "greeting": "Hello, Reba Morin! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af83fd052e0e65adf8",
+ "index": 500,
+ "guid": "99d46797-a211-41db-b02a-2513f98439b7",
+ "isActive": true,
+ "balance": "$2,090.18",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "green",
+ "name": "Hunt Montoya",
+ "gender": "male",
+ "company": "ISOLOGICS",
+ "email": "huntmontoya@isologics.com",
+ "phone": "+1 (805) 518-2427",
+ "address": "673 Royce Place, Greensburg, Florida, 6563",
+ "about": "Voluptate ex incididunt labore sint quis. Nulla elit sunt consectetur dolore commodo. Adipisicing sint aliquip non aliqua et commodo adipisicing pariatur exercitation incididunt commodo sunt culpa. Aute do irure nisi est in occaecat ipsum aliqua ea laborum amet officia.\r\n",
+ "registered": "2014-05-29T18:20:08 -02:00",
+ "latitude": -7.19493,
+ "longitude": -78.73662,
+ "tags": [
+ "Lorem",
+ "non",
+ "fugiat",
+ "aliqua",
+ "est",
+ "amet",
+ "eu"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Chapman Sears"
+ },
+ {
+ "id": 1,
+ "name": "Gregory Hickman"
+ },
+ {
+ "id": 2,
+ "name": "Krystal Hurst"
+ }
+ ],
+ "greeting": "Hello, Hunt Montoya! You have 1 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03affb46ac9e86d1c41e",
+ "index": 501,
+ "guid": "257ac905-f6cf-4b5e-926f-207aba275592",
+ "isActive": false,
+ "balance": "$3,686.97",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "green",
+ "name": "Mildred Mcmahon",
+ "gender": "female",
+ "company": "KONGLE",
+ "email": "mildredmcmahon@kongle.com",
+ "phone": "+1 (855) 534-2759",
+ "address": "591 Louis Place, Skyland, Texas, 1380",
+ "about": "Fugiat exercitation dolor irure aliqua aute veniam. Excepteur adipisicing eu dolore eu sunt. Eiusmod pariatur non excepteur magna commodo commodo excepteur nostrud in. Adipisicing laborum excepteur proident consectetur nostrud cupidatat id reprehenderit aliqua Lorem.\r\n",
+ "registered": "2014-02-22T06:31:27 -01:00",
+ "latitude": 26.837913,
+ "longitude": -112.30922,
+ "tags": [
+ "consectetur",
+ "amet",
+ "laborum",
+ "deserunt",
+ "ex",
+ "magna",
+ "ipsum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Justice Romero"
+ },
+ {
+ "id": 1,
+ "name": "Betty Mcdowell"
+ },
+ {
+ "id": 2,
+ "name": "Salinas Sherman"
+ }
+ ],
+ "greeting": "Hello, Mildred Mcmahon! You have 2 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03aff59afdafbf95328b",
+ "index": 502,
+ "guid": "e432b4fd-f20c-405e-896d-91b7e8ae0c74",
+ "isActive": false,
+ "balance": "$2,931.54",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "blue",
+ "name": "Carlene Melendez",
+ "gender": "female",
+ "company": "PROXSOFT",
+ "email": "carlenemelendez@proxsoft.com",
+ "phone": "+1 (967) 592-3955",
+ "address": "945 Ford Street, Wescosville, Guam, 8850",
+ "about": "Irure dolor et sit cupidatat sit reprehenderit commodo proident dolore qui aute quis ad labore. Enim laborum enim sint dolor cillum sint officia pariatur ad. Do reprehenderit nostrud commodo excepteur et ea.\r\n",
+ "registered": "2014-01-18T09:06:30 -01:00",
+ "latitude": 59.625473,
+ "longitude": -98.15734,
+ "tags": [
+ "culpa",
+ "adipisicing",
+ "reprehenderit",
+ "commodo",
+ "tempor",
+ "minim",
+ "exercitation"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Cantu York"
+ },
+ {
+ "id": 1,
+ "name": "Pittman Haynes"
+ },
+ {
+ "id": 2,
+ "name": "Dixon Zamora"
+ }
+ ],
+ "greeting": "Hello, Carlene Melendez! You have 10 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af2e4cacb1759bb972",
+ "index": 503,
+ "guid": "d0fc46b3-1619-4219-b8bc-98b0d54ca3a4",
+ "isActive": true,
+ "balance": "$1,200.66",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "brown",
+ "name": "Mabel Schwartz",
+ "gender": "female",
+ "company": "LOTRON",
+ "email": "mabelschwartz@lotron.com",
+ "phone": "+1 (857) 418-2047",
+ "address": "757 Cumberland Street, Bangor, Alaska, 1135",
+ "about": "Consectetur amet nostrud ullamco dolore aliqua aliquip culpa irure dolor. Velit velit labore nulla qui tempor nostrud non tempor. Magna deserunt irure anim excepteur ad ut velit magna commodo duis duis ut. Aliqua aute dolor pariatur esse velit in occaecat quis aliqua in fugiat anim. In culpa do et et quis consequat adipisicing. Id amet eiusmod laborum dolore ex cillum nostrud et mollit voluptate incididunt ipsum ullamco. Aliquip esse deserunt labore veniam irure laborum sint tempor Lorem tempor adipisicing deserunt reprehenderit.\r\n",
+ "registered": "2014-12-02T06:55:20 -01:00",
+ "latitude": -29.53192,
+ "longitude": 133.166935,
+ "tags": [
+ "exercitation",
+ "voluptate",
+ "cillum",
+ "fugiat",
+ "enim",
+ "ullamco",
+ "consectetur"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Flossie Stevenson"
+ },
+ {
+ "id": 1,
+ "name": "Mueller Ball"
+ },
+ {
+ "id": 2,
+ "name": "Clara Jennings"
+ }
+ ],
+ "greeting": "Hello, Mabel Schwartz! You have 5 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afa9ae3402121f9c2a",
+ "index": 504,
+ "guid": "bb2d6e31-34ea-46f5-bd52-3e9582e6d2d9",
+ "isActive": true,
+ "balance": "$3,506.53",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "blue",
+ "name": "Campos Ryan",
+ "gender": "male",
+ "company": "SKYBOLD",
+ "email": "camposryan@skybold.com",
+ "phone": "+1 (806) 478-2131",
+ "address": "624 Imlay Street, Aguila, District Of Columbia, 557",
+ "about": "Elit non ullamco laborum nulla nostrud nulla. Cillum cillum ut qui eu duis sit deserunt eu pariatur. Laboris nostrud occaecat aute sit. Irure dolor in eu ea officia velit incididunt mollit deserunt ut voluptate cillum.\r\n",
+ "registered": "2015-01-17T18:44:35 -01:00",
+ "latitude": -73.156371,
+ "longitude": -97.337175,
+ "tags": [
+ "veniam",
+ "officia",
+ "sint",
+ "veniam",
+ "magna",
+ "ea",
+ "culpa"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Rena Jensen"
+ },
+ {
+ "id": 1,
+ "name": "Kay Jackson"
+ },
+ {
+ "id": 2,
+ "name": "Booker Kramer"
+ }
+ ],
+ "greeting": "Hello, Campos Ryan! You have 10 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af6c39c9c1d490010f",
+ "index": 505,
+ "guid": "3515ea6b-92ed-4398-a62e-1f0180ad8a12",
+ "isActive": false,
+ "balance": "$3,324.70",
+ "picture": "http://placehold.it/32x32",
+ "age": 26,
+ "eyeColor": "green",
+ "name": "Rachael Nicholson",
+ "gender": "female",
+ "company": "ORONOKO",
+ "email": "rachaelnicholson@oronoko.com",
+ "phone": "+1 (987) 540-2659",
+ "address": "118 Bay Avenue, Snowville, New York, 6751",
+ "about": "Qui ut velit exercitation qui exercitation amet aliquip. Consectetur elit culpa proident commodo culpa. Veniam officia veniam magna ad quis mollit ad exercitation tempor ullamco aliquip. Et consectetur dolor veniam id ex. Deserunt minim magna sint irure elit ullamco commodo eiusmod aliqua. Esse ad fugiat nisi laborum et. Quis in labore consectetur in sunt officia non ullamco esse reprehenderit exercitation minim quis.\r\n",
+ "registered": "2015-02-06T19:26:41 -01:00",
+ "latitude": 23.938955,
+ "longitude": 131.623452,
+ "tags": [
+ "do",
+ "nostrud",
+ "consectetur",
+ "esse",
+ "voluptate",
+ "duis",
+ "quis"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Aurora Rodriquez"
+ },
+ {
+ "id": 1,
+ "name": "Riggs Gilliam"
+ },
+ {
+ "id": 2,
+ "name": "Coleen Irwin"
+ }
+ ],
+ "greeting": "Hello, Rachael Nicholson! You have 9 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af14b724a7d4ed9074",
+ "index": 506,
+ "guid": "bea3ca2a-32da-4d91-8d06-915cd0e79384",
+ "isActive": true,
+ "balance": "$1,033.43",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "blue",
+ "name": "Kramer Martin",
+ "gender": "male",
+ "company": "CONCILITY",
+ "email": "kramermartin@concility.com",
+ "phone": "+1 (899) 474-3992",
+ "address": "543 Canda Avenue, Rossmore, North Carolina, 4984",
+ "about": "Ipsum elit ex elit ex. Deserunt minim labore consectetur minim consequat. Dolor consequat voluptate eu mollit non sunt aute. Mollit ipsum id id pariatur irure laboris cupidatat et eiusmod non. Et tempor dolore mollit occaecat fugiat. Consectetur esse pariatur cupidatat sint laborum magna do nisi. Consectetur voluptate excepteur elit non minim ex non reprehenderit Lorem dolor sint.\r\n",
+ "registered": "2015-02-24T18:34:25 -01:00",
+ "latitude": -17.814104,
+ "longitude": 121.714221,
+ "tags": [
+ "reprehenderit",
+ "do",
+ "eu",
+ "pariatur",
+ "do",
+ "nostrud",
+ "nostrud"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Polly Dickerson"
+ },
+ {
+ "id": 1,
+ "name": "Wooten Gentry"
+ },
+ {
+ "id": 2,
+ "name": "Mitchell Little"
+ }
+ ],
+ "greeting": "Hello, Kramer Martin! You have 2 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af3ecd5298854e268b",
+ "index": 507,
+ "guid": "c8e0e09a-9a2a-47e7-aced-d6bb9b00d0cf",
+ "isActive": true,
+ "balance": "$1,301.07",
+ "picture": "http://placehold.it/32x32",
+ "age": 32,
+ "eyeColor": "brown",
+ "name": "Parker Saunders",
+ "gender": "male",
+ "company": "TECHMANIA",
+ "email": "parkersaunders@techmania.com",
+ "phone": "+1 (938) 570-3584",
+ "address": "100 Ocean Parkway, Nescatunga, Connecticut, 6541",
+ "about": "Ipsum enim deserunt dolore veniam commodo non sunt ullamco amet minim. Dolore fugiat tempor labore nisi mollit tempor. Magna duis ea pariatur fugiat officia commodo sint amet voluptate anim excepteur elit sunt laborum. Ex sunt fugiat laboris aliquip veniam veniam non sunt do duis mollit pariatur ex do.\r\n",
+ "registered": "2014-12-30T17:43:48 -01:00",
+ "latitude": -28.516041,
+ "longitude": 64.474845,
+ "tags": [
+ "commodo",
+ "duis",
+ "do",
+ "anim",
+ "mollit",
+ "fugiat",
+ "reprehenderit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Maureen Charles"
+ },
+ {
+ "id": 1,
+ "name": "Mcconnell Tillman"
+ },
+ {
+ "id": 2,
+ "name": "Travis Moore"
+ }
+ ],
+ "greeting": "Hello, Parker Saunders! You have 5 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afb44be4befb62576f",
+ "index": 508,
+ "guid": "afbd89ed-565f-4ffa-a945-44a0ebaec355",
+ "isActive": true,
+ "balance": "$1,802.00",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "blue",
+ "name": "Shannon Michael",
+ "gender": "male",
+ "company": "GINKLE",
+ "email": "shannonmichael@ginkle.com",
+ "phone": "+1 (823) 497-3224",
+ "address": "469 Schenck Avenue, Hardyville, South Carolina, 3493",
+ "about": "Esse consequat ex elit ex duis eu et voluptate quis aute sint magna. Labore et nostrud anim deserunt culpa irure aliquip esse anim incididunt ipsum occaecat. Sit et quis esse velit incididunt commodo anim ex dolor. Ullamco tempor amet ipsum deserunt aute.\r\n",
+ "registered": "2014-06-07T22:42:38 -02:00",
+ "latitude": 40.378678,
+ "longitude": 25.273178,
+ "tags": [
+ "nulla",
+ "ut",
+ "consequat",
+ "aliqua",
+ "enim",
+ "ipsum",
+ "labore"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Jodi Gross"
+ },
+ {
+ "id": 1,
+ "name": "Francis Mathews"
+ },
+ {
+ "id": 2,
+ "name": "Ava Warren"
+ }
+ ],
+ "greeting": "Hello, Shannon Michael! You have 7 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afa6ba5d8f768cc7bb",
+ "index": 509,
+ "guid": "e5a0f38a-e026-4c28-8afb-4512deb2048a",
+ "isActive": false,
+ "balance": "$3,278.20",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "blue",
+ "name": "Johnnie Jenkins",
+ "gender": "female",
+ "company": "ARTWORLDS",
+ "email": "johnniejenkins@artworlds.com",
+ "phone": "+1 (962) 430-2092",
+ "address": "902 Bryant Street, Urbana, Rhode Island, 6190",
+ "about": "Consectetur irure esse elit consequat proident. Ut laboris fugiat cillum fugiat nulla officia est aliqua eiusmod pariatur cillum ut enim. Ex dolor sunt officia reprehenderit pariatur excepteur eu in est nulla sunt laboris. Commodo commodo irure adipisicing minim magna elit consectetur elit qui elit labore consequat. Veniam eiusmod adipisicing eiusmod adipisicing enim aliqua esse excepteur dolor exercitation. Adipisicing dolor qui officia cillum minim esse quis sit sint.\r\n",
+ "registered": "2015-01-26T14:03:44 -01:00",
+ "latitude": -11.455434,
+ "longitude": 77.344943,
+ "tags": [
+ "occaecat",
+ "commodo",
+ "minim",
+ "non",
+ "deserunt",
+ "mollit",
+ "fugiat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Harrington Cleveland"
+ },
+ {
+ "id": 1,
+ "name": "Vance Trujillo"
+ },
+ {
+ "id": 2,
+ "name": "Tanya Pratt"
+ }
+ ],
+ "greeting": "Hello, Johnnie Jenkins! You have 9 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af7a6d85bb3fe94c9b",
+ "index": 510,
+ "guid": "91a5b0bd-9ff6-47ba-b484-7f2f527d3d2f",
+ "isActive": true,
+ "balance": "$2,727.74",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "brown",
+ "name": "Annette Barnett",
+ "gender": "female",
+ "company": "COMCUBINE",
+ "email": "annettebarnett@comcubine.com",
+ "phone": "+1 (951) 502-2338",
+ "address": "282 Gilmore Court, Salix, Pennsylvania, 7423",
+ "about": "Anim sit incididunt elit aliquip. Consectetur consequat sunt irure id consequat cupidatat eu ea pariatur consectetur veniam eu qui. Laborum sunt nisi proident dolore nulla pariatur esse labore commodo mollit magna sunt consequat.\r\n",
+ "registered": "2014-09-04T03:56:52 -02:00",
+ "latitude": 60.874931,
+ "longitude": 12.973538,
+ "tags": [
+ "pariatur",
+ "incididunt",
+ "fugiat",
+ "aliqua",
+ "dolor",
+ "dolor",
+ "est"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Ilene Roy"
+ },
+ {
+ "id": 1,
+ "name": "Lucy Beach"
+ },
+ {
+ "id": 2,
+ "name": "Marcie Ramos"
+ }
+ ],
+ "greeting": "Hello, Annette Barnett! You have 5 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afaf21a69afc00e2c2",
+ "index": 511,
+ "guid": "d2ecef4e-7fa5-40c0-af1a-3e158b90e2a9",
+ "isActive": false,
+ "balance": "$2,178.05",
+ "picture": "http://placehold.it/32x32",
+ "age": 22,
+ "eyeColor": "green",
+ "name": "Vickie Heath",
+ "gender": "female",
+ "company": "ZENSUS",
+ "email": "vickieheath@zensus.com",
+ "phone": "+1 (901) 594-3074",
+ "address": "999 Sedgwick Street, Alamo, Oklahoma, 7225",
+ "about": "Occaecat deserunt et magna culpa in veniam excepteur. Irure fugiat eiusmod do pariatur nostrud incididunt proident. Ullamco exercitation proident in pariatur voluptate officia et officia. Qui sit mollit nulla eu laborum ea pariatur. Veniam consectetur nostrud amet dolor nisi nulla ipsum voluptate pariatur aute magna excepteur.\r\n",
+ "registered": "2015-01-26T18:35:26 -01:00",
+ "latitude": -4.16471,
+ "longitude": 134.184323,
+ "tags": [
+ "et",
+ "cillum",
+ "aute",
+ "ipsum",
+ "tempor",
+ "Lorem",
+ "quis"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Earline Aguilar"
+ },
+ {
+ "id": 1,
+ "name": "Katharine Foreman"
+ },
+ {
+ "id": 2,
+ "name": "Chrystal Walls"
+ }
+ ],
+ "greeting": "Hello, Vickie Heath! You have 2 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af39c3e4c064118f0f",
+ "index": 512,
+ "guid": "36c00c31-4be7-4fb5-b931-4c74469dc180",
+ "isActive": false,
+ "balance": "$2,261.36",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "brown",
+ "name": "Lacey Justice",
+ "gender": "female",
+ "company": "CINASTER",
+ "email": "laceyjustice@cinaster.com",
+ "phone": "+1 (898) 511-2642",
+ "address": "904 Kossuth Place, Glenville, Kansas, 4613",
+ "about": "Consequat reprehenderit et cupidatat ex non eu esse tempor duis adipisicing tempor cillum qui. Proident ad laborum labore duis commodo. Voluptate duis laboris non sint proident eiusmod quis laborum fugiat. Id excepteur amet velit fugiat est. Velit ad est cupidatat exercitation veniam dolore aliquip cupidatat dolor nulla eiusmod veniam. Tempor laborum nostrud labore sit do nulla occaecat non eu commodo veniam fugiat eiusmod. Dolore pariatur culpa magna minim consectetur culpa amet adipisicing adipisicing minim.\r\n",
+ "registered": "2014-10-20T17:52:50 -02:00",
+ "latitude": 82.425934,
+ "longitude": -36.832053,
+ "tags": [
+ "elit",
+ "nisi",
+ "qui",
+ "id",
+ "proident",
+ "exercitation",
+ "in"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Welch Rowland"
+ },
+ {
+ "id": 1,
+ "name": "Vaughn Villarreal"
+ },
+ {
+ "id": 2,
+ "name": "Noble Hayes"
+ }
+ ],
+ "greeting": "Hello, Lacey Justice! You have 7 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03affae0517ba3684520",
+ "index": 513,
+ "guid": "2bc7db65-025a-4a5b-831a-c569b707b6e2",
+ "isActive": false,
+ "balance": "$3,442.98",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "green",
+ "name": "Bertha Navarro",
+ "gender": "female",
+ "company": "COMFIRM",
+ "email": "berthanavarro@comfirm.com",
+ "phone": "+1 (873) 422-3333",
+ "address": "344 Metropolitan Avenue, Wauhillau, Kentucky, 9468",
+ "about": "Duis fugiat nostrud elit ex sunt elit amet in eu nostrud dolore veniam. Culpa minim ex ea sunt in occaecat laboris id. Irure veniam laborum excepteur occaecat. Officia proident nulla et ipsum ipsum laboris mollit ullamco exercitation sunt amet ex. Anim do enim consequat exercitation qui qui laborum sit.\r\n",
+ "registered": "2014-12-17T17:10:27 -01:00",
+ "latitude": -55.969636,
+ "longitude": 139.523893,
+ "tags": [
+ "nostrud",
+ "sit",
+ "veniam",
+ "laborum",
+ "id",
+ "fugiat",
+ "occaecat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Francesca Welch"
+ },
+ {
+ "id": 1,
+ "name": "Mccarty Rojas"
+ },
+ {
+ "id": 2,
+ "name": "Meagan Tate"
+ }
+ ],
+ "greeting": "Hello, Bertha Navarro! You have 4 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af709ec4a9c36dd698",
+ "index": 514,
+ "guid": "6a1c74bd-fb82-43b9-a751-197660b1060f",
+ "isActive": true,
+ "balance": "$1,012.27",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "green",
+ "name": "Sharron Lamb",
+ "gender": "female",
+ "company": "REMOLD",
+ "email": "sharronlamb@remold.com",
+ "phone": "+1 (911) 493-2190",
+ "address": "595 Tehama Street, Jennings, Mississippi, 2915",
+ "about": "Do non incididunt laboris ad. Occaecat laboris culpa in ullamco minim veniam id sint incididunt tempor anim. Sit elit magna tempor exercitation nulla amet velit.\r\n",
+ "registered": "2014-08-25T22:23:16 -02:00",
+ "latitude": 32.895631,
+ "longitude": 152.785835,
+ "tags": [
+ "voluptate",
+ "laboris",
+ "reprehenderit",
+ "ullamco",
+ "eu",
+ "fugiat",
+ "cillum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Fuller Nunez"
+ },
+ {
+ "id": 1,
+ "name": "Deleon Hurley"
+ },
+ {
+ "id": 2,
+ "name": "Daniels Marks"
+ }
+ ],
+ "greeting": "Hello, Sharron Lamb! You have 5 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af719266136bfe73ab",
+ "index": 515,
+ "guid": "5eee7845-ed8c-4c88-bf98-36f5cc67f3d7",
+ "isActive": true,
+ "balance": "$2,758.68",
+ "picture": "http://placehold.it/32x32",
+ "age": 32,
+ "eyeColor": "blue",
+ "name": "Jenifer Oliver",
+ "gender": "female",
+ "company": "NEPTIDE",
+ "email": "jeniferoliver@neptide.com",
+ "phone": "+1 (802) 507-2353",
+ "address": "134 Colin Place, Grandview, Montana, 7667",
+ "about": "Non dolore quis elit cupidatat sunt eu dolore irure magna. Voluptate proident deserunt elit velit. Laborum quis tempor id eiusmod labore laboris anim elit voluptate ex sunt reprehenderit minim esse. Lorem reprehenderit aliquip aliquip quis amet fugiat laboris amet ad reprehenderit ipsum esse. Dolor quis non laboris eiusmod incididunt minim ipsum. Ad occaecat ex enim nulla commodo ex id eiusmod adipisicing magna quis.\r\n",
+ "registered": "2015-01-10T22:10:15 -01:00",
+ "latitude": -79.917617,
+ "longitude": 140.466393,
+ "tags": [
+ "ad",
+ "in",
+ "qui",
+ "dolore",
+ "non",
+ "in",
+ "incididunt"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Emily Young"
+ },
+ {
+ "id": 1,
+ "name": "Baldwin Spears"
+ },
+ {
+ "id": 2,
+ "name": "Norton Fowler"
+ }
+ ],
+ "greeting": "Hello, Jenifer Oliver! You have 8 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afa29cc6e86587537c",
+ "index": 516,
+ "guid": "1e585c35-ba82-4fee-9900-2e5dcf65c14d",
+ "isActive": true,
+ "balance": "$2,529.70",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "blue",
+ "name": "Melisa Combs",
+ "gender": "female",
+ "company": "TALENDULA",
+ "email": "melisacombs@talendula.com",
+ "phone": "+1 (829) 550-2916",
+ "address": "716 Glen Street, Waiohinu, North Dakota, 1903",
+ "about": "Excepteur anim anim quis officia amet. Nulla incididunt veniam ex fugiat aliqua occaecat proident id nostrud ea aute do. Nostrud officia pariatur ad deserunt do ea exercitation et consequat voluptate officia. Elit aliqua minim culpa duis eu ad minim commodo sint pariatur aliquip.\r\n",
+ "registered": "2014-03-08T07:14:06 -01:00",
+ "latitude": 51.773711,
+ "longitude": 170.606802,
+ "tags": [
+ "officia",
+ "ad",
+ "et",
+ "cupidatat",
+ "voluptate",
+ "fugiat",
+ "aliqua"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Cherie Terry"
+ },
+ {
+ "id": 1,
+ "name": "Cornelia Mcknight"
+ },
+ {
+ "id": 2,
+ "name": "Wendy Coleman"
+ }
+ ],
+ "greeting": "Hello, Melisa Combs! You have 7 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af7875b87d86a31a24",
+ "index": 517,
+ "guid": "ee307b60-6760-47ba-9800-5b0511e44d1c",
+ "isActive": false,
+ "balance": "$3,188.37",
+ "picture": "http://placehold.it/32x32",
+ "age": 21,
+ "eyeColor": "brown",
+ "name": "Catalina Stewart",
+ "gender": "female",
+ "company": "AUTOMON",
+ "email": "catalinastewart@automon.com",
+ "phone": "+1 (892) 571-2369",
+ "address": "538 Boynton Place, Morriston, Maryland, 1367",
+ "about": "Qui ex deserunt amet amet. Ex ad esse culpa elit mollit ex cupidatat duis. Ut voluptate magna do enim.\r\n",
+ "registered": "2014-01-19T02:21:07 -01:00",
+ "latitude": 55.416111,
+ "longitude": 90.037281,
+ "tags": [
+ "est",
+ "eiusmod",
+ "dolor",
+ "proident",
+ "mollit",
+ "non",
+ "duis"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Casey Rush"
+ },
+ {
+ "id": 1,
+ "name": "Callahan Wright"
+ },
+ {
+ "id": 2,
+ "name": "Kennedy Rasmussen"
+ }
+ ],
+ "greeting": "Hello, Catalina Stewart! You have 3 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af4c4f621ad89d3ffd",
+ "index": 518,
+ "guid": "88f218d6-531c-40d3-ac33-19648e07264e",
+ "isActive": false,
+ "balance": "$2,381.94",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "brown",
+ "name": "Vincent Woodward",
+ "gender": "male",
+ "company": "TETRATREX",
+ "email": "vincentwoodward@tetratrex.com",
+ "phone": "+1 (806) 501-3069",
+ "address": "415 Aviation Road, Vaughn, Hawaii, 5392",
+ "about": "Labore Lorem culpa non commodo ullamco occaecat amet elit id exercitation aliquip eiusmod amet. Deserunt aliqua mollit ea est cupidatat commodo irure. Tempor laborum sunt in sit amet anim laboris ex incididunt consectetur. Fugiat reprehenderit Lorem nisi eu ullamco enim qui. Et incididunt tempor labore velit anim.\r\n",
+ "registered": "2014-04-14T12:44:48 -02:00",
+ "latitude": 24.080742,
+ "longitude": -179.675189,
+ "tags": [
+ "eu",
+ "sint",
+ "cillum",
+ "reprehenderit",
+ "consequat",
+ "proident",
+ "consectetur"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Waters Serrano"
+ },
+ {
+ "id": 1,
+ "name": "Irwin Albert"
+ },
+ {
+ "id": 2,
+ "name": "Whitfield Joseph"
+ }
+ ],
+ "greeting": "Hello, Vincent Woodward! You have 4 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af0b6f421d1323c123",
+ "index": 519,
+ "guid": "ec8f9f04-555b-4bd6-8787-a232218c7216",
+ "isActive": true,
+ "balance": "$2,790.55",
+ "picture": "http://placehold.it/32x32",
+ "age": 28,
+ "eyeColor": "brown",
+ "name": "Nannie Vang",
+ "gender": "female",
+ "company": "NIPAZ",
+ "email": "nannievang@nipaz.com",
+ "phone": "+1 (963) 519-3731",
+ "address": "719 Truxton Street, Sussex, Arizona, 3028",
+ "about": "Voluptate ullamco eiusmod sunt exercitation. Adipisicing in ipsum officia irure voluptate commodo qui do ad ea occaecat. Eiusmod nostrud aute nostrud cillum culpa nisi occaecat.\r\n",
+ "registered": "2014-06-22T18:14:55 -02:00",
+ "latitude": 24.808566,
+ "longitude": 160.653904,
+ "tags": [
+ "deserunt",
+ "do",
+ "consequat",
+ "est",
+ "eu",
+ "esse",
+ "consectetur"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Stella Keith"
+ },
+ {
+ "id": 1,
+ "name": "Jewel Nash"
+ },
+ {
+ "id": 2,
+ "name": "Eugenia Velez"
+ }
+ ],
+ "greeting": "Hello, Nannie Vang! You have 6 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af6a4e82e711180296",
+ "index": 520,
+ "guid": "e9338ca3-cdd4-4d85-a99a-d0827b7af43f",
+ "isActive": false,
+ "balance": "$3,782.21",
+ "picture": "http://placehold.it/32x32",
+ "age": 20,
+ "eyeColor": "green",
+ "name": "Sallie Mcdaniel",
+ "gender": "female",
+ "company": "BESTO",
+ "email": "salliemcdaniel@besto.com",
+ "phone": "+1 (901) 516-3671",
+ "address": "783 Oriental Court, Summertown, Arkansas, 6285",
+ "about": "Laboris incididunt ex ad eiusmod. Fugiat nulla nisi exercitation qui ea pariatur. Cillum nisi aliquip esse magna ipsum aute incididunt. Esse elit fugiat duis id eu nulla proident aliqua. Reprehenderit magna non consectetur ad.\r\n",
+ "registered": "2014-06-04T01:28:11 -02:00",
+ "latitude": 69.661029,
+ "longitude": 28.542973,
+ "tags": [
+ "occaecat",
+ "aliqua",
+ "consectetur",
+ "cupidatat",
+ "nostrud",
+ "exercitation",
+ "cillum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Lorna Barrett"
+ },
+ {
+ "id": 1,
+ "name": "Cotton Vazquez"
+ },
+ {
+ "id": 2,
+ "name": "Felicia Spencer"
+ }
+ ],
+ "greeting": "Hello, Sallie Mcdaniel! You have 3 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afb0f839937bba0347",
+ "index": 521,
+ "guid": "73264a5d-4af5-4253-8784-1ad7c8ce5b72",
+ "isActive": true,
+ "balance": "$1,342.64",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "green",
+ "name": "Flora Conley",
+ "gender": "female",
+ "company": "ECSTASIA",
+ "email": "floraconley@ecstasia.com",
+ "phone": "+1 (810) 541-2001",
+ "address": "459 Buffalo Avenue, Eastvale, Nevada, 8393",
+ "about": "Irure velit consectetur ad eu quis laboris amet ad. Nulla qui quis non ullamco incididunt eu pariatur laborum. Officia consectetur consequat quis mollit laboris et.\r\n",
+ "registered": "2014-10-10T10:26:40 -02:00",
+ "latitude": -27.599647,
+ "longitude": 7.662748,
+ "tags": [
+ "laborum",
+ "qui",
+ "minim",
+ "reprehenderit",
+ "cupidatat",
+ "ea",
+ "aliqua"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Monroe Holcomb"
+ },
+ {
+ "id": 1,
+ "name": "Raymond Byrd"
+ },
+ {
+ "id": 2,
+ "name": "Marissa Bailey"
+ }
+ ],
+ "greeting": "Hello, Flora Conley! You have 9 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af967749fb38818b72",
+ "index": 522,
+ "guid": "e9a3fecd-76f0-4cfc-9dfc-c4d45aba3eeb",
+ "isActive": false,
+ "balance": "$3,180.08",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "green",
+ "name": "Long Benjamin",
+ "gender": "male",
+ "company": "VERBUS",
+ "email": "longbenjamin@verbus.com",
+ "phone": "+1 (883) 574-2556",
+ "address": "732 Hornell Loop, Cresaptown, New Jersey, 7719",
+ "about": "Lorem adipisicing in nostrud cupidatat eiusmod id eu ut tempor excepteur anim nisi ea minim. Irure proident minim est fugiat magna. Proident sunt excepteur adipisicing laborum cillum proident non dolor culpa. Reprehenderit magna reprehenderit duis excepteur commodo id duis officia sint aliquip labore. Commodo pariatur magna consequat fugiat excepteur aute officia proident culpa nulla. Aute nostrud occaecat cillum in occaecat eiusmod ex veniam irure quis. Non non proident magna irure.\r\n",
+ "registered": "2014-03-04T07:23:21 -01:00",
+ "latitude": 87.869779,
+ "longitude": 16.438515,
+ "tags": [
+ "eu",
+ "ipsum",
+ "deserunt",
+ "Lorem",
+ "ullamco",
+ "pariatur",
+ "elit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Emerson Vargas"
+ },
+ {
+ "id": 1,
+ "name": "Joyner Delaney"
+ },
+ {
+ "id": 2,
+ "name": "Jimmie Rodriguez"
+ }
+ ],
+ "greeting": "Hello, Long Benjamin! You have 4 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afbff32c746a94a27a",
+ "index": 523,
+ "guid": "c033a9d4-0d4d-4fbb-b37c-e9ca84631dcb",
+ "isActive": false,
+ "balance": "$1,329.70",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "green",
+ "name": "Hannah Parks",
+ "gender": "female",
+ "company": "ZIORE",
+ "email": "hannahparks@ziore.com",
+ "phone": "+1 (826) 412-2449",
+ "address": "932 Ebony Court, Mooresburg, Marshall Islands, 1979",
+ "about": "Ut aute ex duis ullamco cillum esse in Lorem sit in sit. Nisi eiusmod fugiat aute nisi culpa esse pariatur commodo irure dolor quis deserunt. Ut irure esse mollit reprehenderit fugiat anim excepteur. Sunt officia consectetur aliqua magna sunt do consectetur. Do enim velit magna est proident et nulla.\r\n",
+ "registered": "2014-10-03T00:51:40 -02:00",
+ "latitude": 63.018281,
+ "longitude": -29.475524,
+ "tags": [
+ "velit",
+ "minim",
+ "anim",
+ "commodo",
+ "et",
+ "officia",
+ "eu"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Mollie Meyer"
+ },
+ {
+ "id": 1,
+ "name": "Craft Mckay"
+ },
+ {
+ "id": 2,
+ "name": "Ferguson Hewitt"
+ }
+ ],
+ "greeting": "Hello, Hannah Parks! You have 7 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afb01bafe44f68aee5",
+ "index": 524,
+ "guid": "b7f65ec3-0b01-41eb-bbbb-865b342ae4b9",
+ "isActive": true,
+ "balance": "$2,483.13",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "brown",
+ "name": "Melanie Rivas",
+ "gender": "female",
+ "company": "TRIPSCH",
+ "email": "melanierivas@tripsch.com",
+ "phone": "+1 (909) 418-3823",
+ "address": "640 Hope Street, Ogema, Georgia, 779",
+ "about": "Occaecat exercitation eiusmod aliqua laborum. Quis tempor anim ut ad non proident pariatur proident nulla quis. Elit aliqua sint id Lorem dolor labore sit deserunt occaecat sunt ad cupidatat tempor. Cupidatat ea enim esse nisi ad labore et. Exercitation eiusmod aute adipisicing elit. Ex magna et nisi ex in proident qui ex. Quis reprehenderit mollit id reprehenderit amet deserunt pariatur do sunt Lorem sunt do veniam labore.\r\n",
+ "registered": "2014-11-18T06:10:47 -01:00",
+ "latitude": 82.955525,
+ "longitude": 4.106796,
+ "tags": [
+ "pariatur",
+ "sunt",
+ "velit",
+ "eu",
+ "nostrud",
+ "ut",
+ "aliquip"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Lavonne Hardin"
+ },
+ {
+ "id": 1,
+ "name": "Molly Butler"
+ },
+ {
+ "id": 2,
+ "name": "Millicent Whitfield"
+ }
+ ],
+ "greeting": "Hello, Melanie Rivas! You have 2 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afa95fd88167fb03c4",
+ "index": 525,
+ "guid": "bdfd517e-9d48-451a-9205-4ff885bc7491",
+ "isActive": false,
+ "balance": "$2,499.49",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "green",
+ "name": "Ines Ortega",
+ "gender": "female",
+ "company": "ZILCH",
+ "email": "inesortega@zilch.com",
+ "phone": "+1 (975) 448-2060",
+ "address": "525 Ryder Street, Darbydale, Virgin Islands, 886",
+ "about": "Proident eu cillum ut sit incididunt tempor adipisicing proident minim commodo ipsum. Fugiat dolore pariatur id deserunt cupidatat mollit do occaecat amet. Culpa enim laborum anim id ea ad laboris. Lorem magna anim ut sit culpa magna consequat. Consectetur enim eiusmod occaecat pariatur non cillum nisi dolore dolore.\r\n",
+ "registered": "2014-07-14T02:29:33 -02:00",
+ "latitude": -73.498204,
+ "longitude": -177.191295,
+ "tags": [
+ "laborum",
+ "velit",
+ "in",
+ "nostrud",
+ "amet",
+ "veniam",
+ "sunt"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Katheryn Love"
+ },
+ {
+ "id": 1,
+ "name": "Holland Dalton"
+ },
+ {
+ "id": 2,
+ "name": "Dillard Patterson"
+ }
+ ],
+ "greeting": "Hello, Ines Ortega! You have 10 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af2ff56c93de0b6239",
+ "index": 526,
+ "guid": "1bf8fd7c-2635-4eed-aa57-d6b8e83ca556",
+ "isActive": false,
+ "balance": "$2,646.05",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "blue",
+ "name": "Lawson Conrad",
+ "gender": "male",
+ "company": "BLUPLANET",
+ "email": "lawsonconrad@bluplanet.com",
+ "phone": "+1 (817) 591-3148",
+ "address": "435 Linden Street, Warren, Colorado, 2011",
+ "about": "Officia est commodo ullamco aute ad id consectetur irure fugiat velit pariatur velit velit tempor. Duis excepteur est incididunt non commodo occaecat veniam nostrud Lorem et nostrud. Quis Lorem in commodo aliquip do cillum esse do aliquip occaecat. Culpa irure velit consequat aute officia minim ullamco laboris fugiat do elit. Reprehenderit aute deserunt dolor qui et veniam voluptate proident officia cillum exercitation velit eiusmod ipsum.\r\n",
+ "registered": "2014-04-11T02:39:02 -02:00",
+ "latitude": 9.982496,
+ "longitude": 118.329651,
+ "tags": [
+ "ex",
+ "consequat",
+ "ut",
+ "non",
+ "qui",
+ "cillum",
+ "culpa"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Frazier Baxter"
+ },
+ {
+ "id": 1,
+ "name": "Ebony Farmer"
+ },
+ {
+ "id": 2,
+ "name": "Rosalind Rich"
+ }
+ ],
+ "greeting": "Hello, Lawson Conrad! You have 2 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af64bba5c84b891f59",
+ "index": 527,
+ "guid": "7f0d2efb-4237-4895-a1da-6c498f888cf9",
+ "isActive": false,
+ "balance": "$3,773.10",
+ "picture": "http://placehold.it/32x32",
+ "age": 26,
+ "eyeColor": "green",
+ "name": "Perry Ross",
+ "gender": "male",
+ "company": "PAPRICUT",
+ "email": "perryross@papricut.com",
+ "phone": "+1 (992) 520-2015",
+ "address": "145 Hinsdale Street, Robinette, Vermont, 2724",
+ "about": "Ex eiusmod ipsum ipsum occaecat reprehenderit qui ex ullamco labore in sint. Dolor officia qui id eu ad voluptate commodo deserunt nulla commodo. Mollit nulla et incididunt tempor qui sunt nostrud. Aliquip aliqua sit mollit laboris et voluptate veniam. Ea exercitation do irure minim mollit ipsum cillum adipisicing. Magna nostrud reprehenderit sit labore. Aute pariatur non enim id mollit ex sit ullamco incididunt reprehenderit sit.\r\n",
+ "registered": "2015-03-19T07:25:39 -01:00",
+ "latitude": 10.851365,
+ "longitude": 166.040618,
+ "tags": [
+ "qui",
+ "nisi",
+ "mollit",
+ "sit",
+ "sit",
+ "et",
+ "nulla"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Stacey Branch"
+ },
+ {
+ "id": 1,
+ "name": "Tabitha Davis"
+ },
+ {
+ "id": 2,
+ "name": "Schultz Payne"
+ }
+ ],
+ "greeting": "Hello, Perry Ross! You have 1 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af9182a29f02150c58",
+ "index": 528,
+ "guid": "1a2f1c13-9d6b-4c09-b4f2-3d5026d07a19",
+ "isActive": true,
+ "balance": "$2,426.26",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "brown",
+ "name": "Lidia Daugherty",
+ "gender": "female",
+ "company": "MULTRON",
+ "email": "lidiadaugherty@multron.com",
+ "phone": "+1 (816) 497-3987",
+ "address": "307 Prince Street, Hegins, Minnesota, 9484",
+ "about": "Proident est nulla nisi laborum pariatur consectetur laboris cillum velit eu ad occaecat eu. Amet quis fugiat cillum nulla minim elit cupidatat do. Aliqua dolore anim incididunt ullamco tempor do sunt laborum ut. Mollit sunt occaecat nulla aute do est voluptate. Deserunt officia ipsum magna dolore exercitation laboris consectetur nulla. Ad occaecat adipisicing exercitation ut ex ut cillum elit amet culpa nisi exercitation duis laborum. Duis in proident do reprehenderit officia enim proident magna aliquip minim minim proident.\r\n",
+ "registered": "2014-02-10T08:55:52 -01:00",
+ "latitude": -7.652559,
+ "longitude": -81.031004,
+ "tags": [
+ "Lorem",
+ "irure",
+ "dolor",
+ "quis",
+ "voluptate",
+ "eiusmod",
+ "consequat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Traci Buckley"
+ },
+ {
+ "id": 1,
+ "name": "Gamble Nixon"
+ },
+ {
+ "id": 2,
+ "name": "Estelle Vinson"
+ }
+ ],
+ "greeting": "Hello, Lidia Daugherty! You have 2 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af14522b1b124ebbda",
+ "index": 529,
+ "guid": "7c3ec453-9ac4-417f-adb3-1b5b2daa4955",
+ "isActive": false,
+ "balance": "$1,718.25",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "blue",
+ "name": "Teri Boone",
+ "gender": "female",
+ "company": "DIGIQUE",
+ "email": "teriboone@digique.com",
+ "phone": "+1 (846) 524-2976",
+ "address": "712 Fanchon Place, Warsaw, New Mexico, 3348",
+ "about": "Anim eu consectetur consectetur ex ut. Ex qui magna cupidatat voluptate nostrud id sunt incididunt consequat nisi nostrud. Commodo ea eiusmod tempor ullamco ad culpa mollit et irure deserunt duis. Officia non proident sint eiusmod occaecat excepteur nulla. Ut quis eiusmod dolor eu enim cillum occaecat ut laborum velit Lorem magna. Est enim culpa labore labore voluptate ipsum velit laborum id minim sunt et ut aliqua. Elit sint culpa consectetur amet nostrud reprehenderit sint elit ea eu proident sit.\r\n",
+ "registered": "2014-01-15T00:00:14 -01:00",
+ "latitude": -60.951122,
+ "longitude": 48.414136,
+ "tags": [
+ "magna",
+ "mollit",
+ "consequat",
+ "fugiat",
+ "qui",
+ "ullamco",
+ "velit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Kari Lara"
+ },
+ {
+ "id": 1,
+ "name": "Diann Diaz"
+ },
+ {
+ "id": 2,
+ "name": "Sharon Kirkland"
+ }
+ ],
+ "greeting": "Hello, Teri Boone! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af05f36666640f4be1",
+ "index": 530,
+ "guid": "ff33c0e9-bfeb-400c-934b-74ed2e94147d",
+ "isActive": true,
+ "balance": "$1,129.02",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "green",
+ "name": "Martinez Watson",
+ "gender": "male",
+ "company": "ACCUFARM",
+ "email": "martinezwatson@accufarm.com",
+ "phone": "+1 (997) 557-3145",
+ "address": "900 Lamont Court, Otranto, Alabama, 522",
+ "about": "Reprehenderit occaecat incididunt nisi quis proident ex ut duis. Mollit anim aliqua magna aute deserunt. Aliqua ex laborum nulla ut do duis et ex. Consequat deserunt tempor dolor consequat dolore duis officia proident magna Lorem aliquip elit.\r\n",
+ "registered": "2014-01-03T07:47:13 -01:00",
+ "latitude": -84.871501,
+ "longitude": 51.423044,
+ "tags": [
+ "esse",
+ "ea",
+ "laboris",
+ "ut",
+ "ea",
+ "incididunt",
+ "in"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Dennis Preston"
+ },
+ {
+ "id": 1,
+ "name": "Boone Malone"
+ },
+ {
+ "id": 2,
+ "name": "Heidi Humphrey"
+ }
+ ],
+ "greeting": "Hello, Martinez Watson! You have 8 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af65c9a9705a71bfaf",
+ "index": 531,
+ "guid": "22c634dc-2602-4a7b-bda6-ac23ba46dece",
+ "isActive": false,
+ "balance": "$2,321.68",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "green",
+ "name": "Hodge Murphy",
+ "gender": "male",
+ "company": "HYDROCOM",
+ "email": "hodgemurphy@hydrocom.com",
+ "phone": "+1 (997) 453-2459",
+ "address": "521 Florence Avenue, Deputy, Illinois, 5774",
+ "about": "Aute esse minim culpa consequat aliqua dolor pariatur ipsum exercitation excepteur eiusmod. Ut veniam nostrud sit pariatur reprehenderit exercitation velit nostrud. Et officia aliqua sit anim incididunt et duis quis incididunt ad pariatur. Laborum dolore ex Lorem sunt incididunt non esse qui excepteur.\r\n",
+ "registered": "2014-06-26T11:47:35 -02:00",
+ "latitude": -33.579573,
+ "longitude": 11.946135,
+ "tags": [
+ "culpa",
+ "sunt",
+ "do",
+ "minim",
+ "laboris",
+ "amet",
+ "qui"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Mathews Miller"
+ },
+ {
+ "id": 1,
+ "name": "Mclean Petty"
+ },
+ {
+ "id": 2,
+ "name": "Marsh Buck"
+ }
+ ],
+ "greeting": "Hello, Hodge Murphy! You have 7 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afef391d59e2737d7a",
+ "index": 532,
+ "guid": "2df0c6ba-13b4-4b95-aa46-8ad85ae89484",
+ "isActive": true,
+ "balance": "$3,413.09",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "green",
+ "name": "Best Crane",
+ "gender": "male",
+ "company": "ELECTONIC",
+ "email": "bestcrane@electonic.com",
+ "phone": "+1 (810) 508-2631",
+ "address": "682 Dinsmore Place, Eggertsville, Missouri, 7575",
+ "about": "Laborum dolore occaecat ipsum mollit nostrud. Adipisicing velit duis in laboris consequat minim. Enim tempor fugiat nostrud sint cupidatat duis officia aliqua occaecat et tempor pariatur elit deserunt. Consectetur qui sunt deserunt est proident anim fugiat nisi.\r\n",
+ "registered": "2014-06-12T01:36:48 -02:00",
+ "latitude": 0.020886,
+ "longitude": -173.32239,
+ "tags": [
+ "eu",
+ "sunt",
+ "ullamco",
+ "Lorem",
+ "in",
+ "cillum",
+ "ea"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Fran Bruce"
+ },
+ {
+ "id": 1,
+ "name": "Lena Rowe"
+ },
+ {
+ "id": 2,
+ "name": "Jennings Dawson"
+ }
+ ],
+ "greeting": "Hello, Best Crane! You have 10 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afe83ba3020ea61f67",
+ "index": 533,
+ "guid": "3a10b337-19a0-4de4-8fc4-848e085a3d3a",
+ "isActive": false,
+ "balance": "$3,671.59",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "blue",
+ "name": "Mooney Donovan",
+ "gender": "male",
+ "company": "ACCUSAGE",
+ "email": "mooneydonovan@accusage.com",
+ "phone": "+1 (837) 574-2379",
+ "address": "218 Conway Street, Felt, Oregon, 5089",
+ "about": "Aliqua minim labore ex sunt mollit mollit fugiat culpa ullamco exercitation nostrud qui. Quis irure culpa ea culpa duis commodo. Adipisicing fugiat commodo enim reprehenderit excepteur non ea sunt ullamco in.\r\n",
+ "registered": "2014-05-27T14:29:07 -02:00",
+ "latitude": 1.026252,
+ "longitude": 72.769309,
+ "tags": [
+ "laborum",
+ "anim",
+ "consectetur",
+ "ex",
+ "aute",
+ "in",
+ "incididunt"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Rowland Head"
+ },
+ {
+ "id": 1,
+ "name": "Shaw Pitts"
+ },
+ {
+ "id": 2,
+ "name": "Cohen Briggs"
+ }
+ ],
+ "greeting": "Hello, Mooney Donovan! You have 3 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af2189ae35f6db1119",
+ "index": 534,
+ "guid": "d34a98c7-3bde-4e49-95bd-8062c02d3bf1",
+ "isActive": true,
+ "balance": "$1,860.96",
+ "picture": "http://placehold.it/32x32",
+ "age": 26,
+ "eyeColor": "blue",
+ "name": "Moody Russell",
+ "gender": "male",
+ "company": "VITRICOMP",
+ "email": "moodyrussell@vitricomp.com",
+ "phone": "+1 (960) 522-3010",
+ "address": "960 Vine Street, Cliff, Federated States Of Micronesia, 5345",
+ "about": "Ea ipsum reprehenderit laborum irure commodo nostrud velit velit deserunt occaecat sit culpa. Ipsum anim cillum reprehenderit pariatur anim consectetur. Officia labore dolor aliqua culpa qui mollit deserunt.\r\n",
+ "registered": "2014-01-08T00:40:30 -01:00",
+ "latitude": 22.102213,
+ "longitude": 130.391852,
+ "tags": [
+ "laborum",
+ "nulla",
+ "consequat",
+ "anim",
+ "reprehenderit",
+ "ex",
+ "enim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Lenore Williams"
+ },
+ {
+ "id": 1,
+ "name": "Glenda Mitchell"
+ },
+ {
+ "id": 2,
+ "name": "Kris Emerson"
+ }
+ ],
+ "greeting": "Hello, Moody Russell! You have 6 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afb1250e68ab66957d",
+ "index": 535,
+ "guid": "2cf6a553-9624-4339-bfe1-ce8820fa9746",
+ "isActive": false,
+ "balance": "$3,365.00",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "green",
+ "name": "Hart Lindsay",
+ "gender": "male",
+ "company": "EWEVILLE",
+ "email": "hartlindsay@eweville.com",
+ "phone": "+1 (914) 448-2040",
+ "address": "321 Varick Avenue, Trexlertown, South Dakota, 5044",
+ "about": "Minim enim tempor magna Lorem amet. Reprehenderit culpa non incididunt cillum duis irure id excepteur laboris anim aute fugiat magna cillum. Eiusmod ad adipisicing voluptate nostrud et enim amet anim reprehenderit consectetur et laboris exercitation.\r\n",
+ "registered": "2014-05-21T23:28:42 -02:00",
+ "latitude": -3.385705,
+ "longitude": 130.564796,
+ "tags": [
+ "anim",
+ "ut",
+ "aliqua",
+ "ad",
+ "labore",
+ "ex",
+ "do"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Mcgee Goodman"
+ },
+ {
+ "id": 1,
+ "name": "Byrd Duncan"
+ },
+ {
+ "id": 2,
+ "name": "Leila Palmer"
+ }
+ ],
+ "greeting": "Hello, Hart Lindsay! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af20f1bfff96a4f145",
+ "index": 536,
+ "guid": "1517a65f-9fcf-4ea7-adf6-a068b2f8262e",
+ "isActive": false,
+ "balance": "$1,507.94",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "blue",
+ "name": "Vinson Brady",
+ "gender": "male",
+ "company": "FLYBOYZ",
+ "email": "vinsonbrady@flyboyz.com",
+ "phone": "+1 (840) 523-2378",
+ "address": "826 Bancroft Place, Datil, Puerto Rico, 242",
+ "about": "Cupidatat dolor dolore aute esse aute. Do quis exercitation ullamco sit nulla laboris aliquip exercitation. Officia fugiat consectetur magna esse. Deserunt et ipsum duis incididunt dolor enim. Proident cupidatat elit cupidatat cillum ullamco laborum do dolore sint aute ut Lorem est. Cillum qui esse do esse consectetur.\r\n",
+ "registered": "2014-03-04T12:00:06 -01:00",
+ "latitude": -34.944082,
+ "longitude": 84.718213,
+ "tags": [
+ "ullamco",
+ "dolore",
+ "quis",
+ "deserunt",
+ "Lorem",
+ "ea",
+ "sint"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Beatrice Good"
+ },
+ {
+ "id": 1,
+ "name": "Aguilar Kane"
+ },
+ {
+ "id": 2,
+ "name": "Whitney Stafford"
+ }
+ ],
+ "greeting": "Hello, Vinson Brady! You have 5 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af7bbdfff9c7e8e6e6",
+ "index": 537,
+ "guid": "67aeffbf-2e5d-48b4-a2ac-dd955ab9baba",
+ "isActive": false,
+ "balance": "$1,122.12",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "blue",
+ "name": "Berg Ingram",
+ "gender": "male",
+ "company": "SAVVY",
+ "email": "bergingram@savvy.com",
+ "phone": "+1 (854) 439-2323",
+ "address": "354 Apollo Street, Shasta, Michigan, 9960",
+ "about": "Duis eu laboris nisi aliqua laboris nisi aliqua excepteur cillum sunt est aliquip mollit. Exercitation excepteur reprehenderit non cillum aliquip tempor aliquip mollit tempor tempor velit Lorem commodo. Cillum laboris proident nostrud tempor excepteur quis reprehenderit cillum tempor officia exercitation esse. In nostrud dolor adipisicing mollit sunt nisi.\r\n",
+ "registered": "2014-01-27T17:33:18 -01:00",
+ "latitude": 37.854204,
+ "longitude": 58.876219,
+ "tags": [
+ "sunt",
+ "sit",
+ "sit",
+ "nulla",
+ "ullamco",
+ "ex",
+ "minim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Frieda Waters"
+ },
+ {
+ "id": 1,
+ "name": "Beasley Olson"
+ },
+ {
+ "id": 2,
+ "name": "Eve Whitney"
+ }
+ ],
+ "greeting": "Hello, Berg Ingram! You have 6 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afe5233bfc87dc8067",
+ "index": 538,
+ "guid": "59ae5912-156d-49a7-aa08-a8c1d5cdb7ba",
+ "isActive": true,
+ "balance": "$2,628.44",
+ "picture": "http://placehold.it/32x32",
+ "age": 39,
+ "eyeColor": "green",
+ "name": "Lawanda Miranda",
+ "gender": "female",
+ "company": "CALCU",
+ "email": "lawandamiranda@calcu.com",
+ "phone": "+1 (917) 518-3960",
+ "address": "804 Himrod Street, Delco, Nebraska, 251",
+ "about": "Occaecat commodo nisi tempor laborum laboris Lorem Lorem sunt. Deserunt eiusmod aliqua non enim aute nulla. Esse ea aute aliqua in sunt dolore esse adipisicing reprehenderit reprehenderit aute. Laborum elit duis deserunt officia elit nulla qui magna enim sunt reprehenderit reprehenderit sint. Labore pariatur esse exercitation officia. Excepteur id adipisicing id cupidatat non aliqua.\r\n",
+ "registered": "2014-04-11T15:28:01 -02:00",
+ "latitude": 0.21324,
+ "longitude": -93.054819,
+ "tags": [
+ "et",
+ "commodo",
+ "minim",
+ "dolor",
+ "laborum",
+ "pariatur",
+ "nisi"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Bonnie Gaines"
+ },
+ {
+ "id": 1,
+ "name": "Oconnor Wilkerson"
+ },
+ {
+ "id": 2,
+ "name": "Wanda Sims"
+ }
+ ],
+ "greeting": "Hello, Lawanda Miranda! You have 8 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03aff69cdde833fc6341",
+ "index": 539,
+ "guid": "4228509e-5997-4e56-a93b-6067639d8a9e",
+ "isActive": true,
+ "balance": "$3,169.03",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "green",
+ "name": "Conner Shaffer",
+ "gender": "male",
+ "company": "DAISU",
+ "email": "connershaffer@daisu.com",
+ "phone": "+1 (873) 424-2862",
+ "address": "196 Surf Avenue, Herbster, Wyoming, 5163",
+ "about": "Aute magna deserunt eu eu officia commodo. Cillum ipsum nisi id dolore. Irure commodo irure aute adipisicing commodo pariatur aliquip ad cupidatat sint anim consectetur.\r\n",
+ "registered": "2014-10-17T18:04:29 -02:00",
+ "latitude": 12.825958,
+ "longitude": 65.615386,
+ "tags": [
+ "commodo",
+ "anim",
+ "duis",
+ "exercitation",
+ "qui",
+ "cupidatat",
+ "adipisicing"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Sharlene Brown"
+ },
+ {
+ "id": 1,
+ "name": "Daugherty Miles"
+ },
+ {
+ "id": 2,
+ "name": "Susanne Bush"
+ }
+ ],
+ "greeting": "Hello, Conner Shaffer! You have 2 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afbdea3cd7ad9a2a11",
+ "index": 540,
+ "guid": "12d6a638-2300-4478-89b1-ceac4bd68598",
+ "isActive": false,
+ "balance": "$1,456.50",
+ "picture": "http://placehold.it/32x32",
+ "age": 30,
+ "eyeColor": "brown",
+ "name": "Lilly Blackwell",
+ "gender": "female",
+ "company": "RAMJOB",
+ "email": "lillyblackwell@ramjob.com",
+ "phone": "+1 (974) 549-3632",
+ "address": "465 Greene Avenue, Tampico, California, 4936",
+ "about": "Sunt pariatur Lorem ad Lorem Lorem mollit aute pariatur pariatur. Pariatur dolore ut nisi proident incididunt mollit est elit eu tempor. Quis ea irure adipisicing do esse esse. Id duis ipsum culpa est dolor fugiat deserunt sint culpa. Ut eiusmod deserunt labore sit. Quis reprehenderit consequat quis culpa fugiat ipsum consequat velit nostrud ex aliquip ipsum nisi. Veniam nisi incididunt excepteur fugiat incididunt laborum exercitation culpa.\r\n",
+ "registered": "2014-05-28T15:13:32 -02:00",
+ "latitude": 77.854687,
+ "longitude": 7.795119,
+ "tags": [
+ "minim",
+ "est",
+ "laboris",
+ "esse",
+ "incididunt",
+ "eu",
+ "Lorem"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Rich Collier"
+ },
+ {
+ "id": 1,
+ "name": "Melba Tran"
+ },
+ {
+ "id": 2,
+ "name": "Hines Fitzpatrick"
+ }
+ ],
+ "greeting": "Hello, Lilly Blackwell! You have 1 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af83f41f7976d4a0a9",
+ "index": 541,
+ "guid": "bb4deef8-0e17-46a0-b4c6-dd8e6d4301e3",
+ "isActive": false,
+ "balance": "$1,993.80",
+ "picture": "http://placehold.it/32x32",
+ "age": 32,
+ "eyeColor": "brown",
+ "name": "Imelda Duffy",
+ "gender": "female",
+ "company": "COMVEY",
+ "email": "imeldaduffy@comvey.com",
+ "phone": "+1 (866) 480-2643",
+ "address": "284 Ovington Avenue, Gwynn, Indiana, 4517",
+ "about": "Sunt ad laboris aliqua aliqua esse non officia elit. Minim proident irure laborum eu labore eu ut aliquip labore non in laborum in. Irure exercitation enim duis consectetur. Et quis minim laboris nisi id esse laboris et nisi. Laborum magna aliquip veniam eu consectetur in in magna culpa commodo voluptate adipisicing. Nostrud aliquip aliquip sint veniam officia ex aliqua et ullamco.\r\n",
+ "registered": "2014-07-21T01:45:59 -02:00",
+ "latitude": 23.937872,
+ "longitude": 90.256502,
+ "tags": [
+ "elit",
+ "in",
+ "anim",
+ "in",
+ "elit",
+ "officia",
+ "sit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Elliott Hays"
+ },
+ {
+ "id": 1,
+ "name": "Leon Gutierrez"
+ },
+ {
+ "id": 2,
+ "name": "Bass Odonnell"
+ }
+ ],
+ "greeting": "Hello, Imelda Duffy! You have 3 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af31e477d6b6613865",
+ "index": 542,
+ "guid": "55674330-a49d-4cd3-9e28-3e207525e32c",
+ "isActive": true,
+ "balance": "$1,795.10",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "brown",
+ "name": "Pauline Alford",
+ "gender": "female",
+ "company": "COMTOUR",
+ "email": "paulinealford@comtour.com",
+ "phone": "+1 (817) 432-3598",
+ "address": "609 Division Place, Wilsonia, Palau, 3043",
+ "about": "Veniam Lorem id id quis commodo non. Aute et non voluptate incididunt ex duis ea. Ut aliqua reprehenderit qui mollit. Ipsum minim sunt laboris pariatur minim. Aute id magna aliqua laborum eu elit laborum magna sint deserunt incididunt nulla. Est sint labore deserunt eu. Eu deserunt magna dolor non excepteur est cillum.\r\n",
+ "registered": "2014-10-14T09:10:25 -02:00",
+ "latitude": -38.950372,
+ "longitude": -11.072509,
+ "tags": [
+ "excepteur",
+ "labore",
+ "nisi",
+ "tempor",
+ "culpa",
+ "enim",
+ "cupidatat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Sue Ellis"
+ },
+ {
+ "id": 1,
+ "name": "Herring Blevins"
+ },
+ {
+ "id": 2,
+ "name": "Robyn Fields"
+ }
+ ],
+ "greeting": "Hello, Pauline Alford! You have 5 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af3595d2dc88a2b51c",
+ "index": 543,
+ "guid": "29199e1b-075a-475e-891c-67ebc96d2e77",
+ "isActive": false,
+ "balance": "$3,654.16",
+ "picture": "http://placehold.it/32x32",
+ "age": 26,
+ "eyeColor": "brown",
+ "name": "Baxter Cox",
+ "gender": "male",
+ "company": "ELITA",
+ "email": "baxtercox@elita.com",
+ "phone": "+1 (856) 508-2638",
+ "address": "660 Brighton Court, Somerset, Northern Mariana Islands, 7001",
+ "about": "Nostrud voluptate aliquip nostrud dolor ex ad consequat mollit quis esse Lorem consequat dolore. Sint incididunt incididunt Lorem excepteur laboris deserunt non consectetur laboris. Proident magna qui nisi laborum nulla sit sunt magna aliqua. Eu consequat velit nisi velit in qui esse aliquip. Duis minim dolore voluptate sint amet in consequat aute.\r\n",
+ "registered": "2015-01-27T21:05:21 -01:00",
+ "latitude": 76.588996,
+ "longitude": 119.885644,
+ "tags": [
+ "est",
+ "cupidatat",
+ "eu",
+ "adipisicing",
+ "consequat",
+ "officia",
+ "cillum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "George Morales"
+ },
+ {
+ "id": 1,
+ "name": "Williams Pugh"
+ },
+ {
+ "id": 2,
+ "name": "Stevenson Olsen"
+ }
+ ],
+ "greeting": "Hello, Baxter Cox! You have 2 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afee082693c8dc0f9d",
+ "index": 544,
+ "guid": "c96e1436-0c7b-4a80-a544-fe27b7cfe700",
+ "isActive": true,
+ "balance": "$2,055.30",
+ "picture": "http://placehold.it/32x32",
+ "age": 28,
+ "eyeColor": "green",
+ "name": "Naomi Valdez",
+ "gender": "female",
+ "company": "RUGSTARS",
+ "email": "naomivaldez@rugstars.com",
+ "phone": "+1 (821) 526-2701",
+ "address": "381 Wogan Terrace, Aberdeen, Washington, 5241",
+ "about": "Quis quis in adipisicing ex officia voluptate fugiat Lorem non id ea. Amet cillum laborum duis aliquip cillum culpa Lorem. Elit proident minim fugiat culpa nisi. Anim velit labore quis nostrud. Amet cillum est deserunt laboris. Aute labore exercitation amet cillum non aute proident Lorem aliquip pariatur.\r\n",
+ "registered": "2015-01-17T03:31:52 -01:00",
+ "latitude": 20.682219,
+ "longitude": 122.897193,
+ "tags": [
+ "aliquip",
+ "esse",
+ "magna",
+ "et",
+ "eiusmod",
+ "ut",
+ "et"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Underwood Hyde"
+ },
+ {
+ "id": 1,
+ "name": "Hull Mcgee"
+ },
+ {
+ "id": 2,
+ "name": "Guerra Cochran"
+ }
+ ],
+ "greeting": "Hello, Naomi Valdez! You have 9 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afd5a831c887a925a0",
+ "index": 545,
+ "guid": "9adecac0-767c-4644-981a-9a2aaa893eaf",
+ "isActive": false,
+ "balance": "$1,109.39",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "green",
+ "name": "Olivia Hicks",
+ "gender": "female",
+ "company": "SNORUS",
+ "email": "oliviahicks@snorus.com",
+ "phone": "+1 (859) 560-2953",
+ "address": "858 Cypress Court, Urie, Massachusetts, 9351",
+ "about": "Laboris aliqua aliqua Lorem laboris duis laborum quis ea eiusmod eiusmod deserunt velit. Dolore cupidatat anim cupidatat ipsum et pariatur Lorem. Consectetur nisi ex duis sit eiusmod laboris duis commodo. Do consectetur laboris cillum mollit eiusmod aliqua irure adipisicing Lorem duis. Esse eu et deserunt Lorem Lorem dolore. Minim enim cillum est exercitation ullamco.\r\n",
+ "registered": "2014-01-17T09:56:20 -01:00",
+ "latitude": 33.864895,
+ "longitude": 149.093987,
+ "tags": [
+ "aute",
+ "cupidatat",
+ "aute",
+ "anim",
+ "sint",
+ "deserunt",
+ "nisi"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Goodman Hatfield"
+ },
+ {
+ "id": 1,
+ "name": "Hartman Parker"
+ },
+ {
+ "id": 2,
+ "name": "Russo Graves"
+ }
+ ],
+ "greeting": "Hello, Olivia Hicks! You have 3 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af4874a1b9005dfe20",
+ "index": 546,
+ "guid": "1c77f7bd-7f9b-43e7-837b-7a46c51be012",
+ "isActive": false,
+ "balance": "$2,752.09",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "green",
+ "name": "Eleanor Maxwell",
+ "gender": "female",
+ "company": "PEARLESEX",
+ "email": "eleanormaxwell@pearlesex.com",
+ "phone": "+1 (917) 518-2307",
+ "address": "531 Malta Street, Brenton, Tennessee, 5445",
+ "about": "Lorem quis cillum adipisicing deserunt qui et veniam officia. Adipisicing cillum commodo adipisicing mollit in id incididunt officia eiusmod voluptate commodo sint. Irure velit incididunt et magna nisi ipsum anim.\r\n",
+ "registered": "2014-01-04T20:58:21 -01:00",
+ "latitude": -38.852073,
+ "longitude": -103.769946,
+ "tags": [
+ "sint",
+ "sunt",
+ "eiusmod",
+ "incididunt",
+ "elit",
+ "aliquip",
+ "anim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Langley Bryan"
+ },
+ {
+ "id": 1,
+ "name": "Lucinda Cross"
+ },
+ {
+ "id": 2,
+ "name": "Duncan Mccarthy"
+ }
+ ],
+ "greeting": "Hello, Eleanor Maxwell! You have 1 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afef84e7be052cbbda",
+ "index": 547,
+ "guid": "1bc8bb53-9b58-4137-81b2-34d86a74f422",
+ "isActive": false,
+ "balance": "$2,576.24",
+ "picture": "http://placehold.it/32x32",
+ "age": 22,
+ "eyeColor": "brown",
+ "name": "Sherman Foley",
+ "gender": "male",
+ "company": "CORPORANA",
+ "email": "shermanfoley@corporana.com",
+ "phone": "+1 (988) 437-3068",
+ "address": "693 Rutledge Street, Worcester, Wisconsin, 7879",
+ "about": "Laboris sunt minim sunt nostrud enim. Duis adipisicing officia do magna laboris labore dolore Lorem ex. Ullamco mollit proident labore fugiat deserunt pariatur anim. Id duis sunt cupidatat et anim.\r\n",
+ "registered": "2014-03-13T00:49:59 -01:00",
+ "latitude": -45.527741,
+ "longitude": -20.418466,
+ "tags": [
+ "culpa",
+ "anim",
+ "reprehenderit",
+ "dolore",
+ "anim",
+ "ullamco",
+ "enim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Anderson Larsen"
+ },
+ {
+ "id": 1,
+ "name": "Leonor Shannon"
+ },
+ {
+ "id": 2,
+ "name": "Lynda Bean"
+ }
+ ],
+ "greeting": "Hello, Sherman Foley! You have 8 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af487285c4fb26ab39",
+ "index": 548,
+ "guid": "ec5bd384-a4f3-4b88-8c0d-0cfe2533ea4f",
+ "isActive": true,
+ "balance": "$1,634.83",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "blue",
+ "name": "Bray Cotton",
+ "gender": "male",
+ "company": "BICOL",
+ "email": "braycotton@bicol.com",
+ "phone": "+1 (957) 445-2977",
+ "address": "909 George Street, Comptche, Delaware, 7518",
+ "about": "Veniam ipsum duis enim irure dolor sint aute Lorem minim nostrud do nostrud excepteur. Culpa dolor elit ad eu occaecat commodo culpa incididunt cupidatat veniam elit veniam. Est exercitation laboris aliqua culpa culpa aute do cupidatat. Excepteur veniam enim cillum minim qui velit sit enim eiusmod velit eiusmod elit laborum. Qui magna aute anim aliquip in non proident consequat Lorem minim excepteur. Non sit ad id ipsum labore anim occaecat magna nostrud fugiat aliqua.\r\n",
+ "registered": "2014-01-31T13:32:19 -01:00",
+ "latitude": -14.668518,
+ "longitude": 44.323105,
+ "tags": [
+ "occaecat",
+ "consectetur",
+ "irure",
+ "tempor",
+ "officia",
+ "et",
+ "exercitation"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Cobb Warner"
+ },
+ {
+ "id": 1,
+ "name": "Nguyen Vega"
+ },
+ {
+ "id": 2,
+ "name": "Mann Horn"
+ }
+ ],
+ "greeting": "Hello, Bray Cotton! You have 4 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afd5322b80a1c9752c",
+ "index": 549,
+ "guid": "aa76541e-4d55-47e3-b58b-85be1cb1f4db",
+ "isActive": true,
+ "balance": "$1,392.38",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "green",
+ "name": "Gena Carney",
+ "gender": "female",
+ "company": "FILODYNE",
+ "email": "genacarney@filodyne.com",
+ "phone": "+1 (842) 536-2916",
+ "address": "656 Newkirk Placez, Dexter, American Samoa, 7533",
+ "about": "Excepteur in laboris sint ullamco et duis. Aliquip est nulla laboris occaecat consequat Lorem incididunt aute adipisicing eiusmod laboris occaecat veniam. Voluptate eiusmod minim laborum laborum excepteur velit ipsum Lorem proident. Sunt anim minim eu elit velit voluptate in est ullamco culpa. Qui officia dolor et consectetur. Dolore velit ea qui anim sint incididunt minim incididunt. Esse aute commodo fugiat commodo enim velit Lorem.\r\n",
+ "registered": "2014-07-09T19:31:51 -02:00",
+ "latitude": -45.613242,
+ "longitude": 173.752951,
+ "tags": [
+ "voluptate",
+ "do",
+ "do",
+ "do",
+ "irure",
+ "esse",
+ "duis"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Nolan Pope"
+ },
+ {
+ "id": 1,
+ "name": "Althea Calderon"
+ },
+ {
+ "id": 2,
+ "name": "Darcy Lancaster"
+ }
+ ],
+ "greeting": "Hello, Gena Carney! You have 10 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03aff9911df4acfd3043",
+ "index": 550,
+ "guid": "7957184c-2ec8-4e53-a92a-7ac7c1d5ecb0",
+ "isActive": true,
+ "balance": "$1,489.77",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "green",
+ "name": "Flowers Sellers",
+ "gender": "male",
+ "company": "EVENTAGE",
+ "email": "flowerssellers@eventage.com",
+ "phone": "+1 (862) 582-3207",
+ "address": "605 Linwood Street, Echo, Ohio, 5173",
+ "about": "Ea ad cupidatat nulla amet fugiat tempor est consectetur. Id aliqua laboris qui qui excepteur non pariatur officia labore veniam fugiat. Consequat ullamco amet ea minim magna nulla ullamco ex. Veniam labore adipisicing deserunt sit non ea irure. Lorem officia laborum veniam Lorem adipisicing dolor adipisicing sunt nostrud dolor. Eu aliqua et veniam anim. Voluptate ullamco in cupidatat id nostrud quis do est ut nulla mollit.\r\n",
+ "registered": "2014-04-14T07:47:45 -02:00",
+ "latitude": -73.40798,
+ "longitude": 93.443638,
+ "tags": [
+ "occaecat",
+ "labore",
+ "Lorem",
+ "sit",
+ "officia",
+ "anim",
+ "Lorem"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Michelle Long"
+ },
+ {
+ "id": 1,
+ "name": "Joni Guerrero"
+ },
+ {
+ "id": 2,
+ "name": "Sherri Stone"
+ }
+ ],
+ "greeting": "Hello, Flowers Sellers! You have 5 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af09ddd65a25d15606",
+ "index": 551,
+ "guid": "46322b79-5507-4f6d-8291-d7557f954f20",
+ "isActive": false,
+ "balance": "$2,716.64",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "blue",
+ "name": "Carolyn Cervantes",
+ "gender": "female",
+ "company": "SARASONIC",
+ "email": "carolyncervantes@sarasonic.com",
+ "phone": "+1 (927) 410-3062",
+ "address": "212 Leonard Street, Englevale, Louisiana, 1014",
+ "about": "Dolore amet est nostrud laborum anim laborum veniam quis officia voluptate sint. Quis ipsum Lorem eiusmod minim id est nostrud est aliqua nulla irure. Do reprehenderit aliquip dolor deserunt deserunt elit tempor quis adipisicing.\r\n",
+ "registered": "2014-05-06T07:52:34 -02:00",
+ "latitude": -42.934232,
+ "longitude": -14.787919,
+ "tags": [
+ "culpa",
+ "adipisicing",
+ "adipisicing",
+ "officia",
+ "ullamco",
+ "et",
+ "amet"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Petra Clayton"
+ },
+ {
+ "id": 1,
+ "name": "Marci Chambers"
+ },
+ {
+ "id": 2,
+ "name": "Walter Herman"
+ }
+ ],
+ "greeting": "Hello, Carolyn Cervantes! You have 2 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afd5bd513fedd3e14c",
+ "index": 552,
+ "guid": "1f4794ee-1235-418f-be4e-2ff46fb4406f",
+ "isActive": false,
+ "balance": "$2,263.47",
+ "picture": "http://placehold.it/32x32",
+ "age": 26,
+ "eyeColor": "green",
+ "name": "Griffin Griffith",
+ "gender": "male",
+ "company": "VIXO",
+ "email": "griffingriffith@vixo.com",
+ "phone": "+1 (894) 436-3182",
+ "address": "181 Carlton Avenue, Marion, Idaho, 3579",
+ "about": "Nulla deserunt ut eiusmod deserunt in duis culpa excepteur proident fugiat id sint. Lorem eu nisi aliqua duis exercitation laborum dolor cillum. Excepteur ad sint ea deserunt elit amet occaecat fugiat sint aliqua ex in. Do ipsum do ex ut. Enim et culpa elit tempor velit reprehenderit do ad ea duis. Sint irure pariatur proident ea mollit minim officia.\r\n",
+ "registered": "2014-09-08T17:06:47 -02:00",
+ "latitude": 13.143776,
+ "longitude": 26.412006,
+ "tags": [
+ "tempor",
+ "elit",
+ "reprehenderit",
+ "exercitation",
+ "ullamco",
+ "nisi",
+ "qui"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Compton Day"
+ },
+ {
+ "id": 1,
+ "name": "Kim Chavez"
+ },
+ {
+ "id": 2,
+ "name": "Saundra Robertson"
+ }
+ ],
+ "greeting": "Hello, Griffin Griffith! You have 9 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afefa4ad11b570eb62",
+ "index": 553,
+ "guid": "1ce7f7c7-16a7-4576-b34e-a47685562927",
+ "isActive": true,
+ "balance": "$2,678.25",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "blue",
+ "name": "Marks Clay",
+ "gender": "male",
+ "company": "EARTHPURE",
+ "email": "marksclay@earthpure.com",
+ "phone": "+1 (920) 406-2847",
+ "address": "619 Blake Court, Oley, New Hampshire, 858",
+ "about": "Voluptate magna laboris nisi do sint duis. Adipisicing exercitation Lorem ipsum ad quis do aute qui id consequat anim consectetur nulla in. Mollit fugiat labore irure eu magna mollit cupidatat deserunt magna est adipisicing et veniam. Officia consectetur deserunt amet fugiat do mollit anim. Dolor minim ipsum proident aliquip sunt voluptate.\r\n",
+ "registered": "2014-08-24T12:58:12 -02:00",
+ "latitude": -13.987446,
+ "longitude": 168.899418,
+ "tags": [
+ "aute",
+ "proident",
+ "do",
+ "consequat",
+ "id",
+ "dolor",
+ "consequat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Leticia Carr"
+ },
+ {
+ "id": 1,
+ "name": "Knox Griffin"
+ },
+ {
+ "id": 2,
+ "name": "Maura Savage"
+ }
+ ],
+ "greeting": "Hello, Marks Clay! You have 5 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af0ece6f38a69debd6",
+ "index": 554,
+ "guid": "e39b77cf-5b4c-447f-a12f-2dc806e4cf04",
+ "isActive": true,
+ "balance": "$3,032.31",
+ "picture": "http://placehold.it/32x32",
+ "age": 24,
+ "eyeColor": "blue",
+ "name": "Deann Burton",
+ "gender": "female",
+ "company": "GRUPOLI",
+ "email": "deannburton@grupoli.com",
+ "phone": "+1 (979) 559-2583",
+ "address": "445 Varet Street, Roy, Maine, 1288",
+ "about": "Nisi incididunt qui aliqua officia quis. Eu in nostrud Lorem cillum eu ipsum enim labore enim eu enim duis. Dolore do officia deserunt commodo mollit labore. In in dolor ea non officia. Elit culpa enim qui proident laboris eiusmod. Officia aliquip nulla ad est magna dolore laborum nostrud proident.\r\n",
+ "registered": "2014-11-18T02:58:24 -01:00",
+ "latitude": -77.38255,
+ "longitude": 104.917569,
+ "tags": [
+ "exercitation",
+ "culpa",
+ "ipsum",
+ "in",
+ "ad",
+ "minim",
+ "nostrud"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Lowery Brewer"
+ },
+ {
+ "id": 1,
+ "name": "Elva Christensen"
+ },
+ {
+ "id": 2,
+ "name": "Maxwell Stephenson"
+ }
+ ],
+ "greeting": "Hello, Deann Burton! You have 4 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afce9465335a1727f6",
+ "index": 555,
+ "guid": "7d8637d7-f096-428b-aca6-60afa833f67b",
+ "isActive": false,
+ "balance": "$1,776.78",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "blue",
+ "name": "Shelly Cunningham",
+ "gender": "female",
+ "company": "PETICULAR",
+ "email": "shellycunningham@peticular.com",
+ "phone": "+1 (958) 520-3528",
+ "address": "837 Hamilton Walk, Goodville, Utah, 5403",
+ "about": "Nostrud ullamco enim eu cupidatat fugiat in sint. Elit elit anim ipsum sit dolor et excepteur dolor sit voluptate eu duis. Adipisicing duis non excepteur sunt cupidatat consequat nulla id cillum aliquip voluptate Lorem aliquip. Duis ea ullamco ullamco incididunt deserunt consequat adipisicing est esse duis dolor duis sint. Qui id aliqua aute commodo cupidatat est.\r\n",
+ "registered": "2014-06-25T20:52:08 -02:00",
+ "latitude": -56.960076,
+ "longitude": -10.582546,
+ "tags": [
+ "sunt",
+ "laborum",
+ "ipsum",
+ "aliqua",
+ "minim",
+ "officia",
+ "laborum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Mcdaniel Figueroa"
+ },
+ {
+ "id": 1,
+ "name": "Henderson Lane"
+ },
+ {
+ "id": 2,
+ "name": "Patrick Cummings"
+ }
+ ],
+ "greeting": "Hello, Shelly Cunningham! You have 7 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afe50c6d6cc808ec38",
+ "index": 556,
+ "guid": "3ab43ec0-99bd-4d6e-9275-f12acd1f5d57",
+ "isActive": false,
+ "balance": "$1,107.46",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "blue",
+ "name": "Vonda Guerra",
+ "gender": "female",
+ "company": "KOOGLE",
+ "email": "vondaguerra@koogle.com",
+ "phone": "+1 (897) 566-2796",
+ "address": "126 Tabor Court, Shindler, West Virginia, 9097",
+ "about": "Culpa ad consequat ipsum Lorem voluptate magna quis mollit occaecat. Consequat anim ad amet tempor enim nisi adipisicing officia deserunt sint. Aliquip elit non occaecat irure duis. Eiusmod ea consequat minim sit ea. Ullamco eiusmod aliqua mollit laboris exercitation duis eiusmod laboris Lorem voluptate quis officia.\r\n",
+ "registered": "2014-11-30T23:02:39 -01:00",
+ "latitude": 2.475864,
+ "longitude": -154.576652,
+ "tags": [
+ "est",
+ "adipisicing",
+ "mollit",
+ "culpa",
+ "eiusmod",
+ "dolor",
+ "labore"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Loraine Fitzgerald"
+ },
+ {
+ "id": 1,
+ "name": "Patterson Kirk"
+ },
+ {
+ "id": 2,
+ "name": "Alison Andrews"
+ }
+ ],
+ "greeting": "Hello, Vonda Guerra! You have 3 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afb697d7ac0df186c0",
+ "index": 557,
+ "guid": "a0a3b1ec-baba-4afe-bfab-0e697f91b438",
+ "isActive": false,
+ "balance": "$1,526.71",
+ "picture": "http://placehold.it/32x32",
+ "age": 32,
+ "eyeColor": "green",
+ "name": "Amanda Morton",
+ "gender": "female",
+ "company": "MIRACLIS",
+ "email": "amandamorton@miraclis.com",
+ "phone": "+1 (904) 494-3306",
+ "address": "925 Whitwell Place, Noblestown, Virginia, 2855",
+ "about": "Mollit pariatur magna nulla amet officia aliqua cupidatat esse ea id. Id in consequat eu nulla dolor dolor quis adipisicing. Velit anim sit voluptate anim et enim culpa ipsum consectetur. Do sint magna anim adipisicing. Incididunt id adipisicing non ut fugiat voluptate sint. Esse consequat exercitation consectetur aliqua adipisicing consectetur nisi magna et.\r\n",
+ "registered": "2014-01-14T07:09:33 -01:00",
+ "latitude": 70.912678,
+ "longitude": 162.588373,
+ "tags": [
+ "cillum",
+ "nostrud",
+ "ut",
+ "aliquip",
+ "anim",
+ "ex",
+ "non"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Simone Mckinney"
+ },
+ {
+ "id": 1,
+ "name": "Sonja Livingston"
+ },
+ {
+ "id": 2,
+ "name": "Terrell Mcclain"
+ }
+ ],
+ "greeting": "Hello, Amanda Morton! You have 6 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afc4ce1fd5338def20",
+ "index": 558,
+ "guid": "8ce56687-df88-4bef-8d02-ec531a7b7957",
+ "isActive": true,
+ "balance": "$2,779.25",
+ "picture": "http://placehold.it/32x32",
+ "age": 28,
+ "eyeColor": "blue",
+ "name": "Consuelo Holloway",
+ "gender": "female",
+ "company": "ECLIPSENT",
+ "email": "consueloholloway@eclipsent.com",
+ "phone": "+1 (889) 421-2855",
+ "address": "419 Coleridge Street, Enoree, Florida, 2484",
+ "about": "Laboris incididunt id eiusmod consequat quis anim. Adipisicing exercitation aute commodo id occaecat enim nisi laboris excepteur cillum do amet nostrud reprehenderit. Est cupidatat anim fugiat amet irure fugiat sit.\r\n",
+ "registered": "2015-03-16T05:52:39 -01:00",
+ "latitude": 60.934269,
+ "longitude": 71.680777,
+ "tags": [
+ "deserunt",
+ "irure",
+ "sint",
+ "culpa",
+ "pariatur",
+ "anim",
+ "ex"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Holcomb Silva"
+ },
+ {
+ "id": 1,
+ "name": "Guthrie Armstrong"
+ },
+ {
+ "id": 2,
+ "name": "Letha Powers"
+ }
+ ],
+ "greeting": "Hello, Consuelo Holloway! You have 2 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afbf0fec09a72e61a7",
+ "index": 559,
+ "guid": "8e7398b3-adef-4420-8254-1527b36cd7d5",
+ "isActive": false,
+ "balance": "$3,508.13",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "blue",
+ "name": "Gay Shields",
+ "gender": "female",
+ "company": "DIGINETIC",
+ "email": "gayshields@diginetic.com",
+ "phone": "+1 (849) 586-3925",
+ "address": "523 Union Street, Yukon, Texas, 6699",
+ "about": "Non irure duis nulla dolor Lorem quis. Pariatur et sit fugiat sit. Adipisicing eiusmod aliquip ex ullamco cupidatat officia quis ut sint minim ad elit nulla.\r\n",
+ "registered": "2014-04-06T19:48:46 -02:00",
+ "latitude": 79.793747,
+ "longitude": 80.596418,
+ "tags": [
+ "officia",
+ "in",
+ "reprehenderit",
+ "pariatur",
+ "consectetur",
+ "enim",
+ "sint"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Clark West"
+ },
+ {
+ "id": 1,
+ "name": "Kasey Gray"
+ },
+ {
+ "id": 2,
+ "name": "Marquez Obrien"
+ }
+ ],
+ "greeting": "Hello, Gay Shields! You have 3 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afbcaf15e8911cea2f",
+ "index": 560,
+ "guid": "6974a085-a022-4667-a5d7-d3ae98867c2b",
+ "isActive": true,
+ "balance": "$3,426.17",
+ "picture": "http://placehold.it/32x32",
+ "age": 26,
+ "eyeColor": "green",
+ "name": "Ashlee Morrow",
+ "gender": "female",
+ "company": "PHARMEX",
+ "email": "ashleemorrow@pharmex.com",
+ "phone": "+1 (908) 492-3932",
+ "address": "608 Nova Court, Garfield, Guam, 8379",
+ "about": "Magna in tempor sunt cupidatat ex enim et esse Lorem eu aliquip non cillum consequat. Non tempor anim reprehenderit eiusmod dolor ea. Culpa ea et amet esse. Dolore duis do in cillum dolor magna Lorem ea enim exercitation sunt minim id enim. Enim ea sint exercitation quis enim eu mollit incididunt consectetur excepteur eiusmod dolor exercitation cillum.\r\n",
+ "registered": "2014-11-03T04:59:50 -01:00",
+ "latitude": 13.21689,
+ "longitude": -168.016079,
+ "tags": [
+ "culpa",
+ "sunt",
+ "ea",
+ "ea",
+ "cupidatat",
+ "consectetur",
+ "aliquip"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Adrienne Decker"
+ },
+ {
+ "id": 1,
+ "name": "Zamora Cook"
+ },
+ {
+ "id": 2,
+ "name": "Carpenter Estrada"
+ }
+ ],
+ "greeting": "Hello, Ashlee Morrow! You have 7 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afdf3344080e8e1d25",
+ "index": 561,
+ "guid": "b39362d8-28bf-499d-8275-6ce7b8d37f1e",
+ "isActive": true,
+ "balance": "$1,463.66",
+ "picture": "http://placehold.it/32x32",
+ "age": 32,
+ "eyeColor": "brown",
+ "name": "Hyde Booker",
+ "gender": "male",
+ "company": "JOVIOLD",
+ "email": "hydebooker@joviold.com",
+ "phone": "+1 (898) 401-3324",
+ "address": "760 Newkirk Avenue, Galesville, Alaska, 1895",
+ "about": "Sit magna enim pariatur in culpa in incididunt consectetur qui. Ullamco duis et cillum id tempor nostrud reprehenderit et irure voluptate ipsum ad sit minim. Cillum et adipisicing sit excepteur sunt eu adipisicing do exercitation elit enim qui exercitation.\r\n",
+ "registered": "2014-11-01T11:43:04 -01:00",
+ "latitude": -87.251171,
+ "longitude": -75.511714,
+ "tags": [
+ "voluptate",
+ "magna",
+ "laboris",
+ "ea",
+ "non",
+ "ullamco",
+ "officia"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Santiago Gregory"
+ },
+ {
+ "id": 1,
+ "name": "Spears Manning"
+ },
+ {
+ "id": 2,
+ "name": "Allison Cruz"
+ }
+ ],
+ "greeting": "Hello, Hyde Booker! You have 8 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af2ccdc7049ce749d1",
+ "index": 562,
+ "guid": "9bec2daa-070f-457b-9fbe-ce455784db10",
+ "isActive": true,
+ "balance": "$3,751.81",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "brown",
+ "name": "Freeman Santiago",
+ "gender": "male",
+ "company": "SPEEDBOLT",
+ "email": "freemansantiago@speedbolt.com",
+ "phone": "+1 (839) 447-3527",
+ "address": "386 Highlawn Avenue, Ryderwood, District Of Columbia, 4836",
+ "about": "Irure magna consectetur id ea in adipisicing exercitation fugiat occaecat. Pariatur magna esse ut dolor. Ad minim duis nostrud do nisi.\r\n",
+ "registered": "2014-08-04T14:33:32 -02:00",
+ "latitude": 13.079719,
+ "longitude": -98.781242,
+ "tags": [
+ "occaecat",
+ "labore",
+ "mollit",
+ "culpa",
+ "cupidatat",
+ "do",
+ "enim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Mallory Battle"
+ },
+ {
+ "id": 1,
+ "name": "Macdonald Roberts"
+ },
+ {
+ "id": 2,
+ "name": "Chavez Wade"
+ }
+ ],
+ "greeting": "Hello, Freeman Santiago! You have 8 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afc2c59ae9d0e9530f",
+ "index": 563,
+ "guid": "99a69512-b552-443b-a652-a9af3c9f7883",
+ "isActive": false,
+ "balance": "$3,720.77",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "brown",
+ "name": "Reid Mendez",
+ "gender": "male",
+ "company": "FRANSCENE",
+ "email": "reidmendez@franscene.com",
+ "phone": "+1 (924) 452-2565",
+ "address": "659 Pierrepont Street, Hoehne, New York, 5556",
+ "about": "Esse mollit consequat do consectetur consectetur. Ex magna mollit ipsum tempor consequat tempor laborum consequat sit aliqua reprehenderit. Consequat sit anim commodo consequat nulla nulla.\r\n",
+ "registered": "2015-04-09T13:28:27 -02:00",
+ "latitude": -61.630888,
+ "longitude": 58.681679,
+ "tags": [
+ "quis",
+ "anim",
+ "veniam",
+ "culpa",
+ "veniam",
+ "occaecat",
+ "commodo"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Harriett Whitley"
+ },
+ {
+ "id": 1,
+ "name": "Lindsay Golden"
+ },
+ {
+ "id": 2,
+ "name": "Kristie Franco"
+ }
+ ],
+ "greeting": "Hello, Reid Mendez! You have 9 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af8bcf3c018902f3bb",
+ "index": 564,
+ "guid": "5566e2f5-976f-4ca4-bc4a-99c307ad8d27",
+ "isActive": true,
+ "balance": "$3,399.14",
+ "picture": "http://placehold.it/32x32",
+ "age": 36,
+ "eyeColor": "brown",
+ "name": "Cummings Acevedo",
+ "gender": "male",
+ "company": "GLASSTEP",
+ "email": "cummingsacevedo@glasstep.com",
+ "phone": "+1 (983) 561-2574",
+ "address": "508 Dahlgreen Place, Tuttle, North Carolina, 9542",
+ "about": "Minim esse proident proident exercitation et eiusmod id ea id voluptate. Aliquip ea culpa ex ad velit officia esse. Irure veniam dolore fugiat laboris dolore tempor deserunt Lorem consequat nisi ipsum. Ut aliquip in velit proident anim fugiat aute ea ad laborum dolor aliqua magna cupidatat. Voluptate occaecat magna consequat eiusmod qui nostrud laborum eu ad. Duis irure culpa Lorem ea magna voluptate sint minim culpa. Dolore culpa reprehenderit ullamco eiusmod occaecat nostrud laboris ullamco excepteur ad aliqua voluptate cupidatat eu.\r\n",
+ "registered": "2014-11-09T02:51:41 -01:00",
+ "latitude": -68.246634,
+ "longitude": -145.043561,
+ "tags": [
+ "laboris",
+ "ipsum",
+ "in",
+ "cillum",
+ "eu",
+ "qui",
+ "aliqua"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Conway Glass"
+ },
+ {
+ "id": 1,
+ "name": "Estrada Chan"
+ },
+ {
+ "id": 2,
+ "name": "Frederick Valenzuela"
+ }
+ ],
+ "greeting": "Hello, Cummings Acevedo! You have 10 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af077fd3df73187af0",
+ "index": 565,
+ "guid": "221bd05e-349c-41b4-8558-56e830258896",
+ "isActive": true,
+ "balance": "$2,844.44",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "brown",
+ "name": "Margo Page",
+ "gender": "female",
+ "company": "XYQAG",
+ "email": "margopage@xyqag.com",
+ "phone": "+1 (835) 523-3967",
+ "address": "925 Brighton Avenue, Canterwood, Connecticut, 8208",
+ "about": "Dolore non ut tempor aliqua ex incididunt incididunt aliqua mollit excepteur. Magna do et irure proident sit duis velit do. Reprehenderit cupidatat laboris ipsum laboris ipsum non minim aliqua Lorem eiusmod culpa elit. Nisi quis ut ex aliqua deserunt et elit velit ea deserunt esse laborum. Fugiat est incididunt anim do irure incididunt qui ex aliquip elit quis nulla nisi. Deserunt veniam est exercitation quis magna id culpa elit adipisicing eiusmod aliqua nulla excepteur.\r\n",
+ "registered": "2014-09-25T13:57:52 -02:00",
+ "latitude": -44.571845,
+ "longitude": -73.40318,
+ "tags": [
+ "non",
+ "mollit",
+ "officia",
+ "laboris",
+ "qui",
+ "eiusmod",
+ "magna"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Cain Mckee"
+ },
+ {
+ "id": 1,
+ "name": "Eileen Howell"
+ },
+ {
+ "id": 2,
+ "name": "Aline Best"
+ }
+ ],
+ "greeting": "Hello, Margo Page! You have 8 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af006176811ef355cb",
+ "index": 566,
+ "guid": "f5f99afb-4d8f-4b80-bc03-2b11d0ab0ca2",
+ "isActive": true,
+ "balance": "$3,937.13",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "green",
+ "name": "Carly Larson",
+ "gender": "female",
+ "company": "EYEWAX",
+ "email": "carlylarson@eyewax.com",
+ "phone": "+1 (820) 466-3023",
+ "address": "194 Tennis Court, Selma, South Carolina, 5414",
+ "about": "Occaecat nisi ut ad incididunt. Lorem consectetur ut consectetur ipsum ea. Dolor adipisicing commodo sint ea dolore cupidatat minim laboris enim do incididunt aliquip in aute.\r\n",
+ "registered": "2014-10-24T07:05:17 -02:00",
+ "latitude": 83.658275,
+ "longitude": 153.641625,
+ "tags": [
+ "voluptate",
+ "nulla",
+ "deserunt",
+ "id",
+ "est",
+ "ad",
+ "anim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Buchanan English"
+ },
+ {
+ "id": 1,
+ "name": "Holman Delacruz"
+ },
+ {
+ "id": 2,
+ "name": "West Kaufman"
+ }
+ ],
+ "greeting": "Hello, Carly Larson! You have 7 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af37734556bb493b3c",
+ "index": 567,
+ "guid": "91a2ccb8-fa4b-4d28-8ea4-49b29df8a62f",
+ "isActive": false,
+ "balance": "$1,871.89",
+ "picture": "http://placehold.it/32x32",
+ "age": 38,
+ "eyeColor": "brown",
+ "name": "Araceli Simpson",
+ "gender": "female",
+ "company": "COASH",
+ "email": "aracelisimpson@coash.com",
+ "phone": "+1 (989) 539-2178",
+ "address": "229 Tudor Terrace, Ivanhoe, Rhode Island, 6682",
+ "about": "Culpa nostrud ut amet sunt exercitation. Eu nisi do dolor ipsum est Lorem aute cillum aliquip commodo labore aliquip. Lorem amet excepteur est exercitation officia irure id esse reprehenderit commodo.\r\n",
+ "registered": "2014-06-01T03:52:00 -02:00",
+ "latitude": -44.704546,
+ "longitude": -171.39363,
+ "tags": [
+ "sunt",
+ "adipisicing",
+ "consectetur",
+ "labore",
+ "qui",
+ "cupidatat",
+ "officia"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Koch Curtis"
+ },
+ {
+ "id": 1,
+ "name": "Bettye Hoover"
+ },
+ {
+ "id": 2,
+ "name": "Drake Lowery"
+ }
+ ],
+ "greeting": "Hello, Araceli Simpson! You have 10 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af268d9255b594f6b0",
+ "index": 568,
+ "guid": "f983991a-df8c-480f-b72f-a53156d0568a",
+ "isActive": false,
+ "balance": "$2,969.63",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "green",
+ "name": "Molina Sandoval",
+ "gender": "male",
+ "company": "METROZ",
+ "email": "molinasandoval@metroz.com",
+ "phone": "+1 (967) 434-3277",
+ "address": "347 Lott Avenue, Frierson, Pennsylvania, 3225",
+ "about": "Minim cillum mollit voluptate duis culpa aliqua officia sint dolor officia ea consequat reprehenderit. Sunt sint nulla ex id anim nisi id ipsum. Minim non sint enim commodo veniam cupidatat reprehenderit ipsum dolor exercitation commodo. Consequat exercitation elit mollit duis reprehenderit pariatur adipisicing esse pariatur non dolor. Aute voluptate mollit reprehenderit enim tempor ex reprehenderit.\r\n",
+ "registered": "2014-10-06T01:30:02 -02:00",
+ "latitude": 0.83458,
+ "longitude": 6.935654,
+ "tags": [
+ "elit",
+ "enim",
+ "incididunt",
+ "do",
+ "eu",
+ "fugiat",
+ "consectetur"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Morse Fletcher"
+ },
+ {
+ "id": 1,
+ "name": "Collins Sharpe"
+ },
+ {
+ "id": 2,
+ "name": "Santos Bartlett"
+ }
+ ],
+ "greeting": "Hello, Molina Sandoval! You have 4 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03aff0f1b582301d8339",
+ "index": 569,
+ "guid": "d2f96eea-de33-412b-950a-fa01b8c3959f",
+ "isActive": false,
+ "balance": "$3,880.81",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "brown",
+ "name": "Bryant Moon",
+ "gender": "male",
+ "company": "ZILLA",
+ "email": "bryantmoon@zilla.com",
+ "phone": "+1 (831) 440-3679",
+ "address": "851 Prospect Avenue, Broadlands, Oklahoma, 621",
+ "about": "Dolor dolor cillum irure eu ullamco do labore deserunt sint. Aliqua mollit do voluptate pariatur magna amet sint. Nulla qui culpa sit incididunt minim qui. Nisi sint Lorem in incididunt est culpa excepteur eiusmod aliqua.\r\n",
+ "registered": "2015-03-07T19:29:16 -01:00",
+ "latitude": -50.077783,
+ "longitude": -159.426049,
+ "tags": [
+ "esse",
+ "proident",
+ "eiusmod",
+ "consectetur",
+ "voluptate",
+ "occaecat",
+ "ex"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Savannah Levine"
+ },
+ {
+ "id": 1,
+ "name": "Sheryl Moody"
+ },
+ {
+ "id": 2,
+ "name": "Hardin Torres"
+ }
+ ],
+ "greeting": "Hello, Bryant Moon! You have 10 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afc578c684f8a268b3",
+ "index": 570,
+ "guid": "8f09e4e2-e8ea-4d2a-b97a-d111b857dfe8",
+ "isActive": true,
+ "balance": "$3,287.53",
+ "picture": "http://placehold.it/32x32",
+ "age": 21,
+ "eyeColor": "brown",
+ "name": "Barlow Dominguez",
+ "gender": "male",
+ "company": "BUGSALL",
+ "email": "barlowdominguez@bugsall.com",
+ "phone": "+1 (968) 440-2960",
+ "address": "441 Beverly Road, Fairacres, Kansas, 4678",
+ "about": "Proident non incididunt commodo magna excepteur reprehenderit excepteur in ullamco ad consectetur cillum. Tempor culpa in magna culpa esse irure laborum irure. Laborum sit Lorem nisi sit. Amet et magna esse ea voluptate et aliquip veniam dolor. Lorem incididunt ut sunt amet quis non. In non sit elit aute officia ipsum esse commodo velit ex laboris.\r\n",
+ "registered": "2014-06-28T00:42:54 -02:00",
+ "latitude": -67.145157,
+ "longitude": -56.937263,
+ "tags": [
+ "culpa",
+ "dolore",
+ "nisi",
+ "esse",
+ "minim",
+ "sit",
+ "ex"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Colleen Estes"
+ },
+ {
+ "id": 1,
+ "name": "Allen Dean"
+ },
+ {
+ "id": 2,
+ "name": "Potter Cortez"
+ }
+ ],
+ "greeting": "Hello, Barlow Dominguez! You have 7 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af34b2be5825f3b8cb",
+ "index": 571,
+ "guid": "27e7a351-0c0b-4f2d-9d76-afafc0040388",
+ "isActive": true,
+ "balance": "$3,942.93",
+ "picture": "http://placehold.it/32x32",
+ "age": 23,
+ "eyeColor": "blue",
+ "name": "Manuela Wilcox",
+ "gender": "female",
+ "company": "AQUAFIRE",
+ "email": "manuelawilcox@aquafire.com",
+ "phone": "+1 (939) 562-3454",
+ "address": "162 Vermont Court, Waikele, Kentucky, 4851",
+ "about": "Esse deserunt et adipisicing est laborum occaecat laboris ullamco consequat magna et. Aliqua pariatur velit veniam sunt sit amet consectetur voluptate deserunt quis. Culpa dolore commodo proident laboris. In eiusmod laboris sunt proident enim sunt est aliqua ex id. Tempor commodo exercitation cillum laborum proident non.\r\n",
+ "registered": "2014-07-30T10:37:20 -02:00",
+ "latitude": 70.764702,
+ "longitude": -105.053271,
+ "tags": [
+ "minim",
+ "sunt",
+ "ea",
+ "deserunt",
+ "mollit",
+ "laboris",
+ "deserunt"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Dillon Frederick"
+ },
+ {
+ "id": 1,
+ "name": "Nielsen Mcintyre"
+ },
+ {
+ "id": 2,
+ "name": "Delgado Dunlap"
+ }
+ ],
+ "greeting": "Hello, Manuela Wilcox! You have 10 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afb3135cdad129636c",
+ "index": 572,
+ "guid": "61d2ee78-e124-4c36-8269-144805c72824",
+ "isActive": true,
+ "balance": "$2,051.17",
+ "picture": "http://placehold.it/32x32",
+ "age": 34,
+ "eyeColor": "green",
+ "name": "Shanna Johnston",
+ "gender": "female",
+ "company": "POLARAX",
+ "email": "shannajohnston@polarax.com",
+ "phone": "+1 (986) 491-3286",
+ "address": "694 Bristol Street, Grenelefe, Mississippi, 1304",
+ "about": "Ipsum quis adipisicing anim et veniam id nulla laborum tempor consectetur commodo minim ut sit. Cillum commodo proident labore nostrud aute elit officia amet mollit consectetur est dolor minim. Commodo anim ut excepteur eu eiusmod nulla non elit. Deserunt consequat ipsum Lorem sunt officia eu.\r\n",
+ "registered": "2014-04-28T04:12:24 -02:00",
+ "latitude": -10.416276,
+ "longitude": 18.782264,
+ "tags": [
+ "occaecat",
+ "labore",
+ "dolor",
+ "nulla",
+ "qui",
+ "et",
+ "consectetur"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Gracie Porter"
+ },
+ {
+ "id": 1,
+ "name": "Reilly Dotson"
+ },
+ {
+ "id": 2,
+ "name": "Santana Scott"
+ }
+ ],
+ "greeting": "Hello, Shanna Johnston! You have 8 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03afab88982dd19661ba",
+ "index": 573,
+ "guid": "eaa342c6-eb79-45c0-bf0b-35243b8323cf",
+ "isActive": true,
+ "balance": "$3,310.90",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "brown",
+ "name": "Paul Pollard",
+ "gender": "male",
+ "company": "NAMEBOX",
+ "email": "paulpollard@namebox.com",
+ "phone": "+1 (805) 578-3313",
+ "address": "626 Vanderbilt Street, Mathews, Montana, 2824",
+ "about": "Anim aliquip tempor quis nulla mollit labore nostrud ad labore elit aliqua. Velit excepteur esse veniam ad aliquip esse dolore consectetur ut minim excepteur dolore non do. Veniam amet labore dolor voluptate id incididunt cillum in nisi occaecat adipisicing sit elit Lorem. Anim in nisi occaecat Lorem nostrud sint commodo est ipsum in culpa. Fugiat consectetur dolore cillum do consectetur officia esse reprehenderit tempor labore laboris aliquip. Exercitation sint laborum veniam qui proident exercitation minim ipsum eiusmod eiusmod. Mollit enim sunt non cupidatat.\r\n",
+ "registered": "2014-06-14T11:42:09 -02:00",
+ "latitude": -61.746723,
+ "longitude": 157.303225,
+ "tags": [
+ "dolore",
+ "aliqua",
+ "cupidatat",
+ "do",
+ "amet",
+ "anim",
+ "laborum"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Foster Giles"
+ },
+ {
+ "id": 1,
+ "name": "Gentry Hudson"
+ },
+ {
+ "id": 2,
+ "name": "Carrie Potts"
+ }
+ ],
+ "greeting": "Hello, Paul Pollard! You have 3 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afb3ef1650c88b5f4e",
+ "index": 574,
+ "guid": "69808c2b-a2df-41e6-a5b0-f847d66f79e1",
+ "isActive": true,
+ "balance": "$3,074.78",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "blue",
+ "name": "Beryl Bradley",
+ "gender": "female",
+ "company": "COMTRAIL",
+ "email": "berylbradley@comtrail.com",
+ "phone": "+1 (862) 476-3909",
+ "address": "985 Graham Avenue, Vowinckel, North Dakota, 2240",
+ "about": "Cupidatat aliquip occaecat adipisicing pariatur incididunt anim tempor do. Officia aliquip mollit Lorem Lorem cupidatat aute ipsum ad qui. Ipsum non reprehenderit dolor eu officia esse in aliqua. Est nisi dolore eu sit amet duis duis Lorem in proident consectetur ullamco laborum proident. Ut veniam nisi non do Lorem sunt. Quis do officia est ex eu occaecat excepteur. Veniam in incididunt dolor incididunt mollit culpa sint do incididunt duis commodo sint occaecat proident.\r\n",
+ "registered": "2015-01-05T08:20:16 -01:00",
+ "latitude": 82.304578,
+ "longitude": -58.876076,
+ "tags": [
+ "ea",
+ "eu",
+ "ad",
+ "sunt",
+ "voluptate",
+ "sit",
+ "et"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Hatfield Dorsey"
+ },
+ {
+ "id": 1,
+ "name": "Ingram Davenport"
+ },
+ {
+ "id": 2,
+ "name": "Deidre Simmons"
+ }
+ ],
+ "greeting": "Hello, Beryl Bradley! You have 8 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03afd4cf126cab7f68f0",
+ "index": 575,
+ "guid": "f8bd8b9e-5c89-4de6-959f-fc03f111795e",
+ "isActive": true,
+ "balance": "$3,438.97",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "green",
+ "name": "Lopez Odom",
+ "gender": "male",
+ "company": "BUZZWORKS",
+ "email": "lopezodom@buzzworks.com",
+ "phone": "+1 (852) 508-2982",
+ "address": "308 Karweg Place, Sunnyside, Maryland, 4016",
+ "about": "Exercitation ipsum consequat sit Lorem eu nostrud elit sit aute proident proident consequat aute est. Pariatur dolore aliqua sunt ea eu. Aute ex do nostrud minim commodo et ipsum do consectetur incididunt deserunt excepteur non sint. Qui veniam id adipisicing exercitation reprehenderit minim culpa consequat ut irure duis non magna.\r\n",
+ "registered": "2014-11-16T20:32:13 -01:00",
+ "latitude": -12.459942,
+ "longitude": 173.492475,
+ "tags": [
+ "aute",
+ "sit",
+ "id",
+ "officia",
+ "nostrud",
+ "esse",
+ "adipisicing"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Juanita Bowers"
+ },
+ {
+ "id": 1,
+ "name": "Reva Cantrell"
+ },
+ {
+ "id": 2,
+ "name": "Alyson Rivers"
+ }
+ ],
+ "greeting": "Hello, Lopez Odom! You have 6 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03afae629366dab3dc1e",
+ "index": 576,
+ "guid": "3cf270d9-a7b9-4bde-9ff0-a1105eff2b16",
+ "isActive": false,
+ "balance": "$2,632.17",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "green",
+ "name": "Veronica Snider",
+ "gender": "female",
+ "company": "KROG",
+ "email": "veronicasnider@krog.com",
+ "phone": "+1 (811) 592-3123",
+ "address": "106 Vandalia Avenue, Orin, Hawaii, 972",
+ "about": "Ullamco eiusmod amet proident labore laborum. Dolor magna voluptate cillum irure fugiat do. Anim proident pariatur enim dolore adipisicing in labore sunt irure duis consectetur anim. Qui adipisicing minim eiusmod veniam duis dolor labore nostrud.\r\n",
+ "registered": "2014-09-10T00:00:28 -02:00",
+ "latitude": 37.175628,
+ "longitude": 121.973682,
+ "tags": [
+ "sint",
+ "laboris",
+ "quis",
+ "duis",
+ "officia",
+ "velit",
+ "Lorem"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Castro Munoz"
+ },
+ {
+ "id": 1,
+ "name": "Garrison Hester"
+ },
+ {
+ "id": 2,
+ "name": "Mercer Hodge"
+ }
+ ],
+ "greeting": "Hello, Veronica Snider! You have 7 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af183b2cadea9bd815",
+ "index": 577,
+ "guid": "a4044c66-9229-4487-a16c-bfde0644c13d",
+ "isActive": true,
+ "balance": "$1,366.46",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "blue",
+ "name": "Esther French",
+ "gender": "female",
+ "company": "COLUMELLA",
+ "email": "estherfrench@columella.com",
+ "phone": "+1 (802) 416-3696",
+ "address": "204 Williams Court, Darlington, Arizona, 5213",
+ "about": "Sint minim nulla minim dolor veniam qui pariatur. Dolor Lorem dolor labore laborum incididunt do dolore duis in. Exercitation sit enim eu nostrud exercitation nisi magna. Mollit dolore do nulla cupidatat nisi aute aliqua do do nisi adipisicing. Enim veniam commodo ea eiusmod Lorem cupidatat. Quis adipisicing esse laboris do commodo laborum quis ex magna qui do fugiat consequat sint. Veniam anim dolore elit tempor ullamco exercitation sunt nulla commodo ea ex et.\r\n",
+ "registered": "2014-04-29T17:00:56 -02:00",
+ "latitude": 78.440541,
+ "longitude": -142.272729,
+ "tags": [
+ "occaecat",
+ "velit",
+ "consequat",
+ "pariatur",
+ "dolor",
+ "cillum",
+ "nostrud"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Hillary Fleming"
+ },
+ {
+ "id": 1,
+ "name": "Hoffman Hart"
+ },
+ {
+ "id": 2,
+ "name": "Schmidt Townsend"
+ }
+ ],
+ "greeting": "Hello, Esther French! You have 3 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af277956cfb5dc056f",
+ "index": 578,
+ "guid": "c6d8dd0a-9850-4a62-8427-bc8f6c5323b4",
+ "isActive": false,
+ "balance": "$2,893.35",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "brown",
+ "name": "Mcknight Harper",
+ "gender": "male",
+ "company": "DECRATEX",
+ "email": "mcknightharper@decratex.com",
+ "phone": "+1 (924) 406-2633",
+ "address": "384 Seeley Street, Trinway, Arkansas, 5425",
+ "about": "Id cillum et nostrud elit. Id officia quis Lorem tempor minim ut eu aute est ea. Ullamco et aute id est anim excepteur nostrud qui nulla proident consequat reprehenderit id culpa. Excepteur sunt cillum fugiat voluptate adipisicing amet mollit ex sit amet qui mollit duis. Excepteur consectetur laborum nostrud voluptate aliquip enim sit ex pariatur eu dolor. Pariatur ea anim laboris occaecat ex nulla quis dolor elit. Mollit elit velit enim voluptate veniam.\r\n",
+ "registered": "2015-03-15T06:05:56 -01:00",
+ "latitude": 39.710619,
+ "longitude": 135.894387,
+ "tags": [
+ "adipisicing",
+ "dolore",
+ "aliqua",
+ "quis",
+ "sint",
+ "nisi",
+ "magna"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Hazel Maldonado"
+ },
+ {
+ "id": 1,
+ "name": "Sparks Barr"
+ },
+ {
+ "id": 2,
+ "name": "Neva Vance"
+ }
+ ],
+ "greeting": "Hello, Mcknight Harper! You have 6 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af4445bef10e7ea7a0",
+ "index": 579,
+ "guid": "c3342ffd-5d72-410a-9a23-d1e077c25c75",
+ "isActive": false,
+ "balance": "$2,531.06",
+ "picture": "http://placehold.it/32x32",
+ "age": 32,
+ "eyeColor": "green",
+ "name": "Sharp Jacobson",
+ "gender": "male",
+ "company": "BLEENDOT",
+ "email": "sharpjacobson@bleendot.com",
+ "phone": "+1 (812) 511-3165",
+ "address": "172 Schweikerts Walk, Dixonville, Nevada, 4505",
+ "about": "Ex dolore fugiat enim excepteur cillum consectetur est. Id aute irure occaecat ea veniam culpa dolor laborum nisi in fugiat. Incididunt aliqua quis consectetur pariatur. Do pariatur velit sint culpa in aliquip Lorem elit aliquip nulla aute adipisicing laborum. Esse magna dolor proident reprehenderit. Sint elit eu culpa quis consectetur laboris adipisicing cillum quis magna enim adipisicing. Adipisicing minim nisi aute nulla eu et fugiat laborum aliquip tempor elit.\r\n",
+ "registered": "2014-03-31T19:13:26 -02:00",
+ "latitude": 33.626265,
+ "longitude": -172.429315,
+ "tags": [
+ "ea",
+ "in",
+ "exercitation",
+ "sunt",
+ "elit",
+ "non",
+ "voluptate"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Bird Conway"
+ },
+ {
+ "id": 1,
+ "name": "Davis Weber"
+ },
+ {
+ "id": 2,
+ "name": "Melody Small"
+ }
+ ],
+ "greeting": "Hello, Sharp Jacobson! You have 5 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af0425d339e22f285a",
+ "index": 580,
+ "guid": "67a340b4-4c8f-4911-b744-7d70f11bc978",
+ "isActive": true,
+ "balance": "$1,418.67",
+ "picture": "http://placehold.it/32x32",
+ "age": 28,
+ "eyeColor": "green",
+ "name": "Patsy Newton",
+ "gender": "female",
+ "company": "CANDECOR",
+ "email": "patsynewton@candecor.com",
+ "phone": "+1 (883) 525-2699",
+ "address": "485 Llama Court, Brecon, New Jersey, 5319",
+ "about": "Consequat aliqua adipisicing officia deserunt sint non fugiat et anim et. Nisi ullamco incididunt Lorem labore nulla deserunt tempor consectetur deserunt consequat cupidatat. Sunt culpa nostrud amet labore elit. Ad culpa laborum proident qui in est proident magna elit veniam Lorem. Fugiat ipsum voluptate sunt non nisi cupidatat in consectetur tempor culpa nisi dolor.\r\n",
+ "registered": "2014-11-05T19:35:46 -01:00",
+ "latitude": -40.390147,
+ "longitude": -64.315683,
+ "tags": [
+ "occaecat",
+ "officia",
+ "proident",
+ "ea",
+ "nulla",
+ "deserunt",
+ "dolor"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Sophia Mcmillan"
+ },
+ {
+ "id": 1,
+ "name": "Ballard Hull"
+ },
+ {
+ "id": 2,
+ "name": "Stout Grimes"
+ }
+ ],
+ "greeting": "Hello, Patsy Newton! You have 9 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af3525ae32e2490075",
+ "index": 581,
+ "guid": "e4bc7214-1904-488e-9d47-7a8bd91c43d2",
+ "isActive": true,
+ "balance": "$1,316.50",
+ "picture": "http://placehold.it/32x32",
+ "age": 28,
+ "eyeColor": "green",
+ "name": "Hester Santos",
+ "gender": "male",
+ "company": "DIGIPRINT",
+ "email": "hestersantos@digiprint.com",
+ "phone": "+1 (898) 528-3645",
+ "address": "819 Barlow Drive, Sunwest, Marshall Islands, 5348",
+ "about": "Sint est id magna tempor mollit. Qui elit tempor esse enim. Aute officia nostrud excepteur culpa minim.\r\n",
+ "registered": "2014-04-13T20:36:25 -02:00",
+ "latitude": -3.244656,
+ "longitude": 133.836839,
+ "tags": [
+ "aliquip",
+ "velit",
+ "veniam",
+ "fugiat",
+ "nostrud",
+ "enim",
+ "aliqua"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Jill Johns"
+ },
+ {
+ "id": 1,
+ "name": "Dawson Patel"
+ },
+ {
+ "id": 2,
+ "name": "Dudley Wiggins"
+ }
+ ],
+ "greeting": "Hello, Hester Santos! You have 9 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af1120cd0cd040a70a",
+ "index": 582,
+ "guid": "99a9a359-8af8-47d4-9786-d6a0552f2550",
+ "isActive": true,
+ "balance": "$2,938.70",
+ "picture": "http://placehold.it/32x32",
+ "age": 32,
+ "eyeColor": "blue",
+ "name": "Kathy Salinas",
+ "gender": "female",
+ "company": "APPLIDECK",
+ "email": "kathysalinas@applideck.com",
+ "phone": "+1 (970) 592-3088",
+ "address": "728 Radde Place, Roeville, Georgia, 2628",
+ "about": "Est consequat do labore amet eu qui magna irure incididunt tempor Lorem minim dolore commodo. Officia culpa quis aute nisi. Aliquip esse occaecat consequat excepteur quis aliquip. Minim ullamco excepteur commodo nisi eiusmod sint mollit laboris nulla nulla adipisicing cillum tempor enim. Incididunt adipisicing excepteur consequat non incididunt in eu.\r\n",
+ "registered": "2014-10-28T05:35:11 -01:00",
+ "latitude": -11.951531,
+ "longitude": 132.174562,
+ "tags": [
+ "nisi",
+ "officia",
+ "eiusmod",
+ "adipisicing",
+ "quis",
+ "velit",
+ "labore"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Rush Rhodes"
+ },
+ {
+ "id": 1,
+ "name": "Minnie Leblanc"
+ },
+ {
+ "id": 2,
+ "name": "Imogene Witt"
+ }
+ ],
+ "greeting": "Hello, Kathy Salinas! You have 8 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af6da679223629f0af",
+ "index": 583,
+ "guid": "f3099c33-8461-4143-abaf-df8197dbbe1d",
+ "isActive": false,
+ "balance": "$2,143.50",
+ "picture": "http://placehold.it/32x32",
+ "age": 30,
+ "eyeColor": "blue",
+ "name": "Duke Jarvis",
+ "gender": "male",
+ "company": "NAMEGEN",
+ "email": "dukejarvis@namegen.com",
+ "phone": "+1 (947) 499-2627",
+ "address": "568 Scholes Street, Coinjock, Virgin Islands, 4719",
+ "about": "Eiusmod minim consequat minim dolor. Eu anim et dolore nostrud nostrud commodo officia dolore adipisicing. Pariatur dolore ad sunt anim cupidatat dolor veniam reprehenderit qui minim aliqua laborum aute. Voluptate voluptate eiusmod culpa ea ex exercitation magna fugiat in veniam aliquip ut ex. In reprehenderit deserunt exercitation qui. Anim excepteur duis commodo ipsum et velit ut cupidatat proident ullamco.\r\n",
+ "registered": "2015-04-01T02:48:35 -02:00",
+ "latitude": 9.061944,
+ "longitude": 132.492779,
+ "tags": [
+ "mollit",
+ "minim",
+ "incididunt",
+ "reprehenderit",
+ "voluptate",
+ "ut",
+ "fugiat"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Elisa Rosario"
+ },
+ {
+ "id": 1,
+ "name": "Cote Knox"
+ },
+ {
+ "id": 2,
+ "name": "Franco Pearson"
+ }
+ ],
+ "greeting": "Hello, Duke Jarvis! You have 7 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03affe6ed70eeed3e32d",
+ "index": 584,
+ "guid": "88e8e48e-95bc-4ced-b614-13ec34c91ce7",
+ "isActive": true,
+ "balance": "$3,392.67",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "green",
+ "name": "Stanton Cannon",
+ "gender": "male",
+ "company": "BOLAX",
+ "email": "stantoncannon@bolax.com",
+ "phone": "+1 (822) 564-3182",
+ "address": "295 Boerum Street, Derwood, Colorado, 1977",
+ "about": "Cillum proident officia amet culpa ipsum do enim. Velit ad minim aliqua quis ullamco esse duis. Amet mollit nisi sunt mollit non reprehenderit.\r\n",
+ "registered": "2014-10-31T01:30:53 -01:00",
+ "latitude": 45.261215,
+ "longitude": 111.408003,
+ "tags": [
+ "quis",
+ "tempor",
+ "veniam",
+ "dolore",
+ "cupidatat",
+ "elit",
+ "sunt"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Berta Mathis"
+ },
+ {
+ "id": 1,
+ "name": "Winnie Price"
+ },
+ {
+ "id": 2,
+ "name": "Cherry Oneill"
+ }
+ ],
+ "greeting": "Hello, Stanton Cannon! You have 10 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af5c252f157428cc2f",
+ "index": 585,
+ "guid": "dce21733-cfe4-4b79-bcdd-c2fd7136730f",
+ "isActive": true,
+ "balance": "$2,503.76",
+ "picture": "http://placehold.it/32x32",
+ "age": 35,
+ "eyeColor": "blue",
+ "name": "Caitlin Shaw",
+ "gender": "female",
+ "company": "EXTREMO",
+ "email": "caitlinshaw@extremo.com",
+ "phone": "+1 (806) 438-2895",
+ "address": "911 Caton Place, Foxworth, Vermont, 5080",
+ "about": "Anim nulla velit dolor adipisicing aute elit irure aliquip magna nostrud. Ex laborum quis nostrud velit irure est. Enim ipsum laborum elit dolor et consectetur dolor deserunt et labore. Ullamco deserunt qui non irure id laboris culpa deserunt excepteur irure enim. Eu labore do quis excepteur. Velit ex esse qui commodo voluptate est dolore qui aliquip ipsum consequat deserunt ut cillum. Labore sint nulla velit nulla aliqua mollit deserunt proident sunt voluptate consectetur sit Lorem esse.\r\n",
+ "registered": "2014-10-25T03:11:25 -02:00",
+ "latitude": 31.060322,
+ "longitude": -114.698926,
+ "tags": [
+ "id",
+ "consequat",
+ "ex",
+ "occaecat",
+ "ipsum",
+ "officia",
+ "in"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Acosta Riggs"
+ },
+ {
+ "id": 1,
+ "name": "Phyllis Frank"
+ },
+ {
+ "id": 2,
+ "name": "Ramona Hubbard"
+ }
+ ],
+ "greeting": "Hello, Caitlin Shaw! You have 9 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af80536e6b6629f6e8",
+ "index": 586,
+ "guid": "eb574bec-a657-43d9-a03b-31fcf3e4decd",
+ "isActive": true,
+ "balance": "$3,545.84",
+ "picture": "http://placehold.it/32x32",
+ "age": 32,
+ "eyeColor": "green",
+ "name": "Lucas Mayo",
+ "gender": "male",
+ "company": "KEENGEN",
+ "email": "lucasmayo@keengen.com",
+ "phone": "+1 (848) 424-3655",
+ "address": "229 Columbus Place, Nanafalia, Minnesota, 2770",
+ "about": "Ea occaecat deserunt mollit irure veniam nostrud Lorem. Eu officia commodo in enim dolore ex consequat cupidatat anim. Nisi anim officia elit nisi id ullamco excepteur eiusmod nostrud labore dolore elit eu. Ad incididunt minim est esse voluptate dolore. Duis qui ullamco labore adipisicing ipsum excepteur laborum sunt eiusmod ad tempor elit sunt et. Ullamco excepteur esse reprehenderit pariatur duis nulla elit velit cupidatat ea ullamco laboris consequat fugiat. Est laborum ad irure reprehenderit veniam aute nostrud exercitation ut excepteur culpa do et reprehenderit.\r\n",
+ "registered": "2014-07-21T20:51:45 -02:00",
+ "latitude": -31.860731,
+ "longitude": -1.733964,
+ "tags": [
+ "consectetur",
+ "eu",
+ "labore",
+ "commodo",
+ "et",
+ "quis",
+ "dolore"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Wells Goodwin"
+ },
+ {
+ "id": 1,
+ "name": "Fulton Clarke"
+ },
+ {
+ "id": 2,
+ "name": "Priscilla Norman"
+ }
+ ],
+ "greeting": "Hello, Lucas Mayo! You have 2 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af9a616fc4597795a3",
+ "index": 587,
+ "guid": "b3cfb9ad-f954-434f-a49a-97fa88385318",
+ "isActive": false,
+ "balance": "$2,267.50",
+ "picture": "http://placehold.it/32x32",
+ "age": 37,
+ "eyeColor": "green",
+ "name": "Penny Farrell",
+ "gender": "female",
+ "company": "SINGAVERA",
+ "email": "pennyfarrell@singavera.com",
+ "phone": "+1 (852) 575-2563",
+ "address": "688 Clinton Avenue, Norfolk, New Mexico, 5997",
+ "about": "Ullamco laborum aliqua consectetur quis veniam magna do fugiat et nostrud ea. Ipsum ut pariatur Lorem cupidatat voluptate eiusmod. Ipsum quis nostrud sint nisi. Magna eiusmod nisi in tempor. Laborum adipisicing anim ea excepteur anim adipisicing consequat nisi. Sint nulla amet do laboris id qui minim exercitation do amet est exercitation officia duis. Mollit esse magna eiusmod laborum enim non nisi duis enim.\r\n",
+ "registered": "2014-09-22T05:20:41 -02:00",
+ "latitude": -50.072823,
+ "longitude": 4.326251,
+ "tags": [
+ "labore",
+ "laborum",
+ "eiusmod",
+ "magna",
+ "nostrud",
+ "magna",
+ "esse"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Josie Singleton"
+ },
+ {
+ "id": 1,
+ "name": "Malone Calhoun"
+ },
+ {
+ "id": 2,
+ "name": "Mai Massey"
+ }
+ ],
+ "greeting": "Hello, Penny Farrell! You have 6 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af4de47233bcedc493",
+ "index": 588,
+ "guid": "f5b4520d-220b-4891-94d0-644a54c91a5a",
+ "isActive": true,
+ "balance": "$3,890.86",
+ "picture": "http://placehold.it/32x32",
+ "age": 21,
+ "eyeColor": "brown",
+ "name": "Janie Klein",
+ "gender": "female",
+ "company": "ANACHO",
+ "email": "janieklein@anacho.com",
+ "phone": "+1 (921) 565-3183",
+ "address": "726 Fayette Street, Caron, Alabama, 844",
+ "about": "Nisi mollit eiusmod minim ullamco aute occaecat. Qui enim ea labore ea veniam labore consequat veniam voluptate nostrud dolor eu officia. Reprehenderit veniam et laboris labore aliquip ullamco irure adipisicing aliquip. Commodo culpa cillum ad ad consectetur fugiat adipisicing. Eiusmod magna deserunt do reprehenderit sit dolore cupidatat elit est deserunt fugiat dolor sit aliquip.\r\n",
+ "registered": "2014-07-13T08:22:05 -02:00",
+ "latitude": 35.477472,
+ "longitude": 3.045901,
+ "tags": [
+ "laborum",
+ "minim",
+ "laborum",
+ "cillum",
+ "incididunt",
+ "ut",
+ "reprehenderit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Rochelle Beard"
+ },
+ {
+ "id": 1,
+ "name": "Dickerson Pickett"
+ },
+ {
+ "id": 2,
+ "name": "Lea Maynard"
+ }
+ ],
+ "greeting": "Hello, Janie Klein! You have 4 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af7fee8b57370b1839",
+ "index": 589,
+ "guid": "45a080e1-8907-4e78-b810-509c3503b4e2",
+ "isActive": true,
+ "balance": "$3,671.25",
+ "picture": "http://placehold.it/32x32",
+ "age": 27,
+ "eyeColor": "green",
+ "name": "Young Hunter",
+ "gender": "male",
+ "company": "ENERSOL",
+ "email": "younghunter@enersol.com",
+ "phone": "+1 (847) 502-2603",
+ "address": "579 Ivan Court, Drummond, Illinois, 8329",
+ "about": "Exercitation magna ipsum minim commodo amet labore laborum sit est fugiat. Magna id sint aute id excepteur aliqua sunt dolor velit esse magna. Sit culpa qui cillum sunt laborum reprehenderit consequat cillum aliquip in sunt. Irure in incididunt nostrud amet. Reprehenderit enim veniam velit enim ex.\r\n",
+ "registered": "2015-02-11T20:44:10 -01:00",
+ "latitude": -76.080077,
+ "longitude": 7.415334,
+ "tags": [
+ "consectetur",
+ "in",
+ "qui",
+ "occaecat",
+ "deserunt",
+ "nostrud",
+ "qui"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Fletcher Chang"
+ },
+ {
+ "id": 1,
+ "name": "Mara Vaughan"
+ },
+ {
+ "id": 2,
+ "name": "Claire Hinton"
+ }
+ ],
+ "greeting": "Hello, Young Hunter! You have 4 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af2b8b1f8e0489ab07",
+ "index": 590,
+ "guid": "1abdb396-b7f1-484d-9a0a-93c68ea9112a",
+ "isActive": false,
+ "balance": "$3,499.18",
+ "picture": "http://placehold.it/32x32",
+ "age": 40,
+ "eyeColor": "brown",
+ "name": "Webster Harris",
+ "gender": "male",
+ "company": "GONKLE",
+ "email": "websterharris@gonkle.com",
+ "phone": "+1 (887) 510-3307",
+ "address": "769 Lewis Avenue, Cressey, Missouri, 923",
+ "about": "Aute consectetur eiusmod elit culpa et sunt anim. Laborum cupidatat sunt eiusmod sunt cupidatat incididunt. Adipisicing esse sint ad adipisicing voluptate excepteur eu enim aliqua duis.\r\n",
+ "registered": "2014-08-27T13:28:23 -02:00",
+ "latitude": 13.200366,
+ "longitude": -56.211651,
+ "tags": [
+ "Lorem",
+ "et",
+ "aute",
+ "ut",
+ "ullamco",
+ "dolore",
+ "culpa"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Fisher Valentine"
+ },
+ {
+ "id": 1,
+ "name": "Holly Gallagher"
+ },
+ {
+ "id": 2,
+ "name": "Deana Norton"
+ }
+ ],
+ "greeting": "Hello, Webster Harris! You have 7 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af229336c1a16e0a7e",
+ "index": 591,
+ "guid": "0d5a73f6-fd90-4ee7-a3de-5462df9d8c18",
+ "isActive": false,
+ "balance": "$3,290.31",
+ "picture": "http://placehold.it/32x32",
+ "age": 32,
+ "eyeColor": "blue",
+ "name": "Leblanc Castillo",
+ "gender": "male",
+ "company": "PARCOE",
+ "email": "leblanccastillo@parcoe.com",
+ "phone": "+1 (981) 434-3824",
+ "address": "303 Kensington Street, Whitewater, Oregon, 815",
+ "about": "Reprehenderit aliqua in do pariatur ullamco tempor dolore. Voluptate ex non incididunt quis amet pariatur dolor eu magna ea fugiat anim labore exercitation. Magna Lorem officia et aliquip nisi ullamco duis ex. Pariatur sit est id duis aliqua culpa dolor reprehenderit sit ut commodo ipsum ea et. Duis adipisicing magna est dolore.\r\n",
+ "registered": "2015-01-25T22:31:16 -01:00",
+ "latitude": -78.206619,
+ "longitude": -73.429587,
+ "tags": [
+ "dolore",
+ "anim",
+ "id",
+ "do",
+ "ut",
+ "amet",
+ "aliquip"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Jeanette Raymond"
+ },
+ {
+ "id": 1,
+ "name": "Jana Petersen"
+ },
+ {
+ "id": 2,
+ "name": "Nelson Gomez"
+ }
+ ],
+ "greeting": "Hello, Leblanc Castillo! You have 2 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af2964143aed149ce4",
+ "index": 592,
+ "guid": "cf75ea1b-0298-4530-ba0c-3f5447ce3350",
+ "isActive": true,
+ "balance": "$3,976.21",
+ "picture": "http://placehold.it/32x32",
+ "age": 22,
+ "eyeColor": "brown",
+ "name": "Anastasia Rivera",
+ "gender": "female",
+ "company": "QIAO",
+ "email": "anastasiarivera@qiao.com",
+ "phone": "+1 (869) 425-2131",
+ "address": "444 Scott Avenue, Wadsworth, Federated States Of Micronesia, 5340",
+ "about": "Duis culpa eu laboris dolore mollit aliqua non anim eu reprehenderit. Et veniam ipsum qui excepteur consequat cupidatat amet esse eiusmod officia occaecat deserunt. Ullamco amet irure eiusmod minim tempor laboris nostrud qui cillum laboris ad. Mollit pariatur in non voluptate. Dolor amet reprehenderit labore aute enim laboris nulla eiusmod.\r\n",
+ "registered": "2014-03-18T12:34:15 -01:00",
+ "latitude": -23.346521,
+ "longitude": -78.132002,
+ "tags": [
+ "reprehenderit",
+ "aliquip",
+ "do",
+ "do",
+ "ipsum",
+ "minim",
+ "sunt"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Shawn Hernandez"
+ },
+ {
+ "id": 1,
+ "name": "Marta Farley"
+ },
+ {
+ "id": 2,
+ "name": "Walters Mcguire"
+ }
+ ],
+ "greeting": "Hello, Anastasia Rivera! You have 1 unread messages.",
+ "favoriteFruit": "apple"
+ },
+ {
+ "_id": "553d03af355adddace93a440",
+ "index": 593,
+ "guid": "5b642258-a6dc-4060-a714-d8d41c423d4f",
+ "isActive": true,
+ "balance": "$3,327.49",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "green",
+ "name": "Oliver Todd",
+ "gender": "male",
+ "company": "INTRAWEAR",
+ "email": "olivertodd@intrawear.com",
+ "phone": "+1 (873) 427-3355",
+ "address": "111 Engert Avenue, Carrizo, South Dakota, 7577",
+ "about": "Quis ea do excepteur id anim pariatur Lorem id laborum labore qui enim fugiat. Laboris exercitation duis dolor velit consectetur officia dolor et elit tempor mollit occaecat. Fugiat cupidatat ad consectetur duis officia. Pariatur deserunt labore reprehenderit sunt. Ipsum quis laboris reprehenderit aliqua nulla id non sit amet ea.\r\n",
+ "registered": "2014-05-20T02:44:35 -02:00",
+ "latitude": -39.275549,
+ "longitude": 151.657871,
+ "tags": [
+ "fugiat",
+ "sunt",
+ "fugiat",
+ "mollit",
+ "quis",
+ "ad",
+ "nostrud"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Josefina Bender"
+ },
+ {
+ "id": 1,
+ "name": "Pena Anderson"
+ },
+ {
+ "id": 2,
+ "name": "Mercado Langley"
+ }
+ ],
+ "greeting": "Hello, Oliver Todd! You have 8 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af3a4dd3beaf9fad69",
+ "index": 594,
+ "guid": "5719b7aa-32c3-43d5-aab7-d490d6a5640d",
+ "isActive": false,
+ "balance": "$3,512.93",
+ "picture": "http://placehold.it/32x32",
+ "age": 30,
+ "eyeColor": "green",
+ "name": "Dyer Orr",
+ "gender": "male",
+ "company": "COLLAIRE",
+ "email": "dyerorr@collaire.com",
+ "phone": "+1 (932) 595-2334",
+ "address": "585 Farragut Place, Tyro, Puerto Rico, 1031",
+ "about": "Ipsum incididunt ad minim aliquip laborum fugiat dolor aliquip consectetur nostrud. Et tempor labore deserunt cillum cupidatat. Veniam ea irure laborum eiusmod mollit cillum aliquip enim nisi esse culpa. Laboris do ullamco ex dolor irure veniam occaecat mollit voluptate velit ut nisi laborum. Lorem proident nostrud consequat veniam deserunt eu eiusmod duis consectetur commodo id sit sint. Laborum anim laboris proident esse ad ut dolor cupidatat minim in Lorem minim exercitation proident.\r\n",
+ "registered": "2015-01-14T07:03:45 -01:00",
+ "latitude": 18.405834,
+ "longitude": 96.696461,
+ "tags": [
+ "adipisicing",
+ "velit",
+ "eu",
+ "eu",
+ "culpa",
+ "do",
+ "minim"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Atkinson Lott"
+ },
+ {
+ "id": 1,
+ "name": "Ina Cole"
+ },
+ {
+ "id": 2,
+ "name": "Downs Morris"
+ }
+ ],
+ "greeting": "Hello, Dyer Orr! You have 7 unread messages.",
+ "favoriteFruit": "strawberry"
+ },
+ {
+ "_id": "553d03af5205825a7bff4865",
+ "index": 595,
+ "guid": "1a8d634a-2fd9-4b3f-b7be-a6b6b4d950f8",
+ "isActive": true,
+ "balance": "$3,948.35",
+ "picture": "http://placehold.it/32x32",
+ "age": 33,
+ "eyeColor": "green",
+ "name": "Wong Gamble",
+ "gender": "male",
+ "company": "INFOTRIPS",
+ "email": "wonggamble@infotrips.com",
+ "phone": "+1 (875) 600-3430",
+ "address": "511 Duryea Court, Edenburg, Michigan, 2076",
+ "about": "Id aute commodo excepteur excepteur dolor enim nostrud enim occaecat quis voluptate laborum. Consectetur nisi occaecat nostrud tempor mollit culpa do sit dolore qui labore qui consequat. Dolor minim ut consequat sint. Consequat ad commodo eiusmod voluptate eu aliquip aliqua anim do aliquip irure quis velit. Aute commodo dolor cillum dolor excepteur duis cillum incididunt excepteur.\r\n",
+ "registered": "2014-04-05T03:43:58 -02:00",
+ "latitude": -65.994304,
+ "longitude": 24.270179,
+ "tags": [
+ "id",
+ "irure",
+ "occaecat",
+ "pariatur",
+ "sunt",
+ "voluptate",
+ "proident"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Acevedo Frost"
+ },
+ {
+ "id": 1,
+ "name": "Sanders Merritt"
+ },
+ {
+ "id": 2,
+ "name": "Frances Turner"
+ }
+ ],
+ "greeting": "Hello, Wong Gamble! You have 4 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af71eda6c0aa1066fd",
+ "index": 596,
+ "guid": "5718b0dc-4592-4fd3-a4ba-7c2c1d1da1a0",
+ "isActive": false,
+ "balance": "$2,675.61",
+ "picture": "http://placehold.it/32x32",
+ "age": 29,
+ "eyeColor": "blue",
+ "name": "Ellis Holman",
+ "gender": "male",
+ "company": "ECRATER",
+ "email": "ellisholman@ecrater.com",
+ "phone": "+1 (904) 534-2894",
+ "address": "960 Dover Street, Volta, Nebraska, 6656",
+ "about": "Enim ad ullamco dolor consequat velit aute qui sunt magna voluptate irure nulla dolor. Ullamco velit occaecat velit duis enim magna dolore. Qui et ut tempor do occaecat enim incididunt sunt ex esse duis. Pariatur id enim aute eu commodo Lorem sunt est. Quis deserunt deserunt ex labore enim laboris. Irure ullamco nisi quis sit.\r\n",
+ "registered": "2015-04-03T10:01:56 -02:00",
+ "latitude": 76.141772,
+ "longitude": -170.424443,
+ "tags": [
+ "pariatur",
+ "magna",
+ "adipisicing",
+ "ea",
+ "et",
+ "amet",
+ "mollit"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Mayo Gill"
+ },
+ {
+ "id": 1,
+ "name": "Day Oneil"
+ },
+ {
+ "id": 2,
+ "name": "Lynn Avery"
+ }
+ ],
+ "greeting": "Hello, Ellis Holman! You have 3 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af804e0dc5bed320a4",
+ "index": 597,
+ "guid": "60439415-d7f7-4c2f-bf14-5193feb27d96",
+ "isActive": true,
+ "balance": "$2,943.93",
+ "picture": "http://placehold.it/32x32",
+ "age": 21,
+ "eyeColor": "green",
+ "name": "Lucile Brock",
+ "gender": "female",
+ "company": "COMVOY",
+ "email": "lucilebrock@comvoy.com",
+ "phone": "+1 (826) 408-2531",
+ "address": "983 Sheffield Avenue, Beyerville, Wyoming, 1435",
+ "about": "Aliquip mollit laboris exercitation dolor ad ut. Ut proident anim esse velit. Lorem velit excepteur anim nulla minim.\r\n",
+ "registered": "2014-08-30T10:55:17 -02:00",
+ "latitude": -76.879907,
+ "longitude": -146.867497,
+ "tags": [
+ "dolor",
+ "est",
+ "eu",
+ "aliquip",
+ "officia",
+ "ullamco",
+ "dolor"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Rae Mullins"
+ },
+ {
+ "id": 1,
+ "name": "Ericka Ray"
+ },
+ {
+ "id": 2,
+ "name": "Trevino Graham"
+ }
+ ],
+ "greeting": "Hello, Lucile Brock! You have 1 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af6c95e34bfcbdc4a4",
+ "index": 598,
+ "guid": "d184ef94-6c16-4b8a-83ee-bb3a34201a8d",
+ "isActive": false,
+ "balance": "$3,594.43",
+ "picture": "http://placehold.it/32x32",
+ "age": 31,
+ "eyeColor": "green",
+ "name": "Elvia Hoffman",
+ "gender": "female",
+ "company": "AVENETRO",
+ "email": "elviahoffman@avenetro.com",
+ "phone": "+1 (978) 487-2671",
+ "address": "185 Voorhies Avenue, Brogan, California, 2945",
+ "about": "Exercitation minim veniam ex amet cupidatat. Aliqua pariatur sit id ullamco exercitation sint dolor sint. Exercitation consectetur enim Lorem consectetur proident exercitation proident mollit proident eu tempor duis laboris. Ullamco velit velit incididunt sit eiusmod ipsum laborum consectetur. Do ullamco fugiat non aute excepteur. Ut in sint veniam minim consectetur.\r\n",
+ "registered": "2014-09-15T15:25:17 -02:00",
+ "latitude": -69.686877,
+ "longitude": 46.803405,
+ "tags": [
+ "adipisicing",
+ "amet",
+ "consectetur",
+ "aute",
+ "reprehenderit",
+ "irure",
+ "ullamco"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Cunningham Blankenship"
+ },
+ {
+ "id": 1,
+ "name": "Emma Callahan"
+ },
+ {
+ "id": 2,
+ "name": "Conley Mayer"
+ }
+ ],
+ "greeting": "Hello, Elvia Hoffman! You have 2 unread messages.",
+ "favoriteFruit": "banana"
+ },
+ {
+ "_id": "553d03af69947f99622152f1",
+ "index": 599,
+ "guid": "26e948c8-3fa3-47f3-a27f-9e027b8def53",
+ "isActive": false,
+ "balance": "$2,935.99",
+ "picture": "http://placehold.it/32x32",
+ "age": 25,
+ "eyeColor": "blue",
+ "name": "Kate Whitaker",
+ "gender": "female",
+ "company": "OLYMPIX",
+ "email": "katewhitaker@olympix.com",
+ "phone": "+1 (997) 509-2863",
+ "address": "238 Seacoast Terrace, Rew, Indiana, 2473",
+ "about": "Dolor proident laborum irure esse quis voluptate. Proident ea ex qui aliqua veniam nisi consectetur non. Duis culpa id ullamco ad do reprehenderit occaecat nostrud. Incididunt culpa magna sit cillum amet ut. Laboris veniam incididunt esse in laboris nostrud enim. Do nulla incididunt incididunt deserunt cupidatat eiusmod proident occaecat cillum deserunt Lorem Lorem.\r\n",
+ "registered": "2014-02-06T19:19:08 -01:00",
+ "latitude": -12.772187,
+ "longitude": -15.58933,
+ "tags": [
+ "enim",
+ "nulla",
+ "nostrud",
+ "fugiat",
+ "id",
+ "quis",
+ "quis"
+ ],
+ "friends": [
+ {
+ "id": 0,
+ "name": "Iris Franklin"
+ },
+ {
+ "id": 1,
+ "name": "Rebecca Hanson"
+ },
+ {
+ "id": 2,
+ "name": "Sweet Cantu"
+ }
+ ],
+ "greeting": "Hello, Kate Whitaker! You have 4 unread messages.",
+ "favoriteFruit": "banana"
+ }
+] \ No newline at end of file
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/sample_moment.js b/vendor/github.com/tdewolff/minify/benchmarks/sample_moment.js
new file mode 100644
index 0000000..c635ec0
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/sample_moment.js
@@ -0,0 +1,3043 @@
+//! moment.js
+//! version : 2.9.0
+//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
+//! license : MIT
+//! momentjs.com
+
+(function (undefined) {
+ /************************************
+ Constants
+ ************************************/
+
+ var moment,
+ VERSION = '2.9.0',
+ // the global-scope this is NOT the global object in Node.js
+ globalScope = (typeof global !== 'undefined' && (typeof window === 'undefined' || window === global.window)) ? global : this,
+ oldGlobalMoment,
+ round = Math.round,
+ hasOwnProperty = Object.prototype.hasOwnProperty,
+ i,
+
+ YEAR = 0,
+ MONTH = 1,
+ DATE = 2,
+ HOUR = 3,
+ MINUTE = 4,
+ SECOND = 5,
+ MILLISECOND = 6,
+
+ // internal storage for locale config files
+ locales = {},
+
+ // extra moment internal properties (plugins register props here)
+ momentProperties = [],
+
+ // check for nodeJS
+ hasModule = (typeof module !== 'undefined' && module && module.exports),
+
+ // ASP.NET json date format regex
+ aspNetJsonRegex = /^\/?Date\((\-?\d+)/i,
+ aspNetTimeSpanJsonRegex = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,
+
+ // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
+ // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
+ isoDurationRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/,
+
+ // format tokens
+ formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|x|X|zz?|ZZ?|.)/g,
+ localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,
+
+ // parsing token regexes
+ parseTokenOneOrTwoDigits = /\d\d?/, // 0 - 99
+ parseTokenOneToThreeDigits = /\d{1,3}/, // 0 - 999
+ parseTokenOneToFourDigits = /\d{1,4}/, // 0 - 9999
+ parseTokenOneToSixDigits = /[+\-]?\d{1,6}/, // -999,999 - 999,999
+ parseTokenDigits = /\d+/, // nonzero number of digits
+ parseTokenWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i, // any word (or two) characters or numbers including two/three word month in arabic.
+ parseTokenTimezone = /Z|[\+\-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z
+ parseTokenT = /T/i, // T (ISO separator)
+ parseTokenOffsetMs = /[\+\-]?\d+/, // 1234567890123
+ parseTokenTimestampMs = /[\+\-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123
+
+ //strict parsing regexes
+ parseTokenOneDigit = /\d/, // 0 - 9
+ parseTokenTwoDigits = /\d\d/, // 00 - 99
+ parseTokenThreeDigits = /\d{3}/, // 000 - 999
+ parseTokenFourDigits = /\d{4}/, // 0000 - 9999
+ parseTokenSixDigits = /[+-]?\d{6}/, // -999,999 - 999,999
+ parseTokenSignedNumber = /[+-]?\d+/, // -inf - inf
+
+ // iso 8601 regex
+ // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
+ isoRegex = /^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
+
+ isoFormat = 'YYYY-MM-DDTHH:mm:ssZ',
+
+ isoDates = [
+ ['YYYYYY-MM-DD', /[+-]\d{6}-\d{2}-\d{2}/],
+ ['YYYY-MM-DD', /\d{4}-\d{2}-\d{2}/],
+ ['GGGG-[W]WW-E', /\d{4}-W\d{2}-\d/],
+ ['GGGG-[W]WW', /\d{4}-W\d{2}/],
+ ['YYYY-DDD', /\d{4}-\d{3}/]
+ ],
+
+ // iso time formats and regexes
+ isoTimes = [
+ ['HH:mm:ss.SSSS', /(T| )\d\d:\d\d:\d\d\.\d+/],
+ ['HH:mm:ss', /(T| )\d\d:\d\d:\d\d/],
+ ['HH:mm', /(T| )\d\d:\d\d/],
+ ['HH', /(T| )\d\d/]
+ ],
+
+ // timezone chunker '+10:00' > ['10', '00'] or '-1530' > ['-', '15', '30']
+ parseTimezoneChunker = /([\+\-]|\d\d)/gi,
+
+ // getter and setter names
+ proxyGettersAndSetters = 'Date|Hours|Minutes|Seconds|Milliseconds'.split('|'),
+ unitMillisecondFactors = {
+ 'Milliseconds' : 1,
+ 'Seconds' : 1e3,
+ 'Minutes' : 6e4,
+ 'Hours' : 36e5,
+ 'Days' : 864e5,
+ 'Months' : 2592e6,
+ 'Years' : 31536e6
+ },
+
+ unitAliases = {
+ ms : 'millisecond',
+ s : 'second',
+ m : 'minute',
+ h : 'hour',
+ d : 'day',
+ D : 'date',
+ w : 'week',
+ W : 'isoWeek',
+ M : 'month',
+ Q : 'quarter',
+ y : 'year',
+ DDD : 'dayOfYear',
+ e : 'weekday',
+ E : 'isoWeekday',
+ gg: 'weekYear',
+ GG: 'isoWeekYear'
+ },
+
+ camelFunctions = {
+ dayofyear : 'dayOfYear',
+ isoweekday : 'isoWeekday',
+ isoweek : 'isoWeek',
+ weekyear : 'weekYear',
+ isoweekyear : 'isoWeekYear'
+ },
+
+ // format function strings
+ formatFunctions = {},
+
+ // default relative time thresholds
+ relativeTimeThresholds = {
+ s: 45, // seconds to minute
+ m: 45, // minutes to hour
+ h: 22, // hours to day
+ d: 26, // days to month
+ M: 11 // months to year
+ },
+
+ // tokens to ordinalize and pad
+ ordinalizeTokens = 'DDD w W M D d'.split(' '),
+ paddedTokens = 'M D H h m s w W'.split(' '),
+
+ formatTokenFunctions = {
+ M : function () {
+ return this.month() + 1;
+ },
+ MMM : function (format) {
+ return this.localeData().monthsShort(this, format);
+ },
+ MMMM : function (format) {
+ return this.localeData().months(this, format);
+ },
+ D : function () {
+ return this.date();
+ },
+ DDD : function () {
+ return this.dayOfYear();
+ },
+ d : function () {
+ return this.day();
+ },
+ dd : function (format) {
+ return this.localeData().weekdaysMin(this, format);
+ },
+ ddd : function (format) {
+ return this.localeData().weekdaysShort(this, format);
+ },
+ dddd : function (format) {
+ return this.localeData().weekdays(this, format);
+ },
+ w : function () {
+ return this.week();
+ },
+ W : function () {
+ return this.isoWeek();
+ },
+ YY : function () {
+ return leftZeroFill(this.year() % 100, 2);
+ },
+ YYYY : function () {
+ return leftZeroFill(this.year(), 4);
+ },
+ YYYYY : function () {
+ return leftZeroFill(this.year(), 5);
+ },
+ YYYYYY : function () {
+ var y = this.year(), sign = y >= 0 ? '+' : '-';
+ return sign + leftZeroFill(Math.abs(y), 6);
+ },
+ gg : function () {
+ return leftZeroFill(this.weekYear() % 100, 2);
+ },
+ gggg : function () {
+ return leftZeroFill(this.weekYear(), 4);
+ },
+ ggggg : function () {
+ return leftZeroFill(this.weekYear(), 5);
+ },
+ GG : function () {
+ return leftZeroFill(this.isoWeekYear() % 100, 2);
+ },
+ GGGG : function () {
+ return leftZeroFill(this.isoWeekYear(), 4);
+ },
+ GGGGG : function () {
+ return leftZeroFill(this.isoWeekYear(), 5);
+ },
+ e : function () {
+ return this.weekday();
+ },
+ E : function () {
+ return this.isoWeekday();
+ },
+ a : function () {
+ return this.localeData().meridiem(this.hours(), this.minutes(), true);
+ },
+ A : function () {
+ return this.localeData().meridiem(this.hours(), this.minutes(), false);
+ },
+ H : function () {
+ return this.hours();
+ },
+ h : function () {
+ return this.hours() % 12 || 12;
+ },
+ m : function () {
+ return this.minutes();
+ },
+ s : function () {
+ return this.seconds();
+ },
+ S : function () {
+ return toInt(this.milliseconds() / 100);
+ },
+ SS : function () {
+ return leftZeroFill(toInt(this.milliseconds() / 10), 2);
+ },
+ SSS : function () {
+ return leftZeroFill(this.milliseconds(), 3);
+ },
+ SSSS : function () {
+ return leftZeroFill(this.milliseconds(), 3);
+ },
+ Z : function () {
+ var a = this.utcOffset(),
+ b = '+';
+ if (a < 0) {
+ a = -a;
+ b = '-';
+ }
+ return b + leftZeroFill(toInt(a / 60), 2) + ':' + leftZeroFill(toInt(a) % 60, 2);
+ },
+ ZZ : function () {
+ var a = this.utcOffset(),
+ b = '+';
+ if (a < 0) {
+ a = -a;
+ b = '-';
+ }
+ return b + leftZeroFill(toInt(a / 60), 2) + leftZeroFill(toInt(a) % 60, 2);
+ },
+ z : function () {
+ return this.zoneAbbr();
+ },
+ zz : function () {
+ return this.zoneName();
+ },
+ x : function () {
+ return this.valueOf();
+ },
+ X : function () {
+ return this.unix();
+ },
+ Q : function () {
+ return this.quarter();
+ }
+ },
+
+ deprecations = {},
+
+ lists = ['months', 'monthsShort', 'weekdays', 'weekdaysShort', 'weekdaysMin'],
+
+ updateInProgress = false;
+
+ // Pick the first defined of two or three arguments. dfl comes from
+ // default.
+ function dfl(a, b, c) {
+ switch (arguments.length) {
+ case 2: return a != null ? a : b;
+ case 3: return a != null ? a : b != null ? b : c;
+ default: throw new Error('Implement me');
+ }
+ }
+
+ function hasOwnProp(a, b) {
+ return hasOwnProperty.call(a, b);
+ }
+
+ function defaultParsingFlags() {
+ // We need to deep clone this object, and es5 standard is not very
+ // helpful.
+ return {
+ empty : false,
+ unusedTokens : [],
+ unusedInput : [],
+ overflow : -2,
+ charsLeftOver : 0,
+ nullInput : false,
+ invalidMonth : null,
+ invalidFormat : false,
+ userInvalidated : false,
+ iso: false
+ };
+ }
+
+ function printMsg(msg) {
+ if (moment.suppressDeprecationWarnings === false &&
+ typeof console !== 'undefined' && console.warn) {
+ console.warn('Deprecation warning: ' + msg);
+ }
+ }
+
+ function deprecate(msg, fn) {
+ var firstTime = true;
+ return extend(function () {
+ if (firstTime) {
+ printMsg(msg);
+ firstTime = false;
+ }
+ return fn.apply(this, arguments);
+ }, fn);
+ }
+
+ function deprecateSimple(name, msg) {
+ if (!deprecations[name]) {
+ printMsg(msg);
+ deprecations[name] = true;
+ }
+ }
+
+ function padToken(func, count) {
+ return function (a) {
+ return leftZeroFill(func.call(this, a), count);
+ };
+ }
+ function ordinalizeToken(func, period) {
+ return function (a) {
+ return this.localeData().ordinal(func.call(this, a), period);
+ };
+ }
+
+ function monthDiff(a, b) {
+ // difference in months
+ var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),
+ // b is in (anchor - 1 month, anchor + 1 month)
+ anchor = a.clone().add(wholeMonthDiff, 'months'),
+ anchor2, adjust;
+
+ if (b - anchor < 0) {
+ anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
+ // linear across the month
+ adjust = (b - anchor) / (anchor - anchor2);
+ } else {
+ anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
+ // linear across the month
+ adjust = (b - anchor) / (anchor2 - anchor);
+ }
+
+ return -(wholeMonthDiff + adjust);
+ }
+
+ while (ordinalizeTokens.length) {
+ i = ordinalizeTokens.pop();
+ formatTokenFunctions[i + 'o'] = ordinalizeToken(formatTokenFunctions[i], i);
+ }
+ while (paddedTokens.length) {
+ i = paddedTokens.pop();
+ formatTokenFunctions[i + i] = padToken(formatTokenFunctions[i], 2);
+ }
+ formatTokenFunctions.DDDD = padToken(formatTokenFunctions.DDD, 3);
+
+
+ function meridiemFixWrap(locale, hour, meridiem) {
+ var isPm;
+
+ if (meridiem == null) {
+ // nothing to do
+ return hour;
+ }
+ if (locale.meridiemHour != null) {
+ return locale.meridiemHour(hour, meridiem);
+ } else if (locale.isPM != null) {
+ // Fallback
+ isPm = locale.isPM(meridiem);
+ if (isPm && hour < 12) {
+ hour += 12;
+ }
+ if (!isPm && hour === 12) {
+ hour = 0;
+ }
+ return hour;
+ } else {
+ // thie is not supposed to happen
+ return hour;
+ }
+ }
+
+ /************************************
+ Constructors
+ ************************************/
+
+ function Locale() {
+ }
+
+ // Moment prototype object
+ function Moment(config, skipOverflow) {
+ if (skipOverflow !== false) {
+ checkOverflow(config);
+ }
+ copyConfig(this, config);
+ this._d = new Date(+config._d);
+ // Prevent infinite loop in case updateOffset creates new moment
+ // objects.
+ if (updateInProgress === false) {
+ updateInProgress = true;
+ moment.updateOffset(this);
+ updateInProgress = false;
+ }
+ }
+
+ // Duration Constructor
+ function Duration(duration) {
+ var normalizedInput = normalizeObjectUnits(duration),
+ years = normalizedInput.year || 0,
+ quarters = normalizedInput.quarter || 0,
+ months = normalizedInput.month || 0,
+ weeks = normalizedInput.week || 0,
+ days = normalizedInput.day || 0,
+ hours = normalizedInput.hour || 0,
+ minutes = normalizedInput.minute || 0,
+ seconds = normalizedInput.second || 0,
+ milliseconds = normalizedInput.millisecond || 0;
+
+ // representation for dateAddRemove
+ this._milliseconds = +milliseconds +
+ seconds * 1e3 + // 1000
+ minutes * 6e4 + // 1000 * 60
+ hours * 36e5; // 1000 * 60 * 60
+ // Because of dateAddRemove treats 24 hours as different from a
+ // day when working around DST, we need to store them separately
+ this._days = +days +
+ weeks * 7;
+ // It is impossible translate months into days without knowing
+ // which months you are are talking about, so we have to store
+ // it separately.
+ this._months = +months +
+ quarters * 3 +
+ years * 12;
+
+ this._data = {};
+
+ this._locale = moment.localeData();
+
+ this._bubble();
+ }
+
+ /************************************
+ Helpers
+ ************************************/
+
+
+ function extend(a, b) {
+ for (var i in b) {
+ if (hasOwnProp(b, i)) {
+ a[i] = b[i];
+ }
+ }
+
+ if (hasOwnProp(b, 'toString')) {
+ a.toString = b.toString;
+ }
+
+ if (hasOwnProp(b, 'valueOf')) {
+ a.valueOf = b.valueOf;
+ }
+
+ return a;
+ }
+
+ function copyConfig(to, from) {
+ var i, prop, val;
+
+ if (typeof from._isAMomentObject !== 'undefined') {
+ to._isAMomentObject = from._isAMomentObject;
+ }
+ if (typeof from._i !== 'undefined') {
+ to._i = from._i;
+ }
+ if (typeof from._f !== 'undefined') {
+ to._f = from._f;
+ }
+ if (typeof from._l !== 'undefined') {
+ to._l = from._l;
+ }
+ if (typeof from._strict !== 'undefined') {
+ to._strict = from._strict;
+ }
+ if (typeof from._tzm !== 'undefined') {
+ to._tzm = from._tzm;
+ }
+ if (typeof from._isUTC !== 'undefined') {
+ to._isUTC = from._isUTC;
+ }
+ if (typeof from._offset !== 'undefined') {
+ to._offset = from._offset;
+ }
+ if (typeof from._pf !== 'undefined') {
+ to._pf = from._pf;
+ }
+ if (typeof from._locale !== 'undefined') {
+ to._locale = from._locale;
+ }
+
+ if (momentProperties.length > 0) {
+ for (i in momentProperties) {
+ prop = momentProperties[i];
+ val = from[prop];
+ if (typeof val !== 'undefined') {
+ to[prop] = val;
+ }
+ }
+ }
+
+ return to;
+ }
+
+ function absRound(number) {
+ if (number < 0) {
+ return Math.ceil(number);
+ } else {
+ return Math.floor(number);
+ }
+ }
+
+ // left zero fill a number
+ // see http://jsperf.com/left-zero-filling for performance comparison
+ function leftZeroFill(number, targetLength, forceSign) {
+ var output = '' + Math.abs(number),
+ sign = number >= 0;
+
+ while (output.length < targetLength) {
+ output = '0' + output;
+ }
+ return (sign ? (forceSign ? '+' : '') : '-') + output;
+ }
+
+ function positiveMomentsDifference(base, other) {
+ var res = {milliseconds: 0, months: 0};
+
+ res.months = other.month() - base.month() +
+ (other.year() - base.year()) * 12;
+ if (base.clone().add(res.months, 'M').isAfter(other)) {
+ --res.months;
+ }
+
+ res.milliseconds = +other - +(base.clone().add(res.months, 'M'));
+
+ return res;
+ }
+
+ function momentsDifference(base, other) {
+ var res;
+ other = makeAs(other, base);
+ if (base.isBefore(other)) {
+ res = positiveMomentsDifference(base, other);
+ } else {
+ res = positiveMomentsDifference(other, base);
+ res.milliseconds = -res.milliseconds;
+ res.months = -res.months;
+ }
+
+ return res;
+ }
+
+ // TODO: remove 'name' arg after deprecation is removed
+ function createAdder(direction, name) {
+ return function (val, period) {
+ var dur, tmp;
+ //invert the arguments, but complain about it
+ if (period !== null && !isNaN(+period)) {
+ deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period).');
+ tmp = val; val = period; period = tmp;
+ }
+
+ val = typeof val === 'string' ? +val : val;
+ dur = moment.duration(val, period);
+ addOrSubtractDurationFromMoment(this, dur, direction);
+ return this;
+ };
+ }
+
+ function addOrSubtractDurationFromMoment(mom, duration, isAdding, updateOffset) {
+ var milliseconds = duration._milliseconds,
+ days = duration._days,
+ months = duration._months;
+ updateOffset = updateOffset == null ? true : updateOffset;
+
+ if (milliseconds) {
+ mom._d.setTime(+mom._d + milliseconds * isAdding);
+ }
+ if (days) {
+ rawSetter(mom, 'Date', rawGetter(mom, 'Date') + days * isAdding);
+ }
+ if (months) {
+ rawMonthSetter(mom, rawGetter(mom, 'Month') + months * isAdding);
+ }
+ if (updateOffset) {
+ moment.updateOffset(mom, days || months);
+ }
+ }
+
+ // check if is an array
+ function isArray(input) {
+ return Object.prototype.toString.call(input) === '[object Array]';
+ }
+
+ function isDate(input) {
+ return Object.prototype.toString.call(input) === '[object Date]' ||
+ input instanceof Date;
+ }
+
+ // compare two arrays, return the number of differences
+ function compareArrays(array1, array2, dontConvert) {
+ var len = Math.min(array1.length, array2.length),
+ lengthDiff = Math.abs(array1.length - array2.length),
+ diffs = 0,
+ i;
+ for (i = 0; i < len; i++) {
+ if ((dontConvert && array1[i] !== array2[i]) ||
+ (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {
+ diffs++;
+ }
+ }
+ return diffs + lengthDiff;
+ }
+
+ function normalizeUnits(units) {
+ if (units) {
+ var lowered = units.toLowerCase().replace(/(.)s$/, '$1');
+ units = unitAliases[units] || camelFunctions[lowered] || lowered;
+ }
+ return units;
+ }
+
+ function normalizeObjectUnits(inputObject) {
+ var normalizedInput = {},
+ normalizedProp,
+ prop;
+
+ for (prop in inputObject) {
+ if (hasOwnProp(inputObject, prop)) {
+ normalizedProp = normalizeUnits(prop);
+ if (normalizedProp) {
+ normalizedInput[normalizedProp] = inputObject[prop];
+ }
+ }
+ }
+
+ return normalizedInput;
+ }
+
+ function makeList(field) {
+ var count, setter;
+
+ if (field.indexOf('week') === 0) {
+ count = 7;
+ setter = 'day';
+ }
+ else if (field.indexOf('month') === 0) {
+ count = 12;
+ setter = 'month';
+ }
+ else {
+ return;
+ }
+
+ moment[field] = function (format, index) {
+ var i, getter,
+ method = moment._locale[field],
+ results = [];
+
+ if (typeof format === 'number') {
+ index = format;
+ format = undefined;
+ }
+
+ getter = function (i) {
+ var m = moment().utc().set(setter, i);
+ return method.call(moment._locale, m, format || '');
+ };
+
+ if (index != null) {
+ return getter(index);
+ }
+ else {
+ for (i = 0; i < count; i++) {
+ results.push(getter(i));
+ }
+ return results;
+ }
+ };
+ }
+
+ function toInt(argumentForCoercion) {
+ var coercedNumber = +argumentForCoercion,
+ value = 0;
+
+ if (coercedNumber !== 0 && isFinite(coercedNumber)) {
+ if (coercedNumber >= 0) {
+ value = Math.floor(coercedNumber);
+ } else {
+ value = Math.ceil(coercedNumber);
+ }
+ }
+
+ return value;
+ }
+
+ function daysInMonth(year, month) {
+ return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();
+ }
+
+ function weeksInYear(year, dow, doy) {
+ return weekOfYear(moment([year, 11, 31 + dow - doy]), dow, doy).week;
+ }
+
+ function daysInYear(year) {
+ return isLeapYear(year) ? 366 : 365;
+ }
+
+ function isLeapYear(year) {
+ return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
+ }
+
+ function checkOverflow(m) {
+ var overflow;
+ if (m._a && m._pf.overflow === -2) {
+ overflow =
+ m._a[MONTH] < 0 || m._a[MONTH] > 11 ? MONTH :
+ m._a[DATE] < 1 || m._a[DATE] > daysInMonth(m._a[YEAR], m._a[MONTH]) ? DATE :
+ m._a[HOUR] < 0 || m._a[HOUR] > 24 ||
+ (m._a[HOUR] === 24 && (m._a[MINUTE] !== 0 ||
+ m._a[SECOND] !== 0 ||
+ m._a[MILLISECOND] !== 0)) ? HOUR :
+ m._a[MINUTE] < 0 || m._a[MINUTE] > 59 ? MINUTE :
+ m._a[SECOND] < 0 || m._a[SECOND] > 59 ? SECOND :
+ m._a[MILLISECOND] < 0 || m._a[MILLISECOND] > 999 ? MILLISECOND :
+ -1;
+
+ if (m._pf._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
+ overflow = DATE;
+ }
+
+ m._pf.overflow = overflow;
+ }
+ }
+
+ function isValid(m) {
+ if (m._isValid == null) {
+ m._isValid = !isNaN(m._d.getTime()) &&
+ m._pf.overflow < 0 &&
+ !m._pf.empty &&
+ !m._pf.invalidMonth &&
+ !m._pf.nullInput &&
+ !m._pf.invalidFormat &&
+ !m._pf.userInvalidated;
+
+ if (m._strict) {
+ m._isValid = m._isValid &&
+ m._pf.charsLeftOver === 0 &&
+ m._pf.unusedTokens.length === 0 &&
+ m._pf.bigHour === undefined;
+ }
+ }
+ return m._isValid;
+ }
+
+ function normalizeLocale(key) {
+ return key ? key.toLowerCase().replace('_', '-') : key;
+ }
+
+ // pick the locale from the array
+ // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
+ // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
+ function chooseLocale(names) {
+ var i = 0, j, next, locale, split;
+
+ while (i < names.length) {
+ split = normalizeLocale(names[i]).split('-');
+ j = split.length;
+ next = normalizeLocale(names[i + 1]);
+ next = next ? next.split('-') : null;
+ while (j > 0) {
+ locale = loadLocale(split.slice(0, j).join('-'));
+ if (locale) {
+ return locale;
+ }
+ if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {
+ //the next array item is better than a shallower substring of this one
+ break;
+ }
+ j--;
+ }
+ i++;
+ }
+ return null;
+ }
+
+ function loadLocale(name) {
+ var oldLocale = null;
+ if (!locales[name] && hasModule) {
+ try {
+ oldLocale = moment.locale();
+ require('./locale/' + name);
+ // because defineLocale currently also sets the global locale, we want to undo that for lazy loaded locales
+ moment.locale(oldLocale);
+ } catch (e) { }
+ }
+ return locales[name];
+ }
+
+ // Return a moment from input, that is local/utc/utcOffset equivalent to
+ // model.
+ function makeAs(input, model) {
+ var res, diff;
+ if (model._isUTC) {
+ res = model.clone();
+ diff = (moment.isMoment(input) || isDate(input) ?
+ +input : +moment(input)) - (+res);
+ // Use low-level api, because this fn is low-level api.
+ res._d.setTime(+res._d + diff);
+ moment.updateOffset(res, false);
+ return res;
+ } else {
+ return moment(input).local();
+ }
+ }
+
+ /************************************
+ Locale
+ ************************************/
+
+
+ extend(Locale.prototype, {
+
+ set : function (config) {
+ var prop, i;
+ for (i in config) {
+ prop = config[i];
+ if (typeof prop === 'function') {
+ this[i] = prop;
+ } else {
+ this['_' + i] = prop;
+ }
+ }
+ // Lenient ordinal parsing accepts just a number in addition to
+ // number + (possibly) stuff coming from _ordinalParseLenient.
+ this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + /\d{1,2}/.source);
+ },
+
+ _months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+ months : function (m) {
+ return this._months[m.month()];
+ },
+
+ _monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+ monthsShort : function (m) {
+ return this._monthsShort[m.month()];
+ },
+
+ monthsParse : function (monthName, format, strict) {
+ var i, mom, regex;
+
+ if (!this._monthsParse) {
+ this._monthsParse = [];
+ this._longMonthsParse = [];
+ this._shortMonthsParse = [];
+ }
+
+ for (i = 0; i < 12; i++) {
+ // make the regex if we don't have it already
+ mom = moment.utc([2000, i]);
+ if (strict && !this._longMonthsParse[i]) {
+ this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');
+ this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');
+ }
+ if (!strict && !this._monthsParse[i]) {
+ regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
+ this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
+ }
+ // test the regex
+ if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {
+ return i;
+ } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {
+ return i;
+ } else if (!strict && this._monthsParse[i].test(monthName)) {
+ return i;
+ }
+ }
+ },
+
+ _weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+ weekdays : function (m) {
+ return this._weekdays[m.day()];
+ },
+
+ _weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+ weekdaysShort : function (m) {
+ return this._weekdaysShort[m.day()];
+ },
+
+ _weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+ weekdaysMin : function (m) {
+ return this._weekdaysMin[m.day()];
+ },
+
+ weekdaysParse : function (weekdayName) {
+ var i, mom, regex;
+
+ if (!this._weekdaysParse) {
+ this._weekdaysParse = [];
+ }
+
+ for (i = 0; i < 7; i++) {
+ // make the regex if we don't have it already
+ if (!this._weekdaysParse[i]) {
+ mom = moment([2000, 1]).day(i);
+ regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');
+ this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
+ }
+ // test the regex
+ if (this._weekdaysParse[i].test(weekdayName)) {
+ return i;
+ }
+ }
+ },
+
+ _longDateFormat : {
+ LTS : 'h:mm:ss A',
+ LT : 'h:mm A',
+ L : 'MM/DD/YYYY',
+ LL : 'MMMM D, YYYY',
+ LLL : 'MMMM D, YYYY LT',
+ LLLL : 'dddd, MMMM D, YYYY LT'
+ },
+ longDateFormat : function (key) {
+ var output = this._longDateFormat[key];
+ if (!output && this._longDateFormat[key.toUpperCase()]) {
+ output = this._longDateFormat[key.toUpperCase()].replace(/MMMM|MM|DD|dddd/g, function (val) {
+ return val.slice(1);
+ });
+ this._longDateFormat[key] = output;
+ }
+ return output;
+ },
+
+ isPM : function (input) {
+ // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
+ // Using charAt should be more compatible.
+ return ((input + '').toLowerCase().charAt(0) === 'p');
+ },
+
+ _meridiemParse : /[ap]\.?m?\.?/i,
+ meridiem : function (hours, minutes, isLower) {
+ if (hours > 11) {
+ return isLower ? 'pm' : 'PM';
+ } else {
+ return isLower ? 'am' : 'AM';
+ }
+ },
+
+
+ _calendar : {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ },
+ calendar : function (key, mom, now) {
+ var output = this._calendar[key];
+ return typeof output === 'function' ? output.apply(mom, [now]) : output;
+ },
+
+ _relativeTime : {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ },
+
+ relativeTime : function (number, withoutSuffix, string, isFuture) {
+ var output = this._relativeTime[string];
+ return (typeof output === 'function') ?
+ output(number, withoutSuffix, string, isFuture) :
+ output.replace(/%d/i, number);
+ },
+
+ pastFuture : function (diff, output) {
+ var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
+ return typeof format === 'function' ? format(output) : format.replace(/%s/i, output);
+ },
+
+ ordinal : function (number) {
+ return this._ordinal.replace('%d', number);
+ },
+ _ordinal : '%d',
+ _ordinalParse : /\d{1,2}/,
+
+ preparse : function (string) {
+ return string;
+ },
+
+ postformat : function (string) {
+ return string;
+ },
+
+ week : function (mom) {
+ return weekOfYear(mom, this._week.dow, this._week.doy).week;
+ },
+
+ _week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ },
+
+ firstDayOfWeek : function () {
+ return this._week.dow;
+ },
+
+ firstDayOfYear : function () {
+ return this._week.doy;
+ },
+
+ _invalidDate: 'Invalid date',
+ invalidDate: function () {
+ return this._invalidDate;
+ }
+ });
+
+ /************************************
+ Formatting
+ ************************************/
+
+
+ function removeFormattingTokens(input) {
+ if (input.match(/\[[\s\S]/)) {
+ return input.replace(/^\[|\]$/g, '');
+ }
+ return input.replace(/\\/g, '');
+ }
+
+ function makeFormatFunction(format) {
+ var array = format.match(formattingTokens), i, length;
+
+ for (i = 0, length = array.length; i < length; i++) {
+ if (formatTokenFunctions[array[i]]) {
+ array[i] = formatTokenFunctions[array[i]];
+ } else {
+ array[i] = removeFormattingTokens(array[i]);
+ }
+ }
+
+ return function (mom) {
+ var output = '';
+ for (i = 0; i < length; i++) {
+ output += array[i] instanceof Function ? array[i].call(mom, format) : array[i];
+ }
+ return output;
+ };
+ }
+
+ // format date using native date object
+ function formatMoment(m, format) {
+ if (!m.isValid()) {
+ return m.localeData().invalidDate();
+ }
+
+ format = expandFormat(format, m.localeData());
+
+ if (!formatFunctions[format]) {
+ formatFunctions[format] = makeFormatFunction(format);
+ }
+
+ return formatFunctions[format](m);
+ }
+
+ function expandFormat(format, locale) {
+ var i = 5;
+
+ function replaceLongDateFormatTokens(input) {
+ return locale.longDateFormat(input) || input;
+ }
+
+ localFormattingTokens.lastIndex = 0;
+ while (i >= 0 && localFormattingTokens.test(format)) {
+ format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);
+ localFormattingTokens.lastIndex = 0;
+ i -= 1;
+ }
+
+ return format;
+ }
+
+
+ /************************************
+ Parsing
+ ************************************/
+
+
+ // get the regex to find the next token
+ function getParseRegexForToken(token, config) {
+ var a, strict = config._strict;
+ switch (token) {
+ case 'Q':
+ return parseTokenOneDigit;
+ case 'DDDD':
+ return parseTokenThreeDigits;
+ case 'YYYY':
+ case 'GGGG':
+ case 'gggg':
+ return strict ? parseTokenFourDigits : parseTokenOneToFourDigits;
+ case 'Y':
+ case 'G':
+ case 'g':
+ return parseTokenSignedNumber;
+ case 'YYYYYY':
+ case 'YYYYY':
+ case 'GGGGG':
+ case 'ggggg':
+ return strict ? parseTokenSixDigits : parseTokenOneToSixDigits;
+ case 'S':
+ if (strict) {
+ return parseTokenOneDigit;
+ }
+ /* falls through */
+ case 'SS':
+ if (strict) {
+ return parseTokenTwoDigits;
+ }
+ /* falls through */
+ case 'SSS':
+ if (strict) {
+ return parseTokenThreeDigits;
+ }
+ /* falls through */
+ case 'DDD':
+ return parseTokenOneToThreeDigits;
+ case 'MMM':
+ case 'MMMM':
+ case 'dd':
+ case 'ddd':
+ case 'dddd':
+ return parseTokenWord;
+ case 'a':
+ case 'A':
+ return config._locale._meridiemParse;
+ case 'x':
+ return parseTokenOffsetMs;
+ case 'X':
+ return parseTokenTimestampMs;
+ case 'Z':
+ case 'ZZ':
+ return parseTokenTimezone;
+ case 'T':
+ return parseTokenT;
+ case 'SSSS':
+ return parseTokenDigits;
+ case 'MM':
+ case 'DD':
+ case 'YY':
+ case 'GG':
+ case 'gg':
+ case 'HH':
+ case 'hh':
+ case 'mm':
+ case 'ss':
+ case 'ww':
+ case 'WW':
+ return strict ? parseTokenTwoDigits : parseTokenOneOrTwoDigits;
+ case 'M':
+ case 'D':
+ case 'd':
+ case 'H':
+ case 'h':
+ case 'm':
+ case 's':
+ case 'w':
+ case 'W':
+ case 'e':
+ case 'E':
+ return parseTokenOneOrTwoDigits;
+ case 'Do':
+ return strict ? config._locale._ordinalParse : config._locale._ordinalParseLenient;
+ default :
+ a = new RegExp(regexpEscape(unescapeFormat(token.replace('\\', '')), 'i'));
+ return a;
+ }
+ }
+
+ function utcOffsetFromString(string) {
+ string = string || '';
+ var possibleTzMatches = (string.match(parseTokenTimezone) || []),
+ tzChunk = possibleTzMatches[possibleTzMatches.length - 1] || [],
+ parts = (tzChunk + '').match(parseTimezoneChunker) || ['-', 0, 0],
+ minutes = +(parts[1] * 60) + toInt(parts[2]);
+
+ return parts[0] === '+' ? minutes : -minutes;
+ }
+
+ // function to convert string input to date
+ function addTimeToArrayFromToken(token, input, config) {
+ var a, datePartArray = config._a;
+
+ switch (token) {
+ // QUARTER
+ case 'Q':
+ if (input != null) {
+ datePartArray[MONTH] = (toInt(input) - 1) * 3;
+ }
+ break;
+ // MONTH
+ case 'M' : // fall through to MM
+ case 'MM' :
+ if (input != null) {
+ datePartArray[MONTH] = toInt(input) - 1;
+ }
+ break;
+ case 'MMM' : // fall through to MMMM
+ case 'MMMM' :
+ a = config._locale.monthsParse(input, token, config._strict);
+ // if we didn't find a month name, mark the date as invalid.
+ if (a != null) {
+ datePartArray[MONTH] = a;
+ } else {
+ config._pf.invalidMonth = input;
+ }
+ break;
+ // DAY OF MONTH
+ case 'D' : // fall through to DD
+ case 'DD' :
+ if (input != null) {
+ datePartArray[DATE] = toInt(input);
+ }
+ break;
+ case 'Do' :
+ if (input != null) {
+ datePartArray[DATE] = toInt(parseInt(
+ input.match(/\d{1,2}/)[0], 10));
+ }
+ break;
+ // DAY OF YEAR
+ case 'DDD' : // fall through to DDDD
+ case 'DDDD' :
+ if (input != null) {
+ config._dayOfYear = toInt(input);
+ }
+
+ break;
+ // YEAR
+ case 'YY' :
+ datePartArray[YEAR] = moment.parseTwoDigitYear(input);
+ break;
+ case 'YYYY' :
+ case 'YYYYY' :
+ case 'YYYYYY' :
+ datePartArray[YEAR] = toInt(input);
+ break;
+ // AM / PM
+ case 'a' : // fall through to A
+ case 'A' :
+ config._meridiem = input;
+ // config._isPm = config._locale.isPM(input);
+ break;
+ // HOUR
+ case 'h' : // fall through to hh
+ case 'hh' :
+ config._pf.bigHour = true;
+ /* falls through */
+ case 'H' : // fall through to HH
+ case 'HH' :
+ datePartArray[HOUR] = toInt(input);
+ break;
+ // MINUTE
+ case 'm' : // fall through to mm
+ case 'mm' :
+ datePartArray[MINUTE] = toInt(input);
+ break;
+ // SECOND
+ case 's' : // fall through to ss
+ case 'ss' :
+ datePartArray[SECOND] = toInt(input);
+ break;
+ // MILLISECOND
+ case 'S' :
+ case 'SS' :
+ case 'SSS' :
+ case 'SSSS' :
+ datePartArray[MILLISECOND] = toInt(('0.' + input) * 1000);
+ break;
+ // UNIX OFFSET (MILLISECONDS)
+ case 'x':
+ config._d = new Date(toInt(input));
+ break;
+ // UNIX TIMESTAMP WITH MS
+ case 'X':
+ config._d = new Date(parseFloat(input) * 1000);
+ break;
+ // TIMEZONE
+ case 'Z' : // fall through to ZZ
+ case 'ZZ' :
+ config._useUTC = true;
+ config._tzm = utcOffsetFromString(input);
+ break;
+ // WEEKDAY - human
+ case 'dd':
+ case 'ddd':
+ case 'dddd':
+ a = config._locale.weekdaysParse(input);
+ // if we didn't get a weekday name, mark the date as invalid
+ if (a != null) {
+ config._w = config._w || {};
+ config._w['d'] = a;
+ } else {
+ config._pf.invalidWeekday = input;
+ }
+ break;
+ // WEEK, WEEK DAY - numeric
+ case 'w':
+ case 'ww':
+ case 'W':
+ case 'WW':
+ case 'd':
+ case 'e':
+ case 'E':
+ token = token.substr(0, 1);
+ /* falls through */
+ case 'gggg':
+ case 'GGGG':
+ case 'GGGGG':
+ token = token.substr(0, 2);
+ if (input) {
+ config._w = config._w || {};
+ config._w[token] = toInt(input);
+ }
+ break;
+ case 'gg':
+ case 'GG':
+ config._w = config._w || {};
+ config._w[token] = moment.parseTwoDigitYear(input);
+ }
+ }
+
+ function dayOfYearFromWeekInfo(config) {
+ var w, weekYear, week, weekday, dow, doy, temp;
+
+ w = config._w;
+ if (w.GG != null || w.W != null || w.E != null) {
+ dow = 1;
+ doy = 4;
+
+ // TODO: We need to take the current isoWeekYear, but that depends on
+ // how we interpret now (local, utc, fixed offset). So create
+ // a now version of current config (take local/utc/offset flags, and
+ // create now).
+ weekYear = dfl(w.GG, config._a[YEAR], weekOfYear(moment(), 1, 4).year);
+ week = dfl(w.W, 1);
+ weekday = dfl(w.E, 1);
+ } else {
+ dow = config._locale._week.dow;
+ doy = config._locale._week.doy;
+
+ weekYear = dfl(w.gg, config._a[YEAR], weekOfYear(moment(), dow, doy).year);
+ week = dfl(w.w, 1);
+
+ if (w.d != null) {
+ // weekday -- low day numbers are considered next week
+ weekday = w.d;
+ if (weekday < dow) {
+ ++week;
+ }
+ } else if (w.e != null) {
+ // local weekday -- counting starts from begining of week
+ weekday = w.e + dow;
+ } else {
+ // default to begining of week
+ weekday = dow;
+ }
+ }
+ temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow);
+
+ config._a[YEAR] = temp.year;
+ config._dayOfYear = temp.dayOfYear;
+ }
+
+ // convert an array to a date.
+ // the array should mirror the parameters below
+ // note: all values past the year are optional and will default to the lowest possible value.
+ // [year, month, day , hour, minute, second, millisecond]
+ function dateFromConfig(config) {
+ var i, date, input = [], currentDate, yearToUse;
+
+ if (config._d) {
+ return;
+ }
+
+ currentDate = currentDateArray(config);
+
+ //compute day of the year from weeks and weekdays
+ if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
+ dayOfYearFromWeekInfo(config);
+ }
+
+ //if the day of the year is set, figure out what it is
+ if (config._dayOfYear) {
+ yearToUse = dfl(config._a[YEAR], currentDate[YEAR]);
+
+ if (config._dayOfYear > daysInYear(yearToUse)) {
+ config._pf._overflowDayOfYear = true;
+ }
+
+ date = makeUTCDate(yearToUse, 0, config._dayOfYear);
+ config._a[MONTH] = date.getUTCMonth();
+ config._a[DATE] = date.getUTCDate();
+ }
+
+ // Default to current date.
+ // * if no year, month, day of month are given, default to today
+ // * if day of month is given, default month and year
+ // * if month is given, default only year
+ // * if year is given, don't default anything
+ for (i = 0; i < 3 && config._a[i] == null; ++i) {
+ config._a[i] = input[i] = currentDate[i];
+ }
+
+ // Zero out whatever was not defaulted, including time
+ for (; i < 7; i++) {
+ config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];
+ }
+
+ // Check for 24:00:00.000
+ if (config._a[HOUR] === 24 &&
+ config._a[MINUTE] === 0 &&
+ config._a[SECOND] === 0 &&
+ config._a[MILLISECOND] === 0) {
+ config._nextDay = true;
+ config._a[HOUR] = 0;
+ }
+
+ config._d = (config._useUTC ? makeUTCDate : makeDate).apply(null, input);
+ // Apply timezone offset from input. The actual utcOffset can be changed
+ // with parseZone.
+ if (config._tzm != null) {
+ config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
+ }
+
+ if (config._nextDay) {
+ config._a[HOUR] = 24;
+ }
+ }
+
+ function dateFromObject(config) {
+ var normalizedInput;
+
+ if (config._d) {
+ return;
+ }
+
+ normalizedInput = normalizeObjectUnits(config._i);
+ config._a = [
+ normalizedInput.year,
+ normalizedInput.month,
+ normalizedInput.day || normalizedInput.date,
+ normalizedInput.hour,
+ normalizedInput.minute,
+ normalizedInput.second,
+ normalizedInput.millisecond
+ ];
+
+ dateFromConfig(config);
+ }
+
+ function currentDateArray(config) {
+ var now = new Date();
+ if (config._useUTC) {
+ return [
+ now.getUTCFullYear(),
+ now.getUTCMonth(),
+ now.getUTCDate()
+ ];
+ } else {
+ return [now.getFullYear(), now.getMonth(), now.getDate()];
+ }
+ }
+
+ // date from string and format string
+ function makeDateFromStringAndFormat(config) {
+ if (config._f === moment.ISO_8601) {
+ parseISO(config);
+ return;
+ }
+
+ config._a = [];
+ config._pf.empty = true;
+
+ // This array is used to make a Date, either with `new Date` or `Date.UTC`
+ var string = '' + config._i,
+ i, parsedInput, tokens, token, skipped,
+ stringLength = string.length,
+ totalParsedInputLength = 0;
+
+ tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];
+
+ for (i = 0; i < tokens.length; i++) {
+ token = tokens[i];
+ parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];
+ if (parsedInput) {
+ skipped = string.substr(0, string.indexOf(parsedInput));
+ if (skipped.length > 0) {
+ config._pf.unusedInput.push(skipped);
+ }
+ string = string.slice(string.indexOf(parsedInput) + parsedInput.length);
+ totalParsedInputLength += parsedInput.length;
+ }
+ // don't parse if it's not a known token
+ if (formatTokenFunctions[token]) {
+ if (parsedInput) {
+ config._pf.empty = false;
+ }
+ else {
+ config._pf.unusedTokens.push(token);
+ }
+ addTimeToArrayFromToken(token, parsedInput, config);
+ }
+ else if (config._strict && !parsedInput) {
+ config._pf.unusedTokens.push(token);
+ }
+ }
+
+ // add remaining unparsed input length to the string
+ config._pf.charsLeftOver = stringLength - totalParsedInputLength;
+ if (string.length > 0) {
+ config._pf.unusedInput.push(string);
+ }
+
+ // clear _12h flag if hour is <= 12
+ if (config._pf.bigHour === true && config._a[HOUR] <= 12) {
+ config._pf.bigHour = undefined;
+ }
+ // handle meridiem
+ config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR],
+ config._meridiem);
+ dateFromConfig(config);
+ checkOverflow(config);
+ }
+
+ function unescapeFormat(s) {
+ return s.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) {
+ return p1 || p2 || p3 || p4;
+ });
+ }
+
+ // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
+ function regexpEscape(s) {
+ return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
+ }
+
+ // date from string and array of format strings
+ function makeDateFromStringAndArray(config) {
+ var tempConfig,
+ bestMoment,
+
+ scoreToBeat,
+ i,
+ currentScore;
+
+ if (config._f.length === 0) {
+ config._pf.invalidFormat = true;
+ config._d = new Date(NaN);
+ return;
+ }
+
+ for (i = 0; i < config._f.length; i++) {
+ currentScore = 0;
+ tempConfig = copyConfig({}, config);
+ if (config._useUTC != null) {
+ tempConfig._useUTC = config._useUTC;
+ }
+ tempConfig._pf = defaultParsingFlags();
+ tempConfig._f = config._f[i];
+ makeDateFromStringAndFormat(tempConfig);
+
+ if (!isValid(tempConfig)) {
+ continue;
+ }
+
+ // if there is any input that was not parsed add a penalty for that format
+ currentScore += tempConfig._pf.charsLeftOver;
+
+ //or tokens
+ currentScore += tempConfig._pf.unusedTokens.length * 10;
+
+ tempConfig._pf.score = currentScore;
+
+ if (scoreToBeat == null || currentScore < scoreToBeat) {
+ scoreToBeat = currentScore;
+ bestMoment = tempConfig;
+ }
+ }
+
+ extend(config, bestMoment || tempConfig);
+ }
+
+ // date from iso format
+ function parseISO(config) {
+ var i, l,
+ string = config._i,
+ match = isoRegex.exec(string);
+
+ if (match) {
+ config._pf.iso = true;
+ for (i = 0, l = isoDates.length; i < l; i++) {
+ if (isoDates[i][1].exec(string)) {
+ // match[5] should be 'T' or undefined
+ config._f = isoDates[i][0] + (match[6] || ' ');
+ break;
+ }
+ }
+ for (i = 0, l = isoTimes.length; i < l; i++) {
+ if (isoTimes[i][1].exec(string)) {
+ config._f += isoTimes[i][0];
+ break;
+ }
+ }
+ if (string.match(parseTokenTimezone)) {
+ config._f += 'Z';
+ }
+ makeDateFromStringAndFormat(config);
+ } else {
+ config._isValid = false;
+ }
+ }
+
+ // date from iso format or fallback
+ function makeDateFromString(config) {
+ parseISO(config);
+ if (config._isValid === false) {
+ delete config._isValid;
+ moment.createFromInputFallback(config);
+ }
+ }
+
+ function map(arr, fn) {
+ var res = [], i;
+ for (i = 0; i < arr.length; ++i) {
+ res.push(fn(arr[i], i));
+ }
+ return res;
+ }
+
+ function makeDateFromInput(config) {
+ var input = config._i, matched;
+ if (input === undefined) {
+ config._d = new Date();
+ } else if (isDate(input)) {
+ config._d = new Date(+input);
+ } else if ((matched = aspNetJsonRegex.exec(input)) !== null) {
+ config._d = new Date(+matched[1]);
+ } else if (typeof input === 'string') {
+ makeDateFromString(config);
+ } else if (isArray(input)) {
+ config._a = map(input.slice(0), function (obj) {
+ return parseInt(obj, 10);
+ });
+ dateFromConfig(config);
+ } else if (typeof(input) === 'object') {
+ dateFromObject(config);
+ } else if (typeof(input) === 'number') {
+ // from milliseconds
+ config._d = new Date(input);
+ } else {
+ moment.createFromInputFallback(config);
+ }
+ }
+
+ function makeDate(y, m, d, h, M, s, ms) {
+ //can't just apply() to create a date:
+ //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
+ var date = new Date(y, m, d, h, M, s, ms);
+
+ //the date constructor doesn't accept years < 1970
+ if (y < 1970) {
+ date.setFullYear(y);
+ }
+ return date;
+ }
+
+ function makeUTCDate(y) {
+ var date = new Date(Date.UTC.apply(null, arguments));
+ if (y < 1970) {
+ date.setUTCFullYear(y);
+ }
+ return date;
+ }
+
+ function parseWeekday(input, locale) {
+ if (typeof input === 'string') {
+ if (!isNaN(input)) {
+ input = parseInt(input, 10);
+ }
+ else {
+ input = locale.weekdaysParse(input);
+ if (typeof input !== 'number') {
+ return null;
+ }
+ }
+ }
+ return input;
+ }
+
+ /************************************
+ Relative Time
+ ************************************/
+
+
+ // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
+ function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
+ return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
+ }
+
+ function relativeTime(posNegDuration, withoutSuffix, locale) {
+ var duration = moment.duration(posNegDuration).abs(),
+ seconds = round(duration.as('s')),
+ minutes = round(duration.as('m')),
+ hours = round(duration.as('h')),
+ days = round(duration.as('d')),
+ months = round(duration.as('M')),
+ years = round(duration.as('y')),
+
+ args = seconds < relativeTimeThresholds.s && ['s', seconds] ||
+ minutes === 1 && ['m'] ||
+ minutes < relativeTimeThresholds.m && ['mm', minutes] ||
+ hours === 1 && ['h'] ||
+ hours < relativeTimeThresholds.h && ['hh', hours] ||
+ days === 1 && ['d'] ||
+ days < relativeTimeThresholds.d && ['dd', days] ||
+ months === 1 && ['M'] ||
+ months < relativeTimeThresholds.M && ['MM', months] ||
+ years === 1 && ['y'] || ['yy', years];
+
+ args[2] = withoutSuffix;
+ args[3] = +posNegDuration > 0;
+ args[4] = locale;
+ return substituteTimeAgo.apply({}, args);
+ }
+
+
+ /************************************
+ Week of Year
+ ************************************/
+
+
+ // firstDayOfWeek 0 = sun, 6 = sat
+ // the day of the week that starts the week
+ // (usually sunday or monday)
+ // firstDayOfWeekOfYear 0 = sun, 6 = sat
+ // the first week is the week that contains the first
+ // of this day of the week
+ // (eg. ISO weeks use thursday (4))
+ function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) {
+ var end = firstDayOfWeekOfYear - firstDayOfWeek,
+ daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(),
+ adjustedMoment;
+
+
+ if (daysToDayOfWeek > end) {
+ daysToDayOfWeek -= 7;
+ }
+
+ if (daysToDayOfWeek < end - 7) {
+ daysToDayOfWeek += 7;
+ }
+
+ adjustedMoment = moment(mom).add(daysToDayOfWeek, 'd');
+ return {
+ week: Math.ceil(adjustedMoment.dayOfYear() / 7),
+ year: adjustedMoment.year()
+ };
+ }
+
+ //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
+ function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) {
+ var d = makeUTCDate(year, 0, 1).getUTCDay(), daysToAdd, dayOfYear;
+
+ d = d === 0 ? 7 : d;
+ weekday = weekday != null ? weekday : firstDayOfWeek;
+ daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0) - (d < firstDayOfWeek ? 7 : 0);
+ dayOfYear = 7 * (week - 1) + (weekday - firstDayOfWeek) + daysToAdd + 1;
+
+ return {
+ year: dayOfYear > 0 ? year : year - 1,
+ dayOfYear: dayOfYear > 0 ? dayOfYear : daysInYear(year - 1) + dayOfYear
+ };
+ }
+
+ /************************************
+ Top Level Functions
+ ************************************/
+
+ function makeMoment(config) {
+ var input = config._i,
+ format = config._f,
+ res;
+
+ config._locale = config._locale || moment.localeData(config._l);
+
+ if (input === null || (format === undefined && input === '')) {
+ return moment.invalid({nullInput: true});
+ }
+
+ if (typeof input === 'string') {
+ config._i = input = config._locale.preparse(input);
+ }
+
+ if (moment.isMoment(input)) {
+ return new Moment(input, true);
+ } else if (format) {
+ if (isArray(format)) {
+ makeDateFromStringAndArray(config);
+ } else {
+ makeDateFromStringAndFormat(config);
+ }
+ } else {
+ makeDateFromInput(config);
+ }
+
+ res = new Moment(config);
+ if (res._nextDay) {
+ // Adding is smart enough around DST
+ res.add(1, 'd');
+ res._nextDay = undefined;
+ }
+
+ return res;
+ }
+
+ moment = function (input, format, locale, strict) {
+ var c;
+
+ if (typeof(locale) === 'boolean') {
+ strict = locale;
+ locale = undefined;
+ }
+ // object construction must be done this way.
+ // https://github.com/moment/moment/issues/1423
+ c = {};
+ c._isAMomentObject = true;
+ c._i = input;
+ c._f = format;
+ c._l = locale;
+ c._strict = strict;
+ c._isUTC = false;
+ c._pf = defaultParsingFlags();
+
+ return makeMoment(c);
+ };
+
+ moment.suppressDeprecationWarnings = false;
+
+ moment.createFromInputFallback = deprecate(
+ 'moment construction falls back to js Date. This is ' +
+ 'discouraged and will be removed in upcoming major ' +
+ 'release. Please refer to ' +
+ 'https://github.com/moment/moment/issues/1407 for more info.',
+ function (config) {
+ config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
+ }
+ );
+
+ // Pick a moment m from moments so that m[fn](other) is true for all
+ // other. This relies on the function fn to be transitive.
+ //
+ // moments should either be an array of moment objects or an array, whose
+ // first element is an array of moment objects.
+ function pickBy(fn, moments) {
+ var res, i;
+ if (moments.length === 1 && isArray(moments[0])) {
+ moments = moments[0];
+ }
+ if (!moments.length) {
+ return moment();
+ }
+ res = moments[0];
+ for (i = 1; i < moments.length; ++i) {
+ if (moments[i][fn](res)) {
+ res = moments[i];
+ }
+ }
+ return res;
+ }
+
+ moment.min = function () {
+ var args = [].slice.call(arguments, 0);
+
+ return pickBy('isBefore', args);
+ };
+
+ moment.max = function () {
+ var args = [].slice.call(arguments, 0);
+
+ return pickBy('isAfter', args);
+ };
+
+ // creating with utc
+ moment.utc = function (input, format, locale, strict) {
+ var c;
+
+ if (typeof(locale) === 'boolean') {
+ strict = locale;
+ locale = undefined;
+ }
+ // object construction must be done this way.
+ // https://github.com/moment/moment/issues/1423
+ c = {};
+ c._isAMomentObject = true;
+ c._useUTC = true;
+ c._isUTC = true;
+ c._l = locale;
+ c._i = input;
+ c._f = format;
+ c._strict = strict;
+ c._pf = defaultParsingFlags();
+
+ return makeMoment(c).utc();
+ };
+
+ // creating with unix timestamp (in seconds)
+ moment.unix = function (input) {
+ return moment(input * 1000);
+ };
+
+ // duration
+ moment.duration = function (input, key) {
+ var duration = input,
+ // matching against regexp is expensive, do it on demand
+ match = null,
+ sign,
+ ret,
+ parseIso,
+ diffRes;
+
+ if (moment.isDuration(input)) {
+ duration = {
+ ms: input._milliseconds,
+ d: input._days,
+ M: input._months
+ };
+ } else if (typeof input === 'number') {
+ duration = {};
+ if (key) {
+ duration[key] = input;
+ } else {
+ duration.milliseconds = input;
+ }
+ } else if (!!(match = aspNetTimeSpanJsonRegex.exec(input))) {
+ sign = (match[1] === '-') ? -1 : 1;
+ duration = {
+ y: 0,
+ d: toInt(match[DATE]) * sign,
+ h: toInt(match[HOUR]) * sign,
+ m: toInt(match[MINUTE]) * sign,
+ s: toInt(match[SECOND]) * sign,
+ ms: toInt(match[MILLISECOND]) * sign
+ };
+ } else if (!!(match = isoDurationRegex.exec(input))) {
+ sign = (match[1] === '-') ? -1 : 1;
+ parseIso = function (inp) {
+ // We'd normally use ~~inp for this, but unfortunately it also
+ // converts floats to ints.
+ // inp may be undefined, so careful calling replace on it.
+ var res = inp && parseFloat(inp.replace(',', '.'));
+ // apply sign while we're at it
+ return (isNaN(res) ? 0 : res) * sign;
+ };
+ duration = {
+ y: parseIso(match[2]),
+ M: parseIso(match[3]),
+ d: parseIso(match[4]),
+ h: parseIso(match[5]),
+ m: parseIso(match[6]),
+ s: parseIso(match[7]),
+ w: parseIso(match[8])
+ };
+ } else if (duration == null) {// checks for null or undefined
+ duration = {};
+ } else if (typeof duration === 'object' &&
+ ('from' in duration || 'to' in duration)) {
+ diffRes = momentsDifference(moment(duration.from), moment(duration.to));
+
+ duration = {};
+ duration.ms = diffRes.milliseconds;
+ duration.M = diffRes.months;
+ }
+
+ ret = new Duration(duration);
+
+ if (moment.isDuration(input) && hasOwnProp(input, '_locale')) {
+ ret._locale = input._locale;
+ }
+
+ return ret;
+ };
+
+ // version number
+ moment.version = VERSION;
+
+ // default format
+ moment.defaultFormat = isoFormat;
+
+ // constant that refers to the ISO standard
+ moment.ISO_8601 = function () {};
+
+ // Plugins that add properties should also add the key here (null value),
+ // so we can properly clone ourselves.
+ moment.momentProperties = momentProperties;
+
+ // This function will be called whenever a moment is mutated.
+ // It is intended to keep the offset in sync with the timezone.
+ moment.updateOffset = function () {};
+
+ // This function allows you to set a threshold for relative time strings
+ moment.relativeTimeThreshold = function (threshold, limit) {
+ if (relativeTimeThresholds[threshold] === undefined) {
+ return false;
+ }
+ if (limit === undefined) {
+ return relativeTimeThresholds[threshold];
+ }
+ relativeTimeThresholds[threshold] = limit;
+ return true;
+ };
+
+ moment.lang = deprecate(
+ 'moment.lang is deprecated. Use moment.locale instead.',
+ function (key, value) {
+ return moment.locale(key, value);
+ }
+ );
+
+ // This function will load locale and then set the global locale. If
+ // no arguments are passed in, it will simply return the current global
+ // locale key.
+ moment.locale = function (key, values) {
+ var data;
+ if (key) {
+ if (typeof(values) !== 'undefined') {
+ data = moment.defineLocale(key, values);
+ }
+ else {
+ data = moment.localeData(key);
+ }
+
+ if (data) {
+ moment.duration._locale = moment._locale = data;
+ }
+ }
+
+ return moment._locale._abbr;
+ };
+
+ moment.defineLocale = function (name, values) {
+ if (values !== null) {
+ values.abbr = name;
+ if (!locales[name]) {
+ locales[name] = new Locale();
+ }
+ locales[name].set(values);
+
+ // backwards compat for now: also set the locale
+ moment.locale(name);
+
+ return locales[name];
+ } else {
+ // useful for testing
+ delete locales[name];
+ return null;
+ }
+ };
+
+ moment.langData = deprecate(
+ 'moment.langData is deprecated. Use moment.localeData instead.',
+ function (key) {
+ return moment.localeData(key);
+ }
+ );
+
+ // returns locale data
+ moment.localeData = function (key) {
+ var locale;
+
+ if (key && key._locale && key._locale._abbr) {
+ key = key._locale._abbr;
+ }
+
+ if (!key) {
+ return moment._locale;
+ }
+
+ if (!isArray(key)) {
+ //short-circuit everything else
+ locale = loadLocale(key);
+ if (locale) {
+ return locale;
+ }
+ key = [key];
+ }
+
+ return chooseLocale(key);
+ };
+
+ // compare moment object
+ moment.isMoment = function (obj) {
+ return obj instanceof Moment ||
+ (obj != null && hasOwnProp(obj, '_isAMomentObject'));
+ };
+
+ // for typechecking Duration objects
+ moment.isDuration = function (obj) {
+ return obj instanceof Duration;
+ };
+
+ for (i = lists.length - 1; i >= 0; --i) {
+ makeList(lists[i]);
+ }
+
+ moment.normalizeUnits = function (units) {
+ return normalizeUnits(units);
+ };
+
+ moment.invalid = function (flags) {
+ var m = moment.utc(NaN);
+ if (flags != null) {
+ extend(m._pf, flags);
+ }
+ else {
+ m._pf.userInvalidated = true;
+ }
+
+ return m;
+ };
+
+ moment.parseZone = function () {
+ return moment.apply(null, arguments).parseZone();
+ };
+
+ moment.parseTwoDigitYear = function (input) {
+ return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
+ };
+
+ moment.isDate = isDate;
+
+ /************************************
+ Moment Prototype
+ ************************************/
+
+
+ extend(moment.fn = Moment.prototype, {
+
+ clone : function () {
+ return moment(this);
+ },
+
+ valueOf : function () {
+ return +this._d - ((this._offset || 0) * 60000);
+ },
+
+ unix : function () {
+ return Math.floor(+this / 1000);
+ },
+
+ toString : function () {
+ return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
+ },
+
+ toDate : function () {
+ return this._offset ? new Date(+this) : this._d;
+ },
+
+ toISOString : function () {
+ var m = moment(this).utc();
+ if (0 < m.year() && m.year() <= 9999) {
+ if ('function' === typeof Date.prototype.toISOString) {
+ // native implementation is ~50x faster, use it when we can
+ return this.toDate().toISOString();
+ } else {
+ return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
+ }
+ } else {
+ return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
+ }
+ },
+
+ toArray : function () {
+ var m = this;
+ return [
+ m.year(),
+ m.month(),
+ m.date(),
+ m.hours(),
+ m.minutes(),
+ m.seconds(),
+ m.milliseconds()
+ ];
+ },
+
+ isValid : function () {
+ return isValid(this);
+ },
+
+ isDSTShifted : function () {
+ if (this._a) {
+ return this.isValid() && compareArrays(this._a, (this._isUTC ? moment.utc(this._a) : moment(this._a)).toArray()) > 0;
+ }
+
+ return false;
+ },
+
+ parsingFlags : function () {
+ return extend({}, this._pf);
+ },
+
+ invalidAt: function () {
+ return this._pf.overflow;
+ },
+
+ utc : function (keepLocalTime) {
+ return this.utcOffset(0, keepLocalTime);
+ },
+
+ local : function (keepLocalTime) {
+ if (this._isUTC) {
+ this.utcOffset(0, keepLocalTime);
+ this._isUTC = false;
+
+ if (keepLocalTime) {
+ this.subtract(this._dateUtcOffset(), 'm');
+ }
+ }
+ return this;
+ },
+
+ format : function (inputString) {
+ var output = formatMoment(this, inputString || moment.defaultFormat);
+ return this.localeData().postformat(output);
+ },
+
+ add : createAdder(1, 'add'),
+
+ subtract : createAdder(-1, 'subtract'),
+
+ diff : function (input, units, asFloat) {
+ var that = makeAs(input, this),
+ zoneDiff = (that.utcOffset() - this.utcOffset()) * 6e4,
+ anchor, diff, output, daysAdjust;
+
+ units = normalizeUnits(units);
+
+ if (units === 'year' || units === 'month' || units === 'quarter') {
+ output = monthDiff(this, that);
+ if (units === 'quarter') {
+ output = output / 3;
+ } else if (units === 'year') {
+ output = output / 12;
+ }
+ } else {
+ diff = this - that;
+ output = units === 'second' ? diff / 1e3 : // 1000
+ units === 'minute' ? diff / 6e4 : // 1000 * 60
+ units === 'hour' ? diff / 36e5 : // 1000 * 60 * 60
+ units === 'day' ? (diff - zoneDiff) / 864e5 : // 1000 * 60 * 60 * 24, negate dst
+ units === 'week' ? (diff - zoneDiff) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst
+ diff;
+ }
+ return asFloat ? output : absRound(output);
+ },
+
+ from : function (time, withoutSuffix) {
+ return moment.duration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);
+ },
+
+ fromNow : function (withoutSuffix) {
+ return this.from(moment(), withoutSuffix);
+ },
+
+ calendar : function (time) {
+ // We want to compare the start of today, vs this.
+ // Getting start-of-today depends on whether we're locat/utc/offset
+ // or not.
+ var now = time || moment(),
+ sod = makeAs(now, this).startOf('day'),
+ diff = this.diff(sod, 'days', true),
+ format = diff < -6 ? 'sameElse' :
+ diff < -1 ? 'lastWeek' :
+ diff < 0 ? 'lastDay' :
+ diff < 1 ? 'sameDay' :
+ diff < 2 ? 'nextDay' :
+ diff < 7 ? 'nextWeek' : 'sameElse';
+ return this.format(this.localeData().calendar(format, this, moment(now)));
+ },
+
+ isLeapYear : function () {
+ return isLeapYear(this.year());
+ },
+
+ isDST : function () {
+ return (this.utcOffset() > this.clone().month(0).utcOffset() ||
+ this.utcOffset() > this.clone().month(5).utcOffset());
+ },
+
+ day : function (input) {
+ var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
+ if (input != null) {
+ input = parseWeekday(input, this.localeData());
+ return this.add(input - day, 'd');
+ } else {
+ return day;
+ }
+ },
+
+ month : makeAccessor('Month', true),
+
+ startOf : function (units) {
+ units = normalizeUnits(units);
+ // the following switch intentionally omits break keywords
+ // to utilize falling through the cases.
+ switch (units) {
+ case 'year':
+ this.month(0);
+ /* falls through */
+ case 'quarter':
+ case 'month':
+ this.date(1);
+ /* falls through */
+ case 'week':
+ case 'isoWeek':
+ case 'day':
+ this.hours(0);
+ /* falls through */
+ case 'hour':
+ this.minutes(0);
+ /* falls through */
+ case 'minute':
+ this.seconds(0);
+ /* falls through */
+ case 'second':
+ this.milliseconds(0);
+ /* falls through */
+ }
+
+ // weeks are a special case
+ if (units === 'week') {
+ this.weekday(0);
+ } else if (units === 'isoWeek') {
+ this.isoWeekday(1);
+ }
+
+ // quarters are also special
+ if (units === 'quarter') {
+ this.month(Math.floor(this.month() / 3) * 3);
+ }
+
+ return this;
+ },
+
+ endOf: function (units) {
+ units = normalizeUnits(units);
+ if (units === undefined || units === 'millisecond') {
+ return this;
+ }
+ return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');
+ },
+
+ isAfter: function (input, units) {
+ var inputMs;
+ units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond');
+ if (units === 'millisecond') {
+ input = moment.isMoment(input) ? input : moment(input);
+ return +this > +input;
+ } else {
+ inputMs = moment.isMoment(input) ? +input : +moment(input);
+ return inputMs < +this.clone().startOf(units);
+ }
+ },
+
+ isBefore: function (input, units) {
+ var inputMs;
+ units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond');
+ if (units === 'millisecond') {
+ input = moment.isMoment(input) ? input : moment(input);
+ return +this < +input;
+ } else {
+ inputMs = moment.isMoment(input) ? +input : +moment(input);
+ return +this.clone().endOf(units) < inputMs;
+ }
+ },
+
+ isBetween: function (from, to, units) {
+ return this.isAfter(from, units) && this.isBefore(to, units);
+ },
+
+ isSame: function (input, units) {
+ var inputMs;
+ units = normalizeUnits(units || 'millisecond');
+ if (units === 'millisecond') {
+ input = moment.isMoment(input) ? input : moment(input);
+ return +this === +input;
+ } else {
+ inputMs = +moment(input);
+ return +(this.clone().startOf(units)) <= inputMs && inputMs <= +(this.clone().endOf(units));
+ }
+ },
+
+ min: deprecate(
+ 'moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548',
+ function (other) {
+ other = moment.apply(null, arguments);
+ return other < this ? this : other;
+ }
+ ),
+
+ max: deprecate(
+ 'moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548',
+ function (other) {
+ other = moment.apply(null, arguments);
+ return other > this ? this : other;
+ }
+ ),
+
+ zone : deprecate(
+ 'moment().zone is deprecated, use moment().utcOffset instead. ' +
+ 'https://github.com/moment/moment/issues/1779',
+ function (input, keepLocalTime) {
+ if (input != null) {
+ if (typeof input !== 'string') {
+ input = -input;
+ }
+
+ this.utcOffset(input, keepLocalTime);
+
+ return this;
+ } else {
+ return -this.utcOffset();
+ }
+ }
+ ),
+
+ // keepLocalTime = true means only change the timezone, without
+ // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
+ // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
+ // +0200, so we adjust the time as needed, to be valid.
+ //
+ // Keeping the time actually adds/subtracts (one hour)
+ // from the actual represented time. That is why we call updateOffset
+ // a second time. In case it wants us to change the offset again
+ // _changeInProgress == true case, then we have to adjust, because
+ // there is no such time in the given timezone.
+ utcOffset : function (input, keepLocalTime) {
+ var offset = this._offset || 0,
+ localAdjust;
+ if (input != null) {
+ if (typeof input === 'string') {
+ input = utcOffsetFromString(input);
+ }
+ if (Math.abs(input) < 16) {
+ input = input * 60;
+ }
+ if (!this._isUTC && keepLocalTime) {
+ localAdjust = this._dateUtcOffset();
+ }
+ this._offset = input;
+ this._isUTC = true;
+ if (localAdjust != null) {
+ this.add(localAdjust, 'm');
+ }
+ if (offset !== input) {
+ if (!keepLocalTime || this._changeInProgress) {
+ addOrSubtractDurationFromMoment(this,
+ moment.duration(input - offset, 'm'), 1, false);
+ } else if (!this._changeInProgress) {
+ this._changeInProgress = true;
+ moment.updateOffset(this, true);
+ this._changeInProgress = null;
+ }
+ }
+
+ return this;
+ } else {
+ return this._isUTC ? offset : this._dateUtcOffset();
+ }
+ },
+
+ isLocal : function () {
+ return !this._isUTC;
+ },
+
+ isUtcOffset : function () {
+ return this._isUTC;
+ },
+
+ isUtc : function () {
+ return this._isUTC && this._offset === 0;
+ },
+
+ zoneAbbr : function () {
+ return this._isUTC ? 'UTC' : '';
+ },
+
+ zoneName : function () {
+ return this._isUTC ? 'Coordinated Universal Time' : '';
+ },
+
+ parseZone : function () {
+ if (this._tzm) {
+ this.utcOffset(this._tzm);
+ } else if (typeof this._i === 'string') {
+ this.utcOffset(utcOffsetFromString(this._i));
+ }
+ return this;
+ },
+
+ hasAlignedHourOffset : function (input) {
+ if (!input) {
+ input = 0;
+ }
+ else {
+ input = moment(input).utcOffset();
+ }
+
+ return (this.utcOffset() - input) % 60 === 0;
+ },
+
+ daysInMonth : function () {
+ return daysInMonth(this.year(), this.month());
+ },
+
+ dayOfYear : function (input) {
+ var dayOfYear = round((moment(this).startOf('day') - moment(this).startOf('year')) / 864e5) + 1;
+ return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');
+ },
+
+ quarter : function (input) {
+ return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);
+ },
+
+ weekYear : function (input) {
+ var year = weekOfYear(this, this.localeData()._week.dow, this.localeData()._week.doy).year;
+ return input == null ? year : this.add((input - year), 'y');
+ },
+
+ isoWeekYear : function (input) {
+ var year = weekOfYear(this, 1, 4).year;
+ return input == null ? year : this.add((input - year), 'y');
+ },
+
+ week : function (input) {
+ var week = this.localeData().week(this);
+ return input == null ? week : this.add((input - week) * 7, 'd');
+ },
+
+ isoWeek : function (input) {
+ var week = weekOfYear(this, 1, 4).week;
+ return input == null ? week : this.add((input - week) * 7, 'd');
+ },
+
+ weekday : function (input) {
+ var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
+ return input == null ? weekday : this.add(input - weekday, 'd');
+ },
+
+ isoWeekday : function (input) {
+ // behaves the same as moment#day except
+ // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
+ // as a setter, sunday should belong to the previous week.
+ return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7);
+ },
+
+ isoWeeksInYear : function () {
+ return weeksInYear(this.year(), 1, 4);
+ },
+
+ weeksInYear : function () {
+ var weekInfo = this.localeData()._week;
+ return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
+ },
+
+ get : function (units) {
+ units = normalizeUnits(units);
+ return this[units]();
+ },
+
+ set : function (units, value) {
+ var unit;
+ if (typeof units === 'object') {
+ for (unit in units) {
+ this.set(unit, units[unit]);
+ }
+ }
+ else {
+ units = normalizeUnits(units);
+ if (typeof this[units] === 'function') {
+ this[units](value);
+ }
+ }
+ return this;
+ },
+
+ // If passed a locale key, it will set the locale for this
+ // instance. Otherwise, it will return the locale configuration
+ // variables for this instance.
+ locale : function (key) {
+ var newLocaleData;
+
+ if (key === undefined) {
+ return this._locale._abbr;
+ } else {
+ newLocaleData = moment.localeData(key);
+ if (newLocaleData != null) {
+ this._locale = newLocaleData;
+ }
+ return this;
+ }
+ },
+
+ lang : deprecate(
+ 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
+ function (key) {
+ if (key === undefined) {
+ return this.localeData();
+ } else {
+ return this.locale(key);
+ }
+ }
+ ),
+
+ localeData : function () {
+ return this._locale;
+ },
+
+ _dateUtcOffset : function () {
+ // On Firefox.24 Date#getTimezoneOffset returns a floating point.
+ // https://github.com/moment/moment/pull/1871
+ return -Math.round(this._d.getTimezoneOffset() / 15) * 15;
+ }
+
+ });
+
+ function rawMonthSetter(mom, value) {
+ var dayOfMonth;
+
+ // TODO: Move this out of here!
+ if (typeof value === 'string') {
+ value = mom.localeData().monthsParse(value);
+ // TODO: Another silent failure?
+ if (typeof value !== 'number') {
+ return mom;
+ }
+ }
+
+ dayOfMonth = Math.min(mom.date(),
+ daysInMonth(mom.year(), value));
+ mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
+ return mom;
+ }
+
+ function rawGetter(mom, unit) {
+ return mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]();
+ }
+
+ function rawSetter(mom, unit, value) {
+ if (unit === 'Month') {
+ return rawMonthSetter(mom, value);
+ } else {
+ return mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
+ }
+ }
+
+ function makeAccessor(unit, keepTime) {
+ return function (value) {
+ if (value != null) {
+ rawSetter(this, unit, value);
+ moment.updateOffset(this, keepTime);
+ return this;
+ } else {
+ return rawGetter(this, unit);
+ }
+ };
+ }
+
+ moment.fn.millisecond = moment.fn.milliseconds = makeAccessor('Milliseconds', false);
+ moment.fn.second = moment.fn.seconds = makeAccessor('Seconds', false);
+ moment.fn.minute = moment.fn.minutes = makeAccessor('Minutes', false);
+ // Setting the hour should keep the time, because the user explicitly
+ // specified which hour he wants. So trying to maintain the same hour (in
+ // a new timezone) makes sense. Adding/subtracting hours does not follow
+ // this rule.
+ moment.fn.hour = moment.fn.hours = makeAccessor('Hours', true);
+ // moment.fn.month is defined separately
+ moment.fn.date = makeAccessor('Date', true);
+ moment.fn.dates = deprecate('dates accessor is deprecated. Use date instead.', makeAccessor('Date', true));
+ moment.fn.year = makeAccessor('FullYear', true);
+ moment.fn.years = deprecate('years accessor is deprecated. Use year instead.', makeAccessor('FullYear', true));
+
+ // add plural methods
+ moment.fn.days = moment.fn.day;
+ moment.fn.months = moment.fn.month;
+ moment.fn.weeks = moment.fn.week;
+ moment.fn.isoWeeks = moment.fn.isoWeek;
+ moment.fn.quarters = moment.fn.quarter;
+
+ // add aliased format methods
+ moment.fn.toJSON = moment.fn.toISOString;
+
+ // alias isUtc for dev-friendliness
+ moment.fn.isUTC = moment.fn.isUtc;
+
+ /************************************
+ Duration Prototype
+ ************************************/
+
+
+ function daysToYears (days) {
+ // 400 years have 146097 days (taking into account leap year rules)
+ return days * 400 / 146097;
+ }
+
+ function yearsToDays (years) {
+ // years * 365 + absRound(years / 4) -
+ // absRound(years / 100) + absRound(years / 400);
+ return years * 146097 / 400;
+ }
+
+ extend(moment.duration.fn = Duration.prototype, {
+
+ _bubble : function () {
+ var milliseconds = this._milliseconds,
+ days = this._days,
+ months = this._months,
+ data = this._data,
+ seconds, minutes, hours, years = 0;
+
+ // The following code bubbles up values, see the tests for
+ // examples of what that means.
+ data.milliseconds = milliseconds % 1000;
+
+ seconds = absRound(milliseconds / 1000);
+ data.seconds = seconds % 60;
+
+ minutes = absRound(seconds / 60);
+ data.minutes = minutes % 60;
+
+ hours = absRound(minutes / 60);
+ data.hours = hours % 24;
+
+ days += absRound(hours / 24);
+
+ // Accurately convert days to years, assume start from year 0.
+ years = absRound(daysToYears(days));
+ days -= absRound(yearsToDays(years));
+
+ // 30 days to a month
+ // TODO (iskren): Use anchor date (like 1st Jan) to compute this.
+ months += absRound(days / 30);
+ days %= 30;
+
+ // 12 months -> 1 year
+ years += absRound(months / 12);
+ months %= 12;
+
+ data.days = days;
+ data.months = months;
+ data.years = years;
+ },
+
+ abs : function () {
+ this._milliseconds = Math.abs(this._milliseconds);
+ this._days = Math.abs(this._days);
+ this._months = Math.abs(this._months);
+
+ this._data.milliseconds = Math.abs(this._data.milliseconds);
+ this._data.seconds = Math.abs(this._data.seconds);
+ this._data.minutes = Math.abs(this._data.minutes);
+ this._data.hours = Math.abs(this._data.hours);
+ this._data.months = Math.abs(this._data.months);
+ this._data.years = Math.abs(this._data.years);
+
+ return this;
+ },
+
+ weeks : function () {
+ return absRound(this.days() / 7);
+ },
+
+ valueOf : function () {
+ return this._milliseconds +
+ this._days * 864e5 +
+ (this._months % 12) * 2592e6 +
+ toInt(this._months / 12) * 31536e6;
+ },
+
+ humanize : function (withSuffix) {
+ var output = relativeTime(this, !withSuffix, this.localeData());
+
+ if (withSuffix) {
+ output = this.localeData().pastFuture(+this, output);
+ }
+
+ return this.localeData().postformat(output);
+ },
+
+ add : function (input, val) {
+ // supports only 2.0-style add(1, 's') or add(moment)
+ var dur = moment.duration(input, val);
+
+ this._milliseconds += dur._milliseconds;
+ this._days += dur._days;
+ this._months += dur._months;
+
+ this._bubble();
+
+ return this;
+ },
+
+ subtract : function (input, val) {
+ var dur = moment.duration(input, val);
+
+ this._milliseconds -= dur._milliseconds;
+ this._days -= dur._days;
+ this._months -= dur._months;
+
+ this._bubble();
+
+ return this;
+ },
+
+ get : function (units) {
+ units = normalizeUnits(units);
+ return this[units.toLowerCase() + 's']();
+ },
+
+ as : function (units) {
+ var days, months;
+ units = normalizeUnits(units);
+
+ if (units === 'month' || units === 'year') {
+ days = this._days + this._milliseconds / 864e5;
+ months = this._months + daysToYears(days) * 12;
+ return units === 'month' ? months : months / 12;
+ } else {
+ // handle milliseconds separately because of floating point math errors (issue #1867)
+ days = this._days + Math.round(yearsToDays(this._months / 12));
+ switch (units) {
+ case 'week': return days / 7 + this._milliseconds / 6048e5;
+ case 'day': return days + this._milliseconds / 864e5;
+ case 'hour': return days * 24 + this._milliseconds / 36e5;
+ case 'minute': return days * 24 * 60 + this._milliseconds / 6e4;
+ case 'second': return days * 24 * 60 * 60 + this._milliseconds / 1000;
+ // Math.floor prevents floating point math errors here
+ case 'millisecond': return Math.floor(days * 24 * 60 * 60 * 1000) + this._milliseconds;
+ default: throw new Error('Unknown unit ' + units);
+ }
+ }
+ },
+
+ lang : moment.fn.lang,
+ locale : moment.fn.locale,
+
+ toIsoString : deprecate(
+ 'toIsoString() is deprecated. Please use toISOString() instead ' +
+ '(notice the capitals)',
+ function () {
+ return this.toISOString();
+ }
+ ),
+
+ toISOString : function () {
+ // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
+ var years = Math.abs(this.years()),
+ months = Math.abs(this.months()),
+ days = Math.abs(this.days()),
+ hours = Math.abs(this.hours()),
+ minutes = Math.abs(this.minutes()),
+ seconds = Math.abs(this.seconds() + this.milliseconds() / 1000);
+
+ if (!this.asSeconds()) {
+ // this is the same as C#'s (Noda) and python (isodate)...
+ // but not other JS (goog.date)
+ return 'P0D';
+ }
+
+ return (this.asSeconds() < 0 ? '-' : '') +
+ 'P' +
+ (years ? years + 'Y' : '') +
+ (months ? months + 'M' : '') +
+ (days ? days + 'D' : '') +
+ ((hours || minutes || seconds) ? 'T' : '') +
+ (hours ? hours + 'H' : '') +
+ (minutes ? minutes + 'M' : '') +
+ (seconds ? seconds + 'S' : '');
+ },
+
+ localeData : function () {
+ return this._locale;
+ },
+
+ toJSON : function () {
+ return this.toISOString();
+ }
+ });
+
+ moment.duration.fn.toString = moment.duration.fn.toISOString;
+
+ function makeDurationGetter(name) {
+ moment.duration.fn[name] = function () {
+ return this._data[name];
+ };
+ }
+
+ for (i in unitMillisecondFactors) {
+ if (hasOwnProp(unitMillisecondFactors, i)) {
+ makeDurationGetter(i.toLowerCase());
+ }
+ }
+
+ moment.duration.fn.asMilliseconds = function () {
+ return this.as('ms');
+ };
+ moment.duration.fn.asSeconds = function () {
+ return this.as('s');
+ };
+ moment.duration.fn.asMinutes = function () {
+ return this.as('m');
+ };
+ moment.duration.fn.asHours = function () {
+ return this.as('h');
+ };
+ moment.duration.fn.asDays = function () {
+ return this.as('d');
+ };
+ moment.duration.fn.asWeeks = function () {
+ return this.as('weeks');
+ };
+ moment.duration.fn.asMonths = function () {
+ return this.as('M');
+ };
+ moment.duration.fn.asYears = function () {
+ return this.as('y');
+ };
+
+ /************************************
+ Default Locale
+ ************************************/
+
+
+ // Set default locale, other locale will inherit from English.
+ moment.locale('en', {
+ ordinalParse: /\d{1,2}(th|st|nd|rd)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (toInt(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ }
+ });
+
+ /* EMBED_LOCALES */
+
+ /************************************
+ Exposing Moment
+ ************************************/
+
+ function makeGlobal(shouldDeprecate) {
+ /*global ender:false */
+ if (typeof ender !== 'undefined') {
+ return;
+ }
+ oldGlobalMoment = globalScope.moment;
+ if (shouldDeprecate) {
+ globalScope.moment = deprecate(
+ 'Accessing Moment through the global scope is ' +
+ 'deprecated, and will be removed in an upcoming ' +
+ 'release.',
+ moment);
+ } else {
+ globalScope.moment = moment;
+ }
+ }
+
+ // CommonJS module is defined
+ if (hasModule) {
+ module.exports = moment;
+ } else if (typeof define === 'function' && define.amd) {
+ define(function (require, exports, module) {
+ if (module.config && module.config() && module.config().noGlobal === true) {
+ // release the global variable
+ globalScope.moment = oldGlobalMoment;
+ }
+
+ return moment;
+ });
+ makeGlobal(true);
+ } else {
+ makeGlobal();
+ }
+}).call(this);
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/sample_omg.xml b/vendor/github.com/tdewolff/minify/benchmarks/sample_omg.xml
new file mode 100644
index 0000000..7cbc5af
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/sample_omg.xml
@@ -0,0 +1,18071 @@
+<?xml version = '1.0' encoding = 'ISO-8859-1' ?>
+<!-- <!DOCTYPE XMI SYSTEM 'Model1311.DTD' > -->
+<XMI xmi.version = '1.1' xmlns:Model='omg.org/mof.Model/1.3' timestamp = 'Mon May 06 16:42:16 2002' >
+ <XMI.header>
+ <XMI.documentation>
+ <XMI.exporter>Unisys.JCR.1</XMI.exporter>
+ <XMI.exporterVersion>1.3.2</XMI.exporterVersion>
+ </XMI.documentation>
+ <XMI.metamodel xmi.name = 'org.omg.mof.Model' xmi.version = '1.3'/>
+ </XMI.header>
+<XMI.content>
+<!-- ==================== Core [Package] ==================== -->
+<Model:Package xmi.id = 'a3A6600C5031F'
+ name = 'Core'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>The Core metamodel depends on no other packages.
+
+The ObjectModel Core metamodel contains basic metamodel classes and associations used by all other CWM metamodel packages, including other ObjectModel packages
+
+OCL Representation of Core Constraints
+
+Operations
+
+The operation allFeatures results in a Set containing all Features of the Classifier itself and all its inherited Features.
+ allFeatures : Set(Feature);
+ allFeatures = self.feature-&gt;union(self.parent.oclAsType(Classifier).allFeatures)
+
+The operation allAttributes results in a Set containing all Attributes of the Classifier itself and all its inherited Attributes.
+ allAttributes : set(Attribute);
+ allAttributes = self.allFeatures-&gt;select(f | f.oclIsKindOf(Attribute))
+
+The operation specification yields the set of Classifiers that the current Classifier realizes.
+ specification: Set(Classifier)
+ specification = self.clientDependency-&gt;
+ select(d | d.stereotype.name = "realization"
+ and d.supplier.oclIsKindOf(Classifier)).supplier.oclAsType(Classifier)
+
+The operation parent returns a Set containing all direct parents of a Classifier.
+ parent : Set(Classifier);
+ parent = self.generalization.parent
+
+The operation allParents returns a Set containing all the Classifiers inherited by this Classifier (the transitive closure), excluding the Classifier itself.
+ allParents : Set(Classifier);
+ allParents = self.parent-&gt;union(self.parent.allParents)
+
+The operation allContents returns a Set containing all ModelElements contained in the Classifier together with the contents inherited from its parents.
+ allContents : Set(ModelElement);
+ allContents = self.contents-&gt;union(self.parent.allContents-&gt;
+ select(e | e.elementOwnership.visibility = #public or
+ e.elementOwnership.visibility = #protected))
+
+The operation supplier results in a Set containing all direct suppliers of the ModelElement.
+ supplier : Set(ModelElement);
+ supplier = self.clientDependency.supplier
+
+The operation allSuppliers results in a Set containing all the ModelElements that are suppliers of this ModelElement, including the suppliers of these Model Elements. This is the transitive closure.
+ allSuppliers : Set(ModelElement);
+ allSuppliers = self.supplier-&gt;union(self.supplier.allSuppliers)
+
+The operation contents results in a Set containing all ModelElements contained by the Namespace.
+ contents : Set(ModelElement)
+ contents = self.ownedElement -&gt; union(self.namespace.contents)
+
+The operation allContents results in a Set containing all ModelElements contained by the Namespace.
+ allContents : Set(ModelElement);
+ allContents = self.contents
+
+The operation allVisibleElements results in a Set containing all ModelElements visible outside of the Namespace.
+ allVisibleElements : Set(ModelElement)
+ allVisibleElements = self.allContents -&gt; select(e |
+ e.elementOwnership.visibility = #public)
+
+The operation allSurroundingNamespaces results in a Set containing all surrounding Namespaces.
+ allSurroundingNamespaces : Set(Namespace)
+ allSurroundingNamespaces =
+ self.namespace-&gt;union(self.namespace.allSurroundingNamespaces)
+
+The operation contents results in a Set containing the ModelElements owned by or imported by the Package.
+ contents : Set(ModelElement)
+ contents = self.ownedElement-&gt;union(self.importedElement)
+
+The operation allImportedElements results in a Set containing the ModelElements imported by the Package.
+ allImportedElements : Set(ModelElement)
+ allImportedElements = self.importedElement
+
+The operation allContents results in a Set containing the ModelElements owned by or imported by the Package.
+ allContents : Set(ModelElement)
+ allContents = self.contents
+
+Constraints
+
+[C-3-1] A Constraint cannot be applied to itself.
+context Constraint inv:
+not self.constrainedElement-&gt;includes (self)
+
+[C-3-2] A DataType cannot contain any other ModelElements.
+context DataType inv:
+self.ownedElement-&gt;isEmpty
+
+[C-3-3] Tags associated with a model element (directly via a property list or indirectly via a stereotype) must not clash with any meta attributes associated with the model element.
+context ModelElement inv:
+-- cannot be specified with OCL</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Core.org.omg.mof.idl_prefix=org.omg.cwm.objectmodel [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.837'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.objectmodel' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a3A6600C5031F' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.objectmodel</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Core.org.omg.xmi.namespace=CWM [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.838'
+ name = 'org.omg.xmi.namespace=CWM' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a3A6600C5031F' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWM</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Core.org.omg.mof.idl_substitute_name=CoreModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.839'
+ name = 'org.omg.mof.idl_substitute_name=CoreModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a3A6600C5031F' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CoreModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Core.com.urep.jcr.java_prefix=org.omg.java.cwm.objectmodel [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.840'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.objectmodel' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a3A6600C5031F' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.objectmodel</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Core.Element [Class] ==================== -->
+ <Model:Class xmi.id = 'a327A5C330208'
+ name = 'Element'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis'
+ isSingleton = 'false' >
+ <Model:ModelElement.annotation>An element is an atomic constituent of a model. In the metamodel, an Element is the top metaclass in the metaclass hierarchy. Element is an abstract metaclass.
+</Model:ModelElement.annotation>
+ </Model:Class>
+ <!-- ==================== Core.ModelElement [Class] ==================== -->
+ <Model:Class xmi.id = 'a327A5C7301CC'
+ name = 'ModelElement'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C330208' >
+ <Model:ModelElement.annotation>A model element is an element that is an abstraction drawn from the system being modeled.
+
+In the metamodel, a ModelElement is a named entity in a Model. It is the base for all modeling metaclasses in the CWM. All other modeling metaclasses are either direct or indirect subclasses of ModelElement.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Core.ModelElement.name [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a335D4BA70064'
+ name = 'name' annotation = 'An identifier for the ModelElement within its containing Namespace.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FCF03C0' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Core.ModelElement.visibility [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3717C111037E'
+ name = 'visibility' annotation = 'Specifies extent of the visibility of the ModelElement within its owning Namespace.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3A705EFD0201' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Core.ModelElement.clientDependency [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A6722070063'
+ name = 'clientDependency' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A646F00E6'
+ referencedEnd = 'a33FFE57B03B3' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Core.ModelElement.constraint [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A6722040380'
+ name = 'constraint' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A649B000A'
+ referencedEnd = 'a33EA67BB010F' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Core.ModelElement.importer [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A4247EA0376'
+ name = 'importer' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5D19033E'
+ referencedEnd = 'a3A423EFE02DA' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Core.ModelElement.namespace [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a396A41850138'
+ name = 'namespace' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32B69F3A0118'
+ referencedEnd = 'a3A2C18630036' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Core.ModelElement.taggedValue [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3BB4EC020043'
+ name = 'taggedValue' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a337A4EF7002C'
+ referencedEnd = 'a33E901E10028' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Core.com.urep.jcr.mof.object_name=true [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.841'
+ name = 'com.urep.jcr.mof.object_name=true' annotation = ''
+ tagId = 'com.urep.jcr.mof.object_name'
+ elements = 'a335D4BA70064 a33E901140334' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>true</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Core.Namespace [Class] ==================== -->
+ <Model:Class xmi.id = 'a32B69F3A0118'
+ name = 'Namespace'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>A namespace is a part of a model that contains a set of ModelElements each of whose
+names designates a unique element within the namespace.
+
+In the metamodel, a Namespace is a ModelElement that can own other ModelElements, such as Classifiers. The name of each owned ModelElement must be unique within the Namespace. Moreover, each contained ModelElement is owned by at most one Namespace. The concrete subclasses of Namespace may have additional constraints on which kind of elements may be contained.
+
+Namespace is an abstract metaclass.
+
+Note that explicit parts of a model element, such as the features of a Classifier, are not modeled as owned elements in a namespace. A namespace is used for unstructured contents such as the contents of a package, or a class declared inside the scope of another class.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Core.Namespace.ownedElement [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a396A44E502DE'
+ name = 'ownedElement' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5C7301CC'
+ referencedEnd = 'a3A2C186203A1' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Core.Classifier [Class] ==================== -->
+ <Model:Class xmi.id = 'a32989FB2023D'
+ name = 'Classifier'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a32B69F3A0118' >
+ <Model:ModelElement.annotation>A classifier is an element that describes structural and behavioral features; it comes in several specific forms, including class, data type, interface, component, and others that are defined in other metamodel packages.
+
+Classifier is often used as a type.
+
+In the metamodel, a Classifier may declare a collection of Features, such as Attributes, Operations and Methods. It has a name, which is unique in the Namespace enclosing the Classifier. Classifier is an abstract metaclass.
+
+Classifier is a child of Namespace. As a Namespace, a Classifier may declare other Classifiers nested in its scope. Nested Classifiers may be accessed by other Classifiers only if the nested Classifiers have adequate visibility. There are no data value or state consequences of nested Classifiers, i.e., it is not an aggregation or composition.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Core.Classifier.isAbstract [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A6CAF830372'
+ name = 'isAbstract' annotation = 'An abstract Classifier is not instantiable.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Core.Classifier.feature [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a396A45340213'
+ name = 'feature' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32989F9700FE'
+ referencedEnd = 'a32B5D7EF03DD' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Core.Class [Class] ==================== -->
+ <Model:Class xmi.id = 'a3298A02900FE'
+ name = 'Class'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a32989FB2023D' >
+ <Model:ModelElement.annotation>A class is a description of a set of objects that share the same attributes, operations, methods, relationships, and semantics. A class may use a set of interfaces to specify collections of operations it provides to its environment. In the metamodel, a Class describes a set of objects sharing a collection of Features that are common to the set of objects.
+
+The purpose of a Class is to declare a collection of Features that fully describe the structure and behavior of objects. Some Classes may not be directly instantiated. These Classes are said to be abstract and exist only for other Classes to inherit and reuse the Features declared by them. No object may be a direct instance of an abstract Class, although an object may be an indirect instance of one through a subclass that is non-abstract.
+
+A Class acts as the namespace for various kinds of contained elements defined within its scope, including classes, interfaces and associations (note that this is purely a scoping construction and does not imply anything about aggregation). The contained classes can be used as ordinary classes in the container class. If a class inherits another class, the contents of the ancestor are available to its descendents if the visibility of an element is public or protected; however, if the visibility is private, then the element is not visible and therefore not available in the descendant.</Model:ModelElement.annotation>
+ </Model:Class>
+ <!-- ==================== Core.DataType [Class] ==================== -->
+ <Model:Class xmi.id = 'a3298A036025B'
+ name = 'DataType'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a32989FB2023D' >
+ <Model:ModelElement.annotation>A data type is a type whose values have no identity (i.e., they are pure values). Data types include primitive built-in types (such as integer and string) as well as definable enumeration types.
+
+In the metamodel, a DataType defines a special kind of Classifier in which operations are all pure functions (i.e., they can return data values but they cannot change data values, because they have no identity). For example, an "add" operation on a number with another number as an argument yields a third number as a result; the target and argument are unchanged.
+
+A DataType is a special kind of Classifier whose instances are primitive values, not objects. For example, integers and strings are usually treated as primitive values. A primitive value does not have an identity, so two occurrences of the same value cannot be differentiated. Usually, DataTypes are used for specification of the type of an attribute or parameter.</Model:ModelElement.annotation>
+ </Model:Class>
+ <!-- ==================== Core.Package [Class] ==================== -->
+ <Model:Class xmi.id = 'a327A5D19033E'
+ name = 'Package'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a32B69F3A0118' >
+ <Model:ModelElement.annotation>A package is a grouping of model elements.
+
+In the metamodel, Package is a subclass of Namespace. A Package contains ModelElements such as Packages and Classifiers. A Package may also contain Constraints and Dependencies between ModelElements of the Package.
+
+The purpose of the package construct is to provide a general grouping mechanism. In fact, its only semantics is to define a namespace for its contents. The package construct can be used for organizing elements for any purpose; the criteria to use for grouping elements together into one package are not defined.
+
+A package owns a set of model elements, with the implication that if the package is removed from the model, so are the elements owned by the package. Elements with names, such as classifiers, that are owned by the same package must have unique names within the package, although elements in different packages may have the same name.
+
+There may be relationships between elements contained in the same package, and between an element in one package and an element in a surrounding package at any level. In other words, elements &#x0093;see&#x0094; all the way out through nested levels of packages.
+
+Elements in peer packages, however, are encapsulated and are not a priori visible to each other. The same goes for elements in contained packages, i.e. packages do not see "inwards".
+
+Elements owned by a Package can be made available to other Packages by importing
+them. Although any ModelElement may be imported by a Package, imported
+ModelElements are typically other Packages. When an element is imported by a
+package it extends the namespace of that package. Thus the elements available in a
+Package consists of its owned and imported ModelElements.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Core.Package.importedElement [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A24439702FF'
+ name = 'importedElement' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5C7301CC'
+ referencedEnd = 'a3A423EFE025D' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Core.Subsystem [Class] ==================== -->
+ <Model:Class xmi.id = 'a33CD6DE5030C'
+ name = 'Subsystem'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5D19033E a32989FB2023D' >
+ <Model:ModelElement.annotation>A subsystem is a grouping of model elements that represents a behavioral unit in a physical system. A subsystem offers interfaces and has operations.
+
+In the metamodel, Subsystem is a subclass of both Package and Classifier. As such it may have a set of Features.
+
+The purpose of the subsystem construct is to provide a grouping mechanism for specifying a behavioral unit of a physical system. Apart from defining a namespace for its contents, a subsystem serves as a specification unit for the behavior of its contained model elements.
+
+The contents of a subsystem is defined in the same way as for a package, thus it
+consists of owned elements and imported elements, with unique names within the
+subsystem.</Model:ModelElement.annotation>
+ </Model:Class>
+ <!-- ==================== Core.Model [Class] ==================== -->
+ <Model:Class xmi.id = 'a327A5D1E0032'
+ name = 'Model'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5D19033E' >
+ <Model:ModelElement.annotation>A model captures a view of a physical system. It is an abstraction of the physical system, with a certain purpose. The model completely describes those aspects of the physical system that are relevant to the purpose of the model, at the appropriate level of detail.
+
+In the metamodel, Model is a subclass of Package. It contains a containment hierarchy of ModelElements that together describe the physical system. A Model also contains a set of ModelElements that represents the environment of the system.
+
+Different Models can be defined for the same physical system, where each model represents a view of the physical system defined by its purpose and abstraction level, e.g. an analysis model, a design model, an implementation model. Typically different models are complementary and defined from the perspectives (viewpoints) of different system stakeholders.</Model:ModelElement.annotation>
+ </Model:Class>
+ <!-- ==================== Core.Feature [Class] ==================== -->
+ <Model:Class xmi.id = 'a32989F9700FE'
+ name = 'Feature'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>A feature is a property, like attribute or operation, which is encapsulated within a Classifier.
+
+In the metamodel, a Feature declares a structural or behavioral characteristic of an instance of a Classifier or of the Classifier itself. Feature is an abstract metaclass.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Core.Feature.ownerScope [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a31653E23032A'
+ name = 'ownerScope' annotation = 'Specifies whether the Feature appears in every instance of the Classifier or whether it appears only once for the entire Classifier.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD7020032A' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Core.Feature.owner [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a396A45E803C8'
+ name = 'owner' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32989FB2023D'
+ referencedEnd = 'a32B5D7EF03D3' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Core.StructuralFeature [Class] ==================== -->
+ <Model:Class xmi.id = 'a3298F1A403BF'
+ name = 'StructuralFeature'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a32989F9700FE' >
+ <Model:ModelElement.annotation>A structural feature refers to a static feature of a model element.
+
+In the metamodel, a StructuralFeature declares a structural aspect of a Classifier that is typed, such as an attribute. For example, it specifies the multiplicity and changeability of the StructuralFeature. StructuralFeature is an abstract metaclass.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Core.StructuralFeature.changeability [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3163DE07014A'
+ name = 'changeability' annotation = 'Specifies whether the value may be modified after the object is created.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F820208' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Core.StructuralFeature.multiplicity [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a32B6AEA8032B'
+ name = 'multiplicity' annotation = 'The possible number of data values for the feature that may be held by an instance. The cardinality of the set of values is an implicit part of the feature. In the common case in which the multiplicity is 1..1, then the feature is a scalar (i.e., it holds exactly one value).'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FC5001E' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Core.StructuralFeature.ordering [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A6F5A180348'
+ name = 'ordering' annotation = 'Specifies whether the set of instances is ordered. The ordering must be determined and maintained by Operations that add values to the feature. This property is only relevant if the multiplicity is greater than one.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a36619BC301D6' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Core.StructuralFeature.targetScope [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a335A35E5028A'
+ name = 'targetScope' annotation = 'Specifies whether the targets are ordinary Instances or are Classifiers.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD7020032A' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Core.StructuralFeature.type [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a396A463C0232'
+ name = 'type' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32989FB2023D'
+ referencedEnd = 'a316437C003B6' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Core.Attribute [Class] ==================== -->
+ <Model:Class xmi.id = 'a3A6F62780143'
+ name = 'Attribute' annotation = 'An Attribute describes a named slot within a classifier that may hold a value.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3298F1A403BF' >
+ <Model:Namespace.contents>
+ <!-- ==================== Core.Attribute.initialValue [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A6F62980289'
+ name = 'initialValue' annotation = 'An Expression specifying the value of the attribute upon initialization. It is meant to be evaluated at the time the object is initialized. (Note that an explicit constructor may supersede an initial value.)'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33CFA00203A2' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Core.org.omg.mof.idl_substitute_name=UmlAttribute [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.842'
+ name = 'org.omg.mof.idl_substitute_name=UmlAttribute' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a3A6F62780143' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>UmlAttribute</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Core.Constraint [Class] ==================== -->
+ <Model:Class xmi.id = 'a327A649B000A'
+ name = 'Constraint'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>A constraint is a semantic condition or restriction expressed in text.
+
+In the metamodel, a Constraint is a BooleanExpression on an associated ModelElement(s) which must be true for the model to be well formed. This restriction can be stated in natural language, or in different kinds of languages with well-defined semantics. Certain Constraints are predefined, others may be user defined. Note that a Constraint is an assertion, not an executable mechanism.
+
+The specification is written as an expression in a designated constraint language. The language can be specially designed for writing constraints (such as OCL), a programming language, mathematical notation, or natural language. If constraints are to be enforced by a model editor tool, then the tool must understand the syntax and semantics of the constraint language. Because the choice of language is arbitrary, constraints can be used as an extension mechanism.
+
+The constraint concept allows new semantics to be specified linguistically for a model element. In the metamodel a Constraint directly attached to a ModelElement describes semantic restrictions that this ModelElement must obey.
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Core.Constraint.body [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a32866F630244'
+ name = 'body' annotation = 'A BooleanExpression that must be true when evaluated for an instance of a system to be well-formed. A boolean expression defining the constraint. Expressions are written as strings in a designated language. For the model to be well formed, the expression must always yield a true value when evaluated for instances of the constrained elements at any time when the system is stable (i.e., not during the execution of an atomic operation).'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33CFA9DA01D6' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Core.Constraint.constrainedElement [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a396A47950000'
+ name = 'constrainedElement' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5C7301CC'
+ referencedEnd = 'a33EA67BB010E' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Core.org.omg.mof.idl_substitute_name=UmlConstraint [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.843'
+ name = 'org.omg.mof.idl_substitute_name=UmlConstraint' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a327A649B000A' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>UmlConstraint</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Core.Dependency [Class] ==================== -->
+ <Model:Class xmi.id = 'a327A646F00E6'
+ name = 'Dependency'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>A dependency states that the implementation or functioning of one or more elements requires the presence of one or more other elements.
+
+In the metamodel, a Dependency is a directed relationship from a client (or clients) to a supplier (or suppliers) stating that the client is dependent on the supplier (i.e., the client element requires the presence and knowledge of the supplier element).
+
+A dependency specifies that the semantics of a set of model elements requires the presence of another set of model elements. This implies that if the source is somehow modified, the dependents probably must be modified. The reason for the dependency can be specified in several different ways (e.g., using natural language or an algorithm) but is often implicit.
+
+Whenever the supplier element of a dependency changes, the client element is potentially invalidated. After such invalidation, a check should be performed followed by possible changes to the derived client element. Such a check should be performed after which action can be taken to change the derived element to validate it again.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Core.Dependency.kind [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A6C9FD2027C'
+ name = 'kind' annotation = 'Contains a description of the nature of the dependency relationship between the client and supplier. The list of possible values is open-ended. However, CWM predefines the values "Abstraction" and "Usage".'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Core.Dependency.client [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a396A4B0D0213'
+ name = 'client' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5C7301CC'
+ referencedEnd = 'a33FFE57B0395' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Core.Dependency.supplier [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a396A4B10002E'
+ name = 'supplier' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5C7301CC'
+ referencedEnd = 'a335C0D7A02A8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Core.Expression [Class] ==================== -->
+ <Model:Class xmi.id = 'a33CFA00203A2'
+ name = 'Expression' annotation = 'In the metamodel an Expression defines a statement which will evaluate to a (possibly empty) set of instances when executed in a context. An Expression does not modify the environment in which it is evaluated. An expression contains an expression string and the name of an interpretation language with which to evaluate the string.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C330208' >
+ <Model:Namespace.contents>
+ <!-- ==================== Core.Expression.body [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a33E12E870203'
+ name = 'body' annotation = 'The text of the expression expressed in the given language.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Core.Expression.language [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a33E12E5F01CA'
+ name = 'language' annotation = 'Names the language in which the expression body is represented. The interpretation of the expression depends on the language. If the language name is omitted, no interpretation for the expression can be assumed. In general, a language name should be spelled and capitalized exactly as it appears in the document defining the language. For example, use COBOL, not Cobol; use Ada, not ADA; use PostScript, not Postscript.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FCF03C0' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Core.BooleanExpression [Class] ==================== -->
+ <Model:Class xmi.id = 'a33CFA9DA01D6'
+ name = 'BooleanExpression' annotation = 'In the metamodel BooleanExpression defines a statement which will evaluate to an instance of Boolean when it is evaluated.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a33CFA00203A2' />
+ <!-- ==================== Core.ProcedureExpression [Class] ==================== -->
+ <Model:Class xmi.id = 'a363559050190'
+ name = 'ProcedureExpression' annotation = 'In the metamodel ProcedureExpression defines a statement which will result in a change to the values of its environment when it is evaluated.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a33CFA00203A2' />
+ <!-- ==================== Core.Multiplicity [Class] ==================== -->
+ <Model:Class xmi.id = 'a33DD6FC5001E'
+ name = 'Multiplicity'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C330208' >
+ <Model:ModelElement.annotation>In the metamodel a Multiplicity defines a non-empty set of non-negative integers. A set which only contains zero ({0}) is not considered a valid Multiplicity. Every Multiplicity has at least one corresponding String representation.
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Core.Multiplicity.range [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a396A3FA7038A'
+ name = 'range' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a33E93BD00075'
+ referencedEnd = 'a33FF95B90378' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Core.MultiplicityRange [Class] ==================== -->
+ <Model:Class xmi.id = 'a33E93BD00075'
+ name = 'MultiplicityRange'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C330208' >
+ <Model:ModelElement.annotation>In the metamodel a MultiplicityRange defines a range of integers. The upper bound of the range cannot be below the lower bound. The lower bound must be a nonnegative integer. The upper bound must be a nonnegative integer or the special value unlimited, which indicates there is no upper bound on the range.
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Core.MultiplicityRange.lower [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a33E93BE902E8'
+ name = 'lower' annotation = 'Specifies the positive integer lower bound of the range.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Core.MultiplicityRange.upper [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a33E93BFA0329'
+ name = 'upper' annotation = 'Specifies the upper bound of the range, which is a positive integer or the special value &#x0092;unlimited&#x0092; indicating no upper bound is defined.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3635582D03D4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Core.MultiplicityRange.multiplicity [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a396A403D006D'
+ name = 'multiplicity' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a33DD6FC5001E'
+ referencedEnd = 'a33FF95B90300' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Core.Stereotype [Class] ==================== -->
+ <Model:Class xmi.id = 'a3A24417902EF'
+ name = 'Stereotype'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>The stereotype concept provides a way of branding (classifying) model elements so that they behave as if they were instances of new virtual metamodel constructs. These model elements have the same structure (attributes, associations, operations) as similar non-stereotyped model elements of the same kind. The stereotype may specify additional constraints and required tagged values that apply to model elements. In addition, a stereotype may be used to indicate a difference in meaning or usage between two model elements with identical structure.
+
+In the metamodel the Stereotype metaclass is a subclass of ModelElement. Tagged Values and Constraints attached to a Stereotype apply to all ModelElements branded by that Stereotype.
+
+A stereotype keeps track of the base class to which it may be applied. The base class is a class in the metamodel (not a user-level modeling element) such as Class, Association, etc. If a model element is branded by an attached stereotype, then the CWM base class of the model element must be the base class specified by the stereotype or one of the subclasses of that base class.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Core.Stereotype.baseClass [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A24427E031E'
+ name = 'baseClass' annotation = 'Specifies the name of a modeling element to which the stereotype applies, such as Class, Association, Constraint, etc. This is the name of a metaclass, that is, a class from the metamodel itself rather than a user model class.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FCF03C0' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Core.Stereotype.extendedElement [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A2444AD00AD'
+ name = 'extendedElement' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5C7301CC'
+ referencedEnd = 'a3A2442F90292' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Core.Stereotype.requiredTag [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A2444AB0234'
+ name = 'requiredTag' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a337A4EF7002C'
+ referencedEnd = 'a3A2446850021' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Core.Stereotype.stereotypeConstraint [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A244510011B'
+ name = 'stereotypeConstraint' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A649B000A'
+ referencedEnd = 'a3A2D210E0353' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Core.TaggedValue [Class] ==================== -->
+ <Model:Class xmi.id = 'a337A4EF7002C'
+ name = 'TaggedValue'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C330208' >
+ <Model:ModelElement.annotation>A tagged value allows information to be attached to any model element in the form of a "tagged value" pair (i.e., name = value). The interpretation of tagged value semantics is intentionally beyond the scope of CWM. It must be determined by user or tool conventions. It is expected that tools will define tags to supply information needed for their operations beyond the basic semantics of CWM. Such information could include code generation options, model management information, or user-specified semantics.
+
+Even though TaggedValues are a simple and straightforward extension technique, their use restricts semantic interchange of metadata to only those tools that share a common understanding of the specific tagged value names.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Core.TaggedValue.tag [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a33E901140334'
+ name = 'tag' annotation = 'Contains the name of the TaggedValue. This name determines the semantics that are applicable to the contents of the value attribute.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FCF03C0' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Core.TaggedValue.value [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a337A50700273'
+ name = 'value' annotation = 'Contains the current value of the TaggedValue.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Core.TaggedValue.modelElement [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a396A5262037A'
+ name = 'modelElement' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5C7301CC'
+ referencedEnd = 'a33E901E003D4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Core.TaggedValue.stereotype [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A24459D01C7'
+ name = 'stereotype' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A24417902EF'
+ referencedEnd = 'a3A2446850030' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Core.org.omg.mof.idl_substitute_name=umlValue [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.844'
+ name = 'org.omg.mof.idl_substitute_name=umlValue' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a337A50700273' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>umlValue</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Core.Any [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a37AB1FF90221'
+ name = 'Any'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>The Any data type is used to indicate that an attribute or parameter may take values from any of the available data types. In CWM, the set of data types an Any attribute or parameter may assume includes the data types and enumerations described in this chapter plus any available instances of the Classifier class.
+
+There is no default value for data type Any.</Model:ModelElement.annotation>
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcAny/>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== Core.Boolean [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a33DD6F650276'
+ name = 'Boolean'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>Boolean defines an enumeration that denotes a logical condition.
+
+The default for data type Boolean is false.</Model:ModelElement.annotation>
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcBoolean/>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== Core.Float [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a384FE9DE02A2'
+ name = 'Float'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>The Float data type is used to indicate that an attribute or parameter may take on floating point numeric values. The number of significant digits and other representational details are implementation defined.
+
+The default for the Float data type is the value 0.0.</Model:ModelElement.annotation>
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcFloat/>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== Core.Integer [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a33DD6FD7021C'
+ name = 'Integer'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>Integer represents the predefined type of integers. An instance of Integer is an element in the (infinite) set of integers (..., -2, -1, 0, 1, 2, ...).
+
+The default for Integer is 0.</Model:ModelElement.annotation>
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcLong/>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== Core.Name [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a33DD6FCF03C0'
+ name = 'Name'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>Name defines a token which is used for naming ModelElements and similar usages. Each Name has a corresponding String representation. For purposes of exchange a name should be represented as a String.
+
+The default for the Name data type is an empty string.</Model:ModelElement.annotation>
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcAlias xmi.tcName = 'Name'>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcString xmi.tcLength = '0'/>
+ </XMI.CorbaTypeCode>
+ </XMI.CorbaTcAlias>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== Core.String [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a33DD702401B8'
+ name = 'String'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>String defines a piece of text. Strings do not normally have a defined length; rather, they are considered to be arbitrarily long (practical limits on the length of Strings exist, but are implementation dependent). When String is used as the type of an Attribute, string length sometimes can be specified (see the Relational and Record packages for examples).
+
+The default for the String data type is an empty string.</Model:ModelElement.annotation>
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcString xmi.tcLength = '0'/>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== Core.Time [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a3A09E1C0001E'
+ name = 'Time'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>Time defines a statement which will define the time of occurrence of an event. The specific format of time expressions is not specified here and is subject to implementation considerations.
+
+There is no default for the Time data type.</Model:ModelElement.annotation>
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcAlias xmi.tcName = 'Time'>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcString xmi.tcLength = '0'/>
+ </XMI.CorbaTypeCode>
+ </XMI.CorbaTcAlias>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== Core.UnlimitedInteger [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a3635582D03D4'
+ name = 'UnlimitedInteger'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>UnlimitedInteger defines a data type whose range is the nonnegative integers augmented by the special value "unlimited". It is used for the upper bound of multiplicities.
+
+The default for an UnlimitedInteger is the special value "unlimited".</Model:ModelElement.annotation>
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcAlias xmi.tcName = 'UnlimitedInteger'>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcLong/>
+ </XMI.CorbaTypeCode>
+ </XMI.CorbaTcAlias>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== Core.ChangeableKind [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a33DD6F820208'
+ name = 'ChangeableKind' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'ChangeableKind'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'ck_changeable'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'ck_frozen'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'ck_addOnly'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== Core.org.omg.xmi.enumerationUnprefix=ck_ [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.845'
+ name = 'org.omg.xmi.enumerationUnprefix=ck_' annotation = ''
+ tagId = 'org.omg.xmi.enumerationUnprefix'
+ elements = 'a33DD6F820208' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>ck_</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Core.OrderingKind [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a36619BC301D6'
+ name = 'OrderingKind'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>In the metamodel OrderingKind defines an enumeration that specifies how the elements of a set are arranged. Used in conjunction with elements that have a multiplicity in cases when the multiplicity value is greater than one. The ordering must be determined and maintained by operations that modify the set.
+
+The default value is ok_unordered.</Model:ModelElement.annotation>
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'OrderingKind'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'ok_unordered'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'ok_ordered'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== Core.org.omg.xmi.enumerationUnprefix=ok_ [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.846'
+ name = 'org.omg.xmi.enumerationUnprefix=ok_' annotation = ''
+ tagId = 'org.omg.xmi.enumerationUnprefix'
+ elements = 'a36619BC301D6' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>ok_</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Core.ScopeKind [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a33DD7020032A'
+ name = 'ScopeKind'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>In the metamodel ScopeKind defines an enumeration that denotes whether a feature belongs to individual instances or an entire classifier.
+
+The default value is sk_instance.</Model:ModelElement.annotation>
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'ScopeKind'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'sk_instance'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'sk_classifier'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== Core.org.omg.xmi.enumerationUnprefix=sk_ [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.847'
+ name = 'org.omg.xmi.enumerationUnprefix=sk_' annotation = ''
+ tagId = 'org.omg.xmi.enumerationUnprefix'
+ elements = 'a33DD7020032A' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>sk_</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Core.VisibilityKind [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a3A705EFD0201'
+ name = 'VisibilityKind'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>In the metamodel VisibilityKind defines an enumeration that denotes how the element to which it refers is seen outside the enclosing name space.
+
+The default value is vk_public.</Model:ModelElement.annotation>
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'VisibilityKind'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'vk_public'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'vk_protected'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'vk_private'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'vk_package'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'vk_notapplicable'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== Core.org.omg.xmi.enumerationUnprefix=vk_ [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.848'
+ name = 'org.omg.xmi.enumerationUnprefix=vk_' annotation = ''
+ tagId = 'org.omg.xmi.enumerationUnprefix'
+ elements = 'a3A705EFD0201' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>vk_</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Core.ClassifierFeature [Association] ==================== -->
+ <Model:Association xmi.id = 'a32B5D7EE02FF'
+ name = 'ClassifierFeature' annotation = 'The ClassifierFeature association provides a composite aggregation containment relationship between Classifiers and the Features they own. The feature end of the association is ordered allowing preservation of the ordering of Features within their owning Classifier. A Feature can be owned by at most one Classifier. The optional character of ownership is intended as a convenience to tools, allowing them to create Features prior to linking them to their owning Classifier.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a32B5D7EF03D3'
+ name = 'owner' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a32989FB2023D' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a32B5D7EF03DD'
+ name = 'feature' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a32989F9700FE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Core.DependencyClient [Association] ==================== -->
+ <Model:Association xmi.id = 'a33FFE57902A2'
+ name = 'DependencyClient' annotation = 'The DependencyClient association links Dependency instances with ModelElements that act as clients in the represented dependency relationship.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a33FFE57B0395'
+ name = 'client' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327A5C7301CC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a33FFE57B03B3'
+ name = 'clientDependency' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327A646F00E6' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Core.DependencySupplier [Association] ==================== -->
+ <Model:Association xmi.id = 'a335C0D770302'
+ name = 'DependencySupplier' annotation = 'The DependencySupplier association links Dependency instances with ModelElements that act as suppliers in the represented dependency relationship.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a335C0D7A02A8'
+ name = 'supplier' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327A5C7301CC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a335C0D7A02E4'
+ name = 'supplierDependency' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327A646F00E6' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Core.ElementConstraint [Association] ==================== -->
+ <Model:Association xmi.id = 'a33EA67B702EE'
+ name = 'ElementConstraint' annotation = 'The ElementConstraint association provides linkages between ModelElements and the Constraint instances that constrain their state. Note that a Constraint instance may not simultaneously participate in both the ElementConstraint and the StereotypeConstraint associations.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a33EA67BB010E'
+ name = 'constrainedElement' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327A5C7301CC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a33EA67BB010F'
+ name = 'constraint' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327A649B000A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Core.org.omg.mof.idl_substitute_name=umlConstraint [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.849'
+ name = 'org.omg.mof.idl_substitute_name=umlConstraint' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a33EA67BB010F' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>umlConstraint</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Core.ElementOwnership [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A2C18610353'
+ name = 'ElementOwnership' annotation = 'The ElementOwnership association identifies ModelElements owned by Namespaces. ModelElements may be owned by at most one Namespace. Refer to the above discussion of the Namespace class for more information on the nature of the ownership relationship between Namespaces and ModelElements.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A2C186203A1'
+ name = 'ownedElement' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327A5C7301CC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A2C18630036'
+ name = 'namespace' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a32B69F3A0118' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Core.ImportedElements [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A423EFD02DA'
+ name = 'ImportedElements' annotation = 'The ImportedElements association identifies ModelElements that a Package instance imports from other Namespaces. Although any ModelElement may be imported by a Package, imported ModelElements are typically other Packages or aggregate Classifiers, such as Class instances.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A423EFE025D'
+ name = 'importedElement' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327A5C7301CC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A423EFE02DA'
+ name = 'importer' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327A5D19033E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Core.RangeMultiplicity [Association] ==================== -->
+ <Model:Association xmi.id = 'a33FF95B90061'
+ name = 'RangeMultiplicity' annotation = 'The RangeMultiplicity association identifies the set of MultiplicityRange instances that specify the lower and upper bounds of individual cardinality ranges defined by a Multiplicity instance. A MultiplicityRange instance must be owned by a single Multiplicity instance.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a33FF95B90300'
+ name = 'multiplicity' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a33DD6FC5001E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a33FF95B90378'
+ name = 'range' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a33E93BD00075' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Core.StereotypeConstraints [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A2D210D02D6'
+ name = 'StereotypeConstraints' annotation = 'The StereotypeConstraints association links Stereotypes with Constraints that further restrict the states that a stereotyped ModelElement may assume. A Constraint instance may not simultaneously participate in both the StereotypeContraints association and the ElementConstraint association.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A2D210E0353'
+ name = 'stereotypeConstraint' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327A649B000A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A2D210E0372'
+ name = 'constrainedStereotype' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3A24417902EF' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Core.StereotypedElement [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A2442F80244'
+ name = 'StereotypedElement' annotation = 'The StereotypedElement association links Stereotypes with the ModelElements to which they apply. '
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A2442F90292'
+ name = 'extendedElement' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327A5C7301CC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A2442F902FF'
+ name = 'stereotype' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A24417902EF' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Core.StereotypeTaggedValues [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A24468302EF'
+ name = 'StereotypeTaggedValues'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:ModelElement.annotation>The StereotypeTaggedValues association links Stereotypes with the set of TaggedValues they require.
+
+TaggedValues cannot simultaneously participate in both the TaggedElement and StereotypeTaggedValues associations.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A2446850021'
+ name = 'requiredTag' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a337A4EF7002C' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A2446850030'
+ name = 'stereotype' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3A24417902EF' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Core.StructuralFeatureType [Association] ==================== -->
+ <Model:Association xmi.id = 'a316437BF0352'
+ name = 'StructuralFeatureType' annotation = 'The StructuralFeatureType association identifies the Classifier instance that defines the type of particular StructuralFeatures. A StructuralFeature instance must have a Classifier instance that defines its type.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a316437C002DA'
+ name = 'structuralFeature' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3298F1A403BF' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a316437C003B6'
+ name = 'type' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a32989FB2023D' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Core.TaggedElement [Association] ==================== -->
+ <Model:Association xmi.id = 'a33E901DD001E'
+ name = 'TaggedElement'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:ModelElement.annotation>The TaggedElement association links TaggedValues with the ModelElements that own them.
+
+TaggedValues cannot simultaneously participate in both the TaggedElement and StereotypeTaggedValues associations.
+
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a33E901E003D4'
+ name = 'modelElement' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a327A5C7301CC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a33E901E10028'
+ name = 'taggedValue' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a337A4EF7002C' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== Behavioral [Package] ==================== -->
+<Model:Package xmi.id = 'a3A6342A4000B'
+ name = 'Behavioral'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>The Behavioral metamodel depends on the following package:
+
+ org.omg::CWM::ObjectModel::Core
+
+The Behavioral metamodel collects together classes and associations that describe the behavior of CWM types and provides a foundation for recording the invocations of defined behaviors. The elements of the Behavioral metamodel are shown in the following figure.
+
+OCL Representation of Behavioral Constraints
+
+Operations
+
+The operation hasSameSignature checks if the argument has the same signature as the instance itself.
+ hasSameSignature ( b : BehavioralFeature ) : Boolean;
+ hasSameSignature (b) =
+ (self.name = b.name) and
+ (self.parameter-&gt;size = b.parameter-&gt;size) and
+ Sequence{ 1..(self.parameter-&gt;size) }-&gt;forAll( index : Integer |
+ b.parameter-&gt;at(index).type =
+ self.parameter-&gt;at(index).type and
+ b.parameter-&gt;at(index).kind =
+ self.parameter-&gt;at(index).kind )
+
+The operation allOperations results in a Set containing all Operations of the Classifier itself and all its inherited Operations.
+ allOperations : Set(Operation);
+ allOperations = self.allFeatures-&gt;select(f | f.ockIsKindOf(Operations))
+
+The operation allMethods results in a Set containing all Methods of the Classifier itself and all its inherited Methods.
+ allOperations : Set(Method);
+ allMethods = self.allFeatures-&gt;select(f | f.ockIsKindOf(Method))
+
+Constraints
+
+[C-4-1] All Parameters should have a unique name.
+context BehavioralFeature inv:
+self.parameter-&gt;forAll(p1, p2 | p1.name = p2.name implies p1 = p2)
+
+[C-4-2] The type of the Parameters should be included in the Namespace of the Classifier.
+context BehavioralFeature inv:
+self.parameter-&gt;forAll( p | self.owner.namespace.allContents-&gt;includes (p.type) )
+
+[C-4-3] The number of arguments must be the same as the number of parameters of the Operation.
+context CallAction inv:
+self.actualArgument-&gt;size = self.operation.parameter-&gt;size
+
+[C-4-4] An Interface can only contain Operations.
+context Interface inv:
+self.allFeatures-&gt;forAll( f | f.oclIsKindOf( Operation ) )
+
+[C-4-5] An Interface cannot contain any ModelElements.
+context Interface inv:
+self.allContents-&gt;isEmpty
+
+[C-4-6] All Features defined in an Interface are public.
+context Interface inv:
+self.allFeatures-&gt;forAll( f | f.visibility = #public )
+
+[C-4-7] If the realized Operation is a query, then so is the Method.
+context Method inv:
+self.specification-&gt;isQuery implies self.isQuery</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Behavioral.org.omg.mof.idl_prefix=org.omg.cwm.objectmodel [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.850'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.objectmodel' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a3A6342A4000B' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.objectmodel</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Behavioral.org.omg.xmi.namespace=CWM [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.851'
+ name = 'org.omg.xmi.namespace=CWM' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a3A6342A4000B' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWM</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Behavioral.org.omg.mof.idl_substitute_name=BehavioralModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.852'
+ name = 'org.omg.mof.idl_substitute_name=BehavioralModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a3A6342A4000B' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>BehavioralModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Behavioral.com.urep.jcr.java_prefix=org.omg.java.cwm.objectmodel [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.853'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.objectmodel' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a3A6342A4000B' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.objectmodel</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.854'
+ name = 'Core' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6600C5031F' />
+ <!-- ==================== Behavioral.Argument [Class] ==================== -->
+ <Model:Class xmi.id = 'a33D9073E03B6'
+ name = 'Argument'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>Argument is an expression describing how to determine an actual value passed in a CallAction.
+
+In the metamodel an Argument is a composite part of a CallAction and contains a meta-attribute, value, of type Expression. It states how the actual argument is determined when the owning CallAction is executed.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Behavioral.Argument.value [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a33D9076D00FA'
+ name = 'value' annotation = 'An expression determining the actual Argument instance when executed.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33CFA00203A2' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Behavioral.Argument.callAction [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a396A5DC6007D'
+ name = 'callAction' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A638B7E0318'
+ referencedEnd = 'a3A638C300329' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Behavioral.org.omg.mof.idl_substitute_name=umlValue [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.855'
+ name = 'org.omg.mof.idl_substitute_name=umlValue' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a33D9076D00FA' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>umlValue</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Behavioral.BehavioralFeature [Class] ==================== -->
+ <Model:Class xmi.id = 'a3298BCF00260'
+ name = 'BehavioralFeature'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a32989F9700FE' >
+ <Model:ModelElement.annotation>A behavioral feature refers to a dynamic feature of a model element, such as an operation or method. In the metamodel, BehavioralFeature specifies a behavioral aspect of a Classifier. All different kinds of behavioral aspects of a Classifier, such as Operation and Method, are subclasses of BehavioralFeature.
+
+BehavioralFeature is an abstract metaclass.
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Behavioral.BehavioralFeature.isQuery [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a335A34A3012C'
+ name = 'isQuery' annotation = 'Specifies whether an execution of the BehavioralFeature leaves the state of the system unchanged. True indicates that the state is unchanged; false indicates that side-effects may occur.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Behavioral.BehavioralFeature.parameter [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a396A48A50213'
+ name = 'parameter' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327BBB9F02B2'
+ referencedEnd = 'a3359946401AE' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Behavioral.CallAction [Class] ==================== -->
+ <Model:Class xmi.id = 'a3A638B7E0318'
+ name = 'CallAction'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>A call action is an action resulting in an invocation of an operation.
+
+The purpose of a CallAction is to identify the actual Arguments used in a specific invocation of an Operation.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Behavioral.CallAction.operation [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A660F1B00CD'
+ name = 'operation' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327BB68C0398'
+ referencedEnd = 'a3A638C3503D4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Behavioral.CallAction.actualArgument [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A660F1E012B'
+ name = 'actualArgument' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a33D9073E03B6'
+ referencedEnd = 'a3A638C300328' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Behavioral.Event [Class] ==================== -->
+ <Model:Class xmi.id = 'a3288E51203DE'
+ name = 'Event' annotation = 'Event is a specification of an observable occurrence. The occurrence that generates an event instance is assumed to take place at an instant in time.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:Namespace.contents>
+ <!-- ==================== Behavioral.Event.parameter [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a396A651802DE'
+ name = 'parameter' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327BBB9F02B2'
+ referencedEnd = 'a3337AF9D028B' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Behavioral.Interface [Class] ==================== -->
+ <Model:Class xmi.id = 'a3342A195014D'
+ name = 'Interface'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a32989FB2023D' >
+ <Model:ModelElement.annotation>Interface is a named set of operations that specify the behavior of an element.
+
+In the metamodel, an Interface contains a set of Operations that together define a service offered by a Classifier realizing the Interface. A Classifier may offer several services, which means that it may realize several Interfaces, and several Classifiers may realize the same Interface.</Model:ModelElement.annotation>
+ </Model:Class>
+ <!-- ==================== Behavioral.org.omg.mof.idl_substitute_name=UmlInterface [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.856'
+ name = 'org.omg.mof.idl_substitute_name=UmlInterface' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a3342A195014D' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>UmlInterface</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Behavioral.Method [Class] ==================== -->
+ <Model:Class xmi.id = 'a327BB67E0028'
+ name = 'Method' annotation = 'Method is the implementation of an Operation. It specifies the algorithm or procedure that effects the results of an Operation.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3298BCF00260' >
+ <Model:Namespace.contents>
+ <!-- ==================== Behavioral.Method.body [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a327BBD2A02D0'
+ name = 'body' annotation = 'A specification of the Method in some appropriate form (such as a programming language). The exact form of a Method&#x0092;s specification and knowledge of the language in which it is described is outside the scope of the CWM.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a363559050190' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Behavioral.Method.specification [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a396A49A50128'
+ name = 'specification' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327BB68C0398'
+ referencedEnd = 'a32B6D9BE00C8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Behavioral.Operation [Class] ==================== -->
+ <Model:Class xmi.id = 'a327BB68C0398'
+ name = 'Operation'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3298BCF00260' >
+ <Model:ModelElement.annotation>Operation is a service that can be requested from an object to effect behavior. An Operation has a signature, which describes the parameters that are possible (including possible return values).
+
+In the metamodel, an Operation is a BehavioralFeature that can be applied to instances of the Classifier that contains the Operation.
+
+Operation is the specification, while Method is the implementation.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Behavioral.Operation.isAbstract [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3627CF2B030C'
+ name = 'isAbstract' annotation = 'If true, then the Operation does not have an implementation, and one must be supplied by a descendant. If false, the Operation must have an implementation in the class or inherited from an ancestor.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Behavioral.Operation.method [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a396A48F7030D'
+ name = 'method' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327BB67E0028'
+ referencedEnd = 'a32B6D9BE00C9' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Behavioral.Parameter [Class] ==================== -->
+ <Model:Class xmi.id = 'a327BBB9F02B2'
+ name = 'Parameter' annotation = 'Parameters are used in the specification of operations, methods and events. A Parameter may include a name, type, and direction of communication.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:Namespace.contents>
+ <!-- ==================== Behavioral.Parameter.defaultValue [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a327BE04D0096'
+ name = 'defaultValue' annotation = 'An Expression whose evaluation yields a value to be used when no argument is supplied for the Parameter.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33CFA00203A2' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Behavioral.Parameter.kind [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a335BC753038E'
+ name = 'kind' annotation = 'Specifies what kind of a Parameter is required.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FDC024E' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Behavioral.Parameter.behavioralFeature [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a396A4927004E'
+ name = 'behavioralFeature' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3298BCF00260'
+ referencedEnd = 'a33599464017C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Behavioral.Parameter.event [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A6E38A1023A'
+ name = 'event' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3288E51203DE'
+ referencedEnd = 'a3337AF9D028A' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Behavioral.Parameter.type [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a396A496E01E4'
+ name = 'type' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32989FB2023D'
+ referencedEnd = 'a335BC7D503D4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Behavioral.ParameterDirectionKind [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a33DD6FDC024E'
+ name = 'ParameterDirectionKind'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>In the metamodel ParameterDirectionKind defines an enumeration that denotes if a Parameter is used for supplying an argument and/or for returning a value. The enumeration values are:
+
+The default value is pdk_in.</Model:ModelElement.annotation>
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'ParameterDirectionKind'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'pdk_in'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'pdk_inout'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'pdk_out'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'pdk_return'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== Behavioral.org.omg.xmi.enumerationUnprefix=pdk_ [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.857'
+ name = 'org.omg.xmi.enumerationUnprefix=pdk_' annotation = ''
+ tagId = 'org.omg.xmi.enumerationUnprefix'
+ elements = 'a33DD6FDC024E' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>pdk_</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Behavioral.BehavioralFeatureParameter [Association] ==================== -->
+ <Model:Association xmi.id = 'a3359946200F0'
+ name = 'BehavioralFeatureParameter' annotation = 'The BehavioralFeatureParameter association identifies and orders Parameter instances describing the parameters of a BehavioralFeature. Parameters may be owned by at most one BehavioralFeature instance. The set of parameters of a BehavioralFeature, together with its name and return value, are said to constitute the BehavioralFeature&#x0092;s "signature".'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a33599464017C'
+ name = 'behavioralFeature' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3298BCF00260' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3359946401AE'
+ name = 'parameter' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327BBB9F02B2' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Behavioral.CallArguments [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A638C3000B7'
+ name = 'CallArguments' annotation = 'Identifies the Argument instances representing the actual argument values passed to an Operation during the particular invocation indicated by the CallAction instance. The ordering of actual argument values is assumed to correspond to the ordering of the Operation&#x0092;s parameters as represented by the ordering of the BehavioralFeatureParameter association.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A638C300328'
+ name = 'actualArgument' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a33D9073E03B6' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A638C300329'
+ name = 'callAction' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3A638B7E0318' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Behavioral.EventParameter [Association] ==================== -->
+ <Model:Association xmi.id = 'a3337AF9B02A8'
+ name = 'EventParameter' annotation = 'The EventParameter association identifies the set of Parameter instances owned by an Event instance.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3337AF9D028A'
+ name = 'event' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3288E51203DE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3337AF9D028B'
+ name = 'parameter' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327BBB9F02B2' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Behavioral.CalledOperation [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A638C3501D0'
+ name = 'CalledOperation' annotation = 'The CalledOperation association identifies the CallAction instance representing a particular invocation of an Operation.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A638C3503C4'
+ name = 'callAction' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A638B7E0318' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A638C3503D4'
+ name = 'operation' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327BB68C0398' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Behavioral.OperationMethod [Association] ==================== -->
+ <Model:Association xmi.id = 'a32B6D9B302FD'
+ name = 'OperationMethod' annotation = 'The OperationMethod association links an Operation with the Method instance(s) that realize it. The various Method instances represent alternative implementations (usually in different programming languages or environments) of the Operation.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a32B6D9BE00C8'
+ name = 'specification' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327BB68C0398' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a32B6D9BE00C9'
+ name = 'method' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327BB67E0028' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Behavioral.ParameterType [Association] ==================== -->
+ <Model:Association xmi.id = 'a335BC7D400A0'
+ name = 'ParameterType' annotation = 'The ParameterType association links a Parameter instance with the Classifier that defines the parameter&#x0092;s type.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a335BC7D50398'
+ name = 'parameter' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327BBB9F02B2' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a335BC7D503D4'
+ name = 'type' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a32989FB2023D' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== Relationships [Package] ==================== -->
+<Model:Package xmi.id = 'a3A63421F0357'
+ name = 'Relationships'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>The Relationships metamodel depends on the following package:
+
+ org.omg::CWM::ObjectModel::Core
+
+The Relationships metamodel collects together classes and associations that describe the relationships between object within a CWM information store. The Relationships metamodel describes to types of relationships: association and generalization.
+
+Association relationships record linkages between model elements. These linkages may represent simple linkages between model elements or aggregation ("is part of") relationships between model elements; aggregation relationships come in two forms -- shared and composite. Associations have two or more named ends that link them to instances of the classes connected by the association.
+
+Generalization relationships record arrangements of model elements into type hierarchies in a parent/child (or "is type of") fashion. Child types are said to "specialize", "subclass" or "subtype" their parental types, represent a subset of parental instances that fulfill the definition of the child type, and inherit the structural features
+(Attributes, AssociationEnd) and behavioral features (Operations, Methods) of their parents. Parental types are said to "generalize" their child types or to be "superclasses" or "supertypes" of their children.
+
+CWM generalization hierarchies support multiple inheritance; that is, child types may have more than one parental type and inherit the union of the features of all their parental types. Although called "hierarchies", multiple inheritance actually represents a directed acyclic graph of parental and child types.
+
+OCL Representation of Relationships Constraints
+
+Operations
+
+The operation allConnections results in the set of all AssociationEnds of the Association.
+ allConnections : Set(AssociationEnd);
+ allConnections = self.feature.oclIsKindOf(AssociationEnd)
+
+Constraints
+
+[C-5-1] An Association must have at least 2 AssociationEnds.
+context Association inv:
+self.allConnections-&gt;size &gt; 1
+
+[C-5-2] The AssociationEnds must have a unique name within the association.
+context Association inv:
+self.allConnections-&gt;forAll( r1, r2 | r1.name = r2.name implies r1 = r2)
+
+[C-5-3] At most one AssociationEnd may be an aggregation or composition.
+context Association inv:
+self.allConnections-&gt;select(aggregation &lt;&gt; #ak_none)-&gt;size &lt;= 1
+
+[C-5-4] If an Association has three or more AssociationEnds, then no AssociationEnd may be an aggregation or composition.
+context Association inv:
+self.allConnections-&gt;size &gt;=3 implies
+self.allConnections-&gt;forall(aggregation = #ak_none)
+
+[C-5-5] The connected Classifiers of the AssociationEnds should be included in the Namespace of the Association, or be Classifiers with public visibility in other Namespaces to which the Association has access.
+context Association inv:
+self.allConnections-&gt;forAll(r | self.namespace.allContents-&gt;includes (r.type) ) or
+self.allConnections-&gt;forAll(r | self.namespace.allContents-&gt;excludes (r.type))
+ implies
+self.namespace.clientDependency-&gt;exists (d |
+ d.supplier.oclAsType(Namespace).ownedElement-&gt;select (e |
+ e.elementOwnership.visibility = #ak_public)-&gt;includes (r.type) or
+ d.supplier.oclAsType(Classifier).allParents.
+ oclAsType(Namespace).ownedElement-&gt;select (e |
+ e.elementOwnership.visibility = #ak_public)-&gt;includes (r.type) or
+ d.supplier.oclAsType(Package).allImportedElements-&gt;select (e |
+ e.elementImport.visibility = #ak_public) -&gt;includes (r.type) ) )
+
+[C-5-6] An AssociationEnd must have an owning Association.
+context AssociationEnd inv:
+self.owner.oclIsKindOf(Association)
+
+[C-5-7] The Classifier of an AssociationEnd cannot be an Interface or a DataType if the association is navigable away from that end.
+context AssociationEnd inv:
+(self.type.oclIsKindOf (Interface) or
+self.type.oclIsKindOf (DataType)) implies
+self.owner-&gt;select (ae | ae &lt;self)-&gt;forAll(ae | ae.isNavigable = #false)
+
+[C-5-8] An instance may not belong by composition to more than one composite Instance.
+context AssociationEnd inv:
+self.aggregation = #ak_composite implies self.multiplicity.max &lt;= 1
+
+[C-5-9] An AssociationEnd with composite or shared aggregation semantics must be owned by an Association.
+context AssociationEnd inv:
+self.aggregation = #ak_composite or self.aggregation = #ak_shared implies
+self.owner.oclIsKindOf(Association)
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Relationships.org.omg.mof.idl_prefix=org.omg.cwm.objectmodel [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.858'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.objectmodel' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a3A63421F0357' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.objectmodel</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Relationships.org.omg.xmi.namespace=CWM [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.859'
+ name = 'org.omg.xmi.namespace=CWM' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a3A63421F0357' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWM</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Relationships.org.omg.mof.idl_substitute_name=RelationshipsModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.860'
+ name = 'org.omg.mof.idl_substitute_name=RelationshipsModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a3A63421F0357' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>RelationshipsModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Relationships.com.urep.jcr.java_prefix=org.omg.java.cwm.objectmodel [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.861'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.objectmodel' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a3A63421F0357' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.objectmodel</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.862'
+ name = 'Core' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6600C5031F' />
+ <!-- ==================== Relationships.Association [Class] ==================== -->
+ <Model:Class xmi.id = 'a3A54CBFF0090'
+ name = 'Association'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3298A02900FE' >
+ <Model:ModelElement.annotation>An association defines a semantic relationship between classifiers. Associations have two or more named ends. Associations with two or more ends are called "n-ary" whereas associations with exactly two ends are called "binary". Each end, depending
+upon its multiplicity, connects to zero or more instances of some classifier.
+
+In the metamodel, an Association is a declaration of a semantic relationship between Classifiers, such as Classes. Associations must have two, and may have more, association ends. Each end is connected to a Classifier; the same Classifier may be
+connected to more than one association end in the same association. (Refer to the ObjectModel&#x0092;s Instance package, below, for a description of how Associations are instantiated.)
+
+Because Associations are classifiers, they own and order their association ends (which are Attributes) via the ClassifierFeature association. In addition, because Associations are Classes, they can also own more traditional StructuralFeatures such as Attributes. Consequently, they may act in a manner similar to "association classes" described by
+some other object models.
+
+An association may represent an aggregation (i.e., a whole/part relationship). In this case, the association end attached to the whole element is designated, and the other association end represents the parts of the aggregation.
+
+Associations can be of three different kinds: (1) ordinary association, (2) composite aggregate, and (3) shareable aggregate. Since the aggregate construct can have several different meanings depending on the application area, CWM gives a more precise meaning to two of these constructs (i.e., association and composite aggregate) and leaves the shareable aggregate more loosely defined in between. Only binary Associations can have composite or sharable aggregation semantics.
+
+Composite aggregation is a strong form of aggregation which requires that a part instance be included in at most one composite at a time and that the composite object has sole responsibility for the disposition of its parts. This means that the composite object is responsible for the creation and destruction of the parts. In implementation terms, it is responsible for their memory allocation. If a composite object is destroyed, it must destroy all of its parts. It may remove a part and give it to another composite object, which then assumes responsibility for it. If the multiplicity from a part to composite is zero-to-one, the composite may remove the part and the part may assume responsibility for itself, otherwise it may not live apart from a composite.
+
+A consequence of these rules is that a composite aggregation implies propagation semantics (i.e., some of the dynamic semantics of the whole is propagated to its parts). For example, if the whole is copied or destroyed, then so are the parts as well (because a part may belong to at most one composite).
+
+A classifier on the composite end of an association may have parts that are classifiers and associations. At the instance level, an instance of a part element is considered "part of" the instance of a composite element. If an association is part of a composite and it connects two classes that are also part of the same composite, then an instance of the association will connect objects that are part of the same composite object of which the instance is part.
+
+A shareable aggregation denotes weak ownership (i.e., the part may be included in several aggregates) and its owner may also change over time. However, the semantics of a shareable aggregation does not imply deletion of the parts when an aggregate
+referencing it is deleted. Both kinds of aggregations define a transitive, antisymmetric relationship (i.e., the instances form a directed, non-cyclic graph). Composition instances form a strict tree (or rather a forest).</Model:ModelElement.annotation>
+ </Model:Class>
+ <!-- ==================== Relationships.AssociationEnd [Class] ==================== -->
+ <Model:Class xmi.id = 'a3A6F584F03A5'
+ name = 'AssociationEnd'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3298F1A403BF' >
+ <Model:ModelElement.annotation>An association end is an endpoint of an association, which connects the association to a classifier. Each association end is part of one association. The association ends of each association are ordered.
+
+In the metamodel, an AssociationEnd is part of an Association and specifies the connection of an Association to some other Classifier. Because AssociationEnds are a kind of StructuralFeature, they are owned and ordered by Association instances via the ClassifierFeature association. The StructuralFeatureType association is used to identify the Classifier to which the AssociationEnd is attached. Each AssociationEnd has a name and defines a set of properties of the connection.
+
+The multiplicity property of an association end specifies how many instances of the classifier at a given end (the one bearing the multiplicity value) may be associated with a single instance of the classifier at the other end. The association end also states whether or not the connection may be traversed towards the instance playing that role in the connection (the isNavigable attribute), that is, if the instance is directly reachable via the association.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Relationships.AssociationEnd.aggregation [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A6F59870169'
+ name = 'aggregation' annotation = 'When placed on one end (the "target" end), specifies whether the class on the target end is an aggregation with respect to the class on the other end (the "source" end). Only one end of an association can be an aggregation.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F5903A2' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relationships.AssociationEnd.isNavigable [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A6F599D0070'
+ name = 'isNavigable' annotation = 'When placed on a target end, specifies whether traversal from a source instance to its associated target instances is possible. A value of true means that the association can be navigated by the source class and the target rolename can be used in navigation expressions. Specification of navigability for each direction is defined independently.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Relationships.Generalization [Class] ==================== -->
+ <Model:Class xmi.id = 'a3A54BFAC011D'
+ name = 'Generalization'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>A generalization is a taxonomic relationship between a more general element and a more specific element. The more specific element is fully consistent with the more general element (it has all of its properties, members, and relationships) and may contain additional information.
+
+In the metamodel, a Generalization is a directed inheritance relationship, uniting a Classifier with a more general Classifier in a hierarchy. Generalization is a subtyping relationship; that is, an instance of the more general ("parent") Classifier may be substituted by an instance of the more specific ("child") Classifier.
+
+To understand inheritance fully, it is necessary to understand the concept of a full descriptor and a segment descriptor. A full descriptor is the full description needed to describe an instance of a metamodel object. It contains a description of all of the
+attributes, associations, and operations that the object contains.
+
+In a pre-object-oriented language, the full descriptor of a data structure was declared directly in its entirety. In an object-oriented language, the description of an object is built out of incremental segments that are combined using inheritance to produce a full descriptor for an object. The segments are the modeling elements that are actually declared in a model. Each classifier contains a list of features and other relationships that it adds to what it inherits from its ancestors. The mechanism of inheritance defines how full descriptors are produced from a set of segments connected by generalization.The full descriptors are implicit, but they define the structure of actual instances. Features of a classifier that have private visibility are not visible to descendants of the classifier.
+
+If a classifier has no parent, then its full descriptor is the same as its segment descriptor. If a classifier has one or more parents, then its full descriptor contains the union of the features from its own segment descriptor and the segment descriptors of all of its ancestors. No attribute, operation, or association end with the same signature may be declared in more than one of the segments (in other words, they may not be redefined). A method may be declared in more than one segment. A method declared in any segment supersedes and replaces a method with the same signature declared in any ancestor. If two or more methods nevertheless remain, then they conflict and the model is ill-formed. The constraints on the full descriptor are the union of the constraints on the segment itself and all of its ancestors. If any of them are inconsistent, then the model is ill-formed.
+
+In any full descriptor for a classifier, each method must have a corresponding operation. In a concrete classifier, each operation in its full descriptor must have a corresponding method in the full descriptor.
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Relationships.Generalization.child [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A54C9B30023'
+ name = 'child' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32989FB2023D'
+ referencedEnd = 'a3A6CB0FF015C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Relationships.Generalization.parent [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A54C9B60284'
+ name = 'parent' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32989FB2023D'
+ referencedEnd = 'a3A6CB10A01BC' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Relationships.AggregationKind [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a33DD6F5903A2'
+ name = 'AggregationKind'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>An enumeration that denotes what kind of aggregation an Association defines. When placed on a target end, specifies the relationship of the target end to the source end.
+
+The default value is ak_none.</Model:ModelElement.annotation>
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'AggregationKind'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'ak_none'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'ak_aggregate'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'ak_composite'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== Relationships.org.omg.xmi.enumerationUnprefix=ak_ [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.863'
+ name = 'org.omg.xmi.enumerationUnprefix=ak_' annotation = ''
+ tagId = 'org.omg.xmi.enumerationUnprefix'
+ elements = 'a33DD6F5903A2' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>ak_</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Relationships.ChildElement [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A6CB0FE016E'
+ name = 'ChildElement' annotation = 'The ChildElement association links Classifiers with the Generalization instances that describe where they participate as children in the inheritance hierarchy.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A6CB0FF015C'
+ name = 'child' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a32989FB2023D' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A6CB0FF01A2'
+ name = 'generalization' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A54BFAC011D' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Relationships.ParentElement [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A6CB10901EC'
+ name = 'ParentElement' annotation = 'The ParentElement association links Classifiers with the Generalization instances that describe where the Classifiers participate as parents in the inheritance hierarchy.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A6CB10A01BC'
+ name = 'parent' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a32989FB2023D' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A6CB10A0202'
+ name = 'specialization' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A54BFAC011D' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== Instance [Package] ==================== -->
+<Model:Package xmi.id = 'a3A6342930318'
+ name = 'Instance'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>The Instance metamodel depends on the following package:
+
+ org.omg::CWM::ObjectModel::Core
+
+In addition to the metadata normally interchanged with CWM, it is sometimes useful to interchange specific data instances as well. The ObjectModel&#x0092;s Instance metamodel allows the inclusion of data instances with the metadata.
+
+OCL Representation of Instance Constraints
+
+Constraints
+
+[C-6-1] A DataValue originates from a Classifier that is a DataType.
+context DataValue inv:
+self.classifier.oclIsKindOf(DataType)
+
+[C-6-2] A DataValue has no Slots.
+context DataValue inv:
+self.valueSlot-&gt;isEmpty
+
+[C-6-3] An Object may only own Objects and DataValues.
+context Object inv:
+self.contents-&gt;forAll(c | c.oclIsKindOf(Object) or c.oclIsKindOf(DataValue))
+
+[C-6-4] If an Object represents an association, at least two of its ends must be not be empty.
+context Object inv:
+self.classifier.oclIsKindOf(Association) implies
+self.slot.feature-&gt;iterate( ae ; cnt : Integer = 0 |
+if ae.oclIsKindOf(AssociationEnd) and ae.value.notEmpty then
+ cnt + 1
+else
+ cnt
+end if ) &gt; 1
+
+[C-6-5] If the StructuralFeature describing a Slot is an AssociationEnd, the Classifier associated with the Object owning the Slot must be an Association.
+context Slot inv:
+self.feature.oclIsKindOf(AssociationEnd) implies
+self.value.classifier.oclIsKindOf(Association)
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Instance.org.omg.mof.idl_prefix=org.omg.cwm.objectmodel [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.864'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.objectmodel' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a3A6342930318' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.objectmodel</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Instance.org.omg.xmi.namespace=CWM [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.865'
+ name = 'org.omg.xmi.namespace=CWM' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a3A6342930318' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWM</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Instance.org.omg.mof.idl_substitute_name=InstanceModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.866'
+ name = 'org.omg.mof.idl_substitute_name=InstanceModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a3A6342930318' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>InstanceModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Instance.com.urep.jcr.java_prefix=org.omg.java.cwm.objectmodel [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.867'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.objectmodel' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a3A6342930318' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.objectmodel</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.868'
+ name = 'Core' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6600C5031F' />
+ <!-- ==================== Instance.DataSlot [Class] ==================== -->
+ <Model:Class xmi.id = 'a3BCB15050021'
+ name = 'DataSlot' annotation = 'A Slot which is used to hold a data value where there is no need to manage the value as an element in its own right (in which case a DataValue would be used) - for example it is a one-off string value or a number. The dataValue (and dataType where set) must be consistent with the type of the DataSlot&apos;s feature (Attribute) and must obey any constraints on the full descriptor of the Attribute&apos;s DataType (including both explicit constraints and built-in constraints such as multiplicity).'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3A244A10030F' >
+ <Model:Namespace.contents>
+ <!-- ==================== Instance.DataSlot.dataValue [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3BCB1554010B'
+ name = 'dataValue' annotation = 'The value for the slot expressed as a string.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Instance.DataSlot.dataType [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3BCB16BC0234'
+ name = 'dataType' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3298A036025B'
+ referencedEnd = 'a3BCB1E5A00BD' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Instance.DataValue [Class] ==================== -->
+ <Model:Class xmi.id = 'a33BC9AFB02E4'
+ name = 'DataValue'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327BC77C038E' >
+ <Model:ModelElement.annotation>A data value is an instance with no identity. In the metamodel, DataValue is a child of Instance that cannot change its state, i.e. all operations that are applicable to it are pure functions or queries that do not cause any side effects. DataValues are typically used
+as attribute values.
+
+Since it is not possible to differentiate between two data values that appear to be the same, it becomes more of a philosophical issue whether there are several data values representing the same value or just one for each value. In addition, a data value cannot change its data type and it does not have contained instances.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Instance.DataValue.value [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A5502A600DE'
+ name = 'value' annotation = 'A string representation of the value.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Instance.Extent [Class] ==================== -->
+ <Model:Class xmi.id = 'a387E624E0365'
+ name = 'Extent'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5D19033E' >
+ <Model:ModelElement.annotation>Each instance of Extent owns a collection of instances and is used to link such collections to their structural and behavioral definitions in CWM Resource packages. Because Extent is a subclass of package, it owns member instances via the
+ElementOwnership associaton.</Model:ModelElement.annotation>
+ </Model:Class>
+ <!-- ==================== Instance.Instance [Class] ==================== -->
+ <Model:Class xmi.id = 'a327BC77C038E'
+ name = 'Instance'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>The instance construct defines an entity to which a set of operations can be applied and which has a state that stores the effects of the operations. In the metamodel Instance is connected to a Classifier that declares its structure and behavior. It has a set of attribute values matching the definition of its Classifier. The set of attribute values implements the current state of the Instance. Because Instance is an abstract class, all Instances are either Object or DataValue instances.
+
+The data content of an Instance comprises one value for each attribute in its full descriptor (and nothing more). The value must be consistent with the type of the attribute. An instance must obey any constraints on the full descriptor of the Classifier
+of which it is an instance (including both explicit constraints and built-in constraints such as multiplicity).
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Instance.Instance.classifier [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a396A59810290'
+ name = 'classifier' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32989FB2023D'
+ referencedEnd = 'a33CAD7E900AB' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Instance.Object [Class] ==================== -->
+ <Model:Class xmi.id = 'a33BC99D60302'
+ name = 'Object'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327BC77C038E' >
+ <Model:ModelElement.annotation>An object is an instance that originates from a class.
+
+In the metamodel, Object is a subclass of Instance originating from a Class. The Class may be modified dynamically, which means that the set of features of the Object may change during its life-time.
+
+An object is an instance that originates from a class; it is structured and behaves according to its class. All objects originating from the same class are structured in the same way, although each of them has its own set of attribute slots. Each attribute slot references an instance, usually a data value or possibly, another object. The number of attribute slots with the same name fulfills the multiplicity of the corresponding attribute in the class. The set may be modified according to the specification in the corresponding attribute, e.g. each referenced instance must originate from (a specialization of) the type of the attribute, and attribute slots may be added or removed according to the changeable property of the attribute.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Instance.Object.slot [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A244A6600EC'
+ name = 'slot' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A244A10030F'
+ referencedEnd = 'a3A244ABF009E' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Instance.org.omg.mof.idl_substitute_name=UmlObject [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.869'
+ name = 'org.omg.mof.idl_substitute_name=UmlObject' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a33BC99D60302' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>UmlObject</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Instance.Slot [Class] ==================== -->
+ <Model:Class xmi.id = 'a3A244A10030F'
+ name = 'Slot' annotation = 'A slot is a named location in an Object instance that holds the current value of the StructuralFeature associated with the Slot instance. Normally, the StructuralFeature associated with the slot will be either an Attribute instance or an AssociationEnd instance. Slots are owned by Objects; DataValues do not have slots.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:Namespace.contents>
+ <!-- ==================== Instance.Slot.object [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A244A5B0234'
+ name = 'object' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a33BC99D60302'
+ referencedEnd = 'a3A244ABF009F' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Instance.Slot.value [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A244A59033E'
+ name = 'value' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327BC77C038E'
+ referencedEnd = 'a3A244AC80040' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Instance.Slot.feature [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A6F57E9002D'
+ name = 'feature' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3298F1A403BF'
+ referencedEnd = 'a3A6F568E01FB' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Instance.org.omg.mof.idl_substitute_name=umlObject [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.870'
+ name = 'org.omg.mof.idl_substitute_name=umlObject' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a3A244A5B0234 a3A244ABF009F' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>umlObject</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Instance.SlotValue [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A244AC70205'
+ name = 'SlotValue' annotation = 'The SlotValue association connects slot instances with the DataValue or Object instance that contains the current value held by the slot.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A244AC80030'
+ name = 'valueSlot' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A244A10030F' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A244AC80040'
+ name = 'value' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327BC77C038E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Instance.org.omg.mof.idl_substitute_name=cwmlValue [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.871'
+ name = 'org.omg.mof.idl_substitute_name=cwmlValue' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a3A244AC80040' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>cwmlValue</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Instance.InstanceClassifier [Association] ==================== -->
+ <Model:Association xmi.id = 'a33CAD7E7008C'
+ name = 'InstanceClassifier' annotation = 'The InstanceClassifier association links Instances with Classifiers that describe them.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a33CAD7E900AA'
+ name = 'instance' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327BC77C038E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a33CAD7E900AB'
+ name = 'classifier' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a32989FB2023D' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Instance.ObjectSlot [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A244ABE0169'
+ name = 'ObjectSlot' annotation = 'The ObjectSlot association connects Slot instances with their owning Object instances.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A244ABF009E'
+ name = 'slot' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A244A10030F' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A244ABF009F'
+ name = 'object' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a33BC99D60302' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Instance.FeatureSlot [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A6F568D0023'
+ name = 'FeatureSlot' annotation = 'The FeatureSlot association connects Slot instances with the StructuralFeature instance (usually either an Attribute or AssociationEnd instance) describing the structure of the value held by the Slot.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A6F568E01FB'
+ name = 'feature' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3298F1A403BF' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A6F568E0223'
+ name = 'slot' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A244A10030F' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Instance.DataSlotType [Association] ==================== -->
+ <Model:Association xmi.id = 'a3BCB1E590030'
+ name = 'DataSlotType' annotation = 'The DataSlotType association connects DataSlot instances with the Core::DataType instance that identifies the type of information stored in the DataSlot::dataValue attribute.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3BCB1E5A00BD'
+ name = 'dataType' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3298A036025B' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3BCB1E5A00CD'
+ name = 'dataSlot' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3BCB15050021' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== BusinessInformation [Package] ==================== -->
+<Model:Package xmi.id = 'a38207A770114'
+ name = 'BusinessInformation'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>The Business Information package depends on the following package:
+
+ org.omg::CWM::ObjectModel::Core
+
+The Business Information Metamodel provides general purpose services available to all CWM packages for defining business-oriented information about model elements. The business-oriented services described here are designed to support the needs of data warehousing and business intelligence systems; they are not intended as a complete representation of general purpose business intelligence metamodel.
+
+Business Information Metamodel services support the notions of responsible parties and information about how to contact them, identification of off-line documentation and support for general-purpose descriptive information. Three CWM classes "anchor" these services: ResponsibleParty, Document and Description, respectively.
+
+To aid in representing the diversity of organizational structures and documentation relationships that may be encountered in a business intelligence system, the metamodel provides robust relationships between the anchor classes and every model element in the CWM metamodel. The necessary robustness is achieved in several ways.
+
+First, every CWM model element may have zero or more instances of each anchor class associated with it. This means, for example, that a single Description instance can be used to describe many different model elements. Conversely, a single model element may be described by many different Description instances. Likewise, Document and ResponsibleParty instances can be associated in completely ad hoc ways with any model element. Extending this idea means, for example, that Description instances could be used to further describe ResponsibleParty and Document instance, if needed.
+
+Second, because they are Namespaces, the anchor classes can be organized into hierarchies using the ElementOwnership association. For instance, an organizational structure can be represented by a hierarchy of ResponsibleParty instances. Also, the internal structure of a document (i.e., its chapters, sections, subsections, etc.) might be represented by a hierarchy of Document instances.
+
+Finally, instances of the three anchor classes can be associated with any model element (via their individual associations to ModelElement) and referenced by multiple instances of any of the three anchor classes. Because of the strong containment of the ElementOwnership association in the ObjectModel, anchor class instances can only participate in one hierarchy, but there are no restrictions preventing anchor class instances embedded in a hierarchy from referencing, or being referenced by, other model elements (even other members of the same hierarchy).
+
+To illustrate some of the ways that the metamodel can be used, the following figure shows a simple document hierarchy with responsibility assignments and descriptive comments (boxes represent instances of metamodel classes and labelled lines represent metamodel associations connecting instances). In the example, the product plan document for the Widget product is composed of three subplans: a marketing plan, an engineering plan, and a resource plan. The relationships between the subplans documents is shown as a hierarchy with the product plan owning the three subordinate plans via the ElementOwnership association. Each part of the plan is assigned to a reponsible party using the ModelElementResponsibility association. Finally, Description instances are used to record roles for the responsible parties.
+
+OCL Representation of BusinessInformation Constraints
+
+[C-3-1] A Description may not describe itself.
+context Description inv:
+self.modelElement-&gt;forAll(p | p &lt;&gt; self)
+
+[C-3-2] A Document may not describe itself.
+context Document inv:
+self.modelElement-&gt;forAll(p | p &lt;&gt; self)
+
+[C-3-3] A ResponsibleParty may not describe itself.
+context ResponsibleParty inv:
+self.modelElement-&gt;forAll(p | p &lt;&gt; self)</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== BusinessInformation.org.omg.xmi.namespace=CWM [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.873'
+ name = 'org.omg.xmi.namespace=CWM' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a38207A770114' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWM</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== BusinessInformation.org.omg.mof.idl_prefix=org.omg.cwm.foundation [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.874'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.foundation' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a38207A770114' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.foundation</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== BusinessInformation.org.omg.mof.idl_substitute_name=BusinessInformationModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.875'
+ name = 'org.omg.mof.idl_substitute_name=BusinessInformationModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a38207A770114' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>BusinessInformationModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== BusinessInformation.com.urep.jcr.java_prefix=org.omg.java.cwm.foundation [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.876'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.foundation' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a38207A770114' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.foundation</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.877'
+ name = 'Core' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6600C5031F' />
+ <!-- ==================== BusinessInformation.ResponsibleParty [Class] ==================== -->
+ <Model:Class xmi.id = 'a364CD88902CE'
+ name = 'ResponsibleParty'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a32B69F3A0118' >
+ <Model:ModelElement.annotation>The ResponsibleParty class allows representation of entities within an information system that are in some way interested in receiving information about, or are otherwise responsible for, particular ModelElements. Each ResponsibleParty may own multiple sets of contact information, and a single ResponsibleParty may be associated with many ModelElements.
+
+ResponsibleParty instances may represent any entity appropriate to the system being modeled and need not be limited to people. For example, a ResponsibleParty instance might represent an individual such as "George Washington", a role (the "President"), or an organization ("Congress"), depending upon the needs of the system being modeled. Similarly, the precise semantics of the responsibility attribute are open to intrepretation and may be adapted on a system-by-system basis.
+
+Because ResponsibleParty instances are Namespaces, they can be organized into hierarchies of ResponsibleParty instances, capturing organizational structures or similar relationships.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== BusinessInformation.ResponsibleParty.responsibility [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3731D43200BE'
+ name = 'responsibility' annotation = 'Textual identification or description of the ResponsibleParty in a usage-dependent format.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== BusinessInformation.ResponsibleParty.contact [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a386004D501E1'
+ name = 'contact' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3731D0010334'
+ referencedEnd = 'a3820922F0357' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== BusinessInformation.ResponsibleParty.modelElement [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a386004BE0126'
+ name = 'modelElement' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5C7301CC'
+ referencedEnd = 'a38209199029B' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== BusinessInformation.Telephone [Class] ==================== -->
+ <Model:Class xmi.id = 'a3731CE29023A'
+ name = 'Telephone'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>Instances of the Telephone class represent telephone contact information.
+
+Because telephones are first class objects within the CWM, they can be used for purposes beyond those associated with the CWM Foundation&#x0092;s Business Information concepts.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== BusinessInformation.Telephone.phoneNumber [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3731CE580028'
+ name = 'phoneNumber' annotation = 'A textual representation of the telephone&#x0092;s number.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== BusinessInformation.Telephone.phoneType [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3731CE6401FE'
+ name = 'phoneType'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:ModelElement.annotation>A textual representation of the telephone&#x0092;s type, such as "multi-line", or its usage,
+such as "home", "work", "fax", or "mobile".</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== BusinessInformation.Telephone.contact [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a386005AB0349'
+ name = 'contact' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3731D0010334'
+ referencedEnd = 'a38208FCD0358' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== BusinessInformation.Email [Class] ==================== -->
+ <Model:Class xmi.id = 'a3731CEAE010E'
+ name = 'Email'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>An Email instance identifies a single email address. Via a Contact instance, an email address can be associated with one or more ResponsibleParty instances. Email instances might, for example, be used by an automated tool to send an automatically generated email message to a ResponsibleParty instance responsible about some change of state for a particular ModelElement. Multiple Email instances may be associated with a single Contact instance and the ordering of the association between them may be used to represent the sequence in which the Email instances should be contacted.
+
+Because email addresses are first class objects within the CWM, they can be used for purposes beyond those associated with the CWMFoundation&#x0092;s Business Information concepts.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== BusinessInformation.Email.emailAddress [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3731CEC20104'
+ name = 'emailAddress' annotation = 'A textual representation of an email address.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== BusinessInformation.Email.emailType [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3731CECD00FA'
+ name = 'emailType' annotation = 'Contains a textual representation of the type of the email address. Interesting values might include location information such as "home" or "work", or perhaps an indication of the type of email system for which the eMailAddress is formatted, such as "SMTP" or "X.400".'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== BusinessInformation.Email.contact [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3860058903B6'
+ name = 'contact' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3731D0010334'
+ referencedEnd = 'a3820871F01C1' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== BusinessInformation.Location [Class] ==================== -->
+ <Model:Class xmi.id = 'a3731CF0A02C6'
+ name = 'Location'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>Instances of the Location class represent physical locations. Note that the name of a Location is derived from its superclass, ModelElement.
+
+Because Locations are first class objects within the CWM, they can be used for purposes beyond those associated with the CWM Foundation&#x0092;s Business Information concepts. If additional attributes about Location instances are required, they should be added by creating subtypes of the Location class and placing the additional attributes therein.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== BusinessInformation.Location.locationType [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3731CF360064'
+ name = 'locationType' annotation = 'Descriptive information about the character or identity of the Location instance.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== BusinessInformation.Location.address [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37AB0EDC02FE'
+ name = 'address' annotation = 'The address of the Location instance. The precise content of this string is usage-defined.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== BusinessInformation.Location.city [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37AB0F2B0095'
+ name = 'city' annotation = 'The name of the city in which the Location instance is found. The precise content of this string is usage-defined.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== BusinessInformation.Location.postCode [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37AB0F9F01A0'
+ name = 'postCode' annotation = 'The postal code of the Location instance. The precise content of this string is usage-defined.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== BusinessInformation.Location.area [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37AB11E201E8'
+ name = 'area' annotation = 'The area in which the Location instance is found. The precise content of this string is usage-defined, but a common usage would be to refer to a geographical subdivision such as a state or province.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== BusinessInformation.Location.country [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37AB12970094'
+ name = 'country' annotation = 'The name of the country in which the Location instance is found. The precise content of this string is usage-defined.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== BusinessInformation.Location.contact [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a386005A70230'
+ name = 'contact' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3731D0010334'
+ referencedEnd = 'a38208EB002DA' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== BusinessInformation.Contact [Class] ==================== -->
+ <Model:Class xmi.id = 'a3731D0010334'
+ name = 'Contact'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>Each Contact instance collects together the various types of related contact information. Each Contact instance can be associated with multiple Email, Location and Telephone instances. Conversely, each Email, Location, ResourceLocator and Telephone instance can be associated with many Contact instances. The ordering constraints on the associations between these classes and the Contact class can be used to represent a prioritized sequence in which the various types of contact information should be used.
+
+A particular ResponsibleParty instance may have multiple instances of Contact associated with it via the ResponsiblePartyContact association. This association is ordered to support representation of the sequence in which Contact instances should be used. For example, a ResponsibleParty instance representing an employee might be associated with Contact instances representing their office, home, and mobile contact information with an indication that the employee should be contacted first at the office, then at home, and finally via their mobile phone.
+
+To maximize flexibility of the metamodel, Contact instances may provide contact information for multiple ResponsibleParty instances.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== BusinessInformation.Contact.email [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3860053F02AD'
+ name = 'email' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3731CEAE010E'
+ referencedEnd = 'a3820871F01C0' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== BusinessInformation.Contact.location [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a386005570397'
+ name = 'location' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3731CF0A02C6'
+ referencedEnd = 'a38208EB002CA' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== BusinessInformation.Contact.responsibleParty [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3860052902DB'
+ name = 'responsibleParty' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a364CD88902CE'
+ referencedEnd = 'a3820922F0358' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== BusinessInformation.Contact.telephone [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3860056C0193'
+ name = 'telephone' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3731CE29023A'
+ referencedEnd = 'a38208FCD0357' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== BusinessInformation.Contact.url [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a386005BB02FB'
+ name = 'url' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3810D01501DC'
+ referencedEnd = 'a38208F420097' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== BusinessInformation.Description [Class] ==================== -->
+ <Model:Class xmi.id = 'a375FF5A2008E'
+ name = 'Description'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a32B69F3A0118' >
+ <Model:ModelElement.annotation>Instances of the Description class contain arbitrary textual information relevant to a particular ModelElement. While Description instances may contain any desired textual information, they will typically contain documentation or references to external reference information about the owning ModelElement.
+
+Any ModelElement may have multiple Description instances associated with it. Indeed, a ModelElement instance that is a Description instance may itself have multiple Description instances linked to it. Also, a hierarchies of Description instances can be constructed.
+
+Description instances are meant to hold descriptive textual information that will be stored in the metamodel itself. In contrast, Document instances are meant to describe the location documentary information stored outside the metamodel.
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== BusinessInformation.Description.body [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a375FF60E0382'
+ name = 'body' annotation = 'Contains a textual description of information pertaining to the owning ModelElement. '
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== BusinessInformation.Description.language [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37AB50FB01EF'
+ name = 'language' annotation = 'Contains an identification of the language in which the content of the body attribute is specified. If desired, the language specification may be applied to the name attribute derived from ModelElement as well.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FCF03C0' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== BusinessInformation.Description.type [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A5CE2580354'
+ name = 'type' annotation = 'Contains a textual description of the type of information the Description represents. Specific contents are usage defined.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== BusinessInformation.Description.modelElement [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a386005E4007A'
+ name = 'modelElement' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5C7301CC'
+ referencedEnd = 'a3820910D03D4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== BusinessInformation.Document [Class] ==================== -->
+ <Model:Class xmi.id = 'a378B694F014B'
+ name = 'Document'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a32B69F3A0118' >
+ <Model:ModelElement.annotation>The Document class represents externally stored descriptive information about some aspect of the modeled system. An instance of Document might be associated with one or more ModelElements. The name of a Document instance is derived from its superclasses.
+
+Although the purposes of the Description and Document types may overlap somewhat, their chief distinction is that Description instances are stored with the CWM metadata whereas Documentation instances are stored externally to the CWM metadata. Although there is an implication here that Documentation instances might represent more voluminous information than Description instances, there is no particular requirement that this be so.
+
+Because Documentation instances are themselves Namespace instances, hierarchical relationships between various externally stored documents can be represented.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== BusinessInformation.Document.reference [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a378B695B033D'
+ name = 'reference' annotation = 'Contains a textual representation of the identification, and perhaps the physical location, of externally maintained documentary information about some aspect of the ModelElement(s) with which the Document instance is associated.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== BusinessInformation.Document.type [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A5CE272020C'
+ name = 'type' annotation = 'Contains a textual description of the type of information the Document represents. Specific contents are usage defined.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== BusinessInformation.Document.modelElement [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a387E42E4032F'
+ name = 'modelElement' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5C7301CC'
+ referencedEnd = 'a3820908800B7' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== BusinessInformation.ResourceLocator [Class] ==================== -->
+ <Model:Class xmi.id = 'a3810D01501DC'
+ name = 'ResourceLocator'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>Instances of the ResourceLocator class provide a general means for describing the resources whose location is not defined by a traditional mailing address. For example, a ResourceLocator instance could refer to anything from a location within a building ("Room 317, third file cabinet, 2nd drawer") to a web location ("www.omg.org").
+
+Because they are first class objects in the CWM, ResourceLocator instances may also be used for purposes beyond those associated with the CWM Foundation's Business Information concepts.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== BusinessInformation.ResourceLocator.url [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3810D02F0094'
+ name = 'url' annotation = 'Contains the text of the resource location. For Internet locations, this will be a web URL (Uniform Resource Locator) but there is no requirement that this be so. In fact, the string can contain any text meaningful to its intended use in a particular environment.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== BusinessInformation.ResourceLocator.contact [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a386005B50107'
+ name = 'contact' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3731D0010334'
+ referencedEnd = 'a38208F420098' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== BusinessInformation.ContactEmail [Association] ==================== -->
+ <Model:Association xmi.id = 'a3820871D02AB'
+ name = 'ContactEmail'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:ModelElement.annotation>The ContactEmail association indicates the Email instances relevant used by Contact instances.
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3820871F01C0'
+ name = 'email' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3731CEAE010E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3820871F01C1'
+ name = 'contact' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3731D0010334' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== BusinessInformation.ContactLocation [Association] ==================== -->
+ <Model:Association xmi.id = 'a38208EB00059'
+ name = 'ContactLocation' annotation = 'The ContactLocation association relates Contact instances to relevant Location instances.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a38208EB002CA'
+ name = 'location' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3731CF0A02C6' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a38208EB002DA'
+ name = 'contact' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3731D0010334' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== BusinessInformation.ContactResourceLocator [Association] ==================== -->
+ <Model:Association xmi.id = 'a38208F410078'
+ name = 'ContactResourceLocator' annotation = 'The ContactResourceLocator association relates ResourceLocator instances to the Contact instances in which they participate.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a38208F420097'
+ name = 'url' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3810D01501DC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a38208F420098'
+ name = 'contact' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3731D0010334' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== BusinessInformation.ContactTelephone [Association] ==================== -->
+ <Model:Association xmi.id = 'a38208FCD00A7'
+ name = 'ContactTelephone' annotation = 'The ContactTelephone association relates telephones to the Contact instances that reference them.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a38208FCD0357'
+ name = 'telephone' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3731CE29023A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a38208FCD0358'
+ name = 'contact' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3731D0010334' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== BusinessInformation.DocumentDescribes [Association] ==================== -->
+ <Model:Association xmi.id = 'a382090860088'
+ name = 'DocumentDescribes'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:ModelElement.annotation>The DocumentDescribes association connects a Document instance with the ModelElement instances to which it pertains.
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3820908800B7'
+ name = 'modelElement' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327A5C7301CC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3820908801D0'
+ name = 'document' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a378B694F014B' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== BusinessInformation.ModelElementDescription [Association] ==================== -->
+ <Model:Association xmi.id = 'a3820910D00B7'
+ name = 'ModelElementDescription' annotation = 'The ModelElementDescription association connects a Description instance with the ModelElement instances to which it applies.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3820910D03D4'
+ name = 'modelElement' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327A5C7301CC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3820910E0078'
+ name = 'description' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a375FF5A2008E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== BusinessInformation.ModelElementResponsibility [Association] ==================== -->
+ <Model:Association xmi.id = 'a382091960172'
+ name = 'ModelElementResponsibility' annotation = 'The ModelElement Responsibility association identifies the ResponsibleParty instances for each ModelElement and allows determination of the ModelElements for which a ResponsibleParty instance is responsible.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a38209199029B'
+ name = 'modelElement' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327A5C7301CC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a382091990328'
+ name = 'responsibleParty' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a364CD88902CE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== BusinessInformation.ResponsiblePartyContact [Association] ==================== -->
+ <Model:Association xmi.id = 'a3820922E0357'
+ name = 'ResponsiblePartyContact' annotation = 'The ResponsiblePartyContact association allows a ResponsibleParty to have multiple sets of contact information. The ordered constraint can be used to determine the sequence in which the sets of contact information should be used.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3820922F0357'
+ name = 'contact' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3731D0010334' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3820922F0358'
+ name = 'responsibleParty' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a364CD88902CE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== DataTypes [Package] ==================== -->
+<Model:Package xmi.id = 'a38207A4E0308'
+ name = 'DataTypes'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>The DataTypes package depends on the following packages:
+
+ org.omg::CWM::ObjectModel::Core
+
+The CWM DataTypes metamodel supports definition of metamodel constructs that modelers can use to create the specific data types they need. Although the CWM Foundation itself does not contain specific data type definitions, a number of data type definitions for widely used environments are provided (in the CWM Data Types chapter) as examples of the appropriate usage of CWM Foundation classes for creating
+data type definitions.
+
+OCL Representation of DataTypes Constraints
+
+[C-4-1] A TypeAlias instance cannot alias itself.
+context TypeAlias inv:
+self.type &lt;&gt; self
+
+[C-4-2] A Union can have at most one default UnionMember instance.
+context Union inv:
+self.allFeatures-&gt;select(isDefault)-&gt;size &lt;= 1
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== DataTypes.org.omg.xmi.namespace=CWM [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.878'
+ name = 'org.omg.xmi.namespace=CWM' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a38207A4E0308' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWM</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== DataTypes.org.omg.mof.idl_prefix=org.omg.cwm.foundation [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.879'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.foundation' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a38207A4E0308' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.foundation</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== DataTypes.org.omg.mof.idl_substitute_name=DataTypesModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.880'
+ name = 'org.omg.mof.idl_substitute_name=DataTypesModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a38207A4E0308' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>DataTypesModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== DataTypes.com.urep.jcr.java_prefix=org.omg.java.cwm.foundation [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.881'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.foundation' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a38207A4E0308' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.foundation</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.882'
+ name = 'Core' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6600C5031F' />
+ <!-- ==================== DataTypes.Enumeration [Class] ==================== -->
+ <Model:Class xmi.id = 'a376ACDB70218'
+ name = 'Enumeration'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3298A036025B' >
+ <Model:ModelElement.annotation>The Enumeration class is intended as a starting point from which enumerated data types can be created. An enumerated data type is a collection of identifiers often used as the permitted states that some other attribute or property of the enumerated type may take.
+
+The isOrdered attribute of an Enumeration instance is used to determine if the ordered constraint on the EnumerationLiterals association is relevant for the enumeration. The particular ordering of EnumerationLiteral instances is obtained from the ordered constraint on the association even if the value attributes of the EnumerationLiteral instances contain non-null values that might be used to determine ordering. This is done to provide more flexible ordering semantics.
+
+An instance of Enumeration is also required to create a range data type. Refer to the EnumerationLiteral class for details.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== DataTypes.Enumeration.isOrdered [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a376ACDDB01BA'
+ name = 'isOrdered'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:ModelElement.annotation>If True, the ordered constraint on the EnumerationLiterals association is relevant. Otherwise, the ordering of EnumerationLiteral instances is considered unspecified.
+</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== DataTypes.Enumeration.literal [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a385FF93E002C'
+ name = 'literal' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a375EF35D035C'
+ referencedEnd = 'a3820BC8B003B' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== DataTypes.EnumerationLiteral [Class] ==================== -->
+ <Model:Class xmi.id = 'a375EF35D035C'
+ name = 'EnumerationLiteral'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>EnumerationLiteral instances describe the enumeration identifiers, and possibly the
+values, associated with an enumerated data type. Enumeration identifiers are contained
+in the name attribute derived from the EnumerationLiteral instance&#x0092;s ModelElement superclass.
+
+EnumerationLiteral instances may also be used to define expression-based values such as ranges. To do so, simply state the membership expression in the instance&#x0092;s value. For example, a range literal can be created by setting the value attribute to "m..n", where m represents the lower bound of the range, and n, the upper bound. In this way, ranges and other more complicated expressions can be intermixed with simple
+enumeration literals. For example, an enumeration might contain the literals "1", "2", "4..7", and "&gt; 10".
+
+Consequently, a simple range data type can be created with an Enumeration instance that owns a single EnumerationLiteral instance. For example, a data type for positive integers could be created as shown in the following instance diagram. A model attribute of this data type might then be declared as "posInt : PositiveInteger".</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== DataTypes.EnumerationLiteral.value [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a375EF5F602FE'
+ name = 'value' annotation = 'The value associated with an enumeration identifier can be stored here. The attribute is optional because enumeration literals are not required to have a specific, displayable value. This is indicated by either an empty value attribute or a value attribute value whose expression body attribute is a zero-length string.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33CFA00203A2' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== DataTypes.EnumerationLiteral.enumeration [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a385FF99302DB'
+ name = 'enumeration' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a376ACDB70218'
+ referencedEnd = 'a3820BC8B003A' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== DataTypes.org.omg.IDL Substitute Name=umlValue [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.883'
+ name = 'org.omg.IDL Substitute Name=umlValue' annotation = ''
+ tagId = 'org.omg.IDL Substitute Name'
+ elements = 'a375EF5F602FE' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>umlValue</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== DataTypes.QueryExpression [Class] ==================== -->
+ <Model:Class xmi.id = 'a3702A52C0196'
+ name = 'QueryExpression' annotation = 'QueryExpression instances contain query statements in language-dependent form.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a363559050190' />
+ <!-- ==================== DataTypes.org.omg.CORBA Declaration=typedef Foundation.DataTypes.ProcedureExpression QueryExpression; [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.884'
+ name = 'org.omg.CORBA Declaration=typedef Foundation.DataTypes.ProcedureExpression QueryExpression;' annotation = ''
+ tagId = 'org.omg.CORBA Declaration'
+ elements = 'a3702A52C0196' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>typedef Foundation.DataTypes.ProcedureExpression QueryExpression;</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== DataTypes.TypeAlias [Class] ==================== -->
+ <Model:Class xmi.id = 'a3731C90A00AA'
+ name = 'TypeAlias' annotation = 'The TypeAlias class is intended to provide a renaming capability for Classifier instances. This class is required to support situations in which creation of an alias for a class effectively creates a new class. For example, CORBA IDL type aliases have different typeCodes than their base types and are therefore treated as distinct types.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3298A036025B' >
+ <Model:Namespace.contents>
+ <!-- ==================== DataTypes.TypeAlias.type [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a385FF9610107'
+ name = 'type' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32989FB2023D'
+ referencedEnd = 'a3820BB3D0357' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== DataTypes.Union [Class] ==================== -->
+ <Model:Class xmi.id = 'a3702894E0157'
+ name = 'Union'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a32989FB2023D' >
+ <Model:ModelElement.annotation>The Union class represents programming language unions and similarly structured data types. Because of the diversity of union semantics found across software systems, the Union and UnionMember classes are likely candidates for specialization to better capture union semantics in specific language extension packages.
+
+A discriminated Union has a collection of UnionMembers that determine the sets of contents that the Union may contain. Such Unions have an attribute called the discriminator that identifies the memberCase value of the UnionMember that the Union currently contains. The discriminator is found via the UnionDiscriminator association to StructuralFeature. The discriminator may be embedded within UnionMembers or may be located outside the discriminator. If it is located within UnionMembers, the discriminator should occur in every UnionMember at the same location (often, the first).
+
+Undiscriminated unions (for example, a C language union) are also supported, but have an empty discriminator reference, and the memberCase attribute of the UnionMembers it contains is ignored.
+
+Undiscriminated Unions are often used to represent alternate views of a single physical
+storage area. A fine degree of control over this aspect of Unions may be obtained by
+creating a class that derives from both UnionMember and FixedOffsetField (in the
+CWM Record package) and setting the offset attribute instances of that class
+accordingly.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== DataTypes.Union.discriminator [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a385FF90D008A'
+ name = 'discriminator' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3298F1A403BF'
+ referencedEnd = 'a3820BC930088' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== DataTypes.org.omg.mof.idl_substitute_name=CwmUnion [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.885'
+ name = 'org.omg.mof.idl_substitute_name=CwmUnion' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a3702894E0157' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CwmUnion</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== DataTypes.UnionMember [Class] ==================== -->
+ <Model:Class xmi.id = 'a37028B93006D'
+ name = 'UnionMember'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3A6F62780143' >
+ <Model:ModelElement.annotation>UnionMembers are described as features of a Union and each represents one of the members of a Union. Note, however, that multiple case values can map to a single UnionMember. If isDefault is true, the union member is the default member.
+
+UnionMember instances are allowed to have a memberCase and be the default case. UnionMember instances often represent structured storage areas. A particular UnionMember may be associated with a Classifier that describes its internal structure via the StructuralFeatureType association (defined in the ObjectModel::Core package). For example, the Record::Group class, itself a Classifier, can be used as the type of a UnionMember in a manner completely analogous to how it is used to describe the type of a structured field (see the instance diagrams in the Record metamodel chapter for details).</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== DataTypes.UnionMember.memberCase [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37028BB501E4'
+ name = 'memberCase' annotation = 'Contains the value of the Union&#x0092;s discriminator for this UnionMember.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33CFA00203A2' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== DataTypes.UnionMember.isDefault [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37028BF600AB'
+ name = 'isDefault' annotation = 'Indicates if this UnionMember is the default member of the Union (implying that when unstated, the Union&#x0092;s discriminator would assume this instance&#x0092;s memberCase value).'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== DataTypes.ClassifierAlias [Association] ==================== -->
+ <Model:Association xmi.id = 'a3820BB3C01D0'
+ name = 'ClassifierAlias' annotation = 'The ClassifierAlias association connects TypeAlias instances with the Classifier instances which they rename.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3820BB3D0357'
+ name = 'type' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a32989FB2023D' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3820BB3D0395'
+ name = 'alias' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3731C90A00AA' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== DataTypes.EnumerationLiterals [Association] ==================== -->
+ <Model:Association xmi.id = 'a3820BC8A0097'
+ name = 'EnumerationLiterals'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:ModelElement.annotation>The EnumerationLiterals association links enumeration literals to the Enumeration instances that contain them.
+
+If the Enumeration&#x0092;s isOrdered attribute is True, the ordering constraint on the association is relevant. Otherwise, it is ignored.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3820BC8B003A'
+ name = 'enumeration' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a376ACDB70218' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3820BC8B003B'
+ name = 'literal' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a375EF35D035C' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== DataTypes.UnionDiscriminator [Association] ==================== -->
+ <Model:Association xmi.id = 'a3820BC920097'
+ name = 'UnionDiscriminator'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:ModelElement.annotation>The UnionDiscriminator association connects a Union instance with the StructuralFeature instance that can be used to determine which UnionMember instance is currently present in the Union instance. This "discriminating" attribute may be a feature of the UnionMembers themselves or may be a feature of some Classifier that contains the Union instance as one of its Features. In the former case, the
+discriminating feature will usually be present at the same offset in each UnionMember instance. If the discriminator reference is empty for a particular Union instance, it is considered to be an "undiscriminated" Union and determination of the current UnionMember residing in the Union is usage-defined.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3820BC930088'
+ name = 'discriminator' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3298F1A403BF' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3820BC9300C6'
+ name = 'discriminatedUnion' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3702894E0157' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== Expressions [Package] ==================== -->
+<Model:Package xmi.id = 'a38207A600078'
+ name = 'Expressions'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>The Expressions package depends on the following packages:
+
+ org.omg::CWM::ObjectModel::Core
+
+The CWM Expressions metamodel provides basic support for the definition of expression trees within the CWM. The intent of the Expressions metamodel is to provide a place for other CWM packages (such as Transformation) and CWM compliant tools to record shared expressions in a common form that can be used for interchange and lineage tracking.
+
+The expression concept in the CWM Foundation takes a functional view of expression trees, resulting in the ability of relatively few expression types to represent a broad range of expressions. Every function or traditional mathematical operator that appears in an expression hierarchy is represented as a FeatureNode. For example, the arithmetic plus operation &#x0093;a + b&#x0094; can be thought of as the function &#x0093;sum(a, b).&#x0094; The semantics of a particular function or operation are left to specific tool implementations and are not captured by the CWM.
+
+The hierarchical nature of the CWM&#x0092;s representation of expressions is achieved by the recursive nature of the OperationArgument association. This association allows the sub-hierarchies within an expression to be treated as actual parameters of their parent nodes.
+
+OCL Representation of Expressions Constraints
+
+[C-5-1] A FeatureNode that has parameters other than the"this" parameter represents a Feature that is also an Operation.
+context FeatureNode inv:
+if self.feature.ownerScope = #instance
+then self.argument-&gt;size &gt; 1 implies
+ self.feature.oclIsKindOf(Operation)
+else self.argument-&gt;size &gt; 0 implies
+ self.feature.oclIsKindOf(Operation)
+endif
+
+[C-5-2] If the FeatureNode represents an instance-scope feature, the first argument is a "this" or "self" argument; that is, the object invoking the feature. The convention is enforced by checking that the type of the first argument is the same as the type of the feature.
+context FeatureNode inv:
+self.feature.ownerScope = #instance implies
+self.argument-&gt;first.type.allFeatures-&gt;includes(self.feature)
+
+[C-5-3] If the FeatureNode represents a BehavioralFeature, the number of arguments must be equal to the number of the BehavioralFeature&#x0092;s parameters, plus one for the &#x0093;this&#x0094; parameter if the BehavioralFeature is of instance scope.
+context FeatureNode inv:
+self.feature.oclIsKindOf(BehavioralFeature) implies
+(if self.feature.ownerScope = #instance
+ then self.argument-&gt;size =
+ self.feature.oclAsType(BehavioralFeature).parameters-&gt;size + 1
+ else self.argument-&gt;size =
+ self.feature.oclAsType(BehavioralFeature).parameters-&gt;size
+endif)</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Expressions.org.omg.xmi.namespace=CWM [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.886'
+ name = 'org.omg.xmi.namespace=CWM' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a38207A600078' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWM</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Expressions.org.omg.mof.idl_prefix=org.omg.cwm.foundation [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.887'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.foundation' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a38207A600078' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.foundation</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Expressions.org.omg.mof.idl_substitute_name=ExpressionsModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.888'
+ name = 'org.omg.mof.idl_substitute_name=ExpressionsModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a38207A600078' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>ExpressionsModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Expressions.com.urep.jcr.java_prefix=org.omg.java.cwm.foundation [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.889'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.foundation' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a38207A600078' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.foundation</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.890'
+ name = 'Core' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6600C5031F' />
+ <!-- ==================== Expressions.ExpressionNode [Class] ==================== -->
+ <Model:Class xmi.id = 'a376A84310237'
+ name = 'ExpressionNode'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C330208' >
+ <Model:ModelElement.annotation>All node types within an expression are derived from the ExpressionNode type.
+
+An expression is stored as a collection of instances of the subtypes of ExpressionNode arranged in a hierarchical fashion. The ExpressionNode instance at the top (or &#x0093;root&#x0094;) of the hierarchy represents the value of the expression and serves as a starting point for expression evaluation. Refer to the descriptions of the subtypes of ExpressionNode (ElementNode, ConstantNode, and FeatureNode) for additional information about the representation of expressions.
+
+One important purpose for providing storage of expressions as a general feature of the CWM is to promote sharing them between tools and to provide a means for recording lineage relationships between components within expressions. Specific details of the implementation of expression operators are left to the implementing tools.
+
+When ExpressionNode is used as the type of an Attribute, an instance of the Attribute can contain either an expression tree as described here or a textual representation of the expression in body and language values of in an attribute of type Expression (defined ObjectModel). The expression attribute is provided for the latter usage. To obtain CWM&#x0092;s sharing and lineage tracking features for elements within an expression, the expression must be represented as an expression hierarcy.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Expressions.ExpressionNode.expression [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a38A0ECA10399'
+ name = 'expression' annotation = 'Contains a textual representation of the expression relevant for this ExpressionNode instance.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33CFA00203A2' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Expressions.ExpressionNode.featureNode [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a386003C903A7'
+ name = 'featureNode' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a376A84D70341'
+ referencedEnd = 'a3820C1610059' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Expressions.ExpressionNode.type [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3860038F01F1'
+ name = 'type' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32989FB2023D'
+ referencedEnd = 'a3820BFAC02AB' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Expressions.ConstantNode [Class] ==================== -->
+ <Model:Class xmi.id = 'a376A84C202B4'
+ name = 'ConstantNode' annotation = 'Instances of the ConstantNode class are ExpressionNodes that represent constant values within expressions. Appropriate uses of the ConstantNode class place the values of constants in the value attribute, rather than in the expression::body attribute inherited from ExpressionNode. The latter attribute is intended for a different purpose; see the description of the ExpressionNode class for details.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a376A84310237' >
+ <Model:Namespace.contents>
+ <!-- ==================== Expressions.ConstantNode.value [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a376A853C01E9'
+ name = 'value' annotation = 'The value of a constant in an expression tree.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a37AB1FF90221' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Expressions.org.omg.IDL Substitute Name=umlValue [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.891'
+ name = 'org.omg.IDL Substitute Name=umlValue' annotation = ''
+ tagId = 'org.omg.IDL Substitute Name'
+ elements = 'a376A853C01E9' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>umlValue</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Expressions.ElementNode [Class] ==================== -->
+ <Model:Class xmi.id = 'a376A84CD0321'
+ name = 'ElementNode'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a376A84310237' >
+ <Model:ModelElement.annotation>An ElementNode is a node in an expression that references some ModelElement instance. This subclass of ExpressionNode allows an expression to reference any CWM model element that is not a Feature and cannot, therefore, be represented as a FeatureNode.
+
+Typically, use of this subclass of ExpressionNode implies that a tool attempting to evaluate the expression will be able to determine if the referenced ModelElement instance is also an instance of some interesting subclass of ModelElement that contains a value of interest in the expression.
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Expressions.ElementNode.modelElement [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3860032D02EB'
+ name = 'modelElement' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5C7301CC'
+ referencedEnd = 'a3820C1EC0069' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Expressions.FeatureNode [Class] ==================== -->
+ <Model:Class xmi.id = 'a376A84D70341'
+ name = 'FeatureNode'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a376A84310237' >
+ <Model:ModelElement.annotation>The FeatureNode class represents ExpressionNode instances that are features (i.e., attributes or operations) of some Classifier instance within the CWM.
+
+A FeatureNode with a null OperationArgument association represents either a parameter-less operation or an attribute value obtained from some StructuralFeature instance.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Expressions.FeatureNode.argument [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a386003E6025E'
+ name = 'argument' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a376A84310237'
+ referencedEnd = 'a3820C161005A' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Expressions.FeatureNode.feature [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a386003F80201'
+ name = 'feature' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32989F9700FE'
+ referencedEnd = 'a3820C03B00B7' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Expressions.ExpressionNodeClassifier [Association] ==================== -->
+ <Model:Association xmi.id = 'a3820BFAA024D'
+ name = 'ExpressionNodeClassifier' annotation = 'The ExpressionNodeClassifier association identifies the type of an ExpressionNode instance.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3820BFAC02AB'
+ name = 'type' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a32989FB2023D' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3820BFAC02E9'
+ name = 'expressionNode' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a376A84310237' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Expressions.NodeFeature [Association] ==================== -->
+ <Model:Association xmi.id = 'a3820C03902E9'
+ name = 'NodeFeature' annotation = 'The NodeFeature association identifies the Feature (usually, an Attribute or Operation subtype) that FeatureNode represents.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3820C03B00B7'
+ name = 'feature' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a32989F9700FE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3820C03B00C6'
+ name = 'featureNode' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a376A84D70341' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Expressions.OperationArgument [Association] ==================== -->
+ <Model:Association xmi.id = 'a3820C15E0153'
+ name = 'OperationArgument'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:ModelElement.annotation>The OperationArgument association identifies and orders the actual arguments of an Operation indicated by the FeatureNode end of the association. This association is meaningful only if the FeatureNode references, via the NodeFeature association, a Feature that is also an Operation. The association is not meaningful under other
+circumstances.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3820C1610059'
+ name = 'featureNode' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a376A84D70341' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3820C161005A'
+ name = 'argument' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a376A84310237' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Expressions.ReferencedElement [Association] ==================== -->
+ <Model:Association xmi.id = 'a3820C1EA0088'
+ name = 'ReferencedElement' annotation = 'The ReferencedElement association links the ElementNode instances of an expression with the ModelElement instances to which they refer.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3820C1EC0069'
+ name = 'modelElement' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327A5C7301CC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3820C1EC0134'
+ name = 'elementNode' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a376A84CD0321' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== KeysIndexes [Package] ==================== -->
+<Model:Package xmi.id = 'a38207A680191'
+ name = 'KeysIndexes'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>The KeysIndexes package depends on the following package:
+
+ org.omg::CWM::ObjectModel::Core
+
+Keys and indexes as means for specifying instances and for identifying alternate sortings of instances are epresented in the CWMFoundation so that they can be shared among the various data models that employ hem. The CWM Foundation defines the base concepts (uniqueness and relationships implemented as keys) pon which more specific key structures can be built by other CWM and tool-specific packages.
+
+The concepts of key and index have been placed in the CWM Foundation because they are available in many types of data resources. In the CWM Foundation class and association descriptions that follow, relational model examples are frequently used when discussing the definition and usage of key and index types. This is done because of the wide-spread availability of relational systems and is thought to promote an understanding of the underlying concepts. These concepts, however, are no less applicable to other data models as well.
+
+The two central classes for representing the concept of keys are UniqueKey and KeyRelationship. UniqueKey instances correspond to the notion that keys represent the identity of instances -- similar to the relational model&#x0092;s concept of a primary key or an object model&#x0092;s concept of an object identity. In contrast, KeyRelationship instancescorrespond to the notion that keys embedded in an instance can be used to determine the identity of other related instances -- similar to the relational model concept of foreign key and the object model concept of a reference. Consequently, UniqueKey and KeyRelationship are best thought of as representing roles that collections of Features of Classifiers play rather than Classifiers describing the internal structure of keys. Representing keys as roles rather than structural entities provides greater flexibility and allows the reuse of Features in multiple keys and in differing relationships to each other. Associations within the KeysIndexes package describe how UniqueKey and KeyRelationship instances describe the roles they play for various
+Class instances and the StructuralFeature instances they contain.
+
+OCL Representation of KeysIndexes Constraints
+
+[C-6-1]The isAscending attribute is valid only if the isSorted attribute is True.
+context IndexedFeature inv:
+self.isAscending-&gt;notEmpty implies self.index.isSorted
+
+[C-6-2] A KeyRelationship instance must be owned by one and only one Class
+instance.
+context KeyRelationship inv:
+(self.namespace-&gt;size = 1) and self.namespace.oclIsKindOf(Class)
+
+[C-6-3] An UniqueKey instance must be owned by one and only one Class instance.
+context UniqueKey inv:
+(self.namespace-&gt;size = 1) and self.namespace.oclIsKindOf(Class)</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== KeysIndexes.org.omg.xmi.namespace=CWM [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.892'
+ name = 'org.omg.xmi.namespace=CWM' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a38207A680191' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWM</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== KeysIndexes.org.omg.mof.idl_prefix=org.omg.cwm.foundation [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.893'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.foundation' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a38207A680191' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.foundation</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== KeysIndexes.org.omg.mof.idl_substitute_name=KeysIndexesModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.894'
+ name = 'org.omg.mof.idl_substitute_name=KeysIndexesModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a38207A680191' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>KeysIndexesModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== KeysIndexes.com.urep.jcr.java_prefix=org.omg.java.cwm.foundation [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.895'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.foundation' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a38207A680191' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.foundation</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.896'
+ name = 'Core' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6600C5031F' />
+ <!-- ==================== KeysIndexes.UniqueKey [Class] ==================== -->
+ <Model:Class xmi.id = 'a376A879E0072'
+ name = 'UniqueKey' annotation = 'A UniqueKey represents a collection of features of some Class that, taken together, uniquely identify instances of the Class. Instances of UniqueKey for which all features are required to have non-null values are candidates for use as primary keys such as those defined by relational DBMSs.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:Namespace.contents>
+ <!-- ==================== KeysIndexes.UniqueKey.feature [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a386000FD005B'
+ name = 'feature' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3298F1A403BF'
+ referencedEnd = 'a3821C10F024D' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== KeysIndexes.UniqueKey.keyRelationship [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3860012B02FB'
+ name = 'keyRelationship' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a376A8A6E00C0'
+ referencedEnd = 'a385FCF640358' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== KeysIndexes.Index [Class] ==================== -->
+ <Model:Class xmi.id = 'a376A89040331'
+ name = 'Index'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>Instances of the Index class represent the ordering of the instances of some other Class, and the Index is said to "span" the Class. Indexes normally have an ordered set of attributes of the Class instance they span that make up the "key" of the index; this set of relationships is represented by the IndexedFeature class that indicates how the attributes are used by the Index instance.
+
+The Index class is intended primarily as a starting point for tools that require the notion
+of an index.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== KeysIndexes.Index.isPartitioning [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3810E45B0325'
+ name = 'isPartitioning' annotation = 'If True, this Index instance is used as a partitioning index.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== KeysIndexes.Index.isSorted [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3872623800F5'
+ name = 'isSorted' annotation = 'If True, the Index instance is maintained in a sorted order.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== KeysIndexes.Index.isUnique [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a376A894C02A4'
+ name = 'isUnique' annotation = 'The isUnique attribute is True if the Index instance guarantees all of its instances have a unique key value.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== KeysIndexes.Index.indexedFeature [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a385FFFCD03E5'
+ name = 'indexedFeature' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a377BD3F9017F'
+ referencedEnd = 'a3820C91E0366' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== KeysIndexes.Index.spannedClass [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38987E5C0212'
+ name = 'spannedClass' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3298A02900FE'
+ referencedEnd = 'a38987D150370' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== KeysIndexes.KeyRelationship [Class] ==================== -->
+ <Model:Class xmi.id = 'a376A8A6E00C0'
+ name = 'KeyRelationship' annotation = 'KeyRelationship instances represent relationships between UniqueKey instances and the Class(es) that reference them. This class is intended as a starting point for the creation of "foreign key" and other associative relationships.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:Namespace.contents>
+ <!-- ==================== KeysIndexes.KeyRelationship.feature [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3860015E03C6'
+ name = 'feature' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3298F1A403BF'
+ referencedEnd = 'a3821BFAA028B' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== KeysIndexes.KeyRelationship.uniqueKey [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3860017A00E7'
+ name = 'uniqueKey' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a376A879E0072'
+ referencedEnd = 'a385FCF640387' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== KeysIndexes.IndexedFeature [Class] ==================== -->
+ <Model:Class xmi.id = 'a377BD3F9017F'
+ name = 'IndexedFeature' annotation = 'Instances of the IndexedFeature class map StructuralFeature instances of the spanned Class instance to the Index instances that employ them as (part of) their key. Attributes of IndexedFeature instances indicate how specific StructuralFeature instance are used in Index keys.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:Namespace.contents>
+ <!-- ==================== KeysIndexes.IndexedFeature.isAscending [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3783CCCC02C3'
+ name = 'isAscending' annotation = 'The isAscending attribute is true if the feature is sorted in ascending order and false, if descending order.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== KeysIndexes.IndexedFeature.feature [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38600014001C'
+ name = 'feature' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3298F1A403BF'
+ referencedEnd = 'a3820C7FF01C0' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== KeysIndexes.IndexedFeature.index [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a385FFFFA001C'
+ name = 'index' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a376A89040331'
+ referencedEnd = 'a3820C91E0357' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== KeysIndexes.IndexedFeatures [Association] ==================== -->
+ <Model:Association xmi.id = 'a3820C7FD0308'
+ name = 'IndexedFeatures' annotation = 'The IndexedFeatures association links StructuralFeature instances to information about how they participate in the keys of Index instances.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3820C7FF01C0'
+ name = 'feature' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3298F1A403BF' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3820C7FF01E0'
+ name = 'indexedFeature' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a377BD3F9017F' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== KeysIndexes.IndexedFeatureInfo [Association] ==================== -->
+ <Model:Association xmi.id = 'a3820C91B0172'
+ name = 'IndexedFeatureInfo' annotation = 'The IndexedFeatureInfo association connects an Index instance to information about how the StructuralFeature instances that are constituents of the Index&#x0092;s key are used by the Index.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3820C91E0357'
+ name = 'index' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a376A89040331' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3820C91E0366'
+ name = 'indexedFeature' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a377BD3F9017F' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== KeysIndexes.KeyRelationshipFeatures [Association] ==================== -->
+ <Model:Association xmi.id = 'a3821BFA401E0'
+ name = 'KeyRelationshipFeatures'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:ModelElement.annotation>The KeyRelationshipFeatures association links KeyRelationship instances with the
+StructuralFeature instances that comprise their key.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3821BFAA028B'
+ name = 'feature' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3298F1A403BF' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3821BFAA02AB'
+ name = 'keyRelationship' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a376A8A6E00C0' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== KeysIndexes.UniqueFeature [Association] ==================== -->
+ <Model:Association xmi.id = 'a3821C10C00B7'
+ name = 'UniqueFeature' annotation = 'The UniqueFeature association identifies the Feature instances of a Class instance that confer uniqueness. The ordered constraint is used to determine the order of StructuralFeature instances in the UniqueKey instance.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3821C10F024D'
+ name = 'feature' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3298F1A403BF' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3821C10F026C'
+ name = 'uniqueKey' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a376A879E0072' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== KeysIndexes.UniqueKeyRelationship [Association] ==================== -->
+ <Model:Association xmi.id = 'a385FCF6300E7'
+ name = 'UniqueKeyRelationship' annotation = 'The UniqueKeyRelationship association links a KeyRelationship with the UniqueKey with which it is paired. For example, in relational model terms, this association links a foreign key -- the KeyRelationship instance -- with the primary key -- the UniqueKey instance -- with which it is paired.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a385FCF640358'
+ name = 'keyRelationship' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a376A8A6E00C0' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a385FCF640387'
+ name = 'uniqueKey' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a376A879E0072' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== KeysIndexes.IndexSpansClass [Association] ==================== -->
+ <Model:Association xmi.id = 'a38987D1203CA'
+ name = 'IndexSpansClass' annotation = 'Associates indexes with the classes they span. This relationship is separate from the ownership of indexes, to allow modeling of systems where an index is NOT owned by the object it spans. In most situations, however, the spanned and owning Class instances will be the same.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a38987D150370'
+ name = 'spannedClass' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3298A02900FE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a38987D1503AC'
+ name = 'index' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a376A89040331' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== SoftwareDeployment [Package] ==================== -->
+<Model:Package xmi.id = 'a3731C42F0314'
+ name = 'SoftwareDeployment'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>The Software Deployment package depends on the following packages:
+
+ org.omg::CWM::ObjectModel::Core
+ org.omg::CWM::Foundation::BusinessInformation
+ org.omg::CWM::Foundation::TypeMapping
+
+The Software Deployment package contains classes to record how the software in a data warehouse is used.
+
+A software package is represented as a SoftwareSystem object, which is a subtype of Subsystem. A SoftwareSystem may reference one or more TypeSystems that define the datatypes supported by the SoftwareSystem. The mappings between datatypes in different TypeSystems may be recorded as TypeMappings, as described in the TypeMapping metamodel.
+
+The separate components of a software package are each represented as Components that are either owned or imported by the SoftwareSystem. When a SoftwareSystem is installed, the deployment is recorded as a DeployedSoftwareSystem and a set of DeployedComponents.
+
+A DeployedComponent represents the deployment of a specific Component on a specific computer. Dependencies between DeployedComponents on the same computer may be documented as Usage dependencies between them.
+
+Individual computers are represented as Machine objects, located at a Site. A Site represents a geographical location, which may be recorded at any relevant level of granularity, e.g. a country, a building, or a room in a building. Hierarchical links between Sites at different levels of granularity may be documented.
+
+A DataManager is a DeployedComponent such as a DBMS or file management system that provides access to data. It may be associated with one or more data Packages identifying the Schema, Relational Catalog, Files or other data containers that it provides access to.
+
+A DataProvider is a DeployedComponent that acts as a client to provide access to data held by a DataManager. For example, an ODBC or JDBC client on a specific Machine would be represented as a DataProvider. A DataProvider may have several ProviderConnections, each identifying a DataManager that may be accessed using the DataProvider.
+
+If a DataProvider uses a name for a data Package that is different from the actual name used by the DataManager, a PackageUsage object can be added to record this.
+
+As a DataProvider is a subtype of DataManager, it is possible for a DataProvider to access data from a DataManager which is actually a DataProvider acting as a client to yet another DataManager.
+
+The model for the Software Deployment package is shown in three diagrams. The first diagram shows the objects related to software deployment, while the second diagram displays the DataManager and DataProvider area of the model. The third diagram shows the inheritance structure for all the classes in the Software Deployment package.
+
+OCL Representation of SoftwareDeployment Constraints
+
+[C-8-1] A PackageUsage must have a single Package (or subtype of Package) as its supplier
+context PackageUsage inv:
+self.supplier-&gt;size=1 and
+self.supplier-&gt;at(1).oclIsKindOf(Package)
+
+[C-8-2] A ProviderConnection must not associate a DataProvider with itself
+context ProviderConnection inv:
+self.dataManager &lt;&gt; self.dataProvider
+
+[C-8-3] A Site must not have a containingSite reference that refers to itself.
+context Site inv:
+self.containingSite -&gt; forAll (c | c &lt;&gt; self)</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== SoftwareDeployment.org.omg.mof.idl_prefix=org.omg.cwm.foundation [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.897'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.foundation' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a3731C42F0314' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.foundation</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== SoftwareDeployment.org.omg.xmi.namespace=CWM [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.898'
+ name = 'org.omg.xmi.namespace=CWM' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a3731C42F0314' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWM</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== SoftwareDeployment.org.omg.mof.idl_substitute_name=SoftwareDeploymentModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.899'
+ name = 'org.omg.mof.idl_substitute_name=SoftwareDeploymentModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a3731C42F0314' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>SoftwareDeploymentModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== SoftwareDeployment.com.urep.jcr.java_prefix=org.omg.java.cwm.foundation [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.900'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.foundation' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a3731C42F0314' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.foundation</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.901'
+ name = 'Core' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6600C5031F' />
+ <Model:Import xmi.id = 'G.902'
+ name = 'BusinessInformation' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a38207A770114' />
+ <Model:Import xmi.id = 'G.903'
+ name = 'TypeMapping' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3817221D01F4' />
+ <!-- ==================== SoftwareDeployment.Site [Class] ==================== -->
+ <Model:Class xmi.id = 'a3731C5690320'
+ name = 'Site'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3731CF0A02C6' >
+ <Model:ModelElement.annotation>A Site represents a geographical location. It provides a grouping mechanism for a group of machines at the same location.
+
+Sites may be documented at different levels of granularity; containment links may be used to record hierarchical relationships between Sites.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== SoftwareDeployment.Site.containingSite [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38736FB503CE'
+ name = 'containingSite' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3731C5690320'
+ referencedEnd = 'a374030990232' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== SoftwareDeployment.Machine [Class] ==================== -->
+ <Model:Class xmi.id = 'a3731C5D500A4'
+ name = 'Machine' annotation = 'A Machine represents a computer. The Site at which the Machine is located and the Components deployed on the Machine may be recorded.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a32B69F3A0118' >
+ <Model:Namespace.contents>
+ <!-- ==================== SoftwareDeployment.Machine.ipAddress [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3826AA4C0382'
+ name = 'ipAddress' annotation = 'A fixed IP address for the Machine.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== SoftwareDeployment.Machine.hostName [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A59ED87037F'
+ name = 'hostName' annotation = 'A Host Name for the Machine. This may be used to identify the Machine on the network when IP addresses are dynamically allocated.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== SoftwareDeployment.Machine.machineID [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A59EE9E00FF'
+ name = 'machineID' annotation = 'An identification code for the Machine.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== SoftwareDeployment.Machine.site [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38721E760014'
+ name = 'site' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3731C5690320'
+ referencedEnd = 'a37668AC7031C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== SoftwareDeployment.Machine.deployedComponent [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a387242270257'
+ name = 'deployedComponent' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3731C67B0071'
+ referencedEnd = 'a3766779B0281' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== SoftwareDeployment.SoftwareSystem [Class] ==================== -->
+ <Model:Class xmi.id = 'a3731C5FD0337'
+ name = 'SoftwareSystem' annotation = 'A SoftwareSystem represents a specific release of a software product. It consists of a set of software Components.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a33CD6DE5030C' >
+ <Model:Namespace.contents>
+ <!-- ==================== SoftwareDeployment.SoftwareSystem.type [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A59F2CF036F'
+ name = 'type'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:ModelElement.annotation>Identifies the type of the software product. One of the following predefined values should be used if appropriate:
+
+ OS, DBMS, MDDB, FileSystem, ODBC, JDBC or Application.</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== SoftwareDeployment.SoftwareSystem.subtype [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A59F32B019A'
+ name = 'subtype'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:ModelElement.annotation>This is used in conjunction with the type attribute to provide additional information about the type of the software product.
+
+For some of the predefined types, suggested subtype values are listed below:
+
+ For an Operating System product (type OS):
+ AIX, Linux, MVS, NT, Solaris, SunOS, VMS or Windows.
+ For a Database Management System product (type DBMS):
+ DB2, DMS II, IMS, Informix, Oracle, SQLServer or Sybase.
+ For a Multidimensional Database product (type MDDB):
+ Essbase or Express.</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== SoftwareDeployment.SoftwareSystem.supplier [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3742DD1A036B'
+ name = 'supplier' annotation = 'The supplier of the software product.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== SoftwareDeployment.SoftwareSystem.version [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3731C95F004E'
+ name = 'version' annotation = 'The version identification for the software product.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== SoftwareDeployment.SoftwareSystem.typespace [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a387222B10043'
+ name = 'typespace' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a38173AAE02EE'
+ referencedEnd = 'a38188310007D' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== SoftwareDeployment.DeployedComponent [Class] ==================== -->
+ <Model:Class xmi.id = 'a3731C67B0071'
+ name = 'DeployedComponent'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5D19033E' >
+ <Model:ModelElement.annotation>A DeployedComponent represents the deployment of a Component on a specific Machine.
+
+It may represent the deployment of any type of Component. However, if the Component is part of a SoftwareSystem, the DeployedComponent should be part of a DeployedSoftwareSystem.
+
+Usage dependencies may be used to document that one DeployedComponent uses another DeployedComponent.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== SoftwareDeployment.DeployedComponent.pathname [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a381ED68F031A'
+ name = 'pathname' annotation = 'A pathname for the DeployedComponent within the Machine&#x0092;s file system.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== SoftwareDeployment.DeployedComponent.component [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a387213D003C2'
+ name = 'component' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A59C2520149'
+ referencedEnd = 'a3A59C2F600FF' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== SoftwareDeployment.DeployedComponent.machine [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38723FD70292'
+ name = 'machine' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3731C5D500A4'
+ referencedEnd = 'a3766779B0280' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== SoftwareDeployment.DeployedComponent.usingComponents [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3BC625320289'
+ name = 'usingComponents' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3731C67B0071'
+ referencedEnd = 'a3BC619E00056' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== SoftwareDeployment.DeployedComponent.usedComponents [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3BC625420037'
+ name = 'usedComponents' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3731C67B0071'
+ referencedEnd = 'a3BC619E00047' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== SoftwareDeployment.DeployedSoftwareSystem [Class] ==================== -->
+ <Model:Class xmi.id = 'a3795CFCF01CC'
+ name = 'DeployedSoftwareSystem'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5D19033E' >
+ <Model:ModelElement.annotation>A DeployedSoftwareSystem represents a deployment of a SoftwareSystem.
+
+Its associated DeployedComponents identify the individual Component deployments that constitute the DeployedSoftwareSystem. These DeployedComponents are not necessarily all deployed on the same Machine.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== SoftwareDeployment.DeployedSoftwareSystem.fixLevel [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3BB4C90A0302'
+ name = 'fixLevel' annotation = 'Describes the fix level of the DeployedSoftwareSystem instance.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== SoftwareDeployment.DeployedSoftwareSystem.softwareSystem [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3872118C02FF'
+ name = 'softwareSystem' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3731C5FD0337'
+ referencedEnd = 'a3795D55902DA' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== SoftwareDeployment.DataManager [Class] ==================== -->
+ <Model:Class xmi.id = 'a376A2BCD0186'
+ name = 'DataManager'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3731C67B0071' >
+ <Model:ModelElement.annotation>A DataManager represents a DeployedComponent that manages access to data. For example, a deployed DBMS or File Management System would be represented as a DataManager.
+
+The DataManager may be associated with one or more data Packages identifying the Schema, Relational Catalog, Files, or other data container that it provides access to.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== SoftwareDeployment.DataManager.isCaseSensitive [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3826AD6E01D6'
+ name = 'isCaseSensitive' annotation = 'Indicates whether or not the DataManager treats lower case letters within object names as being different from the corresponding upper case letters.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== SoftwareDeployment.DataManager.dataPackage [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38723C70016D'
+ name = 'dataPackage' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5D19033E'
+ referencedEnd = 'a37B2BB3E01AE' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== SoftwareDeployment.DataProvider [Class] ==================== -->
+ <Model:Class xmi.id = 'a37668549009C'
+ name = 'DataProvider'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a376A2BCD0186' >
+ <Model:ModelElement.annotation>A DataProvider is a deployed software Component that acts as a client to provide access to data that is managed by another product. For instance, a DataProvider might represent a deployed ODBC or JDBC product.
+
+The DataProvider may have resourceConnection references to ProviderConnections identifying the DataManagers to which it provides access.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== SoftwareDeployment.DataProvider.resourceConnection [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a387239440206'
+ name = 'resourceConnection' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a378357EA0015'
+ referencedEnd = 'a37835A6E0351' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== SoftwareDeployment.ProviderConnection [Class] ==================== -->
+ <Model:Class xmi.id = 'a378357EA0015'
+ name = 'ProviderConnection' annotation = 'A ProviderConnection represents a connection that allows a DataProvider acting as a client to access data from a specific DataManager. For example a ProviderConnection could represent a connection from an ODBC or JDBC client to a DBMS.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:Namespace.contents>
+ <!-- ==================== SoftwareDeployment.ProviderConnection.isReadOnly [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37836462008D'
+ name = 'isReadOnly' annotation = 'Indicates whether the ProviderConnection only allows read access to the DataManager.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== SoftwareDeployment.ProviderConnection.dataProvider [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38723A6001FA'
+ name = 'dataProvider' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a37668549009C'
+ referencedEnd = 'a37835A6E0350' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== SoftwareDeployment.ProviderConnection.dataManager [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38723AD60178'
+ name = 'dataManager' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a376A2BCD0186'
+ referencedEnd = 'a37835AB201AA' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== SoftwareDeployment.Component [Class] ==================== -->
+ <Model:Class xmi.id = 'a3A59C2520149'
+ name = 'Component'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a32989FB2023D' >
+ <Model:ModelElement.annotation>A Component represents a physical piece of implementation of a system, including software code (source, binary or executable) or equivalents such as scripts or command files. A Component is a subtype of Classifier, and so may have its own Features, such as Attributes and Operations.
+
+Deployment of a Component on a specific Machine is represented as a DeployedComponent.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== SoftwareDeployment.Component.designPackage [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3BC6289D0150'
+ name = 'designPackage' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5D19033E'
+ referencedEnd = 'a3BC6190C03B2' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== SoftwareDeployment.PackageUsage [Class] ==================== -->
+ <Model:Class xmi.id = 'a3A59EFD80363'
+ name = 'PackageUsage'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A646F00E6' >
+ <Model:ModelElement.annotation>A PackageUsage represents a usage of a Package. It is particularly relevant in situations where a specific usage uses an alternative name for the Package, as this alternative name can be recorded using the packageAlias attribute.
+
+For example, if a DataProvider representing an ODBC or JDBC client uses a name for a relational database that is different from the dataPackage name used by the RDBMS server, a PackageUsage that has the relevant ProviderConnection as client and the server&#x0092;s data Package as supplier can be added. Its packageAlias attribute can be used to record the name by which the data Package is known to the DataProvider.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== SoftwareDeployment.PackageUsage.packageAlias [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A59F0E200D1'
+ name = 'packageAlias' annotation = 'If this attribute is present, it identifies the name by which the Package is known to the client.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FCF03C0' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== SoftwareDeployment.RelatedSites [Association] ==================== -->
+ <Model:Association xmi.id = 'a37403089008C'
+ name = 'RelatedSites' annotation = 'This may be used to record hierarchical relationships between Sites.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a374030990232'
+ name = 'containingSite' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3731C5690320' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a374030990233'
+ name = 'containedSite' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3731C5690320' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== SoftwareDeployment.ComponentsOnMachine [Association] ==================== -->
+ <Model:Association xmi.id = 'a3766779A02FD'
+ name = 'ComponentsOnMachine' annotation = 'Identifies the Machine on which a DeployedComponent is deployed.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3766779B0280'
+ name = 'machine' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3731C5D500A4' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3766779B0281'
+ name = 'deployedComponent' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3731C67B0071' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== SoftwareDeployment.SiteMachines [Association] ==================== -->
+ <Model:Association xmi.id = 'a37668AC60399'
+ name = 'SiteMachines' annotation = 'Identifies the Site on which a Machine is located.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a37668AC7031C'
+ name = 'site' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3731C5690320' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a37668AC7031D'
+ name = 'machine' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3731C5D500A4' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== SoftwareDeployment.DataProviderConnections [Association] ==================== -->
+ <Model:Association xmi.id = 'a37835A6C0022'
+ name = 'DataProviderConnections' annotation = 'Identifies the ProviderConnections that a DataProvider acting as a client may use.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a37835A6E0350'
+ name = 'dataProvider' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a37668549009C' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a37835A6E0351'
+ name = 'resourceConnection' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a378357EA0015' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== SoftwareDeployment.DataManagerConnections [Association] ==================== -->
+ <Model:Association xmi.id = 'a37835AB1002C'
+ name = 'DataManagerConnections' annotation = 'Identifies the DataManager that is accessed by a ProviderConnection.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a37835AB201AA'
+ name = 'dataManager' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a376A2BCD0186' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a37835AB201BE'
+ name = 'clientConnection' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a378357EA0015' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== SoftwareDeployment.SoftwareSystemDeployments [Association] ==================== -->
+ <Model:Association xmi.id = 'a3795D5580364'
+ name = 'SoftwareSystemDeployments' annotation = 'Identifies the deployments of a SoftwareSystem.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3795D55902D9'
+ name = 'deployment' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3795CFCF01CC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3795D55902DA'
+ name = 'softwareSystem' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3731C5FD0337' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== SoftwareDeployment.DataManagerDataPackage [Association] ==================== -->
+ <Model:Association xmi.id = 'a37B2BB3B022C'
+ name = 'DataManagerDataPackage'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:ModelElement.annotation>This associates the Package(s) containing the definition of the data with the DataManager that is used to access it.
+
+For example, it may be used to associate a Schema, Relational Catalog or File with the DataManager that manages access to it.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a37B2BB3E01AE'
+ name = 'dataPackage' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327A5D19033E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a37B2BB3E0212'
+ name = 'dataManager' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a376A2BCD0186' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== SoftwareDeployment.DeployedSoftwareSystemComponents [Association] ==================== -->
+ <Model:Association xmi.id = 'a381484320027'
+ name = 'DeployedSoftwareSystemComponents' annotation = 'This association identifies the DeployedComponents that constitute a DeployedSoftwareSystem.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a381484330137'
+ name = 'deployedSoftwareSystem' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3795CFCF01CC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a38148433014B'
+ name = 'deployedComponent' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3731C67B0071' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== SoftwareDeployment.ComponentDeployments [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A59C2F600FE'
+ name = 'ComponentDeployments' annotation = 'This association identifies the deployments of a Component.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A59C2F600FF'
+ name = 'component' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A59C2520149' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A59C2F60100'
+ name = 'deployment' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3731C67B0071' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== SoftwareDeployment.SystemTypespace [Association] ==================== -->
+ <Model:Association xmi.id = 'a3818830E02FD'
+ name = 'SystemTypespace' annotation = 'A SoftwareSystem&#x0092;s typespace identifies the TypeSystem(s) containing the datatypes supported by the SoftwareSystem.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a38188310007D'
+ name = 'typespace' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a38173AAE02EE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3818831000AB'
+ name = 'supportingSystem' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3731C5FD0337' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== SoftwareDeployment.ComponentDesign [Association] ==================== -->
+ <Model:Association xmi.id = 'a3BC6190C0047'
+ name = 'ComponentDesign' annotation = 'This associates Components with the Packages containing their design. Typically this will refrence the logical schema.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3BC6190C03B2'
+ name = 'designPackage' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327A5D19033E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3BC6190D0008'
+ name = 'component' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A59C2520149' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== SoftwareDeployment.DeployedComponentUsage [Association] ==================== -->
+ <Model:Association xmi.id = 'a3BC619DD0141'
+ name = 'DeployedComponentUsage' annotation = 'This links a DeployedComponent to the other DeployedComponents that it uses. Typically this might link a deployed application to the physical databases (instances of DataManager) that it accesses.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3BC619E00047'
+ name = 'usedComponents' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3731C67B0071' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3BC619E00056'
+ name = 'usingComponents' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3731C67B0071' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== TypeMapping [Package] ==================== -->
+<Model:Package xmi.id = 'a3817221D01F4'
+ name = 'TypeMapping'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>The TypeMapping package depends on the following packages:
+
+ org.omg::CWM::ObjectModel::Core
+
+The TypeMapping package supports the mapping of data types between different systems. The purpose of these mappings is to indicate data types in different systems that are sufficiently compatible that data values can be interchanged between them. Multiple mappings are allowed between any pair of types and a means of identifying the preferred mapping is provided.
+
+OCL Representation of TypeMapping Constraints
+
+[C-8-1] The sourceType and targetType references may not refer to the same
+Classifier instance.
+context TypeMapping inv:
+self.sourceType &lt;&gt; self.targetType
+
+[C-8-2] A TypeSystem may own only Classifiers and TypeMappings.
+context TypeSystem inv:
+self.ownedElement-&gt;forAll( e | e.oclIsKindOf(Classifier) or e.oclIsKindOf(TypeMapping))</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== TypeMapping.org.omg.xmi.namespace=CWM [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.904'
+ name = 'org.omg.xmi.namespace=CWM' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a3817221D01F4' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWM</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== TypeMapping.org.omg.mof.idl_prefix=org.omg.cwm.foundation [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.905'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.foundation' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a3817221D01F4' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.foundation</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== TypeMapping.org.omg.mof.idl_substitute_name=TypeMappingModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.906'
+ name = 'org.omg.mof.idl_substitute_name=TypeMappingModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a3817221D01F4' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>TypeMappingModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== TypeMapping.com.urep.jcr.java_prefix=org.omg.java.cwm.foundation [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.907'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.foundation' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a3817221D01F4' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.foundation</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.908'
+ name = 'Core' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6600C5031F' />
+ <!-- ==================== TypeMapping.TypeMapping [Class] ==================== -->
+ <Model:Class xmi.id = 'a3817226403A9'
+ name = 'TypeMapping'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>TypeMapping instances permit the creation of mappings between data types defined within different environments and are used to indicate data type compatibilities that permit direct assignment of values from one environment (the "source" type) into equivalent values in another environment (the "target" type). For example, an integer field data type in a record-oriented DBMS (the source type) might be mapped to a compatible integer data type in a relational DBMS (the target type).
+
+Whereas the actual transfer of data values between environments is accomplished using the CWM&#x0092;s Transformation package, TypeMapping instances can be used the identify both the permissible and preferred mappings between data types. Value interchange between a pair of data types is considered permissible if a TypeMapping instance is defined for the pair. A TypeMapping instance is considered the preferred mapping if the instance&#x0092;s isBestMatch attribute has the value true.
+
+Typically, there will be one TypeMapping Instance between a pair of data types that is considered the preferred mapping. To promote flexible use of this feature, there is no requirement that a preferred TypeMapping instance must be identified between a pair of data types nor are multiple preferred instances prohibited. In these latter cases, however, the precise semantics are usage-defined.
+
+Interchange between data types defined by non-preferred mappings may often function as intended. However, the isLossy boolean may be set to indicate that such interchanges may be subject to validity restrictions in certain circumstances. For example, it may be valid to move data values from a 32-bit integer data type to a 16-bit integer data type as long as the actual values in the 32-bit underlying data type do not exceed the range permitted for 16-bit integers. The CWM Foundation leaves the understanding and handling of such differences to individual tools. If such differences must be modeled, consider using the CWM Transformation package to filter data values during interchange.
+
+TypeMapping instances are unidirectional, so two instances are required to show that a data type pair can be mutually interchanged between environments.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== TypeMapping.TypeMapping.isBestMatch [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3817229802EE'
+ name = 'isBestMatch' annotation = 'True if this TypeMapping instance represents the best available mapping between a pair of data types in different software systems.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== TypeMapping.TypeMapping.isLossy [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a381722B700BB'
+ name = 'isLossy' annotation = 'True if this TypeMapping instance may result in a data conversion error if the source data is within certain ranges. For example, storing a 32-bit unsigned integer value into a 16-bit unsigned integer container will result in a data conversion error only when the source data has a value greater than 65535.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== TypeMapping.TypeMapping.sourceType [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a385FFF0B006A'
+ name = 'sourceType' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32989FB2023D'
+ referencedEnd = 'a381723B401A5' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== TypeMapping.TypeMapping.targetType [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a385FFF500099'
+ name = 'targetType' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32989FB2023D'
+ referencedEnd = 'a3817250F009C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== TypeMapping.TypeSystem [Class] ==================== -->
+ <Model:Class xmi.id = 'a38173AAE02EE'
+ name = 'TypeSystem'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5D19033E' >
+ <Model:ModelElement.annotation>Instances of the TypeSystem class collect together the data types (subclasses of Classifier) defined by a software system and the TypeMapping instances defining how they are mapped to data types in other TypeSystems. TypeMapping instances collected by a TypeSystem instance include both those in which the software system&#x0092;s data types act as sources and as targets of mappings. Classifiers and TapeMappings are
+maintained in a single collection via the ElementOwnership association but can be distinguished by their respective types.
+
+Because it is a Package, a TypeSystem can also serve to collect together the Classifier instances for a particular software system.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== TypeMapping.TypeSystem.version [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A5CE02002B8'
+ name = 'version' annotation = 'A string describing the version identification of the type system represented.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== TypeMapping.MappingSource [Association] ==================== -->
+ <Model:Association xmi.id = 'a381723B20196'
+ name = 'MappingSource' annotation = 'The MappingSource association indicates the underlying Classifier instance of a particular TypeMapping.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a381723B401A5'
+ name = 'sourceType' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a32989FB2023D' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a381723B40251'
+ name = 'mappingFrom' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3817226403A9' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== TypeMapping.MappingTarget [Association] ==================== -->
+ <Model:Association xmi.id = 'a3817250D0399'
+ name = 'MappingTarget'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:ModelElement.annotation>The MappingTarget association indicates the exposed data type for a particular TypeMapping instance.
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3817250F009C'
+ name = 'targetType' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a32989FB2023D' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3817250F00DA'
+ name = 'mappingTo' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3817226403A9' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== Relational [Package] ==================== -->
+<Model:Package xmi.id = 'a362E34A201FF'
+ name = 'Relational'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>The Relational package describes data accessible through a relational interface such as a native RDBMS, ODBC, or JDBC. The Relational package is based on the [SQL] standard section concerning RDBMS catalogs.
+
+The scope of the top level container, Catalog, is intended to cover all the tables a user can use in a single statement. A catalog is also the unit which is managed by a data resource. A catalog contains schemas which themselves contain tables. Tables are made of columns which have an associated data type.
+
+The Relational package uses constructs in the ObjectModel package to describe the object extensions added to SQL by the [SQL] standards.
+
+The Relational package also addresses the issues of indexing, primary keys and foreign keys by extending the corresponding concepts from the Foundation packages.
+
+The Relational package depends on the following packages:
+
+ org.omg::CWM::ObjectModel::Behavioral
+ org.omg::CWM::ObjectModel::Core
+ org.omg::CWM::ObjectModel::Instance
+ org.omg::CWM::Foundation::DataTypes
+ org.omg::CWM::Foundation::KeysIndexes
+
+The Relational package references the ObjectModel and Foundation packages.
+
+OCL Representation of Relational Constraints
+
+[C-1] temporaryScope is valid only if the isTemporary is True.
+context Tabl e inv:
+self.temporaryScope.notEmpty implies self.isTemporary=True
+
+[C-2] checkOption is valid only if isReadOnly is False.
+context View inv:
+self.checkOption implies self.isReadOnly=False
+
+[C-3] scale is valid only if precision is specified.
+context Column inv:
+self.scale.nonEmpty implies self.precision.notEmpty</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Relational.org.omg.xmi.namespace=CWMRDB [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.910'
+ name = 'org.omg.xmi.namespace=CWMRDB' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a362E34A201FF' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWMRDB</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Relational.org.omg.mof.idl_prefix=org.omg.cwm.resource [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.911'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.resource' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a362E34A201FF' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.resource</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Relational.org.omg.mof.idl_substitute_name=RelationalModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.912'
+ name = 'org.omg.mof.idl_substitute_name=RelationalModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a362E34A201FF' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>RelationalModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Relational.com.urep.jcr.java_prefix=org.omg.java.cwm.resource [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.913'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.resource' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a362E34A201FF' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.resource</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.914'
+ name = 'Core' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6600C5031F' />
+ <Model:Import xmi.id = 'G.915'
+ name = 'Behavioral' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6342A4000B' />
+ <Model:Import xmi.id = 'G.916'
+ name = 'Instance' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6342930318' />
+ <Model:Import xmi.id = 'G.917'
+ name = 'DataTypes' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a38207A4E0308' />
+ <Model:Import xmi.id = 'G.918'
+ name = 'KeysIndexes' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a38207A680191' />
+ <!-- ==================== Relational.Enumerations [Package] ==================== -->
+ <Model:Package xmi.id = 'a36CB6A6C0197'
+ name = 'Enumerations' annotation = 'The enumerations and datatypes used in the Relational model.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:Namespace.contents>
+ <!-- ==================== Relational.Enumerations.ActionOrientationType [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a36DC89FC02A3'
+ name = 'ActionOrientationType'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>Used in Trigger.
+It indicates if the trigger is called once per statement execution or before/after each row of the table is modified.</Model:ModelElement.annotation>
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'ActionOrientationType'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'row'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'statement'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== Relational.Enumerations.ConditionTimingType [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a36DC8A1E02F5'
+ name = 'ConditionTimingType'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>Used in Triggers.
+It indicates if the trigger activity is run before or after the statement or row is modified.</Model:ModelElement.annotation>
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'ConditionTimingType'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'before'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'after'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== Relational.Enumerations.DeferrabilityType [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a36CC6BBA02A5'
+ name = 'DeferrabilityType'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>Used in Foreign Keys
+Indicates if the Foreign Key validation should be deferred to the end of the transaction or executed immadiately at the end of the statement.
+This is the value used at the beginning of a transaction. It can be changed within a transaction.</Model:ModelElement.annotation>
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'DeferrabilityType'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'initiallyDeferred'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'initiallyImmediate'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'notDeferrable'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== Relational.Enumerations.EventManipulationType [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a36DC89D2037E'
+ name = 'EventManipulationType'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>Used in Trigger.
+Indicates what types of events are using the current Trigger.
+</Model:ModelElement.annotation>
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'EventManipulationType'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'insert'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'delete'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'update'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== Relational.Enumerations.NullableType [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a36CB6FAE0093'
+ name = 'NullableType'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>Used in Column.
+Indicates if a Column may contain null values.</Model:ModelElement.annotation>
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'NullableType'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'columnNoNulls'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'columnNullable'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'columnNullableUnknown'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== Relational.Enumerations.ProcedureType [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a36DD71AB015E'
+ name = 'ProcedureType'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>Used in Procedure.
+Indicates if the Procedure is a Function or a Procedure</Model:ModelElement.annotation>
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'ProcedureType'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'procedure'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'function'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== Relational.Enumerations.ReferentialRuleType [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a36CC6AF10223'
+ name = 'ReferentialRuleType'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>Used in Foreign Key.
+It indicates the action taken on the row containing a foreign key value, when the primary key value referenced is deleted or updated.</Model:ModelElement.annotation>
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'ReferentialRuleType'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'importedKeyNoAction'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'importedKeyCascade'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'importedKeySetNull'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'importedKeyRestrict'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'importedKeySetDefault'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ </Model:Namespace.contents>
+ </Model:Package>
+ <!-- ==================== Relational.Catalog [Class] ==================== -->
+ <Model:Class xmi.id = 'a362E34BC0007'
+ name = 'Catalog' annotation = 'A Catalog is the unit of logon and identification. It also identifies the scope of SQL statements: the tables contained in a catalog can be used in a single SQL statement.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5D19033E' >
+ <Model:Namespace.contents>
+ <!-- ==================== Relational.Catalog.defaultCharacterSetName [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A610C660274'
+ name = 'defaultCharacterSetName'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:ModelElement.annotation>The name of the default character set used for the values in the column.
+This field applies only to columns whose datatype is a character string.</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.Catalog.defaultCollationName [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A610D760315'
+ name = 'defaultCollationName' annotation = 'The name of the default collation sequence used to sort the data values in the column.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Relational.Schema [Class] ==================== -->
+ <Model:Class xmi.id = 'a3639010F0362'
+ name = 'Schema' annotation = 'A schema is a named collection of tables'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5D19033E' />
+ <!-- ==================== Relational.ColumnSet [Class] ==================== -->
+ <Model:Class xmi.id = 'a364CDDC2022D'
+ name = 'ColumnSet' annotation = 'A set of columns, representing either the result of a query, a view or a physical table.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3298A02900FE' />
+ <!-- ==================== Relational.org.omg.IDL Substitute Name=RelationalColumnSet [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.919'
+ name = 'org.omg.IDL Substitute Name=RelationalColumnSet' annotation = ''
+ tagId = 'org.omg.IDL Substitute Name'
+ elements = 'a364CDDC2022D' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>RelationalColumnSet</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Relational.org.omg.mof.idl_substitute_name=CwmColumnSet [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.920'
+ name = 'org.omg.mof.idl_substitute_name=CwmColumnSet' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a364CDDC2022D' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CwmColumnSet</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Relational.NamedColumnSet [Class] ==================== -->
+ <Model:Class xmi.id = 'a362E664F03B3'
+ name = 'NamedColumnSet'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a364CDDC2022D' >
+ <Model:ModelElement.annotation>A catalogued set of columns, which may be Table or View.
+
+Note for typed tables: It is assumed that the typed table will own a set of columns conforming to the type they are OF. This set of columns allows the manipulation of the table by products which ignore this [SQL] extension. It also allows the columns of type REF, to be copied to a column with a SCOPE reference.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Relational.NamedColumnSet.optionScopeColumn [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a387232030307'
+ name = 'optionScopeColumn' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a364CDDD800D0'
+ referencedEnd = 'a379CC77703CE' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Relational.NamedColumnSet.type [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a387232320098'
+ name = 'type' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3648903F0365'
+ referencedEnd = 'a379CC370012B' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Relational.NamedColumnSet.usingTrigger [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38723276019A'
+ name = 'usingTrigger' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36DC7E9502F8'
+ referencedEnd = 'a36DC8BBB0190' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Relational.Table [Class] ==================== -->
+ <Model:Class xmi.id = 'a364CDE8501D3'
+ name = 'Table' annotation = 'A materialized NamedColumnSet.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a362E664F03B3' >
+ <Model:Namespace.contents>
+ <!-- ==================== Relational.Table.isTemporary [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a377A994F0294'
+ name = 'isTemporary' annotation = 'Indicates that the table content is temporary. SQL92 standards provide two types of temporary tables (local Temporary and Global Temporary). However, RDBMS products have implemented variations on this theme. It is recommended that the product manufacturers provide specific temporary information (besides the temporaryScope attribute) in their extensions. '
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.Table.temporaryScope [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a377A9A21020A'
+ name = 'temporaryScope' annotation = 'This attribute is meaningful only when the isTemporary flag is True [C-1]. The scope indicates when the data of this table are available. "SESSION", "APPLICATION" are examples of possible values. Look at the Scope attribute for Global Temporary tables in the SQL standards for more details.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.Table.trigger [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3872331E0278'
+ name = 'trigger' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36DC7E9502F8'
+ referencedEnd = 'a36DC8BC30079' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Relational.Table.isSystem [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a379CE39B024A'
+ name = 'isSystem' annotation = 'Indicates that the Table is a System Table (generally part of or view on the system catalog).'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Relational.View [Class] ==================== -->
+ <Model:Class xmi.id = 'a364CDE8F01FF'
+ name = 'View'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a362E664F03B3' >
+ <Model:ModelElement.annotation>A view is a non-materialized set of rows, defined by the associated query.
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Relational.View.isReadOnly [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a366C558402E0'
+ name = 'isReadOnly' annotation = 'Indicates whether the underlying tables can be updated through an update to this View.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.View.checkOption [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36CB6B8B01AE'
+ name = 'checkOption' annotation = 'This field is meaningful only if the view is not ReadOnly. CheckOption indicates that the RDBMS will validate that changes made to the data verify the view filtering condition and belong to the view result set.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.View.queryExpression [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37D0502D029E'
+ name = 'queryExpression'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3702A52C0196' >
+ <Model:ModelElement.annotation>The query associated with the View.
+
+The query result must match the set of Columns associated with the View (in parent class ColumnSet)</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Relational.QueryColumnSet [Class] ==================== -->
+ <Model:Class xmi.id = 'a364CDEA203C9'
+ name = 'QueryColumnSet' annotation = 'The result set of a query.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a364CDDC2022D' >
+ <Model:Namespace.contents>
+ <!-- ==================== Relational.QueryColumnSet.query [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a38274595001C'
+ name = 'query' annotation = 'The query expression generating this result. The language attribute of the expression should generally begin with "SQL"'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3702A52C0196' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Relational.SQLDataType [Class] ==================== -->
+ <Model:Class xmi.id = 'a36488C0301BD'
+ name = 'SQLDataType' annotation = 'A SQLDataType is used to reference any datatype associated with a column'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a32989FB2023D' >
+ <Model:Namespace.contents>
+ <!-- ==================== Relational.SQLDataType.typeNumber [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3818C81E038E'
+ name = 'typeNumber' annotation = 'The number assigned to the datatype by the owning RDBMS'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Relational.SQLDistinctType [Class] ==================== -->
+ <Model:Class xmi.id = 'a363916A10234'
+ name = 'SQLDistinctType' annotation = 'A datatype defined as a Distinct Type, per [SQL] standard.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a36488C0301BD a3731C90A00AA' >
+ <Model:Namespace.contents>
+ <!-- ==================== Relational.SQLDistinctType.length [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37F92773035C'
+ name = 'length'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:ModelElement.annotation>The length of fixed length character or byte strings. Maximum length if length is
+variable.</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.SQLDistinctType.precision [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37F9278601B5'
+ name = 'precision' annotation = 'The total number of digits in the field'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.SQLDistinctType.scale [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37F927970119'
+ name = 'scale' annotation = 'The number of digits on the right of the decimal separator.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.SQLDistinctType.sqlSimpleType [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a387239950065'
+ name = 'sqlSimpleType' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a363916290336'
+ referencedEnd = 'a37F928110309' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Relational.SQLSimpleType [Class] ==================== -->
+ <Model:Class xmi.id = 'a363916290336'
+ name = 'SQLSimpleType' annotation = 'A simple datatype used with an SQL column. Examples are Integer, Varchar, LOB, CLOB, etc...'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a36488C0301BD a3298A036025B' >
+ <Model:Namespace.contents>
+ <!-- ==================== Relational.SQLSimpleType.characterMaximumLength [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36CC64DA01F4'
+ name = 'characterMaximumLength' annotation = 'See [SQL], corresponding field in DATA_TYPE_DESCRIPTOR'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.SQLSimpleType.characterOctetLength [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36F2DDB30115'
+ name = 'characterOctetLength' annotation = 'See [SQL], corresponding field in DATA_TYPE_DESCRIPTOR'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.SQLSimpleType.numericPrecision [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36F2DEB40104'
+ name = 'numericPrecision' annotation = 'See [SQL], corresponding field in DATA_TYPE_DESCRIPTOR'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.SQLSimpleType.numericPrecisionRadix [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36F2DECC0054'
+ name = 'numericPrecisionRadix' annotation = 'See [SQL], corresponding field in DATA_TYPE_DESCRIPTOR'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.SQLSimpleType.numericScale [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36F2DEE800AF'
+ name = 'numericScale' annotation = 'See [SQL], corresponding field in DATA_TYPE_DESCRIPTOR'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.SQLSimpleType.dateTimePrecision [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36F2DEFB0391'
+ name = 'dateTimePrecision' annotation = 'See [SQL], corresponding field in DATA_TYPE_DESCRIPTOR'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Relational.SQLStructuredType [Class] ==================== -->
+ <Model:Class xmi.id = 'a3648903F0365'
+ name = 'SQLStructuredType' annotation = 'A Datatype defined as Structured Type, per [SQL] standard.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a36488C0301BD a3298A02900FE' >
+ <Model:Namespace.contents>
+ <!-- ==================== Relational.SQLStructuredType.referencingColumn [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38723A6803CF'
+ name = 'referencingColumn' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a364CDDD800D0'
+ referencedEnd = 'a379CC6D003D8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Relational.SQLStructuredType.columnSet [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38723A940075'
+ name = 'columnSet' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a362E664F03B3'
+ referencedEnd = 'a379CC370018F' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Relational.Column [Class] ==================== -->
+ <Model:Class xmi.id = 'a364CDDD800D0'
+ name = 'Column' annotation = 'A column in a result set, a view, a table, or an SQLStructuredType.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3A6F62780143' >
+ <Model:Namespace.contents>
+ <!-- ==================== Relational.Column.precision [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3649E0CC02B6'
+ name = 'precision' annotation = 'The total number of digits in the field.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.Column.scale [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3649E0E801A8'
+ name = 'scale' annotation = 'The number of digits on the right of the decimal separator.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.Column.isNullable [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36AA672E0327'
+ name = 'isNullable'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a36CB6FAE0093' >
+ <Model:ModelElement.annotation>Indicates if null values are valid in this column.
+
+Note: Default values for Column data are provided in initialValue in the UML Attribute class (the class from which the Column class inherits).</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.Column.length [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37F927C702EF'
+ name = 'length' annotation = 'The length of fixed length character or byte strings. Maximum length if length is variable.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.Column.collationName [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a383C1F72018B'
+ name = 'collationName'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:ModelElement.annotation>The name of the collation sequence used to sort the data values in the column.
+This applies only to columns whose datatype is a form of character string.</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.Column.characterSetName [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a383C1F8A00F0'
+ name = 'characterSetName'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:ModelElement.annotation>The name of the character set used for the values in the column.
+This field applies only to columns whose datatype is a character string.</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.Column.optionScopeColumnSet [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38723AE1035B'
+ name = 'optionScopeColumnSet' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a362E664F03B3'
+ referencedEnd = 'a379CC77900CE' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Relational.Column.referencedTableType [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38723B020363'
+ name = 'referencedTableType' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3648903F0365'
+ referencedEnd = 'a379CC6D00374' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Relational.Procedure [Class] ==================== -->
+ <Model:Class xmi.id = 'a36DC7EA303AC'
+ name = 'Procedure' annotation = 'This class describes Relational DBMS Stored procedures and functions.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327BB67E0028' >
+ <Model:Namespace.contents>
+ <!-- ==================== Relational.Procedure.type [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36DD6F5701E0'
+ name = 'type' annotation = 'A Procedure can be either a Function or a true Procedure. This indicates whether this object returns a value or not.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a36DD71AB015E' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Relational.Trigger [Class] ==================== -->
+ <Model:Class xmi.id = 'a36DC7E9502F8'
+ name = 'Trigger' annotation = 'An action run by the DBMS when specified events occur on the table owning the Trigger'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:Namespace.contents>
+ <!-- ==================== Relational.Trigger.eventManipulation [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36DC89B900DA'
+ name = 'eventManipulation' annotation = 'Indicates what types of events are using the current Trigger.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a36DC89D2037E' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.Trigger.actionCondition [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36DC8A6300D7'
+ name = 'actionCondition' annotation = 'A boolean expression which defines when the trigger has to be executed'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33CFA9DA01D6' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.Trigger.actionStatement [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36DC8A7A001C'
+ name = 'actionStatement' annotation = 'The Trigger action itself'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a363559050190' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.Trigger.actionOrientation [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36DC8AFC019F'
+ name = 'actionOrientation' annotation = 'It indicates if the trigger is called once per statement execution or before or after each row of the table is modified.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a36DC89FC02A3' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.Trigger.conditionTiming [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36DC8A8B0201'
+ name = 'conditionTiming' annotation = 'It indicates if the trigger activity is run before or after the statement or row is modified.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a36DC8A1E02F5' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.Trigger.conditionReferenceNewTable [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36DC8A9C0378'
+ name = 'conditionReferenceNewTable' annotation = 'The alias for the owning table name, used in the actionStatement, to represent the state of the table after the insert/delete/update'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.Trigger.conditionReferenceOldTable [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36DC8AB301EA'
+ name = 'conditionReferenceOldTable' annotation = 'The alias for the name of the owning table, used in the actionStatement, to represent the state of the table before the update/delete/insert.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.Trigger.table [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38723CB400A0'
+ name = 'table' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a364CDE8501D3'
+ referencedEnd = 'a36DC8BC30029' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Relational.Trigger.usedColumnSet [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38723CD3007C'
+ name = 'usedColumnSet' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a362E664F03B3'
+ referencedEnd = 'a36DC8BBB012C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Relational.SQLIndex [Class] ==================== -->
+ <Model:Class xmi.id = 'a36CC6C5501E2'
+ name = 'SQLIndex' annotation = 'An Index on a table.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a376A89040331' >
+ <Model:Namespace.contents>
+ <!-- ==================== Relational.SQLIndex.filterCondition [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36CC6E0401C4'
+ name = 'filterCondition' annotation = 'Which subset of the table is indexed'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.SQLIndex.isNullable [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36CC6E150006'
+ name = 'isNullable' annotation = 'Entries in this index can be null'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.SQLIndex.autoUpdate [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36CC6E3503C3'
+ name = 'autoUpdate' annotation = 'The index is updated automatically'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Relational.UniqueConstraint [Class] ==================== -->
+ <Model:Class xmi.id = 'a36F6E2ED0146'
+ name = 'UniqueConstraint' annotation = 'A condition to define uniqueness of rows in a table. An example of UniqueConstraint is a primary key'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a376A879E0072' >
+ <Model:Namespace.contents>
+ <!-- ==================== Relational.UniqueConstraint.deferrability [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3870FCCD017A'
+ name = 'deferrability' annotation = 'Indicates if the validity of the UniqueConstraint is to be tested at each statement or at the end of a transaction.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a36CC6BBA02A5' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Relational.ForeignKey [Class] ==================== -->
+ <Model:Class xmi.id = 'a362E6C290149'
+ name = 'ForeignKey'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a376A8A6E00C0' >
+ <Model:ModelElement.annotation>A Foreign Key associates columns from one table with columns of another table.
+
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Relational.ForeignKey.deleteRule [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36547F640115'
+ name = 'deleteRule' annotation = 'An enumerated type. Indicates the disposition of the data records containing the foreign key value when the record of the matching primary key is deleted.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a36CC6AF10223' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.ForeignKey.updateRule [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36548E0F0184'
+ name = 'updateRule' annotation = 'Same as deleteRule for updates of the primary key data record'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a36CC6AF10223' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Relational.ForeignKey.deferrability [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36CC6B7D004E'
+ name = 'deferrability' annotation = 'Indicates if the validity of the ForeignKey is to be tested at each statement or at the end of a transaction.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a36CC6BBA02A5' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Relational.SQLIndexColumn [Class] ==================== -->
+ <Model:Class xmi.id = 'a36CC6F570117'
+ name = 'SQLIndexColumn'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a377BD3F9017F' >
+ <Model:ModelElement.annotation>Associates an index with its columns.
+
+This is really an association (link) class. It is associated with one index and one column.
+</Model:ModelElement.annotation>
+ </Model:Class>
+ <!-- ==================== Relational.PrimaryKey [Class] ==================== -->
+ <Model:Class xmi.id = 'a3870E1AD031C'
+ name = 'PrimaryKey' annotation = 'There is only one UniqueConstraint of type PrimaryKey per Table. It is implemented specifically by each RDBMS.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a36F6E2ED0146' />
+ <!-- ==================== Relational.Row [Class] ==================== -->
+ <Model:Class xmi.id = 'a3870F1D702A0'
+ name = 'Row' annotation = 'An instance of a ColumnSet.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a33BC99D60302' />
+ <!-- ==================== Relational.ColumnValue [Class] ==================== -->
+ <Model:Class xmi.id = 'a3870F1E200C5'
+ name = 'ColumnValue' annotation = 'The value in a column instance.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a33BC9AFB02E4' />
+ <!-- ==================== Relational.CheckConstraint [Class] ==================== -->
+ <Model:Class xmi.id = 'a3870FB0E020E'
+ name = 'CheckConstraint' annotation = 'A rule that specifies the values allowed in one or more columns of every row of a table.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A649B000A' >
+ <Model:Namespace.contents>
+ <!-- ==================== Relational.CheckConstraint.deferrability [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3870FD1A01A8'
+ name = 'deferrability' annotation = 'Indicates the timing of the constraint enforcement during multiple-user updates.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a36CC6BBA02A5' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Relational.RowSet [Class] ==================== -->
+ <Model:Class xmi.id = 'a3896223901CC'
+ name = 'RowSet' annotation = 'Each instance of RowSet owns a collection of Row instances. The inherited association between Namespace (a superclass of Package) and ModelElement is used to contain Instances.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a387E624E0365' />
+ <!-- ==================== Relational.org.omg.mof.idl_substitute_name=CwmRowSet [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.921'
+ name = 'org.omg.mof.idl_substitute_name=CwmRowSet' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a3896223901CC' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CwmRowSet</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Relational.SQLParameter [Class] ==================== -->
+ <Model:Class xmi.id = 'a3A6105950078'
+ name = 'SQLParameter' annotation = 'Parameters of stored procedures.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327BBB9F02B2' />
+ <!-- ==================== Relational.TriggerUsingColumnSet [Association] ==================== -->
+ <Model:Association xmi.id = 'a36DC8BB70234'
+ name = 'TriggerUsingColumnSet' annotation = 'This associates a Trigger with the NamedColumnSets it uses in its expressions.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a36DC8BBB012C'
+ name = 'usedColumnSet' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a362E664F03B3' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a36DC8BBB0190'
+ name = 'usingTrigger' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a36DC7E9502F8' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Relational.TableOwningTrigger [Association] ==================== -->
+ <Model:Association xmi.id = 'a36DC8BC1024D'
+ name = 'TableOwningTrigger' annotation = 'Associates a Table with its Triggers. The Trigger will be activated when an action is performed on the Table.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a36DC8BC30029'
+ name = 'table' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a364CDE8501D3' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a36DC8BC30079'
+ name = 'trigger' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a36DC7E9502F8' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Relational.ColumnSetOfStructuredType [Association] ==================== -->
+ <Model:Association xmi.id = 'a379CC36E0178'
+ name = 'ColumnSetOfStructuredType' annotation = 'Associates structured types with NamedColumnSets defined of this type.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a379CC370012B'
+ name = 'type' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3648903F0365' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a379CC370018F'
+ name = 'columnSet' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a362E664F03B3' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Relational.ColumnRefStructuredType [Association] ==================== -->
+ <Model:Association xmi.id = 'a379CC6CE0050'
+ name = 'ColumnRefStructuredType' annotation = 'Associates Columns of a StructuredType with the Type they reference in the REF clause'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a379CC6D00374'
+ name = 'referencedTableType' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3648903F0365' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a379CC6D003D8'
+ name = 'referencingColumn' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a364CDDD800D0' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Relational.ColumnOptionsColumnSet [Association] ==================== -->
+ <Model:Association xmi.id = 'a379CC77700CB'
+ name = 'ColumnOptionsColumnSet' annotation = 'Associates Columns with NamedColumnSets they reference in their OPTIONS clause.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a379CC77703CE'
+ name = 'optionScopeColumn' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a364CDDD800D0' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a379CC77900CE'
+ name = 'optionScopeColumnSet' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a362E664F03B3' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Relational.DistinctTypeHasSimpleType [Association] ==================== -->
+ <Model:Association xmi.id = 'a37F9281001C8'
+ name = 'DistinctTypeHasSimpleType' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a37F9281102F5'
+ name = 'sqlDistinctType' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a363916A10234' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a37F928110309'
+ name = 'sqlSimpleType' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a363916290336' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== Record [Package] ==================== -->
+<Model:Package xmi.id = 'a35F6F41A0299'
+ name = 'Record'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>The Record package covers the basic concept of a record and its structure. The package takes a broad view of the notion of record, including both traditional data records such as those stored in files and databases, as well as programming language structured data types. In fact, the concepts described here can be used as a foundation for extension packages describing any information structure that is fundamentally hierarchical, or "nested," in nature such as documents, questionnaires, and organizational structures.
+
+The Record package depends on the following packages:
+
+ org.omg::CWM::ObjectModel::Core
+ org.omg::CWM::ObjectModel::Instance
+
+Because of the antiquity of many record-based models, individual system implementations employing record models may have unusual features (such as occurs-depending arrays, various COBOL rename/remapping semantics, etc.) that are not shared with other implementations. When such features are limited to single
+implementations or languages, they have been purposefully left out of the Record metamodel. Rather, unusual features of this sort should be placed into extension packages designed to meet the needs of those implementations or languages. For example, record structuring features endemic to the COBOL language have been placed in the COBOLData metamodel in the CWMX package described in Volume 2 and do not appear here. In this way, COBOL-only features do not burden other record oriented implementations unnecessarily.
+
+OCL Representation of Record Constraints
+
+[C-1] The owner of a Field and the type of a Field may not refer to the same Classifier instance.
+context Field inv:
+self.owner &lt;&gt; self.type
+
+[C-2] The scale attribute is valid only if the precision attribute is specified.
+context Field inv:
+self.scale-&gt;notEmpty implies self.precision-&gt;notEmpty
+
+[C-3] The precision attribute is valid only if the length attribute is not specified.
+context Field inv:
+self.precision-&gt;notEmpty implies self.length-&gt;isEmpty::filely one</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Record.org.omg.xmi.namespace=CWMREC [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.922'
+ name = 'org.omg.xmi.namespace=CWMREC' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a35F6F41A0299' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWMREC</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Record.org.omg.mof.idl_prefix=org.omg.cwm.resource [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.923'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.resource' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a35F6F41A0299' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.resource</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Record.org.omg.mof.idl_substitute_name=RecordModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.924'
+ name = 'org.omg.mof.idl_substitute_name=RecordModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a35F6F41A0299' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>RecordModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Record.com.urep.jcr.java_prefix=org.omg.java.cwm.resource [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.925'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.resource' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a35F6F41A0299' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.resource</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.926'
+ name = 'Core' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6600C5031F' />
+ <Model:Import xmi.id = 'G.927'
+ name = 'Instance' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6342930318' />
+ <!-- ==================== Record.Field [Class] ==================== -->
+ <Model:Class xmi.id = 'a3730B40B002A'
+ name = 'Field' annotation = 'A Field is the fundamental information container within a RecordDef. It holds one piece of information, which may itself have structure. The inherited associations StructuralFeatureType and ElementOwnership provide access to a Field instance&#x0092;s type and owning classifier, respectively.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3A6F62780143' >
+ <Model:Namespace.contents>
+ <!-- ==================== Record.Field.length [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A5CE1A903E1'
+ name = 'length' annotation = 'The length of a fixed length character or byte string field.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Record.Field.precision [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A5CE1CF0335'
+ name = 'precision' annotation = 'The total number of digits in a numeric field.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Record.Field.scale [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A5CE1BF023B'
+ name = 'scale' annotation = 'The number of digits on the right of the decimal separator in a numeric field.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Record.RecordDef [Class] ==================== -->
+ <Model:Class xmi.id = 'a3731BA330352'
+ name = 'RecordDef'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3298A02900FE' >
+ <Model:ModelElement.annotation>A RecordDef is an ordered collection of Fields representing the structure of a Record.
+
+Examples of RecordDefs include definitions of
+
+ language-specific data structures
+ database records
+ IMS segments
+
+The internal structure of a RecordDef instance is constructed by adding Field instances as features (using the ElementOwnership association) and pointing each Field instance&#x0092;s inherited type reference to the Classifier instance representing the Field&#x0092;s data type. The referenced instance can be either a primitive data type (an instance of DataType, such as "integer") or a structured data type (such as a Group instance).
+
+Refer to the example for more details of the relationships between RecordDefs, Fields, Records, and their values.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Record.RecordDef.fieldDelimiter [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3768142100EF'
+ name = 'fieldDelimiter' annotation = 'The value of a fieldDelimiter used to separate field values in an input stream.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Record.RecordDef.isFixedWidth [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3768181C0285'
+ name = 'isFixedWidth' annotation = 'True if the record is fixed length. Otherwise, the record can be of variable length.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Record.RecordDef.textDelimiter [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37681F5E01F9'
+ name = 'textDelimiter' annotation = 'The delimiter of a text string in the record, such as a quote.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Record.RecordDef.file [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a385831EC03AC'
+ name = 'file' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a379CDD470029'
+ referencedEnd = 'a379CDDC80100' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Record.FixedOffsetField [Class] ==================== -->
+ <Model:Class xmi.id = 'a377BE6930160'
+ name = 'FixedOffsetField'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3730B40B002A' >
+ <Model:ModelElement.annotation>Instances of FixeOffsetField represent fields that have a fixed location in a record.
+
+FixedOffsetFields can be used as a foundation for recording details of physical record layouts and as a means of representing the internal structure of undiscriminated (ie, C-type) unions.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Record.FixedOffsetField.offset [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a377BE6A40112'
+ name = 'offset' annotation = 'Specifies the offset of the field within its container in units of the number of bits indicated in the offsetUnitBits attribute.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Record.FixedOffsetField.offsetUnitBits [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a377BE6A80102'
+ name = 'offsetUnitBits' annotation = 'The number of bits making up one record offset unit. For example, for a byte-relative offset, the value of this attribute would typically be 8.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Record.RecordFile [Class] ==================== -->
+ <Model:Class xmi.id = 'a379CDD470029'
+ name = 'RecordFile'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5D19033E' >
+ <Model:ModelElement.annotation>A RecordFile is the definition of a file. It may have one or more RecordDefs, defining the structure of the records in the file. Each of these RecordDefs defines a valid structure for records in the file. Subclasses of RecordFile in extensions to support specific languages and systems may be used to represent specific types of files such as COBOL CopyLib files and C-language header files.
+
+Physical deployments of a RecordFile can be found via the DataManagerDataPackage association in the SoftwareDeployment package .</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Record.RecordFile.isSelfDescribing [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3768184E02E3'
+ name = 'isSelfDescribing' annotation = 'True if the contents of fields in the first record of the file contain field names applicable to subsequent records.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Record.RecordFile.recordDelimiter [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A5CE4350306'
+ name = 'recordDelimiter' annotation = 'Contains the value that serves as a logical end-of-record indication in a stream-oriented file. A common examples include the usage of carriage-return characters and carriage-return/line-feed character pairs as new-line characters in ASCII text files.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Record.RecordFile.skipRecords [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3768185900DF'
+ name = 'skipRecords' annotation = 'The number of records to ignore at the beginning of a file. The specific semantics of records that are skipped may be beyond the scope of CWM.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Record.RecordFile.record [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a385831D00064'
+ name = 'record' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3731BA330352'
+ referencedEnd = 'a379CDDC8010A' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Record.FieldValue [Class] ==================== -->
+ <Model:Class xmi.id = 'a3858286A0172'
+ name = 'FieldValue' annotation = 'The value currently held in a Field instance.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a33BC9AFB02E4' />
+ <!-- ==================== Record.Record [Class] ==================== -->
+ <Model:Class xmi.id = 'a385828750014'
+ name = 'Record' annotation = 'A Record, a subclass of Object, represents a single data record. Each Record is described by a RecordDef instance found via the Object&#x0092;s InstanceClassifier association.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a33BC99D60302' />
+ <!-- ==================== Record.RecordSet [Class] ==================== -->
+ <Model:Class xmi.id = 'a387E63C801FE'
+ name = 'RecordSet' annotation = 'A RecordSet represents a collection of Record instances.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a387E624E0365' />
+ <!-- ==================== Record.org.omg.mof.idl_substitute_name=CwmRecordSet [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.928'
+ name = 'org.omg.mof.idl_substitute_name=CwmRecordSet' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a387E63C801FE' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CwmRecordSet</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Record.Group [Class] ==================== -->
+ <Model:Class xmi.id = 'a3768108E00DF'
+ name = 'Group' annotation = 'A Group is a structured data type and is used to collect together Field instances within a Record. Groups can be used in RecordDef instances as shown in the foregoing example.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a32989FB2023D' />
+ <!-- ==================== Record.RecordToFile [Association] ==================== -->
+ <Model:Association xmi.id = 'a379CDDC70113'
+ name = 'RecordToFile' annotation = 'A Record definition can appy to records stored in a RecordFile.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a379CDDC80100'
+ name = 'file' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a379CDD470029' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a379CDDC8010A'
+ name = 'record' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3731BA330352' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== Multidimensional [Package] ==================== -->
+<Model:Package xmi.id = 'a374EBFFB0357'
+ name = 'Multidimensional'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>The CWM Multidimensional metamodel is a generic representation of a multidimensional database.
+
+Multidimensional databases are OLAP databases that are directly implemented by multidimensional database systems. In a multidimensional database, key OLAP constructs (dimensions, hierarchies, etc.) are represented by the internal data structures of a ultidimensional database server, and common OLAP operations (consolidation, drill-down, etc.) are performed by the server acting on those data structures.
+
+Multidimensional databases are often classified as "physical OLAP" or "MOLAP" (memory-based OLAP) databases.
+
+Multidimensional databases offer enhanced performance and flexibility over OLAP systems that simulate multidimensional functionality using other technologies (e.g., relational database or spreadsheet):
+
+Performance: Multidimensional databases provide rapid consolidation times and formula calculations, and consistent query response times regardless of query complexity. This is accomplished, in part, through the use of efficient cell storage techniques and highly-optimized index paths.
+
+Flexibility: The specification and use of multidimensional schemas and queries (including the design of cubes, dimensions, hierarchies, member formulas, the manipulation of query result sets, etc.) can be accomplished in a relatively straight-forward manner, since the server directly supports (and exposes) the multidimensional paradigm.
+
+The CWM Multidimensional metamodel does not attempt to provide a complete representation of all aspects of commercially available, multidimensional databases. Unlike relational database management systems, multidimensional databases tend to be proprietary in structure, and there are no published, widely agreed upon, standard representations of the logical schema of a multidimensional database. Therefore, the CWM Multidimensional Database metamodel is oriented toward complete generality of specification. Tool-specific extensions to the metamodel are relatively easy to formulate, and several examples are provided in Volume 2, Extensions, of the CWM Specification.
+
+The Multidimensional package depends on the following packages:
+
+ org.omg::CWM::ObjectModel::Core
+ org.omg::CWM::ObjectModel::Instance
+
+The major classes and associations of the Multidimensional metamodel are shown in Figure 11-1.
+
+Schema is the container of all elements comprising a Multidimensional model. It also represents the logical unit of deployment of a Multidimensional database instance.
+Dimension represents a physical dimension in a Multidimensional database. Whereas
+the OLAP metamodel defines &#x0093;dimension&#x0094; as a purely conceptual entity, this
+Dimension represents the dimension object exposed by the programming model of a
+Multidimensional database.
+A Dimension may reference other instances of Dimension to form arbitrarily complex
+dimensional structures (e.g., hierarchies with varying levels of detail).
+
+DimensionedObject represents an attribute of Dimension. Examples of DimensionedObjects include measures (variables), formulas, consolidation functions, member alias names, etc. DimensionedObjects are contained by the Schema and referenced by the Dimensions that use them.
+
+MemberSet represents the collection of Members associated with an instance of Dimension, and MemberValue represents an instance value of a Member. MemberSet, Member and MemberValue enable the specification and interchange of both M1-level Multidimensional models and associated M0-level data values.
+
+Figure 11-2 illustrates the inheritance of the Multidimensional classes from metaclasses of the Object Model.
+
+OCL Representation of Multidimensional Constraints
+
+[C-1] A Dimension may not reference itself as a component, nor as a composite.
+context Dimension
+inv: self.component-&gt;excludes( self )
+inv: self.composite-&gt;excludes( self )
+
+The transitive closure of components of an instance of Dimension must not include the
+Dimension instance.
+
+The transitive closure of composites of an instance of Dimension must not include the
+Dimension instance.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Multidimensional.org.omg.xmi.namespace=CWMMDB [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.929'
+ name = 'org.omg.xmi.namespace=CWMMDB' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a374EBFFB0357' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWMMDB</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Multidimensional.org.omg.mof.idl_prefix=org.omg.cwm.resource [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.930'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.resource' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a374EBFFB0357' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.resource</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Multidimensional.org.omg.mof.idl_substitute_name=MultidimensionalModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.931'
+ name = 'org.omg.mof.idl_substitute_name=MultidimensionalModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a374EBFFB0357' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>MultidimensionalModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Multidimensional.com.urep.jcr.java_prefix=org.omg.java.cwm.resource [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.932'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.resource' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a374EBFFB0357' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.resource</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.933'
+ name = 'Core' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6600C5031F' />
+ <Model:Import xmi.id = 'G.934'
+ name = 'Instance' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6342930318' />
+ <!-- ==================== Multidimensional.Dimension [Class] ==================== -->
+ <Model:Class xmi.id = 'a374CB3BA032A'
+ name = 'Dimension' annotation = 'Dimension represents physical dimension in a multidimensional database (e.g., a dimension object defined by the programming model/API of an OLAP database server). Tool-specific extensions to the Multidimensional package will generally contain classes that derive from Dimension.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3298A02900FE' >
+ <Model:Namespace.contents>
+ <!-- ==================== Multidimensional.Dimension.dimensionedObject [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3866BB3701F2'
+ name = 'dimensionedObject' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a374CB311034F'
+ referencedEnd = 'a374CB3CD01D4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Multidimensional.Dimension.component [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3866BBD9011D'
+ name = 'component' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a374CB3BA032A'
+ referencedEnd = 'a374CB45500DE' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Multidimensional.Dimension.composite [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38814290018F'
+ name = 'composite' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a374CB3BA032A'
+ referencedEnd = 'a374CB45500D4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Multidimensional.Dimension.memberSet [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A5E216E037D'
+ name = 'memberSet' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a38963CD7009C'
+ referencedEnd = 'a3A5E210A0329' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Multidimensional.Dimension.schema [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A5E22970095'
+ name = 'schema' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3793D1C503DE'
+ referencedEnd = 'a3A5CC42A0038' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Multidimensional.org.omg.mof.idl_substitute_name=CwmDimension [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.935'
+ name = 'org.omg.mof.idl_substitute_name=CwmDimension' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a374CB3BA032A' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CwmDimension</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Multidimensional.com.urep.jcr.java_substitute_name=CwmDimension [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.936'
+ name = 'com.urep.jcr.java_substitute_name=CwmDimension' annotation = ''
+ tagId = 'com.urep.jcr.java_substitute_name'
+ elements = 'a374CB3BA032A' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CwmDimension</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Multidimensional.DimensionedObject [Class] ==================== -->
+ <Model:Class xmi.id = 'a374CB311034F'
+ name = 'DimensionedObject' annotation = 'DimensionedObject represents an attribute of Dimension.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3A6F62780143' >
+ <Model:Namespace.contents>
+ <!-- ==================== Multidimensional.DimensionedObject.dimension [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3866BABE0360'
+ name = 'dimension' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a374CB3BA032A'
+ referencedEnd = 'a374CB3CD01D3' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Multidimensional.DimensionedObject.schema [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A5CCD630178'
+ name = 'schema' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3793D1C503DE'
+ referencedEnd = 'a3A5CC427001F' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Multidimensional.Member [Class] ==================== -->
+ <Model:Class xmi.id = 'a3862763E0366'
+ name = 'Member' annotation = 'Member represents a member of a Dimension.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a33BC99D60302' />
+ <!-- ==================== Multidimensional.MemberSet [Class] ==================== -->
+ <Model:Class xmi.id = 'a38963CD7009C'
+ name = 'MemberSet' annotation = 'MemberSet represents the collection of Members associated with an instance of Dimension.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a387E624E0365' >
+ <Model:Namespace.contents>
+ <!-- ==================== Multidimensional.MemberSet.dimension [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A5E21D60110'
+ name = 'dimension' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a374CB3BA032A'
+ referencedEnd = 'a3A5E210A0365' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Multidimensional.org.omg.mof.idl_substitute_name=CwmMemberSet [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.937'
+ name = 'org.omg.mof.idl_substitute_name=CwmMemberSet' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a38963CD7009C' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CwmMemberSet</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Multidimensional.MemberValue [Class] ==================== -->
+ <Model:Class xmi.id = 'a3862710900E5'
+ name = 'MemberValue' annotation = 'MemberValue represents an instance value of a Member.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a33BC9AFB02E4' />
+ <!-- ==================== Multidimensional.Schema [Class] ==================== -->
+ <Model:Class xmi.id = 'a3793D1C503DE'
+ name = 'Schema' annotation = 'Schema contains all elements comprising a Multidimensional database.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5D19033E' >
+ <Model:Namespace.contents>
+ <!-- ==================== Multidimensional.Schema.dimensionedObject [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A5E22E4038F'
+ name = 'dimensionedObject' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a374CB311034F'
+ referencedEnd = 'a3A5CC4260277' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Multidimensional.Schema.dimension [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A5E234000B6'
+ name = 'dimension' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a374CB3BA032A'
+ referencedEnd = 'a3A5CC4290357' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Multidimensional.DimensionsReferenceDimensionedObjects [Association] ==================== -->
+ <Model:Association xmi.id = 'a374CB3CC03E5'
+ name = 'DimensionsReferenceDimensionedObjects' annotation = 'A Dimension may reference several instances of DimensionedObject. A DimensionedObject may be referenced by several Dimensions.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a374CB3CD01D3'
+ name = 'dimension' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a374CB3BA032A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a374CB3CD01D4'
+ name = 'dimensionedObject' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a374CB311034F' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Multidimensional.CompositesReferenceComponents [Association] ==================== -->
+ <Model:Association xmi.id = 'a374CB45202A7'
+ name = 'CompositesReferenceComponents' annotation = 'A Dimension may reference other instances of Dimension in order to derive more complex dimensional structures.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a374CB45500D4'
+ name = 'composite' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a374CB3BA032A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a374CB45500DE'
+ name = 'component' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a374CB3BA032A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Multidimensional.MDSchemaOwnsDimensionedObjects [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A5CC426005A'
+ name = 'MDSchemaOwnsDimensionedObjects' annotation = 'A Multidimensional Schema may own any number of DimensionedObjects.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A5CC4260277'
+ name = 'dimensionedObject' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a374CB311034F' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A5CC427001F'
+ name = 'schema' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3793D1C503DE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Multidimensional.MDSchemaOwnsDimensions [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A5CC4290127'
+ name = 'MDSchemaOwnsDimensions' annotation = 'A Multidimensional Schema may own any number of Dimensions.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A5CC4290357'
+ name = 'dimension' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a374CB3BA032A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A5CC42A0038'
+ name = 'schema' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3793D1C503DE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Multidimensional.DimensionOwnsMemberSets [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A5E2105028C'
+ name = 'DimensionOwnsMemberSets' annotation = 'A Dimension may own any number of MemberSets.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A5E210A0329'
+ name = 'memberSet' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a38963CD7009C' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A5E210A0365'
+ name = 'dimension' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a374CB3BA032A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== XML [Package] ==================== -->
+<Model:Package xmi.id = 'a379CA3670197'
+ name = 'XML'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>XML is rapidly becoming a very important type of data resource, especially in the Internet environment. On the one hand, HTML is evolving to be XML-compliant; in the near future, all HTML documents can be expected to become valid XML documents. On the other hand, XML is quickly becoming the standard format for interchange of data and/or metadata (e.g., XMI). Therefore, XML documents (or streams) representing data and/or metadata can be expected to appear everywhere.
+
+The XML package contains classes and associations that represent common metadata describing XML data resources. It is based on XML 1.0 [XML]. XML Schema is an ongoing activity in the W3C. As future standards are adopted by the W3C on XML Schema, this package will be revised and extended accordingly.
+
+This section provides a description of the main features of the XML package.
+
+An XML schema contains a set of definitions and declarations, in the form of XML element type definitions. An XML element type may contain a set of XML attributes and/or a content model. An attribute can have one of the following defaults: required, implied, default, or fixed. The content model can be one of the following types: empty, any, mixed, or element. Except for the empty content model, a content model consists of constituent parts, particularly element type references. The allowed occurrence of the constituents can be one of the following types: one, zero or one, zero or more, or
+one or more.
+
+An any content model consists of any element types. A mixed content model consists of character data and specified element type references. An element content model consists of specified element type references and/or element content models. An element content model can be one of the following types: choice or sequence.
+
+The XML package depends on the following packages:
+
+ omg.org::CWM::ObjectModel::Core
+ omg.org::CWM::ObjectModel::Instance
+ omg.org::CWM::Foundation::DataTypes
+
+The metamodel diagram for the XML package is split into two parts. The first diagram shows the XML classes and associations, while the second shows the inheritance hierarchy.
+
+OCL Representation of XML Constraints
+
+ None</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== XML.org.omg.xmi.namespace=CWMXML [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.938'
+ name = 'org.omg.xmi.namespace=CWMXML' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a379CA3670197' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWMXML</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== XML.org.omg.mof.idl_prefix=org.omg.cwm.resource [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.939'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.resource' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a379CA3670197' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.resource</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== XML.org.omg.mof.idl_substitute_name=XMLModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.940'
+ name = 'org.omg.mof.idl_substitute_name=XMLModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a379CA3670197' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>XMLModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== XML.com.urep.jcr.java_prefix=org.omg.java.cwm.resource [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.941'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.resource' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a379CA3670197' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.resource</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.942'
+ name = 'Core' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6600C5031F' />
+ <Model:Import xmi.id = 'G.943'
+ name = 'Instance' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6342930318' />
+ <!-- ==================== XML.Schema [Class] ==================== -->
+ <Model:Class xmi.id = 'a3786599903AB'
+ name = 'Schema' annotation = 'This represents an XML schema which contains a set of definitions and declarations. In XML, this is known as document type definition, or DTD, which provides a grammar for a class of documents.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5D19033E' >
+ <Model:Namespace.contents>
+ <!-- ==================== XML.Schema.version [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3796325B039A'
+ name = 'version' annotation = 'Identifies the version of the XML.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== XML.Schema.xmlNamespace [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a379633FF038E'
+ name = 'xmlNamespace' annotation = 'Identifies the XML namespace of the Schema.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== XML.Schema.elementType [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a387183680041'
+ name = 'elementType' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5C7301CC'
+ referencedEnd = 'a3A2C186203A1' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== XML.ElementType [Class] ==================== -->
+ <Model:Class xmi.id = 'a378659AF0258'
+ name = 'ElementType' annotation = 'This represents an XML element type definition. In XML, each document contains one or more elements. The element structure may, for validation purposes, be constrained using element type and attribute declarations. An element type declaration constrains the element&#x0092;s content.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3298A02900FE' >
+ <Model:Namespace.contents>
+ <!-- ==================== XML.ElementType.schema [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38717F620145'
+ name = 'schema' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32B69F3A0118'
+ referencedEnd = 'a3A2C18630036' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== XML.ElementType.attribute [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38717F9F01EC'
+ name = 'attribute' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32989F9700FE'
+ referencedEnd = 'a32B5D7EF03DD' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== XML.ElementType.content [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38717FCC00EC'
+ name = 'content' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3796417C012B'
+ referencedEnd = 'a37B5A6E0001A' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== XML.org.omg.mof.idl_substitute_name=xmlAttribute [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.944'
+ name = 'org.omg.mof.idl_substitute_name=xmlAttribute' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a38717F9F01EC' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>xmlAttribute</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== XML.Attribute [Class] ==================== -->
+ <Model:Class xmi.id = 'a379631680282'
+ name = 'Attribute' annotation = 'This represents an XML attribute declaration. In XML, attributes are used to associate name-value pairs with elements. Each attribute declaration specifies the name, data type, and default value (if any) of each attribute associated with a given element type.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3A6F62780143' >
+ <Model:Namespace.contents>
+ <!-- ==================== XML.Attribute.defaultKind [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a379638FD01A6'
+ name = 'defaultKind' annotation = 'Identifies the kind of attribute default.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a37B5AF5001F2' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== XML.Attribute.elementType [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3871786900FF'
+ name = 'elementType' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32989FB2023D'
+ referencedEnd = 'a32B5D7EF03D3' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== XML.org.omg.IDL Substitute Name=XmlAttribute [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.945'
+ name = 'org.omg.IDL Substitute Name=XmlAttribute' annotation = ''
+ tagId = 'org.omg.IDL Substitute Name'
+ elements = 'a379631680282' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>XmlAttribute</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== XML.org.omg.mof.idl_substitute_name=XmlAttribute [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.946'
+ name = 'org.omg.mof.idl_substitute_name=XmlAttribute' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a379631680282' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>XmlAttribute</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== XML.Content [Class] ==================== -->
+ <Model:Class xmi.id = 'a3796417C012B'
+ name = 'Content' annotation = 'This represents the content model of an ElementType. In XML, each document contains one or more elements, the boundaries of which are normally delimited by start-tags and end-tags. The body between the start-tag and end-tag is called the element&#x0092;s content. An element type declaration constrains the element&#x0092;s content.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:Namespace.contents>
+ <!-- ==================== XML.Content.type [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37964D7E0065'
+ name = 'type' annotation = 'Identifies the type of the content model.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a37B5B09E035B' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== XML.Content.occurrence [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37B6364A0070'
+ name = 'occurrence' annotation = 'Identifies the allowed occurrence of the content constituents.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a37B5C29302FE' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== XML.Content.elementType [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38717A390308'
+ name = 'elementType' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a378659AF0258'
+ referencedEnd = 'a37B5A6E00038' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== XML.Content.ownedElementType [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38717A600246'
+ name = 'ownedElementType' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3870FE7E0022'
+ referencedEnd = 'a3871031B002A' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== XML.ElementContent [Class] ==================== -->
+ <Model:Class xmi.id = 'a3796465A0087'
+ name = 'ElementContent' annotation = 'This represents an element content which contains only ElementTypeReferences. In XML, an element type has element content when elements of that type must contain only child elements (no character data), optionally separated by white space. In this case, the constraint includes a content model that governs the allowed types of the child elements and the order in which they are allowed to appear.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3796417C012B' >
+ <Model:Namespace.contents>
+ <!-- ==================== XML.ElementContent.order [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37B5C61700FC'
+ name = 'order' annotation = 'Identifies the order type of the element content.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a37B5C648003E' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== XML.ElementContent.ownedContent [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38717CD7033E'
+ name = 'ownedContent' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3796465A0087'
+ referencedEnd = 'a37B641D50123' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== XML.ElementContent.ownerContent [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38717D06029B'
+ name = 'ownerContent' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3796465A0087'
+ referencedEnd = 'a37B641D500FB' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== XML.MixedContent [Class] ==================== -->
+ <Model:Class xmi.id = 'a3796466F03DB'
+ name = 'MixedContent' annotation = 'This represents a mixed content of character data and ElementTypeReferences. In XML, an element type has mixed content when elements of that type may contain character data, optionally interspersed with child elements. In this case, the types of the child elements may be constrained, but not their order or their number of occurrences.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3796417C012B' >
+ <Model:Namespace.contents>
+ <!-- ==================== XML.MixedContent.text [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a387185E803B2'
+ name = 'text' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a387100F30388'
+ referencedEnd = 'a38710460006E' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== XML.AttributeDefault [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a37B5AF5001F2'
+ name = 'AttributeDefault' annotation = 'required, implied, default, fixed'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'AttributeDefault'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_required'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_implied'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_default'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_fixed'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== XML.org.omg.xmi.enumerationUnprefix=xml_ [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.947'
+ name = 'org.omg.xmi.enumerationUnprefix=xml_' annotation = ''
+ tagId = 'org.omg.xmi.enumerationUnprefix'
+ elements = 'a37B5AF5001F2 a37B5B09E035B a37B5C29302FE a37B5C648003E' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>xml_</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== XML.ContentType [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a37B5B09E035B'
+ name = 'ContentType' annotation = 'empty, any, mixed, element'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'ContentType'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_empty'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_any'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_mixed'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_element'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== XML.OccurrenceType [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a37B5C29302FE'
+ name = 'OccurrenceType' annotation = 'one, zeroOrOne, zeroOrMore, OneOrMore'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'OccurrenceType'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_one'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_zeroOrOne'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_zeroOrMore'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_oneOrMore'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== XML.ElementOrderType [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a37B5C648003E'
+ name = 'ElementOrderType' annotation = 'choice, sequence'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'ElementOrderType'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_choice'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'xml_sequence'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== XML.ElementTypeReference [Class] ==================== -->
+ <Model:Class xmi.id = 'a3870FE7E0022'
+ name = 'ElementTypeReference' annotation = 'This represents an XML element type reference. In XML, an element content or a mixed content of an element type may contain references to element type definitions.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3A6F62780143' >
+ <Model:Namespace.contents>
+ <!-- ==================== XML.ElementTypeReference.occurrence [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3871007F02D7'
+ name = 'occurrence' annotation = 'Identifies the allowed occurrence of the ElementTypeReference.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a37B5C29302FE' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== XML.ElementTypeReference.ownerContent [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a387182190202'
+ name = 'ownerContent' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3796417C012B'
+ referencedEnd = 'a3871031B003E' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== XML.Text [Class] ==================== -->
+ <Model:Class xmi.id = 'a387100F30388'
+ name = 'Text' annotation = 'This represents character data. In XML, a mixed content of an element type may contain text.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3A6F62780143' >
+ <Model:Namespace.contents>
+ <!-- ==================== XML.Text.ownerContent [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3871862F00BB'
+ name = 'ownerContent' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3796466F03DB'
+ referencedEnd = 'a38710460008C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== XML.Element [Class] ==================== -->
+ <Model:Class xmi.id = 'a3887821D01A4'
+ name = 'Element' annotation = 'This represents an instance of an ElementType.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a33BC99D60302' />
+ <!-- ==================== XML.org.omg.mof.idl_substitute_name=XmlElement [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.948'
+ name = 'org.omg.mof.idl_substitute_name=XmlElement' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a3887821D01A4' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>XmlElement</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== XML.com.urep.jcr.java_substitute_name=XmlElement [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.949'
+ name = 'com.urep.jcr.java_substitute_name=XmlElement' annotation = ''
+ tagId = 'com.urep.jcr.java_substitute_name'
+ elements = 'a3887821D01A4' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>XmlElement</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== XML.Document [Class] ==================== -->
+ <Model:Class xmi.id = 'a3887828E0002'
+ name = 'Document' annotation = 'This represents an XML document, which is a collection of XML Elements.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a387E624E0365' />
+ <!-- ==================== XML.ElementTypeContent [Association] ==================== -->
+ <Model:Association xmi.id = 'a37B5A6DE022A'
+ name = 'ElementTypeContent' annotation = 'This association relates an ElementType with its Content.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a37B5A6E0001A'
+ name = 'content' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3796417C012B' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a37B5A6E00038'
+ name = 'elementType' annotation = ''
+ isNavigable = 'true' aggregation = 'shared' isChangeable = 'true'
+ type = 'a378659AF0258' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== XML.OwnedElementContent [Association] ==================== -->
+ <Model:Association xmi.id = 'a37B641CB01BF'
+ name = 'OwnedElementContent' annotation = 'This association relates an ElementContent with its constituent ElementContents.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a37B641D500FB'
+ name = 'ownerContent' annotation = ''
+ isNavigable = 'true' aggregation = 'shared' isChangeable = 'true'
+ type = 'a3796465A0087' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a37B641D50123'
+ name = 'ownedContent' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3796465A0087' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== XML.ContentElementTypeReference [Association] ==================== -->
+ <Model:Association xmi.id = 'a3871031902A8'
+ name = 'ContentElementTypeReference' annotation = 'This association relates a Content with its constituent ElementTypeReferences.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3871031B002A'
+ name = 'ownedElementType' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3870FE7E0022' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3871031B003E'
+ name = 'ownerContent' annotation = ''
+ isNavigable = 'true' aggregation = 'shared' isChangeable = 'true'
+ type = 'a3796417C012B' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== XML.MixedContentText [Association] ==================== -->
+ <Model:Association xmi.id = 'a3871045D0380'
+ name = 'MixedContentText' annotation = 'This association relates a MixedContent with its Text.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a38710460006E'
+ name = 'text' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a387100F30388' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a38710460008C'
+ name = 'ownerContent' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3796466F03DB' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== Transformation [Package] ==================== -->
+<Model:Package xmi.id = 'a35E1B0B40042'
+ name = 'Transformation'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>A key aspect of data warehousing is to extract, transform, and load data from
+operational resources to a data warehouse or data mart for analysis. Extraction,
+transformation, and loading can all be characterized as transformations. In fact,
+whenever data needs to be converted from one form to another in data warehousing,
+whether for storage, retrieval, or presentation purposes, transformations are involved.
+Transformation, therefore, is central to data warehousing.
+The Transformation package contains classes and associations that represent common
+transformation metadata used in data warehousing. It covers basic transformations
+among all types of data sources and targets: object-oriented, relational, record,
+multidimensional, XML, OLAP, and data mining.
+The Transformation package is designed to enable interchange of common metadata about transformation tools and activities. Specifically it is designed to:
+
+1. Relate a transformation with its data sources and targets. These data sources and targets can be of any type (e.g., object-oriented, relational) or granularity (e.g., class, attribute, table, column). They can be persistent (e.g., stored in a relational database) or transient.
+
+2. Accommodate both "black box" and "white box" transformations. In the case of "black box" transformations, data sources and targets are related to a transformation and to each other at a coarse-grain level. We know the data sources and targets are related through the transformation, but we don&#x0092;t know how a specific piece of a data source is related to a specific piece of a data target. In the case of "white box" transformations, however, data sources and targets are related to a transformation and to each other at a fine-grain level. We know exactly how a specific piece of a data source is related to a specific piece of a data target through a specific part of the transformation.
+
+3. Allow grouping of transformations into logical units. At the functional level, a logical unit defines a single unit of work, within which all transformations must be executed and completed together. At the execution level, logical units can be used to define the execution grouping and sequencing (either explicitly through precedence constraints or implicitly through data dependencies). A key consideration here is that both parallel and sequential executions (or a combination of both) can be accommodated.
+
+The Transformation package assumes the existence of the following packages that represent types of potential data sources or targets: ObjectModel (object-oriented), Relational, Record, Multidimensional, XML, OLAP, and Data Mining. The Transformation package is an integral part of the following packages: OLAP, Data Mining, Warehouse Process, and Warehouse Operation. In particular, the Transformation and Warehouse Process packages together provide metamodel constructs that facilitate scheduling and execution in data warehousing, and the Transformation and Warehouse Operation packages together provide metamodel constructs that enable data lineage in data warehousing.
+
+This section provides a description of the main features of the Transformation package,
+as illustrated in Figure 13-1 (see specification document for figure).
+
+A transformation transforms a set of source objects into a set of target objects. The elements of a data object set can be any ObjectModel model elements, but typically are tables, columns, or model elements that represent transient, in memory, objects. Data object sets can be both sources and targets for different transformations. In particular, a given data object set can be the target of one transformation and the source of one or more transformations within the same logical unit. This is often the case with transformation that produce and consume temporary objects.
+
+Transformations allow a wide range of types (and granularity) to be defined for their data sources and targets. For example, the source type of a transformation can be an XML schema while the target type is a column, if the transformation deals with storing an XML document in a column of a relational database. More typically, the source types of a transformation are classes and attributes while the target types are tables and columns, or vice versa, if the transformation deals with converting object data into relational data, or vice versa.
+
+Existing programs, queries, or rules (in fact, any ObjectModel operations) can be used to perform a transformation by associating them with the transformation using the transformation use dependency.
+
+Transformations can be grouped into logical units. At the functional level, they are grouped into transformation tasks, each of which defines a set of transformations that must be executed and completed together - a logical unit of work. At the execution level, transformation steps are used to coordinate the flow of control between transformation tasks, with each transformation step executing a single transformation task. The transformation steps are further grouped into transformation activities.
+Within each transformation activity, the execution sequence of its transformation steps are defined either explicitly by using the step precedence dependency or precedence constraint, or implicitly through data dependency.
+
+There are certain "white-box" transformations which are commonly used and which can relate data sources and targets to a transformation and to each other at a detailed level. These transformations are convenient to use and they provide data lineage at a fine-grain level. One such transformation is the transformation map which consists of a set of classifier maps that in turn consists of a set of feature maps or classifier-feature maps. The other is the transformation tree, which represents a transformation as an unary or binary expression tree. For an example usage of the transformation map, please see Figure 13-4.
+
+The Transformation package depends on the following packages:
+
+ omg.org::CWM::ObjectModel::Behavioral
+ omg.org::CWM::ObjectModel::Core
+ omg.org::CWM::Foundation::Expressions
+ omg.org::CWM::Foundation::SoftwareDeployment
+
+The CWM uses packages to control complexity and create groupings of logically interrelated classes and associations. The Transformation package is one such package. Within the Transformation package itself, however, the definition of subpackages is purposefully left out to reduce the length and complexity of the fully qualified names of Transformation classes and associations. There are, however, several groupings of classes and associations that form related sets of functionality within the Transformation package. Although separate subpackages have not been created for these functional areas, their identification improves the understandability of the Transformation package.
+
+The Transformation package contains metamodel elements that support the following functions:
+
+1. Transformation and data lineage. These classes and associations deal with transformations and their sources, targets, constraints, and operations.
+
+2. Transformation grouping and execution. These classes and associations deal with grouping of transformations to form logical units and to define execution sequences.
+
+3. Specialized transformations. These classes and associations define specialized, "white box", transformations that are commonly used in data warehousing. The specific Transformation classes and associations supporting each functional area are delineated in Table 13-1 (see specification document for table).
+
+The metamodel diagram for the Transformation package is split into four parts. The first two diagrams show the Transformation classes and associations, while the last two show the inheritance hierarchy.
+
+13.5 OCL Representation of Transformation Constraints
+
+[C-1] The preceding step and succeeding step of StepPrecedence must not be the same.
+context StepPrecedence
+inv: self.precedingStep-&gt;forAll( p | self.succeedingStep-&gt;forAll( q | p &lt;&gt; q ) )
+
+[C-2] A TransformationTask may not be its own inverse task.
+Identifies the Transformation
+context TransformationTask
+inv: self.inverseTask-&gt;forAll( p | p &lt;&gt; self )
+
+[C-3] A TransformationTask may not be its own original task.
+context TransformationTask
+inv: self.originalTask-&gt;forAll( p | p &lt;&gt; self )
+
+[C-4] The ClassifierMapToCFMap association is derived from the Namespace-ModelElement association. All ownedElement ends of the association must be ClassifierFeatureMaps.
+context ClassifierMapToCFMap
+inv Namespace-ModelElement.allInstances.select( ownedElement.oclIsKindOf(
+ClassifierFeatureMap ) )
+
+[C-5] The ClassifierMapToFeatureMap association is derived from the Namespace-ModelElement association. All ownedElement ends of the association must be FeatureMaps.
+context ClassifierMapToFeatureMap
+inv Namespace-ModelElement.allInstances.select( ownedElement.oclIsKindOf(
+FeatureMap ) )</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Transformation.org.omg.xmi.namespace=CWMTFM [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.951'
+ name = 'org.omg.xmi.namespace=CWMTFM' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a35E1B0B40042' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWMTFM</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Transformation.org.omg.mof.idl_prefix=org.omg.cwm.analysis [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.952'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.analysis' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a35E1B0B40042' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.analysis</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Transformation.org.omg.mof.idl_substitute_name=TransformationModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.953'
+ name = 'org.omg.mof.idl_substitute_name=TransformationModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a35E1B0B40042' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>TransformationModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Transformation.com.urep.jcr.java_prefix=org.omg.java.cwm.analysis [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.954'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.analysis' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a35E1B0B40042' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.analysis</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.955'
+ name = 'Core' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6600C5031F' />
+ <Model:Import xmi.id = 'G.956'
+ name = 'Expressions' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a38207A600078' />
+ <Model:Import xmi.id = 'G.957'
+ name = 'SoftwareDeployment' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3731C42F0314' />
+ <!-- ==================== Transformation.Transformation [Class] ==================== -->
+ <Model:Class xmi.id = 'a36D1C5900149'
+ name = 'Transformation'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a32B69F3A0118' >
+ <Model:ModelElement.annotation>This represents a transformation from a set of sources to a set of targets.
+
+If a model already exists for the object that performs the Transformation, then the model can be related to the Transformation via a TransformationUse dependency.
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Transformation.Transformation.function [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37097EFD0302'
+ name = 'function' annotation = 'Any code or script for the Transformation.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a363559050190' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Transformation.Transformation.functionDescription [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37449EED0210'
+ name = 'functionDescription' annotation = 'A short description for any code or script performed by the Transformation.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Transformation.Transformation.isPrimary [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37449EFF00FE'
+ name = 'isPrimary' annotation = 'This Transformation is the primary transformation for the associated TransformationTask.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Transformation.Transformation.source [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3856BB430348'
+ name = 'source' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36D1C6960146'
+ referencedEnd = 'a36D1C87601BE' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Transformation.Transformation.target [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3874DE1F009B'
+ name = 'target' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36D1C6960146'
+ referencedEnd = 'a36D1C8880232' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Transformation.Transformation.use [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3874DF44016F'
+ name = 'use' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A646F00E6'
+ referencedEnd = 'a33FFE57B03B3' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Transformation.DataObjectSet [Class] ==================== -->
+ <Model:Class xmi.id = 'a36D1C6960146'
+ name = 'DataObjectSet' annotation = 'This represents a set of data objects that can be the source or target of a Transformation.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:Namespace.contents>
+ <!-- ==================== Transformation.DataObjectSet.element [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3874DFCD0375'
+ name = 'element' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5C7301CC'
+ referencedEnd = 'a37093FA10030' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Transformation.DataObjectSet.sourceTransformation [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3874DFF30033'
+ name = 'sourceTransformation' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36D1C5900149'
+ referencedEnd = 'a36D1C87601B4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Transformation.DataObjectSet.targetTransformation [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3874E01D03D7'
+ name = 'targetTransformation' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36D1C5900149'
+ referencedEnd = 'a36D1C8880228' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Transformation.TransformationTask [Class] ==================== -->
+ <Model:Class xmi.id = 'a36D58FEC013E'
+ name = 'TransformationTask'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3A59C2520149' >
+ <Model:ModelElement.annotation>This represents a set of Transformations that must be executed together as a single task (logical unit).
+
+A TransformationTask may have an inverse task. A transformation task that maps a source set "A" into a target set "B" can be reversed by the inverse transformation task that maps "B" into "A".</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Transformation.TransformationTask.transformation [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3874E105029A'
+ name = 'transformation' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36D1C5900149'
+ referencedEnd = 'a3744AC390355' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Transformation.TransformationTask.inverseTask [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3874E13400B7'
+ name = 'inverseTask' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36D58FEC013E'
+ referencedEnd = 'a36E06500016E' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Transformation.TransformationTask.originalTask [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3874E1620208'
+ name = 'originalTask' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36D58FEC013E'
+ referencedEnd = 'a36E065000159' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Transformation.TransformationStep [Class] ==================== -->
+ <Model:Class xmi.id = 'a36D590F003B9'
+ name = 'TransformationStep'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>This represents the usage of a TransformationTask in a TransformationActivity. A TransformationStep relates to one TransformationTask.
+
+TransformationSteps are used to coordinate the flow of control between their TransformationTasks. Ordering of the TransformationSteps are defined using the PrecedenceConstrainedBy dependency.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Transformation.TransformationStep.task [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3874E9FE03CE'
+ name = 'task' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36D58FEC013E'
+ referencedEnd = 'a36D59A840057' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Transformation.TransformationStep.activity [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3874EA0500AD'
+ name = 'activity' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32B69F3A0118'
+ referencedEnd = 'a3A2C18630036' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Transformation.TransformationStep.precedence [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3874EA0A03C1'
+ name = 'precedence' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A649B000A'
+ referencedEnd = 'a33EA67BB010F' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Transformation.TransformationStep.precedingStep [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3874EB33001E'
+ name = 'precedingStep' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A646F00E6'
+ referencedEnd = 'a33FFE57B03B3' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Transformation.TransformationStep.succeedingStep [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3874EB2400F9'
+ name = 'succeedingStep' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A646F00E6'
+ referencedEnd = 'a335C0D7A02E4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Transformation.TransformationActivity [Class] ==================== -->
+ <Model:Class xmi.id = 'a36E070680112'
+ name = 'TransformationActivity'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a33CD6DE5030C' >
+ <Model:ModelElement.annotation>This represents a transformation activity. Each TransformationActivity consists of a set
+of TransformationSteps.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Transformation.TransformationActivity.creationDate [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36E4629500E6'
+ name = 'creationDate' annotation = 'When the TransformationActivity was created.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Transformation.TransformationActivity.step [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3874F3F4030D'
+ name = 'step' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5C7301CC'
+ referencedEnd = 'a3A2C186203A1' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Transformation.PrecedenceConstraint [Class] ==================== -->
+ <Model:Class xmi.id = 'a36E071090100'
+ name = 'PrecedenceConstraint' annotation = 'This is used to define order-of-execution constraint among TransformationSteps. It may be used independent of or in conjunction with StepPrecedence.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A649B000A' />
+ <!-- ==================== Transformation.TransformationUse [Class] ==================== -->
+ <Model:Class xmi.id = 'a36E071EC03C3'
+ name = 'TransformationUse' annotation = 'This is a specialized dependency used to associate a Transformation to the model of an existing object (e.g., program, query, or rule) that performs the transformation.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A646F00E6' >
+ <Model:Namespace.contents>
+ <!-- ==================== Transformation.TransformationUse.type [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36E465970039'
+ name = 'type' annotation = 'Identifies the type of object that can perform the transformation.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Transformation.TransformationUse.transformation [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38751DA40074'
+ name = 'transformation' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5C7301CC'
+ referencedEnd = 'a33FFE57B0395' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Transformation.TransformationUse.operation [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38751DAB00A6'
+ name = 'operation' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5C7301CC'
+ referencedEnd = 'a335C0D7A02A8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Transformation.TransformationMap [Class] ==================== -->
+ <Model:Class xmi.id = 'a374322890098'
+ name = 'TransformationMap' annotation = 'This represents a specialized Transformation which consists of a group of ClassifierMaps.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a36D1C5900149' >
+ <Model:Namespace.contents>
+ <!-- ==================== Transformation.TransformationMap.classifierMap [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3874FCC901B0'
+ name = 'classifierMap' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5C7301CC'
+ referencedEnd = 'a3A2C186203A1' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Transformation.TransformationTree [Class] ==================== -->
+ <Model:Class xmi.id = 'a374322B301CE'
+ name = 'TransformationTree' annotation = 'This represents a specialized Transformation which can be modeled as an expression tree. '
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a36D1C5900149' >
+ <Model:Namespace.contents>
+ <!-- ==================== Transformation.TransformationTree.type [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37498C0303A3'
+ name = 'type' annotation = 'Identifies the type of TransformationTree, which can be unary or binary.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a37B2FFD8035B' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Transformation.TransformationTree.body [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37498C0F0288'
+ name = 'body' annotation = 'Identifies the expression tree that embodies the TransformationTree.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a376A84310237' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Transformation.ClassifierMap [Class] ==================== -->
+ <Model:Class xmi.id = 'a374324450028'
+ name = 'ClassifierMap' annotation = 'This represents a mapping of source Classifiers to target Classifiers. A ClassifierMap may consists of a group of ClassifierFeatureMaps and/or FeatureMaps.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a32B69F3A0118' >
+ <Model:Namespace.contents>
+ <!-- ==================== Transformation.ClassifierMap.function [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a38751AC903CE'
+ name = 'function' annotation = 'Any code or script for the ClassifierMap.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a363559050190' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Transformation.ClassifierMap.functionDescription [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a38751AD00298'
+ name = 'functionDescription' annotation = 'A short description for any code or script performed by the ClassifierMap.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Transformation.ClassifierMap.source [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3875035203C1'
+ name = 'source' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32989FB2023D'
+ referencedEnd = 'a387500880138' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Transformation.ClassifierMap.target [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a387503590032'
+ name = 'target' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32989FB2023D'
+ referencedEnd = 'a3875009900ED' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Transformation.ClassifierMap.transformationMap [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a387521930159'
+ name = 'transformationMap' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32B69F3A0118'
+ referencedEnd = 'a3A2C18630036' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Transformation.ClassifierMap.featureMap [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3875035E010C'
+ name = 'featureMap' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a374324600063'
+ referencedEnd = 'a37498826004E' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Transformation.ClassifierMap.cfMap [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3875036401DD'
+ name = 'cfMap' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3874FE01032B'
+ referencedEnd = 'a3874FE2C0066' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Transformation.FeatureMap [Class] ==================== -->
+ <Model:Class xmi.id = 'a374324600063'
+ name = 'FeatureMap' annotation = 'This represents a mapping of source Features to target Features.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:Namespace.contents>
+ <!-- ==================== Transformation.FeatureMap.function [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a38751B170312'
+ name = 'function' annotation = 'Any code or script for the FeatureMap.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a363559050190' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Transformation.FeatureMap.functionDescription [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a38751B1D0375'
+ name = 'functionDescription' annotation = 'A short description for any code or script performed by the FeatureMap.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Transformation.FeatureMap.source [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a387503CA0193'
+ name = 'source' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32989F9700FE'
+ referencedEnd = 'a387500C70139' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Transformation.FeatureMap.target [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a387503D00354'
+ name = 'target' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32989F9700FE'
+ referencedEnd = 'a387500B00013' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Transformation.FeatureMap.classifierMap [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a387503D602C7'
+ name = 'classifierMap' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a374324450028'
+ referencedEnd = 'a374988260062' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Transformation.TreeType [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a37B2FFD8035B'
+ name = 'TreeType' annotation = 'unary, binary'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'TreeType'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'tfm_unary'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'tfm_binary'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== Transformation.org.omg.xmi.enumerationUnprefix=tfm_ [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.958'
+ name = 'org.omg.xmi.enumerationUnprefix=tfm_' annotation = ''
+ tagId = 'org.omg.xmi.enumerationUnprefix'
+ elements = 'a37B2FFD8035B' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>tfm_</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Transformation.StepPrecedence [Class] ==================== -->
+ <Model:Class xmi.id = 'a385A942E0286'
+ name = 'StepPrecedence' annotation = 'This is used to define explicit order-of-execution relationships among TransformationSteps. It may be used independent of or in conjunction with PrecedenceConstraint'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A646F00E6' >
+ <Model:Namespace.contents>
+ <!-- ==================== Transformation.StepPrecedence.precedingStep [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3874FABE0006'
+ name = 'precedingStep' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5C7301CC'
+ referencedEnd = 'a335C0D7A02A8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Transformation.StepPrecedence.succeedingStep [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3874FAC90002'
+ name = 'succeedingStep' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5C7301CC'
+ referencedEnd = 'a33FFE57B0395' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Transformation.ClassifierFeatureMap [Class] ==================== -->
+ <Model:Class xmi.id = 'a3874FE01032B'
+ name = 'ClassifierFeatureMap' annotation = 'This represents a mapping of Classifiers to Features.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:Namespace.contents>
+ <!-- ==================== Transformation.ClassifierFeatureMap.function [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a38751BC203E0'
+ name = 'function' annotation = 'Any code or script for the FeatureMap.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a363559050190' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Transformation.ClassifierFeatureMap.functionDescription [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a38751BC9017F'
+ name = 'functionDescription' annotation = 'A short description for any code or script performed by the FeatureMap.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Transformation.ClassifierFeatureMap.classifierToFeature [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3887892901B8'
+ name = 'classifierToFeature' annotation = 'Identifies if the mapping is from Classifiers (source) to Features (target). The default is true.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Transformation.ClassifierFeatureMap.classifier [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a387504260159'
+ name = 'classifier' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32989FB2023D'
+ referencedEnd = 'a387500E10104' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Transformation.ClassifierFeatureMap.feature [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3875043F021E'
+ name = 'feature' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32989F9700FE'
+ referencedEnd = 'a387500F9022B' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Transformation.ClassifierFeatureMap.classifierMap [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a387504480022'
+ name = 'classifierMap' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a374324450028'
+ referencedEnd = 'a3874FE2C0070' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Transformation.TransformationSource [Association] ==================== -->
+ <Model:Association xmi.id = 'a36D1C872001E'
+ name = 'TransformationSource' annotation = 'This association relates a Transformation to its sources.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a36D1C87601B4'
+ name = 'sourceTransformation' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a36D1C5900149' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a36D1C87601BE'
+ name = 'source' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a36D1C6960146' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Transformation.TransformationTarget [Association] ==================== -->
+ <Model:Association xmi.id = 'a36D1C886035C'
+ name = 'TransformationTarget' annotation = 'This association relates a Transformation to its targets.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a36D1C8880228'
+ name = 'targetTransformation' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a36D1C5900149' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a36D1C8880232'
+ name = 'target' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a36D1C6960146' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Transformation.TransformationStepTask [Association] ==================== -->
+ <Model:Association xmi.id = 'a36D59A820285'
+ name = 'TransformationStepTask' annotation = 'This association relates a TransformationStep to its TransformationTask.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a36D59A84004D'
+ name = 'step' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a36D590F003B9' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a36D59A840057'
+ name = 'task' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a36D58FEC013E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Transformation.InverseTransformationTask [Association] ==================== -->
+ <Model:Association xmi.id = 'a36E064FC0366'
+ name = 'InverseTransformationTask' annotation = 'This association relates a TransformationTask to its inverse. A transformation task that maps a source set "A" into a target set "B" can be reversed by the inverse transformation task that maps "B" into "A"'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a36E065000159'
+ name = 'originalTask' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a36D58FEC013E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a36E06500016E'
+ name = 'inverseTask' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a36D58FEC013E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Transformation.DataObjectSetElement [Association] ==================== -->
+ <Model:Association xmi.id = 'a37093F9E02FD'
+ name = 'DataObjectSetElement' annotation = 'This association relates a DataObjectSet to its elements.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a37093FA10030'
+ name = 'element' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327A5C7301CC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a37093FA10153'
+ name = 'set' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a36D1C6960146' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Transformation.TransformationTaskElement [Association] ==================== -->
+ <Model:Association xmi.id = 'a3744AC38012D'
+ name = 'TransformationTaskElement' annotation = 'This association relates a TransformationTask to its Transformations.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3744AC390341'
+ name = 'task' annotation = ''
+ isNavigable = 'true' aggregation = 'shared' isChangeable = 'true'
+ type = 'a36D58FEC013E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3744AC390355'
+ name = 'transformation' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a36D1C5900149' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Transformation.ClassifierMapToFeatureMap [Association] ==================== -->
+ <Model:Association xmi.id = 'a3749882402AE'
+ name = 'ClassifierMapToFeatureMap'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:ModelElement.annotation>This association relates a ClassifierMap to its FeatureMaps.
+
+This association is derived from the Namespace-ModelElement association. All ownedElement ends of the association must be FeatureMaps. [C-5]</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a37498826004E'
+ name = 'featureMap' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a374324600063' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a374988260062'
+ name = 'classifierMap' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a374324450028' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Transformation.ClassifierMapToCFMap [Association] ==================== -->
+ <Model:Association xmi.id = 'a3874FE2802AF'
+ name = 'ClassifierMapToCFMap'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:ModelElement.annotation>This association relates a ClassifierMap to its ClassifierFeatureMaps.
+
+This association is derived from the Namespace-ModelElement association. All ownedElement ends of the association must be ClassifierFeatureMaps. [C-4]</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3874FE2C0066'
+ name = 'cfMap' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3874FE01032B' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3874FE2C0070'
+ name = 'classifierMap' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a374324450028' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Transformation.ClassifierMapSource [Association] ==================== -->
+ <Model:Association xmi.id = 'a3875008700BF'
+ name = 'ClassifierMapSource' annotation = 'This association relates a ClassifierMap to its source Classifiers.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a387500880138'
+ name = 'source' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a32989FB2023D' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3875008900CC'
+ name = 'classifierMap' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a374324450028' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Transformation.ClassifierMapTarget [Association] ==================== -->
+ <Model:Association xmi.id = 'a38750098004B'
+ name = 'ClassifierMapTarget' annotation = 'This association relates a ClassifierMap to its target Classifiers.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3875009900ED'
+ name = 'target' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a32989FB2023D' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3875009902CD'
+ name = 'classifierMap' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a374324450028' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Transformation.FeatureMapTarget [Association] ==================== -->
+ <Model:Association xmi.id = 'a387500AF00EE'
+ name = 'FeatureMapTarget' annotation = 'This association relates an FeatureMap to its target Features.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a387500B00013'
+ name = 'target' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a32989F9700FE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a387500B00140'
+ name = 'featureMap' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a374324600063' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Transformation.FeatureMapSource [Association] ==================== -->
+ <Model:Association xmi.id = 'a387500C601BA'
+ name = 'FeatureMapSource' annotation = 'This association relates an FeatureMap to its source Features.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a387500C70139'
+ name = 'source' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a32989F9700FE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a387500C7021F'
+ name = 'featureMap' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a374324600063' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Transformation.CFMapClassifier [Association] ==================== -->
+ <Model:Association xmi.id = 'a387500E000EF'
+ name = 'CFMapClassifier' annotation = 'This association relates a ClassifierFeatureMap to its source/target Features.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a387500E10104'
+ name = 'classifier' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a32989FB2023D' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a387500E102E5'
+ name = 'cfMap' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3874FE01032B' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Transformation.CFMapFeature [Association] ==================== -->
+ <Model:Association xmi.id = 'a387500F80324'
+ name = 'CFMapFeature' annotation = 'Identifies the ClassifierFeatureMap'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a387500F9022B'
+ name = 'feature' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a32989F9700FE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a387500F90311'
+ name = 'cfMap' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3874FE01032B' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== Olap [Package] ==================== -->
+<Model:Package xmi.id = 'a365348E80125'
+ name = 'Olap'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>Online Analytical Processing (OLAP) is a class of analytic application software that exposes business data in a multidimensional format. This multidimensional format usually includes the consolidation of data drawn from multiple and diverse information sources. Unlike more traditionally structured representations (e.g., the tabular format of a relational database), the multidimensional orientation is a more natural expression of the way business enterprises view their strategic data. For example, an analyst might use an OLAP application to examine total sales revenue by product and geographic region over time, or, perhaps, compare sales margins for the same fiscal periods of two consecutive years. The ultimate objective of OLAP is the efficient construction of analytical models that transform raw business data into strategic business insight.
+
+There are many ways to implement OLAP. Most OLAP systems are constructed using OLAP server tools that enable logical OLAP structures to be built on top of a variety of physical database systems, such as relational or native multidimensional databases.
+
+The following features are generally found in most OLAP systems:
+
+ Multidimensional representation of business data.
+ Upward consolidation of multidimensional data in a hierarchical manner, possibly with the application of specialized processing rules.
+ The ability to navigate a hierarchy from a consolidated value to the lower level values forming it.
+ Support for time-series analysis; i.e., OLAP users are generally concerned with data and consolidations at specific points in time -- By date, week, quarter, etc.
+ Support for modeling and scenario analysis -- A user should be able to apply arbitrary "what-if" analyses to a result set without affecting the stored information.
+ Consistent response times, regardless of how queries are formulated -- This is critical for effective analysis and modeling.
+
+OLAP applications integrate well into the data warehousing environment, because a data warehouse provides relatively clean and stable data stores to drive the OLAP application. These data stores are usually maintained in relational tables that can be read directly by OLAP tools or loaded into OLAP servers. These relational tables are often structured in a manner that reveals the inherent dimensionality of the data (such as the ubiquitous Star and Snowflake schemas). Also, the data transformation and mapping services provided by a data warehouse can be used to supply OLAP systems with both metadata and data. Transformation-related metadata can be used to track the
+lineage of consolidated OLAP data back to its various sources.
+
+The primary objectives of the CWM OLAP package are:
+
+ Define a metamodel of essential OLAP concepts common to most OLAP systems.
+ Provide a facility whereby instances of the OLAP metamodel are mapped to deployment-capable structures (i.e., models of physical data resources, such as the CWM Relational and Multidimensional packages).
+ Ensure that navigation through the logical OLAP model hierarchy and its various resource models is always performed in a uniform manner (i.e., by defining a standard usage of the CWM Transformation package as a means of implementing these mappings).
+ Leverage services provided by other CWM packages, where appropriate (e.g., use the CWM Foundation package to supply a standard representation of expressions).
+
+The OLAP package depends on the following packages:
+
+ org.omg::CWM::ObjectModel::Core
+ org.omg::CWM::Foundation::Expressions
+ org.omg::CWM::Analysis::Transformation
+
+The major classes and associations of the OLAP metamodel are shown in Figure 14-1. Schema is the logical container of all elements comprising an OLAP model. It is the root element of the model hierarchy and marks the entry point for navigating OLAP models.
+
+A Schema contains Dimensions and Cubes. A Dimension is an ordinate within a multidimensional structure and consists of a list of unique values (i.e., members) that share a common semantic meaning within the domain being modeled. Each member designates a unique position along its ordinate.
+
+A Cube is a collection of analytic values (i.e., measures) that share the same dimensionality. This dimensionality is specified by a set of unique Dimensions from the Schema. Each unique combination of members in the Cartesian product of the Cube&#x0092;s Dimensions identifies precisely one data cell within a multidimensional structure.
+
+CubeDimensionAssociation relates a Cube to its defining Dimensions. Features relevant to Cube-Dimension relationships (e.g., calcHierarchy) are exposed by this class.
+
+A Dimension has zero or more Hierarchies. A Hierarchy is an organizational structure that describes a traversal pattern through a Dimension, based on parent/child relationships between members of a Dimension. Hierarchies are used to define both navigational and consolidation/computational paths through the Dimension (i.e., a value associated with a child member is aggregated by one or more parents). For example, a Time Dimension with a base periodicity of days might have a Hierarchy
+specifying the consolidation of days into weeks, weeks into months, months into quarters, and quarters into years.
+
+A specific Hierarchy may be designated as the default Hierarchy for display purposes (e.g., a user interface that displays the Dimension as a hierarchical tree of members). CubeDimensionAssociation can also identify a particular Hierarchy as the default Hierarchy for consolidation calculations performed on the Cube.
+
+MemberSelection models mechanisms capable of partitioning a Dimension&#x0092;s collection of members. For example, consider a Geography Dimension with members representing cities, states, and regions. An OLAP client interested specifically in cities might define an instance of MemberSelection that extracts the city members.
+
+CubeRegion models a sub-unit of a Cube that is of the same dimensionality as the Cube itself. Each "dimension" of a CubeRegion is represented by a MemberSelection of the corresponding Dimension of the Cube. Each MemberSelection may define some subset of its Dimension&#x0092;s members.
+
+CubeRegions are used to implement Cubes. A Cube may be realized by a set of CubeRegions that map portions of the logical Cube to physical data sources. The MemberSelections defining CubeRegions can also be grouped together via MemberSelectionGroups, enabling the definition of CubeRegions with specific semantics. For example, one can specify a CubeRegion containing only the "input level" data cells of a Cube.
+
+A CubeRegion may own any number of CubeDeployments. CubeDeployment is a metaclass that represents an implementation strategy for a multidimensional structure. The ordering of the CubeDeployment classes may optionally be given some implementation-specific meaning (e.g., desired order of selection of several possible deployment strategies, based on optimization considerations).
+
+The OLAP metamodel defines two special types of Dimension: Time and Measure. A Time Dimension provides a means of representing time-series data within a multidimensional structure. The members of a Time Dimension usually define some base periodicity (e.g., days of the week). The implementation of a Time Dimension might provide support for advanced "time-intelligent" functionality, such as the ability to automatically convert between different periodicities and calendars.
+
+The members of a Measure Dimension describe the meaning of the analytic values stored in each data cell of a multidimensional structure. For example, an OLAP application may define Sales, Quantity and Weight as its measures. In this case, each data cell within the Cube stores three values, with each value corresponding to one of the three measures. A measure may have an associated data type. For example, Sales might be of a monetary type, Quantity an integer, and Weight a real number.
+
+The OLAP metamodel specifies two subclasses of Hierarchy: LevelBasedHierarchy and ValueBasedHierarchy.
+
+LevelBasedHierarchy describes hierarchical relationships between specific levels of a Dimension. LevelBasedHierarchy is used to model both "pure level" hierarchies (e.g., dimension-level tables) and "mixed" hierarchies (i.e., levels plus linked nodes). Dimensional levels are modeled by the Level class, a subclass of MemberSelection that partitions a Dimension&#x0092;s members into disjoint subsets, each representing a distinct level.
+
+For example, the Geography Dimension cited earlier contains members representing cities, states, and regions, such as "Stamford", "Connecticut", and "NorthEast". It might also contain a single member called "USA" representing all regions of the United States. Therefore, the Geography Dimension could have four Levels named "City", "State", 'Region", and "ALL", respectively. Each Level specifies the subset of members belonging to it: All cities belong to the "City" Level, all states belong to the "State" Level, all regions belong to the "Region" Level, and the single "USA" member belongs to the "ALL" Level.
+
+When used in the definition of a consolidation path, the meaning of "level" is quite clear: Members occupying a given Level consolidate into the next higher Level (e.g., City rolls up into State, State into Region, and Region into ALL).
+
+LevelBasedHierarchy contains an ordered collection of HierarchyLevelAssocations that defines the natural hierarchy of the Dimension. The ordering defines the hierarchical structure in top-down fashion (i.e., the "first" HierarchyLevelAssociation in the ordered collection represents the upper-most level of the dimensional hierarchy).
+
+A HierarchyLevelAssociation may own any number of DimensionDeployments. DimensionDeployment is a metaclass that represents an implementation strategy for hierarchical Dimensions. The ordering of the DimensionDeployment classes may optionally be given an implementation-specific meaning (e.g., desired order of selection of several possible deployment strategies, based on optimization
+considerations).
+
+A ValueBasedHierarchy defines a hierarchical ordering of members in which the concept of level has little or no significance. Instead, the topological structure of the hierarchy conveys meaning. ValueBasedHierarchies are often used to model situations where members are classified or ranked according to their distance from a common root member (e.g., an organizational chart of a corporation). In this case, each member of the hierarchy has some specific "metric" or "value" associated it with it. ValueBasedHierarchy can be used to model pure "linked node" hierarchies (e.g.,
+asymmetric hierarchical graphs or parent-child tables).
+
+As with LevelBasedHierarchy, ValueBasedHierarchy also has an ordered collection of dimensionDeployments, where the ordering semantics are left to implementations to define.
+
+Figure 14-3 illustrates how classes of the OLAP metamodel inherit from the CWM
+Object Model. Two classes requiring further explanation are:
+
+ Measure: A subclass of Attribute that describes the meaning of values stored in the data cells of a multidimensional structure. Different OLAP models often give different interpretations to the term "measure". In a relational Star Schema, individual measures might be represented by non-key columns of a Fact table (e.g., "Sales" and "Quantity" columns). In this case, measure may be an attribute of a Cube or CubeRegion that models the Fact table. On the other hand, measures can
+also be represented by members of a Measure Dimension. A Fact table supporting this representation has a single Measure column with column values consisting of the members "Sales" and "Quantity", and a single "value" column (i.e., an implicit data dimension) storing the corresponding measure values. A similar notion of Measure Dimension is used in modeling pure hypercube representations of
+multidimensional servers. Thus, the concept of measure can be represented either as a Dimenson or as an Attribute, depending on the type of OLAP system being modeled.
+
+ Coded Level: A subclass of Level that assigns a unique encoding, or label, to each of its members. CodedLevel is not essential to the OLAP metamodel, but is provided as a helper class for certain applications that might benefit from the ability of OLAP systems to structure data hierarchically. For example, CodedLevel could be used to model systems of nomenclature or classification.
+
+The CWM OLAP metamodel describes logical models of OLAP systems, but does not directly specify how an OLAP system is physically deployed. Modeling the deployment of an OLAP system requires mapping instances of OLAP metaclasses to instances of other CWM metaclasses representing physical resources (e.g., mapping an OLAP Dimension to a Relational Table). This approach offers several advantages:
+
+ The status of the OLAP metamodel as a conceptual model is preserved by this level of indirection. When using OLAP, a client may perceive to be working directly with OLAP objects, but the actual implementation of those objects is hidden from the client. For example, a client may view a member as a value of a Dimension, but whether that member value comes from a row of a relational table, or from a cell in a multidimensional database, is usually not obvious to the client. On the other hand, if a client needs to determine how a logical OLAP structure is physically realized, the metadata describing this mapping is fully available (assuming that the implementation allows the client to drill-down through the metadata).
+
+ The possibility of defining mappings based on expressions means that the amount of metadata required to describe large models (e.g., Dimensions containing large collections of members) can be kept within reasonable bounds. It is generally more efficient to provide expressions that specify where large metadata sets reside, how to connect to them, and how to map their contents, rather than representing them directly as part of the metadata content.
+
+All of the OLAP metaclasses are potential candidates for such deployment mappings. In addition, some OLAP models may also define mappings between several OLAP metaclass instances, forming a natural hierarchy of logical objects (e.g., Dimension Attributes are mapped to Level Attributes which, in turn, are mapped to Table Columns).
+
+The CWM Transformation package is used as the primary means of describing these mappings. A modeler constructing an OLAP model based on CWM will generally define instances of the TransformationMap metaclass to link logical OLAP objects together, and to link those logical objects to other objects representing their physical data sources.
+
+StructureMap is a subclass of TransformationMap that models structure-oriented transformation mappings (i.e., member identity and hierarchical structure). This type of transformation mapping needs to be connected to the OLAP metamodel in a very specific way (according to Level and Hierarchy), so the StructureMap subclass is defined to make these associations explicit. Two specific usages of StructureMap are defined: ListOfValues, which maps attributes identifying members residing at a specific Level, or at a specific Level within a particular Hierarchy, and ImmediateParent, which maps attributes identifying the hierarchical parent(s) of the members.
+
+On the other hand, relatively simple TransformationMaps can be defined within any OLAP model to represent attribute-oriented transformations (e.g., mapping Dimension Attributes to Table Columns that store attribute values).
+
+ContentMap is a subclass of TransformationMap that models content-oriented transformaton mappings (i.e., cell data or measure values). For example, an instance of ContentMap might be used to map each of a CubeRegion&#x0092;s Measures to Columns of an underlying Fact Table.
+
+Note that, in either case (structural mapping or content mapping), the traversal patterns used by any CWM OLAP implementation are always the same, since both deployment mappings are based on the same usage of CWM TransformationMaps. In addition to representing structural mappings, instances of TransformationMap and its subclasses are also capable of storing implementation-dependent functions or procedures that yield the instance values associated with mapped model elements. For example, a "list of values" StructureMap might store an SQL statement such as "select memberName from Product where productFamily = &#x0092;consumerElectronics&#x0092; ", as the value of its formula attribute.
+
+Figure 14-4 illustrates the CWM metaclasses and associations that describe deployment mappings between logical OLAP models and physical resource models. Note that it is possible to combine both Cube (content) and Dimension (structure) deployments together within the context of a single OLAP Schema (via the DeploymentGroup metaclass). Thus, an OLAP Schema can have several possible deployments that users may select based on implementation-specific considerations (e.g., physical optimizations).
+
+OCL Representation of OLAP Constraints
+
+[C-1] Ensure that the Dimensions defining a Cube are unique.
+context Cube inv:
+self.cubeDimensionAssociation-&gt;forAll( c1, c2 | c1 &lt;&gt; c2 implies
+c1.dimension &lt;&gt; c2.dimension )
+
+[C-2] A Cube without CubeRegions cannot be mapped to a deployment structure (i.e., physical source of data).
+context Cube inv:
+self.cubeRegion-&gt;isEmpty implies self.isVirtual = true
+
+[C-3] If a calcHierarchy is defined, it must be a Hierarchy owned by the Dimension referenced by the CubeDimensionAssociation.
+context CubeDimensionAssociation inv:
+self.calcHierarchy-&gt;notEmpty implies self.calcHierarchy.dimension = self.dimension
+
+[C-4] A "fully realized" CubeRegion has no MemberSelectionGroups (and hence, no MemberSelections).
+context CubeRegion inv:
+self.isFullyRealized implies self.memberSelectionGroup-&gt;isEmpty
+
+[C-5] A CubeRegion defined by MemberSelections must have, for each Dimension of its owning Cube, a corresponding MemberSelection within each of its
+MemberSelectionGroups.
+context CubeRegion inv:
+self.memberSelectionGroup-&gt;notEmpty implies
+self.cube.cubeDimensionAssociation-&gt;forAll( d |
+self.memberSelectionGroup-&gt;forAll( g |
+g.memberSelection-&gt;exists( m | m.dimension = d.dimension ) ) )
+
+[C-6] A CubeRegion defined by MemberSelections must have, within each MemberSelectionGroup, a MemberSelection corresponding to each Dimension of its
+owning Cube.
+context CubeRegion inv:
+self.memberSelectionGroup-&gt;notEmpty implies
+self.memberSelectionGroup-&gt;forAll( g |
+g.memberSelection-&gt;forAll( m |
+self.cube.cubeDimensionAssociation-&gt;exists( d | d.dimension = m.dimension ) ) )
+
+[C-7] A Dimension may be a Time Dimension, a Measure Dimension, or neither, but never both types at the same time.
+context Dimension inv:
+not ( self.isTime and self.isMeasure )
+
+[C-8] The default display Hierarchy (if defined) must be one of the Hierarchies owned by the Dimension.
+context Dimension inv:
+self.displayDefault-&gt;notEmpty implies self.hierarchy-&gt;includes( self.displayDefault )
+
+[C-9] An instance of DimensionDeployment must be referenced exclusively by either a HierarchyLevelAssociation or a ValueBasedHierarchy.
+context DimensionDeployment inv:
+self.hierarchyLevelAssociation-&gt;isEmpty xor self.valueBasedHierarchy-&gt;isEmpty
+
+[C-10] Within a DimensionDeployment, an "immediate parent" StructureMap must always have an associated and distinct "list of values" StructureMap.
+context DimensionDeployment inv:
+self.immediateParent-&gt;notEmpty implies
+( self.listOfValues-&gt;notEmpty and self.listOfValues &lt;&gt; self.immediateParent )
+
+[C-11] A StructureMap referenced as a "list of values" StructureMap must not reside outside of the DimensionDeployment&#x0092;s collection of StructureMaps.
+context DimensionDeployment inv:
+self.listOfValues-&gt;notEmpty implies self.structureMap-&gt;includes( self.listOfValues )
+
+[C-12] A StructureMap referenced as an "immediate parent" StructureMap must not reside outside of the DimensionDeployment&#x0092;s collection of StructureMaps.
+context DimensionDeployment inv:
+self.immediateParent-&gt;notEmpty implies
+self.structureMap-&gt;includes( self.immediateParent )
+
+[C-13] The currentLevel of each HierarchyLevelAssociation must refer to a Level owned by the Dimension of the LevelBasedHierarchy containing the HierarchyLevelAssociation.
+context LevelBasedHierarchy inv:
+self.hierarchyLevelAssociation-&gt;notEmpty implies
+self.hierarchyLevelAssociation-&gt;forAll( h |
+self.dimension.memberSelection
+-&gt;select( oclType = Olap::Level )-&gt;includes( h.currentLevel ) )
+
+[C-14] No two HierarchyLevelAssociations may designate the same Level instance as their "current level".
+context LevelBasedHierarchy inv:
+self.hierarchyLevelAssociation-&gt;forAll( h1, h2 | h1 &lt;&gt; h2 implies
+h1.currentLevel &lt;&gt; h2.currentLevel )</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Olap.org.omg.xmi.namespace=CWMOLAP [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.959'
+ name = 'org.omg.xmi.namespace=CWMOLAP' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a365348E80125' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWMOLAP</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Olap.org.omg.mof.idl_prefix=org.omg.cwm.analysis [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.960'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.analysis' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a365348E80125' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.analysis</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Olap.org.omg.mof.idl_substitute_name=OlapModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.961'
+ name = 'org.omg.mof.idl_substitute_name=OlapModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a365348E80125' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>OlapModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Olap.com.urep.jcr.java_prefix=org.omg.java.cwm.analysis [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.962'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.analysis' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a365348E80125' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.analysis</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.963'
+ name = 'Core' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6600C5031F' />
+ <Model:Import xmi.id = 'G.964'
+ name = 'Expressions' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a38207A600078' />
+ <Model:Import xmi.id = 'G.965'
+ name = 'Transformation' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a35E1B0B40042' />
+ <!-- ==================== Olap.ContentMap [Class] ==================== -->
+ <Model:Class xmi.id = 'a3A5680DA0284'
+ name = 'ContentMap' annotation = 'ContentMap is a subclass of TransformationMap that maps CubeRegion attributes to their physical data sources.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a374322890098' >
+ <Model:Namespace.contents>
+ <!-- ==================== Olap.ContentMap.cubeDeployment [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A5683CC021A'
+ name = 'cubeDeployment' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A5634210088'
+ referencedEnd = 'a3A5681810162' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Olap.Cube [Class] ==================== -->
+ <Model:Class xmi.id = 'a36F832E20069'
+ name = 'Cube'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3298A02900FE' >
+ <Model:ModelElement.annotation>A Cube is a collection of analytic values (i.e., measures) that share the same dimensionality. This dimensionality is specified by a set of unique Dimensions from the Schema. Each unique combination of members in the Cartesian product of the Cube&#x0092;s Dimensions identifies precisely one data cell within a multidimensional structure.
+
+Synonyms: Multidimensional Array, Hypercube, Hypervolume.
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Olap.Cube.isVirtual [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a378B3FA90038'
+ name = 'isVirtual' annotation = 'If true, then this Cube is a Virtual Cube (i.e., it has no physical realization).'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Olap.Cube.cubeDimensionAssociation [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3858E5780008'
+ name = 'cubeDimensionAssociation' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a378B40100236'
+ referencedEnd = 'a378B40D102A2' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.Cube.cubeRegion [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3858E75E01D4'
+ name = 'cubeRegion' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A4E8CEF02F0'
+ referencedEnd = 'a3A4E8EAF02D8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.Cube.schema [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A6B4871001E'
+ name = 'schema' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36F832D2039C'
+ referencedEnd = 'a3A48C1700212' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Olap.CubeDeployment [Class] ==================== -->
+ <Model:Class xmi.id = 'a3A5634210088'
+ name = 'CubeDeployment' annotation = 'CubeDeployment represents a particular implementation strategy for the data portions of an OLAP model. It does so by organizing a collection of ContentMaps, which in turn define a mapping to an implementation model.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3298A02900FE' >
+ <Model:Namespace.contents>
+ <!-- ==================== Olap.CubeDeployment.cubeRegion [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A5638A60177'
+ name = 'cubeRegion' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A4E8CEF02F0'
+ referencedEnd = 'a3A5636B10271' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.CubeDeployment.deploymentGroup [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A563AF6008B'
+ name = 'deploymentGroup' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A5639C9022D'
+ referencedEnd = 'a3A563A2E01CE' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.CubeDeployment.contentMap [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A56835E0316'
+ name = 'contentMap' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A5680DA0284'
+ referencedEnd = 'a3A5681810144' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Olap.CubeDimensionAssociation [Class] ==================== -->
+ <Model:Class xmi.id = 'a378B40100236'
+ name = 'CubeDimensionAssociation'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3298A02900FE' >
+ <Model:ModelElement.annotation>CubeDimensionAssociation relates a Cube to the Dimensions that define it. Features relevant to Cube-Dimension relationships (e.g., calcHierarchy) are exposed by this class.
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Olap.CubeDimensionAssociation.dimension [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38592DFB021B'
+ name = 'dimension' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3777B4770109'
+ referencedEnd = 'a378B40D9019F' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.CubeDimensionAssociation.cube [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38592DF40044'
+ name = 'cube' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36F832E20069'
+ referencedEnd = 'a378B40D10248' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.CubeDimensionAssociation.calcHierarchy [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3859421302FF'
+ name = 'calcHierarchy' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36F91D39014A'
+ referencedEnd = 'a37A791DE0201' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Olap.CubeRegion [Class] ==================== -->
+ <Model:Class xmi.id = 'a3A4E8CEF02F0'
+ name = 'CubeRegion'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3298A02900FE' >
+ <Model:ModelElement.annotation>CubeRegion models a sub-unit of a Cube of the same dimensionality as the Cube itself, with each Dimension optionally subsetted in its list of members.
+
+When mapped to its physical source, a CubeRegion contains data cells identified by the member combinations of the Cartesian product of the CubeRegion's associated Dimensions and Measures.
+
+The relative ordering of CubeDeployment classes optionally implies a desired order of selection of the CubeDeployments, based on implementation-specific considerations (e.g., optimized access of aggregate data).
+
+Synonyms: Sub-Cube, Partition, Slice, Region, Area.
+
+Misc. notes:
+1. A CubeRegion is not a Cube, and a Cube is not a CubeRegion.
+2. A Cube has a Measure and CubeRegion may have a corresponding measure (Measures are Attributes).
+3. A Cube may or may not have CubeRegions.
+4. If a Cube does not have a CubeRegion, then it's not physically mapped (it's virtual). All physical mapping is based on the CubeRegion , not the Cube.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Olap.CubeRegion.isReadOnly [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A4E8DB00366'
+ name = 'isReadOnly' annotation = 'If true, then the CubeRegion content is read-only (i.e., may not be written or updated through the CubeRegion -- e.g., a CubeRegion implemented via an SQL view may not permit updates to the underlying base table).'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Olap.CubeRegion.isFullyRealized [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A4E8DA3024F'
+ name = 'isFullyRealized' annotation = 'If true, then this CubeRegion has a direct physical realization and is not bound by any MemberSelections.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Olap.CubeRegion.memberSelectionGroup [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A4E8DED00D9'
+ name = 'memberSelectionGroup' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3846924F008C'
+ referencedEnd = 'a3A4E8EB502CC' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.CubeRegion.cube [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A4E8DF30163'
+ name = 'cube' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36F832E20069'
+ referencedEnd = 'a3A4E8EAF0300' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.CubeRegion.cubeDeployment [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A56372A03D3'
+ name = 'cubeDeployment' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A5634210088'
+ referencedEnd = 'a3A5636B1025D' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Olap.DeploymentGroup [Class] ==================== -->
+ <Model:Class xmi.id = 'a3A5639C9022D'
+ name = 'DeploymentGroup'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5D19033E' >
+ <Model:ModelElement.annotation>DeploymentGroup represents a logical grouping of model elements defining a single, complete deployment of an instance of Olap Schema (i.e., CubeDeployments and DimensionDeployments).
+
+The usage of DeploymentGroup is as follows: A user may specify a particular DeploymentGroup as the session-wide, default deployment for all metadata queries performed throughout the session. Alternatively, for queries involving some particular deployed object (e.g., a Cube or a Dimension), the user may be asked to choose from a list of deployments. This either becomes the default deployment for the remainder of the session, or the user may continue to be asked to specify a deployment for each subsequent query against deployed objects.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Olap.DeploymentGroup.schema [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A5A1765016A'
+ name = 'schema' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36F832D2039C'
+ referencedEnd = 'a3A5639DA00C9' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.DeploymentGroup.cubeDeployment [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A563BC30306'
+ name = 'cubeDeployment' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A5634210088'
+ referencedEnd = 'a3A563A2E01A6' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.DeploymentGroup.dimensionDeployment [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A563BCB02AE'
+ name = 'dimensionDeployment' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A48C4C001EC'
+ referencedEnd = 'a3A563A3002F3' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Olap.Dimension [Class] ==================== -->
+ <Model:Class xmi.id = 'a3777B4770109'
+ name = 'Dimension'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3298A02900FE' >
+ <Model:ModelElement.annotation>A Dimension is an ordinate within a multidimensional structure, and consists of an ordered list of values (i.e., members) that share a common semantic meaning within the domain being modeled. Each member designates a unique position along its ordinate.
+
+Typical Dimensions are: Time, Product, Geography, Scenario (e.g., actual, budget, forecast), Measure (e.g., sales, quantity).
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Olap.Dimension.isTime [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a378EB9EC017C'
+ name = 'isTime' annotation = 'If true, then this Dimension is a Time Dimension (i.e., its members collectively represent a time series).'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Olap.Dimension.isMeasure [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37781F670265'
+ name = 'isMeasure' annotation = 'If true, then this Dimension is a Measure Dimension (i.e., its members represent Measures).'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Olap.Dimension.hierarchy [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3859403D0259'
+ name = 'hierarchy' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36F91D39014A'
+ referencedEnd = 'a378EBB17015E' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.Dimension.memberSelection [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a385940440154'
+ name = 'memberSelection' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36F91E2C00D9'
+ referencedEnd = 'a377D39B6015D' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.Dimension.cubeDimensionAssociation [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a385E551503B2'
+ name = 'cubeDimensionAssociation' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a378B40100236'
+ referencedEnd = 'a378B40D901E5' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.Dimension.displayDefault [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a385943F2002A'
+ name = 'displayDefault' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36F91D39014A'
+ referencedEnd = 'a378EBB2B010C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.Dimension.schema [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A6B48AB0248'
+ name = 'schema' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36F832D2039C'
+ referencedEnd = 'a3A48C1730068' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Olap.DimensionDeployment [Class] ==================== -->
+ <Model:Class xmi.id = 'a3A48C4C001EC'
+ name = 'DimensionDeployment'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3298A02900FE' >
+ <Model:ModelElement.annotation>DimensionDeployment represents a particular implementation strategy for the dimensional/hierarchical portions of an OLAP model. It does so by organizing a collection of StructureMaps, which in turn define a mapping to an implementation model.
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Olap.DimensionDeployment.hierarchyLevelAssociation [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A48E6DF000C'
+ name = 'hierarchyLevelAssociation' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a37488CDF03BA'
+ referencedEnd = 'a3A48E4C50037' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.DimensionDeployment.valueBasedHierarchy [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A48E6E80380'
+ name = 'valueBasedHierarchy' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a374992C8031C'
+ referencedEnd = 'a3A48E4CD02C4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.DimensionDeployment.structureMap [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A48E96802B8'
+ name = 'structureMap' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a374CB0810199'
+ referencedEnd = 'a3A48E8D40157' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.DimensionDeployment.listOfValues [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A48EB61015A'
+ name = 'listOfValues' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a374CB0810199'
+ referencedEnd = 'a3A48E9FE024A' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.DimensionDeployment.immediateParent [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A48EBDD0131'
+ name = 'immediateParent' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a374CB0810199'
+ referencedEnd = 'a3A48EA08003C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.DimensionDeployment.deploymentGroup [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A563B420289'
+ name = 'deploymentGroup' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A5639C9022D'
+ referencedEnd = 'a3A563A300343' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Olap.Hierarchy [Class] ==================== -->
+ <Model:Class xmi.id = 'a36F91D39014A'
+ name = 'Hierarchy' annotation = 'A Hierarchy is an organizational structure that imposes a parent/child ordering on the members of the Dimension, usually to define either a navigational or consolidation/computational paths through the Dimension (i.e., a value associated with a child member is aggregated into one or more parents). '
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3298A02900FE' >
+ <Model:Namespace.contents>
+ <!-- ==================== Olap.Hierarchy.dimension [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a385E5B61032B'
+ name = 'dimension' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3777B4770109'
+ referencedEnd = 'a378EBB170118' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.Hierarchy.cubeDimensionAssociation [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a387F1D6A01FC'
+ name = 'cubeDimensionAssociation' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a378B40100236'
+ referencedEnd = 'a37A791DE021F' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.Hierarchy.defaultedDimension [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A6B59B302CE'
+ name = 'defaultedDimension' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3777B4770109'
+ referencedEnd = 'a378EBB2B013E' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.Hierarchy.hierarchyMemberSelectionGroup [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3BCC47E60350'
+ name = 'hierarchyMemberSelectionGroup' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3BCC44C502D3'
+ referencedEnd = 'a3BCC4698011F' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Olap.HierarchyLevelAssociation [Class] ==================== -->
+ <Model:Class xmi.id = 'a37488CDF03BA'
+ name = 'HierarchyLevelAssociation'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3298A02900FE' >
+ <Model:ModelElement.annotation>HierarchyLevelAssociation is a class that orders Levels within a LevelBasedHierarchy, and provides a means of mapping Level/Hierarchy-oriented Dimension attributes to one or more physical deployments.
+
+The relative ordering of DimensionDeployment classes optionally implies a desired order of selection of DimensionDeployments, based on implementation-specific considerations (e.g., optimized access of aggregate data).</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Olap.HierarchyLevelAssociation.levelBasedHierarchy [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a385E673D0379'
+ name = 'levelBasedHierarchy' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a37488B69027C'
+ referencedEnd = 'a37488D0602D0' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.HierarchyLevelAssociation.currentLevel [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38724903031F'
+ name = 'currentLevel' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a37488DB702D4'
+ referencedEnd = 'a37488F180037' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.HierarchyLevelAssociation.dimensionDeployment [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a385E6E9D0399'
+ name = 'dimensionDeployment' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A48C4C001EC'
+ referencedEnd = 'a3A48E4C50019' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Olap.LevelBasedHierarchy [Class] ==================== -->
+ <Model:Class xmi.id = 'a37488B69027C'
+ name = 'LevelBasedHierarchy'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a36F91D39014A' >
+ <Model:ModelElement.annotation>A LevelBasedHierarchy is a hierarchy that describes relationships between specific levels of a Dimension. LevelBasedHierarchy can be used to model to "pure level" hierarchies (e.g., dimension-level tables) and "mixed" hierarchies (i.e., levels + linked nodes).
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Olap.LevelBasedHierarchy.hierarchyLevelAssociation [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a385E66E8010A'
+ name = 'hierarchyLevelAssociation' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a37488CDF03BA'
+ referencedEnd = 'a37488D0602D1' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Olap.MemberSelectionGroup [Class] ==================== -->
+ <Model:Class xmi.id = 'a3846924F008C'
+ name = 'MemberSelectionGroup' annotation = 'MemberSelectionGroup enables the grouping together of semantically-related MemberSelections.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3298A02900FE' >
+ <Model:Namespace.contents>
+ <!-- ==================== Olap.MemberSelectionGroup.memberSelection [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a385E40B6037E'
+ name = 'memberSelection' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36F91E2C00D9'
+ referencedEnd = 'a37BE29740058' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.MemberSelectionGroup.cubeRegion [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a385E59C00012'
+ name = 'cubeRegion' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A4E8CEF02F0'
+ referencedEnd = 'a3A4E8EB502F4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Olap.MemberSelection [Class] ==================== -->
+ <Model:Class xmi.id = 'a36F91E2C00D9'
+ name = 'MemberSelection' annotation = 'MemberSelection represents an arbitrary subset of the members of a Dimension.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3298A02900FE' >
+ <Model:Namespace.contents>
+ <!-- ==================== Olap.MemberSelection.dimension [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a385E5836028C'
+ name = 'dimension' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3777B4770109'
+ referencedEnd = 'a377D39B60153' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.MemberSelection.memberSelectionGroup [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a385E584F0129'
+ name = 'memberSelectionGroup' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3846924F008C'
+ referencedEnd = 'a37BE2974009E' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Olap.Schema [Class] ==================== -->
+ <Model:Class xmi.id = 'a36F832D2039C'
+ name = 'Schema' annotation = 'Schema contains all elements comprising an OLAP model. A Schema may also contain any number of DeploymentGroups, representing the various physical deployments of the logical Schema.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5D19033E' >
+ <Model:Namespace.contents>
+ <!-- ==================== Olap.Schema.cube [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A5A17DA03DF'
+ name = 'cube' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36F832E20069'
+ referencedEnd = 'a3A48C17001E0' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.Schema.dimension [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A5A18BA011A'
+ name = 'dimension' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3777B4770109'
+ referencedEnd = 'a3A48C1730018' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.Schema.deploymentGroup [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A5A19000193'
+ name = 'deploymentGroup' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A5639C9022D'
+ referencedEnd = 'a3A5639DA00BE' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Olap.ValueBasedHierarchy [Class] ==================== -->
+ <Model:Class xmi.id = 'a374992C8031C'
+ name = 'ValueBasedHierarchy'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a36F91D39014A' >
+ <Model:ModelElement.annotation>ValueBasedHierarchy is a subclass of Hierarchy that ranks Dimension members according to their relative distance from the root. Each member of a ValueBasedHierarchy has a specific "metric" or "value" associated with it.
+ValueBasedHierarchy is used to model pure "linked node" hierarchies (e.g., parent-child tables).</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Olap.ValueBasedHierarchy.dimensionDeployment [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A48E62E0069'
+ name = 'dimensionDeployment' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A48C4C001EC'
+ referencedEnd = 'a3A48E4CD02A6' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Olap.Level [Class] ==================== -->
+ <Model:Class xmi.id = 'a37488DB702D4'
+ name = 'Level' annotation = 'Level is a subclass of MemberSelection that assigns each member of a Dimension to a specific hierarchical level within the Dimension.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a36F91E2C00D9' >
+ <Model:Namespace.contents>
+ <!-- ==================== Olap.Level.hierarchyLevelAssociation [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a385E64F60077'
+ name = 'hierarchyLevelAssociation' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a37488CDF03BA'
+ referencedEnd = 'a37488F180041' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Olap.CodedLevel [Class] ==================== -->
+ <Model:Class xmi.id = 'a37A8A21000D4'
+ name = 'CodedLevel' annotation = 'CodedLevel is a subclass of Level that assigns a unique encoding, or label, to each of its Dimension members.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a37488DB702D4' >
+ <Model:Namespace.contents>
+ <!-- ==================== Olap.CodedLevel.encoding [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37A8A28A00C5'
+ name = 'encoding' annotation = 'Encoding is an expression that generates a unique encoding, or label, for each member of a CodedLevel.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a376A84310237' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Olap.Measure [Class] ==================== -->
+ <Model:Class xmi.id = 'a382ADE680343'
+ name = 'Measure' annotation = 'Measure is a subclass of Attribute representing Dimension Measures (e.g., Sales, Quantity, Weight). Synonym: Variable.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3A6F62780143' />
+ <!-- ==================== Olap.StructureMap [Class] ==================== -->
+ <Model:Class xmi.id = 'a374CB0810199'
+ name = 'StructureMap'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a374322890098' >
+ <Model:ModelElement.annotation>StructureMap is a subclass of TransformationMap that maps Dimension attributes to their physical data sources.
+
+(Note: Multiple StructureMaps may be grouped together into single, cohesive unit via TransformationTask.)</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Olap.StructureMap.dimensionDeployment [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A48EC7A01A4'
+ name = 'dimensionDeployment' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A48C4C001EC'
+ referencedEnd = 'a3A48E8D40175' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.StructureMap.dimensionDeploymentLV [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A6B363F017D'
+ name = 'dimensionDeploymentLV' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A48C4C001EC'
+ referencedEnd = 'a3A48E9FE0272' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Olap.StructureMap.dimensionDeploymentIP [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A6B36500037'
+ name = 'dimensionDeploymentIP' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A48C4C001EC'
+ referencedEnd = 'a3A48EA08006E' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Olap.HierarchyMemberSelectionGroup [Class] ==================== -->
+ <Model:Class xmi.id = 'a3BCC44C502D3'
+ name = 'HierarchyMemberSelectionGroup' annotation = 'This subtype of MemberSelectionGroup allows users to specify that a particular cube region is determined by hierarchy. This allows the description of data to vary by hierarchy and, therefore, provides the ability to model multiple measure values per hierarchy'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3846924F008C' >
+ <Model:Namespace.contents>
+ <!-- ==================== Olap.HierarchyMemberSelectionGroup.hierarchy [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3BCC46FA03B5'
+ name = 'hierarchy' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36F91D39014A'
+ referencedEnd = 'a3BCC469800D9' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Olap.LevelBasedHierarchyOwnsHierarchyLevelAssociations [Association] ==================== -->
+ <Model:Association xmi.id = 'a37488D06008B'
+ name = 'LevelBasedHierarchyOwnsHierarchyLevelAssociations' annotation = 'A LevelBasedHierarchy generally owns one or more HierarchyLevelAssociations.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a37488D0602D0'
+ name = 'levelBasedHierarchy' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a37488B69027C' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a37488D0602D1'
+ name = 'hierarchyLevelAssociation' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a37488CDF03BA' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Olap.HierarchyLevelAssocsReferenceLevel [Association] ==================== -->
+ <Model:Association xmi.id = 'a37488F140168'
+ name = 'HierarchyLevelAssocsReferenceLevel' annotation = 'Each HierarchyLevelAssoc references precisely one Level as its current level.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a37488F180037'
+ name = 'currentLevel' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a37488DB702D4' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a37488F180041'
+ name = 'hierarchyLevelAssociation' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a37488CDF03BA' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Olap.DimensionOwnsMemberSelections [Association] ==================== -->
+ <Model:Association xmi.id = 'a377D39B30221'
+ name = 'DimensionOwnsMemberSelections' annotation = 'A Dimension may own any number of MemberSelections.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a377D39B60153'
+ name = 'dimension' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3777B4770109' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a377D39B6015D'
+ name = 'memberSelection' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a36F91E2C00D9' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Olap.CubeOwnsCubeDimensionAssociations [Association] ==================== -->
+ <Model:Association xmi.id = 'a378B40D00305'
+ name = 'CubeOwnsCubeDimensionAssociations' annotation = 'The dimensionality of a Cube is defined by a collection of unique Dimensions. Each Dimension is represented by an instance of CubeDimensionAssociation.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a378B40D10248'
+ name = 'cube' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a36F832E20069' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a378B40D102A2'
+ name = 'cubeDimensionAssociation' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a378B40100236' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Olap.CubeDimensionAssociationsReferenceDimension [Association] ==================== -->
+ <Model:Association xmi.id = 'a378B40D802A2'
+ name = 'CubeDimensionAssociationsReferenceDimension' annotation = 'Each CubeDimenjsionAssociation references a single Dimension.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a378B40D9019F'
+ name = 'dimension' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3777B4770109' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a378B40D901E5'
+ name = 'cubeDimensionAssociation' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a378B40100236' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Olap.DimensionOwnsHierarchies [Association] ==================== -->
+ <Model:Association xmi.id = 'a378EBB1601E8'
+ name = 'DimensionOwnsHierarchies' annotation = 'A Dimension may own several Hierarchies.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a378EBB170118'
+ name = 'dimension' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3777B4770109' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a378EBB17015E'
+ name = 'hierarchy' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a36F91D39014A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Olap.DimensionHasDefaultHierarchy [Association] ==================== -->
+ <Model:Association xmi.id = 'a378EBB2802CB'
+ name = 'DimensionHasDefaultHierarchy' annotation = 'A Dimension may designate a default Hierarchy for display purposes.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a378EBB2B010C'
+ name = 'displayDefault' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a36F91D39014A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a378EBB2B013E'
+ name = 'defaultedDimension' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3777B4770109' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Olap.CubeDimensionAssociationsReferenceCalcHierarchy [Association] ==================== -->
+ <Model:Association xmi.id = 'a37A791DE0002'
+ name = 'CubeDimensionAssociationsReferenceCalcHierarchy' annotation = 'A CubeDimensionAssociation may designate a default Hierarchy for calculation purposes.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a37A791DE0201'
+ name = 'calcHierarchy' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a36F91D39014A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a37A791DE021F'
+ name = 'cubeDimensionAssociation' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a378B40100236' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Olap.MemberSelectionGroupReferencesMemberSelections [Association] ==================== -->
+ <Model:Association xmi.id = 'a37BE29730219'
+ name = 'MemberSelectionGroupReferencesMemberSelections' annotation = 'A MemberSelectionGroup references at least one unique MemberSelection.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a37BE29740058'
+ name = 'memberSelection' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a36F91E2C00D9' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a37BE2974009E'
+ name = 'memberSelectionGroup' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3846924F008C' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Olap.SchemaOwnsCubes [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A48C16F0379'
+ name = 'SchemaOwnsCubes' annotation = 'A Schema may own any number of Cubes.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A48C17001E0'
+ name = 'cube' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a36F832E20069' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A48C1700212'
+ name = 'schema' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a36F832D2039C' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Olap.SchemaOwnsDimensions [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A48C172019D'
+ name = 'SchemaOwnsDimensions' annotation = 'A Schema may own any number of Dimensions.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A48C1730018'
+ name = 'dimension' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3777B4770109' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A48C1730068'
+ name = 'schema' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a36F832D2039C' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Olap.HierarchyLevelAssociationOwnsDimensionDeployments [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A48E4C400FE'
+ name = 'HierarchyLevelAssociationOwnsDimensionDeployments'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:ModelElement.annotation>A HierarchyLevelAssociation may own any number of DimensionDeployments.
+
+The ordering of the DimensionDeployment classes may optionally be assigned an implementation-specific meaning (e.g., desired order of selection of multiple deployments, based on optimized access to aggregated data).</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A48E4C50019'
+ name = 'dimensionDeployment' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A48C4C001EC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A48E4C50037'
+ name = 'hierarchyLevelAssociation' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a37488CDF03BA' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Olap.ValueBasedHierarchyOwnsDimensionDeployments [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A48E4CC03D1'
+ name = 'ValueBasedHierarchyOwnsDimensionDeployments'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:ModelElement.annotation>A ValueBasedHierarchy may own any number of DimensionDeployments.
+
+The ordering of the DimensionDeployment classes may optionally be assigned an implementation-specific meaning (e.g., desired order of selection of multiple deployments, based on optimized access to aggregated data).</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A48E4CD02A6'
+ name = 'dimensionDeployment' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A48C4C001EC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A48E4CD02C4'
+ name = 'valueBasedHierarchy' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a374992C8031C' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Olap.DimensionDeploymentOwnsStructureMaps [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A48E8D3015F'
+ name = 'DimensionDeploymentOwnsStructureMaps' annotation = 'An instance of DimensionDeployment may own zero or more StructureMaps.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A48E8D40157'
+ name = 'structureMap' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a374CB0810199' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A48E8D40175'
+ name = 'dimensionDeployment' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3A48C4C001EC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Olap.DimensionDeploymentHasListOfValues [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A48E9FE0073'
+ name = 'DimensionDeploymentHasListOfValues' annotation = 'An instance of DimensionDeployment may reference zero or one StructureMaps as its "list of values" StructureMap.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A48E9FE024A'
+ name = 'listOfValues' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a374CB0810199' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A48E9FE0272'
+ name = 'dimensionDeploymentLV' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A48C4C001EC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Olap.DimensionDeploymentHasImmediateParent [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A48EA07021B'
+ name = 'DimensionDeploymentHasImmediateParent' annotation = 'An instance of DimensionDeployment may reference zero or one StructureMaps as its "immediate parent" StructureMap.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A48EA08003C'
+ name = 'immediateParent' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a374CB0810199' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A48EA08006E'
+ name = 'dimensionDeploymentIP' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A48C4C001EC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Olap.CubeOwnsCubeRegions [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A4E8EAF0039'
+ name = 'CubeOwnsCubeRegions' annotation = 'A Cube may own any number of CubeRegions.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A4E8EAF02D8'
+ name = 'cubeRegion' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A4E8CEF02F0' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A4E8EAF0300'
+ name = 'cube' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a36F832E20069' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Olap.CubeRegionOwnsMemberSelectionGroups [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A4E8EB50114'
+ name = 'CubeRegionOwnsMemberSelectionGroups' annotation = 'A CubeRegion may own any number of MemberSelectionGroups.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A4E8EB502CC'
+ name = 'memberSelectionGroup' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3846924F008C' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A4E8EB502F4'
+ name = 'cubeRegion' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3A4E8CEF02F0' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Olap.CubeRegionOwnsCubeDeployments [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A5636B100A4'
+ name = 'CubeRegionOwnsCubeDeployments' annotation = 'A CubeRegion may own any number of CubeDeployments.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A5636B1025D'
+ name = 'cubeDeployment' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A5634210088' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A5636B10271'
+ name = 'cubeRegion' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3A4E8CEF02F0' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Olap.SchemaOwnsDeploymentGroups [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A5639D9033E'
+ name = 'SchemaOwnsDeploymentGroups' annotation = 'A Schema may own any number of DeploymentGroups.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A5639DA00BE'
+ name = 'deploymentGroup' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A5639C9022D' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A5639DA00C9'
+ name = 'schema' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a36F832D2039C' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Olap.DeploymentGroupReferencesCubeDeployments [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A563A2D03AD'
+ name = 'DeploymentGroupReferencesCubeDeployments' annotation = 'A DeploymentGroup may reference any number of CubeDeployments.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A563A2E01A6'
+ name = 'cubeDeployment' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A5634210088' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A563A2E01CE'
+ name = 'deploymentGroup' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A5639C9022D' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Olap.DeploymentGroupReferencesDimensionDeployments [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A563A300130'
+ name = 'DeploymentGroupReferencesDimensionDeployments' annotation = 'A DeploymentGroup may reference any number of DimensionDeployments.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A563A3002F3'
+ name = 'dimensionDeployment' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A48C4C001EC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A563A300343'
+ name = 'deploymentGroup' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A5639C9022D' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Olap.CubeDeploymentOwnsContentMaps [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A568180028D'
+ name = 'CubeDeploymentOwnsContentMaps' annotation = 'A CubeDeployment owns any number of ContentMaps.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A5681810144'
+ name = 'contentMap' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A5680DA0284' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A5681810162'
+ name = 'cubeDeployment' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3A5634210088' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Olap.HierarchyMemberSelectionGroupReferencesHierarchy [Association] ==================== -->
+ <Model:Association xmi.id = 'a3BCC46970069'
+ name = 'HierarchyMemberSelectionGroupReferencesHierarchy' annotation = 'A HierarchyMemberSelectionGroup references one or more Hierarchies.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3BCC469800D9'
+ name = 'hierarchy' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a36F91D39014A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3BCC4698011F'
+ name = 'hierarchyMemberSelectionGroup' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3BCC44C502D3' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== MiningCore [Package] ==================== -->
+<Model:Package xmi.id = 'a39E71F94024D'
+ name = 'MiningCore' annotation = 'This package contains the basic packages that are required to implement a CWM DataMining interface. It is required that at least this package and one more packge be implemented for compliance.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.org.omg.mof.idl_substitute_name=MiningCoreModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.967'
+ name = 'org.omg.mof.idl_substitute_name=MiningCoreModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a39E71F94024D' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>MiningCoreModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== MiningCore.org.omg.mof.idl_prefix=org.omg.cwm.analysis [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.968'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.analysis' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a39E71F94024D' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.analysis</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== MiningCore.org.omg.xmi.namespace=CWMDM [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.969'
+ name = 'org.omg.xmi.namespace=CWMDM' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a39E71F94024D' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWMDM</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== MiningCore.com.urep.jcr.java_prefix=org.omg.java.cwm.analysis [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.970'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.analysis' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a39E71F94024D' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.analysis</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.971'
+ name = 'Transformation' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a35E1B0B40042' />
+ <!-- ==================== MiningCore.MiningData [Package] ==================== -->
+ <Model:Package xmi.id = 'a395CF9840091'
+ name = 'MiningData' annotation = 'This package defines the objects that describe the input data, the way the input data is to be treated, and the mapping between the input data and internal representation for which mining algorithms can understand.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningData.AttributeAssignment [Class] ==================== -->
+ <Model:Class xmi.id = 'a3B4EFEA40069'
+ name = 'AttributeAssignment'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>This object provides a mapping between a mining attribute (logical data) and a set of attributes in the input data (physical data).
+logicalAttribute is the mining attribute being mapped by this object.
+orderIdAttribute is used when ordering of attributes is required. In some cases, ordering of attributes is important (as in sequence analysis). In other cases, a sequence of an attribute is favored over having a set-valued attributes.
+
+AttributeAssignment can be reused among several tasks, but a MiningAttribute can be refered to by an AttributeAssignment within a task.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningData.AttributeAssignment.orderIdAttribute [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4F015400B9'
+ name = 'orderIdAttribute' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A6F62780143'
+ referencedEnd = 'a3B4F169D01B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningData.AttributeAssignment.logicalAttribute [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4F017B012D'
+ name = 'logicalAttribute' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3B4F1BA302C6'
+ referencedEnd = 'a3B4F1CAA0061' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningData.AttributeAssignmentSet [Class] ==================== -->
+ <Model:Class xmi.id = 'a3946969902A4'
+ name = 'AttributeAssignmentSet' annotation = 'This object contains a set of AttributeAssignment objects and completes attribute assignment for a mining operation.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningData.AttributeAssignmentSet.assignment [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a394696A50016'
+ name = 'assignment' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3B4EFEA40069'
+ referencedEnd = 'a394696D9012A' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningData.AttributeSelectionFunction [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a3B4EFADD020D'
+ name = 'AttributeSelectionFunction'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>This enumeration determines which attriute in the given data to select and map it to a set-valued logical attribute.
+The attributes that satisfy the given condition in this enumeration get selected.</Model:ModelElement.annotation>
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'AttributeSelectionFunction'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'isNotNull'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'isNull'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'isOne'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'isZero'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'isTrue'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'isFalse'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== MiningCore.MiningData.AttributeType [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a3B2E3B3401BE'
+ name = 'AttributeType' annotation = 'The AttributeType indicates if the attribute should be interpreted as categorical, ordinal, or numerical data. It is possible that attribute type is not specified when first creating a MiningAttribute. It can be set later.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'AttributeType'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'categorical'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'ordinal'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'numerical'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'notSpecified'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== MiningCore.MiningData.AttributeUsage [Class] ==================== -->
+ <Model:Class xmi.id = 'a39C62D090070'
+ name = 'AttributeUsage' annotation = 'An AttributeUsage object specifies how a MinigAttribute is to be used for mining operations.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a32989F9700FE' >
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningData.AttributeUsage.usage [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a39C62D1A0074'
+ name = 'usage'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a38FB56DA00C9' >
+ <Model:ModelElement.annotation>The usage attribute indicates if the MiningAttribute should be used by the model or not, according to the details specified in the UsageOption enumeration class.
+The default is "active".</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== MiningCore.MiningData.AttributeUsage.weight [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a38B2935F028E'
+ name = 'weight' annotation = 'The attribute weight indicates the weight the algorithm should assign to an attribute. The default is 1.0, indicating no effect. The particular vendor defines what effect a given weight greater or less than one has on an attribute for a particular algorithm.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3C22376201E4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== MiningCore.MiningData.AttributeUsage.attribute [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a39D27243006B'
+ name = 'attribute' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A2413B603A0'
+ referencedEnd = 'a3A24151C0160' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningData.AttributeUsage.suppressDiscretization [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B4C478903AB'
+ name = 'suppressDiscretization'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:ModelElement.annotation>This suppresses discretization to be performed on the attribute being specified, if true.
+The default is false.</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== MiningCore.MiningData.AttributeUsage.suppressNormalization [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3C34D4C103A8'
+ name = 'suppressNormalization' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningData.org.omg.mof.idl_substitute_name=umlAttribute [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.974'
+ name = 'org.omg.mof.idl_substitute_name=umlAttribute' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a39D27243006B a3B028D230014 a3B028CD603C1 a3A24151C0160' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>umlAttribute</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== MiningCore.MiningData.AttributeUsageSet [Class] ==================== -->
+ <Model:Class xmi.id = 'a3A5F1A1B0350'
+ name = 'AttributeUsageSet' annotation = 'An AttributeUsageSet object contains a collection of AttributeUsage objects. This specifes how MinigAttributes are to be used or manipulated by a model. The specification may contain at most one AttributeUsage object for each MiningAttribute in the LogicalDataSpecification. The default usage is active for an attribute if no entry for a MiningAttribute is present.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3298A02900FE' />
+ <!-- ==================== MiningCore.MiningData.CategoricalAttributeProperties [Class] ==================== -->
+ <Model:Class xmi.id = 'a39D10FD400F1'
+ name = 'CategoricalAttributeProperties'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>A CategoricalAttributeProperties object is used to describe properties of a categorical attribute. It lists the specific categories that are recognized in the attribute, as well as a taxonomy, or CategorizationGraph, that organizes the categories into a hierarchy.
+
+This metadata may or may not be used by the underlying algorithm. It may be leveraged to determine if data being supplied as input to a mining operation is sufficiently similar to the data used to build the model.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningData.CategoricalAttributeProperties.category [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a39D10FF30286'
+ name = 'category' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39D11046025E'
+ referencedEnd = 'a39D1106E0189' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningData.CategoricalAttributeProperties.taxonomy [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a39D10FFD029F'
+ name = 'taxonomy' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39D110A50001'
+ referencedEnd = 'a39D110FE004F' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningData.DirectAttributeAssignment [Class] ==================== -->
+ <Model:Class xmi.id = 'a3B028CAC01A4'
+ name = 'DirectAttributeAssignment'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3B4EFEA40069' >
+ <Model:ModelElement.annotation>Maps a pair of attributes from two different sources, for example a table column and a MiningAttribute.
+In this example, the table column is represented by attribute.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningData.DirectAttributeAssignment.attribute [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B028D230014'
+ name = 'attribute' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A6F62780143'
+ referencedEnd = 'a3B028CD603C1' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningData.LogicalAttribute [Class] ==================== -->
+ <Model:Class xmi.id = 'a3A2413B603A0'
+ name = 'LogicalAttribute' annotation = 'A MiningAttribute object is a logical concept that describes a domain of data to be used as input to data mining operations. Mining attributes are typically either categorical, ordinal, or numerical. As such, a mining attribute references additional metadata that characterizes the attribute as either categorical, e.g., a list of the categories; or numerical, e.g., the bounds of the data.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3B4F1BA302C6' >
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningData.LogicalAttribute.isSetValued [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B4F08950181'
+ name = 'isSetValued' annotation = 'This indicates that the values of the attribute being specified here are sets, if true.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== MiningCore.MiningData.LogicalAttribute.categoricalProperties [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A5F18F102E3'
+ name = 'categoricalProperties' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39D10FD400F1'
+ referencedEnd = 'a3A5F18E70022' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningData.LogicalAttribute.numericalProperties [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A5F18FD005F'
+ name = 'numericalProperties' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39D10F7C00FF'
+ referencedEnd = 'a3A5F18EB023A' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningData.LogicalData [Class] ==================== -->
+ <Model:Class xmi.id = 'a39C62A0A03B6'
+ name = 'LogicalData' annotation = 'A LogicalData object contains the set of MiningAttributes that describe the logical nature of the data used as input to data mining. The MiningAttributes within a LogicalData object are uniquely named.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3298A02900FE' />
+ <!-- ==================== MiningCore.MiningData.MiningAttribute [Class] ==================== -->
+ <Model:Class xmi.id = 'a3B4F1BA302C6'
+ name = 'MiningAttribute' annotation = 'This is an abstract class that describes the generic attribute to be used in mining operations.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3A6F62780143' >
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningData.MiningAttribute.displayName [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B4F1C1C03B0'
+ name = 'displayName' annotation = 'The optional displayName of an attribute indicates a name that an application may use as a substitute for the actual MiningAttribute name, which may be cryptic.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== MiningCore.MiningData.MiningAttribute.attributeType [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B4F1C3C026C'
+ name = 'attributeType'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3B2E3B3401BE' >
+ <Model:ModelElement.annotation>The attribute type indicates if the attribute is categorical, ordinal, numerical, or not specified.
+
+If either categoricalProperties or numericalProperties are specified, a constraint exists to ensure the attributeType value is consistent with these attributes.
+
+This attribute allows a MiningAttribute to be identified with a particular type even if no additional properties are specified.
+
+If ordinal, then the OrdinalAttributeProperties must be specified to indicate the ordering of the categories.</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningData.NumericalAttributeProperties [Class] ==================== -->
+ <Model:Class xmi.id = 'a39D10F7C00FF'
+ name = 'NumericalAttributeProperties'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>A NumericalAttributeProperties object is used to describe properties of the numerical attribute.
+This metadata may or may not be used by the underlying algorithm. It may be leveraged to determine if data being supplied as input to a mining operation is sufficiently similar to the data used to build the model.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningData.NumericalAttributeProperties.lowerBound [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a39D10F910376'
+ name = 'lowerBound' annotation = 'This indicates the lower bound (the smallest) of the values in the attribute.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3C22376201E4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== MiningCore.MiningData.NumericalAttributeProperties.upperBound [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a39D10F97016C'
+ name = 'upperBound' annotation = 'This indicates the upper bound (the largest) of the values in the attribute.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3C22376201E4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== MiningCore.MiningData.NumericalAttributeProperties.isDiscrete [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a39D10F9B0103'
+ name = 'isDiscrete' annotation = 'This indicates whether the values are discrete.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== MiningCore.MiningData.NumericalAttributeProperties.isCyclic [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a39D10FA400D4'
+ name = 'isCyclic' annotation = 'This indicates whether the values of the attributes are cyclic, i.e., the next value of the ending value is the starting value.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== MiningCore.MiningData.NumericalAttributeProperties.anchor [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a39D10FAE03A0'
+ name = 'anchor' annotation = 'This specifies the value of the anchor.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3C22376201E4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== MiningCore.MiningData.NumericalAttributeProperties.cycleBegin [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a39D10FB302D4'
+ name = 'cycleBegin' annotation = 'This specifies the starting value of the cycle.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3C22376201E4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== MiningCore.MiningData.NumericalAttributeProperties.cycleEnd [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a39D10FB70258'
+ name = 'cycleEnd' annotation = 'This specifies the ending value of the cycle.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3C22376201E4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== MiningCore.MiningData.NumericalAttributeProperties.discreteStepSize [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a39D10FBA0248'
+ name = 'discreteStepSize' annotation = 'This specifies the interval value between two adjacent discrete values when the attribute is discrete.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3C22376201E4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningData.OrderType [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a3B2F676101A4'
+ name = 'OrderType' annotation = 'The OrderType specifies how categories should be ordered.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'OrderType'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'asIs'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'alphabetical'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'numeric'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'date'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== MiningCore.MiningData.OrdinalAttributeProperties [Class] ==================== -->
+ <Model:Class xmi.id = 'a39D1101B03BA'
+ name = 'OrdinalAttributeProperties' annotation = 'An OrdinalAttributeProperties object is used to describe properties of the ordinal attribute. Ordinal attributes can use the "ordered" constraint on the MiningCategory class to use the "asIs" OrderType. The "asIs" allows the list ordering to imply a "less than" relationship between categories N and N+1. In addition, ordinals may be cyclic , e.g., days of the week.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a39D10FD400F1' >
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningData.OrdinalAttributeProperties.orderType [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a39D1101E0350'
+ name = 'orderType' annotation = 'OrderType indicates how the sequence of categories should be interpreted as ordinal (potentially mapped to integers). '
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3B2F676101A4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== MiningCore.MiningData.OrdinalAttributeProperties.isCyclic [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a39D1102401A0'
+ name = 'isCyclic'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:ModelElement.annotation>This indicates whether the values of the attributes are cyclic, i.e., the next value of the ending value is the starting value.
+The default is false.</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningData.PhysicalData [Class] ==================== -->
+ <Model:Class xmi.id = 'a38B1E301035E'
+ name = 'PhysicalData'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>A PhysicalData object specifies the layout of the physical data to be used for mining, and if appropriate, the roles the various data columns play, via subclassing. The data referenced by a physical data object can be used in many capacities: model building, scoring, lift computation, statistical analysis, etc.
+
+PhysicalData supports specification of any data definable through a Class or set of Attributes, e.g., files, tables, and star schema.
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningData.PhysicalData.source [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38D5160503C7'
+ name = 'source' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3298A02900FE'
+ referencedEnd = 'a38ECF999006C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningData.PivotAttributeAssignment [Class] ==================== -->
+ <Model:Class xmi.id = 'a3B4EF9BC0045'
+ name = 'PivotAttributeAssignment'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3B4EFEA40069' >
+ <Model:ModelElement.annotation>This object provides a mapping where the input data is in transactional format. Each of the logical attributes ocurring in a pivoted table is mapped to three physical columns, presumably the same ones every time. If the data types don't match, the value column may be different in that case.
+Question: Seems that we need to have more than one logical attribute associated with this assignment.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningData.PivotAttributeAssignment.setIdAttribute [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4EFA0D034F'
+ name = 'setIdAttribute' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A6F62780143'
+ referencedEnd = 'a3B4F079B02CC' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningData.PivotAttributeAssignment.nameAttribute [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4EFA230256'
+ name = 'nameAttribute' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A6F62780143'
+ referencedEnd = 'a3B4F079E0367' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningData.PivotAttributeAssignment.valueAttribute [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4EFA3001FB'
+ name = 'valueAttribute' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A6F62780143'
+ referencedEnd = 'a3B4F07A303B4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningData.ReversePivotAttributeAssignment [Class] ==================== -->
+ <Model:Class xmi.id = 'a3B4EFA97019E'
+ name = 'ReversePivotAttributeAssignment'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3B4EFEA40069' >
+ <Model:ModelElement.annotation>Constraint: The logicalAttribute must be set valued.
+This object is used when the input data is in tabular (2-D) form.
+
+The sets are represented by enumerating their elements based on the selection functions.
+For example, if the attribute selection function is "isOne" and the value selection function is "attribute", the we get:
+A B C D E F
+1 0 0 1 0 0 = {A, D}
+0 0 0 0 0 1 = {F}
+0 0 0 0 0 0 = {}
+
+Each of the input attributes (A, B, C, D, E, and F) is a selector attribute in this object. It works best for a small number of members known a priori.
+
+In some cases, when the potential number of values is large, but it is also known that the set sizes are all small, e.g., less than 6, then we get the following:
+A B C D F
+X Y NULL NULL NULL = {X, Y}
+Z NULL NULL NULL NULL = {Z}
+NULL NULL NULL NULL NULL = {}
+
+In the above example, the attribute selection function is "isNotNull" and the value selection function is "value".</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningData.ReversePivotAttributeAssignment.selectorAttribute [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4EFABF0373'
+ name = 'selectorAttribute' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A6F62780143'
+ referencedEnd = 'a3B582F910004' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningData.ReversePivotAttributeAssignment.attributeSelectionFunction [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B4EFB3501B0'
+ name = 'attributeSelectionFunction' annotation = 'This describes how the selector attributes are selected based on their values.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3B4EFADD020D' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== MiningCore.MiningData.ReversePivotAttributeAssignment.valueSelectionFunction [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B4EFBA90026'
+ name = 'valueSelectionFunction' annotation = 'This describes whether the value or the name of a selector attribute to appear in the destination logical attribute when the selector attribute satisfies the specified AttributeSelectionFunction.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3B4EFBD201DE' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningData.SetAttributeAssignment [Class] ==================== -->
+ <Model:Class xmi.id = 'a3B4EFA3C03C4'
+ name = 'SetAttributeAssignment'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3B4EFEA40069' >
+ <Model:ModelElement.annotation>Constraint: The logicalAttribute must be set valued.
+This object provides a mapping between a set-valued mining attribute and a set of attributes in the physical data.
+setIdAttribute is the set identifier of the set being mapped.
+memberAttribute represents a set of attributes being mapped to the set-valued mining attribute.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningData.SetAttributeAssignment.setIdAttribute [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4EFA5800EA'
+ name = 'setIdAttribute' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A6F62780143'
+ referencedEnd = 'a3B4F07AF0343' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningData.SetAttributeAssignment.memberAttribute [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4EFA680382'
+ name = 'memberAttribute' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A6F62780143'
+ referencedEnd = 'a3B4F07B5005D' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningData.UsageOption [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a38FB56DA00C9'
+ name = 'UsageOption' annotation = 'UsageOption specifies how a MiningAttribute is used for mining operations. '
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'UsageOption'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'active'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'supplementary'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'target'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== MiningCore.MiningData.ValueSelectionFunction [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a3B4EFBD201DE'
+ name = 'ValueSelectionFunction' annotation = 'Given an attribute that satisfies the specified attribute selection function, this enumeration determines whether to select value of the attribute or the attribute itself.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'ValueSelectionFunction'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'vsf_value'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'vsf_attribute'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== MiningCore.MiningData.org.omg.xmi.enumerationUnprefix=vsf_ [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.975'
+ name = 'org.omg.xmi.enumerationUnprefix=vsf_' annotation = ''
+ tagId = 'org.omg.xmi.enumerationUnprefix'
+ elements = 'a3B4EFBD201DE' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>vsf_</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== MiningCore.MiningData.Category [Class] ==================== -->
+ <Model:Class xmi.id = 'a39D11046025E'
+ name = 'Category'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>This represents a discrete value. A collection of Category instances defines the values that may or may not be annotated with a mining attribute.
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningData.Category.value [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a39D1105C031E'
+ name = 'value'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a37AB1FF90221' >
+ <Model:ModelElement.annotation>Constraint on value: Datatype must define equality operator.
+</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== MiningCore.MiningData.Category.isNullCategory [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B4DB6AB0157'
+ name = 'isNullCategory'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:ModelElement.annotation>The optional attribute isNullCategory is set to true if the Category provided is the NULL category.
+
+If true, this invalidates any specification in the value attribute.</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== MiningCore.MiningData.Category.displayName [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B4DB96401BE'
+ name = 'displayName' annotation = 'The displayName is a string which may be used by applications to refer to that category.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== MiningCore.MiningData.Category.property [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a395CE7540049'
+ name = 'property' annotation = 'This accepts a value of the enumeration identifying the role of this Category instance.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a38EB37DE029C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== MiningCore.MiningData.Category.prior [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a395CE75E009D'
+ name = 'prior' annotation = 'This contains the prior probability associated with this Category, if any.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3C22376201E4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningData.CategoryMap [Class] ==================== -->
+ <Model:Class xmi.id = 'a3775528703E5'
+ name = 'CategoryMap' annotation = 'This is the common superclass of CategoryMapObject and CategoryMapTable supporting the CategorizationGraph class.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningData.CategoryMap.isMultiLevel [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a377552E6019D'
+ name = 'isMultiLevel' annotation = 'This indicates that this table or object represents multiple levels of the categorization graph, if true.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== MiningCore.MiningData.CategoryMap.isItemMap [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a377553180176'
+ name = 'isItemMap' annotation = 'This indicates that this is a grouping of items to categories, if true.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningData.CategoryMapObject [Class] ==================== -->
+ <Model:Class xmi.id = 'a38ED014602D4'
+ name = 'CategoryMapObject' annotation = 'The object representation of categorization graph. Each object references a set of CategoryMapObjectEntries'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC a3775528703E5' >
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningData.CategoryMapObject.entry [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38ED015B00E0'
+ name = 'entry' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A6F50EA02D2'
+ referencedEnd = 'a38ED01C40113' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningData.CategoryMapObjectEntry [Class] ==================== -->
+ <Model:Class xmi.id = 'a3A6F50EA02D2'
+ name = 'CategoryMapObjectEntry' annotation = 'Object representation of an edge in the categorization graph. This is analogous to a record in the CategoryMapTable. Each entry consists of child, parent, level and graphId attributes. If isItemMap is TRUE then the child attribute corresponds to item values.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningData.CategoryMapObjectEntry.child [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A6F510900C3'
+ name = 'child' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39D11046025E'
+ referencedEnd = 'a3A6F51320271' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningData.CategoryMapObjectEntry.parent [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A6F511F0129'
+ name = 'parent' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39D11046025E'
+ referencedEnd = 'a3A6F512C0395' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningData.CategoryMapObjectEntry.graphId [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B00FAB403D5'
+ name = 'graphId' annotation = 'The graphId attribute identifies the graph to which this entry belongs and enables representing multiple categorization graphs in the same table. '
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a37AB1FF90221' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningData.CategoryMapTable [Class] ==================== -->
+ <Model:Class xmi.id = 'a3A6F4F6903B4'
+ name = 'CategoryMapTable' annotation = 'Tabular representation of a categorization graph. A categorization graph consists of zero or more tables. Each table can store the portion of the graph corresponding to a single level or multiple levels. The table has three attributes, child, parent and graphId. '
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC a3775528703E5' >
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningData.CategoryMapTable.childAttribute [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A6F505D0166'
+ name = 'childAttribute' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A6F62780143'
+ referencedEnd = 'a3A5F89D203D0' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningData.CategoryMapTable.parentAttribute [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A6F50750175'
+ name = 'parentAttribute' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A6F62780143'
+ referencedEnd = 'a3A5F34A10367' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningData.CategoryMapTable.graphIdAttribute [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a389360F701EC'
+ name = 'graphIdAttribute' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A6F62780143'
+ referencedEnd = 'a38936118032A' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningData.CategoryMapTable.table [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a37754B8002D0'
+ name = 'table' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3298A02900FE'
+ referencedEnd = 'a37754C4C00A2' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningData.CategoryMatrix [Class] ==================== -->
+ <Model:Class xmi.id = 'a39CF8E7103CD'
+ name = 'CategoryMatrix'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>A CategoryMatrix assigns numeric values to pairs of categories.
+It is either represented as a set of CategoryMatrixEntries or as a table.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningData.CategoryMatrix.diagonalDefault [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A6DE7A3023E'
+ name = 'diagonalDefault' annotation = 'If a matrix cell in the diagonal is not specified use this value.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3C22376201E4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== MiningCore.MiningData.CategoryMatrix.offDiagonalDefault [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A6DE7AC0377'
+ name = 'offDiagonalDefault' annotation = 'If a matrix cell not in the diagonal is not specified use this value.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3C22376201E4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== MiningCore.MiningData.CategoryMatrix.kind [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A6DE7B60141'
+ name = 'kind'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3B2F1D5603CF' >
+ <Model:ModelElement.annotation>Type of matrix, 'diagonal', 'symmetric', or 'any'.
+If diagonal, then all values outside the diagonal are 0.
+If symmetric then value(i,j)=value(j,i).</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== MiningCore.MiningData.CategoryMatrix.category [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A6F3E70023A'
+ name = 'category' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39D11046025E'
+ referencedEnd = 'a3A6F3E30018E' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '2' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningData.CategoryMatrixEntry [Class] ==================== -->
+ <Model:Class xmi.id = 'a390DD4900302'
+ name = 'CategoryMatrixEntry' annotation = 'Defines the value of a single cell in a CategoryMatrix.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningData.CategoryMatrixEntry.rowIndex [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a390DD4A102A2'
+ name = 'rowIndex' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39D11046025E'
+ referencedEnd = 'a390DD8540069' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningData.CategoryMatrixEntry.columnIndex [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a390DD9970063'
+ name = 'columnIndex' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39D11046025E'
+ referencedEnd = 'a390DD84A0317' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningData.CategoryMatrixEntry.value [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A2810B30110'
+ name = 'value'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3C22376201E4' >
+ <Model:ModelElement.annotation>Value of a cell. It overwrites any default value in CategoryMatrix.
+For Cost matrix, value is intended to be a double. For ConfusionMatrix, the value can be either a "count" which is an integer value, or a "percentage" which is a double value. This is up to the implementation.</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningData.CategoryMatrixObject [Class] ==================== -->
+ <Model:Class xmi.id = 'a3B4DC5FA0315'
+ name = 'CategoryMatrixObject' annotation = 'The object representation of CategoryMatrix. Each object references a set of CategoryMatrixEntry objects.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a39CF8E7103CD' >
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningData.CategoryMatrixObject.entry [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4DC7EE0075'
+ name = 'entry' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'false'
+ type = 'a390DD4900302'
+ referencedEnd = 'a390DD8DD01BB' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningData.CategoryMatrixTable [Class] ==================== -->
+ <Model:Class xmi.id = 'a3B2F32B3010E'
+ name = 'CategoryMatrixTable'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a39CF8E7103CD' >
+ <Model:ModelElement.annotation>Table with three columns holding the definition of a category matrix.
+Tabular representation of a CategoryMatrix. A category matrix consists of exactly one table. The table has three row, column and value of the entry.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningData.CategoryMatrixTable.rowAttribute [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B2F35250004'
+ name = 'rowAttribute' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A6F62780143'
+ referencedEnd = 'a3B2F35E80253' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningData.CategoryMatrixTable.columnAttribute [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B2F3539016B'
+ name = 'columnAttribute' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A6F62780143'
+ referencedEnd = 'a3B2F35DD01C1' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningData.CategoryMatrixTable.valueAttribute [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B2F3542006A'
+ name = 'valueAttribute' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A6F62780143'
+ referencedEnd = 'a3B2F35E50191' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningData.CategoryMatrixTable.source [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4DC5A202D3'
+ name = 'source' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3298A02900FE'
+ referencedEnd = 'a3B4DC5B602F9' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningData.CategoryProperty [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a38EB37DE029C'
+ name = 'CategoryProperty' annotation = 'Indicates if the category has a special meaning.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'CategoryProperty'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'valid'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'invalid'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'missing'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== MiningCore.MiningData.CategoryTaxonomy [Class] ==================== -->
+ <Model:Class xmi.id = 'a39D110A50001'
+ name = 'CategoryTaxonomy'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>A CategorizationGraph supports the specification of taxonomy or category hierarchy as required by data mining in the form of a directed acyclic graph. It enables two representations: 1) explicit specification of the graph through the referenced node class, and 2) referencing MiningData with specific attributes (columns) that store the data in tabular form.
+
+A CategorizationGraph can contain multiple "root" nodes, in a sense being a single representation for several possibly strict hierarchies.
+
+Constraint to have either the MiningData instances (CategoryMapTable) OR the java object instances (CategoryMap).
+
+Note: This is a "graph" as opposed to a "hierarchy" because it can have multiple roots, i.e. hierarchies in the same object.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningData.CategoryTaxonomy.categoryMap [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A5F33A001FF'
+ name = 'categoryMap' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3775528703E5'
+ referencedEnd = 'a38ED018B02A1' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningData.CategoryTaxonomy.rootCategory [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A6F5C0A0063'
+ name = 'rootCategory' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39D11046025E'
+ referencedEnd = 'a3A6F5C040281' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningData.MatrixProperty [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a3B2F1D5603CF'
+ name = 'MatrixProperty' annotation = 'This specifies the matrix property that describes the shape of the matrix.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'MatrixProperty'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'mp_symmetric'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'mp_diagonal'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'mp_any'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== MiningCore.MiningData.org.omg.xmi.enumerationUnprefix=mp_ [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.976'
+ name = 'org.omg.xmi.enumerationUnprefix=mp_' annotation = ''
+ tagId = 'org.omg.xmi.enumerationUnprefix'
+ elements = 'a3B2F1D5603CF' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>mp_</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== MiningCore.MiningData.Double [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a3C22376201E4'
+ name = 'Double' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcDouble/>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== MiningCore.MiningData.PhysicalDataRefSource [Association] ==================== -->
+ <Model:Association xmi.id = 'a38ECF998020F'
+ name = 'PhysicalDataRefSource' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a38ECF999006C'
+ name = 'source' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3298A02900FE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a38ECF99900B2'
+ name = 'physicalData' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a38B1E301035E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.LogicalAttrHasCategoricalProperties [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A5F18E601ED'
+ name = 'LogicalAttrHasCategoricalProperties' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A5F18E70022'
+ name = 'categoricalProperties' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39D10FD400F1' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A5F18E70036'
+ name = 'logicalAttribute' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3A2413B603A0' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.LogicalAttrHasNumericalProperties [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A5F18EB00FA'
+ name = 'LogicalAttrHasNumericalProperties' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A5F18EB023A'
+ name = 'numericalProperties' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39D10F7C00FF' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A5F18EB024E'
+ name = 'logicalAttribute' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3A2413B603A0' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.CategoricalPropertiesRefTaxonomy [Association] ==================== -->
+ <Model:Association xmi.id = 'a39D110FD004E'
+ name = 'CategoricalPropertiesRefTaxonomy' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a39D110FE004F'
+ name = 'taxonomy' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39D110A50001' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a39D110FE0059'
+ name = 'categoricalProperties' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a39D10FD400F1' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.CategoricalPropertiesHasCategories [Association] ==================== -->
+ <Model:Association xmi.id = 'a39D1106E0070'
+ name = 'CategoricalPropertiesHasCategories' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a39D1106E0189'
+ name = 'category' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39D11046025E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a39D1106E0193'
+ name = 'categoricalProperties' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a39D10FD400F1' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.AssignmentRefLogicalAttribute [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B4F1CA90218'
+ name = 'AssignmentRefLogicalAttribute' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B4F1CAA0061'
+ name = 'logicalAttribute' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3B4F1BA302C6' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B4F1CAA007F'
+ name = 'attrAssignment' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3B4EFEA40069' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.AssignmentRefOrderIdAttribute [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B4F169B00CF'
+ name = 'AssignmentRefOrderIdAttribute' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B4F169D01B8'
+ name = 'orderIdAttribute' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A6F62780143' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B4F169D024E'
+ name = 'attrAssignmnet' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3B4EFEA40069' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.PivotRefSetIdAttribute [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B4F079901A7'
+ name = 'PivotRefSetIdAttribute' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B4F079B02CC'
+ name = 'setIdAttribute' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A6F62780143' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B4F079B033A'
+ name = 'pivotAttrAssignment' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3B4EF9BC0045' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.PivotRefNameAttribute [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B4F079D0301'
+ name = 'PivotRefNameAttribute' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B4F079E0367'
+ name = 'nameAttribute' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A6F62780143' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B4F079E03D5'
+ name = 'pivotAttrAssignment' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3B4EF9BC0045' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.PivotRefValueAttribute [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B4F07A2025E'
+ name = 'PivotRefValueAttribute' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B4F07A303B4'
+ name = 'valueAttribute' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A6F62780143' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B4F07A40030'
+ name = 'pivotAttrAssignmnet' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3B4EF9BC0045' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.SetAssignmentRefSetIdAttr [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B4F07AE00F3'
+ name = 'SetAssignmentRefSetIdAttr' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B4F07AF0343'
+ name = 'setIdAttribute' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A6F62780143' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B4F07AF03BB'
+ name = 'setAttrAssignment' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3B4EFA3C03C4' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.SetAssignmentRefMemberAttr [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B4F07B300D2'
+ name = 'SetAssignmentRefMemberAttr' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B4F07B5005D'
+ name = 'memberAttribute' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A6F62780143' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B4F07B500E9'
+ name = 'setAttrAssignment' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3B4EFA3C03C4' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.ReversePivotRefAttribute [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B582F90020B'
+ name = 'ReversePivotRefAttribute' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B582F910004'
+ name = 'selectorAttribute' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A6F62780143' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B582F910090'
+ name = 'reversePivotAttrAssignment' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3B4EFA97019E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.DirectAssignmentRefAttribute [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B028CD502ED'
+ name = 'DirectAssignmentRefAttribute' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B028CD603C1'
+ name = 'attribute' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A6F62780143' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B028CD7003D'
+ name = 'directAttributeAssignment' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3B028CAC01A4' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.UsageRefAttribute [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A24151B0231'
+ name = 'UsageRefAttribute' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A24151C0160'
+ name = 'attribute' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A2413B603A0' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A24151C0174'
+ name = 'usage' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a39C62D090070' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.AssignmentSetHasAssignment [Association] ==================== -->
+ <Model:Association xmi.id = 'a394696D90007'
+ name = 'AssignmentSetHasAssignment' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a394696D9012A'
+ name = 'assignment' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3B4EFEA40069' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a394696D9015C'
+ name = 'set' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3946969902A4' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.CategoryMapObjectHasEntry [Association] ==================== -->
+ <Model:Association xmi.id = 'a38ED01C302C0'
+ name = 'CategoryMapObjectHasEntry' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a38ED01C40113'
+ name = 'entry' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A6F50EA02D2' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a38ED01C40127'
+ name = 'mapObject' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a38ED014602D4' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.TaxonomyHasCategoryMap [Association] ==================== -->
+ <Model:Association xmi.id = 'a38ED018B00C1'
+ name = 'TaxonomyHasCategoryMap' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a38ED018B02A1'
+ name = 'categoryMap' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3775528703E5' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a38ED018B02AB'
+ name = 'taxonomy' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a39D110A50001' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.MapEntryRefChildCategory [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A6F5132005E'
+ name = 'MapEntryRefChildCategory' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A6F51320271'
+ name = 'child' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39D11046025E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A6F5132028F'
+ name = 'entry' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A6F50EA02D2' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.MatrixEntryRefColumnIndex [Association] ==================== -->
+ <Model:Association xmi.id = 'a390DD84A00E7'
+ name = 'MatrixEntryRefColumnIndex' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a390DD84A0317'
+ name = 'columnIndex' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39D11046025E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a390DD84A032B'
+ name = 'categoryEntry' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a390DD4900302' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.MatrixObjectHasEntry [Association] ==================== -->
+ <Model:Association xmi.id = 'a390DD8DD01BA'
+ name = 'MatrixObjectHasEntry' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a390DD8DD01BB'
+ name = 'entry' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a390DD4900302' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a390DD8DD01BC'
+ name = 'categoryMatrix' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3B4DC5FA0315' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.MapEntryRefParentCategory [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A6F512C01A0'
+ name = 'MapEntryRefParentCategory' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A6F512C0395'
+ name = 'parent' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39D11046025E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A6F512C03B3'
+ name = 'entry' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A6F50EA02D2' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.TaxonomyRefRootCategory [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A6F5C030316'
+ name = 'TaxonomyRefRootCategory' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A6F5C040281'
+ name = 'rootCategory' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39D11046025E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A6F5C04029F'
+ name = 'taxonomy' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a39D110A50001' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.MatrixEntryRefRowIndex [Association] ==================== -->
+ <Model:Association xmi.id = 'a390DD8530248'
+ name = 'MatrixEntryRefRowIndex' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a390DD8540069'
+ name = 'rowIndex' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39D11046025E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a390DD8540087'
+ name = 'categoryEntry' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a390DD4900302' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.MatrixTableRefSource [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B4DC5B600BF'
+ name = 'MatrixTableRefSource' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B4DC5B602F9'
+ name = 'source' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3298A02900FE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B4DC5B6035E'
+ name = 'matrixTable' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3B2F32B3010E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.MapTableRefChildAttribute [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A5F89D200A5'
+ name = 'MapTableRefChildAttribute' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A5F89D203D0'
+ name = 'childAttribute' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A6F62780143' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A5F89D3001A'
+ name = 'map' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A6F4F6903B4' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.CategoryMapRefClass [Association] ==================== -->
+ <Model:Association xmi.id = 'a37754C48027D'
+ name = 'CategoryMapRefClass' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a37754C4C00A2'
+ name = 'table' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3298A02900FE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a37754C4C00DE'
+ name = 'mapTable' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A6F4F6903B4' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.MatrixTableRefColumnAttr [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B2F35DC036E'
+ name = 'MatrixTableRefColumnAttr' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B2F35DD01C1'
+ name = 'columnAttribute' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A6F62780143' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B2F35DD03D4'
+ name = 'matrixTable' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3B2F32B3010E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.MapTableRefGraphIdAttribute [Association] ==================== -->
+ <Model:Association xmi.id = 'a38936118012B'
+ name = 'MapTableRefGraphIdAttribute' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a38936118032A'
+ name = 'graphIdAttribute' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A6F62780143' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a389361180352'
+ name = 'map' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A6F4F6903B4' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.MatrixRefIndexLabels [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A6F3E2F018C'
+ name = 'MatrixRefIndexLabels' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A6F3E30018E'
+ name = 'category' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39D11046025E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '2' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A6F3E3001C0'
+ name = 'categoryMatrix' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a39CF8E7103CD' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.MapTableRefParentAttribute [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A5F34A101AF'
+ name = 'MapTableRefParentAttribute' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A5F34A10367'
+ name = 'parentAttribute' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A6F62780143' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A5F34A1037B'
+ name = 'map' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A6F4F6903B4' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.MatrixTableRefRowAttr [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B2F35E702CA'
+ name = 'MatrixTableRefRowAttr' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B2F35E80253'
+ name = 'rowAttribute' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A6F62780143' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B2F35E802C1'
+ name = 'matrixTable' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3B2F32B3010E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningData.MatrixTableRefValueAttr [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B2F35E4032A'
+ name = 'MatrixTableRefValueAttr' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B2F35E50191'
+ name = 'valueAttribute' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A6F62780143' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B2F35E501FF'
+ name = 'matrixTable' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3B2F32B3010E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+ </Model:Package>
+ <!-- ==================== MiningCore.org.omg.mof.idl_substitute_name=MiningDataModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.972'
+ name = 'org.omg.mof.idl_substitute_name=MiningDataModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a395CF9840091' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>MiningDataModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.973'
+ name = 'Core' annotation = ''
+ visibility = 'public_vis' isClustered = 'false'
+ importedNamespace = 'a3A6600C5031F' />
+ <!-- ==================== MiningCore.MiningFunctionSettings [Package] ==================== -->
+ <Model:Package xmi.id = 'a395CF8C30025'
+ name = 'MiningFunctionSettings' annotation = 'This package defines the objects that contain the parameters specific to the mining functions. The separation of mining functions from mining algorithms enables the user to specify the type of the desired result without being concerned with a particular algorithm.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningFunctionSettings.MiningAlgorithmSettings [Class] ==================== -->
+ <Model:Class xmi.id = 'a3B06BC3203C4'
+ name = 'MiningAlgorithmSettings'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>A mining algorithm settings object captures the parameters associated with a particular algorithm. It allows a knowledgeable user to fine tune algorithm parameters. Generally, not all parameters must be specified, however, those specified are taken into account by the underlying data mining system.
+Separating mining algorithm from mining function provides a natural and convenient separation for those users experienced with data mining algorithms and those only familiar with mining functions.
+</Model:ModelElement.annotation>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningFunctionSettings.MiningFunctionSettings [Class] ==================== -->
+ <Model:Class xmi.id = 'a39C6234A0375'
+ name = 'MiningFunctionSettings'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>A MiningFunctionSettings object captures the high level specification input for building a data mining model. The intent of mining function settings, is to allow a user to specify the type of result desired without having to specify a particular algorithm.
+
+Although mining function settings allow for the specification of algorithm, if this is omitted, the underlying data mining system is responsible for selecting the algorithm based on basic user-provided parameters.
+
+Subclasses throw exceptions if invalid algorithm-function pairs are supplied.
+
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningFunctionSettings.MiningFunctionSettings.algorithmSettings [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a39C623CB003C'
+ name = 'algorithmSettings' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3B06BC3203C4'
+ referencedEnd = 'a3B03CBF80204' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningFunctionSettings.MiningFunctionSettings.desiredExecutionTimeInMinutes [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a38B1E1950039'
+ name = 'desiredExecutionTimeInMinutes'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:ModelElement.annotation>The desiredExecutionTime attribute indicates the maximum execution time (in minutes) allowed for model building. If NULL, the algrotihm determines for how long the model will build.
+
+This is to serve as a hint to the algorithm to adjust model building to meet the time constraint. Vendor implementations may support this to varying degrees, e.g., terminate model build if exceeds this limit, intelligently adjust algorithm parameters to meet this constraint, or dynamically distribute or parallelize the operation.</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== MiningCore.MiningFunctionSettings.MiningFunctionSettings.attributeUsageSet [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a39D271BC0220'
+ name = 'attributeUsageSet' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A5F1A1B0350'
+ referencedEnd = 'a3A5F1A3B0099' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningFunctionSettings.MiningFunctionSettings.logicalData [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a39D271F50181'
+ name = 'logicalData' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39C62A0A03B6'
+ referencedEnd = 'a39C62ABC0203' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningFunctionSettings.SettingsRefAlgorithmSettings [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B03CBF7028F'
+ name = 'SettingsRefAlgorithmSettings' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B03CBF80204'
+ name = 'algorithmSettings' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3B06BC3203C4' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B03CBF80218'
+ name = 'settings' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a39C6234A0375' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningFunctionSettings.SettingsHasAttributeUsageSet [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A5F1A3A030E'
+ name = 'SettingsHasAttributeUsageSet' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A5F1A3B0099'
+ name = 'attributeUsageSet' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A5F1A1B0350' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A5F1A3B00B7'
+ name = 'settings' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a39C6234A0375' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningFunctionSettings.SettingsRefLogicalData [Association] ==================== -->
+ <Model:Association xmi.id = 'a39C62ABC0037'
+ name = 'SettingsRefLogicalData' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a39C62ABC0203'
+ name = 'logicalData' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39C62A0A03B6' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a39C62ABC020D'
+ name = 'settings' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a39C6234A0375' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+ </Model:Package>
+ <!-- ==================== MiningCore.org.omg.mof.idl_substitute_name=MiningFunctionSettingsModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.977'
+ name = 'org.omg.mof.idl_substitute_name=MiningFunctionSettingsModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a395CF8C30025' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>MiningFunctionSettingsModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== MiningCore.MiningModel [Package] ==================== -->
+ <Model:Package xmi.id = 'a395CF9560185'
+ name = 'MiningModel' annotation = 'This package defines the basic MiningModel from which all model objects inherit as the result of a mining build task.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningModel.MiningFunction [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a3B3BAE9A0380'
+ name = 'MiningFunction' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'MiningFunction'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'classification'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'regression'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'clustering'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'associationRules'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'attributeImportance'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'sequenceAnalysis'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== MiningCore.MiningModel.MiningModel [Class] ==================== -->
+ <Model:Class xmi.id = 'a39C623280312'
+ name = 'MiningModel'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>A MiningModel holds the metadata of the result of a mining (training) run.
+This information is sufficient to determine whether a model can be applied to given data.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningModel.MiningModel.function [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a39C623D80211'
+ name = 'function'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3B3BAE9A0380' >
+ <Model:ModelElement.annotation>Data mining function (as opposed to algorithm), e.g. classification or clustering.
+The following function names are predefined:
+attributeImportance
+associationRules
+classification
+regression
+clustering</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== MiningCore.MiningModel.MiningModel.algorithmName [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a39C623DC0339'
+ name = 'algorithmName'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:ModelElement.annotation>Specific implementation of the data mining function, e.g. CART decision tree or SOM clustering.
+
+The following algorithm names are predefined (their functions in parentheses):
+decisionTree (classification, regression)
+neuralNetwork (classification, regression)
+naiveBayes (classification)
+selfOrganizingMap (clusteirng)
+kMeans (clustering)
+competitiveLearning</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== MiningCore.MiningModel.MiningModel.settings [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a39D24C6F0034'
+ name = 'settings' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39C6234A0375'
+ referencedEnd = 'a3A956A6B032A' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningModel.MiningModel.modelSignature [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A229969021A'
+ name = 'modelSignature' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a38EB3D7A034B'
+ referencedEnd = 'a38EB3DB9034C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningModel.MiningModel.modelLocation [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a395CEE740312'
+ name = 'modelLocation' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3298A02900FE'
+ referencedEnd = 'a395CEEDB0325' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningModel.MiningModel.keyAttribute [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a395CEE94028C'
+ name = 'keyAttribute' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A6F62780143'
+ referencedEnd = 'a395CEFA90335' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningModel.MiningModel.keyValue [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a395CEECB02EF'
+ name = 'keyValue' annotation = 'This optinoally represents the key value when the model is to be located.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a37AB1FF90221' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningModel.ModelSignature [Class] ==================== -->
+ <Model:Class xmi.id = 'a38EB3D7A034B'
+ name = 'ModelSignature' annotation = 'The model signature is a description of the input needed to apply a data mining model.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3298A02900FE' />
+ <!-- ==================== MiningCore.MiningModel.SignatureAttribute [Class] ==================== -->
+ <Model:Class xmi.id = 'a38EB3AD90308'
+ name = 'SignatureAttribute'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3B4F1BA302C6' >
+ <Model:ModelElement.annotation>A SignatureAttribute object describes the input expected to a model. This is automatically produced as part of the model. It indicates not only the basic Attribute properties, but also how outliers and missing values were handled for model build. This is potentially duplicate information from the MiningFunctionSettings, but must be provided since MiningFunctionSettings are optional.
+
+If an attribute was normalized or discretized automatically by the Data Mining System, the specific details are provided in the SignatureAttribute object. The user is not expected to use this information to preprocess the data in any way. The Data Mining System uses this information to automatically preprocess data, if required.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningModel.SignatureAttribute.usageOption [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a38EB3B2C0054'
+ name = 'usageOption'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a38FB56DA00C9' >
+ <Model:ModelElement.annotation>The usage intended for this attribute. A model signature consists only of 'active' and 'supplemental' attributes. 'Inactive' attributes are filtered out as they do not contribute to the model.
+
+Note that 'supplemental' attributes do not contribute to model apply.</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningModel.ModelRefSettings [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A956A6A03B5'
+ name = 'ModelRefSettings' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A956A6B032A'
+ name = 'settings' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39C6234A0375' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A956A6B0348'
+ name = 'model' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a39C623280312' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningModel.ModelHasSignature [Association] ==================== -->
+ <Model:Association xmi.id = 'a38EB3DB90157'
+ name = 'ModelHasSignature' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a38EB3DB9034C'
+ name = 'modelSignature' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a38EB3D7A034B' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a38EB3DB90356'
+ name = 'model' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a39C623280312' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningModel.ModelRefLocation [Association] ==================== -->
+ <Model:Association xmi.id = 'a395CEEDB0040'
+ name = 'ModelRefLocation' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a395CEEDB0325'
+ name = 'modelLocation' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3298A02900FE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a395CEEDC01A9'
+ name = 'model' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a39C623280312' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningModel.ModelRefKeyAttribute [Association] ==================== -->
+ <Model:Association xmi.id = 'a395CEFA90168'
+ name = 'ModelRefKeyAttribute' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a395CEFA90335'
+ name = 'keyAttribute' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A6F62780143' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a395CEFAA010F'
+ name = 'model' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a39C623280312' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+ </Model:Package>
+ <!-- ==================== MiningCore.org.omg.mof.idl_substitute_name=MiningModelModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.978'
+ name = 'org.omg.mof.idl_substitute_name=MiningModelModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a395CF9560185' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>MiningModelModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== MiningCore.MiningResult [Package] ==================== -->
+ <Model:Package xmi.id = 'a395CF9650014'
+ name = 'MiningResult' annotation = 'This package defines the basic MiningResult object from which all result objects inherit as the result of a specific mining task (other than build).'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningResult.MiningResult [Class] ==================== -->
+ <Model:Class xmi.id = 'a3B4C849F03BB'
+ name = 'MiningResult'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>A MiningResult holds the metadata of the result of a mining run other than training that results in a model.
+It includes apply, test, and compute lift operations.</Model:ModelElement.annotation>
+ </Model:Class>
+ </Model:Namespace.contents>
+ </Model:Package>
+ <!-- ==================== MiningCore.org.omg.mof.idl_substitute_name=MiningResultModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.979'
+ name = 'org.omg.mof.idl_substitute_name=MiningResultModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a395CF9650014' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>MiningResultModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== MiningCore.MiningTask [Package] ==================== -->
+ <Model:Package xmi.id = 'a395CF99A0101'
+ name = 'MiningTask' annotation = 'This package defines the objects that are related to mining tasks. A MiningTask object represents a specific mining operation to be performed on a given data.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningTask.ApplyContentItem [Class] ==================== -->
+ <Model:Class xmi.id = 'a38EB31BD020A'
+ name = 'ApplyContentItem' annotation = 'This is an abstract class that describes an item to appear in the output based on the rank of the prediction.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a39FF3C4202A9' >
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningTask.ApplyContentItem.topNthIndex [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B66DB5C006F'
+ name = 'topNthIndex' annotation = 'This indicates the rank of the prediction whose associated values (score, probability, and rule id) to appear in the output are specified by the subclasses.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningTask.ApplyOutputItem [Class] ==================== -->
+ <Model:Class xmi.id = 'a39FF3C4202A9'
+ name = 'ApplyOutputItem'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3B4F1BA302C6' >
+ <Model:ModelElement.annotation>This object describes an entity of apply output. It is usually stored in a destination attribute. The destination attribute is specified by an AttributeAssignment object.
+If Transactional output, then ApplyOutputItem does not have a destination attribute. Instead, the (name) entry for the attrNameAttribute is held in 'name' inherited from ModelElement</Model:ModelElement.annotation>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningTask.ApplyOutputOption [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a3B4F3802039C'
+ name = 'ApplyOutputOption' annotation = 'This enumeration specifies how apply output is created.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'ApplyOutputOption'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'appendToExisting'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'createNew'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== MiningCore.MiningTask.ApplyProbabilityItem [Class] ==================== -->
+ <Model:Class xmi.id = 'a38EB31AF00DD'
+ name = 'ApplyProbabilityItem' annotation = 'This indicates that the probability value of the prediction (whose rank is specified here) should appear in the output.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a38EB31BD020A' />
+ <!-- ==================== MiningCore.MiningTask.ApplyRuleIdItem [Class] ==================== -->
+ <Model:Class xmi.id = 'a394B986A02C6'
+ name = 'ApplyRuleIdItem' annotation = 'This indicates that the rule ID of the prediction (whose rank is specified here) should appear in the output. This applies only to the models with rule IDs (such as decision tree models).'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a38EB31BD020A' />
+ <!-- ==================== MiningCore.MiningTask.ApplyScoreItem [Class] ==================== -->
+ <Model:Class xmi.id = 'a394B982B0275'
+ name = 'ApplyScoreItem' annotation = 'This indicates that the score (target value) of the prediction (whose rank is specified here) should appear in the output.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a38EB31BD020A' />
+ <!-- ==================== MiningCore.MiningTask.ApplySourceItem [Class] ==================== -->
+ <Model:Class xmi.id = 'a38EB31D90110'
+ name = 'ApplySourceItem' annotation = 'This indicates that the source attribute specified here appears in the output as well.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a39FF3C4202A9' />
+ <!-- ==================== MiningCore.MiningTask.MiningApplyOutput [Class] ==================== -->
+ <Model:Class xmi.id = 'a39FF3C21039C'
+ name = 'MiningApplyOutput'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>This describes the ouput Specification for a MiningApplyTask.
+It contains a set of attributes (represented as ApplyOutputItem objects) holding the output information. These attributes can hold the score or other computed information, or else be copied from input columns for reference.
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningTask.MiningApplyOutput.item [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a39FF3C2A02AE'
+ name = 'item' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39FF3C4202A9'
+ referencedEnd = 'a39FF3C9001D9' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningTask.MiningApplyTask [Class] ==================== -->
+ <Model:Class xmi.id = 'a39C92C630074'
+ name = 'MiningApplyTask' annotation = 'This describes a task that computes the result of an application of a data mining model to (new) data.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3A0981130303' >
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningTask.MiningApplyTask.applyOutput [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A241BD7024E'
+ name = 'applyOutput' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39FF3C21039C'
+ referencedEnd = 'a3A241BEF00B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningTask.MiningApplyTask.outputAssignment [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4F338602BF'
+ name = 'outputAssignment' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3946969902A4'
+ referencedEnd = 'a3B4F33C00196' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningTask.MiningApplyTask.outputOption [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B4F37360230'
+ name = 'outputOption' annotation = 'This specifies how the apply output is created. The default is "createNew", which means the output is stored in a new file/table.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3B4F3802039C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningTask.MiningBuildTask [Class] ==================== -->
+ <Model:Class xmi.id = 'a3A098260014A'
+ name = 'MiningBuildTask' annotation = 'This describes a task that builds a mining model, sometimes also called training task.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3A0981130303' >
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningTask.MiningBuildTask.miningSettings [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A0F3D4E02D1'
+ name = 'miningSettings' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39C6234A0375'
+ referencedEnd = 'a3A241C730180' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningTask.MiningBuildTask.settingsAssignment [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4DB10900FA'
+ name = 'settingsAssignment' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3946969902A4'
+ referencedEnd = 'a3B4DB15301F1' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningTask.MiningBuildTask.validationData [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4F4B44017E'
+ name = 'validationData' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a38B1E301035E'
+ referencedEnd = 'a3B4F4C0503AC' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningTask.MiningBuildTask.validationAssignment [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4F4B52016A'
+ name = 'validationAssignment' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3946969902A4'
+ referencedEnd = 'a3B4F4B880208' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningTask.MiningBuildTask.resultModel [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B03941B00E8'
+ name = 'resultModel' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39C623280312'
+ referencedEnd = 'a3B039664037E' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningTask.MiningTask [Class] ==================== -->
+ <Model:Class xmi.id = 'a3A0981130303'
+ name = 'MiningTask' annotation = 'This is an abstract class that describes an executable data mining task operating on data.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningTask.MiningTask.inputData [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A0F3D1B02A6'
+ name = 'inputData' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a38B1E301035E'
+ referencedEnd = 'a38EB3F810398' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningTask.MiningTask.modelAssignment [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B028ADD003F'
+ name = 'modelAssignment' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3946969902A4'
+ referencedEnd = 'a3B028AFF0066' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.MiningTask.MiningTask.inputModel [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B0396740377'
+ name = 'inputModel' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39C623280312'
+ referencedEnd = 'a38EB405F00F8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningTask.MiningTransformation [Class] ==================== -->
+ <Model:Class xmi.id = 'a3B4B57F003D0'
+ name = 'MiningTransformation' annotation = 'This defines a mining task as a transformation.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a36D1C5900149' >
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.MiningTask.MiningTransformation.procedure [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4B57FD0338'
+ name = 'procedure' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A0981130303'
+ referencedEnd = 'a3B4B581B0006' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.MiningTask.TransformationRefMiningTask [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B4B581A0091'
+ name = 'TransformationRefMiningTask' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B4B581B0006'
+ name = 'procedure' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A0981130303' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B4B581B001A'
+ name = 'transformation' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3B4B57F003D0' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningTask.TaskRefInputModel [Association] ==================== -->
+ <Model:Association xmi.id = 'a38EB405E01FB'
+ name = 'TaskRefInputModel' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a38EB405F00F8'
+ name = 'inputModel' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39C623280312' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a38EB405F0120'
+ name = 'miningTask' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A0981130303' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningTask.TaskRefPhysicalData [Association] ==================== -->
+ <Model:Association xmi.id = 'a38EB3F810239'
+ name = 'TaskRefPhysicalData' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a38EB3F810398'
+ name = 'inputData' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a38B1E301035E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a38EB3F8103AC'
+ name = 'miningTask' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A0981130303' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningTask.TaskRefAttrAssignmentSet [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B028AFE026E'
+ name = 'TaskRefAttrAssignmentSet' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B028AFF0066'
+ name = 'modelAssignment' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3946969902A4' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B028AFF007A'
+ name = 'miningTask' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A0981130303' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningTask.ApplyTaskRefOutputAssignment [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B4F33BE0265'
+ name = 'ApplyTaskRefOutputAssignment' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B4F33C00196'
+ name = 'outputAssignment' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3946969902A4' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B4F33C001BE'
+ name = 'applyTask' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a39C92C630074' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningTask.ApplyTaskRefOutputSpec [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A241BEE02A1'
+ name = 'ApplyTaskRefOutputSpec' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A241BEF00B8'
+ name = 'applyOutput' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39FF3C21039C' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A241BEF00CC'
+ name = 'applyTask' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a39C92C630074' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningTask.BuildTaskProducesModel [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B03966400A3'
+ name = 'BuildTaskProducesModel' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B039664037E'
+ name = 'resultModel' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39C623280312' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B03966403B0'
+ name = 'buildTask' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A098260014A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningTask.BuildTaskRefSettings [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A241C73002B'
+ name = 'BuildTaskRefSettings' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A241C730180'
+ name = 'miningSettings' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39C6234A0375' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A241C7301C6'
+ name = 'buildTask' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A098260014A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningTask.BuildTaskRefValidationAssignment [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B4F4B87018E'
+ name = 'BuildTaskRefValidationAssignment' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B4F4B880208'
+ name = 'validationAssignment' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3946969902A4' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B4F4B88023A'
+ name = 'buildTask' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A098260014A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningTask.BuildTaskRefInputAssignment [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B4DB1520022'
+ name = 'BuildTaskRefInputAssignment' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B4DB15301F1'
+ name = 'settingsAssignment' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3946969902A4' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B4DB153020F'
+ name = 'buildTask' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A098260014A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningTask.BuildTaskRefValidationData [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B4F4C050081'
+ name = 'BuildTaskRefValidationData' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B4F4C0503AC'
+ name = 'validationData' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a38B1E301035E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B4F4C060000'
+ name = 'buildTask' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A098260014A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.MiningTask.ApplyOutputHasContentItems [Association] ==================== -->
+ <Model:Association xmi.id = 'a39FF3C900156'
+ name = 'ApplyOutputHasContentItems' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a39FF3C9001D9'
+ name = 'item' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39FF3C4202A9' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a39FF3C9001ED'
+ name = 'applyOutput' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a39FF3C21039C' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+ </Model:Package>
+ <!-- ==================== MiningCore.org.omg.mof.idl_substitute_name=MiningTaskModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.980'
+ name = 'org.omg.mof.idl_substitute_name=MiningTaskModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a395CF99A0101' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>MiningTaskModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== MiningCore.EntryPoint [Package] ==================== -->
+ <Model:Package xmi.id = 'a395FA5C40159'
+ name = 'EntryPoint' annotation = 'This package defines the top-level objects of DataMining package which can be used as entry point in application programming.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.EntryPoint.AuxiliaryObject [Class] ==================== -->
+ <Model:Class xmi.id = 'a3B4F35EE02D9'
+ name = 'AuxiliaryObject' annotation = 'This contains ancillary objects that must be part of a schema.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.EntryPoint.AuxiliaryObject.attributeAssignmentSet [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B582CE301AC'
+ name = 'attributeAssignmentSet' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3946969902A4'
+ referencedEnd = 'a3B4F3549023B' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.EntryPoint.Catalog [Class] ==================== -->
+ <Model:Class xmi.id = 'a38FE352002E0'
+ name = 'Catalog' annotation = 'This object is the top level entry point for CWM Data Mining package. It contains a set of schema.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5D19033E' >
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.EntryPoint.Catalog.schema [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4C434B020F'
+ name = 'schema' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a38FE324B00DE'
+ referencedEnd = 'a38FE353F0280' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.EntryPoint.Schema [Class] ==================== -->
+ <Model:Class xmi.id = 'a38FE324B00DE'
+ name = 'Schema' annotation = 'Container for all data mining top level objects.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a32B69F3A0118' >
+ <Model:Namespace.contents>
+ <!-- ==================== MiningCore.EntryPoint.Schema.logicalData [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4C42C400FC'
+ name = 'logicalData' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39C62A0A03B6'
+ referencedEnd = 'a38FE37F00335' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.EntryPoint.Schema.categoryMatrix [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4C42D3032F'
+ name = 'categoryMatrix' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39CF8E7103CD'
+ referencedEnd = 'a38FE374B0388' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.EntryPoint.Schema.miningModel [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4C42E10108'
+ name = 'miningModel' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39C623280312'
+ referencedEnd = 'a3B4C42B101F9' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.EntryPoint.Schema.miningFunctionSettings [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4C42E80162'
+ name = 'miningFunctionSettings' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39C6234A0375'
+ referencedEnd = 'a38FE36EE008B' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.EntryPoint.Schema.taxonomy [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4C42FA015E'
+ name = 'taxonomy' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39D110A50001'
+ referencedEnd = 'a3B4CCB6001B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.EntryPoint.Schema.miningTask [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a39690F0F037C'
+ name = 'miningTask' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A0981130303'
+ referencedEnd = 'a3B4C5F02001C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.EntryPoint.Schema.result [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a394801C001E0'
+ name = 'result' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3B4C849F03BB'
+ referencedEnd = 'a394801DF0177' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== MiningCore.EntryPoint.Schema.auxObjects [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B582D080390'
+ name = 'auxObjects' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3B4F35EE02D9'
+ referencedEnd = 'a3B4F360A01E8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== MiningCore.EntryPoint.CatalogHasSchema [Association] ==================== -->
+ <Model:Association xmi.id = 'a38FE353F0172'
+ name = 'CatalogHasSchema' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a38FE353F0280'
+ name = 'schema' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a38FE324B00DE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a38FE353F028A'
+ name = 'catalog' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a38FE352002E0' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.EntryPoint.SchemaHasLogicalData [Association] ==================== -->
+ <Model:Association xmi.id = 'a38FE37F000F0'
+ name = 'SchemaHasLogicalData' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a38FE37F00335'
+ name = 'logicalData' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39C62A0A03B6' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a38FE37F00349'
+ name = 'schema' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a38FE324B00DE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.EntryPoint.SchemaHasCategoryMatrix [Association] ==================== -->
+ <Model:Association xmi.id = 'a38FE374B025B'
+ name = 'SchemaHasCategoryMatrix' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a38FE374B0388'
+ name = 'categoryMatrix' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39CF8E7103CD' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a38FE374B03A6'
+ name = 'schema' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a38FE324B00DE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.EntryPoint.SchemaHasAuxObjects [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B4F360901FB'
+ name = 'SchemaHasAuxObjects' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B4F360A01E8'
+ name = 'auxObjects' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3B4F35EE02D9' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B4F360A01F2'
+ name = 'schema' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a38FE324B00DE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.EntryPoint.AuxObjectHasAttrAssignmentSet [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B4F35470351'
+ name = 'AuxObjectHasAttrAssignmentSet' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B4F3549023B'
+ name = 'attributeAssignmentSet' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3946969902A4' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B4F35490281'
+ name = 'auxiliaryObject' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3B4F35EE02D9' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.EntryPoint.SchemaHasCategoryTaxonomy [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B4CCB5F0351'
+ name = 'SchemaHasCategoryTaxonomy' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B4CCB6001B8'
+ name = 'taxonomy' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39D110A50001' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B4CCB6001D6'
+ name = 'schema' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a38FE324B00DE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.EntryPoint.SchemaHasFunctionSettings [Association] ==================== -->
+ <Model:Association xmi.id = 'a38FE36ED02A6'
+ name = 'SchemaHasFunctionSettings' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a38FE36EE008B'
+ name = 'miningFunctionSettings' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39C6234A0375' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a38FE36EE00A9'
+ name = 'schema' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a38FE324B00DE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.EntryPoint.SchemaHasMiningModel [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B4C42B0025C'
+ name = 'SchemaHasMiningModel' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B4C42B101F9'
+ name = 'miningModel' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39C623280312' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B4C42B10235'
+ name = 'schema' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a38FE324B00DE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.EntryPoint.SchemaHasMiningTask [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B4C5F010197'
+ name = 'SchemaHasMiningTask' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B4C5F02001C'
+ name = 'miningTask' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A0981130303' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B4C5F020030'
+ name = 'schema' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a38FE324B00DE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== MiningCore.EntryPoint.SchemaHasMiningResult [Association] ==================== -->
+ <Model:Association xmi.id = 'a394801DE03C4'
+ name = 'SchemaHasMiningResult' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a394801DF0177'
+ name = 'result' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3B4C849F03BB' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a394801DF0195'
+ name = 'schema' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a38FE324B00DE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+ </Model:Package>
+ <!-- ==================== MiningCore.org.omg.mof.idl_substitute_name=EntryPointModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.981'
+ name = 'org.omg.mof.idl_substitute_name=EntryPointModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a395FA5C40159' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>EntryPointModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== Clustering [Package] ==================== -->
+<Model:Package xmi.id = 'a3B66D6FE025C'
+ name = 'Clustering' annotation = 'This package contains the metamodel that represents clustering function, models, and settings.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:Namespace.contents>
+ <!-- ==================== Clustering.org.omg.mof.idl_substitute_name=ClusteringModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.982'
+ name = 'org.omg.mof.idl_substitute_name=ClusteringModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a3B66D6FE025C' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>ClusteringModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Clustering.org.omg.mof.idl_prefix=org.omg.cwm.analysis [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.983'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.analysis' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a3B66D6FE025C' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.analysis</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Clustering.org.omg.xmi.namespace=CWMDM [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.984'
+ name = 'org.omg.xmi.namespace=CWMDM' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a3B66D6FE025C' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWMDM</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Clustering.com.urep.jcr.java_prefix=org.omg.java.cwm.analysis [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.985'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.analysis' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a3B66D6FE025C' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.analysis</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.986'
+ name = 'Core' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6600C5031F' />
+ <Model:Import xmi.id = 'G.987'
+ name = 'MiningCore' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a39E71F94024D' />
+ <!-- ==================== Clustering.AggregationFunction [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a38FB583A0260'
+ name = 'AggregationFunction'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>Per ClusteringModel, there is one aggregation function: depending on the attribute type. The aggregated value is optimal if it is 0 (for distance measure) or greater values indicate optimal fit (for simiarity measure).
+In the definition of functions, Wi is the field weight in the attribute, and Xi and Yi are values.</Model:ModelElement.annotation>
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'AggregationFunction'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'euclidean'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'squaredEuclidean'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'chebychev'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'cityBlock'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'minkovski'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'simpleMatching'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'jaccard'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'tanimoto'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'binarySimilarity'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== Clustering.AttributeComparisonFunction [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a395CDEB402C5'
+ name = 'AttributeComparisonFunction'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>When two records are compared, then either the distance or similarity is of interest. In both cases the measures can be compouted by a combination of an "inner" function and an "outer" function. The inner function compares two single field values and the outer function computes an aggregation over all fields.
+Each field has a comparison function, this is either defined as a default in ClusteringModel or it can be defined per attribute.</Model:ModelElement.annotation>
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'AttributeComparisonFunction'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'absDiff'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'gaussSim'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'delta'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'equal'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'table'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== Clustering.ClusteringAttributeUsage [Class] ==================== -->
+ <Model:Class xmi.id = 'a3A0ADA06000E'
+ name = 'ClusteringAttributeUsage'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a39C62D090070' >
+ <Model:ModelElement.annotation>A ClusteringAttributeUsage is a subclass of AttributeUsage to support attribute usages that are specific to clustering algorithms.
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Clustering.ClusteringAttributeUsage.attributeComparisonFunction [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A0ADA14027B'
+ name = 'attributeComparisonFunction' annotation = 'When two records are compared then either the distance or the similarity is of interest. In both cases the measures can be computed by a combination of an &apos;inner&apos; function and an &apos;outer&apos; function. The inner function compares two single field values and the outer function computes an aggregation over all fields'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a395CDEB402C5' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Clustering.ClusteringAttributeUsage.similarityScale [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A0ADA8202FC'
+ name = 'similarityScale' annotation = 'If the attributeComparisonFunction admits a value, then similarityScale is that value. Only valid for numerical attributes. NULL otherwise.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3C22376201E4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Clustering.ClusteringAttributeUsage.comparisonMatrix [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A6E07CD01BB'
+ name = 'comparisonMatrix' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39CF8E7103CD'
+ referencedEnd = 'a3A6E07E4011E' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Clustering.ClusteringFunctionSettings [Class] ==================== -->
+ <Model:Class xmi.id = 'a39C62B130259'
+ name = 'ClusteringFunctionSettings' annotation = 'A ClusteringFunctionSettings object is a subclass of MiningFunctionSettings that supports features unique to clustering algorithms, such as: self-organizing map and k-means.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a39C6234A0375' >
+ <Model:Namespace.contents>
+ <!-- ==================== Clustering.ClusteringFunctionSettings.maxNumberOfClusters [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a39D1120601B8'
+ name = 'maxNumberOfClusters' annotation = 'The maxNumberOfClusters attribute specifies the maximum number of clusters the clustering algorithm should generate.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Clustering.ClusteringFunctionSettings.minClusterSize [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A0AD6190316'
+ name = 'minClusterSize' annotation = 'The minClusterSize attribute specifies the minimum number of records (cases) that must be present in a cluster to establish a cluster.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Clustering.ClusteringFunctionSettings.aggregationFunction [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a395CDCD702D3'
+ name = 'aggregationFunction' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a38FB583A0260' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Clustering.ClusteringModelCBasis [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a3B41BD9F03C5'
+ name = 'ClusteringModelCBasis' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'ClusteringModelCBasis'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'centerBased'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'probabilityBased'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'partitionBased'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'aggregationBased'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== Clustering.ClusteringAttrUsageRefComparisonMatrix [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A6E07E3016D'
+ name = 'ClusteringAttrUsageRefComparisonMatrix' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A6E07E4011E'
+ name = 'comparisonMatrix' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39CF8E7103CD' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A6E07E40146'
+ name = 'attribueUsage' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A0ADA06000E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== AssociationRules [Package] ==================== -->
+<Model:Package xmi.id = 'a395CFA0702B6'
+ name = 'AssociationRules' annotation = 'This package contains the metamodel that represents the constructs for frequent itemset, association rules and sequence algorithms.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:Namespace.contents>
+ <!-- ==================== AssociationRules.org.omg.mof.idl_substitute_name=AssociationRulesModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.988'
+ name = 'org.omg.mof.idl_substitute_name=AssociationRulesModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a395CFA0702B6' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>AssociationRulesModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== AssociationRules.org.omg.mof.idl_prefix=org.omg.cwm.analysis [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.989'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.analysis' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a395CFA0702B6' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.analysis</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== AssociationRules.org.omg.xmi.namespace=CWMDM [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.990'
+ name = 'org.omg.xmi.namespace=CWMDM' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a395CFA0702B6' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWMDM</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== AssociationRules.com.urep.jcr.java_prefix=org.omg.java.cwm.analysis [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.991'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.analysis' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a395CFA0702B6' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.analysis</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.992'
+ name = 'Core' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6600C5031F' />
+ <Model:Import xmi.id = 'G.993'
+ name = 'MiningCore' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a39E71F94024D' />
+ <!-- ==================== AssociationRules.AssociationRulesFunctionSettings [Class] ==================== -->
+ <Model:Class xmi.id = 'a3B03B37C032E'
+ name = 'AssociationRulesFunctionSettings' annotation = 'An AssociationRulesFunctionSettings is a subclass of FrequentItemSetFunctionSettings that supports features that are unique to association rules algorithms.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3B4F140E0397' >
+ <Model:Namespace.contents>
+ <!-- ==================== AssociationRules.AssociationRulesFunctionSettings.minimumConfidence [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B4F11950274'
+ name = 'minimumConfidence' annotation = 'This specifies the minimum confidence value of each association rule to be found.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3C22376201E4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== AssociationRules.AssociationRulesFunctionSettings.maximumRuleLength [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B4F119B009C'
+ name = 'maximumRuleLength' annotation = 'This is the maximum length of the antecedent and consequent item set sizes.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== AssociationRules.FrequentItemSetFunctionSettings [Class] ==================== -->
+ <Model:Class xmi.id = 'a3B4F140E0397'
+ name = 'FrequentItemSetFunctionSettings' annotation = 'This is a subclass of MiningFunctionSettings that specifies the parameters specific to frequent itemset algorithms.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a39C6234A0375' >
+ <Model:Namespace.contents>
+ <!-- ==================== AssociationRules.FrequentItemSetFunctionSettings.minimumSupport [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B4F14A20277'
+ name = 'minimumSupport' annotation = 'This specifies the minimum support of each frequent itemset to be found.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3C22376201E4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== AssociationRules.FrequentItemSetFunctionSettings.exclusion [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4F14D7001B'
+ name = 'exclusion' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39D11046025E'
+ referencedEnd = 'a3B4DFE0301E6' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== AssociationRules.FrequentItemSetFunctionSettings.maximumSetSize [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B4F150601D1'
+ name = 'maximumSetSize' annotation = 'This specifies the maximum number of items to be included in any frequent itemset to be found.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== AssociationRules.SequenceFunctionSettings [Class] ==================== -->
+ <Model:Class xmi.id = 'a3B03B2B2021F'
+ name = 'SequenceFunctionSettings' annotation = 'A SequenceFunctionSettings is a subclass of FrequentItemSetFunctionSettings that supports features that are unique to sequence rules algorithms.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3B4F140E0397' >
+ <Model:Namespace.contents>
+ <!-- ==================== AssociationRules.SequenceFunctionSettings.windowSize [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B03C5B900CF'
+ name = 'windowSize' annotation = 'This specifies the size of the window to be considered when executing sequence algorithm in terms of the number of items.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== AssociationRules.SettingsRefExcludedCategories [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B4DFE030019'
+ name = 'SettingsRefExcludedCategories' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B4DFE0301E6'
+ name = 'exclusion' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39D11046025E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B4DFE03024A'
+ name = 'settings' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3B4F140E0397' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== Supervised [Package] ==================== -->
+<Model:Package xmi.id = 'a395CFA1100D0'
+ name = 'Supervised' annotation = 'This package contains the metamodel that represents the constructs for supervised learning algorithms. Approximation, attribute importance and classification must implement this package.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:Namespace.contents>
+ <!-- ==================== Supervised.org.omg.mof.idl_substitute_name=SupervisedModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.994'
+ name = 'org.omg.mof.idl_substitute_name=SupervisedModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a395CFA1100D0' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>SupervisedModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Supervised.org.omg.mof.idl_prefix=org.omg.cwm.analysis [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.995'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.analysis' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a395CFA1100D0' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.analysis</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Supervised.org.omg.xmi.namespace=CWMDM [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.996'
+ name = 'org.omg.xmi.namespace=CWMDM' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a395CFA1100D0' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWMDM</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Supervised.com.urep.jcr.java_prefix=org.omg.java.cwm.analysis [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.997'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.analysis' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a395CFA1100D0' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.analysis</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.998'
+ name = 'Core' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6600C5031F' />
+ <Model:Import xmi.id = 'G.999'
+ name = 'MiningCore' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a39E71F94024D' />
+ <!-- ==================== Supervised.LiftAnalysisPoint [Class] ==================== -->
+ <Model:Class xmi.id = 'a38FB5ED003D7'
+ name = 'LiftAnalysisPoint' annotation = 'This represents the lift result for the quantile of the input data specified in this object.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:Namespace.contents>
+ <!-- ==================== Supervised.LiftAnalysisPoint.subsetOfRecords [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a38FB5F2100A8'
+ name = 'subsetOfRecords' annotation = 'The number of records for which the lift (sum of target predictions or actual target values) is given.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Supervised.LiftAnalysisPoint.aggregateTarget [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a38FB5F0302D6'
+ name = 'aggregateTarget' annotation = 'The lift, i.e. the sum of actual positive targets for classification or the sum of the actual values for regression, for the specified subset of records.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3C22376201E4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Supervised.LiftAnalysis [Class] ==================== -->
+ <Model:Class xmi.id = 'a3B4C601B0020'
+ name = 'LiftAnalysis' annotation = 'This represents the result of lift computation applied to a supervised model.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:Namespace.contents>
+ <!-- ==================== Supervised.LiftAnalysis.point [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4C60EC0360'
+ name = 'point' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a38FB5ED003D7'
+ referencedEnd = 'a3B0397570326' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Supervised.LiftAnalysis.targetAttributeName [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B4C6163039D'
+ name = 'targetAttributeName' annotation = 'This represents the name of the target attribute.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Supervised.LiftAnalysis.positiveTargetCategory [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4C611E02D6'
+ name = 'positiveTargetCategory' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39D11046025E'
+ referencedEnd = 'a3B4C612C0362' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Supervised.MiningTestTask [Class] ==================== -->
+ <Model:Class xmi.id = 'a3B4F5015016D'
+ name = 'MiningTestTask' annotation = 'This represents a mining task that is used to check some aspect of the quality of a classification or regression model.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3A0981130303' >
+ <Model:Namespace.contents>
+ <!-- ==================== Supervised.MiningTestTask.computeLift [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B4F5047006A'
+ name = 'computeLift' annotation = 'This indicates to perform lift computation as part of test task, if true. The default is false.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Supervised.MiningTestTask.positiveTargetCategory [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3C34D56B02A9'
+ name = 'positiveTargetCategory' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39D11046025E'
+ referencedEnd = 'a3B4A1766005C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Supervised.SupervisedFunctionSettings [Class] ==================== -->
+ <Model:Class xmi.id = 'a39C62B1602AD'
+ name = 'SupervisedFunctionSettings' annotation = 'A SupervisedFunctionSettings is a subclass of MiningFunctionSettings that supports features that are unique and shared by supervised functions, e.g., classification and approximation, as well as algorithms, e.g., decision trees and neural networks.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a39C6234A0375' />
+ <!-- ==================== Supervised.MiningTestResult [Class] ==================== -->
+ <Model:Class xmi.id = 'a3B4F2B420262'
+ name = 'MiningTestResult' annotation = 'This represents the result of a test task applied to a supervised model.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3B4C849F03BB' >
+ <Model:Namespace.contents>
+ <!-- ==================== Supervised.MiningTestResult.numberOfTestRecords [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B4F2B5A027A'
+ name = 'numberOfTestRecords' annotation = 'This represents the number of records applied to the test task.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Supervised.MiningTestResult.liftAnalysis [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4F509603D5'
+ name = 'liftAnalysis' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3B4C601B0020'
+ referencedEnd = 'a3B4F50A302D0' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Supervised.TestResultHasLiftAnalysis [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B4F50A30009'
+ name = 'TestResultHasLiftAnalysis' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B4F50A302D0'
+ name = 'liftAnalysis' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3B4C601B0020' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B4F50A302F8'
+ name = 'testResult' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3B4F2B420262' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Supervised.LiftHasAnalysisPoint [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B0397570324'
+ name = 'LiftHasAnalysisPoint' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B0397570325'
+ name = 'liftAnalysis' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3B4C601B0020' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B0397570326'
+ name = 'point' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a38FB5ED003D7' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Supervised.LiftRefPositiveTargetCategory [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B4C612C0113'
+ name = 'LiftRefPositiveTargetCategory' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B4C612C0362'
+ name = 'positiveTargetCategory' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39D11046025E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B4C612C03DA'
+ name = 'liftAnalysis' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3B4C601B0020' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Supervised.TestTaskRefPositiveTarget [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B4A176502DC'
+ name = 'TestTaskRefPositiveTarget' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B4A1766005C'
+ name = 'positiveTargetCategory' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39D11046025E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B4A176600A3'
+ name = 'testTask' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3B4F5015016D' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== Classification [Package] ==================== -->
+<Model:Package xmi.id = 'a395CFA4201E9'
+ name = 'Classification' annotation = 'This package contains the metamodel that represents classification function, models, and settings.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:Namespace.contents>
+ <!-- ==================== Classification.org.omg.mof.idl_substitute_name=ClassificationModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1000'
+ name = 'org.omg.mof.idl_substitute_name=ClassificationModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a395CFA4201E9' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>ClassificationModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Classification.org.omg.mof.idl_prefix=org.omg.cwm.analysis [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1001'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.analysis' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a395CFA4201E9' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.analysis</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Classification.org.omg.xmi.namespace=CWMDM [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1002'
+ name = 'org.omg.xmi.namespace=CWMDM' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a395CFA4201E9' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWMDM</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Classification.com.urep.jcr.java_prefix=org.omg.java.cwm.analysis [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1003'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.analysis' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a395CFA4201E9' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.analysis</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.1004'
+ name = 'Core' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6600C5031F' />
+ <Model:Import xmi.id = 'G.1005'
+ name = 'MiningCore' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a39E71F94024D' />
+ <Model:Import xmi.id = 'G.1006'
+ name = 'Supervised' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a395CFA1100D0' />
+ <!-- ==================== Classification.ApplyTargetValueItem [Class] ==================== -->
+ <Model:Class xmi.id = 'a395258E801C7'
+ name = 'ApplyTargetValueItem' annotation = 'This indicates that the probability value of the given target value is to appear in the output.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a39FF3C4202A9' >
+ <Model:Namespace.contents>
+ <!-- ==================== Classification.ApplyTargetValueItem.targetValue [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3952599401F6'
+ name = 'targetValue' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39D11046025E'
+ referencedEnd = 'a38EB32A302E7' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Classification.ClassificationAttributeUsage [Class] ==================== -->
+ <Model:Class xmi.id = 'a3B33A98F02FE'
+ name = 'ClassificationAttributeUsage'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a39C62D090070' >
+ <Model:ModelElement.annotation>As a subclass of AttributeUsage, CategoricalAttributeUsage provides additional specification for categorical attributes only, in particular, a set of the positive categories.
+
+Positive categories are provided here since different models may choose different postive categories, hence it is not a characteristic of the data.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Classification.ClassificationAttributeUsage.positiveCategory [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B33A9A2028D'
+ name = 'positiveCategory' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39D11046025E'
+ referencedEnd = 'a3B33A9DB01E5' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Classification.ClassificationAttributeUsage.priors [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4F0399012C'
+ name = 'priors' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A26E731037A'
+ referencedEnd = 'a3B4F0378027B' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Classification.ClassificationFunctionSettings [Class] ==================== -->
+ <Model:Class xmi.id = 'a39C92E0C029C'
+ name = 'ClassificationFunctionSettings'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a39C62B1602AD' >
+ <Model:ModelElement.annotation>A ClassificationFunctionSettings object is a subclass of SupervisedFunctionSettings that supports features unique to the classification mining function and corresponding algorithms, specifically costMatrix.
+
+The costMatrix must be associated with the target MiningAttribute.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Classification.ClassificationFunctionSettings.costMatrix [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a39D3814402FB'
+ name = 'costMatrix' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39CF8E7103CD'
+ referencedEnd = 'a3A28144703CB' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Classification.ClassificationTestResult [Class] ==================== -->
+ <Model:Class xmi.id = 'a3B4C99FD00DC'
+ name = 'ClassificationTestResult' annotation = 'This represents the result of a test task applied to a classification model.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3B4F2B420262' >
+ <Model:Namespace.contents>
+ <!-- ==================== Classification.ClassificationTestResult.confusionMatrix [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4F2BC90338'
+ name = 'confusionMatrix' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39CF8E7103CD'
+ referencedEnd = 'a3B039BB502E5' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Classification.ClassificationTestResult.accuracy [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B4F2BF20143'
+ name = 'accuracy' annotation = 'If state is successful, the absolute number or the percentage (between 0 and 100) of correct predictions on the inputData (test data). NULL in other states.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3C22376201E4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Classification.ClassificationTestTask [Class] ==================== -->
+ <Model:Class xmi.id = 'a39D10AD40335'
+ name = 'ClassificationTestTask' annotation = 'This represents a task to check the quality of a classification model. An overall accuracy and a &apos;class by class&apos; confusion matrix can be computed.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3B4F5015016D' >
+ <Model:Namespace.contents>
+ <!-- ==================== Classification.ClassificationTestTask.testResult [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a39D10B23034D'
+ name = 'testResult' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3B4C99FD00DC'
+ referencedEnd = 'a3B4F2B2D0226' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Classification.PriorProbabilities [Class] ==================== -->
+ <Model:Class xmi.id = 'a3A26E731037A'
+ name = 'PriorProbabilities'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>This represents a set of prior probabilities of the categories in a mining attribute. Mostly applies to a target MiningAttribute used for classification.
+The sum of the probabilities in all priorsEntries must not exceed 1.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Classification.PriorProbabilities.prior [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A26E73E00EE'
+ name = 'prior' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39CF8F97036B'
+ referencedEnd = 'a39D365070129' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Classification.PriorProbabilitiesEntry [Class] ==================== -->
+ <Model:Class xmi.id = 'a39CF8F97036B'
+ name = 'PriorProbabilitiesEntry' annotation = 'This represents the probability of a category in the original data, i.e. before performing biased sampling to enrich individual values.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:Namespace.contents>
+ <!-- ==================== Classification.PriorProbabilitiesEntry.targetValue [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a39CF8FB801B0'
+ name = 'targetValue' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a39D11046025E'
+ referencedEnd = 'a390DC2830126' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== Classification.PriorProbabilitiesEntry.priorProbability [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a39CF8FBD0261'
+ name = 'priorProbability'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3C22376201E4' >
+ <Model:ModelElement.annotation>This represents the probability of the targetValue in the original data.
+The value must be in [0,1]</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Classification.ClassificationSettingsRefCostMatrix [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A2814470262'
+ name = 'ClassificationSettingsRefCostMatrix' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A28144703CB'
+ name = 'costMatrix' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39CF8E7103CD' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A28144703DF'
+ name = 'settings' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a39C92E0C029C' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Classification.ClassificationAttrUsageRefCategory [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B33A9DB0036'
+ name = 'ClassificationAttrUsageRefCategory' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B33A9DB01E5'
+ name = 'positiveCategory' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39D11046025E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B33A9DB0221'
+ name = 'usage' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a3B33A98F02FE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Classification.ClassificationAttrUsageHasPriors [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B4F03780279'
+ name = 'ClassificationAttrUsageHasPriors' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B4F0378027A'
+ name = 'usage' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3B33A98F02FE' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B4F0378027B'
+ name = 'priors' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A26E731037A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Classification.PriorProbabilitiesHasEntries [Association] ==================== -->
+ <Model:Association xmi.id = 'a39D365060272'
+ name = 'PriorProbabilitiesHasEntries' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a39D365070129'
+ name = 'prior' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39CF8F97036B' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a39D365070133'
+ name = 'priors' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3A26E731037A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Classification.PriorRefCategory [Association] ==================== -->
+ <Model:Association xmi.id = 'a390DC282021F'
+ name = 'PriorRefCategory' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a390DC2830126'
+ name = 'targetValue' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39D11046025E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a390DC2830130'
+ name = 'priorsEntry' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a39CF8F97036B' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Classification.TestResultHasConfusionMatrix [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B039BB40239'
+ name = 'TestResultHasConfusionMatrix' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B039BB502E5'
+ name = 'confusionMatrix' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39CF8E7103CD' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B039BB50303'
+ name = 'testResult' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3B4C99FD00DC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Classification.ClassificationTestTaskHasResult [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B4F2B2C02C4'
+ name = 'ClassificationTestTaskHasResult' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B4F2B2D0226'
+ name = 'testResult' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3B4C99FD00DC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B4F2B2D023A'
+ name = 'testTask' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a39D10AD40335' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== Classification.TargetValueItemRefCategory [Association] ==================== -->
+ <Model:Association xmi.id = 'a38EB32A300AC'
+ name = 'TargetValueItemRefCategory' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a38EB32A302E7'
+ name = 'targetValue' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a39D11046025E' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a38EB32A30319'
+ name = 'targetValueItem' annotation = ''
+ isNavigable = 'false' aggregation = 'none' isChangeable = 'true'
+ type = 'a395258E801C7' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== Approximation [Package] ==================== -->
+<Model:Package xmi.id = 'a395CFA550060'
+ name = 'Approximation' annotation = 'This package contains the metamodel that represents the constructs for approximation model (as known as regression).'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:Namespace.contents>
+ <!-- ==================== Approximation.org.omg.mof.idl_substitute_name=ApproximationModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1007'
+ name = 'org.omg.mof.idl_substitute_name=ApproximationModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a395CFA550060' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>ApproximationModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Approximation.org.omg.mof.idl_prefix=org.omg.cwm.analysis [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1008'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.analysis' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a395CFA550060' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.analysis</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Approximation.org.omg.xmi.namespace=CWMDM [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1009'
+ name = 'org.omg.xmi.namespace=CWMDM' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a395CFA550060' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWMDM</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== Approximation.com.urep.jcr.java_prefix=org.omg.java.cwm.analysis [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1010'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.analysis' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a395CFA550060' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.analysis</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.1011'
+ name = 'MiningCore' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a39E71F94024D' />
+ <Model:Import xmi.id = 'G.1012'
+ name = 'Supervised' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a395CFA1100D0' />
+ <!-- ==================== Approximation.ApproximationFunctionSettings [Class] ==================== -->
+ <Model:Class xmi.id = 'a39C92E160340'
+ name = 'ApproximationFunctionSettings'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a39C62B1602AD' >
+ <Model:ModelElement.annotation>An ApproximationFunctionSettings is a subclass of SupervisedFunctionSettings that supports features that are unique to approximate numerical values.
+
+This originally was named "RegressionFunctionSettings", however, this implies a restriction on the type of algorithms that can be applied to solve the problem of approximation, or curve fitting.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Approximation.ApproximationFunctionSettings.toleratedError [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B4F0D3E03B7'
+ name = 'toleratedError' annotation = 'The toleratedError is defined in terms of R-squared'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3C22376201E4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Approximation.ApproximationTestResult [Class] ==================== -->
+ <Model:Class xmi.id = 'a3B4C971700CB'
+ name = 'ApproximationTestResult' annotation = 'This represents the result of a test task applied to an approximation model.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3B4F2B420262' >
+ <Model:Namespace.contents>
+ <!-- ==================== Approximation.ApproximationTestResult.meanPredictedValue [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B4F2DB202EB'
+ name = 'meanPredictedValue' annotation = 'Mean of the predicted values for test data. NULL if not computed.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3C22376201E4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Approximation.ApproximationTestResult.meanActualValue [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B4F2DB701E4'
+ name = 'meanActualValue' annotation = 'Mean of the actual values in the target attribute for test data. NULL if not computed.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3C22376201E4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Approximation.ApproximationTestResult.meanAbsoluteError [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B4F2DBE0068'
+ name = 'meanAbsoluteError' annotation = 'Mean of the absolute values of the prediction error on the test data.. NULL if not computed.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3C22376201E4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Approximation.ApproximationTestResult.rmsError [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B4F2DC400F3'
+ name = 'rmsError' annotation = 'Root of the mean squared errors on the test data. NULL if not computed.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3C22376201E4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== Approximation.ApproximationTestResult.rSquared [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B4F2DC80062'
+ name = 'rSquared' annotation = 'The squared Pearson correlation coefficient computed on the test data. NULL if not computed.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3C22376201E4' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Approximation.ApproximationTestTask [Class] ==================== -->
+ <Model:Class xmi.id = 'a38FB5F4802DF'
+ name = 'ApproximationTestTask'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3B4F5015016D' >
+ <Model:ModelElement.annotation>This represents a task to check the quality of a regression model. A comparison of mean predicted values and mean actual values can be done and a number of numerical error measures can be computed.
+NULL values mean that the model did not compute the value.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== Approximation.ApproximationTestTask.testResult [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3B4F4FAF0102'
+ name = 'testResult' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3B4C971700CB'
+ referencedEnd = 'a3B4F2B91028E' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== Approximation.ApproximationTestResultHasResult [Association] ==================== -->
+ <Model:Association xmi.id = 'a3B4F2B9003C3'
+ name = 'ApproximationTestResultHasResult' annotation = ''
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3B4F2B91028E'
+ name = 'testResult' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3B4C971700CB' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3B4F2B9102A2'
+ name = 'testTask' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a38FB5F4802DF' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== AttributeImportance [Package] ==================== -->
+<Model:Package xmi.id = 'a395CFCB3036E'
+ name = 'AttributeImportance' annotation = 'This package contains the metamodel that represents the constructs for attribute importance model.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:Namespace.contents>
+ <!-- ==================== AttributeImportance.org.omg.mof.idl_substitute_name=AttributeImportanceModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1013'
+ name = 'org.omg.mof.idl_substitute_name=AttributeImportanceModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a395CFCB3036E' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>AttributeImportanceModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== AttributeImportance.org.omg.mof.idl_prefix=org.omg.cwm.analysis [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1014'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.analysis' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a395CFCB3036E' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.analysis</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== AttributeImportance.org.omg.xmi.namespace=CWMDM [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1015'
+ name = 'org.omg.xmi.namespace=CWMDM' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a395CFCB3036E' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWMDM</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== AttributeImportance.com.urep.jcr.java_prefix=org.omg.java.cwm.analysis [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1016'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.analysis' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a395CFCB3036E' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.analysis</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.1017'
+ name = 'Core' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6600C5031F' />
+ <Model:Import xmi.id = 'G.1018'
+ name = 'Supervised' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a395CFA1100D0' />
+ <!-- ==================== AttributeImportance.AttributeImportanceSettings [Class] ==================== -->
+ <Model:Class xmi.id = 'a3B4C9A120321'
+ name = 'AttributeImportanceSettings' annotation = 'This is a subclass of MiningFunctionSettings that supports features unique to attribute importance identification, as known as feature selection.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a39C62B1602AD' >
+ <Model:Namespace.contents>
+ <!-- ==================== AttributeImportance.AttributeImportanceSettings.maximumResultSize [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B4F1858033C'
+ name = 'maximumResultSize' annotation = 'The attribute maximumResultSize indicates to return the top N most important attributes. It may return fewer.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== AttributeImportance.AttributeImportanceSettings.returnTop [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3B4F19AD00F7'
+ name = 'returnTop' annotation = 'If true, returns the most important attributes. If false, the least important.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== InformationVisualization [Package] ==================== -->
+<Model:Package xmi.id = 'a3857006102D5'
+ name = 'InformationVisualization'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>The CWM Information Visualization metamodel defines metadata supporting the problem domain of "information publishing" or, more generally, "information visualization".
+
+Within the data warehousing environment, data is collected from numerous, diverse sources and transformed into a unified representation that facilitates the analysis of data for purposes of gaining business insight. Robust and flexible information visualization tools are key to the effective analysis of this information. Information visualization tools must be capable of understanding and preserving the "logical structure" of data warehouse information, while enabling the user to perform any number of "rendering transformations" on information content (e.g., displaying the same query result set in several different formats, such as a printed report, Web page, pie chart, bar graph, etc.).
+
+Since information visualization is a very broad problem domain, with a diverse set of possible solutions and many evolving standards, the CWM Information Visualization metamodel defines very generic, container-like metadata constructs that either contain or reference more complex visualization mechanisms at the M1-level. These metadata structures are intended to support the minimal metadata required to interchange more complex M1 models of visualization mechanisms.
+
+The Information Visualization package depends on the following packages:
+
+ org.omg.cwm.objectmodel.core
+ org.omg.cwm.foundation.expressions
+
+RenderedObject is the logical proxy for an arbitrary ModelElement that is to be rendered via some rendering transformation or process. A RenderedObject may be composed of an arbitrary number of other RenderedObjects (i.e., components), and may have topological relationships to still other RenderedObjects. The formula attribute allows for the specification of any implementation-dependent expression that completes the definition of a RenderedObject. For example, the formula might specify the position of the RenderedObject within a two-dimensional grid, or in relation to one of its neighbors; e.g., formula = "neighbor(x, y) + (delta-x, delta-y)".
+
+A RenderedObject generally references one or more Renderings that specify how the enderedObject is actually presented. One of these associated Renderings may optionally be designated as a default Rendering.
+
+A Rendering is semantically equivalent to a transformation, in that it transforms a source RenderedObject to some target "displayed" (or otherwise "presented" object -- e.g., a displayed image or an audio clip) . An instance of Rendering is fully specified via its formula attribute, which, like RenderedObject, contains an implementation-dependent expression.
+
+Thus, a RenderedObject may be viewed as the "logical description" of an object to be rendered, independently of how it is actually presented by any of its associated Renderings, and Renderings may be viewed as transformations that control the presentation of the RenderedObject while preserving its logical structure.
+
+Note that a RenderedObject may be the target of a complex transformation (i.e., utilizing the CWM Transformation package). For example, an N-dimensional OLAP cube might be transformed into an equivalent, two-dimensional, composite RenderedObject, with several dimensions mapped to row and column edges, respectively, and all other dimensions constrained to single member values. Several Renderings may then be defined and associated with the resultant RenderedObject, mapping the two-dimensional logical structure to the surface of a display screen in various different formats (e.g., spreadsheet, pie chart, bar graph, etc.).
+
+Possible types of Renderings include: Screen, paper, voice, Web, HTML documents, XML/XSL, languages based on extensions to XML, SVG, visual objects, responses to keying (e.g., keying interception plus rules), etc.
+
+XSLRendering represents a useful subtype of Rendering that&#x0092;s based on XSL (e.g., this subtype&#x0092;s formula might contain a procedure that uses XSL to create an HTML document).
+
+Finally, RenderedObjectSet represents a simple container of both logical RenderedObjects and available Renderings.
+
+The inheritance of the Information Visualization metamodel from the Object Model is shown in Fig. 16-2.
+
+OCL Representation of Information Visualization Constraints
+
+[C-1] The set of Renderings includes the default Rendering.
+context RenderedObject inv:
+self.defaultRendering-&gt;notEmpty implies
+self.rendering-&gt;includes( self.defaultRendering )
+
+[C-2] A RenderedObject may not reference itself as a Neighbor nor as a Component.
+context RenderedObject
+inv: self.neighbor-&gt;excludes( self )
+inv: self.component-&gt;excludes( self )
+
+[C-3] A RenderedObject may not reference one of its Neighbors as a Component (and vice versa).
+context RenderedObject inv:
+(self.neighbor-&gt;notEmpty and self.component-&gt;notEmpty) implies
+self.neighbor-&gt;intersection( self.component )-&gt;isEmpty
+
+The transitive closure of Neighbors of an instance of RenderedObject must not include the RenderedObject instance.
+
+The transitive closure of Components of an instance of RenderedObject must not include the RenderedObject instance.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== InformationVisualization.org.omg.mof.idl_prefix=org.omg.cwm.analysis [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1019'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.analysis' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a3857006102D5' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.analysis</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== InformationVisualization.org.omg.xmi.namespace=CWMIV [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1020'
+ name = 'org.omg.xmi.namespace=CWMIV' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a3857006102D5' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWMIV</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== InformationVisualization.org.omg.mof.idl_substitute_name=InformationVisualizationModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1021'
+ name = 'org.omg.mof.idl_substitute_name=InformationVisualizationModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a3857006102D5' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>InformationVisualizationModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== InformationVisualization.com.urep.jcr.java_prefix=org.omg.java.cwm.analysis [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1022'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.analysis' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a3857006102D5' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.analysis</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.1023'
+ name = 'Core' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6600C5031F' />
+ <Model:Import xmi.id = 'G.1024'
+ name = 'Expressions' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a38207A600078' />
+ <!-- ==================== InformationVisualization.RenderedObject [Class] ==================== -->
+ <Model:Class xmi.id = 'a385703C20213'
+ name = 'RenderedObject'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a32989FB2023D' >
+ <Model:ModelElement.annotation>RenderedObject serves as a logical "proxy" for an arbitrary ModelElement that is to be
+rendered.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== InformationVisualization.RenderedObject.formula [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a38577C6D0153'
+ name = 'formula' annotation = 'Allows for the specification of any implementation-dependent expression that completes the definition of a RenderedObject.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a376A84310237' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== InformationVisualization.RenderedObject.action [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A5E4382018E'
+ name = 'action' annotation = 'Specifies some implementation-dependent action associated with a RenderedObject.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== InformationVisualization.RenderedObject.fileName [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A5E438603B1'
+ name = 'fileName' annotation = 'Specifies the name of a file persisting an instance of RenderedObject.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== InformationVisualization.RenderedObject.type [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A5E438C02E7'
+ name = 'type' annotation = 'Specifies some implementation-dependent type associated with a RenderedObject'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== InformationVisualization.RenderedObject.url [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A5E439003E7'
+ name = 'url' annotation = 'Specifies a URL identifying some instance of RenderedObject.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== InformationVisualization.RenderedObject.rendering [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a386E7A1703DF'
+ name = 'rendering' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a385700B8019A'
+ referencedEnd = 'a3857050B00A8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== InformationVisualization.RenderedObject.defaultRendering [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a386E6B4A02AB'
+ name = 'defaultRendering' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a385700B8019A'
+ referencedEnd = 'a38570BCA03D0' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== InformationVisualization.RenderedObject.component [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a386E7A800191'
+ name = 'component' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a385703C20213'
+ referencedEnd = 'a38570471026F' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== InformationVisualization.RenderedObject.composite [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a386E7A8D0258'
+ name = 'composite' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a385703C20213'
+ referencedEnd = 'a385704710265' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== InformationVisualization.RenderedObject.neighbor [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a386E7A93004E'
+ name = 'neighbor' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a385703C20213'
+ referencedEnd = 'a38577D790018' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== InformationVisualization.RenderedObject.referencingNeighbor [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38825AB30336'
+ name = 'referencingNeighbor' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a385703C20213'
+ referencedEnd = 'a38577D79002C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== InformationVisualization.RenderedObject.modelElement [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A5E3A360300'
+ name = 'modelElement' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5C7301CC'
+ referencedEnd = 'a38570F9B01DD' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== InformationVisualization.RenderedObject.renderedObjectSet [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A5E3C7D0378'
+ name = 'renderedObjectSet' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3857880001B9'
+ referencedEnd = 'a3A5E3AAA0021' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== InformationVisualization.RenderedObjectSet [Class] ==================== -->
+ <Model:Class xmi.id = 'a3857880001B9'
+ name = 'RenderedObjectSet' annotation = 'RenderedObjectSet is a container of RenderedObjects and available Renderings.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5D19033E' >
+ <Model:Namespace.contents>
+ <!-- ==================== InformationVisualization.RenderedObjectSet.renderedObject [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A5E3BAD0182'
+ name = 'renderedObject' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a385703C20213'
+ referencedEnd = 'a3A5E3AA9032D' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== InformationVisualization.RenderedObjectSet.rendering [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A5E3C2C000A'
+ name = 'rendering' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a385700B8019A'
+ referencedEnd = 'a3A5E3AB90005' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== InformationVisualization.org.omg.mof.idl_substitute_name=CwmRenderedObjectSet [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1025'
+ name = 'org.omg.mof.idl_substitute_name=CwmRenderedObjectSet' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a3857880001B9' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CwmRenderedObjectSet</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== InformationVisualization.Rendering [Class] ==================== -->
+ <Model:Class xmi.id = 'a385700B8019A'
+ name = 'Rendering'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a32989F9700FE' >
+ <Model:ModelElement.annotation>Rendering is a specification of how an associated RenderedObject is to be "rendered" in some medium. This usually consists of a projection of an object of arbitrary dimensionality onto a 2-dimensional surface, but it may also include non-physical representations as well (such as audio).
+
+A Rendering is semantically equivalent to a Transformation, in that it transforms a source RenderedObject to some target "presented" object. An instance of Rendering is fully specified via its formula attribute, which contains an implementation-dependent expression that defines the transformation and tracks transformation lineage.
+
+Possible types of instances of Rendering:
+Screen, Paper, Voice, Web, HTML Document, XML/XSL, languages based on extensions to XML, SVG, Visual objects, responses to keying (keying interception plus rules), etc.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== InformationVisualization.Rendering.formula [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3857021E01F1'
+ name = 'formula' annotation = 'Implementation-dependent procedure for generating the Rendering (e.g., a usage of XSL to generate an HTML document). Tracks the transformation lineage of the Rendering.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a376A84310237' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== InformationVisualization.Rendering.action [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A5E475D00AA'
+ name = 'action' annotation = 'Specifies some implementation-dependent action associated with a Rendering.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== InformationVisualization.Rendering.fileName [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A5E475D00C8'
+ name = 'fileName' annotation = 'Specifies the name of a file persisting an instance of Rendering.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== InformationVisualization.Rendering.type [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A5E475D00E6'
+ name = 'type' annotation = 'Specifies some implementation-dependent type associated with a Rendering.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== InformationVisualization.Rendering.url [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3A5E475D014A'
+ name = 'url' annotation = 'Specifies a URL identifying some instance of Rendering.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== InformationVisualization.Rendering.renderedObject [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a386E7BDB012C'
+ name = 'renderedObject' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a385703C20213'
+ referencedEnd = 'a3857050B00B2' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== InformationVisualization.Rendering.defaultedRenderedObject [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A676A47020A'
+ name = 'defaultedRenderedObject' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a385703C20213'
+ referencedEnd = 'a38570BCA03DA' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== InformationVisualization.Rendering.renderedObjectSet [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A5E3CC700A3'
+ name = 'renderedObjectSet' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3857880001B9'
+ referencedEnd = 'a3A5E3AB9007D' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== InformationVisualization.XSLRendering [Class] ==================== -->
+ <Model:Class xmi.id = 'a38596F6E005F'
+ name = 'XSLRendering' annotation = 'XSLRendering represents a useful subclass of Rendering based on XSL (i.e., this subclass&apos; formula might contain a procedure that uses XSL to create an HTML document).'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a385700B8019A' />
+ <!-- ==================== InformationVisualization.CompositesReferenceComponents [Association] ==================== -->
+ <Model:Association xmi.id = 'a385704620304'
+ name = 'CompositesReferenceComponents' annotation = 'A RenderedObject may reference one or more "component" RenderedObjects, from which it is logically composed.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a385704710265'
+ name = 'composite' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a385703C20213' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a38570471026F'
+ name = 'component' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a385703C20213' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== InformationVisualization.RenderedObjectsReferenceRenderings [Association] ==================== -->
+ <Model:Association xmi.id = 'a3857050A0179'
+ name = 'RenderedObjectsReferenceRenderings' annotation = 'A RenderedObject may reference any number of Renderings. A Rendering may be referenced by any number of RenderedObjects.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3857050B00A8'
+ name = 'rendering' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a385700B8019A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3857050B00B2'
+ name = 'renderedObject' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a385703C20213' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== InformationVisualization.RenderedObjectsReferenceDefaultRendering [Association] ==================== -->
+ <Model:Association xmi.id = 'a38570BC90157'
+ name = 'RenderedObjectsReferenceDefaultRendering' annotation = 'A RenderedObject may reference a default Rendering.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a38570BCA03D0'
+ name = 'defaultRendering' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a385700B8019A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a38570BCA03DA'
+ name = 'defaultedRenderedObject' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a385703C20213' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== InformationVisualization.RenderedObjectsReferenceModelElement [Association] ==================== -->
+ <Model:Association xmi.id = 'a38570F9A0240'
+ name = 'RenderedObjectsReferenceModelElement' annotation = 'One or more RenderedObjects may reference an arbitrary ModelElement.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a38570F9B01D3'
+ name = 'renderedObject' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a385703C20213' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a38570F9B01DD'
+ name = 'modelElement' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327A5C7301CC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== InformationVisualization.NeighborsReferenceNeighbors [Association] ==================== -->
+ <Model:Association xmi.id = 'a38577D6B0375'
+ name = 'NeighborsReferenceNeighbors' annotation = 'A RenderedObject may reference one or more "neighboring" RenderedObjects.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a38577D790018'
+ name = 'neighbor' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a385703C20213' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a38577D79002C'
+ name = 'referencingNeighbor' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a385703C20213' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== InformationVisualization.RenderedObjectSetOwnsRenderedObjects [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A5E3AA90002'
+ name = 'RenderedObjectSetOwnsRenderedObjects' annotation = 'A RenderedObjectSet may own any number of RenderedObjects.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A5E3AA9032D'
+ name = 'renderedObject' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a385703C20213' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A5E3AAA0021'
+ name = 'renderedObjectSet' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3857880001B9' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== InformationVisualization.RenderedObjectSetOwnsRenderings [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A5E3AB8007C'
+ name = 'RenderedObjectSetOwnsRenderings' annotation = 'A RenderedObjectSet may own any number of Renderings.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A5E3AB90005'
+ name = 'rendering' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a385700B8019A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A5E3AB9007D'
+ name = 'renderedObjectSet' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3857880001B9' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== BusinessNomenclature [Package] ==================== -->
+<Model:Package xmi.id = 'a381DE0120379'
+ name = 'BusinessNomenclature'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>Business users of data warehouses need to have a good understanding of what information and tools exist in a data warehouse. They need to understand what the information means from a business perspective, how it is derived, from what data resources it is derived, and what analysis and reporting tools exist for manipulating and reporting the information. They may also need to subscribe to analysis and reporting tools, and have them run with results delivered to them on a regular basis.
+
+The BusinessNomenclature package contains classes and associations that can be used to represent business metadata. Easy access to this business metadata enables business users to exploit the value of the information in a data warehouse. It can also aid technical users in certain tasks. An example is the use of common business terms and concepts for discussing information requirements with business users. Another example is accessing business intelligence tools for analyzing the impact of warehouse design changes.
+
+The scope of the BusinessNomenclature package is restricted to the domain of data warehousing and business intelligence.
+
+This section provides a description of the main features of the BusinessNomenclature package.
+
+The BusinessNomenclature package provides two main constructs to represent business terms and concepts and related semantics:
+
+ Taxonomy is a collection of concepts that provide the context for the meaning of a particular term.
+ Glossary is a collection of terms and various related forms of the term.
+
+A taxonomy is a collection of concepts. Concepts represent semantic information and relationships. Concepts are identified by terms, which in turn are manifested by a word or phrase. More than one term may describe the same concept and a given term may describe more than one concept.
+A glossary is a collection of terms that are related through explicit or implicit relationships. Terms may be preferred (the term best representing its concept) and thus represent the vocabulary of a business domain or user. Terms may be synonyms and point at the preferred term. A preferred term and its synonyms represent the fact that several terms describe the same concept although with different shades of meaning.
+
+Terms may be arranged into a hierarchy of more generic and more specific elements. This relationship allows substituting a narrower term, such as "USA", for a wider term, such as "country".
+
+The BusinessNomenclature package depends on the following packages:
+
+ omg.org::CWM::ObjectModel::Core
+
+The metamodel diagram for the BusinessNomenclature package is split into two parts. The first diagram shows the BusinessNomenclature classes and associations, while the second shows the inheritance hierarchy.
+
+OCL Representation of Business Nomenclature Constraints
+[C-1] A Concept may not relate to itself.
+context Concept
+inv: self.relatedConcept-&gt;forAll ( p | p &lt;&gt; self )
+
+[C-2] The parent of a Glossary must be a Glossary.
+context Glossary
+inv: self.parent.oclIsKindOf( Glossary )
+
+[C-3] The child of a Glossary must be a Glossary.
+context Glossary
+inv: self.child-&gt;forAll( p | p.oclIsKindOf( Glossary ) )
+
+[C-4] The parent of a Taxonomy must be a Taxonomy.
+context Taxonomy
+inv: self.parent.oclIsKindOf( Taxonomy )
+
+[C-5] The child of a Taxonomy must be a Taxonomy.
+context Taxonomy
+inv: self.child-&gt;forAll( p | p.oclIsKindOf( Taxonomy ) )
+
+[C-6] A Term may not relate to itself.
+context Term
+inv: self.relatedTerm-&gt;forAll ( p | p &lt;&gt; self )
+
+[C-7] A VocabularyElement may not relate to itself.
+context Vocabulary
+inv: self.relatedElement-&gt;forAll ( p | p &lt;&gt; self )
+
+[C-8] The RelatedConcepts association is derived from the RelatedVocabularyElements association. All ends of the RelatedConcepts association must be Concepts.
+context RelatedConcepts
+inv: RelatedVocabularyElements.allInstances.select( element.oclIsKindOf( Concept )
+and relatedElement.oclIsKindOf( Concept ) )
+
+[C-9] The RelatedTerms association is derived from the RelatedVocabularyElements association. All ends of the RelatedTerms association must beTerms.
+context RelatedTerms
+inv: RelatedVocabularyElements.allInstances.select( element.oclIsKindOf( Term ) and
+relatedElement.oclIsKindOf( Term ) )</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== BusinessNomenclature.org.omg.xmi.namespace=CWMBUS [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1026'
+ name = 'org.omg.xmi.namespace=CWMBUS' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a381DE0120379' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWMBUS</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== BusinessNomenclature.org.omg.mof.idl_prefix=org.omg.cwm.analysis [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1027'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.analysis' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a381DE0120379' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.analysis</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== BusinessNomenclature.org.omg.mof.idl_substitute_name=BusinessNomenclatureModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1028'
+ name = 'org.omg.mof.idl_substitute_name=BusinessNomenclatureModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a381DE0120379' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>BusinessNomenclatureModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== BusinessNomenclature.com.urep.jcr.java_prefix=org.omg.java.cwm.analysis [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1029'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.analysis' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a381DE0120379' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.analysis</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.1030'
+ name = 'Core' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6600C5031F' />
+ <!-- ==================== BusinessNomenclature.VocabularyElement [Class] ==================== -->
+ <Model:Class xmi.id = 'a381DEBC70094'
+ name = 'VocabularyElement' annotation = 'This represents a common superclass for Concepts and Terms.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:Namespace.contents>
+ <!-- ==================== BusinessNomenclature.VocabularyElement.definition [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3872DF6203B7'
+ name = 'definition' annotation = 'Provides the definition of the VocabularyElement.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== BusinessNomenclature.VocabularyElement.example [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a381F7FC702D3'
+ name = 'example' annotation = 'Provides examples of the VocabularyElement.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== BusinessNomenclature.VocabularyElement.usage [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a381F7FE20065'
+ name = 'usage' annotation = 'Identifies typical usage of the VocabularyElement.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== BusinessNomenclature.VocabularyElement.modelElement [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38739987017F'
+ name = 'modelElement' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5C7301CC'
+ referencedEnd = 'a385A8A640279' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== BusinessNomenclature.Nomenclature [Class] ==================== -->
+ <Model:Class xmi.id = 'a381DED5D031C'
+ name = 'Nomenclature' annotation = 'This represents a common superclass for Taxonomy and Glossary.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5D19033E' />
+ <!-- ==================== BusinessNomenclature.Taxonomy [Class] ==================== -->
+ <Model:Class xmi.id = 'a381DED100072'
+ name = 'Taxonomy' annotation = 'This represents a collection of Concepts that form an ontology.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a381DED5D031C' >
+ <Model:Namespace.contents>
+ <!-- ==================== BusinessNomenclature.Taxonomy.domain [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3872E25D02DB'
+ name = 'domain' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32B69F3A0118'
+ referencedEnd = 'a3A2C18630036' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== BusinessNomenclature.Taxonomy.concept [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3872E29402B2'
+ name = 'concept' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5C7301CC'
+ referencedEnd = 'a3A2C186203A1' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== BusinessNomenclature.Taxonomy.subtaxonomy [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38739E62026E'
+ name = 'subtaxonomy' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a381DED5D031C'
+ referencedEnd = 'a38739C70024A' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== BusinessNomenclature.Glossary [Class] ==================== -->
+ <Model:Class xmi.id = 'a381DED3F028C'
+ name = 'Glossary' annotation = 'This represents a collection of Terms.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a381DED5D031C' >
+ <Model:Namespace.contents>
+ <!-- ==================== BusinessNomenclature.Glossary.language [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a385A91470056'
+ name = 'language' annotation = 'Identifies the language that the Glossary is represented in.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== BusinessNomenclature.Glossary.taxonomy [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3872E3B601F4'
+ name = 'taxonomy' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a381DED100072'
+ referencedEnd = 'a381F260702A3' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== BusinessNomenclature.Glossary.term [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3872E3E601FD'
+ name = 'term' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5C7301CC'
+ referencedEnd = 'a3A2C186203A1' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== BusinessNomenclature.Glossary.subglossary [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38739EB00003'
+ name = 'subglossary' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a381DED5D031C'
+ referencedEnd = 'a38739C70024A' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== BusinessNomenclature.BusinessDomain [Class] ==================== -->
+ <Model:Class xmi.id = 'a385A82F8008F'
+ name = 'BusinessDomain' annotation = 'This represents a business domain.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5D19033E' >
+ <Model:Namespace.contents>
+ <!-- ==================== BusinessNomenclature.BusinessDomain.taxonomy [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3872E13A02D3'
+ name = 'taxonomy' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5C7301CC'
+ referencedEnd = 'a3A2C186203A1' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== BusinessNomenclature.Concept [Class] ==================== -->
+ <Model:Class xmi.id = 'a381DEB1E0376'
+ name = 'Concept'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a381DEBC70094' >
+ <Model:ModelElement.annotation>This represents a business idea or notion.
+
+Concepts are represented by Terms. Users use Terms that are familiar to them in their business environment to refer to Concepts.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== BusinessNomenclature.Concept.taxonomy [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3872E33F02CC'
+ name = 'taxonomy' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32B69F3A0118'
+ referencedEnd = 'a3A2C18630036' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== BusinessNomenclature.Concept.relatedConcept [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3872E5C2016B'
+ name = 'relatedConcept' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a381DEB1E0376'
+ referencedEnd = 'a3823197B03CF' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== BusinessNomenclature.Term [Class] ==================== -->
+ <Model:Class xmi.id = 'a381DEB57026A'
+ name = 'Term'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a381DEBC70094' >
+ <Model:ModelElement.annotation>This represents words or phrases used by business users to refer to Concepts.
+
+A Term has a definition in a specific context. The context is provided by the referenced Concept that describes the underlying semantics.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== BusinessNomenclature.Term.glossary [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3872E5020273'
+ name = 'glossary' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a32B69F3A0118'
+ referencedEnd = 'a3A2C18630036' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== BusinessNomenclature.Term.concept [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3872E5310127'
+ name = 'concept' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a381DEB1E0376'
+ referencedEnd = 'a381F262B0359' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== BusinessNomenclature.Term.relatedTerm [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3872E61D0220'
+ name = 'relatedTerm' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a381DEB57026A'
+ referencedEnd = 'a3823198E039A' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== BusinessNomenclature.Term.preferredTerm [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3872E65B0247'
+ name = 'preferredTerm' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a381DEB57026A'
+ referencedEnd = 'a3872DB8B01C6' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== BusinessNomenclature.Term.narrowerTerm [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3872E69600DA'
+ name = 'narrowerTerm' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a381DEB57026A'
+ referencedEnd = 'a3872DC7A014B' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== BusinessNomenclature.GlossaryToTaxonomy [Association] ==================== -->
+ <Model:Association xmi.id = 'a381F260402BD'
+ name = 'GlossaryToTaxonomy' annotation = 'This association relates a Glossary to its Taxonomies.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a381F2607028F'
+ name = 'glossary' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a381DED3F028C' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a381F260702A3'
+ name = 'taxonomy' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a381DED100072' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== BusinessNomenclature.TermToConcept [Association] ==================== -->
+ <Model:Association xmi.id = 'a381F262A01D1'
+ name = 'TermToConcept' annotation = 'This association relates a Term to its Concepts.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a381F262B0359'
+ name = 'concept' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a381DEB1E0376' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a381F262B036E'
+ name = 'term' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a381DEB57026A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== BusinessNomenclature.RelatedVocabularyElements [Association] ==================== -->
+ <Model:Association xmi.id = 'a3823161402C4'
+ name = 'RelatedVocabularyElements' annotation = 'This association relates a VocabularyElement to its related VocabularyElements.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a382316240335'
+ name = 'relatedElement' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a381DEBC70094' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a382316240349'
+ name = 'element' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a381DEBC70094' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== BusinessNomenclature.RelatedConcepts [Association] ==================== -->
+ <Model:Association xmi.id = 'a3823197402A3'
+ name = 'RelatedConcepts'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:ModelElement.annotation>This association relates a Concept to its related Concepts.
+
+This association is derived from the RelatedVocabularyElements association. All ends of the association must be Concepts. [C-8]</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3823197B03CF'
+ name = 'relatedConcept' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a381DEB1E0376' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3823197B03E3'
+ name = 'concept' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a381DEB1E0376' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== BusinessNomenclature.RelatedTerms [Association] ==================== -->
+ <Model:Association xmi.id = 'a3823198200CC'
+ name = 'RelatedTerms'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:ModelElement.annotation>This association relates a Term to its related Terms.
+
+This association is derived from the RelatedVocabularyElements association. All ends of the association must be Terms.[C-9]</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3823198E039A'
+ name = 'relatedTerm' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a381DEB57026A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3823198E03AE'
+ name = 'term' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a381DEB57026A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== BusinessNomenclature.VocabularyElementToModelElement [Association] ==================== -->
+ <Model:Association xmi.id = 'a385A8A620208'
+ name = 'VocabularyElementToModelElement' annotation = 'This association relates a VocabularyElement to the ModelElements for which the VocabularyElement provides business meaning.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a385A8A640279'
+ name = 'modelElement' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327A5C7301CC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a385A8A6602E0'
+ name = 'vocabularyElement' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a381DEBC70094' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== BusinessNomenclature.SynonymToPreferredTerm [Association] ==================== -->
+ <Model:Association xmi.id = 'a3872DB7D01C6'
+ name = 'SynonymToPreferredTerm' annotation = 'This association relates a synonym to its preferred term.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3872DB8B01C6'
+ name = 'preferredTerm' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a381DEB57026A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3872DB8B01EE'
+ name = 'synonym' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a381DEB57026A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== BusinessNomenclature.WiderToNarrowerTerm [Association] ==================== -->
+ <Model:Association xmi.id = 'a3872DC6F00B9'
+ name = 'WiderToNarrowerTerm' annotation = 'This association relates a wider term to its narrower terms.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3872DC7A0123'
+ name = 'widerTerm' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a381DEB57026A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3872DC7A014B'
+ name = 'narrowerTerm' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a381DEB57026A' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== BusinessNomenclature.NomenclatureHierarchy [Association] ==================== -->
+ <Model:Association xmi.id = 'a38739C68011C'
+ name = 'NomenclatureHierarchy' annotation = 'This aggregation relates a parent Nomenclature to its child Nomenclatures.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a38739C700236'
+ name = 'parent' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a381DED5D031C' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a38739C70024A'
+ name = 'child' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a381DED5D031C' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== WarehouseProcess [Package] ==================== -->
+<Model:Package xmi.id = 'a357DC1E5015B'
+ name = 'WarehouseProcess'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>The Warehouse Process package documents the process flows used to execute transformations. These process flows may be documented at the level of a complete TransformationActivity or its individual TransformationSteps. A WarehouseProcess object associates a transformation with a set of events which will be used to trigger the execution of the transformation.
+
+The Warehouse Process package depends on the following packages:
+
+ org.omg::CWM::ObjectModel::Core
+ org.omg::CWM::ObjectModel::Behavioral
+ org.omg::CWM::Analysis::Transformation
+
+A WarehouseProcess object represents the processing of a transformation. It is instantiated as one of its subtypes WarehouseActivity or WarehouseStep, depending on whether it represents the processing of a TransformationActivity or a Transformation Step.
+
+A WarehouseProcess may be associated with one or more WarehouseEvents, each identifying events that cause the processing to be initiated. It may also be associated with one or more internal events that will be triggered when processing terminates. A ProcessPackage may be used to group together related WarehouseActivities.
+
+WarehouseEvents are divided into three categories: scheduled, external and internal. Scheduled events can either be defined as a point in time (each Wednesday at 2 pm) or be defined by intervals (every five minutes). A point in time event can be defined as a custom calendar which contains a set of calendar dates. This allows a series of dates to be reused across several WarehouseProcesses.
+
+External events are triggered by something happening outside the data warehouse, for example by a batch process which is not described as a WarehouseProcess. Internal events are triggered by the termination of a WarehouseProcess. They can be either retry events or cascade events. Retry events normally trigger a rerun of the same WarehouseProcess, whereas cascade events normally trigger a different WarehouseProcess. An internal event may define a condition that determines whether or not the event is triggered. This condition can use details of the execution of the triggering WarehouseProcess recorded in the relevant ActivityExecution and StepExecution objects.
+
+OCL Representation of Warehouse Process Constraints
+
+[C-1] month must be specified when recurringType is everyYear.
+context RecurringPointInTimeEvent inv:
+self.recurringType=everyYear implies self.month-&gt;notEmpty
+
+[C-2] month must be between 1 and 12 (inclusive) when specified.
+context RecurringPointInTimeEvent inv:
+self.month-&gt;notEmpty implies 1 &lt;= self.month &lt;= 12
+
+[C-3] dayOfMonth must be specified when recurringType is everyYear or
+everyMonth.
+context RecurringPointInTimeEvent inv:
+self.recurringType=everyYear or self.recurringType=everyMonth
+implies self.dayOfMonth-&gt;notEmpty
+
+[C-4] dayOfMonth must be between 1 and 31 (inclusive) when specified.
+context RecurringPointInTimeEvent inv:
+self.dayOfMonth-&gt;notEmpty implies 1 &lt;= self.dayOfMonth &lt;= 31
+
+[C-5] dayOfWeek must be specified when recurringType is everyWeek.
+context RecurringPointInTimeEvent inv:
+self.recurringType=everyWeek implies self.dayOfWeek-&gt;notEmpty
+
+[C-6] hour must be specified when recurringType is everyYear or everyMonth or
+everyWeek or everyDay.
+context RecurringPointInTimeEvent inv:
+self.recurringType=everyYear or self.recurringType=everyMonth or
+self.recurringType=everyWeek or self.recurringType=everyDay
+implies self.hour-&gt;notEmpty
+
+[C-7] hour must be between 0 and 23 (inclusive) when specified.
+context RecurringPointInTimeEvent inv:
+self.hour-&gt;notEmpty implies 0 &lt;= hour &lt;= 23
+
+[C-8] minute must be specified when recurringType is not everyMinute.
+context RecurringPointInTimeEvent inv:
+self.recurringType&lt;&gt;everyMinute implies self.minute-&gt;notEmpty
+
+[C-9] minute must be between 0 and 59 (inclusive) when specified.
+context RecurringPointInTimeEvent inv:
+self.minute-&gt;notEmpty implies 0 &lt;= self.minute &lt;= 59
+
+[C-10] second must be between 0 and 59 (inclusive).
+context RecurringPointInTimeEvent inv:
+0 &lt;= self.second &lt;= 59</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== WarehouseProcess.org.omg.xmi.namespace=CWMWHP [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1031'
+ name = 'org.omg.xmi.namespace=CWMWHP' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a357DC1E5015B' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWMWHP</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== WarehouseProcess.org.omg.mof.idl_prefix=org.omg.cwm.management [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1032'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.management' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a357DC1E5015B' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.management</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== WarehouseProcess.org.omg.mof.idl_substitute_name=WarehouseProcessModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1033'
+ name = 'org.omg.mof.idl_substitute_name=WarehouseProcessModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a357DC1E5015B' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>WarehouseProcessModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== WarehouseProcess.com.urep.jcr.java_prefix=org.omg.java.cwm.management [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1034'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.management' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a357DC1E5015B' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.management</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.1035'
+ name = 'Core' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6600C5031F' />
+ <Model:Import xmi.id = 'G.1036'
+ name = 'Behavioral' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6342A4000B' />
+ <Model:Import xmi.id = 'G.1037'
+ name = 'Transformation' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a35E1B0B40042' />
+ <!-- ==================== WarehouseProcess.DataType [Package] ==================== -->
+ <Model:Package xmi.id = 'a37017CC20073'
+ name = 'DataType' annotation = ''
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:Namespace.contents>
+ <!-- ==================== WarehouseProcess.DataType.RecurringType [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a3701832502BF'
+ name = 'RecurringType' annotation = 'everyYear, everyMonth, everyWeek, everyDay, everyHour, everyMinute'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'RecurringType'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'everyYear'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'everyMonth'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'everyWeek'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'everyDay'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'everyHour'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'everyMinute'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== WarehouseProcess.DataType.DayOfWeek [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a37018504023B'
+ name = 'DayOfWeek' annotation = 'Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday, workingDay, nonworkingDay'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'DayOfWeek'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'monday'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'tuesday'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'wednesday'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'thursday'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'friday'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'saturday'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'sunday'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'workingDay'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'nonworkingDay'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ <!-- ==================== WarehouseProcess.DataType.WaitRuleType [DataType] ==================== -->
+ <Model:DataType xmi.id = 'a370187A50033'
+ name = 'WaitRuleType' annotation = 'waitForAll, waitForAny'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:DataType.typeCode>
+ <XMI.CorbaTypeCode>
+ <XMI.CorbaTcEnum xmi.tcName = 'WaitRuleType'>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'waitForAll'/>
+ <XMI.CorbaTcEnumLabel xmi.tcName = 'waitForAny'/>
+ </XMI.CorbaTcEnum>
+ </XMI.CorbaTypeCode>
+ </Model:DataType.typeCode>
+ </Model:DataType>
+ </Model:Namespace.contents>
+ </Model:Package>
+ <!-- ==================== WarehouseProcess.Events [Package] ==================== -->
+ <Model:Package xmi.id = 'a35E1B0C300D0'
+ name = 'Events' annotation = ''
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:Namespace.contents>
+ <!-- ==================== WarehouseProcess.Events.WarehouseEvent [Class] ==================== -->
+ <Model:Class xmi.id = 'a37017E8501B5'
+ name = 'WarehouseEvent'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3288E51203DE' >
+ <Model:ModelElement.annotation>A virtual class to refer to any Event.
+
+A WarehouseEvent (or its derivations) represents what triggers the running of a WarehouseProcess. An event can be initiated by a clock, by an external trigger, or by an internal trigger (the conclusion of some WarehouseProcess).</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== WarehouseProcess.Events.WarehouseEvent.warehouseProcess [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3872729603A4'
+ name = 'warehouseProcess' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a356E122A0336'
+ referencedEnd = 'a3701811402BB' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== WarehouseProcess.Events.ScheduleEvent [Class] ==================== -->
+ <Model:Class xmi.id = 'a37017E8F0386'
+ name = 'ScheduleEvent' annotation = 'A ScheduleEvent is an abstract class which covers all the clock based events.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a37017E8501B5' />
+ <!-- ==================== WarehouseProcess.Events.PointInTimeEvent [Class] ==================== -->
+ <Model:Class xmi.id = 'a37017E9B0012'
+ name = 'PointInTimeEvent'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a37017E8F0386' >
+ <Model:ModelElement.annotation>A PointInTime event is triggered at a fixed time, independently of any external context.
+
+The triggering time can be either defined functionally (as in the RecurringPointInTimeEvent extension of this class), or by an explicit list of times (CustomCalendarEvent).</Model:ModelElement.annotation>
+ </Model:Class>
+ <!-- ==================== WarehouseProcess.Events.CustomCalendarEvent [Class] ==================== -->
+ <Model:Class xmi.id = 'a37017EB3019D'
+ name = 'CustomCalendarEvent' annotation = 'This event is controlled by a list of dates and times. To make the list easily shareable between multiple WarehouseProcesses the calendar itself is in a separate class.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a37017E9B0012' >
+ <Model:Namespace.contents>
+ <!-- ==================== WarehouseProcess.Events.CustomCalendarEvent.customCalendar [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a387272D3027F'
+ name = 'customCalendar' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a37017EE303B9'
+ referencedEnd = 'a370180FC00E0' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== WarehouseProcess.Events.CustomCalendar [Class] ==================== -->
+ <Model:Class xmi.id = 'a37017EE303B9'
+ name = 'CustomCalendar' annotation = 'A named list of dates and times. '
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5D19033E' >
+ <Model:Namespace.contents>
+ <!-- ==================== WarehouseProcess.Events.CustomCalendar.customCalendarEvent [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38727301023F'
+ name = 'customCalendarEvent' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a37017EB3019D'
+ referencedEnd = 'a370180FC00EA' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== WarehouseProcess.Events.CalendarDate [Class] ==================== -->
+ <Model:Class xmi.id = 'a37017EED006A'
+ name = 'CalendarDate' annotation = 'An entry in a CustomCalendar representing a specific date and time.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:Namespace.contents>
+ <!-- ==================== WarehouseProcess.Events.CalendarDate.specificDate [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a370186A902EE'
+ name = 'specificDate' annotation = 'The value of the date. '
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3A09E1C0001E' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== WarehouseProcess.Events.IntervalEvent [Class] ==================== -->
+ <Model:Class xmi.id = 'a37017F000053'
+ name = 'IntervalEvent'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a37017E8F0386' >
+ <Model:ModelElement.annotation>An IntervalEvent controls a continuous run of a WarehouseProcess. The Warehouse Process will run, then wait for the duration specified in the event, then run again.
+
+An IntervalEvent is not affected by the result of the WarehouseProcess.
+
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== WarehouseProcess.Events.IntervalEvent.duration [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3701873601C4'
+ name = 'duration'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a384FE9DE02A2' >
+ <Model:ModelElement.annotation>Indicates the length of time (in seconds) to wait after a run of the WarehouseProcess before triggering the next one.
+</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== WarehouseProcess.Events.ExternalEvent [Class] ==================== -->
+ <Model:Class xmi.id = 'a37017F090132'
+ name = 'ExternalEvent'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a37017E8501B5' >
+ <Model:ModelElement.annotation>An ExternalEvent allows the description of the triggering of a WarehouseProcess by a task which is not described in the model. This is merely a place holder. The actual behavior and the connection with the external trigger is left to the implementation of
+the scheduler.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== WarehouseProcess.Events.ExternalEvent.description [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37018757032A'
+ name = 'description' annotation = 'A free text description of where the external triggering signal comes from.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== WarehouseProcess.Events.InternalEvent [Class] ==================== -->
+ <Model:Class xmi.id = 'a37017F12006D'
+ name = 'InternalEvent'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a37017E8501B5' >
+ <Model:ModelElement.annotation>An event which may be triggered, depending on whether or not a condition is satisfied, by the conclusion of one or more WarehouseProcess runs.
+
+There are two types of InternalEvents, depending whether the event triggers a series of different WarehouseProcesses, or whether the event triggers the same WarehouseProcess in an attempt to retry a failed run.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== WarehouseProcess.Events.InternalEvent.condition [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3701877903A1'
+ name = 'condition'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33CFA9DA01D6' >
+ <Model:ModelElement.annotation>Indicates what condition the triggering WarehouseProcess run must meet to be considered (success, failure, warnings, etc.).
+
+How the condition is expressed, and how the result of a Transform is generated is left to the implementation of the scheduler and the transformation, respectively.</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== WarehouseProcess.Events.InternalEvent.triggeringWP [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3872735100E6'
+ name = 'triggeringWP' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a356E122A0336'
+ referencedEnd = 'a3701811E00FD' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== WarehouseProcess.Events.CascadeEvent [Class] ==================== -->
+ <Model:Class xmi.id = 'a37017F230343'
+ name = 'CascadeEvent' annotation = 'A CascadeEvent indicates that completion of one or more triggering WarehouseProcesses triggers another WarehouseProcess.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a37017F12006D' >
+ <Model:Namespace.contents>
+ <!-- ==================== WarehouseProcess.Events.CascadeEvent.waitRule [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a370187CE0119'
+ name = 'waitRule' annotation = 'Indicates if the event should be triggered as soon as any of the triggering WarehouseProcesses has completed that satisfies the condition (inherited from InternalEvent) or only when all the triggering WarehouseProcesses have completed (provided the condition is satisfied).'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a370187A50033' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== WarehouseProcess.Events.RetryEvent [Class] ==================== -->
+ <Model:Class xmi.id = 'a37017F2E0262'
+ name = 'RetryEvent'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a37017F12006D' >
+ <Model:ModelElement.annotation>Indicates that a WarehouseProcess should be retried upon failure. This type of event is used for example when a WarehouseProcess relies on sources with uncertain availability (connection or uptime).
+
+In general, the triggering WarehouseProcess and the triggered WarehouseProcess are the same, and only one WarehouseProcess is involved. But this is not an imposed limitation. It is left to the schedulers to decide on the implementation behavior for complex cases.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== WarehouseProcess.Events.RetryEvent.waitDuration [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a370187F202DD'
+ name = 'waitDuration' annotation = 'Indicates the length of time (in seconds) to wait before retrying the triggered WarehouseProcess.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a384FE9DE02A2' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== WarehouseProcess.Events.RetryEvent.maxCount [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3701881A010E'
+ name = 'maxCount' annotation = 'Indicates how many times the triggered WarehouseProcess should be retried before being declared failed.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== WarehouseProcess.Events.RecurringPointInTimeEvent [Class] ==================== -->
+ <Model:Class xmi.id = 'a3701844602CE'
+ name = 'RecurringPointInTimeEvent' annotation = 'This event triggers a WarehouseProcess on a regular basis such as a specific date or time (for example, the Wednesday of every other week, at 2:30 pm).'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a37017E9B0012' >
+ <Model:Namespace.contents>
+ <!-- ==================== WarehouseProcess.Events.RecurringPointInTimeEvent.recurringType [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3701846D03BB'
+ name = 'recurringType' annotation = 'Indicates how often the event should be triggered (weekly, daily, etc.).'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3701832502BF' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== WarehouseProcess.Events.RecurringPointInTimeEvent.frequencyFactor [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3701849B0367'
+ name = 'frequencyFactor' annotation = 'Indicates the repetition of the event. For example, for a weekly recurringType, a value of 1 will mean that it is to be triggered every week, a value of 2 will mean that it is to be triggered every other week, etc.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== WarehouseProcess.Events.RecurringPointInTimeEvent.month [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a370184AC00C2'
+ name = 'month'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:ModelElement.annotation>Indicates which month of the year (from 1 to 12) an annual event is to be triggered.
+</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== WarehouseProcess.Events.RecurringPointInTimeEvent.dayOfMonth [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a370184BC004D'
+ name = 'dayOfMonth'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:ModelElement.annotation>Indicates which day of the month (from 1 to 31) a monthly or annual event is to be triggered. For a monthly event, if the day of the month is greater than the number of days in the month, it is assumed that the scheduler will run the WarehouseProcess on the last day of the month.
+</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== WarehouseProcess.Events.RecurringPointInTimeEvent.dayOfWeek [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a370184CA03D2'
+ name = 'dayOfWeek'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a37018504023B' >
+ <Model:ModelElement.annotation>Indicates which day of the week a weekly schedule is running.
+</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== WarehouseProcess.Events.RecurringPointInTimeEvent.hour [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3701853B036A'
+ name = 'hour'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:ModelElement.annotation>Indicates at what hour (from 0 to 23) an annual, monthly, weekly, or daily event is being triggered.
+</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== WarehouseProcess.Events.RecurringPointInTimeEvent.minute [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3701854D03DE'
+ name = 'minute' annotation = 'Indicates at what minute (from 0 to 59) an event is triggered. Applies to all events except the "everyMinute" ones.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== WarehouseProcess.Events.RecurringPointInTimeEvent.second [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3701855901F0'
+ name = 'second'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6FD7021C' >
+ <Model:ModelElement.annotation>Indicates at what second (from 0 to 59) an event must be run. Applies to all events.
+</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ </Model:Namespace.contents>
+ </Model:Package>
+ <!-- ==================== WarehouseProcess.WarehouseProcess [Class] ==================== -->
+ <Model:Class xmi.id = 'a356E122A0336'
+ name = 'WarehouseProcess'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'true' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>A WarehouseProcess represents the processing of a transformation. It is instantiated as one of its subtypes WarehouseActivity or WarehouseStep, depending on whether it represents the processing of a TransformationActivity or a Transformation Step.
+A WarehouseProcess may be associated with one or more WarehouseEvents, each identifying events that cause the processing to be initiated. It may also be associated with one or more internal events that will be triggered when processing terminates.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== WarehouseProcess.WarehouseProcess.staticDefinition [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3614097A0297'
+ name = 'staticDefinition'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:ModelElement.annotation>When a WarehouseProcess is a constant mapping (such as a Relational View of legacy data or a continuous data propagation process), this flag indicates that the mapping does not require to be run for the target to be up-to-date and in sync with
+the source.
+
+</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== WarehouseProcess.WarehouseProcess.isSequential [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a3703CA680311'
+ name = 'isSequential' annotation = 'This flag indicates if more than one instance of this WarehouseProcess may run at a time. If this flag is true, the scheduler should fail any attempt to trigger this WarehouseProcess while an instance is already in progress.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== WarehouseProcess.WarehouseProcess.warehouseEvent [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3872724B0216'
+ name = 'warehouseEvent' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a37017E8501B5'
+ referencedEnd = 'a3701811402D9' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== WarehouseProcess.WarehouseProcess.internalEvent [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3872722C03CA'
+ name = 'internalEvent' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a37017F12006D'
+ referencedEnd = 'a3701811E011B' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== WarehouseProcess.WarehouseStep [Class] ==================== -->
+ <Model:Class xmi.id = 'a3A5B007F0117'
+ name = 'WarehouseStep'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a356E122A0336' >
+ <Model:ModelElement.annotation>A WarehouseStep is a component of a WarehouseActivity. It represents the processing of an individual TransformationStep. It may be used to identify WarehouseEvents that trigger the processing of the TransformationStep and/or InternalEvents that are
+triggered by the conclusion of the processing of the TransformationStep.
+
+For example, a WarehouseStep may be used to document how a specific TransformationStep should be retried upon failure.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== WarehouseProcess.WarehouseStep.transformationStep [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A5B0CF90296'
+ name = 'transformationStep' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36D590F003B9'
+ referencedEnd = 'a3A5B01E90384' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== WarehouseProcess.WarehouseStep.warehouseActivity [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A5B03EB02BB'
+ name = 'warehouseActivity' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A5D80A6030D'
+ referencedEnd = 'a3A5B02BF01B5' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== WarehouseProcess.ProcessPackage [Class] ==================== -->
+ <Model:Class xmi.id = 'a3A5B0DC10027'
+ name = 'ProcessPackage' annotation = 'A group of related WarehouseActivities.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5D19033E' />
+ <!-- ==================== WarehouseProcess.WarehouseActivity [Class] ==================== -->
+ <Model:Class xmi.id = 'a3A5D80A6030D'
+ name = 'WarehouseActivity'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a356E122A0336' >
+ <Model:ModelElement.annotation>A WarehouseActivity is a subtype of WarehouseProcess that represents the processing of a TransformationActivity. It may identify WarehouseEvents that trigger the processing of the TransformationActivity and InternalEvents that are triggered by the
+conclusion of this processing. It may contain a set of WarehouseSteps that define in more detail the processing of the individual TransformationSteps of the TransformationActivity.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== WarehouseProcess.WarehouseActivity.transformationActivity [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a387271E2028D'
+ name = 'transformationActivity' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36E070680112'
+ referencedEnd = 'a3A5D81380355' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== WarehouseProcess.WarehouseActivity.warehouseStep [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3A5B126E0263'
+ name = 'warehouseStep' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A5B007F0117'
+ referencedEnd = 'a3A5B02BF01DE' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== WarehouseProcess.EventUsesCustomCalendar [Association] ==================== -->
+ <Model:Association xmi.id = 'a370180FB0070'
+ name = 'EventUsesCustomCalendar' annotation = 'Indicates which custom calendar is used for this schedule'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a370180FC00E0'
+ name = 'customCalendar' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a37017EE303B9' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a370180FC00EA'
+ name = 'customCalendarEvent' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a37017EB3019D' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== WarehouseProcess.Event [Association] ==================== -->
+ <Model:Association xmi.id = 'a3701811303B4'
+ name = 'Event' annotation = 'Associates a WarehouseProcess with a set of events of various types, which will be used to trigger the execution of the WarehouseProcess and its associated transformations.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3701811402BB'
+ name = 'warehouseProcess' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a356E122A0336' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3701811402D9'
+ name = 'warehouseEvent' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a37017E8501B5' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== WarehouseProcess.TriggeringProcess [Association] ==================== -->
+ <Model:Association xmi.id = 'a3701811B03D3'
+ name = 'TriggeringProcess' annotation = 'Associates an internal event with the WarehouseProcess that triggers it when processing of that WarehouseProcess terminates.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3701811E00FD'
+ name = 'triggeringWP' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a356E122A0336' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3701811E011B'
+ name = 'internalEvent' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a37017F12006D' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== WarehouseProcess.WarehouseStepRunsTransformationStep [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A5B01E80333'
+ name = 'WarehouseStepRunsTransformationStep' annotation = 'Identifies a TransformationStep that is run by a WarehouseStep.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A5B01E90384'
+ name = 'transformationStep' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a36D590F003B9' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A5B01EA0001'
+ name = 'warehouseStep' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A5B007F0117' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== WarehouseProcess.WarehouseActivityStep [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A5B02BE01C8'
+ name = 'WarehouseActivityStep' annotation = 'Associates a WarehouseActivity with its constituent WarehouseSteps.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A5B02BF01B5'
+ name = 'warehouseActivity' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a3A5D80A6030D' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A5B02BF01DE'
+ name = 'warehouseStep' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A5B007F0117' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== WarehouseProcess.WarehouseActivityRunsTransformationActivity [Association] ==================== -->
+ <Model:Association xmi.id = 'a3A5D81380353'
+ name = 'WarehouseActivityRunsTransformationActivity' annotation = 'Indicates which TransformationActivity is run by the WarehouseActivity.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a3A5D81380354'
+ name = 'warehouseActivity' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A5D80A6030D' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a3A5D81380355'
+ name = 'transformationActivity' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a36E070680112' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== WarehouseOperation [Package] ==================== -->
+<Model:Package xmi.id = 'a37419FF7000C'
+ name = 'WarehouseOperation'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>The Warehouse Operation package contains classes recording the day-to-day operation of the warehouse processes.
+
+The package covers three separate areas:
+
+ Transformation Executions
+ Measurements
+ Change Requests
+
+Details of the most recent executions of transformations can be recorded, identifying when they ran and whether they completed successfully. This can be used to determine how complete and up-to-date specific information in the data warehouse is.
+
+An ActivityExecution represents an execution of a whole TransformationActivity, and a StepExecution object represents an execution of an individual TransformationStep. If a TransformationStep involves the use of an Operation , an associated StepExecution may reference a CallAction that records the actual arguments passed to the Operation. These classes allow the lineage of data in a data warehouse to be preserved, by recording when and how it was derived, and where it came from.
+
+Measurement objects allow metrics to be held for any ModelElement. For example, they may be used to hold actual, estimated or planned values for the size of a table.
+
+ChangeRequests allow details of proposed changes affecting any ModelElement to be recorded. They may also be used to keep a historical record of changes implemented or rejected.
+
+The Warehouse Operation package depends on the following packages:
+
+ org.omg::CWM::ObjectModel::Core
+ org.omg::CWM::ObjectModel::Behavioral
+ org.omg::CWM::Analysis::Transformation
+
+Separate model diagrams are shown below for each of the three main areas supported by the package.
+
+OCL Representation of Warehouse Operation Constraints
+
+[C-1] A ChangeRequest instance must not apply to itself.
+context ChangeRequest
+inv: self.modelElement -&gt; forAll (element | element &lt;&gt; self)
+
+[C-2] A completionDate may only be provided for a completed ChangeRequest.
+context ChangeRequest
+inv: self.completionDate-&gt;notEmpty implies self.completed
+
+[C-3] A Measurement instance must not apply to itself.
+context Measurement
+inv: self.modelElement &lt;&gt; self
+
+[C-4] If the TransformationExecution is not inProgress, the successful, status and endDate attributes must be present, and endDate must not be earlier than startDate.
+context TransformationExecution
+inv: self.inProgress=false implies (self.successful-&gt;notEmpty and
+self.status-&gt;notEmpty and self.endDate-&gt;notEmpty and
+self.endDate &gt;= self.startDate)
+</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== WarehouseOperation.org.omg.xmi.namespace=CWMWHO [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1038'
+ name = 'org.omg.xmi.namespace=CWMWHO' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a37419FF7000C' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWMWHO</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== WarehouseOperation.org.omg.mof.idl_prefix=org.omg.cwm.management [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1039'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm.management' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a37419FF7000C' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm.management</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== WarehouseOperation.org.omg.mof.idl_substitute_name=WarehouseOperationModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1040'
+ name = 'org.omg.mof.idl_substitute_name=WarehouseOperationModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a37419FF7000C' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>WarehouseOperationModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== WarehouseOperation.com.urep.jcr.java_prefix=org.omg.java.cwm.management [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1041'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm.management' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a37419FF7000C' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm.management</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.1042'
+ name = 'Core' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6600C5031F' />
+ <Model:Import xmi.id = 'G.1043'
+ name = 'Behavioral' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6342A4000B' />
+ <Model:Import xmi.id = 'G.1044'
+ name = 'Transformation' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a35E1B0B40042' />
+ <!-- ==================== WarehouseOperation.Measurement [Class] ==================== -->
+ <Model:Class xmi.id = 'a37935233038F'
+ name = 'Measurement'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:ModelElement.annotation>A Measurement object indicates the value of some attribute of an object. It can be the number of rows in a table, the number of pages in an index, the number of different values in a column, etc.
+
+The flexibility of this class allows for product specific extensions, without changing the model. </Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== WarehouseOperation.Measurement.value [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a37935291036C'
+ name = 'value' annotation = 'The value of this Measurement.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a384FE9DE02A2' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== WarehouseOperation.Measurement.unit [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a379352F502F7'
+ name = 'unit' annotation = 'The unit of measurement.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== WarehouseOperation.Measurement.type [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a379352F80021'
+ name = 'type'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:ModelElement.annotation>Identifies how the value was computed.
+
+The following values have specific meanings:
+
+ measure (measured value)
+ estimate (estimated value)
+ plan (planned value)
+ minimum (minimum value)
+ maximum (maximum value)
+ average (average value)</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== WarehouseOperation.Measurement.creationDate [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a379352F903E3'
+ name = 'creationDate' annotation = 'When the value has been computed (see also effectiveDate).'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3A09E1C0001E' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== WarehouseOperation.Measurement.effectiveDate [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a379352FC0076'
+ name = 'effectiveDate' annotation = 'When the value is effective. For measured values, effective and creation dates should be the same. For estimated actual values, the creation date may be later than the effective date. For plan values, the effective date is normally later than the creation date.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3A09E1C0001E' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== WarehouseOperation.Measurement.modelElement [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a387335390109'
+ name = 'modelElement' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5C7301CC'
+ referencedEnd = 'a37935A9F008C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== WarehouseOperation.org.omg.IDL Substitute Name=umlValue [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1045'
+ name = 'org.omg.IDL Substitute Name=umlValue' annotation = ''
+ tagId = 'org.omg.IDL Substitute Name'
+ elements = 'a37935291036C' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>umlValue</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== WarehouseOperation.ChangeRequest [Class] ==================== -->
+ <Model:Class xmi.id = 'a379DC1A90234'
+ name = 'ChangeRequest' annotation = 'This represents a request for change affecting one or more ModelElements. The change request may represent a proposed change or one that has been implemented or rejected.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:Namespace.contents>
+ <!-- ==================== WarehouseOperation.ChangeRequest.changeDescription [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a379DCDEF0214'
+ name = 'changeDescription' annotation = 'A description of the change.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== WarehouseOperation.ChangeRequest.changeReason [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a379DCE180140'
+ name = 'changeReason' annotation = 'The reason or justification for the ChangeRequest.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== WarehouseOperation.ChangeRequest.status [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a379DCDA801EA'
+ name = 'status' annotation = 'The status of the ChangeRequest. This would normally contain a string such as proposed, agreed, implemented or rejected.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD702401B8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== WarehouseOperation.ChangeRequest.completed [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a379DC9D9029C'
+ name = 'completed'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:ModelElement.annotation>Indicates that no further action is required for this change request, i.e. it has either
+been implemented or been rejected.</Model:ModelElement.annotation>
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== WarehouseOperation.ChangeRequest.requestDate [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a379DCEB10231'
+ name = 'requestDate' annotation = 'When the change request was raised.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3A09E1C0001E' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== WarehouseOperation.ChangeRequest.completionDate [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a379DCF020346'
+ name = 'completionDate' annotation = 'The date when all action on the change request was completed (i.e. when implementation was completed or it was rejected).'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3A09E1C0001E' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== WarehouseOperation.ChangeRequest.modelElement [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a3873345002DA'
+ name = 'modelElement' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a327A5C7301CC'
+ referencedEnd = 'a379DC2A001FD' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== WarehouseOperation.TransformationExecution [Class] ==================== -->
+ <Model:Class xmi.id = 'a3814873701EB'
+ name = 'TransformationExecution' annotation = 'A TransformationExecution is used to record details of a specific execution.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a327A5C7301CC' >
+ <Model:Namespace.contents>
+ <!-- ==================== WarehouseOperation.TransformationExecution.startDate [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36E468BD029B'
+ name = 'startDate' annotation = 'The date and time when the execution started.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3A09E1C0001E' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== WarehouseOperation.TransformationExecution.endDate [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36E468FC00D9'
+ name = 'endDate' annotation = 'The date and time when the execution ended.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a3A09E1C0001E' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== WarehouseOperation.TransformationExecution.inProgress [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a376A423902AF'
+ name = 'inProgress' annotation = 'A boolean indicating whether or not the execution is in progress.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== WarehouseOperation.TransformationExecution.successful [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a36E469560218'
+ name = 'successful' annotation = 'A boolean indicating whether or not the execution completed successfully.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33DD6F650276' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ <!-- ==================== WarehouseOperation.TransformationExecution.status [Attribute] ==================== -->
+ <Model:Attribute xmi.id = 'a376A43F101F4'
+ name = 'status' annotation = 'An expression that may be used to provide status details of the execution. For example it could provide comments for a successful execution, or details of errors for an unsuccessful execution.'
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ isDerived = 'false'
+ type = 'a33CFA00203A2' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Attribute>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== WarehouseOperation.ActivityExecution [Class] ==================== -->
+ <Model:Class xmi.id = 'a376A7BF10213'
+ name = 'ActivityExecution' annotation = 'An ActivityExecution is used to record details of a specific execution of a TransformationActivity.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3814873701EB' >
+ <Model:Namespace.contents>
+ <!-- ==================== WarehouseOperation.ActivityExecution.transformationActivity [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38732E330031'
+ name = 'transformationActivity' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36E070680112'
+ referencedEnd = 'a376A7F99033C' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== WarehouseOperation.ActivityExecution.stepExecution [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38732DAF00A9'
+ name = 'stepExecution' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36E070B201EB'
+ referencedEnd = 'a376A80390000' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== WarehouseOperation.StepExecution [Class] ==================== -->
+ <Model:Class xmi.id = 'a36E070B201EB'
+ name = 'StepExecution' annotation = 'A StepExecution is used to record details of a specific execution of a TransformationStep.'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis'
+ isSingleton = 'false'
+ supertypes = 'a3814873701EB' >
+ <Model:Namespace.contents>
+ <!-- ==================== WarehouseOperation.StepExecution.transformationStep [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38732EDD00C2'
+ name = 'transformationStep' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a36D590F003B9'
+ referencedEnd = 'a37494BEF03B9' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== WarehouseOperation.StepExecution.activityExecution [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a38732F410043'
+ name = 'activityExecution' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a376A7BF10213'
+ referencedEnd = 'a376A803803D8' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ <!-- ==================== WarehouseOperation.StepExecution.callAction [Reference] ==================== -->
+ <Model:Reference xmi.id = 'a387330030183'
+ name = 'callAction' annotation = ''
+ scope = 'instance_level' visibility = 'public_vis'
+ isChangeable = 'true'
+ type = 'a3A638B7E0318'
+ referencedEnd = 'a37B3F999020A' >
+ <Model:StructuralFeature.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:StructuralFeature.multiplicity>
+ </Model:Reference>
+ </Model:Namespace.contents>
+ </Model:Class>
+ <!-- ==================== WarehouseOperation.TransformationStepExecutions [Association] ==================== -->
+ <Model:Association xmi.id = 'a37494BEF000F'
+ name = 'TransformationStepExecutions' annotation = 'Identifies the StepExecutions that record details of each execution of a TransformationStep.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a37494BEF03A9'
+ name = 'execution' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a36E070B201EB' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a37494BEF03B9'
+ name = 'transformationStep' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a36D590F003B9' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== WarehouseOperation.TransformationActivityExecutions [Association] ==================== -->
+ <Model:Association xmi.id = 'a376A7F980280'
+ name = 'TransformationActivityExecutions' annotation = 'Identifies the ActivityExecutions that record details of each execution of a TransformationActivity.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a376A7F99033C'
+ name = 'transformationActivity' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a36E070680112' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a376A7F99034B'
+ name = 'execution' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a376A7BF10213' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== WarehouseOperation.ActivityStepExecutions [Association] ==================== -->
+ <Model:Association xmi.id = 'a376A8038004E'
+ name = 'ActivityStepExecutions' annotation = 'Identifies all the StepExecutions associated with an ActivityExecution.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'protected_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a376A803803D8'
+ name = 'activityExecution' annotation = ''
+ isNavigable = 'true' aggregation = 'composite' isChangeable = 'true'
+ type = 'a376A7BF10213' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a376A80390000'
+ name = 'stepExecution' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a36E070B201EB' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== WarehouseOperation.ModelElementMeasurement [Association] ==================== -->
+ <Model:Association xmi.id = 'a37935A9E018F'
+ name = 'ModelElementMeasurement' annotation = 'Associates a Measurement object to any ModelElement.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a37935A9F008C'
+ name = 'modelElement' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327A5C7301CC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a37935A9F0140'
+ name = 'measurement' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a37935233038F' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== WarehouseOperation.ModelElementChangeRequest [Association] ==================== -->
+ <Model:Association xmi.id = 'a379DC29F011F'
+ name = 'ModelElementChangeRequest' annotation = 'Associates ChangeRequests with the ModelElement(s) which they affect.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a379DC2A001FD'
+ name = 'modelElement' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a327A5C7301CC' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '1' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a379DC2A0029D'
+ name = 'changeRequest' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a379DC1A90234' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'true' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ <!-- ==================== WarehouseOperation.StepExecutionCallAction [Association] ==================== -->
+ <Model:Association xmi.id = 'a37B3F9970275'
+ name = 'StepExecutionCallAction' annotation = 'Where a TransformationStep involves the use of an Operation, this association between StepExecution and CallAction allows the actual parameters used in a specific execution of the TransformationStep to be recorded.'
+ isRoot = 'true' isLeaf = 'true' isAbstract = 'false' visibility = 'public_vis'
+ isDerived = 'false' >
+ <Model:Namespace.contents>
+ <Model:AssociationEnd xmi.id = 'a37B3F999020A'
+ name = 'callAction' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a3A638B7E0318' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '1' is_ordered = 'false' is_unique = 'false' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ <Model:AssociationEnd xmi.id = 'a37B3F9990214'
+ name = 'stepExecution' annotation = ''
+ isNavigable = 'true' aggregation = 'none' isChangeable = 'true'
+ type = 'a36E070B201EB' >
+ <Model:AssociationEnd.multiplicity>
+ <Model:MultiplicityType lower = '0' upper = '-1' is_ordered = 'false' is_unique = 'true' />
+ </Model:AssociationEnd.multiplicity>
+ </Model:AssociationEnd>
+ </Model:Namespace.contents>
+ </Model:Association>
+ </Model:Namespace.contents>
+</Model:Package>
+<!-- ==================== CWMComplete [Package] ==================== -->
+<Model:Package xmi.id = 'a3A78A3F9036D'
+ name = 'CWMComplete'
+ isRoot = 'false' isLeaf = 'false' isAbstract = 'false' visibility = 'public_vis' >
+ <Model:ModelElement.annotation>CWMComplete is a package that invokes all other CWM packages. It does this by listing all of the other CWM metamodel packages in declaration order in the uml2mof.clusteredImport property of the MOF tab.
+
+CWMComplete is included as a convenience for software that wants to generate the entire CWM package. It is non-normative, is not included in any normative CWM dtd file, and is not documented in either volume of the CWM specification.</Model:ModelElement.annotation>
+ <Model:Namespace.contents>
+ <!-- ==================== CWMComplete.org.omg.mof.idl_prefix=org.omg.cwm [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1046'
+ name = 'org.omg.mof.idl_prefix=org.omg.cwm' annotation = ''
+ tagId = 'org.omg.mof.idl_prefix'
+ elements = 'a3A78A3F9036D' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.cwm</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== CWMComplete.org.omg.xmi.namespace=CWM [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1047'
+ name = 'org.omg.xmi.namespace=CWM' annotation = ''
+ tagId = 'org.omg.xmi.namespace'
+ elements = 'a3A78A3F9036D' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWM</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== CWMComplete.org.omg.mof.idl_substitute_name=CWMCompleteModule [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1048'
+ name = 'org.omg.mof.idl_substitute_name=CWMCompleteModule' annotation = ''
+ tagId = 'org.omg.mof.idl_substitute_name'
+ elements = 'a3A78A3F9036D' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>CWMCompleteModule</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <!-- ==================== CWMComplete.com.urep.jcr.java_prefix=org.omg.java.cwm [Tag] ==================== -->
+ <Model:Tag xmi.id = 'G.1049'
+ name = 'com.urep.jcr.java_prefix=org.omg.java.cwm' annotation = ''
+ tagId = 'com.urep.jcr.java_prefix'
+ elements = 'a3A78A3F9036D' >
+ <Model:Tag.values>
+ <XMI.any xmi.type = 'string' xmi.name = ''>org.omg.java.cwm</XMI.any>
+ </Model:Tag.values>
+ </Model:Tag>
+ <Model:Import xmi.id = 'G.1050'
+ name = 'Core' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6600C5031F' />
+ <Model:Import xmi.id = 'G.1051'
+ name = 'Behavioral' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6342A4000B' />
+ <Model:Import xmi.id = 'G.1052'
+ name = 'Relationships' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A63421F0357' />
+ <Model:Import xmi.id = 'G.1053'
+ name = 'Instance' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3A6342930318' />
+ <Model:Import xmi.id = 'G.1054'
+ name = 'BusinessInformation' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a38207A770114' />
+ <Model:Import xmi.id = 'G.1055'
+ name = 'DataTypes' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a38207A4E0308' />
+ <Model:Import xmi.id = 'G.1056'
+ name = 'Expressions' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a38207A600078' />
+ <Model:Import xmi.id = 'G.1057'
+ name = 'KeysIndexes' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a38207A680191' />
+ <Model:Import xmi.id = 'G.1058'
+ name = 'SoftwareDeployment' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3731C42F0314' />
+ <Model:Import xmi.id = 'G.1059'
+ name = 'TypeMapping' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3817221D01F4' />
+ <Model:Import xmi.id = 'G.1060'
+ name = 'Relational' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a362E34A201FF' />
+ <Model:Import xmi.id = 'G.1061'
+ name = 'Record' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a35F6F41A0299' />
+ <Model:Import xmi.id = 'G.1062'
+ name = 'Multidimensional' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a374EBFFB0357' />
+ <Model:Import xmi.id = 'G.1063'
+ name = 'XML' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a379CA3670197' />
+ <Model:Import xmi.id = 'G.1064'
+ name = 'Transformation' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a35E1B0B40042' />
+ <Model:Import xmi.id = 'G.1065'
+ name = 'Olap' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a365348E80125' />
+ <Model:Import xmi.id = 'G.1066'
+ name = 'BusinessNomenclature' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a381DE0120379' />
+ <Model:Import xmi.id = 'G.1067'
+ name = 'MiningCore' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a39E71F94024D' />
+ <Model:Import xmi.id = 'G.1068'
+ name = 'Clustering' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3B66D6FE025C' />
+ <Model:Import xmi.id = 'G.1069'
+ name = 'AssociationRules' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a395CFA0702B6' />
+ <Model:Import xmi.id = 'G.1070'
+ name = 'Supervised' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a395CFA1100D0' />
+ <Model:Import xmi.id = 'G.1071'
+ name = 'Classification' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a395CFA4201E9' />
+ <Model:Import xmi.id = 'G.1072'
+ name = 'Approximation' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a395CFA550060' />
+ <Model:Import xmi.id = 'G.1073'
+ name = 'AttributeImportance' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a395CFCB3036E' />
+ <Model:Import xmi.id = 'G.1074'
+ name = 'InformationVisualization' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a3857006102D5' />
+ <Model:Import xmi.id = 'G.1075'
+ name = 'WarehouseProcess' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a357DC1E5015B' />
+ <Model:Import xmi.id = 'G.1076'
+ name = 'WarehouseOperation' annotation = ''
+ visibility = 'public_vis' isClustered = 'true'
+ importedNamespace = 'a37419FF7000C' />
+ </Model:Namespace.contents>
+</Model:Package>
+</XMI.content>
+</XMI>
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/sample_stackoverflow.html b/vendor/github.com/tdewolff/minify/benchmarks/sample_stackoverflow.html
new file mode 100644
index 0000000..5a86927
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/sample_stackoverflow.html
@@ -0,0 +1,4335 @@
+
+<!DOCTYPE html>
+<html>
+<head>
+
+ <title>Stack Overflow</title>
+ <link rel="shortcut icon" href="//cdn.sstatic.net/stackoverflow/img/favicon.ico?v=038622610830">
+ <link rel="apple-touch-icon image_src" href="//cdn.sstatic.net/stackoverflow/img/apple-touch-icon.png?v=fd7230a85918">
+ <link rel="search" type="application/opensearchdescription+xml" title="Stack Overflow" href="/opensearch.xml">
+ <meta name="twitter:card" content="summary">
+ <meta name="twitter:domain" content="stackoverflow.com"/>
+ <meta property="og:type" content="website" />
+ <meta property="og:image" itemprop="image primaryImageOfPage" content="http://cdn.sstatic.net/stackoverflow/img/apple-touch-icon@2.png?v=fde65a5a78c6" />
+ <meta name="twitter:title" property="og:title" itemprop="title name" content="Stack Overflow" />
+ <meta name="twitter:description" property="og:description" itemprop="description" content="Q&amp;A for professional and enthusiast programmers" />
+ <meta property="og:url" content="http://stackoverflow.com/"/>
+
+
+
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
+ <script src="//cdn.sstatic.net/Js/stub.en.js?v=24b58fcf8e39"></script>
+ <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/stackoverflow/all.css?v=fb32779f6245">
+
+ <link rel="alternate" type="application/atom+xml" title="Feed of recent questions" href="/feeds">
+
+
+ <script>
+ StackExchange.ready(function () {
+ StackExchange.realtime.init('wss://qa.sockets.stackexchange.com,ws://qa.sockets.stackexchange.com');
+ StackExchange.realtime.subscribeToInboxNotifications();
+ StackExchange.realtime.subscribeToReputationNotifications('1');
+ StackExchange.realtime.subscribeToTopBarNotifications('1');
+ });
+ </script>
+ <script>
+ StackExchange.init({"locale":"en","stackAuthUrl":"https://stackauth.com","serverTime":1416752855,"networkMetaHostname":"meta.stackexchange.com","routeName":"Home/Index","styleCode":true,"enableUserHovercards":true,"snippets":{"enabled":true,"domain":"stacksnippets.net"},"site":{"name":"Stack Overflow","description":"Q&A for professional and enthusiast programmers","isNoticesTabEnabled":true,"recaptchaPublicKey":"6LdchgIAAAAAAJwGpIzRQSOFaO0pU6s44Xt8aTwc","recaptchaAudioLang":"en","enableNewTagCreationWarning":true,"nonAsciiTags":true,"enableSocialMediaInSharePopup":true},"user":{"fkey":"e301c6ff44648991bfb73f9d7b986461","isRegistered":true,"userType":3,"userId":3486065,"accountId":131032,"gravatar":"<div class=\"gravatar-wrapper-32\"><img src=\"https://www.gravatar.com/avatar/b06cb9b39e1fb2b310d3ec6daa20e9c3?s=32&d=identicon&r=PG\" alt=\"\" width=\"32\" height=\"32\"></div>","profileUrl":"http://stackoverflow.com/users/3486065/daevius","notificationsUnviewedCount":1,"inboxUnviewedCount":0}});
+ StackExchange.using.setCacheBreakers({"js/prettify-full.en.js":"a1184e3373cc","js/moderator.en.js":"13e491db892e","js/full-anon.en.js":"b66e2e146265","js/full.en.js":"65d8f153325d","js/wmd.en.js":"8309007beaf3","js/third-party/jquery.autocomplete.min.js":"e5f01e97f7c3","js/third-party/jquery.autocomplete.min.en.js":"","js/mobile.en.js":"5bd9031a13ea","js/help.en.js":"1ad0e1555080","js/tageditor.en.js":"aa4ba298c4ae","js/tageditornew.en.js":"bacb1a97e79a","js/inline-tag-editing.en.js":"9d7c6b9d01c1","js/revisions.en.js":"255b536e5531","js/review.en.js":"f6a6c1f9b8ec","js/tagsuggestions.en.js":"b278f9a0b23b","js/post-validation.en.js":"b6b8e4f5fd03","js/explore-qlist.en.js":"257ba4cb7b04","js/events.en.js":"ac7be7c376d3","js/keyboard-shortcuts.en.js":"5b1043ab67ac","js/external-editor.en.js":"bc276cc6e2cd","js/external-editor.en.js":"bc276cc6e2cd","js/snippet-javascript.en.js":"19f8d2a9fba6","js/snippet-javascript-codemirror.en.js":"ee6d3cd2d945"});
+ StackExchange.using("gps", function() {
+ StackExchange.gps.init(true);
+ });
+ </script>
+
+
+
+</head>
+<body class="home-page new-topbar">
+ <noscript><div id="noscript-padding"></div></noscript>
+ <div id="notify-container"></div>
+ <div id="overlay-header"></div>
+ <div id="custom-header"></div>
+
+
+
+
+<div class="topbar">
+ <div class="topbar-wrapper">
+
+ <div class="js-topbar-dialog-corral">
+
+<div class="topbar-dialog siteSwitcher-dialog dno">
+ <div class="header">
+ <h3><a href="//stackoverflow.com">current community</a></h3>
+ </div>
+ <div class="modal-content current-site-container">
+ <ul class="current-site">
+ <li>
+ <div class="related-links">
+ <a href="http://chat.stackoverflow.com" class="js-gps-track" data-gps-track="site_switcher.click({ item_type:6 })"
+>chat</a>
+ <a href="http://blog.stackoverflow.com" class="js-gps-track" data-gps-track="site_switcher.click({ item_type:7 })"
+>blog</a>
+ <a href="/users/logout" class="js-gps-track" data-gps-track="site_switcher.click({ item_type:8 })"
+>log out</a>
+ </div>
+
+
+
+
+ <a href="//stackoverflow.com"
+ class="current-site-link site-link js-gps-track"
+ data-id="1"
+ data-gps-track="
+ site_switcher.click({ item_type:3 })">
+ <div class="site-icon favicon favicon-stackoverflow" title="Stack Overflow"></div>
+ Stack Overflow
+ </a>
+
+ </li>
+ <li class="related-site">
+ <div class="L-shaped-icon-container">
+ <span class="L-shaped-icon"></span>
+ </div>
+
+
+
+
+
+ <a href="http://meta.stackoverflow.com"
+ class="site-link js-gps-track"
+ data-id="552"
+ data-gps-track="
+ site.switch({ target_site:552, item_type:3 }),
+ site_switcher.click({ item_type:4 })">
+ <div class="site-icon favicon favicon-stackoverflowmeta" title="Meta Stack Overflow"></div>
+ Meta Stack Overflow
+ </a>
+
+ </li>
+ <li class="related-site">
+ <div class="L-shaped-icon-container">
+ <span class="L-shaped-icon"></span>
+ </div>
+
+ <a class="site-link js-gps-track"
+ href="//careers.stackoverflow.com?utm_source=stackoverflow.com&utm_medium=site-ui&utm_campaign=multicollider"
+ data-gps-track="site_switcher.click({ item_type:9 })"
+>
+ <div class="site-icon favicon favicon-careers" title="Stack Overflow Careers"></div>
+ Stack Overflow Careers
+ </a>
+ </li>
+ </ul>
+ </div>
+
+ <div class="header" id="your-communities-header">
+ <h3>
+ <a href="//stackexchange.com/users/131032/?tab=accounts">your communities</a>
+ </h3>
+
+ <a href="#" id="edit-pinned-sites">edit</a>
+ <a href="#" id="cancel-pinned-sites" style="display: none;">cancel</a>
+ </div>
+ <div class="modal-content" id="your-communities-section">
+
+ <ul class="my-sites">
+ <li>
+
+
+
+
+ <a href="//stackoverflow.com"
+ class="site-link js-gps-track"
+ data-id="1"
+ data-gps-track="
+ site.switch({ target_site:1, item_type:3 }),
+ site_switcher.click({ item_type:1 })">
+ <div class="site-icon favicon favicon-stackoverflow" title="Stack Overflow"></div>
+ Stack Overflow
+ <span class="rep-score">730</span>
+ </a>
+
+ </li>
+ <li>
+
+
+
+
+ <a href="//tex.stackexchange.com"
+ class="site-link js-gps-track"
+ data-id="85"
+ data-gps-track="
+ site.switch({ target_site:85, item_type:3 }),
+ site_switcher.click({ item_type:1 })">
+ <div class="site-icon favicon favicon-tex" title="TeX - LaTeX"></div>
+ TeX - LaTeX
+ <span class="rep-score">175</span>
+ </a>
+
+ </li>
+ <li>
+
+
+
+
+ <a href="//gaming.stackexchange.com"
+ class="site-link js-gps-track"
+ data-id="41"
+ data-gps-track="
+ site.switch({ target_site:41, item_type:3 }),
+ site_switcher.click({ item_type:1 })">
+ <div class="site-icon favicon favicon-gaming" title="Arqade"></div>
+ Arqade
+ <span class="rep-score">163</span>
+ </a>
+
+ </li>
+ <li>
+
+
+
+
+ <a href="//superuser.com"
+ class="site-link js-gps-track"
+ data-id="3"
+ data-gps-track="
+ site.switch({ target_site:3, item_type:3 }),
+ site_switcher.click({ item_type:1 })">
+ <div class="site-icon favicon favicon-superuser" title="Super User"></div>
+ Super User
+ <span class="rep-score">116</span>
+ </a>
+
+ </li>
+ <li>
+
+
+
+
+ <a href="//serverfault.com"
+ class="site-link js-gps-track"
+ data-id="2"
+ data-gps-track="
+ site.switch({ target_site:2, item_type:3 }),
+ site_switcher.click({ item_type:1 })">
+ <div class="site-icon favicon favicon-serverfault" title="Server Fault"></div>
+ Server Fault
+ <span class="rep-score">106</span>
+ </a>
+
+ </li>
+ </ul>
+ <div class="pinned-site-editor-container" style="display: none;">
+ <input id="js-site-search-txt"
+ type="text"
+ class="site-filter-input"
+ value=""
+ placeholder="Add a Stack Exchange community"/>
+ <input type="submit" id="pin-site-btn" value="Add" disabled="disabled"/>
+ <ul class="js-found-sites found-sites"></ul>
+ <ul class="pinned-site-list sortable" data-custom-list="False">
+ </ul>
+ <input type="submit" value="Save" id="save-pinned-sites-btn" disabled="disabled"/>
+ <a href="#" id="reset-pinned-sites">reset to default list</a>
+ </div>
+ </div>
+
+ <div class="header">
+ <h3><a href="//stackexchange.com/sites">more stack exchange communities</a></h3>
+ </div>
+ <div class="modal-content">
+ <div class="child-content"></div>
+ </div>
+</div>
+ </div>
+
+ <div class="network-items">
+
+ <a href="//stackexchange.com"
+ class="topbar-icon icon-site-switcher yes-hover js-site-switcher-button js-gps-track"
+ data-gps-track="site_switcher.show"
+ title="A list of all 131 Stack Exchange sites">
+ <span class="hidden-text">Stack Exchange</span>
+ </a>
+
+ <a href="#"
+ class="topbar-icon icon-inbox yes-hover js-inbox-button"
+ title="Recent inbox messages">
+ <span class="hidden-text">Inbox</span>
+ <span class="unread-count" style="display:none"></span>
+ </a>
+ <a href="#"
+ class="topbar-icon icon-achievements yes-hover js-achievements-button "
+ data-unread-class=""
+ title="Recent achievements: reputation, badges, and privileges earned">
+ <span class="hidden-text">Reputation and Badges</span>
+ <span class="unread-count" style="display:none">
+
+ </span>
+ </a>
+ </div>
+
+ <div class="topbar-links">
+
+ <a href="/users/3486065/daevius" class="profile-me js-gps-track" data-gps-track="profile_summary.click()">
+ <div class="gravatar-wrapper-24" title="Daevius"><img src="https://www.gravatar.com/avatar/b06cb9b39e1fb2b310d3ec6daa20e9c3?s=24&d=identicon&r=PG" alt="" width="24" height="24" class="avatar-me js-avatar-me"></div>
+ <div class="links-container topbar-flair">
+
+ <span class="reputation" title="your reputation: 730">
+ 730
+ </span>
+<span title="10 silver badges"><span class="badge2"></span><span class="badgecount">10</span></span><span title="25 bronze badges"><span class="badge3"></span><span class="badgecount">25</span></span> </div>
+ </a>
+ <div class="links-container">
+ <span class="topbar-menu-links">
+
+
+
+ <a href="/review" title="Review queues - help improve the site">
+ review
+ </a>
+
+ <a href="#" class="icon-help js-help-button" title="Help Center and other resources">
+ help
+ <span class="triangle"></span>
+ </a>
+ <div class="topbar-dialog help-dialog js-help-dialog dno">
+ <div class="modal-content">
+ <ul>
+ <li>
+ <a href="/tour" class="js-gps-track" data-gps-track="help_popup.click({ item_type:1 })">
+ Tour
+ <span class="item-summary">
+ Start here for a quick overview of the site
+ </span>
+ </a>
+ </li>
+ <li>
+ <a href="/help" class="js-gps-track" data-gps-track="help_popup.click({ item_type:4 })">
+ Help Center
+ <span class="item-summary">
+ Detailed answers to any questions you might have
+ </span>
+ </a>
+ </li>
+ <li>
+ <a href="//meta.stackoverflow.com" class="js-gps-track" data-gps-track="help_popup.click({ item_type:2 })">
+ Meta
+ <span class="item-summary">
+ Discuss the workings and policies of this site
+ </span>
+ </a>
+ </li>
+ </ul>
+ </div>
+ </div>
+
+ </span>
+ </div>
+
+ <div class="search-container">
+ <form id="search" action="/search" method="get" autocomplete="off">
+ <input name="q" type="text" placeholder="search" value="" tabindex="1" autocomplete="off" maxlength="240" />
+ </form>
+ </div>
+
+ </div>
+ </div>
+</div>
+ <script>
+ StackExchange.ready(function() { StackExchange.topbar.init(); });
+ </script>
+
+ <div class="container">
+ <div id="header">
+ <br class="cbt">
+ <div id="hlogo">
+ <a href="/">
+ Stack Overflow
+ </a>
+ </div>
+ <div id="hmenus">
+ <div class="nav mainnavs">
+ <ul>
+ <li><a id="nav-questions" href="/questions">Questions</a></li>
+ <li><a id="nav-tags" href="/tags">Tags</a></li>
+ <li><a id="nav-users" href="/users">Users</a></li>
+ <li><a id="nav-badges" href="/help/badges">Badges</a></li>
+ <li><a id="nav-unanswered" href="/unanswered">Unanswered</a></li>
+ </ul>
+ </div>
+ <div class="nav askquestion">
+ <ul>
+ <li>
+ <a id="nav-askquestion" href="/questions/ask">Ask Question</a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+
+
+
+
+ <div id="content" class="snippet-hidden">
+
+<div id="mainbar">
+
+ <div class="subheader">
+ <h1 id="h-top-questions">
+ Top Questions
+ </h1>
+ <div id="tabs">
+ <a class="youarehere" href="?tab=interesting" title="Questions that may be of interest to you based on your history and tag preference">interesting</a>
+ <a href="?tab=featured" title="Questions with an active bounty"> <span class="bounty-indicator-tab">417</span>
+featured</a>
+ <a href="?tab=hot" title="Questions with the most views, answers, and votes over the last few days">hot</a>
+ <a href="?tab=week" title="Questions with the most views, answers, and votes this week">week</a>
+ <a href="?tab=month" title="Questions with the most views, answers, and votes this month">month</a>
+</div>
+ </div>
+<div id="qlist-wrapper">
+ <div id="question-mini-list">
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089990"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089990/why-it-doesnt-show-me-the-greatest-common-divison'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="5 views">5</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089990/why-it-doesnt-show-me-the-greatest-common-divison" class="question-hyperlink" title="I&#39;m beginner here and i don&#39;t know why when i try to start the program it doesn&#39;t work and doesn&#39;t show me any error.Why?I&#39;m beginner
+
+#include &lt;iostream>
+
+using namespace std;
+
+int main()
+{
+ ...">Why it doesn&#39;t show me the greatest common divison?</a></h3>
+ <div class="tags t-cçç">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089990/why-it-doesnt-show-me-the-greatest-common-divison" class="started-link">asked <span title="2014-11-23 14:26:19Z" class="relativetime">1m ago</span></a>
+ <a href="/users/4279205/chr1sty">Chr1sty</a> <span class="reputation-score" title="reputation score " dir="ltr">1</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089316"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089316/calculation-of-tan-with-taylor-series'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="-2 votes">-2</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="22 views">22</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089316/calculation-of-tan-with-taylor-series" class="question-hyperlink" title="I´m trying to write function which will calculate tan of angle in radians. I have to do it using taylor series using iterations, but only for first 13 nominators&amp;denominators. Here´s the formula: ...">calculation of tan with taylor series</a></h3>
+ <div class="tags t-c">
+ <a href="/questions/tagged/c" class="post-tag" title="show questions tagged 'c'" rel="tag">c</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089316/calculation-of-tan-with-taylor-series/?lastactivity" class="started-link">modified <span title="2014-11-23 14:26:02Z" class="relativetime">1m ago</span></a>
+ <a href="/users/4142924/weather-vane">Weather Vane</a> <span class="reputation-score" title="reputation score " dir="ltr">579</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089978"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089978/accessing-elements-of-an-array-within-object-of-object'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="3 views">3</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089978/accessing-elements-of-an-array-within-object-of-object" class="question-hyperlink" title="I am trying to access information such as name and logo in the Infobox company section returned when a search is performed using the code below. I&#39;ve used an example of google.
+If the exit command is ...">Accessing elements of an array within object of object</a></h3>
+ <div class="tags t-php t-arrays t-json t-object t-wikipedia-api">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/arrays" class="post-tag" title="show questions tagged 'arrays'" rel="tag">arrays</a> <a href="/questions/tagged/json" class="post-tag" title="show questions tagged 'json'" rel="tag">json</a> <a href="/questions/tagged/object" class="post-tag" title="show questions tagged 'object'" rel="tag">object</a> <a href="/questions/tagged/wikipedia-api" class="post-tag" title="show questions tagged 'wikipedia-api'" rel="tag">wikipedia-api</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089978/accessing-elements-of-an-array-within-object-of-object" class="started-link">asked <span title="2014-11-23 14:25:06Z" class="relativetime">2m ago</span></a>
+ <a href="/users/3687027/oroku">Oroku</a> <span class="reputation-score" title="reputation score " dir="ltr">19</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089922"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089922/store-all-possible-permutations-of-a-string-in-an-array'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="14 views">14</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089922/store-all-possible-permutations-of-a-string-in-an-array" class="question-hyperlink" title="Right now the code I&#39;m using is :
+I want to store all the permutations of a string in a string array...
+
+
+
+# include &lt;stdio.h>
+
+
+char *pms[] = {};
+int pmsi = 0;
+void swap (char *x, char ...">Store all possible permutations of a string in an array?</a></h3>
+ <div class="tags t-c t-permutation">
+ <a href="/questions/tagged/c" class="post-tag" title="show questions tagged 'c'" rel="tag">c</a> <a href="/questions/tagged/permutation" class="post-tag" title="show questions tagged 'permutation'" rel="tag">permutation</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089922/store-all-possible-permutations-of-a-string-in-an-array/?lastactivity" class="started-link">modified <span title="2014-11-23 14:22:29Z" class="relativetime">5m ago</span></a>
+ <a href="/users/3084595/briscoooe">Briscoooe</a> <span class="reputation-score" title="reputation score " dir="ltr">20</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27083553"
+
+
+ >
+ <div onclick="window.location.href='/questions/27083553/php-file-list-array-into-array-tree'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="15 views">15</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27083553/php-file-list-array-into-array-tree" class="question-hyperlink" title="I have some file list arrays with elements exceeding 100s in number that I need to convert to a tree array and insert them into the database and return the tree on call for a json api directory system
+...">php file list array into array tree</a></h3>
+ <div class="tags t-php t-mysql t-arrays t-json t-tree">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/mysql" class="post-tag" title="show questions tagged 'mysql'" rel="tag">mysql</a> <a href="/questions/tagged/arrays" class="post-tag" title="show questions tagged 'arrays'" rel="tag">arrays</a> <a href="/questions/tagged/json" class="post-tag" title="show questions tagged 'json'" rel="tag">json</a> <a href="/questions/tagged/tree" class="post-tag" title="show questions tagged 'tree'" rel="tag">tree</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27083553/php-file-list-array-into-array-tree/?lastactivity" class="started-link">modified <span title="2014-11-23 14:20:27Z" class="relativetime">7m ago</span></a>
+ <a href="/users/1030087/amenadiel">amenadiel</a> <span class="reputation-score" title="reputation score " dir="ltr">5,971</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27082768"
+
+
+ >
+ <div onclick="window.location.href='/questions/27082768/how-to-post-and-take-data-from-mysql-for-specific-id-from-android-app'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="14 views">14</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27082768/how-to-post-and-take-data-from-mysql-for-specific-id-from-android-app" class="question-hyperlink" title="How to load data from MySQL for specific id. What I mean is when I click on gridview item 1 to load what I need for this item from MySQL. Currently I have
+
+ $objConnect = ...">How to post and take data from MySQL for specific id from android app</a></h3>
+ <div class="tags t-php t-android t-mysql">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/android" class="post-tag" title="show questions tagged 'android'" rel="tag"><img src="http://i.stack.imgur.com/tKsDb.png" height="16" width="18" alt="" class="sponsor-tag-img">android</a> <a href="/questions/tagged/mysql" class="post-tag" title="show questions tagged 'mysql'" rel="tag">mysql</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27082768/how-to-post-and-take-data-from-mysql-for-specific-id-from-android-app/?lastactivity" class="started-link">modified <span title="2014-11-23 14:19:15Z" class="relativetime">8m ago</span></a>
+ <a href="/users/1378364/goro">Goro</a> <span class="reputation-score" title="reputation score " dir="ltr">340</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27085035"
+
+
+ >
+ <div onclick="window.location.href='/questions/27085035/executing-an-sql-file-from-bat-script'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="17 views">17</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27085035/executing-an-sql-file-from-bat-script" class="question-hyperlink" title="I have created a batch script which is supposed to execute the SQL file in the same directory and then pause, where I connect to MYSQL and issue the commands inside of the SQL file. For some reason ...">Executing an SQL file from BAT script</a></h3>
+ <div class="tags t-mysql t-windows t-batch-file">
+ <a href="/questions/tagged/mysql" class="post-tag" title="show questions tagged 'mysql'" rel="tag">mysql</a> <a href="/questions/tagged/windows" class="post-tag" title="show questions tagged 'windows'" rel="tag">windows</a> <a href="/questions/tagged/batch-file" class="post-tag" title="show questions tagged 'batch-file'" rel="tag">batch-file</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27085035/executing-an-sql-file-from-bat-script/?lastactivity" class="started-link">modified <span title="2014-11-23 14:18:16Z" class="relativetime">9m ago</span></a>
+ <a href="/users/330315/a-horse-with-no-name">a_horse_with_no_name</a> <span class="reputation-score" title="reputation score 111079" dir="ltr">111k</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089901"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089901/dorygen-main-page'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="3 views">3</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089901/dorygen-main-page" class="question-hyperlink" title="I created a .dox file with the following. However I am not seeing the
+information displayed in the main page.
+
+/// \mainpage My Personal Index Page
+///
+/// \section intro_sec Introduction
+///
+/// ...">Dorygen Main Page</a></h3>
+ <div class="tags t-webpage t-doxygen">
+ <a href="/questions/tagged/webpage" class="post-tag" title="show questions tagged 'webpage'" rel="tag">webpage</a> <a href="/questions/tagged/doxygen" class="post-tag" title="show questions tagged 'doxygen'" rel="tag">doxygen</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089901/dorygen-main-page" class="started-link">asked <span title="2014-11-23 14:17:04Z" class="relativetime">10m ago</span></a>
+ <a href="/users/4167161/christopher-dimech">Christopher Dimech</a> <span class="reputation-score" title="reputation score " dir="ltr">33</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089560"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089560/str-replace-delete-all-the-contents-of-the-file'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="1 vote">1</span></div>
+ <div>vote</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="18 views">18</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089560/str-replace-delete-all-the-contents-of-the-file" class="question-hyperlink" title="I&#39;m doing a system that allows the user to express a vote depending on the button pressed. Currently you can express three types of voting. Each user is saved in a text file on a line, and the last ...">str_replace() delete all the contents of the file</a></h3>
+ <div class="tags t-php t-string t-file t-str-replace">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/string" class="post-tag" title="show questions tagged 'string'" rel="tag">string</a> <a href="/questions/tagged/file" class="post-tag" title="show questions tagged 'file'" rel="tag">file</a> <a href="/questions/tagged/str-replace" class="post-tag" title="show questions tagged 'str-replace'" rel="tag">str-replace</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089560/str-replace-delete-all-the-contents-of-the-file/?lastactivity" class="started-link">modified <span title="2014-11-23 14:16:02Z" class="relativetime">11m ago</span></a>
+ <a href="/users/4214050/heisenberg">Heisenberg</a> <span class="reputation-score" title="reputation score " dir="ltr">43</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089802"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089802/how-to-read-specific-input-format'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="1 vote">1</span></div>
+ <div>vote</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="20 views">20</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089802/how-to-read-specific-input-format" class="question-hyperlink" title="i am supposed to read input from stdin in format like &quot;%c %d:%d:%d %d&quot; and allowed character at the beginning are + - #
+
+what i have tried is
+
+while(1){
+ ret = scanf(&quot; %c %d:%d:%d ...">how to read specific input format</a></h3>
+ <div class="tags t-c t-input t-scanf">
+ <a href="/questions/tagged/c" class="post-tag" title="show questions tagged 'c'" rel="tag">c</a> <a href="/questions/tagged/input" class="post-tag" title="show questions tagged 'input'" rel="tag">input</a> <a href="/questions/tagged/scanf" class="post-tag" title="show questions tagged 'scanf'" rel="tag">scanf</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089802/how-to-read-specific-input-format/?lastactivity" class="started-link">modified <span title="2014-11-23 14:14:14Z" class="relativetime">13m ago</span></a>
+ <a href="/users/3049655/cool-guy">Cool Guy</a> <span class="reputation-score" title="reputation score " dir="ltr">2,494</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089821"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089821/my-database-helper-class-join-problems'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="19 views">19</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089821/my-database-helper-class-join-problems" class="question-hyperlink" title="I&#39;m working on my project, SimpleSite, and ran into a problem with my database helper class while creating RBAC helper classes. The problem is doing JOINs using multiple tables. The specific query ...">My Database Helper Class Join Problems</a></h3>
+ <div class="tags t-php t-mysql t-join t-left-join">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/mysql" class="post-tag" title="show questions tagged 'mysql'" rel="tag">mysql</a> <a href="/questions/tagged/join" class="post-tag" title="show questions tagged 'join'" rel="tag">join</a> <a href="/questions/tagged/left-join" class="post-tag" title="show questions tagged 'left-join'" rel="tag">left-join</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089821/my-database-helper-class-join-problems" class="started-link">modified <span title="2014-11-23 14:11:22Z" class="relativetime">16m ago</span></a>
+ <a href="/users/2370483/machavity">Machavity</a> <span class="reputation-score" title="reputation score " dir="ltr">7,656</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088279"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088279/php-select-field-from-nested-query'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="38 views">38</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088279/php-select-field-from-nested-query" class="question-hyperlink" title="I am running a query on 2 tables, to return information from a blog. The nested query selects the tags that are associated with that blog, which is a separate table.
+
+I want to be able to get the ...">PHP select field from nested query</a></h3>
+ <div class="tags t-php t-mysql">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/mysql" class="post-tag" title="show questions tagged 'mysql'" rel="tag">mysql</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088279/php-select-field-from-nested-query/?lastactivity" class="started-link">modified <span title="2014-11-23 14:08:28Z" class="relativetime">19m ago</span></a>
+ <a href="/users/1758890/pankaj-kumar">Pankaj Kumar</a> <span class="reputation-score" title="reputation score " dir="ltr">17</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089606"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089606/c-forcing-getopt-to-stop-at-first-non-argument'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="7 views">7</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089606/c-forcing-getopt-to-stop-at-first-non-argument" class="question-hyperlink" title="I am coding an programm proxy which redirects stdout and so on into files, with usage: proxy [-i infile] [-o outfile] [-e errfile] cmd [options].
+
+So i want to force getopt to stop when it arrives at ...">C forcing getopt to stop at first non argument</a></h3>
+ <div class="tags t-c t-getopt">
+ <a href="/questions/tagged/c" class="post-tag" title="show questions tagged 'c'" rel="tag">c</a> <a href="/questions/tagged/getopt" class="post-tag" title="show questions tagged 'getopt'" rel="tag">getopt</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089606/c-forcing-getopt-to-stop-at-first-non-argument/?lastactivity" class="started-link">answered <span title="2014-11-23 14:08:18Z" class="relativetime">19m ago</span></a>
+ <a href="/users/4127569/jch">jch</a> <span class="reputation-score" title="reputation score " dir="ltr">799</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27045136"
+
+
+ >
+ <div onclick="window.location.href='/questions/27045136/why-does-the-returned-value-need-to-be-the-first-declared-local-for-nrvo'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="44 views">44</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27045136/why-does-the-returned-value-need-to-be-the-first-declared-local-for-nrvo" class="question-hyperlink" title="It is my understanding that for the compiler to be able to do Named Return Value Optimization (NRVO) the return value must be declared before any others in the function body. I suspect this may be due ...">Why does the returned value need to be the first declared local for NRVO?</a></h3>
+ <div class="tags t-cçç t-optimization t-nrvo">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/optimization" class="post-tag" title="show questions tagged 'optimization'" rel="tag">optimization</a> <a href="/questions/tagged/nrvo" class="post-tag" title="show questions tagged 'nrvo'" rel="tag">nrvo</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27045136/why-does-the-returned-value-need-to-be-the-first-declared-local-for-nrvo/?lastactivity" class="started-link">modified <span title="2014-11-23 14:04:33Z" class="relativetime">23m ago</span></a>
+ <a href="/users/893819/porkybrain">PorkyBrain</a> <span class="reputation-score" title="reputation score " dir="ltr">2,061</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089553"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089553/changing-background-color-with-php'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="3 answers">3</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="16 views">16</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089553/changing-background-color-with-php" class="question-hyperlink" title="I have problem with the changing background color of php page.
+Firstly, I want to take the color name from DATABASE to make the current color constant. I mean, if user change the background color to ...">changing background color with php</a></h3>
+ <div class="tags t-php t-database t-background-color">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/database" class="post-tag" title="show questions tagged 'database'" rel="tag">database</a> <a href="/questions/tagged/background-color" class="post-tag" title="show questions tagged 'background-color'" rel="tag">background-color</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089553/changing-background-color-with-php/?lastactivity" class="started-link">modified <span title="2014-11-23 14:04:32Z" class="relativetime">23m ago</span></a>
+ <a href="/users/2059056/whitefawn">whitefawn</a> <span class="reputation-score" title="reputation score " dir="ltr">31</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089779"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089779/qml-combobox-item-dropdownmenu-style'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="6 views">6</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089779/qml-combobox-item-dropdownmenu-style" class="question-hyperlink" title="I want to use ComboBox item in my project. Is it possible to change it dropdownmenu style: color, shape, text style (probably by using another model), or I need to use combination of rectangles ...">QML ComboBox item DropDownMenu style</a></h3>
+ <div class="tags t-cçç t-qt t-user-interface">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/qt" class="post-tag" title="show questions tagged 'qt'" rel="tag">qt</a> <a href="/questions/tagged/user-interface" class="post-tag" title="show questions tagged 'user-interface'" rel="tag">user-interface</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089779/qml-combobox-item-dropdownmenu-style" class="started-link">asked <span title="2014-11-23 14:02:45Z" class="relativetime">24m ago</span></a>
+ <a href="/users/4229991/%d0%9e%d0%bb%d0%b5%d0%b3-%d0%a2%d0%b0%d1%88%d0%bb%d0%b0%d0%bd%d0%be%d0%b2">Олег Ташланов</a> <span class="reputation-score" title="reputation score " dir="ltr">8</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27055771"
+
+
+ >
+ <div onclick="window.location.href='/questions/27055771/using-seekg-in-text-mode'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="3 votes">3</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="59 views">59</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27055771/using-seekg-in-text-mode" class="question-hyperlink" title="While trying to read in a simple ANSI-encoded text file in text mode (Windows), I came across some strange behaviour with seekg() and tellg(); Any time I tried to use tellg(), saved its value (as ...">Using seekg() in text mode</a></h3>
+ <div class="tags t-cçç">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27055771/using-seekg-in-text-mode/?lastactivity" class="started-link">modified <span title="2014-11-23 14:01:53Z" class="relativetime">25m ago</span></a>
+ <a href="/users/657267/user657267">user657267</a> <span class="reputation-score" title="reputation score " dir="ltr">5,841</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27087416"
+
+
+ >
+ <div onclick="window.location.href='/questions/27087416/specific-order-by-clause-in-mysql'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="4 votes">4</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered-accepted" title="one of the answers was accepted as the correct answer">
+ <div class="mini-counts"><span title="2 answers">2</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="69 views">69</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27087416/specific-order-by-clause-in-mysql" class="question-hyperlink" title="My MySQL database contains Multiple products stored in 4 categories. All informations are in the same table :
+
+id - name - description - price - category
+
+
+I&#39;am trying to list them in this order. I ...">Specific ORDER BY clause in MySQL</a></h3>
+ <div class="tags t-mysql t-sql">
+ <a href="/questions/tagged/mysql" class="post-tag" title="show questions tagged 'mysql'" rel="tag">mysql</a> <a href="/questions/tagged/sql" class="post-tag" title="show questions tagged 'sql'" rel="tag">sql</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27087416/specific-order-by-clause-in-mysql/?lastactivity" class="started-link">modified <span title="2014-11-23 14:01:51Z" class="relativetime">25m ago</span></a>
+ <a href="/users/1229023/raina77ow">raina77ow</a> <span class="reputation-score" title="reputation score 46475" dir="ltr">46.5k</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089687"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089687/how-to-avoid-fatal-php-fatal-error-cannot-redeclare'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="26 views">26</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089687/how-to-avoid-fatal-php-fatal-error-cannot-redeclare" class="question-hyperlink" title="I would like to have the freedom of redeclaring particular functions in PHP. In another words, I have script that includes some files:
+
+include_once(dirname(__FILE__) . ...">How to avoid fatal &ldquo;PHP Fatal error: Cannot redeclare[..]&rdquo;</a></h3>
+ <div class="tags t-php">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089687/how-to-avoid-fatal-php-fatal-error-cannot-redeclare/?lastactivity" class="started-link">answered <span title="2014-11-23 14:01:18Z" class="relativetime">26m ago</span></a>
+ <a href="/users/2370483/machavity">Machavity</a> <span class="reputation-score" title="reputation score " dir="ltr">7,656</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-26667762"
+
+
+ >
+ <div onclick="window.location.href='/questions/26667762/set-alarm-notification-between-two-specific-date-with-particular-day-in-android'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="1 vote">1</span></div>
+ <div>vote</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="46 views">46</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/26667762/set-alarm-notification-between-two-specific-date-with-particular-day-in-android" class="question-hyperlink" title="Hello friends i want to set notification with two specific dates like
+
+date1= 2014/10/30
+
+date2=2015/10/30
+
+and alarm should be notify at every 5th day(means date=5) of every month until date2.
+
+how ...">set alarm notification between two specific date with particular day in android</a></h3>
+ <div class="tags t-android t-alarmmanager t-alarm t-repeatingalarm">
+ <a href="/questions/tagged/android" class="post-tag" title="show questions tagged 'android'" rel="tag"><img src="http://i.stack.imgur.com/tKsDb.png" height="16" width="18" alt="" class="sponsor-tag-img">android</a> <a href="/questions/tagged/alarmmanager" class="post-tag" title="show questions tagged 'alarmmanager'" rel="tag">alarmmanager</a> <a href="/questions/tagged/alarm" class="post-tag" title="show questions tagged 'alarm'" rel="tag">alarm</a> <a href="/questions/tagged/repeatingalarm" class="post-tag" title="show questions tagged 'repeatingalarm'" rel="tag">repeatingalarm</a>
+ </div>
+ <div class="started">
+ <a href="/questions/26667762/set-alarm-notification-between-two-specific-date-with-particular-day-in-android" class="started-link">modified <span title="2014-11-23 14:00:48Z" class="relativetime">26m ago</span></a>
+ <a href="/users/4283971/androidasad">AndroidAsad</a> <span class="reputation-score" title="reputation score " dir="ltr">1</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088217"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088217/php-submit-inside-loop-table'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered-accepted" title="one of the answers was accepted as the correct answer">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="33 views">33</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088217/php-submit-inside-loop-table" class="question-hyperlink" title="i have a foreach loop that outputs my products in a table. Code shown below:
+
+&lt;table class=&quot;table table-striped table-bordered table-hover&quot; id=&quot;sample_2&quot;>
+&lt;thead>
+&lt;tr>
+...">PHP submit inside loop table</a></h3>
+ <div class="tags t-php t-mysql">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/mysql" class="post-tag" title="show questions tagged 'mysql'" rel="tag">mysql</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088217/php-submit-inside-loop-table/?lastactivity" class="started-link">modified <span title="2014-11-23 14:00:40Z" class="relativetime">26m ago</span></a>
+ <a href="/users/4284065/michael-johnson">Michael Johnson</a> <span class="reputation-score" title="reputation score " dir="ltr">3</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089062"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089062/comparing-slices-and-lifetimes'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="12 views">12</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089062/comparing-slices-and-lifetimes" class="question-hyperlink" title="I&#39;m trying to update rust-fuse code (which I think compiled on 0.12) to the latest nightly. One of the things that changed is that implicit coercions from [T] to &amp;[T] were removed. I changed the ...">Comparing slices and lifetimes</a></h3>
+ <div class="tags t-rust">
+ <a href="/questions/tagged/rust" class="post-tag" title="show questions tagged 'rust'" rel="tag">rust</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089062/comparing-slices-and-lifetimes" class="started-link">modified <span title="2014-11-23 13:52:55Z" class="relativetime">34m ago</span></a>
+ <a href="/users/2606953/mark">Mark</a> <span class="reputation-score" title="reputation score " dir="ltr">153</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089372"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089372/php-pthreads-how-to-access-variables-and-arguments-from-construct'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="4 views">4</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089372/php-pthreads-how-to-access-variables-and-arguments-from-construct" class="question-hyperlink" title="I and my amateur team is working on new API which is based on PocketMine-MP which is an server software for MineCraft::Pocket Edition and both is written in PHP. I am trying to load CustomSocket(which ...">PHP pthreads: how to access variables and arguments from __construct()</a></h3>
+ <div class="tags t-php t-sockets t-pthreads">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/sockets" class="post-tag" title="show questions tagged 'sockets'" rel="tag">sockets</a> <a href="/questions/tagged/pthreads" class="post-tag" title="show questions tagged 'pthreads'" rel="tag">pthreads</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089372/php-pthreads-how-to-access-variables-and-arguments-from-construct" class="started-link">modified <span title="2014-11-23 13:49:55Z" class="relativetime">37m ago</span></a>
+ <a href="/users/137650/matslindh">MatsLindh</a> <span class="reputation-score" title="reputation score " dir="ltr">6,884</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089655"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089655/how-to-send-sms-from-android-fetched-from-a-php-website-mysql-database'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="-2 votes">-2</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="12 views">12</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089655/how-to-send-sms-from-android-fetched-from-a-php-website-mysql-database" class="question-hyperlink" title="I want to know if there is an android application that can periodically check my web server for SMS records and then send them. i.e. my mySQL database named sms, stores the recipient cell number and ...">How to send SMS from android fetched from a php website / mySQL database?</a></h3>
+ <div class="tags t-php t-android t-mysql">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/android" class="post-tag" title="show questions tagged 'android'" rel="tag"><img src="http://i.stack.imgur.com/tKsDb.png" height="16" width="18" alt="" class="sponsor-tag-img">android</a> <a href="/questions/tagged/mysql" class="post-tag" title="show questions tagged 'mysql'" rel="tag">mysql</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089655/how-to-send-sms-from-android-fetched-from-a-php-website-mysql-database" class="started-link">asked <span title="2014-11-23 13:49:39Z" class="relativetime">37m ago</span></a>
+ <a href="/users/4178110/engr-naveed">Engr. Naveed</a> <span class="reputation-score" title="reputation score " dir="ltr">1</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089640"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089640/unhandled-exception-at-0x000a7599-in-consoleapplication23-exe-0xc00000fd-stack'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="-1 votes">-1</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="22 views">22</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089640/unhandled-exception-at-0x000a7599-in-consoleapplication23-exe-0xc00000fd-stack" class="question-hyperlink" title="I get this error while I am implementing insertion sort in visual studio. I don&#39;t know what am I doing wrong because apparently, everything seems correct. I am implementing the pseudo code given in my ...">Unhandled exception at 0x000A7599 in ConsoleApplication23.exe: 0xC00000FD: Stack overflow (parameters: 0x00000001, 0x00A72FF8)</a></h3>
+ <div class="tags t-cçç t-data-structures t-insertion-sort">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/data-structures" class="post-tag" title="show questions tagged 'data-structures'" rel="tag">data-structures</a> <a href="/questions/tagged/insertion-sort" class="post-tag" title="show questions tagged 'insertion-sort'" rel="tag">insertion-sort</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089640/unhandled-exception-at-0x000a7599-in-consoleapplication23-exe-0xc00000fd-stack" class="started-link">asked <span title="2014-11-23 13:48:24Z" class="relativetime">39m ago</span></a>
+ <a href="/users/4257892/neo">Neo</a> <span class="reputation-score" title="reputation score " dir="ltr">1</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088327"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088327/read-from-stdin-and-encrypt-the-input-in-a-child-process'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="1 vote">1</span></div>
+ <div>vote</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="12 views">12</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088327/read-from-stdin-and-encrypt-the-input-in-a-child-process" class="question-hyperlink" title="I have to write a little C program that does the following:
+
+
+read from stdin
+create a child process using fork and encrypt the input with crypt in that child process
+use sleep with some random time ...">Read from stdin and &ldquo;encrypt&rdquo; the input in a child process</a></h3>
+ <div class="tags t-c t-fork t-wait t-child-process">
+ <a href="/questions/tagged/c" class="post-tag" title="show questions tagged 'c'" rel="tag">c</a> <a href="/questions/tagged/fork" class="post-tag" title="show questions tagged 'fork'" rel="tag">fork</a> <a href="/questions/tagged/wait" class="post-tag" title="show questions tagged 'wait'" rel="tag">wait</a> <a href="/questions/tagged/child-process" class="post-tag" title="show questions tagged 'child-process'" rel="tag">child-process</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088327/read-from-stdin-and-encrypt-the-input-in-a-child-process" class="started-link">modified <span title="2014-11-23 13:47:17Z" class="relativetime">40m ago</span></a>
+ <a href="/users/613319/sina72">sina72</a> <span class="reputation-score" title="reputation score " dir="ltr">1,788</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088970"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088970/opengl-deferred-rendering-not-working'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="13 views">13</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088970/opengl-deferred-rendering-not-working" class="question-hyperlink" title="I try to render my geometry in the first pass and render it from a buffer to a quad in my second pass.
+Rendering the geometry directly to screen works, but as soon as I try to render to the quad with ...">OpenGL Deferred Rendering not working</a></h3>
+ <div class="tags t-cçç t-opengl t-glsl t-deferred-rendering">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/opengl" class="post-tag" title="show questions tagged 'opengl'" rel="tag">opengl</a> <a href="/questions/tagged/glsl" class="post-tag" title="show questions tagged 'glsl'" rel="tag">glsl</a> <a href="/questions/tagged/deferred-rendering" class="post-tag" title="show questions tagged 'deferred-rendering'" rel="tag">deferred-rendering</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088970/opengl-deferred-rendering-not-working/?lastactivity" class="started-link">modified <span title="2014-11-23 13:46:25Z" class="relativetime">41m ago</span></a>
+ <a href="/users/1756880/marco-alka">Marco Alka</a> <span class="reputation-score" title="reputation score " dir="ltr">150</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089611"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089611/gcc-cant-compile-a-runnable-hello-world-in-cygwin'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="1 vote">1</span></div>
+ <div>vote</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="22 views">22</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089611/gcc-cant-compile-a-runnable-hello-world-in-cygwin" class="question-hyperlink" title="I&#39;m trying to compile a simple hello world program:
+
+#include &lt;stdio.h>
+
+int main()
+{
+ printf(&quot;Hello World!&quot;);
+ return 0;
+}
+
+
+With this makefile:
+
+TARGET = main.exe
+OBJECT_01 = main.o
+...">GCC can&#39;t compile a runnable Hello World in Cygwin</a></h3>
+ <div class="tags t-c t-gcc t-cygwin">
+ <a href="/questions/tagged/c" class="post-tag" title="show questions tagged 'c'" rel="tag">c</a> <a href="/questions/tagged/gcc" class="post-tag" title="show questions tagged 'gcc'" rel="tag">gcc</a> <a href="/questions/tagged/cygwin" class="post-tag" title="show questions tagged 'cygwin'" rel="tag">cygwin</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089611/gcc-cant-compile-a-runnable-hello-world-in-cygwin" class="started-link">asked <span title="2014-11-23 13:45:27Z" class="relativetime">42m ago</span></a>
+ <a href="/users/3745005/andrey-g">andrey g</a> <span class="reputation-score" title="reputation score " dir="ltr">8</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089567"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089567/how-to-save-state-and-return-to-a-deep-c-function'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="3 votes">3</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="23 views">23</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089567/how-to-save-state-and-return-to-a-deep-c-function" class="question-hyperlink" title="Background
+
+I am porting an existing C program to work as an online game using Emscripten.
+
+The problem is that Emscripten wants the program to be organised around a single function that is called 60 ...">How to save state and return to a deep C function?</a></h3>
+ <div class="tags t-c t-emscripten">
+ <a href="/questions/tagged/c" class="post-tag" title="show questions tagged 'c'" rel="tag">c</a> <a href="/questions/tagged/emscripten" class="post-tag" title="show questions tagged 'emscripten'" rel="tag">emscripten</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089567/how-to-save-state-and-return-to-a-deep-c-function" class="started-link">asked <span title="2014-11-23 13:41:17Z" class="relativetime">46m ago</span></a>
+ <a href="/users/1139393/peter-de-rivaz">Peter de Rivaz</a> <span class="reputation-score" title="reputation score 13692" dir="ltr">13.7k</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089566"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089566/open-a-qfiledialog-over-a-qquickitem'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="8 views">8</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089566/open-a-qfiledialog-over-a-qquickitem" class="question-hyperlink" title="I want to open a QFileDialog over a QQuickItem.
+
+ void
+ MyCoolQQuickItem::loadFileDialog()
+ {
+ QString filename = QFileDialog::getOpenFileName(this, &quot;Open a file&quot;,
+ &quot;C:\\path ...">Open a QFileDialog over a QQuickItem</a></h3>
+ <div class="tags t-cçç t-qt t-qml t-qt-quick">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/qt" class="post-tag" title="show questions tagged 'qt'" rel="tag">qt</a> <a href="/questions/tagged/qml" class="post-tag" title="show questions tagged 'qml'" rel="tag">qml</a> <a href="/questions/tagged/qt-quick" class="post-tag" title="show questions tagged 'qt-quick'" rel="tag">qt-quick</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089566/open-a-qfiledialog-over-a-qquickitem" class="started-link">asked <span title="2014-11-23 13:41:15Z" class="relativetime">46m ago</span></a>
+ <a href="/users/384560/vasco-rinaldo">Vasco Rinaldo</a> <span class="reputation-score" title="reputation score " dir="ltr">86</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089033"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089033/changing-in-a-header-file-which-is-included-in-all-modules-of-a-large-project'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="-1 votes">-1</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="9 views">9</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089033/changing-in-a-header-file-which-is-included-in-all-modules-of-a-large-project" class="question-hyperlink" title="I have a large project, that takes about half an hour to compile.
+
+This project consists of many modules, but there is a certain header file that contains data shared between all modules.
+
+Currently, ...">Changing in a header file which is included in all modules of a large project</a></h3>
+ <div class="tags t-c t-compilation">
+ <a href="/questions/tagged/c" class="post-tag" title="show questions tagged 'c'" rel="tag">c</a> <a href="/questions/tagged/compilation" class="post-tag" title="show questions tagged 'compilation'" rel="tag">compilation</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089033/changing-in-a-header-file-which-is-included-in-all-modules-of-a-large-project/?lastactivity" class="started-link">modified <span title="2014-11-23 13:39:39Z" class="relativetime">47m ago</span></a>
+ <a href="/users/3177124/abligh">abligh</a> <span class="reputation-score" title="reputation score " dir="ltr">7,502</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089301"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089301/how-to-print-doctype-in-figdice'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered-accepted" title="one of the answers was accepted as the correct answer">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="6 views">6</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089301/how-to-print-doctype-in-figdice" class="question-hyperlink" title="I don&#39;t manage to output the
+
+ &lt;!doctype html>
+
+
+directive in the rendered view with FigDice Template Engine.
+If I put the instruction at top of my XML template, it seems to be ignored.
+Thanks
+">How to print doctype in FigDice</a></h3>
+ <div class="tags t-php t-template-engine">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/template-engine" class="post-tag" title="show questions tagged 'template-engine'" rel="tag">template-engine</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089301/how-to-print-doctype-in-figdice/?lastactivity" class="started-link">answered <span title="2014-11-23 13:37:58Z" class="relativetime">49m ago</span></a>
+ <a href="/users/1663283/gabriel">Gabriel</a> <span class="reputation-score" title="reputation score " dir="ltr">31</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089530"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089530/create-hex-values-with-multiple-conditions-of-bitwise-operations'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="-2 votes">-2</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="13 views">13</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089530/create-hex-values-with-multiple-conditions-of-bitwise-operations" class="question-hyperlink" title="I need to create hex values that satisfy multiple betwise combinations.For example:
+
+Scenario 1:
+
+ConditionValue1 = LOWORD(valueToCreate);
++
+ConditionValue2 =(valueToCreate >> 17(ConstValue1)) ...">Create Hex Values with Multiple Conditions of Bitwise Operations</a></h3>
+ <div class="tags t-cçç t-conditional t-bitwise-operators">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/conditional" class="post-tag" title="show questions tagged 'conditional'" rel="tag">conditional</a> <a href="/questions/tagged/bitwise-operators" class="post-tag" title="show questions tagged 'bitwise-operators'" rel="tag">bitwise-operators</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089530/create-hex-values-with-multiple-conditions-of-bitwise-operations" class="started-link">asked <span title="2014-11-23 13:36:52Z" class="relativetime">50m ago</span></a>
+ <a href="/users/4282624/mv-vm">MV VM</a> <span class="reputation-score" title="reputation score " dir="ltr">1</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089377"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089377/checkbox-checked-inside-bootstrap-select-box-using-php'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="2 answers">2</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="9 views">9</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089377/checkbox-checked-inside-bootstrap-select-box-using-php" class="question-hyperlink" title="I use following code to check a checbox while doing for each loop.But checkbox not checking based on array value.I used explode to create $newsource.Actualy I had
+...">checkbox checked inside bootstrap select box using php</a></h3>
+ <div class="tags t-php">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089377/checkbox-checked-inside-bootstrap-select-box-using-php/?lastactivity" class="started-link">modified <span title="2014-11-23 13:35:47Z" class="relativetime">51m ago</span></a>
+ <a href="/users/1361922/outlyer">outlyer</a> <span class="reputation-score" title="reputation score " dir="ltr">56</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089512"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089512/follow-mvc-in-c-algo-program'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="9 views">9</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089512/follow-mvc-in-c-algo-program" class="question-hyperlink" title="I have to implement the FIFO, SSTF, and SCAN disk-scheduling algorithms and compare their performance (all algos are independent of each other) and write a driver class too. All in C++.
+
+I have to use ...">Follow MVC in C++ Algo program</a></h3>
+ <div class="tags t-cçç t-model-view-controller">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/model-view-controller" class="post-tag" title="show questions tagged 'model-view-controller'" rel="tag">model-view-controller</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089512/follow-mvc-in-c-algo-program" class="started-link">asked <span title="2014-11-23 13:34:54Z" class="relativetime">52m ago</span></a>
+ <a href="/users/3084228/junaid">Junaid</a> <span class="reputation-score" title="reputation score " dir="ltr">109</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27086267"
+
+
+ >
+ <div onclick="window.location.href='/questions/27086267/merge-sort-variant-using-link-array'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="1 vote">1</span></div>
+ <div>vote</div>
+ </div>
+ <div class="status answered-accepted" title="one of the answers was accepted as the correct answer">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="38 views">38</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27086267/merge-sort-variant-using-link-array" class="question-hyperlink" title="I was looking for the variants of Merge Sort. So my textbook says,
+
+A variant of function Merge in which No records need to be moved at all, can be implemented by use of an auxiliary array links.
+
+...">Merge sort variant: using link array</a></h3>
+ <div class="tags t-cçç t-arrays t-algorithm t-sorting">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/arrays" class="post-tag" title="show questions tagged 'arrays'" rel="tag">arrays</a> <a href="/questions/tagged/algorithm" class="post-tag" title="show questions tagged 'algorithm'" rel="tag">algorithm</a> <a href="/questions/tagged/sorting" class="post-tag" title="show questions tagged 'sorting'" rel="tag">sorting</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27086267/merge-sort-variant-using-link-array/?lastactivity" class="started-link">modified <span title="2014-11-23 13:33:22Z" class="relativetime">54m ago</span></a>
+ <a href="/users/3282056/rcgldr">rcgldr</a> <span class="reputation-score" title="reputation score " dir="ltr">1,778</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089497"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089497/angular-routing-not-working-blank-screen'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="4 views">4</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089497/angular-routing-not-working-blank-screen" class="question-hyperlink" title="I am stymied by this issue. For some reason the Angular routing is not working at all. I simply get a blank screen. All of the modules are loading, there is no error in the console, and if I enter ...">Angular Routing not working - blank screen</a></h3>
+ <div class="tags t-angularjs-routing">
+ <a href="/questions/tagged/angularjs-routing" class="post-tag" title="show questions tagged 'angularjs-routing'" rel="tag">angularjs-routing</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089497/angular-routing-not-working-blank-screen" class="started-link">asked <span title="2014-11-23 13:32:48Z" class="relativetime">54m ago</span></a>
+ <a href="/users/2690440/user2690440">user2690440</a> <span class="reputation-score" title="reputation score " dir="ltr">3</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27084955"
+
+
+ >
+ <div onclick="window.location.href='/questions/27084955/gnuplot-1d-plot'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="2 answers">2</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="12 views">12</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27084955/gnuplot-1d-plot" class="question-hyperlink" title="I have a text file of the position of particles along the x axis which changes after every collision. Example data.
+
+0 7.5 10 30 30 40
+0 9.375 10 32.5 40 40
+0 10 10 33.3333 ...">Gnuplot 1d plot</a></h3>
+ <div class="tags t-gnuplot">
+ <a href="/questions/tagged/gnuplot" class="post-tag" title="show questions tagged 'gnuplot'" rel="tag">gnuplot</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27084955/gnuplot-1d-plot/?lastactivity" class="started-link">answered <span title="2014-11-23 13:31:12Z" class="relativetime">56m ago</span></a>
+ <a href="/users/4099181/sweber">sweber</a> <span class="reputation-score" title="reputation score " dir="ltr">573</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088857"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088857/java-employee-type-with-arrays'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered-accepted" title="one of the answers was accepted as the correct answer">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="40 views">40</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088857/java-employee-type-with-arrays" class="question-hyperlink" title="package javaapplication2;
+import java.util.Scanner;
+
+public class JavaApplication2
+{
+ public static void main(String[] args)
+ {
+ person_type salespeople[] = new person_type [100];
+ ...">JAVA Employee Type with Arrays</a></h3>
+ <div class="tags t-java t-arrays t-types">
+ <a href="/questions/tagged/java" class="post-tag" title="show questions tagged 'java'" rel="tag">java</a> <a href="/questions/tagged/arrays" class="post-tag" title="show questions tagged 'arrays'" rel="tag">arrays</a> <a href="/questions/tagged/types" class="post-tag" title="show questions tagged 'types'" rel="tag">types</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088857/java-employee-type-with-arrays/?lastactivity" class="started-link">modified <span title="2014-11-23 13:29:58Z" class="relativetime">57m ago</span></a>
+ <a href="/users/1221571/eran">Eran</a> <span class="reputation-score" title="reputation score 45975" dir="ltr">46k</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089460"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089460/sqlite-c-has-made-me-confused-added-files-but-it-just-throws-errors'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="10 views">10</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089460/sqlite-c-has-made-me-confused-added-files-but-it-just-throws-errors" class="question-hyperlink" title="I have added sqlite3.c file into my project.
+And #include. Here is the code:
+
+#include &lt;sqlite3.h>
+using namespace std;
+
+int main()
+{
+
+ return 0;
+}
+
+
+I compile the program and it throws the ...">SQLite C++ has made me confused! added files but it just throws errors</a></h3>
+ <div class="tags t-cçç t-c t-sqlite t-sqlite3">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/c" class="post-tag" title="show questions tagged 'c'" rel="tag">c</a> <a href="/questions/tagged/sqlite" class="post-tag" title="show questions tagged 'sqlite'" rel="tag">sqlite</a> <a href="/questions/tagged/sqlite3" class="post-tag" title="show questions tagged 'sqlite3'" rel="tag">sqlite3</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089460/sqlite-c-has-made-me-confused-added-files-but-it-just-throws-errors" class="started-link">asked <span title="2014-11-23 13:29:15Z" class="relativetime">58m ago</span></a>
+ <a href="/users/2945958/mostafa-talebi">Mostafa Talebi</a> <span class="reputation-score" title="reputation score " dir="ltr">1,614</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-3544325"
+
+
+ >
+ <div onclick="window.location.href='/questions/3544325/input-redirection-in-gdb-mingw'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="15 votes">15</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="2 answers">2</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts warm"><span title="2945 views">3k</span></div>
+ <div class="warm">views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/3544325/input-redirection-in-gdb-mingw" class="question-hyperlink" title="I&#39;m trying to get gdb to run programs with input redirection to stdin. For example, without gdb I would run a program like this:
+
+prog &lt; input.txt
+
+
+Now in gdb, the usual way to do this is run &lt; ...">Input redirection in gdb (MinGW)</a></h3>
+ <div class="tags t-gdb t-mingw">
+ <a href="/questions/tagged/gdb" class="post-tag" title="show questions tagged 'gdb'" rel="tag">gdb</a> <a href="/questions/tagged/mingw" class="post-tag" title="show questions tagged 'mingw'" rel="tag">mingw</a>
+ </div>
+ <div class="started">
+ <a href="/questions/3544325/input-redirection-in-gdb-mingw/?lastactivity" class="started-link">modified <span title="2014-11-23 13:28:52Z" class="relativetime">58m ago</span></a>
+ <a href="/users/66516/vladr">vladr</a> <span class="reputation-score" title="reputation score 36155" dir="ltr">36.2k</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089451"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089451/show-called-triggered-build-in-console-output'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="2 views">2</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089451/show-called-triggered-build-in-console-output" class="question-hyperlink" title="Is there a way to see a secondary triggered/call project&#39;s Console Output in the originating project&#39;s Console when running?
+
+I have two Jenkins projects set up, both for different configurations of ...">Show called/triggered build in Console output</a></h3>
+ <div class="tags t-jenkins">
+ <a href="/questions/tagged/jenkins" class="post-tag" title="show questions tagged 'jenkins'" rel="tag">jenkins</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089451/show-called-triggered-build-in-console-output" class="started-link">asked <span title="2014-11-23 13:27:45Z" class="relativetime">59m ago</span></a>
+ <a href="/users/701054/avner-shahar-kashtan">Avner Shahar-Kashtan</a> <span class="reputation-score" title="reputation score " dir="ltr">5,613</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27087666"
+
+
+ >
+ <div onclick="window.location.href='/questions/27087666/loop-query-with-different-value'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="28 views">28</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27087666/loop-query-with-different-value" class="question-hyperlink" title="I have a table schedules that contains sched_id, sc_id1, sc_id2, sc_id3, sc_id4, sc_id5, sc_id6, sc_id7, sc_id8, sc_id9, sc_id10, sched_name.
+
+I have also table subject_current that has sc_id, sl_id, ...">Loop query with different value</a></h3>
+ <div class="tags t-php t-mysql">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/mysql" class="post-tag" title="show questions tagged 'mysql'" rel="tag">mysql</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27087666/loop-query-with-different-value/?lastactivity" class="started-link">modified <span title="2014-11-23 13:26:42Z" class="relativetime">1h ago</span></a>
+ <a href="/users/4283911/archie-zineg">Archie Zineg</a> <span class="reputation-score" title="reputation score " dir="ltr">1</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27083143"
+
+
+ >
+ <div onclick="window.location.href='/questions/27083143/split-string-with-emoji'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="27 views">27</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27083143/split-string-with-emoji" class="question-hyperlink" title="I need to split QString in array of all characters. It can contain emoji.
+QString: 😀 😌 😔 😑 😆 😞
+After string.split(&quot;&quot;):
+
+&quot;&quot;
+&quot;?&quot;
+&quot;?&quot;
+&quot; &quot;
+&quot;?&quot;
+&quot;?&quot;
+&quot; &quot;
+&quot;?&quot;
+&quot;?&quot;
+&quot; &quot;
+&quot; &quot;
+&quot;?&quot;
+&quot;?&quot;
+&quot; &quot;
+&quot;?&quot;
+&quot;?&quot;
+&quot; &quot;
+&quot;?&quot;
+...">Split string with emoji</a></h3>
+ <div class="tags t-cçç t-qt t-qstring t-emoji">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/qt" class="post-tag" title="show questions tagged 'qt'" rel="tag">qt</a> <a href="/questions/tagged/qstring" class="post-tag" title="show questions tagged 'qstring'" rel="tag">qstring</a> <a href="/questions/tagged/emoji" class="post-tag" title="show questions tagged 'emoji'" rel="tag">emoji</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27083143/split-string-with-emoji/?lastactivity" class="started-link">answered <span title="2014-11-23 13:25:07Z" class="relativetime">1h ago</span></a>
+ <a href="/users/2013738/simon-warta">Simon Warta</a> <span class="reputation-score" title="reputation score " dir="ltr">1,171</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089423"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089423/issues-with-ib-logfile0-and-ib-logfile1'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="6 views">6</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089423/issues-with-ib-logfile0-and-ib-logfile1" class="question-hyperlink" title="Since I last re-installed WAMP I&#39;ve been having issues with ib_logfile0 and ib_logfile1.
+
+Whenever I restart my computer, the MySQL part of WAMP refuse to start and the only way to fix this is to ...">Issues with ib_logfile0 and ib_logfile1</a></h3>
+ <div class="tags t-mysql t-wamp">
+ <a href="/questions/tagged/mysql" class="post-tag" title="show questions tagged 'mysql'" rel="tag">mysql</a> <a href="/questions/tagged/wamp" class="post-tag" title="show questions tagged 'wamp'" rel="tag">wamp</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089423/issues-with-ib-logfile0-and-ib-logfile1" class="started-link">asked <span title="2014-11-23 13:24:55Z" class="relativetime">1h ago</span></a>
+ <a href="/users/2498812/dym">Dym</a> <span class="reputation-score" title="reputation score " dir="ltr">15</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088272"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088272/can-i-pass-a-member-function-to-muparserdefinefun'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="1 vote">1</span></div>
+ <div>vote</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="12 views">12</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088272/can-i-pass-a-member-function-to-muparserdefinefun" class="question-hyperlink" title="I&#39;m using muParser to parse mathematical expressions, and I would like to add a function to the parser whose implementation will be provided by a non-static member function of a class. This excerpt ...">Can I pass a member function to mu::Parser::DefineFun()?</a></h3>
+ <div class="tags t-cçç t-boost t-cçç98 t-muparser">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/boost" class="post-tag" title="show questions tagged 'boost'" rel="tag">boost</a> <a href="/questions/tagged/c%2b%2b98" class="post-tag" title="show questions tagged 'c++98'" rel="tag">c++98</a> <a href="/questions/tagged/muparser" class="post-tag" title="show questions tagged 'muparser'" rel="tag">muparser</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088272/can-i-pass-a-member-function-to-muparserdefinefun/?lastactivity" class="started-link">answered <span title="2014-11-23 13:23:25Z" class="relativetime">1h ago</span></a>
+ <a href="/users/85371/sehe">sehe</a> <span class="reputation-score" title="reputation score 133747" dir="ltr">134k</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089207"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089207/how-to-fix-the-session-user-type-in-php'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="20 views">20</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089207/how-to-fix-the-session-user-type-in-php" class="question-hyperlink" title="I have a PHP website which allows users to profiles. The website allows users to create different types of profiles where different session types are allowed for users.so if a user having ...">How to fix the session user type in php?</a></h3>
+ <div class="tags t-php t-mysql t-session t-session-variables">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/mysql" class="post-tag" title="show questions tagged 'mysql'" rel="tag">mysql</a> <a href="/questions/tagged/session" class="post-tag" title="show questions tagged 'session'" rel="tag">session</a> <a href="/questions/tagged/session-variables" class="post-tag" title="show questions tagged 'session-variables'" rel="tag">session-variables</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089207/how-to-fix-the-session-user-type-in-php/?lastactivity" class="started-link">answered <span title="2014-11-23 13:17:23Z" class="relativetime">1h ago</span></a>
+ <a href="/users/3764367/radiobrain77">radiobrain77</a> <span class="reputation-score" title="reputation score " dir="ltr">66</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088913"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088913/error-while-accessing-boost-interprocess-shared-memory-region-using-apache-web-i'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="5 views">5</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088913/error-while-accessing-boost-interprocess-shared-memory-region-using-apache-web-i" class="question-hyperlink" title="This refers to my previous question in detail .....
+
+Pblm in runing exec using action in Php?
+
+I am trying to access shared memory region (Boost Inter-process) from web page.
+
+Test_Program.cpp
+
+ ...">Error while accessing Boost interprocess Shared Memory Region using Apache web interface</a></h3>
+ <div class="tags t-php t-cçç t-boost">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/boost" class="post-tag" title="show questions tagged 'boost'" rel="tag">boost</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088913/error-while-accessing-boost-interprocess-shared-memory-region-using-apache-web-i" class="started-link">modified <span title="2014-11-23 13:11:25Z" class="relativetime">1h ago</span></a>
+ <a href="/users/1926070/user15662">user15662</a> <span class="reputation-score" title="reputation score " dir="ltr">350</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27072321"
+
+
+ >
+ <div onclick="window.location.href='/questions/27072321/makefile-erro-file-truncated'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="28 views">28</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27072321/makefile-erro-file-truncated" class="question-hyperlink" title="i have a simple Makefile:
+
+CC=g++
+
+CFLAGS= -Wall -std=c++11 -M -MF dependencyFileName.d -c
+
+objects = Table.o LimitedTable.o aDimension.o test.o
+
+edit: $(objects)
+ g++ -o edit $(objects)
+
+test.o: ...">Makefile - Erro: file truncated</a></h3>
+ <div class="tags t-cçç t-makefile t-gçç">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/makefile" class="post-tag" title="show questions tagged 'makefile'" rel="tag">makefile</a> <a href="/questions/tagged/g%2b%2b" class="post-tag" title="show questions tagged 'g++'" rel="tag">g++</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27072321/makefile-erro-file-truncated/?lastactivity" class="started-link">modified <span title="2014-11-23 12:59:21Z" class="relativetime">1h ago</span></a>
+ <a href="/users/3460805/chnossos">Chnossos</a> <span class="reputation-score" title="reputation score " dir="ltr">2,471</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089041"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089041/avoiding-to-create-a-duplicate-object-in-php'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="18 views">18</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089041/avoiding-to-create-a-duplicate-object-in-php" class="question-hyperlink" title="Is there any way to avoid creates duplicate object name without using loop?
+
+$venue = array();
+
+if(loop for checking duplicate OBJ){
+ $temp = some_var which fetch from database;
+
+ //If ...">Avoiding to create a duplicate object in php</a></h3>
+ <div class="tags t-php t-arrays">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/arrays" class="post-tag" title="show questions tagged 'arrays'" rel="tag">arrays</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089041/avoiding-to-create-a-duplicate-object-in-php/?lastactivity" class="started-link">answered <span title="2014-11-23 12:58:55Z" class="relativetime">1h ago</span></a>
+ <a href="/users/3393831/popcm">popcm</a> <span class="reputation-score" title="reputation score " dir="ltr">21</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089209"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089209/club-website-to-multiple-members-php-email-function'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="11 views">11</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089209/club-website-to-multiple-members-php-email-function" class="question-hyperlink" title="I picked up the running of a club website a few years back, it&#39;s written in PHP and backed by a MySQL DB. Within a members only section we have the ability to email all other members (to their ...">club website to multiple members PHP email function</a></h3>
+ <div class="tags t-php t-email">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/email" class="post-tag" title="show questions tagged 'email'" rel="tag">email</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089209/club-website-to-multiple-members-php-email-function" class="started-link">asked <span title="2014-11-23 12:57:09Z" class="relativetime">1h ago</span></a>
+ <a href="/users/700056/mrchick">MrChick</a> <span class="reputation-score" title="reputation score " dir="ltr">62</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27086109"
+
+
+ >
+ <div onclick="window.location.href='/questions/27086109/spotlight-is-not-seen-opengl'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="22 views">22</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27086109/spotlight-is-not-seen-opengl" class="question-hyperlink" title="I am doing a project on spotlight in OpenGL. I guess I wrote the code correctly but I couldn&#39;t able to see a round spot in my output. Your help would be much appreciated. Here I am writing my fragment ...">SpotLight is not seen - OpenGL</a></h3>
+ <div class="tags t-cçç t-opengl t-glsl">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/opengl" class="post-tag" title="show questions tagged 'opengl'" rel="tag">opengl</a> <a href="/questions/tagged/glsl" class="post-tag" title="show questions tagged 'glsl'" rel="tag">glsl</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27086109/spotlight-is-not-seen-opengl/?lastactivity" class="started-link">answered <span title="2014-11-23 12:57:02Z" class="relativetime">1h ago</span></a>
+ <a href="/users/3530129/reto-koradi">Reto Koradi</a> <span class="reputation-score" title="reputation score 13629" dir="ltr">13.6k</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089198"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089198/are-transactions-on-top-of-normal-file-system-possible'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="14 views">14</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089198/are-transactions-on-top-of-normal-file-system-possible" class="question-hyperlink" title="It seems to be possible to implement transactions on top of normal file systems using techniques like write-ahead logging, two-phase commit, and shadow-paging.
+
+Indeed, it must have been possible ...">Are transactions on top of &ldquo;normal file system&rdquo; possible?</a></h3>
+ <div class="tags t-java t-mysql t-database t-filesystems t-apache-commons-transact">
+ <a href="/questions/tagged/java" class="post-tag" title="show questions tagged 'java'" rel="tag">java</a> <a href="/questions/tagged/mysql" class="post-tag" title="show questions tagged 'mysql'" rel="tag">mysql</a> <a href="/questions/tagged/database" class="post-tag" title="show questions tagged 'database'" rel="tag">database</a> <a href="/questions/tagged/filesystems" class="post-tag" title="show questions tagged 'filesystems'" rel="tag">filesystems</a> <a href="/questions/tagged/apache-commons-transact" class="post-tag" title="show questions tagged 'apache-commons-transact'" rel="tag">apache-commons-transact</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089198/are-transactions-on-top-of-normal-file-system-possible" class="started-link">asked <span title="2014-11-23 12:56:14Z" class="relativetime">1h ago</span></a>
+ <a href="/users/632951/pacerier">Pacerier</a> <span class="reputation-score" title="reputation score 17907" dir="ltr">17.9k</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088150"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088150/mysql-alternativ-for-join-same-table-multiple-time'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="15 views">15</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088150/mysql-alternativ-for-join-same-table-multiple-time" class="question-hyperlink" title="I used the following query to get data, but now i need to join the same table 4 or more time again, so i want to find the alternate way.
+
+SELECT t1.id,t1.name,t2.name as name2,t3.name as name3,t4.name ...">Mysql alternativ for join same table multiple time</a></h3>
+ <div class="tags t-mysql">
+ <a href="/questions/tagged/mysql" class="post-tag" title="show questions tagged 'mysql'" rel="tag">mysql</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088150/mysql-alternativ-for-join-same-table-multiple-time/?lastactivity" class="started-link">answered <span title="2014-11-23 12:55:15Z" class="relativetime">1h ago</span></a>
+ <a href="/users/833073/fthiella">fthiella</a> <span class="reputation-score" title="reputation score 22349" dir="ltr">22.3k</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089166"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089166/pdo-union-select-results-not-working'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="19 views">19</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089166/pdo-union-select-results-not-working" class="question-hyperlink" title="The query below is working fine in PhPmyadmin, there is a result of 3 rows. But i can&#39;t get it into the variables below (eg. $row[1]....)
+
+How to get the results of a UNION Select in PHP variables?
+
+...">PDO UNION SELECT results not working</a></h3>
+ <div class="tags t-php t-mysql t-pdo">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/mysql" class="post-tag" title="show questions tagged 'mysql'" rel="tag">mysql</a> <a href="/questions/tagged/pdo" class="post-tag" title="show questions tagged 'pdo'" rel="tag">pdo</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089166/pdo-union-select-results-not-working" class="started-link">asked <span title="2014-11-23 12:52:48Z" class="relativetime">1h ago</span></a>
+ <a href="/users/979746/jilco-tigchelaar">Jilco Tigchelaar</a> <span class="reputation-score" title="reputation score " dir="ltr">321</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089136"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089136/maintain-a-table-to-date-and-time'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="-1 votes">-1</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="7 views">7</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089136/maintain-a-table-to-date-and-time" class="question-hyperlink" title="I am doing a project that all the jobs depends on the date &amp; time after they posted. Anyway, I know i can capture the server date &amp; time and continue my coding.
+but, in Progress OpenEdge, I ...">Maintain a table to date and time</a></h3>
+ <div class="tags t-php t-mysql">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/mysql" class="post-tag" title="show questions tagged 'mysql'" rel="tag">mysql</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089136/maintain-a-table-to-date-and-time" class="started-link">asked <span title="2014-11-23 12:49:37Z" class="relativetime">1h ago</span></a>
+ <a href="/users/4168767/charith-dilshan">Charith Dilshan</a> <span class="reputation-score" title="reputation score " dir="ltr">1</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089060"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089060/how-can-i-use-the-bin-files-in-php-program'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="8 views">8</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089060/how-can-i-use-the-bin-files-in-php-program" class="question-hyperlink" title="I have a .bin file that use in the a php program but this is encoding
+
+my question is how I decode it and these files are what application?
+how I use them in my program.
+
+bin file:
+...">how can I use the bin files in php program?</a></h3>
+ <div class="tags t-php">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089060/how-can-i-use-the-bin-files-in-php-program" class="started-link">asked <span title="2014-11-23 12:42:41Z" class="relativetime">1h ago</span></a>
+ <a href="/users/4284233/unbl0ck3r">unbl0ck3r</a> <span class="reputation-score" title="reputation score " dir="ltr">1</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27087945"
+
+
+ >
+ <div onclick="window.location.href='/questions/27087945/strict-standards-error-when-using-autoload'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="2 votes">2</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="2 answers">2</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="16 views">16</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27087945/strict-standards-error-when-using-autoload" class="question-hyperlink" title="I am faced with an error when using __autoload().
+
+Here is an example of two simple classes in the same file:
+
+class A
+{
+ public function check($a, $b)
+ {
+ $subClass = new B();
+
+ ...">Strict standards error when using __autoload</a></h3>
+ <div class="tags t-php t-autoload">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/autoload" class="post-tag" title="show questions tagged 'autoload'" rel="tag">autoload</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27087945/strict-standards-error-when-using-autoload/?lastactivity" class="started-link">modified <span title="2014-11-23 12:41:17Z" class="relativetime">1h ago</span></a>
+ <a href="/users/964243/boann">Boann</a> <span class="reputation-score" title="reputation score 15170" dir="ltr">15.2k</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27089038"
+
+
+ >
+ <div onclick="window.location.href='/questions/27089038/not-able-to-send-the-attachment'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="9 views">9</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27089038/not-able-to-send-the-attachment" class="question-hyperlink" title="I have the following piece of code.
+This is sending mails perfectly with the required content in body
+but not able to send the attachment
+Any idea what may be wrong
+Also I have tried with both ...">Not able to send the attachment</a></h3>
+ <div class="tags t-php">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27089038/not-able-to-send-the-attachment" class="started-link">asked <span title="2014-11-23 12:40:29Z" class="relativetime">1h ago</span></a>
+ <a href="/users/1750013/rusheel-jain">Rusheel Jain</a> <span class="reputation-score" title="reputation score " dir="ltr">11</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088966"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088966/error-with-classes-and-vector-sigsegv'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="18 views">18</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088966/error-with-classes-and-vector-sigsegv" class="question-hyperlink" title="I am doing a small game , and right now I am trying to code the Characer movements , so here is the code which does the error :
+
+When I call charac.move(DOWN,terrain); , which code is
+
+void ...">Error with classes and vector : SIGSEGV</a></h3>
+ <div class="tags t-cçç t-class t-vector">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/class" class="post-tag" title="show questions tagged 'class'" rel="tag">class</a> <a href="/questions/tagged/vector" class="post-tag" title="show questions tagged 'vector'" rel="tag">vector</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088966/error-with-classes-and-vector-sigsegv" class="started-link">modified <span title="2014-11-23 12:39:09Z" class="relativetime">1h ago</span></a>
+ <a href="/users/3662394/traxys">Traxys</a> <span class="reputation-score" title="reputation score " dir="ltr">2</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27085666"
+
+
+ >
+ <div onclick="window.location.href='/questions/27085666/sscanf-function'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="27 views">27</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27085666/sscanf-function" class="question-hyperlink" title="What is the difference between using &#39;&amp;&#39; with year and day as an arguments and doesn&#39;t use it with month and weekday in sscanf() function ?
+
+#include &lt;stdio.h>
+#include &lt;stdlib.h>
+
+...">Sscanf() Function</a></h3>
+ <div class="tags t-cçç t-function">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/function" class="post-tag" title="show questions tagged 'function'" rel="tag">function</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27085666/sscanf-function/?lastactivity" class="started-link">modified <span title="2014-11-23 12:34:45Z" class="relativetime">1h ago</span></a>
+ <a href="/users/2642059/jonathan-mee">Jonathan Mee</a> <span class="reputation-score" title="reputation score " dir="ltr">1,690</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088955"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088955/how-to-use-autoloader-in-restler'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="4 views">4</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088955/how-to-use-autoloader-in-restler" class="question-hyperlink" title="I have a problem with autoloading Restler. I wanted to use a bootstrap/autoloader in my application and looked at this tutorial, which was good for me as a PHP beginner. But it doesn&#39;t work with ...">How to use autoloader in Restler?</a></h3>
+ <div class="tags t-php t-bootstrap t-composer-php t-restler t-autoloader">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/bootstrap" class="post-tag" title="show questions tagged 'bootstrap'" rel="tag">bootstrap</a> <a href="/questions/tagged/composer-php" class="post-tag" title="show questions tagged 'composer-php'" rel="tag">composer-php</a> <a href="/questions/tagged/restler" class="post-tag" title="show questions tagged 'restler'" rel="tag">restler</a> <a href="/questions/tagged/autoloader" class="post-tag" title="show questions tagged 'autoloader'" rel="tag">autoloader</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088955/how-to-use-autoloader-in-restler" class="started-link">asked <span title="2014-11-23 12:30:00Z" class="relativetime">1h ago</span></a>
+ <a href="/users/4165479/luma">LuMa</a> <span class="reputation-score" title="reputation score " dir="ltr">13</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088921"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088921/select-latest-posts-with-their-n-latest-comments'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="9 views">9</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088921/select-latest-posts-with-their-n-latest-comments" class="question-hyperlink" title="This is a common greatest-n-per-group question, but with an extra problem.
+What i want is to find the latest 20 posts of a user, and for each post, load its latest 5 (or n) comments. Moreover, for ...">Select latest posts with their n latest comments</a></h3>
+ <div class="tags t-mysql t-greatest-n-per-group">
+ <a href="/questions/tagged/mysql" class="post-tag" title="show questions tagged 'mysql'" rel="tag">mysql</a> <a href="/questions/tagged/greatest-n-per-group" class="post-tag" title="show questions tagged 'greatest-n-per-group'" rel="tag">greatest-n-per-group</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088921/select-latest-posts-with-their-n-latest-comments" class="started-link">asked <span title="2014-11-23 12:26:32Z" class="relativetime">2h ago</span></a>
+ <a href="/users/3151150/manolis">Manolis</a> <span class="reputation-score" title="reputation score " dir="ltr">9</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088916"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088916/kohana-framework-way-to-load-config-using-absolute-file-path'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="2 views">2</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088916/kohana-framework-way-to-load-config-using-absolute-file-path" class="question-hyperlink" title="How to load config from a specific folder, for example:
+ DOCROOT.&quot;assets/config/pre-load.php&quot;
+Defaults method will search in
+(APPPATH|MODPATH|SYSPATH).&quot;/config/&quot;.DOCROOT.&quot;assets/config/pre-load&quot;,
+...">Kohana Framework: way to load config using absolute file path</a></h3>
+ <div class="tags t-php t-kohana t-kohana-3 t-kohana-3û3">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/kohana" class="post-tag" title="show questions tagged 'kohana'" rel="tag">kohana</a> <a href="/questions/tagged/kohana-3" class="post-tag" title="show questions tagged 'kohana-3'" rel="tag">kohana-3</a> <a href="/questions/tagged/kohana-3.3" class="post-tag" title="show questions tagged 'kohana-3.3'" rel="tag">kohana-3.3</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088916/kohana-framework-way-to-load-config-using-absolute-file-path" class="started-link">asked <span title="2014-11-23 12:26:13Z" class="relativetime">2h ago</span></a>
+ <a href="/users/3894584/linkerxua">LINKeRxUA</a> <span class="reputation-score" title="reputation score " dir="ltr">25</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27086573"
+
+
+ >
+ <div onclick="window.location.href='/questions/27086573/when-and-why-would-i-use-fno-elide-constructors'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="20 views">20</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27086573/when-and-why-would-i-use-fno-elide-constructors" class="question-hyperlink" title="I&#39;m learning C++ and I came across the -fno-elide-constructors, below I have included the description from the man page.
+
+ -fno-elide-constructors
+ The C++ standard allows an implementation to ...">When and why would I use -fno-elide-constructors?</a></h3>
+ <div class="tags t-cçç t-compilation t-gçç t-compiler-optimization">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/compilation" class="post-tag" title="show questions tagged 'compilation'" rel="tag">compilation</a> <a href="/questions/tagged/g%2b%2b" class="post-tag" title="show questions tagged 'g++'" rel="tag">g++</a> <a href="/questions/tagged/compiler-optimization" class="post-tag" title="show questions tagged 'compiler-optimization'" rel="tag">compiler-optimization</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27086573/when-and-why-would-i-use-fno-elide-constructors/?lastactivity" class="started-link">answered <span title="2014-11-23 12:24:53Z" class="relativetime">2h ago</span></a>
+ <a href="/users/743382/hvd">hvd</a> <span class="reputation-score" title="reputation score 43828" dir="ltr">43.8k</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27087530"
+
+
+ >
+ <div onclick="window.location.href='/questions/27087530/how-to-send-array-of-values-from-android-to-php'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered-accepted" title="one of the answers was accepted as the correct answer">
+ <div class="mini-counts"><span title="2 answers">2</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="22 views">22</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27087530/how-to-send-array-of-values-from-android-to-php" class="question-hyperlink" title="I want to send array of values from android to php to insert in to MySQL database. Here i am using Array list. Should i need to use JSONObject ? if yes how do send array values through JSON ? friends ...">How to send Array of values from android to php</a></h3>
+ <div class="tags t-php t-android t-mysql t-json t-jsonarray">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/android" class="post-tag" title="show questions tagged 'android'" rel="tag"><img src="http://i.stack.imgur.com/tKsDb.png" height="16" width="18" alt="" class="sponsor-tag-img">android</a> <a href="/questions/tagged/mysql" class="post-tag" title="show questions tagged 'mysql'" rel="tag">mysql</a> <a href="/questions/tagged/json" class="post-tag" title="show questions tagged 'json'" rel="tag">json</a> <a href="/questions/tagged/jsonarray" class="post-tag" title="show questions tagged 'jsonarray'" rel="tag">jsonarray</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27087530/how-to-send-array-of-values-from-android-to-php/?lastactivity" class="started-link">modified <span title="2014-11-23 12:21:26Z" class="relativetime">2h ago</span></a>
+ <a href="/users/2810741/mohammad-rahchamani">Mohammad Rahchamani</a> <span class="reputation-score" title="reputation score " dir="ltr">704</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088858"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088858/google-api-client-php-mkdirpermission-denied'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="6 views">6</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088858/google-api-client-php-mkdirpermission-denied" class="question-hyperlink" title="Using google api client for php to fetch some data, I have encountered the following error and I can&#39;t seem to find any working solution so far.
+
+mkdir(): Permission denied
+$storageDir = ...">Google Api Client Php - mkdir():Permission denied</a></h3>
+ <div class="tags t-php t-mkdir t-google-api-php-client t-permission-denied">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/mkdir" class="post-tag" title="show questions tagged 'mkdir'" rel="tag">mkdir</a> <a href="/questions/tagged/google-api-php-client" class="post-tag" title="show questions tagged 'google-api-php-client'" rel="tag"><img src="http://i.stack.imgur.com/gem7Y.png" height="16" width="18" alt="" class="sponsor-tag-img">google-api-php-client</a> <a href="/questions/tagged/permission-denied" class="post-tag" title="show questions tagged 'permission-denied'" rel="tag">permission-denied</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088858/google-api-client-php-mkdirpermission-denied" class="started-link">asked <span title="2014-11-23 12:18:54Z" class="relativetime">2h ago</span></a>
+ <a href="/users/999885/omarsafwany">omarsafwany</a> <span class="reputation-score" title="reputation score " dir="ltr">221</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088851"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088851/multi-threaded-quicksort-giving-segfault-for-larger-input-size'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="-2 votes">-2</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="23 views">23</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088851/multi-threaded-quicksort-giving-segfault-for-larger-input-size" class="question-hyperlink" title="Here is the link to my parallel quicksort code
+http://pastebin.com/1r3pKkYC
+
+It seems to work perfectly till my input size is 1000 elements, as it increases to more than that (say 2000) it recives a ...">Multi-threaded quicksort giving segfault for larger input size?</a></h3>
+ <div class="tags t-cçç t-c t-arrays t-multithreading t-segmentation-fault">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/c" class="post-tag" title="show questions tagged 'c'" rel="tag">c</a> <a href="/questions/tagged/arrays" class="post-tag" title="show questions tagged 'arrays'" rel="tag">arrays</a> <a href="/questions/tagged/multithreading" class="post-tag" title="show questions tagged 'multithreading'" rel="tag">multithreading</a> <a href="/questions/tagged/segmentation-fault" class="post-tag" title="show questions tagged 'segmentation-fault'" rel="tag">segmentation-fault</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088851/multi-threaded-quicksort-giving-segfault-for-larger-input-size" class="started-link">asked <span title="2014-11-23 12:17:56Z" class="relativetime">2h ago</span></a>
+ <a href="/users/1665655/user1665655">user1665655</a> <span class="reputation-score" title="reputation score " dir="ltr">1</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-25562876"
+
+
+ >
+ <div onclick="window.location.href='/questions/25562876/define-a-packed-version-of-a-c-struct'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="3 votes">3</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="100 views">100</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/25562876/define-a-packed-version-of-a-c-struct" class="question-hyperlink" title="I have a C structure defined somewhere outside my code. Can I define a packed version of the same structure? If I define my own structure from the start, that is easy:
+
+struct test {
+ // members
+} ...">Define a packed version of a C struct</a></h3>
+ <div class="tags t-c t-gcc t-struct">
+ <a href="/questions/tagged/c" class="post-tag" title="show questions tagged 'c'" rel="tag">c</a> <a href="/questions/tagged/gcc" class="post-tag" title="show questions tagged 'gcc'" rel="tag">gcc</a> <a href="/questions/tagged/struct" class="post-tag" title="show questions tagged 'struct'" rel="tag">struct</a>
+ </div>
+ <div class="started">
+ <a href="/questions/25562876/define-a-packed-version-of-a-c-struct/?lastactivity" class="started-link">answered <span title="2014-11-23 12:17:51Z" class="relativetime">2h ago</span></a>
+ <a href="/users/360695/dummy00001">Dummy00001</a> <span class="reputation-score" title="reputation score " dir="ltr">6,426</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088810"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088810/global-protobuf-message'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="10 views">10</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088810/global-protobuf-message" class="question-hyperlink" title="I am experiencing problems with a protobuf message that is instantiated during static initialization. Some functions like DebugPrint() causes crashes, and serialization fails with the error that there ...">Global protobuf message</a></h3>
+ <div class="tags t-cçç t-protocol-buffers">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/protocol-buffers" class="post-tag" title="show questions tagged 'protocol-buffers'" rel="tag">protocol-buffers</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088810/global-protobuf-message" class="started-link">asked <span title="2014-11-23 12:13:16Z" class="relativetime">2h ago</span></a>
+ <a href="/users/3405652/billp">BillP</a> <span class="reputation-score" title="reputation score " dir="ltr">4</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088799"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088799/option-backlog-in-relayd-config-file'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="5 views">5</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088799/option-backlog-in-relayd-config-file" class="question-hyperlink" title="According to relayd.conf manual option backlog specifies the length of the pending connections. I need to know how this option affects the performance of relayd. Is is always better to set this number ...">Option backlog in relayd config file</a></h3>
+ <div class="tags t-c t-freebsd t-openbsd t-backlog">
+ <a href="/questions/tagged/c" class="post-tag" title="show questions tagged 'c'" rel="tag">c</a> <a href="/questions/tagged/freebsd" class="post-tag" title="show questions tagged 'freebsd'" rel="tag">freebsd</a> <a href="/questions/tagged/openbsd" class="post-tag" title="show questions tagged 'openbsd'" rel="tag">openbsd</a> <a href="/questions/tagged/backlog" class="post-tag" title="show questions tagged 'backlog'" rel="tag">backlog</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088799/option-backlog-in-relayd-config-file" class="started-link">asked <span title="2014-11-23 12:12:11Z" class="relativetime">2h ago</span></a>
+ <a href="/users/1513773/a-mashreghi">A. Mashreghi</a> <span class="reputation-score" title="reputation score " dir="ltr">16</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088764"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088764/how-to-post-the-values-to-aws-sns-url'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="3 views">3</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088764/how-to-post-the-values-to-aws-sns-url" class="question-hyperlink" title="How to post the values to AWS SNS URL Through php.
+I want to post the value to aws through aws sns url.how to use sns in php application
+">How to post the values to AWS SNS URL</a></h3>
+ <div class="tags t-php">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088764/how-to-post-the-values-to-aws-sns-url" class="started-link">asked <span title="2014-11-23 12:08:00Z" class="relativetime">2h ago</span></a>
+ <a href="/users/4284167/morasa-guru-prasad">Morasa Guru Prasad</a> <span class="reputation-score" title="reputation score " dir="ltr">1</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-26118635"
+
+
+ >
+ <div onclick="window.location.href='/questions/26118635/what-is-the-advantage-of-inittest-in-kernel'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="3 votes">3</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="38 views">38</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/26118635/what-is-the-advantage-of-inittest-in-kernel" class="question-hyperlink" title=" /* Each module must use one module_init(). */
+#define module_init(initfn) \
+ static inline initcall_t __inittest(void) \
+ { return initfn; } \
+ int ...">What is the advantage of [inittest] in Kernel</a></h3>
+ <div class="tags t-c t-linux-kernel">
+ <a href="/questions/tagged/c" class="post-tag" title="show questions tagged 'c'" rel="tag">c</a> <a href="/questions/tagged/linux-kernel" class="post-tag" title="show questions tagged 'linux-kernel'" rel="tag">linux-kernel</a>
+ </div>
+ <div class="started">
+ <a href="/questions/26118635/what-is-the-advantage-of-inittest-in-kernel/?lastactivity" class="started-link">answered <span title="2014-11-23 11:55:45Z" class="relativetime">2h ago</span></a>
+ <a href="/users/360695/dummy00001">Dummy00001</a> <span class="reputation-score" title="reputation score " dir="ltr">6,426</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-15364824"
+
+
+ >
+ <div onclick="window.location.href='/questions/15364824/stream-socket-returns-10060-apns-on-windows-server'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="2 votes">2</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="283 views">283</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/15364824/stream-socket-returns-10060-apns-on-windows-server" class="question-hyperlink" title="I&#39;m trying to send Push Notification from a PHP file on my Windows Server.
+
+My Code:
+
+&lt;?php
+$message = &#39;Hello&#39;;
+ $badge = 3;
+ $sound = &#39;default&#39;;
+ $development = true;
+
+ $payload = ...">Stream Socket returns 10060, APNS on Windows Server</a></h3>
+ <div class="tags t-php t-ios t-apple-push-notifications t-windows-server">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/ios" class="post-tag" title="show questions tagged 'ios'" rel="tag">ios</a> <a href="/questions/tagged/apple-push-notifications" class="post-tag" title="show questions tagged 'apple-push-notifications'" rel="tag">apple-push-notifications</a> <a href="/questions/tagged/windows-server" class="post-tag" title="show questions tagged 'windows-server'" rel="tag">windows-server</a>
+ </div>
+ <div class="started">
+ <a href="/questions/15364824/stream-socket-returns-10060-apns-on-windows-server/?lastactivity" class="started-link">answered <span title="2014-11-23 11:54:13Z" class="relativetime">2h ago</span></a>
+ <a href="/users/4141518/hamood">Hamood</a> <span class="reputation-score" title="reputation score " dir="ltr">12</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088622"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088622/php-get-timestamp-specific-hour-of-day'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="18 views">18</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088622/php-get-timestamp-specific-hour-of-day" class="question-hyperlink" title="I have a php script that runs in the background and needs to do nothing in certain time periods. In this case do nothing after 22:30 and start at 07:00.
+
+How do I get the timestamp of the next 07:00. ...">php get timestamp specific hour of day</a></h3>
+ <div class="tags t-php t-datetime t-sleep">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/datetime" class="post-tag" title="show questions tagged 'datetime'" rel="tag">datetime</a> <a href="/questions/tagged/sleep" class="post-tag" title="show questions tagged 'sleep'" rel="tag">sleep</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088622/php-get-timestamp-specific-hour-of-day" class="started-link">asked <span title="2014-11-23 11:50:44Z" class="relativetime">2h ago</span></a>
+ <a href="/users/3193469/user3193469">user3193469</a> <span class="reputation-score" title="reputation score " dir="ltr">7</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088613"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088613/permission-denied-writing-files-fastcgi-in-plesk-virtual-server'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="8 views">8</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088613/permission-denied-writing-files-fastcgi-in-plesk-virtual-server" class="question-hyperlink" title="I&#39;m running a website on a virtual server under Plesk v10.4. I&#39;ve changed PHP mode from Apache module to FastCGI for some subdomains. It works all ok, but error log shows me there are some permission ...">Permission denied writing files FastCGI in Plesk virtual server</a></h3>
+ <div class="tags t-php t-fastcgi t-plesk t-permission-denied t-mod-fastcgi">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/fastcgi" class="post-tag" title="show questions tagged 'fastcgi'" rel="tag">fastcgi</a> <a href="/questions/tagged/plesk" class="post-tag" title="show questions tagged 'plesk'" rel="tag">plesk</a> <a href="/questions/tagged/permission-denied" class="post-tag" title="show questions tagged 'permission-denied'" rel="tag">permission-denied</a> <a href="/questions/tagged/mod-fastcgi" class="post-tag" title="show questions tagged 'mod-fastcgi'" rel="tag">mod-fastcgi</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088613/permission-denied-writing-files-fastcgi-in-plesk-virtual-server" class="started-link">asked <span title="2014-11-23 11:49:50Z" class="relativetime">2h ago</span></a>
+ <a href="/users/1398978/sparkling">sparkling</a> <span class="reputation-score" title="reputation score " dir="ltr">174</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088598"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088598/how-can-i-customize-joomla3x-menu-for-moset-tree'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="6 views">6</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088598/how-can-i-customize-joomla3x-menu-for-moset-tree" class="question-hyperlink" title="I have downloaded Moset tree Directory Listing Component, everything is fine but i really dont like the menu design, i need similar to this pattern ...">How can i customize Joomla3X Menu for Moset Tree</a></h3>
+ <div class="tags t-php t-joomla3û0">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/joomla3.0" class="post-tag" title="show questions tagged 'joomla3.0'" rel="tag">joomla3.0</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088598/how-can-i-customize-joomla3x-menu-for-moset-tree" class="started-link">asked <span title="2014-11-23 11:48:48Z" class="relativetime">2h ago</span></a>
+ <a href="/users/4174615/shahid">Shahid</a> <span class="reputation-score" title="reputation score " dir="ltr">1</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088466"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088466/division-by-zero-when-running-php-arithmetic'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered-accepted" title="one of the answers was accepted as the correct answer">
+ <div class="mini-counts"><span title="2 answers">2</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="18 views">18</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088466/division-by-zero-when-running-php-arithmetic" class="question-hyperlink" title="im trying to do a calculation of variables but my answer is coming out with an error (Warning: Division by zero in), i assume its because by default my variables are actually Zero.
+
+&lt;?php
+ $tax ...">division by zero when running php arithmetic</a></h3>
+ <div class="tags t-php t-mysql t-math">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/mysql" class="post-tag" title="show questions tagged 'mysql'" rel="tag">mysql</a> <a href="/questions/tagged/math" class="post-tag" title="show questions tagged 'math'" rel="tag">math</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088466/division-by-zero-when-running-php-arithmetic/?lastactivity" class="started-link">answered <span title="2014-11-23 11:39:59Z" class="relativetime">2h ago</span></a>
+ <a href="/users/2496556/sazmer">saZmer</a> <span class="reputation-score" title="reputation score " dir="ltr">66</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088378"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088378/php-ziparchive-issue'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="1 vote">1</span></div>
+ <div>vote</div>
+ </div>
+ <div class="status answered-accepted" title="one of the answers was accepted as the correct answer">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="12 views">12</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088378/php-ziparchive-issue" class="question-hyperlink" title="it&#39;s the first time I&#39;m using PHP to make ZIP archives. However, I am not getting any zip files even though no error is being outputted. I did echo $zip->close and it gave 1.
+
+Can someone help me?
+
+...">PHP ZipArchive Issue</a></h3>
+ <div class="tags t-php t-ziparchive">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/ziparchive" class="post-tag" title="show questions tagged 'ziparchive'" rel="tag">ziparchive</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088378/php-ziparchive-issue/?lastactivity" class="started-link">modified <span title="2014-11-23 11:37:23Z" class="relativetime">2h ago</span></a>
+ <a href="/users/4223828/duvdevan">Duvdevan</a> <span class="reputation-score" title="reputation score " dir="ltr">63</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088445"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088445/mathematical-view-of-z-fighting'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="16 views">16</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088445/mathematical-view-of-z-fighting" class="question-hyperlink" title="to understand how z-fighting is working i got this question.
+
+Consider the point p = (0, 0, −500) given in the local coordinate system of
+the camera. Derive the depth values assigned to p in the ...">Mathematical view of z-fighting</a></h3>
+ <div class="tags t-opengl t-math t-zbuffer">
+ <a href="/questions/tagged/opengl" class="post-tag" title="show questions tagged 'opengl'" rel="tag">opengl</a> <a href="/questions/tagged/math" class="post-tag" title="show questions tagged 'math'" rel="tag">math</a> <a href="/questions/tagged/zbuffer" class="post-tag" title="show questions tagged 'zbuffer'" rel="tag">zbuffer</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088445/mathematical-view-of-z-fighting" class="started-link">asked <span title="2014-11-23 11:29:17Z" class="relativetime">2h ago</span></a>
+ <a href="/users/4284021/klotz-gro%c3%9fer">Klotz Gro&#223;er</a> <span class="reputation-score" title="reputation score " dir="ltr">1</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088377"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088377/correctly-sending-and-receiving-a-struct-through-indy-udp'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="11 views">11</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088377/correctly-sending-and-receiving-a-struct-through-indy-udp" class="question-hyperlink" title="Consider the following minimal program using Borland 2007 and Indy UDP server and client:
+
+struct DATA_PACKAGE
+{
+ int t;
+ int x;
+ int y;
+};
+
+void __fastcall TForm1::Button1Click(TObject ...">Correctly sending and receiving a struct through Indy UDP</a></h3>
+ <div class="tags t-cçç t-udp t-indy">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/udp" class="post-tag" title="show questions tagged 'udp'" rel="tag">udp</a> <a href="/questions/tagged/indy" class="post-tag" title="show questions tagged 'indy'" rel="tag">indy</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088377/correctly-sending-and-receiving-a-struct-through-indy-udp" class="started-link">asked <span title="2014-11-23 11:20:03Z" class="relativetime">3h ago</span></a>
+ <a href="/users/812262/ben-the-bear">Ben the bear</a> <span class="reputation-score" title="reputation score " dir="ltr">65</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088326"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088326/chow-to-use-windows-media-player-to-play-and-pause-mp3-file-in-a-visual-studi'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="15 views">15</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088326/chow-to-use-windows-media-player-to-play-and-pause-mp3-file-in-a-visual-studi" class="question-hyperlink" title="For a semester project, I am planning to make a media player in visual studio c++ console application which will provide the functions of play, pause, previous, next, shuffle, repeat, different ...">C++:How to use windows media player to play and pause mp3 file in a visual studio console application program?</a></h3>
+ <div class="tags t-cçç t-visual-studio-2013">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/visual-studio-2013" class="post-tag" title="show questions tagged 'visual-studio-2013'" rel="tag">visual-studio-2013</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088326/chow-to-use-windows-media-player-to-play-and-pause-mp3-file-in-a-visual-studi" class="started-link">asked <span title="2014-11-23 11:13:48Z" class="relativetime">3h ago</span></a>
+ <a href="/users/4284061/hassan-iqbal">Hassan Iqbal</a> <span class="reputation-score" title="reputation score " dir="ltr">1</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27087932"
+
+
+ >
+ <div onclick="window.location.href='/questions/27087932/php-not-sent-automatic-email-on-remote-server'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="10 views">10</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27087932/php-not-sent-automatic-email-on-remote-server" class="question-hyperlink" title="I wrote codes that should send auto email using PEAR. every thing is OK on my local MAC OS system but not working on windows based remote server. here is my codes:
+
+&lt;?php ...">PHP Not sent automatic email on remote server</a></h3>
+ <div class="tags t-php">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27087932/php-not-sent-automatic-email-on-remote-server/?lastactivity" class="started-link">answered <span title="2014-11-23 11:11:35Z" class="relativetime">3h ago</span></a>
+ <a href="/users/2515004/zoyazayn">zoyazayn</a> <span class="reputation-score" title="reputation score " dir="ltr">44</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088281"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088281/transferring-data-from-shader-fragment-vertex-to-cpu'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="4 views">4</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088281/transferring-data-from-shader-fragment-vertex-to-cpu" class="question-hyperlink" title="I am currently transferring data from CPU to fragment shader using GL_TEXTURE_3D. I want to recover all the points traced by my ray tracer using some texturing / transfer function.
+The aim is to ...">Transferring data from shader fragment/vertex to CPU</a></h3>
+ <div class="tags t-opengl t-glsl t-fragment-shader t-vertex-shader">
+ <a href="/questions/tagged/opengl" class="post-tag" title="show questions tagged 'opengl'" rel="tag">opengl</a> <a href="/questions/tagged/glsl" class="post-tag" title="show questions tagged 'glsl'" rel="tag">glsl</a> <a href="/questions/tagged/fragment-shader" class="post-tag" title="show questions tagged 'fragment-shader'" rel="tag">fragment-shader</a> <a href="/questions/tagged/vertex-shader" class="post-tag" title="show questions tagged 'vertex-shader'" rel="tag">vertex-shader</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088281/transferring-data-from-shader-fragment-vertex-to-cpu" class="started-link">asked <span title="2014-11-23 11:08:56Z" class="relativetime">3h ago</span></a>
+ <a href="/users/4284019/nishikant-deshmukh">Nishikant Deshmukh</a> <span class="reputation-score" title="reputation score " dir="ltr">1</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088271"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088271/google-search-app'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="-1 votes">-1</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="8 views">8</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088271/google-search-app" class="question-hyperlink" title="I want to make an Android app that, if the user enter one year, show information about that year. The information will be stored locally, I don&#39;t want to use any internet connection, I want everything ...">Google Search app</a></h3>
+ <div class="tags t-java t-android t-mysql t-sql t-sqlite">
+ <a href="/questions/tagged/java" class="post-tag" title="show questions tagged 'java'" rel="tag">java</a> <a href="/questions/tagged/android" class="post-tag" title="show questions tagged 'android'" rel="tag"><img src="http://i.stack.imgur.com/tKsDb.png" height="16" width="18" alt="" class="sponsor-tag-img">android</a> <a href="/questions/tagged/mysql" class="post-tag" title="show questions tagged 'mysql'" rel="tag">mysql</a> <a href="/questions/tagged/sql" class="post-tag" title="show questions tagged 'sql'" rel="tag">sql</a> <a href="/questions/tagged/sqlite" class="post-tag" title="show questions tagged 'sqlite'" rel="tag">sqlite</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088271/google-search-app" class="started-link">asked <span title="2014-11-23 11:07:52Z" class="relativetime">3h ago</span></a>
+ <a href="/users/3749583/user3749583">user3749583</a> <span class="reputation-score" title="reputation score " dir="ltr">6</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088227"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088227/propel-modelbuild-is-not-working-in-windows-8-when-used-propel-2-0'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="1 view">1</span></div>
+ <div>view</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088227/propel-modelbuild-is-not-working-in-windows-8-when-used-propel-2-0" class="question-hyperlink" title="I have installed Propel by following the instructions from here. To check that the propel is installed properly, I gave the command vendor\bin\propel a mentioned in the above link, but nothing ...">propel model:build is not working in windows 8 when used propel 2.0</a></h3>
+ <div class="tags t-php t-propel">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/propel" class="post-tag" title="show questions tagged 'propel'" rel="tag">propel</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088227/propel-modelbuild-is-not-working-in-windows-8-when-used-propel-2-0" class="started-link">asked <span title="2014-11-23 11:02:44Z" class="relativetime">3h ago</span></a>
+ <a href="/users/186148/mohang">mohang</a> <span class="reputation-score" title="reputation score " dir="ltr">870</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27085166"
+
+
+ >
+ <div onclick="window.location.href='/questions/27085166/qt-update-pixmap-of-qgraphicspixmapitem'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="18 views">18</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27085166/qt-update-pixmap-of-qgraphicspixmapitem" class="question-hyperlink" title="I am using the QGraphicsPixmapItem to show an image on the display. Now, I want to be able to update this image on the fly, but I seem to be running into some issues.
+
+This is the header file:
+
+class ...">Qt Update Pixmap of QGraphicsPixmapItem</a></h3>
+ <div class="tags t-cçç t-qt">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/qt" class="post-tag" title="show questions tagged 'qt'" rel="tag">qt</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27085166/qt-update-pixmap-of-qgraphicspixmapitem/?lastactivity" class="started-link">modified <span title="2014-11-23 11:02:18Z" class="relativetime">3h ago</span></a>
+ <a href="/users/1319187/arbitter">arbitter</a> <span class="reputation-score" title="reputation score " dir="ltr">1,233</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27033395"
+
+
+ >
+ <div onclick="window.location.href='/questions/27033395/moving-a-stdunique-ptr-into-a-stdasync'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="2 votes">2</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="45 views">45</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27033395/moving-a-stdunique-ptr-into-a-stdasync" class="question-hyperlink" title="
+ Possible Duplicate:
+
+ Visual Studio 2013 C++ - Passing std::unique_ptr to a bound function
+
+ Invoking a function taking a unique_ptr with std::async
+
+ std::async with std::unique ...">Moving a std::unique_ptr into a std::async</a></h3>
+ <div class="tags t-cçç t-cçç11 t-move t-unique-ptr t-visual-studio-2015">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/c%2b%2b11" class="post-tag" title="show questions tagged 'c++11'" rel="tag">c++11</a> <a href="/questions/tagged/move" class="post-tag" title="show questions tagged 'move'" rel="tag">move</a> <a href="/questions/tagged/unique-ptr" class="post-tag" title="show questions tagged 'unique-ptr'" rel="tag">unique-ptr</a> <a href="/questions/tagged/visual-studio-2015" class="post-tag" title="show questions tagged 'visual-studio-2015'" rel="tag">visual-studio-2015</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27033395/moving-a-stdunique-ptr-into-a-stdasync" class="started-link">modified <span title="2014-11-23 10:58:06Z" class="relativetime">3h ago</span></a>
+ <a href="/users/2642204/bartoszkp">BartoszKP</a> <span class="reputation-score" title="reputation score 16942" dir="ltr">16.9k</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088049"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088049/variable-change-without-any-direct-action'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="1 vote">1</span></div>
+ <div>vote</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="23 views">23</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088049/variable-change-without-any-direct-action" class="question-hyperlink" title="I have wrote an API as defined below. This API is used to find the index of a filename in a file system. The filesystem is coming from an Android device through mtp. What I&#39;m doing is to request a ...">Variable change without any direct action</a></h3>
+ <div class="tags t-cçç t-qt">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/qt" class="post-tag" title="show questions tagged 'qt'" rel="tag">qt</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088049/variable-change-without-any-direct-action/?lastactivity" class="started-link">answered <span title="2014-11-23 10:51:26Z" class="relativetime">3h ago</span></a>
+ <a href="/users/13422/zan-lynx">Zan Lynx</a> <span class="reputation-score" title="reputation score 24376" dir="ltr">24.4k</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088069"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088069/vs2015-preview-ndk-root-is-not-defined'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="10 views">10</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088069/vs2015-preview-ndk-root-is-not-defined" class="question-hyperlink" title="I am trying to install VS2015 preview to see how to develop a c++ android app.
+
+The online secondary installer is very slow so I cancelled it and tried to install the tools separately one by one. It ...">VS2015 preview: NDK_ROOT is not defined</a></h3>
+ <div class="tags t-cçç t-android-ndk t-vs-2015-preview">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/android-ndk" class="post-tag" title="show questions tagged 'android-ndk'" rel="tag"><img src="http://i.stack.imgur.com/tKsDb.png" height="16" width="18" alt="" class="sponsor-tag-img">android-ndk</a> <a href="/questions/tagged/vs-2015-preview" class="post-tag" title="show questions tagged 'vs-2015-preview'" rel="tag">vs-2015-preview</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088069/vs2015-preview-ndk-root-is-not-defined" class="started-link">asked <span title="2014-11-23 10:45:13Z" class="relativetime">3h ago</span></a>
+ <a href="/users/75947/fei">Fei</a> <span class="reputation-score" title="reputation score " dir="ltr">196</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088028"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088028/how-to-delete-a-line-in-mfc'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="7 views">7</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088028/how-to-delete-a-line-in-mfc" class="question-hyperlink" title="I&#39;m writing an MFC Application like Paint.
+I draw a line (by hold and move the mouse) in two steps:
+
+Step 1: Handle WM_LBUTTONDOWN and get startPoint.
+
+Step 2: Handle WM_MOUSEMOVE (with MK_LBUTTON) ...">How to delete a Line in MFC</a></h3>
+ <div class="tags t-cçç t-mfc t-gdi">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/mfc" class="post-tag" title="show questions tagged 'mfc'" rel="tag">mfc</a> <a href="/questions/tagged/gdi" class="post-tag" title="show questions tagged 'gdi'" rel="tag">gdi</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088028/how-to-delete-a-line-in-mfc" class="started-link">asked <span title="2014-11-23 10:39:07Z" class="relativetime">3h ago</span></a>
+ <a href="/users/3912592/ph%c3%b9ng-kh%c3%a1nh-hi%c3%aan">Ph&#249;ng Kh&#225;nh Hi&#234;n</a> <span class="reputation-score" title="reputation score " dir="ltr">11</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27088007"
+
+
+ >
+ <div onclick="window.location.href='/questions/27088007/how-to-covert-c-to-sparc-assembly'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="25 views">25</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27088007/how-to-covert-c-to-sparc-assembly" class="question-hyperlink" title="I need to convert/write following C program in SPARC assembly. Problem is I have converted the file using
+gcc -S SUM.C
+But it generates a file that is .S format and also when run it on ARC Simulator ...">How to covert C to SPARC assembly?</a></h3>
+ <div class="tags t-cçç t-c t-gcc t-assembly t-sparc">
+ <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/c" class="post-tag" title="show questions tagged 'c'" rel="tag">c</a> <a href="/questions/tagged/gcc" class="post-tag" title="show questions tagged 'gcc'" rel="tag">gcc</a> <a href="/questions/tagged/assembly" class="post-tag" title="show questions tagged 'assembly'" rel="tag">assembly</a> <a href="/questions/tagged/sparc" class="post-tag" title="show questions tagged 'sparc'" rel="tag">sparc</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27088007/how-to-covert-c-to-sparc-assembly" class="started-link">asked <span title="2014-11-23 10:36:20Z" class="relativetime">3h ago</span></a>
+ <a href="/users/4283990/punit-vayeda">punit vayeda</a> <span class="reputation-score" title="reputation score " dir="ltr">1</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27087896"
+
+
+ >
+ <div onclick="window.location.href='/questions/27087896/how-to-i-get-the-phone-number-from-this-result-hybridauth'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="12 views">12</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27087896/how-to-i-get-the-phone-number-from-this-result-hybridauth" class="question-hyperlink" title="Here is the JSON result from google contact API:
+
+&quot;https:\/\/www.google.com\/m8\/feeds\/contacts\/***********\/full\/18a405ad8e0c204e\/14167*****8001&quot; } ],
+ &quot;gd$email&quot;: [ { &quot;address&quot;: ...">How to I get the phone number from this result (HybridAuth)?</a></h3>
+ <div class="tags t-php t-json t-hybridauth">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/json" class="post-tag" title="show questions tagged 'json'" rel="tag">json</a> <a href="/questions/tagged/hybridauth" class="post-tag" title="show questions tagged 'hybridauth'" rel="tag">hybridauth</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27087896/how-to-i-get-the-phone-number-from-this-result-hybridauth" class="started-link">modified <span title="2014-11-23 10:32:14Z" class="relativetime">3h ago</span></a>
+ <a href="/users/2338862/thomas">Thomas</a> <span class="reputation-score" title="reputation score 16925" dir="ltr">16.9k</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27087869"
+
+
+ >
+ <div onclick="window.location.href='/questions/27087869/phing-dbdeploy-possible-to-run-scripts-if-specific-db-deltas-are-executed'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="3 views">3</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27087869/phing-dbdeploy-possible-to-run-scripts-if-specific-db-deltas-are-executed" class="question-hyperlink" title="Let&#39;s say I have a production database which needs to implement a significant set of deltas, which require me to run a php script to update some of the actual data so that it confirms to the new ...">PHING + dbdeploy: possible to run scripts if specific db deltas are executed?</a></h3>
+ <div class="tags t-php t-phing t-dbdeploy">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/phing" class="post-tag" title="show questions tagged 'phing'" rel="tag">phing</a> <a href="/questions/tagged/dbdeploy" class="post-tag" title="show questions tagged 'dbdeploy'" rel="tag">dbdeploy</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27087869/phing-dbdeploy-possible-to-run-scripts-if-specific-db-deltas-are-executed" class="started-link">asked <span title="2014-11-23 10:20:43Z" class="relativetime">4h ago</span></a>
+ <a href="/users/581851/blacktie24">blacktie24</a> <span class="reputation-score" title="reputation score " dir="ltr">1,446</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27087703"
+
+
+ >
+ <div onclick="window.location.href='/questions/27087703/delete-sql-statement-in-php-doesnt-work'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status answered">
+ <div class="mini-counts"><span title="1 answer">1</span></div>
+ <div>answer</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="23 views">23</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27087703/delete-sql-statement-in-php-doesnt-work" class="question-hyperlink" title="I hava a problem deleting a row in database using SQL query in PHP, I&#39;ve tried to find out if my code is wrong and I&#39;ve tried re-factoring my code many times but I still have problem with my SQL code
+
+...">DELETE sql statement in php doesn&#39;t work</a></h3>
+ <div class="tags t-php t-mysql t-delete">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/mysql" class="post-tag" title="show questions tagged 'mysql'" rel="tag">mysql</a> <a href="/questions/tagged/delete" class="post-tag" title="show questions tagged 'delete'" rel="tag">delete</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27087703/delete-sql-statement-in-php-doesnt-work/?lastactivity" class="started-link">answered <span title="2014-11-23 10:10:59Z" class="relativetime">4h ago</span></a>
+ <a href="/users/3040225/rama-krishna-ayinumpudi">Rama Krishna Ayinumpudi</a> <span class="reputation-score" title="reputation score " dir="ltr">10</span>
+ </div>
+ </div>
+</div>
+
+
+<div class="question-summary narrow"
+ id="question-summary-27087618"
+
+
+ >
+ <div onclick="window.location.href='/questions/27087618/limit-on-page-display-only'" class="cp">
+ <div class="votes">
+ <div class="mini-counts"><span title="0 votes">0</span></div>
+ <div>votes</div>
+ </div>
+ <div class="status unanswered">
+ <div class="mini-counts"><span title="0 answers">0</span></div>
+ <div>answers</div>
+ </div>
+ <div class="views">
+ <div class="mini-counts"><span title="22 views">22</span></div>
+ <div>views</div>
+ </div>
+ </div>
+ <div class="summary">
+
+ <h3><a href="/questions/27087618/limit-on-page-display-only" class="question-hyperlink" title="I want to ask if there would be a solution to query the MySQL database trough PHP to load only 1 page from a set of results but in the pagination to still display like [1] 2 3 4 5... So when the user ...">Limit on page display only</a></h3>
+ <div class="tags t-php t-mysql">
+ <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/mysql" class="post-tag" title="show questions tagged 'mysql'" rel="tag">mysql</a>
+ </div>
+ <div class="started">
+ <a href="/questions/27087618/limit-on-page-display-only" class="started-link">asked <span title="2014-11-23 09:49:46Z" class="relativetime">4h ago</span></a>
+ <a href="/users/4213390/daniel-treica">Daniel Treica</a> <span class="reputation-score" title="reputation score " dir="ltr">3</span>
+ </div>
+ </div>
+</div>
+
+ </div>
+</div>
+
+ <br class="cbt"/>
+ <h2 class="bottom-notice" data-loc="2">Looking for more? Browse the <a href="/questions">complete list of questions</a>, or <a href="/tags">popular tags</a>. Help us answer <a href="/unanswered">unanswered questions</a>.</h2>
+<script>
+ StackExchange.ready(function () { StackExchange.question.initShareLinks();});
+</script>
+</div>
+ <div id="sidebar">
+ <div class="module community-bulletin" data-tracker="cb=1">
+ <div class="related">
+ <div class="bulletin-title">
+ Featured on Meta
+ </div>
+ <hr />
+ <div class="spacer">
+ <div class="bulletin-item-type">
+ <a href="http://meta.stackoverflow.com/questions/277584/feedback-requested-search-engine-usage" class="question-hyperlink">
+<div class="favicon favicon-stackoverflowmeta" title="Meta Stack Overflow"></div> </a>
+ </div>
+ <div class="bulletin-item-content">
+ <a href="http://meta.stackoverflow.com/questions/277584/feedback-requested-search-engine-usage" class="question-hyperlink">Feedback Requested: Search Engine Usage</a>
+ </div>
+ <br class="cbt" />
+ </div>
+ <div class="spacer">
+ <div class="bulletin-item-type">
+ <a href="http://meta.stackoverflow.com/questions/277200/feedback-requested-stack-overflow-design-update" class="question-hyperlink">
+<div class="favicon favicon-stackoverflowmeta" title="Meta Stack Overflow"></div> </a>
+ </div>
+ <div class="bulletin-item-content">
+ <a href="http://meta.stackoverflow.com/questions/277200/feedback-requested-stack-overflow-design-update" class="question-hyperlink">Feedback Requested: Stack Overflow design update</a>
+ </div>
+ <br class="cbt" />
+ </div>
+ <div class="bulletin-title">
+ Hot Meta Posts
+ </div>
+ <hr />
+ <div class="spacer">
+ <div class="bulletin-item-type">
+ <span title="Vote score (upvotes - downvotes)">49</span>
+ </div>
+ <div class="bulletin-item-content">
+ <a href="http://meta.stackoverflow.com/questions/277602/should-it-be-more-obvious-that-stack-snippets-are-only-meant-for-html-css-js" class="question-hyperlink">Should it be more obvious that stack snippets are only meant for HTML/CSS/JS?</a>
+ </div>
+ <br class="cbt" />
+ </div>
+ <div class="spacer">
+ <div class="bulletin-item-type">
+ <span title="Vote score (upvotes - downvotes)">5</span>
+ </div>
+ <div class="bulletin-item-content">
+ <a href="http://meta.stackoverflow.com/questions/277673/why-does-the-you-earned-the-privilege-achievement-not-disappear-when-i-lose-re" class="question-hyperlink">Why does the &ldquo;You earned the privilege&rdquo; achievement not disappear when I lose&hellip;</a>
+ </div>
+ <br class="cbt" />
+ </div>
+ </div>
+</div>
+
+
+
+<div class="module" id="interesting-tags">
+
+ <h4 id="h-interesting-tags">Favorite Tags</h4>
+ <a id="edit-interesting">edit</a>
+ <div id="interestingTags"><a href="/questions/tagged/c" class="post-tag" title="show questions tagged 'c'" rel="tag">c</a> <a href="/questions/tagged/c%2b%2b" class="post-tag" title="show questions tagged 'c++'" rel="tag">c++</a> <a href="/questions/tagged/php" class="post-tag" title="show questions tagged 'php'" rel="tag">php</a> <a href="/questions/tagged/mysql" class="post-tag" title="show questions tagged 'mysql'" rel="tag">mysql</a> <a href="/questions/tagged/opengl" class="post-tag" title="show questions tagged 'opengl'" rel="tag">opengl</a> <a href="/questions/tagged/d" class="post-tag" title="show questions tagged 'd'" rel="tag">d</a> </div>
+ <span id="add-interesting"></span>
+ <a id="addInterestingTag" class="dno">Add a favorite tag</a><br />
+ <p id="tag-subscriptions" class="ar dno" style="margin-top: 10px;"><a href="http://stackexchange.com/filters">advanced tag subscriptions &#187;</a></p>
+ <div id="ignored-wrapper" class="dno">
+ <h4 id="h-ignored-tags">Ignored Tags</h4>
+
+ <div id="ignoredTags"><a href="/questions/tagged/.net" class="post-tag" title="show questions tagged '.net'" rel="tag">.net</a> <a href="/questions/tagged/asp" class="post-tag" title="show questions tagged 'asp'" rel="tag">asp</a> <a href="/questions/tagged/c%23" class="post-tag" title="show questions tagged 'c#'" rel="tag">c#</a>
+ </div>
+ <span id="add-ignored"></span>
+ <a id="addIgnoredTag" class="dno">Add an ignored tag</a>
+ <div class="dno">
+
+ <div><input type="radio" name="hideIgnored" id="hideIgnoredTrue"/><label for="hideIgnoredTrue">&nbsp;Hide questions in your ignored tags</label></div>
+ <div><input type="radio" name="hideIgnored" id="hideIgnoredFalse" checked="checked" /><label for="hideIgnoredFalse">&nbsp;Gray out questions in your ignored tags</label></div>
+ </div>
+ </div>
+ <p id="tag-pref-prefs" class="ar dno" style="margin-top: 10px;"><a href="/users/preferences/3486065">set tag preferences &#187;</a></p>
+</div>
+
+<script>
+ StackExchange.ready(function() {
+ StackExchange.tagPreferences.applyPrefs(true, []);
+ });
+</script>
+ <div class="everyonelovesstackoverflow" id="careers2">
+ </div>
+ <div id="hireme">
+ <script>
+window.careers_adurl="//careers.stackoverflow.com/ad/companyjs",window.careers_cssurl="//cdn-careers.sstatic.net/careers/gethired/company.min.css?v=23eb103c5bb3",window.careers_cssurl2="//cdn-careers.sstatic.net/careers/gethired/sidebar.min.css?v=42e1b750f0fa",window.careers_adselector="#hireme",StackExchange.ready(function(){$.ajax({url:"//cdn-careers.sstatic.net/careers/gethired/company-loader.min.js?v=d38fcbba30f7",dataType:"script",cache:!1})}); </script>
+
+ </div>
+
+<div id="hot-network-questions" class="module">
+ <h4>
+ <a href="//stackexchange.com/questions?tab=hot"
+ class="js-gps-track"
+ data-gps-track="posts_hot_network.click({ item_type:1, location:8 })">
+ Hot Network Questions
+ </a>
+ </h4>
+ <ul>
+ <li >
+ <div class="favicon favicon-puzzling" title="Puzzling Stack Exchange"></div><a href="http://puzzling.stackexchange.com/questions/5453/counting-numbers-with-3-dice" class="js-gps-track" data-gps-track="site.switch({ item_type:8, target_site:559 }); posts_hot_network.click({ item_type:2, location:8 })">
+ Counting numbers with 3 dice
+ </a>
+
+ </li>
+ <li >
+ <div class="favicon favicon-ell" title="English Language Learners Stack Exchange"></div><a href="http://ell.stackexchange.com/questions/40159/what-does-thy-name-is-mean" class="js-gps-track" data-gps-track="site.switch({ item_type:8, target_site:481 }); posts_hot_network.click({ item_type:2, location:8 })">
+ what does &quot;______, thy name is ______&quot; mean?
+ </a>
+
+ </li>
+ <li >
+ <div class="favicon favicon-electronics" title="Electrical Engineering Stack Exchange"></div><a href="http://electronics.stackexchange.com/questions/139829/why-do-we-need-bulky-filters-at-the-input-stage-of-smps-designs" class="js-gps-track" data-gps-track="site.switch({ item_type:8, target_site:135 }); posts_hot_network.click({ item_type:2, location:8 })">
+ Why do we need bulky filters at the input stage of SMPS designs?
+ </a>
+
+ </li>
+ <li >
+ <div class="favicon favicon-scifi" title="Science Fiction &amp; Fantasy Stack Exchange"></div><a href="http://scifi.stackexchange.com/questions/72925/why-is-there-no-electricity-available-in-the-walking-dead-series" class="js-gps-track" data-gps-track="site.switch({ item_type:8, target_site:186 }); posts_hot_network.click({ item_type:2, location:8 })">
+ Why is there no electricity available in the Walking Dead Series?
+ </a>
+
+ </li>
+ <li >
+ <div class="favicon favicon-worldbuilding" title="Worldbuilding Stack Exchange"></div><a href="http://worldbuilding.stackexchange.com/questions/4444/whats-the-most-logical-shape-for-my-city-in-space-space-station" class="js-gps-track" data-gps-track="site.switch({ item_type:8, target_site:579 }); posts_hot_network.click({ item_type:2, location:8 })">
+ What&#39;s the most logical shape for my city in space (space station)?
+ </a>
+
+ </li>
+ <li >
+ <div class="favicon favicon-security" title="Information Security Stack Exchange"></div><a href="http://security.stackexchange.com/questions/73402/how-to-stop-email-spoofing" class="js-gps-track" data-gps-track="site.switch({ item_type:8, target_site:162 }); posts_hot_network.click({ item_type:2, location:8 })">
+ How to Stop Email Spoofing
+ </a>
+
+ </li>
+ <li >
+ <div class="favicon favicon-unix" title="Unix &amp; Linux Stack Exchange"></div><a href="http://unix.stackexchange.com/questions/169521/regex-searching-for-only-character-pairs" class="js-gps-track" data-gps-track="site.switch({ item_type:8, target_site:106 }); posts_hot_network.click({ item_type:2, location:8 })">
+ regex - Searching for only character pairs
+ </a>
+
+ </li>
+ <li >
+ <div class="favicon favicon-codereview" title="Code Review Stack Exchange"></div><a href="http://codereview.stackexchange.com/questions/70598/using-stdunique-ptr-and-stdmove" class="js-gps-track" data-gps-track="site.switch({ item_type:8, target_site:196 }); posts_hot_network.click({ item_type:2, location:8 })">
+ Using std::unique_ptr and std::move
+ </a>
+
+ </li>
+ <li >
+ <div class="favicon favicon-photo" title="Photography Stack Exchange"></div><a href="http://photo.stackexchange.com/questions/56851/how-should-i-respond-to-a-lowball-offer-for-commercial-use-of-one-of-my-photogra" class="js-gps-track" data-gps-track="site.switch({ item_type:8, target_site:61 }); posts_hot_network.click({ item_type:2, location:8 })">
+ How should I respond to a lowball offer for commercial use of one of my photographs?
+ </a>
+
+ </li>
+ <li >
+ <div class="favicon favicon-math" title="Mathematics Stack Exchange"></div><a href="http://math.stackexchange.com/questions/1034880/poisson-process-finding-the-sum-of-interarrivial-time" class="js-gps-track" data-gps-track="site.switch({ item_type:8, target_site:69 }); posts_hot_network.click({ item_type:2, location:8 })">
+ Poisson Process: Finding the sum of interarrivial time
+ </a>
+
+ </li>
+ <li >
+ <div class="favicon favicon-academia" title="Academia Stack Exchange"></div><a href="http://academia.stackexchange.com/questions/32024/is-it-fine-to-cancel-class-on-days-before-national-holidays-due-to-low-attendan" class="js-gps-track" data-gps-track="site.switch({ item_type:8, target_site:415 }); posts_hot_network.click({ item_type:2, location:8 })">
+ Is it fine to cancel class on days before national holidays, due to low attendance?
+ </a>
+
+ </li>
+ <li >
+ <div class="favicon favicon-puzzling" title="Puzzling Stack Exchange"></div><a href="http://puzzling.stackexchange.com/questions/5451/an-easy-riddle-for-once" class="js-gps-track" data-gps-track="site.switch({ item_type:8, target_site:559 }); posts_hot_network.click({ item_type:2, location:8 })">
+ An easy riddle, for once
+ </a>
+
+ </li>
+ <li class="dno js-hidden">
+ <div class="favicon favicon-stackoverflow" title="Stack Overflow"></div><a href="http://stackoverflow.com/questions/27063678/compiler-not-detecting-obviously-uninitialized-variable" class="js-gps-track" data-gps-track="site.switch({ item_type:8, target_site:1 }); posts_hot_network.click({ item_type:2, location:8 })">
+ Compiler not detecting obviously uninitialized variable
+ </a>
+
+ </li>
+ <li class="dno js-hidden">
+ <div class="favicon favicon-workplace" title="The Workplace Stack Exchange"></div><a href="http://workplace.stackexchange.com/questions/36368/a-co-worker-is-using-my-cup" class="js-gps-track" data-gps-track="site.switch({ item_type:8, target_site:423 }); posts_hot_network.click({ item_type:2, location:8 })">
+ A co-worker is using my cup
+ </a>
+
+ </li>
+ <li class="dno js-hidden">
+ <div class="favicon favicon-math" title="Mathematics Stack Exchange"></div><a href="http://math.stackexchange.com/questions/1035014/indefinite-integrals-question" class="js-gps-track" data-gps-track="site.switch({ item_type:8, target_site:69 }); posts_hot_network.click({ item_type:2, location:8 })">
+ Indefinite Integrals question
+ </a>
+
+ </li>
+ <li class="dno js-hidden">
+ <div class="favicon favicon-codereview" title="Code Review Stack Exchange"></div><a href="http://codereview.stackexchange.com/questions/70620/small-command-line-helper-tool" class="js-gps-track" data-gps-track="site.switch({ item_type:8, target_site:196 }); posts_hot_network.click({ item_type:2, location:8 })">
+ Small command-line helper tool
+ </a>
+
+ </li>
+ <li class="dno js-hidden">
+ <div class="favicon favicon-mathematica" title="Mathematica Stack Exchange"></div><a href="http://mathematica.stackexchange.com/questions/66354/parametric-contour-plot" class="js-gps-track" data-gps-track="site.switch({ item_type:8, target_site:387 }); posts_hot_network.click({ item_type:2, location:8 })">
+ Parametric contour plot?
+ </a>
+
+ </li>
+ <li class="dno js-hidden">
+ <div class="favicon favicon-codegolf" title="Programming Puzzles &amp; Code Golf Stack Exchange"></div><a href="http://codegolf.stackexchange.com/questions/41752/balanced-ternary-converter" class="js-gps-track" data-gps-track="site.switch({ item_type:8, target_site:200 }); posts_hot_network.click({ item_type:2, location:8 })">
+ Balanced Ternary Converter
+ </a>
+
+ </li>
+ <li class="dno js-hidden">
+ <div class="favicon favicon-scifi" title="Science Fiction &amp; Fantasy Stack Exchange"></div><a href="http://scifi.stackexchange.com/questions/73248/is-there-evidence-of-purely-artistic-works-in-middle-earth" class="js-gps-track" data-gps-track="site.switch({ item_type:8, target_site:186 }); posts_hot_network.click({ item_type:2, location:8 })">
+ Is there evidence of purely artistic works in Middle Earth?
+ </a>
+
+ </li>
+ <li class="dno js-hidden">
+ <div class="favicon favicon-graphicdesign" title="Graphic Design Stack Exchange"></div><a href="http://graphicdesign.stackexchange.com/questions/42306/why-do-two-perfectly-adjacent-rectangles-create-black-or-white-lines-in-between" class="js-gps-track" data-gps-track="site.switch({ item_type:8, target_site:174 }); posts_hot_network.click({ item_type:2, location:8 })">
+ Why do two perfectly adjacent rectangles create black or white lines in between as if they were overlapping or not exactly adjacent?
+ </a>
+
+ </li>
+ <li class="dno js-hidden">
+ <div class="favicon favicon-puzzling" title="Puzzling Stack Exchange"></div><a href="http://puzzling.stackexchange.com/questions/5370/i-am-precious-to-you-but-kill-me-you-do-what-is-my-name" class="js-gps-track" data-gps-track="site.switch({ item_type:8, target_site:559 }); posts_hot_network.click({ item_type:2, location:8 })">
+ I am precious to you, but kill me you do. ... What is my name?
+ </a>
+
+ </li>
+ <li class="dno js-hidden">
+ <div class="favicon favicon-tex" title="TeX - LaTeX Stack Exchange"></div><a href="http://tex.stackexchange.com/questions/213571/acro-adjusting-the-spacing-after-acl-if-the-long-form-has-italic-shape" class="js-gps-track" data-gps-track="site.switch({ item_type:8, target_site:85 }); posts_hot_network.click({ item_type:2, location:8 })">
+ Acro: Adjusting the spacing after \acl if the long form has italic shape
+ </a>
+
+ </li>
+ <li class="dno js-hidden">
+ <div class="favicon favicon-superuser" title="Super User"></div><a href="http://superuser.com/questions/843847/error-booting-windows-7-system-random-name-is-compressed-press-ctrlaltde" class="js-gps-track" data-gps-track="site.switch({ item_type:8, target_site:3 }); posts_hot_network.click({ item_type:2, location:8 })">
+ Error booting Windows 7 system: &quot;&lt;random name&gt; is compressed / Press Ctrl+Alt+Del to restart&quot;
+ </a>
+
+ </li>
+ <li class="dno js-hidden">
+ <div class="favicon favicon-english" title="English Language &amp; Usage Stack Exchange"></div><a href="http://english.stackexchange.com/questions/209746/what-is-the-word-to-describe-a-situation-when-rival-gangs-come-together-to-figur" class="js-gps-track" data-gps-track="site.switch({ item_type:8, target_site:97 }); posts_hot_network.click({ item_type:2, location:8 })">
+ What is the word to describe a situation when rival gangs come together to figure out who is stronger?
+ </a>
+
+ </li>
+ </ul>
+
+ <a href="#"
+ class="show-more js-show-more js-gps-track"
+ data-gps-track="posts_hot_network.click({ item_type:3, location:8 })">
+ more hot questions
+ </a>
+</div>
+
+ </div>
+
+<div id="feed-link">
+ <div id="feed-link-text">
+ <a href="/feeds" title="the 30 most recent questions">
+ <span class="feed-icon"></span>recent questions feed
+ </a>
+ </div>
+</div>
+
+
+ </div>
+ </div>
+ <div id="footer" class="categories">
+ <div class="footerwrap">
+ <div id="footer-menu">
+ <div class="top-footer-links">
+ <a href="/tour">tour</a>
+ <a href="/help">help</a>
+ <a href="http://blog.stackoverflow.com?blb=1">blog</a>
+ <a href="http://chat.stackoverflow.com">chat</a>
+ <a href="http://data.stackexchange.com">data</a>
+ <a href="http://stackexchange.com/legal">legal</a>
+ <a href="http://stackexchange.com/legal/privacy-policy">privacy policy</a>
+ <a href="http://stackexchange.com/work-here">work here</a>
+ <a href="http://stackexchange.com/mediakit">advertising info</a>
+
+ <a onclick='StackExchange.switchMobile("on")'>mobile</a>
+ <b><a href="/contact">contact us</a></b>
+ <b><a href="http://meta.stackoverflow.com">feedback</a></b>
+
+ </div>
+ <div id="footer-sites">
+ <table>
+ <tr>
+ <th colspan=3>
+ Technology
+ </th>
+ <th >
+ Life / Arts
+ </th>
+ <th >
+ Culture / Recreation
+ </th>
+ <th >
+ Science
+ </th>
+ <th >
+ Other
+ </th>
+ </tr>
+ <tr>
+ <td>
+ <ol>
+ <li><a href="//stackoverflow.com" title="professional and enthusiast programmers">Stack Overflow</a></li>
+ <li><a href="//serverfault.com" title="professional system and network administrators">Server Fault</a></li>
+ <li><a href="//superuser.com" title="computer enthusiasts and power users">Super User</a></li>
+ <li><a href="//webapps.stackexchange.com" title="power users of web applications">Web Applications</a></li>
+ <li><a href="//askubuntu.com" title="Ubuntu users and developers">Ask Ubuntu</a></li>
+ <li><a href="//webmasters.stackexchange.com" title="pro webmasters">Webmasters</a></li>
+ <li><a href="//gamedev.stackexchange.com" title="professional and independent game developers">Game Development</a></li>
+ <li><a href="//tex.stackexchange.com" title="users of TeX, LaTeX, ConTeXt, and related typesetting systems">TeX - LaTeX</a></li>
+ </ol></td><td><ol>
+ <li><a href="//programmers.stackexchange.com" title="professional programmers interested in conceptual questions about software development">Programmers</a></li>
+ <li><a href="//unix.stackexchange.com" title="users of Linux, FreeBSD and other Un*x-like operating systems.">Unix &amp; Linux</a></li>
+ <li><a href="//apple.stackexchange.com" title="power users of Apple hardware and software">Ask Different (Apple)</a></li>
+ <li><a href="//wordpress.stackexchange.com" title="WordPress developers and administrators">WordPress Development</a></li>
+ <li><a href="//gis.stackexchange.com" title="cartographers, geographers and GIS professionals">Geographic Information Systems</a></li>
+ <li><a href="//electronics.stackexchange.com" title="electronics and electrical engineering professionals, students, and enthusiasts">Electrical Engineering</a></li>
+ <li><a href="//android.stackexchange.com" title="enthusiasts and power users of the Android operating system">Android Enthusiasts</a></li>
+ <li><a href="//security.stackexchange.com" title="Information security professionals">Information Security</a></li>
+ </ol></td><td><ol>
+ <li><a href="//dba.stackexchange.com" title="database professionals who wish to improve their database skills and learn from others in the community">Database Administrators</a></li>
+ <li><a href="//drupal.stackexchange.com" title="Drupal developers and administrators">Drupal Answers</a></li>
+ <li><a href="//sharepoint.stackexchange.com" title="SharePoint enthusiasts">SharePoint</a></li>
+ <li><a href="//ux.stackexchange.com" title="user experience researchers and experts">User Experience</a></li>
+ <li><a href="//mathematica.stackexchange.com" title="users of Mathematica">Mathematica</a></li>
+ <li><a href="//salesforce.stackexchange.com" title="Salesforce administrators, implementation experts, developers and anybody in-between">Salesforce</a></li>
+
+ <li>
+ <a href="http://stackexchange.com/sites#technology" class="more">
+ more (13)
+ </a>
+ </li>
+ </ol>
+ </td>
+ <td>
+ <ol>
+ <li><a href="//photo.stackexchange.com" title="professional, enthusiast and amateur photographers">Photography</a></li>
+ <li><a href="//scifi.stackexchange.com" title="science fiction and fantasy enthusiasts">Science Fiction &amp; Fantasy</a></li>
+ <li><a href="//graphicdesign.stackexchange.com" title="Graphic Design professionals, students, and enthusiasts">Graphic Design</a></li>
+ <li><a href="//cooking.stackexchange.com" title="professional and amateur chefs">Seasoned Advice (cooking)</a></li>
+ <li><a href="//diy.stackexchange.com" title="contractors and serious DIYers">Home Improvement</a></li>
+ <li><a href="//money.stackexchange.com" title="people who want to be financially literate">Personal Finance &amp; Money</a></li>
+ <li><a href="//academia.stackexchange.com" title="academics and those enrolled in higher education">Academia</a></li>
+
+ <li>
+ <a href="http://stackexchange.com/sites#lifearts" class="more">
+ more (10)
+ </a>
+ </li>
+ </ol>
+ </td>
+ <td>
+ <ol>
+ <li><a href="//english.stackexchange.com" title="linguists, etymologists, and serious English language enthusiasts">English Language &amp; Usage</a></li>
+ <li><a href="//skeptics.stackexchange.com" title="scientific skepticism">Skeptics</a></li>
+ <li><a href="//judaism.stackexchange.com" title="those who base their lives on Jewish law and tradition and anyone interested in learning more">Mi Yodeya (Judaism)</a></li>
+ <li><a href="//travel.stackexchange.com" title="road warriors and seasoned travelers">Travel</a></li>
+ <li><a href="//christianity.stackexchange.com" title="committed Christians, experts in Christianity and those interested in learning more">Christianity</a></li>
+ <li><a href="//gaming.stackexchange.com" title="passionate videogamers on all platforms">Arqade (gaming)</a></li>
+ <li><a href="//bicycles.stackexchange.com" title="people who build and repair bicycles, people who train cycling, or commute on bicycles">Bicycles</a></li>
+ <li><a href="//rpg.stackexchange.com" title="gamemasters and players of tabletop, paper-and-pencil role-playing games">Role-playing Games</a></li>
+
+ <li>
+ <a href="http://stackexchange.com/sites#culturerecreation" class="more">
+ more (21)
+ </a>
+ </li>
+ </ol>
+ </td>
+ <td>
+ <ol>
+ <li><a href="//math.stackexchange.com" title="people studying math at any level and professionals in related fields">Mathematics</a></li>
+ <li><a href="//stats.stackexchange.com" title="people interested in statistics, machine learning, data analysis, data mining, and data visualization">Cross Validated (stats)</a></li>
+ <li><a href="//cstheory.stackexchange.com" title="theoretical computer scientists and researchers in related fields">Theoretical Computer Science</a></li>
+ <li><a href="//physics.stackexchange.com" title="active researchers, academics and students of physics">Physics</a></li>
+ <li><a href="//mathoverflow.net" title="professional mathematicians">MathOverflow</a></li>
+
+ <li>
+ <a href="http://stackexchange.com/sites#science" class="more">
+ more (7)
+ </a>
+ </li>
+ </ol>
+ </td>
+ <td>
+ <ol>
+ <li><a href="//stackapps.com" title="apps, scripts, and development with the Stack Exchange API">Stack Apps</a></li>
+ <li><a href="//meta.stackexchange.com" title="meta-discussion of the Stack Exchange family of Q&amp;A websites">Meta Stack Exchange</a></li>
+ <li><a href="//area51.stackexchange.com" title="proposing new sites in the Stack Exchange network">Area 51</a></li>
+ <li><a href="//careers.stackoverflow.com?utm_source=stackoverflow.com&amp;utm_medium=site-ui&amp;utm_campaign=footerlink">Stack Overflow Careers</a></li>
+
+ </ol>
+ </td>
+ </tr>
+</table>
+ </div>
+ </div>
+
+ <div id="copyright">
+ site design / logo &#169; 2014 stack exchange inc; user contributions licensed under <a href="http://creativecommons.org/licenses/by-sa/3.0/" rel="license">cc by-sa 3.0</a> with <a href="http://blog.stackoverflow.com/2009/06/attribution-required/" rel="license">attribution required</a>
+ </div>
+ <div id="svnrev">
+ rev 2014.11.22.2040
+ </div>
+
+ </div>
+ </div>
+ <noscript>
+ <div id="noscript-warning">Stack Overflow works best with JavaScript enabled<img src="http://pixel.quantserve.com/pixel/p-c1rF4kxgLUzNc.gif" alt="" class="dno"></div>
+ </noscript>
+
+ <script>
+ (function (i, s, o, g, r, a, m) {
+ i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () { (i[r].q = i[r].q || []).push(arguments) }, i[r].l = 1 * new Date(); a = s.createElement(o),
+ m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m);
+ })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
+ ga('create', 'UA-5620270-1');
+ ga('set', 'dimension1', '131032');
+
+ ga('send', 'pageview');
+ var _qevents = _qevents || [],
+ _comscore = _comscore || [];
+ (function () {
+ var ssl='https:'==document.location.protocol,
+ s=document.getElementsByTagName('script')[0],
+ qc=document.createElement('script');
+ qc.async=true;
+ qc.src=(ssl?'https://secure':'http://edge')+'.quantserve.com/quant.js';
+ s.parentNode.insertBefore(qc, s);
+ var sc=document.createElement('script');
+ sc.async=true;
+ sc.src=(ssl?'https://sb':'http://b') + '.scorecardresearch.com/beacon.js';
+ s.parentNode.insertBefore(sc, s);
+ })();
+ _comscore.push({ c1: "2", c2: "17440561" });
+ _qevents.push({ qacct: "p-c1rF4kxgLUzNc" });
+ </script>
+
+ </body>
+</html> \ No newline at end of file
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/sample_testsuite.json b/vendor/github.com/tdewolff/minify/benchmarks/sample_testsuite.json
new file mode 100644
index 0000000..30930e7
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/sample_testsuite.json
@@ -0,0 +1,3315 @@
+{
+ "a": {
+ "6U閆崬밺뀫颒myj츥휘:$薈mY햚#rz飏+玭V㭢뾿愴YꖚX亥ᮉ푊\u0006垡㐭룝\"厓ᔧḅ^Sqpv媫\"⤽걒\"˽Ἆ?ꇆ䬔未tv{DV鯀Tἆl凸g\\㈭ĭ즿UH㽤": null,
+ "b茤z\\.N": [[
+ "ZL:ᅣዎ*Y|猫劁櫕荾Oj为1糕쪥泏S룂w࡛Ᏺ⸥蚙)",
+ {
+ "\"䬰ỐwD捾V`邀⠕VD㺝sH6[칑.:醥葹*뻵倻aD\"": true,
+ "e浱up蔽Cr෠JK軵xCʨ<뜡癙Y獩ケ齈X/螗唻?<蘡+뷄㩤쳖3偑犾&\\첊xz坍崦ݻ鍴\"嵥B3㰃詤豺嚼aqJ⑆∥韼@\u000b㢊\u0015L臯.샥": false,
+ "l?Ǩ喳e6㔡$M꼄I,(3᝝縢,䊀疅뉲B㴔傳䂴\u0088㮰钘ꜵ!ᅛ韽>": -5514085325291784739,
+ "o㮚?\"춛㵉<\/﬊ࠃ䃪䝣wp6ἀ䱄[s*S嬈貒pᛥ㰉'돀": [{
+ "(QP윤懊FI<ꃣ『䕷[\"珒嶮?%Ḭ壍಻䇟0荤!藲끹bd浶tl\u2049#쯀@僞": {"i妾8홫": {
+ ",M맃䞛K5nAㆴVN㒊햬$n꩑&ꎝ椞阫?/ṏ세뉪1x쥼㻤㪙`\"$쟒薟B煌܀쨝ଢ଼2掳7㙟鴙X婢\u0002": "Vዉ菈᧷⦌kﮞఈnz*<?੃'ahhCFX(\u0007⮊E㭍䱾Gxꥩr❣.洎",
+ "뻴5bDD큯O傆盓왻U?ꞅꐊN鐭᧢τ\"迳豲8\u001b䃥ꂻ䴺ྸH筴,": {
+ "\"L鸔SE㬡XV&~͎'놅蔞눶l匛?'.K氁\\ƢẨ疇mΊ'꽳&!鹠m'|{P痊 秄쒿u\u00111䋧gϩx7t丗D䊨䠻z0.A0": -1.50139930144708198E18,
+ "8鋂뛷?첒B☚>﷜FM\"荭7ꍀ-VR<\/';䁙E9$䩉\f @s?퍪o3^衴cඎ䧪aK鼟q䆨c{䳠5mᒲՙ蘹ᮩ": {
+ "F㲷JGo⯍P덵x뒳p䘧☔\"+ꨲ吿JfR㔹)4n紬G练Q፞!C|": true,
+ "p^㫮솎oc.೚A㤠??r\u000f)⾽⌲們M2.䴘䩳:⫭胃\\፾@Fᭌ\\K": false,
+ "蟌Tk愙潦伩": {
+ "a<\/@ᾛ慂侇瘎": -7271305752851720826,
+ "艓藬/>၄ṯ,XW~㲆w": {"E痧郶)㜓ha朗!N赻瞉駠uC\u20ad辠<Ve?폱!Im䁎搄:*s 9諚Prᵾ뒰髶B̌qWA8梸vS⫊⢳{t㺲q㺈랊뮣RqK밢쳪": [
+ false,
+ {
+ "\u000b=>x퓮⣫P1ࠫLMMX'M刼唳됤": null,
+ "P쓫晥%k覛ዩIUᇸ滨:噐혲lMR5䋈V梗>%幽u頖\\)쟟": null,
+ "eg+昉~矠䧞难\b?gQ쭷筝\\eꮠNl{ಢ哭|]Mn銌╥zꖘzⱷ⭤ᮜ^": [
+ -1.30142114406914976E17,
+ -1.7555215491128452E-19,
+ null,
+ "渾㨝ߏ牄귛r?돌?w[⚞ӻ~廩輫㼧/",
+ -4.5737191805302129E18,
+ null,
+ "xy࿑M[oc셒竓Ⓔx?뜓y䊦>-D켍(&&?XKkc꩖ﺸᏋ뵞K伕6ী)딀P朁yW揙?훻魢傎EG碸9類៌g踲C⟌aEX舲:z꒸许",
+ 3808159498143417627,
+ null,
+ {"m試\u20df1{G8&뚈h홯J<\/": {
+ "3ஸ厠zs#1K7:rᥞoꅔꯧ&띇鵼鞫6跜#赿5l'8{7㕳(b/j\"厢aq籀ꏚ\u0015厼稥": [
+ -2226135764510113982,
+ true,
+ null,
+ {
+ "h%'맞S싅Hs&dl슾W0j鿏MםD놯L~S-㇡R쭬%": null,
+ "⟓咔謡칲\u0000孺ꛭx旑檉㶆?": null,
+ "恇I転;￸B2Y`z\\獓w,놏濐撐埵䂄)!䶢D=ഭ㴟jyY": {
+ "$ࡘt厛毣ൢI芁<겿骫⫦6tr惺a": [
+ 6.385779736989334E-20,
+ false,
+ true,
+ true,
+ [
+ -6.891946211462334E-19,
+ null,
+ {
+ "]-\\Ꟑ1/薓❧Ὂ\\l牑\u0007A郃)阜ᇒᓌ-塯`W峬G}SDb㬨Q臉⮻빌O鞟톴첂B㺱<ƈmu챑J㴹㷳픷Oㆩs": {
+ "\"◉B\"pᶉt骔J꩸ᄇᛐi╰栛K쉷㉯鐩!㈐n칍䟅難>盥y铿e୔蒏M貹ヅ8嘋퀯䉶ጥ㏢殊뻳\"絧╿ꉑ䠥?∃蓊{}㣣Gk긔H1哵峱": false,
+ "6.瀫cN䇮F㧺?\\椯=ڈT䘆4␘8qv": -3.5687501019676885E-19,
+ "Q?yऴr혴{஀䳘p惭f1ﹸ䅷䕋贲<ྃᄊ繲hq\\b|#QSTs1c-7(䵢\u2069匏絘ꯉ:l毴汞t戀oෟᵶ뮱፣-醇Jx䙬䐁햢0࣫ᡁgrㄛ": "\u0011_xM/蘇Chv;dhA5.嗀绱V爤ﰦi뵲M",
+ "⏑[\"ugoy^儣횎~U\\섯겜論l2jw஌yD腅̂\u0019": true,
+ "ⵯɇ䐲᫿࢚!㯢l샅笶戮1꣖0Xe": null,
+ "劅f넀識b宁焊E찓橵G!ʱ獓뭔雩괛": [{"p⹣켙[q>燣䍃㞽ᩲx:쓤삘7玑퇼0<\/q璂ᑁ[Z\\3䅵䧳\u0011㤧|妱緒C['췓Yꞟ3Z鳱雼P錻BU씧U`ᢶg蓱>.1ӧ譫'L_5V䏵Ц": [
+ false,
+ false,
+ {"22䂍盥N霂얢<F8꼵7Gసyh뀍g᦭ꄢx硴嬢\u001a?E괆T|;7犟\"Wt%䐩O⨵t&#ᬋK'蜍Ძ揔⾠鲂T멷靃\u0018䓞cE": {"f=䏏츜瞾zw?孡鏣\\铀᫞yẆg(\u0011M6(s2]`ਫ": [[[{
+ "'y몱纣4S@\\,i㷯럹Ua充Tᣢ9躘Zଞ쥿䐊s<\/刎\\\"뉦-8/": "蜑.X0꭛낢륹i젨ꚁ<8?s볕蝡|Q✬᯦@\\G㑢屿Mn졾J굤⥟JW뤵苑r쁕툄嵵?⾥O",
+ "^1挲~[n귆誈央碠멪gI洷": -8214236471236116548,
+ "sሣ%娌暡clr蟜㑓2\u000bS❟_X㨔⚴5~蔷ꀇ|Xu㬖,꤭卹r(g믇쩍%췸앙|栣U\\2]䤉+啠菡ꯎT鉹m\n/`SzDᅼ鞶": 1.1217523390167132E-19,
+ "u톇=黚\\ ꂮ췵L>躰e9⑩_뵜斌n@B}$괻Yᐱ@䧋V\"☒-諯cV돯ʠ": true,
+ "Ű螧ᔼ檍鍎땒딜qꄃH뜣<獧ूCY吓⸏>XQ㵡趌o끬k픀빯a(ܵ甏끆୯/6Nᪧ}搚ᆚ짌P牰泱鈷^d꣟#L삀\"㕹襻;k㸊\\f+": true,
+ "쎣\",|⫝̸阊x庿k잣v庅$鈏괎炔k쬪O_": [
+ "잩AzZGz3v愠ꉈⵎ?㊱}S尳௏p\r2>췝IP䘈M)w|\u000eE",
+ -9222726055990423201,
+ null,
+ [
+ false,
+ {"´킮'뮤쯽Wx讐V,6ᩪ1紲aႈ\u205czD": [
+ -930994432421097536,
+ 3157232031581030121,
+ "l貚PY䃛5@䭄<nW\u001e",
+ [
+ 3.801747732605161E18,
+ [
+ null,
+ false,
+ {
+ "": 4.0442013775147072E16,
+ "2J[sᡪ㞿|n'#廲꯬乞": true,
+ "B[繰`\\㏏a̼㨀偛㽓<\/꥖ᵈO让\r43⡩徑ﬓ๨ﮕx:㣜o玐ꉟぢC珵὆ᓞ쇓Qs氯였9駵q혃Ljꂔ<\/昺+t䐋༻猙c沪~櫆bpJ9UᏐ:칣妙!皗F4㑄탎䕀櫳振讓": 7.3924182188256287E18,
+ "H磵ai委曷n柋T<\/勿F&:ꣴfU@㿗榻Lb+?퍄sp\"᪟~>귻m㎮琸f": 1.0318894506812084E-19,
+ "࢜⩢Ш䧔1肽씮+༎ᣰ闺馺窃䕨8Mƶq腽xc(៯夐J5굄䕁Qj_훨/~価.䢵慯틠퇱豠㼇Qﵘ$DuSp(8Uญ<\/ಟ룴𥳐ݩ$": 8350772684161555590,
+ "ㆎQ䄾\u001bpᩭ${[諟^^骴᤮b^ㅥI┧T㉇⾞\"绦<AYJ⒃-oF<\/蛎mm;obh婃ᦢ": false,
+ "䔤䣈?汝.p襟&d㱅\\Jᚠ@?O첁ࢽ휔VR蔩|㒢柺": [[
+ "-ꕨ岓棻r@鿆^3~䪤Ѐ狼︌ﹲ\\᝸MlE쵠Q+",
+ null,
+ false,
+ 3346674396990536343,
+ null,
+ {
+ "": null,
+ "/䏨S쨑,&繷㉥8C엮赸3馢|뇲{鄎ꗇqFﶉ雕UD躢?Ꟛအ꽡[hᕱᗅ㦋쭞Mユ茍?L槽암V#성唐%㣕嘵\\ڹ(嘏躿&q": [
+ -1364715155337673920,
+ false,
+ -8197733031775379251,
+ "E팗鮲JwH\\觡܈᜝\"+뉞娂N휗v噙၂깼\u001dD帒l%-斔N",
+ -3.844267973858711E-20,
+ [{"쬯(褈Q 蟚뿢 /ⱖ㻥\u0017/?v邘䃡0U.Z1x?鯔V尠8Em<": [[[
+ null,
+ [
+ null,
+ -5841406347577698873,
+ "킷\"S⋄籞繗솸ᵣ浵w쑿ퟗ7nᎏx3앙z㘌쿸I葥覯㬏0ᆝb汆狺뷘ႀnꋋ",
+ -1227911573141158702,
+ {
+ "u㉮PᾺV鵸A\\g*ࡗ9슟晭+ͧↀ쿅H\u001c꾣犓}癇恛ᗬ黩䟘X梑鐆e>r䰂f矩'-7䡭桥Dz兔V9谶居㺍ᔊ䩯덲.\u001eL0ὅㅷ釣": [{
+ "<쯬J卷^숞u࠯䌗艞R9닪g㐾볎a䂈歖意:%鐔|ﵤ|y}>;2,覂⶚啵tb*仛8乒㓶B࿠㯉戩oX 貘5V嗆렽낁߼4h䧛ꍺM空\\b꿋貼": 8478577078537189402,
+ "VD*|吝z~h譺aᯒ": {
+ "YI췢K<\/濳xNne玗rJo쾘3핰鴊\"↱AR:ࢷ\"9?\"臁說)?誚ꊏe)_D翾W?&F6J@뺾ꍰNZ醊Z쾈വH嶿?炫㷱鬰M겈<bS}㎥l|刖k": {"H7鷮퇢_k": [
+ true,
+ "s㟑瀭좾쮀⑁Y찺k맢戲쀸俻ກ6儮끗扖puߖꜻ馶rꈞ痘?3ྚ畊惘䎗\"vv)*臔웅鿈䧲^v,껛㰙J <ᚶ5",
+ 7950276470944656796,
+ 4.9392301536234746E17,
+ -4796050478201554639,
+ "yꬴc<3㻚",
+ "o塁\u20a4蒵鮬裢CᴧnB㭱f.",
+ false,
+ [
+ false,
+ "㡐弑V?瀆䰺q!출㇞yᘪ꼼(IS~Ka 烿ꟿ샕桤\u0005HQҹ㯪罂q萾⚇懋⦕둡v",
+ 1862560050083946970,
+ "\u20b6[|(뭹gꍒ펉O轄Dl묽]ﯨ髯QEbA㒾m@롴礠㕓2땫n6ْ엘঵篳R잷꙲m색摪|@㿫5aK设f胭r8/NI4춫栵\\꯬2]",
+ false,
+ {
+ "\u000b7*㙛燏.~?䔊p搕e_拺艿뷍f{ꔻ1s驙`$Ė戧?q⋬沭?塷᭚蹀unoa5": {
+ "S귯o紞㾕ᅶ侏銇12|ʟ畴iNAo?|Sw$M拲գ㭄紧螆+,梔": null,
+ "㭚0?xB疱敻ேBPwv뾃熉(ӠpJ]갢\"Bj'\u0016GE椱<\/zgៅx黢礇h},M9ﴦ?LḨ": "Si B%~㬒E",
+ "핇㉊살㍢숨~ȪRo䦅D桺0z]﬽蠆c9ᣨyPP㿷U~㞐?쯟퍸宒뉆U|}㉓郾ࣻ*櫎꼪䁗s?~7\u001e㘔h9{aឋ}:㶒P8": [{"\\R囡쐬nN柋琍؛7칾 :㶃衇徜V 深f1淍♠i?3S角폞^ᆞ\u20e8ṰD\u0007秡+躒臔&-6": {
+ "䨑g.fh㔗=8!\"狿ൻLU^뻱g䲚㻐'W}k欤?๒鲇S꧗䫾$ĥ피": -794055816303360636,
+ "外頮詋~텡竆繃䏩苨뾺朁꼃瘹f*㉀枙NH/\u2027ꢁ}j묎vペq︉식뜡Od5 N顯ି烅仟Qfㆤ嚢(i䬅c;맧?嶰㩼츱獡?-": {
+ "e݆㍡⬬'2㻒?U篲鿄\"隻Ҭ5NꭰꤺBꀈ拾᩺[刯5곑Na램ﴦ዆]㝓qw钄\u001b\"Y洊䗿祏塥迵[⼞⠳P$꠱5먃0轢`": [{"獰E賝﫚b먭N긆Ⰹ史2逶ꜛ?H짉~?P}jj}侷珿_T>᭨b,⻁鈵P䕡䀠८ⱄ홎鄣": {
+ "@?k2鶖㋮\"Oರ K㨇廪儲\u0017䍾J?);\b*묀㗠섳햭1MC V": null,
+ "UIICP!BUA`ᢈ㋸~袩㗪⾒=fB﮴l1ꡛ죘R辂여ҳ7쮡<䩲`熕8頁": 4481809488267626463,
+ "Y?+8먙ᚔ鋳蜩럶1㥔y璜౩`": [
+ null,
+ 1.2850335807501874E-19,
+ "~V2",
+ 2035406654801997866,
+ {
+ "<숻1>\"": -8062468865199390827,
+ "M㿣E]}qwG莎Gn᝶(ꔙ\\D⬲iꇲs寢t駇S뀡ꢜ": false,
+ "pꝤ㎏9W%>M;-U璏f(^j1?&RB隧 忓b똊E": "#G?C8.躬ꥯ'?냪#< 渟&헿란zpo왓Kj}鷧XﻘMツb䕖;㪻",
+ "vE풤幉xz뱕쫥Ug㦲aH} ᣟp:鬼Yᰟ<Fɋ잣緂頒⺏䉲瑑䅂,C~ޅG!f熢-B7~9Pqࡢ[츑#3ꕎ,Öඳ聁⩅㵧춀뿍xy䌏͂tdj!箧᳆|9蚡돬": -2.54467378964089632E17,
+ "䵈䅦5빖,궆-:໿댾仫0ᙚyᦝhqᚄ": null,
+ "侯Y\"湛졯劇U셎YX灍ⅸ2伴|筧\\䁒㶶᷏쁑Waᦵᗱ㜏늾膠<Jc63<G\u20fe䇹66僣k0O\"_@U": null,
+ "姪y$#s漴JH璌Ӊ脛J㝾펔ﹴoꈶ㚸PD:薠쏖%說ថ蹂1]⾕5튄": {
+ "᝾Huw3䮅如쿺䍟嫝]<鰨ݷ?꯯䫓傩|ᐶස媽\\澒≡闢": "Mm\"쏇ᯄ졽\"楇<\/ꥆ흭局n隴@鿣w⠊4P贈徎W㊋;䤞'.팇蒁䡴egpx嗎wஅ獗堮ᛐnˁ︖䀤4噙?໚郝᱋ޘॎt恑姫籕殥陃\"4[ꝬqL4Wꠎx",
+ "ℇj遌5B뒚\" U": "硄ꏘ{憠굏:&t䌨m Cઌ쿣鞛XFꠟs䝭ﶃ\"格a0x闊昵吲L\\杚聈aꁸj싹獅\"灟ﱡ馆*굖糠<ꔏ躎",
+ "톌賠弳ꟍb\"螖X50sĶ晠3f秂坯Iⓟ:萘": 5.573183333596288E18,
+ "%䴺": [[[[
+ -6957233336860166165,
+ false,
+ null,
+ {
+ "\"\\௮茒袀ᕥ23ୃ괶?䕎.嚲◉㏞L+ᵡ艱hL콇붆@": null,
+ "%螥9ꭌ<\/-t": true,
+ ",9|耢椸䁓Xk죱\u0015$Ώ鲞[?엢ᝲ혪즈ⴂ▂ℴ㗯\"g뺘\\ꍜ#\u0002ヮ}ሎ芲P[鹮轧@냲䃦=#(": 2.78562909315899616E17,
+ "R?H䧰ⵇ<,憰쮼Q總iR>H3镔ᴚ斦\\鏑r*2橱G⼔F/.j": true,
+ "RK좬뎂a홠f*f㱉ᮍ⦋潙㨋Gu곌SGI3I뿐\\F',)t`荁蘯囯ﮉ裲뇟쥼_ገ驪▵撏ᕤV": 1.52738225997956557E18,
+ "^k굲䪿꠹B逤%F㱢漥O披M㽯镞竇霒i꼂焅륓\u00059=皫之눃\u2047娤閍銤唫ၕb<\/w踲䔼u솆맚,䝒ᝳ'/it": "B餹饴is権ꖪ怯ꦂẉဎt\"!凢谵⧿0\\<=(uL䷍刨쑪>俆揓Cy襸Q힆䆭涷<\/ᐱ0ɧ䗾䚹\\ኜ?ꄢᇘ`䴢{囇}᠈䴥X4퓪檄]ꥷ/3謒ሴn+g騍X",
+ "GgG꽬[(嫓몍6\u0004궍宩㙻/>\u0011^辍dT腪hxǑ%ꊇk,8(W⧂結P鬜O": [{
+ "M㴾c>\\ᓲ\u0019V{>ꤩ혙넪㭪躂TS-痴໸闓⍵/徯O.M㏥ʷD囎⧔쁳휤T??鉬뇙=#ꢫ숣BX䭼<\/d똬졬g榿)eꨋﯪ좇첻<?2K)": null,
+ "Z17縬z]愀䖌 ᾋBCg5딒국憍꾓aⲷ턷u:U촳驿?雺楶\u0001\u001c{q*ᰗ苑B@k揰z.*蓗7ረIm\"Oᱍ@7?_": true,
+ "㺃Z<": -4349275766673120695,
+ "휃䠂fa塆ffixKe'덬鏗੄뺾w࠾鑎k땢m*႑햞鐮6攊&虜h黚,Y䱳Sﭼ둺pN6": [
+ false,
+ "IΎ䣲,\"ᬮ˪癘P~Qlnx喁Sᮔ༬˨I珌m䜛酛\u0003iꐸ㦧cQ帲晼D' \\(粋wQcN\\뵰跈",
+ [
+ "D0\\L?M1쥍Kaꏌsd+盌귤憊tz䌣댐בO坂wϢ%ὒgp,Ai⎧ᶆI餾ꦍ棩嘅᳉怴%m]ၶis纖D凜镧o심b U",
+ {
+ "?଼\u0011Rv&^[+匚I趈T媫\u0010.䥤ᆯ1q僤HydⲰl㒽K'ᅾiౕ豲초딨@\u0013J'쪪VD౼P4Ezg#8*㋤W馓]c쿯8": false,
+ "c/擯X5~JmK䵶^쐎ച|B|u[솝(X뚤6v}W㤘⠛aR弌臌쾭諦eⒷ僡-;㩩⭖ⷴ徆龄갬{䱓ᥩ!﯏⊚ᇨ<v燡露`:볉癮꨽り★Ax7Ꮀ譥~舑\\Vꍋ\"$)v": "e&sFF쬘OBd슊寮f蠛জ봞mn~锆竒G脁\"趵G刕䕳&L唽붵<\/I,X팚B⍥X,kԇҗ眄_慡:U附ᓚA蕧>\u001a\u0011\";~쓆BH4坋攊7힪",
+ "iT:L闞椕윚*滛gI≀Wਟඊ'ꢆ縺뱹鮚Nꩁ᧬蕼21줧\\䋯``⍐\\㏱鳨": 1927052677739832894,
+ "쮁缦腃g]礿Y㬙 fヺSɪ꾾N㞈": [
+ null,
+ null,
+ {
+ "!t,灝Y 1䗉罵?c饃호䉂Cᐭ쒘z(즽sZG㬣sഖE4뢜㓕䏞丮Qp簍6EZឪ겛fx'ꩱQ0罣i{k锩*㤴㯞r迎jTⲤ渔m炅肳": [
+ -3.3325685522591933E18,
+ [{"㓁5]A䢕1룥BC?Ꙍ`r룔Ⳛ䙡u伲+\u0001്o": [
+ null,
+ 4975309147809803991,
+ null,
+ null,
+ {"T팘8Dﯲ稟MM☻㧚䥧/8ﻥ⥯aXLaH\"顾S☟耲ît7fS෉놁뮔/ꕼ䓈쁺4\\霶䠴ᩢ<\/t4?죵>uD5➶༆쉌럮⢀秙䘥\u20972ETR3濡恆vB? ~鸆\u0005": {
+ "`閖m璝㥉b뜴?Wf;?DV콜\u2020퍉౓擝宏ZMj3mJ먡-傷뱙yח㸷꥿ ໘u=M읝!5吭L4v\\?ǎ7C홫": null,
+ "|": false,
+ "~Ztᛋ䚘\\擭㗝傪W陖+㗶qᵿ蘥ᙄp%䫎)}=⠔6ᮢS湟-螾-mXH?cp": 448751162044282216,
+ "\u209fad놹j檋䇌ᶾ梕㉝bוּ<d䗱:줰M酄\u0000X#_r獢A饓ꍗُKo_跔?ᪧ嵜鼲<": null,
+ "ꆘ)ubI@h@洭Ai㜎䏱k\u0003?T䉐3间%j6j棍j=❁\\U毮ᬹ*8䀔v6cpj⭬~Q꿾뺶펵悡!쩭厝l六㽫6퇓ޭ2>": {"?苴ꩠD䋓帘5騱qﱖPF?☸珗顒yU ᡫcb䫎 S@㥚gꮒ쎘泴멖\\:I鮱TZ듒ᶨQ3+f7캙\"?\f풾\\o杞紟﻽M.⏎靑OP": [
+ -2.6990368911551596E18,
+ [{"䒖@<᰿<\/⽬tTr腞&G%᳊秩蜰擻f㎳?S㵧\r*k뎾-乢겹隷j軛겷0룁鮁": {")DO0腦:춍逿:1㥨่!蛍樋2": [{
+ ",ꌣf侴笾m๫ꆽ?1?U?\u0011ꌈꂇ": {
+ "x捗甠nVq䅦w`CD⦂惺嘴0I#vỵ} \\귂S끴D얾?Ԓj溯\"v餄a": {
+ "@翙c⢃趚痋i\u0015OQ⍝lq돆Y0pࢥ3쉨䜩^<8g懥0w)]䊑n洺o5쭝QL댊랖L镈Qnt⪟㒅십q헎鳒⮤眉ᔹ梠@O縠u泌ㄘb榚癸XޔFtj;iC": false,
+ "I&뱋゘|蓔䔕측瓯%6ᗻHW\\N1貇#?僐ᗜgh᭪o'䗈꽹Rc욏/蔳迄༝!0邔䨷푪8疩)[쭶緄㇈୧ፐ": {
+ "B+:ꉰ`s쾭)빼C羍A䫊pMgjdx䐝Hf9᥸W0!C樃'蘿f䫤סи\u0017Jve? 覝f둀⬣퓉Whk\"஼=չﳐ皆笁BIW虨쫓F廰饞": -642906201042308791,
+ "sb,XcZ<\/m㉹ ;䑷@c䵀s奤⬷7`ꘖ蕘戚?Feb#輜}p4nH⬮eKL트}": [
+ "RK鳗z=袤Pf|[,u욺",
+ "Ẏᏻ罯뉋⺖锅젯㷻{H䰞쬙-쩓D]~\u0013O㳢gb@揶蔉|kᦂ❗!\u001ebM褐sca쨜襒y⺉룓",
+ null,
+ null,
+ true,
+ -1.650777344339075E-19,
+ false,
+ "☑lꄆs힨꤇]'uTന⌳농].1⋔괁沰\"IWഩ\u0019氜8쟇䔻;3衲恋,窌z펏喁횗?4?C넁问?ᥙ橭{稻Ⴗ_썔",
+ "n?]讇빽嗁}1孅9#ꭨ靶v\u0014喈)vw祔}룼쮿I",
+ -2.7033457331882025E18,
+ {
+ ";⚃^㱋x:饬ኡj'꧵T☽O㔬RO婎?향ᒭ搩$渣y4i;(Q>꿘e8q": "j~錘}0g;L萺*;ᕭꄮ0l潛烢5H▄쳂ꏒוֹꙶT犘≫x閦웧v",
+ "~揯\u2018c4職렁E~ᑅቚꈂ?nq뎤.:慹`F햘+%鉎O瀜쟏敛菮⍌浢<\/㮺紿P鳆ࠉ8I-o?#jﮨ7v3Dt赻J9": null,
+ "ࣝW䌈0ꍎqC逖,횅c၃swj;jJS櫍5槗OaB>D踾Y": {"㒰䵝F%?59.㍈cᕨ흕틎ḏ㋩B=9IېⓌ{:9.yw}呰ㆮ肒᎒tI㾴62\"ዃ抡C﹬B<\/<EO꽓ᇕu&鋫\\禞퐹u꒍.7훯ಶ2䩦͉ᶱf깵ᷣ늎": [
+ 5.5099570884646902E18,
+ "uQN濿m臇<%?谣鮢s]]x0躩慌闋<;( 鋤.0ᠵd1#벘a:Gs?햷'.)ㅴ䞟琯崈FS@O㌛ᓬ抢큌ើ냷쿟툥IZn[惵ꐧ3뙍[&v憙J>촋jo朣",
+ [
+ -7675533242647793366,
+ {"ᙧ呃:[㒺쳀쌡쏂H稈㢤\u001dᶗGG-{GHྻຊꡃ哸䵬;$?&d\\⥬こN圴됤挨-'ꕮ$PU%?冕눖i魁q騎Q": [
+ false,
+ [[
+ 7929823049157504248,
+ [[
+ true,
+ "Z菙\u0017'eꕤ᱕l,0\\X\u001c[=雿8蠬L<\/낲긯W99g톉4ퟋb㝺\u0007劁'!麕Q궈oW:@X၎z蘻m絙璩귓죉+3柚怫tS捇蒣䝠-擶D[0=퉿8)q0ٟ",
+ "唉\nFA椭穒巯\\䥴䅺鿤S#b迅獘 ﶗ꬘\\?q1qN犠pX꜅^䤊⛤㢌[⬛휖岺q唻ⳡ틍\"㙙Eh@oA賑㗠y必Nꊑᗘ",
+ -2154220236962890773,
+ -3.2442003245397908E18,
+ "Wᄿ筠:瘫퀩?o貸q⊻(᎞KWf宛尨h^残3[U(='橄",
+ -7857990034281549164,
+ 1.44283696979059942E18,
+ null,
+ {"ꫯAw跭喀 ?_9\"Aty背F=9缉ྦྷ@;?^鞀w:uN㘢Rỏ": [
+ 7.393662029337442E15,
+ 3564680942654233068,
+ [
+ false,
+ -5253931502642112194,
+ "煉\\辎ೆ罍5⒭1䪁䃑s䎢:[e5}峳ﴱn騎3?腳Hyꏃ膼N潭錖,Yᝋ˜YAၓ㬠bG렣䰣:",
+ true,
+ null,
+ {
+ "⒛'P&%죮|:⫶춞": -3818336746965687085,
+ "钖m<\/0ݎMtF2Pk=瓰୮洽겎.": [[
+ -8757574841556350607,
+ -3045234949333270161,
+ null,
+ {
+ "Ꮬr輳>⫇9hU##w@귪A\\C 鋺㘓ꖐ梒뒬묹㹻+郸嬏윤'+g<\/碴,}ꙫ>손;情d齆J䬁ຩ撛챝탹/R澡7剌tꤼ?ặ!`⏲睤\u00002똥଴⟏": null,
+ "\u20f2ܹe\\tAꥍư\\x当뿖렉禛;G檳ﯪS૰3~㘠#[J<}{奲 5箉⨔{놁<\/釿抋,嚠/曳m&WaOvT赋皺璑텁": [[
+ false,
+ null,
+ true,
+ -5.7131445659795661E18,
+ "萭m䓪D5|3婁ఞ>蠇晼6nﴺPp禽羱DS<睓닫屚삏姿",
+ true,
+ [
+ -8759747687917306831,
+ {
+ ">ⓛ\t,odKr{䘠?b퓸C嶈=DyEᙬ@ᴔ쨺芛髿UT퓻春<\/yꏸ>豚W釺N뜨^?꽴﨟5殺ᗃ翐%>퍂ဿ䄸沂Ea;A_\u0005閹殀W+窊?Ꭼd\u0013P汴G5썓揘": 4.342729067882445E-18,
+ "Q^즾眆@AN\u0011Kb榰냎Y#䝀ꀒᳺ'q暇睵s\"!3#I⊆畼寤@HxJ9": false,
+ "⿾D[)袨㇩i]웪䀤ᛰMvR<蟏㣨": {"v퇓L㪱ꖣ豛톤\\곱#kDTN": [{
+ "(쾴䡣,寴ph(C\"㳶w\"憳2s馆E!n!&柄<\/0Pꈗſ?㿳Qd鵔": {"娇堰孹L錮h嵅⛤躏顒?CglN束+쨣ﺜ\\MrH": {"獞䎇둃ቲ弭팭^ꄞ踦涟XK錆쳞ឌ`;੶S炥騞ଋ褂B៎{ڒ䭷ᶼ靜pI荗虶K$": [{"◖S~躘蒉꫿輜譝Q㽙闐@ᢗ¥E榁iء5┄^B[絮跉ᰥ遙PWi3wㄾⵀDJ9!w㞣ᄎ{듒ꓓb6\\篴??c⼰鶹⟧\\鮇ꮇ": [[
+ 654120831325413520,
+ -1.9562073916357608E-19,
+ {
+ "DC(昐衵ἡ긙갵姭|֛[t": 7.6979110359897907E18,
+ "J␅))嫼❳9Xfd飉j7猬ᩉ+⤻眗벎E鰉Zᄊ63zၝ69}ZᶐL崭ᦥ⡦靚⋛ꎨ~i㨃咊ꧭo䰠阀3C(": -3.5844809362512589E17,
+ "p꣑팱쒬ꎑ뛡Ꙩ挴恍胔&7ᔈ묒4Hd硶훐㎖zꢼ豍㿢aሃ=<\/湉鵲EӅ%$F!퍶棌孼{O駍਺geu+": ")\u001b잓kŀX쩫A밁®ڣ癦狢)扔弒p}k縕ꩋ,䃉tࣼi",
+ "ァF肿輸<솄G-䢹䛸ꊏl`Tqꕗ蒞a氷⸅ᴉ蠰]S/{J왲m5{9.uέ~㕚㣹u>x8U讁B덺襪盎QhVS맅킃i识{벂磄Iහ䙅xZy/抍૭Z鲁-霳V据挦ℒ": null,
+ "㯛|Nꐸb7ⵐb?拠O\u0014ކ?-(EꞨ4ꕷᄤYᯕOW瞺~螸\"욿ќ<u鵵઎⸊倾쑷෻rT⪄牤銱;W殆͢芄ਰ嚝훚샢⊿+㲽": null,
+ "単逆ົ%_맛d)zJ%3칧_릟#95䌨怡\u001ci턠ॣi冘4赖'ਐ䧐_栔!": {
+ "*?2~4㲌᭳쯁ftႷ1#oJ\b䊇镇됔 \u2079x䛁㊝ᮂN;穽跖s휇ᣄ홄傷z⸷(霸!3y뺏M쒿햏۽v㳉tở心3黎v쭻 Rp཮Vr~T?&˴k糒븥쩩r*D": null,
+ "8@~홟ꔘk1[": -5570970366240640754,
+ "BZt鏦ꡬc餖 s(mᛴ\u0000◄d腑t84C⟐坯VṊ뉙'噱Ꝕ珽GC顀?허0ꞹ&돇䛭C䷫](": 2.4303828213012387E-20,
+ "y撔Z외放+}ḑ骈ᙝ&\u0016`G便2|-e]঳?QF㜹YF\"㿒緄햷㈟塚䷦ୀጤlM蘸N㾆▛럪㞂tᕬ镈쇝喠l amcxPnm\u001a᱋<\/]_]ﻹ瞧?H": false,
+ "ፏ氏묢뜚I[♺뽛x?0H봬Wpn꨹Ra䝿쌑{㴂ni祻윸A'y|⺴ᚘ庌9{$恲{톽=m#@6ᨧfgs44陎J#<Ễ쨓瀵❩a୛㷉㙉ܸ◠냔嬯~呄籁羥镳": false,
+ "㘱{<頬22?IF@곊I겂嶻L᝛D{@r쒂?IAᣧ洪惒誸b徂z췺꾍㠭\\刊%禨쌐ⶣ仵\\P[:47;<ᇅ<\/": {
+ "^U釳-v㢈ꗝ◄菘rᜨi;起kR犺䵫\u0000锍쁙m-ԙ!lḃ꛸뻾F(W귛y": "#ᠺH㸢5v8_洑C",
+ "䔵໳$ᙠ6菞\u206e摎q圩P|慍sV4:㜾(I溞I?": -6569206717947549676,
+ "透Ꞃ緵퇝8 >e㺰\"'㌢ƐW\u0004瞕>0?V鷵엳": true,
+ "뤥G\\迋䠿[庩'꼡\u001aiᩮV쯁ᳪ䦪Ô;倱ନ뛁誈": null,
+ "쥹䄆䚟Q榁䎐᢭<\/2㕣p}HW蟔|䃏꿈ꚉ锳2Pb7㙑Tⅹᵅ": {
+ "Y?֭$>#cVBꩨ:>eL蒁務": {
+ "86柡0po 䏚&-捑Ћ祌<\/휃-G*㶢הּ쩍s㶟餇c걺yu꽎還5*턧簕Og婥SꝐ": null,
+ "a+葞h٥ࠆ裈嗫ﵢ5輙퀟ᛜ,QDﹼ⟶Y騠锪E_|x죗j侵;m蜫轘趥?븅w5+mi콛L": {
+ ";⯭ﱢ!买F⽍柤鶂n䵣V㫚墱2렾ELEl⣆": [
+ true,
+ -3.6479311868339015E-18,
+ -7270785619461995400,
+ 3.334081886177621E18,
+ 2.581457786298155E18,
+ -6.605252412954115E-20,
+ -3.9232347037744167E-20,
+ {
+ "B6㊕.k1": null,
+ "ZAꄮJ鮷ᳱo갘硥鈠䠒츼": {
+ "ᕅ}럡}.@y陪鶁r業'援퀉x䉴ﵴl퍘):씭脴ᥞhiꃰblﲂ䡲엕8߇M㶭0燋標挝-?PCwe⾕J碻Ᾱ䬈䈥뷰憵賣뵓痬+": {"a췩v礗X⋈耓ፊf罅靮!㔽YYᣓw澍33⎔芲F|\"䜏T↮輦挑6ᓘL侘?ᅥ]덆1R௯✎餘6ꏽ<\/௨\\?q喷ꁫj~@ulq": {"嗫欆뾔Xꆹ4H㌋F嵧]ࠎ]㠖1ꞤT<$m뫏O i댳0䲝i": {"?෩?\u20cd슮|ꯆjs{?d7?eNs⢚嫥氂䡮쎱:鑵롟2hJꎒﯭ鱢3춲亄:뼣v䊭諱Yj択cVmR䩃㘬T\"N홝*ै%x^F\\_s9보zz4淗?q": [
+ null,
+ "?",
+ 2941869570821073737,
+ "{5{殇0䝾g6밖퍋臩綹R$䖭j紋釰7sXI繳漪행y",
+ false,
+ "aH磂?뛡#惇d婅?Fe,쐘+늵䍘\"3r瘆唊勐j⳧࠴ꇓ<\/唕윈x⬌讣䋵%拗ᛆⰿ妴᝔M2㳗必꧂淲?ゥ젯檢<8끒MidX䏒3᳻Q▮佐UT|⤪봦靏⊏",
+ [[{
+ "颉(&뜸귙{y^\"P퟉춝Ჟ䮭D顡9=?}Y誱<$b뱣RvO8cH煉@tk~4ǂ⤧⩝屋SS;J{vV#剤餓ᯅc?#a6D,s": [
+ -7.8781018564821536E16,
+ true,
+ [
+ -2.28770899315832371E18,
+ false,
+ -1.0863912140143876E-20,
+ -6282721572097446995,
+ 6767121921199223078,
+ -2545487755405567831,
+ false,
+ null,
+ -9065970397975641765,
+ [
+ -5.928721243413937E-20,
+ {"6촊\u001a홯kB0w撨燠룉{绎6⳹!턍贑y▾鱧ժ[;7ᨷ∀*땒䪮1x霆Hᩭ☔\"r䝐7毟ᝰr惃3ꉭE+>僒澐": [
+ "Ta쎩aƝt쵯ⰪVb",
+ [
+ -5222472249213580702,
+ null,
+ -2851641861541559595,
+ null,
+ 4808804630502809099,
+ 5657671602244269874,
+ "5犲﨣4mᥣ?yf젫꾯|䋬잁$`Iⳉﴷ扳兝,'c",
+ false,
+ [
+ null,
+ {
+ "DyUIN쎾M仼惀⮥裎岶泭lh扠\u001e礼.tEC癯튻@_Qd4c5S熯A<\/\6U윲蹴Q=%푫汹\\\u20614b[௒C⒥Xe⊇囙b,服3ss땊뢍i~逇PA쇸1": -2.63273619193485312E17,
+ "Mq꺋貘k휕=nK硍뫞輩>㾆~἞ࡹ긐榵l⋙Hw뮢帋M엳뢯v⅃^": 1877913476688465125,
+ "ᶴ뻗`~筗免⚽টW˃⽝b犳䓺Iz篤p;乨A\u20ef쩏?疊m㝀컩뫡b탔鄃ᾈV(遢珳=뎲ିeF仢䆡谨8t0醄7㭧瘵⻰컆r厡궥d)a阄፷Ed&c﯄伮1p": null,
+ "⯁w4曢\"(欷輡": "\"M᭫]䣒頳B\\燧ࠃN㡇j姈g⊸⺌忉ꡥF矉স%^",
+ "㣡Oᄦ昵⫮Y祎S쐐級㭻撥>{I$": -378474210562741663,
+ "䛒掷留Q%쓗1*1J*끓헩ᦢ﫫哉쩧EↅIcꅡ\\?ⴊl귛顮4": false,
+ "寔愆샠5]䗄IH贈=d﯊/偶?ॊn%晥D視N򗘈'᫂⚦|X쵩넽z질tskxDQ莮Aoﱻ뛓": true,
+ "钣xp?&\u001e侉/y䴼~?U篔蘚缣/I畚?Q绊": -3034854258736382234,
+ "꺲໣眀)⿷J暘pИfAV삕쳭Nꯗ4々'唄ⶑ伻㷯騑倭D*Ok꧁3b␽_<\/챣Xm톰ၕ䆄`*fl㭀暮滠毡?": [
+ "D男p`V뙸擨忝븪9c麺`淂⢦Yw⡢+kzܖ\fY1䬡H歁)벾Z♤溊-혰셢?1<-\u0005;搢Tᐁle\\ᛵߓﭩ榩<QF;t=?Qꀞ",
+ [
+ null,
+ [{"-췫揲ᬨ墊臸<ࠒH跥 㔭쥃㫯W=z[wধ╌<~yW楄S!⑻h즓lĖN￧篌W듷튗乵᪪템먵Pf悥ᘀk䷭焼\\讄r擁鐬y6VF<\/6랿p)麡ꁠ㪁\"pழe": [
+ "#幎杴颒嶈)ㄛJ.嶤26_⋌东챯ꠉ⤋ؚ/⏚%秼Q룠QGztᄎ㎷អI翰Xp睔鍜ꨍ",
+ {",T?": [
+ false,
+ [[
+ true,
+ 7974824014498027996,
+ false,
+ [
+ 4.3305464880956252E18,
+ {
+ "᱿W^A]'rᮢ)鏥z餝;Hu\\Fk?ﴺ?IG浅-䙧>訝-xJ;巡8깊蠝ﻓU$K": {
+ "Vꕡ諅搓W=斸s︪vﲜ츧$)iꡟ싉e寳?ጭムVથ嵬i楝Fg<\/Z|៪ꩆ-5'@ꃱ80!燱R쇤t糳]罛逇dṌ֣XHiͦ{": true,
+ "Ya矲C멗Q9膲墅携휻c\\딶G甔<\/.齵휴": -1.1456247877031811E-19,
+ "z#.OO￝J": -8263224695871959017,
+ "崍_3夼ᮟ1F븍뽯ᦓ鴭V豈Ь": [{
+ "N蒬74": null,
+ "yuB?厅vK笗!ᔸcXQ旦컶P-녫mᄉ麟_": "1R@ 톘xa_|﩯遘s槞d!d껀筤⬫薐焵먑D{\\6k共倌☀G~AS_D\"딟쬚뮥馲렓쓠攥WTMܭ8nX㩴䕅檹E\u0007ﭨN 2 ℆涐ꥏ꠵3▙玽|됨_\u2048",
+ "恐A C䧩G": {":M큣5e들\\ꍀ恼ᔄ靸|I﨏$)n": {
+ "|U䬫㟯SKV6ꛤ㗮\bn봻䲄fXT:㾯쳤'笓0b/ೢC쳖?2浓uO.䰴": "ཐ꼋e?``,ᚇ慐^8ꜙNM䂱\u0001IᖙꝧM'vKdꌊH牮r\\O@䊷ᓵ쀆(fy聻i툺\"?<\/峧ࣞ⓺ᤤ쵒߯ꎺ騬?)刦\u2072l慪y꺜ﲖTj+u",
+ "뽫<G;稳UL⸙q2n쵿C396炿J蓡z⣁zဩSOU?<\/뙍oE큸O鿅෴ꍈEm#\"[瑦⤫ᝆgl⡗q8\"큘덥係@ᆤ=\u0001爖羝췀㸩b9\\jeqt㟿㮸龾m㳳긄": {
+ "9\"V霟釜{/o0嫲C咀-饷䈍[녩)\r䤴tMW\\龟ϣ^ي㪙忩䞞N湆Y笕)萨ꖤ誥煽:14⫻57U$擒䲐薡Qvↇ櫲현誧?nஷ6": {"l웾䌵.䅋䦝ic碳g[糲Ƿ-ឈᚱ4쑧\u0004C࿼\u0018&쬑?멲<\/fD_檼픃pd쪼n㕊渪V䛉m揈W儅톳뗳䓆7㭽諤T煠Ney?0᪵鈑&": [
+ false,
+ null,
+ {
+ "\r;鼶j᠂꼍RLz~♔9gf?ӡ浐": -1.4843072575250897E-19,
+ "&ꊒ\"ꋟ䝭E诮ﯚO?SW뒁훪mb旙⎕ᗕ⶙|ᷤ5y4甥": "j5|庠t铱?v 횋0\"'rxz䃢杺Ɜ!\u0002",
+ "Q ၩ㟧": {"Hﬔ\u2058䪠틙izZㅛ탟H^ﶲA??R6呠Z솋R.࿶g8": [
+ -8762672252886298799,
+ -1.9486830507000208E17,
+ null,
+ -7157359405410123024,
+ null,
+ null,
+ -995856734219489233,
+ "呧㫹A4!",
+ null,
+ -1.9105609358624648E-19,
+ 5888184370445333848,
+ 2.25460605078245E-19,
+ 2.5302739297121987E18,
+ "뢹sbEf捵2丯?뗾耸(Wd띙SବꭖrtU?筤P똙QpbbKqaE$来V웰3i/lK퉜,8︸e= g螓t竦컼?.寋8鵗",
+ 7377742975895263424,
+ 2.4218442017790503E-19,
+ {
+ "y꒚ཫ쨘醬킃糟}yTSt䡀⇂뿽4ൢ戰U": [[
+ 3600537227234741875,
+ 4435474101760273035,
+ -1.42274517007951795E18,
+ -5567915915496026866,
+ null,
+ null,
+ [
+ -3204084299154861161,
+ {
+ "7梧慸憏.a瘎\u00041U鵮Ck֨d惥耍ⳡY,⭏써E垁FFI鱑ⳬ줢7⧵Bﴠ耘줕햸q컴~*瑍W.떛ࡆ@'᐀+轳": -961121410259132975,
+ "⥅]l黭㣓绶;!!⎃=朼㐿e&ἂ繤C﯀l䝣㌀6TM쑮w懃ꡡ#ᤆ䰓,墼湼゙뽸㲿䧽쫨xᵖ듨<\/ T0峸iQ:溫脐\\\"쎪ὴ砇宖^M泼큥➅鈫@ᄟ༩\u2008⥼": true,
+ "⩐\"籽汎P싯鲘蟼sRᐯ䅩\u0019R(kRᖁ&ಌ 0\"鳶!馼YH": null,
+ "鮼ꚇ싋։刟\rRLd步Nⴗ5Eࡆ訛갚[I醵NC(郴ṉy5D뤺౳QY壯5苴y훨(W\\Cଇ姚C艄깹\u001c歷㋵ZC᥂": [
+ -6806235313106257498,
+ null,
+ "}N⸿讽sꚪ;\\p繇j苄䫨\u20e7%5x?t#",
+ {
+ "O〗k<墻yV$ఁrs-c1ఌ唪.C7_Yobᦜ褷'b帰mㄑl⌅": {"qB뗗擄3隂5뺍櫂䱟e촸P/鏩,3掁ꗩ=冉棓㑉|˞F襴뿴,:㞦<퓂⧙礞♗g뚎ᛩ<\/뉽ⶳ⸻A?_x2I㽝勒*I홱鍧粿~曟㤙2绥Ly6+썃uu鿜בf큘|歍ࣖÉ": [
+ ">hh䈵w>1ⲏ쐭V[ⅎ\\헑벑F_㖝⠗㫇h恽;῝汰ᱼ瀖J옆9RR셏vsZ柺鶶툤r뢱橾/ꉇ囦FGm\"謗ꉦ⨶쒿⥡%]鵩#ᖣ_蹎 u5|祥?O",
+ null,
+ 2.0150326776036215E-19,
+ null,
+ true,
+ false,
+ true,
+ {"\fa᭶P捤WWc᠟f뚉ᬏ퓗ⳀW睹5:HXH=q7x찙X$)모r뚥ᆟ!Jﳸf": [
+ -2995806398034583407,
+ [
+ 6441377066589744683,
+ "Mﶒ醹i)Gἦ廃s6몞 KJ౹礎VZ螺费힀\u0000冺업{谥'꡾뱻:.ꘘ굄奉攼Di᷑K鶲y繈욊阓v㻘}枭캗e矮1c?휐\"4\u0005厑莔뀾墓낝⽴洗ṹ䇃糞@b1\u0016즽Y轹",
+ {
+ "1⽕⌰鉟픏M㤭n⧴ỼD#%鐘⊯쿼稁븣몐紧ᅇ㓕ᛖcw嬀~ഌ㖓(0r⧦Q䑕髍ര铂㓻R儮\"@ꇱm❈௿᦯頌8}㿹犴?xn잆꥽R": 2.07321075750427366E18,
+ "˳b18㗈䃟柵Z曆VTAu7+㛂cb0﯑Wp執<\/臋뭡뚋刼틮荋벲TLP预庰܈G\\O@VD'鱃#乖끺*鑪ꬳ?Mޞdﭹ{␇圯쇜㼞顄︖Y홡g": [{
+ "0a,FZ": true,
+ "2z̬蝣ꧦ驸\u0006L↛Ḣ4๚뿀'?lcwᄧ㐮!蓚䃦-|7.飑挴.樵*+1ﮊ\u0010ꛌ%貨啺/JdM:똍!FBe?鰴㨗0O财I藻ʔWA᫓G쳛u`<\/I": [{
+ "$τ5V鴐a뾆両環iZp頻යn븃v": -4869131188151215571,
+ "*즢[⦃b礞R◚nΰꕢH=귰燙[yc誘g䆌?ଜ臛": {
+ "洤湌鲒)⟻\\䥳va}PeAMnN[": "㐳ɪ/(軆lZR,Cp殍ȮN啷\"3B婴?i=r$펽ᤐ쀸",
+ "阄R4㒿㯔ڀ69ZᲦ2癁핌噗P崜#\\-쭍袛&鐑/$4童V꩑_ZHA澢fZ3": {"x;P{긳:G閉:9?活H": [
+ "繺漮6?z犞焃슳\">ỏ[Ⳛ䌜녏䂹>聵⼶煜Y桥[泥뚩MvK$4jtロ",
+ "E#갶霠좭㦻ୗ먵F+䪀o蝒ba쮎4X㣵 h",
+ -335836610224228782,
+ null,
+ null,
+ [
+ "r1᫩0>danjY짿bs{",
+ [
+ -9.594464059325631E-23,
+ 1.0456894622831624E-20,
+ null,
+ 5.803973284253454E-20,
+ -8141787905188892123,
+ true,
+ -4735305442504973382,
+ 9.513150514479281E-20,
+ "7넳$螔忷㶪}䪪l짴\u0007鹁P鰚HF銏ZJﳴ/⍎1ᷓ忉睇ᜋ쓈x뵠m䷐窥Ꮤ^\u0019ᶌ偭#ヂt☆၃pᎍ臶䟱5$䰵&๵分숝]䝈뉍♂坎\u0011<>",
+ "C蒑貑藁lﰰ}X喇몛;t밿O7/᯹f\u0015kI嘦<ዴ㟮ᗎZ`GWퟩ瑹࡮ᅴB꿊칈??R校s脚",
+ {
+ "9珵戬+AU^洘拻ቒy柭床'粙XG鞕᠜繀伪%]hC,$輙?Ut乖Qm떚W8઼}~q⠪rU䤶CQ痗ig@#≲t샌f㈥酧l;y闥ZH斦e⸬]j⸗?ঢ拻퀆滌": null,
+ "畯}㧢J罚帐VX㨑>1ꢶkT⿄蘥㝑o|<嗸層沈挄GEOM@-䞚䧰$만峬輏䠱V✩5宸-揂D'㗪yP掶7b⠟J㕻SfP?d}v㼂Ꮕ'猘": {
+ "陓y잀v>╪": null,
+ "鬿L+7:됑Y=焠U;킻䯌잫!韎ஔ\f": {
+ "駫WmGጶ": {
+ "\\~m6狩K": -2586304199791962143,
+ "ႜࠀ%͑l⿅D.瑢Dk%0紪dḨTI픸%뗜☓s榗኉\"?V籄7w髄♲쟗翛歂E䤓皹t ?)ᄟ鬲鐜6C": {
+ "_췤a圷1\u000eB-XOy缿請∎$`쳌eZ~杁튻/蜞`塣৙\"⪰\"沒l}蕌\\롃荫氌.望wZ|o!)Hn獝qg}": null,
+ "kOSܧ䖨钨:಼鉝ꭝO醧S`십`ꓭ쭁ﯢN&Et㺪馻㍢ⅳ㢺崡ຊ蜚锫\\%ahx켨|ż劻ꎄ㢄쐟A躊᰹p譞綨Ir쿯\u0016ﵚOd럂*僨郀N*b㕷63z": {
+ ":L5r+T㡲": [{
+ "VK泓돲ᮙRy㓤➙Ⱗ38oi}LJቨ7Ó㹡৘*q)1豢⛃e᫛뙪壥镇枝7G藯g㨛oI䄽 孂L缊ꋕ'EN`": -2148138481412096818,
+ "`⛝ᘑ$(खꊲ⤖ᄁꤒ䦦3=)]Y㢌跨NĴ驳줟秠++d孳>8ᎊ떩EꡣSv룃 쯫أ?#E|᭙㎐?zv:5祉^⋑V": [
+ -1.4691944435285607E-19,
+ 3.4128661569395795E17,
+ "㐃촗^G9佭龶n募8R厞eEw⺡_ㆱ%⼨D뉄퉠2ꩵᛅⳍ搿L팹Lවn=\"慉념ᛮy>!`g!풲晴[/;?[v겁軇}⤳⤁핏∌T㽲R홓遉㓥",
+ "愰_⮹T䓒妒閤둥?0aB@㈧g焻-#~跬x<\/舁P݄ꐡ=\\׳P\u0015jᳪᢁq;㯏l%᭗;砢觨▝,謁ꍰGy?躤O黩퍋Y㒝a擯\n7覌똟_䔡]fJ晋IAS",
+ 4367930106786121250,
+ -4.9421193149720582E17,
+ null,
+ {
+ ";ᄌ똾柉곟ⰺKpፇ䱻ฺ䖝{o~h!eꁿ઻욄ښ\u0002y?xUd\u207c悜ꌭ": [
+ 1.6010824122815255E-19,
+ [
+ "宨︩9앉檥pr쇷?WxLb",
+ "氇9】J玚\u000f옛呲~ 輠1D嬛,*mW3?n휂糊γ虻*ᴫ꾠?q凐趗Ko↦GT铮",
+ "㶢ថmO㍔k'诔栀Z蛟}GZ钹D",
+ false,
+ -6.366995517736813E-20,
+ -4894479530745302899,
+ null,
+ "V%᫡II璅䅛䓎풹ﱢ/pU9se되뛞x梔~C)䨧䩻蜺(g㘚R?/Ự[忓C뾠ࢤc왈邠买?嫥挤풜隊枕",
+ ",v碍喔㌲쟚蔚톬៓ꭶ",
+ 3.9625444752577524E-19,
+ null,
+ [
+ "kO8란뿒䱕馔b臻⍟隨\"㜮鲣Yq5m퐔<u뷆c譆\u001bN?<",
+ [{
+ ";涉c蒀ᴧN䘱䤳 ÿꭷ,핉dSTDB>K#ꢘug㼈ᝦ=P^6탲@䧔%$CqSw铜랊0&m⟭<\/a逎ym\u0013vᯗ": true,
+ "洫`|XN뤮\u0018詞=紩鴘_sX)㯅鿻Ố싹": 7.168252736947373E-20,
+ "ꛊ饤ﴏ袁(逊+~⽫얢鈮艬O힉7D筗S곯w操I斞᠈븘蓷x": [[[[
+ -7.3136069426336952E18,
+ -2.13572396712722688E18,
+ {
+ "硢3㇩R:o칢行E<=\u0018ၬYuH!\u00044U%卝炼2>\u001eSi$⓷ꒈ'렢gᙫ番ꯒ㛹럥嶀澈v;葷鄕x蓎\\惩+稘UEᖸﳊ㊈壋N嫿⏾挎,袯苷ኢ\\x|3c": 7540762493381776411,
+ "?!*^ᢏ窯?\u0001ڔꙃw虜돳FgJ?&⨫*uo籤:?}ꃹ=ٴ惨瓜Z媊@ત戹㔏똩Ԛ耦Wt轁\\枒^\\ꩵ}}}ꀣD\\]6M_⌫)H豣:36섘㑜": {
+ ";홗ᰰU஋㙛`D왔ཿЃS회爁\u001b-㢈`봆?盂㛣듿ᦾ蒽_AD~EEຆ㊋(eNwk=Rɠ峭q\"5Ἠ婾^>'ls\n8QAK<l_⭨穟": [
+ true,
+ true,
+ {"ﳷm箅6qⷈ?ﲈ憟b۷⫉἞V뚴少U呡瓴ꉆs~嘵得㌶4XR漊": [
+ "폆介fM暪$9K[ㄇ샍큳撦g撟恸jҐF㹹aj bHᘀ踉ꎐC粄 a?\u000fK즉郝 幨9D舢槷Xh뵎u훩Ꜿ턾ƅ埂P埆k멀{䢹~?D<\/꼢XR\u001b〱䝽꼨i㘀ḟ㚺A-挸",
+ false,
+ null,
+ -1.1710758021294953E-20,
+ 3996737830256461142,
+ true,
+ null,
+ -8271596984134071193,
+ "_1G퉁텑m䮔鰼6멲Nmꇩſt쓟튍N许FDj+3^ﶜ⎸\u0019⤕橥!\"s-뾞lz北׸ꍚ랬)?l⻮고i䑰\u001f䪬",
+ 4.459124464204517E-19,
+ -4.0967172848578447E18,
+ 5643211135841796287,
+ -9.482336221192844E-19,
+ "౪冏釶9D?s螭X榈枸j2秀v]泌鰚岒聵轀쌶i텽qMbL]R,",
+ null,
+ [
+ null,
+ {"M쪊ꯪ@;\u0011罙ꕅ<e᝺|爑Yⵝ<\/&ᩎ<腊ሑᮔ੃F豭": [
+ "^0࡟1볏P폋ፏ杈F⨥Iꂴ\"z磣VⅡ=8퀝2]䢹h1\u0017{jT<I煛5%D셍S⑙⅏J*샐 巙ດ;᧡䙞",
+ [{
+ "'㶡큾鄧`跊\"gV[?u᭒Ʊ髷%葉굵a띦N켧Qﯳy%y䩟髒L䯜S䵳r絅肾킂ၐ'ꔦg긓a'@혔যW谁ᝬF栩ŷ+7w鞚": 6.3544416675584832E17,
+ "苎脷v改hm쏵|㋊g_ᔐ 뒨蹨峟썎㷸|Ο刢?Gͨ옛-?GꦱIEYUX4?%ꘋᆊ㱺": -2.8418378709165287E-19,
+ "誰?(H]N맘]k洳\"q蒧蘞!R퐫\\(Q$T5N堍⫣윿6|럦속︅ﭗ(": [
+ "峩_\u0003A瘘?✓[硫䎯ၽuጭ\"@Y綅첞m榾=贮9R벿῜Z",
+ null,
+ "䰉㗹㷾Iaᝃqcp쓘὾൫Q|ﵓ<\/ḙ>)- Q䲌mo펹L_칍樖庫9꩝쪹ᘹ䑖瀍aK ?*趤f뭓廝p=磕",
+ "哑z懅ᤏ-ꍹux쀭",
+ [
+ true,
+ 3998739591332339511,
+ "ጻ㙙?᳸aK<\/囩U`B3袗ﱱ?\"/k鏔䍧2l@쿎VZ쨎/6ꃭ脥|B?31+on颼-ꮧ,O嫚m ࡭`KH葦:粘i]aSU쓙$쐂f+詛頖b",
+ [{"^<9<箝&絡;%i﫡2攑紴\\켉h쓙-柂䚝ven\u20f7浯-Ꮏ\r^훁䓚헬\u000e?\\ㅡֺJ떷VOt": [{
+ "-௄卶k㘆혐஽y⎱㢬sS઄+^瞥h;ᾷj;抭\u0003밫f<\/5Ⱗ裏_朻%*[-撵䷮彈-芈": {
+ "㩩p3篊G|宮hz䑊o곥j^Co0": [
+ 653239109285256503,
+ {"궲?|\":N1ۿ氃NZ#깩:쇡o8킗ࡊ[\"됸Po핇1(6鰏$膓}⽐*)渽J'DN<썙긘毦끲Ys칖": {
+ "2Pr?Xjㆠ?搮/?㓦柖馃5뚣Nᦼ|铢r衴㩖\"甝湗ܝ憍": "\"뾯i띇筝牻$珲/4ka $匝휴译zbAᩁꇸ瑅&뵲衯ꎀᆿ7@ꈋ'ᶨH@ᠴl+",
+ "7뢽뚐v?4^ꊥ_⪛.>pởr渲<\/⢕疻c\"g䇘vU剺dஔ鮥꒚(dv祴X⼹\\a8y5坆": true,
+ "o뼄B욞羁hr﷔폘뒚⿛U5pꪴfg!6\\\"爑쏍䢱W<ﶕ\\텣珇oI/BK뺡'谑♟[Ut븷亮g(\"t⡎有?ꬊ躺翁艩nl F⤿蠜": 1695826030502619742,
+ "ۊ깖>ࡹ햹^ⵕ쌾BnN〳2C䌕tʬ]찠?ݾ2饺蹳ぶꌭ訍\"◹ᬁD鯎4e滨T輀ﵣ੃3\u20f3킙D瘮g\\擦+泙ၧ 鬹ﯨַ肋7놷郟lP冝{ߒhড়r5,꓋": null,
+ "ΉN$y{}2\\N﹯ⱙK'8ɜͣwt,.钟廣䎘ꆚk媄_": null,
+ "䎥eᾆᝦ읉,Jުn岪㥐s搖謽䚔5t㯏㰳㱊ZhD䃭f絕s鋡篟a`Q鬃┦鸳n_靂(E4迠_觅뷝_宪D(NL疶hL追V熑%]v肫=惂!㇫5⬒\u001f喺4랪옑": {
+ "2a輍85먙R㮧㚪Sm}E2yꆣꫨrRym㐱膶ᔨ\\t綾A☰.焄뙗9<쫷챻䒵셴᭛䮜.<\/慌꽒9叻Ok䰊Z㥪幸k": [
+ null,
+ true,
+ {"쌞쐍": {
+ "▟GL K2i뛱iQ\"̠.옛1X$}涺]靎懠ڦ늷?tf灟ݞゟ{": 1.227740268699265E-19,
+ "꒶]퓚%ฬK❅": [{
+ "(ෛ@Ǯっ䧼䵤[aテൖvEnAdU렖뗈@볓yꈪ,mԴ|꟢캁(而첸죕CX4Y믅": "2⯩㳿ꢚ훀~迯?᪑\\啚;4X\u20c2襏B箹)俣eỻw䇄",
+ "75༂f詳䅫ꐧ鏿 }3\u20b5'∓䝱虀f菼Iq鈆﨤g퍩)BFa왢d0뮪痮M鋡nw∵謊;ꝧf美箈ḋ*\u001c`퇚퐋䳫$!V#N㹲抗ⱉ珎(V嵟鬒_b㳅\u0019": null,
+ "e_m@(i㜀3ꦗ䕯䭰Oc+-련0뭦⢹苿蟰ꂏSV䰭勢덥.ྈ爑Vd,ᕥ=퀍)vz뱊ꈊB_6듯\"?{㒲&㵞뵫疝돡믈%Qw限,?\r枮\"? N~癃ruࡗdn&": null,
+ "㉹&'Pfs䑜공j<\/?|8oc᧨L7\\pXᭁ 9᪘": -2.423073789014103E18,
+ "䝄瑄䢸穊f盈᥸,B뾧푗횵B1쟢f\u001f凄": "魖⚝2儉j꼂긾껢嗎0ࢇ纬xI4](੓`蕞;픬\fC\"斒\")2櫷I﹥迧",
+ "ퟯ詔x悝령+T?Bg⥄섅kOeQ큼㻴*{E靼6氿L缋\u001c둌๶-㥂2==-츫I즃㠐Lg踞ꙂEG貨鞠\"\u0014d'.缗gI-lIb䋱ᎂDy缦?": null,
+ "紝M㦁犿w浴詟棓쵫G:䜁?V2ힽ7N*n&㖊Nd-'ຊ?-樹DIv⊜)g䑜9뉂ㄹ푍阉~ꅐ쵃#R^\u000bB䌎䦾]p.䀳": [{"ϒ爛\"ꄱ︗竒G䃓-ま帳あ.j)qgu扐徣ਁZ鼗A9A鸦甈!k蔁喙:3T%&㠘+,䷞|챽v䚞문H<\/醯r셓㶾\\a볜卺zE䝷_죤ဵ뿰᎟CB": [
+ 6233512720017661219,
+ null,
+ -1638543730522713294,
+ false,
+ -8901187771615024724,
+ [
+ 3891351109509829590,
+ true,
+ false,
+ -1.03836679125188032E18,
+ {
+ "<?起HCᷭ죎劐莇逰/{gs\u0014⽛㰾愫tᅱ<솞ڢ됌煲膺਻9x닳x࡭Q訽,ᶭඦtt掾\"秧㺌d˪䙻꫗:ᭈh4緞痐䤴c뫚떩త<?ᕢ謚6]폛O鰐鋛镠贩赟\"<G♷1'": true,
+ "቙ht4ߝBqꦤ+\u0006멲趫灔)椾": -1100102890585798710,
+ "総兎곇뇸粟F醇;朠?厱楛㶆ⶏ7r⾛o꯬᳡F\\머幖 㜦\f[搦᥽㮣0䕊?J㊳뀄e㔔+?<n↴复": [
+ "4~ꉍ羁\\偮(泤叕빜\u0014>j랎:g曞ѕᘼ}链N",
+ -1.1103819473845426E-19,
+ true,
+ [
+ true,
+ null,
+ -7.9091791735309888E17,
+ true,
+ {"}蔰鋈+ꐨ啵0?g*사%`J?*": [{
+ "\"2wG?yn,癷BK\\龞䑞x?蠢": -3.7220345009853505E-19,
+ ";饹়❀)皋`噿焒j(3⿏w>偍5X<np?<줯<Y]捘!J೸UⳂNे7v௸㛃ᄧ톿䨷鯻v焇=烻TQ!F⦰䣣눿K鷚눁'⭲m捠(䚻": [
+ "蹕 淜੃b\"+몾ⴕ",
+ null,
+ 35892237756161615,
+ {
+ " 듹㏝)5慁箱&$~:遰쮐<\/堋?% \\勽唅z손帋䘺H髀麡M퇖uz\u0012m諦d᳤콌樝\rX싹̡Ო": -433791617729505482,
+ "-j溗ࢵcz!:}✽5ഇ,욨ݏs#덫=南浺^}E\\Y\\T*뼈cd꺐cۘ뎁䨸됱K䠴㉿恿逳@wf쏢<\/[L[": -9.3228549642908109E17,
+ "Ms킭u஗%\\u⍎/家欲ἅ答㓽/꯳齳|㭘Pr\"v<\/禇䔆$GA䊻˔-:틊[h?倬荤ᾞ৳.Gw\u000b": [
+ "0宜塙I@䏴蝉\\Uy뒅=2<h暒K._贡璐Yi檻_⮵uᐝ㘗聠[f\u0015힢Hꔮ}጑;誏yf0\"\u20cc?(=q斠➽5ꎾ鞘kⲃ",
+ -2.9234211354411E-19,
+ false,
+ true,
+ {
+ "\u0011⟴GH_;#怵:\u001c\u0002n1U\\p/왔(┫]hꐚ7\r0䵷첗岷O௷?㝎[殇|J=?韷pᶟ儜犆?5კ1kꍖiH竧뛈ପdmk游y(콪팱꾍k慧 y辣": [
+ false,
+ "O\"끍p覈ykv磂㢠㝵~뀬튍lC&4솎䇃:Mj",
+ -7.009964654003924E-20,
+ false,
+ -49306078522414046,
+ null,
+ null,
+ 2160432477732354319,
+ true,
+ "4횡h+!踹ꐬP鮄{0&뱥M?샍鞅n㮞ᨹ?쒆毪l'箅^ꚥ頛`e㻨52柳⮙嫪࡟딯a.~䵮1f吘N&zȭL榓ۃ鳠5d㟆M@㣥ӋA΍q0縶$",
+ -3.848996532974368E16,
+ true,
+ null,
+ -3.5240055580952525E18,
+ {
+ " vﭷၵ#ce乃5僞?Z D`묨粇ᐔ绠vWL譢u뽀\\J|tⓙt№\"ꨋnT凮ᒩ蝂篝b騩:䢭Hbv읻峨z㹚T趗햆귣학津XiY@ᖥK": true,
+ "!F 醌y䉸W2ꇬ\u0006/䒏7~%9擛햀徉9⛰+?㌘;ꠓX䇻Dfi뼧쒒\u0012F謞՝絺+臕kऍLSQ쌁X쎬幦HZ98蒊枳": "澤令#\u001d抍⛳@N搕퀂[5,✄ꘇ~䘷?\u0011Xꈺ[硸⠘⛯X醪聡x\u0007쌇MiX/|ミ뚁K8䁡W)銀q僞綂蔕E",
+ "6␲䣖R৞@ငg?<\/೴x陙Xꈺ崸⠅ᇾ\\0X,H쟴셭A稂ힿゝF\\쑞\u0012懦(Aᯕ灭~\u0001껮X?逊": 5.7566819207732864E17,
+ "[c?椓": false,
+ "k䒇": 2583824107104166717,
+ "꙯N훙㏅ﮒ燣㨊瞯咽jMxby뻭뵫װ[\"1畈?ৱL": "띣ᔂ魠羓犴ꚃ+|rY",
+ "녺Z?䬝鉉:?ⳙ瘏Cኯ.Vs[釿䨉쐧\\\\*쵢猒$\\y溔^,㑳": {"藶꺟": [{
+ "\"d훣N2zq]?'檿죸忷篇ﮟ擤m'9!죶≓p뭻\\ᇷ\f퇶_䰸h๐Q嵃訾㘑従ꯦ䞶jL틊r澵Omᾫ!H䱤팼/;|᭺I7슎YhuXi⚼": -1.352716906472438E-19,
+ "M⽇倻5J䂫औ᝔楸#J[Fﹱ쫮W誻bWz?}1\"9硪뻶fe": "盬:Ѹ砿획땣T凊(m灦呜ﻝR㿎艴䂵h",
+ "R띾k힪CH钙_i苮ⰵoᾨ紑퉎7h؉\"柀蝽z0့\"<?嘭$蜝?礲7岇槀묡?V钿T⣜v+솒灚ԛ2米mH?>薙婏聿3aFÆÝ": "2,ꓴg?_섦_>Y쪥션钺;=趘F~?D㨫\bX?㹤+>/믟kᠪ멅쬂Uzỵ]$珧`m雁瑊ඖ鯬cꙉ梢f묛bB",
+ "♽n$YjKiXX*GO贩鏃豮祴遞K醞眡}ꗨv嵎꼷0୸+M菋eH徸J꣆:⼐悥B켽迚㯃b諂\u000bjꠜ碱逮m8": [
+ "푷᣺ﻯd8ﱖ嬇ភH鹎⡱᱅0g:果6$GQ췎{vᷧYy-脕x偹砡館⮸C蓼ꏚ=軄H犠G谖ES詤Z蠂3l봟hᅭ7䦹1GPQG癸숟~[#駥8zQ뛣J소obg,",
+ null,
+ 1513751096373485652,
+ null,
+ -6.851466660824754E-19,
+ {"䩂-⴮2ٰK솖풄꾚ႻP앳1H鷛wmR䗂皎칄?醜<\/&ࠧ㬍X濬䵈K`vJ륒Q/IC묛!;$vϑ": {
+ "@-ꚗxྐྵ@m瘬\u0010U絨ﮌ驐\\켑寛넆T=tQ㭤L연@脸삯e-:⩼u㎳VQ㋱襗ຓ<Ⅶ䌸cML3+\u001e_C)r\\9+Jn\\Pﺔ8蠱檾萅Pq鐳话T䄐I": -1.80683891195530061E18,
+ "ᷭዻU~ཷsgSJ`᪅'%㖔n5픆桪砳峣3獮枾䌷⊰呀": {
+ "Ş੉䓰邟自~X耤pl7间懑徛s첦5ਕXexh⬖鎥᐀nNr(J컗|ૃF\"Q겮葲놔엞^겄+㈆话〾희紐G'E?飕1f❼텬悚泬먐U睬훶Qs": false,
+ "(\u20dag8큽튣>^Y{뤋.袊䂓;_g]S\u202a꽬L;^'#땏bႌ?C緡<䝲䲝断ꏏ6\u001asD7IK5Wxo8\u0006p弊⼂ꯍ扵\u0003`뵂픋%ꄰ⫙됶l囏尛+䗅E쟇\\": [
+ true,
+ {
+ "\n鱿aK㝡␒㼙2촹f;`쾏qIࡔG}㝷䐍瓰w늮*粅9뒪ㄊCj倡翑閳R渚MiUO~仨䜶RꙀA僈㉋⦋n{㖥0딿벑逦⥻0h薓쯴Ꝼ": [
+ 5188716534221998369,
+ 2579413015347802508,
+ 9.010794400256652E-21,
+ -6.5327297761238093E17,
+ 1.11635352494065523E18,
+ -6656281618760253655,
+ {
+ "": ")?",
+ "TWKLꑙ裑꺔UE俸塑炌Ũ᜕-o\"徚#": {"M/癟6!oI51ni퐚=댡>xꍨ\u0004 ?": {
+ "皭": {"⢫䋖>u%w잼<䕏꘍P䋵$魋拝U䮎緧皇Y훂&|羋ꋕ잿cJ䨈跓齳5\u001a삱籷I꿾뤔S8㌷繖_Yឯ䲱B턼O歵F\\l醴o_欬6籏=D": [
+ false,
+ true,
+ {"Mt|ꏞD|F궣MQ뵕T,띺k+?㍵i": [
+ 7828094884540988137,
+ false,
+ {
+ "!༦鯠,&aﳑ>[euJꏽ綷搐B.h": -7648546591767075632,
+ "-n켧嘰{7挐毄Y,>❏螵煫乌pv醑Q嶚!|⌝責0왾덢ꏅ蛨S\\)竰'舓Q}A釡5#v": 3344849660672723988,
+ "8閪麁V=鈢1녈幬6棉⪮둌\u207d᚛驉ꛃ'r䆉惏ै|bἧﺢᒙ<=穊强s혧eꮿ慩⌡ \\槳W븧J檀C,ᘉ의0俯퀉M;筷ࣴ瓿{늊埂鄧_4揸Nn阼Jੵ˥(社": true,
+ "o뼀vw)4A뢵(a䵢)p姃뛸\u000fK#KiQp\u0005ꅍ芅쏅": null,
+ "砥$ꥸ┇耽u斮Gc{z빔깎밇\\숰\u001e괷各㶇쵿_ᴄ+h穢p촀Ნ䃬z䝁酳ӂ31xꔄ1_砚W렘G#2葊P ": [
+ -3709692921720865059,
+ null,
+ [
+ 6669892810652602379,
+ -135535375466621127,
+ "뎴iO}Z? 馢녱稹ᄾ䐩rSt帤넆&7i騏멗畖9誧鄜'w{Ͻ^2窭외b㑎粖i矪ꦨ탪跣)KEㆹ\u0015V8[W?⽉>'kc$䨘ᮛ뉻٬M5",
+ 1.10439588726055846E18,
+ false,
+ -4349729830749729097,
+ null,
+ [
+ false,
+ "_蠢㠝^䟪/D녒㡋ỎC䒈판\u0006એq@O펢%;鹐쏌o戥~A[ꡉ濽ỳ&虃᩾荣唙藍茨Ig楡꒻M窓冉?",
+ true,
+ 2.17220752996421728E17,
+ -5079714907315156164,
+ -9.960375974658589E-20,
+ "ᾎ戞༒",
+ true,
+ false,
+ [[
+ "ⶉᖌX⧕홇)g엃⹪x뚐癟\u0002",
+ -5185853871623955469,
+ {
+ "L㜤9ợㇶK鐰⋓V뽋˖!斫as|9"፬䆪?7胜&n薑~": -2.11545634977136992E17,
+ "O8뀩D}캖q萂6༣㏗䈓煮吽ਆᎼDᣘ폛;": false,
+ "YTᡅ^L㗎cbY$pᣞ縿#fh!ꘂb삵玊颟샞ဢ$䁗鼒몁~rkH^:닮먖츸륈⪺쒉砉?㙓扫㆕꣒`R䢱B酂?C뇞<5Iޚ讳騕S瞦z": null,
+ "\\RB?`mG댵鉡幐物䵎有5*e骄T㌓ᛪ琾駒Ku\u001a[柆jUq8⋈5鿋츿myﻗ?雍ux঴?": 5828963951918205428,
+ "n0晅:黯 xu씪^퓞cB㎊ᬍ⺘٤փ~B岚3㥕擄vᲂ~F?C䶖@$m~忔S왖㲚?챴⊟W#벌{'㰝I䝠縁s樘\\X뢻9핡I6菍ㄛ8쯶]wॽ0L\"q": null,
+ "x增줖j⦦t䏢᎙㛿Yf鼘~꫓恄4惊\u209c": "oOhbᤃ᛽z&Bi犑\\3B㩬劇䄑oŁ쨅孥멁ຖacA㖫借㞝vg싰샂㐜#譞⢤@k]鋰嘘䜾L熶塥_<\/⍾屈ﮊ_mY菹t뙺}Ox=w鮮4S1ꐩמּ'巑",
+ "㗓蟵ꂾe蠅匳(JP䗏෸\u0089耀왲": [{
+ "ᤃ㵥韎뤽\r?挥O쯡⇔㞚3伖\u0005P⋪\"D궣QLn(⚘罩䩢Ŏv䤘尗뼤됛O淽鋋闚r崩a{4箙{煷m6〈": {
+ "l곺1L": {
+ "T'ਤ?砅|੬Km]䄩\"(࿶<\/6U爢䫈倔郴l2㴱^줣k'L浖L鰄Rp今鎗⒗C얨M훁㡧ΘX粜뫈N꤇輊㌻켑#㮮샶-䍗룲蠝癜㱐V>=\\I尬癤t=": 7648082845323511446,
+ "鋞EP:<\/_`ၧe混ㇹBd⯢㮂驋\\q碽饩跓྿ᴜ+j箿렏㗑yK毢宸p謹h䦹乕U媣\\炤": [[
+ "3",
+ [
+ true,
+ 3.4058271399411134E-20,
+ true,
+ "揀+憱f逮@먻BpW曉\u001a㣐⎊$n劈D枤㡞좾\u001aᛁ苔౩闝1B䷒Ṋ݋➐ꀞꐃ磍$t੤_:蘺⮼(#N",
+ 697483894874368636,
+ [
+ "vᘯ锴)0訶}䳅⩚0O壱韈ߜ\u0018*U鍾䏖=䧉뽑单휻ID쿇嘗?ꌸῬ07",
+ -5.4858784319382006E18,
+ 7.5467775182251151E18,
+ -8911128589670029195,
+ -7531052386005780140,
+ null,
+ [
+ null,
+ true,
+ [[{
+ "1欯twG<u䝮␽ꇣ_ჟﱴଶ-쪋\"?홺k:莝Ꜫ*⺵꽹댅釔좵}P?=9렿46b\u001c\\S?(筈僦⇶爷谰1ྷa": true,
+ "TҫJYxڪ\\鰔℮혡)m_WVi眪1[71><\/Q:0怯押殃탷聫사<ỗꕧ蚨䡁nDꌕ\u001c녬~蓩<N蹑\"{䫥lKc혁뫖앺:vⵑ": "g槵?",
+ "aꨩ뻃싥렌1`롗}Yg>鲃g儊>ꏡl㻿/⑷*챳6㻜W毤緛ﹺᨪ4\u0013뺚J髬e3쳸䘦伧?恪&{L掾p+꬜M䏊d娘6": {
+ "2p첼양棜h䜢﮶aQ*c扦v︥뮓kC寵횂S銩&ǝ{O*य़iH`U큅ࡓr䩕5ꄸ?`\\᧫?ᮼ?t〟崾훈k薐ì/iy꤃뵰z1<\/AQ#뿩8jJ1z@u䕥": 1.82135747285215155E18,
+ "ZdN &=d년ᅆ'쑏ⅉ:烋5&៏ᄂ汎来L㯄固{钧u\\㊏튚e摑&t嗄ꖄUb❌?m䴘熚9EW": [{
+ "ଛ{i*a(": -8.0314147546006822E17,
+ "⫾ꃆY\u000e+W`௸ \"M뒶+\\뷐lKE}(NT킶Yj選篒쁶'jNQ硾(똡\\\"逌ⴍy? IRꜘ὞鄬﨧:M\\f⠋Cꚜ쫊ᚴNV^D䕗ㅖἔIao꿬C⍏8": [
+ 287156137829026547,
+ {
+ "H丞N逕<rO䎗:텕<\/䶩샌Sd%^ᵯ눐엑者g䖩똭蕮1U驣?Pⰰ\u001fp(W]67\u0015﫣6굺OR羸#촐F蒈;嘙i✵@_撶y㤏⤍(:᧗뼢༌朆@⏰㤨ꭲ?-n>⯲": {"": {
+ "7-;枮阕梒9ᑄZ": [[[[
+ null,
+ {
+ "": [[[[
+ -7.365909561486078E-19,
+ 2948694324944243408,
+ null,
+ [
+ true,
+ "荒\"并孷䂡쵼9o䀘F\u0002龬7⮹Wz%厖/*? a*R枈㌦됾g뒠䤈q딄㺿$쮸tᶎ릑弣^鏎<\/Y鷇驜L鿽<\/춋9Mᲆឨ^<\/庲3'l낢",
+ "c鮦\u001b두\\~?眾ಢu݆綑෪蘛轋◜gȃ<\/ⴃcpkDt誩܅\"Y",
+ [[
+ null,
+ null,
+ [
+ 3113744396744005402,
+ true,
+ "v(y",
+ {
+ "AQ幆h쾜O+꺷铀ꛉ練A蚗⼺螔j㌍3꽂楎䥯뎸먩?": null,
+ "蠗渗iz鱖w]擪E": 1.2927828494783804E-17,
+ "튷|䀭n*曎b✿~杤U]Gz鄭kW|㴚#㟗ഠ8u擨": [[
+ true,
+ null,
+ null,
+ {"⾪壯톽g7?㥜ώQꑐ㦀恃㧽伓\\*᧰閖樧뢇赸N휶䎈pI氇镊maᬠ탷#X?A+kНM ༑᩟؝?5꧎鰜ṚY즫궔 =ঈ;ﳈ?*s|켦蜌wM笙莔": [
+ null,
+ -3808207793125626469,
+ [
+ -469910450345251234,
+ 7852761921290328872,
+ -2.7979740127017492E18,
+ 1.4458504352519893E-20,
+ true,
+ "㽙깹?먏䆢:䴎ۻg殠JBTU⇞}ꄹꗣi#I뵣鉍r혯~脀쏃#釯:场:䔁>䰮o'㼽HZ擓௧nd",
+ [
+ 974441101787238751,
+ null,
+ -2.1647718292441327E-19,
+ 1.03602824249831488E18,
+ [
+ null,
+ 1.0311977941822604E-17,
+ false,
+ true,
+ {
+ "": -3.7019778830816707E18,
+ "E峾恆茍6xLIm縂0n2视֯J-ᤜz+ᨣ跐mYD豍繹⹺䊓몓ﴀE(@詮(!Y膽#᎙2䟓섣A䈀㟎,囪QbK插wcG湎ꤧtG엝x⥏俎j'A一ᯥ뛙6ㅑ鬀": 8999803005418087004,
+ "よ殳\\zD⧅%Y泥簳Uꈩ*wRL{3#3FYHା[d岀䉯T稉駅䞘礄P:闈W怏ElB㤍喬赔bG䠼U଄Nw鰯闀楈ePsDꥷ꭬⊊": [
+ 6.77723657904486E-20,
+ null,
+ [
+ "ཚ_뷎꾑蹝q'㾱ꂓ钚蘞慵렜떆`ⴹ⎼櫯]J?[t9Ⓢ !컶躔I᮸uz>3a㠕i,錃L$氰텰@7녫W㸮?羧W뇧ꃞ,N鋮숪2ɼ콏┍䁲6",
+ "&y?뢶=킕올Za惻HZk>c\u20b58i?ꦶcfBv잉ET9j䡡",
+ "im珊Ճb칧<D-諂*u2ꡜ췛~䬢(텸ﵦ>校\\뼾쯀",
+ 9.555715121193197E-20,
+ true,
+ {
+ "<㫚v6腓㨭e1㕔&&V∌ᗈT奄5Lጥ>탤?튣瑦㳆ꉰ!(ᙪ㿬擇_n쌯IMΉ㕨␰櫈ᱷ5풔蟹&L.첽e鰷쯃劼﫭b#ﭶ퓀7뷄Wr㢈๧Tʴશ㶑澕鍍%": -1810142373373748101,
+ "fg晌o?߲ꗄ;>C>?=鑰監侯Kt굅": true,
+ "䫡蓺ꑷ]C蒹㦘\"1ః@呫\u0014NL䏾eg呮፳,r$裢k>/\\<z": [[
+ null,
+ "C䡏>?ㄤᇰﻛ쉕1஥'Ċ\" \\_?쨔\"ʾr: 9S䘏禺ᪧꄂ㲄",
+ [[{
+ "*硙^+E쌺I1䀖ju?:⦈Ꞓl๴竣迃xKC/饉:\fl\"XTFᄄ蟭,芢<\/骡軺띜hꏘ\u001f銿<棔햳▨(궆*=乥b8\\媦䷀뫝}닶ꇭ(Kej䤑M": [{
+ "1Ꮼ?>옿I╅C<ގ?ꊌ冉SV5A㢊㶆z-๎玶绢2F뵨@㉌뀌o嶔f9-庒茪珓뷳4": null,
+ ";lᰳ": "CbB+肻a䄷苝*/볳+/4fq=㰁h6瘉샴4铢Y骐.⌖@哼猎㦞+'gꋸ㒕ߤ㞑(䶒跲ti⑴a硂#No볔",
+ "t?/jE幸YHT셵⩎K!Eq糦ꗣv刴w\"l$ο:=6:移": {
+ "z]鑪醊嫗J-Xm銌翁絨c里됏炙Ep㣋鏣똼嚌䀓GP﹖cmf4鹭T䅿꣭姧␸wy6ꦶ;S&(}ᎧKxᾂQ|t뻳k\"d6\"|Ml췆hwLt꼼4$&8Պ褵婶鯀9": {"嵃닢ᒯ'd᧫䳳#NXe3-붋鸿ଢ떓%dK\u0013䲎ꖍYV.裸R⍉rR3蟛\\:젯:南ĺLʆ넕>|텩鴷矔ꋅⒹ{t孶㓑4_": [
+ true,
+ null,
+ [
+ false,
+ "l怨콈lᏒ",
+ {
+ "0w䲏嬧-:`䉅쉇漧\\܂yㄨb%㽄j7ᦶ涶<": 3.7899452730383747E-19,
+ "ꯛTẀq纤q嶏V⿣?\"g}ი艹(쥯B T騠I=仵및X": {"KX6颠+&ᅃ^f畒y[": {
+ "H?뱜^?꤂-⦲1a㋞&ꍃ精Ii᤾챪咽쬘唂쫷<땡劈훫놡o㥂\\ KⴙD秼F氮[{'좴:례晰Iq+I쭥_T綺砸GO煝䟪ᚪ`↹l羉q쐼D꽁ᜅ훦: vUV": true,
+ "u^yﳍ0㱓#[y뜌앸ꊬL㷩?蕶蘾⻍KӼ": -7931695755102841701,
+ "䤬轉車>\u001c鴵惋\"$쯃྆⇻n뽀G氠S坪]ಲꨍ捇Qxኻ椕駔\\9ࣼ﫻읜磡煮뺪ᶚ볝l㕆t+sζ": [[[
+ true,
+ false,
+ [
+ null,
+ 3363739578828074923,
+ true,
+ {
+ "\"鸣詩 볰㑵gL㯦῅춝旫}ED辗ﮈI쀤-ꧤ|㠦Z\"娑ᕸ4爏騍㣐\"]쳝Af]茛⬻싦o蚁k䢯䩐菽3廇喑ޅ": 4.5017999150704666E17,
+ "TYႇ7ʠ值4챳唤~Zo&ݛ": false,
+ "`塄J袛㭆끺㳀N㺣`꽐嶥KﯝSVᶔ∲퀠獾N딂X\"ᤏhNﬨvI": {"\u20bb㭘I䖵䰼?sw䂷쇪](泒f\"~;꼪Fԝsᝦ": {"p,'ꉂ軿=A蚶?bƉ㏵䅰諬'LYKL6B깯⋩겦뎙(ᜭ\u0006噣d꾆㗼Z;䄝䚔cd<情@䞂3苼㸲U{)<6&ꩻ钛\u001au〷N숨囖愙j=BXW욕^x芜堏Ῑ爂뛷꒻t✘Q\b": [[
+ "籛&ଃ䩹.ꃩ㦔\\C颫#暪&!勹ꇶ놽攺J堬镙~軌C'꾖䣹㮅岃ᙴ鵣",
+ 4.317829988264744E15,
+ 6.013585322002147E-20,
+ false,
+ true,
+ null,
+ null,
+ -3.084633632357326E-20,
+ false,
+ null,
+ {
+ "\"짫愔昻 X\"藣j\"\"먁ཅѻ㘤㬯0晲DU꟒㸃d벀윒l䦾c੻*3": null,
+ "谈Wm陧阦咟ฯ歖擓N喴㋐銭rCCnVࢥ^♼Ⅾ젲씗刊S༝+_t赔\\b䚍뉨ꬫ6펛cL䊘᜼<\/澤pF懽&H": [
+ null,
+ {
+ "W\"HDUuΌ퀟M'P4࿰H똆ⰱﮯ<\/凐蘲\"C鴫ﭒж}ꭩ쥾t5yd诪ﮡ퍉ⴰ@?氐醳rj4I6Qt": 6.9090159359219891E17,
+ "絛ﳛ⺂": {"諰P㗮聦`ZQ?ꫦh*റcb⧱}埌茥h{棩렛툽o3钛5鮁l7Q榛6_g)ὄ\u0013kj뤬^爖eO4Ⱈ槞鉨ͺ订%qX0T썗嫷$?\\\"봅늆'%": [
+ -2.348150870600346E-19,
+ [[
+ true,
+ -6619392047819511778,
+ false,
+ [[
+ -1.2929189982356161E-20,
+ 1.7417192219309838E-19,
+ {"?嵲2࿐2\u0001啑㷳c縯": [
+ null,
+ [
+ false,
+ true,
+ 2578060295690793218,
+ {
+ "?\"殃呎#㑑F": true,
+ "}F炊_殛oU헢兔Ꝉ,赭9703.B数gTz3⏬": {
+ "5&t3,햓Mݸᵣ㴵;꣫䩍↳#@뫷䠅+W-ࣇzᓃ鿕ಔ梭?T䮑ꥬ旴]u뫵막bB讍:왳둛lEh=숾鱠p咐$짏#?g⹷ᗊv㷵.斈u頻\u0018-G.": "뽙m-ouࣤ஫牷\"`Ksꕞ筼3HlȨvC堈\"I]㖡玎r먞#'W賜鴇k'c룼髋䆿飉㗆xg巤9;芔cጐ/ax䊨♢큓r吓㸫೼䢗da᩾\"]屣`",
+ ":M딪<䢥喠\u0013㖅x9蕐㑂XO]f*Q呰瞊吭VP@9,㨣 D\\穎vˤƩs㜂-曱唅L걬/롬j㈹EB8g<\/섩o渀\"u0y&룣": ">氍緩L/䕑돯Ꟙ蕞^aB뒣+0jK⪄瑨痜LXK^힦1qK{淚t츔X:Vm{2r獁B뾄H첚7氥?쉟䨗ꠂv팳圎踁齀\\",
+ "D彤5㢷Gꪻ[lㄆ@὜⓰絳[ଃ獽쮹☒[*0ꑚ㜳": 9022717159376231865,
+ "ҖaV銣tW+$魿\u20c3亜~뫡ᙰ禿쨽㏡fṼzE/h": "5臐㋇Ჯ쮺? 昨탰Wム밎#'\"崲钅U?幫뺀⍾@4kh>騧\\0ҾEV=爐͌U捀%ꉼ 㮋<{j]{R>:gԩL\u001c瀈锌ﯲﳡꚒ'⫿E4暍㌗뵉X\"H᝜",
+ "ᱚגּ;s醒}犍SἿ㦣&{T$jkB\\\tḮ앾䤹o<避(tW": "vb⯽䴪䮢@|)",
+ "⥒퐁껉%惀뗌+녣迺顀q條g⚯i⤭룐M琹j̈́⽜A": -8385214638503106917,
+ "逨ꊶZ<\/W⫟솪㎮ᘇb?ꠔi\"H㧺x෷韒Xꫨฟ|]窽\u001a熑}Agn?Mᶖa<rఄ4Ů䢤슲Axģe곖㴤x竾郍B謉鸵k薽M)\"芣眜`菉ꉛ䴺": "鹏^ె캫?3耲]|Ü1䡒㝮]8e?䶍^",
+ "뿸樅#P㡊1M룮Uꪭ绢ꑮZ9꽸": {"\nJ^є|3袄ㅐ7⨆銦y睝⋷仴ct?[,<\/ㅬ`?갔髞%揁A೚C": {
+ " 䇞3갫䅪": [{
+ "0|⩁㑂砕ㅻ": null,
+ "D箳᠉`|=⼭)\"*࣊㦏LjO誋": "",
+ "ࠚDZmꗥ}ᷴ╈r7헴ȥ4Kp5a)o}鎘门L搰䆓'✎k俎c#T68ӏ⩶6L鎴<r൦$黊BQY㼳\\跿F慮⡨拵贀!甶V喅/": null,
+ "ⵣq⳹ﻨLk]晩1*y\\$%}䖶P煑㇆䈦E嫁櫕Y࣓嫨䓏OL낮梚㸇洛洚BYtgl∛S☕䉓宑⋢粚ꔯ꠼붠": ")ꬑ윤`\"Ⱓ<\/婽*Y䔸ᓰ_ﳍt슲坩隥&S糧䛮闵诌豐sh쯽邴*섴؏͎=㯨\"RVힳ,^t\"ac?䤒ꉀxHa=Uꛕ㐙TkF껾",
+ "弾cUAF?暤c덽.欀nK앭]r傊䀓ﯳ馽垃[䥛oI0N砊鈥헅Co쟋钄ㅷ㊌뷚7": [
+ null,
+ "૓鏨?^䆏{\u0006`X䧵儱&롡尙砡\u0006뻝쑬sj▻XfᬶgcㄢV >9韲4$3Ỵ^=쏍煤ፐ돷2䣃%鷠/eQ9頸쥎",
+ 2398360204813891033,
+ false,
+ 3.2658897259932633E-19,
+ null,
+ "?ꚃ8Nn㞷幵d䲳䱲뀙ꪛQ瑓鎴]䩋-鰾捡䳡??掊",
+ false,
+ -1309779089385483661,
+ "ᦲxu_/yecR.6芏.ᜇ過 ~",
+ -5658779764160586501,
+ "쒌:曠=l썜䢜wk#s蕚\"互㮉m䉤~0듐䋙#G;h숄옥顇෤勹(C7㢅雚㐯L⠅VV簅<",
+ null,
+ -4.664877097240962E18,
+ -4.1931322262828017E18,
+ {
+ ",": {
+ "v㮟麑䄠뤵g{M띮.\u001bzt뢜뵡0Ǥ龍떟Ᾰ怷ϓRT@Lꀌ樂U㏠⾕e扉|bJg(뵒㠶唺~ꂿ(땉x⻫싉쁊;%0鎻V(o\f,N鏊%nk郼螺": -1.73631993428376141E18,
+ "쟧摑繮Q@Rᕾ㭚㾣4隅待㓎3蒟": [
+ 4971487283312058201,
+ 8973067552274458613,
+ {
+ "`a揙ᣗ\u0015i<S幼訃锭B0&槩✨[Wp皩[g≊k葾x2ᡆ橲䲢W": true,
+ "kH皈Sꁱq傑u?솹풑~o^F=劣N*reJ沤wW苯7p㼹䎐a=ꮧL㷩냴nWꌑ㞱uu谁lVN珿᤻(e豶5#L쪉ᅄ઄\u0015숟봊P瀚X蓎": false,
+ "䫯דּ〖Sc䛭점L뵾pCꙞ\"엇즓_ﰛ톣ꫀ먩㺣㮠⭴!\\W┏t䖰軅y\u0014~ᇰ렢E7*俜䥪W䀩䷐h봆vjஉ묣༏G39.뼳輼:㮿ᐦA饕TUL}~": [
+ null,
+ 8.8648298810470003E17,
+ 5.735561205600924E-20,
+ null,
+ -102555823658171644,
+ 1.2674932032973067E-19,
+ {
+ "D胣O㯨\u0017Ku눓㒏텁nᨊ!Ꚇ廫_>Bo¸": 4.3236479112537999E18,
+ "HW&퉡ぁ圍<W)6悰ꠑHEp14xy峑ft\u0005s亘V튉䢮ꦈX嵐꬝?lI_덝춇-6Ss噺Nk-ﮥ큃܁郪*PR(S6╋@仙V懸뺵ﯜV粹": "9䗌斀4㐈^Qs隄硏j\u0003",
+ "Vk鶅C泹筁HX훉朗*r\\z顊誌儖4?n7᏾6몋䎡ﳈ],H頢p蚐㑄P4满E䏩V䬕ญL廂쒬쑨ꆷh迡ꍰ譖墎 ]鹿ฌ7ﶽ冭༽<ꈓS\\l䋮?_ユ檒?": -8598528325153980065,
+ "t=q퍣疻тZ\\錅J.镎|nfḷ鴒1厰L灯纜E]୦⥪]Ꮾ'羝p/咩0닳ﳁqﳖཽk ?X1Ft%ś뭢v鋋⺃爵⒗": [[
+ 5.0824756359232045E-19,
+ [
+ 7.268480839079619E-19,
+ {"탿^굞⧕iј덊ꀛw껩6ꟳXs酚\\>Y?瑡Qy훍q!帰敏s舠㫸zꚗaS歲v`G株巷Jp6킼 (귶鍔⾏⡈>M汐㞍ቴ꙲dv@i㳓ᇆ?黍": [
+ null,
+ 4997607199327183467,
+ "E㻎蠫ᐾ高䙟蘬洼旾﫠텛㇛?'M$㣒蔸=A_亀绉앭rN帮",
+ null,
+ [{
+ "Eᑞ)8<Z㡿W镀䛒C생V?0ꯦ+tL)`齳AjB姀XೳD빠㻲ƙgn9⑰ྍ῜&\"㚹>餧A5u&㗾q?": [
+ -1.969987519306507E-19,
+ null,
+ [
+ 3.42437673373841E-20,
+ true,
+ "e걷M墁\"割P␛퍧厀R䱜3ﻴO퓫r﹉⹊",
+ [
+ -8164221302779285367,
+ [
+ true,
+ null,
+ "爘y^-?蘞Ⲽꪓa␅ꍨ}I",
+ 1.4645984996724427E-19,
+ [{
+ "tY좗⧑mrzﺝ㿥ⴖ᥷j諅\u0000q賋譁Ꞅ⮱S\nࡣB/큃굪3Zɑ复o<\/;롋": null,
+ "彟h浠_|V4䦭Dᙣ♞u쿻=삮㍦\u001e哀鬌": [{"6횣楠,qʎꗇ鎆빙]㱭R굋鈌%栲j分僅ペ䇰w폦p蛃N溈ꡐꏀ?@(GI뉬$ﮄ9誁ꓚ2e甸ڋ[䁺,\u0011\u001cࢃ=\\+衪䷨ᯕ鬸K": [[
+ "ㅩ拏鈩勥\u000etgWVXs陂規p狵w퓼{뮵_i\u0002ퟑႢ⬐d6鋫F~챿搟\u0096䚼1ۼ칥0꣯儏=鋷牋ⅈꍞ龐",
+ -7283717290969427831,
+ true,
+ [
+ 4911644391234541055,
+ {
+ "I鈒첽P릜朸W徨觘-Hᎄ퐟⓺>8kr1{겵䍃〛ᬡ̨O귑o䝕'쿡鉕p5": "fv粖RN瞖蛐a?q꤄\u001d⸥}'ꣴ犿ꦼ?뤋?鵆쥴덋䡫s矷̄?ඣ/;괱絢oWfV<\/\u202cC,㖦0䑾%n賹g&T;|lj_欂N4w",
+ "짨䠗;䌕u i+r๏0": [{"9䥁\\఩8\"馇z䇔<\/ႡY3e狚쐡\"ุ6ﰆZ遖c\"Ll:ꮾ疣<\/᭙O◌납୕湞9⡳Und㫜\u0018^4pj1;䧐儂䗷ୗ>@e톬": {
+ "a⑂F鋻Q螰'<퇽Q贝瀧{ᘪ,cP&~䮃Z?gI彃": [
+ -1.69158726118025933E18,
+ [
+ "궂z簽㔛㮨瘥⤜䛖Gℤ逆Y⪾j08Sn昞ꘔ캻禀鴚P謦b{ꓮmN靐Mᥙ5\"睏2냑I\u0011.L&=?6ᄠ뻷X鸌t刑\"#z)o꫚n쳟줋",
+ null,
+ 7517598198523963704,
+ "ኑQp襟`uᩄr方]*F48ꔵn俺ሙ9뇒",
+ null,
+ null,
+ 6645782462773449868,
+ 1219168146640438184,
+ null,
+ {
+ ")ယ넌竀Sd䰾zq⫣⏌ʥ\u0010ΐ' |磪&p牢蔑mV蘸૰짬꺵;K": [
+ -7.539062290108008E-20,
+ [
+ true,
+ false,
+ null,
+ true,
+ 6574577753576444630,
+ [[
+ 1.2760162530699766E-19,
+ [
+ null,
+ [
+ "顊\\憎zXB,",
+ [{
+ "㇆{CVC9-MN㜋ઘR눽#{h@ퟨ!鼚׼XOvXS\u0017ᝣ=cS+梽៲綆16s덽휐y屬?ᇳG2ᴭ\u00054쫖y룇nKcW̭炦s/鰘ᬽ?J|퓀髣n勌\u0010홠P>j": false,
+ "箴": [
+ false,
+ "鍞j\"ꮾ*엇칬瘫xṬ⭽쩁䃳\"-⋵?ᦽ<cਔ↎⩧%鱩涎삧u9K⦈\"῝ᬑV绩킯愌ṱv@GꝾ跶Ꚇ(?䖃vI᧊xV\r哦j㠒?*=S굤紴ꊀ鹭쬈s<DrIu솹꧑?",
+ {
+ ".}S㸼L?t\u000fK⑤s~hU鱜꘦}쪍C滈4ꓗ蛌):ྦ\"顥이⢷ῳYLn\"?fꘌ>댎Ĝ": true,
+ "Pg帯佃籛n㔠⭹࠳뷏≻࿟3㞱!-쒾!}쭪䃕!籿n涻J5ਲ਼yvy;Rኂ%ᔡጀ裃;M⣼)쵂쑈": 1.80447711803435366E18,
+ "ꈑC⡂ᑆ㤉壂뎃Xub<\/쀆༈憓ق쨐ק\\": [
+ 7706977185172797197,
+ {"": {"K╥踮砆NWࡆFy韣7ä밥{|紒︧䃀榫rᩛꦡTSy잺iH8}ퟴ,M?Ʂ勺ᴹ@T@~꾂=I㙕뾰_涀쑜嫴曣8IY?ҿo줫fऒ}\\S\"ᦨ뵼#nDX": {
+ "♘k6?଱癫d68?㽚乳䬳-V顷\u0005蝕?\u0018䞊V{邾zじl]雏k臤~ൖH뒐iꢥ]g?.G碄懺䔛p<q꜉S岗_.%": 7688630934772863849,
+ "溗摽嗙O㧀,⡢⼰呠ꅧ㓲/葇䢛icc@-r\b渂ꌳ뻨饑觝ᖜ\\鮭\u0014엙㥀᧺@浹W2꛵{W률G溮킀轡䬆g㨑'Q聨៪网Hd\"Q늴ᱢﶨ邮昕纚枑?▰hr羌驀[痹<\/": [
+ -1.0189902027934687E-19,
+ {"窶椸릎뚻shE\"ꪗႥꎳU矖佟{SJ": [{"-慜x櫹XY-澐ܨ⣷ઢ鯙%Fu\u0000迋▒}᥷L嗭臖oញc넨\u0016/迎1b꯸g뢱㐧蓤䒏8C散삭|\"컪輩鹩\"\\g$zG䥽긷?狸꿭扵㲐:URON&oU8": [
+ null,
+ true,
+ null,
+ -2.8907335031148883E17,
+ -3864019407187144121,
+ {
+ "`빬d⵺4H뜳⧈쓑ohஸ*㶐ﻇ⸕䠵!i䝬﹑h夘▥ꗐ푹갇㵳TA鳠嚵\\B<X}3訒c⋝{*﫢w]璨-g捭\\j໵侠Ei层\u0011": 3.758356090089446E-19,
+ "䄘ﮐ)Y놞씃㾱陰큁:{\u2059/S⓴": [[
+ null,
+ [[
+ -3.8256602120220546E-20,
+ null,
+ 7202317607724472882,
+ "CWQ뚿",
+ null,
+ false,
+ true,
+ null,
+ 2857038485417498625,
+ 6.191302233218633E-20,
+ null,
+ -6795250594296208046,
+ [
+ true,
+ {
+ "%ዧ遰Yᚯ⚀x莰愒Vᔈ턗BN洝ꤟA1⍌l콹풪H;OX๫륞쪐ᰚц@͎黾a邬<L厒Xb龃7f웨窂二;": [[
+ null,
+ "耲?䙧㘓F6Xs틭멢.v뚌?鄟恠▽'묺競?WvᆾCtxo?dZ;䨸疎",
+ {
+ "@hWꉁ&\"빜4礚UO~C;う殩_ꀥ蘁奢^챟k→ᡱKMⵉ<\/Jㅲ붉L͟Q": false,
+ "tU뢂8龰I먽7,.Y搽Z툼=&⨥覽K乫햶㠸%#@Z끖愓^⍊⾂몒3E_噆J(廊ឭyd䞜鈬Ћ档'⣘I": {
+ "tK*ꔵ銂u艗ԃ쿏∳ꄂ霫X3♢9y?=ⲭdЊb&xy}": [
+ -4.097346784534325E-20,
+ null,
+ 6016848468610144624,
+ -8194387253692332861,
+ null,
+ {
+ "(祬诀譕쯠娣c봝r?畄kT뼾⌘⎨?noV䏘쥝硎n?": [
+ 1.82679422844617293E18,
+ [
+ false,
+ 2.6849944122427694E18,
+ true,
+ [
+ false,
+ {
+ ";0z⭆;화$bਔ瀓\"衱^?잢ᢛ⣿~`ꕉ薸⌳໿湘腌'&:ryБꋥၼ꒥筙꬜긨?X": -3536753685245791530,
+ "c;Y7釚Uꃣ割J༨Y戣w}c峰뢨㽑㫈0N>R$䅒X觨l봜A刊8R梒',}u邩퉕?;91Ea䈈믁G⊶芔h袪&廣㺄j;㡏綽\u001bN頸쳘橆": -2272208444812560733,
+ "拑Wﵚj鵼駳Oࣿ)#㾅顂N傓纝y僱栜'Bꐍ-!KF*ꭇK¦?䈴^:啤wG逭w᧯": "xᣱmYe1ۏ@霄F$ě꧘푫O䤕퀐Pq52憬ꀜ兴㑗ᡚ?L鷝ퟐ뭐zJꑙ}╆ᅨJB]\"袌㺲u8䯆f",
+ "꿽၅㔂긱Ǧ?SI": -1669030251960539193,
+ "쇝ɨ`!葎>瞺瘡驷錶❤ﻮ酜=": -6961311505642101651,
+ "?f7♄꫄Jᡔ훮e읇퍾፣䭴KhखT;Qty}O\\|뫁IῒNe(5惁ꥶㆷY9ﮡ\\ oy⭖-䆩婁m#x봉>Y鈕E疣s驇↙ᙰm<": {"퉻:dꂁ&efᅫ쫢[\"돈늖꺙|Ô剐1͖-K:ʚ᭕/;쏖㷛]I痐职4g<Oꗢ뫺N쯂륬J╆.`ᇵP轆&fd$?苅o궓vO侃沲⍩嚅沗 E%⿰얦wi\\*趫": [
+ 3504362220185634767,
+ false,
+ "qzX朝qT3軞T垈ꮲQ览ᚻ⻑쎎b驌䵆ꬠ5Fୗ䲁缿ꝁ蒇潇Ltᆄ钯蜀W欥ሺ",
+ "볰ɐ霬)젝鶼kwoc엷荁r \u001d쒷⎹8{%澡K늒?iﺩd=&皼倚J9s@3偛twὡgj䁠흪5⭉⨺役&놎cﺉ㺡N5",
+ false,
+ null,
+ "D0st[ni锹r*0k6ꀎ덇UX2⽼৞䃚粭#)Z桷36P]<\/`",
+ 4281410120849816730,
+ null,
+ -3256922126984394461,
+ 1.16174580369801549E18,
+ {
+ " ᆼꤗ~*TN긂<㡴턱℃酰^蘒涯잰淭傛2rൡet쾣䐇m*㸏y\"\\糮᧺qv쌜镜T@yg1譬ﭧﳭ\f": null,
+ "圾ᨿ0xᮛ禵ਗ਼D-㟻ẵ錚e\"赜.˶m)鴑B(I$<\/轴퉯揷⋏⏺*)宓쓌?*橯Lx\\f쩂㞼⇸\"ﺧ軂遳V\\땒\"캘c:G": null,
+ "?﵁_곢翸폈8㿠h열Q2㭛}RY㯕YT놂⽻e^B<\/맫ﻇ繱\u0017Gц⟊ᢑﵩS:jt櫣嗒⟰W㴚搦ᅉe[w䋺?藂翙Ⲱ芮䍘╢囥lpdu7r볺I 近qFyᗊ": [
+ "$b脬aᅠ襬育Bگ嵺Pw+'M<\/כֿn䚚v螁bN⒂}褺%lቦ阤\"ꓺᏗM牏,۞Ҷ!矬?ke9銊X괦)䈽틁脽ṫ䈞ᴆ^=Yᗿ遛4I귺⋥%",
+ false,
+ 2.9444482723232051E18,
+ 2072621064799640026,
+ "/_뇴뫢j㍒=Nꡦ↍Ժ赒❬톥䨞珯su*媸瀳鷔抡o흺-៳辏勷f绔:䵢搢2",
+ false,
+ "쒜 E䌐/큁\u0018懺_<\\隺&{wF⤊谼(<죽遠8?@*rᶊGd뻻갇&Ⳇq᣿e࢔t_ꩄ梸O詬C᧧Kꩠ풤9눙醅됞}竸rw?滨ӽK⥿ཊG魲']`๖5㄰",
+ -2375253967958699084,
+ {"嗱⿲\"f億ᝬ": {"v?䚑킡`◤k3,骥曘뒤Oᒱ㲹^圮᠀YT껛&촮P:G/T⣝#튣k3炩蠏k@橈䏷S䧕,熜晬k1鮥玸먚7䤡f绝嗚샴ᥒ~0q拮垑a뻱LⰖ_": [{
+ ":p尢": -6.688985172863383E17,
+ "A0\u0001疠ﻵ爻鼀湶I~W^岀mZx#㍈7r拣$Ꜷ疕≛⦒痋盩Vꬷ᭝ΩQꍪ療鈑A(劽詗ꭅo-獶鑺\"Ⓠ@$j탥;": [
+ 8565614620787930994,
+ [
+ "嶗PC?උQ㪣$&j幾㾷h慑 즊慧⪉霄M窊ꁷ'鮕)䊏铨m趦䗲(g罣ЮKVﯦ鏮5囗ﰼ鿦",
+ -7168038789747526632,
+ null,
+ -7.8069738975270288E16,
+ 2.25819579241348352E17,
+ -6.5597416611655936E18,
+ {
+ "瘕멦핓+?フZ귢z鍛V": {
+ "ᕾ": 1.7363275204701887E-19,
+ "㭌s뎹㳉": {"\u00187FI6Yf靺+UC쬸麁␲䂿긕R\\ᆮC?Φ耭\rOத际핅홦*베W㸫㯼᡹cㅜ|G㮗\u0013[o`?jHV앝?蒪꩚!퍫ᜦ㌇䚇鿘:@": [
+ "}푛Г콲<䟏C藐呈#2㓋#ྕ፟尿9q竓gI%랙mꍬoa睕贿J咿D_熏Zz皳験I豼B扳ḢQ≖㻹㱣D䝦練2'ᗍ㗣▌砲8罿%హF姦;0悇<\/\"p嚧",
+ -710184373154164247,
+ "Vo쫬⬾ꝫⴷŻ\u0004靎HBꅸ_aVBHbN>Z4⍜kเꛘZ⥺\\Bʫᇩ鄨魢弞&幟ᓮ2̊盜",
+ -9006004849098116748,
+ -3118404930403695681,
+ {
+ "_彃Y艘-\"Xx㤩㳷瑃?%2䐡鵛o<A?\"顜ᘌΈ;ⷅC洺L蚴蚀voq:,Oo4쪂)": 5719065258177391842,
+ "l륪맽耞塻論倐E㗑/㲕QM辬I\"qi酨玑㖪5q]尾魨鲡ƞY}⮯蠇%衟Fsf윔䐚찤i腳": {"ꢪ'a䣊糈": {"밑/♋S8s㼴5瓹O{댞\"9XﰇlJ近8}q{긧ⓈI᱑꿋腸D瀬H\"ﺬ'3?}\u0014#?丙㑯ᥨ圦',g鑠(樴턇?": [
+ 2.5879275511391145E18,
+ null,
+ [
+ "3㼮ꔌ1Gẃ2W龙j͊{1囐㦭9x宠㑝oR䐕犽",
+ 1268729930083267852,
+ "땕軚⿦7C",
+ [
+ -3.757935946502082E18,
+ "\"赌'糬_2뭾᝝b",
+ {
+ "(a䕎ጽjҰD4.ᴡ66ԃ畮<\/l`k癸\\㇋ࣆ욯R㫜픉녬挛;ڴ맺`.;焓q淞뮕ٹ趴r蔞ꯔ䟩v粏u5<\/pZ埖Skrvj帛=\u0005aa": null,
+ "璄≩ v몛ᘮ%?:1頌챀H㷪뉮k滘e": [
+ "ꤾ{`c샬왌펡[俊络vmz㪀悫⸹ᷥ5o'㾵 L蹦qjYIYណԠW냁剫<\/W嗂0,}",
+ 2.4817616702666762E18,
+ false,
+ null,
+ null,
+ -8.6036958071260979E17,
+ null,
+ -1.2744078022652468E-19,
+ -4.4752020268429594E17,
+ 1.13672865156637872E17,
+ [
+ false,
+ false,
+ null,
+ -4.178004168554046E-20,
+ true,
+ 2927542512798605527,
+ {
+ ".ꔓ뉤1䵬cHy汼䊆賓ᐇƩ|樷❇醎㬅4\u0003赵}#yD5膏晹뱓9ꖁ虛J㺕 t䊛膎ؤ": {
+ "rVtᓸ5^`েN⹻Yv᥋lꌫt拘?<鮰넿ZC?㒽^": {"␪k_:>귵옔夘v*탋职&㳈챗|O钧": [
+ false,
+ "daꧺdᗹ羞쯧H㍤鄳頳<型孒ン냆㹀f4㹰\u000f|C*ሟ鰠(O<ꨭ峹ipຠ*y೧4VQ蔔hV淬{?ᵌEfrI_",
+ "j;ꗣ밷邍副]ᗓ",
+ -4299029053086432759,
+ -5610837526958786727,
+ [
+ null,
+ [
+ -1.3958390678662759E-19,
+ {
+ "lh좈T_믝Y\"伨\u001cꔌG爔겕ꫳ晚踍⿻읐T䯎]~e#฽燇\"5hٔ嶰`泯r;ᗜ쮪Q):/t筑,榄&5懶뎫狝(": [{
+ "2ፁⓛ]r3C攟וּ9賵s⛔6'ஂ|\"ⵈ鶆䐹禝3\"痰ࢤ霏䵩옆䌀?栕r7O簂Isd?K᫜`^讶}z8?z얰T:X倫⨎ꑹ": -6731128077618251511,
+ "|︦僰~m漿햭\\Y1'Vvخ굇ቍ챢c趖": [null]
+ }],
+ "虌魿閆5⛔煊뎰㞤ᗴꥰF䮥蘦䂪樳-K᝷-(^\u20dd_": 2.11318679791770592E17
+ }
+ ]
+ ]
+ ]},
+ "묗E䀳㧯᳀逞GMc\b墹㓄끖Ơ&U??펌鑍 媋k))ᄊ": null,
+ "묥7콽벼諌J_DɯﮪM殴䣏,煚ྼ`Y:씧<\/⩫%yf䦀!1Ჶk춎Q米W∠WC跉鬽*ᛱi<?,l<崣炂骵*?8푐៣ⰵ憉⎑.,Nw罣q+ο컆弎": false
+ },
+ "e[|଀+lꑸ㝈TT?뿿|ꫛ9`㱯䊸楋-곳賨?쳁k棽擋wQ餈⟐Nq[q霩䵀뷮锅ꚢ": 5753148631596678144,
+ "sᓝ鴻߸d렶ὕ蜗ဟ툑!诉౿": false,
+ "|4䕳鵻?䈔(]틍/Ui#湻{듲ーMዀt7潔泄Ch⸨}쏣`螧銚㋼壯kⰥQ戵峉갑x辙'첛": "jd䘯$䕌茷!auw眶ㅥ䁣ꆢ民i",
+ "剖駰ꞫsM2]ᾴ2ࡷ祅拌Av狔꩛'ꓗ킧ꣁ0酜✘O'": false,
+ "澩뢣ꀁeU~D\\ꮡ킠": "v^YC嚈ί\u0007죋h>㴕L꘻ꀏ쓪\"_g鿄'#t⽙?,Wg㥖|D鑆e⥏쪸僬h鯔咼ඡ;4TK聎졠嫞"
+ }
+ ]
+ ]
+ }
+ ]
+ ]
+ ]}}
+ }
+ ]}
+ },
+ "뿋뀾淣截䔲踀&XJ펖꙯^Xb訅ꫥgᬐ>棟S\"혧騾밫겁7-": "擹8C憎W\"쵮yR뢩浗絆䠣簿9䏈引Wcy䤶孖ꯥ;퐌]輩䍐3@{叝 뽸0ᡈ쵡Ⲇ\u001dL匁꧐2F~ݕ㪂@W^靽L襒ᦘ~沦zZ棸!꒲栬R"
+ }
+ ]
+ ],
+ "Z:덃൛5Iz찇䅄駠㭧蓡K1": "e8᧤좱U%?ⵇ䯿鿝\u0013縮R∱骒EO\u000fg?幤@֗퉙vU`",
+ "䐃쪈埽້=Ij,쭗쓇చ": false
+ }]}}
+ ]
+ }
+ ]}
+ }
+ ]
+ ]
+ ],
+ "咰긖VM]᝼6䓑쇎琺etDҌ?㞏ꩄ퇫밉gj8蠃\"⩐5䛹1ࣚ㵪": "ക蹊?⎲⧘⾚̀I#\"䈈⦞돷`wo窭戕෱휾䃼)앷嵃꾞稧,Ⴆ윧9S?೗EMk3Მ3+e{⹔Te驨7䵒?타Ulg悳o43"
+ }
+ ],
+ "zQᤚ纂땺6#ٽ﹧v￿#ࠫ휊冟蹧텈ꃊʆ?&a䥯De潝|쿓pt瓞㭻啹^盚2Ꝋf醪,얏T窧\\Di䕎谄nn父ꋊE": -2914269627845628872,
+ "䉩跐|㨻ᷢ㝉B{蓧瞸`I!℄욃힕#ೲᙾ竛ᔺCjk췒늕貭词\u0017署?W딚%(pꍁ⤼띳^=on뺲l䆼bzrﳨ[&j狸䠠=ᜑꦦ\u2061յnj=牲攑)M\\龏": false,
+ "뎕y絬᫡⥮Ϙᯑ㌔/NF*˓.,QEzvK!Iwz?|쥾\"ꩻL꼗Bꔧ賴緜s뉣隤茛>ロ?(?^`>冺飒=噸泥⺭Ᲊ婓鎔븜z^坷裮êⓅ໗jM7ﶕ找\\O": 1.376745434746303E-19
+ },
+ "䐛r滖w㏤<k;l8ꡔጵ⮂ny辶⋃퍼僮z\"﮲X@t5෼暧퓞猋♅䦖QC鹮|픨( ,>,|Nዜ": false
+ }
+ ]],
+ "@꿙?薕尬 gd晆(띄5躕ﻫS蔺4)떒錸瓍?~": 1665108992286702624,
+ "w믍nᏠ=`঺ᅥC>'從됐槷䤝眷螄㎻揰扰XᅧC贽uჍ낟jKD03T!lDV쀉Ӊy뢖,袛!终캨G?鉮Q)⑗1쾅庅O4ꁉH7?d\u0010蠈줘월ސ粯Q!낇껉6텝|{": null,
+ "~˷jg쿤촖쉯y": -5.5527605669177098E18,
+ "펅Wᶺzꐆと푭e?4j仪열[D<鈑皶婆䵽ehS?袪;HꍨM뗎ば[(嗏M3q퍟g4y╸鰧茀[Bi盤~﫝唎鋆彺⦊q?B4쉓癚O洙킋툈䶯_?ퟲ": null
+ }
+ ]
+ ]]
+ ]],
+ "꟱Ԕ㍤7曁聯ಃ錐V䷰?v㪃૦~K\"$%请|ꇹn\"k䫛㏨鲨\u2023䄢\u0004[<S8ᐬ뭩脥7U.m࿹:D葍┆2蘸^U'w1젅;䠆ꋪB껮>︊VJ?䶟ាꮈ䗱=깘U빩": -4863152493797013264
+ }
+ ]}]}
+ ]
+ }}}
+ ],
+ "쏷쐲۹퉃~aE唙a챑,9㮹gLHd'䔏|킗㍞䎥&KZYT맵7䥺N<Hp4ꕭ⹠꽐c~皽z": "课|ᖾ䡁廋萄䐪W\u0016&Jn괝b~摓M>ⱳ同莞鿧w\\༌疣n/+ꎥU\"封랾○ퟙAJᭌ?9䛝$?驔9讐짘魡T֯c藳`虉C읇쐦T"
+ }
+ ],
+ "谶개gTR￐>ၵ͚dt晑䉇陏滺}9㉸P漄": -3350307268584339381
+ }]
+ ]
+ ]
+ ]]
+ ]
+ ],
+ "0y꟭馋X뱔瑇:䌚￐廿jg-懲鸭䷭垤㒬茭u賚찶ಽ+\\mT땱\u20821殑㐄J쩩䭛ꬿNS潔*d\\X,壠뒦e殟%LxG9:摸": 3737064585881894882,
+ "풵O^-⧧ⅶvѪ8廸鉵㈉ר↝Q㿴뺟EႳvNM:磇>w/៻唎뷭୥!냹D䯙i뵱貁C#⼉NH6`柴ʗ#\\!2䂗Ⱨf?諳.P덈-返I꘶6?8ꐘ": -8934657287877777844,
+ "溎-蘍寃i诖ര\"汵\"\ftl,?d⼡쾪⺋h匱[,෩I8MҧF{k瓿PA'橸ꩯ綷퉲翓": null
+ }
+ ]
+ ],
+ "ោ係؁<元": 1.7926963090826924E-18
+ }}]
+ }
+ ]
+ ]]}]
+ }]
+ ]
+ ]
+ ]
+ ],
+ "ጩV<\"ڸsOᤘ": 2.0527167903723048E-19
+ }]
+ ]}
+ ]
+ ]],
+ "∳㙰3젴p᧗䱙?`<U὇<\/意E[ᮚAj诂ᒽ阚uv徢ဎ떗尔Ᵹ훀쩑J䐴?⪏=륪ᆩ푰ஓ㐕?럽VK\"X?檨လ齿I/耉A(AWA~⏯稐蹫": false,
+ "偒妝뾇}䀼链i⇃%⋜&璪Ix渥5涧qq棩ᥝ-⠫AA낇yY颕A*裦O|n?䭬혗F": null,
+ "琭CL얭B혆Kॎ`鎃nrsZiժW砏)?p~K~A眱䲏QO妣\u001b\u001b]ᵆᆯ&㐋ᏹ豉뺘$ꭧ#j=C)祤⫢歑1o㒙諩": 7028426989382601021,
+ "쳱冲&ဤ䌏앧h胺-齱H忱8왪RDKᅒ䬋ᔶS*J}ስ漵'㼹뮠9걢9p봋경ጕtởꚳT䶽瘙%춴`@nಆ4<d??#僜ᙤ钴=薔ꭂbLXNam蹈": "樭る蹿= Uurwkn뙧⌲%\"쑃牪\"cq윕o@",
+ "溌[H]焎SLㅁ?뀼䫨災W": 1.1714289118497062E-19,
+ "ﬢp븇剌燇kĔ尘㶿㴞睠꾘Ia;s❺^)$穮?sHᢥ폪l": null
+ }
+ ]
+ }
+ ]
+ },
+ "TKnzj5o<\/K㊗ꗣ藠⦪駇>yZA8Ez0,^ᙛ4_0븢\u001ft:~䎼s.bb룦明yNP8弆C偯;⪾짍'蕴뮛": -6976654157771105701,
+ "큵ꦀ\\㇑:nv+뒤燻䀪ﴣ﷍9ᚈ኷K㚊誦撪䚛,ꮪxሲ쳊\u0005HSf?asg昱dqꬌVꙇ㼺'k*'㈈": -5.937042203633044E-20
+ }
+ ]
+ }],
+ "?}\u20e0],s嶳菋@#2u쒴sQS䩗=ꥮ;烌,|ꘔ䘆": "ᅩ영N璠kZ먕眻?2ቲ芋眑D륟渂⸑ﴃIRE]啗`K'"
+ }},
+ "쨀jmV賂ﰊ姐䂦玞㬙ᏪM᪟Վ씜~`uOn*ॠ8\u000ef6??\\@/?9見d筜ﳋB|S䝬葫㽁o": true
+ },
+ "즛ꄤ酳艚␂㺘봿㎨iG৕ࡿ?1\"䘓您\u001fSኝ⺿溏zៀ뻤B\u0019?윐a䳵᭱䉺膷d:<\/": 3935553551038864272
+ }
+ ]
+ ]}
+ ]]
+ ]]
+ ]}
+ }
+ ]
+ }
+ ]]}},
+ "᥺3h↛!ꋰy\"攜(ெl䪕oUkc1A㘞ᡲ촾ᣫ<\/䒌E㛝潨i{v?W౾H\\RჅpz蝬R脾;v:碽✘↯삞鷱o㸧瑠jcmK7㶧뾥찲n": true,
+ "ⶸ?x䊺⬝-䰅≁!e쩆2ꎿ准G踌XXᩯ1߁}0?.헀Z馟;稄\baDꟹ{-寪⚈ꉷ鮸_L7ƽᾚ<\u001bጨA䧆송뇵⨔\\礍뗔d设룱㶉cq{HyぱR㥽吢ſtp": -7985372423148569301,
+ "緫#콮IB6<\/=5Eh礹\t8럭@饹韠r㰛斣$甝LV췐a갵'请o0g:^": "䔨(.",
+ "띳℡圤pン௄ĝ倧訜B쁟G䙔\"Sb⓮;$$▏S1J뢙SF|赡g*\"Vu䲌y": "䪈&틐),\\kT鬜1풥;뷴'Zေ䩹@J鞽NぼM?坥eWb6榀ƩZڮ淽⺞삳煳xჿ絯8eⶍ羷V}ჿ쎱䄫R뱃9Z>'\u20f1ⓕ䏜齮"
+ }
+ ]
+ ]]]
+ }}
+ }
+ ]
+ ]},
+ "펮b.h粔폯2npX詫g錰鷇㇒<쐙S値bBi@?镬矉`剔}c2壧ଭfhY깨R()痩⺃a\\⍔?M&ﯟ<劜꺄멊ᄟA\"_=": null
+ },
+ "~潹Rqn榢㆓aR鬨侅?䜑亡V_翅㭔(䓷w劸ၳDp䀅<\/ﰎ鶊m䵱팱긽ꆘ<tD쇋>긓准D3掱;o:_ќ)껚콥8곤d矦8nP倥ꃸI": null,
+ "뾎/Q㣩㫸벯➡㠦◕挮a鶧⋓偼\u00001뱓fm覞n?㛅\"": 2.8515592202045408E17
+ }],
+ ",": -5426918750465854828,
+ "2櫫@0柡g䢻/gꆑ6演&D稒肩Y?艘/놘p{f투`飷ᒉ챻돎<늛䘍ﴡ줰쫄": false,
+ "8(鸑嵀⵹ퟡ<9㣎Tߗ┘d슒ل蘯&㠦뮮eࠍk砝g 엻": false,
+ "d-\u208b?0ﳮ嵙'(J`蔿d^踅⤔榥\\J⵲v7": 6.8002426206715341E17,
+ "ཎ耰큓ꐕ㱷\u0013y=詽I\"盈xm{0쾽倻䉚ષso#鰑/8㸴짯%ꀄ떸b츟*\\鲷礬ZQ兩?np㋄椂榨kc᡹醅3": false,
+ "싊j20": false
+ }]]
+ ]],
+ "俛\u0017n緽Tu뫉蜍鼟烬.ꭠIⰓ\"Ἀ᜾uC쎆J@古%ꛍm뻨ᾀ画蛐휃T:錖㑸ዚ9죡$": true
+ }
+ ]
+ ],
+ "㍵⇘ꦖ辈s}㱮慀밒s`\"㞟j:`i픻Z<C1衽$\"-饧?℃\u0010⼒{p飗%R\"䲔\")칀\\%": true,
+ "苧.8\u00120ݬ仓": 6912164821255417986,
+ "떎顣俁X;.#Q틝.笂'p쟨唒퐏랩냆¦aⱍ{谐.b我$蜑SH\u000f琾=䟼⣼奔ᜏ攕B&挰繗㝔ꅂ-Qv\\0䶝䚥ぺio[㑮-ᇼ䬰컪ṼiY){데\u0010q螰掻~\n輚x\u0014罺)軴": 3.024364150712629E-20
+ }
+ ]
+ ]
+ ]
+ ]}
+ ]]
+ }
+ ]
+ ]]
+ ]
+ ]]]],
+ "\"凲o肉Iz絾豉J8?i~傠᫽䇂!WD溊J?ᡒvs菆嵹➒淴>섫^諎0Ok{켿歁෣胰a2﨤[탳뚬쎼嫭뉮m": 409440660915023105,
+ "w墄#*ᢄ峠밮jLa`ㆪ꺊漓Lで끎!Agk'ꁛ뢃㯐岬D#㒦": false,
+ "ଦPGI䕺L몥罭ꃑ궩﮶#⮈ᢓӢ䚬p7웼臧%~S菠␌힀6&t䳙y㪘냏\\*;鉏ᅧ鿵'嗕pa\"oL쇿꬈Cg": "㶽1灸D⟸䴅ᆤ뉎﷛渤csx 䝔цꬃ锚捬?ຽ+x~꘩uI࡞\u0007栲5呚ẓem?袝\")=㥴䨃pac!/揎Y",
+ "ᷱo\\||뎂몷r篙|#X䦜I#딌媸픕叞RD斳X4t⯩夬=[뭲r=绥jh뷱츝⪘%]⚋܈㖴スH텹m(WO曝劉0~K3c柢Ր㏉着逳~": false,
+ "煽_qb[첑\\륌wE❽ZtCNﭝ+餌ᕜOꛭ": "{ﳾ쉌&s惧ᭁⵆ3䢫;䨞팑꒪흘褀࢖Q䠿V5뭀䎂澻%받u5텸oA⮥U㎦;B䳌wz䕙$ឿ\\௅婺돵⪾퐆\\`Kyौꋟ._\u0006L챯l뇠Hi䧈偒5",
+ "艊佁ࣃ롇䱠爬!*;⨣捎慓q靓|儑ᨋL+迥=6㒺딉6弄3辅J-㕎뛄듘SG㆛(\noAzQꝱ䰩X*ぢO퀌%펠낌mo틮a^<\/F&_눊ᾉ㨦ы4\"8H": 2974648459619059400,
+ "鬙@뎣䫳ၮ끡?){y?5K;TA*k溱䫜J汃ꂯ싔썍\u001dA}룖(<\/^,": false,
+ "몏@QꋦFꊩᒐ뎶lXl垨4^郣|ꮇ;䝴ᝓ}쵲z珖": null
+ }
+ ]]]],
+ ":_=닧弗D䙋暨鏛. 㱻붘䂍J儒&ZK/녩䪜r囁⽯D喠죥7⹌䪥c\u001a\u2076￞妈朹oLk菮F౟覛쐧㮏7T;}蛙2{9\"崓bB<\/⡷룀;즮鿹)丒툃୤뷠5W⊢嶜(fb뭳갣": "E{响1WM"
+ }},
+ "䘨tjJ驳豨?y輊M*᳑梵瞻઻ofQG瑮e": 2.222802939724948E-19,
+ "䮴=❑➶T෋w䞜\"垦ꃼUt\u001dx;B$뵣䙶E↌艣ᡥ!᧟;䱀[䔯k쬃`੍8饙른熏'2_'袻tGf蒭J땟as꯳╖&啒zWࡇᒫYSᏬ\u0014ℑ첥鈤|cG~Pᓮ\">\"": "ႆl\f7V儊㦬nHꄬꨧC{쐢~C⮃⛓嶦vꄎ1w鰠嘩뿠魄&\"_qMⵖ釔녮ꝇ 㝚{糍J哋 cv?-jkﻯྌ鹑L舟r",
+ "龧葆yB✱H盋夔ﶉ?n*0(": "ꧣኆ㢓氥qZZ酒ຜ)鮢樛)X䣆gTSґG텞k.J圬疝롫쯭z L:\\ྤ@w炋塜쿖ᾳy뢀䶃뱝N䥨㚔勇겁#p",
+ "도畎Q娡\"@S/뼋:䵏!P衅촚fVHQs✜ᐫi㻑殡B䜇%믚k*U#濨낄~": "ꍟዕ쳸ꍈ敋&l妏\u0005憡멗瘌uPgᅪm<\/To쯬锩h뒓k"
+ }
+ ]
+ }],
+ "墥홞r绚<\/⸹ⰃB}<躅\\Y;๑@䔸>韫䜲뱀X뗩鿥쩗SI%ﴞ㳕䛇?<\/\u00018x\\&侂9鋙a[LR㋭W胕)⡿8㞙0JF,}?허d1cDMᐃ␛鄝ⱕ%X)!XQ": "ⳍꗳ=橇a;3t⦾꼑仈ူaᚯ⯋ꕃAs鴷N⍕_䎃ꙎAz\u0016䯷\\<࿫>8q{}キ?ᣰ}'0ᴕ펓B┦lF#趤厃T?㕊#撹圂䆲"
+ },
+ "܋닐龫論c웑": false,
+ "ㇿ/q\"6-co髨휝C큦#\u001b4~?3䐹E삇<<": 7.600917488140322E-20,
+ "䁝E6?㣖ꃁ间t祗*鑠{ḣV(浾h逇큞=W?ૉ?nꇽ8ꅉຉj으쮺@Ꚅ㰤u]Oyr": "v≁᫸_*όAඤԆl)ۓᦇQ}폠z༏q滚",
+ "ソ᥊/넺I": true
+ }]]
+ ]
+ ]
+ ]
+ ]]
+ },
+ "䭑Ik攑\u0002QV烄:芩.麑㟴㘨≕": true,
+ "坄꿕C쇻풉~崍%碼\\8\"䬦꣙": null,
+ "欌L圬䅘Y8c(♺2?ON}o椳s宥2䉀eJ%闹r冁O^K諭%凞⺉⡻,掜?$ꥉ?略焕찳㯊艼誜4?\"﯎<゛XፈINT:詓 +": -1.0750456770694562E-19,
+ "獒àc뜭싼ﺳ뎤K`]p隨LtE": null,
+ "甙8䵊神EIꩤ鐯ᢀ,ﵮU䝑u疒ử驺䚿≚ഋ梶秓F`覤譐#짾蔀묊4<媍쬦靪_Yzgcࡶ4k紥`kc[Lﮗ簐*I瀑[⾰L殽鑥_mGȠ<\/|囹灠g桰iri": true,
+ "챓ꖙꟻ좝菇ou,嗠0\\jK핻뜠qwQ?ഩ㼕3Y彦b\u009bJ榶N棨f?됦鏖綃6鳵M[OE봨u햏.Ꮁ癜蟳뽲ꩌ뻾rM豈R嗀羫 uDꎚ%": null
+ },
+ "V傜2<": 7175127699521359521
+ }],
+ "铫aG切<\/\"ী⊆e<^g࢛)D顝nאַ饼\u008c猪繩嵿ﱚCꡬ㻊g엺A엦\u000f暿_f꿤볝㦕桦`蒦䎔j甬%岝rj 糏": "䚢偎눴Au<4箞7礦Iﱔ坠eȧ䪸u䵁p|逹$嗫쨘ꖾ﷐!胠z寓팢^㨔|u8Nሇe텔ꅦ抷]،鹎㳁#༔繁 ",
+ "낂乕ꃻ볨ϱ-ꇋ㖍fs⿫)zꜦ/K?솞♞ꑌ宭hJ᤭瑥Fu": false,
+ "쟰ぜ魛G\u0003u?`㾕ℾ㣭5螠烶這趩ꖢ:@咕ꐶx뒘느m䰨b痃렐0鳊喵熬딃$摉_~7*ⱦ녯1錾GKhJ惎秴6'H妈Tᧅ窹㺒疄矤铟wላ": null,
+ "쯆q4!3錕㲏ⵆ㇛꘷Z瑩뭆\\◪NH\u001d\\㽰U~㯶<\"쑣낞3ᵤ'峉eꢬ;鬹o꣒木X*長PXᘱu\"䠹n惞": null,
+ "ᅸ祊\"&ꥴCjࢼ﴿?䡉`U效5殼㮞V昽ꏪ#ﺸ\\&t6x꠹盥꣰a[\u001aꪍSpe鎿蠹": -1.1564713893659811E-19
+ }
+ ]]
+ ]
+ ]
+ ],
+ "羵䥳H,6ⱎ겾|@t\"#햊1|稃 섭)띜=뻔ꡜ???櫎~*ῡ꫌/繣ﻠq": null
+ }
+ ]}
+ ]},
+ "츤": false
+ }},
+ "s": 3.7339341963399598E18
+ }
+ ],
+ "N,I?1+㢓|ࣱ嶃쩥V2\u0012(4EE虪朶$|w颇v步": "~읢~_,Mzr㐫YB溓E淚\"ⅹ䈔ᏺ抙 b,nt5V㐒J檶ꏨ⻔?",
+ "Q껑ꡡ}$넎qH煔惍/ez^!ẳF댙䝌馻剁8": "梲;yt钰$i冄}AL%a j뜐奷걳뚾d꿽*ሬuDY3?뮟鼯뮟w㍪틱V",
+ "o{Q/K O胟㍏zUdꀐm&⨺J舕⾏魸訟㌥[T籨櫉唐킝 aṭ뱫촙莛>碶覆⧬짙쭰ׯdAiH໥벤퐥_恸[ 0e:죃TC弼荎뵁DA:w唵ꣁ": null,
+ "὏樎䵮軧|?౗aWH쩃1 ꅭsu": null
+ }
+ ]
+ },
+ "勂\\&m鰈J釮=Ⲽ鳋+䂡郑": null,
+ "殣b綊倶5㥗惢⳷萢ᑀ䬄镧M^ﱴ3⣢翣n櫻1㨵}ኯ뗙顖Z.Q➷ꮨ뗇\u0004": "ꔙ䁼>n^[GीA䨟AM琢ᒊS쨲w?d㶣젊嘶纝麓+愣a%気ྞSc됓ᔘ:8bM7Xd8㶑臌]Ꙥ0ꐭ쒙䫣挵C薽Dfⵃ떼᷸",
+ "?紡.셪_෨j\u0013Ox┠$Xᶨ-ᅇo薹-}軫;y毝㪜K㣁?.EV쮱4둽⛻䤜'2盡\u001f60(|e쐰㼎ᦀ㒧-$l@ﻑ坳\u0003䭱响巗WFo5c㧆T턁Y맸♤(": -2.50917882560589088E17
+ }}
+ ],
+ "侸\\릩.᳠뎠狣살cs项䭩畳H1s瀉븇19?.w骴崖㤊h痠볭㞳㞳䁮Ql怠㦵": "@䟴-=7f",
+ "鹟1x௢+d ;vi䭴FSDS\u0004hꎹ㚍?⒍⦏ў6u,扩@됷Su)Pag휛TᒗV痩!瞏釀ꖞ蘥&ೞ蘐ꭰꞇᝎ": "ah懱Ժ&\u20f7䵅♎඀䞧鿪굛ౕ湚粎蚵ᯋ幌YOE)५襦㊝Y*^\"R+ඈ咷蝶9ꥂ榨艦멎헦閝돶v좛咊E)K㓷ྭr",
+ "搆q쮦4綱켙셁.f4<\/g<籽늷?#蚴픘:fF\u00051㹉뀭.ᰖ풎f֦Hv蔎㧤.!䭽=鞽]음H:?\"-4": 8.740133984938656E-20
+ }]}
+ }
+ ],
+ "tVKn딩꘥⊾蹓᤹{\u0003lR꼽ᄲQFᅏ傅ﱋ猢⤊ᔁ,E㓒秤nTතv`♛I\u0000]꫔ṞD\"麵c踝杰X&濿또꣹깳౥葂鿎\\aꡨ?": 3900062609292104525
+ }
+ ],
+ "ਉ샒⊩Lu@S䧰^g": -1.1487677090371648E18,
+ "⎢k⑊꬗yᏫ7^err糎Dt\u000bJ礯확ㆍ沑サꋽe赔㝢^J\u0004笲㿋idra剰-᪉C錇/Ĝ䂾ညS지?~콮gR敉⬹'䧭": 1901472137232418266,
+ "灗k䶥:?촽贍쓉꓈㒸g獘[뵎\\胕?\u0014_榙p.j稶,$`糉妋0>Fᡰly㘽$?": "]ꙛO赎&#㠃돱剳\"<◆>0誉齐_|z|裵씪>ᐌ㼍\"Z[琕}O?G뚇諦cs⠜撺5cu痑U圲\u001c?鴴計l춥/╓哼䄗茏ꮅ뫈댽A돌롖뤫V窗讬sHd&\nOi;_u"
+ }
+ ],
+ "Uﺗ\\Y\\梷䄬~\u0002": null,
+ "k\"Y磓ᗔ휎@U冈<\/w컑)[": false,
+ "曏J蝷⌻덦\u001f㙳s꥓⍟邫P늮쥄c∬ྡྷ舆렮칤Z趣5콡넛A쳨\\뀙骫(棻.*&輛LiIfi{@EA婳KᬰTXT": -4.3088230431977587E17
+ }]}
+ ]
+ ],
+ "곃㲧<\/dఓꂟs其ࡧ&N葶=?c㠤Ჴ'횠숄臼#\u001a~": false
+ }
+ ]
+ ]}]
+ }]
+ }}
+ ],
+ "2f`⽰E쵟>J笂裭!〛觬囀ۺ쟰#桊l鹛ⲋ|RA_Vx፭gE됓h﵀mfỐ|?juTU档[d⢼⺻p濚7E峿": 5613688852456817133
+ },
+ "濘끶g忮7㏵殬W팕Q曁 뫰)惃廊5%-蹚zYZ樭ﴷQ锘쯤崫gg": true,
+ "絥ᇑ⦏쒓븣爚H.㗊߄o蘵貆ꂚ(쎔O᥉ﮓ]姨Wꁓ!RMA|o퉢THx轮7M껁U즨'i뾘舯o": "跥f꜃?"
+ }}
+ ],
+ "鷰鹮K-9k;ﰰ?_ݦѷ-ꅣ䩨Zꥱ\"mꠟ屎/콑Y╘2&鸞脇㏢ꀇ࠺ⰼ拾喭틮L꽩bt俸墶 [l/웄\"꾦\u20d3iও-&+\u000fQ+໱뵞": -1.296494662286671E-19
+ },
+ "HX੹/⨇୕붷Uﮘ旧\\쾜͔3l鄈磣糂̖䟎Eᐳw橖b῀_딕hu葰窳闹вU颵|染H죶.fP䗮:j䫢\\b뎖i燕ꜚG⮠W-≚뉗l趕": "ଊ칭Oa᡺$IV㷧L\u0019脴셀붿餲햪$迳向쐯켂PqfT\" ?I屉鴼쿕@硙z^鏕㊵M}㚛T젣쓌-W⩐-g%⺵<뮱~빅╴瑿浂脬\u0005왦燲4Ⴭb|D堧 <\/oEQh",
+ "䘶#㥘੐캔f巋ἡAJ䢚쭈ࣨ뫒*mᇊK,ࣺAꑱ\u000bR<\/A\"1a6鵌㯀bh곿w(\"$ꘁ*rಐ趣.d࿩k/抶면䒎9W⊃9": "漩b挋Sw藎\u0000",
+ "畀e㨼mK꙼HglKb,\"'䤜": null
+ }]}]
+ ]
+ ]
+ }]
+ ]}
+ ]
+ ]}
+ ],
+ "歙>駿ꣂ숰Q`J΋方樛(d鱾뼣(뫖턭\u20f9lচ9歌8o]8윶l얶?镖G摄탗6폋폵+g:䱫홊<멀뀿/س|ꭺs걐跶稚W々c㫣⎖": "㣮蔊깚Cꓔ舊|XRf遻㆚︆'쾉췝\\&言",
+ "殭\"cށɨꝙ䞘:嬮e潽Y펪㳅/\"O@ࠗ겴]췖YǞ(t>R\"N?梳LD恭=n氯T豰2R諸#N}*灧4}㶊G䍣b얚": null,
+ "襞<\/啧 B|싞W瓇)6簭鼡艆lN쩝`|펭佡\\間邝[z릶&쭟愱ꅅ\\T᰽1鯯偐栈4̸s윜R7⒝/똽?치X": "⏊躖Cﱰ2Qẫ脐&இ?%냝悊",
+ ",鰧偵셣싹xᎹ힨᯳EṬH㹖9": -4604276727380542356
+ }
+ }
+ ]]]],
+ "웺㚑xs}q䭵䪠馯8?LB犯zK'os䚛HZ\"L?셎s^㿧㴘Cv2": null
+ }]
+ ]
+ ]
+ ],
+ "Kd2Kv+|z": 7367845130646124107,
+ "ᦂⶨ?ᝢ 祂些ഷ牢㋇操\"腭䙾㖪\\(y4cE뽺ㆷ쫺ᔖ%zfۻ$ў1柦,㶢9r漢": -3.133230960444846E-20,
+ "琘M焀q%㢟f鸯O⣏蓑맕鯊$O噷|)z褫^㢦⠮ꚯ꫞`毕1qꢚ{ĭ䎀বώT\"뱘3G൴?^^of": null
+ }
+ ],
+ "a8V᯺?:ﺃ/8ꉿBq|9啓댚;*i2": null,
+ "cpT瀇H珰Ừpೃi鎪Rr␣숬-鹸ҩ䠚z脚цGoN8入y%趌I┽2ឪЀiJNcN)槣/▟6S숆牟\"箑X僛G殱娇葱T%杻:J諹昰qV쨰": 8331037591040855245
+ }],
+ "G5ᩜ䄗巢껳": true
+ }
+ },
+ "Ồ巢ゕ@_譙A`碫鄐㡥砄㠓(^K": "?܃B혢▦@犑ὺD~T⧁|醁;o=J牌9냚⢽㨘{4觍蚔9#$∺\u0016p囅\\3Xk阖⪚\"UzA穕롬✎➁㭒춺C㣌ဉ\"2瓑员ᅽꝶ뫍}꽚ꞇ鶂舟彺]ꍽJC蝧銉",
+ "␆Ě膝\"b-퉐ACR言J謈53~V튥x䜢?ꃽɄY뮩ꚜ": "K/↾e萃}]Bs⾿q룅鷦-膋?m+死^魊镲6",
+ "粡霦c枋AHퟁo礼Ke?qWcA趸㡔ꂏ?\u000e춂8iতᦜ婪\u0015㢼nﵿꍻ!ᐴ関\u001d5j㨻gfῩUK5Ju丝tかTI'?㓏t>⼟o a>i}ᰗ;뤕ܝ": false,
+ "ꄮ匴껢ꂰ涽+䜨B蛹H䛓-k蕞fu7kL谖,'涃V~챳逋穞cT\"vQ쓕ObaCRQ㓡Ⲯ?轭⫦輢墳?vA餽=h䮇킵n폲퉅喙?\"'1疬V嬗Qd灗'Lự": "6v!s믁㭟㣯獃!磸餠ቂh0C뿯봗F鷭gꖶ~コkK<ᦈTt\\跓w㭣횋钘ᆹ듡䑚W䟾X'ꅔ4FL勉Vܴ邨y)2'〚쭉⽵-鞣E,Q.?块",
+ "?(˧쩯@崟吋歄K": null
+ },
+ "Gc럃녧>?2DYI鴿\\륨)澔0ᔬlx'觔7젘⤡縷螩%Sv׫묈/]↱&S h\u0006歋ᑛxi̘}ひY蔯_醨鯘煑橾8?䵎쨋z儬ꁏ*@츾:": null
+ }
+ }
+ }
+ ]
+ ]
+ ]}
+ },
+ "HO츧G": 3.694949578823609E17,
+ "QC\u0012(翻曇Tf㷟bGBJ옉53\\嚇ᛎD/\u001b夾၉4\"핀@祎)쫆yD\"i먎Vn㿿V1W᨝䶀": -6150931500380982286,
+ "Z㓮P翸鍱鉼K䋞꘺튿⭁Y": -7704503411315138850,
+ "]모开ꬖP븣c霤<[3aΠ\"黁䖖䰑뮋ꤦ秽∼㑷冹T+YUt\"싳F↭䖏&鋌": -2.7231911483181824E18,
+ "tꎖ": -4.9517948741799555E-19,
+ "䋘즊.⬅IꬃۣQ챢ꄑ黐|f?C⾺|兕읯sC鬸섾整腨솷V": "旆柩l<K髝M戶鯮t:wR2ꉱ`9'l픪*폍芦㊢Pjjo堡^ 읇얛嶅있ষ0?F",
+ "下9T挞\\$yᮇk쌋⼇,ਉ": true,
+ "櫨:ㆣ,邍lr崕祜㐮烜Z,XXD蕼㉴ kM꯽?P0﹉릗": null,
+ "gv솠歽閘4镳䗄2澾>쪦sᖸMy㦅울썉瘗㎜檵9ꍂ駓ૉᚿ/u3씅徐拉[Z䞸ࡗ1ꆱ&Q풘?ǂ8\u0011BCDY2볨;鸏": null,
+ "幫 n煥s쁇펇 왊-$C\"衝:\u0014㣯舼.3뙗Yl⋇\"K迎멎[꽵s}9鉳UK8쐥\"掄㹖h㙈!얄સ?Ꜳ봺R伕UTD媚I䜘W鏨蔮": -4.150842714188901E-17,
+ "ﺯ^㄄\b죵@fྉkf颡팋Ꞧ{/Pm0V둳⻿/落韒ꊔᚬ@5螺G\\咸a谆⊪ቧ慷绖?财(鷇u錝F=r၍橢ឳn:^iᴵtD볠覅N赴": null
+ }]
+ }]
+ }
+ ]
+ ]}
+ ]},
+ "謯?w厓奰T李헗聝ឍ貖o⪇弒L!캶$ᆅ": -4299324168507841322,
+ "뺊奉_垐浸延몏孄Z舰2i$q붿좾껇d▵餏\"v暜Ҭ섁m￴g>": -1.60911932510533427E18
+ }
+ ]
+ }
+ ]
+ ]],
+ "퉝꺔㠦楶Pꅱ": 7517896876489142899,
+ "": false
+ }
+ ]},
+ "是u&I狻餼|谖j\"7c됮sסּ-踳鉷`䣷쉄_A艣鳞凃*m⯾☦椿q㎭N溔铉tlㆈ^": 1.93547720203604352E18,
+ "kⲨ\\%vr#\u000bⒺY\\t<\/3﬌R訤='﹠8蝤Ꞵ렴曔r": false
+ }
+ ]},
+ "阨{c?C\u001d~K?鎌Ԭ8烫#뙣P초遗t㭱E­돒䆺}甗[R*1!\\~h㕅᰺@<9JꏏષI䳖栭6綘걹ᅩM\"▯是∔v鬽顭⋊譬": "운ﶁK敂(欖C취پ℄爦賾"
+ }
+ }}
+ }],
+ "鷨赼鸙+\\䭣t圙ڹx᜾ČN<\/踘\"S_맶a鷺漇T彚⎲i㈥LT-xA캔$\u001cUH=a0츺l릦": "溣㣂0濕=鉵氬駘>Pꌢpb솇쬤h힊줎獪㪬CrQ矠a&脍꼬爼M茴/΅\u0017弝轼y#Ꞡc6둴=?R崏뷠麖w?"
+ },
+ "閕ᘜ]CT)䵞l9z'xZF{:ؐI/躅匽졁:䟇AGF૸\u001cퟗ9)駬慟ꡒꆒRS״툋A<>\u0010\"ꂔ炃7g덚E৏bꅰ輤]o㱏_뷕ܘ暂\"u": "芢+U^+㢩^鱆8*1鈶鮀\u0002뺰9⬳ꪮlL䃣괟,G8\u20a8DF㉪錖0ㄤ瓶8Nଷd?眡GLc陓\\_죌V쁰ल二?c띦捱 \u0019JC\u0011b⤉zẒT볕\"绣蘨뚋cꡉkI\u001e鳴",
+ "ꃣI'{6u^㡃#཰Kq4逹y൒䧠䵮!㱙/n??{L풓ZET㙠퍿X2᩟綳跠葿㚙w཮x캽扳B唕S|尾}촕%N?o䪨": null,
+ "ⰴFjෟ셈[\u0018辷px?椯\\1<ﲻ栘ᣁ봢憠뉴p": -5263694954586507640
+ }
+ ]
+ ]]
+ ]}
+ ]}]
+ ]
+ ],
+ "?#癘82禩鋆ꊝty?&": -1.9419029518535086E-19
+ }
+ ]
+ ]
+ ]}
+ ]
+ ]
+ ],
+ "훊榲.|῕戄&.㚏Zꛦ2\"䢥ሆ⤢fV_摕婔?≍Fji冀탆꜕i㏬_ẑKᅢ꫄蔻XWc|饡Siẘ^㲦?羡2ぴ1縁ᙅ?쐉Ou": false
+ }]]
+ ]}}},
+ "慂뗄卓蓔ᐓ匐嚖/颹蘯/翻ㆼL?뇊,텵<\\獷ごCボ": null
+ },
+ "p溉ᑟi짣z:䒤棇r^٫%G9缑r砌롧.물农g?0׼ሩ4ƸO㣥㯄쩞ጩ": null,
+ "껎繥YxK\"F젷쨹뤤1wq轫o?鱑뜀瘊?뎃h灑\\ꛣ}K峐^ኖ⤐林ꉓhy": null
+ }
+ ],
+ "᱀n肓ㄛ\"堻2>m殮'1橌%Ꞵ군=Ӳ鯨9耛<\/n據0u彘8㬇៩f᏿诙]嚊": "䋯쪦S럶匏ㅛ#)O`ሀX_鐪渲⛀㨻宅闩➈ꢙஶDR⪍"
+ },
+ "tA썓龇 ⋥bj왎录r땽✒롰;羋^\\?툳*┎?썀ma䵳넅U䳆૘〹䆀LQ0\b疀U~u$M}(鵸g⳾i抦뛹?䤈땚검.鹆?ꩡtⶥGĒ;!ቹHS峻B츪켏f5≺": 2366175040075384032,
+ "전pJjleb]ួ": -7.5418493141528422E18,
+ "n.鎖ጲ\n?,$䪘": true
+ },
+ "欈Ar㉣螵᪚茩?O)": null
+ },
+ "쫸M#x}D秱欐K=侫们丐.KꕾxẠ\u001e㿯䣛F܍캗qq8꟞ṢFD훎⵳簕꭛^鳜\u205c٫~⑟~冫ऊ2쫰<\/戲윱o<\"": true
+ },
+ "㷝聥/T뱂\u0010锕|内䞇x侁≦㭖:M?iM᣿IJe煜dG࣯尃⚩gPt*辂.{磼럾䝪@a\\袛?}ᓺB珼": true
+ }
+ }
+ ]]}]}},
+ "tn\"6ꫤ샾䄄;銞^%VBPwu묪`Y僑N.↺Ws?3C⤻9唩S䠮ᐴm;sᇷ냞඘B/;툥B?lB∤)G+O9m裢0kC햪䪤": -4.5941249382502277E18,
+ "ᚔt'\\愫?鵀@\\びꂕP큠<<]煹G-b!S?\nꖽ鼫,ݛ&頺y踦?E揆릱H}햧캡b@手.p탻>췽㣬ꒅ`qe佭P>ᓂ&?u}毚ᜉ蟶頳졪ᎏzl2wO": -2.53561440423275936E17
+ }]}
+ }
+ ]
+ ]],
+ "潈촒⿂叡": 5495738871964062986
+ }
+ ]]
+ }
+ ]
+ ]}
+ ]]
+ ]]
+ ]}
+ ]
+ ]},
+ "ႁq킍蓅R`謈蟐ᦏ儂槐僻ﹶ9婌櫞釈~\"%匹躾ɢ뤥>࢟瀴愅?殕节/냔O✬H鲽엢?ᮈੁ⋧d␽㫐zCe*": 2.15062231586689536E17,
+ "㶵Ui曚珰鋪ᾼ臧P{䍏䷪쨑̟A뼿T渠誈䏚D1!잶<\/㡍7?)2l≣穷᛾稝{:;㡹nemיּ訊`G": null,
+ "䀕\"飕辭p圁f#뫆䶷뛮;⛴ᩍ3灚덏ᰝ쎓⦷詵%᜖Մfs⇫(\u001e~P|ﭗCⲾផv湟W첋(텪બT<บSꏉ੗⋲X婵i ӵ⇮?L䬇|ꈏ?졸": 1.548341247351782E-19
+ }
+ ]
+ },
+ "t;:N\u0015q鐦Rt缆{ꮐC?஛㷱敪\\+鲊㉫㓪몗릙竏(氵kYS": "XᰂT?൮ô",
+ "碕飦幑|+ 㚦鏶`镥ꁩ B<\/加륙": -4314053432419755959,
+ "秌孳(p!G?V傫%8ሽ8w;5鲗㦙LI檸\u2098": "zG N볞䆭鎍흘\\ONK3횙<\/樚立圌Q튅k쩎Ff쁋aׂJK銆ઘ즐狩6༥✙䩜篥CzP(聻駇HHퟲ讃%,ά{렍p而刲vy䦅ክ^톺M楒鍢㹳]Mdg2>䤉洞",
+ "踛M젧>忔芿㌜Zk": 2215369545966507819,
+ "씐A`$槭頰퍻^U覒\bG毲aᣴU;8!팲f꜇E⸃_卵{嫏羃X쀳C7뗮m(嚼u N܁谟D劯9]#": true,
+ "ﻩ!뵸-筚P᭛}ἰ履lPh?౮ⶹꆛ穉뎃g萑㑓溢CX뾇G㖬A錟]RKaꄘ]Yo+@䘁's섎襠$^홰}F": null
+ },
+ "粘ꪒ4HXᕘ蹵.$區\r\u001d묁77pPc^y笲Q<\/ꖶ 訍䃍ᨕG?*": 1.73773035935040224E17
+ },
+ "婅拳?bkU;#D矠❴vVN쩆t㜷A풃갮娪a%鮏絪3dAv룒#tm쑬⌛qYwc4|L8KZ;xU⓭㳔밆拓EZ7襨eD|隰ऌ䧼u9Ԣ+]贴P荿": 2.9628516456987075E18
+ }]}}]
+ ]}
+ }}
+ ]}]
+ ],
+ "|g翉F*湹̶\u0005⏐1脉̀eI쩓ᖂ㫱0碞l䴨ꑅ㵽7AtἈ턧yq䳥塑:z:遀ᄐX눔擉)`N3昛oQ셖y-ڨ⾶恢ꈵq^<\/": null,
+ "菹\\랓G^璬x৴뭸ゆUS겧﮷Bꮤ ┉銜᯻0%N7}~f洋坄Xꔼ<\/4妟Vꄟ9:౟곡t킅冩䧉笭裟炂4봋ⱳ叺怊t+怯涗\"0㖈Hq": false,
+ "졬믟'ﺇফ圪쓬멤m邸QLব䗁愍4jvs翙 ྍ꧀艳H-|": null,
+ "컮襱⣱뗠 R毪/鹙꾀%헳8&": -5770986448525107020
+ }
+ ],
+ "B䔚bꐻ뙏姓展槰T-똌鷺tc灿᫽^㓟䏀o3o$꘭趙萬I顩)뇭Ἑ䓝\f@{ᣨ`x3蔛": null
+ }
+ ]
+ ]
+ }],
+ "⦖扚vWꃱ꥙㾠壢輓{-⎳鹷贏璿䜑bG倛⋐磎c皇皩7a~ﳫU╣Q࠭ꎉS摅姽OW.홌ೞ.": null,
+ "蚪eVlH献r}ᮏ믠ﰩꔄ@瑄ⲱ": null,
+ "퀭$JWoꩢg역쁍䖔㑺h&ୢtXX愰㱇?㾫I_6 OaB瑈q裿": null,
+ "꽦ﲼLyr纛Zdu珍B絟쬴糔?㕂짹䏵e": "ḱ\u2009cX9멀i䶛簆㳀k"
+ }
+ ]]]],
+ "(_ꏮg່澮?ᩑyM<艷\u001aꪽ\\庼뙭Z맷㰩Vm\\lY筺]3㋲2㌩㄀Eਟ䝵⨄쐨ᔟgङHn鐖⤇놋瓇Q탚單oY\"♆臾jHᶈ征ቄ??uㇰA?#1侓": null
+ },
+ "觓^~ሢ&iI띆g륎ḱ캀.ᓡꀮ胙鈉": 1.0664523593012836E-19,
+ "y詭Gbᔶऽs댁U:杜⤎ϲ쁗⮼D醄诿q뙰I#즧v蔎xHᵿt᡽[**?崮耖p缫쿃L菝,봬ꤦC쯵#=X1瞻@OZc鱗CQTx": null
+ }
+ ]
+ }}],
+ "剘紁\u0004\\Xn⊠6,တױ;嵣崇}讃iႽ)d1\\䔓": null
+ },
+ "脨z\"{X,1u찜<'k&@?1}Yn$\u0015Rd輲ーa쮂굄+B$l": true,
+ "諳>*쭮괐䵟Ґ+<箁}빀䅱⡔檏臒hIH脟ꩪC핝ଗP좕\"0i<\/C褻D۞恗+^5?'ꂱ䚫^7}㡠cq6\\쨪ꔞꥢ?纖䫀氮蒫侲빦敶q{A煲G": -6880961710038544266
+ }}]
+ },
+ "5s⨲JvಽῶꭂᄢI.a৊": null,
+ "?1q꽏쿻ꛋDR%U娝>DgN乭G": -1.2105047302732358E-19
+ }
+ ]
+ ]},
+ "qZz`撋뙹둣j碇쁏\\ꆥ\u0018@藴疰Wz)O{F䶛l᷂绘訥$]뮍夻䢋䩇萿獰樧猵⣭j萶q)$꬚⵷0馢W:Ⱍ!Qoe": -1666634370862219540,
+ "t": "=wp|~碎Q鬳Ӎ\\l-<\/^ﳊhn퐖}䍔t碵ḛ혷?靻䊗",
+ "邙쇡㯇%#=,E4勃驆V繚q[Y댻XV㡸[逹ᰏ葢B@u=JS5?bLRn얮㍉⏅ﰳ?a6[&큟!藈": 1.2722786745736667E-19
+ },
+ "X블땨4{ph鵋ꉯ웸 5p簂䦭s_E徔濧d稝~No穔噕뽲)뉈c5M윅>⚋[岦䲟懷恁?鎐꓆ฬ爋獠䜔s{\u001bm鐚儸煛%bﯿXT>ꗘ@8G": 1157841540507770724,
+ "媤娪Q杸\u0011SAyᡈ쿯": true,
+ "灚^ಸ%걁<\/蛯<O\"-刷㏠R(kO=䢊䅎l䰓팪A絫픧": "譔\\㚄 ?R7㔪G㋉⣰渆?\\#|gN⤴;W칷A׫癮଼ೣ㏳뒜7d恓꾲0扬S0ᆵi/贎ྡn䆋武",
+ "萇砇Gこ朦켋Wq`㞲攊*冁~霓L剢zI腧튴T繙Cঅ뫬╈뮜ㄾ䦧촄椘B⊬츩r2f㶱厊8eϬ{挚␯OM焄覤\\(Kӡ>?\"祴坓\\\\'흍": -3.4614808555942579E18,
+ "釴U:O湛㴑䀣렑縓\ta)<D8ﭳ槁髭D.L|xs斋敠\"띋早7wᎍ": true,
+ "쵈+쬎簨up䓬?q+~\u0019仇뵈᫯3ᵣ恘枰劫㪢u珘-퀭:컙:u`⌿A(9鄦!<珚nj3:Hࣨ巋䀁旸뎈맻v\"\\(곘vO㤰aZe<\/W鹙鄜;l厮둝": null,
+ "": -1.2019926774977002E-18,
+ "%者O7.Nꪍs梇接z蕜綛<\/䜭\"죊y<曋漵@Ś⹝sD⟓jݗᢜ?z/9ၲMa쨮긗贎8ᔮ㦛;6p뾥໭䭊0B찛+)(Y㿠鸁䕒^옥": "鬃뫤&痽舎J콮藐󽸰ᨨMꈫ髿v<N\\.삒껅я1ꭼ5䴷5쳬臨wj덥"
+ }],
+ "鷎'㳗@帚妇OAj' 谬f94ǯ(횡ヒ%io쪖삐좛>(j:숾却䗌gCiB뽬Oyuq輥厁/7)?今hY︺Q": null
+ }
+ ]
+ ]]]}]
+ ],
+ "I笔趠Ph!<ཛྷ㸞诘X$畉F\u0005笷菟.Esr릙!W☆䲖뗷莾뒭U\"䀸犜Uo3Gꯌx4r蔇᡹㧪쨢準<䂀%ࡡꟼ瑍8炝Xs0䀝销?fi쥱ꆝલBB": -8571484181158525797,
+ "L⦁o#J|\"⽩-㱢d㌛8d\\㶤傩儻E[Y熯)r噤὘勇 }": "e(濨쓌K䧚僒㘍蠤Vᛸ\"络QJL2,嬓왍伢㋒䴿考澰@(㏾`kX$끑эE斡,蜍&~y",
+ "vj.|统圪ᵮPL?2oŶ`밧\"勃+0ue%⿥绬췈체$6:qa렐Q;~晘3㙘鹑": true,
+ "ශؙ4獄⶿c︋i⚅:ん閝Ⳙ苆籦kw{䙞셕pC췃ꍬ␜꟯ꚓ酄b힝hwk꭭M鬋8B耳쑘WQ\\偙ac'唀x᪌\u2048*h짎#ፇ鮠뾏ឿ뀌": false,
+ "⎀jꄒ牺3Ⓝ컴~?親ꕽぼܓ喏瘘!@<튋㐌꿱⩦{a?Yv%⪧笯Uܱ栅E搚i뚬:ꄃx7䙳ꦋ&䓹vq☶I䁘ᾘ涜\\썉뺌Lr%Bc㍜3?ꝭ砿裞]": null,
+ "⭤뙓z(㡂%亳K䌽꫿AԾ岺㦦㼴輞낚Vꦴw냟鬓㹈뽈+o3譻K1잞": 2091209026076965894,
+ "ㇲ\t⋇轑ꠤ룫X긒\"zoY읇희wj梐쐑l侸`e%s": -9.9240075473576563E17,
+ "啸ꮑ㉰!ᚓ}銏": -4.0694813896301194E18,
+ ">]囋੽EK뇜>_ꀣ緳碖{쐐裔[<ನ\"䇅\"5L?#xTwv#罐\u0005래t应\\N?빗;": "v쮽瞭p뭃"
+ }
+ ]],
+ "斴槾?Z翁\"~慍弞ﻆ=꜡o5鐋dw\"?K蠡i샾ogDﲰ_C*⬟iㇷ4nય蟏[㟉U꽌娛苸 ঢ়操贻洞펻)쿗૊許X⨪VY츚Z䍾㶭~튃ᵦ<\/E臭tve猑x嚢": null,
+ "锡⛩<\/칥ꈙᬙ蝀&Ꚑ籬■865?_>L詏쿨䈌浿弥爫̫lj&zx<\/C쉾?覯n?": null,
+ "꾳鑤/꼩d=ᘈn挫ᑩ䰬ZC": "3錢爋6Ƹ䴗v⪿Wr益G韠[\u0010屗9쁡钁u?殢c䳀蓃樄욂NAq赟c튒瘁렶Aૡɚ捍"
+ }
+ ]
+ ]
+ ]}
+ ]
+ ]
+ }]]]}}
+ ]}],
+ "Ej䗳U<\/Q=灒샎䞦,堰頠@褙g_\u0003ꤾfⶽ?퇋!łB〙ד3CC䌴鈌U:뭔咎(Qો臃䡬荋BO7㢝䟸\"Yb": 2.36010731779814E-20,
+ "逸'0岔j\u000e눘먷翌C츊秦=ꭣ棭ှ;鳸=麱$XP⩉駚橄A\\좱⛌jqv䰞3Ь踌v㳆¹gT┌gvLB賖烡m?@E঳i": null
+ },
+ "曺v찘ׁ?&绫O័": 9107241066550187880
+ }
+ ]
+ ],
+ "(e屄\u0019昜훕琖b蓘ᬄ0/۲묇Z蘮ဏ⨏蛘胯뢃@㘉8ሪWᨮ⦬ᅳ䅴HI၇쨳z囕陻엣1赳o": true,
+ ",b刈Z,ၠ晐T솝ŕB⩆ou'퐼≃绗雗d譊": null,
+ "a唥KB\"ﳝ肕$u\n^⅄P䟼냉䞸⩪u윗瀱ꔨ#yşs꒬=1|ﲤ爢`t౐튼쳫_Az(Ṋ擬㦷좕耈6": 2099309172767331582,
+ "?㴸U<\/䢔ꯡ阽扆㐤q鐋?f㔫wM嬙-;UV죫嚔픞G&\"Cᗍ䪏풊Q": "VM7疹+陕枡툩窲}翡䖶8欞čsT뮐}璤:jﺋ鎴}HfA൝⧻Zd#Qu茅J髒皣Y-︴[?-~쉜v딏璮㹚䅊﩯<-#\u000e걀h\u0004u抱﵊㼃U<㱷⊱IC進"
+ },
+ "숌dee節鏽邺p넱蹓+e罕U": true
+ }
+ ],
+ "b⧴룏??ᔠ3ぱ>%郿劃翐ꏬꠛW瞳᫏누躨狀ໄy੽\"ីuS=㨞馸k乆E": "トz݈^9R䬑<ﮛG<s~<\/?ⵆᏥ老熷u듷"
+ }}
+ ]
+ }
+ ]}
+ }
+ }
+ }
+ }},
+ "宩j鬅쳜QꝖјy獔Z᭵1v擖}䨿F%cֲ᫺贴m塼딚NP亪\"ᅨsa뺯ꘓ2:9뛓༂쌅䊈#>Rꨳ\u000fTT泠纷꽀MR<CBxP񱒫X쇤": -2.22390568492330598E18,
+ "?䯣ᄽ@Z鸅->ᴱ纊:㠭볮?%N56%鈕1䗍䜁a䲗j陇=뿻偂衋࿘ᓸ?ᕵZ+<\/}H耢b䀁z^f$&㝒LkꢳI脚뙛u": 5.694374481577558E-20
+ }]
+ }
+ ]],
+ "obj": {"key": "wrong value"},
+ "퓲꽪m{㶩/뇿#⼢&᭙硞㪔E嚉c樱㬇1a綑᝖DḾ䝩": null
+ },
+ "key": "6.908319653520691E8",
+ "z": {
+ "6U閆崬밺뀫颒myj츥휘:$薈mY햚#rz飏+玭V㭢뾿愴YꖚX亥ᮉ푊\u0006垡㐭룝\"厓ᔧḅ^Sqpv媫\"⤽걒\"˽Ἆ?ꇆ䬔未tv{DV鯀Tἆl凸g\\㈭ĭ즿UH㽤": null,
+ "b茤z\\.N": [[
+ "ZL:ᅣዎ*Y|猫劁櫕荾Oj为1糕쪥泏S룂w࡛Ᏺ⸥蚙)",
+ {
+ "\"䬰ỐwD捾V`邀⠕VD㺝sH6[칑.:醥葹*뻵倻aD\"": true,
+ "e浱up蔽Cr෠JK軵xCʨ<뜡癙Y獩ケ齈X/螗唻?<蘡+뷄㩤쳖3偑犾&\\첊xz坍崦ݻ鍴\"嵥B3㰃詤豺嚼aqJ⑆∥韼@\u000b㢊\u0015L臯.샥": false,
+ "l?Ǩ喳e6㔡$M꼄I,(3᝝縢,䊀疅뉲B㴔傳䂴\u0088㮰钘ꜵ!ᅛ韽>": -5514085325291784739,
+ "o㮚?\"춛㵉<\/﬊ࠃ䃪䝣wp6ἀ䱄[s*S嬈貒pᛥ㰉'돀": [{
+ "(QP윤懊FI<ꃣ『䕷[\"珒嶮?%Ḭ壍಻䇟0荤!藲끹bd浶tl\u2049#쯀@僞": {"i妾8홫": {
+ ",M맃䞛K5nAㆴVN㒊햬$n꩑&ꎝ椞阫?/ṏ세뉪1x쥼㻤㪙`\"$쟒薟B煌܀쨝ଢ଼2掳7㙟鴙X婢\u0002": "Vዉ菈᧷⦌kﮞఈnz*<?੃'ahhCFX(\u0007⮊E㭍䱾Gxꥩr❣.洎",
+ "뻴5bDD큯O傆盓왻U?ꞅꐊN鐭᧢τ\"迳豲8\u001b䃥ꂻ䴺ྸH筴,": {
+ "\"L鸔SE㬡XV&~͎'놅蔞눶l匛?'.K氁\\ƢẨ疇mΊ'꽳&!鹠m'|{P痊 秄쒿u\u00111䋧gϩx7t丗D䊨䠻z0.A0": -1.50139930144708198E18,
+ "8鋂뛷?첒B☚>﷜FM\"荭7ꍀ-VR<\/';䁙E9$䩉\f @s?퍪o3^衴cඎ䧪aK鼟q䆨c{䳠5mᒲՙ蘹ᮩ": {
+ "F㲷JGo⯍P덵x뒳p䘧☔\"+ꨲ吿JfR㔹)4n紬G练Q፞!C|": true,
+ "p^㫮솎oc.೚A㤠??r\u000f)⾽⌲們M2.䴘䩳:⫭胃\\፾@Fᭌ\\K": false,
+ "蟌Tk愙潦伩": {
+ "a<\/@ᾛ慂侇瘎": -7271305752851720826,
+ "艓藬/>၄ṯ,XW~㲆w": {"E痧郶)㜓ha朗!N赻瞉駠uC\u20ad辠<Ve?폱!Im䁎搄:*s 9諚Prᵾ뒰髶B̌qWA8梸vS⫊⢳{t㺲q㺈랊뮣RqK밢쳪": [
+ false,
+ {
+ "\u000b=>x퓮⣫P1ࠫLMMX'M刼唳됤": null,
+ "P쓫晥%k覛ዩIUᇸ滨:噐혲lMR5䋈V梗>%幽u頖\\)쟟": null,
+ "eg+昉~矠䧞难\b?gQ쭷筝\\eꮠNl{ಢ哭|]Mn銌╥zꖘzⱷ⭤ᮜ^": [
+ -1.30142114406914976E17,
+ -1.7555215491128452E-19,
+ null,
+ "渾㨝ߏ牄귛r?돌?w[⚞ӻ~廩輫㼧/",
+ -4.5737191805302129E18,
+ null,
+ "xy࿑M[oc셒竓Ⓔx?뜓y䊦>-D켍(&&?XKkc꩖ﺸᏋ뵞K伕6ী)딀P朁yW揙?훻魢傎EG碸9類៌g踲C⟌aEX舲:z꒸许",
+ 3808159498143417627,
+ null,
+ {"m試\u20df1{G8&뚈h홯J<\/": {
+ "3ஸ厠zs#1K7:rᥞoꅔꯧ&띇鵼鞫6跜#赿5l'8{7㕳(b/j\"厢aq籀ꏚ\u0015厼稥": [
+ -2226135764510113982,
+ true,
+ null,
+ {
+ "h%'맞S싅Hs&dl슾W0j鿏MםD놯L~S-㇡R쭬%": null,
+ "⟓咔謡칲\u0000孺ꛭx旑檉㶆?": null,
+ "恇I転;￸B2Y`z\\獓w,놏濐撐埵䂄)!䶢D=ഭ㴟jyY": {
+ "$ࡘt厛毣ൢI芁<겿骫⫦6tr惺a": [
+ 6.385779736989334E-20,
+ false,
+ true,
+ true,
+ [
+ -6.891946211462334E-19,
+ null,
+ {
+ "]-\\Ꟑ1/薓❧Ὂ\\l牑\u0007A郃)阜ᇒᓌ-塯`W峬G}SDb㬨Q臉⮻빌O鞟톴첂B㺱<ƈmu챑J㴹㷳픷Oㆩs": {
+ "\"◉B\"pᶉt骔J꩸ᄇᛐi╰栛K쉷㉯鐩!㈐n칍䟅難>盥y铿e୔蒏M貹ヅ8嘋퀯䉶ጥ㏢殊뻳\"絧╿ꉑ䠥?∃蓊{}㣣Gk긔H1哵峱": false,
+ "6.瀫cN䇮F㧺?\\椯=ڈT䘆4␘8qv": -3.5687501019676885E-19,
+ "Q?yऴr혴{஀䳘p惭f1ﹸ䅷䕋贲<ྃᄊ繲hq\\b|#QSTs1c-7(䵢\u2069匏絘ꯉ:l毴汞t戀oෟᵶ뮱፣-醇Jx䙬䐁햢0࣫ᡁgrㄛ": "\u0011_xM/蘇Chv;dhA5.嗀绱V爤ﰦi뵲M",
+ "⏑[\"ugoy^儣횎~U\\섯겜論l2jw஌yD腅̂\u0019": true,
+ "ⵯɇ䐲᫿࢚!㯢l샅笶戮1꣖0Xe": null,
+ "劅f넀識b宁焊E찓橵G!ʱ獓뭔雩괛": [{"p⹣켙[q>燣䍃㞽ᩲx:쓤삘7玑퇼0<\/q璂ᑁ[Z\\3䅵䧳\u0011㤧|妱緒C['췓Yꞟ3Z鳱雼P錻BU씧U`ᢶg蓱>.1ӧ譫'L_5V䏵Ц": [
+ false,
+ false,
+ {"22䂍盥N霂얢<F8꼵7Gసyh뀍g᦭ꄢx硴嬢\u001a?E괆T|;7犟\"Wt%䐩O⨵t&#ᬋK'蜍Ძ揔⾠鲂T멷靃\u0018䓞cE": {"f=䏏츜瞾zw?孡鏣\\铀᫞yẆg(\u0011M6(s2]`ਫ": [[[{
+ "'y몱纣4S@\\,i㷯럹Ua充Tᣢ9躘Zଞ쥿䐊s<\/刎\\\"뉦-8/": "蜑.X0꭛낢륹i젨ꚁ<8?s볕蝡|Q✬᯦@\\G㑢屿Mn졾J굤⥟JW뤵苑r쁕툄嵵?⾥O",
+ "^1挲~[n귆誈央碠멪gI洷": -8214236471236116548,
+ "sሣ%娌暡clr蟜㑓2\u000bS❟_X㨔⚴5~蔷ꀇ|Xu㬖,꤭卹r(g믇쩍%췸앙|栣U\\2]䤉+啠菡ꯎT鉹m\n/`SzDᅼ鞶": 1.1217523390167132E-19,
+ "u톇=黚\\ ꂮ췵L>躰e9⑩_뵜斌n@B}$괻Yᐱ@䧋V\"☒-諯cV돯ʠ": true,
+ "Ű螧ᔼ檍鍎땒딜qꄃH뜣<獧ूCY吓⸏>XQ㵡趌o끬k픀빯a(ܵ甏끆୯/6Nᪧ}搚ᆚ짌P牰泱鈷^d꣟#L삀\"㕹襻;k㸊\\f+": true,
+ "쎣\",|⫝̸阊x庿k잣v庅$鈏괎炔k쬪O_": [
+ "잩AzZGz3v愠ꉈⵎ?㊱}S尳௏p\r2>췝IP䘈M)w|\u000eE",
+ -9222726055990423201,
+ null,
+ [
+ false,
+ {"´킮'뮤쯽Wx讐V,6ᩪ1紲aႈ\u205czD": [
+ -930994432421097536,
+ 3157232031581030121,
+ "l貚PY䃛5@䭄<nW\u001e",
+ [
+ 3.801747732605161E18,
+ [
+ null,
+ false,
+ {
+ "": 4.0442013775147072E16,
+ "2J[sᡪ㞿|n'#廲꯬乞": true,
+ "B[繰`\\㏏a̼㨀偛㽓<\/꥖ᵈO让\r43⡩徑ﬓ๨ﮕx:㣜o玐ꉟぢC珵὆ᓞ쇓Qs氯였9駵q혃Ljꂔ<\/昺+t䐋༻猙c沪~櫆bpJ9UᏐ:칣妙!皗F4㑄탎䕀櫳振讓": 7.3924182188256287E18,
+ "H磵ai委曷n柋T<\/勿F&:ꣴfU@㿗榻Lb+?퍄sp\"᪟~>귻m㎮琸f": 1.0318894506812084E-19,
+ "࢜⩢Ш䧔1肽씮+༎ᣰ闺馺窃䕨8Mƶq腽xc(៯夐J5굄䕁Qj_훨/~価.䢵慯틠퇱豠㼇Qﵘ$DuSp(8Uญ<\/ಟ룴𥳐ݩ$": 8350772684161555590,
+ "ㆎQ䄾\u001bpᩭ${[諟^^骴᤮b^ㅥI┧T㉇⾞\"绦<AYJ⒃-oF<\/蛎mm;obh婃ᦢ": false,
+ "䔤䣈?汝.p襟&d㱅\\Jᚠ@?O첁ࢽ휔VR蔩|㒢柺": [[
+ "-ꕨ岓棻r@鿆^3~䪤Ѐ狼︌ﹲ\\᝸MlE쵠Q+",
+ null,
+ false,
+ 3346674396990536343,
+ null,
+ {
+ "": null,
+ "/䏨S쨑,&繷㉥8C엮赸3馢|뇲{鄎ꗇqFﶉ雕UD躢?Ꟛအ꽡[hᕱᗅ㦋쭞Mユ茍?L槽암V#성唐%㣕嘵\\ڹ(嘏躿&q": [
+ -1364715155337673920,
+ false,
+ -8197733031775379251,
+ "E팗鮲JwH\\觡܈᜝\"+뉞娂N휗v噙၂깼\u001dD帒l%-斔N",
+ -3.844267973858711E-20,
+ [{"쬯(褈Q 蟚뿢 /ⱖ㻥\u0017/?v邘䃡0U.Z1x?鯔V尠8Em<": [[[
+ null,
+ [
+ null,
+ -5841406347577698873,
+ "킷\"S⋄籞繗솸ᵣ浵w쑿ퟗ7nᎏx3앙z㘌쿸I葥覯㬏0ᆝb汆狺뷘ႀnꋋ",
+ -1227911573141158702,
+ {
+ "u㉮PᾺV鵸A\\g*ࡗ9슟晭+ͧↀ쿅H\u001c꾣犓}癇恛ᗬ黩䟘X梑鐆e>r䰂f矩'-7䡭桥Dz兔V9谶居㺍ᔊ䩯덲.\u001eL0ὅㅷ釣": [{
+ "<쯬J卷^숞u࠯䌗艞R9닪g㐾볎a䂈歖意:%鐔|ﵤ|y}>;2,覂⶚啵tb*仛8乒㓶B࿠㯉戩oX 貘5V嗆렽낁߼4h䧛ꍺM空\\b꿋貼": 8478577078537189402,
+ "VD*|吝z~h譺aᯒ": {
+ "YI췢K<\/濳xNne玗rJo쾘3핰鴊\"↱AR:ࢷ\"9?\"臁說)?誚ꊏe)_D翾W?&F6J@뺾ꍰNZ醊Z쾈വH嶿?炫㷱鬰M겈<bS}㎥l|刖k": {"H7鷮퇢_k": [
+ true,
+ "s㟑瀭좾쮀⑁Y찺k맢戲쀸俻ກ6儮끗扖puߖꜻ馶rꈞ痘?3ྚ畊惘䎗\"vv)*臔웅鿈䧲^v,껛㰙J <ᚶ5",
+ 7950276470944656796,
+ 4.9392301536234746E17,
+ -4796050478201554639,
+ "yꬴc<3㻚",
+ "o塁\u20a4蒵鮬裢CᴧnB㭱f.",
+ false,
+ [
+ false,
+ "㡐弑V?瀆䰺q!출㇞yᘪ꼼(IS~Ka 烿ꟿ샕桤\u0005HQҹ㯪罂q萾⚇懋⦕둡v",
+ 1862560050083946970,
+ "\u20b6[|(뭹gꍒ펉O轄Dl묽]ﯨ髯QEbA㒾m@롴礠㕓2땫n6ْ엘঵篳R잷꙲m색摪|@㿫5aK设f胭r8/NI4춫栵\\꯬2]",
+ false,
+ {
+ "\u000b7*㙛燏.~?䔊p搕e_拺艿뷍f{ꔻ1s驙`$Ė戧?q⋬沭?塷᭚蹀unoa5": {
+ "S귯o紞㾕ᅶ侏銇12|ʟ畴iNAo?|Sw$M拲գ㭄紧螆+,梔": null,
+ "㭚0?xB疱敻ேBPwv뾃熉(ӠpJ]갢\"Bj'\u0016GE椱<\/zgៅx黢礇h},M9ﴦ?LḨ": "Si B%~㬒E",
+ "핇㉊살㍢숨~ȪRo䦅D桺0z]﬽蠆c9ᣨyPP㿷U~㞐?쯟퍸宒뉆U|}㉓郾ࣻ*櫎꼪䁗s?~7\u001e㘔h9{aឋ}:㶒P8": [{"\\R囡쐬nN柋琍؛7칾 :㶃衇徜V 深f1淍♠i?3S角폞^ᆞ\u20e8ṰD\u0007秡+躒臔&-6": {
+ "䨑g.fh㔗=8!\"狿ൻLU^뻱g䲚㻐'W}k欤?๒鲇S꧗䫾$ĥ피": -794055816303360636,
+ "外頮詋~텡竆繃䏩苨뾺朁꼃瘹f*㉀枙NH/\u2027ꢁ}j묎vペq︉식뜡Od5 N顯ି烅仟Qfㆤ嚢(i䬅c;맧?嶰㩼츱獡?-": {
+ "e݆㍡⬬'2㻒?U篲鿄\"隻Ҭ5NꭰꤺBꀈ拾᩺[刯5곑Na램ﴦ዆]㝓qw钄\u001b\"Y洊䗿祏塥迵[⼞⠳P$꠱5먃0轢`": [{"獰E賝﫚b먭N긆Ⰹ史2逶ꜛ?H짉~?P}jj}侷珿_T>᭨b,⻁鈵P䕡䀠८ⱄ홎鄣": {
+ "@?k2鶖㋮\"Oರ K㨇廪儲\u0017䍾J?);\b*묀㗠섳햭1MC V": null,
+ "UIICP!BUA`ᢈ㋸~袩㗪⾒=fB﮴l1ꡛ죘R辂여ҳ7쮡<䩲`熕8頁": 4481809488267626463,
+ "Y?+8먙ᚔ鋳蜩럶1㥔y璜౩`": [
+ null,
+ 1.2850335807501874E-19,
+ "~V2",
+ 2035406654801997866,
+ {
+ "<숻1>\"": -8062468865199390827,
+ "M㿣E]}qwG莎Gn᝶(ꔙ\\D⬲iꇲs寢t駇S뀡ꢜ": false,
+ "pꝤ㎏9W%>M;-U璏f(^j1?&RB隧 忓b똊E": "#G?C8.躬ꥯ'?냪#< 渟&헿란zpo왓Kj}鷧XﻘMツb䕖;㪻",
+ "vE풤幉xz뱕쫥Ug㦲aH} ᣟp:鬼Yᰟ<Fɋ잣緂頒⺏䉲瑑䅂,C~ޅG!f熢-B7~9Pqࡢ[츑#3ꕎ,Öඳ聁⩅㵧춀뿍xy䌏͂tdj!箧᳆|9蚡돬": -2.54467378964089632E17,
+ "䵈䅦5빖,궆-:໿댾仫0ᙚyᦝhqᚄ": null,
+ "侯Y\"湛졯劇U셎YX灍ⅸ2伴|筧\\䁒㶶᷏쁑Waᦵᗱ㜏늾膠<Jc63<G\u20fe䇹66僣k0O\"_@U": null,
+ "姪y$#s漴JH璌Ӊ脛J㝾펔ﹴoꈶ㚸PD:薠쏖%說ថ蹂1]⾕5튄": {
+ "᝾Huw3䮅如쿺䍟嫝]<鰨ݷ?꯯䫓傩|ᐶස媽\\澒≡闢": "Mm\"쏇ᯄ졽\"楇<\/ꥆ흭局n隴@鿣w⠊4P贈徎W㊋;䤞'.팇蒁䡴egpx嗎wஅ獗堮ᛐnˁ︖䀤4噙?໚郝᱋ޘॎt恑姫籕殥陃\"4[ꝬqL4Wꠎx",
+ "ℇj遌5B뒚\" U": "硄ꏘ{憠굏:&t䌨m Cઌ쿣鞛XFꠟs䝭ﶃ\"格a0x闊昵吲L\\杚聈aꁸj싹獅\"灟ﱡ馆*굖糠<ꔏ躎",
+ "톌賠弳ꟍb\"螖X50sĶ晠3f秂坯Iⓟ:萘": 5.573183333596288E18,
+ "%䴺": [[[[
+ -6957233336860166165,
+ false,
+ null,
+ {
+ "\"\\௮茒袀ᕥ23ୃ괶?䕎.嚲◉㏞L+ᵡ艱hL콇붆@": null,
+ "%螥9ꭌ<\/-t": true,
+ ",9|耢椸䁓Xk죱\u0015$Ώ鲞[?엢ᝲ혪즈ⴂ▂ℴ㗯\"g뺘\\ꍜ#\u0002ヮ}ሎ芲P[鹮轧@냲䃦=#(": 2.78562909315899616E17,
+ "R?H䧰ⵇ<,憰쮼Q總iR>H3镔ᴚ斦\\鏑r*2橱G⼔F/.j": true,
+ "RK좬뎂a홠f*f㱉ᮍ⦋潙㨋Gu곌SGI3I뿐\\F',)t`荁蘯囯ﮉ裲뇟쥼_ገ驪▵撏ᕤV": 1.52738225997956557E18,
+ "^k굲䪿꠹B逤%F㱢漥O披M㽯镞竇霒i꼂焅륓\u00059=皫之눃\u2047娤閍銤唫ၕb<\/w踲䔼u솆맚,䝒ᝳ'/it": "B餹饴is権ꖪ怯ꦂẉဎt\"!凢谵⧿0\\<=(uL䷍刨쑪>俆揓Cy襸Q힆䆭涷<\/ᐱ0ɧ䗾䚹\\ኜ?ꄢᇘ`䴢{囇}᠈䴥X4퓪檄]ꥷ/3謒ሴn+g騍X",
+ "GgG꽬[(嫓몍6\u0004궍宩㙻/>\u0011^辍dT腪hxǑ%ꊇk,8(W⧂結P鬜O": [{
+ "M㴾c>\\ᓲ\u0019V{>ꤩ혙넪㭪躂TS-痴໸闓⍵/徯O.M㏥ʷD囎⧔쁳휤T??鉬뇙=#ꢫ숣BX䭼<\/d똬졬g榿)eꨋﯪ좇첻<?2K)": null,
+ "Z17縬z]愀䖌 ᾋBCg5딒국憍꾓aⲷ턷u:U촳驿?雺楶\u0001\u001c{q*ᰗ苑B@k揰z.*蓗7ረIm\"Oᱍ@7?_": true,
+ "㺃Z<": -4349275766673120695,
+ "휃䠂fa塆ffixKe'덬鏗੄뺾w࠾鑎k땢m*႑햞鐮6攊&虜h黚,Y䱳Sﭼ둺pN6": [
+ false,
+ "IΎ䣲,\"ᬮ˪癘P~Qlnx喁Sᮔ༬˨I珌m䜛酛\u0003iꐸ㦧cQ帲晼D' \\(粋wQcN\\뵰跈",
+ [
+ "D0\\L?M1쥍Kaꏌsd+盌귤憊tz䌣댐בO坂wϢ%ὒgp,Ai⎧ᶆI餾ꦍ棩嘅᳉怴%m]ၶis纖D凜镧o심b U",
+ {
+ "?଼\u0011Rv&^[+匚I趈T媫\u0010.䥤ᆯ1q僤HydⲰl㒽K'ᅾiౕ豲초딨@\u0013J'쪪VD౼P4Ezg#8*㋤W馓]c쿯8": false,
+ "c/擯X5~JmK䵶^쐎ച|B|u[솝(X뚤6v}W㤘⠛aR弌臌쾭諦eⒷ僡-;㩩⭖ⷴ徆龄갬{䱓ᥩ!﯏⊚ᇨ<v燡露`:볉癮꨽り★Ax7Ꮀ譥~舑\\Vꍋ\"$)v": "e&sFF쬘OBd슊寮f蠛জ봞mn~锆竒G脁\"趵G刕䕳&L唽붵<\/I,X팚B⍥X,kԇҗ眄_慡:U附ᓚA蕧>\u001a\u0011\";~쓆BH4坋攊7힪",
+ "iT:L闞椕윚*滛gI≀Wਟඊ'ꢆ縺뱹鮚Nꩁ᧬蕼21줧\\䋯``⍐\\㏱鳨": 1927052677739832894,
+ "쮁缦腃g]礿Y㬙 fヺSɪ꾾N㞈": [
+ null,
+ null,
+ {
+ "!t,灝Y 1䗉罵?c饃호䉂Cᐭ쒘z(즽sZG㬣sഖE4뢜㓕䏞丮Qp簍6EZឪ겛fx'ꩱQ0罣i{k锩*㤴㯞r迎jTⲤ渔m炅肳": [
+ -3.3325685522591933E18,
+ [{"㓁5]A䢕1룥BC?Ꙍ`r룔Ⳛ䙡u伲+\u0001്o": [
+ null,
+ 4975309147809803991,
+ null,
+ null,
+ {"T팘8Dﯲ稟MM☻㧚䥧/8ﻥ⥯aXLaH\"顾S☟耲ît7fS෉놁뮔/ꕼ䓈쁺4\\霶䠴ᩢ<\/t4?죵>uD5➶༆쉌럮⢀秙䘥\u20972ETR3濡恆vB? ~鸆\u0005": {
+ "`閖m璝㥉b뜴?Wf;?DV콜\u2020퍉౓擝宏ZMj3mJ먡-傷뱙yח㸷꥿ ໘u=M읝!5吭L4v\\?ǎ7C홫": null,
+ "|": false,
+ "~Ztᛋ䚘\\擭㗝傪W陖+㗶qᵿ蘥ᙄp%䫎)}=⠔6ᮢS湟-螾-mXH?cp": 448751162044282216,
+ "\u209fad놹j檋䇌ᶾ梕㉝bוּ<d䗱:줰M酄\u0000X#_r獢A饓ꍗُKo_跔?ᪧ嵜鼲<": null,
+ "ꆘ)ubI@h@洭Ai㜎䏱k\u0003?T䉐3间%j6j棍j=❁\\U毮ᬹ*8䀔v6cpj⭬~Q꿾뺶펵悡!쩭厝l六㽫6퇓ޭ2>": {"?苴ꩠD䋓帘5騱qﱖPF?☸珗顒yU ᡫcb䫎 S@㥚gꮒ쎘泴멖\\:I鮱TZ듒ᶨQ3+f7캙\"?\f풾\\o杞紟﻽M.⏎靑OP": [
+ -2.6990368911551596E18,
+ [{"䒖@<᰿<\/⽬tTr腞&G%᳊秩蜰擻f㎳?S㵧\r*k뎾-乢겹隷j軛겷0룁鮁": {")DO0腦:춍逿:1㥨่!蛍樋2": [{
+ ",ꌣf侴笾m๫ꆽ?1?U?\u0011ꌈꂇ": {
+ "x捗甠nVq䅦w`CD⦂惺嘴0I#vỵ} \\귂S끴D얾?Ԓj溯\"v餄a": {
+ "@翙c⢃趚痋i\u0015OQ⍝lq돆Y0pࢥ3쉨䜩^<8g懥0w)]䊑n洺o5쭝QL댊랖L镈Qnt⪟㒅십q헎鳒⮤眉ᔹ梠@O縠u泌ㄘb榚癸XޔFtj;iC": false,
+ "I&뱋゘|蓔䔕측瓯%6ᗻHW\\N1貇#?僐ᗜgh᭪o'䗈꽹Rc욏/蔳迄༝!0邔䨷푪8疩)[쭶緄㇈୧ፐ": {
+ "B+:ꉰ`s쾭)빼C羍A䫊pMgjdx䐝Hf9᥸W0!C樃'蘿f䫤סи\u0017Jve? 覝f둀⬣퓉Whk\"஼=չﳐ皆笁BIW虨쫓F廰饞": -642906201042308791,
+ "sb,XcZ<\/m㉹ ;䑷@c䵀s奤⬷7`ꘖ蕘戚?Feb#輜}p4nH⬮eKL트}": [
+ "RK鳗z=袤Pf|[,u욺",
+ "Ẏᏻ罯뉋⺖锅젯㷻{H䰞쬙-쩓D]~\u0013O㳢gb@揶蔉|kᦂ❗!\u001ebM褐sca쨜襒y⺉룓",
+ null,
+ null,
+ true,
+ -1.650777344339075E-19,
+ false,
+ "☑lꄆs힨꤇]'uTന⌳농].1⋔괁沰\"IWഩ\u0019氜8쟇䔻;3衲恋,窌z펏喁횗?4?C넁问?ᥙ橭{稻Ⴗ_썔",
+ "n?]讇빽嗁}1孅9#ꭨ靶v\u0014喈)vw祔}룼쮿I",
+ -2.7033457331882025E18,
+ {
+ ";⚃^㱋x:饬ኡj'꧵T☽O㔬RO婎?향ᒭ搩$渣y4i;(Q>꿘e8q": "j~錘}0g;L萺*;ᕭꄮ0l潛烢5H▄쳂ꏒוֹꙶT犘≫x閦웧v",
+ "~揯\u2018c4職렁E~ᑅቚꈂ?nq뎤.:慹`F햘+%鉎O瀜쟏敛菮⍌浢<\/㮺紿P鳆ࠉ8I-o?#jﮨ7v3Dt赻J9": null,
+ "ࣝW䌈0ꍎqC逖,횅c၃swj;jJS櫍5槗OaB>D踾Y": {"㒰䵝F%?59.㍈cᕨ흕틎ḏ㋩B=9IېⓌ{:9.yw}呰ㆮ肒᎒tI㾴62\"ዃ抡C﹬B<\/<EO꽓ᇕu&鋫\\禞퐹u꒍.7훯ಶ2䩦͉ᶱf깵ᷣ늎": [
+ 5.5099570884646902E18,
+ "uQN濿m臇<%?谣鮢s]]x0躩慌闋<;( 鋤.0ᠵd1#벘a:Gs?햷'.)ㅴ䞟琯崈FS@O㌛ᓬ抢큌ើ냷쿟툥IZn[惵ꐧ3뙍[&v憙J>촋jo朣",
+ [
+ -7675533242647793366,
+ {"ᙧ呃:[㒺쳀쌡쏂H稈㢤\u001dᶗGG-{GHྻຊꡃ哸䵬;$?&d\\⥬こN圴됤挨-'ꕮ$PU%?冕눖i魁q騎Q": [
+ false,
+ [[
+ 7929823049157504248,
+ [[
+ true,
+ "Z菙\u0017'eꕤ᱕l,0\\X\u001c[=雿8蠬L<\/낲긯W99g톉4ퟋb㝺\u0007劁'!麕Q궈oW:@X၎z蘻m絙璩귓죉+3柚怫tS捇蒣䝠-擶D[0=퉿8)q0ٟ",
+ "唉\nFA椭穒巯\\䥴䅺鿤S#b迅獘 ﶗ꬘\\?q1qN犠pX꜅^䤊⛤㢌[⬛휖岺q唻ⳡ틍\"㙙Eh@oA賑㗠y必Nꊑᗘ",
+ -2154220236962890773,
+ -3.2442003245397908E18,
+ "Wᄿ筠:瘫퀩?o貸q⊻(᎞KWf宛尨h^残3[U(='橄",
+ -7857990034281549164,
+ 1.44283696979059942E18,
+ null,
+ {"ꫯAw跭喀 ?_9\"Aty背F=9缉ྦྷ@;?^鞀w:uN㘢Rỏ": [
+ 7.393662029337442E15,
+ 3564680942654233068,
+ [
+ false,
+ -5253931502642112194,
+ "煉\\辎ೆ罍5⒭1䪁䃑s䎢:[e5}峳ﴱn騎3?腳Hyꏃ膼N潭錖,Yᝋ˜YAၓ㬠bG렣䰣:",
+ true,
+ null,
+ {
+ "⒛'P&%죮|:⫶춞": -3818336746965687085,
+ "钖m<\/0ݎMtF2Pk=瓰୮洽겎.": [[
+ -8757574841556350607,
+ -3045234949333270161,
+ null,
+ {
+ "Ꮬr輳>⫇9hU##w@귪A\\C 鋺㘓ꖐ梒뒬묹㹻+郸嬏윤'+g<\/碴,}ꙫ>손;情d齆J䬁ຩ撛챝탹/R澡7剌tꤼ?ặ!`⏲睤\u00002똥଴⟏": null,
+ "\u20f2ܹe\\tAꥍư\\x当뿖렉禛;G檳ﯪS૰3~㘠#[J<}{奲 5箉⨔{놁<\/釿抋,嚠/曳m&WaOvT赋皺璑텁": [[
+ false,
+ null,
+ true,
+ -5.7131445659795661E18,
+ "萭m䓪D5|3婁ఞ>蠇晼6nﴺPp禽羱DS<睓닫屚삏姿",
+ true,
+ [
+ -8759747687917306831,
+ {
+ ">ⓛ\t,odKr{䘠?b퓸C嶈=DyEᙬ@ᴔ쨺芛髿UT퓻春<\/yꏸ>豚W釺N뜨^?꽴﨟5殺ᗃ翐%>퍂ဿ䄸沂Ea;A_\u0005閹殀W+窊?Ꭼd\u0013P汴G5썓揘": 4.342729067882445E-18,
+ "Q^즾眆@AN\u0011Kb榰냎Y#䝀ꀒᳺ'q暇睵s\"!3#I⊆畼寤@HxJ9": false,
+ "⿾D[)袨㇩i]웪䀤ᛰMvR<蟏㣨": {"v퇓L㪱ꖣ豛톤\\곱#kDTN": [{
+ "(쾴䡣,寴ph(C\"㳶w\"憳2s馆E!n!&柄<\/0Pꈗſ?㿳Qd鵔": {"娇堰孹L錮h嵅⛤躏顒?CglN束+쨣ﺜ\\MrH": {"獞䎇둃ቲ弭팭^ꄞ踦涟XK錆쳞ឌ`;੶S炥騞ଋ褂B៎{ڒ䭷ᶼ靜pI荗虶K$": [{"◖S~躘蒉꫿輜譝Q㽙闐@ᢗ¥E榁iء5┄^B[絮跉ᰥ遙PWi3wㄾⵀDJ9!w㞣ᄎ{듒ꓓb6\\篴??c⼰鶹⟧\\鮇ꮇ": [[
+ 654120831325413520,
+ -1.9562073916357608E-19,
+ {
+ "DC(昐衵ἡ긙갵姭|֛[t": 7.6979110359897907E18,
+ "J␅))嫼❳9Xfd飉j7猬ᩉ+⤻眗벎E鰉Zᄊ63zၝ69}ZᶐL崭ᦥ⡦靚⋛ꎨ~i㨃咊ꧭo䰠阀3C(": -3.5844809362512589E17,
+ "p꣑팱쒬ꎑ뛡Ꙩ挴恍胔&7ᔈ묒4Hd硶훐㎖zꢼ豍㿢aሃ=<\/湉鵲EӅ%$F!퍶棌孼{O駍਺geu+": ")\u001b잓kŀX쩫A밁®ڣ癦狢)扔弒p}k縕ꩋ,䃉tࣼi",
+ "ァF肿輸<솄G-䢹䛸ꊏl`Tqꕗ蒞a氷⸅ᴉ蠰]S/{J왲m5{9.uέ~㕚㣹u>x8U讁B덺襪盎QhVS맅킃i识{벂磄Iහ䙅xZy/抍૭Z鲁-霳V据挦ℒ": null,
+ "㯛|Nꐸb7ⵐb?拠O\u0014ކ?-(EꞨ4ꕷᄤYᯕOW瞺~螸\"욿ќ<u鵵઎⸊倾쑷෻rT⪄牤銱;W殆͢芄ਰ嚝훚샢⊿+㲽": null,
+ "単逆ົ%_맛d)zJ%3칧_릟#95䌨怡\u001ci턠ॣi冘4赖'ਐ䧐_栔!": {
+ "*?2~4㲌᭳쯁ftႷ1#oJ\b䊇镇됔 \u2079x䛁㊝ᮂN;穽跖s휇ᣄ홄傷z⸷(霸!3y뺏M쒿햏۽v㳉tở心3黎v쭻 Rp཮Vr~T?&˴k糒븥쩩r*D": null,
+ "8@~홟ꔘk1[": -5570970366240640754,
+ "BZt鏦ꡬc餖 s(mᛴ\u0000◄d腑t84C⟐坯VṊ뉙'噱Ꝕ珽GC顀?허0ꞹ&돇䛭C䷫](": 2.4303828213012387E-20,
+ "y撔Z외放+}ḑ骈ᙝ&\u0016`G便2|-e]঳?QF㜹YF\"㿒緄햷㈟塚䷦ୀጤlM蘸N㾆▛럪㞂tᕬ镈쇝喠l amcxPnm\u001a᱋<\/]_]ﻹ瞧?H": false,
+ "ፏ氏묢뜚I[♺뽛x?0H봬Wpn꨹Ra䝿쌑{㴂ni祻윸A'y|⺴ᚘ庌9{$恲{톽=m#@6ᨧfgs44陎J#<Ễ쨓瀵❩a୛㷉㙉ܸ◠냔嬯~呄籁羥镳": false,
+ "㘱{<頬22?IF@곊I겂嶻L᝛D{@r쒂?IAᣧ洪惒誸b徂z췺꾍㠭\\刊%禨쌐ⶣ仵\\P[:47;<ᇅ<\/": {
+ "^U釳-v㢈ꗝ◄菘rᜨi;起kR犺䵫\u0000锍쁙m-ԙ!lḃ꛸뻾F(W귛y": "#ᠺH㸢5v8_洑C",
+ "䔵໳$ᙠ6菞\u206e摎q圩P|慍sV4:㜾(I溞I?": -6569206717947549676,
+ "透Ꞃ緵퇝8 >e㺰\"'㌢ƐW\u0004瞕>0?V鷵엳": true,
+ "뤥G\\迋䠿[庩'꼡\u001aiᩮV쯁ᳪ䦪Ô;倱ନ뛁誈": null,
+ "쥹䄆䚟Q榁䎐᢭<\/2㕣p}HW蟔|䃏꿈ꚉ锳2Pb7㙑Tⅹᵅ": {
+ "Y?֭$>#cVBꩨ:>eL蒁務": {
+ "86柡0po 䏚&-捑Ћ祌<\/휃-G*㶢הּ쩍s㶟餇c걺yu꽎還5*턧簕Og婥SꝐ": null,
+ "a+葞h٥ࠆ裈嗫ﵢ5輙퀟ᛜ,QDﹼ⟶Y騠锪E_|x죗j侵;m蜫轘趥?븅w5+mi콛L": {
+ ";⯭ﱢ!买F⽍柤鶂n䵣V㫚墱2렾ELEl⣆": [
+ true,
+ -3.6479311868339015E-18,
+ -7270785619461995400,
+ 3.334081886177621E18,
+ 2.581457786298155E18,
+ -6.605252412954115E-20,
+ -3.9232347037744167E-20,
+ {
+ "B6㊕.k1": null,
+ "ZAꄮJ鮷ᳱo갘硥鈠䠒츼": {
+ "ᕅ}럡}.@y陪鶁r業'援퀉x䉴ﵴl퍘):씭脴ᥞhiꃰblﲂ䡲엕8߇M㶭0燋標挝-?PCwe⾕J碻Ᾱ䬈䈥뷰憵賣뵓痬+": {"a췩v礗X⋈耓ፊf罅靮!㔽YYᣓw澍33⎔芲F|\"䜏T↮輦挑6ᓘL侘?ᅥ]덆1R௯✎餘6ꏽ<\/௨\\?q喷ꁫj~@ulq": {"嗫欆뾔Xꆹ4H㌋F嵧]ࠎ]㠖1ꞤT<$m뫏O i댳0䲝i": {"?෩?\u20cd슮|ꯆjs{?d7?eNs⢚嫥氂䡮쎱:鑵롟2hJꎒﯭ鱢3춲亄:뼣v䊭諱Yj択cVmR䩃㘬T\"N홝*ै%x^F\\_s9보zz4淗?q": [
+ null,
+ "?",
+ 2941869570821073737,
+ "{5{殇0䝾g6밖퍋臩綹R$䖭j紋釰7sXI繳漪행y",
+ false,
+ "aH磂?뛡#惇d婅?Fe,쐘+늵䍘\"3r瘆唊勐j⳧࠴ꇓ<\/唕윈x⬌讣䋵%拗ᛆⰿ妴᝔M2㳗必꧂淲?ゥ젯檢<8끒MidX䏒3᳻Q▮佐UT|⤪봦靏⊏",
+ [[{
+ "颉(&뜸귙{y^\"P퟉춝Ჟ䮭D顡9=?}Y誱<$b뱣RvO8cH煉@tk~4ǂ⤧⩝屋SS;J{vV#剤餓ᯅc?#a6D,s": [
+ -7.8781018564821536E16,
+ true,
+ [
+ -2.28770899315832371E18,
+ false,
+ -1.0863912140143876E-20,
+ -6282721572097446995,
+ 6767121921199223078,
+ -2545487755405567831,
+ false,
+ null,
+ -9065970397975641765,
+ [
+ -5.928721243413937E-20,
+ {"6촊\u001a홯kB0w撨燠룉{绎6⳹!턍贑y▾鱧ժ[;7ᨷ∀*땒䪮1x霆Hᩭ☔\"r䝐7毟ᝰr惃3ꉭE+>僒澐": [
+ "Ta쎩aƝt쵯ⰪVb",
+ [
+ -5222472249213580702,
+ null,
+ -2851641861541559595,
+ null,
+ 4808804630502809099,
+ 5657671602244269874,
+ "5犲﨣4mᥣ?yf젫꾯|䋬잁$`Iⳉﴷ扳兝,'c",
+ false,
+ [
+ null,
+ {
+ "DyUIN쎾M仼惀⮥裎岶泭lh扠\u001e礼.tEC癯튻@_Qd4c5S熯A<\/\6U윲蹴Q=%푫汹\\\u20614b[௒C⒥Xe⊇囙b,服3ss땊뢍i~逇PA쇸1": -2.63273619193485312E17,
+ "Mq꺋貘k휕=nK硍뫞輩>㾆~἞ࡹ긐榵l⋙Hw뮢帋M엳뢯v⅃^": 1877913476688465125,
+ "ᶴ뻗`~筗免⚽টW˃⽝b犳䓺Iz篤p;乨A\u20ef쩏?疊m㝀컩뫡b탔鄃ᾈV(遢珳=뎲ିeF仢䆡谨8t0醄7㭧瘵⻰컆r厡궥d)a阄፷Ed&c﯄伮1p": null,
+ "⯁w4曢\"(欷輡": "\"M᭫]䣒頳B\\燧ࠃN㡇j姈g⊸⺌忉ꡥF矉স%^",
+ "㣡Oᄦ昵⫮Y祎S쐐級㭻撥>{I$": -378474210562741663,
+ "䛒掷留Q%쓗1*1J*끓헩ᦢ﫫哉쩧EↅIcꅡ\\?ⴊl귛顮4": false,
+ "寔愆샠5]䗄IH贈=d﯊/偶?ॊn%晥D視N򗘈'᫂⚦|X쵩넽z질tskxDQ莮Aoﱻ뛓": true,
+ "钣xp?&\u001e侉/y䴼~?U篔蘚缣/I畚?Q绊": -3034854258736382234,
+ "꺲໣眀)⿷J暘pИfAV삕쳭Nꯗ4々'唄ⶑ伻㷯騑倭D*Ok꧁3b␽_<\/챣Xm톰ၕ䆄`*fl㭀暮滠毡?": [
+ "D男p`V뙸擨忝븪9c麺`淂⢦Yw⡢+kzܖ\fY1䬡H歁)벾Z♤溊-혰셢?1<-\u0005;搢Tᐁle\\ᛵߓﭩ榩<QF;t=?Qꀞ",
+ [
+ null,
+ [{"-췫揲ᬨ墊臸<ࠒH跥 㔭쥃㫯W=z[wধ╌<~yW楄S!⑻h즓lĖN￧篌W듷튗乵᪪템먵Pf悥ᘀk䷭焼\\讄r擁鐬y6VF<\/6랿p)麡ꁠ㪁\"pழe": [
+ "#幎杴颒嶈)ㄛJ.嶤26_⋌东챯ꠉ⤋ؚ/⏚%秼Q룠QGztᄎ㎷អI翰Xp睔鍜ꨍ",
+ {",T?": [
+ false,
+ [[
+ true,
+ 7974824014498027996,
+ false,
+ [
+ 4.3305464880956252E18,
+ {
+ "᱿W^A]'rᮢ)鏥z餝;Hu\\Fk?ﴺ?IG浅-䙧>訝-xJ;巡8깊蠝ﻓU$K": {
+ "Vꕡ諅搓W=斸s︪vﲜ츧$)iꡟ싉e寳?ጭムVથ嵬i楝Fg<\/Z|៪ꩆ-5'@ꃱ80!燱R쇤t糳]罛逇dṌ֣XHiͦ{": true,
+ "Ya矲C멗Q9膲墅携휻c\\딶G甔<\/.齵휴": -1.1456247877031811E-19,
+ "z#.OO￝J": -8263224695871959017,
+ "崍_3夼ᮟ1F븍뽯ᦓ鴭V豈Ь": [{
+ "N蒬74": null,
+ "yuB?厅vK笗!ᔸcXQ旦컶P-녫mᄉ麟_": "1R@ 톘xa_|﩯遘s槞d!d껀筤⬫薐焵먑D{\\6k共倌☀G~AS_D\"딟쬚뮥馲렓쓠攥WTMܭ8nX㩴䕅檹E\u0007ﭨN 2 ℆涐ꥏ꠵3▙玽|됨_\u2048",
+ "恐A C䧩G": {":M큣5e들\\ꍀ恼ᔄ靸|I﨏$)n": {
+ "|U䬫㟯SKV6ꛤ㗮\bn봻䲄fXT:㾯쳤'笓0b/ೢC쳖?2浓uO.䰴": "ཐ꼋e?``,ᚇ慐^8ꜙNM䂱\u0001IᖙꝧM'vKdꌊH牮r\\O@䊷ᓵ쀆(fy聻i툺\"?<\/峧ࣞ⓺ᤤ쵒߯ꎺ騬?)刦\u2072l慪y꺜ﲖTj+u",
+ "뽫<G;稳UL⸙q2n쵿C396炿J蓡z⣁zဩSOU?<\/뙍oE큸O鿅෴ꍈEm#\"[瑦⤫ᝆgl⡗q8\"큘덥係@ᆤ=\u0001爖羝췀㸩b9\\jeqt㟿㮸龾m㳳긄": {
+ "9\"V霟釜{/o0嫲C咀-饷䈍[녩)\r䤴tMW\\龟ϣ^ي㪙忩䞞N湆Y笕)萨ꖤ誥煽:14⫻57U$擒䲐薡Qvↇ櫲현誧?nஷ6": {"l웾䌵.䅋䦝ic碳g[糲Ƿ-ឈᚱ4쑧\u0004C࿼\u0018&쬑?멲<\/fD_檼픃pd쪼n㕊渪V䛉m揈W儅톳뗳䓆7㭽諤T煠Ney?0᪵鈑&": [
+ false,
+ null,
+ {
+ "\r;鼶j᠂꼍RLz~♔9gf?ӡ浐": -1.4843072575250897E-19,
+ "&ꊒ\"ꋟ䝭E诮ﯚO?SW뒁훪mb旙⎕ᗕ⶙|ᷤ5y4甥": "j5|庠t铱?v 횋0\"'rxz䃢杺Ɜ!\u0002",
+ "Q ၩ㟧": {"Hﬔ\u2058䪠틙izZㅛ탟H^ﶲA??R6呠Z솋R.࿶g8": [
+ -8762672252886298799,
+ -1.9486830507000208E17,
+ null,
+ -7157359405410123024,
+ null,
+ null,
+ -995856734219489233,
+ "呧㫹A4!",
+ null,
+ -1.9105609358624648E-19,
+ 5888184370445333848,
+ 2.25460605078245E-19,
+ 2.5302739297121987E18,
+ "뢹sbEf捵2丯?뗾耸(Wd띙SବꭖrtU?筤P똙QpbbKqaE$来V웰3i/lK퉜,8︸e= g螓t竦컼?.寋8鵗",
+ 7377742975895263424,
+ 2.4218442017790503E-19,
+ {
+ "y꒚ཫ쨘醬킃糟}yTSt䡀⇂뿽4ൢ戰U": [[
+ 3600537227234741875,
+ 4435474101760273035,
+ -1.42274517007951795E18,
+ -5567915915496026866,
+ null,
+ null,
+ [
+ -3204084299154861161,
+ {
+ "7梧慸憏.a瘎\u00041U鵮Ck֨d惥耍ⳡY,⭏써E垁FFI鱑ⳬ줢7⧵Bﴠ耘줕햸q컴~*瑍W.떛ࡆ@'᐀+轳": -961121410259132975,
+ "⥅]l黭㣓绶;!!⎃=朼㐿e&ἂ繤C﯀l䝣㌀6TM쑮w懃ꡡ#ᤆ䰓,墼湼゙뽸㲿䧽쫨xᵖ듨<\/ T0峸iQ:溫脐\\\"쎪ὴ砇宖^M泼큥➅鈫@ᄟ༩\u2008⥼": true,
+ "⩐\"籽汎P싯鲘蟼sRᐯ䅩\u0019R(kRᖁ&ಌ 0\"鳶!馼YH": null,
+ "鮼ꚇ싋։刟\rRLd步Nⴗ5Eࡆ訛갚[I醵NC(郴ṉy5D뤺౳QY壯5苴y훨(W\\Cଇ姚C艄깹\u001c歷㋵ZC᥂": [
+ -6806235313106257498,
+ null,
+ "}N⸿讽sꚪ;\\p繇j苄䫨\u20e7%5x?t#",
+ {
+ "O〗k<墻yV$ఁrs-c1ఌ唪.C7_Yobᦜ褷'b帰mㄑl⌅": {"qB뗗擄3隂5뺍櫂䱟e촸P/鏩,3掁ꗩ=冉棓㑉|˞F襴뿴,:㞦<퓂⧙礞♗g뚎ᛩ<\/뉽ⶳ⸻A?_x2I㽝勒*I홱鍧粿~曟㤙2绥Ly6+썃uu鿜בf큘|歍ࣖÉ": [
+ ">hh䈵w>1ⲏ쐭V[ⅎ\\헑벑F_㖝⠗㫇h恽;῝汰ᱼ瀖J옆9RR셏vsZ柺鶶툤r뢱橾/ꉇ囦FGm\"謗ꉦ⨶쒿⥡%]鵩#ᖣ_蹎 u5|祥?O",
+ null,
+ 2.0150326776036215E-19,
+ null,
+ true,
+ false,
+ true,
+ {"\fa᭶P捤WWc᠟f뚉ᬏ퓗ⳀW睹5:HXH=q7x찙X$)모r뚥ᆟ!Jﳸf": [
+ -2995806398034583407,
+ [
+ 6441377066589744683,
+ "Mﶒ醹i)Gἦ廃s6몞 KJ౹礎VZ螺费힀\u0000冺업{谥'꡾뱻:.ꘘ굄奉攼Di᷑K鶲y繈욊阓v㻘}枭캗e矮1c?휐\"4\u0005厑莔뀾墓낝⽴洗ṹ䇃糞@b1\u0016즽Y轹",
+ {
+ "1⽕⌰鉟픏M㤭n⧴ỼD#%鐘⊯쿼稁븣몐紧ᅇ㓕ᛖcw嬀~ഌ㖓(0r⧦Q䑕髍ര铂㓻R儮\"@ꇱm❈௿᦯頌8}㿹犴?xn잆꥽R": 2.07321075750427366E18,
+ "˳b18㗈䃟柵Z曆VTAu7+㛂cb0﯑Wp執<\/臋뭡뚋刼틮荋벲TLP预庰܈G\\O@VD'鱃#乖끺*鑪ꬳ?Mޞdﭹ{␇圯쇜㼞顄︖Y홡g": [{
+ "0a,FZ": true,
+ "2z̬蝣ꧦ驸\u0006L↛Ḣ4๚뿀'?lcwᄧ㐮!蓚䃦-|7.飑挴.樵*+1ﮊ\u0010ꛌ%貨啺/JdM:똍!FBe?鰴㨗0O财I藻ʔWA᫓G쳛u`<\/I": [{
+ "$τ5V鴐a뾆両環iZp頻යn븃v": -4869131188151215571,
+ "*즢[⦃b礞R◚nΰꕢH=귰燙[yc誘g䆌?ଜ臛": {
+ "洤湌鲒)⟻\\䥳va}PeAMnN[": "㐳ɪ/(軆lZR,Cp殍ȮN啷\"3B婴?i=r$펽ᤐ쀸",
+ "阄R4㒿㯔ڀ69ZᲦ2癁핌噗P崜#\\-쭍袛&鐑/$4童V꩑_ZHA澢fZ3": {"x;P{긳:G閉:9?活H": [
+ "繺漮6?z犞焃슳\">ỏ[Ⳛ䌜녏䂹>聵⼶煜Y桥[泥뚩MvK$4jtロ",
+ "E#갶霠좭㦻ୗ먵F+䪀o蝒ba쮎4X㣵 h",
+ -335836610224228782,
+ null,
+ null,
+ [
+ "r1᫩0>danjY짿bs{",
+ [
+ -9.594464059325631E-23,
+ 1.0456894622831624E-20,
+ null,
+ 5.803973284253454E-20,
+ -8141787905188892123,
+ true,
+ -4735305442504973382,
+ 9.513150514479281E-20,
+ "7넳$螔忷㶪}䪪l짴\u0007鹁P鰚HF銏ZJﳴ/⍎1ᷓ忉睇ᜋ쓈x뵠m䷐窥Ꮤ^\u0019ᶌ偭#ヂt☆၃pᎍ臶䟱5$䰵&๵分숝]䝈뉍♂坎\u0011<>",
+ "C蒑貑藁lﰰ}X喇몛;t밿O7/᯹f\u0015kI嘦<ዴ㟮ᗎZ`GWퟩ瑹࡮ᅴB꿊칈??R校s脚",
+ {
+ "9珵戬+AU^洘拻ቒy柭床'粙XG鞕᠜繀伪%]hC,$輙?Ut乖Qm떚W8઼}~q⠪rU䤶CQ痗ig@#≲t샌f㈥酧l;y闥ZH斦e⸬]j⸗?ঢ拻퀆滌": null,
+ "畯}㧢J罚帐VX㨑>1ꢶkT⿄蘥㝑o|<嗸層沈挄GEOM@-䞚䧰$만峬輏䠱V✩5宸-揂D'㗪yP掶7b⠟J㕻SfP?d}v㼂Ꮕ'猘": {
+ "陓y잀v>╪": null,
+ "鬿L+7:됑Y=焠U;킻䯌잫!韎ஔ\f": {
+ "駫WmGጶ": {
+ "\\~m6狩K": -2586304199791962143,
+ "ႜࠀ%͑l⿅D.瑢Dk%0紪dḨTI픸%뗜☓s榗኉\"?V籄7w髄♲쟗翛歂E䤓皹t ?)ᄟ鬲鐜6C": {
+ "_췤a圷1\u000eB-XOy缿請∎$`쳌eZ~杁튻/蜞`塣৙\"⪰\"沒l}蕌\\롃荫氌.望wZ|o!)Hn獝qg}": null,
+ "kOSܧ䖨钨:಼鉝ꭝO醧S`십`ꓭ쭁ﯢN&Et㺪馻㍢ⅳ㢺崡ຊ蜚锫\\%ahx켨|ż劻ꎄ㢄쐟A躊᰹p譞綨Ir쿯\u0016ﵚOd럂*僨郀N*b㕷63z": {
+ ":L5r+T㡲": [{
+ "VK泓돲ᮙRy㓤➙Ⱗ38oi}LJቨ7Ó㹡৘*q)1豢⛃e᫛뙪壥镇枝7G藯g㨛oI䄽 孂L缊ꋕ'EN`": -2148138481412096818,
+ "`⛝ᘑ$(खꊲ⤖ᄁꤒ䦦3=)]Y㢌跨NĴ驳줟秠++d孳>8ᎊ떩EꡣSv룃 쯫أ?#E|᭙㎐?zv:5祉^⋑V": [
+ -1.4691944435285607E-19,
+ 3.4128661569395795E17,
+ "㐃촗^G9佭龶n募8R厞eEw⺡_ㆱ%⼨D뉄퉠2ꩵᛅⳍ搿L팹Lවn=\"慉념ᛮy>!`g!풲晴[/;?[v겁軇}⤳⤁핏∌T㽲R홓遉㓥",
+ "愰_⮹T䓒妒閤둥?0aB@㈧g焻-#~跬x<\/舁P݄ꐡ=\\׳P\u0015jᳪᢁq;㯏l%᭗;砢觨▝,謁ꍰGy?躤O黩퍋Y㒝a擯\n7覌똟_䔡]fJ晋IAS",
+ 4367930106786121250,
+ -4.9421193149720582E17,
+ null,
+ {
+ ";ᄌ똾柉곟ⰺKpፇ䱻ฺ䖝{o~h!eꁿ઻욄ښ\u0002y?xUd\u207c悜ꌭ": [
+ 1.6010824122815255E-19,
+ [
+ "宨︩9앉檥pr쇷?WxLb",
+ "氇9】J玚\u000f옛呲~ 輠1D嬛,*mW3?n휂糊γ虻*ᴫ꾠?q凐趗Ko↦GT铮",
+ "㶢ថmO㍔k'诔栀Z蛟}GZ钹D",
+ false,
+ -6.366995517736813E-20,
+ -4894479530745302899,
+ null,
+ "V%᫡II璅䅛䓎풹ﱢ/pU9se되뛞x梔~C)䨧䩻蜺(g㘚R?/Ự[忓C뾠ࢤc왈邠买?嫥挤풜隊枕",
+ ",v碍喔㌲쟚蔚톬៓ꭶ",
+ 3.9625444752577524E-19,
+ null,
+ [
+ "kO8란뿒䱕馔b臻⍟隨\"㜮鲣Yq5m퐔<u뷆c譆\u001bN?<",
+ [{
+ ";涉c蒀ᴧN䘱䤳 ÿꭷ,핉dSTDB>K#ꢘug㼈ᝦ=P^6탲@䧔%$CqSw铜랊0&m⟭<\/a逎ym\u0013vᯗ": true,
+ "洫`|XN뤮\u0018詞=紩鴘_sX)㯅鿻Ố싹": 7.168252736947373E-20,
+ "ꛊ饤ﴏ袁(逊+~⽫얢鈮艬O힉7D筗S곯w操I斞᠈븘蓷x": [[[[
+ -7.3136069426336952E18,
+ -2.13572396712722688E18,
+ {
+ "硢3㇩R:o칢行E<=\u0018ၬYuH!\u00044U%卝炼2>\u001eSi$⓷ꒈ'렢gᙫ番ꯒ㛹럥嶀澈v;葷鄕x蓎\\惩+稘UEᖸﳊ㊈壋N嫿⏾挎,袯苷ኢ\\x|3c": 7540762493381776411,
+ "?!*^ᢏ窯?\u0001ڔꙃw虜돳FgJ?&⨫*uo籤:?}ꃹ=ٴ惨瓜Z媊@ત戹㔏똩Ԛ耦Wt轁\\枒^\\ꩵ}}}ꀣD\\]6M_⌫)H豣:36섘㑜": {
+ ";홗ᰰU஋㙛`D왔ཿЃS회爁\u001b-㢈`봆?盂㛣듿ᦾ蒽_AD~EEຆ㊋(eNwk=Rɠ峭q\"5Ἠ婾^>'ls\n8QAK<l_⭨穟": [
+ true,
+ true,
+ {"ﳷm箅6qⷈ?ﲈ憟b۷⫉἞V뚴少U呡瓴ꉆs~嘵得㌶4XR漊": [
+ "폆介fM暪$9K[ㄇ샍큳撦g撟恸jҐF㹹aj bHᘀ踉ꎐC粄 a?\u000fK즉郝 幨9D舢槷Xh뵎u훩Ꜿ턾ƅ埂P埆k멀{䢹~?D<\/꼢XR\u001b〱䝽꼨i㘀ḟ㚺A-挸",
+ false,
+ null,
+ -1.1710758021294953E-20,
+ 3996737830256461142,
+ true,
+ null,
+ -8271596984134071193,
+ "_1G퉁텑m䮔鰼6멲Nmꇩſt쓟튍N许FDj+3^ﶜ⎸\u0019⤕橥!\"s-뾞lz北׸ꍚ랬)?l⻮고i䑰\u001f䪬",
+ 4.459124464204517E-19,
+ -4.0967172848578447E18,
+ 5643211135841796287,
+ -9.482336221192844E-19,
+ "౪冏釶9D?s螭X榈枸j2秀v]泌鰚岒聵轀쌶i텽qMbL]R,",
+ null,
+ [
+ null,
+ {"M쪊ꯪ@;\u0011罙ꕅ<e᝺|爑Yⵝ<\/&ᩎ<腊ሑᮔ੃F豭": [
+ "^0࡟1볏P폋ፏ杈F⨥Iꂴ\"z磣VⅡ=8퀝2]䢹h1\u0017{jT<I煛5%D셍S⑙⅏J*샐 巙ດ;᧡䙞",
+ [{
+ "'㶡큾鄧`跊\"gV[?u᭒Ʊ髷%葉굵a띦N켧Qﯳy%y䩟髒L䯜S䵳r絅肾킂ၐ'ꔦg긓a'@혔যW谁ᝬF栩ŷ+7w鞚": 6.3544416675584832E17,
+ "苎脷v改hm쏵|㋊g_ᔐ 뒨蹨峟썎㷸|Ο刢?Gͨ옛-?GꦱIEYUX4?%ꘋᆊ㱺": -2.8418378709165287E-19,
+ "誰?(H]N맘]k洳\"q蒧蘞!R퐫\\(Q$T5N堍⫣윿6|럦속︅ﭗ(": [
+ "峩_\u0003A瘘?✓[硫䎯ၽuጭ\"@Y綅첞m榾=贮9R벿῜Z",
+ null,
+ "䰉㗹㷾Iaᝃqcp쓘὾൫Q|ﵓ<\/ḙ>)- Q䲌mo펹L_칍樖庫9꩝쪹ᘹ䑖瀍aK ?*趤f뭓廝p=磕",
+ "哑z懅ᤏ-ꍹux쀭",
+ [
+ true,
+ 3998739591332339511,
+ "ጻ㙙?᳸aK<\/囩U`B3袗ﱱ?\"/k鏔䍧2l@쿎VZ쨎/6ꃭ脥|B?31+on颼-ꮧ,O嫚m ࡭`KH葦:粘i]aSU쓙$쐂f+詛頖b",
+ [{"^<9<箝&絡;%i﫡2攑紴\\켉h쓙-柂䚝ven\u20f7浯-Ꮏ\r^훁䓚헬\u000e?\\ㅡֺJ떷VOt": [{
+ "-௄卶k㘆혐஽y⎱㢬sS઄+^瞥h;ᾷj;抭\u0003밫f<\/5Ⱗ裏_朻%*[-撵䷮彈-芈": {
+ "㩩p3篊G|宮hz䑊o곥j^Co0": [
+ 653239109285256503,
+ {"궲?|\":N1ۿ氃NZ#깩:쇡o8킗ࡊ[\"됸Po핇1(6鰏$膓}⽐*)渽J'DN<썙긘毦끲Ys칖": {
+ "2Pr?Xjㆠ?搮/?㓦柖馃5뚣Nᦼ|铢r衴㩖\"甝湗ܝ憍": "\"뾯i띇筝牻$珲/4ka $匝휴译zbAᩁꇸ瑅&뵲衯ꎀᆿ7@ꈋ'ᶨH@ᠴl+",
+ "7뢽뚐v?4^ꊥ_⪛.>pởr渲<\/⢕疻c\"g䇘vU剺dஔ鮥꒚(dv祴X⼹\\a8y5坆": true,
+ "o뼄B욞羁hr﷔폘뒚⿛U5pꪴfg!6\\\"爑쏍䢱W<ﶕ\\텣珇oI/BK뺡'谑♟[Ut븷亮g(\"t⡎有?ꬊ躺翁艩nl F⤿蠜": 1695826030502619742,
+ "ۊ깖>ࡹ햹^ⵕ쌾BnN〳2C䌕tʬ]찠?ݾ2饺蹳ぶꌭ訍\"◹ᬁD鯎4e滨T輀ﵣ੃3\u20f3킙D瘮g\\擦+泙ၧ 鬹ﯨַ肋7놷郟lP冝{ߒhড়r5,꓋": null,
+ "ΉN$y{}2\\N﹯ⱙK'8ɜͣwt,.钟廣䎘ꆚk媄_": null,
+ "䎥eᾆᝦ읉,Jުn岪㥐s搖謽䚔5t㯏㰳㱊ZhD䃭f絕s鋡篟a`Q鬃┦鸳n_靂(E4迠_觅뷝_宪D(NL疶hL追V熑%]v肫=惂!㇫5⬒\u001f喺4랪옑": {
+ "2a輍85먙R㮧㚪Sm}E2yꆣꫨrRym㐱膶ᔨ\\t綾A☰.焄뙗9<쫷챻䒵셴᭛䮜.<\/慌꽒9叻Ok䰊Z㥪幸k": [
+ null,
+ true,
+ {"쌞쐍": {
+ "▟GL K2i뛱iQ\"̠.옛1X$}涺]靎懠ڦ늷?tf灟ݞゟ{": 1.227740268699265E-19,
+ "꒶]퓚%ฬK❅": [{
+ "(ෛ@Ǯっ䧼䵤[aテൖvEnAdU렖뗈@볓yꈪ,mԴ|꟢캁(而첸죕CX4Y믅": "2⯩㳿ꢚ훀~迯?᪑\\啚;4X\u20c2襏B箹)俣eỻw䇄",
+ "75༂f詳䅫ꐧ鏿 }3\u20b5'∓䝱虀f菼Iq鈆﨤g퍩)BFa왢d0뮪痮M鋡nw∵謊;ꝧf美箈ḋ*\u001c`퇚퐋䳫$!V#N㹲抗ⱉ珎(V嵟鬒_b㳅\u0019": null,
+ "e_m@(i㜀3ꦗ䕯䭰Oc+-련0뭦⢹苿蟰ꂏSV䰭勢덥.ྈ爑Vd,ᕥ=퀍)vz뱊ꈊB_6듯\"?{㒲&㵞뵫疝돡믈%Qw限,?\r枮\"? N~癃ruࡗdn&": null,
+ "㉹&'Pfs䑜공j<\/?|8oc᧨L7\\pXᭁ 9᪘": -2.423073789014103E18,
+ "䝄瑄䢸穊f盈᥸,B뾧푗횵B1쟢f\u001f凄": "魖⚝2儉j꼂긾껢嗎0ࢇ纬xI4](੓`蕞;픬\fC\"斒\")2櫷I﹥迧",
+ "ퟯ詔x悝령+T?Bg⥄섅kOeQ큼㻴*{E靼6氿L缋\u001c둌๶-㥂2==-츫I즃㠐Lg踞ꙂEG貨鞠\"\u0014d'.缗gI-lIb䋱ᎂDy缦?": null,
+ "紝M㦁犿w浴詟棓쵫G:䜁?V2ힽ7N*n&㖊Nd-'ຊ?-樹DIv⊜)g䑜9뉂ㄹ푍阉~ꅐ쵃#R^\u000bB䌎䦾]p.䀳": [{"ϒ爛\"ꄱ︗竒G䃓-ま帳あ.j)qgu扐徣ਁZ鼗A9A鸦甈!k蔁喙:3T%&㠘+,䷞|챽v䚞문H<\/醯r셓㶾\\a볜卺zE䝷_죤ဵ뿰᎟CB": [
+ 6233512720017661219,
+ null,
+ -1638543730522713294,
+ false,
+ -8901187771615024724,
+ [
+ 3891351109509829590,
+ true,
+ false,
+ -1.03836679125188032E18,
+ {
+ "<?起HCᷭ죎劐莇逰/{gs\u0014⽛㰾愫tᅱ<솞ڢ됌煲膺਻9x닳x࡭Q訽,ᶭඦtt掾\"秧㺌d˪䙻꫗:ᭈh4緞痐䤴c뫚떩త<?ᕢ謚6]폛O鰐鋛镠贩赟\"<G♷1'": true,
+ "቙ht4ߝBqꦤ+\u0006멲趫灔)椾": -1100102890585798710,
+ "総兎곇뇸粟F醇;朠?厱楛㶆ⶏ7r⾛o꯬᳡F\\머幖 㜦\f[搦᥽㮣0䕊?J㊳뀄e㔔+?<n↴复": [
+ "4~ꉍ羁\\偮(泤叕빜\u0014>j랎:g曞ѕᘼ}链N",
+ -1.1103819473845426E-19,
+ true,
+ [
+ true,
+ null,
+ -7.9091791735309888E17,
+ true,
+ {"}蔰鋈+ꐨ啵0?g*사%`J?*": [{
+ "\"2wG?yn,癷BK\\龞䑞x?蠢": -3.7220345009853505E-19,
+ ";饹়❀)皋`噿焒j(3⿏w>偍5X<np?<줯<Y]捘!J೸UⳂNे7v௸㛃ᄧ톿䨷鯻v焇=烻TQ!F⦰䣣눿K鷚눁'⭲m捠(䚻": [
+ "蹕 淜੃b\"+몾ⴕ",
+ null,
+ 35892237756161615,
+ {
+ " 듹㏝)5慁箱&$~:遰쮐<\/堋?% \\勽唅z손帋䘺H髀麡M퇖uz\u0012m諦d᳤콌樝\rX싹̡Ო": -433791617729505482,
+ "-j溗ࢵcz!:}✽5ഇ,욨ݏs#덫=南浺^}E\\Y\\T*뼈cd꺐cۘ뎁䨸됱K䠴㉿恿逳@wf쏢<\/[L[": -9.3228549642908109E17,
+ "Ms킭u஗%\\u⍎/家欲ἅ答㓽/꯳齳|㭘Pr\"v<\/禇䔆$GA䊻˔-:틊[h?倬荤ᾞ৳.Gw\u000b": [
+ "0宜塙I@䏴蝉\\Uy뒅=2<h暒K._贡璐Yi檻_⮵uᐝ㘗聠[f\u0015힢Hꔮ}጑;誏yf0\"\u20cc?(=q斠➽5ꎾ鞘kⲃ",
+ -2.9234211354411E-19,
+ false,
+ true,
+ {
+ "\u0011⟴GH_;#怵:\u001c\u0002n1U\\p/왔(┫]hꐚ7\r0䵷첗岷O௷?㝎[殇|J=?韷pᶟ儜犆?5კ1kꍖiH竧뛈ପdmk游y(콪팱꾍k慧 y辣": [
+ false,
+ "O\"끍p覈ykv磂㢠㝵~뀬튍lC&4솎䇃:Mj",
+ -7.009964654003924E-20,
+ false,
+ -49306078522414046,
+ null,
+ null,
+ 2160432477732354319,
+ true,
+ "4횡h+!踹ꐬP鮄{0&뱥M?샍鞅n㮞ᨹ?쒆毪l'箅^ꚥ頛`e㻨52柳⮙嫪࡟딯a.~䵮1f吘N&zȭL榓ۃ鳠5d㟆M@㣥ӋA΍q0縶$",
+ -3.848996532974368E16,
+ true,
+ null,
+ -3.5240055580952525E18,
+ {
+ " vﭷၵ#ce乃5僞?Z D`묨粇ᐔ绠vWL譢u뽀\\J|tⓙt№\"ꨋnT凮ᒩ蝂篝b騩:䢭Hbv읻峨z㹚T趗햆귣학津XiY@ᖥK": true,
+ "!F 醌y䉸W2ꇬ\u0006/䒏7~%9擛햀徉9⛰+?㌘;ꠓX䇻Dfi뼧쒒\u0012F謞՝絺+臕kऍLSQ쌁X쎬幦HZ98蒊枳": "澤令#\u001d抍⛳@N搕퀂[5,✄ꘇ~䘷?\u0011Xꈺ[硸⠘⛯X醪聡x\u0007쌇MiX/|ミ뚁K8䁡W)銀q僞綂蔕E",
+ "6␲䣖R৞@ငg?<\/೴x陙Xꈺ崸⠅ᇾ\\0X,H쟴셭A稂ힿゝF\\쑞\u0012懦(Aᯕ灭~\u0001껮X?逊": 5.7566819207732864E17,
+ "[c?椓": false,
+ "k䒇": 2583824107104166717,
+ "꙯N훙㏅ﮒ燣㨊瞯咽jMxby뻭뵫װ[\"1畈?ৱL": "띣ᔂ魠羓犴ꚃ+|rY",
+ "녺Z?䬝鉉:?ⳙ瘏Cኯ.Vs[釿䨉쐧\\\\*쵢猒$\\y溔^,㑳": {"藶꺟": [{
+ "\"d훣N2zq]?'檿죸忷篇ﮟ擤m'9!죶≓p뭻\\ᇷ\f퇶_䰸h๐Q嵃訾㘑従ꯦ䞶jL틊r澵Omᾫ!H䱤팼/;|᭺I7슎YhuXi⚼": -1.352716906472438E-19,
+ "M⽇倻5J䂫औ᝔楸#J[Fﹱ쫮W誻bWz?}1\"9硪뻶fe": "盬:Ѹ砿획땣T凊(m灦呜ﻝR㿎艴䂵h",
+ "R띾k힪CH钙_i苮ⰵoᾨ紑퉎7h؉\"柀蝽z0့\"<?嘭$蜝?礲7岇槀묡?V钿T⣜v+솒灚ԛ2米mH?>薙婏聿3aFÆÝ": "2,ꓴg?_섦_>Y쪥션钺;=趘F~?D㨫\bX?㹤+>/믟kᠪ멅쬂Uzỵ]$珧`m雁瑊ඖ鯬cꙉ梢f묛bB",
+ "♽n$YjKiXX*GO贩鏃豮祴遞K醞眡}ꗨv嵎꼷0୸+M菋eH徸J꣆:⼐悥B켽迚㯃b諂\u000bjꠜ碱逮m8": [
+ "푷᣺ﻯd8ﱖ嬇ភH鹎⡱᱅0g:果6$GQ췎{vᷧYy-脕x偹砡館⮸C蓼ꏚ=軄H犠G谖ES詤Z蠂3l봟hᅭ7䦹1GPQG癸숟~[#駥8zQ뛣J소obg,",
+ null,
+ 1513751096373485652,
+ null,
+ -6.851466660824754E-19,
+ {"䩂-⴮2ٰK솖풄꾚ႻP앳1H鷛wmR䗂皎칄?醜<\/&ࠧ㬍X濬䵈K`vJ륒Q/IC묛!;$vϑ": {
+ "@-ꚗxྐྵ@m瘬\u0010U絨ﮌ驐\\켑寛넆T=tQ㭤L연@脸삯e-:⩼u㎳VQ㋱襗ຓ<Ⅶ䌸cML3+\u001e_C)r\\9+Jn\\Pﺔ8蠱檾萅Pq鐳话T䄐I": -1.80683891195530061E18,
+ "ᷭዻU~ཷsgSJ`᪅'%㖔n5픆桪砳峣3獮枾䌷⊰呀": {
+ "Ş੉䓰邟自~X耤pl7间懑徛s첦5ਕXexh⬖鎥᐀nNr(J컗|ૃF\"Q겮葲놔엞^겄+㈆话〾희紐G'E?飕1f❼텬悚泬먐U睬훶Qs": false,
+ "(\u20dag8큽튣>^Y{뤋.袊䂓;_g]S\u202a꽬L;^'#땏bႌ?C緡<䝲䲝断ꏏ6\u001asD7IK5Wxo8\u0006p弊⼂ꯍ扵\u0003`뵂픋%ꄰ⫙됶l囏尛+䗅E쟇\\": [
+ true,
+ {
+ "\n鱿aK㝡␒㼙2촹f;`쾏qIࡔG}㝷䐍瓰w늮*粅9뒪ㄊCj倡翑閳R渚MiUO~仨䜶RꙀA僈㉋⦋n{㖥0딿벑逦⥻0h薓쯴Ꝼ": [
+ 5188716534221998369,
+ 2579413015347802508,
+ 9.010794400256652E-21,
+ -6.5327297761238093E17,
+ 1.11635352494065523E18,
+ -6656281618760253655,
+ {
+ "": ")?",
+ "TWKLꑙ裑꺔UE俸塑炌Ũ᜕-o\"徚#": {"M/癟6!oI51ni퐚=댡>xꍨ\u0004 ?": {
+ "皭": {"⢫䋖>u%w잼<䕏꘍P䋵$魋拝U䮎緧皇Y훂&|羋ꋕ잿cJ䨈跓齳5\u001a삱籷I꿾뤔S8㌷繖_Yឯ䲱B턼O歵F\\l醴o_欬6籏=D": [
+ false,
+ true,
+ {"Mt|ꏞD|F궣MQ뵕T,띺k+?㍵i": [
+ 7828094884540988137,
+ false,
+ {
+ "!༦鯠,&aﳑ>[euJꏽ綷搐B.h": -7648546591767075632,
+ "-n켧嘰{7挐毄Y,>❏螵煫乌pv醑Q嶚!|⌝責0왾덢ꏅ蛨S\\)竰'舓Q}A釡5#v": 3344849660672723988,
+ "8閪麁V=鈢1녈幬6棉⪮둌\u207d᚛驉ꛃ'r䆉惏ै|bἧﺢᒙ<=穊强s혧eꮿ慩⌡ \\槳W븧J檀C,ᘉ의0俯퀉M;筷ࣴ瓿{늊埂鄧_4揸Nn阼Jੵ˥(社": true,
+ "o뼀vw)4A뢵(a䵢)p姃뛸\u000fK#KiQp\u0005ꅍ芅쏅": null,
+ "砥$ꥸ┇耽u斮Gc{z빔깎밇\\숰\u001e괷各㶇쵿_ᴄ+h穢p촀Ნ䃬z䝁酳ӂ31xꔄ1_砚W렘G#2葊P ": [
+ -3709692921720865059,
+ null,
+ [
+ 6669892810652602379,
+ -135535375466621127,
+ "뎴iO}Z? 馢녱稹ᄾ䐩rSt帤넆&7i騏멗畖9誧鄜'w{Ͻ^2窭외b㑎粖i矪ꦨ탪跣)KEㆹ\u0015V8[W?⽉>'kc$䨘ᮛ뉻٬M5",
+ 1.10439588726055846E18,
+ false,
+ -4349729830749729097,
+ null,
+ [
+ false,
+ "_蠢㠝^䟪/D녒㡋ỎC䒈판\u0006એq@O펢%;鹐쏌o戥~A[ꡉ濽ỳ&虃᩾荣唙藍茨Ig楡꒻M窓冉?",
+ true,
+ 2.17220752996421728E17,
+ -5079714907315156164,
+ -9.960375974658589E-20,
+ "ᾎ戞༒",
+ true,
+ false,
+ [[
+ "ⶉᖌX⧕홇)g엃⹪x뚐癟\u0002",
+ -5185853871623955469,
+ {
+ "L㜤9ợㇶK鐰⋓V뽋˖!斫as|9"፬䆪?7胜&n薑~": -2.11545634977136992E17,
+ "O8뀩D}캖q萂6༣㏗䈓煮吽ਆᎼDᣘ폛;": false,
+ "YTᡅ^L㗎cbY$pᣞ縿#fh!ꘂb삵玊颟샞ဢ$䁗鼒몁~rkH^:닮먖츸륈⪺쒉砉?㙓扫㆕꣒`R䢱B酂?C뇞<5Iޚ讳騕S瞦z": null,
+ "\\RB?`mG댵鉡幐物䵎有5*e骄T㌓ᛪ琾駒Ku\u001a[柆jUq8⋈5鿋츿myﻗ?雍ux঴?": 5828963951918205428,
+ "n0晅:黯 xu씪^퓞cB㎊ᬍ⺘٤փ~B岚3㥕擄vᲂ~F?C䶖@$m~忔S왖㲚?챴⊟W#벌{'㰝I䝠縁s樘\\X뢻9핡I6菍ㄛ8쯶]wॽ0L\"q": null,
+ "x增줖j⦦t䏢᎙㛿Yf鼘~꫓恄4惊\u209c": "oOhbᤃ᛽z&Bi犑\\3B㩬劇䄑oŁ쨅孥멁ຖacA㖫借㞝vg싰샂㐜#譞⢤@k]鋰嘘䜾L熶塥_<\/⍾屈ﮊ_mY菹t뙺}Ox=w鮮4S1ꐩמּ'巑",
+ "㗓蟵ꂾe蠅匳(JP䗏෸\u0089耀왲": [{
+ "ᤃ㵥韎뤽\r?挥O쯡⇔㞚3伖\u0005P⋪\"D궣QLn(⚘罩䩢Ŏv䤘尗뼤됛O淽鋋闚r崩a{4箙{煷m6〈": {
+ "l곺1L": {
+ "T'ਤ?砅|੬Km]䄩\"(࿶<\/6U爢䫈倔郴l2㴱^줣k'L浖L鰄Rp今鎗⒗C얨M훁㡧ΘX粜뫈N꤇輊㌻켑#㮮샶-䍗룲蠝癜㱐V>=\\I尬癤t=": 7648082845323511446,
+ "鋞EP:<\/_`ၧe混ㇹBd⯢㮂驋\\q碽饩跓྿ᴜ+j箿렏㗑yK毢宸p謹h䦹乕U媣\\炤": [[
+ "3",
+ [
+ true,
+ 3.4058271399411134E-20,
+ true,
+ "揀+憱f逮@먻BpW曉\u001a㣐⎊$n劈D枤㡞좾\u001aᛁ苔౩闝1B䷒Ṋ݋➐ꀞꐃ磍$t੤_:蘺⮼(#N",
+ 697483894874368636,
+ [
+ "vᘯ锴)0訶}䳅⩚0O壱韈ߜ\u0018*U鍾䏖=䧉뽑单휻ID쿇嘗?ꌸῬ07",
+ -5.4858784319382006E18,
+ 7.5467775182251151E18,
+ -8911128589670029195,
+ -7531052386005780140,
+ null,
+ [
+ null,
+ true,
+ [[{
+ "1欯twG<u䝮␽ꇣ_ჟﱴଶ-쪋\"?홺k:莝Ꜫ*⺵꽹댅釔좵}P?=9렿46b\u001c\\S?(筈僦⇶爷谰1ྷa": true,
+ "TҫJYxڪ\\鰔℮혡)m_WVi眪1[71><\/Q:0怯押殃탷聫사<ỗꕧ蚨䡁nDꌕ\u001c녬~蓩<N蹑\"{䫥lKc혁뫖앺:vⵑ": "g槵?",
+ "aꨩ뻃싥렌1`롗}Yg>鲃g儊>ꏡl㻿/⑷*챳6㻜W毤緛ﹺᨪ4\u0013뺚J髬e3쳸䘦伧?恪&{L掾p+꬜M䏊d娘6": {
+ "2p첼양棜h䜢﮶aQ*c扦v︥뮓kC寵횂S銩&ǝ{O*य़iH`U큅ࡓr䩕5ꄸ?`\\᧫?ᮼ?t〟崾훈k薐ì/iy꤃뵰z1<\/AQ#뿩8jJ1z@u䕥": 1.82135747285215155E18,
+ "ZdN &=d년ᅆ'쑏ⅉ:烋5&៏ᄂ汎来L㯄固{钧u\\㊏튚e摑&t嗄ꖄUb❌?m䴘熚9EW": [{
+ "ଛ{i*a(": -8.0314147546006822E17,
+ "⫾ꃆY\u000e+W`௸ \"M뒶+\\뷐lKE}(NT킶Yj選篒쁶'jNQ硾(똡\\\"逌ⴍy? IRꜘ὞鄬﨧:M\\f⠋Cꚜ쫊ᚴNV^D䕗ㅖἔIao꿬C⍏8": [
+ 287156137829026547,
+ {
+ "H丞N逕<rO䎗:텕<\/䶩샌Sd%^ᵯ눐엑者g䖩똭蕮1U驣?Pⰰ\u001fp(W]67\u0015﫣6굺OR羸#촐F蒈;嘙i✵@_撶y㤏⤍(:᧗뼢༌朆@⏰㤨ꭲ?-n>⯲": {"": {
+ "7-;枮阕梒9ᑄZ": [[[[
+ null,
+ {
+ "": [[[[
+ -7.365909561486078E-19,
+ 2948694324944243408,
+ null,
+ [
+ true,
+ "荒\"并孷䂡쵼9o䀘F\u0002龬7⮹Wz%厖/*? a*R枈㌦됾g뒠䤈q딄㺿$쮸tᶎ릑弣^鏎<\/Y鷇驜L鿽<\/춋9Mᲆឨ^<\/庲3'l낢",
+ "c鮦\u001b두\\~?眾ಢu݆綑෪蘛轋◜gȃ<\/ⴃcpkDt誩܅\"Y",
+ [[
+ null,
+ null,
+ [
+ 3113744396744005402,
+ true,
+ "v(y",
+ {
+ "AQ幆h쾜O+꺷铀ꛉ練A蚗⼺螔j㌍3꽂楎䥯뎸먩?": null,
+ "蠗渗iz鱖w]擪E": 1.2927828494783804E-17,
+ "튷|䀭n*曎b✿~杤U]Gz鄭kW|㴚#㟗ഠ8u擨": [[
+ true,
+ null,
+ null,
+ {"⾪壯톽g7?㥜ώQꑐ㦀恃㧽伓\\*᧰閖樧뢇赸N휶䎈pI氇镊maᬠ탷#X?A+kНM ༑᩟؝?5꧎鰜ṚY즫궔 =ঈ;ﳈ?*s|켦蜌wM笙莔": [
+ null,
+ -3808207793125626469,
+ [
+ -469910450345251234,
+ 7852761921290328872,
+ -2.7979740127017492E18,
+ 1.4458504352519893E-20,
+ true,
+ "㽙깹?먏䆢:䴎ۻg殠JBTU⇞}ꄹꗣi#I뵣鉍r혯~脀쏃#釯:场:䔁>䰮o'㼽HZ擓௧nd",
+ [
+ 974441101787238751,
+ null,
+ -2.1647718292441327E-19,
+ 1.03602824249831488E18,
+ [
+ null,
+ 1.0311977941822604E-17,
+ false,
+ true,
+ {
+ "": -3.7019778830816707E18,
+ "E峾恆茍6xLIm縂0n2视֯J-ᤜz+ᨣ跐mYD豍繹⹺䊓몓ﴀE(@詮(!Y膽#᎙2䟓섣A䈀㟎,囪QbK插wcG湎ꤧtG엝x⥏俎j'A一ᯥ뛙6ㅑ鬀": 8999803005418087004,
+ "よ殳\\zD⧅%Y泥簳Uꈩ*wRL{3#3FYHା[d岀䉯T稉駅䞘礄P:闈W怏ElB㤍喬赔bG䠼U଄Nw鰯闀楈ePsDꥷ꭬⊊": [
+ 6.77723657904486E-20,
+ null,
+ [
+ "ཚ_뷎꾑蹝q'㾱ꂓ钚蘞慵렜떆`ⴹ⎼櫯]J?[t9Ⓢ !컶躔I᮸uz>3a㠕i,錃L$氰텰@7녫W㸮?羧W뇧ꃞ,N鋮숪2ɼ콏┍䁲6",
+ "&y?뢶=킕올Za惻HZk>c\u20b58i?ꦶcfBv잉ET9j䡡",
+ "im珊Ճb칧<D-諂*u2ꡜ췛~䬢(텸ﵦ>校\\뼾쯀",
+ 9.555715121193197E-20,
+ true,
+ {
+ "<㫚v6腓㨭e1㕔&&V∌ᗈT奄5Lጥ>탤?튣瑦㳆ꉰ!(ᙪ㿬擇_n쌯IMΉ㕨␰櫈ᱷ5풔蟹&L.첽e鰷쯃劼﫭b#ﭶ퓀7뷄Wr㢈๧Tʴશ㶑澕鍍%": -1810142373373748101,
+ "fg晌o?߲ꗄ;>C>?=鑰監侯Kt굅": true,
+ "䫡蓺ꑷ]C蒹㦘\"1ః@呫\u0014NL䏾eg呮፳,r$裢k>/\\<z": [[
+ null,
+ "C䡏>?ㄤᇰﻛ쉕1஥'Ċ\" \\_?쨔\"ʾr: 9S䘏禺ᪧꄂ㲄",
+ [[{
+ "*硙^+E쌺I1䀖ju?:⦈Ꞓl๴竣迃xKC/饉:\fl\"XTFᄄ蟭,芢<\/骡軺띜hꏘ\u001f銿<棔햳▨(궆*=乥b8\\媦䷀뫝}닶ꇭ(Kej䤑M": [{
+ "1Ꮼ?>옿I╅C<ގ?ꊌ冉SV5A㢊㶆z-๎玶绢2F뵨@㉌뀌o嶔f9-庒茪珓뷳4": null,
+ ";lᰳ": "CbB+肻a䄷苝*/볳+/4fq=㰁h6瘉샴4铢Y骐.⌖@哼猎㦞+'gꋸ㒕ߤ㞑(䶒跲ti⑴a硂#No볔",
+ "t?/jE幸YHT셵⩎K!Eq糦ꗣv刴w\"l$ο:=6:移": {
+ "z]鑪醊嫗J-Xm銌翁絨c里됏炙Ep㣋鏣똼嚌䀓GP﹖cmf4鹭T䅿꣭姧␸wy6ꦶ;S&(}ᎧKxᾂQ|t뻳k\"d6\"|Ml췆hwLt꼼4$&8Պ褵婶鯀9": {"嵃닢ᒯ'd᧫䳳#NXe3-붋鸿ଢ떓%dK\u0013䲎ꖍYV.裸R⍉rR3蟛\\:젯:南ĺLʆ넕>|텩鴷矔ꋅⒹ{t孶㓑4_": [
+ true,
+ null,
+ [
+ false,
+ "l怨콈lᏒ",
+ {
+ "0w䲏嬧-:`䉅쉇漧\\܂yㄨb%㽄j7ᦶ涶<": 3.7899452730383747E-19,
+ "ꯛTẀq纤q嶏V⿣?\"g}ი艹(쥯B T騠I=仵및X": {"KX6颠+&ᅃ^f畒y[": {
+ "H?뱜^?꤂-⦲1a㋞&ꍃ精Ii᤾챪咽쬘唂쫷<땡劈훫놡o㥂\\ KⴙD秼F氮[{'좴:례晰Iq+I쭥_T綺砸GO煝䟪ᚪ`↹l羉q쐼D꽁ᜅ훦: vUV": true,
+ "u^yﳍ0㱓#[y뜌앸ꊬL㷩?蕶蘾⻍KӼ": -7931695755102841701,
+ "䤬轉車>\u001c鴵惋\"$쯃྆⇻n뽀G氠S坪]ಲꨍ捇Qxኻ椕駔\\9ࣼ﫻읜磡煮뺪ᶚ볝l㕆t+sζ": [[[
+ true,
+ false,
+ [
+ null,
+ 3363739578828074923,
+ true,
+ {
+ "\"鸣詩 볰㑵gL㯦῅춝旫}ED辗ﮈI쀤-ꧤ|㠦Z\"娑ᕸ4爏騍㣐\"]쳝Af]茛⬻싦o蚁k䢯䩐菽3廇喑ޅ": 4.5017999150704666E17,
+ "TYႇ7ʠ值4챳唤~Zo&ݛ": false,
+ "`塄J袛㭆끺㳀N㺣`꽐嶥KﯝSVᶔ∲퀠獾N딂X\"ᤏhNﬨvI": {"\u20bb㭘I䖵䰼?sw䂷쇪](泒f\"~;꼪Fԝsᝦ": {"p,'ꉂ軿=A蚶?bƉ㏵䅰諬'LYKL6B깯⋩겦뎙(ᜭ\u0006噣d꾆㗼Z;䄝䚔cd<情@䞂3苼㸲U{)<6&ꩻ钛\u001au〷N숨囖愙j=BXW욕^x芜堏Ῑ爂뛷꒻t✘Q\b": [[
+ "籛&ଃ䩹.ꃩ㦔\\C颫#暪&!勹ꇶ놽攺J堬镙~軌C'꾖䣹㮅岃ᙴ鵣",
+ 4.317829988264744E15,
+ 6.013585322002147E-20,
+ false,
+ true,
+ null,
+ null,
+ -3.084633632357326E-20,
+ false,
+ null,
+ {
+ "\"짫愔昻 X\"藣j\"\"먁ཅѻ㘤㬯0晲DU꟒㸃d벀윒l䦾c੻*3": null,
+ "谈Wm陧阦咟ฯ歖擓N喴㋐銭rCCnVࢥ^♼Ⅾ젲씗刊S༝+_t赔\\b䚍뉨ꬫ6펛cL䊘᜼<\/澤pF懽&H": [
+ null,
+ {
+ "W\"HDUuΌ퀟M'P4࿰H똆ⰱﮯ<\/凐蘲\"C鴫ﭒж}ꭩ쥾t5yd诪ﮡ퍉ⴰ@?氐醳rj4I6Qt": 6.9090159359219891E17,
+ "絛ﳛ⺂": {"諰P㗮聦`ZQ?ꫦh*റcb⧱}埌茥h{棩렛툽o3钛5鮁l7Q榛6_g)ὄ\u0013kj뤬^爖eO4Ⱈ槞鉨ͺ订%qX0T썗嫷$?\\\"봅늆'%": [
+ -2.348150870600346E-19,
+ [[
+ true,
+ -6619392047819511778,
+ false,
+ [[
+ -1.2929189982356161E-20,
+ 1.7417192219309838E-19,
+ {"?嵲2࿐2\u0001啑㷳c縯": [
+ null,
+ [
+ false,
+ true,
+ 2578060295690793218,
+ {
+ "?\"殃呎#㑑F": true,
+ "}F炊_殛oU헢兔Ꝉ,赭9703.B数gTz3⏬": {
+ "5&t3,햓Mݸᵣ㴵;꣫䩍↳#@뫷䠅+W-ࣇzᓃ鿕ಔ梭?T䮑ꥬ旴]u뫵막bB讍:왳둛lEh=숾鱠p咐$짏#?g⹷ᗊv㷵.斈u頻\u0018-G.": "뽙m-ouࣤ஫牷\"`Ksꕞ筼3HlȨvC堈\"I]㖡玎r먞#'W賜鴇k'c룼髋䆿飉㗆xg巤9;芔cጐ/ax䊨♢큓r吓㸫೼䢗da᩾\"]屣`",
+ ":M딪<䢥喠\u0013㖅x9蕐㑂XO]f*Q呰瞊吭VP@9,㨣 D\\穎vˤƩs㜂-曱唅L걬/롬j㈹EB8g<\/섩o渀\"u0y&룣": ">氍緩L/䕑돯Ꟙ蕞^aB뒣+0jK⪄瑨痜LXK^힦1qK{淚t츔X:Vm{2r獁B뾄H첚7氥?쉟䨗ꠂv팳圎踁齀\\",
+ "D彤5㢷Gꪻ[lㄆ@὜⓰絳[ଃ獽쮹☒[*0ꑚ㜳": 9022717159376231865,
+ "ҖaV銣tW+$魿\u20c3亜~뫡ᙰ禿쨽㏡fṼzE/h": "5臐㋇Ჯ쮺? 昨탰Wム밎#'\"崲钅U?幫뺀⍾@4kh>騧\\0ҾEV=爐͌U捀%ꉼ 㮋<{j]{R>:gԩL\u001c瀈锌ﯲﳡꚒ'⫿E4暍㌗뵉X\"H᝜",
+ "ᱚגּ;s醒}犍SἿ㦣&{T$jkB\\\tḮ앾䤹o<避(tW": "vb⯽䴪䮢@|)",
+ "⥒퐁껉%惀뗌+녣迺顀q條g⚯i⤭룐M琹j̈́⽜A": -8385214638503106917,
+ "逨ꊶZ<\/W⫟솪㎮ᘇb?ꠔi\"H㧺x෷韒Xꫨฟ|]窽\u001a熑}Agn?Mᶖa<rఄ4Ů䢤슲Axģe곖㴤x竾郍B謉鸵k薽M)\"芣眜`菉ꉛ䴺": "鹏^ె캫?3耲]|Ü1䡒㝮]8e?䶍^",
+ "뿸樅#P㡊1M룮Uꪭ绢ꑮZ9꽸": {"\nJ^є|3袄ㅐ7⨆銦y睝⋷仴ct?[,<\/ㅬ`?갔髞%揁A೚C": {
+ " 䇞3갫䅪": [{
+ "0|⩁㑂砕ㅻ": null,
+ "D箳᠉`|=⼭)\"*࣊㦏LjO誋": "",
+ "ࠚDZmꗥ}ᷴ╈r7헴ȥ4Kp5a)o}鎘门L搰䆓'✎k俎c#T68ӏ⩶6L鎴<r൦$黊BQY㼳\\跿F慮⡨拵贀!甶V喅/": null,
+ "ⵣq⳹ﻨLk]晩1*y\\$%}䖶P煑㇆䈦E嫁櫕Y࣓嫨䓏OL낮梚㸇洛洚BYtgl∛S☕䉓宑⋢粚ꔯ꠼붠": ")ꬑ윤`\"Ⱓ<\/婽*Y䔸ᓰ_ﳍt슲坩隥&S糧䛮闵诌豐sh쯽邴*섴؏͎=㯨\"RVힳ,^t\"ac?䤒ꉀxHa=Uꛕ㐙TkF껾",
+ "弾cUAF?暤c덽.欀nK앭]r傊䀓ﯳ馽垃[䥛oI0N砊鈥헅Co쟋钄ㅷ㊌뷚7": [
+ null,
+ "૓鏨?^䆏{\u0006`X䧵儱&롡尙砡\u0006뻝쑬sj▻XfᬶgcㄢV >9韲4$3Ỵ^=쏍煤ፐ돷2䣃%鷠/eQ9頸쥎",
+ 2398360204813891033,
+ false,
+ 3.2658897259932633E-19,
+ null,
+ "?ꚃ8Nn㞷幵d䲳䱲뀙ꪛQ瑓鎴]䩋-鰾捡䳡??掊",
+ false,
+ -1309779089385483661,
+ "ᦲxu_/yecR.6芏.ᜇ過 ~",
+ -5658779764160586501,
+ "쒌:曠=l썜䢜wk#s蕚\"互㮉m䉤~0듐䋙#G;h숄옥顇෤勹(C7㢅雚㐯L⠅VV簅<",
+ null,
+ -4.664877097240962E18,
+ -4.1931322262828017E18,
+ {
+ ",": {
+ "v㮟麑䄠뤵g{M띮.\u001bzt뢜뵡0Ǥ龍떟Ᾰ怷ϓRT@Lꀌ樂U㏠⾕e扉|bJg(뵒㠶唺~ꂿ(땉x⻫싉쁊;%0鎻V(o\f,N鏊%nk郼螺": -1.73631993428376141E18,
+ "쟧摑繮Q@Rᕾ㭚㾣4隅待㓎3蒟": [
+ 4971487283312058201,
+ 8973067552274458613,
+ {
+ "`a揙ᣗ\u0015i<S幼訃锭B0&槩✨[Wp皩[g≊k葾x2ᡆ橲䲢W": true,
+ "kH皈Sꁱq傑u?솹풑~o^F=劣N*reJ沤wW苯7p㼹䎐a=ꮧL㷩냴nWꌑ㞱uu谁lVN珿᤻(e豶5#L쪉ᅄ઄\u0015숟봊P瀚X蓎": false,
+ "䫯דּ〖Sc䛭점L뵾pCꙞ\"엇즓_ﰛ톣ꫀ먩㺣㮠⭴!\\W┏t䖰軅y\u0014~ᇰ렢E7*俜䥪W䀩䷐h봆vjஉ묣༏G39.뼳輼:㮿ᐦA饕TUL}~": [
+ null,
+ 8.8648298810470003E17,
+ 5.735561205600924E-20,
+ null,
+ -102555823658171644,
+ 1.2674932032973067E-19,
+ {
+ "D胣O㯨\u0017Ku눓㒏텁nᨊ!Ꚇ廫_>Bo¸": 4.3236479112537999E18,
+ "HW&퉡ぁ圍<W)6悰ꠑHEp14xy峑ft\u0005s亘V튉䢮ꦈX嵐꬝?lI_덝춇-6Ss噺Nk-ﮥ큃܁郪*PR(S6╋@仙V懸뺵ﯜV粹": "9䗌斀4㐈^Qs隄硏j\u0003",
+ "Vk鶅C泹筁HX훉朗*r\\z顊誌儖4?n7᏾6몋䎡ﳈ],H頢p蚐㑄P4满E䏩V䬕ญL廂쒬쑨ꆷh迡ꍰ譖墎 ]鹿ฌ7ﶽ冭༽<ꈓS\\l䋮?_ユ檒?": -8598528325153980065,
+ "t=q퍣疻тZ\\錅J.镎|nfḷ鴒1厰L灯纜E]୦⥪]Ꮾ'羝p/咩0닳ﳁqﳖཽk ?X1Ft%ś뭢v鋋⺃爵⒗": [[
+ 5.0824756359232045E-19,
+ [
+ 7.268480839079619E-19,
+ {"탿^굞⧕iј덊ꀛw껩6ꟳXs酚\\>Y?瑡Qy훍q!帰敏s舠㫸zꚗaS歲v`G株巷Jp6킼 (귶鍔⾏⡈>M汐㞍ቴ꙲dv@i㳓ᇆ?黍": [
+ null,
+ 4997607199327183467,
+ "E㻎蠫ᐾ高䙟蘬洼旾﫠텛㇛?'M$㣒蔸=A_亀绉앭rN帮",
+ null,
+ [{
+ "Eᑞ)8<Z㡿W镀䛒C생V?0ꯦ+tL)`齳AjB姀XೳD빠㻲ƙgn9⑰ྍ῜&\"㚹>餧A5u&㗾q?": [
+ -1.969987519306507E-19,
+ null,
+ [
+ 3.42437673373841E-20,
+ true,
+ "e걷M墁\"割P␛퍧厀R䱜3ﻴO퓫r﹉⹊",
+ [
+ -8164221302779285367,
+ [
+ true,
+ null,
+ "爘y^-?蘞Ⲽꪓa␅ꍨ}I",
+ 1.4645984996724427E-19,
+ [{
+ "tY좗⧑mrzﺝ㿥ⴖ᥷j諅\u0000q賋譁Ꞅ⮱S\nࡣB/큃굪3Zɑ复o<\/;롋": null,
+ "彟h浠_|V4䦭Dᙣ♞u쿻=삮㍦\u001e哀鬌": [{"6횣楠,qʎꗇ鎆빙]㱭R굋鈌%栲j分僅ペ䇰w폦p蛃N溈ꡐꏀ?@(GI뉬$ﮄ9誁ꓚ2e甸ڋ[䁺,\u0011\u001cࢃ=\\+衪䷨ᯕ鬸K": [[
+ "ㅩ拏鈩勥\u000etgWVXs陂規p狵w퓼{뮵_i\u0002ퟑႢ⬐d6鋫F~챿搟\u0096䚼1ۼ칥0꣯儏=鋷牋ⅈꍞ龐",
+ -7283717290969427831,
+ true,
+ [
+ 4911644391234541055,
+ {
+ "I鈒첽P릜朸W徨觘-Hᎄ퐟⓺>8kr1{겵䍃〛ᬡ̨O귑o䝕'쿡鉕p5": "fv粖RN瞖蛐a?q꤄\u001d⸥}'ꣴ犿ꦼ?뤋?鵆쥴덋䡫s矷̄?ඣ/;괱絢oWfV<\/\u202cC,㖦0䑾%n賹g&T;|lj_欂N4w",
+ "짨䠗;䌕u i+r๏0": [{"9䥁\\఩8\"馇z䇔<\/ႡY3e狚쐡\"ุ6ﰆZ遖c\"Ll:ꮾ疣<\/᭙O◌납୕湞9⡳Und㫜\u0018^4pj1;䧐儂䗷ୗ>@e톬": {
+ "a⑂F鋻Q螰'<퇽Q贝瀧{ᘪ,cP&~䮃Z?gI彃": [
+ -1.69158726118025933E18,
+ [
+ "궂z簽㔛㮨瘥⤜䛖Gℤ逆Y⪾j08Sn昞ꘔ캻禀鴚P謦b{ꓮmN靐Mᥙ5\"睏2냑I\u0011.L&=?6ᄠ뻷X鸌t刑\"#z)o꫚n쳟줋",
+ null,
+ 7517598198523963704,
+ "ኑQp襟`uᩄr方]*F48ꔵn俺ሙ9뇒",
+ null,
+ null,
+ 6645782462773449868,
+ 1219168146640438184,
+ null,
+ {
+ ")ယ넌竀Sd䰾zq⫣⏌ʥ\u0010ΐ' |磪&p牢蔑mV蘸૰짬꺵;K": [
+ -7.539062290108008E-20,
+ [
+ true,
+ false,
+ null,
+ true,
+ 6574577753576444630,
+ [[
+ 1.2760162530699766E-19,
+ [
+ null,
+ [
+ "顊\\憎zXB,",
+ [{
+ "㇆{CVC9-MN㜋ઘR눽#{h@ퟨ!鼚׼XOvXS\u0017ᝣ=cS+梽៲綆16s덽휐y屬?ᇳG2ᴭ\u00054쫖y룇nKcW̭炦s/鰘ᬽ?J|퓀髣n勌\u0010홠P>j": false,
+ "箴": [
+ false,
+ "鍞j\"ꮾ*엇칬瘫xṬ⭽쩁䃳\"-⋵?ᦽ<cਔ↎⩧%鱩涎삧u9K⦈\"῝ᬑV绩킯愌ṱv@GꝾ跶Ꚇ(?䖃vI᧊xV\r哦j㠒?*=S굤紴ꊀ鹭쬈s<DrIu솹꧑?",
+ {
+ ".}S㸼L?t\u000fK⑤s~hU鱜꘦}쪍C滈4ꓗ蛌):ྦ\"顥이⢷ῳYLn\"?fꘌ>댎Ĝ": true,
+ "Pg帯佃籛n㔠⭹࠳뷏≻࿟3㞱!-쒾!}쭪䃕!籿n涻J5ਲ਼yvy;Rኂ%ᔡጀ裃;M⣼)쵂쑈": 1.80447711803435366E18,
+ "ꈑC⡂ᑆ㤉壂뎃Xub<\/쀆༈憓ق쨐ק\\": [
+ 7706977185172797197,
+ {"": {"K╥踮砆NWࡆFy韣7ä밥{|紒︧䃀榫rᩛꦡTSy잺iH8}ퟴ,M?Ʂ勺ᴹ@T@~꾂=I㙕뾰_涀쑜嫴曣8IY?ҿo줫fऒ}\\S\"ᦨ뵼#nDX": {
+ "♘k6?଱癫d68?㽚乳䬳-V顷\u0005蝕?\u0018䞊V{邾zじl]雏k臤~ൖH뒐iꢥ]g?.G碄懺䔛p<q꜉S岗_.%": 7688630934772863849,
+ "溗摽嗙O㧀,⡢⼰呠ꅧ㓲/葇䢛icc@-r\b渂ꌳ뻨饑觝ᖜ\\鮭\u0014엙㥀᧺@浹W2꛵{W률G溮킀轡䬆g㨑'Q聨៪网Hd\"Q늴ᱢﶨ邮昕纚枑?▰hr羌驀[痹<\/": [
+ -1.0189902027934687E-19,
+ {"窶椸릎뚻shE\"ꪗႥꎳU矖佟{SJ": [{"-慜x櫹XY-澐ܨ⣷ઢ鯙%Fu\u0000迋▒}᥷L嗭臖oញc넨\u0016/迎1b꯸g뢱㐧蓤䒏8C散삭|\"컪輩鹩\"\\g$zG䥽긷?狸꿭扵㲐:URON&oU8": [
+ null,
+ true,
+ null,
+ -2.8907335031148883E17,
+ -3864019407187144121,
+ {
+ "`빬d⵺4H뜳⧈쓑ohஸ*㶐ﻇ⸕䠵!i䝬﹑h夘▥ꗐ푹갇㵳TA鳠嚵\\B<X}3訒c⋝{*﫢w]璨-g捭\\j໵侠Ei层\u0011": 3.758356090089446E-19,
+ "䄘ﮐ)Y놞씃㾱陰큁:{\u2059/S⓴": [[
+ null,
+ [[
+ -3.8256602120220546E-20,
+ null,
+ 7202317607724472882,
+ "CWQ뚿",
+ null,
+ false,
+ true,
+ null,
+ 2857038485417498625,
+ 6.191302233218633E-20,
+ null,
+ -6795250594296208046,
+ [
+ true,
+ {
+ "%ዧ遰Yᚯ⚀x莰愒Vᔈ턗BN洝ꤟA1⍌l콹풪H;OX๫륞쪐ᰚц@͎黾a邬<L厒Xb龃7f웨窂二;": [[
+ null,
+ "耲?䙧㘓F6Xs틭멢.v뚌?鄟恠▽'묺競?WvᆾCtxo?dZ;䨸疎",
+ {
+ "@hWꉁ&\"빜4礚UO~C;う殩_ꀥ蘁奢^챟k→ᡱKMⵉ<\/Jㅲ붉L͟Q": false,
+ "tU뢂8龰I먽7,.Y搽Z툼=&⨥覽K乫햶㠸%#@Z끖愓^⍊⾂몒3E_噆J(廊ឭyd䞜鈬Ћ档'⣘I": {
+ "tK*ꔵ銂u艗ԃ쿏∳ꄂ霫X3♢9y?=ⲭdЊb&xy}": [
+ -4.097346784534325E-20,
+ null,
+ 6016848468610144624,
+ -8194387253692332861,
+ null,
+ {
+ "(祬诀譕쯠娣c봝r?畄kT뼾⌘⎨?noV䏘쥝硎n?": [
+ 1.82679422844617293E18,
+ [
+ false,
+ 2.6849944122427694E18,
+ true,
+ [
+ false,
+ {
+ ";0z⭆;화$bਔ瀓\"衱^?잢ᢛ⣿~`ꕉ薸⌳໿湘腌'&:ryБꋥၼ꒥筙꬜긨?X": -3536753685245791530,
+ "c;Y7釚Uꃣ割J༨Y戣w}c峰뢨㽑㫈0N>R$䅒X觨l봜A刊8R梒',}u邩퉕?;91Ea䈈믁G⊶芔h袪&廣㺄j;㡏綽\u001bN頸쳘橆": -2272208444812560733,
+ "拑Wﵚj鵼駳Oࣿ)#㾅顂N傓纝y僱栜'Bꐍ-!KF*ꭇK¦?䈴^:啤wG逭w᧯": "xᣱmYe1ۏ@霄F$ě꧘푫O䤕퀐Pq52憬ꀜ兴㑗ᡚ?L鷝ퟐ뭐zJꑙ}╆ᅨJB]\"袌㺲u8䯆f",
+ "꿽၅㔂긱Ǧ?SI": -1669030251960539193,
+ "쇝ɨ`!葎>瞺瘡驷錶❤ﻮ酜=": -6961311505642101651,
+ "?f7♄꫄Jᡔ훮e읇퍾፣䭴KhखT;Qty}O\\|뫁IῒNe(5惁ꥶㆷY9ﮡ\\ oy⭖-䆩婁m#x봉>Y鈕E疣s驇↙ᙰm<": {"퉻:dꂁ&efᅫ쫢[\"돈늖꺙|Ô剐1͖-K:ʚ᭕/;쏖㷛]I痐职4g<Oꗢ뫺N쯂륬J╆.`ᇵP轆&fd$?苅o궓vO侃沲⍩嚅沗 E%⿰얦wi\\*趫": [
+ 3504362220185634767,
+ false,
+ "qzX朝qT3軞T垈ꮲQ览ᚻ⻑쎎b驌䵆ꬠ5Fୗ䲁缿ꝁ蒇潇Ltᆄ钯蜀W欥ሺ",
+ "볰ɐ霬)젝鶼kwoc엷荁r \u001d쒷⎹8{%澡K늒?iﺩd=&皼倚J9s@3偛twὡgj䁠흪5⭉⨺役&놎cﺉ㺡N5",
+ false,
+ null,
+ "D0st[ni锹r*0k6ꀎ덇UX2⽼৞䃚粭#)Z桷36P]<\/`",
+ 4281410120849816730,
+ null,
+ -3256922126984394461,
+ 1.16174580369801549E18,
+ {
+ " ᆼꤗ~*TN긂<㡴턱℃酰^蘒涯잰淭傛2rൡet쾣䐇m*㸏y\"\\糮᧺qv쌜镜T@yg1譬ﭧﳭ\f": null,
+ "圾ᨿ0xᮛ禵ਗ਼D-㟻ẵ錚e\"赜.˶m)鴑B(I$<\/轴퉯揷⋏⏺*)宓쓌?*橯Lx\\f쩂㞼⇸\"ﺧ軂遳V\\땒\"캘c:G": null,
+ "?﵁_곢翸폈8㿠h열Q2㭛}RY㯕YT놂⽻e^B<\/맫ﻇ繱\u0017Gц⟊ᢑﵩS:jt櫣嗒⟰W㴚搦ᅉe[w䋺?藂翙Ⲱ芮䍘╢囥lpdu7r볺I 近qFyᗊ": [
+ "$b脬aᅠ襬育Bگ嵺Pw+'M<\/כֿn䚚v螁bN⒂}褺%lቦ阤\"ꓺᏗM牏,۞Ҷ!矬?ke9銊X괦)䈽틁脽ṫ䈞ᴆ^=Yᗿ遛4I귺⋥%",
+ false,
+ 2.9444482723232051E18,
+ 2072621064799640026,
+ "/_뇴뫢j㍒=Nꡦ↍Ժ赒❬톥䨞珯su*媸瀳鷔抡o흺-៳辏勷f绔:䵢搢2",
+ false,
+ "쒜 E䌐/큁\u0018懺_<\\隺&{wF⤊谼(<죽遠8?@*rᶊGd뻻갇&Ⳇq᣿e࢔t_ꩄ梸O詬C᧧Kꩠ풤9눙醅됞}竸rw?滨ӽK⥿ཊG魲']`๖5㄰",
+ -2375253967958699084,
+ {"嗱⿲\"f億ᝬ": {"v?䚑킡`◤k3,骥曘뒤Oᒱ㲹^圮᠀YT껛&촮P:G/T⣝#튣k3炩蠏k@橈䏷S䧕,熜晬k1鮥玸먚7䤡f绝嗚샴ᥒ~0q拮垑a뻱LⰖ_": [{
+ ":p尢": -6.688985172863383E17,
+ "A0\u0001疠ﻵ爻鼀湶I~W^岀mZx#㍈7r拣$Ꜷ疕≛⦒痋盩Vꬷ᭝ΩQꍪ療鈑A(劽詗ꭅo-獶鑺\"Ⓠ@$j탥;": [
+ 8565614620787930994,
+ [
+ "嶗PC?උQ㪣$&j幾㾷h慑 즊慧⪉霄M窊ꁷ'鮕)䊏铨m趦䗲(g罣ЮKVﯦ鏮5囗ﰼ鿦",
+ -7168038789747526632,
+ null,
+ -7.8069738975270288E16,
+ 2.25819579241348352E17,
+ -6.5597416611655936E18,
+ {
+ "瘕멦핓+?フZ귢z鍛V": {
+ "ᕾ": 1.7363275204701887E-19,
+ "㭌s뎹㳉": {"\u00187FI6Yf靺+UC쬸麁␲䂿긕R\\ᆮC?Φ耭\rOத际핅홦*베W㸫㯼᡹cㅜ|G㮗\u0013[o`?jHV앝?蒪꩚!퍫ᜦ㌇䚇鿘:@": [
+ "}푛Г콲<䟏C藐呈#2㓋#ྕ፟尿9q竓gI%랙mꍬoa睕贿J咿D_熏Zz皳験I豼B扳ḢQ≖㻹㱣D䝦練2'ᗍ㗣▌砲8罿%హF姦;0悇<\/\"p嚧",
+ -710184373154164247,
+ "Vo쫬⬾ꝫⴷŻ\u0004靎HBꅸ_aVBHbN>Z4⍜kเꛘZ⥺\\Bʫᇩ鄨魢弞&幟ᓮ2̊盜",
+ -9006004849098116748,
+ -3118404930403695681,
+ {
+ "_彃Y艘-\"Xx㤩㳷瑃?%2䐡鵛o<A?\"顜ᘌΈ;ⷅC洺L蚴蚀voq:,Oo4쪂)": 5719065258177391842,
+ "l륪맽耞塻論倐E㗑/㲕QM辬I\"qi酨玑㖪5q]尾魨鲡ƞY}⮯蠇%衟Fsf윔䐚찤i腳": {"ꢪ'a䣊糈": {"밑/♋S8s㼴5瓹O{댞\"9XﰇlJ近8}q{긧ⓈI᱑꿋腸D瀬H\"ﺬ'3?}\u0014#?丙㑯ᥨ圦',g鑠(樴턇?": [
+ 2.5879275511391145E18,
+ null,
+ [
+ "3㼮ꔌ1Gẃ2W龙j͊{1囐㦭9x宠㑝oR䐕犽",
+ 1268729930083267852,
+ "땕軚⿦7C",
+ [
+ -3.757935946502082E18,
+ "\"赌'糬_2뭾᝝b",
+ {
+ "(a䕎ጽjҰD4.ᴡ66ԃ畮<\/l`k癸\\㇋ࣆ욯R㫜픉녬挛;ڴ맺`.;焓q淞뮕ٹ趴r蔞ꯔ䟩v粏u5<\/pZ埖Skrvj帛=\u0005aa": null,
+ "璄≩ v몛ᘮ%?:1頌챀H㷪뉮k滘e": [
+ "ꤾ{`c샬왌펡[俊络vmz㪀悫⸹ᷥ5o'㾵 L蹦qjYIYណԠW냁剫<\/W嗂0,}",
+ 2.4817616702666762E18,
+ false,
+ null,
+ null,
+ -8.6036958071260979E17,
+ null,
+ -1.2744078022652468E-19,
+ -4.4752020268429594E17,
+ 1.13672865156637872E17,
+ [
+ false,
+ false,
+ null,
+ -4.178004168554046E-20,
+ true,
+ 2927542512798605527,
+ {
+ ".ꔓ뉤1䵬cHy汼䊆賓ᐇƩ|樷❇醎㬅4\u0003赵}#yD5膏晹뱓9ꖁ虛J㺕 t䊛膎ؤ": {
+ "rVtᓸ5^`েN⹻Yv᥋lꌫt拘?<鮰넿ZC?㒽^": {"␪k_:>귵옔夘v*탋职&㳈챗|O钧": [
+ false,
+ "daꧺdᗹ羞쯧H㍤鄳頳<型孒ン냆㹀f4㹰\u000f|C*ሟ鰠(O<ꨭ峹ipຠ*y೧4VQ蔔hV淬{?ᵌEfrI_",
+ "j;ꗣ밷邍副]ᗓ",
+ -4299029053086432759,
+ -5610837526958786727,
+ [
+ null,
+ [
+ -1.3958390678662759E-19,
+ {
+ "lh좈T_믝Y\"伨\u001cꔌG爔겕ꫳ晚踍⿻읐T䯎]~e#฽燇\"5hٔ嶰`泯r;ᗜ쮪Q):/t筑,榄&5懶뎫狝(": [{
+ "2ፁⓛ]r3C攟וּ9賵s⛔6'ஂ|\"ⵈ鶆䐹禝3\"痰ࢤ霏䵩옆䌀?栕r7O簂Isd?K᫜`^讶}z8?z얰T:X倫⨎ꑹ": -6731128077618251511,
+ "|︦僰~m漿햭\\Y1'Vvخ굇ቍ챢c趖": [null]
+ }],
+ "虌魿閆5⛔煊뎰㞤ᗴꥰF䮥蘦䂪樳-K᝷-(^\u20dd_": 2.11318679791770592E17
+ }
+ ]
+ ]
+ ]},
+ "묗E䀳㧯᳀逞GMc\b墹㓄끖Ơ&U??펌鑍 媋k))ᄊ": null,
+ "묥7콽벼諌J_DɯﮪM殴䣏,煚ྼ`Y:씧<\/⩫%yf䦀!1Ჶk춎Q米W∠WC跉鬽*ᛱi<?,l<崣炂骵*?8푐៣ⰵ憉⎑.,Nw罣q+ο컆弎": false
+ },
+ "e[|଀+lꑸ㝈TT?뿿|ꫛ9`㱯䊸楋-곳賨?쳁k棽擋wQ餈⟐Nq[q霩䵀뷮锅ꚢ": 5753148631596678144,
+ "sᓝ鴻߸d렶ὕ蜗ဟ툑!诉౿": false,
+ "|4䕳鵻?䈔(]틍/Ui#湻{듲ーMዀt7潔泄Ch⸨}쏣`螧銚㋼壯kⰥQ戵峉갑x辙'첛": "jd䘯$䕌茷!auw眶ㅥ䁣ꆢ民i",
+ "剖駰ꞫsM2]ᾴ2ࡷ祅拌Av狔꩛'ꓗ킧ꣁ0酜✘O'": false,
+ "澩뢣ꀁeU~D\\ꮡ킠": "v^YC嚈ί\u0007죋h>㴕L꘻ꀏ쓪\"_g鿄'#t⽙?,Wg㥖|D鑆e⥏쪸僬h鯔咼ඡ;4TK聎졠嫞"
+ }
+ ]
+ ]
+ }
+ ]
+ ]
+ ]}}
+ }
+ ]}
+ },
+ "뿋뀾淣截䔲踀&XJ펖꙯^Xb訅ꫥgᬐ>棟S\"혧騾밫겁7-": "擹8C憎W\"쵮yR뢩浗絆䠣簿9䏈引Wcy䤶孖ꯥ;퐌]輩䍐3@{叝 뽸0ᡈ쵡Ⲇ\u001dL匁꧐2F~ݕ㪂@W^靽L襒ᦘ~沦zZ棸!꒲栬R"
+ }
+ ]
+ ],
+ "Z:덃൛5Iz찇䅄駠㭧蓡K1": "e8᧤좱U%?ⵇ䯿鿝\u0013縮R∱骒EO\u000fg?幤@֗퉙vU`",
+ "䐃쪈埽້=Ij,쭗쓇చ": false
+ }]}}
+ ]
+ }
+ ]}
+ }
+ ]
+ ]
+ ],
+ "咰긖VM]᝼6䓑쇎琺etDҌ?㞏ꩄ퇫밉gj8蠃\"⩐5䛹1ࣚ㵪": "ക蹊?⎲⧘⾚̀I#\"䈈⦞돷`wo窭戕෱휾䃼)앷嵃꾞稧,Ⴆ윧9S?೗EMk3Მ3+e{⹔Te驨7䵒?타Ulg悳o43"
+ }
+ ],
+ "zQᤚ纂땺6#ٽ﹧v￿#ࠫ휊冟蹧텈ꃊʆ?&a䥯De潝|쿓pt瓞㭻啹^盚2Ꝋf醪,얏T窧\\Di䕎谄nn父ꋊE": -2914269627845628872,
+ "䉩跐|㨻ᷢ㝉B{蓧瞸`I!℄욃힕#ೲᙾ竛ᔺCjk췒늕貭词\u0017署?W딚%(pꍁ⤼띳^=on뺲l䆼bzrﳨ[&j狸䠠=ᜑꦦ\u2061յnj=牲攑)M\\龏": false,
+ "뎕y絬᫡⥮Ϙᯑ㌔/NF*˓.,QEzvK!Iwz?|쥾\"ꩻL꼗Bꔧ賴緜s뉣隤茛>ロ?(?^`>冺飒=噸泥⺭Ᲊ婓鎔븜z^坷裮êⓅ໗jM7ﶕ找\\O": 1.376745434746303E-19
+ },
+ "䐛r滖w㏤<k;l8ꡔጵ⮂ny辶⋃퍼僮z\"﮲X@t5෼暧퓞猋♅䦖QC鹮|픨( ,>,|Nዜ": false
+ }
+ ]],
+ "@꿙?薕尬 gd晆(띄5躕ﻫS蔺4)떒錸瓍?~": 1665108992286702624,
+ "w믍nᏠ=`঺ᅥC>'從됐槷䤝眷螄㎻揰扰XᅧC贽uჍ낟jKD03T!lDV쀉Ӊy뢖,袛!终캨G?鉮Q)⑗1쾅庅O4ꁉH7?d\u0010蠈줘월ސ粯Q!낇껉6텝|{": null,
+ "~˷jg쿤촖쉯y": -5.5527605669177098E18,
+ "펅Wᶺzꐆと푭e?4j仪열[D<鈑皶婆䵽ehS?袪;HꍨM뗎ば[(嗏M3q퍟g4y╸鰧茀[Bi盤~﫝唎鋆彺⦊q?B4쉓癚O洙킋툈䶯_?ퟲ": null
+ }
+ ]
+ ]]
+ ]],
+ "꟱Ԕ㍤7曁聯ಃ錐V䷰?v㪃૦~K\"$%请|ꇹn\"k䫛㏨鲨\u2023䄢\u0004[<S8ᐬ뭩脥7U.m࿹:D葍┆2蘸^U'w1젅;䠆ꋪB껮>︊VJ?䶟ាꮈ䗱=깘U빩": -4863152493797013264
+ }
+ ]}]}
+ ]
+ }}}
+ ],
+ "쏷쐲۹퉃~aE唙a챑,9㮹gLHd'䔏|킗㍞䎥&KZYT맵7䥺N<Hp4ꕭ⹠꽐c~皽z": "课|ᖾ䡁廋萄䐪W\u0016&Jn괝b~摓M>ⱳ同莞鿧w\\༌疣n/+ꎥU\"封랾○ퟙAJᭌ?9䛝$?驔9讐짘魡T֯c藳`虉C읇쐦T"
+ }
+ ],
+ "谶개gTR￐>ၵ͚dt晑䉇陏滺}9㉸P漄": -3350307268584339381
+ }]
+ ]
+ ]
+ ]]
+ ]
+ ],
+ "0y꟭馋X뱔瑇:䌚￐廿jg-懲鸭䷭垤㒬茭u賚찶ಽ+\\mT땱\u20821殑㐄J쩩䭛ꬿNS潔*d\\X,壠뒦e殟%LxG9:摸": 3737064585881894882,
+ "풵O^-⧧ⅶvѪ8廸鉵㈉ר↝Q㿴뺟EႳvNM:磇>w/៻唎뷭୥!냹D䯙i뵱貁C#⼉NH6`柴ʗ#\\!2䂗Ⱨf?諳.P덈-返I꘶6?8ꐘ": -8934657287877777844,
+ "溎-蘍寃i诖ര\"汵\"\ftl,?d⼡쾪⺋h匱[,෩I8MҧF{k瓿PA'橸ꩯ綷퉲翓": null
+ }
+ ]
+ ],
+ "ោ係؁<元": 1.7926963090826924E-18
+ }}]
+ }
+ ]
+ ]]}]
+ }]
+ ]
+ ]
+ ]
+ ],
+ "ጩV<\"ڸsOᤘ": 2.0527167903723048E-19
+ }]
+ ]}
+ ]
+ ]],
+ "∳㙰3젴p᧗䱙?`<U὇<\/意E[ᮚAj诂ᒽ阚uv徢ဎ떗尔Ᵹ훀쩑J䐴?⪏=륪ᆩ푰ஓ㐕?럽VK\"X?檨လ齿I/耉A(AWA~⏯稐蹫": false,
+ "偒妝뾇}䀼链i⇃%⋜&璪Ix渥5涧qq棩ᥝ-⠫AA낇yY颕A*裦O|n?䭬혗F": null,
+ "琭CL얭B혆Kॎ`鎃nrsZiժW砏)?p~K~A眱䲏QO妣\u001b\u001b]ᵆᆯ&㐋ᏹ豉뺘$ꭧ#j=C)祤⫢歑1o㒙諩": 7028426989382601021,
+ "쳱冲&ဤ䌏앧h胺-齱H忱8왪RDKᅒ䬋ᔶS*J}ስ漵'㼹뮠9걢9p봋경ጕtởꚳT䶽瘙%춴`@nಆ4<d??#僜ᙤ钴=薔ꭂbLXNam蹈": "樭る蹿= Uurwkn뙧⌲%\"쑃牪\"cq윕o@",
+ "溌[H]焎SLㅁ?뀼䫨災W": 1.1714289118497062E-19,
+ "ﬢp븇剌燇kĔ尘㶿㴞睠꾘Ia;s❺^)$穮?sHᢥ폪l": null
+ }
+ ]
+ }
+ ]
+ },
+ "TKnzj5o<\/K㊗ꗣ藠⦪駇>yZA8Ez0,^ᙛ4_0븢\u001ft:~䎼s.bb룦明yNP8弆C偯;⪾짍'蕴뮛": -6976654157771105701,
+ "큵ꦀ\\㇑:nv+뒤燻䀪ﴣ﷍9ᚈ኷K㚊誦撪䚛,ꮪxሲ쳊\u0005HSf?asg昱dqꬌVꙇ㼺'k*'㈈": -5.937042203633044E-20
+ }
+ ]
+ }],
+ "?}\u20e0],s嶳菋@#2u쒴sQS䩗=ꥮ;烌,|ꘔ䘆": "ᅩ영N璠kZ먕眻?2ቲ芋眑D륟渂⸑ﴃIRE]啗`K'"
+ }},
+ "쨀jmV賂ﰊ姐䂦玞㬙ᏪM᪟Վ씜~`uOn*ॠ8\u000ef6??\\@/?9見d筜ﳋB|S䝬葫㽁o": true
+ },
+ "즛ꄤ酳艚␂㺘봿㎨iG৕ࡿ?1\"䘓您\u001fSኝ⺿溏zៀ뻤B\u0019?윐a䳵᭱䉺膷d:<\/": 3935553551038864272
+ }
+ ]
+ ]}
+ ]]
+ ]]
+ ]}
+ }
+ ]
+ }
+ ]]}},
+ "᥺3h↛!ꋰy\"攜(ெl䪕oUkc1A㘞ᡲ촾ᣫ<\/䒌E㛝潨i{v?W౾H\\RჅpz蝬R脾;v:碽✘↯삞鷱o㸧瑠jcmK7㶧뾥찲n": true,
+ "ⶸ?x䊺⬝-䰅≁!e쩆2ꎿ准G踌XXᩯ1߁}0?.헀Z馟;稄\baDꟹ{-寪⚈ꉷ鮸_L7ƽᾚ<\u001bጨA䧆송뇵⨔\\礍뗔d设룱㶉cq{HyぱR㥽吢ſtp": -7985372423148569301,
+ "緫#콮IB6<\/=5Eh礹\t8럭@饹韠r㰛斣$甝LV췐a갵'请o0g:^": "䔨(.",
+ "띳℡圤pン௄ĝ倧訜B쁟G䙔\"Sb⓮;$$▏S1J뢙SF|赡g*\"Vu䲌y": "䪈&틐),\\kT鬜1풥;뷴'Zေ䩹@J鞽NぼM?坥eWb6榀ƩZڮ淽⺞삳煳xჿ絯8eⶍ羷V}ჿ쎱䄫R뱃9Z>'\u20f1ⓕ䏜齮"
+ }
+ ]
+ ]]]
+ }}
+ }
+ ]
+ ]},
+ "펮b.h粔폯2npX詫g錰鷇㇒<쐙S値bBi@?镬矉`剔}c2壧ଭfhY깨R()痩⺃a\\⍔?M&ﯟ<劜꺄멊ᄟA\"_=": null
+ },
+ "~潹Rqn榢㆓aR鬨侅?䜑亡V_翅㭔(䓷w劸ၳDp䀅<\/ﰎ鶊m䵱팱긽ꆘ<tD쇋>긓准D3掱;o:_ќ)껚콥8곤d矦8nP倥ꃸI": null,
+ "뾎/Q㣩㫸벯➡㠦◕挮a鶧⋓偼\u00001뱓fm覞n?㛅\"": 2.8515592202045408E17
+ }],
+ ",": -5426918750465854828,
+ "2櫫@0柡g䢻/gꆑ6演&D稒肩Y?艘/놘p{f투`飷ᒉ챻돎<늛䘍ﴡ줰쫄": false,
+ "8(鸑嵀⵹ퟡ<9㣎Tߗ┘d슒ل蘯&㠦뮮eࠍk砝g 엻": false,
+ "d-\u208b?0ﳮ嵙'(J`蔿d^踅⤔榥\\J⵲v7": 6.8002426206715341E17,
+ "ཎ耰큓ꐕ㱷\u0013y=詽I\"盈xm{0쾽倻䉚ષso#鰑/8㸴짯%ꀄ떸b츟*\\鲷礬ZQ兩?np㋄椂榨kc᡹醅3": false,
+ "싊j20": false
+ }]]
+ ]],
+ "俛\u0017n緽Tu뫉蜍鼟烬.ꭠIⰓ\"Ἀ᜾uC쎆J@古%ꛍm뻨ᾀ画蛐휃T:錖㑸ዚ9죡$": true
+ }
+ ]
+ ],
+ "㍵⇘ꦖ辈s}㱮慀밒s`\"㞟j:`i픻Z<C1衽$\"-饧?℃\u0010⼒{p飗%R\"䲔\")칀\\%": true,
+ "苧.8\u00120ݬ仓": 6912164821255417986,
+ "떎顣俁X;.#Q틝.笂'p쟨唒퐏랩냆¦aⱍ{谐.b我$蜑SH\u000f琾=䟼⣼奔ᜏ攕B&挰繗㝔ꅂ-Qv\\0䶝䚥ぺio[㑮-ᇼ䬰컪ṼiY){데\u0010q螰掻~\n輚x\u0014罺)軴": 3.024364150712629E-20
+ }
+ ]
+ ]
+ ]
+ ]}
+ ]]
+ }
+ ]
+ ]]
+ ]
+ ]]]],
+ "\"凲o肉Iz絾豉J8?i~傠᫽䇂!WD溊J?ᡒvs菆嵹➒淴>섫^諎0Ok{켿歁෣胰a2﨤[탳뚬쎼嫭뉮m": 409440660915023105,
+ "w墄#*ᢄ峠밮jLa`ㆪ꺊漓Lで끎!Agk'ꁛ뢃㯐岬D#㒦": false,
+ "ଦPGI䕺L몥罭ꃑ궩﮶#⮈ᢓӢ䚬p7웼臧%~S菠␌힀6&t䳙y㪘냏\\*;鉏ᅧ鿵'嗕pa\"oL쇿꬈Cg": "㶽1灸D⟸䴅ᆤ뉎﷛渤csx 䝔цꬃ锚捬?ຽ+x~꘩uI࡞\u0007栲5呚ẓem?袝\")=㥴䨃pac!/揎Y",
+ "ᷱo\\||뎂몷r篙|#X䦜I#딌媸픕叞RD斳X4t⯩夬=[뭲r=绥jh뷱츝⪘%]⚋܈㖴スH텹m(WO曝劉0~K3c柢Ր㏉着逳~": false,
+ "煽_qb[첑\\륌wE❽ZtCNﭝ+餌ᕜOꛭ": "{ﳾ쉌&s惧ᭁⵆ3䢫;䨞팑꒪흘褀࢖Q䠿V5뭀䎂澻%받u5텸oA⮥U㎦;B䳌wz䕙$ឿ\\௅婺돵⪾퐆\\`Kyौꋟ._\u0006L챯l뇠Hi䧈偒5",
+ "艊佁ࣃ롇䱠爬!*;⨣捎慓q靓|儑ᨋL+迥=6㒺딉6弄3辅J-㕎뛄듘SG㆛(\noAzQꝱ䰩X*ぢO퀌%펠낌mo틮a^<\/F&_눊ᾉ㨦ы4\"8H": 2974648459619059400,
+ "鬙@뎣䫳ၮ끡?){y?5K;TA*k溱䫜J汃ꂯ싔썍\u001dA}룖(<\/^,": false,
+ "몏@QꋦFꊩᒐ뎶lXl垨4^郣|ꮇ;䝴ᝓ}쵲z珖": null
+ }
+ ]]]],
+ ":_=닧弗D䙋暨鏛. 㱻붘䂍J儒&ZK/녩䪜r囁⽯D喠죥7⹌䪥c\u001a\u2076￞妈朹oLk菮F౟覛쐧㮏7T;}蛙2{9\"崓bB<\/⡷룀;즮鿹)丒툃୤뷠5W⊢嶜(fb뭳갣": "E{响1WM"
+ }},
+ "䘨tjJ驳豨?y輊M*᳑梵瞻઻ofQG瑮e": 2.222802939724948E-19,
+ "䮴=❑➶T෋w䞜\"垦ꃼUt\u001dx;B$뵣䙶E↌艣ᡥ!᧟;䱀[䔯k쬃`੍8饙른熏'2_'袻tGf蒭J땟as꯳╖&啒zWࡇᒫYSᏬ\u0014ℑ첥鈤|cG~Pᓮ\">\"": "ႆl\f7V儊㦬nHꄬꨧC{쐢~C⮃⛓嶦vꄎ1w鰠嘩뿠魄&\"_qMⵖ釔녮ꝇ 㝚{糍J哋 cv?-jkﻯྌ鹑L舟r",
+ "龧葆yB✱H盋夔ﶉ?n*0(": "ꧣኆ㢓氥qZZ酒ຜ)鮢樛)X䣆gTSґG텞k.J圬疝롫쯭z L:\\ྤ@w炋塜쿖ᾳy뢀䶃뱝N䥨㚔勇겁#p",
+ "도畎Q娡\"@S/뼋:䵏!P衅촚fVHQs✜ᐫi㻑殡B䜇%믚k*U#濨낄~": "ꍟዕ쳸ꍈ敋&l妏\u0005憡멗瘌uPgᅪm<\/To쯬锩h뒓k"
+ }
+ ]
+ }],
+ "墥홞r绚<\/⸹ⰃB}<躅\\Y;๑@䔸>韫䜲뱀X뗩鿥쩗SI%ﴞ㳕䛇?<\/\u00018x\\&侂9鋙a[LR㋭W胕)⡿8㞙0JF,}?허d1cDMᐃ␛鄝ⱕ%X)!XQ": "ⳍꗳ=橇a;3t⦾꼑仈ူaᚯ⯋ꕃAs鴷N⍕_䎃ꙎAz\u0016䯷\\<࿫>8q{}キ?ᣰ}'0ᴕ펓B┦lF#趤厃T?㕊#撹圂䆲"
+ },
+ "܋닐龫論c웑": false,
+ "ㇿ/q\"6-co髨휝C큦#\u001b4~?3䐹E삇<<": 7.600917488140322E-20,
+ "䁝E6?㣖ꃁ间t祗*鑠{ḣV(浾h逇큞=W?ૉ?nꇽ8ꅉຉj으쮺@Ꚅ㰤u]Oyr": "v≁᫸_*όAඤԆl)ۓᦇQ}폠z༏q滚",
+ "ソ᥊/넺I": true
+ }]]
+ ]
+ ]
+ ]
+ ]]
+ },
+ "䭑Ik攑\u0002QV烄:芩.麑㟴㘨≕": true,
+ "坄꿕C쇻풉~崍%碼\\8\"䬦꣙": null,
+ "欌L圬䅘Y8c(♺2?ON}o椳s宥2䉀eJ%闹r冁O^K諭%凞⺉⡻,掜?$ꥉ?略焕찳㯊艼誜4?\"﯎<゛XፈINT:詓 +": -1.0750456770694562E-19,
+ "獒àc뜭싼ﺳ뎤K`]p隨LtE": null,
+ "甙8䵊神EIꩤ鐯ᢀ,ﵮU䝑u疒ử驺䚿≚ഋ梶秓F`覤譐#짾蔀묊4<媍쬦靪_Yzgcࡶ4k紥`kc[Lﮗ簐*I瀑[⾰L殽鑥_mGȠ<\/|囹灠g桰iri": true,
+ "챓ꖙꟻ좝菇ou,嗠0\\jK핻뜠qwQ?ഩ㼕3Y彦b\u009bJ榶N棨f?됦鏖綃6鳵M[OE봨u햏.Ꮁ癜蟳뽲ꩌ뻾rM豈R嗀羫 uDꎚ%": null
+ },
+ "V傜2<": 7175127699521359521
+ }],
+ "铫aG切<\/\"ী⊆e<^g࢛)D顝nאַ饼\u008c猪繩嵿ﱚCꡬ㻊g엺A엦\u000f暿_f꿤볝㦕桦`蒦䎔j甬%岝rj 糏": "䚢偎눴Au<4箞7礦Iﱔ坠eȧ䪸u䵁p|逹$嗫쨘ꖾ﷐!胠z寓팢^㨔|u8Nሇe텔ꅦ抷]،鹎㳁#༔繁 ",
+ "낂乕ꃻ볨ϱ-ꇋ㖍fs⿫)zꜦ/K?솞♞ꑌ宭hJ᤭瑥Fu": false,
+ "쟰ぜ魛G\u0003u?`㾕ℾ㣭5螠烶這趩ꖢ:@咕ꐶx뒘느m䰨b痃렐0鳊喵熬딃$摉_~7*ⱦ녯1錾GKhJ惎秴6'H妈Tᧅ窹㺒疄矤铟wላ": null,
+ "쯆q4!3錕㲏ⵆ㇛꘷Z瑩뭆\\◪NH\u001d\\㽰U~㯶<\"쑣낞3ᵤ'峉eꢬ;鬹o꣒木X*長PXᘱu\"䠹n惞": null,
+ "ᅸ祊\"&ꥴCjࢼ﴿?䡉`U效5殼㮞V昽ꏪ#ﺸ\\&t6x꠹盥꣰a[\u001aꪍSpe鎿蠹": -1.1564713893659811E-19
+ }
+ ]]
+ ]
+ ]
+ ],
+ "羵䥳H,6ⱎ겾|@t\"#햊1|稃 섭)띜=뻔ꡜ???櫎~*ῡ꫌/繣ﻠq": null
+ }
+ ]}
+ ]},
+ "츤": false
+ }},
+ "s": 3.7339341963399598E18
+ }
+ ],
+ "N,I?1+㢓|ࣱ嶃쩥V2\u0012(4EE虪朶$|w颇v步": "~읢~_,Mzr㐫YB溓E淚\"ⅹ䈔ᏺ抙 b,nt5V㐒J檶ꏨ⻔?",
+ "Q껑ꡡ}$넎qH煔惍/ez^!ẳF댙䝌馻剁8": "梲;yt钰$i冄}AL%a j뜐奷걳뚾d꿽*ሬuDY3?뮟鼯뮟w㍪틱V",
+ "o{Q/K O胟㍏zUdꀐm&⨺J舕⾏魸訟㌥[T籨櫉唐킝 aṭ뱫촙莛>碶覆⧬짙쭰ׯdAiH໥벤퐥_恸[ 0e:죃TC弼荎뵁DA:w唵ꣁ": null,
+ "὏樎䵮軧|?౗aWH쩃1 ꅭsu": null
+ }
+ ]
+ },
+ "勂\\&m鰈J釮=Ⲽ鳋+䂡郑": null,
+ "殣b綊倶5㥗惢⳷萢ᑀ䬄镧M^ﱴ3⣢翣n櫻1㨵}ኯ뗙顖Z.Q➷ꮨ뗇\u0004": "ꔙ䁼>n^[GीA䨟AM琢ᒊS쨲w?d㶣젊嘶纝麓+愣a%気ྞSc됓ᔘ:8bM7Xd8㶑臌]Ꙥ0ꐭ쒙䫣挵C薽Dfⵃ떼᷸",
+ "?紡.셪_෨j\u0013Ox┠$Xᶨ-ᅇo薹-}軫;y毝㪜K㣁?.EV쮱4둽⛻䤜'2盡\u001f60(|e쐰㼎ᦀ㒧-$l@ﻑ坳\u0003䭱响巗WFo5c㧆T턁Y맸♤(": -2.50917882560589088E17
+ }}
+ ],
+ "侸\\릩.᳠뎠狣살cs项䭩畳H1s瀉븇19?.w骴崖㤊h痠볭㞳㞳䁮Ql怠㦵": "@䟴-=7f",
+ "鹟1x௢+d ;vi䭴FSDS\u0004hꎹ㚍?⒍⦏ў6u,扩@됷Su)Pag휛TᒗV痩!瞏釀ꖞ蘥&ೞ蘐ꭰꞇᝎ": "ah懱Ժ&\u20f7䵅♎඀䞧鿪굛ౕ湚粎蚵ᯋ幌YOE)५襦㊝Y*^\"R+ඈ咷蝶9ꥂ榨艦멎헦閝돶v좛咊E)K㓷ྭr",
+ "搆q쮦4綱켙셁.f4<\/g<籽늷?#蚴픘:fF\u00051㹉뀭.ᰖ풎f֦Hv蔎㧤.!䭽=鞽]음H:?\"-4": 8.740133984938656E-20
+ }]}
+ }
+ ],
+ "tVKn딩꘥⊾蹓᤹{\u0003lR꼽ᄲQFᅏ傅ﱋ猢⤊ᔁ,E㓒秤nTතv`♛I\u0000]꫔ṞD\"麵c踝杰X&濿또꣹깳౥葂鿎\\aꡨ?": 3900062609292104525
+ }
+ ],
+ "ਉ샒⊩Lu@S䧰^g": -1.1487677090371648E18,
+ "⎢k⑊꬗yᏫ7^err糎Dt\u000bJ礯확ㆍ沑サꋽe赔㝢^J\u0004笲㿋idra剰-᪉C錇/Ĝ䂾ညS지?~콮gR敉⬹'䧭": 1901472137232418266,
+ "灗k䶥:?촽贍쓉꓈㒸g獘[뵎\\胕?\u0014_榙p.j稶,$`糉妋0>Fᡰly㘽$?": "]ꙛO赎&#㠃돱剳\"<◆>0誉齐_|z|裵씪>ᐌ㼍\"Z[琕}O?G뚇諦cs⠜撺5cu痑U圲\u001c?鴴計l춥/╓哼䄗茏ꮅ뫈댽A돌롖뤫V窗讬sHd&\nOi;_u"
+ }
+ ],
+ "Uﺗ\\Y\\梷䄬~\u0002": null,
+ "k\"Y磓ᗔ휎@U冈<\/w컑)[": false,
+ "曏J蝷⌻덦\u001f㙳s꥓⍟邫P늮쥄c∬ྡྷ舆렮칤Z趣5콡넛A쳨\\뀙骫(棻.*&輛LiIfi{@EA婳KᬰTXT": -4.3088230431977587E17
+ }]}
+ ]
+ ],
+ "곃㲧<\/dఓꂟs其ࡧ&N葶=?c㠤Ჴ'횠숄臼#\u001a~": false
+ }
+ ]
+ ]}]
+ }]
+ }}
+ ],
+ "2f`⽰E쵟>J笂裭!〛觬囀ۺ쟰#桊l鹛ⲋ|RA_Vx፭gE됓h﵀mfỐ|?juTU档[d⢼⺻p濚7E峿": 5613688852456817133
+ },
+ "濘끶g忮7㏵殬W팕Q曁 뫰)惃廊5%-蹚zYZ樭ﴷQ锘쯤崫gg": true,
+ "絥ᇑ⦏쒓븣爚H.㗊߄o蘵貆ꂚ(쎔O᥉ﮓ]姨Wꁓ!RMA|o퉢THx轮7M껁U즨'i뾘舯o": "跥f꜃?"
+ }}
+ ],
+ "鷰鹮K-9k;ﰰ?_ݦѷ-ꅣ䩨Zꥱ\"mꠟ屎/콑Y╘2&鸞脇㏢ꀇ࠺ⰼ拾喭틮L꽩bt俸墶 [l/웄\"꾦\u20d3iও-&+\u000fQ+໱뵞": -1.296494662286671E-19
+ },
+ "HX੹/⨇୕붷Uﮘ旧\\쾜͔3l鄈磣糂̖䟎Eᐳw橖b῀_딕hu葰窳闹вU颵|染H죶.fP䗮:j䫢\\b뎖i燕ꜚG⮠W-≚뉗l趕": "ଊ칭Oa᡺$IV㷧L\u0019脴셀붿餲햪$迳向쐯켂PqfT\" ?I屉鴼쿕@硙z^鏕㊵M}㚛T젣쓌-W⩐-g%⺵<뮱~빅╴瑿浂脬\u0005왦燲4Ⴭb|D堧 <\/oEQh",
+ "䘶#㥘੐캔f巋ἡAJ䢚쭈ࣨ뫒*mᇊK,ࣺAꑱ\u000bR<\/A\"1a6鵌㯀bh곿w(\"$ꘁ*rಐ趣.d࿩k/抶면䒎9W⊃9": "漩b挋Sw藎\u0000",
+ "畀e㨼mK꙼HglKb,\"'䤜": null
+ }]}]
+ ]
+ ]
+ }]
+ ]}
+ ]
+ ]}
+ ],
+ "歙>駿ꣂ숰Q`J΋方樛(d鱾뼣(뫖턭\u20f9lচ9歌8o]8윶l얶?镖G摄탗6폋폵+g:䱫홊<멀뀿/س|ꭺs걐跶稚W々c㫣⎖": "㣮蔊깚Cꓔ舊|XRf遻㆚︆'쾉췝\\&言",
+ "殭\"cށɨꝙ䞘:嬮e潽Y펪㳅/\"O@ࠗ겴]췖YǞ(t>R\"N?梳LD恭=n氯T豰2R諸#N}*灧4}㶊G䍣b얚": null,
+ "襞<\/啧 B|싞W瓇)6簭鼡艆lN쩝`|펭佡\\間邝[z릶&쭟愱ꅅ\\T᰽1鯯偐栈4̸s윜R7⒝/똽?치X": "⏊躖Cﱰ2Qẫ脐&இ?%냝悊",
+ ",鰧偵셣싹xᎹ힨᯳EṬH㹖9": -4604276727380542356
+ }
+ }
+ ]]]],
+ "웺㚑xs}q䭵䪠馯8?LB犯zK'os䚛HZ\"L?셎s^㿧㴘Cv2": null
+ }]
+ ]
+ ]
+ ],
+ "Kd2Kv+|z": 7367845130646124107,
+ "ᦂⶨ?ᝢ 祂些ഷ牢㋇操\"腭䙾㖪\\(y4cE뽺ㆷ쫺ᔖ%zfۻ$ў1柦,㶢9r漢": -3.133230960444846E-20,
+ "琘M焀q%㢟f鸯O⣏蓑맕鯊$O噷|)z褫^㢦⠮ꚯ꫞`毕1qꢚ{ĭ䎀বώT\"뱘3G൴?^^of": null
+ }
+ ],
+ "a8V᯺?:ﺃ/8ꉿBq|9啓댚;*i2": null,
+ "cpT瀇H珰Ừpೃi鎪Rr␣숬-鹸ҩ䠚z脚цGoN8入y%趌I┽2ឪЀiJNcN)槣/▟6S숆牟\"箑X僛G殱娇葱T%杻:J諹昰qV쨰": 8331037591040855245
+ }],
+ "G5ᩜ䄗巢껳": true
+ }
+ },
+ "Ồ巢ゕ@_譙A`碫鄐㡥砄㠓(^K": "?܃B혢▦@犑ὺD~T⧁|醁;o=J牌9냚⢽㨘{4觍蚔9#$∺\u0016p囅\\3Xk阖⪚\"UzA穕롬✎➁㭒춺C㣌ဉ\"2瓑员ᅽꝶ뫍}꽚ꞇ鶂舟彺]ꍽJC蝧銉",
+ "␆Ě膝\"b-퉐ACR言J謈53~V튥x䜢?ꃽɄY뮩ꚜ": "K/↾e萃}]Bs⾿q룅鷦-膋?m+死^魊镲6",
+ "粡霦c枋AHퟁo礼Ke?qWcA趸㡔ꂏ?\u000e춂8iতᦜ婪\u0015㢼nﵿꍻ!ᐴ関\u001d5j㨻gfῩUK5Ju丝tかTI'?㓏t>⼟o a>i}ᰗ;뤕ܝ": false,
+ "ꄮ匴껢ꂰ涽+䜨B蛹H䛓-k蕞fu7kL谖,'涃V~챳逋穞cT\"vQ쓕ObaCRQ㓡Ⲯ?轭⫦輢墳?vA餽=h䮇킵n폲퉅喙?\"'1疬V嬗Qd灗'Lự": "6v!s믁㭟㣯獃!磸餠ቂh0C뿯봗F鷭gꖶ~コkK<ᦈTt\\跓w㭣횋钘ᆹ듡䑚W䟾X'ꅔ4FL勉Vܴ邨y)2'〚쭉⽵-鞣E,Q.?块",
+ "?(˧쩯@崟吋歄K": null
+ },
+ "Gc럃녧>?2DYI鴿\\륨)澔0ᔬlx'觔7젘⤡縷螩%Sv׫묈/]↱&S h\u0006歋ᑛxi̘}ひY蔯_醨鯘煑橾8?䵎쨋z儬ꁏ*@츾:": null
+ }
+ }
+ }
+ ]
+ ]
+ ]}
+ },
+ "HO츧G": 3.694949578823609E17,
+ "QC\u0012(翻曇Tf㷟bGBJ옉53\\嚇ᛎD/\u001b夾၉4\"핀@祎)쫆yD\"i먎Vn㿿V1W᨝䶀": -6150931500380982286,
+ "Z㓮P翸鍱鉼K䋞꘺튿⭁Y": -7704503411315138850,
+ "]모开ꬖP븣c霤<[3aΠ\"黁䖖䰑뮋ꤦ秽∼㑷冹T+YUt\"싳F↭䖏&鋌": -2.7231911483181824E18,
+ "tꎖ": -4.9517948741799555E-19,
+ "䋘즊.⬅IꬃۣQ챢ꄑ黐|f?C⾺|兕읯sC鬸섾整腨솷V": "旆柩l<K髝M戶鯮t:wR2ꉱ`9'l픪*폍芦㊢Pjjo堡^ 읇얛嶅있ষ0?F",
+ "下9T挞\\$yᮇk쌋⼇,ਉ": true,
+ "櫨:ㆣ,邍lr崕祜㐮烜Z,XXD蕼㉴ kM꯽?P0﹉릗": null,
+ "gv솠歽閘4镳䗄2澾>쪦sᖸMy㦅울썉瘗㎜檵9ꍂ駓ૉᚿ/u3씅徐拉[Z䞸ࡗ1ꆱ&Q풘?ǂ8\u0011BCDY2볨;鸏": null,
+ "幫 n煥s쁇펇 왊-$C\"衝:\u0014㣯舼.3뙗Yl⋇\"K迎멎[꽵s}9鉳UK8쐥\"掄㹖h㙈!얄સ?Ꜳ봺R伕UTD媚I䜘W鏨蔮": -4.150842714188901E-17,
+ "ﺯ^㄄\b죵@fྉkf颡팋Ꞧ{/Pm0V둳⻿/落韒ꊔᚬ@5螺G\\咸a谆⊪ቧ慷绖?财(鷇u錝F=r၍橢ឳn:^iᴵtD볠覅N赴": null
+ }]
+ }]
+ }
+ ]
+ ]}
+ ]},
+ "謯?w厓奰T李헗聝ឍ貖o⪇弒L!캶$ᆅ": -4299324168507841322,
+ "뺊奉_垐浸延몏孄Z舰2i$q붿좾껇d▵餏\"v暜Ҭ섁m￴g>": -1.60911932510533427E18
+ }
+ ]
+ }
+ ]
+ ]],
+ "퉝꺔㠦楶Pꅱ": 7517896876489142899,
+ "": false
+ }
+ ]},
+ "是u&I狻餼|谖j\"7c됮sסּ-踳鉷`䣷쉄_A艣鳞凃*m⯾☦椿q㎭N溔铉tlㆈ^": 1.93547720203604352E18,
+ "kⲨ\\%vr#\u000bⒺY\\t<\/3﬌R訤='﹠8蝤Ꞵ렴曔r": false
+ }
+ ]},
+ "阨{c?C\u001d~K?鎌Ԭ8烫#뙣P초遗t㭱E­돒䆺}甗[R*1!\\~h㕅᰺@<9JꏏષI䳖栭6綘걹ᅩM\"▯是∔v鬽顭⋊譬": "운ﶁK敂(欖C취پ℄爦賾"
+ }
+ }}
+ }],
+ "鷨赼鸙+\\䭣t圙ڹx᜾ČN<\/踘\"S_맶a鷺漇T彚⎲i㈥LT-xA캔$\u001cUH=a0츺l릦": "溣㣂0濕=鉵氬駘>Pꌢpb솇쬤h힊줎獪㪬CrQ矠a&脍꼬爼M茴/΅\u0017弝轼y#Ꞡc6둴=?R崏뷠麖w?"
+ },
+ "閕ᘜ]CT)䵞l9z'xZF{:ؐI/躅匽졁:䟇AGF૸\u001cퟗ9)駬慟ꡒꆒRS״툋A<>\u0010\"ꂔ炃7g덚E৏bꅰ輤]o㱏_뷕ܘ暂\"u": "芢+U^+㢩^鱆8*1鈶鮀\u0002뺰9⬳ꪮlL䃣괟,G8\u20a8DF㉪錖0ㄤ瓶8Nଷd?眡GLc陓\\_죌V쁰ल二?c띦捱 \u0019JC\u0011b⤉zẒT볕\"绣蘨뚋cꡉkI\u001e鳴",
+ "ꃣI'{6u^㡃#཰Kq4逹y൒䧠䵮!㱙/n??{L풓ZET㙠퍿X2᩟綳跠葿㚙w཮x캽扳B唕S|尾}촕%N?o䪨": null,
+ "ⰴFjෟ셈[\u0018辷px?椯\\1<ﲻ栘ᣁ봢憠뉴p": -5263694954586507640
+ }
+ ]
+ ]]
+ ]}
+ ]}]
+ ]
+ ],
+ "?#癘82禩鋆ꊝty?&": -1.9419029518535086E-19
+ }
+ ]
+ ]
+ ]}
+ ]
+ ]
+ ],
+ "훊榲.|῕戄&.㚏Zꛦ2\"䢥ሆ⤢fV_摕婔?≍Fji冀탆꜕i㏬_ẑKᅢ꫄蔻XWc|饡Siẘ^㲦?羡2ぴ1縁ᙅ?쐉Ou": false
+ }]]
+ ]}}},
+ "慂뗄卓蓔ᐓ匐嚖/颹蘯/翻ㆼL?뇊,텵<\\獷ごCボ": null
+ },
+ "p溉ᑟi짣z:䒤棇r^٫%G9缑r砌롧.물农g?0׼ሩ4ƸO㣥㯄쩞ጩ": null,
+ "껎繥YxK\"F젷쨹뤤1wq轫o?鱑뜀瘊?뎃h灑\\ꛣ}K峐^ኖ⤐林ꉓhy": null
+ }
+ ],
+ "᱀n肓ㄛ\"堻2>m殮'1橌%Ꞵ군=Ӳ鯨9耛<\/n據0u彘8㬇៩f᏿诙]嚊": "䋯쪦S럶匏ㅛ#)O`ሀX_鐪渲⛀㨻宅闩➈ꢙஶDR⪍"
+ },
+ "tA썓龇 ⋥bj왎录r땽✒롰;羋^\\?툳*┎?썀ma䵳넅U䳆૘〹䆀LQ0\b疀U~u$M}(鵸g⳾i抦뛹?䤈땚검.鹆?ꩡtⶥGĒ;!ቹHS峻B츪켏f5≺": 2366175040075384032,
+ "전pJjleb]ួ": -7.5418493141528422E18,
+ "n.鎖ጲ\n?,$䪘": true
+ },
+ "欈Ar㉣螵᪚茩?O)": null
+ },
+ "쫸M#x}D秱欐K=侫们丐.KꕾxẠ\u001e㿯䣛F܍캗qq8꟞ṢFD훎⵳簕꭛^鳜\u205c٫~⑟~冫ऊ2쫰<\/戲윱o<\"": true
+ },
+ "㷝聥/T뱂\u0010锕|内䞇x侁≦㭖:M?iM᣿IJe煜dG࣯尃⚩gPt*辂.{磼럾䝪@a\\袛?}ᓺB珼": true
+ }
+ }
+ ]]}]}},
+ "tn\"6ꫤ샾䄄;銞^%VBPwu묪`Y僑N.↺Ws?3C⤻9唩S䠮ᐴm;sᇷ냞඘B/;툥B?lB∤)G+O9m裢0kC햪䪤": -4.5941249382502277E18,
+ "ᚔt'\\愫?鵀@\\びꂕP큠<<]煹G-b!S?\nꖽ鼫,ݛ&頺y踦?E揆릱H}햧캡b@手.p탻>췽㣬ꒅ`qe佭P>ᓂ&?u}毚ᜉ蟶頳졪ᎏzl2wO": -2.53561440423275936E17
+ }]}
+ }
+ ]
+ ]],
+ "潈촒⿂叡": 5495738871964062986
+ }
+ ]]
+ }
+ ]
+ ]}
+ ]]
+ ]]
+ ]}
+ ]
+ ]},
+ "ႁq킍蓅R`謈蟐ᦏ儂槐僻ﹶ9婌櫞釈~\"%匹躾ɢ뤥>࢟瀴愅?殕节/냔O✬H鲽엢?ᮈੁ⋧d␽㫐zCe*": 2.15062231586689536E17,
+ "㶵Ui曚珰鋪ᾼ臧P{䍏䷪쨑̟A뼿T渠誈䏚D1!잶<\/㡍7?)2l≣穷᛾稝{:;㡹nemיּ訊`G": null,
+ "䀕\"飕辭p圁f#뫆䶷뛮;⛴ᩍ3灚덏ᰝ쎓⦷詵%᜖Մfs⇫(\u001e~P|ﭗCⲾផv湟W첋(텪બT<บSꏉ੗⋲X婵i ӵ⇮?L䬇|ꈏ?졸": 1.548341247351782E-19
+ }
+ ]
+ },
+ "t;:N\u0015q鐦Rt缆{ꮐC?஛㷱敪\\+鲊㉫㓪몗릙竏(氵kYS": "XᰂT?൮ô",
+ "碕飦幑|+ 㚦鏶`镥ꁩ B<\/加륙": -4314053432419755959,
+ "秌孳(p!G?V傫%8ሽ8w;5鲗㦙LI檸\u2098": "zG N볞䆭鎍흘\\ONK3횙<\/樚立圌Q튅k쩎Ff쁋aׂJK銆ઘ즐狩6༥✙䩜篥CzP(聻駇HHퟲ讃%,ά{렍p而刲vy䦅ክ^톺M楒鍢㹳]Mdg2>䤉洞",
+ "踛M젧>忔芿㌜Zk": 2215369545966507819,
+ "씐A`$槭頰퍻^U覒\bG毲aᣴU;8!팲f꜇E⸃_卵{嫏羃X쀳C7뗮m(嚼u N܁谟D劯9]#": true,
+ "ﻩ!뵸-筚P᭛}ἰ履lPh?౮ⶹꆛ穉뎃g萑㑓溢CX뾇G㖬A錟]RKaꄘ]Yo+@䘁's섎襠$^홰}F": null
+ },
+ "粘ꪒ4HXᕘ蹵.$區\r\u001d묁77pPc^y笲Q<\/ꖶ 訍䃍ᨕG?*": 1.73773035935040224E17
+ },
+ "婅拳?bkU;#D矠❴vVN쩆t㜷A풃갮娪a%鮏絪3dAv룒#tm쑬⌛qYwc4|L8KZ;xU⓭㳔밆拓EZ7襨eD|隰ऌ䧼u9Ԣ+]贴P荿": 2.9628516456987075E18
+ }]}}]
+ ]}
+ }}
+ ]}]
+ ],
+ "|g翉F*湹̶\u0005⏐1脉̀eI쩓ᖂ㫱0碞l䴨ꑅ㵽7AtἈ턧yq䳥塑:z:遀ᄐX눔擉)`N3昛oQ셖y-ڨ⾶恢ꈵq^<\/": null,
+ "菹\\랓G^璬x৴뭸ゆUS겧﮷Bꮤ ┉銜᯻0%N7}~f洋坄Xꔼ<\/4妟Vꄟ9:౟곡t킅冩䧉笭裟炂4봋ⱳ叺怊t+怯涗\"0㖈Hq": false,
+ "졬믟'ﺇফ圪쓬멤m邸QLব䗁愍4jvs翙 ྍ꧀艳H-|": null,
+ "컮襱⣱뗠 R毪/鹙꾀%헳8&": -5770986448525107020
+ }
+ ],
+ "B䔚bꐻ뙏姓展槰T-똌鷺tc灿᫽^㓟䏀o3o$꘭趙萬I顩)뇭Ἑ䓝\f@{ᣨ`x3蔛": null
+ }
+ ]
+ ]
+ }],
+ "⦖扚vWꃱ꥙㾠壢輓{-⎳鹷贏璿䜑bG倛⋐磎c皇皩7a~ﳫU╣Q࠭ꎉS摅姽OW.홌ೞ.": null,
+ "蚪eVlH献r}ᮏ믠ﰩꔄ@瑄ⲱ": null,
+ "퀭$JWoꩢg역쁍䖔㑺h&ୢtXX愰㱇?㾫I_6 OaB瑈q裿": null,
+ "꽦ﲼLyr纛Zdu珍B絟쬴糔?㕂짹䏵e": "ḱ\u2009cX9멀i䶛簆㳀k"
+ }
+ ]]]],
+ "(_ꏮg່澮?ᩑyM<艷\u001aꪽ\\庼뙭Z맷㰩Vm\\lY筺]3㋲2㌩㄀Eਟ䝵⨄쐨ᔟgङHn鐖⤇놋瓇Q탚單oY\"♆臾jHᶈ征ቄ??uㇰA?#1侓": null
+ },
+ "觓^~ሢ&iI띆g륎ḱ캀.ᓡꀮ胙鈉": 1.0664523593012836E-19,
+ "y詭Gbᔶऽs댁U:杜⤎ϲ쁗⮼D醄诿q뙰I#즧v蔎xHᵿt᡽[**?崮耖p缫쿃L菝,봬ꤦC쯵#=X1瞻@OZc鱗CQTx": null
+ }
+ ]
+ }}],
+ "剘紁\u0004\\Xn⊠6,တױ;嵣崇}讃iႽ)d1\\䔓": null
+ },
+ "脨z\"{X,1u찜<'k&@?1}Yn$\u0015Rd輲ーa쮂굄+B$l": true,
+ "諳>*쭮괐䵟Ґ+<箁}빀䅱⡔檏臒hIH脟ꩪC핝ଗP좕\"0i<\/C褻D۞恗+^5?'ꂱ䚫^7}㡠cq6\\쨪ꔞꥢ?纖䫀氮蒫侲빦敶q{A煲G": -6880961710038544266
+ }}]
+ },
+ "5s⨲JvಽῶꭂᄢI.a৊": null,
+ "?1q꽏쿻ꛋDR%U娝>DgN乭G": -1.2105047302732358E-19
+ }
+ ]
+ ]},
+ "qZz`撋뙹둣j碇쁏\\ꆥ\u0018@藴疰Wz)O{F䶛l᷂绘訥$]뮍夻䢋䩇萿獰樧猵⣭j萶q)$꬚⵷0馢W:Ⱍ!Qoe": -1666634370862219540,
+ "t": "=wp|~碎Q鬳Ӎ\\l-<\/^ﳊhn퐖}䍔t碵ḛ혷?靻䊗",
+ "邙쇡㯇%#=,E4勃驆V繚q[Y댻XV㡸[逹ᰏ葢B@u=JS5?bLRn얮㍉⏅ﰳ?a6[&큟!藈": 1.2722786745736667E-19
+ },
+ "X블땨4{ph鵋ꉯ웸 5p簂䦭s_E徔濧d稝~No穔噕뽲)뉈c5M윅>⚋[岦䲟懷恁?鎐꓆ฬ爋獠䜔s{\u001bm鐚儸煛%bﯿXT>ꗘ@8G": 1157841540507770724,
+ "媤娪Q杸\u0011SAyᡈ쿯": true,
+ "灚^ಸ%걁<\/蛯<O\"-刷㏠R(kO=䢊䅎l䰓팪A絫픧": "譔\\㚄 ?R7㔪G㋉⣰渆?\\#|gN⤴;W칷A׫癮଼ೣ㏳뒜7d恓꾲0扬S0ᆵi/贎ྡn䆋武",
+ "萇砇Gこ朦켋Wq`㞲攊*冁~霓L剢zI腧튴T繙Cঅ뫬╈뮜ㄾ䦧촄椘B⊬츩r2f㶱厊8eϬ{挚␯OM焄覤\\(Kӡ>?\"祴坓\\\\'흍": -3.4614808555942579E18,
+ "釴U:O湛㴑䀣렑縓\ta)<D8ﭳ槁髭D.L|xs斋敠\"띋早7wᎍ": true,
+ "쵈+쬎簨up䓬?q+~\u0019仇뵈᫯3ᵣ恘枰劫㪢u珘-퀭:컙:u`⌿A(9鄦!<珚nj3:Hࣨ巋䀁旸뎈맻v\"\\(곘vO㤰aZe<\/W鹙鄜;l厮둝": null,
+ "": -1.2019926774977002E-18,
+ "%者O7.Nꪍs梇接z蕜綛<\/䜭\"죊y<曋漵@Ś⹝sD⟓jݗᢜ?z/9ၲMa쨮긗贎8ᔮ㦛;6p뾥໭䭊0B찛+)(Y㿠鸁䕒^옥": "鬃뫤&痽舎J콮藐󽸰ᨨMꈫ髿v<N\\.삒껅я1ꭼ5䴷5쳬臨wj덥"
+ }],
+ "鷎'㳗@帚妇OAj' 谬f94ǯ(횡ヒ%io쪖삐좛>(j:숾却䗌gCiB뽬Oyuq輥厁/7)?今hY︺Q": null
+ }
+ ]
+ ]]]}]
+ ],
+ "I笔趠Ph!<ཛྷ㸞诘X$畉F\u0005笷菟.Esr릙!W☆䲖뗷莾뒭U\"䀸犜Uo3Gꯌx4r蔇᡹㧪쨢準<䂀%ࡡꟼ瑍8炝Xs0䀝销?fi쥱ꆝલBB": -8571484181158525797,
+ "L⦁o#J|\"⽩-㱢d㌛8d\\㶤傩儻E[Y熯)r噤὘勇 }": "e(濨쓌K䧚僒㘍蠤Vᛸ\"络QJL2,嬓왍伢㋒䴿考澰@(㏾`kX$끑эE斡,蜍&~y",
+ "vj.|统圪ᵮPL?2oŶ`밧\"勃+0ue%⿥绬췈체$6:qa렐Q;~晘3㙘鹑": true,
+ "ශؙ4獄⶿c︋i⚅:ん閝Ⳙ苆籦kw{䙞셕pC췃ꍬ␜꟯ꚓ酄b힝hwk꭭M鬋8B耳쑘WQ\\偙ac'唀x᪌\u2048*h짎#ፇ鮠뾏ឿ뀌": false,
+ "⎀jꄒ牺3Ⓝ컴~?親ꕽぼܓ喏瘘!@<튋㐌꿱⩦{a?Yv%⪧笯Uܱ栅E搚i뚬:ꄃx7䙳ꦋ&䓹vq☶I䁘ᾘ涜\\썉뺌Lr%Bc㍜3?ꝭ砿裞]": null,
+ "⭤뙓z(㡂%亳K䌽꫿AԾ岺㦦㼴輞낚Vꦴw냟鬓㹈뽈+o3譻K1잞": 2091209026076965894,
+ "ㇲ\t⋇轑ꠤ룫X긒\"zoY읇희wj梐쐑l侸`e%s": -9.9240075473576563E17,
+ "啸ꮑ㉰!ᚓ}銏": -4.0694813896301194E18,
+ ">]囋੽EK뇜>_ꀣ緳碖{쐐裔[<ನ\"䇅\"5L?#xTwv#罐\u0005래t应\\N?빗;": "v쮽瞭p뭃"
+ }
+ ]],
+ "斴槾?Z翁\"~慍弞ﻆ=꜡o5鐋dw\"?K蠡i샾ogDﲰ_C*⬟iㇷ4nય蟏[㟉U꽌娛苸 ঢ়操贻洞펻)쿗૊許X⨪VY츚Z䍾㶭~튃ᵦ<\/E臭tve猑x嚢": null,
+ "锡⛩<\/칥ꈙᬙ蝀&Ꚑ籬■865?_>L詏쿨䈌浿弥爫̫lj&zx<\/C쉾?覯n?": null,
+ "꾳鑤/꼩d=ᘈn挫ᑩ䰬ZC": "3錢爋6Ƹ䴗v⪿Wr益G韠[\u0010屗9쁡钁u?殢c䳀蓃樄욂NAq赟c튒瘁렶Aૡɚ捍"
+ }
+ ]
+ ]
+ ]}
+ ]
+ ]
+ }]]]}}
+ ]}],
+ "Ej䗳U<\/Q=灒샎䞦,堰頠@褙g_\u0003ꤾfⶽ?퇋!łB〙ד3CC䌴鈌U:뭔咎(Qો臃䡬荋BO7㢝䟸\"Yb": 2.36010731779814E-20,
+ "逸'0岔j\u000e눘먷翌C츊秦=ꭣ棭ှ;鳸=麱$XP⩉駚橄A\\좱⛌jqv䰞3Ь踌v㳆¹gT┌gvLB賖烡m?@E঳i": null
+ },
+ "曺v찘ׁ?&绫O័": 9107241066550187880
+ }
+ ]
+ ],
+ "(e屄\u0019昜훕琖b蓘ᬄ0/۲묇Z蘮ဏ⨏蛘胯뢃@㘉8ሪWᨮ⦬ᅳ䅴HI၇쨳z囕陻엣1赳o": true,
+ ",b刈Z,ၠ晐T솝ŕB⩆ou'퐼≃绗雗d譊": null,
+ "a唥KB\"ﳝ肕$u\n^⅄P䟼냉䞸⩪u윗瀱ꔨ#yşs꒬=1|ﲤ爢`t౐튼쳫_Az(Ṋ擬㦷좕耈6": 2099309172767331582,
+ "?㴸U<\/䢔ꯡ阽扆㐤q鐋?f㔫wM嬙-;UV죫嚔픞G&\"Cᗍ䪏풊Q": "VM7疹+陕枡툩窲}翡䖶8欞čsT뮐}璤:jﺋ鎴}HfA൝⧻Zd#Qu茅J髒皣Y-︴[?-~쉜v딏璮㹚䅊﩯<-#\u000e걀h\u0004u抱﵊㼃U<㱷⊱IC進"
+ },
+ "숌dee節鏽邺p넱蹓+e罕U": true
+ }
+ ],
+ "b⧴룏??ᔠ3ぱ>%郿劃翐ꏬꠛW瞳᫏누躨狀ໄy੽\"ីuS=㨞馸k乆E": "トz݈^9R䬑<ﮛG<s~<\/?ⵆᏥ老熷u듷"
+ }}
+ ]
+ }
+ ]}
+ }
+ }
+ }
+ }},
+ "宩j鬅쳜QꝖјy獔Z᭵1v擖}䨿F%cֲ᫺贴m塼딚NP亪\"ᅨsa뺯ꘓ2:9뛓༂쌅䊈#>Rꨳ\u000fTT泠纷꽀MR<CBxP񱒫X쇤": -2.22390568492330598E18,
+ "?䯣ᄽ@Z鸅->ᴱ纊:㠭볮?%N56%鈕1䗍䜁a䲗j陇=뿻偂衋࿘ᓸ?ᕵZ+<\/}H耢b䀁z^f$&㝒LkꢳI脚뙛u": 5.694374481577558E-20
+ }]
+ }
+ ]],
+ "obj": {"key": "wrong value"},
+ "퓲꽪m{㶩/뇿#⼢&᭙硞㪔E嚉c樱㬇1a綑᝖DḾ䝩": null
+ }
+} \ No newline at end of file
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/sample_twitter.json b/vendor/github.com/tdewolff/minify/benchmarks/sample_twitter.json
new file mode 100644
index 0000000..3acb85b
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/sample_twitter.json
@@ -0,0 +1,52 @@
+[{
+ "created_at": "Thu Jun 22 21:00:00 +0000 2017",
+ "id": 877994604561387500,
+ "id_str": "877994604561387520",
+ "text": "Creating a Grocery List Manager Using Angular, Part 1: Add &amp; Display Items https://t.co/xFox78juL1 #Angular",
+ "truncated": false,
+ "entities": {
+ "hashtags": [{
+ "text": "Angular",
+ "indices": [103, 111]
+ }],
+ "symbols": [],
+ "user_mentions": [],
+ "urls": [{
+ "url": "https://t.co/xFox78juL1",
+ "expanded_url": "http://buff.ly/2sr60pf",
+ "display_url": "buff.ly/2sr60pf",
+ "indices": [79, 102]
+ }]
+ },
+ "source": "<a href=\"http://bufferapp.com\" rel=\"nofollow\">Buffer</a>",
+ "user": {
+ "id": 772682964,
+ "id_str": "772682964",
+ "name": "SitePoint JavaScript",
+ "screen_name": "SitePointJS",
+ "location": "Melbourne, Australia",
+ "description": "Keep up with JavaScript tutorials, tips, tricks and articles at SitePoint.",
+ "url": "http://t.co/cCH13gqeUK",
+ "entities": {
+ "url": {
+ "urls": [{
+ "url": "http://t.co/cCH13gqeUK",
+ "expanded_url": "http://sitepoint.com/javascript",
+ "display_url": "sitepoint.com/javascript",
+ "indices": [0, 22]
+ }]
+ },
+ "description": {
+ "urls": []
+ }
+ },
+ "protected": false,
+ "followers_count": 2145,
+ "friends_count": 18,
+ "listed_count": 328,
+ "created_at": "Wed Aug 22 02:06:33 +0000 2012",
+ "favourites_count": 57,
+ "utc_offset": 43200,
+ "time_zone": "Wellington"
+ }
+}]
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/sample_usa.svg b/vendor/github.com/tdewolff/minify/benchmarks/sample_usa.svg
new file mode 100644
index 0000000..c51a151
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/sample_usa.svg
@@ -0,0 +1,12630 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ 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"
+ version="1.0"
+ width="989.97772"
+ height="627.07098">
+ <metadata id="metadata7">
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title>Map of Counties in the USA</dc:title>
+ <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
+ <dc:date>2013-01-30</dc:date>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>U.S. Census Bureau, Abe.suleiman, Lokal_Profil</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:source>https://commons.wikimedia.org/wiki/File:Usa_counties_large.svg</dc:source>
+ </cc:Work>
+ <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/">
+ <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction" />
+ <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution" />
+ <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <defs id='defs1930'></defs>
+
+ <style type='text/css' id='style_css_sheet'>
+ /*
+ * Below are Cascading Style Sheet (CSS) definitions in use in this file,
+ * which allow easily changing how counties are displayed.
+ *
+ * To e.g. colour two counties red simply go to the CSS insertion point and add:
+ * .c02185, c02188 {fill:red}
+ *
+ *
+ */
+
+.counties {fill:#d0d0d0;fill-rule:nonzero;stroke:#000000;stroke-width:0.178287;}
+.State_Lines {fill:none;stroke:#221e1f;stroke-width:0.89143497;}
+.separator {fill:none;stroke:#a9a9a9;stroke-width:2.3177309;}
+
+/*CSS insertion point*/
+
+
+</style>
+ <g id="county-group" class="counties">
+ <path
+ d="m 111.74805,462.41314 1.57249,-1.571 1.17669,-0.784 0.39045,0.784 -0.78268,0.393 0.78268,0 3.92945,-1.177 3.53543,-4.324 3.14142,1.573 0,0.788 -1.17848,1.175 0,1.182 1.17848,-0.394 0.78624,-1.963 0.78447,-0.788 1.17847,1.177 0.39223,1.574 1.17848,0.394 0.39045,-0.786 1.96294,-0.396 3.1432,0 0.39045,0.396 -0.78447,1.176 0,0.393 2.35874,0.394 -0.3958,1.176 1.5725,0 1.96294,-1.176 4.31989,-0.394 2.74918,0.786 1.18383,0 1.17313,0.392 0.39758,0.392 1.57071,0 1.96294,-0.392 2.35873,0 2.74919,0.788 0.78446,-0.396 1.57249,-1.176 0.39045,-0.394 0.78625,-0.783 2.75097,0.39 6.28283,1.963 1.96294,6.287 1.17848,3.927 -16.10289,3.928 0.78625,4.318 -3.14142,0.786 -8.24934,1.576 -0.39758,0 -18.45448,1.962 -4.32168,0 0,-0.787 -3.13963,0 0,-0.786 -3.1432,0 -3.14142,0.392 -2.35874,0 0,-0.781 -1.17669,0 0,0.389 -3.53365,0 -0.78624,-0.389 -0.39402,0 0,0.389 -1.56892,0 -0.3958,-0.784 -1.96294,0 0,0.784 -0.78803,0 -5.500153,-0.389 0,1.566 -2.749186,0 -2.355171,-1.177 -1.178477,-1.572 0.784463,-2.354 0.394014,-2.752 2.749186,0.395 3.537213,-0.395 1.174912,-0.391 2.356949,-2.751 1.18205,-3.534 2.35517,-3.533 1.57249,-1.574 1.17669,0.397 1.5725,-0.788 2.35695,-2.751"
+ class="c02185"
+ id="North Slope, AK" />
+ <path
+ d="m 132.55771,496.97814 -0.78268,0 -1.57071,0.784 0.39401,0.786 -2.35517,0 0,2.355 -1.57249,0.395 0,-0.785 -0.78446,-0.783 -1.57071,0 0,1.568 -1.57249,0 0,-1.568 -3.13964,0 0,3.534 -3.92766,0 0,1.569 -2.35517,0 0,3.928 -0.78624,0 0,0.788 -0.78625,0 -13.747711,-0.394 0,-1.573 -0.395797,0 -0.390448,-0.392 0,-1.177 -0.786246,-0.394 0,-3.141 -0.395797,-3.93 1.572491,0 0.786246,0.393 -0.786246,2.749 0.395797,1.574 7.069081,0.781 1.96472,-1.961 1.18026,0 -0.3958,-0.786 -1.17669,-0.785 -1.17669,-0.783 -1.57784,-1.968 -0.7809,-0.39 -0.39223,-1.179 0.39223,-0.394 0.7809,0 1.18204,2.749 1.57249,1.571 0.78625,-0.389 -0.78625,-0.394 -1.17669,-1.574 0.78446,-2.355 0.39223,0.392 0,-0.392 -1.17669,-0.785 -1.96473,0.391 -1.57427,0 -2.750969,-1.177 -1.174912,-4.32 -3.931228,-4.323 2.749186,0 0,-1.566 5.500153,0.389 0.78803,0 0,-0.784 1.96294,0 0.3958,0.784 1.56892,0 0,-0.389 0.39402,0 0.78624,0.389 3.53365,0 0,-0.389 1.17669,0 0,0.781 2.35874,0 3.14142,-0.392 3.1432,0 0,0.786 3.13963,0 0,0.787 3.1432,0 0,1.963 0.78446,0 0,0.786 1.56893,1.572 0,2.354 1.57071,0 0.78268,0.786 0.39579,2.357 -0.39579,1.571"
+ class="c02188"
+ id="Northwest Arctic, AK" />
+ <path
+ d="m 250.7905,566.89114 1.56893,-1.961 3.145,2.747 0.78444,2.355 -0.39401,1.181 -1.57071,0.392 -2.74919,-0.786 0,-0.787 0.39402,-0.784 -1.17848,-2.357 m 1.17848,3.928 1.17669,0.786 0.39402,1.572 -1.18026,-1.18 -0.39045,-1.178"
+ class="c02130"
+ id="Ketchikan Gateway, AK" />
+ <path
+ d="m 248.82578,569.24814 1.17847,0.394 0,-1.572 -0.39223,-0.393 0,-1.572 0.39223,-0.785 1.17848,-0.784 1.1767,-1.574 0.39401,-0.783 -1.17848,-0.785 1.57071,-0.394 2.35876,1.179 1.17667,0 0.38869,-0.785 1.18382,0.785 0,2.357 2.74384,3.534 0,3.143 -0.78448,2.749 -1.17846,0.392 -0.7809,-0.392 -1.96474,-2.749 0.39223,-1.571 -1.57071,-2.751 -2.75096,-1.961 -1.56893,1.961 -0.78625,0.392 0.78625,0.394 0,2.751 -1.17848,0 -1.18024,-1.18 0.394,0 m -8.63977,-2.357 1.95937,-0.786 5.50194,3.143 2.35693,2.749 1.57071,0.785 1.96473,3.535 0,1.18 -1.18026,0.391 -2.35518,-1.963 -3.53541,-1.177 1.96294,2.749 0.78801,-0.786 0.78446,0.394 0.78625,1.963 -1.17848,0 -4.71389,-3.143 -0.39223,-0.785 1.57071,-1.572 -1.17848,-1.177 -1.17671,0 -1.9647,-0.786 0.38866,-0.392 0.78625,0 0.39579,-0.394 -1.18204,-1.571 -0.38866,1.18 -0.78625,0.391 -0.39223,-0.391 0.39223,-1.18 -0.78446,-1.965 0,-0.392 m 0.39223,3.928 0,0.786 -0.39223,-0.392 0.39223,-0.394 m 13.35368,2.358 -0.39223,-1.572 1.5707,0.392 0.39404,1.18 -1.18028,0.785 -0.39223,-0.785 m -11.39431,0.391 1.57428,-0.786 0.78624,0.395 -0.78624,1.963 -1.57428,-0.392 0,-1.18 m 13.75126,-0.391 0.39223,0.391 0,0.786 -1.17667,0 0.78444,-1.177"
+ class="c02201"
+ id="Prince of Wales-Outer Ketchikan, AK" />
+ <path
+ d="m 249.61202,567.67714 0.39223,0.393 0,1.572 -1.17847,-0.394 0.39401,-1.178 -0.78801,-3.14 -0.39047,1.567 0.39047,0.786 -0.39047,0.787 -1.9647,-0.393 -1.17848,-0.786 0,-0.786 0.78623,-1.569 -0.78623,-2.751 -2.36052,-0.785 -1.17847,-0.788 -0.38867,-0.784 -1.9665,0.394 -1.17492,0 0.38867,-0.786 1.17848,0 0.39401,-1.573 0.78803,-1.176 1.56714,-0.393 1.18204,1.179 0,1.178 1.57071,-0.394 0.39223,1.571 1.17848,0.394 1.17848,1.178 0.78446,-0.392 3.14318,0.786 1.17848,0.785 -0.39401,0.783 -1.1767,1.574 -1.17848,0.784 -0.39223,0.785 0,1.572 m -12.56921,-5.106 -1.18026,-0.786 0.39223,-0.785 2.74919,0 1.18204,-0.788 4.31989,2.359 -1.17848,1.573 -1.18204,0 0,-0.788 -1.95937,-1.177 0,0.783 1.57071,0.786 0.38866,0.788 -0.38866,0.784 -1.17848,0 0,0.394 -0.78803,0.391 -1.17669,-2.357 -0.3958,-0.392 -0.78268,-0.394 -0.39223,-0.391 m 0.39223,3.926 -1.96294,-1.177 -0.78625,-1.176 0.39045,-1.182 0.78625,-0.391 1.18026,0.785 1.17491,0 0.78625,1.574 -0.78625,0.39 0,0.785 0.3958,1.178 0.78268,0 0,2.359 -0.78268,-0.788 0.39045,1.965 -0.78625,-0.391 -0.78268,-1.963 0,-1.182 0.78268,0 -0.78268,-0.786 m 5.49659,-1.567 1.18026,-0.786 0.78624,1.57 -0.78624,0.391 -1.18026,0 0,-1.175 m -7.06908,5.102 -0.39045,-0.784 0.39045,0 0,1.18 0,-0.396 m 2.75097,1.573 0.78268,0 -0.39223,0.786 -0.78625,-0.394 0.3958,-0.392"
+ class="c02280"
+ id="Wrangell-Petersburg, AK" />
+ <path
+ d="m 226.04248,557.46314 1.96294,0.788 1.57251,-0.788 1.17668,1.965 0,0.394 -1.17668,0.39 -2.75098,-1.176 -0.394,0.392 1.18024,1.572 -0.39401,1.179 -0.78623,0 -3.53365,-3.143 1.57071,-0.391 0,-1.572 1.57247,0.39 m 9.82007,12.569 0,0.396 -0.78625,-0.396 -1.96474,-1.962 0,-1.179 -0.78444,0.786 -0.39403,-0.786 -1.17848,-0.394 -0.78446,-2.353 -0.78803,-0.788 0,-0.785 -0.78447,0.391 -1.17847,-0.783 0.78624,-2.357 1.57251,0.786 1.57071,-0.396 0.39221,0.788 -0.78624,0.394 0.78624,0 2.75277,4.32 1.56893,3.534 -0.39045,0 0.39045,0.784 m -9.0356,-7.461 0.39223,-0.392 1.57071,1.569 0,1.182 -0.78447,0.39 -1.17847,-2.749"
+ class="c02220"
+ id="Sitka, AK" />
+ <path
+ d="m 224.86224,547.25314 -0.39223,0.392 -1.17848,-1.963 -1.17671,-0.786 0,0.394 1.96472,3.141 1.56893,2.357 1.96472,3.142 -1.57071,0 -1.18024,-1.177 -0.39223,-0.392 0.78623,-0.787 -0.78623,-0.786 -1.96296,-0.394 0.39225,-1.963 -1.57071,-1.178 -3.53543,0 0,-3.143 1.57071,-1.963 3.14318,2.358 1.17671,-0.395 0.39578,0.395 1.56893,0 0.78448,0.785 0.394,-0.394 0.78624,1.178 0.39223,0 -3.14318,1.179"
+ class="c02100"
+ id="Haines, AK" />
+ <path
+ d="m 235.0763,553.93014 0,0.786 -0.78268,0 -2.75277,-2.355 -1.96292,0.781 -3.14498,-1.96 -1.96294,-3.537 0.39223,-0.392 3.14318,-1.179 0.78447,0.785 1.18026,0.394 3.92768,1.572 0,0.785 1.96472,1.178 -0.78625,2.748 0,0.394 m -5.10615,0.394 -0.78803,0 -0.39223,-1.182 0.39223,0.394 0.39581,-0.394 1.96292,-0.389 -1.17847,0.783 -0.39223,0.394 0,0.394"
+ class="c02110"
+ id="Juneau, AK" />
+ <path
+ d="m 222.50705,544.50514 -3.14318,-2.358 0.78801,-1.177 1.56894,0.39 1.17848,0.787 0.78446,1.963 -1.17671,0.395 m 1.96296,7.856 0.39223,0.392 -1.96294,1.177 -0.78448,-2.356 -1.18024,-1.18 0,0.788 -0.39223,0 -3.53365,-0.788 0,0.394 1.57071,0 2.35517,0.786 1.57247,2.356 -2.35517,2.357 -1.57247,-0.785 -0.78625,0 -1.17848,-0.392 -3.92587,-1.574 1.5707,-1.569 2.35517,-3.536 1.17848,-0.392 0,-0.786 3.53543,0 1.57071,1.178 -0.39225,1.963 1.96296,0.394 0.78623,0.786 -0.78623,0.787 m 14.92619,6.675 -1.17848,0 -0.38867,0.786 -0.39401,-1.965 -1.96294,-1.963 0,-0.784 -0.3958,-1.18 0,-0.394 0.78625,-2.748 6.28283,5.106 -1.56714,0.393 -0.78803,1.176 -0.39401,1.573 m -9.03382,-5.5 1.17847,-0.783 0,0.389 3.145,3.145 -0.78802,0 -1.17848,-1.571 -0.39223,0.394 2.74918,2.747 0.3958,0.788 -0.78625,1.177 0,1.178 -1.18206,1.962 -1.17667,-1.568 0,-2.358 -1.96474,-1.573 -1.57249,-3.139 -1.57071,-1.963 0,-0.394 0.39401,0 1.1767,1.175 0.39223,1.182 0.78803,0 0,-0.394 0.39223,-0.394 m -4.3199,3.927 -1.57247,-0.39 0,1.572 -1.57071,0.391 -1.17848,-0.391 -0.39223,-1.182 0.39223,-1.961 1.57071,-0.392 0.78801,-0.786 4.31811,0.786 0.39224,0.784 0.39223,1.179 -0.39223,0.39 -0.78447,0.394 -1.96294,-0.394"
+ class="c02232"
+ id="Skagway-Hoonah-Angoon, AK" />
+ <path
+ d="m 195.40565,544.50514 1.96115,0 0.39582,-0.788 2.35695,0.393 0.78625,-1.568 2.35517,-0.788 0.39401,2.356 0.78447,0.395 1.96472,0.391 0.78446,1.178 5.89239,3.142 1.17847,2.751 -1.5707,1.569 0,-0.783 -1.18026,-0.786 -8.63801,-1.965 -0.39401,-0.392 0,-0.785 0.78446,0 0,-0.786 -1.1767,-1.965 -0.39401,1.179 -1.57071,1.572 -3.53899,0.391 -2.35341,-1.177 -5.10436,0.392 -5.49837,1.963 1.96653,-5.104 5.10255,-1.573 0.78446,0 0,0.788 2.74919,-0.788 0.78626,0 0.39222,0.788"
+ class="c02282"
+ id="Yakutat, AK" />
+ <path
+ d="m 62.259146,580.24714 -0.784463,0.786 -0.394014,-0.396 0,-0.39 1.178477,0 m 1.964723,6.284 0.392231,0 -0.392231,0.392 -0.786246,-0.786 0.786246,0.394 m 13.348347,25.137 1.572491,1.571 -0.394014,0.786 -3.141417,2.355 -1.178477,0.394 -1.176694,0 -3.1432,1.178 -1.178477,-0.786 4.321677,-1.572 0.390448,-3.142 0.394015,-0.392 2.355171,-0.392 0,0.784 0.394014,0.394 0.394014,-0.394 0.390449,-0.784 m -13.742362,6.284 2.358737,-1.572 0.386883,-0.786 0.786246,-0.392 1.178477,-0.391 1.178477,0.391 -0.786246,1.572 -1.570708,0.392 -1.961157,1.963 -2.356954,1.18 -1.176694,0.393 1.962939,-1.965 0,-0.785 m -56.5651136,0 0.39758,0.393 -0.39758,0.392 -0.3922314,-0.392 0.3922314,-0.393 m 3.9312286,0.393 0.784462,0 0.786246,1.572 -1.176694,0.785 -0.786246,-0.393 -0.394014,-1.964 0.786246,0 m 47.529529,0 0,0.784 -0.394014,-0.392 0.394014,-0.392 m -1.964723,0.784 0.388666,0 -0.388666,0.394 -0.39758,-0.394 0.39758,0 m -24.355786,1.18 -0.392231,-0.392 1.572491,-0.788 0.78268,1.18 -1.176694,1.571 -2.356954,0 -4.319894,-0.788 3.927662,0.396 1.96294,-0.786 0.394014,-0.393 -0.394014,0 m -10.212279,-0.786 0.784463,0 0,0.786 -0.390449,0.393 -0.786245,-0.393 0,-0.786 0.392231,0 m -5.892385,0 0.786246,0.394 -1.178477,1.571 -0.784463,0 -1.178477,-0.786 1.96294,-0.393 0.392231,-0.786 m 42.031159,0 0.394014,0.394 -0.394014,0.392 -1.570709,-0.392 0.388666,-0.394 1.182043,0 m -38.493945,1.569 1.176694,0.396 -0.392231,0.784 -3.927663,0.391 1.964723,-2.746 1.178477,0 0,0.392 -0.394014,0 -0.394014,0.783 0.788028,0 m 36.133425,-0.783 0.392231,0 0,0.393 -0.392231,0 0,-0.393 z m -2.749186,0 0.395798,0.393 -0.395798,0.786 -1.174911,0 0,-0.786 1.174911,-0.393 m -29.066128,0.783 0.394014,0.396 -0.394014,0 0,-0.396 m -2.747403,0.396 1.178477,0 0.390449,0.392 -1.176694,0.392 -0.786246,-0.392 0.394014,-0.392 m -16.1028806,0 0,0.392 -0.39758,0.392 0.39758,-0.784 m 44.3809806,0 0.394015,0.392 -0.394015,0.392 -0.392231,-0.392 0.392231,-0.392 m -6.676848,0 0.394015,0.392 0,0.392 -1.572492,0 0.394015,-0.392 0.784462,-0.392 m -7.070862,0.784 0.788029,0.391 2.749185,0.788 -3.143199,0 -1.568926,-0.394 -1.178477,-1.177 1.178477,0.392 1.174911,0 m -31.4212991,-0.392 0,0.783 -0.3940143,0 0.3940143,-0.783"
+ class="c02016"
+ id="Aleutians West, AK" />
+ <path
+ d="m 113.71099,597.92414 0,0.782 -0.39045,-0.782 0,-0.788 -0.78624,-0.394 -0.39402,0.786 -0.78446,0 -0.3958,0.786 -1.96294,1.573 -3.53186,1.176 -1.57784,-0.392 0.78981,-1.965 -1.1767,0 -1.96829,4.713 -1.568921,0.786 -1.182042,-0.392 0,-1.963 -0.780898,-0.394 -0.395797,0.784 0.395797,0.786 0.390449,1.573 -1.572491,0.392 -0.786246,-1.965 -1.178477,0.393 0.788029,1.572 0,2.355 -1.178477,-0.392 -1.572492,0.392 -2.749185,0 -0.786246,0.396 -1.176694,1.177 -1.964723,0 -0.392231,-1.177 0,-0.788 1.178477,-0.394 0.784463,-1.177 4.319894,-1.964 1.178477,0 0.394014,1.964 0.786246,0 0,-2.357 2.355171,-0.786 3.540783,-3.926 2.35517,-1.965 2.35517,-0.786 1.18026,0.392 1.17848,0.394 -0.39402,0 0,0.787 0.39402,0.788 0.78624,-0.396 0.39223,-0.786 0,-1.179 1.1767,-2.749 2.35695,-1.961 4.71213,-3.145 0.39401,0.396 0,0.388 -0.78446,0.788 -1.17848,0 0,0.787 -1.57249,0 0,0.786 -1.57071,0 0,1.567 0.39402,0 0,3.143 -0.39402,0.786 1.57071,0 0,1.575 m -3.53365,2.351 0.78268,0 0,0.788 -0.78268,0 -0.39401,-0.392 0.39401,-0.396 m -1.18026,1.181 0.78625,0 0,0.784 -0.78625,1.179 -1.56892,-0.393 -0.39402,-1.57 0.39402,-0.393 0.78624,0 0.78268,0.393 m 3.1432,0.394 0.39402,1.569 -1.96473,2.356 0,-2.356 0.39045,-0.393 0.78803,0.393 0.39223,-1.569 m 1.96472,0.39 0,1.965 -0.78446,0 0.78446,-1.965 m -10.99852,1.179 0.39401,0.394 -0.78624,0 -0.78803,-0.787 0.39223,-0.392 0.78803,0.785 m 11.7812,0.394 0.3958,0.786 -0.78625,0.392 0,-1.178 0.39045,0 m -14.924401,0.786 0,0.784 -0.390448,0.392 -0.791594,-0.784 1.182042,-0.392 m 15.320201,0.392 0.39223,0.392 -0.39223,0.392 0,-0.784 m -18.465183,3.928 1.182042,0.39 0,0.396 -1.182042,0 -0.390449,-0.396 0.390449,-0.39 m -14.532173,0.786 0.392231,0 0,0.784 -0.784462,0.787 -0.394015,-1.179 0.394015,-0.392 0.392231,0 m -1.176694,1.178 -0.394014,0.785 -1.178477,0 -0.392232,-0.785 0.786246,-0.786 1.178477,0.786 m 3.925879,0.393 0.394015,0 0,0.392 -1.570709,0 1.176694,-0.392 m -1.570708,0.392 0.394014,0.392 -1.18026,-0.392 0.786246,0"
+ class="c02013"
+ id="Aleutians East, AK" />
+ <path
+ d="m 128.63539,582.60014 0.78268,-1.175 1.18026,-0.788 0.39045,-0.39 0.39402,0.39 0.39223,-0.39 0.78268,-1.179 1.57249,-1.18 -0.39223,-3.14 1.57249,-0.786 1.96472,-0.785 1.1767,-0.786 0,-1.963 1.18026,0 1.17491,-0.396 -0.39223,-0.784 1.96293,0 -0.39223,-1.178 0.78981,0 -0.39758,1.178 -0.78446,0.784 -0.78624,0.396 -0.78447,1.177 -0.39044,2.749 -0.78803,1.179 -1.17848,0.784 -0.78625,-0.392 -1.17847,0.392 -0.78447,0.788 -0.78624,1.963 -0.78268,0 -1.18026,1.569 -0.78446,0.396 -0.39402,-0.396 0,0.788 -2.35339,1.571 0,0.39 0.78268,-0.39 0,1.572 -1.95759,0 0,-0.788 0.78268,-0.394 0.39223,-0.786 m 16.88556,-7.067 -0.39223,0.392 -1.96294,-0.785 1.56893,-2.358 1.57606,-2.75 1.17312,-0.39 -0.38688,1.571 0,0.784 1.57071,-0.392 0.78446,0.392 0.38867,1.18 -0.38867,0.785 -3.14141,1.178 -1.18205,-0.786 -0.39401,0.394 0.78624,0.785 m -4.7139,4.714 0.39401,1.178 0.78446,0.392 -0.78446,-0.784 -0.39401,-3.145 0.78624,-0.783 2.35696,-0.394 0.78446,-0.394 1.18382,0 -0.39758,1.18 0.39758,0.391 1.56536,-1.571 0.78803,-0.392 -0.39045,1.572 0.78625,1.179 0.78446,0 -0.78446,1.571 -1.97007,1.964 -1.96294,2.357 -0.39223,0.392 -0.39223,-0.786 0.39223,-0.788 -0.39223,0 -1.17492,2.751 -1.18204,1.18 -1.17847,0.391 -0.78268,-1.177 -1.18026,-1.963 -0.39402,-1.182 -0.78268,-0.786 0.39045,-1.963 1.17848,-1.177 1.96294,-0.392 0,1.179 m -0.39223,8.641 1.5707,0.392 -0.39223,0.391 -1.57071,0 -0.39044,-0.391 0.78268,-0.392 m -1.57071,0 0.78803,0.392 -1.96651,1.573 0,-0.786 1.17848,-1.179 m -5.10614,6.675 0.78624,0.392 0,1.573 -1.57071,-0.392 0,-0.787 0.78447,-0.786"
+ class="c02150"
+ id="Kodiak Island, AK" />
+ <path
+ d="m 125.88621,568.85414 3.1432,0 0,2.359 -4.32168,0.392 0.78625,-1.177 0.39223,-1.574"
+ class="c02060"
+ id="Bristol Bay, AK" />
+ <path
+ d="m 125.10175,568.85414 0,0.394 -4.71213,2.357 -0.78625,-0.392 -1.5707,-2.359 -0.39402,0.394 -0.39223,1.571 0.78625,1.963 -1.18026,0.786 -0.78268,0 -2.35874,-4.32 -0.78625,-0.394 -0.39044,1.178 -0.39402,0 -1.96294,-1.567 0.39223,-0.395 -0.39223,-0.393 -3.1432,1.965 0,-1.572 0.78446,0 0.78803,-2.356 0.78447,-0.784 0.39223,-2.359 0.78624,-1.571 1.17848,0 0,-1.572 1.17669,-2.355 0.78625,-1.571 0.78624,0 1.96473,-4.714 4.71212,0 0,0.786 0.78625,0 0.78268,-0.786 0,-1.178 1.57249,0 0,0.784 5.10257,0 0,0.788 0.3958,2.748 0.39045,7.464 -0.78625,0 0,1.177 -1.56714,0 -0.78624,0.785 -0.39402,1.574 -1.17669,0 -1.17848,0.784 0.78625,3.14 m -19.63653,1.574 0,-0.786 1.17669,0 -1.17669,0.786"
+ class="c02070"
+ id="Dillingham, AK" />
+ <path
+ d="m 128.63539,582.60014 -0.39223,0.786 -0.78268,0.394 0,0.788 1.95759,0 -4.31632,3.14 -0.78625,-0.391 -0.39223,1.571 -2.35517,0.783 0,0.396 0.39223,0 0.39223,0.786 -2.35695,0 -0.78447,1.178 1.56893,1.569 -1.56893,1.963 -5.10614,1.179 0,1.182 -0.39401,0.782 0,-2.357 -1.57071,0 0.39402,-0.786 0,-3.143 -0.39402,0 0,-1.567 1.57071,0 0,-0.786 1.57249,0 0,-0.787 1.17848,0 0.78446,-0.788 0,-0.388 1.17848,0 -0.39223,-1.573 0.78446,-1.571 3.92588,-3.927 0.78803,-7.465 1.17669,-1.963 4.32168,-0.392 0,-2.359 -3.1432,0 -0.39223,-0.389 -0.39223,0.783 0,-0.394 -0.78625,-3.14 1.17848,-0.784 1.17669,0 0.39402,-1.574 0.78624,-0.785 1.56714,0 0,-1.177 0.78625,0 -0.39045,-7.464 -0.3958,-2.748 0,-0.788 6.28284,-0.392 2.35695,-0.392 2.35696,0 0.78624,3.926 -0.78624,0 0.39223,3.143 -0.78447,0 0.39224,0.784 0,2.359 -0.39224,0 0,0.786 -0.78446,0 0,0.786 -0.39401,0.785 -0.39223,0.392 -0.78625,0.785 -0.39045,1.574 -1.18026,0 0,1.567 0.39223,0.394 0,0.786 0.39223,2.751 1.5725,0 0,1.963 -1.1767,0.786 -1.96472,0.785 -1.57249,0.786 0.39223,3.14 -1.57249,1.18 -0.78268,1.179 -0.39223,0.39 -0.39402,-0.39 -0.39045,0.39 -1.18026,0.788 -0.78268,1.175 m -2.74918,7.467 0.78446,0.39 -1.56892,0 0.39223,-0.39 0.39223,0"
+ class="c02164"
+ id="Lake and Peninsula, AK" />
+ <path
+ d="m 137.27518,564.93014 0.39045,-1.574 0.78625,-0.785 0.39223,-0.392 0.39401,-0.785 0,-0.786 0.78446,0 0,-0.786 0.39224,0 0,-2.359 -0.39224,-0.784 0.78447,0 -0.39223,-3.143 0.78624,0 -0.78624,-3.926 0,-0.394 -0.39224,-3.534 0,-0.786 0.39224,0 1.5707,-0.391 1.57071,0 0.78625,-0.395 4.71925,-0.393 0,1.573 1.1767,0 0.78803,0.392 -0.78803,0.786 -1.96651,1.571 -1.57427,2.749 -1.56893,4.322 0,1.963 -1.96294,3.139 -1.96472,1.182 -1.17848,1.568 -1.17847,0.786 -0.39223,2.357 0.39223,0.786 0.39401,-0.394 1.56893,-0.392 1.96828,1.572 0,0.393 -0.78981,0 0.39223,1.178 -1.96293,0 0.39223,0.784 -1.17491,0.396 -2.75276,0 -0.39223,-2.751 0,-0.786 -0.39223,-0.394 0,-1.567 1.18026,0 m 11.39254,-2.359 2.74384,-1.963 0.79159,-1.572 -0.79159,0 -1.17313,1.176 -0.78625,-0.39 -0.78446,-0.786 0.39401,-2.357 0.77912,-1.963 0.39758,-1.574 0,-1.568 -0.78625,-1.572 1.57428,-0.786 2.35339,-2.357 0.78802,0.786 1.1767,0 1.17669,-0.786 1.17848,0.394 1.57249,0 0.39223,0.392 1.18026,0.786 0.78268,0 0,0.394 0.39402,1.569 0,0.394 0.39223,0.394 0.39401,3.534 0,0.394 -3.1432,0.392 -1.56892,0.785 0,2.358 -2.75097,2.355 -0.39223,-0.392 -0.78447,0.786 -0.78802,1.962 -3.539,1.18 -1.17313,-0.788 0,-1.177"
+ class="c02122"
+ id="Kenai Peninsula, AK" />
+ <path
+ d="m 156.52126,546.85914 -1.96294,-1.569 0.39402,-0.394 0,-0.391 0.39223,0 0.78624,-1.572 0.39045,-0.391 0.3958,0 0.39045,-0.395 0.39223,0 0.3958,0.395 3.14141,-0.788 0,1.179 0.39045,1.177 0,1.18 0.39402,0.392 0,1.571 -1.1767,0 0,0.786 0.39223,0.392 -0.39223,0 -1.18026,-0.786 -0.39223,-0.392 -1.57249,0 -1.17848,-0.394"
+ class="c02020"
+ id="Anchorage, AK" />
+ <path
+ d="m 162.02142,546.46814 0,-0.786 -0.39402,-0.392 0,-1.18 -0.39045,-1.177 0,-1.179 3.13964,-0.394 2.35873,-0.39 -0.39401,-0.396 0.39401,0 0.78268,-0.39 -0.78268,-4.32 0,-0.394 -0.78624,-1.965 1.96472,-0.392 0.39045,-0.391 -0.39045,-1.18 0,-0.392 -1.17848,-5.106 -0.39401,-1.179 1.57249,-0.786 1.17669,-0.394 0.39224,0 0.78446,-0.39 1.18026,0 1.17848,0.39 0.39223,0 6.67864,-1.569 0.78446,1.179 0.39223,1.963 0,1.178 1.17848,0 0.39399,-1.178 1.56895,0 1.9647,1.178 0.78448,2.751 0.78801,0.392 0,0.392 0.39224,1.571 3.14141,-1.18 3.92768,13.355 -0.78626,0 -2.74919,0.788 0,-0.788 -0.78446,0 -5.10255,1.573 -1.96653,5.104 -5.1079,-1.569 0,-1.18 -1.57072,0.786 0.78625,0.785 -3.1432,-1.177 -3.53365,3.143 -0.78803,-1.18 0.3958,-1.177 0.78446,0 1.57071,-0.786 0.78624,-0.786 0,-0.785 -1.96472,0.785 -1.57249,0 -0.39045,-0.394 1.57071,-1.177 0.39223,-0.392 -1.57249,0.784 -0.39045,-0.784 -0.39401,0.392 0,-1.965 -2.35517,1.179 -0.39224,1.178 -2.74918,1.179 -0.3958,0 0.3958,-2.357 -0.78625,0.394 -0.39223,1.963 1.17848,0.392 1.17848,2.749 -0.39402,1.573 1.57071,1.569 -0.78625,1.18 -2.7474,0.394 0,-0.394 -0.39401,-3.534 -0.39223,-0.394 0,-0.394 -0.39402,-1.569 0,-0.394 -0.39045,0 -0.39223,-0.392 0,-0.786 1.1767,0 0,-0.785 m 5.89238,-0.786 0,0.392 -0.78624,0 0.78624,-0.392 m -1.17848,1.963 0.78268,0.394 -0.78268,0.392 0,-0.786 m -2.35873,0 0.78803,0.394 -0.39402,0.392 -0.39401,-0.392 0,-0.394 m 1.96472,1.18 0,3.928 -1.17669,-0.786 0.39044,-1.965 0.78625,-1.177 m 2.74918,3.142 -0.78624,1.175 -0.39045,2.36 -1.57249,0.785 0,-1.571 1.96294,-3.142 0,-0.786 0.39401,-0.394 1.17848,0.394 -0.78625,1.179"
+ class="c02261"
+ id="Valdez-Cordova, AK" />
+ <path
+ d="m 157.69974,542.14714 -0.39223,0 -0.39045,0.395 -0.3958,0 -0.39045,0.391 -0.78624,1.572 -0.39223,0 0,0.391 -3.1432,0 -0.78268,0.786 -0.78803,-0.392 -1.1767,0 0,-1.573 -4.71925,0.393 -0.78625,0.395 -1.57071,0 0,-0.788 -0.39223,-0.394 0,-3.533 -0.39223,-0.393 0,-2.749 -0.39401,-3.926 4.32167,-0.395 0,-0.785 9.4296,-6.284 5.50016,-0.789 0,-0.39 -0.39402,-0.784 4.32168,-0.787 1.96294,-0.392 0.39223,2.749 0.39401,1.179 1.17848,5.106 0,0.392 0.39045,1.18 -0.39045,0.391 -1.96472,0.392 0.78624,1.965 0,0.394 0.78268,4.32 -0.78268,0.39 -0.39401,0 0.39401,0.396 -2.35873,0.39 -3.13964,0.394 -3.14141,0.788 -0.3958,-0.395"
+ class="c02170"
+ id="Matanuska-Susitna, AK" />
+ <path
+ d="m 169.09049,523.68514 -1.17669,0.394 -1.57249,0.786 -0.39223,-2.749 -1.96294,0.392 -1.57249,-7.071 2.35695,-0.788 0.78446,-1.173 1.18026,-0.788 1.17848,0 4.71213,-3.533 1.5707,0 0,-0.394 0.78625,-1.179 -0.78625,-1.178 0.39224,-0.785 0.39401,-0.786 1.17669,-0.788 0.39402,-2.355 0.39223,0 1.17848,-1.177 1.17848,-0.394 1.17848,-1.571 0,-1.176 0.78623,-1.179 9.81826,34.169 -3.14141,1.18 -0.39224,-1.571 0,-0.392 -0.78801,-0.392 -0.78448,-2.751 -1.9647,-1.178 -1.56895,0 -0.39399,1.178 -1.17848,0 0,-1.178 -0.39223,-1.963 -0.78446,-1.179 -6.67864,1.569 -0.39223,0 -1.17848,-0.39 -1.18026,0 -0.78446,0.39 -0.39224,0"
+ class="c02240"
+ id="SE Fairbanks, AK" />
+ <path
+ d="m 155.7368,513.47614 0,-0.392 -1.17848,-5.108 0.39402,0 3.92766,-0.786 0.39223,-0.786 1.57249,0 0.78268,-0.785 0.78625,-1.178 0.78624,-0.396 0.78625,0.396 0,0.788 0.78446,0.784 0.39402,0 0.78446,1.177 0.39223,0.392 4.32168,-1.569 1.96294,-0.394 -0.39224,0.785 0.39224,2.751 -4.71213,3.533 -1.17848,0 -1.18026,0.788 -0.78446,1.173 -2.35695,0.788 -2.74919,0.396 -1.17848,-0.396 -0.39044,0 -1.57428,-1.961 -0.78446,0"
+ class="c02090"
+ id="Fairbanks North Stark, AK" />
+ <path
+ d="m 154.55832,525.25814 -9.4296,6.284 0,0.785 -4.32167,0.395 1.5707,-4.323 0,-1.179 -1.5707,-0.39 -0.39223,-2.361 2.36051,-0.39 0.7809,-1.571 -0.39045,-1.572 1.1767,-1.177 0.78624,0 1.18205,0.392 1.5707,-3.141 5.89061,-0.786 4.7139,-0.787 1.17848,0.396 2.74919,-0.396 1.57249,7.071 -4.32168,0.787 0.39402,0.784 0,0.39 -5.50016,0.789"
+ class="c02068"
+ id="Denali, AK" />
+ <path
+ d="m 140.02258,545.68214 0.39224,3.534 0,0.394 -2.35696,0 -2.35695,0.392 -6.28284,0.392 -5.10257,0 0,-0.784 -1.57249,0 0,1.178 -0.78268,0.786 -0.78625,0 0,-0.786 -4.71212,0 -1.96473,4.714 -0.78624,0 -0.78625,1.571 -1.17669,2.355 0,1.572 -1.17848,0 -0.78624,1.571 -0.39223,2.359 -0.78447,0.784 -0.78803,2.356 -0.78446,0 0,1.572 -1.56892,0 0,1.571 -1.17848,0.392 -2.75454,-0.392 0.78625,-0.394 0.78803,0.394 0.39401,-1.571 -0.39401,-2.359 -0.78803,-1.569 1.56893,-1.966 -0.7809,-2.354 0,-0.394 -1.96472,-3.927 -0.78268,1.572 -2.754538,1.567 -2.750968,0.396 -1.570708,-0.786 -0.392232,-1.177 -1.570708,-2.358 -3.535431,-3.145 2.356954,-1.568 -0.392232,-1.18 -0.786245,0 0,-0.392 0.392231,-0.392 2.358737,0 1.96294,-0.394 1.964723,-3.142 3.931228,-0.784 0.390448,-0.394 1.178481,-0.391 2.35873,0.785 3.53365,-0.785 1.18026,-1.182 1.96294,-1.176 -0.39401,-0.787 5.10435,0 0,-0.786 3.14499,0 0,-0.784 6.28283,-0.393 0,0.787 5.88882,0 1.96294,-0.394 3.53365,0 1.57427,-0.393 0.78268,0 0,-0.786 1.57428,-0.39 0,-0.396 0.39044,-0.39 0.78447,0 0.39401,-0.787 0,2.749 0.39223,0.393 0,3.533 0.39223,0.394 0,0.788 -1.5707,0.391 -0.39224,0 0,0.786 m -85.230093,1.963 0.395797,1.18 0.388666,0.785 1.572491,0.784 0.395797,0.394 -1.574274,0 -0.394014,-0.786 -1.171346,-1.571 0.386883,-0.786 m 28.672114,6.679 1.176694,-0.394 1.964723,1.572 -0.392232,2.355 -0.392231,0.788 -1.96294,0.783 -3.927662,-1.965 -1.18026,-1.176 0,-0.785 0.394014,-0.392 2.355171,0 1.572492,-1.18 0.392231,0.394"
+ class="c02050"
+ id="Bethel, AK" />
+ <path
+ d="m 109.78333,541.36014 0.39401,0.787 -1.96294,1.176 -1.18026,1.182 -3.53365,0.785 -2.35873,-0.785 -1.178481,0.391 -0.390448,0.394 -3.931228,0.784 -1.964723,3.142 -1.96294,0.394 -2.358737,0 0,-0.394 0.786246,-0.391 0.394014,-0.786 -1.572491,-0.786 -0.392232,0.786 -1.178477,-0.394 -1.962939,-3.928 0.392231,-2.357 4.319894,-5.496 1.96294,-1.574 -0.390449,-1.177 0.784463,-1.963 1.570708,-1.963 1.572492,-0.394 2.749185,2.357 1.182043,-0.394 1.959369,-1.963 0.78625,0.394 1.56893,2.355 4.71925,0 -0.39223,0 -0.3958,1.18 -0.39044,3.142 0,3.143 0.78624,0 -0.3958,1.177 0,0.786 0.3958,0.39 1.56893,0"
+ class="c02270"
+ id="Wade Hampton, AK" />
+ <path
+ d="m 112.92474,522.90214 0,1.567 -0.78446,0 0,0.789 -0.78446,0.786 -1.57249,0 -0.78625,0.786 0,2.357 -0.39045,0 0,2.355 -4.71925,0 -1.56893,-2.355 -0.78625,-0.394 1.18205,-1.573 1.17313,0.394 1.57784,0 1.96294,-0.394 1.17847,-2.355 0.39045,-1.18 -1.17848,-3.534 -0.78446,-1.178 0,-1.179 0.78446,0 1.17848,-0.784 0,-1.177 -1.56892,-1.574 -0.78625,1.178 -3.14142,0.787 -1.57427,1.176 -6.284617,-0.39 -3.1432,0.784 -4.319894,-1.57 -0.786246,-0.787 -0.392231,-0.788 0.392231,-1.173 -0.392231,-2.358 0.392231,-0.394 0.392232,-1.175 -3.535431,-1.573 -2.355171,-1.572 0,-1.175 7.069079,-3.931 0.786245,0.786 1.964723,0.394 0,-0.394 -1.178477,-0.786 0,-0.785 5.496588,-1.965 0.395797,3.93 0,3.141 0.786246,0.394 0,1.177 0.390448,0.392 0.395797,0 0,1.573 13.747711,0.394 0.78625,0 0,-0.788 1.5707,0 0,2.357 -0.39401,0 0,3.141 -0.78625,0 0,1.574 -0.78446,0 0,6.283 0.78446,0 0,0.786 m -22.783291,-21.999 -0.392232,0.395 0,-0.395 0.392232,0 m -9.426033,10.607 0.784462,-0.392 0.394015,0.784 -0.784463,0.396 -0.394014,-0.788 m -15.314853,9.426 0.388666,-0.785 0,1.179 2.356954,1.572 1.964722,-1.18 0.784463,0.394 0.786246,0.786 0,1.177 1.962939,1.573 3.1432,0.784 -0.786246,1.571 -1.570708,-0.787 -1.176694,0.787 -1.18026,-0.393 -2.355171,-2.749 -1.572491,-0.786 -0.784463,0 -1.572491,0.786 -1.173129,-0.786 0,-0.784 0.784463,-2.359 m 36.917887,4.716 0,0.784 -1.17669,0 0.39044,-0.784 0.78625,0"
+ class="c02180"
+ id="Nome, AK" />
+ <path
+ d="m 140.41482,537.43514 -0.39224,0 -0.39044,0.39 0,0.396 -1.57428,0.39 0,0.786 -0.78268,0 -1.57427,0.393 -3.53365,0 -1.96294,0.394 -5.88882,0 0,-0.787 -6.28283,0.393 0,0.784 -3.14499,0 0,0.786 -6.67328,0 -0.3958,-0.39 0,-0.786 0.3958,-1.177 -0.78624,0 0,-3.143 0.39044,-3.142 0.3958,-1.18 0.39223,0 0,-2.355 0.39045,0 0,-2.357 0.78625,-0.786 1.57249,0 0.78446,-0.786 0,-0.789 0.78446,0 0,-2.353 -0.78446,0 0,-6.283 0.78446,0 0,-1.574 0.78625,0 0,-3.141 0.39401,0 0,-2.357 -0.78446,0 0,-3.928 2.35517,0 0,-1.569 3.92766,0 0,-3.534 3.13964,0 0,1.568 1.57249,0 0,-1.568 1.57071,0 0.78446,0.783 0,0.785 1.57249,-0.395 0,-2.355 2.35517,0 -0.39401,-0.786 1.57071,-0.784 0.78268,0 0.39579,-1.571 -0.39579,-2.357 -0.78268,-0.786 -1.57071,0 0,-2.354 -1.56893,-1.572 0,-0.786 -0.78446,0 0,-1.963 1.17848,0 18.45448,-1.962 0.39758,0 8.24934,-1.576 3.14142,-0.786 -0.78625,-4.318 16.10289,-3.928 6.67862,23.174 -0.78623,1.179 0,1.176 -1.17848,1.571 -1.17848,0.394 -1.17848,1.177 -0.39223,0 -0.39402,2.355 -1.17669,0.788 -0.39401,0.786 -0.39224,0.785 0.78625,1.178 -0.78625,1.179 0,0.394 -1.5707,0 -0.39224,-2.751 0.39224,-0.785 -1.96294,0.394 -4.32168,1.569 -0.39223,-0.392 -0.78446,-1.177 -0.39402,0 -0.78446,-0.784 0,-0.788 -0.78625,-0.396 -0.78624,0.396 -0.78625,1.178 -0.78268,0.785 -1.57249,0 -0.39223,0.786 -3.92766,0.786 -0.39402,0 1.17848,5.108 0,0.392 0.78446,0 1.57428,1.961 0.39044,0 -4.7139,0.787 -5.89061,0.786 -1.5707,3.141 -1.18205,-0.392 -0.78624,0 -1.1767,1.177 0.39045,1.572 -0.7809,1.571 -2.36051,0.39 0.39223,2.361 1.5707,0.39 0,1.179 -1.5707,4.323 0.39401,3.926 -0.39401,0.787 -0.39223,0"
+ class="c02290"
+ id="Yukon-Koyukuk, AK" />
+ <path
+ d="m 730.3972,455.30114 6.44329,-0.587 -0.20859,0.61 -0.1355,0.595 0.27278,1.632 0.19968,0.465 0.16937,0.1 0.16938,0 0.14619,0.04 0.92888,1.022 0.14619,0.262 0.21216,0.458 0.57587,1.665 -9.49735,1.156 -0.15333,-1.822 -0.31556,-2.814 -1.9362,0.33 -2.44253,0.257 0.69353,-1.744 0.11054,-0.1 0.4582,-0.152 0.32983,-0.02 0.312,0.02 0.6668,0.159 0.50811,0.137 0.88431,0.08 0.29774,-0.03 1.24444,-1.067 -0.0802,-0.658"
+ class="c01069"
+ id="Houston, AL" />
+ <path
+ d="m 729.63413,448.33314 -0.21751,-2.002 3.88844,-0.337 0.10341,-0.176 0.29774,-0.892 0.51525,-0.651 0.0981,-0.06 0.11053,0 0.32983,0.104 0.18542,0.162 2.13766,5.329 -0.24247,4.901 -6.44329,0.587 -0.76307,-6.968"
+ class="c01067"
+ id="Henry, AL" />
+ <path
+ d="m 723.39765,458.81114 1.57428,-0.144 2.44253,-0.257 1.9362,-0.33 0.31556,2.813 0.15333,1.823 -0.19611,0.03 -10.49933,1.215 -2.98274,0.296 -0.58478,-4.525 7.84106,-0.924"
+ class="c01061"
+ id="Geneva, AL" />
+ <path
+ d="m 723.19619,449.07314 6.43794,-0.74 0.76307,6.968 0.0802,0.658 -1.24444,1.067 -0.29774,0.03 -0.88431,-0.08 -0.50811,-0.137 -0.6668,-0.159 -0.312,-0.02 -0.32983,0.02 -0.4582,0.152 -0.11054,0.1 -0.69353,1.744 -1.57428,0.144 -0.99484,-9.651 0.79338,-0.09"
+ class="c01045"
+ id="Dale, AL" />
+ <path
+ d="m 722.40281,449.16014 0.99484,9.651 -7.84106,0.924 -0.60261,-5.672 -0.22642,-2.059 0.73989,-0.08 0.23177,-0.193 -0.23177,-1.833 6.93536,-0.74"
+ class="c01031"
+ id="Coffee, AL" />
+ <path
+ d="m 708.81378,452.72114 1.92906,-0.243 1.95759,-0.231 0.36193,-0.03 0.082,0.335 0.15333,1.325 0.32983,0.3 1.32645,-0.113 0.60261,5.672 0.58478,4.525 -3.94549,0.401 -5.89951,0.565 -0.65075,-4.493 -0.76842,-7.586 3.93658,-0.426"
+ class="c01039"
+ id="Covington, AL" />
+ <path
+ d="m 680.80846,463.68914 0.16046,0.321 0.42788,1.817 0.58657,3.121 -0.83795,1.548 -0.55447,2.168 -0.0374,0.49 0.33518,0.811 0.42789,0.822 -0.28348,-0.1 -0.0731,0.05 -0.9057,0.963 -0.54734,3.368 -1.7276,3.334 -1.14817,-0.367 -1.60815,-0.03 -0.44036,0.07 -0.2086,0.07 -0.37084,0.392 0,0 -1.0198,-8.363 -0.73811,-5.996 -0.34053,-2.655 2.00038,-0.158 1.97008,-0.617 3.99362,-0.564 0.93958,-0.506"
+ class="c01097"
+ id="Mobile, AL" />
+ <path
+ d="m 684.60954,460.25014 3.02374,0.957 0.83439,5.632 -0.44394,3.078 0.25852,0.438 2.00038,2.181 0.62935,0.433 0.11054,0.04 0.32983,0.06 0.66679,0.344 0.88431,0.547 0.24068,0.394 0.0713,0.273 0.0321,0.378 -0.19968,5.023 -0.26565,2.513 -1.2694,0.573 -2.67609,0.946 -2.80445,0.708 -0.74703,0.12 -2.45857,0.155 -0.0963,-0.129 1.0198,-0.37 2.66718,-1.705 -3.53543,-7.176 -0.25674,-0.36 -0.11945,-0.1 -0.9164,-0.33 -0.27277,-0.09 -0.42789,-0.822 -0.33518,-0.811 0.0374,-0.49 0.55447,-2.168 0.83795,-1.548 -0.58657,-3.121 -0.42788,-1.817 -0.16046,-0.321 0.45998,-0.74 3.3411,-2.699"
+ class="c01003"
+ id="Baldwin, AL" />
+ <path
+ d="m 705.64562,460.73314 0.65075,4.493 -1.88628,0.142 -7.39356,0.66 -8.54886,0.811 -0.83439,-5.632 1.14639,0.296 0.19433,-0.08 1.09112,-0.77 1.22126,-0.141 12.96147,-1.234 -0.0321,0.152 -0.0214,1.004 0.0214,0.208 0.066,0.09 0.15868,0.136 0.89143,0.02 0.31379,-0.161"
+ class="c01053"
+ id="Escambia, AL" />
+ <path
+ d="m 704.8772,453.14714 0.76842,7.586 -0.31379,0.16 -0.89143,-0.02 -0.15868,-0.135 -0.066,-0.09 -0.0214,-0.208 0.0214,-1.004 0.0321,-0.152 -12.96147,1.234 0.009,-0.132 0.13015,-0.314 2.11983,-3.007 1.18917,-1.334 1.39064,-4.074 0.0571,-0.417 2.00038,-1.808 1.64559,-0.907 0.44394,-0.218 0.11945,-0.02 0.25139,2.749 1.03584,1.951 0.51347,0.387 2.685,-0.225"
+ class="c01035"
+ id="Conecuh, AL" />
+ <path
+ d="m 670.2093,452.19814 7.31333,-0.627 0.0232,0.973 0.34765,1.261 1.00376,0.861 0.26565,0.16 0.8112,0.282 0.72385,0.182 0.76307,0.701 0.55269,2.234 0.025,0.144 -0.0553,0.749 -0.1872,0.706 -0.39223,0.41 -0.34588,0.465 -0.27278,0.925 0.48316,1.325 -0.45998,0.74 -0.93958,0.506 -3.99362,0.564 -1.97008,0.617 -2.00038,0.158 -1.6955,-13.336"
+ class="c01129"
+ id="Washington, AL" />
+ <path
+ d="m 669.92047,438.10514 9.47595,-0.829 -0.90034,0.128 -0.50099,0.314 -0.26387,0.289 -1.46908,5.48 0.0891,0.845 0.0963,0.232 0.14263,0.159 0.16046,0.09 0.4992,0.06 0.27278,6.7 -7.31333,0.627 -0.46533,-4.507 0.13015,-7.707 0.0464,-1.879"
+ class="c01023"
+ id="Choctaw, AL" />
+ <path
+ d="m 685.10874,444.17014 3.56752,3.432 -0.30487,0.369 -0.70067,2.771 0.28883,3.081 0.25138,2.248 -0.14441,0.699 -0.41184,0.547 -0.23356,0.137 -0.25673,-0.04 -0.41006,-0.315 -0.23891,0.02 -0.21751,0.08 -1.79713,1.526 -0.3334,0.834 0,0.105 0.0499,0.241 0.0713,0.135 0.32092,0.211 -3.3411,2.699 -0.48316,-1.325 0.27278,-0.925 0.34588,-0.465 0.39223,-0.41 0.1872,-0.706 0.0553,-0.749 -0.025,-0.144 -0.55269,-2.234 -0.76307,-0.701 -0.72385,-0.182 -0.8112,-0.282 -0.26565,-0.16 -1.00376,-0.861 -0.34765,-1.261 -0.0232,-0.973 -0.27278,-6.7 7.85889,-0.701"
+ class="c01025"
+ id="Clarke, AL" />
+ <path
+ d="m 700.19895,446.50214 0.19255,1.783 -0.11945,0.02 -0.44394,0.218 -1.64559,0.907 -2.00038,1.808 -0.0571,0.417 -1.39064,4.074 -1.18917,1.334 -2.11983,3.007 -0.13015,0.314 -0.009,0.132 -1.22126,0.141 -1.09112,0.77 -0.19433,0.08 -1.14639,-0.296 -3.02374,-0.957 -0.32092,-0.21 -0.0713,-0.136 -0.0499,-0.241 0,-0.105 0.3334,-0.834 1.79713,-1.526 0.21751,-0.08 0.23891,-0.02 0.41006,0.315 0.25673,0.04 0.23356,-0.137 0.41184,-0.547 0.14441,-0.699 -0.25138,-2.248 -0.28883,-3.081 0.70067,-2.771 0.30487,-0.369 5.20063,-0.529 2.82764,-0.209 3.49442,-0.362"
+ class="c01099"
+ id="Monroe, AL" />
+ <path
+ d="m 688.3393,437.55014 0.5206,-0.139 0.12123,0.07 2.40153,1.68 3.09506,2.852 5.24699,-0.506 1.14103,1.881 -0.66679,3.111 -3.49442,0.362 -2.82764,0.209 -5.20063,0.529 -3.56752,-3.432 0.80407,-0.403 -0.24247,-2.906 1.69551,-2.988 0.16224,-0.276 0.17473,-0.06 0.33696,-0.02 0.29952,0.04"
+ class="c01131"
+ id="Wilcox, AL" />
+ <path
+ d="m 700.86574,443.39114 7.92486,-0.836 0.61866,5.659 0.0874,1.421 -0.98771,0.103 0.30487,2.983 -3.93658,0.426 -2.685,0.225 -0.51347,-0.387 -1.03584,-1.951 -0.25139,-2.749 -0.19255,-1.783 0.66679,-3.111"
+ class="c01013"
+ id="Butler, AL" />
+ <path
+ d="m 713.75589,442.00014 1.71156,7.9 0.23177,1.833 -0.23177,0.193 -0.73989,0.08 0.22642,2.059 -1.32645,0.113 -0.32983,-0.3 -0.15333,-1.325 -0.082,-0.335 -0.36193,0.03 -1.95759,0.231 -1.92906,0.243 -0.30487,-2.983 0.98771,-0.103 -0.0874,-1.421 -0.61866,-5.659 0.60974,-2.058 1.98434,-0.224 0.23534,1.986 2.13587,-0.259"
+ class="c01041"
+ id="Crenshaw, AL" />
+ <path
+ d="m 717.3145,439.67214 0.79516,-0.332 0.84508,0.07 0.36014,0.129 0.93244,1.76 1.46196,1.857 2.58872,-0.283 -1.10181,6.197 -0.79338,0.09 -6.93536,0.74 -1.71156,-7.9 3.55861,-2.328"
+ class="c01109"
+ id="Pike, AL" />
+ <path
+ d="m 727.72825,434.27714 0.6757,1.972 -0.312,0.2 0.16759,2.009 0.12837,0.843 -1.58319,0.53 -1.52436,0.572 -0.8843,1.735 -0.1141,0.556 0.016,0.182 -2.58872,0.283 -1.46196,-1.857 -0.93244,-1.76 -0.36014,-0.129 -0.84508,-0.07 -0.79516,0.332 0.95562,-5.281 1.18383,0.779 0.15867,0.06 8.11563,-0.95"
+ class="c01011"
+ id="Bullock, AL" />
+ <path
+ d="m 721.77346,426.55514 0.041,0.323 4.17013,1.51 0.97345,-0.112 0.31378,1.993 0.45642,4.008 -8.11563,0.95 -0.15867,-0.06 -1.18383,-0.779 -2.35517,-3.125 2.46036,-1.953 1.70442,-0.21 0.57944,-2.088 1.11429,-0.46"
+ class="c01087"
+ id="Macon, AL" />
+ <path
+ d="m 700.8497,434.62514 0.52594,-1.197 0.0606,-0.107 0.85043,-0.151 2.30704,-0.273 2.37834,1.038 2.42827,6.562 -0.60974,2.058 -7.92486,0.836 -1.14103,-1.881 1.12499,-6.885"
+ class="c01085"
+ id="Lowndes, AL" />
+ <path
+ d="m 708.47682,432.27014 2.64934,-2.404 0.21751,0.03 0.28348,0.1 0.15154,0.102 0.9164,0.989 -0.0892,0.154 1.52614,0.289 1.33537,0.112 0.4475,-0.369 2.35517,3.125 -0.95562,5.281 -3.55861,2.328 -2.13587,0.259 -0.23534,-1.986 -1.98434,0.225 -2.42827,-6.563 1.50475,-1.665"
+ class="c01101"
+ id="Montgomery, AL" />
+ <path
+ d="m 715.4104,423.55114 2.37121,-0.24 0.0553,0.02 0.041,0.306 -0.17829,0.674 0.54913,4.75 0.0624,0.184 0.0642,0.07 -2.46036,1.952 -0.4475,0.369 -1.33537,-0.112 -1.52614,-0.289 0.0892,-0.154 -0.9164,-0.989 -0.15154,-0.102 -0.28348,-0.1 -0.21751,-0.03 -2.64934,2.403 -0.73276,-6.821 0.57943,-1.15 7.08691,-0.747"
+ class="c01051"
+ id="Elmore, AL" />
+ <path
+ d="m 707.74406,425.44814 0.73276,6.822 -1.50475,1.665 -2.37834,-1.038 -2.30704,0.273 -0.85043,0.151 -0.0606,0.107 -0.52594,1.197 -2.67431,-7.232 1.93442,-0.1 1.9772,-0.224 -0.10876,-1.011 5.76581,-0.612"
+ class="c01001"
+ id="Autauga, AL" />
+ <path
+ d="m 696.093,426.08114 2.08239,1.312 2.67431,7.232 -1.12499,6.885 -5.24699,0.506 -3.09506,-2.852 -2.40153,-1.68 -0.12123,-0.07 -0.5206,0.139 -0.10341,-0.982 0.98593,-0.09 -0.39223,-4.012 3.33397,-0.335 2.62616,-0.348 0.15511,-0.328 0.52238,-1.815 0.29596,-1.394 0.32983,-2.161"
+ class="c01047"
+ id="Dallas, AL" />
+ <path
+ d="m 681.25239,432.16614 1.59032,-0.137 0.10341,1.005 3.93836,-0.378 1.35141,3.912 0.10341,0.982 -0.29952,-0.04 -0.33696,0.02 -0.17473,0.06 -0.16224,0.276 -1.69551,2.988 0.24247,2.906 -0.80407,0.403 -7.85889,0.701 -0.4992,-0.06 -0.16046,-0.09 -0.14263,-0.159 -0.0963,-0.232 -0.0891,-0.845 1.46908,-5.48 0.26387,-0.289 0.50099,-0.314 0.90034,-0.128 -0.84686,-0.708 -1.47622,-0.563 -0.041,-0.136 0.0339,-0.923 0.10341,-0.289 2.14479,-2.179 0.16046,-0.112 0.97166,-0.305 0.80586,0.105"
+ class="c01091"
+ id="Marengo, AL" />
+ <path
+ d="m 670.21999,422.28914 3.21987,-0.376 -0.2086,1.959 0.3851,1.68 2.31595,4.862 0.4582,0.563 0.0624,0.02 0.8219,-0.241 0.64005,-0.297 0.14619,-0.145 0.37084,-0.258 0.32805,-0.161 0.16937,0 0.19968,0.121 1.31754,2.042 -0.97166,0.305 -0.16046,0.112 -2.14479,2.179 -0.10341,0.288 -0.0339,0.924 0.041,0.135 1.47622,0.564 0.84686,0.708 -9.47595,0.829 0.13728,-6.246 0.1355,-8.131 0.0267,-1.439"
+ class="c01119"
+ id="Sumter, AL" />
+ <path
+ d="m 688.05047,423.46414 1.95046,-0.194 0.0963,1.005 1.32824,-0.128 4.41082,-0.537 0.25673,2.471 -0.32983,2.161 -0.29596,1.394 -0.52238,1.815 -0.15511,0.328 -2.62616,0.348 -3.33397,0.335 0.39223,4.012 -0.98593,0.09 -1.35141,-3.912 -0.37619,-3.984 0.76307,-2.992 0.77911,-2.216"
+ class="c01105"
+ id="Perry, AL" />
+ <path
+ d="m 705.02696,418.45614 3.29653,5.842 -0.57943,1.15 -5.76581,0.612 0.10876,1.011 -1.9772,0.224 -1.93442,0.1 -2.08239,-1.312 -0.25673,-2.471 2.74027,-0.242 -0.32983,-3.391 -0.24247,-1.51 -0.0553,-0.509 3.08436,-0.235 2.10736,-0.11 0.32804,0.442 0.61866,0.385 0.93957,0.02"
+ class="c01021"
+ id="Chilton, AL" />
+ <path
+ d="m 711.37576,415.86214 3.18243,0 0.85221,7.689 -7.08691,0.747 -3.29653,-5.842 0.30487,-1.945 6.04393,-0.649"
+ class="c01037"
+ id="Coosa, AL" />
+ <path
+ d="m 721.29922,414.75314 1.15173,-0.137 0.95562,8.687 -1.63311,3.252 -1.11429,0.46 -0.57944,2.088 -1.70442,0.211 -0.0642,-0.07 -0.0624,-0.184 -0.54913,-4.75 0.17829,-0.674 -0.041,-0.306 -0.0553,-0.02 -2.37121,0.24 -0.85221,-7.689 6.74103,-1.109"
+ class="c01123"
+ id="Tallapoosa, AL" />
+ <path
+ d="m 716.56035,406.16314 -0.62757,0.579 0.0143,0.168 1.99503,-0.209 0.29061,-0.363 -0.0339,-0.344 2.32129,-0.195 0.77912,8.954 -6.74103,1.109 -3.18243,0 -0.18363,-2.097 1.56714,-2.476 1.98433,-2.211 0.80408,-2.805 1.01267,-0.11"
+ class="c01027"
+ id="Clay, AL" />
+ <path
+ d="m 710.54851,402.61014 1.80961,-0.09 0.54378,0.601 0.17829,0.861 0.54734,0.451 3.80108,-0.378 0.0463,0.674 -0.91461,1.432 -1.01267,0.11 -0.80408,2.805 -1.98433,2.211 -1.56714,2.476 0.18363,2.097 -6.04393,0.649 -0.0802,-1.469 2.17867,-3.206 0.17829,-1.391 -0.26743,-0.385 -0.52951,-0.379 2.03425,-2.498 0.79338,-1.712 -0.0874,-0.112 -0.19255,-0.426 -0.009,-0.12 0.88431,-2.027 0.31378,-0.176"
+ class="c01121"
+ id="Talladega, AL" />
+ <path
+ d="m 703.83066,406.38814 2.98096,3.293 0.52951,0.379 0.26743,0.385 -0.17829,1.391 -2.17867,3.206 0.0802,1.469 -0.30487,1.945 -0.93957,-0.02 -0.61866,-0.385 -0.32804,-0.442 -2.10736,0.11 -3.08436,0.235 0.0553,0.509 -3.2056,-4.253 0.90035,-0.315 0.55447,-0.303 0.39401,-0.291 0.71672,-1.253 3.6531,-3.543 1.32824,-0.146 1.52613,-1.476 -0.041,-0.499"
+ class="c01117"
+ id="Shelby, AL" />
+ <path
+ d="m 694.05162,414.27914 0.74702,-0.07 3.2056,4.253 0.24247,1.51 0.32983,3.391 -2.74027,0.242 -4.41082,0.537 -1.32824,0.128 -0.0963,-1.005 -1.95046,0.194 -0.28347,-2.965 1.9772,-0.242 -0.0553,-2.033 0.48138,-0.948 1.44769,-1.607 0.81833,-0.909 0.16046,-0.1 1.25336,-0.369 0.20147,-0.02"
+ class="c01007"
+ id="Bibb, AL" />
+ <path
+ d="m 682.14383,420.92314 5.62317,-0.424 0.28347,2.965 -0.77911,2.216 -0.76307,2.992 0.37619,3.984 -3.93836,0.378 -0.10341,-1.005 -1.59032,0.137 1.02159,-2.154 -0.95027,-1.134 -0.75416,-2.242 -0.34944,-1.751 -0.0303,-0.49 1.95403,-3.472"
+ class="c01065"
+ id="Hale, AL" />
+ <path
+ d="m 679.52301,417.75014 2.62082,3.173 -1.95403,3.472 0.0303,0.49 0.34944,1.751 0.75416,2.242 0.95027,1.134 -1.02159,2.154 -0.80586,-0.105 -1.31754,-2.041 -0.19968,-0.122 -0.16937,0 -0.32805,0.161 -0.37084,0.258 -0.14619,0.145 -0.64005,0.297 -0.8219,0.241 -0.0624,-0.02 -0.4582,-0.563 -2.31595,-4.862 -0.3851,-1.68 0.2086,-1.959 -0.0232,-0.103 1.65628,-1.118 1.45304,-0.811 0.64362,-0.227 2.35339,-1.904"
+ class="c01063"
+ id="Greene, AL" />
+ <path
+ d="m 678.72785,409.21514 0.79516,8.535 -2.35339,1.904 -0.64362,0.226 -1.45304,0.812 -1.65628,1.117 0.0232,0.104 -3.21987,0.376 0.1355,-6.896 0.10519,-5.704 6.25787,-0.288 2.0093,-0.186"
+ class="c01107"
+ id="Pickens, AL" />
+ <path
+ d="m 686.49225,406.73314 0.34231,-0.02 1.68124,0.177 0.16046,1.679 0.98058,-0.06 -0.66679,0.589 0.33696,1.116 1.28723,1.405 0.76842,0.666 1.76147,1.054 0.90749,0.933 -0.20147,0.02 -1.25336,0.369 -0.16046,0.1 -0.81833,0.909 -1.44769,1.607 -0.48138,0.948 0.0553,2.033 -1.9772,0.242 -5.62317,0.424 -2.62082,-3.173 -0.79516,-8.535 1.90589,-0.06 1.4049,-0.16 -0.0981,-1.181 0.58835,-0.907 3.96332,-0.177"
+ class="c01125"
+ id="Tuscaloosa, AL" />
+ <path
+ d="m 694.94483,401.00314 1.25158,-0.772 2.37121,-0.167 2.16084,1.26 1.43878,0.139 0.66679,-0.06 0.43502,0.972 0.14442,1.501 -0.12124,0.513 -0.16046,0.02 -0.12836,0.344 0.11945,1.336 0.18542,0.167 0.52238,0.138 0.041,0.499 -1.52613,1.476 -1.32824,0.146 -3.6531,3.543 -0.71672,1.253 -0.39401,0.291 -0.55447,0.303 -0.90035,0.315 -0.74702,0.07 -0.90749,-0.933 -1.76147,-1.054 -0.76842,-0.666 -1.28723,-1.405 -0.33696,-1.116 0.66679,-0.589 0.42611,-0.24 0.54555,-0.402 2.08953,-2.305 0.40293,-0.709 0.34409,-0.697 1.21414,-2.468 0.26564,-0.692"
+ class="c01073"
+ id="Jefferson, AL" />
+ <path
+ d="m 690.82997,397.25914 3.83317,2.773 0.28169,0.971 -0.26564,0.692 -1.21414,2.468 -0.34409,0.697 -0.40293,0.709 -2.08953,2.306 -0.54555,0.401 -0.42611,0.24 -0.98058,0.06 -0.16046,-1.679 -1.68124,-0.177 -0.34231,0.02 -0.18542,-2.002 -1.98612,0.113 -0.42254,-4.031 -1.9879,0.07 -0.082,-0.997 -0.18364,-2.002 9.18535,-0.626"
+ class="c01127"
+ id="Walker, AL" />
+ <path
+ d="m 670.74772,397.51614 4.17192,-0.209 0.72384,0.635 0.32092,3.753 0.57052,5.584 0.18363,2.122 -6.25787,0.288 0.10162,-4.894 0.18542,-7.279"
+ class="c01075"
+ id="Lamar, AL" />
+ <path
+ d="m 675.84316,400.29714 5.9851,-0.41 0.082,0.997 1.9879,-0.07 0.42254,4.031 1.98612,-0.113 0.18542,2.002 -3.96332,0.177 -0.58835,0.907 0.0981,1.181 -1.4049,0.16 -1.90589,0.06 -2.0093,0.186 -0.18363,-2.122 -0.57052,-5.584 -0.12124,-1.398"
+ class="c01057"
+ id="Fayette, AL" />
+ <path
+ d="m 671.02228,385.35214 11.47456,-0.651 0.53842,6.049 -1.98612,0.119 -1.58853,0.07 -4.163,0.291 -4.41261,0.18 0.0731,-3.298 0.0642,-2.756"
+ class="c01059"
+ id="Franklin, AL" />
+ <path
+ d="m 670.885,391.40614 4.41261,-0.18 4.163,-0.291 1.58853,-0.07 0.59548,7.016 0.18364,2.002 -5.9851,0.41 -0.19968,-2.355 -0.72384,-0.635 -4.17192,0.209 0.0178,-0.658 0.11945,-5.452"
+ class="c01093"
+ id="Marion, AL" />
+ <path
+ d="m 683.03526,390.75014 7.90703,-0.603 -0.11232,7.112 -9.18535,0.626 -0.59548,-7.016 1.98612,-0.119"
+ class="c01133"
+ id="Winston, AL" />
+ <path
+ d="m 690.91198,389.81014 9.94663,-0.747 2.53168,0.803 -0.5937,0.04 -0.55804,0.187 -0.0784,0.06 -1.06081,2.659 -0.10341,0.178 -2.52454,3.231 -1.70264,1.501 -1.39955,1.385 -0.70602,0.931 -3.83317,-2.773 0.11232,-7.112 -0.0303,-0.337"
+ class="c01043"
+ id="Cullman, AL" />
+ <path
+ d="m 703.39029,389.86614 3.18064,3.4 -0.29774,0.65 -0.58478,3.135 0.84329,-0.09 -0.67749,1.77 -0.4885,0.633 -0.5313,0.572 -0.15154,0 -0.16937,-0.1 -2.42649,0.779 0.0802,0.845 -1.43878,-0.139 -2.16084,-1.26 -2.37121,0.167 -1.25158,0.772 -0.28169,-0.971 0.70602,-0.931 1.39955,-1.385 1.70264,-1.501 2.52454,-3.231 0.10341,-0.178 1.06081,-2.659 0.0784,-0.06 0.55804,-0.187 0.5937,-0.04"
+ class="c01009"
+ id="Blount, AL" />
+ <path
+ d="m 706.5317,396.96014 -0.016,-0.08 0.11945,-0.249 0.42611,-0.699 0.25851,-0.193 1.48692,-0.144 0.18363,0.103 0.14263,0.25 0.41898,0.973 0.4992,0.475 0.24069,0.151 0.39401,-0.159 0.99484,1.316 0.23534,0.216 0.0642,0.146 0.025,1.471 -1.44948,1.309 -0.0713,0.235 0.0642,0.528 -0.31378,0.176 -0.88431,2.027 0.009,0.12 0.19255,0.426 0.0874,0.112 -0.79338,1.712 -2.03425,2.498 -2.98096,-3.293 -0.52238,-0.138 -0.18542,-0.167 -0.11945,-1.336 0.12836,-0.344 0.16046,-0.02 0.12124,-0.513 -0.14442,-1.501 -0.43502,-0.972 -0.66679,0.06 -0.0802,-0.845 2.42649,-0.779 0.16937,0.1 0.15154,0 0.5313,-0.572 0.4885,-0.633 0.67749,-1.77"
+ class="c01115"
+ id="St. Clair, AL" />
+ <path
+ d="m 717.53201,395.14514 4.00076,0.185 -1.84705,1.728 0.24069,2.362 0.30487,2.871 -0.27278,0.522 -1.50118,1.815 -0.98236,0.103 -0.0463,-0.674 -3.80108,0.378 -0.54734,-0.451 -0.17829,-0.861 -0.54378,-0.601 -1.80961,0.09 -0.0642,-0.528 0.0713,-0.235 1.44948,-1.309 -0.025,-1.471 -0.0642,-0.146 -0.23534,-0.216 0.30666,-0.03 0.49742,-0.28 0.46711,-0.363 1.04476,-1.077 0.56161,-0.906 0.32091,-0.201 1.13391,-0.113 1.55823,0.168 -0.0392,-0.763"
+ class="c01015"
+ id="Calhoun, AL" />
+ <path
+ d="m 710.05109,390.54314 4.9332,-0.508 0.26565,2.049 0.83616,0.07 1.42987,2.513 0.016,0.482 0.0392,0.763 -1.55823,-0.168 -1.13391,0.113 -0.32091,0.201 -0.56161,0.906 -1.04476,1.077 -0.46711,0.363 -0.49742,0.28 -0.30666,0.03 -0.99484,-1.315 -0.39401,0.158 -0.24069,-0.151 -0.4992,-0.475 -0.41898,-0.973 -0.14263,-0.25 -0.18363,-0.103 -1.48692,0.144 -0.25851,0.193 -0.42611,0.699 -0.11945,0.249 0.016,0.08 -0.84329,0.09 0.58478,-3.134 0.29774,-0.651 3.48016,-2.723"
+ class="c01055"
+ id="Etowah, AL" />
+ <path
+ d="m 704.95565,381.79114 3.34288,-0.33 0.23177,1.327 1.76148,1.324 -0.24069,6.431 -3.48016,2.723 -3.18064,-3.4 -2.53168,-0.803 0.0392,-5.61 0.41184,0.957 0.65075,0.401 0.62578,0.107 0.65075,-0.217 1.8631,-0.951 0.26565,-0.682 0.14619,-0.876 -0.10697,-0.297 -0.24782,-0.12 -0.20146,0.02"
+ class="c01095"
+ id="Marshall, AL" />
+ <path
+ d="m 696.39074,383.78414 4.5071,-0.331 -0.0392,5.61 -9.94663,0.747 -0.71671,-8.575 6.19547,2.549"
+ class="c01103"
+ id="Morgan, AL" />
+ <path
+ d="m 683.94274,379.16314 3.18956,0.665 3.06297,1.407 0.71671,8.575 0.0303,0.337 -7.90703,0.603 -0.53842,-6.049 1.4459,-5.538"
+ class="c01079"
+ id="Lawrence, AL" />
+ <path
+ d="m 671.21483,378.12614 0.71494,-0.336 0.32269,-0.08 1.30863,0.439 0.41719,0.308 0.28348,0.383 0.12837,0.241 0.15154,0.515 0.22464,0.339 1.48691,1.166 0.15155,0.09 0.56339,0.169 0.85221,-0.153 0.49029,-0.275 0.0963,-0.103 0.32092,-0.555 2.17688,-1.292 0.73989,-0.314 0.40293,-0.09 0.14441,0.02 1.75078,0.57 -1.4459,5.538 -11.47456,0.651 0.19255,-7.226"
+ class="c01033"
+ id="Colbert, AL" />
+ <path
+ d="m 687.3195,374.22314 0.23177,-0.02 -0.41897,5.623 -3.18956,-0.665 -1.75078,-0.57 -0.14441,-0.02 -0.40293,0.09 -0.73989,0.314 -2.17688,1.292 -0.32092,0.555 -0.0963,0.103 -0.49029,0.275 -0.85221,0.153 -0.56339,-0.169 -0.15155,-0.09 -1.48691,-1.166 -0.22464,-0.339 -0.15154,-0.515 -0.12837,-0.241 -0.28348,-0.383 -0.41719,-0.308 -1.30863,-0.439 -0.32269,0.08 -0.71494,0.335 -2.10735,-2.225 3.99541,-0.577 7.07087,-0.548 7.14574,-0.552"
+ class="c01077"
+ id="Lauderdale, AL" />
+ <path
+ d="m 694.54369,373.71514 0.97701,-0.09 0.87004,10.164 -6.19547,-2.549 -3.06297,-1.407 0.41897,-5.623 6.99242,-0.49"
+ class="c01083"
+ id="Limestone, AL" />
+ <path
+ d="m 704.32808,372.75914 0.39579,1.034 -0.49207,2.589 -0.17472,2.355 0.21751,2.364 0.68106,0.69 0.20146,-0.02 0.24782,0.12 0.10697,0.297 -0.14619,0.876 -0.26565,0.683 -1.8631,0.95 -0.65075,0.217 -0.62578,-0.107 -0.65075,-0.401 -0.41184,-0.957 -4.5071,0.331 -0.87004,-10.164 8.66653,-0.854 0.14085,0"
+ class="c01089"
+ id="Madison, AL" />
+ <path
+ d="m 717.49101,371.51314 0.72384,2.811 -1.17134,2.58 -2.02,3.256 -3.21451,3.407 -0.52951,0.353 -0.42611,0.169 -0.5616,0.02 -1.76148,-1.324 -0.23177,-1.327 -3.34288,0.33 -0.68106,-0.69 -0.21751,-2.364 0.17472,-2.355 0.49207,-2.589 -0.39579,-1.034 8.33491,-0.811 4.82802,-0.435"
+ class="c01071"
+ id="Jackson, AL" />
+ <path
+ d="m 718.21485,374.32414 1.51187,5.344 0.22465,0.79 0.40827,1.454 -0.11232,-0.04 -0.0695,0.05 -0.89322,1.036 -0.11232,1.334 -0.58656,1.262 -2.44432,2.983 -0.65074,0.08 -0.45464,0.432 -0.13015,0.251 0.0784,0.738 -4.9332,0.508 0.24069,-6.431 0.5616,-0.02 0.42611,-0.169 0.52951,-0.353 3.21451,-3.407 2.02,-3.256 1.17134,-2.58"
+ class="c01049"
+ id="DeKalb, AL" />
+ <path
+ d="m 720.35964,381.91214 1.57606,5.351 1.28545,4.644 0.73098,2.628 -2.41936,0.795 -4.00076,-0.185 -0.016,-0.482 -1.42987,-2.513 -0.83616,-0.07 -0.26565,-2.049 -0.0784,-0.738 0.13015,-0.251 0.45464,-0.432 0.65074,-0.08 2.44432,-2.983 0.58656,-1.262 0.11232,-1.334 0.89322,-1.036 0.0695,-0.05 0.11232,0.04"
+ class="c01019"
+ id="Cherokee, AL" />
+ <path
+ d="m 723.95213,394.53514 0.39401,1.405 1.55823,5.611 1.07685,3.831 -6.46112,0.417 -2.32129,0.195 0.0339,0.344 -0.29061,0.363 -1.99503,0.209 -0.0143,-0.168 0.62757,-0.579 0.91461,-1.432 0.98236,-0.103 1.50118,-1.815 0.27278,-0.522 -0.30487,-2.871 -0.24069,-2.362 1.84705,-1.728 2.41936,-0.795"
+ class="c01029"
+ id="Cleburne, AL" />
+ <path
+ d="m 720.5201,405.79914 6.46112,-0.417 0.34588,1.239 1.8631,6.725 0.13728,0.482 -6.87653,0.788 -1.15173,0.137 -0.77912,-8.954"
+ class="c01111"
+ id="Randolph, AL" />
+ <path
+ d="m 729.32748,413.82814 1.54396,5.343 1.2284,2.735 -2.12874,0.28 -0.6668,0.408 -5.89773,0.709 -0.95562,-8.687 6.87653,-0.788"
+ class="c01017"
+ id="Chambers, AL" />
+ <path
+ d="m 723.40657,423.30314 5.89773,-0.709 0.6668,-0.408 2.12874,-0.28 1.38886,3.059 1.84349,2.05 -1.02337,0.988 -3.43024,0.917 -1.61528,1.1 -1.99147,0.249 -0.31378,-1.993 -0.97345,0.112 -4.17013,-1.51 -0.041,-0.323 1.63311,-3.252"
+ class="c01081"
+ id="Lee, AL" />
+ <path
+ d="m 735.86705,430.18914 -0.21573,0.82 0.041,0.194 0.12123,0.136 1.27654,0.344 0.47424,0.396 0.19255,0.383 -0.16046,0.724 -0.0464,0.07 -2.08953,4.127 -2.49423,0.323 -0.13372,-0.06 -0.79694,-0.838 -0.0731,-0.209 -0.61865,-0.722 -2.93996,0.371 -0.6757,-1.972 -0.45642,-4.008 1.99147,-0.249 1.61528,-1.1 3.43024,-0.917 1.02337,-0.988 0.53486,3.174"
+ class="c01113"
+ id="Russell, AL" />
+ <path
+ d="m 735.46055,437.37914 0.0535,1.719 -0.90748,4.937 0.33874,0.449 -0.18542,-0.162 -0.32983,-0.104 -0.11053,0 -0.0981,0.06 -0.51525,0.651 -0.29774,0.892 -0.10341,0.176 -3.88844,0.337 0.21751,2.002 -6.43794,0.74 1.10181,-6.197 -0.016,-0.182 0.1141,-0.556 0.8843,-1.735 1.52436,-0.572 1.58319,-0.53 -0.12837,-0.843 -0.16759,-2.009 0.312,-0.2 2.93996,-0.371 0.61865,0.722 0.0731,0.209 0.79694,0.838 0.13372,0.06 2.49423,-0.323"
+ class="c01005"
+ id="Barbour, AL" />
+ <path
+ d="m 614.22718,412.76114 0.26386,0.73 0.025,0.01 0.97345,0.663 0.79516,0.537 0.15155,0.536 -0.23178,0.459 -0.98949,0.288 0.96453,2.758 0.65075,1.181 0.4992,0.529 0.0553,1.747 0,0.02 -0.60261,2.501 -0.016,0.02 -0.56161,0.634 -0.15511,0.177 -1.89519,0.07 -3.2787,0.134 -0.47424,0.03 -0.36014,-8.83 -0.12123,-4.033 1.9772,-0.1 0.10519,0.692 0.5206,0.319 1.40668,-0.04 0.29774,-1.036"
+ class="c05017"
+ id="Chicot, AR" />
+ <path
+ d="m 599.85903,417.19414 10.18197,-0.239 0.36014,8.83 -11.67601,0.474 -1.46196,-3.521 0.44929,-1.155 0.70958,-0.925 0.84151,-0.681 0.37975,-0.106 0.55269,-0.467 0.25674,-1.775 -0.5937,-0.435"
+ class="c05003"
+ id="Ashley, AR" />
+ <path
+ d="m 582.40652,364.07114 0.0481,3.101 -0.65253,0.934 0.041,2 -0.61866,6.784 -2.36943,0.255 -4.86367,-3.43 -0.39045,-0.218 -0.0428,-3.302 0.33875,0 1.00376,-1.059 0.95561,-1.955 -0.0303,-3.037 3.95263,-0.02 2.62795,-0.04"
+ class="c05115"
+ id="Pope, AR" />
+ <path
+ d="m 579.60919,355.06414 0.16938,9.05 -3.95263,0.02 -6.5984,-0.617 -0.16046,-1.392 0.009,-1.341 0.40828,-1.012 0.57051,-1.004 -0.312,-3.641 3.30901,0 6.55739,-0.06"
+ class="c05101"
+ id="Newton, AR" />
+ <path
+ d="m 563.44926,351.07814 2.90965,0.01 0.49742,0.569 0.2496,0.908 0,0.868 0.16224,0.33 0.50633,0.706 0.64897,0.659 1.31932,0 0.312,3.641 -0.57051,1.004 -0.40828,1.012 -0.009,1.341 0.16046,1.392 -3.27869,-0.04 -3.96867,0.298 -0.96454,0 0,-1.679 0.17651,-5.98 0.96275,-3.352 1.29436,-1.686"
+ class="c05087"
+ id="Madison, AR" />
+ <path
+ d="m 561.98018,363.77514 3.96867,-0.298 -0.0392,9.113 -5.85138,3.865 -0.97166,-5.336 0.28882,-0.153 0.34588,-1.108 0.25852,-1.317 0.0553,-2.446 1.94511,-1.646 0.33696,-0.335 0.007,-0.339 -0.34409,0"
+ class="c05047"
+ id="Franklin, AR" />
+ <path
+ d="m 565.94885,363.47714 3.27869,0.04 6.5984,0.617 0.0303,3.037 -0.95561,1.955 -1.00376,1.059 -0.33875,0 0.0428,3.302 -3.34288,-1.918 -0.78981,0.312 -1.4156,0.451 -2.14301,0.248 0.0392,-9.113"
+ class="c05071"
+ id="Johnson, AR" />
+ <path
+ d="m 565.90962,372.59014 2.14301,-0.248 1.4156,-0.451 0.78981,-0.312 3.34288,1.918 0.39045,0.218 0.0339,2.426 -3.78504,0.852 -3.3197,0.828 -0.80942,0.328 0,2.043 0.0945,0.619 -3.94549,0.02 -2.97383,-0.02 -1.26762,-0.651 0,-1.022 0.007,-1.012 2.01821,0.02 0.0143,-1.694 5.85138,-3.865"
+ class="c05083"
+ id="Logan, AR" />
+ <path
+ d="m 573.99137,373.71514 4.86367,3.43 2.36943,-0.255 -2.63508,2.255 -1.51187,1.4 -1.38886,1.341 -0.63648,0.709 -0.95562,1.309 0.0731,2.403 -1.97542,0.747 -5.93874,0.104 -0.0499,-6.347 -0.0945,-0.619 0,-2.043 0.80942,-0.328 3.3197,-0.828 3.78504,-0.852 -0.0339,-2.426"
+ class="c05149"
+ id="Yell, AR" />
+ <path
+ d="m 578.58939,379.14514 6.01897,-0.08 1.56536,-0.151 0.29774,-0.06 0.24069,-0.09 0.93422,-0.772 0.0874,0.09 0.17651,0.472 0.025,0.216 -0.0713,0.564 -0.082,0.201 -0.14441,0.207 -0.2086,0.219 -0.29595,0.25 -0.13015,0.16 -0.082,0.273 0.0713,0.28 0.21751,0.362 0.19611,0.169 0.22286,0.129 0.33697,0.103 -0.55983,0.387 -1.37637,0.346 -1.94333,0.378 0.0143,1.333 0.29061,0 -0.18542,0.412 -1.50296,-0.396 -2.64221,0 -1.9362,0.08 0.0392,1.993 -3.99363,0.09 -0.0731,-2.403 0.95562,-1.309 0.63648,-0.71 1.38886,-1.34 1.51187,-1.4"
+ class="c05105"
+ id="Perry, AR" />
+ <path
+ d="m 581.84313,370.10614 6.91219,-0.07 0.0392,2.016 -1.14817,5.946 -0.93422,0.772 -0.24069,0.09 -0.29774,0.06 -1.56536,0.151 -6.01897,0.08 2.63508,-2.255 0.61866,-6.784"
+ class="c05029"
+ id="Conway, AR" />
+ <path
+ d="m 595.67998,371.91614 0.13015,6.853 0.0214,1.252 -1.99325,0.03 -0.58478,2.018 -3.80999,0.04 -1.478,-0.419 -0.33697,-0.103 -0.22286,-0.129 -0.19611,-0.169 -0.21751,-0.362 -0.0713,-0.28 0.082,-0.273 0.13015,-0.16 0.29595,-0.25 0.2086,-0.219 0.14441,-0.207 0.082,-0.201 0.0713,-0.564 -0.025,-0.215 -0.17651,-0.473 -0.0874,-0.09 1.14817,-5.946 4.25928,-0.06 2.62616,-0.08"
+ class="c05045"
+ id="Faulkner, AR" />
+ <path
+ d="m 589.63071,362.27914 3.33218,1.648 0.0909,8.069 -4.25928,0.06 -0.0392,-2.016 -6.91219,0.07 -0.041,-2 0.65253,-0.934 -0.0481,-3.101 3.31079,-0.02 -0.0321,-1.678 3.94549,-0.1"
+ class="c05141"
+ id="Van Buren, AR" />
+ <path
+ d="m 579.60919,355.06414 0.99663,0 1.01267,0.986 7.8678,-0.111 0.0232,2.019 0.12124,4.328 -3.94549,0.1 0.0321,1.678 -3.31079,0.02 -2.62795,0.04 -0.16938,-9.05"
+ class="c05129"
+ id="Searcy, AR" />
+ <path
+ d="m 593.40682,354.15714 2.20007,1.679 0.10697,0.08 0.33518,0.409 0.009,0.105 -0.46533,1.51 3.58179,1.777 0.87717,0.314 0.39402,3.751 -7.48271,0.145 -3.33218,-1.648 -0.12124,-4.328 1.98612,-0.03 1.94333,-2.057 -0.0321,-1.704"
+ class="c05137"
+ id="Stone, AR" />
+ <path
+ d="m 600.4456,363.78214 0.97166,3.914 0.0499,1.816 -0.94849,2.299 -4.83871,0.105 -2.62616,0.08 -0.0909,-8.069 7.48271,-0.145"
+ class="c05023"
+ id="Cleburne, AR" />
+ <path
+ d="m 601.41726,367.69614 3.94727,-0.09 4.45718,1.903 -1.51009,1.864 -0.0481,1.382 0.041,0.145 0.50633,0.698 -0.40293,3.57 -0.39401,0.531 -6.24361,1.655 -2.65113,-0.241 -0.87539,-0.307 -2.43362,-0.03 -0.13015,-6.853 4.83871,-0.105 0.94849,-2.299 -0.0499,-1.816"
+ class="c05145"
+ id="White, AR" />
+ <path
+ d="m 609.12282,359.07414 2.93282,-0.13 -0.1034,0.403 -0.18542,0.547 -0.51347,1.196 -1.54931,3.464 -0.3958,2.958 -2.50671,0.08 -1.437,0 -3.94727,0.09 -0.97166,-3.914 -0.39402,-3.751 2.49245,-1.833 4.57128,-0.1 0.025,1.029 1.98255,-0.06"
+ class="c05063"
+ id="Independence, AR" />
+ <path
+ d="m 612.05564,358.94414 3.07902,-0.05 0.13015,4.09 0.271,6.14 0.10519,2.051 -3.94371,0.126 -0.13015,-2.041 -1.80961,0.112 0.0642,0.129 -4.45718,-1.903 1.437,0 2.50671,-0.08 0.3958,-2.958 1.54931,-3.464 0.51347,-1.196 0.18542,-0.547 0.1034,-0.403"
+ class="c05067"
+ id="Jackson, AR" />
+ <path
+ d="m 609.82171,369.50414 -0.0642,-0.129 1.80961,-0.112 0.13015,2.041 3.94371,-0.126 0.19255,4.762 -1.82388,3.475 -1.64559,0.05 -0.83795,0.481 -0.15154,0.708 0.0232,0.979 -1.38351,0.06 -0.0624,-3.222 -1.79,0.08 -0.0909,-0.255 -0.0571,-0.603 0.39401,-0.531 0.40293,-3.57 -0.50633,-0.698 -0.041,-0.145 0.0481,-1.382 1.51009,-1.864"
+ class="c05147"
+ id="Woodruff, AR" />
+ <path
+ d="m 625.90141,375.48314 1.91302,-0.201 0.16046,3.368 0.0161,2.273 -10.034,0.499 -1.90767,-0.02 -0.98592,0.06 0.0392,1.027 -1.0929,-3.073 1.82388,-3.475 10.06786,-0.457"
+ class="c05123"
+ id="St. Francis, AR" />
+ <path
+ d="m 632.02557,368.33214 1.24623,1.227 0.0713,0.242 0.74702,5.272 -0.007,0.03 0,0.02 -0.007,0.01 -0.0339,0.05 -0.27991,0.344 -1.97008,1.513 -1.87201,0.617 -0.22464,0.717 0.0321,0.321 0.47246,3.102 -2.09665,0.768 -0.11232,-1.645 -0.0161,-2.273 -0.16046,-3.368 -1.91302,0.201 -0.3851,-6.878 4.01146,-0.16 2.4978,-0.113"
+ class="c05035"
+ id="Crittenden, AR" />
+ <path
+ d="m 625.51631,368.60514 0.3851,6.878 -10.06786,0.457 -0.19255,-4.762 -0.10519,-2.051 1.69551,-0.07 4.30741,-0.408 1.96116,-0.09 2.01642,0.05"
+ class="c05037"
+ id="Cross, AR" />
+ <path
+ d="m 615.26481,362.98714 3.47838,-0.114 7.38465,-0.383 3.03801,-0.09 0.36192,6.044 -4.01146,0.16 -2.01642,-0.05 -1.96116,0.09 -4.30741,0.408 -1.69551,0.07 -0.271,-6.14"
+ class="c05111"
+ id="Poinsett, AR" />
+ <path
+ d="m 638.95915,354.80714 0.98236,2.17 -0.50812,0 -0.33517,0.06 -0.40115,0.209 -0.0606,0.04 -0.11767,0.103 -1.62241,3.464 -0.50812,4.869 -4.36268,2.621 -2.4978,0.113 -0.36192,-6.044 -0.45107,-6.847 6.07424,-0.433 4.17013,-0.314"
+ class="c05093"
+ id="Mississippi, AR" />
+ <path
+ d="m 628.71478,355.55414 0.45107,6.847 -3.03801,0.09 -7.38465,0.383 -3.47838,0.114 -0.13015,-4.09 3.22165,-2.089 8.58273,-0.41 0.30844,-0.747 1.4673,-0.1"
+ class="c05031"
+ id="Craighead, AR" />
+ <path
+ d="m 602.56721,350.97414 -0.0232,7.224 -2.49245,1.833 -0.87717,-0.314 -3.58179,-1.777 0.46533,-1.51 -0.009,-0.105 -0.33518,-0.409 -0.10697,-0.08 -2.20007,-1.679 -0.36192,0 -0.016,-0.963 0.98949,-0.412 -0.025,-1.624 8.57382,-0.184"
+ class="c05065"
+ id="Izard, AR" />
+ <path
+ d="m 610.51346,350.49114 2.23572,1.97 1.25336,1.093 0.57765,-0.804 4.33237,-0.185 1.10182,-0.05 0.007,0.09 -0.34766,0.868 -0.50634,0.488 -0.26386,0.195 -0.72206,2.016 0.17472,0.635 -3.22165,2.089 -3.07902,0.05 -2.93282,0.13 -0.0713,-3.085 -0.15155,-3.496 -0.025,-1.294 0.3227,-0.346 1.31576,-0.362"
+ class="c05075"
+ id="Lawrence, AR" />
+ <path
+ d="m 607.52537,345.09314 0.007,0.224 1.12678,1.141 0.66679,0.321 0.73811,1.029 0.3851,1.198 0.0642,1.485 -1.31576,0.362 -0.3227,0.346 0.025,1.294 0.15155,3.496 0.0713,3.085 -1.98255,0.06 -0.025,-1.029 -4.57128,0.1 0.0232,-7.224 2.31595,-0.03 1.92728,-2.738 -0.0713,-3.095 0.78624,-0.02"
+ class="c05135"
+ id="Sharp, AR" />
+ <path
+ d="m 618.82342,349.85114 1.6652,-0.123 5.99222,-0.144 1.31755,0.602 0.041,0.685 2.2482,-0.162 -2.84011,4.942 -0.30844,0.747 -8.58273,0.41 -0.17472,-0.635 0.72206,-2.016 0.26386,-0.195 0.50634,-0.488 0.34766,-0.868 -0.007,-0.09 -1.10182,0.05 -0.0891,-2.714"
+ class="c05055"
+ id="Greene, AR" />
+ <path
+ d="m 622.75286,344.25814 6.51639,-0.371 0.49029,-0.03 0.72385,-0.02 1.63846,2.314 0.17828,0.239 0.11945,1.826 -0.19433,0.529 -0.12836,0.202 -2.0093,1.767 -2.2482,0.162 -0.041,-0.685 -1.31755,-0.602 -5.99222,0.144 -1.6652,0.123 0.11054,-5.386 3.8189,-0.207"
+ class="c05021"
+ id="Clay, AR" />
+ <path
+ d="m 618.93396,344.46514 -0.11054,5.386 0.0891,2.714 -4.33237,0.185 -0.57765,0.804 -1.25336,-1.093 -2.23572,-1.97 -0.0642,-1.485 -0.3851,-1.198 -0.73811,-1.029 -0.66679,-0.321 -1.12678,-1.141 -0.007,-0.224 5.14358,-0.273 6.26501,-0.355"
+ class="c05121"
+ id="Randolph, AR" />
+ <path
+ d="m 606.73913,345.11614 0.0713,3.095 -1.92728,2.738 -2.31595,0.03 -8.57382,0.184 -0.0981,-5.493 0.54734,-0.03 8.21903,-0.369 4.07743,-0.146"
+ class="c05049"
+ id="Fulton, AR" />
+ <path
+ d="m 586.9457,345.95214 6.94963,-0.287 0.0981,5.493 0.025,1.624 -0.98949,0.412 0.016,0.963 0.36192,0 0.0321,1.704 -1.94333,2.057 -1.98612,0.03 -0.0232,-2.019 -0.0107,-1.349 -0.46355,-1.079 -0.98236,-2.013 -0.85043,-1.005 -0.30487,-0.22 0.0874,-1.822 -0.0161,-2.492"
+ class="c05005"
+ id="Baxter, AR" />
+ <path
+ d="m 582.48675,346.10514 4.45895,-0.153 0.0161,2.492 -0.0874,1.822 0.30487,0.22 0.85043,1.005 0.98236,2.013 0.46355,1.079 0.0107,1.349 -7.8678,0.111 -1.01267,-0.986 0.37618,-8.904 1.50475,-0.05"
+ class="c05089"
+ id="Marion, AR" />
+ <path
+ d="m 580.982,346.15314 -0.37618,8.904 -0.99663,0 -6.55739,0.06 -0.16759,-8.727 8.09779,-0.241"
+ class="c05009"
+ id="Boone, AR" />
+ <path
+ d="m 572.88421,346.39414 0.16759,8.727 -3.30901,0 -1.31932,0 -0.64897,-0.659 -0.50633,-0.706 -0.16224,-0.33 0,-0.868 -0.2496,-0.908 -0.49742,-0.569 -2.90965,-0.01 -1.03585,-4.427 5.17568,-0.129 4.94033,-0.121 0.35479,0"
+ class="c05015"
+ id="Carroll, AR" />
+ <path
+ d="m 558.54815,346.73114 3.86526,-0.08 1.03585,4.427 -1.29436,1.686 -2.28208,-0.01 -1.97542,0.451 -3.93657,0.201 -0.82012,1.678 -0.19255,1.006 -2.97383,-0.02 -0.21751,-1.377 -1.1339,-7.803 9.92523,-0.159"
+ class="c05007"
+ id="Benton, AR" />
+ <path
+ d="m 549.97433,356.07014 2.97383,0.02 0.19255,-1.006 0.82012,-1.678 3.93657,-0.201 1.97542,-0.451 2.28208,0.01 -0.96275,3.352 -0.17651,5.98 0,1.679 -2.997,-0.03 -2.29099,0.284 -4.53918,-0.04 -1.21414,-7.921"
+ class="c05143"
+ id="Washington, AR" />
+ <path
+ d="m 561.01564,363.77514 1.30863,0 -0.007,0.339 -0.33696,0.335 -1.94511,1.646 -0.0553,2.446 -0.25852,1.317 -0.34588,1.108 -0.28882,0.153 -1.10181,-0.111 -0.15868,0.02 -0.1141,0.06 -0.16046,0.135 -0.0784,0.177 0.0874,0.192 0.27278,0.243 0.0802,0.144 0.0713,0.248 -0.0143,0.169 -0.0571,0.147 -0.13728,0.119 -1.17313,0.529 -0.30487,0.1 -1.28545,0.1 -0.47424,-0.154 -0.43324,-0.538 -0.0642,-0.314 0.0731,-0.305 0,-0.09 -0.10518,-0.234 -0.61153,-0.474 -0.30487,-0.135 -0.2496,-0.05 -0.0481,0.02 -0.33874,1.205 -0.84152,-5.554 -0.4261,-2.788 4.53918,0.04 2.29099,-0.284 2.997,0.03"
+ class="c05033"
+ id="Crawford, AR" />
+ <path
+ d="m 552.45609,372.33314 0.33874,-1.205 0.0481,-0.02 0.2496,0.05 0.30487,0.135 0.61153,0.474 0.10518,0.234 0,0.09 -0.0731,0.305 0.0642,0.314 0.43324,0.538 0.47424,0.154 1.28545,-0.1 0.30487,-0.1 1.17313,-0.529 0.13728,-0.119 0.0571,-0.147 0.0143,-0.169 -0.0713,-0.248 -0.0802,-0.144 -0.27278,-0.243 -0.0874,-0.192 0.0784,-0.177 0.16046,-0.135 0.1141,-0.06 0.15868,-0.02 1.10181,0.111 0.97166,5.336 -0.0143,1.694 -2.01821,-0.02 -0.007,1.012 -0.33875,0 -1.18917,0.501 -0.51525,0.328 0,0.17 0.42076,0 0,2.057 -0.63649,0.264 -3.09328,0.668 -0.32983,-0.06 0.11232,-10.34 0.007,-0.403"
+ class="c05131"
+ id="Sebastian, AR" />
+ <path
+ d="m 558.01864,379.13814 0,1.022 1.26762,0.651 2.97383,0.02 3.94549,-0.02 0.0499,6.347 -0.65253,0 -1.57249,0.841 -0.88609,1.07 -0.97879,0.04 0,-0.337 -1.66342,-0.25 -5.62496,0 -0.86112,-0.449 -1.7276,-0.233 0.0481,-4.748 0.32983,0.06 3.09328,-0.669 0.63649,-0.263 0,-2.058 -0.42076,0 0,-0.169 0.51525,-0.328 1.18917,-0.501 0.33875,0"
+ class="c05127"
+ id="Scott, AR" />
+ <path
+ d="m 572.19424,387.05414 -0.025,8.019 0.016,1.327 -9.95732,0 -0.0624,-7.297 0.97879,-0.04 0.88609,-1.069 1.57249,-0.842 0.65253,0 5.93874,-0.103"
+ class="c05097"
+ id="Montgomery, AR" />
+ <path
+ d="m 578.16329,386.21814 1.98433,-0.07 0.0571,2.025 1.21949,1.098 1.88984,0.983 0.33518,0.65 0.0107,1.35 -2.29099,0.02 -0.57765,1.341 0.0392,1.381 -8.66118,0.08 0.025,-8.019 1.97542,-0.747 3.99363,-0.09"
+ class="c05051"
+ id="Garland, AR" />
+ <path
+ d="m 584.39085,384.12814 1.67055,1.215 1.9772,1.904 2.75632,1.906 3.02375,0.928 0.15867,2.028 -2.97382,0.06 -2.81159,1.053 -1.17313,0.908 -0.93957,0.103 -2.41935,-1.984 -0.0107,-1.35 -0.33518,-0.65 -1.88984,-0.983 -1.21949,-1.098 -0.0571,-2.025 -1.98433,0.07 -0.0392,-1.993 1.9362,-0.08 2.64221,0 1.50296,0.395 0.18542,-0.412"
+ class="c05125"
+ id="Saline, AR" />
+ <path
+ d="m 595.83153,380.02114 0.94314,-0.02 0.14441,6.46 1.00375,2.524 0.11946,3.054 -3.34823,0.05 -0.71672,0.02 -0.15867,-2.028 -3.02375,-0.928 -2.75632,-1.906 -1.9772,-1.904 -1.67055,-1.215 -0.29061,0 -0.0143,-1.333 1.94333,-0.378 1.37637,-0.346 0.55983,-0.387 1.478,0.419 3.80999,-0.04 0.58478,-2.018 1.99325,-0.03"
+ class="c05119"
+ id="Pulaski, AR" />
+ <path
+ d="m 595.81013,378.76914 2.43362,0.03 0.87539,0.307 2.65113,0.241 0.0891,2.515 2.06635,-0.05 1.3425,6.743 0.16759,1.478 -0.009,0.353 -0.74702,1.535 -0.51347,0 -6.12415,0.114 -0.11946,-3.054 -1.00375,-2.524 -0.14441,-6.46 -0.94314,0.02 -0.0214,-1.252"
+ class="c05085"
+ id="Lonoke, AR" />
+ <path
+ d="m 601.77027,379.34914 6.24361,-1.655 0.0571,0.603 0.0909,0.255 1.79,-0.08 0.0624,3.222 0.22642,8.076 -4.08099,0.1 0.0695,2.009 -0.55269,0.05 -0.99663,0 0.74702,-1.535 0.009,-0.353 -0.16759,-1.478 -1.3425,-6.743 -2.06635,0.05 -0.0891,-2.515"
+ class="c05117"
+ id="Prairie, AR" />
+ <path
+ d="m 610.01426,381.69314 1.38351,-0.06 -0.0232,-0.979 0.15154,-0.708 0.83795,-0.481 1.64559,-0.05 1.0929,3.073 0.10519,3.063 1.00375,-0.03 0.0571,2.042 0.15154,4.041 1.02693,-0.03 0.016,0.362 0.10697,2.724 -1.01445,0.04 -0.1355,0.01 -0.59548,-0.226 -0.29596,-0.207 -1.71155,-1.851 -1.33537,-1.913 -0.61687,-0.786 -1.6242,0.04 -0.22642,-8.076"
+ class="c05095"
+ id="Monroe, AR" />
+ <path
+ d="m 615.10257,382.48814 -0.0392,-1.027 0.98592,-0.06 1.90767,0.02 10.034,-0.499 0.11232,1.645 -2.89182,4.606 -8.94287,0.386 -0.0571,-2.041 -1.00375,0.03 -0.10519,-3.063"
+ class="c05077"
+ id="Lee, AR" />
+ <path
+ d="m 625.21144,387.17414 0.25673,2.676 0.20147,2.064 -0.1355,0.442 -0.0178,0.04 -0.041,0.03 -0.65075,0.57 -0.81834,0.392 -0.98949,0.203 -0.98593,0.193 -1.8007,3.231 -0.85399,1.759 -0.27278,0.569 0.0642,0.225 0.009,0.03 -3.52652,0.176 0.9057,-5.079 1.01445,-0.04 -0.10697,-2.724 -0.016,-0.362 -1.02693,0.03 -0.15154,-4.041 8.94287,-0.387"
+ class="c05107"
+ id="Phillips, AR" />
+ <path
+ d="m 598.04229,392.03714 6.12415,-0.114 0.1355,5.753 2.25177,0.02 0.98949,0.05 0.19077,0.137 1.7686,2.057 0.24961,0.878 -0.1462,0.135 -0.10341,0.05 -1.06793,0.209 -1.42452,-0.466 -2.93282,-1.424 -0.43324,1.624 -3.76898,0.184 0.025,0.675 -5.29691,0.257 -0.0713,-2.457 0.30665,-1.44 -0.14441,-6.067 3.34823,-0.05"
+ class="c05069"
+ id="Jefferson, AR" />
+ <path
+ d="m 594.69406,392.09114 0.14441,6.067 -0.30665,1.44 0.0713,2.457 -1.94333,0.139 -1.76682,-1.455 -1.31041,-0.386 -3.47303,0 -0.0303,-6.116 0.93957,-0.103 1.17313,-0.908 2.81159,-1.053 2.97382,-0.06 0.71672,-0.02"
+ class="c05053"
+ id="Grant, AR" />
+ <path
+ d="m 583.65988,392.25314 2.41935,1.984 0.0303,6.116 -3.93836,0 -1.92728,0 -0.76307,-1.15 -6.28284,-1.446 -1.01267,-1.341 -0.016,-1.326 8.66118,-0.08 -0.0392,-1.381 0.57765,-1.341 2.29099,-0.02"
+ class="c05059"
+ id="Hot Spring, AR" />
+ <path
+ d="m 582.17118,400.34514 3.93836,0 3.47303,0 1.31041,0.387 1.76682,1.455 -2.55485,0.257 -0.007,1.856 0.34409,0.06 0.68284,0.617 0.44215,0.636 1.28545,2.266 0.0784,0.419 -4.73174,0 -5.90486,0.02 -0.42789,-1.928 0.30487,-2.075 0,-3.992"
+ class="c05039"
+ id="Dallas, AR" />
+ <path
+ d="m 594.60313,402.05514 5.29691,-0.257 -0.15333,6.308 0.0891,2.018 -6.75886,0.193 -0.14619,-2.007 -0.0784,-0.419 -1.28545,-2.266 -0.44215,-0.637 -0.68284,-0.617 -0.34409,-0.06 0.007,-1.856 2.55485,-0.257 1.94333,-0.139"
+ class="c05025"
+ id="Cleveland, AR" />
+ <path
+ d="m 609.50257,400.99614 0.5206,1.494 0.007,0.368 -0.79337,0.563 -1.57606,0.05 0.009,3.446 0.0321,1.031 -7.95517,0.158 0.15333,-6.308 -0.025,-0.675 3.76898,-0.184 0.43324,-1.624 2.93282,1.424 1.42452,0.466 1.06793,-0.209"
+ class="c05079"
+ id="Lincoln, AR" />
+ <path
+ d="m 604.16644,391.92314 1.5101,0 0.55269,-0.05 -0.0695,-2.009 4.08099,-0.1 1.6242,-0.04 0.61687,0.787 1.33537,1.913 1.71155,1.85 0.29596,0.207 0.59548,0.226 0.1355,-0.01 -0.9057,5.079 -0.93422,0.635 -0.29596,0.281 -0.15511,0.25 -0.0214,0.522 0.0553,0.345 0.3958,0.395 0.87539,1.35 -0.33874,0.451 -2.31417,-0.685 -1.13212,-0.691 -1.76148,-0.145 -0.5206,-1.494 0.10341,-0.05 0.1462,-0.135 -0.24961,-0.878 -1.7686,-2.057 -0.19077,-0.137 -0.98949,-0.05 -2.25177,-0.02 -0.1355,-5.754"
+ class="c05001"
+ id="Arkansas, AR" />
+ <path
+ d="m 619.17643,399.60614 0.85221,0.682 0.20146,0.5 -0.11232,0.772 -3.71372,1.87 -1.52613,6.573 -0.10519,0.523 0.025,0.05 0.1141,0.203 0.56874,0.426 0.53842,0.435 0,0.02 -0.0499,0.247 -0.33696,0.289 -1.4049,0.565 -0.29774,1.036 -1.40668,0.04 -0.5206,-0.32 -0.10519,-0.691 -1.9772,0.1 -2.21789,-4.974 -0.0321,-1.031 -0.009,-3.446 1.57606,-0.05 0.79337,-0.563 -0.007,-0.368 1.76148,0.145 1.13212,0.691 2.31417,0.685 0.33874,-0.451 -0.87539,-1.35 -0.3958,-0.395 -0.0553,-0.345 0.0214,-0.522 0.15511,-0.25 0.29596,-0.281 0.93422,-0.635 3.52652,-0.176"
+ class="c05041"
+ id="Desha, AR" />
+ <path
+ d="m 599.74671,408.10614 7.95517,-0.158 2.21789,4.974 0.12123,4.033 -10.18197,0.239 -0.21038,-0.296 -0.312,-0.924 -0.0178,-0.112 0.0588,-1.632 0.0143,-0.04 0.60261,-0.03 -0.15868,-4.033 -0.0891,-2.018"
+ class="c05043"
+ id="Drew, AR" />
+ <path
+ d="m 593.07699,410.31714 6.75886,-0.193 0.15868,4.033 -0.60261,0.03 -0.0143,0.04 -0.0588,1.632 0.0178,0.112 0.312,0.924 0.21038,0.296 0.5937,0.435 -0.25674,1.775 -0.55269,0.467 -0.37975,0.106 -0.84151,0.681 -0.70958,0.925 -0.44929,1.155 -1.68838,-1.283 -2.50493,-1.295 -0.0499,-0.248 0.0499,-0.146 -0.53842,-0.344 -0.11411,-0.717 0.082,-0.716 0.16046,-0.1 0.0802,0.03 0.32092,-0.812 0.43324,-1.29 0.14441,-0.717 -0.35123,-3.222 -0.21038,-1.567"
+ class="c05011"
+ id="Bradley, AR" />
+ <path
+ d="m 588.19906,408.31714 4.73174,0 0.14619,2.007 0.21038,1.567 0.35123,3.222 -0.14441,0.717 -0.43324,1.29 -0.32092,0.812 -0.0802,-0.03 -0.16046,0.1 -0.082,0.717 0.11411,0.716 0.53842,0.344 -0.56338,0.491 -0.83617,0.176 -0.36905,-0.02 -0.57944,-0.449 0.0267,-0.06 -0.17829,-0.715 -1.42986,-0.771 -0.27278,-0.07 -2.685,-1.383 -1.20344,-1.375 -0.16224,-0.394 -0.0642,-0.818 0.83439,-2.427 0.13015,-0.105 1.2694,-0.217 0.0874,-0.07 0.61866,-0.973 0.50633,-2.266"
+ class="c05013"
+ id="Calhoun, AR" />
+ <path
+ d="m 582.2942,408.34014 5.90486,-0.02 -0.50633,2.266 -0.61866,0.973 -0.0874,0.07 -1.2694,0.217 -0.13015,0.105 -0.83439,2.427 0.0642,0.818 0.16224,0.394 1.20344,1.375 2.685,1.383 -7.86781,0.04 -2.68322,-1.672 0,-7.49 3.97759,-0.884"
+ class="c05103"
+ id="Ouachita, AR" />
+ <path
+ d="m 573.08567,405.22214 1.37281,1.97 2.96492,1.26 0.40114,0.225 0.49207,0.547 0,7.49 -4.74956,0.335 -2.26603,-0.665 0.009,-4.548 0.19968,-3.519 0,-3.054 1.57605,-0.04"
+ class="c05099"
+ id="Nevada, AR" />
+ <path
+ d="m 564.53503,404.23614 6.97459,1.027 0,3.054 -0.19968,3.519 -0.009,4.548 -4.58198,-0.03 -2.03068,-2.908 -2.57269,-3.198 2.3944,0.01 0.025,-6.031"
+ class="c05057"
+ id="Hempstead, AR" />
+ <path
+ d="m 570.86065,396.40014 1.32467,0 1.01267,1.341 6.28284,1.446 0.76307,1.15 1.92728,0 0,3.991 -0.30487,2.076 0.42789,1.927 -3.97759,0.884 -0.49207,-0.547 -0.40114,-0.225 -2.96492,-1.26 -1.37281,-1.97 -1.10894,-2.065 -0.28348,-0.779 -0.81834,-3.954 -0.0143,-2.024"
+ class="c05019"
+ id="Clark, AR" />
+ <path
+ d="m 562.228,396.40014 8.63265,0 0.0143,2.024 0.81834,3.954 0.28348,0.779 1.10894,2.065 -1.57605,0.04 -6.97459,-1.027 -0.0481,-4.044 -1.99146,-0.02 -0.24961,-1.767 -0.0178,-2.007"
+ class="c05109"
+ id="Pike, AR" />
+ <path
+ d="m 562.228,396.40014 0.0178,2.007 0.24961,1.767 1.99146,0.02 0.0481,4.044 -0.025,6.031 -2.3944,-0.01 -0.0321,0 -2.11983,-3.808 -0.0802,-0.234 -0.37084,-2.443 -0.13728,-1.1 -0.0571,-1.745 0.0731,-0.699 -0.2086,-0.1 -2.70818,0.03 -0.26386,-1.774 -0.0107,-1.993 6.02789,0"
+ class="c05061"
+ id="Howard, AR" />
+ <path
+ d="m 552.2885,387.82414 1.7276,0.234 0.86112,0.449 5.62496,0 1.66342,0.25 0,0.337 0.0624,7.297 -6.02789,0 0.0107,1.993 0.26386,1.774 -4.28245,0.13 0.0963,-12.464"
+ class="c05113"
+ id="Polk, AR" />
+ <path
+ d="m 556.47467,400.15814 2.70818,-0.03 0.2086,0.1 -0.0731,0.699 0.0571,1.746 0.13728,1.1 0.37084,2.442 0.0802,0.234 2.11983,3.808 -1.57427,-0.02 -4.99917,-1.48 -3.35893,-2.701 0.041,-5.761 4.28245,-0.13"
+ class="c05133"
+ id="Sevier, AR" />
+ <path
+ d="m 552.15121,406.04914 3.35893,2.701 4.99917,1.48 1.57427,0.02 0.0321,0 2.57269,3.198 -4.11487,1.421 -0.4582,-0.378 -0.353,-0.144 -1.84884,-0.371 -1.06972,0.155 -0.27991,0.03 -0.0963,0.09 -1.84883,0.938 -1.02872,-0.561 -0.27991,-0.184 -0.7809,-0.499 -0.12658,-0.17 -0.1462,-0.335 -0.15154,-0.394 0.0463,-7.001"
+ class="c05081"
+ id="Little River, AR" />
+ <path
+ d="m 564.68836,413.45114 2.03068,2.908 -0.13549,1.478 1.31932,1.954 0,0.121 -0.31378,1.02 -1.43878,2.539 -0.13728,0.177 -0.1355,0.128 -0.22464,0.03 -1.07685,1.911 0.82725,1.359 -0.18542,0 -4.38586,0.1 -0.25852,-12.304 4.11487,-1.421"
+ class="c05091"
+ id="Miller, AR" />
+ <path
+ d="m 566.71904,416.35914 4.58198,0.03 2.26603,0.665 -0.2086,0.266 -1.89697,4.051 -0.0232,5.585 -0.58835,0 -5.44666,0.121 -0.82725,-1.358 1.07685,-1.911 0.22464,-0.03 0.1355,-0.129 0.13728,-0.176 1.43878,-2.539 0.31378,-1.02 0,-0.121 -1.31932,-1.954 0.13549,-1.478"
+ class="c05073"
+ id="Lafayette, AR" />
+ <path
+ d="m 573.56705,417.04914 4.74956,-0.335 2.68322,1.672 0.0713,8.307 -4.79592,0.13 -4.83693,0.128 0.0232,-5.586 1.89697,-4.05 0.2086,-0.266"
+ class="c05027"
+ id="Columbia, AR" />
+ <path
+ d="m 580.99983,418.38614 7.86781,-0.04 0.27278,0.07 1.42986,0.771 0.17829,0.715 -0.0267,0.06 0.57944,0.449 0.36905,0.02 0.83617,-0.176 0.56338,-0.491 -0.0499,0.147 0.0499,0.247 2.50493,1.295 1.68838,1.283 1.46196,3.522 -12.59241,0.338 -5.06157,0.1 -0.0713,-8.307"
+ class="c05139"
+ id="Union, AR" />
+ <path
+ d="m 196.1531,304.30414 20.63493,3.84 6.44508,1.143 -1.76861,3.839 -1.1963,3.022 -0.0802,0.217 -0.94849,2.972 -0.0481,0.298 0,0.369 0.21751,0.676 0.19968,0.322 -0.25673,1.5 -0.21751,0.396 -0.58656,0.69 -0.23356,0.194 -0.27278,0.09 -4.29137,1.279 -0.79516,0.169 -0.80407,0.09 -0.15155,-0.05 -1.07685,0.137 -1.95224,0.747 -2.78128,1.24 -1.28545,2.626 -2.10557,10.157 -5.06156,27.531 -0.41898,0.36 -0.15154,0.07 -0.20147,0.03 -6.82126,0.378 -7.40069,-3.327 -0.8843,-1.545 -1.02159,-1.138 -1.17313,-1.407 -1.18739,-4.999 -0.0642,-0.925 -1.27832,-2.008 -1.01267,-2.635 -0.0161,-0.121 0.0321,-0.321 0.57765,-2.557 1.72047,-2.875 0.16758,-0.548 0.0981,-0.458 0.0232,-0.513 0.12837,-2.805 -0.025,-0.675 -0.16759,-1.348 -0.24069,-2.844 0.22464,-4.027 0.49742,-6.588 0.23356,-2.25 0.016,-0.146 0.24961,-0.225 0.18363,-0.1 2.05743,-0.483 1.12678,0 1.05902,0.217 2.33913,0.69 0.2496,0.234 0.54556,0.772 0.22464,0.563 0.0321,0.176 0.009,0.05 0.0161,0.192 0.12837,0.385 0.4261,0.676 0.16046,0.168 0.23356,0.178 0.0963,0.02 0.36192,0.04 1.11608,0.02 0.016,0 0.0642,-0.04 0.0321,-0.02 0.2496,-0.282 2.33021,-3.148 0.77912,-4.042 0.44215,-2.316 0.73098,-4.172 0.0891,-0.462 0.72206,-3.786 0.69176,-3.584"
+ class="c04015"
+ id="Mohave, AZ" />
+ <path
+ d="m 182.74235,365.31014 7.40069,3.327 6.82126,-0.378 0.20147,-0.03 0.15154,-0.07 0.41898,-0.36 -1.34251,7.247 -2.60299,14.126 -11.72415,-2.209 0.37797,-1.977 -5.8175,-1.093 -1.92907,9.827 -1.94333,-0.328 -2.76523,-0.547 -1.67233,-0.28 -0.312,-0.138 -0.88609,-0.62 -0.40115,-1.068 -0.0143,-0.04 1.13212,-6.975 1.92729,-0.476 2.31416,-2.731 0.74881,-2.603 0.54555,-2.724 0.10519,-0.747 0.49029,-1.76 0.53843,-0.933 1.7276,-2.442 2.36943,-0.908 1.6242,-0.666 2.41044,-1.391 0.041,-0.03 0.0642,-0.997"
+ class="c04012"
+ id="La Paz, AZ" />
+ <path
+ d="m 270.38467,423.76914 1.27119,0.167 -3.49621,24.959 -7.31155,-1.059 -20.05016,-2.942 1.5511,-9.03 2.4354,-15.857 5.37535,0.836 14.1346,2.041 6.09028,0.885"
+ class="c04003"
+ id="Cochise, AZ" />
+ <path
+ d="m 223.58612,440.00714 0.353,-2.168 3.92232,0.626 0.73989,-4.644 5.97083,0.82 7.77688,1.223 -1.5511,9.03 -10.0126,-1.551 -2.32129,-0.539 -4.87793,-2.797"
+ class="c04023"
+ id="Santa Cruz, AZ" />
+ <path
+ d="m 211.64624,412.76114 7.7947,1.316 4.27354,0.845 7.22419,1.18 0.6347,0.09 3.01305,0.307 5.97975,0.829 4.53027,0.699 -0.312,1.975 -2.4354,15.857 -7.77688,-1.223 -5.97083,-0.82 -0.73989,4.644 -3.92232,-0.626 -0.353,2.168 -0.92353,-0.528 -2.93282,-1.697 -23.19871,-13.379 -4.64437,-2.642 -3.69767,-2.219 1.94511,-10.576 21.51211,3.795"
+ class="c04019"
+ id="Pima, AZ" />
+ <path
+ d="m 267.08279,394.71314 0.40115,-0.804 0.15333,-0.13 2.63508,-1.517 5.67487,0.77 -4.29136,30.904 -1.27119,-0.167 -1.81496,-2.653 0.0392,-0.312 0.41897,-0.908 0.25674,-1.158 0,-1.045 -0.43324,-1.687 -1.03763,-2.3 -0.28882,-0.05 -2.32308,-5.811 1.88092,-13.129"
+ class="c04011"
+ id="Greenlee, AZ" />
+ <path
+ d="m 259.32731,395.57314 1.14104,1.068 1.92193,0.433 1.88093,-1.173 2.81158,-1.188 -1.88092,13.129 2.32308,5.811 0.28882,0.05 1.03763,2.3 0.43324,1.687 0,1.045 -0.25674,1.158 -0.41897,0.908 -0.0392,0.312 1.81496,2.653 -6.09028,-0.885 -14.1346,-2.041 -5.37535,-0.836 0.312,-1.975 0.041,0 0.39401,-2.532 1.25336,-8.283 0.73098,-4.709 0.19255,-2.227 0.39401,-1.688 0.19255,-0.305 0.66858,-0.346 1.39777,-0.433 0.52951,-0.07 2.84546,-0.314 3.18955,0.465 0.37797,-2.539 2.02356,0.516"
+ class="c04009"
+ id="Graham, AZ" />
+ <path
+ d="m 286.17555,319.20214 -3.17351,22.867 -4.50888,32.626 -2.54594,18.337 -5.67487,-0.77 -2.63508,1.517 -0.15333,0.13 -0.40115,0.804 -2.81158,1.188 -1.88093,1.173 -1.92193,-0.433 -1.14104,-1.068 0.56339,-3.803 0.69888,-0.915 1.51901,-8.629 2.42648,-16.01 1.59924,-10.066 0.95562,-5.015 0.48315,-3.309 -3.18955,-0.475 4.53919,-30.601 17.25283,2.452"
+ class="c04001"
+ id="Apache, AZ" />
+ <path
+ d="m 268.92272,316.75014 -4.53919,30.601 3.18955,0.475 -0.48315,3.309 -0.95562,5.015 -1.59924,10.066 -2.42648,16.01 -1.51901,8.629 -0.69888,0.915 -0.56339,3.803 -2.02356,-0.516 1.43878,-9.666 -14.06328,-2.147 10.74357,-68.671 4.60516,0.697 2.93995,0.58 5.95479,0.9"
+ class="c04017"
+ id="Navajo, AZ" />
+ <path
+ d="m 245.62061,377.23414 -0.94136,6.01 14.06328,2.147 -1.81675,12.205 -3.18955,-0.465 -2.84546,0.314 -0.52951,0.07 -1.39777,0.433 -0.66858,0.346 -0.19255,0.305 -0.39401,1.688 -0.19255,2.227 -0.29596,0 -3.38389,0.644 -1.9772,1.365 -0.0232,0.104 0.11232,0.451 -0.0481,0.16 -1.10895,1.092 -0.28882,0 -0.0571,-0.03 -2.14657,-6.547 -0.16759,-1.858 -0.42611,-1.854 -0.3851,-1.487 -1.36746,-5.167 -0.5616,0.321 -0.47425,0.4 -2.8205,-4.483 -0.24781,-4.082 -0.11411,-0.345 -0.0481,-0.08 -0.3851,-0.176 -0.55447,0.06 0.85935,-1.344 0,-1.149 -0.10519,-0.394 -0.29596,-0.577 -3.94549,-0.667 -0.12124,-0.218 0.007,-0.06 0.66145,-1.694 1.32467,-3.229 0.26565,-0.107 1.4049,-0.415 0.45998,-0.323 0.0321,-0.03 0.10341,-0.754 5.33613,1.54 4.0489,2.767 3.06297,2.409 1.77574,0.458"
+ class="c04007"
+ id="Gila, AZ" />
+ <path
+ d="m 237.31956,394.57614 0.3851,1.487 0.42611,1.854 0.16759,1.858 2.14657,6.547 0.0571,0.03 0.28882,0 1.10895,-1.091 0.0481,-0.161 -0.11232,-0.451 0.0232,-0.103 1.9772,-1.366 3.38389,-0.644 0.29596,0 -0.73098,4.709 -1.25336,8.283 -0.39401,2.532 -0.041,0 -4.53027,-0.699 -5.97975,-0.829 -3.01305,-0.307 -0.6347,-0.09 -7.22419,-1.181 -4.27354,-0.845 -7.7947,-1.315 0.68284,-3.957 2.24106,-12.872 0.17651,-0.995 0.0802,0.04 1.70442,2.106 2.09665,0.529 2.59586,0.46 4.88507,0.78 0.62044,-3.957 0.40114,-1.975 6.21152,1.047 3.97758,0.609"
+ class="c04021"
+ id="Pinal, AZ" />
+ <path
+ d="m 193.79079,389.16714 -3.65666,19.799 -1.94511,10.576 -0.32092,-0.2 -25.85875,-15.541 0.63649,-2.766 0.0553,-0.09 0.16759,-0.06 0.32983,0.07 0.82012,-0.756 0.77911,-1.132 2.01821,0.152 2.66718,-1.655 0.83438,-1.173 0,0 0.16937,-0.587 0.18542,-1.511 -0.57052,-1.332 -0.0553,-0.06 -0.0571,-0.07 2.76523,0.548 1.94333,0.328 1.92907,-9.827 5.8175,1.093 -0.37797,1.977 11.72415,2.209"
+ class="c04027"
+ id="Yuma, AZ" />
+ <path
+ d="m 196.39378,375.04114 11.00031,1.976 8.285,4.211 0.75593,-0.458 1.14104,-1.437 0.0802,-0.316 0.77911,-1.189 0.27278,0.08 7.70557,2.394 4.33237,0.724 0.55447,-0.06 0.3851,0.177 0.0481,0.08 0.11411,0.344 0.24781,4.083 2.8205,4.482 0.47425,-0.4 0.5616,-0.321 1.36746,5.167 -3.97758,-0.61 -6.21152,-1.046 -0.40114,1.975 -0.62044,3.956 -4.88507,-0.779 -2.59586,-0.46 -2.09665,-0.529 -1.70442,-2.106 -0.0802,-0.04 -0.17651,0.995 -2.24106,12.872 -0.68284,3.956 -21.51211,-3.795 6.25965,-33.925"
+ class="c04013"
+ id="Maricopa, AZ" />
+ <path
+ d="m 243.49008,312.70114 11.93274,1.872 -9.80221,62.661 -1.77574,-0.458 -3.06297,-2.409 -4.0489,-2.767 -5.33613,-1.54 0.68462,-3.771 0.61687,-3.76 -0.74702,-0.128 -3.23769,-0.571 -0.0571,-0.9 0.54734,-3.174 -4.41974,-0.627 -0.6347,-0.06 -5.2559,-0.884 0.67393,-4.001 -1.6866,-1.929 -9.08015,-5.721 -3.1646,-3.247 -1.56714,-0.845 -0.71671,-0.16 -0.28883,-0.04 -0.26565,0.02 2.10557,-10.157 1.28545,-2.626 2.78128,-1.24 1.95224,-0.747 1.07685,-0.137 0.15155,0.05 0.80407,-0.09 0.79516,-0.169 4.29137,-1.279 0.27278,-0.09 0.23356,-0.194 0.58656,-0.69 0.21751,-0.396 0.25673,-1.5 -0.19968,-0.322 -0.21751,-0.676 0,-0.369 0.0481,-0.298 0.94849,-2.972 0.0802,-0.217 1.1963,-3.022 1.76861,-3.839 20.25697,3.414"
+ class="c04005"
+ id="Coconino, AZ" />
+ <path
+ d="m 202.79785,340.26314 0.26565,-0.02 0.28883,0.04 0.71671,0.16 1.56714,0.845 3.1646,3.247 9.08015,5.721 1.6866,1.929 -0.67393,4.001 5.2559,0.884 0.6347,0.06 4.41974,0.627 -0.54734,3.174 0.0571,0.9 3.23769,0.571 0.74702,0.128 -0.61687,3.76 -0.68462,3.771 -0.10341,0.754 -0.0321,0.03 -0.45998,0.323 -1.4049,0.415 -0.26565,0.107 -1.32467,3.229 -0.66145,1.694 -0.007,0.06 0.12124,0.218 3.94549,0.667 0.29596,0.577 0.10519,0.394 0,1.149 -0.85935,1.344 -4.33237,-0.724 -7.70557,-2.394 -0.27278,-0.08 -0.77911,1.189 -0.0802,0.315 -1.14104,1.437 -0.75593,0.459 -8.285,-4.211 -11.00031,-1.976 1.34251,-7.247 5.06156,-27.531"
+ class="c04025"
+ id="Yavapai, AZ" />
+ <path
+ d="m 50.323251,148.95214 6.332754,1.993 4.974207,1.375 -0.547341,0.914 -0.754154,0.983 -1.165997,0.112 -1.631326,1.453 -1.301495,6.019 0.153327,0.531 0.153327,1.478 -0.09806,0.282 -0.802292,0.931 -0.443934,0.306 -0.939573,-0.274 -0.666793,-0.892 0.354791,-1.189 -1.880928,-0.611 -2.955998,-0.867 0.287042,-1.92 0.06418,-1.31 0.02496,-2.571 -0.0071,-0.218 -0.04101,-0.273 -0.08914,-0.297 0.394015,-3.785 0.586564,-2.17"
+ class="c06015"
+ id="Del Norte, CA" />
+ <path
+ d="m 61.630212,152.32014 4.708559,1.317 0.04101,0 1.228398,0.255 1.752561,0.637 0.722062,0.215 0.426106,0.122 5.569686,1.574 2.208976,0.547 2.016426,0.546 0.52238,0.169 0.916396,0.282 13.733447,4.09 -0.443935,1.012 -0.158675,0.555 -0.877172,3.231 0.02496,0.07 0.08023,0.05 -2.089524,7.763 -1.502959,5.489 -9.199609,-2.557 -4.765611,-1.381 -3.471248,-0.933 0.417192,-2.337 -2.032472,-1.254 -3.608529,1.421 -2.515629,2.605 0.153327,1.068 -0.208596,0.371 -0.3851,0.305 -0.329831,-0.05 -1.349633,-0.685 -2.314165,-2.442 -1.269403,-1.905 -0.788029,-0.763 -0.82012,-0.659 0.128367,-4.491 -0.320917,-0.459 -2.636864,-0.779 0.443934,-0.306 0.802292,-0.931 0.09806,-0.282 -0.153327,-1.478 -0.153327,-0.531 1.301495,-6.019 1.631326,-1.453 1.165997,-0.112 0.754154,-0.983 0.547341,-0.914"
+ class="c06093"
+ id="Siskiyou, CA" />
+ <path
+ d="m 142.45127,377.78114 11.55656,2.418 9.48131,1.858 2.45857,0.424 3.81535,0.763 -1.92729,0.476 -1.13212,6.975 0.0143,0.04 0.40115,1.068 0.88609,0.62 0.312,0.138 1.67233,0.28 0.0571,0.06 0.0553,0.06 0.57052,1.332 -0.18542,1.512 -0.16937,0.586 0,0 -0.83438,1.173 -2.66718,1.655 -2.01821,-0.152 -0.11232,0 -14.20591,-1.686 -0.28169,-0.03 -1.61528,-0.193 -6.00292,-0.715 -2.55485,-0.298 -1.88093,-0.217 0.86826,-3.799 1.81496,-6.395 0.56338,-2.63 1.06081,-5.319"
+ class="c06025"
+ id="Imperial, CA" />
+ <path
+ d="m 176.23309,369.30414 -1.7276,2.442 -0.53843,0.933 -0.49029,1.76 -0.10519,0.747 -0.54555,2.724 -0.74881,2.603 -2.31416,2.731 -3.81535,-0.763 -2.45857,-0.424 -9.48131,-1.858 -11.55656,-2.418 -4.00967,-0.909 -5.9227,-1.285 -4.08099,-0.892 -7.52192,-1.806 0.0891,-0.387 -2.00216,-1.784 -2.69927,-0.619 0.13728,-0.66 2.45858,-2.401 -0.9164,-1.271 -1.06793,-0.401 -0.55626,-1.495 -1.19631,-2.718 0.62757,-1.138 2.35339,-2.034 2.66004,0.603 0.72385,0.169 0.16046,0.385 2.45858,0.916 5.48054,1.22 2.40152,0.09 4.66934,0.82 13.53198,2.86 9.43317,2 1.31932,-0.433 2.42649,0.119 12.82418,2.573"
+ class="c06065"
+ id="Riverside, CA" />
+ <path
+ d="m 116.3037,370.09914 2.69927,0.619 2.00216,1.784 -0.0891,0.387 7.52192,1.806 4.08099,0.892 5.9227,1.285 4.00967,0.909 -1.06081,5.319 -0.56338,2.629 -1.81496,6.396 -0.86826,3.799 -1.79892,-0.218 -3.6638,-0.44 -3.72976,-0.433 -5.26303,-0.621 -5.05444,-0.617 -0.11232,0 -0.87539,-3.833 0.35301,-5.68 0,-0.192 0.009,0 0.0143,-1.24 0.009,-0.481 -0.22464,-1.968 -0.0963,-0.697 -0.36906,-1.097 -0.0339,-0.09 -1.03585,-2.612 -0.30487,-0.731 -0.0571,-0.114 -0.41719,-0.883 -0.61866,-0.891 -0.37797,-0.408 -0.41006,-0.277 2.21789,-2.289"
+ class="c06073"
+ id="San Diego, CA" />
+ <path
+ d="m 113.53134,358.98614 1.63132,2.167 1.19631,2.718 0.55626,1.495 1.06793,0.401 0.9164,1.271 -2.45858,2.401 -0.13728,0.66 -2.21789,2.289 -0.12123,-0.488 -0.32092,-0.651 -0.19968,-0.291 -3.5283,-4.426 -2.83655,-3.472 -0.69175,-0.854 0.49029,-0.866 1.02871,-1.295 2.02534,-1.741 0.85935,0.06 0.21751,0.05 2.52276,0.579"
+ class="c06059"
+ id="Orange, CA" />
+ <path
+ class="c06037"
+ d="m 96.897162,381.80514 -1.429862,-0.06 -0.907481,-1.118 -0.121235,-0.192 -0.442151,-1.407 -0.401146,-2.514 0.506335,0.17 2.635082,4.594 0.21751,0.467 -0.05705,0.06 m -0.971664,-15.651 -0.08023,-0.06 -0.01605,-0.166 0.01605,-0.03 0.08736,0.02 0.982362,0.33 1.10003,0.884 0.891435,0.715 0.675708,0.571 0.868255,1.799 0.0713,0.185 0.0481,0.385 -0.0874,0.209 -0.26564,0.155 -0.0161,0 -0.15333,0 -2.314161,-1.093 -0.153327,-0.137 -1.654503,-3.776 m 24.332611,-26.405 -1.22305,5.302 -0.56874,3.063 -0.42789,2.603 -0.16937,1.125 -1.23553,2.675 -1.06794,1.784 -0.4261,0.708 -1.33537,0.649 -0.48138,0.589 -0.0321,0.16 0.0874,0.362 0.15333,0.217 -2.52276,-0.579 -0.21751,-0.05 -0.85935,-0.06 -2.02534,1.741 -1.02871,1.295 -0.49029,0.866 -1.42986,0.195 -1.50296,-0.03 -0.69176,-0.273 -0.34409,-0.195 -1.3425,-0.866 -0.24069,-0.2 -0.14441,-0.811 0.1355,-0.144 0.43502,-0.323 0.22464,-0.05 0.11232,-0.232 0.11945,-0.579 -0.14263,-1.061 -0.0891,-0.515 -0.0481,-0.289 -0.1034,-0.596 -0.18542,-0.724 -0.25852,-0.697 -0.0232,-0.05 -0.0321,-0.07 -0.009,-0.01 -0.19968,-0.394 -0.041,-0.05 -0.15154,-0.218 -0.0499,-0.07 -0.0553,-0.05 -0.3227,-0.305 -0.465331,-0.184 -1.839922,-0.386 -1.445907,-0.193 -0.763069,0.06 -2.84546,-1.262 0.240688,-0.644 1.83279,-0.795 1.477999,-0.619 2.21789,0.548 1.124991,-1.794 0.121235,-0.841 -1.743647,-12.304 -0.08023,-0.667 22.419593,5.24"
+ id="Los Angeles, CA" />
+ <path
+ d="m 88.332255,330.15614 1.060807,0.385 1.823876,0.85 0.249602,0.596 0.08736,0.625 4.637244,2.138 1.727601,0.426 1.743647,12.304 -0.121235,0.841 -1.124991,1.794 -2.21789,-0.547 -1.477999,0.618 -1.83279,0.795 -0.240688,0.644 -2.522761,-1.904 -2.772363,-4.823 -1.896973,-2.442 -0.442152,-0.562 -0.233556,-0.105 0.531295,-0.369 0.153327,-0.136 0.353008,-1.126 2.51563,-10.002"
+ class="c06111"
+ id="Ventura, CA" />
+ <path
+ class="c06083"
+ d="m 68.428295,346.58814 3.358927,0.271 1.502959,1.375 -0.04992,0.763 -0.01426,0.144 -0.08023,0.02 -2.742054,0.321 -0.247819,0.01 -0.730977,-0.746 -0.137281,-0.24 -0.859343,-1.928 m 9.385027,1.05 0.7078,0.5 1.864882,0.618 0.06418,-0.04 0.03031,-0.02 0.04814,-0.02 0.0731,-0.04 0.09628,-0.06 0.05705,-0.02 0.506335,0.03 0.609741,0.451 0.128367,0.191 -0.0071,0 -0.0071,0.02 -0.01783,0.01 -0.618656,0.483 -0.176504,0.144 -0.128366,0.02 -3.157463,0.06 -0.684622,-0.162 -0.666793,-0.264 -0.0071,0 -0.249602,-0.123 -0.563387,-0.262 -0.504552,-0.371 -0.04101,-0.135 -0.369054,-2.09 0.128367,-0.162 0.112321,0.03 0.989492,0.392 1.78287,0.811 m -10.936124,-24.78 2.868638,0.312 1.021584,0.396 0.946704,0.972 1.246226,-0.209 1.20522,-0.676 3.711936,-1.069 0.345876,0.41 1.053676,0.988 3.253738,2.611 4.080989,3.213 0.820121,0.211 0.345876,0 0.554473,0.139 -2.51563,10.002 -0.353008,1.126 -0.153327,0.136 -0.531295,0.369 -1.340718,-1.229 -1.01267,-0.44 -1.028716,-0.146 -0.279911,0 -0.04101,0 -1.100031,-0.05 -2.315948,-0.731 -0.79516,-0.804 -1.358546,-0.981 -0.545559,-0.216 -1.413815,-0.524 -1.182043,-0.314 -1.374593,-0.288 -1.574274,-0.2 -1.872013,-0.323 -2.410441,-3.148 0.151544,-1.826 1.182043,-6.065 0.41006,-1.648"
+ id="Santa Barbara, CA" />
+ <path
+ d="m 59.267909,301.13614 20.233791,5.539 0.353008,0.1 -1.01267,3.92 1.977203,2.94 2.144792,4.413 0.779115,2.298 2.00038,0.531 2.146575,2.523 0.884304,2.685 -0.996625,3.935 -0.345876,0 -0.820121,-0.211 -4.080989,-3.213 -3.253738,-2.611 -1.053676,-0.988 -0.345876,-0.41 -3.711936,1.07 -1.20522,0.675 -1.246226,0.209 -0.946704,-0.972 -1.021584,-0.396 -2.868638,-0.312 0.304871,-0.556 0.02496,-0.04 0.288825,-0.642 0.233556,-0.619 0.110538,-0.379 0.08201,-0.384 0.02318,-0.105 0.0089,-0.04 0.03922,-0.511 0,-0.03 -0.05527,-0.369 -0.08023,-0.22 -0.16759,-0.174 -0.556256,-0.571 -0.08023,-0.07 -0.160458,-0.111 -1.663418,-4.532 -3.077233,-5.674 -2.02534,-3.135 -0.313785,-0.328 -0.183636,-0.224 -0.290608,-1.02 -0.07131,-1.988"
+ class="c06079"
+ id="San Luis Obispo, CA" />
+ <path
+ d="m 91.63413,309.78514 8.71823,2.16 9.87532,2.427 7.87494,1.84 1.06259,0.305 6.80521,1.399 -0.74702,1.904 -0.1765,0.658 -0.24069,2.708 -3.90627,16.722 -0.64183,-0.159 -22.419593,-5.24 0.08023,0.667 -1.727601,-0.426 -4.637244,-2.138 -0.08736,-0.625 -0.249602,-0.596 -1.823876,-0.85 -1.060807,-0.385 -0.554473,-0.139 0.996625,-3.935 -0.884304,-2.685 -2.146575,-2.523 -2.00038,-0.531 -0.779115,-2.298 -2.144792,-4.413 -1.977203,-2.94 1.01267,-3.92 11.779422,3.013"
+ class="c06029"
+ id="Kern, CA" />
+ <path
+ d="m 125.97042,317.91614 4.63725,1.116 29.65804,6.556 1.68838,0 3.68697,5.537 1.27119,1.896 0.47246,0.7 6.81591,10.198 2.51385,3.743 -0.57765,2.556 -0.0321,0.321 0.0161,0.121 1.01267,2.635 1.27832,2.008 0.0642,0.925 1.18739,4.999 1.17313,1.407 1.02159,1.138 0.8843,1.545 -0.0642,0.997 -0.041,0.03 -2.41044,1.391 -1.6242,0.666 -2.36943,0.908 -12.82418,-2.573 -2.42649,-0.119 -1.31932,0.433 -9.43317,-2 -13.53198,-2.86 -4.66934,-0.82 -2.40152,-0.09 -5.48054,-1.22 -2.45858,-0.916 -0.16046,-0.385 -0.72385,-0.169 -2.66004,-0.603 -2.35339,2.034 -0.62757,1.138 -1.63132,-2.167 -0.15333,-0.217 -0.0874,-0.362 0.0321,-0.16 0.48138,-0.589 1.33537,-0.649 0.4261,-0.708 1.06794,-1.784 1.23553,-2.675 0.16937,-1.124 0.42789,-2.603 0.56874,-3.063 1.22305,-5.303 0.64183,0.159 3.90627,-16.722 0.24069,-2.708 0.1765,-0.658 0.74702,-1.904"
+ class="c06071"
+ id="San Bernardino, CA" />
+ <path
+ d="m 114.55114,275.53614 16.61813,3.931 9.2424,13.876 0.34409,0.513 1.96829,2.926 1.14995,1.744 6.06711,9.08 4.91715,7.385 0.6347,0.948 2.63687,3.953 0.2086,0.306 3.61566,5.383 -1.68838,0 -29.65804,-6.556 -4.63725,-1.116 -6.80521,-1.399 0.87539,-1.912 0.30487,-1.076 -0.0802,-1.519 -0.51347,-7.481 -1.3425,-7.611 -0.43324,-3.431 0.52238,-2.264 0.15155,-1.237 -0.0481,-0.87 -0.29774,-2.819 -0.23355,-0.476 -1.35677,-1.469 -0.35479,-0.03 -1.38886,-0.981 -0.0571,-0.05 -0.15154,-0.339 -0.90035,-4.525 0.0481,-1.396 0.64183,-1.488"
+ class="c06027"
+ id="Inyo, CA" />
+ <path
+ d="m 117.97603,293.48714 0.43324,3.431 1.3425,7.611 0.51347,7.481 0.0802,1.519 -0.30487,1.076 -0.87539,1.912 -1.06259,-0.305 -7.87494,-1.84 -9.87532,-2.427 -8.71823,-2.16 1.905888,-7.433 0.891435,-2.999 0.586564,-0.159 0.465329,0.111 0.747023,-2.963 -0.458198,-2.218 -0.79516,-0.202 2.394394,-1.454 3.351795,-1.199 2.29812,0.612 3.36606,0.875 0.51525,-1.888 7.89811,1.858 3.17529,0.761"
+ class="c06107"
+ id="Tulare, CA" />
+ <path
+ d="m 94.977011,293.92214 0.79516,0.202 0.458198,2.218 -0.747023,2.963 -0.465329,-0.111 -0.586564,0.159 -0.891435,2.999 -1.905888,7.433 -11.779422,-3.013 -0.353008,-0.1 -1.117859,-3.109 7.955165,-4.502 1.246226,-4.924 2.740271,0.674 2.586945,0.265 2.064563,-1.157"
+ class="c06031"
+ id="Kings, CA" />
+ <path
+ d="m 107.41609,267.17914 1.33359,0.362 1.12678,0.362 0.24781,0.298 0.55448,1.109 0.21038,2.394 -5.6107,3.454 -0.79516,0.522 -0.33696,0.332 -0.21751,0.426 -0.15333,1.027 -0.016,0.396 -0.0392,0.151 -0.36906,0.859 -0.26565,0.289 -0.50633,0.451 -0.54734,0.303 -2.611907,-0.167 -0.761286,0.121 -2.925689,1.824 -0.788029,0.522 -0.183635,0.152 -1.262272,1.406 -0.304871,0.507 -0.458197,0.449 -0.06418,0.02 -7.723456,-0.25 -1.100031,-0.208 -1.269403,-1.031 -0.691754,-1.123 -0.185418,-0.435 -0.08736,-0.289 -0.06418,-0.431 -0.506335,-3.948 1.461953,-0.868 3.487294,-0.355 2.724225,0.364 1.777521,0 6.450423,-3.938 1.945112,0.474 1.599225,-1.432 0.40115,-1.46 6.04393,-3.681 0.48137,1.044"
+ class="c06039"
+ id="Madera, CA" />
+ <path
+ d="m 114.55114,275.53614 -0.64183,1.488 -0.0481,1.396 0.90035,4.525 0.15154,0.339 0.0571,0.05 1.38886,0.981 0.35479,0.03 1.35677,1.469 0.23355,0.476 0.29774,2.819 0.0481,0.87 -0.15155,1.237 -0.52238,2.264 -3.17529,-0.761 -7.89811,-1.858 -0.51525,1.888 -3.36606,-0.875 -2.29812,-0.612 -3.351795,1.199 -2.394394,1.454 -2.064563,1.157 -2.586945,-0.265 -2.740271,-0.674 -1.246226,4.924 -7.955165,4.502 -3.640621,-4.452 -1.132122,-1.631 -0.08023,-1.298 0.490289,-2.4 0.914612,-0.988 1.729384,-3.601 -4.073858,-7.133 8.452587,-5.032 0.506335,3.948 0.06418,0.431 0.08736,0.289 0.185418,0.435 0.691754,1.123 1.269403,1.031 1.100031,0.208 7.723392,0.25 0.06418,-0.02 0.458197,-0.449 0.304871,-0.507 1.262272,-1.406 0.183635,-0.152 0.788029,-0.522 2.925689,-1.824 0.761286,-0.121 2.611906,0.167 0.54734,-0.303 0.50633,-0.451 0.26565,-0.289 0.36906,-0.859 0.0392,-0.151 0.016,-0.396 0.15333,-1.027 0.21751,-0.426 0.33696,-0.332 0.79516,-0.522 5.6107,-3.454 3.66201,3.832"
+ class="c06019"
+ id="Fresno, CA" />
+ <path
+ d="m 60.738777,275.14214 -0.09806,0.467 0.185419,0.708 1.479782,2.456 1.67768,3.022 1.519005,4.122 2.419355,4.88 1.100031,1.343 3.383887,2.85 0.488506,0.193 0.09806,0 0.135498,-0.08 0.893218,-1.311 -0.490289,2.4 0.08023,1.298 1.132122,1.631 3.640621,4.452 1.117859,3.109 -20.233791,-5.539 -0.570518,-0.833 -0.948487,-1.752 0.03209,-0.852 0.02318,-0.411 0.04101,-0.747 -0.105189,-0.659 -0.01605,-0.1 -2.128747,-4.563 -0.474243,-0.836 -0.914612,-1.031 -0.258517,-0.231 -0.0071,0 -0.178287,-0.02 -0.112321,-0.06 -0.176504,-0.223 -0.112321,-0.25 -0.451066,-1.045 -0.160458,-0.378 -0.01605,-0.362 0.588347,-5.849 1.285449,-0.457 0.03922,0.01 0.290608,0 0.222859,-0.1 0.443935,-0.328 0.272779,-0.282 0.199681,-0.241 0.345877,-0.524 0.329831,-0.656 0.884303,-1.913 0.01605,-0.266 -0.103406,-0.836 -0.0089,-0.06 3.198469,-0.153"
+ class="c06053"
+ id="Monterey, CA" />
+ <path
+ d="m 60.738777,275.14214 1.139254,0.162 1.601017,-0.9 1.638458,0.347 3.574654,0.961 -0.369054,0.385 -0.128367,0.179 -0.04814,0.128 0.121235,0.33 0.971664,2.112 3.157462,2.887 0.194333,0.33 4.073858,7.133 -1.729384,3.601 -0.914612,0.988 -0.893218,1.311 -0.135498,0.08 -0.09806,0 -0.488506,-0.193 -3.383882,-2.85 -1.100031,-1.343 -2.419355,-4.88 -1.519005,-4.122 -1.67768,-3.022 -1.479782,-2.456 -0.185419,-0.708 0.09806,-0.467"
+ class="c06069"
+ id="San Benito, CA" />
+ <path
+ d="m 87.230441,264.54414 0.868258,4.427 -0.0071,0.339 -0.01604,0.06 -0.08023,0.08 0.730977,4.363 0.472461,0.672 1.296146,1.683 -1.777521,0 -2.724262,-0.364 -3.487294,0.355 -1.461953,0.868 -8.452587,5.032 -0.194333,-0.33 -3.157462,-2.887 -0.971664,-2.112 -0.121235,-0.33 0.04814,-0.128 0.128367,-0.179 0.369054,-0.385 -0.247819,-0.257 -0.137281,-0.303 -0.01605,-0.13 0.256733,-0.9 0.458198,-0.209 0.377968,-0.593 0.256734,-1.24 -0.09628,-0.303 5.881687,-3.473 0.03209,-0.754 -0.103406,-0.226 -0.135498,-0.08 2.611904,-0.772 9.39929,-1.928"
+ class="c06047"
+ id="Merced, CA" />
+ <path
+ d="m 54.268742,263.90214 -0.0071,0.255 0.03922,0.129 0.483157,1.014 0.939573,1.904 0.458197,0.656 1.230181,1.081 0.7702,0.552 1.551096,1.641 2.144793,3.549 0.121235,0.202 -0.121235,0.419 -1.139254,-0.162 -3.198469,0.153 -0.128366,-0.724 -0.281694,-1.332 -0.201464,-0.497 -0.176504,-0.339 -0.160458,-0.217 -0.361923,-0.323 -0.169373,-0.04 -0.900349,0.209 -0.804074,-0.04 -0.415409,-0.06 -0.290608,-0.07 -0.144412,-0.08 -0.05705,-0.03 -0.254951,-0.145 -0.194332,-0.114 -0.698885,-0.793 -0.691754,-0.995 -0.520598,-1.241 -0.43502,-1.307 -0.04814,-0.955 0.146196,-0.91 1.492262,-0.249 1.567142,0.433 0.121236,-0.312 0.336962,-1.261"
+ class="c06087"
+ id="Santa Cruz, CA" />
+ <path
+ d="m 52.765783,253.31014 -0.03209,0 -0.392231,2.347 0.238904,0.376 2.781277,2.918 0.201465,0.127 0.481374,0.169 0.329831,-0.09 0.0089,-0.02 0.329831,0.827 -2.444315,3.929 -0.336962,1.261 -0.121236,0.312 -1.567142,-0.433 -1.492262,0.249 -0.146196,0.91 0.04814,0.955 -0.144413,-0.233 -0.490289,-0.804 -0.659662,-1.231 -0.08023,-0.226 0.04101,-1.091 0.297739,-5.962 0.55269,-2.427 0.675708,-2.417 1.920151,0.545"
+ class="c06081"
+ id="San Mateo, CA" />
+ <path
+ d="m 55.32955,249.51814 0.79516,0.02 0.09627,0.06 0.540209,0.755 0.344094,1.077 0.0731,0.537 3.141417,3.231 6.355931,-0.17 1.301495,-0.144 -0.722062,2.605 -0.989493,3.599 0.128366,0.275 0.980579,1.494 -0.01605,-0.02 -6.667933,-1.902 -0.217511,-0.02 -0.185418,0.137 -0.137281,0.06 -0.625787,0.08 -0.320917,-0.04 -2.203627,-0.754 -0.287042,-0.417 -0.329831,-0.827 0.01605,-4.035 -1.390639,-4.035 0.320917,-1.558"
+ class="c06001"
+ id="Alameda, CA" />
+ <path
+ d="m 56.713057,259.97314 0.287042,0.417 2.203627,0.754 0.320917,0.04 0.625787,-0.08 0.137281,-0.06 0.185418,-0.137 0.217511,0.02 6.667933,1.902 -0.281693,0.114 -0.07131,1.205 0.515249,5.882 2.023558,1.745 0.09628,0.303 -0.256734,1.24 -0.377968,0.593 -0.458198,0.209 -0.256733,0.9 0.01605,0.13 0.137281,0.303 0.247819,0.257 -3.574654,-0.961 -1.638458,-0.347 -1.601017,0.9 0.121235,-0.419 -0.121235,-0.202 -2.144793,-3.549 -1.551096,-1.64 -0.7702,-0.553 -1.230181,-1.081 -0.458197,-0.656 -0.939573,-1.904 -0.483157,-1.014 -0.03922,-0.129 0.0071,-0.255 2.444315,-3.929"
+ class="c06085"
+ id="Santa Clara, CA" />
+ <path
+ d="m 80.48941,252.10314 3.271566,6.752 3.47838,5.68 -0.0089,0 -9.39929,1.928 -2.611904,0.771 0.135498,0.08 0.103406,0.226 -0.03209,0.754 -5.881687,3.473 -2.023558,-1.745 -0.515249,-5.882 0.07131,-1.205 0.281693,-0.114 0.01605,0.02 4.73352,-2.798 0.836166,-0.536 0.360139,-0.162 2.034255,-0.539 0.449283,0.162 0.891435,0.177 1.030499,0.119 0.98771,-0.258 0.643616,-2.642 1.148168,-4.269"
+ class="c06099"
+ id="Stanislaus, CA" />
+ <path
+ d="m 87.239356,264.53514 0.08736,-0.9 0.153327,-0.225 1.051893,-0.756 5.223809,-1.092 0.345877,0.178 1.511874,1.631 0.126583,0.234 0.10519,0.07 0.515249,0.248 1.663418,0.451 0.570518,0 2.208976,-0.339 0.27991,-0.152 1.5511,-1.237 1.04654,-0.241 1.69373,1.22 1.07685,1.239 0.48316,1.277 -6.04393,3.681 -0.40115,1.46 -1.599229,1.432 -1.945112,-0.474 -6.450423,3.938 -1.296146,-1.683 -0.472461,-0.672 -0.730977,-4.363 0.08023,-0.08 0.01604,-0.06 0.0071,-0.339 -0.868258,-4.427 0.0089,0"
+ class="c06043"
+ id="Mariposa, CA" />
+ <path
+ d="m 104.29072,252.34614 -0.13549,0.112 -0.19434,0.678 -0.28882,2.111 0.73811,1.173 0.53129,0.451 0.41719,0.273 0.75594,0.41 0.6347,0.465 0.44215,0.346 0.7078,0.674 0.49742,1.086 0.92353,4.089 -0.62579,2.024 -0.9574,0.733 -0.32092,0.208 -0.48137,-1.044 -0.48316,-1.277 -1.07685,-1.239 -1.69373,-1.22 -1.04654,0.241 -1.5511,1.237 -0.27991,0.152 -2.208976,0.339 -0.570518,0 -1.663418,-0.451 -0.515249,-0.248 -0.10519,-0.07 -0.126583,-0.234 -1.511874,-1.631 -0.345877,-0.179 -5.223809,1.093 -1.051893,0.756 -0.153327,0.225 -0.08736,0.9 -3.47838,-5.68 3.139634,-2.073 1.326456,-1.304 2.210758,-2.28 2.112701,-1.961 2.692134,-2.336 0.43502,-0.203 0.417192,-0.13 2.208975,-0.303 1.952244,2.275 0.26565,-0.13 1.37459,-0.459 0.98771,-0.121 0.69888,0.162 0.0802,0.08 0.0642,0.16 0.56338,2.113"
+ class="c06109"
+ id="Tuolumne, CA" />
+ <path
+ d="m 107.42501,243.90214 3.43024,5.135 2.30703,3.435 9.81827,14.772 8.18872,12.223 -16.61813,-3.931 -3.66201,-3.832 -0.21038,-2.394 -0.55448,-1.109 -0.24781,-0.298 -1.12678,-0.362 -1.33359,-0.362 0.32092,-0.208 0.9574,-0.733 0.62579,-2.024 -0.92353,-4.089 -0.49742,-1.086 -0.7078,-0.674 -0.44215,-0.346 -0.6347,-0.465 -0.75594,-0.41 -0.41719,-0.273 -0.53129,-0.451 -0.73811,-1.173 0.28882,-2.111 0.19434,-0.678 0.13549,-0.112 1.81497,-1.544 0.83616,-1.918 -0.72384,-2.669 0.025,-0.234 0.41897,-1.077 0.76307,-1.002"
+ class="c06051"
+ id="Mono, CA" />
+ <path
+ d="m 103.19069,237.55214 4.23432,6.35 -0.76307,1.002 -0.41897,1.077 -0.025,0.234 0.72384,2.669 -0.83616,1.918 -1.81497,1.544 -0.56338,-2.113 -0.0642,-0.16 -0.0802,-0.08 -0.69888,-0.162 -0.98771,0.121 -1.37459,0.459 -0.26565,0.13 -1.952244,-2.275 -0.465329,-1.954 1.116077,-4.331 2.371216,-1.18 0.44037,-0.321 1.43878,-1.28 0.0891,-0.137 0.12123,-0.64 -0.025,-0.443 -0.19968,-0.427"
+ class="c06003"
+ id="Alpine, CA" />
+ <path
+ d="m 98.303846,248.26514 -2.208975,0.303 -0.417192,0.13 -0.43502,0.203 -2.692134,2.336 -2.112701,1.961 -2.210758,2.28 -1.326456,1.304 -3.139634,2.073 -3.271566,-6.752 -0.304871,-3.638 0.119453,0.137 0.224641,0.137 1.399553,0.298 4.250362,-1.343 3.214514,-1.415 0.836166,-0.433 0.779115,0.05 6.830174,0.419 0.465329,1.954"
+ class="c06009"
+ id="Calaveras, CA" />
+ <path
+ d="m 98.954594,241.98014 -1.116077,4.331 -6.830174,-0.419 -0.779115,-0.05 -0.836166,0.433 -3.214514,1.415 -4.250362,1.343 -1.399553,-0.298 -0.224641,-0.137 -0.119453,-0.137 -0.09628,-1.76 1.244444,-4.709 1.663417,0.193 5.20598,1.76 0.796943,0.201 1.276535,0.146 3.521168,0.159 0.996624,-0.159 4.161219,-2.316"
+ class="c06005"
+ id="Amador, CA" />
+ <path
+ d="m 80.184539,248.46514 0.304871,3.638 -1.148168,4.269 -0.643616,2.642 -0.98771,0.258 -1.030499,-0.119 -0.891435,-0.177 -0.449283,-0.162 -2.034255,0.539 -0.360139,0.162 -0.836166,0.536 -4.73352,2.798 -0.980579,-1.494 -0.128366,-0.275 0.989493,-3.599 0.722062,-2.605 1.262272,-6.235 0.779114,-1.011 1.93798,-2.052 0.408277,0 0.313785,0.132 0.215727,0.497 0.331614,0.314 0.866475,0.216 3.182423,0.371 0.121235,-0.02 1.237311,-0.426 1.454822,0.04 0.09628,1.76"
+ class="c06077"
+ id="San Joaquin, CA" />
+ <path
+ d="m 57.16234,246.07014 1.551097,0.94 0.891435,0.258 3.792164,0.922 0.256733,0.03 0.233556,-0.02 0.162241,-0.106 0.144413,-0.176 0.369054,1.013 0.160458,0.215 0.451066,0.186 0.199682,0.05 0.698885,0.02 0.788028,-0.223 0.426106,-0.267 0.08736,-0.159 0.04992,-0.322 0.08736,-0.143 0.128366,-0.06 0.199682,0 1.021584,0.183 0.320917,0.168 0.05705,0.07 -1.262272,6.235 -1.301495,0.144 -6.355931,0.17 -3.141417,-3.231 -0.0731,-0.537 -0.344094,-1.077 -0.540209,-0.755 -0.09627,-0.06 -0.79516,-0.02 -0.689971,-0.506 -0.659662,-1.503 2.282074,-0.499 0.377968,-0.179 0.490289,-0.383 0.04814,-0.153 -0.01605,-0.225"
+ class="c06013"
+ id="Contra Costa, CA" />
+ <path
+ d="m 102.28143,234.10514 0.90926,3.447 0.19968,0.427 0.025,0.443 -0.12123,0.64 -0.0891,0.137 -1.43878,1.28 -0.44037,0.321 -2.371216,1.18 -4.161219,2.316 -0.996624,0.159 -3.521168,-0.159 -1.276535,-0.146 -0.796943,-0.201 -5.20598,-1.76 -1.663417,-0.193 -0.722063,-5.095 2.19293,-2.619 0.490289,-1.068 0.377969,-0.314 1.895191,-0.538 2.419354,-0.394 0.771983,0.04 0.121235,0.05 0.417191,0.246 0.554473,0.572 0.199681,0.449 0.146196,0.245 0.247819,0.287 1.060807,1.052 0.21751,0.13 0.144413,0 0.859343,-0.162 0.426106,-0.191 0.948487,-0.795 3.83317,0.144 1.01267,0.09 0.369054,-0.09 0.249602,-0.107 0.07131,-0.271 0.21751,-0.169 2.426492,0.618"
+ class="c06017"
+ id="El Dorado, CA" />
+ <path
+ d="m 74.84841,234.79014 5.762235,2.111 0.722063,5.095 -1.244444,4.709 -1.454822,-0.04 -1.237311,0.426 -0.121235,0.02 -3.182423,-0.371 -0.866475,-0.216 -0.331614,-0.314 -0.215727,-0.497 -0.313785,-0.132 -0.408277,0 -1.93798,2.052 -0.779114,1.011 -0.05705,-0.07 -0.320917,-0.168 -1.021584,-0.183 -0.199682,0 -0.128366,0.06 -0.08736,0.143 -0.04992,0.322 -0.08736,0.159 -0.426106,0.267 -0.788028,0.223 -0.698885,-0.02 -0.199682,-0.05 -0.451066,-0.186 -0.160458,-0.215 -0.369054,-1.013 1.044762,0.44 1.709772,-0.169 1.968288,-2.027 1.470868,-2.469 1.173128,-0.509 0.34766,-0.208 0.875389,-1.808 0.779114,-3.175 0.02496,-0.239 -0.02496,-0.105 -0.668576,-1.182 -0.07131,-2.266 2.025341,0.588"
+ class="c06067"
+ id="Sacramento, CA" />
+ <path
+ d="m 55.345595,243.25914 3.649535,1.051 0.07845,-0.208 -0.03922,-0.104 -0.06418,0 -0.09628,-0.136 -0.06418,-0.187 0.04814,-0.2 0.971664,-2.788 2.435401,0.681 0.08023,-0.191 0.02496,-0.201 0.02318,-0.41 -0.01605,-0.193 -0.08023,-0.522 -0.394014,-1.19 0.0071,-0.112 0.03209,-0.151 0.811206,-1.527 0.08914,-0.1 0.811205,0.136 6.083153,1.214 0.185418,0.307 0,0.07 -0.19255,0.82 -1.092899,3.88 1.750778,0.501 -1.470868,2.469 -1.968288,2.027 -1.709772,0.169 -1.044762,-0.44 -0.144413,0.176 -0.162241,0.106 -0.233556,0.02 -0.256733,-0.03 -3.792164,-0.922 -0.891435,-0.258 -1.551097,-0.94 -1.784653,-2.676 -0.03209,-0.135"
+ class="c06095"
+ id="Solano, CA" />
+ <path
+ d="m 52.765783,253.31014 -1.920151,-0.545 0,-0.02 0.02318,-0.355 0.226425,-1.31 0.208595,-0.12 0.827252,-0.162 0.691754,0.05 0.32983,0.08 0.121236,0.178 0.126583,0.393 -0.103406,1.372 -0.103407,0.332 -0.427888,0.103"
+ class="c06075"
+ id="San Franciso, CA" />
+ <path
+ d="m 45.9677,237.15214 0.21751,-0.114 1.454822,0.03 0.144412,0.04 3.801079,4.525 2.016426,2.25 -0.641833,1.673 -0.666794,2.112 -0.04992,0.179 0.121235,0.19 0.297739,0.369 0.29774,0.494 0.103406,0.255 -0.0071,0.07 -1.060807,1.035 -0.474244,-0.06 -0.297739,-0.153 -0.201464,-0.193 -5.664178,-6.5 0.939573,-5.006 -0.05527,-0.426 -0.201465,-0.587 -0.0731,-0.191"
+ class="c06041"
+ id="Marin, CA" />
+ <path
+ d="m 60.055938,227.52314 1.679463,1.063 0.882521,4.699 0.208596,1.327 0.02496,0.474 -0.0089,1.679 -0.08914,0.1 -0.811206,1.527 -0.03209,0.151 -0.0071,0.112 0.394014,1.19 0.08023,0.522 0.01605,0.193 -0.02318,0.41 -0.02496,0.201 -0.08023,0.191 -2.435401,-0.681 -0.971664,2.788 -0.04814,0.2 0.06418,0.187 0.09628,0.136 0.06418,0 0.03922,0.104 -0.07845,0.208 -3.649535,-1.051 0.698885,0.128 0.554473,-0.9 0.04101,-0.53 -0.01605,-0.538 -0.21751,-1.858 -1.23018,-4.354 -0.706017,-1.938 0.05705,-1.51 0.295957,-0.989 3.045141,-0.04 2.059215,-1.743 0.199682,-0.305 -0.07132,-1.159"
+ class="c06055"
+ id="Napa, CA" />
+ <path
+ d="m 39.989737,223.98914 0.691753,-0.04 2.378349,0.02 5.20598,0.427 4.412603,1.34 2.144793,5.032 -0.295957,0.989 -0.05705,1.51 0.706017,1.938 1.23018,4.354 0.21751,1.858 0.01605,0.538 -0.04101,0.53 -0.554473,0.9 -0.698885,-0.128 0.03209,0.135 -1.775738,0.49 -2.016426,-2.25 -3.801079,-4.525 -0.144412,-0.04 -1.454822,-0.03 -0.21751,0.114 -1.139254,-4.052 -3.72085,-7.119 -1.117859,-1.992"
+ class="c06097"
+ id="Sonoma, CA" />
+ <path
+ d="m 61.373479,226.45514 8.62909,2.418 2.8205,5.329 0.07131,2.266 0.668576,1.182 0.02496,0.105 -0.02496,0.239 -0.779114,3.175 -0.875389,1.808 -0.34766,0.208 -1.173128,0.509 -1.750778,-0.501 1.092899,-3.88 0.19255,-0.82 0,-0.07 -0.185418,-0.307 -6.083153,-1.214 -0.811205,-0.136 0.0089,-1.679 -0.02496,-0.474 -0.208596,-1.327 -0.882521,-4.699 -1.679463,-1.063 1.317541,-1.068"
+ class="c06113"
+ id="Yolo, CA" />
+ <path
+ d="m 77.645733,229.25214 2.545938,-0.208 0.852212,0.729 0.185418,0.09 2.41044,0.811 0.57765,-0.1 1.108945,-1.1 0.153327,-0.225 0.135498,-0.353 0.153327,-0.162 0.836166,-0.627 0.836166,-0.434 1.269403,-0.633 2.433618,-1.134 0.909263,-0.208 0.666794,-0.03 10.952172,2.84 -0.85935,3.383 -0.28882,1.198 -0.24247,1.012 -2.426487,-0.618 -0.21751,0.169 -0.07131,0.271 -0.249602,0.107 -0.369054,0.09 -1.01267,-0.09 -3.83317,-0.144 -0.948487,0.795 -0.426106,0.19 -0.859343,0.163 -0.144413,0 -0.21751,-0.13 -1.060807,-1.052 -0.247819,-0.287 -0.146196,-0.245 -0.199681,-0.449 -0.554473,-0.572 -0.417191,-0.246 -0.121235,-0.05 -0.771983,-0.04 -2.419354,0.394 -1.895191,0.538 -0.377969,0.314 -0.490289,1.068 -2.19293,2.619 -5.762235,-2.111 1.429861,-4.213 0.948487,0.25 0.418975,-1.575"
+ class="c06061"
+ id="Placer, CA" />
+ <path
+ d="m 104.45118,225.62814 -0.77911,2.884 -10.952172,-2.84 -0.666794,0.03 -0.909263,0.208 -2.433618,1.134 -1.269403,0.633 -0.836166,0.434 -0.836166,0.627 -0.153327,0.162 -0.135498,0.353 -0.153327,0.225 -1.108945,1.1 -0.57765,0.1 -2.41044,-0.811 -0.185418,-0.09 -0.852212,-0.729 1.198088,-4.388 0.465329,-0.74 1.567143,-1.086 1.469085,-0.772 0.957401,-0.103 0.418974,0.06 0.481375,0.232 0.240688,-0.28 0.401146,-0.103 2.893597,0.231 2.266028,-0.563 0.05705,-0.07 0.256733,-0.22 0.609742,-0.296 0.274562,-0.04 1.269403,0.408 0.361923,0.451 0.128366,1.084 0.376186,0.443 0.226424,0.128 8.340266,2.202"
+ class="c06057"
+ id="Nevada, CA" />
+ <path
+ d="m 88.467753,216.75814 1.647372,-1.048 0.226424,-0.833 0.456415,-0.323 0.836166,-0.24 3.262652,2.556 3.544345,0.883 5.086533,1.351 2.56376,0.312 -1.64024,6.212 -8.340264,-2.202 -0.226424,-0.128 -0.376186,-0.443 -0.128366,-1.084 -0.361923,-0.451 -1.269403,-0.408 -0.274562,0.04 -0.609742,0.296 -0.256733,0.22 -0.05705,0.07 -2.266028,0.563 -2.893597,-0.231 -0.401146,0.103 -0.240688,0.28 1.718687,-5.493"
+ class="c06091"
+ id="Sierra, CA" />
+ <path
+ d="m 87.071766,217.39314 1.395987,-0.635 -1.718687,5.493 -0.481375,-0.232 -0.418974,-0.06 -0.957401,0.103 -1.469085,0.772 -1.567143,1.086 -0.465329,0.74 -1.198088,4.388 -2.545938,0.208 -0.755937,-0.235 -0.386883,0.01 -1.203437,0.167 -0.427889,0.337 -0.247819,0.266 -0.02496,-2.393 0.796943,-4.767 0.103406,-0.344 0.304871,-0.646 0.112321,-0.06 2.233936,0.123 1.775738,-0.128 0.698885,-0.355 6.446858,-3.831"
+ class="c06115"
+ id="Yuba, CA" />
+ <path
+ d="m 75.916349,221.58414 -0.112321,0.06 -0.304871,0.646 -0.103406,0.344 -0.796943,4.767 0.02496,2.393 0.247819,-0.266 0.427889,-0.337 1.203437,-0.167 0.386883,-0.01 0.755937,0.235 -0.418975,1.575 -0.948487,-0.25 -1.429861,4.213 -2.025341,-0.588 -2.8205,-5.329 0.675708,-1.341 -0.609742,-2.733 -0.517032,-1.059 0.169373,-1.109 1.406684,-2.571 4.788789,1.524"
+ class="c06101"
+ id="Sutter, CA" />
+ <path
+ d="m 71.940549,218.36614 -0.812989,1.694 -1.406684,2.571 -0.169373,1.109 0.517032,1.059 0.609742,2.733 -0.675708,1.341 -8.62909,-2.418 -0.852212,-1.013 -0.08023,-0.183 -0.611525,-2.332 0.06418,-1.614 -1.702641,-2.909 -0.618656,-0.619 -0.973447,-1.446 -0.144412,-0.692 0.353008,-0.595 0.707799,-0.769 14.425201,4.083"
+ class="c06011"
+ id="Colusa, CA" />
+ <path
+ d="m 57.515348,214.28314 -0.707799,0.769 -0.353008,0.595 0.144412,0.692 0.973447,1.446 0.618656,0.619 1.702641,2.909 -0.06418,1.614 0.611525,2.332 0.08023,0.183 0.852212,1.013 -1.317541,1.068 0.07132,1.159 -0.199682,0.305 -2.059215,1.743 -3.045141,0.04 -2.144793,-5.032 -1.461953,-1.66 -0.442152,-0.709 -0.98771,-2.594 -0.297739,-1.318 0.03922,-0.194 0.09627,-0.328 0.394014,-0.925 0.394014,-0.74 0.763069,-0.234 0.747022,-0.834 0.153327,-0.963 -0.09627,-3.161 0.19255,-0.64 0.137281,-0.348 0.497421,-1.086 0.738108,-0.151 1.488696,0.492 0.866475,-0.05 0.306654,-0.786 0.103406,-0.332 2.538807,0.726 -0.586564,2.273 -0.199682,0.633 -0.547341,1.474"
+ class="c06033"
+ id="Lake, CA" />
+ <path
+ d="m 71.876365,208.38414 -0.226424,-0.394 0.105189,-0.669 0.714931,-0.818 4.041766,1.091 0.499204,0.03 0.536644,-0.282 0.137281,-0.415 0.137281,-0.277 0.263864,-0.279 0.739891,-0.541 3.109326,-1.927 0.861126,0.234 1.10003,-0.209 0.215728,-0.128 0.24247,-0.466 0.536644,0.152 0.210379,1.091 0.02318,0.549 -0.08736,0.314 -0.376185,0.376 -1.431645,4.147 2.529893,4.605 1.312192,2.821 -6.446858,3.831 -0.698885,0.355 -1.775738,0.128 -2.233936,-0.123 -4.788789,-1.524 0.812989,-1.694 1.494045,-3.168 0.02318,-0.09 -0.706016,-4.594 -0.87539,-2.129"
+ class="c06007"
+ id="Butte, CA" />
+ <path
+ d="m 56.841423,204.06914 15.034942,4.315 0.87539,2.129 0.706016,4.594 -0.02318,0.09 -1.494045,3.168 -14.425201,-4.083 0.547341,-1.474 0.199682,-0.633 0.586564,-2.273 -2.538807,-0.726 0.531295,-5.108"
+ class="c06021"
+ id="Glenn, CA" />
+ <path
+ d="m 85.133786,196.49014 2.845461,0.788 4.475003,1.188 -1.148168,4.252 0.208596,0.572 1.647371,1.469 0.634702,0.17 0.36014,-0.08 0.146195,-0.537 1.743647,-1.398 0.616873,-0.185 0.643616,0.169 2.957778,2.216 3.90449,4.58 0.4992,0.653 0.85935,3.726 -0.0161,0.701 -0.16937,0.649 -0.85935,2.542 -0.95561,1.141 -5.086533,-1.351 -3.544345,-0.883 -3.262652,-2.556 -0.836166,0.24 -0.456415,0.323 -0.226424,0.833 -1.647372,1.048 -1.395987,0.635 -1.312192,-2.821 -2.529893,-4.605 1.431645,-4.147 0.376185,-0.376 0.08736,-0.314 -0.02318,-0.549 -0.210379,-1.091 -0.536644,-0.152 1.519005,-1.037 0.06418,-0.06 0.128366,-0.202 0.529513,-1.583 -0.208596,-1.079 -0.151544,-0.03 -1.198089,-0.582 -0.05705,-0.06 -0.06418,-0.224 0.0071,-0.154 0.121235,-1.535 0.08914,-0.305"
+ class="c06063"
+ id="Plumas, CA" />
+ <path
+ d="m 85.133786,196.49014 -0.08914,0.305 -0.121235,1.535 -0.0071,0.154 0.06418,0.224 0.05705,0.06 1.198089,0.582 0.151544,0.03 0.208596,1.079 -0.529513,1.583 -0.128366,0.202 -0.06418,0.06 -1.519005,1.037 -0.24247,0.466 -0.215728,0.128 -1.10003,0.209 -0.861126,-0.234 -3.109326,1.927 -0.739891,0.541 -0.263864,0.279 -0.137281,0.277 -0.137281,0.415 -0.536644,0.282 -0.499204,-0.03 -4.041766,-1.091 -0.714931,0.818 -0.105189,0.669 0.226424,0.394 -15.034942,-4.315 -0.0731,-0.114 0,-1.034 0.522381,-1.062 0.618655,-0.362 0.185419,-0.419 0.05527,-0.746 -0.08023,-0.246 -0.05527,-0.429 0.377968,-3.142 0.328048,-1.159 0.08914,-0.08 0.21751,-1.027 0.01426,-0.237 -0.08736,-0.198 -1.085768,-1.235 1.479782,-0.171 2.410441,-0.06 1.927282,0.02 4.043549,0.548 1.091116,0.74 1.663418,0.531 0.588347,0.157 2.21789,0.148 1.654504,-0.06 1.486913,0.08 2.756317,0.392 2.442532,0.485 3.503339,1.091"
+ class="c06103"
+ id="Tehama, CA" />
+ <path
+ d="m 39.934468,194.13714 8.042526,2.401 -0.16759,0.548 10.260417,3 0.08023,0.246 -0.05527,0.746 -0.185419,0.419 -0.618655,0.362 -0.522381,1.062 0,1.034 0.0731,0.114 -0.531295,5.108 -0.103406,0.332 -0.306654,0.786 -0.866475,0.05 -1.488696,-0.492 -0.738108,0.151 -0.497421,1.086 -0.137281,0.348 -0.19255,0.64 0.09627,3.161 -0.153327,0.963 -0.747022,0.834 -0.763069,0.234 -0.394014,0.74 -0.394014,0.925 -0.09627,0.328 -0.03922,0.194 0.297739,1.318 0.98771,2.594 0.442152,0.709 1.461953,1.66 -4.412603,-1.34 -5.20598,-0.427 -2.378349,-0.02 -0.691753,0.04 -0.82012,-1.469 -1.228398,-2.656 0.980579,-10.122 0.05527,-0.394 0.03922,-0.178 0.331614,-0.825 0.3851,-0.845 0.401145,-0.585 0.224642,-0.332 0.306653,-0.319 0.112321,-0.153 0.06418,-0.09 0.01604,-0.02 0.401146,-0.619 0.03209,-0.16 0.345877,-2.313 0.05527,-0.572 -0.0071,-3.582 -0.01605,-0.06 -0.771982,-2.055 -0.424323,-1.109 -0.538427,-1.398"
+ class="c06045"
+ id="Mendocino, CA" />
+ <path
+ d="m 55.192269,165.32914 2.636864,0.779 0.320917,0.459 -0.128367,4.491 -0.281693,0.274 -0.295957,0.401 -0.531295,1.052 -0.03209,0.749 0.08736,0.152 -0.08736,1.117 -1.260489,1.286 -0.556255,0.49 -1.855968,1.494 -0.52238,2.66 -4.70856,15.805 -8.042526,-2.401 -0.386883,-0.681 -3.414196,-6.518 -0.105189,-0.289 0.433237,-4.163 0.05705,-0.105 1.461953,-2.106 1.028716,-1.326 0.394015,-0.442 0.707799,-0.755 1.051893,-1.021 1.237312,-1.318 0.684622,-0.722 0.520598,-0.627 0.684622,-0.988 0.74524,-1.311 0.363705,-0.836 -0.08914,-0.513 2.160838,-5.135 1.633109,-3.785 2.955998,0.867 1.880928,0.611 -0.354791,1.189 0.666793,0.892 0.939573,0.274"
+ class="c06023"
+ id="Humboldt, CA" />
+ <path
+ d="m 58.021683,171.05814 0.82012,0.659 0.788029,0.763 1.269403,1.905 2.314165,2.442 1.349633,0.685 0.329831,0.05 0.3851,-0.305 0.208596,-0.371 -0.153327,-1.068 2.515629,-2.605 3.608529,-1.421 2.032472,1.254 -0.417192,2.337 0.338745,0.241 0.279911,0.305 0.04814,0.217 -0.249601,0.909 -0.119453,0.202 -0.160458,0.232 -1.937979,1.72 -0.634702,0.232 -0.112321,0.02 -4.612284,5.609 -2.957782,3.73 -2.747402,1.269 -2.089524,1.696 -0.249602,0.82 1.085768,1.235 0.08736,0.198 -0.01426,0.237 -0.21751,1.027 -0.08914,0.08 -0.328048,1.159 -0.377968,3.142 0.05527,0.429 -10.260417,-3 0.16759,-0.548 4.70856,-15.805 0.52238,-2.66 1.855968,-1.494 0.556255,-0.49 1.260489,-1.286 0.08736,-1.117 -0.08736,-0.152 0.03209,-0.749 0.531295,-1.052 0.295957,-0.401 0.281693,-0.274"
+ class="c06105"
+ id="Trinity, CA" />
+ <path
+ d="m 90.509139,180.25214 1.904105,0.504 -1.59032,5.875 -0.03209,0.772 -2.144792,7.763 -0.666793,2.112 -2.845461,-0.788 -3.503339,-1.091 -2.442532,-0.485 -2.756317,-0.392 -1.486913,-0.08 -1.654504,0.06 -2.21789,-0.148 -0.588347,-0.157 -1.663418,-0.531 -1.091116,-0.74 -4.043549,-0.548 -1.927282,-0.02 -2.410441,0.06 -1.479782,0.171 0.249602,-0.82 2.089524,-1.696 2.747402,-1.269 2.957782,-3.73 4.612284,-5.609 0.112321,-0.02 0.634702,-0.232 1.937979,-1.72 0.160458,-0.232 0.119453,-0.202 0.249601,-0.909 -0.04814,-0.217 -0.279911,-0.305 -0.338745,-0.241 3.471248,0.933 4.765611,1.381 9.199609,2.557"
+ class="c06089"
+ id="Shasta, CA" />
+ <path
+ d="m 114.5761,186.64014 -1.83279,7.135 -2.06456,8.221 -1.03585,4.008 -0.32983,1.294 -0.009,0.02 -1.12499,4.277 -1.73473,6.508 -0.35301,1.31 -2.56376,-0.312 0.95561,-1.141 0.85935,-2.542 0.16937,-0.649 0.0161,-0.701 -0.85935,-3.726 -0.4992,-0.653 -3.90449,-4.58 -2.957778,-2.216 -0.643616,-0.169 -0.616873,0.185 -1.743647,1.398 -0.146195,0.537 -0.36014,0.08 -0.634702,-0.17 -1.647371,-1.469 -0.208596,-0.572 1.148168,-4.252 -4.475003,-1.188 0.666793,-2.112 2.144792,-7.763 0.03209,-0.772 1.59032,-5.875 22.162858,5.884"
+ class="c06035"
+ id="Lassen, CA" />
+ <path
+ d="m 95.476215,162.08314 9.304795,2.603 3.05406,0.82 0.0232,0 6.0261,1.599 0.65074,0.168 4.74244,1.198 -4.70143,18.16 -22.162856,-5.883 -1.904105,-0.505 1.502959,-5.489 2.089524,-7.763 -0.08023,-0.05 -0.02496,-0.07 0.877172,-3.231 0.158675,-0.554 0.443935,-1.013"
+ class="c06049"
+ id="Modoc, CA" />
+ <path
+ d="m 307.43805,307.04414 -0.78802,0.692 -4.10595,5.325 -0.13728,0.193 -1.53506,2.525 -2.42648,4.371 -0.24069,0.66 -12.02902,-1.608 1.57427,-11.154 2.72423,-3.059 10.8969,1.444 2.05743,0.226 1.56714,0.09 2.44253,0.297"
+ class="c08083"
+ id="Montezuma, CO" />
+ <path
+ d="m 307.43805,307.04414 8.78242,1.084 -1.77574,14.714 -16.24016,-2.032 0.24069,-0.66 2.42648,-4.371 1.53506,-2.525 0.13728,-0.193 4.10595,-5.325 0.78802,-0.692"
+ class="c08067"
+ id="La Plata, CO" />
+ <path
+ d="m 402.52207,301.82914 12.48009,0.796 -0.009,0.144 -0.72385,12.125 -0.12836,2.177 -12.73504,-0.843 0.28882,-4.145 0.12837,0 0.0321,-0.33 0.66679,-9.924"
+ class="c08099"
+ id="Prowers, CO" />
+ <path
+ d="m 402.52207,301.82914 -0.66679,9.924 -0.0321,0.33 -0.12837,0 -0.28882,4.145 -5.9227,-0.426 -5.91378,-0.45 1.19631,-14.368 11.75624,0.845"
+ class="c08011"
+ id="Bent, CO" />
+ <path
+ d="m 395.43517,293.27914 1.96828,0.09 8.01935,0.622 4.39478,0.248 5.682,0.376 -0.49742,8.013 -12.48009,-0.796 -11.75624,-0.845 -1.81675,-0.128 0.40293,-5.818 0.76307,-0.103 3.77612,0.289 1.39064,0.07 0.15333,-2.016"
+ class="c08061"
+ id="Kiowa, CO" />
+ <path
+ d="m 416.11824,284.62614 -0.49029,8.084 -0.12837,1.902 -5.682,-0.376 -4.39478,-0.248 -8.01935,-0.622 -1.96828,-0.09 0.91639,-9.811 1.97542,0.1 5.92983,0.449 3.81712,0.2 2.60477,0.08 5.43954,0.331"
+ class="c08017"
+ id="Cheyenne, CO" />
+ <path
+ d="m 397.4195,271.26714 6.17943,0.403 13.23424,0.758 -0.007,0.134 -0.59548,10.069 -0.11232,1.995 -5.43954,-0.331 -2.60477,-0.08 -3.81712,-0.2 -5.92983,-0.449 -1.97542,-0.1 0.15154,-2.042 0.41898,-3.689 0.49742,-6.47"
+ class="c08063"
+ id="Kit Carson, CO" />
+ <path
+ d="m 407.4321,251.72014 10.6473,0.683 -0.13728,2.097 -0.50634,8.001 -0.60261,9.927 -13.23424,-0.758 0.52238,-6.899 0.18363,-3.136 0.74881,-8.059 0.3851,-1.995 1.99325,0.139"
+ class="c08125"
+ id="Yuma, CO" />
+ <path
+ d="m 388.56398,260.45414 4.07386,0.323 0.27456,-3.819 0.37619,-4.225 0.25673,-1.994 11.89353,0.842 -0.3851,1.995 -0.74881,8.059 -0.18363,3.136 -0.52238,6.899 -6.17943,-0.403 -9.69881,-0.768 0.84329,-10.045"
+ class="c08121"
+ id="Washington, CO" />
+ <path
+ d="m 418.54473,245.24114 -0.0802,1.207 -0.3851,5.955 -10.6473,-0.683 0.74702,-7.162 10.36561,0.683"
+ class="c08095"
+ id="Phillips, CO" />
+ <path
+ d="m 409.10443,238.74314 9.80222,0.656 -0.36192,5.842 -10.36561,-0.683 0.36905,-5.848 0.55626,0.03"
+ class="c08115"
+ id="Sedgwick, CO" />
+ <path
+ d="m 392.69489,237.53714 3.30188,0.255 12.5514,0.918 -0.36905,5.848 -0.74702,7.162 -1.99325,-0.139 -11.89353,-0.842 -1.85596,-2.171 0.35479,-4.12 0.1034,0 0.5313,-6.379 0.016,-0.539"
+ class="c08075"
+ id="Logan, CO" />
+ <path
+ d="m 388.56398,260.45414 -7.7537,-0.643 1.08399,-12.077 5.62495,0.483 2.1858,0.223 1.98434,0.128 1.85596,2.171 -0.25673,1.994 -0.37619,4.225 -0.27456,3.819 -4.07386,-0.323"
+ class="c08087"
+ id="Morgan, CO" />
+ <path
+ d="m 395.4833,315.80214 5.9227,0.426 12.73504,0.843 -0.3851,5.898 -0.58657,9.162 -5.69627,-0.401 -9.45099,-0.779 -2.30703,-0.178 -1.52614,-0.113 0.20146,-2.892 0.52238,-5.921 0.14442,0 0.4261,-6.053"
+ class="c08009"
+ id="Baca, CO" />
+ <path
+ d="m 390.76583,300.98414 -1.19631,14.368 -11.7812,-0.971 0.12837,-2.099 0.85934,-9.506 0.43502,0.169 1.69551,0.507 1.83992,0.433 3.81712,0.307 2.07348,-1.213 0.312,-2.123 1.81675,0.128"
+ class="c08089"
+ id="Otero, CO" />
+ <path
+ d="m 379.58902,294.09914 9.76299,0.939 -0.40293,5.818 -0.312,2.123 -2.07348,1.213 -3.81712,-0.307 -1.83992,-0.433 -1.69551,-0.507 -0.43502,-0.169 0.81299,-8.677"
+ class="c08025"
+ id="Crowley, CO" />
+ <path
+ d="m 397.4195,271.26714 -0.49742,6.47 -0.41898,3.689 -0.15154,2.042 -0.91639,9.811 -0.15333,2.016 -1.39064,-0.07 -3.77612,-0.289 -0.76307,0.103 -9.76299,-0.939 0.65075,-8.003 5.94587,0.538 0.57051,-6.01 0.83617,-10.141 0.12837,0.02 9.69881,0.768"
+ class="c08073"
+ id="Lincoln, CO" />
+ <path
+ d="m 380.23977,286.09614 0.57764,-5.989 -10.78279,-0.979 0.96453,-10.062 16.59317,1.417 -0.83617,10.141 -0.57051,6.01 -5.94587,-0.538"
+ class="c08039"
+ id="Elbert, CO" />
+ <path
+ d="m 367.42678,264.65914 1.48285,0.149 1.15708,0.114 4.61228,0.474 9.65068,0.762 3.72798,0.331 -0.33696,4.01 -0.12837,-0.02 -16.59317,-1.417 -6.807,-0.64 0.041,-1.288 0.0232,-0.199 0,-0.03 0.0178,0 2.94709,0.02 0.3227,-0.715 -0.12837,-1.197 0.0182,-0.199"
+ class="c08005"
+ id="Arapahoe, CO" />
+ <path
+ d="m 384.46695,236.86314 8.22794,0.674 -0.016,0.539 -0.5313,6.379 -0.1034,0 -0.35479,4.12 -1.98434,-0.128 -2.1858,-0.223 -5.62495,-0.483 -1.08399,12.077 -14.42691,-1.305 0.0705,-0.565 -0.73478,-0.07 -0.101,0.569 -0.5327,-0.04 0.52951,-6.051 0.16938,-2.01 1.92015,0.179 0.21572,-2.026 1.2391,-12.931 15.30772,1.296"
+ class="c08123"
+ id="Weld, CO" />
+ <path
+ d="m 365.97634,258.48814 14.83394,1.323 7.7537,0.643 -0.50633,6.035 -3.72798,-0.331 -9.65068,-0.762 -4.61228,-0.474 -1.15708,-0.114 -1.48061,-0.164 1.6769,-1.662 1.30902,0.03 0.13733,-1.224 -0.97539,-0.11 -2.20558,1.651 -2.76196,-0.11 0.27457,-2.837 0.53719,-0.255 0.16977,-1.21 0.31674,0.04"
+ class="c08001"
+ id="Adams, CO" />
+ <path
+ d="m 364.60934,263.21814 2.75413,0.128 2.22561,-1.662 0.96155,0.12 -0.15862,1.195 -1.28734,-0.03 -1.67067,1.658 -0.0184,0.386 0.12837,1.197 -0.3227,0.715 -2.94709,-0.02 0.0713,-0.844 0.0321,-0.331 0.23177,-2.514"
+ class="c08031"
+ id="Denver, CO" />
+ <path
+ d="m 364.19215,268.42614 6.807,0.64 -0.96453,10.062 -6.53244,-0.619 -5.20776,-0.497 5.89773,-9.586"
+ class="c08035"
+ id="Douglas, CO" />
+ <path
+ d="m 380.23977,286.09614 -0.65075,8.003 -15.79801,-1.352 0.27278,-3.004 0.19255,-1.397 0.18541,-1.994 -1.42986,-1.806 0.3851,-3.713 0.10519,-2.324 6.53244,0.619 10.78279,0.979 -0.57764,5.989"
+ class="c08041"
+ id="El Paso, CO" />
+ <path
+ d="m 358.27124,278.01214 0.0232,0 5.20776,0.497 -0.10519,2.324 -0.3851,3.713 1.42986,1.806 -0.18541,1.994 -0.19255,1.397 -2.98096,-0.231 -2.31417,-0.227 0.0553,-0.554 -0.74702,-0.66 -0.7702,-0.09 0.96453,-9.972"
+ class="c08119"
+ id="Teller, CO" />
+ <path
+ d="m 363.79101,292.74714 15.79801,1.352 -0.81299,8.677 -0.85934,9.506 -5.04553,-2.362 -5.13466,-2.394 -6.15625,-0.161 -0.73811,-0.57 -0.30665,-0.291 0.76485,-7.898 1.94333,0.176 0.54734,-6.035"
+ class="c08101"
+ id="Pueblo, CO" />
+ <path
+ d="m 372.87116,309.92014 5.04553,2.362 -0.12837,2.099 11.7812,0.971 5.91378,0.45 -0.4261,6.053 -0.14442,0 -0.52238,5.921 -0.20146,2.892 -16.75363,-1.246 -13.16115,-1.1 -4.8708,-0.448 -2.80445,-0.315 0.68284,-6.871 0.69888,0 6.87118,-1.936 0.77912,-0.619 3.26265,-3.719 2.16975,-3.208 1.80783,-1.278"
+ class="c08071"
+ id="Las Animas, CO" />
+ <path
+ d="m 352.90302,306.21514 0.96453,0.243 0.0963,-0.02 2.09665,-0.548 2.80446,-1.333 1.67055,1.943 0.30665,0.291 0.73811,0.57 6.15625,0.161 5.13466,2.394 -1.80783,1.278 -2.16975,3.208 -3.26265,3.719 -0.77912,0.618 -6.87118,1.937 -0.69888,0 0.61865,-2.707 -0.66679,-4.646 -1.68659,-1.205 -0.11232,-0.02 -1.27832,0.232 -1.35142,0.49 -0.85934,0.708 0.90926,-3.955 0.0481,-3.359"
+ class="c08055"
+ id="Huerfano, CO" />
+ <path
+ d="m 346.78778,318.14814 5.15784,-4.619 0.85934,-0.708 1.35142,-0.49 1.27832,-0.232 0.11232,0.02 1.68659,1.205 0.66679,4.646 -0.61865,2.707 -0.68284,6.871 -1.18917,-0.114 -9.03202,-0.915 -0.7078,-0.788 -0.10341,-0.248 -0.025,-0.21 0.1141,-0.465 0.50456,-0.869 0.36192,-1.139 0.4261,-2.772 -0.16045,-1.883"
+ class="c08023"
+ id="Costilla, CO" />
+ <path
+ d="m 341.54792,316.58114 5.23986,1.567 0.16045,1.883 -0.4261,2.772 -0.36192,1.139 -0.50456,0.869 -0.1141,0.465 0.025,0.21 0.10341,0.248 0.7078,0.788 -5.22381,-0.538 -8.51677,-0.876 -0.17651,-0.522 -2.37121,-4.951 -0.50634,-0.353 0.4582,-4.026 11.50664,1.325"
+ class="c08021"
+ id="Conejos, CO" />
+ <path
+ d="m 352.85488,309.57414 -0.90926,3.955 -5.15784,4.619 -5.23986,-1.567 0.85935,-8.012 10.44761,1.005"
+ class="c08003"
+ id="Alamosa, CO" />
+ <path
+ d="m 330.88458,305.28614 1.9041,0.23 -0.20859,1.994 9.82718,1.059 -0.85935,8.012 -11.50664,-1.325 -0.58656,-0.08 0.30487,-2.717 0.64361,-3.245 0.48138,-3.928"
+ class="c08105"
+ id="Rio Grande, CO" />
+ <path
+ d="m 347.98408,297.11214 4.45183,0.472 3.66558,0.492 5.19885,0.53 -0.76485,7.898 -1.67055,-1.943 -2.80446,1.333 -2.09665,0.548 -0.0963,0.02 -0.96453,-0.243 -0.46711,-0.699 -1.64559,-2.699 -0.93244,-2.724 -0.24247,-0.506 -1.63133,-2.475"
+ class="c08027"
+ id="Custer, CO" />
+ <path
+ d="m 357.30671,287.98414 0.7702,0.09 0.74702,0.66 -0.0553,0.554 2.31417,0.227 2.98096,0.231 -0.82012,9.039 -1.94333,-0.176 -5.19885,-0.53 -3.66558,-0.492 -4.45183,-0.472 -3.36606,-4.58 1.99147,-1.382 0.52416,-1.052 0.2086,-0.87 0.007,-0.112 -0.0874,-0.328 -0.52238,-1.407 -0.0571,-0.07 -0.32092,-0.225 -0.41897,-0.169 4.13091,0.401 5.11862,0.449 2.11448,0.218"
+ class="c08043"
+ id="Fremont, CO" />
+ <path
+ d="m 340.35875,292.63014 4.25927,-0.1 3.36606,4.58 1.63133,2.475 0.24247,0.506 0.93244,2.724 1.64559,2.699 0.46711,0.699 -0.0481,3.359 -10.44761,-1.005 -9.82718,-1.059 0.20859,-1.994 -1.9041,-0.23 -0.11946,-0.943 -2.93282,-2.353 -0.19255,-0.153 -1.29436,-0.337 -0.55447,0.281 -0.0802,0.09 0.50633,-4.396 0.75594,-6.413 13.38579,1.569"
+ class="c08109"
+ id="Saguache, CO" />
+ <path
+ d="m 336.10839,277.35214 6.81412,0.788 0.0963,0.443 1.00376,2.351 0.72384,0.291 0.0891,0 0.0945,-0.104 0.0499,-0.105 0.11945,-0.03 0.41897,0.06 0.97167,0.923 0.29774,0.603 0.2496,2.209 -0.61866,1.63 -0.47602,0.492 0.41897,0.169 0.32092,0.225 0.0571,0.07 0.52238,1.407 0.0874,0.328 -0.007,0.112 -0.2086,0.87 -0.52416,1.052 -1.99147,1.382 -4.25927,0.1 -1.29437,-1.796 -1.37281,-3.822 -0.0963,-0.843 0.61687,-2.774 0.16224,-0.345 0.16046,-0.1 0.0481,-2.195 -3.00592,-2.071 0.5313,-1.336"
+ class="c08015"
+ id="Chaffee, CO" />
+ <path
+ d="m 322.27866,271.11614 0.15333,1.358 0.33696,0.644 1.0929,1.4 3.56752,0.415 0.24248,0.03 1.08398,1.276 -0.0161,0.443 0.31379,0.538 1.06081,0.972 1.38885,0.506 0.45107,0.04 0.33696,-0.169 0.69175,-0.837 0.0945,-0.37 0.83616,-0.207 0.12124,0.02 1.54218,1.512 3.00592,2.071 -0.0481,2.195 -0.16046,0.1 -0.16224,0.345 -0.61687,2.774 0.0963,0.843 1.37281,3.822 1.29437,1.796 -13.38579,-1.569 -0.75594,6.413 -10.11778,-1.214 -0.74703,-3.705 2.40331,0.298 1.01267,-8.439 1.53327,-12.637 1.9772,-0.661"
+ class="c08051"
+ id="Gunnison, CO" />
+ <path
+ d="m 327.5096,269.18114 12.03794,1.462 -3.43915,6.709 -0.5313,1.336 -1.54218,-1.512 -0.12124,-0.02 -0.83616,0.207 -0.0945,0.37 -0.69175,0.837 -0.33696,0.169 -0.45107,-0.04 -1.38885,-0.506 -1.06081,-0.972 -0.31379,-0.538 0.0161,-0.443 -1.08398,-1.276 -0.24248,-0.03 -3.56752,-0.415 -1.0929,-1.4 -0.33696,-0.644 -0.15333,-1.358 -0.33696,-2.601 5.5679,0.666"
+ class="c08097"
+ id="Pitkin, CO" />
+ <path
+ d="m 343.4449,270.65914 1.25335,0.138 -0.34587,0.36 -0.67393,1.164 -0.12837,0.692 -0.0891,1.599 -0.016,1.656 -0.2817,1.405 -0.24069,0.467 -6.81412,-0.788 3.43915,-6.709 3.89736,0.02"
+ class="c08065"
+ id="Lake, CO" />
+ <path
+ d="m 358.06086,267.82314 -0.98058,10.068 1.19096,0.121 -0.96453,9.972 -2.11448,-0.218 -5.11862,-0.449 -4.13091,-0.401 0.47602,-0.492 0.61866,-1.63 -0.2496,-2.209 -0.29774,-0.603 -0.97167,-0.923 -0.41897,-0.06 -0.11945,0.03 -0.0499,0.105 -0.0945,0.104 -0.0891,0 -0.72384,-0.291 -1.00376,-2.351 -0.0963,-0.443 0.24069,-0.467 0.2817,-1.405 0.016,-1.656 0.0891,-1.599 0.12837,-0.692 0.67393,-1.164 0.34587,-0.36 2.04139,0.529 3.07723,-3.109 0.69176,-1.134 7.55223,0.74"
+ class="c08093"
+ id="Park, CO" />
+ <path
+ d="m 364.88391,260.38114 -0.13728,1.419 -0.13729,1.418 -0.23177,2.514 -0.0321,0.331 -0.0713,0.844 -0.0178,0 0,0.03 -0.0232,0.199 -0.041,1.288 -5.89773,9.586 -0.0232,0 -1.19096,-0.121 0.98058,-10.068 0.42611,-4.17 0.38688,-3.828 4.96522,0.481 -0.0573,0.211 0.67182,0.07"
+ class="c08059"
+ id="Jefferson, CO" />
+ <path
+ d="m 354.06723,258.88514 3.05406,0.316 1.10895,0 0.68283,0.112 -0.0392,0.505 -0.38688,3.828 -2.53881,-1.045 -0.46711,-0.62 -0.85043,-0.883 -1.00554,-0.387 0.44215,-1.833"
+ class="c08047"
+ id="Gilpin, CO" />
+ <path
+ d="m 353.62508,260.71814 1.00554,0.387 0.85043,0.883 0.46711,0.62 2.53881,1.045 -0.42611,4.17 -7.55223,-0.74 1.03584,-0.829 0.0161,-0.127 -0.0802,-0.46 -0.16759,-0.167 -0.41897,0.03 -1.56715,-0.829 -0.24782,-0.287 0.0945,-0.589 0.34587,-0.593 1.64024,-1.214 1.0519,-0.113 0.39401,-0.167 0.8843,-0.724 0.1355,-0.291"
+ class="c08019"
+ id="Clear Creek, CO" />
+ <path
+ d="m 340.83299,257.65714 0.68284,0.09 2.82941,1.031 1.67947,1.382 0.62579,0.891 0.18541,1.013 0.0571,0.925 0.47424,0.866 0.51347,0.177 0.90035,-0.02 0.39223,-0.193 -0.0945,0.589 0.24782,0.287 1.56715,0.829 0.41897,-0.03 0.16759,0.167 0.0802,0.46 -0.0161,0.127 -1.03584,0.829 -0.69176,1.134 -3.07723,3.109 -2.04139,-0.529 -1.25335,-0.138 -0.50634,-3.351 -2.14479,-7.772 -0.0892,-0.681 0.12837,-1.198"
+ class="c08117"
+ id="Summit, CO" />
+ <path
+ d="m 337.49011,257.28814 3.34288,0.369 -0.12837,1.198 0.0892,0.681 2.14479,7.772 0.50634,3.351 -3.89736,-0.02 -12.03794,-1.462 1.48692,-12.736 1.43164,0.178 7.06195,0.665"
+ class="c08037"
+ id="Eagle, CO" />
+ <path
+ d="m 354.06723,258.88514 1.166,-7.513 1.76683,0.156 2.57981,0.344 6.03501,0.483 -0.52951,6.051 -0.14855,1.298 -0.61468,-0.06 -0.45916,0.654 -4.98913,-0.469 0.0392,-0.505 -0.68283,-0.112 -1.10895,0 -3.05406,-0.316"
+ class="c08013"
+ id="Boulder, CO" />
+ <path
+ d="m 337.49011,257.28814 0.20146,-1.728 0.77912,-7.875 -0.0731,-2.426 0.54021,1.501 0.1355,0.186 2.68322,0.989 3.62457,0.915 0.72385,0.02 3.81712,-0.186 1.28545,-0.964 1.06794,-1.92 2.95778,5.567 -1.166,7.513 -0.44215,1.833 -0.1355,0.291 -0.8843,0.724 -0.39401,0.167 -1.0519,0.113 -1.64024,1.214 -0.34587,0.593 -0.39223,0.193 -0.90035,0.02 -0.51347,-0.177 -0.47424,-0.866 -0.0571,-0.925 -0.18541,-1.013 -0.62579,-0.891 -1.67947,-1.382 -2.82941,-1.031 -0.68284,-0.09 -3.34288,-0.369"
+ class="c08049"
+ id="Grand, CO" />
+ <path
+ d="m 347.74339,233.40614 15.68569,1.607 5.73015,0.554 -1.2391,12.931 -0.21572,2.026 -1.92015,-0.179 -0.16938,2.01 -6.03501,-0.483 -2.57981,-0.344 -1.76683,-0.156 -2.95778,-5.567 -0.86647,-2.051 -0.65967,-2.979 -0.79516,-2.106 -0.20146,-0.392 -1.67233,-2.797 -0.33697,-2.074"
+ class="c08069"
+ id="Larimer, CO" />
+ <path
+ d="m 336.3259,232.02614 9.18356,1.115 2.23393,0.265 0.33697,2.074 1.67233,2.797 0.20146,0.392 0.79516,2.106 0.65967,2.979 0.86647,2.051 -1.06794,1.92 -1.28545,0.964 -3.81712,0.186 -0.72385,-0.02 -3.62457,-0.915 -2.68322,-0.989 -0.1355,-0.186 -0.54021,-1.501 -0.1765,-0.738 -0.32092,-2.45 0.007,-0.838 1.18204,-3.494 0.16046,-0.08 0.29774,-0.289 0.057,-0.305 -0.016,-0.33 -0.36192,-1.003 -0.21038,-0.307 -0.31201,-0.323 -1.19808,-0.665 -0.12837,-0.06 -0.0963,0.07 -0.26564,0.143 -0.81121,-0.769 -0.21751,-0.78 -0.0143,-0.362 0.27278,-0.587 0.0802,-0.07"
+ class="c08057"
+ id="Jackson, CO" />
+ <path
+ d="m 328.43313,231.09814 7.89277,0.928 -0.0802,0.07 -0.27278,0.587 0.0143,0.361 0.21751,0.781 0.81121,0.769 0.26564,-0.143 0.0963,-0.07 0.12837,0.06 1.19808,0.665 0.31201,0.323 0.21038,0.306 0.36192,1.004 0.016,0.33 -0.057,0.305 -0.29774,0.289 -0.16046,0.08 -1.18204,3.494 -0.007,0.838 0.32092,2.45 0.1765,0.738 0.0731,2.426 -0.77912,7.875 -0.20146,1.728 -7.06195,-0.665 0.36014,-3.988 0.35479,-3.078 -6.96032,-0.788 0.2496,-2.562 0.82012,-4.74 1.13212,-1.127 0.57052,-0.02 0.43502,0.05 0.26387,-2.156 0.77911,-7.111"
+ class="c08107"
+ id="Routt, CO" />
+ <path
+ d="m 318.14062,229.85514 10.29251,1.243 -0.77911,7.111 -0.26387,2.156 -0.43502,-0.05 -0.57052,0.02 -1.13212,1.127 -0.82012,4.74 -0.2496,2.562 -0.007,0.07 -0.13728,-0.01 -4.70856,-0.652 -7.03164,-0.842 -15.99769,-2.155 1.40668,-9.883 1.07685,-7.964 13.66748,1.84 5.68914,0.685"
+ class="c08081"
+ id="Moffat, CO" />
+ <path
+ d="m 324.18277,248.76914 6.96032,0.788 -0.35479,3.078 -4.85297,-0.553 -0.28882,2.081 -0.22465,1.959 -2.21076,1.754 -5.15071,-0.629 -3.67984,-0.387 -0.37797,3.008 -4.86902,-0.644 -3.96153,-0.151 -2.04139,0.415 -5.94587,-0.802 -0.0642,-0.25 -2.61191,-0.353 1.79179,-12.906 15.99769,2.155 7.03164,0.842 4.70856,0.652 0.13728,0.01 0.007,-0.07"
+ class="c08103"
+ id="Rio Blanco, CO" />
+ <path
+ d="m 330.7883,252.63514 -0.36014,3.988 -1.43164,-0.178 -1.48692,12.736 -5.5679,-0.666 -28.36546,-3.691 0.41898,-3.004 0.51346,-3.737 2.61191,0.353 0.0642,0.25 5.94587,0.802 2.04139,-0.415 3.96153,0.151 4.86902,0.644 0.37797,-3.008 3.67984,0.387 5.15071,0.629 2.21076,-1.754 0.22465,-1.959 0.28882,-2.081 4.85297,0.553"
+ class="c08045"
+ id="Garfield, CO" />
+ <path
+ d="m 320.30146,271.77714 -1.53327,12.637 -15.52523,-1.95 0.48138,-3.705 7.66634,-4.404 2.10557,-0.119 3.32683,-0.148 0.85935,-0.865 0.58656,-0.378 2.03247,-1.068"
+ class="c08029"
+ id="Delta, CO" />
+ <path
+ d="m 293.57624,264.82414 28.36546,3.691 0.33696,2.601 -1.9772,0.661 -2.03247,1.068 -0.58656,0.378 -0.85935,0.865 -3.32683,0.148 -2.10557,0.119 -7.66634,4.404 -0.48138,3.705 -0.51347,3.865 -12.05398,-1.622 0.69889,-5.048 0.69175,-4.227 0.12837,-0.884 0.60974,-4.172 0.77198,-5.552"
+ class="c08077"
+ id="Mesa, CO" />
+ <path
+ d="m 303.24296,282.46414 15.52523,1.95 -1.01267,8.439 -2.40331,-0.298 0.14442,-0.539 -0.0713,-0.151 -8.82342,-1.104 -0.0232,0.252 0.60974,1.617 1.33359,0.167 0.47424,0.218 0.58657,0.586 0.15332,0.193 -0.14441,1.036 -0.21751,0.474 -0.33696,-0.04 -19.14981,-2.544 0.78803,-8.01 12.05398,1.622 0.51347,-3.865"
+ class="c08085"
+ id="Montrose, CO" />
+ <path
+ d="m 312.3873,301.45114 0.22464,0.186 0.41006,0.208 0.0892,0 0.60261,-0.185 0.27278,-0.128 0.24068,-0.218 0.009,-0.06 -0.0571,-0.193 0,-0.121 0.10518,-0.651 1.3015,0.161 0.6347,7.673 -8.78242,-1.084 0.21573,-0.636 0.64362,-0.795 0.98771,-0.184 0.4582,-0.82 0.0802,-0.44 2.56377,-2.718"
+ class="c08111"
+ id="San Juan, CO" />
+ <path
+ d="m 309.82353,304.16914 -0.0802,0.44 -0.4582,0.82 -0.98771,0.184 -0.64362,0.795 -0.21573,0.636 -2.44253,-0.297 -1.56714,-0.09 -2.05743,-0.226 -10.8969,-1.444 -2.72423,3.059 1.27654,-9.094 3.95619,0.552 0.0713,-0.192 0.43324,-0.08 9.61145,1.294 0.27278,0.456 0.0963,0.371 0,0.417 0.25674,0.555 2.82228,-0.145 0.78625,-0.233 0.44215,0.169 1.14995,0.926 0.89856,1.125"
+ class="c08033"
+ id="Dolores, CO" />
+ <path
+ d="m 289.88748,292.71714 19.14981,2.544 -0.0161,0.171 0.16938,0.701 0.64896,2.175 0.14441,0.362 0.10519,0.112 0.57052,0.378 0.5937,0.186 0.47424,0.328 0.60261,0.66 0.22642,0.563 -0.0963,0.433 -0.0731,0.121 -2.56377,2.718 -0.89856,-1.125 -1.14995,-0.926 -0.44215,-0.169 -0.78625,0.233 -2.82228,0.145 -0.25674,-0.555 0,-0.417 -0.0963,-0.371 -0.27278,-0.456 -9.61145,-1.294 -0.43324,0.08 -0.0713,0.192 -3.95619,-0.552 0.86112,-6.237"
+ class="c08113"
+ id="San Miguel, CO" />
+ <path
+ d="m 315.35221,292.55514 0.74703,3.705 -0.51347,4.195 -1.3015,-0.161 -0.10518,0.651 0,0.121 0.0571,0.193 -0.009,0.06 -0.24068,0.218 -0.27278,0.128 -0.60261,0.185 -0.0892,0 -0.41006,-0.208 -0.22464,-0.186 0.0731,-0.121 0.0963,-0.433 -0.22642,-0.563 -0.60261,-0.66 -0.47424,-0.328 -0.5937,-0.186 -0.57052,-0.378 -0.10519,-0.112 -0.14441,-0.362 -0.64896,-2.175 -0.16938,-0.701 0.0161,-0.171 0.33696,0.04 0.21751,-0.474 0.14441,-1.036 -0.15332,-0.193 -0.58657,-0.586 -0.47424,-0.218 -1.33359,-0.167 -0.60974,-1.617 0.0232,-0.252 8.82342,1.104 0.0713,0.151 -0.14442,0.539"
+ class="c08091"
+ id="Ouray, CO" />
+ <path
+ d="m 316.09924,296.26014 10.11778,1.214 -0.50633,4.396 -1.27832,-0.13 -1.23018,0.241 -0.68106,5.103 -0.025,2.827 -0.51346,3.963 -6.36485,-0.754 0.60261,-4.992 -0.6347,-7.673 0.51347,-4.195"
+ class="c08053"
+ id="Hinsdale, CO" />
+ <path
+ d="m 325.71069,301.87014 0.0802,-0.09 0.55447,-0.281 1.29436,0.337 0.19255,0.153 2.93282,2.353 0.11946,0.943 -0.48138,3.928 -0.64361,3.245 -0.30487,2.717 -0.0161,0.185 -7.54511,-0.781 0.0892,-0.706 0.51346,-3.963 0.025,-2.827 0.68106,-5.103 1.23018,-0.241 1.27832,0.13"
+ class="c08079"
+ id="Mineral, CO" />
+ <path
+ d="m 315.61786,313.12014 6.36485,0.754 -0.0892,0.706 7.54511,0.781 0.0161,-0.185 0.58656,0.08 -0.4582,4.026 0.50634,0.353 2.37121,4.951 0.17651,0.522 -2.55485,-0.274 -4.58198,-0.505 -2.34447,-0.451 -7.61108,-0.9 -1.10003,-0.136 1.17313,-9.722"
+ class="c08007"
+ id="Archuleta, CO" />
+ <path
+ d="m 363.78175,260.50814 0.0777,-0.205 0.46606,-0.656 0.62824,0.07 0.13424,-1.306 0.53655,0.03 0.0987,-0.565 0.71317,0.06 -0.0565,0.572 -0.40949,-0.03 -0.0635,0.465 -0.32477,-0.03 -0.16943,1.215 -0.94604,0.444 -0.68484,-0.06"
+ class="c08014"
+ id="Broomfield, CO" />
+ <path
+ d="m 910.37792,171.66914 8.26004,-1.952 0.77198,1.888 3.16459,6.75 0.0571,0.127 0.0963,0.531 -0.82725,0.643 -1.00376,-1.253 -1.99503,0.66 -1.35676,0.642 -0.36192,1.253 -4.17014,-0.41 -1.43877,-3.43 1.07863,-0.459 0.0945,-4.002 -2.31416,0.731 -0.0553,-1.719"
+ class="c09003"
+ id="Hartford, CT" />
+ <path
+ d="m 909.63803,171.83714 0.73989,-0.168 0.0553,1.719 2.31416,-0.731 -0.0945,4.002 -1.07863,0.459 1.43877,3.43 -1.77574,2.218 -3.0701,2.17 -0.0553,0.306 0.0374,0.191 0.1462,0.146 0.21751,0.136 -0.0321,0.05 -0.24069,0 -0.91818,-0.246 -1.34963,-0.467 -0.14976,-0.264 -0.3227,-0.531 -0.90035,-1.89 -0.14441,-0.168 -0.46712,-0.1 -1.57427,-8.743 7.22419,-1.528"
+ class="c09005"
+ id="Litchfield, CT" />
+ <path
+ d="m 904.53367,185.29014 -0.54556,-3.182 0.46712,0.1 0.14441,0.168 0.90035,1.89 0.3227,0.531 0.14976,0.264 1.34963,0.467 0.91818,0.246 0.24069,0 0.0321,-0.05 0.62579,0.233 1.35141,0.442 2.98809,2.115 -0.0571,1.116 -0.2086,0.481 -0.041,0.186 0.0499,1.094 0.0481,0.109 0.27456,0.171 -1.15887,0.314 -2.90964,2.2 -3.99185,3.389 -0.0981,0.188 -0.0499,0.247 -1.79713,-2.312 1.25158,-1.278 0.10697,-0.105 0.54556,-3.712 -0.2817,-1.623 -0.62757,-3.68"
+ class="c09001"
+ id="Fairfield, CT" />
+ <path
+ d="m 917.18314,180.95814 0.58656,1.792 1.22127,1.262 0.62043,-0.307 0.24069,0.154 0.74702,0.843 2.00752,2.492 -0.88431,-0.05 -0.5616,0.136 -2.31417,0.7 -1.4459,0.608 -0.78803,0.115 -0.37084,-0.459 -0.1355,0.06 -1.96116,2.283 -0.26564,0.371 -0.31379,0.594 -0.0214,0.09 0,0.02 -0.27456,-0.171 -0.0481,-0.109 -0.0499,-1.094 0.041,-0.186 0.2086,-0.481 0.0571,-1.116 -2.98809,-2.115 -1.35141,-0.442 -0.62579,-0.233 -0.21751,-0.136 -0.1462,-0.146 -0.0374,-0.191 0.0553,-0.306 3.0701,-2.17 1.77574,-2.218 4.17014,0.41"
+ class="c09009"
+ id="New Haven, CT" />
+ <path
+ d="m 921.90061,179.65614 3.88131,6.228 -3.17529,1.31 -2.00752,-2.492 -0.74702,-0.843 -0.24069,-0.154 -0.62043,0.307 -1.22127,-1.262 -0.58656,-1.792 0.36192,-1.253 1.35676,-0.642 1.99503,-0.66 1.00376,1.253"
+ class="c09007"
+ id="Middlesex, CT" />
+ <path
+ d="m 933.05246,176.48314 0.43502,6.452 -2.12875,0.596 -4.33237,2.007 -0.90748,0.355 -0.16937,0.02 -0.16759,-0.03 -3.88131,-6.228 0.82725,-0.643 2.19293,-3.238 1.0929,0.626 0.58656,0.291 3.53544,-0.355 1.50295,-0.617 1.15887,-0.202 0.25495,0.965"
+ class="c09011"
+ id="New London, CT" />
+ <path
+ d="m 925.37899,168.14314 0.4475,1.549 -1.58676,0.401 -0.34587,0.112 0.68997,2.766 0.78803,0.449 0.68997,1.118 -0.48851,0.577 -0.65253,0.66 -2.19293,3.238 -0.0963,-0.531 -0.0571,-0.127 -3.16459,-6.75 -0.77198,-1.888 6.17942,-1.464 0.56161,-0.11"
+ class="c09013"
+ id="Tolland, CT" />
+ <path
+ d="m 930.48869,167.31414 1.80962,6.307 0.4992,1.897 -1.15887,0.202 -1.50295,0.617 -3.53544,0.355 -0.58656,-0.291 -1.0929,-0.626 0.65253,-0.66 0.48851,-0.577 -0.68997,-1.118 -0.78803,-0.449 -0.68997,-2.766 0.34587,-0.112 1.58676,-0.401 -0.4475,-1.549 0.7078,-0.147 4.28958,-1.019 0.11232,0.337"
+ class="c09015"
+ id="Windham, CT" />
+ <path
+ d="m 881.24048,232.32114 -0.62757,2.226 -0.36906,-0.07 -0.78089,1.155 -0.30309,0.772 0,0.118 0.0624,0.218 0.0802,0.196 0.90748,2.2 1.95402,2.676 -3.93657,2.491 -0.50634,-1.799 -2.06456,-7.722 2.73849,-3.334 3.27156,0.118 -0.4261,0.756"
+ class="c10003"
+ id="New Castle, DE" />
+ <path
+ d="m 882.38151,259.08714 -1.22304,-4.356 2.42292,-0.633 1.00375,-0.909 0.0606,-0.346 0.29239,-0.69 1.39777,-0.996 1.34072,-0.747 0.14441,0.618 0.19255,0.232 1.60102,1.28 0.9057,0.69 0.63648,0.248 0.47424,0.09 0.35301,-0.1 0.24782,-0.193 0.041,-0.137 0.44928,0.94 1.07685,3.145 0.78803,2.706 0.19255,0.786 -5.10079,1.115 -0.25852,0.06 -0.6757,0.153 -0.28348,0.05 -0.24425,0.05 -0.066,0.01 -0.895,0.167 -0.36727,0.07 -1.04476,0.2 -0.52238,0.1 -0.0642,0 -1.22839,0.209 -0.54021,0.09 -0.20682,-0.726 -0.19255,-0.657 -0.24068,-0.867 -0.46712,-1.665"
+ class="c10005"
+ id="Sussex, DE" />
+ <path
+ d="m 878.22743,244.30214 3.93657,-2.491 1.51901,0.9 0.77198,0.99 0.14441,0.208 0.42433,1.091 0.0499,0.378 1.76682,3.602 0.83617,1.43 -1.34072,0.747 -1.39777,0.996 -0.29239,0.69 -0.0606,0.346 -1.00375,0.909 -2.42292,0.633 -2.61013,-9.296 -0.32091,-1.133"
+ class="c10001"
+ id="Kent, DE" />
+ <path
+ d="m 732.95919,472.32014 0.82903,8.356 0.73276,6.317 -2.06813,-0.628 -0.44928,-0.185 -0.14442,-0.09 -0.54555,-0.388 -0.68997,-0.635 -4.35021,-2.523 -0.31913,-0.174 -0.22642,-0.129 -0.21573,-0.121 -0.34766,-0.169 -0.75237,-0.385 -0.31557,-0.154 -0.25673,-0.121 -0.30666,-0.127 -0.36905,-0.171 -0.32805,-0.117 -1.18917,-0.435 -0.23356,-2.757 0.48851,-0.538 2.13053,-0.924 6.01896,-0.579 1.19631,-0.13 -0.29596,-2.98 1.00376,-0.112 1.00376,-0.1"
+ class="c12005"
+ id="Bay, FL" />
+ <path
+ d="m 729.81955,462.71614 9.49735,-1.156 3.46946,6.283 -1.05189,2.555 -3.23769,0.353 -1.39777,1.047 -1.49583,0.247 -2.64399,0.275 -1.00376,0.1 -0.49742,-4.981 -1.51901,-0.854 -1.88092,0.187 1.56536,-4.019 0.19611,-0.03"
+ class="c12063"
+ id="Jackson, FL" />
+ <path
+ d="m 810.07722,543.84314 10.09996,-1.549 0.83617,5.946 -10.15345,1.51 0.0357,-0.738 -0.22464,-1.262 -0.36192,-1.794 -0.0713,-0.248 -0.29774,-0.146 -0.64183,0.114 -0.1765,0.103 -0.96632,0.854 -0.10162,0.159 0.46533,3.167 -0.0571,0.1 -0.88252,0.144 -0.23534,-0.212 -0.0553,0 -0.12837,0.219 -0.13015,0.444 -0.27991,0.01 -0.0963,-0.313 -0.0963,-0.296 -0.0481,-0.09 -0.009,-0.02 -2.644,-3.216 2.46036,-0.344 -0.18542,-1.35 -0.0945,-0.627 4.03998,-0.571"
+ class="c12015"
+ id="Charlotte, FL" />
+ <path
+ class="c12071"
+ d="m 807.10161,551.83914 2.27673,4.29 0.27456,0.257 0.38332,0.217 1.32645,0.321 0.19968,-0.28 0.28348,-0.135 1.05903,0.208 0,0.05 -0.92353,0.756 -0.23177,0.114 -0.16046,0.02 -0.3227,-0.02 -0.62757,-0.17 -1.05011,-0.563 -0.0981,-0.08 -0.0945,-0.09 -0.16224,-0.283 -2.12162,-3.912 -0.0107,-0.698 m 3.75829,-2.09 10.15345,-1.51 0.93244,5.759 0.34588,2.034 -1.60637,2.66 -3.31257,0.529 -0.58657,-0.214 -0.65074,-1.03 -1.04298,-0.965 -2.26781,-1.454 -2.24999,-3.359 0.28526,-2.45"
+ id="Lee, FL" />
+ <path
+ d="m 821.01335,548.24014 8.07462,-1.223 4.63011,-0.745 0.53843,-4.47 2.34625,14.031 0.28705,1.664 -7.96943,1.404 -0.65788,-3.792 -0.33875,-2.121 -5.97796,1.011 -0.93244,-5.759"
+ class="c12051"
+ id="Hendry, FL" />
+ <path
+ d="m 836.88981,557.49714 1.14995,6.257 0.62757,3.892 -9.73804,1.598 -0.14441,-0.289 -0.0963,-0.103 -0.96631,-0.541 -0.5206,-0.215 -0.15333,-0.05 -2.00216,-0.427 -0.24782,0 -2.40152,0.448 -0.19434,0.13 -0.16937,0.211 -0.0232,0.24 -0.0571,0.433 -0.0784,0.275 -0.14441,-0.02 -0.1141,-0.114 -1.30863,-1.849 -1.80783,-3.084 -0.21929,-0.845 -0.14263,-0.571 -0.5313,-1.863 -0.44928,-1.262 -0.34588,-0.706 -0.025,-0.04 0.58657,0.214 3.31257,-0.529 1.60637,-2.66 -0.34588,-2.034 5.97796,-1.011 0.33875,2.121 0.65788,3.793 7.96943,-1.405"
+ class="c12021"
+ id="Collier, FL" />
+ <path
+ class="c12087"
+ d="m 845.75602,587.63814 -0.23534,0.499 -0.84152,0.754 -0.83616,0.722 -1.01446,0.371 -0.0856,0.02 0,0 -0.0178,-0.02 0.0891,-0.105 0.98949,-0.988 1.79001,-1.356 0.16224,0.103 m 7.64851,-11.845 -0.12837,0.09 -0.29595,0.56 -1.24623,3.199 -0.0357,0.144 0.14798,0.33 -0.12837,0.362 -0.29774,0.595 -3.29474,4.493 -0.10162,0.12 -1.63311,1.558 -0.0499,-0.05 0,-0.02 0.009,-0.106 0.65788,-1.005 0.4582,-0.401 0.95918,-1.107 0.62579,-0.756 1.10003,-1.662 0.18364,-0.339 1.18382,-2.506 1.4049,-3.607 0.48138,0.101 m -12.92046,15.782 -0.90926,0.829 -1.21235,0.828 -0.60261,0.176 -0.34588,-0.264 -0.0481,-0.04 -0.0392,-0.07 1.77574,-1.004 2.45857,-1.367 0.0143,0.02 0.1141,0.241 -0.10519,0.13 -1.10003,0.52 m -12.57636,4.051 0.016,-0.242 0.29061,-0.585 2.80267,-1.455 0.79516,0.136 1.47265,0.345 0.60261,0.926 0,0.06 -0.0891,0.07 -0.20147,0.127 -0.37796,0.242 -1.24445,0.612 -7.94625,2.917 -0.50812,0.119 -0.0553,-0.03 -0.0909,-0.378 0.0428,-0.145 0.30665,-0.422 0.95562,-0.239 0.18363,-0.02 0.11946,0.12 0.0909,0.03 0.73098,-0.339 0.30487,-0.174 0.79516,-0.669 1.00376,-1.004 m 10.75962,-27.978 1.5814,9.891 0.93423,3.783 0.21751,0.312 0.016,0 -1.25514,1.013 -1.67055,0.661 -1.6652,0.393 -0.33518,-0.138 -0.91639,-0.529 -0.18364,-0.146 -0.85399,-1.204 -0.0553,-0.531 0.0321,-1.013 0.0874,-0.811 0.0499,-0.193 0.13728,-0.217 0.11945,-0.06 0.27278,0.06 0.0464,-0.152 -0.0143,-0.224 -1.45125,-2.266 -2.38013,-3.625 -2.45145,-3.407 9.73804,-1.597"
+ id="Monroe, FL" />
+ <path
+ class="c12086"
+ d="m 853.40453,575.79214 -0.48138,-0.101 0.21751,-1.063 0.78625,-2.644 0.15333,-0.282 0.0963,0 0.15333,0.788 -0.36192,1.689 -0.56339,1.613 m -15.36477,-12.038 1.99324,-0.313 2.07348,0.169 4.95638,-0.811 2.95956,-0.642 0.63471,-0.282 0.66679,-0.137 0.80229,-0.152 1.50296,-0.299 0.0196,0.06 0.20682,1.269 0.24068,1.68 0.0392,0.522 0.0499,1.043 -0.11411,0.522 -0.0981,0.236 -0.4154,0.344 -0.16938,-0.18 -0.27278,-0.127 -0.26386,0.08 -0.60261,0.367 -0.20325,0.227 -0.0553,0.176 -1.0608,4.411 -0.0927,0.779 0.0784,0.469 0.57587,1.758 0.13728,0.128 0.21751,0 0.0963,0.114 -0.0321,0.255 -0.39223,0.861 -0.87004,1.302 -0.0481,0.05 -0.54555,0.614 -1.15709,1.269 -2.68143,1.343 -0.59726,0.288 -0.8023,0.225 -1.31932,0.234 -2.08061,0.04 -0.016,0 -0.21751,-0.312 -0.93423,-3.783 -1.5814,-9.892 -0.62757,-3.892"
+ id="Miami-Dade, FL" />
+ <path
+ d="m 836.60276,555.83314 11.98089,-1.979 0.98058,-0.159 3.64062,-0.304 0.42432,7.896 -1.50296,0.299 -0.80229,0.152 -0.66679,0.137 -0.63471,0.282 -2.95956,0.642 -4.95638,0.811 -2.07348,-0.169 -1.99324,0.313 -1.14995,-6.257 -0.28705,-1.664"
+ class="c12011"
+ id="Broward, FL" />
+ <path
+ d="m 834.25651,541.80214 10.22119,-1.656 0.2086,-0.03 4.74421,-0.747 1.2177,-0.528 0.36192,0.795 0.39402,0.845 0.34409,0.745 0.53843,1.357 0.33874,2.147 0.27992,1.991 0.098,0.981 0.23178,5.329 -0.0303,0.362 -3.64062,0.304 -0.98058,0.159 -11.98089,1.979 -2.34625,-14.031"
+ class="c12099"
+ id="Palm Beach, FL" />
+ <path
+ d="m 809.51205,539.88414 0.56517,3.959 -4.03998,0.571 0.0945,0.627 0.18542,1.35 -2.46036,0.344 -3.62992,-5.495 -0.21573,-0.299 -0.30844,-0.414 -0.19076,-0.269 -0.91818,-1.132 -0.5206,-0.528 -1.0929,-1.095 7.96052,-1.06 0.55625,4.002 4.01502,-0.561"
+ class="c12115"
+ id="Sarasota, FL" />
+ <path
+ d="m 819.10211,535.37314 1.07507,6.921 -10.09996,1.549 -0.98057,-6.901 4.00967,-0.564 2.21076,-0.41 3.78503,-0.595"
+ class="c12027"
+ id="DeSoto, FL" />
+ <path
+ d="m 832.1759,536.32914 2.08061,5.473 -0.53843,4.47 -4.63011,0.745 -8.07462,1.223 -0.83617,-5.946 6.03502,-0.909 -0.3227,-1.994 1.69729,-2.314 4.58911,-0.748"
+ class="c12043"
+ id="Glades, FL" />
+ <path
+ d="m 847.10565,532.67514 3.54256,6.164 -1.2177,0.528 -4.74421,0.747 -0.2086,0.03 -10.22119,1.656 3.33575,-6.235 5.32543,-0.877 2.65291,-0.44 -0.20147,-1.295 1.73652,-0.28"
+ class="c12085"
+ id="Martin, FL" />
+ <path
+ d="m 836.2658,527.64414 7.2545,-1.175 3.58535,6.206 -1.73652,0.28 0.20147,1.295 -2.65291,0.44 -5.32543,0.877 -1.32646,-7.923"
+ class="c12111"
+ id="St. Lucie, FL" />
+ <path
+ d="m 831.47701,522.30814 7.26341,-1.164 1.00376,-0.933 0.10519,-0.144 3.67093,6.402 -7.2545,1.175 -1.97899,0.314 -0.31913,-1.904 -1.92906,0.328 -0.56161,-4.074"
+ class="c12061"
+ id="Indian River, FL" />
+ <path
+ d="m 826.59017,527.23414 5.44845,-0.852 1.92906,-0.328 0.31913,1.904 1.97899,-0.314 1.32646,7.923 -3.33575,6.235 -2.08061,-5.473 -1.73652,-1.733 -2.02356,-1.562 -2.22858,-3.775 0.40293,-2.025"
+ class="c12093"
+ id="Okeechobee, FL" />
+ <path
+ d="m 818.04844,528.47914 8.54173,-1.245 -0.40293,2.025 2.22858,3.775 2.02356,1.562 1.73652,1.733 -4.58911,0.748 -1.69729,2.314 0.3227,1.994 -6.03502,0.909 -1.07507,-6.921 -1.05367,-6.894"
+ class="c12055"
+ id="Highlands, FL" />
+ <path
+ d="m 808.10002,529.98314 9.94842,-1.504 1.05367,6.894 -3.78503,0.595 -2.21076,0.41 -4.00967,0.564 -0.99663,-6.959"
+ class="c12049"
+ id="Hardee, FL" />
+ <path
+ d="m 797.95906,531.48614 10.14096,-1.503 0.99663,6.959 0.4154,2.942 -4.01502,0.561 -0.55625,-4.002 -7.96052,1.06 -1.15886,-1.092 -0.65075,-1.199 0.53129,-0.247 0.69354,-0.451 1.34607,-2.161 0.0802,-0.17 0.13728,-0.697"
+ class="c12081"
+ id="Manatee, FL" />
+ <path
+ d="m 794.30417,519.82614 0.72207,4.67 -1.35855,0.376 -0.0713,0.07 -0.0481,0.182 0.11945,0.258 0.23356,0.152 2.19471,0.955 0.82012,-0.351 0.1034,0.578 -0.26386,0.989 -1.69551,4.34 -1.02337,-1.425 -2.18401,-5.487 0.0143,-0.05 0.0963,-1.189 0.0571,-1.036 -0.19255,-1.631 -0.16759,-0.376 -0.10519,-0.155 -0.35479,-0.41 3.10397,-0.457"
+ class="c12103"
+ id="Pinellas, FL" />
+ <path
+ d="m 794.30417,519.82614 11.00209,-1.553 1.00198,-0.144 1.06972,6.919 0.72206,4.935 -10.14096,1.503 2.04138,-3.045 0.0392,-0.09 0.45106,-1.095 0.10341,-0.586 -0.32983,-0.997 -0.28883,-0.383 -3.04514,-1.079 -0.73098,0 -0.60261,0.114 -0.57051,0.161 -0.72207,-4.67"
+ class="c12057"
+ id="Hillsborough, FL" />
+ <path
+ d="m 792.73703,508.01514 4.56237,-0.662 0.10697,0.651 3.10041,-0.49 0.041,0.451 0.27278,0.371 0.81121,0.907 0.41719,0.25 2.58338,0.64 0.67392,1.053 -3.98828,0.58 0.14442,0.989 -7.76975,1.149 -0.77198,0.112 -0.18364,-6.001"
+ class="c12053"
+ id="Hernando, FL" />
+ <path
+ d="m 805.30626,511.18614 0.53665,3.768 -0.53665,3.319 -11.00209,1.553 -3.10397,0.457 1.72047,-6.267 0.77198,-0.112 7.76975,-1.149 -0.14442,-0.989 3.98828,-0.58"
+ class="c12101"
+ id="Pasco, FL" />
+ <path
+ d="m 813.7428,512.95514 15.94956,-2.5 0.39401,2.274 0.56161,3.649 -0.12837,0.03 0.9574,5.905 0.56161,4.074 -5.44845,0.852 -0.17651,-0.802 -0.14441,-0.565 -1.04655,-1.559 -0.60082,-0.857 -4.47679,-4.099 -1.42986,-1.111 -4.66934,-3.302 -0.30309,-1.984"
+ class="c12097"
+ id="Osceola, FL" />
+ <path
+ d="m 813.7428,512.95514 0.30309,1.984 4.66934,3.302 1.42986,1.111 4.47679,4.099 0.60082,0.857 1.04655,1.559 0.14441,0.565 0.17651,0.802 -8.54173,1.245 -9.94842,1.504 -0.72206,-4.935 -1.06972,-6.919 -1.00198,0.144 0.53665,-3.319 1.86131,-1.043 6.03858,-0.956"
+ class="c12105"
+ id="Polk, FL" />
+ <path
+ d="m 817.10173,502.29714 -0.6454,1.858 0.0731,0.508 1.04476,0.922 1.95224,0.395 6.71786,-1.125 3.44807,5.6 -15.94956,2.5 -1.51365,-9.756 0.19433,-0.183 0.19255,-0.04 0.28169,-0.04 4.20401,-0.638"
+ class="c12095"
+ id="Orandge, FL" />
+ <path
+ d="m 817.10173,502.29714 0.60974,-2.262 1.0929,0.857 2.59586,0.587 0.42432,0.07 0.12124,-0.02 0.65966,-0.316 0.19968,-0.449 1.478,1.237 0.65966,0.829 1.3015,2.016 -6.71786,1.125 -1.95224,-0.395 -1.04476,-0.922 -0.0731,-0.508 0.6454,-1.858"
+ class="c12117"
+ id="Seminole, FL" />
+ <path
+ d="m 810.84742,491.87114 3.67985,3.696 1.3532,0.898 0.84151,0.459 0.81121,0.625 0.0481,0.07 0.24247,1.173 -0.11232,1.247 -0.60974,2.262 -4.20401,0.638 -0.28169,0.04 -0.19255,0.04 -0.19433,0.183 1.51365,9.756 -6.03858,0.956 -1.99859,-13.925 5.89951,-0.891 0.0374,-2.38 -0.79516,-4.844"
+ class="c12069"
+ id="Lake FL" />
+ <path
+ d="m 798.57058,501.03114 7.13505,-1.045 1.99859,13.925 -1.86131,1.043 -0.53665,-3.768 -0.67392,-1.053 -2.58338,-0.64 -0.41719,-0.25 -0.81121,-0.907 -0.27278,-0.371 -0.041,-0.451 0.0874,-0.997 0.0731,-0.208 0.2496,-0.434 0.40114,-0.545 0.37084,-0.1 0.0713,-0.07 0.21037,-0.731 -0.016,-0.1 -2.54059,-2.282 -0.8433,-1.02"
+ class="c12119"
+ id="Sumter, FL" />
+ <path
+ d="m 793.82102,499.76014 4.74956,1.271 0.8433,1.02 2.54059,2.282 0.016,0.1 -0.21037,0.731 -0.0713,0.07 -0.37084,0.1 -0.40114,0.545 -0.2496,0.434 -0.0731,0.208 -0.0874,0.997 -3.10041,0.49 -0.10697,-0.651 -4.56237,0.662 -0.32983,-3.402 -0.12837,-0.738 -0.13728,-0.282 -2.65112,-2.032 0.13371,-0.241 0.20325,-0.242 0.52238,-0.507 0.37797,-0.1 0.30487,0 1.23731,0.28 1.18204,-0.697 0.35301,-0.259 0.016,-0.05"
+ class="c12017"
+ id="Citrus, FL" />
+ <path
+ d="m 789.73824,488.30314 5.22381,1.107 0.94849,6.1 -2.64221,0.394 0.55269,3.856 -0.016,0.05 -0.35301,0.259 -1.18204,0.697 -1.23731,-0.28 -0.30487,0 -0.37797,0.1 -0.52238,0.506 -0.20325,0.243 -0.13371,0.241 0.0392,-0.771 -0.20681,-0.611 -1.19809,-1.97 -0.48316,-0.209 -7.15822,-2.023 1.60636,-1.432 0.85221,-1.535 0.43324,-1.455 0.7078,-3.07 5.65526,-0.182"
+ class="c12075"
+ id="Levy, FL" />
+ <path
+ d="m 794.96205,489.41014 3.56753,-0.504 0.36192,0.401 -0.041,0.248 1.46374,0.644 1.478,-0.617 0.25673,-0.163 0.0161,-0.05 -0.10163,-0.673 0.51169,-0.611 0.41897,-0.225 1.34963,-0.531 3.21452,0.176 0.5616,1.263 0.9895,1.203 0.89856,0.941 0.93957,0.958 0.79516,4.844 -0.0374,2.38 -5.89951,0.891 -7.13505,1.045 -4.74956,-1.271 -0.55269,-3.856 2.64221,-0.394 -0.94849,-6.099"
+ class="c12083"
+ id="Marion, FL" />
+ <path
+ d="m 809.90785,490.91314 4.64616,-2.428 0.35123,0.483 0.45998,2.58 1.66341,-0.28 0.0802,-0.02 3.55148,-0.641 -0.4582,-2.461 0.84508,-1.333 1.51544,2.524 1.22483,1.888 0.94671,1.471 0.56873,0.77 1.68125,2.06 3.71372,4.482 -4.70143,0.781 0.70602,3.983 -0.4582,0.08 -1.3015,-2.017 -0.65966,-0.829 -1.478,-1.237 -0.19968,0.449 -0.65966,0.316 -0.12124,0.02 -0.42432,-0.07 -2.59586,-0.587 -1.0929,-0.857 0.11232,-1.247 -0.24247,-1.173 -0.0481,-0.07 -0.81121,-0.625 -0.84151,-0.459 -1.3532,-0.898 -3.67985,-3.696 -0.93957,-0.958"
+ class="c12127"
+ id="Volusia, FL" />
+ <path
+ d="m 826.24429,504.85514 0.4582,-0.08 -0.70602,-3.982 4.70143,-0.781 3.67093,3.888 0.0392,0.05 0.15689,0.159 0.0285,0.05 1.46373,2.669 0,0.185 -0.6757,0.433 -0.18542,0.257 -0.21573,0.426 -0.016,0.113 -0.0107,0.03 -0.0642,0.344 -0.0463,0.627 0.0321,0.637 0.0642,0.568 0.27991,1.199 0.57943,1.75 0.7809,1.778 0.54555,0.993 0.44037,0.677 0.59548,0.91 0.0339,0.06 1.6545,2.266 -0.10519,0.144 -1.00376,0.933 -7.26341,1.164 -0.9574,-5.905 0.12837,-0.03 -0.56161,-3.649 -0.39401,-2.274 -3.44807,-5.6"
+ class="c12009"
+ id="Brevard, FL" />
+ <path
+ d="m 723.56703,470.19814 0.11945,-1.528 0.11232,-0.522 1.37459,-0.128 0.36014,0.297 0.0588,0.667 2.30703,-0.192 0.2086,-1.582 0,-0.196 -0.0499,-0.246 1.88092,-0.187 1.51901,0.854 0.49742,4.981 -1.00376,0.112 0.29596,2.98 -1.19631,0.13 -6.01896,0.579 -2.13053,0.924 -0.48851,0.538 0.71315,-1.358 0.68284,-3.334 -0.31201,-0.346 -0.0945,-0.699 0.91283,-1.587 0.25139,-0.157"
+ class="c12133"
+ id="Washington, FL" />
+ <path
+ d="m 719.12411,463.96414 10.49933,-1.215 -1.56536,4.019 0.0499,0.246 0,0.196 -0.2086,1.582 -2.30703,0.192 -0.0588,-0.667 -0.36014,-0.297 -1.37459,0.128 -0.11232,0.522 -0.11945,1.528 -3.79217,0.371 -0.65075,-6.605"
+ class="c12059"
+ id="Holmes, FL" />
+ <path
+ d="m 716.14137,464.26014 2.98274,-0.296 0.65075,6.605 3.79217,-0.371 -0.25139,0.157 -0.91283,1.587 0.0945,0.699 0.31201,0.346 -0.68284,3.334 -0.71315,1.358 0.23356,2.757 -8.19764,-1.68 -1.25336,-14.095 3.94549,-0.401"
+ class="c12131"
+ id="Walton, FL" />
+ <path
+ d="m 712.19588,464.66114 1.25336,14.095 -7.97121,0.603 -1.06794,-13.991 1.88628,-0.142 5.89951,-0.565"
+ class="c12091"
+ id="Okaloosa, FL" />
+ <path
+ d="m 697.01653,466.02814 7.39356,-0.66 1.06794,13.991 -2.31238,0.593 -3.21452,0.523 -1.46908,-0.892 -2.48532,-4.507 -1.01267,-2.428 -0.30487,-0.826 -0.0642,-0.379 -0.24069,-1.719 0.0624,-0.337 0.36905,-1.36 0.13906,-0.239 0.88074,-0.774 1.19096,-0.986"
+ class="c12113"
+ id="Santa Rosa, FL" />
+ <path
+ d="m 688.46767,466.83914 8.54886,-0.811 -1.19096,0.986 -0.88074,0.774 -0.13906,0.239 -0.36905,1.36 -0.0624,0.337 0.24069,1.719 0.0642,0.379 0.30487,0.826 1.01267,2.428 2.48532,4.507 1.46908,0.892 3.21452,-0.523 -4.57307,1.423 -0.17115,0.04 -0.11945,0.03 -0.69889,0.179 -0.46354,0.09 -0.74168,0.144 -3.07545,0.731 -1.80961,0.523 1.2694,-0.573 0.26565,-2.514 0.19968,-5.022 -0.0321,-0.378 -0.0713,-0.273 -0.24068,-0.394 -0.88431,-0.547 -0.66679,-0.344 -0.32983,-0.06 -0.11054,-0.04 -0.62935,-0.433 -2.00038,-2.181 -0.25852,-0.438 0.44394,-3.078"
+ class="c12033"
+ id="Escambia, FL" />
+ <path
+ d="m 732.95919,472.32014 2.64399,-0.275 1.49583,-0.247 1.39777,-1.047 3.23769,-0.353 -0.93957,2.147 -0.65966,4.239 -0.93244,3.306 -5.41458,0.586 -0.82903,-8.356"
+ class="c12013"
+ id="Calhoun, FL" />
+ <path
+ d="m 733.78822,480.67614 5.41458,-0.586 2.38726,5.004 0.23355,3.127 -1.08576,1.551 -0.29596,-0.05 -1.75256,1.721 -0.18542,0.392 -1.87201,0.153 -0.0553,-2.289 -0.0571,-0.249 -0.29596,-0.491 -1.14995,-1.449 -0.47603,-0.455 -0.0767,-0.06 -0.73276,-6.317"
+ class="c12045"
+ id="Gulf, FL" />
+ <path
+ d="m 750.99291,483.07114 4.17014,0.652 0.14441,0.4 0.0571,0.217 0.0481,0.169 0.007,0.03 -0.0178,0.257 -0.11232,0.323 -0.10341,0.07 -0.57764,0.161 -0.9164,-0.12 -0.21751,-0.05 -0.21216,-0.144 -0.1979,-0.33 -1.15708,0.424 -0.4582,0.211 -2.86864,2.216 -1.30149,1.085 -1.13213,0.837 -1.07863,0.69 -2.15906,0.691 -0.86112,0.195 -0.71315,-0.107 -0.58657,0.07 -0.38688,0.114 -1.85775,0.697 0.18542,-0.392 1.75256,-1.721 0.29596,0.05 1.08576,-1.551 -0.23355,-3.127 0.24069,-1.009 9.16216,-1.014"
+ class="c12037"
+ id="Franklin, FL" />
+ <path
+ d="m 783.68897,483.14214 0.39401,5.343 -0.7078,3.07 -0.43324,1.455 -0.85221,1.535 -1.60636,1.432 -0.36014,-1.246 -0.69354,-1.052 -0.39401,-0.555 -0.48138,-0.226 -0.47424,0 -0.93244,-0.425 -1.56715,-0.804 -0.45819,-0.256 -0.0481,-0.129 -0.63649,-3.214 1.36747,-3.81 7.88385,-1.118"
+ class="c12029"
+ id="Dixie, FL" />
+ <path
+ d="m 784.28979,481.60514 1.43165,-1.25 3.12537,1.928 0.89143,6.02 -5.65526,0.182 -0.39401,-5.343 0.60082,-1.537"
+ class="c12041"
+ id="Gilchrist, FL" />
+ <path
+ d="m 791.04152,479.39614 2.24107,0.1 0.55447,0.779 0.2086,0.08 2.51563,0.425 1.10003,-0.08 0.22464,-0.128 0.13015,-0.03 0.92353,0.1 0.28169,0.07 1.75969,1.664 0.21751,0.451 -0.0339,0.264 0.79872,5.61 0.10163,0.673 -0.0161,0.05 -0.25673,0.163 -1.478,0.617 -1.46374,-0.644 0.041,-0.248 -0.36192,-0.401 -3.56753,0.505 -5.22381,-1.108 -0.89143,-6.02 2.19471,-2.887"
+ class="c12001"
+ id="Alachua, FL" />
+ <path
+ d="m 810.10932,478.94114 1.88984,4.748 2.55485,4.796 -4.64616,2.428 -0.89856,-0.941 -0.9895,-1.203 -0.5616,-1.263 -3.21452,-0.176 -1.34963,0.531 -0.41897,0.225 -0.51169,0.611 -0.79872,-5.61 0.10519,-0.02 0.47424,-0.239 1.76148,-1.257 0.0874,-0.408 0.13549,-0.164 1.81497,-1.298 0.30665,-0.05 4.25928,-0.715"
+ class="c12107"
+ id="Putnam, FL" />
+ <path
+ d="m 811.99916,483.68914 5.97796,-2.048 3.0701,5.174 -0.84508,1.333 0.4582,2.461 -3.55148,0.641 -0.0802,0.02 -1.66341,0.28 -0.45998,-2.58 -0.35123,-0.483 -2.55485,-4.796"
+ class="c12035"
+ id="Flagler, FL" />
+ <path
+ d="m 807.17649,472.84914 1.07151,-0.449 0.45463,0 1.31754,0.417 2.06635,-0.353 -0.57943,-3.327 1.11786,-0.189 2.39439,6.216 1.68659,4.025 0.0321,0.08 0.2496,0.512 0.18542,0.401 0.80407,1.464 -5.97796,2.048 -1.88984,-4.747 -2.93283,-6.093"
+ class="c12109"
+ id="St. Johns, FL" />
+ <path
+ d="m 807.17649,472.84914 2.93283,6.092 -4.25928,0.715 -0.30665,0.05 -1.81497,1.297 -0.13549,0.164 -0.0874,0.409 -1.76148,1.257 -0.47424,0.239 -1.42986,-9.635 -0.14442,-0.99 1.97721,-0.288 4.11308,-0.683 0.54734,-0.121 0.61687,-0.08 0.22642,1.576"
+ class="c12019"
+ id="Clay, FL" />
+ <path
+ d="m 798.00898,473.70914 1.83101,-0.273 1.42986,9.635 -0.10519,0.02 0.0339,-0.264 -0.21751,-0.451 -1.75969,-1.664 -0.28169,-0.07 -0.92353,-0.1 -0.13015,0.03 -0.22464,0.128 -1.10003,0.08 -2.51563,-0.424 -0.2086,-0.08 -0.55447,-0.779 0.86113,-0.392 1.24622,-0.676 2.12697,-2.997 0.58834,-1.148 0.0392,-0.25 -0.1355,-0.322"
+ class="c12007"
+ id="Bradford, FL" />
+ <path
+ d="m 798.00898,473.70914 0.1355,0.322 -0.0392,0.25 -0.58834,1.148 -2.12697,2.997 -1.24622,0.676 -0.86113,0.392 -2.24107,-0.1 0.7702,-4.635 6.19726,-1.052"
+ class="c12125"
+ id="Union, FL" />
+ <path
+ d="m 784.54831,471.14714 1.17313,9.208 -1.43165,1.25 -1.22839,-1.458 -0.76307,-0.756 -0.32983,-0.241 -2.02356,-1.301 -0.93957,-0.443 -0.9895,-0.105 -0.0802,0.227 -0.30666,0.199 -0.61152,-0.139 -0.25674,-0.189 -0.70601,-1.633 -0.27456,-1.485 0.0178,-0.123 0.0802,-0.06 1.11786,-3.036 0.16046,-0.685 0.0553,-0.09 0.60261,-0.435 0.73989,-0.24 1.58141,0.03 0.9984,0.192 3.4142,1.304"
+ class="c12121"
+ id="Suwannee, FL" />
+ <path
+ d="m 775.87821,474.10314 -0.0802,0.06 -0.0178,0.123 0.27456,1.485 0.70601,1.633 0.25674,0.189 0.61152,0.139 0.30666,-0.199 0.0802,-0.227 0.9895,0.105 0.93957,0.443 2.02356,1.301 0.32983,0.241 0.76307,0.756 1.22839,1.458 -0.60082,1.537 -7.88385,1.118 -0.6668,0.1 -0.57943,-1.633 -1.03585,-8.299 2.35517,-0.323"
+ class="c12067"
+ id="Lafayette, FL" />
+ <path
+ d="m 773.52304,474.42514 1.03585,8.3 0.57943,1.633 0.6668,-0.1 -1.36747,3.81 -0.68462,-0.171 -1.98077,-0.801 -0.21751,-0.187 -0.18541,-0.216 -0.68819,-0.941 0.007,-0.111 -0.13728,-0.435 -0.23356,-0.346 -1.02158,-1.212 -0.9057,-0.628 -0.16224,-0.105 -2.17867,-0.946 -1.18026,-0.337 -1.84705,-0.829 -1.28723,-0.756 2.74027,-5.433 6.9104,-0.922 0.12302,1.002 2.01464,-0.271"
+ class="c12123"
+ id="Taylor, FL" />
+ <path
+ d="m 746.87805,476.87714 9.1693,-1.191 0.2086,0.644 3.26978,-0.394 0.49742,4.063 -3.34288,0.476 -1.82388,0.9 -0.312,0.169 -0.0481,0.778 0.18364,0.829 0.0481,0.06 0.43502,0.51 -4.17014,-0.652 -1.29614,-0.763 -0.62401,-0.435 -0.85399,-1.109 -1.73652,-3.046 0.14442,-0.545 0.25138,-0.296"
+ class="c12129"
+ id="Wakulla, FL" />
+ <path
+ d="m 747.9549,474.70514 -1.07685,2.172 -0.25138,0.296 -0.14442,0.545 1.73652,3.046 0.85399,1.109 0.62401,0.435 1.29614,0.763 -9.16216,1.014 -0.24069,1.009 -2.38726,-5.004 0.93244,-3.306 0.65966,-4.239 0.93957,-2.147 6.22043,4.307"
+ class="c12077"
+ id="Liberty, FL" />
+ <path
+ d="m 752.34076,467.20114 1.97008,-0.137 -0.80408,2.17 -0.9057,2.699 -0.0909,0.194 -0.28883,0.257 -0.40114,0.168 -2.63509,1.333 -1.23018,0.82 -6.22043,-4.307 1.05189,-2.555 0.025,0 9.52944,-0.642"
+ class="c12039"
+ id="Gadsden, FL" />
+ <path
+ d="m 759.71828,466.68814 -0.23356,3.51 -0.41006,2.074 0.45107,3.664 -3.26978,0.394 -0.2086,-0.644 -9.1693,1.191 1.07685,-2.172 1.23018,-0.82 2.63509,-1.333 0.40114,-0.168 0.28883,-0.257 0.0909,-0.194 0.9057,-2.699 0.80408,-2.17 3.89913,-0.275 1.50831,-0.101"
+ class="c12073"
+ id="Leon, FL" />
+ <path
+ d="m 764.92604,466.33314 2.61191,-0.169 0.1765,0.272 0.17651,1.288 -0.56339,0.747 -1.57428,1.695 -1.1339,3.343 -0.14441,1.107 -2.74027,5.433 -1.71156,-0.05 -0.94849,-7.727 0.41006,-2.074 0.23356,-3.51 5.20776,-0.355"
+ class="c12065"
+ id="Jefferson, FL" />
+ <path
+ d="m 772.56564,465.81814 0.95027,-0.06 0.8843,0.394 0.92353,3.11 0.55447,1.061 0.12837,0.11 0.98949,0.63 -1.11786,3.036 -2.35517,0.322 -2.01464,0.271 -0.12302,-1.002 -6.9104,0.922 0.14441,-1.107 1.1339,-3.343 1.57428,-1.695 0.56339,-0.747 -0.17651,-1.288 -0.1765,-0.272 5.02769,-0.346"
+ class="c12079"
+ id="Madison, FL" />
+ <path
+ d="m 776.93189,465.52714 8.84482,-0.608 -0.44929,0.867 -0.007,0.41 0.0802,0.636 0.39223,0.458 1.12499,1.188 0.12837,0.183 0.20325,0.55 0.007,0.208 -0.52951,1.375 -0.12302,0.151 -1.05189,0.516 -0.93066,-0.08 -0.0731,-0.233 -3.4142,-1.303 -0.9984,-0.193 -1.58141,-0.03 -0.73989,0.241 -0.60261,0.435 -0.0553,0.09 -0.16046,0.685 -0.98949,-0.63 -0.12837,-0.11 -0.55447,-1.061 -0.92353,-3.109 -0.8843,-0.394 3.41598,-0.236"
+ class="c12047"
+ id="Hamilton, FL" />
+ <path
+ d="m 787.86623,464.76614 2.45858,-0.177 1.48691,10.172 -0.7702,4.635 -2.19471,2.887 -3.12537,-1.928 -1.17313,-9.208 0.0731,0.233 0.93066,0.08 1.05189,-0.516 0.12302,-0.151 0.52951,-1.375 -0.007,-0.208 -0.20325,-0.55 -0.12837,-0.183 -1.12499,-1.188 -0.39223,-0.458 -0.0802,-0.636 0.007,-0.41 0.44929,-0.867 2.08952,-0.153"
+ class="c12023"
+ id="Columbia, FL" />
+ <path
+ d="m 791.12888,464.53214 4.03464,-0.247 0.57765,3.221 0.19433,0.514 0.36905,0.529 0.40828,0.321 0.13015,0.03 2.24998,-0.435 0.31557,2.016 0.43146,2.958 -1.83101,0.273 -6.19726,1.052 -1.48691,-10.172 0.80407,-0.06"
+ class="c12003"
+ id="Baker, FL" />
+ <path
+ d="m 799.40853,470.47814 3.56574,-4.965 1.67768,-2.275 0.41898,-0.401 0.20146,-0.113 1.38172,-0.593 2.24107,0.09 0.29774,0.04 1.29436,1.052 0.37797,0.25 0.34588,0.289 0.55447,1.807 0.23356,1.366 0.21573,0.82 0.22464,0.653 0.18542,0.453 -1.11786,0.189 0.57943,3.326 -2.06635,0.353 -1.31754,-0.417 -0.45463,0 -1.07151,0.449 -0.22642,-1.576 -0.61687,0.08 -0.54734,0.121 -4.11308,0.683 -1.97721,0.288 -0.28704,-1.968"
+ class="c12031"
+ id="Duval, FL" />
+ <path
+ d="m 809.76344,458.77714 0.72384,4.534 -1.29436,-1.052 -0.29774,-0.04 -2.24107,-0.09 -1.38172,0.593 -0.20146,0.113 -0.41898,0.401 -1.67768,2.275 -3.56574,4.965 -0.31557,-2.016 0.10341,-1.592 0.10519,-1.573 -0.0143,-1.537 -0.25852,-0.706 -0.60261,-0.788 -0.30665,-0.465 -0.0874,-0.474 0.17116,-2.484 2.15014,-1.253 0.83617,0.563 3.06297,0.658 2.31238,0.257 1.22305,-0.06 1.67233,-0.201 0.30309,-0.03"
+ class="c12089"
+ id="Nassau, FL" />
+ <path
+ d="m 763.82423,365.43214 -0.40293,1.831 -1.70442,1.324 -1.23553,2.243 -0.30666,1.737 -5.89595,-1.712 1.39599,-4.138 1.21592,-0.194 6.93358,-1.091"
+ class="c13241"
+ id="Rabun, GA" />
+ <path
+ d="m 748.50225,367.76214 7.17248,-1.045 -1.39599,4.138 -0.48315,0.585 -1.81497,0.41 -0.0802,-0.578 -0.68284,-1.599 -0.54913,-0.314 -0.54377,0.04 -1.13926,-0.643 -0.59548,-0.571 0.11233,-0.424"
+ class="c13281"
+ id="Towns, GA" />
+ <path
+ d="m 757.66976,449.05514 0.94671,8.383 -2.20898,0.255 -5.07226,0.622 -2.56734,0.318 0.0161,-0.963 0.29417,-0.788 0.10697,-0.168 2.34448,-3.36 2.36408,-1.838 1.01089,-2.026 2.76523,-0.435"
+ class="c13205"
+ id="Mitchell, GA" />
+ <path
+ d="m 749.28849,450.26814 5.61604,-0.778 -1.01089,2.026 -2.36408,1.838 -2.34448,3.36 -0.10697,0.168 -0.29417,0.788 -0.0161,0.963 -0.67749,0.06 -2.42648,-3.871 -0.40115,-4.011 4.02572,-0.547"
+ class="c13007"
+ id="Baker, GA" />
+ <path
+ d="m 745.66392,454.82614 2.42648,3.871 -3.64775,0.669 -3.75472,0.369 -0.40115,-4.203 4.15587,-0.403 1.22127,-0.247 0,-0.06"
+ class="c13201"
+ id="Miller, GA" />
+ <path
+ d="m 741.53479,449.70114 3.72798,1.114 0.40115,4.011 0,0.06 -1.22127,0.248 -4.15587,0.402 0.40115,4.203 -1.9469,0.16 -0.21216,-0.458 -0.14619,-0.262 -0.92888,-1.022 -0.14619,-0.04 -0.16938,0 -0.16937,-0.1 -0.19968,-0.465 -0.27278,-1.632 0.1355,-0.595 0.20859,-0.61 0.24247,-4.901 0.42433,0.715 0.44215,-0.05 0.37797,-0.121 0.53842,-0.213 2.66896,-0.445"
+ class="c13099"
+ id="Early, GA" />
+ <path
+ d="m 740.68793,459.73514 3.75472,-0.369 -0.34409,0.843 0.35301,3.423 -0.15155,1.166 -0.61331,1.132 -0.77198,0.499 -0.28169,0.594 -0.0303,0.362 0.20859,0.458 -0.025,0 -3.46946,-6.283 -0.57587,-1.665 1.9469,-0.16"
+ class="c13253"
+ id="Seminole, GA" />
+ <path
+ d="m 751.33523,458.31514 1.00553,8.886 -9.52944,0.642 -0.20859,-0.458 0.0303,-0.362 0.28169,-0.594 0.77198,-0.499 0.61331,-1.132 0.15155,-1.166 -0.35301,-3.423 0.34409,-0.843 3.64775,-0.669 0.67749,-0.06 2.56734,-0.318"
+ class="c13087"
+ id="Decatur, GA" />
+ <path
+ d="m 756.40749,457.69314 0.24247,2.259 0.29061,0.628 0.26386,0.33 0.39224,0.378 0.6133,5.501 -3.89913,0.275 -1.97008,0.137 -1.00553,-8.886 5.07226,-0.622"
+ class="c13131"
+ id="Grady, GA" />
+ <path
+ d="m 758.61647,457.43814 5.32721,0.232 0.98236,8.663 -5.20776,0.355 -1.50831,0.101 -0.6133,-5.501 -0.39224,-0.378 -0.26386,-0.33 -0.29061,-0.628 -0.24247,-2.259 2.20898,-0.255"
+ class="c13275"
+ id="Thomas, GA" />
+ <path
+ d="m 769.05695,457.13214 1.76504,4.541 -0.51168,0.561 -0.5723,1.207 -0.0143,0.08 0.74702,1.096 0.31913,0.239 1.77574,0.958 -5.02769,0.346 -2.61191,0.169 -0.98236,-8.663 3.03088,-1.334 2.08239,0.796"
+ class="c13027"
+ id="Brooks, GA" />
+ <path
+ d="m 767.43989,450.48714 -0.46533,5.849 -3.03088,1.334 -5.32721,-0.232 -0.66501,-5.89 6.72676,-0.772 2.76167,-0.289"
+ class="c13071"
+ id="Colquitt, GA" />
+ <path
+ d="m 768.89649,449.77214 0,0.724 0.12659,0.36 0.12658,0.184 1.06438,0.747 0.312,0.114 1.60636,3.439 0.4582,1.43 -3.53365,0.362 -2.08239,-0.796 0.46533,-5.849 1.4566,-0.715"
+ class="c13075"
+ id="Cook, GA" />
+ <path
+ d="m 776.93724,452.54414 1.47265,-0.217 0.98771,7.181 -0.87539,0.581 -0.2496,-1.237 -0.51525,-0.923 -2.67431,0.296 -0.58656,-1.671 -0.0891,-0.676 0.34587,-2.184 2.47641,-0.331 0.0143,-0.09 -0.11945,-0.402 -0.1872,-0.328"
+ class="c13173"
+ id="Lanier, GA" />
+ <path
+ d="m 772.5906,456.77014 1.90589,-0.216 0.58656,1.671 2.67431,-0.296 0.51525,0.923 0.2496,1.237 -1.59032,5.438 -3.41598,0.236 -0.95027,0.06 -1.77574,-0.958 -0.31913,-0.238 -0.74702,-1.097 0.0143,-0.08 0.5723,-1.207 0.51168,-0.561 -1.76504,-4.541 3.53365,-0.362"
+ class="c13185"
+ id="Lowndes, GA" />
+ <path
+ d="m 779.3976,459.50814 2.54772,0.469 0.22464,0.36 0.28883,0.804 0.56338,0.628 0.2817,0.15 0.52238,0.148 0.73811,-0.03 0.39401,-0.06 0.77911,-0.02 1.29437,0.08 0.34587,0.141 0.19969,0.199 0.0713,0.12 0.21751,2.266 -2.08952,0.153 -8.84482,0.608 1.59032,-5.438 0.87539,-0.581"
+ class="c13101"
+ id="Echols, GA" />
+ <path
+ d="m 778.40989,452.32714 5.83177,-0.794 1.75969,3.003 0.67571,0.683 1.23018,0.916 2.10378,3.022 0.40293,2.653 0.37797,2.039 0.33696,0.683 -0.80407,0.06 -2.45858,0.177 -0.21751,-2.266 -0.0713,-0.12 -0.19969,-0.199 -0.34587,-0.141 -1.29437,-0.08 -0.77911,0.02 -0.39401,0.06 -0.73811,0.03 -0.52238,-0.148 -0.2817,-0.15 -0.56338,-0.628 -0.28883,-0.804 -0.22464,-0.36 -2.54772,-0.469 -0.98771,-7.181"
+ class="c13065"
+ id="Clinch, GA" />
+ <path
+ d="m 784.49304,447.31314 -0.25138,4.22 -5.83177,0.794 -1.47265,0.217 -0.18364,-0.964 -0.48316,-2.09 -0.89321,-0.69 -0.91283,-0.964 -0.0321,-0.06 -0.041,-0.383 3.53543,-0.412 2.59764,0.533 0.30309,0.296 3.66558,-0.498"
+ class="c13003"
+ id="Atkinson, GA" />
+ <path
+ d="m 774.11674,446.23514 0.27456,1.159 0.041,0.383 0.0321,0.06 0.91283,0.964 0.89321,0.69 0.48316,2.09 0.18364,0.964 0.1872,0.328 0.11945,0.401 -0.0143,0.09 -2.47641,0.331 -0.34587,2.184 0.0891,0.676 -1.90589,0.216 -0.4582,-1.43 -1.60636,-3.439 -0.312,-0.114 -1.06438,-0.748 -0.12658,-0.183 -0.12659,-0.36 0,-0.724 1.478,-3.127 3.74225,-0.41"
+ class="c13019"
+ id="Berrien, GA" />
+ <path
+ d="m 776.34354,441.25314 -2.2268,4.982 -3.74225,0.41 -3.50334,-2.264 0.42433,-3.866 1.60101,-0.192 1.10004,1.622 1.22661,0.449 1.72938,-0.169 1.10895,-0.529 2.28207,-0.443"
+ class="c13155"
+ id="Irwin, GA" />
+ <path
+ d="m 764.05779,445.34314 2.81336,-0.962 3.50334,2.264 -1.478,3.127 -1.4566,0.715 -2.76167,0.289 -0.62043,-5.433"
+ class="c13277"
+ id="Tift, GA" />
+ <path
+ d="m 757.62163,439.67914 2.77236,0.674 0.0874,0.06 0.14441,0.908 0.41898,3.15 1.52613,-0.178 0.16937,0.06 0.58479,0.386 0.73276,0.609 0.62043,5.433 -6.72676,0.772 -0.2817,-2.493 -0.9984,-4.667 0.95027,-4.709"
+ class="c13321"
+ id="Worth, GA" />
+ <path
+ d="m 751.33523,445.71214 5.33613,-1.324 0.9984,4.667 -2.76523,0.435 -5.61604,0.778 -0.9057,-4.185 2.95244,-0.371"
+ class="c13095"
+ id="Dougherty, GA" />
+ <path
+ d="m 746.509,446.32414 1.87379,-0.241 0.9057,4.185 -4.02572,0.547 -3.72798,-1.114 -0.28169,-2.719 5.2559,-0.658"
+ class="c13037"
+ id="Calhoun, GA" />
+ <path
+ d="m 734.60656,444.03514 3.49621,-0.348 0.58421,3.493 2.56612,-0.198 0.28169,2.719 -2.66896,0.445 -0.53842,0.213 -0.37797,0.121 -0.44215,0.05 -0.42433,-0.715 -2.13766,-5.329 -0.33874,-0.449"
+ class="c13061"
+ id="Clay, GA"/>
+ <path
+ d="m 735.51404,439.09814 3.19134,1.118 -0.60261,3.471 -3.49621,0.348 0.90748,-4.937"
+ class="c13239"
+ id="Quitman, GA" />
+ <path
+ d="m 743.57618,439.74314 1.08398,-0.13 0.33696,3.393 0.68284,0.273 0.87717,1.631 0.0642,0.786 -0.0642,0.451 -0.0481,0.177 -5.2559,0.658 -2.56612,0.186 -0.58421,-3.481 0.60261,-3.471 4.8708,-0.473"
+ class="c13243"
+ id="Randolph, GA" />
+ <path
+ d="m 751.00183,444.15414 0.3334,1.558 -2.95244,0.371 -1.87379,0.241 0.0481,-0.177 0.0642,-0.451 -0.0642,-0.786 -0.87717,-1.631 -0.68284,-0.273 -0.33696,-3.393 2.87577,-1.453 2.30525,1.904 1.16065,4.09 z"
+ class="c13273"
+ id="Terrell, GA" />
+ <path
+ d="m 757.76604,438.18514 -0.14441,1.494 -0.95027,4.709 -5.33613,1.324 -0.3334,-1.558 -1.16065,-4.09 -0.11767,-0.982 8.04253,-0.897"
+ class="c13177"
+ id="Lee, GA" />
+ <path
+ d="m 756.67136,435.55714 6.79273,-0.82 0.46533,3.985 -3.53543,1.631 -2.77236,-0.674 0.14441,-1.494 -1.09468,-2.628"
+ class="c13081"
+ id="Crisp, GA" />
+ <path
+ d="m 763.92942,438.72214 2.5709,-0.184 0.79516,1.977 -0.42433,3.866 -2.81336,0.962 -0.73276,-0.609 -0.58479,-0.386 -0.16937,-0.06 -1.52613,0.178 -0.41898,-3.15 -0.14441,-0.908 -0.0874,-0.06 3.53543,-1.631"
+ class="c13287"
+ id="Turner, GA" />
+ <path
+ d="m 766.50032,438.53814 5.84068,-0.797 3.72085,1.061 0.28169,2.451 -2.28207,0.443 -1.10895,0.529 -1.72938,0.169 -1.22661,-0.449 -1.10004,-1.622 -1.60101,0.192 -0.79516,-1.977"
+ class="c13017"
+ id="Ben Hill, GA" />
+ <path
+ d="m 776.06185,438.80214 2.96491,-1.244 0.45107,3.303 4.0489,-0.595 0.34765,2.61 0.62579,-0.08 0.26565,2.025 -0.27278,2.492 -3.66558,0.498 -0.30309,-0.296 -2.59764,-0.533 -3.53543,0.412 -0.27456,-1.159 2.2268,-4.982 -0.28169,-2.451"
+ class="c13069"
+ id="Coffee, GA" />
+ <path
+ d="m 785.44866,439.10914 1.49404,0.827 0.91462,0.474 1.29436,0.337 2.2268,1.102 0.19434,0.208 0.16759,0.33 -0.2496,0.04 -1.0519,1.021 0.0802,0.578 -0.73276,0.98 -1.42629,0.523 -3.59427,-0.708 -0.26565,-2.025 -0.62579,0.08 -0.34765,-2.61 1.92193,-1.157"
+ class="c13005"
+ id="Bacon, GA" />
+ <path
+ d="m 794.19185,435.13114 1.66164,0.635 6.75886,4.813 1.05367,1.831 -1.64558,3.119 -0.69532,-0.305 -0.77734,-0.259 -0.91639,0.36 -1.39064,0.403 -2.16084,-0.151 -0.20859,-0.137 -2.11449,-1.969 -1.0198,-6.878 0.73098,-1.205 0.72384,-0.257"
+ class="c13305"
+ id="Wayne, GA" />
+ <path
+ d="m 791.74041,442.38714 2.01642,1.084 2.11449,1.969 1.1553,1.351 -0.0464,0.497 -0.25851,0.289 -3.22165,2.179 -0.0571,0 -1.80783,-0.243 -3.27513,-3.984 1.42629,-0.523 0.73276,-0.98 -0.0802,-0.578 1.0519,-1.021 0.2496,-0.04"
+ class="c13229"
+ id="Pierce, GA" />
+ <path
+ d="m 802.02044,445.52914 -0.13015,3.753 -1.07508,1.583 -1.248,0.394 -0.34588,0.16 -0.12124,0.195 -0.0945,0.93 -2.52454,-0.274 -0.16937,1.542 -0.99485,0.137 -3.68162,-4.436 1.80783,0.243 0.0571,0 3.22165,-2.179 0.25851,-0.289 0.0464,-0.497 -1.1553,-1.351 0.20859,0.137 2.16084,0.151 1.39064,-0.403 0.91639,-0.36 0.77734,0.259 0.69532,0.305"
+ class="c13025"
+ id="Brantley, GA" />
+ <path
+ d="m 784.76582,444.82114 3.59427,0.708 3.27513,3.984 3.68162,4.436 -5.54472,0.749 0.62579,4.981 4.74956,-0.586 0.57052,0.06 -0.55447,5.128 -4.03464,0.247 -0.33696,-0.682 -0.37797,-2.04 -0.40293,-2.653 -2.10378,-3.022 -1.23018,-0.916 -0.67571,-0.683 -1.75969,-3.003 0.25138,-4.22 0.27278,-2.492"
+ class="c13299"
+ id="Ware, GA" />
+ <path
+ d="m 799.0056,452.54414 1.34785,5.046 -2.15014,1.253 -0.17116,2.484 0.0874,0.474 0.30665,0.465 0.60261,0.788 0.25852,0.706 0.0143,1.537 -0.10519,1.573 -0.10341,1.592 -2.24998,0.435 -0.13015,-0.03 -0.40828,-0.321 -0.36905,-0.529 -0.19433,-0.514 -0.57765,-3.221 0.55447,-5.128 -0.57052,-0.06 -4.74956,0.586 -0.62579,-4.981 5.54472,-0.749 0.99485,-0.137 0.16937,-1.542 2.52454,0.274"
+ class="c13049"
+ id="Charlton, GA" />
+ <path
+ d="m 808.59923,451.83714 1.16421,6.94 -0.30309,0.03 -1.67233,0.202 -1.22305,0.06 -2.31238,-0.257 -3.06297,-0.658 -0.83617,-0.563 -1.34785,-5.046 0.0945,-0.93 0.12124,-0.195 0.34588,-0.16 1.248,-0.394 1.07508,-1.583 0.0731,0.272 0.0624,0.09 1.58141,0.485 0.92531,0.04 4.06673,1.673"
+ class="c13039"
+ id="Camden, GA" />
+ <path
+ d="m 811.07385,444.98314 -2.47462,6.854 -4.06673,-1.673 -0.92531,-0.04 -1.58141,-0.485 -0.0624,-0.09 -0.0731,-0.272 0.13015,-3.753 1.64558,-3.119 0.0143,0.07 1.05189,0.994 1.3425,0.812 2.73314,0.524 1.94333,0.24 0.3227,-0.07"
+ class="c13127"
+ id="Glynn, GA" />
+ <path
+ d="m 805.36866,436.41614 0.63471,0.184 0.95561,0.669 0.49921,0.119 1.40668,-0.595 1.05903,0.04 0.56338,0.184 0.35301,0.169 0.64184,0.53 0.0802,0.16 0.0267,0.635 -0.51525,6.47 -0.3227,0.07 -1.94333,-0.24 -2.73314,-0.524 -1.3425,-0.812 -1.05189,-0.994 -0.0143,-0.07 -1.05367,-1.831 2.75631,-4.163"
+ class="c13191"
+ id="McIntosh, GA" />
+ <path
+ d="m 732.61331,406.07414 1.99325,4.436 -5.41636,2.836 -1.8631,-6.725 5.28621,-0.547"
+ class="c13149"
+ id="Heard, GA" />
+ <path
+ d="m 724.34614,395.94014 2.21076,-0.207 1.05902,-0.265 3.07189,-0.314 0.47246,2.098 -0.0802,1.293 -1.34963,1.487 -2.90965,1.438 -0.91639,0.08 -1.55823,-5.611"
+ class="c13143"
+ id="Haralson, GA" />
+ <path
+ d="m 730.23674,390.74314 2.36944,0.05 -0.69532,3.133 -1.34607,0.13 0.12302,1.1 -3.07189,0.313 -1.05902,0.266 -2.21076,0.207 -0.39401,-1.405 -0.73098,-2.628 3.08615,-0.314 -0.0339,-0.385 3.96332,-0.465"
+ class="c13233"
+ id="Polk, GA" />
+ <path
+ d="m 728.51627,379.51614 1.70443,4.34 0.12836,1.044 0.007,3.112 -0.3851,0.04 0.26564,2.692 -3.96332,0.465 0.0339,0.385 -3.08615,0.314 -1.28545,-4.644 1.40669,-0.145 0.99484,-2.2 0.98771,-0.565 1.50296,-1.118 0.15332,-0.465 0.81121,-3.174 0.72384,-0.08"
+ class="c13115"
+ id="Floyd, GA" />
+ <path
+ d="m 727.79243,379.59614 -0.81121,3.174 -0.15332,0.465 -1.50296,1.118 -0.98771,0.565 -0.99484,2.2 -1.40669,0.145 -1.57606,-5.351 -0.40827,-1.454 7.84106,-0.862"
+ class="c13055"
+ id="Chattooga, GA" />
+ <path
+ d="m 729.1688,370.11514 3.09328,-0.362 -0.37975,1.478 -1.17847,5.128 -0.0588,0.765 0.6454,0.978 -2.51741,0.564 -0.26565,-2.234 -2.20898,0.24 0.025,-0.192 0.30487,-0.941 0.2086,-1.238 1.17491,-0.353 0.44037,-0.909 0.7078,-2.571 -0.0481,-0.344 0.0571,0"
+ class="c13313"
+ id="Whitfield, GA" />
+ <path
+ d="m 723.81485,370.78914 5.2969,-0.665 0.0481,0.344 -0.7078,2.571 -0.44037,0.909 -1.17491,0.353 -0.2086,1.238 -2.81336,-4.75"
+ class="c13047"
+ id="Catoosa, GA" />
+ <path
+ d="m 723.81485,370.78914 2.81336,4.75 -0.30487,0.941 -0.025,0.192 2.20898,-0.24 0.26565,2.234 -0.25674,0.85 -0.72384,0.08 -7.84106,0.862 -0.22465,-0.79 0.69711,-1.147 0.52238,-2.146 -0.10163,-0.869 0.42433,-2.626 0.71493,-1.841 1.83101,-0.25"
+ class="c13295"
+ id="Walker, GA" />
+ <path
+ d="m 721.98384,371.03914 -0.71493,1.841 -0.42433,2.627 0.10163,0.868 -0.52238,2.146 -0.69711,1.147 -1.51187,-5.344 -0.72384,-2.811 2.47462,-0.257 2.01821,-0.217"
+ class="c13083"
+ id="Dade, GA" />
+ <path
+ d="m 797.8717,430.20514 0.49029,0.595 1.07685,2.186 0.0553,0.248 2.74918,2.123 2.96492,1.067 0.16045,0 -2.75631,4.163 -6.75886,-4.814 2.01821,-5.561"
+ class="c13183"
+ id="Long, GA" />
+ <path
+ d="m 790.5031,433.66714 3.68875,1.464 -0.72384,0.257 -0.73098,1.205 1.0198,6.878 -2.01642,-1.084 -0.16759,-0.33 -0.19434,-0.208 -2.2268,-1.102 -1.29436,-0.337 -0.91462,-0.474 -1.49404,-0.827 -0.39402,-2.919 1.71869,-0.232 -0.31378,-2.3 -0.10876,-0.624 4.15231,0.633"
+ class="c13001"
+ id="Appling, GA" />
+ <path
+ d="m 786.35079,433.03414 0.10876,0.624 0.31378,2.3 -1.71869,0.232 0.39402,2.919 -1.92193,1.157 -4.0489,0.595 -0.45107,-3.303 3.3518,-2.853 1.83992,-1.198 1.166,-0.442 0.96631,-0.03"
+ class="c13161"
+ id="Jeff Davis, GA" />
+ <path
+ d="m 742.65978,432.60114 0.18364,-0.03 0.19255,0.162 0.15332,1.307 0.12837,1.551 -0.007,1.673 0.26565,2.483 -4.8708,0.473 -3.19134,-1.118 -0.0535,-1.719 2.08953,-4.127 5.1097,-0.651"
+ class="c13259"
+ id="Stewart, GA" />
+ <path
+ d="m 742.84342,432.56714 0.54734,-0.06 1.60636,1.152 0.41719,0.504 0.88431,0.28 1.01267,-0.114 0.22464,3.835 -2.87577,1.453 -1.08398,0.13 -0.26565,-2.483 0.007,-1.673 -0.12837,-1.551 -0.15332,-1.307 -0.19255,-0.162"
+ class="c13307"
+ id="Webster, GA" />
+ <path
+ d="m 751.85048,431.54714 3.12715,0.963 1.69373,3.047 1.09468,2.628 -8.04253,0.897 0.11767,0.982 -2.30525,-1.904 -0.22464,-3.835 -0.0642,-0.738 4.60337,-2.04"
+ class="c13261"
+ id="Sumter, GA" />
+ <path
+ d="m 768.46861,432.27014 3.16637,4.348 0.70602,1.123 -5.84068,0.797 -2.5709,0.184 -0.46533,-3.985 -0.25138,-2.056 2.27672,-0.299 1.02693,-0.303 0.34766,-0.234 0.80408,-0.08 0.21394,0.05 0.58657,0.458"
+ class="c13315"
+ id="Wilcox, GA" />
+ <path
+ d="m 776.25618,430.52814 6.12238,4.177 -3.3518,2.853 -2.96491,1.244 -3.72085,-1.061 -0.70602,-1.123 4.6212,-6.09"
+ class="c13271"
+ id="Telfair, GA" />
+ <path
+ d="m 779.65611,426.00314 1.30685,0.08 0.17829,0.03 0.16045,0.456 0.68284,2.298 0.14798,1.224 0.57587,1.814 0.19968,0.352 0.0874,0.146 1.22305,1.109 -1.83992,1.198 -6.12238,-4.177 0.6347,-1.505 2.76523,-3.02"
+ class="c13309"
+ id="Wheeler, GA" />
+ <path
+ d="m 767.77864,428.49314 3.51938,-3.984 3.7048,5.905 1.88806,-1.391 -0.6347,1.505 -4.6212,6.09 -3.16637,-4.348 0.48137,-0.53 0.0571,-0.185 0.12124,-1.077 -1.80962,-1.398 0.45999,-0.587"
+ class="c13091"
+ id="Dodge, GA" />
+ <path
+ d="m 767.77864,428.49314 -0.45999,0.587 1.80962,1.398 -0.12124,1.077 -0.0571,0.185 -0.48137,0.53 -0.58657,-0.459 -0.21394,-0.05 -0.80408,0.08 -0.34766,0.234 -1.02693,0.303 -2.27672,0.299 -0.64897,-3.874 1.91124,-2.884 3.30366,2.57"
+ class="c13235"
+ id="Pulaski, GA" />
+ <path
+ d="m 762.56374,428.80714 0.64897,3.874 0.25138,2.056 -6.79273,0.82 -1.69373,-3.047 3.10041,-3.172 4.4857,-0.531"
+ class="c13093"
+ id="Dooly, GA" />
+ <path
+ d="m 754.19138,424.82114 3.40529,0.458 0.48137,4.059 -3.10041,3.172 -3.12715,-0.963 -1.80605,-3.086 3.43024,-3.913 0.71671,0.273"
+ class="c13193"
+ id="Macon, GA" />
+ <path
+ d="m 747.88181,428.13114 2.16262,0.33 1.80605,3.086 -4.60337,2.04 -0.16938,-1.508 0.24069,-1.086 0.33161,-0.506 -0.37083,-2.66 0.60261,0.304 z m 0,0 0,0"
+ class="c13249"
+ id="Schley, GA" />
+ <path
+ d="m 742.24259,425.63214 3.62279,-1.068 1.41382,3.263 0.37083,2.66 -0.33161,0.506 -0.24069,1.086 0.16938,1.508 0.0642,0.738 -1.01267,0.114 -0.88431,-0.28 -0.41719,-0.504 -1.60636,-1.152 -0.54734,0.06 -0.18364,0.03 -0.41719,-6.969"
+ class="c13197"
+ id="Marion, GA" />
+ <path
+ d="m 742.24259,425.63214 0.41719,6.969 -5.1097,0.651 0.0464,-0.07 0.16046,-0.724 -0.19255,-0.383 -0.47424,-0.396 -1.27654,-0.344 -0.12123,-0.136 -0.041,-0.194 0.21573,-0.82 1.9879,-1.054 2.1127,-0.602 1.22126,-2.402 1.05368,-0.499"
+ class="c13053"
+ id="Chattahoochee, GA" />
+ <path
+ d="m 733.4887,424.96514 3.36784,-0.385 0.0642,0.554 4.08277,-0.499 0.18542,1.496 -1.22126,2.402 -2.1127,0.602 -1.9879,1.054 -0.53486,-3.174 -1.84349,-2.05"
+ class="c13215"
+ id="Muscogee, GA" />
+ <path
+ d="m 748.36496,419.94514 1.76505,1.116 4.27888,3.182 -0.93422,0.305 -3.43024,3.913 -2.16262,-0.33 -0.60261,-0.304 -1.41382,-3.263 2.49958,-4.619"
+ class="c13269"
+ id="Taylor, GA" />
+ <path
+ d="m 743.77586,417.38614 0.17115,-0.07 0.41541,0.1 1.3015,0.836 0.30665,0.392 0.2389,0.468 0.0481,0.169 0.17651,0.137 0.9574,0.36 0.97344,0.163 -2.49958,4.619 -3.62279,1.068 -1.05368,0.499 -0.18542,-1.496 -0.82012,-5.953 3.59249,-1.296"
+ class="c13263"
+ id="Talbot, GA" />
+ <path
+ d="m 737.02591,418.40814 3.15746,0.274 0.82012,5.953 -4.08277,0.499 -0.0642,-0.554 -3.36784,0.385 -1.38886,-3.059 -1.2284,-2.735 6.15447,-0.763"
+ class="c13145"
+ id="Harris, GA" />
+ <path
+ d="m 734.60656,410.51014 1.54396,0.595 0.87539,7.303 -6.15447,0.763 -1.54396,-5.343 -0.13728,-0.482 5.41636,-2.836"
+ class="c13285"
+ id="Troup, GA" />
+ <path
+ d="m 731.16027,397.25214 2.66004,0.417 2.31417,4.541 -0.62579,1.525 -2.89538,2.339 -5.28621,0.547 -0.34588,-1.239 -1.07685,-3.831 0.91639,-0.08 2.90965,-1.438 1.34963,-1.487 0.0802,-1.293"
+ class="c13045"
+ id="Carroll, GA" />
+ <path
+ d="m 732.60618,390.79114 3.48729,-0.339 0.32983,3.029 0.30844,-0.04 0.35122,3.254 -3.26265,0.973 -2.66004,-0.417 -0.47246,-2.098 -0.12302,-1.1 1.34607,-0.13 0.69532,-3.133"
+ class="c13223"
+ id="Paulding, GA" />
+ <path
+ d="m 735.77255,369.32214 0.4172,3.043 0.72384,0.555 0.0481,0.07 -0.007,0.07 -0.40293,0.692 -0.49742,0.545 -0.22464,1.061 0.44928,3.336 -4.98847,-0.596 -0.6454,-0.978 0.0588,-0.765 1.17847,-5.128 0.37975,-1.478 0.64005,-0.08 2.87042,-0.351"
+ class="c13213"
+ id="Murray, GA" />
+ <path
+ d="m 731.29042,378.10214 4.98847,0.596 0.0963,0.786 0.39402,3.127 -6.54848,1.245 -1.70443,-4.34 0.25674,-0.85 2.51741,-0.564"
+ class="c13129"
+ id="Gordon, GA" />
+ <path
+ d="m 736.76918,382.61114 0.8112,7.697 -4.9742,0.483 -2.36944,-0.05 -0.26564,-2.692 0.3851,-0.04 -0.007,-3.111 -0.12836,-1.045 6.54848,-1.245"
+ class="c13015"
+ id="Bartow, GA" />
+ <path
+ d="m 737.58038,390.30814 4.53206,-0.442 0.76485,1.727 -0.67749,2.798 -0.21573,0.898 -0.11232,0.332 -1.18739,1.492 -0.65253,0.685 -2.94887,-1.102 -0.35122,-3.254 -0.30844,0.04 -0.32983,-3.029 1.48691,-0.144"
+ class="c13067"
+ id="Cobb, GA" />
+ <path
+ d="m 733.82031,397.66914 3.26265,-0.973 2.94887,1.102 -1.19096,1.906 -1.79891,1.139 -0.73098,0.843 -0.15333,0.227 -0.0232,0.297 -2.31417,-4.541"
+ class="c13097"
+ id="Douglas, GA" />
+ <path
+ d="m 735.50869,403.73514 4.59446,-0.335 0.27456,2.378 1.22839,1.171 0.86113,1.061 0.44215,0.747 0.0143,0.843 -6.77313,1.505 -1.54396,-0.595 -1.99325,-4.436 2.89538,-2.339"
+ class="c13077"
+ id="Coweta, GA" />
+ <path
+ d="m 743.12511,410.45414 0.0232,4.939 0.62757,1.993 -3.59249,1.296 -3.15746,-0.274 -0.87539,-7.303 6.77313,-1.505 0.20146,0.854"
+ class="c13199"
+ id="Meriwether, GA" />
+ <path
+ d="m 743.12511,410.45414 0.79516,-0.693 1.10003,-0.118 0.43502,0.376 2.3837,-0.272 0.14798,4.581 -4.83871,1.065 -0.0232,-4.939"
+ class="c13231"
+ id="Pike, GA" />
+ <path
+ d="m 747.987,414.32814 2.96491,0.995 0.21573,1.897 -1.03763,3.841 -1.76505,-1.116 -0.97344,-0.163 -0.9574,-0.36 -0.17651,-0.137 -0.0481,-0.17 -0.2389,-0.467 -0.30665,-0.392 -1.3015,-0.836 -0.41541,-0.1 -0.17115,0.07 -0.62757,-1.993 4.83871,-1.065"
+ class="c13293"
+ id="Upson, GA" />
+ <path
+ d="m 751.16764,417.22014 4.43578,-0.531 4.11486,3.102 0,0 -5.30939,4.445 -4.27888,-3.183 1.03763,-3.84"
+ class="c13079"
+ id="Crawford, GA" />
+ <path
+ d="m 754.40889,424.24314 5.30939,-4.445 0.11589,3.698 -0.0285,0.255 -1.21235,1.881 -0.35301,0.225 -0.19255,0.04 -0.45106,-0.62 -3.40529,-0.458 -0.71733,-0.273 0.93484,-0.305"
+ class="c13225"
+ id="Peach, GA" />
+ <path
+ d="m 759.71828,419.79814 0,0 2.06278,0.378 2.54772,4.597 0.1462,1.157 -1.91124,2.884 -4.4857,0.532 -0.48137,-4.06 0.45106,0.62 0.19255,-0.04 0.35301,-0.225 1.21235,-1.881 0.0285,-0.255 -0.11589,-3.698"
+ class="c13153"
+ id="Houston, GA" />
+ <path
+ d="m 771.29802,424.50914 -3.51938,3.984 -3.30366,-2.571 -0.1462,-1.157 4.79057,-3.713 2.17867,3.457"
+ class="c13023"
+ id="Bleckley, GA" />
+ <path
+ d="m 769.11935,421.05214 4.76561,-3.536 1.77753,-0.426 1.55822,0.458 2.48176,1.393 0.16937,2.03 0.55447,0.188 -0.7702,4.844 -2.76523,3.02 -1.88806,1.391 -3.7048,-5.905 -2.17867,-3.457"
+ class="c13175"
+ id="Laurens, GA" />
+ <path
+ d="m 765.56966,413.57114 3.46946,-2.195 0.28883,-0.239 0.28882,0.02 1.29615,1.22 1.03407,1.697 0.8629,0.298 0.32092,0.199 0.51347,0.806 0.27278,0.945 -0.0321,1.198 -4.76561,3.536 -4.41082,-6.716 0.86113,-0.765"
+ class="c13319"
+ id="Wilkinson, GA" />
+ <path
+ d="m 762.84543,415.82814 1.8631,-1.492 4.41082,6.716 -4.79057,3.713 -2.54772,-4.596 0.13906,-1.736 1.23732,-1.6 0.19968,-0.586 -0.51169,-0.419"
+ class="c13289"
+ id="Twiggs, GA" />
+ <path
+ d="m 758.76266,413.85214 0.38688,0.787 0.8023,0.565 1.14638,-0.145 0.66858,0.152 1.07863,0.617 0.51169,0.419 -0.19968,0.586 -1.23732,1.6 -0.13906,1.736 -2.06278,-0.378 -4.11486,-3.102 3.15924,-2.837"
+ class="c13021"
+ id="Bibb, GA" />
+ <path
+ d="m 766.3559,407.38414 0.39402,-0.04 3.06832,0.407 0.0606,0.09 0.0125,0.136 -0.0232,0.185 -0.10519,0.07 -0.0713,0.193 -0.0749,0.852 0.0588,0.191 0.40293,0.604 0.47781,-0.403 0.34766,-0.424 0.009,3.124 -1.29615,-1.22 -0.28882,-0.02 -0.28883,0.239 -3.46946,2.195 -2.15371,-5.754 2.93995,-0.433"
+ class="c13009"
+ id="Baldwin, GA" />
+ <path
+ d="m 763.41595,407.81714 2.15371,5.754 -0.86113,0.765 -1.8631,1.492 -1.07863,-0.617 -0.66858,-0.152 -1.14638,0.145 -0.8023,-0.565 -0.38688,-0.787 -2.5388,-3.84 5.02234,-1.583 2.16975,-0.612"
+ class="c13169"
+ id="Jones, GA" />
+ <path
+ d="m 751.73281,408.93414 4.23431,-0.02 0.25674,1.094 2.5388,3.841 -3.15924,2.836 -4.43578,0.531 -0.21573,-1.897 1.32289,-0.144 0.14619,-0.403 -0.68818,-5.842"
+ class="c13207"
+ id="Monroe, GA" />
+ <path
+ d="m 751.73281,408.93414 0.68818,5.842 -0.14619,0.403 -1.32289,0.144 -2.96491,-0.995 -0.14798,-4.581 2.32486,-0.619 1.56893,-0.194"
+ class="c13171"
+ id="Lamar, GA" />
+ <path
+ d="m 744.72434,406.32214 0.63471,-0.08 4.9332,0.651 -0.12837,2.234 -2.32486,0.618 -2.3837,0.273 -0.43502,-0.376 -1.10003,0.118 -0.79516,0.693 -0.20146,-0.854 -0.0143,-0.843 1.81496,-2.435"
+ class="c13255"
+ id="Spalding, GA" />
+ <path
+ d="m 740.10315,403.40014 2.726,-1.466 1.89519,4.388 -1.81496,2.435 -0.44215,-0.747 -0.86113,-1.061 -1.22839,-1.171 -0.27456,-2.378"
+ class="c13113"
+ id="Fayette, GA" />
+ <path
+ d="m 745.90639,399.32414 0.40114,0.321 0.18542,1.118 0.0214,0.763 -0.24782,2.676 -0.16046,0.208 -0.90748,0.412 0.16046,1.421 -0.63471,0.08 -1.89519,-4.388 1.77396,-2.473 1.30328,-0.137"
+ class="c13063"
+ id="Clayton, GA" />
+ <path
+ d="m 753.24111,402.95714 1.39064,1.751 1.33537,4.209 -4.23431,0.02 -1.56893,0.195 0.12837,-2.234 2.94886,-3.937"
+ class="c13035"
+ id="Butts, GA" />
+ <path
+ d="m 745.90639,399.32414 1.83814,-0.202 2.99878,2.404 2.4978,1.431 -2.94886,3.937 -4.9332,-0.651 -0.16046,-1.421 0.90748,-0.412 0.16046,-0.208 0.24782,-2.676 -0.0214,-0.763 -0.18542,-1.118 -0.40114,-0.321"
+ class="c13151"
+ id="Henry, GA" />
+ <path
+ d="m 745.10944,392.18914 5.35931,4.1 -0.54556,0.681 -1.0929,2.354 -1.08576,-0.202 -1.83814,0.202 -1.30328,0.137 -0.19255,-1.695 -0.15333,-1.391 -0.0214,-0.218 -0.46711,-3.879 1.34071,-0.09"
+ class="c13089"
+ id="DeKalb, GA" />
+ <path
+ d="m 744.79566,386.91014 3.42311,2.724 -3.10933,2.555 -1.34071,0.09 0.46711,3.879 0.0214,0.218 0.15333,1.391 0.19255,1.695 -1.77396,2.473 -2.726,1.465 -4.59446,0.336 0.62579,-1.525 0.0232,-0.297 0.15333,-0.227 0.73098,-0.843 1.79891,-1.139 1.19096,-1.906 0.65253,-0.685 1.18739,-1.492 0.11232,-0.332 0.21573,-0.898 0.67749,-2.798 -0.76485,-1.727 2.68322,-2.956"
+ class="c13121"
+ id="Fulton, GA" />
+ <path
+ d="m 744.27328,382.43314 0.10519,1.054 0.41719,3.423 -2.68322,2.956 -4.53206,0.442 -0.8112,-7.697 7.5041,-0.178"
+ class="c13057"
+ id="Cherokee, GA" />
+ <path
+ d="m 736.37516,379.48414 1.75078,-0.25 3.53543,-0.385 0.44216,-0.387 0.041,0.332 0.71493,1.792 1.18026,-0.136 0.23356,1.983 -7.5041,0.178 -0.39402,-3.127"
+ class="c13227"
+ id="Pickens, GA" />
+ <path
+ d="m 744.72434,376.85614 0.19969,0.33 4.43756,3.728 0.66679,1.897 -5.64991,0.676 -0.10519,-1.054 -0.23356,-1.983 -1.18026,0.136 -0.71493,-1.792 -0.041,-0.332 2.62081,-1.606"
+ class="c13085"
+ id="Dawson, GA" />
+ <path
+ d="m 744.37847,383.48714 5.64991,-0.676 -1.50474,4.056 -0.30487,2.767 -3.42311,-2.724 -0.41719,-3.423"
+ class="c13117"
+ id="Forsyth, GA" />
+ <path
+ d="m 753.24825,387.20714 0.94313,4.481 -3.03088,3.739 -0.69175,0.862 -5.35931,-4.1 3.10933,-2.555 0.30487,-2.767 4.72461,0.34"
+ class="c13135"
+ id="Gwinnett, GA" />
+ <path
+ d="m 752.55114,396.22214 -1.80783,5.304 -2.99878,-2.404 1.08576,0.202 1.0929,-2.354 0.54556,-0.681 0.69175,-0.862 1.39064,0.795"
+ class="c13247"
+ id="Rockdale, GA" />
+ <path
+ d="m 760.6739,402.38514 0.5723,6.044 -5.02234,1.583 -0.25674,-1.095 -1.33537,-4.209 2.95778,-4.058 3.08437,1.735"
+ class="c13159"
+ id="Jasper, GA" />
+ <path
+ d="m 752.55114,396.22214 4.85298,2.806 0.18541,1.622 -2.95778,4.058 -1.39064,-1.751 -2.4978,-1.431 1.80783,-5.304"
+ class="c13217"
+ id="Newton, GA" />
+ <path
+ d="m 754.19138,391.68814 2.93104,0.171 2.92569,1.679 -2.64399,5.49 -4.85298,-2.806 -1.39064,-0.795 3.03088,-3.739"
+ class="c13297"
+ id="Walton, GA" />
+ <path
+ d="m 753.24825,387.20714 0.74167,0.931 0.32092,0.202 1.77573,0.354 0.45642,-0.06 1.55823,0 0.21929,0.13 0.68284,1.446 -1.88093,1.639 -2.93104,-0.171 -0.94313,-4.481"
+ class="c13013"
+ id="Barrow, GA" />
+ <path
+ d="m 760.82544,384.57814 1.27832,3.487 -3.10041,2.156 -0.68284,-1.446 -0.21929,-0.131 -1.55823,0 -0.45642,0.06 -1.77573,-0.355 -0.32092,-0.202 -0.74167,-0.93 3.20738,-4.333 0.58656,0.475 0.38689,0.249 0.22464,0.08 0.81833,-0.16 0.69889,-0.227 1.17491,0.878 0.47959,0.408"
+ class="c13157"
+ id="Jackson, GA" />
+ <path
+ d="m 762.10376,388.06514 2.04317,0.694 -0.15333,0 -0.10519,1.068 0.016,0.07 0.0891,0.199 0.77912,0.786 -0.48138,1.377 -5.28799,-2.042 3.10041,-2.155"
+ class="c13059"
+ id="Clarke, GA" />
+ <path
+ d="m 757.12242,391.85914 1.88093,-1.638 5.28799,2.041 0.16759,1.991 -2.16975,1.767 -2.24107,-2.482 -2.92569,-1.679"
+ class="c13219"
+ id="Oconee, GA" />
+ <path
+ d="m 762.28918,396.02014 3.03979,4.605 -4.65507,1.76 -3.08437,-1.735 -0.18541,-1.622 2.64399,-5.49 2.24107,2.482"
+ class="c13211"
+ id="Morgan, GA" />
+ <path
+ d="m 760.6739,402.38514 4.65507,-1.76 2.58516,2.637 0.27457,0.154 0.14084,0.126 0.0357,0.07 -0.16046,0.756 -0.76485,0.61 -0.52238,0.273 -0.39402,0.435 -0.20859,1.373 0.007,0.233 0.0339,0.09 -2.93995,0.433 -2.16975,0.612 -0.5723,-6.044"
+ class="c13237"
+ id="Putnam, GA" />
+ <path
+ d="m 773.54622,400.43314 0.61152,0.314 1.01267,2.554 0.80408,1.215 0.19077,0.328 -0.56161,0.08 -1.30684,1.148 -0.19434,0.387 -0.15332,0.658 -0.13015,0.379 -0.1979,0.262 -1.88271,1.368 -0.83438,0.121 -0.34766,0.424 -0.47781,0.403 -0.40293,-0.604 -0.0588,-0.191 0.0749,-0.852 0.0713,-0.193 0.10519,-0.07 0.0232,-0.185 -0.0125,-0.136 -0.0606,-0.09 -3.06832,-0.407 -0.39402,0.04 -0.0339,-0.09 -0.007,-0.233 0.20859,-1.373 0.39402,-0.435 0.52238,-0.273 0.76485,-0.61 0.16046,-0.756 -0.0357,-0.07 -0.14084,-0.126 -0.27457,-0.154 2.50672,-2.997 3.12537,0.168"
+ class="c13141"
+ id="Hancock, GA" />
+ <path
+ d="m 770.8006,394.05414 1.38886,2.103 0.27277,0.291 0.041,0 2.33021,-0.25 1.46195,0.193 -0.61865,0.956 -1.77574,1.553 -0.62579,0.978 -0.025,0.1 0.29596,0.458 -3.12537,-0.168 -0.37797,-5.183 0.75772,-1.028"
+ class="c13265"
+ id="Taliaferro, GA" />
+ <path
+ d="m 770.04288,395.08214 0.37797,5.183 -2.50672,2.997 -2.58516,-2.637 -3.03979,-4.605 2.16975,-1.767 5.58395,0.829"
+ class="c13133"
+ id="Greene, GA" />
+ <path
+ d="m 769.30477,387.02214 3.92766,1.15 -1.18739,0.891 -0.3851,0.466 -1.01267,1.841 -0.71671,1.582 -0.007,0.112 0.87717,0.99 -0.75772,1.028 -5.58395,-0.829 -0.16759,-1.991 0.48138,-1.376 -0.77912,-0.787 -0.0891,-0.199 -0.016,-0.07 0.10519,-1.068 0.15333,0 2.19115,-1.4 0.13728,-0.02 0.27456,0.161 1.02872,0.299 0.25673,0.03 1.2694,-0.811"
+ class="c13221"
+ id="Oglethorpe, GA" />
+ <path
+ d="m 773.23243,388.17214 2.46036,-0.669 4.25928,7.449 -3.10932,1.157 -0.54735,0.282 -1.46195,-0.193 -2.33021,0.25 -0.041,0 -0.27277,-0.291 -1.38886,-2.103 -0.87717,-0.99 0.007,-0.112 0.71671,-1.582 1.01267,-1.841 0.3851,-0.466 1.18739,-0.891"
+ class="c13317"
+ id="Wilkes, GA" />
+ <path
+ d="m 776.84275,396.10914 1.15708,2.298 1.73651,3.231 0.84152,0.257 2.25889,0.281 -0.78802,0.981 -1.38173,-0.474 -1.21235,-0.376 -0.56339,0.208 -2.91677,2.001 -0.80408,-1.215 -1.01267,-2.554 -0.61152,-0.314 -0.29596,-0.458 0.025,-0.1 0.62579,-0.978 1.77574,-1.553 0.61865,-0.956 0.54735,-0.282"
+ class="c13301"
+ id="Warren, GA" />
+ <path
+ d="m 780.94156,394.55114 -0.16937,0.234 -0.016,0.305 0.31378,1.806 1.26227,1.763 1.71869,2.072 0.34409,0.224 -0.98771,1.132 -0.57052,0.09 -2.25889,-0.282 -0.84152,-0.257 -1.73651,-3.23 -1.15708,-2.299 3.10932,-1.157 0.98949,-0.401"
+ class="c13189"
+ id="McDuffie, GA" />
+ <path
+ d="m 775.97449,404.51614 2.91677,-2.001 0.56339,-0.208 1.21235,0.376 1.38173,0.474 -0.65788,0.676 -1.90589,2.105 0.0642,0.216 0.15333,0.973 -1.53505,0.05 -2.00216,-2.332 -0.19077,-0.328"
+ class="c13125"
+ id="Glascock, GA" />
+ <path
+ d="m 782.83675,402.17614 0.57052,-0.09 1.77396,0.79 0.10697,0.02 0.16046,0.129 0.52238,0.579 -0.39401,1.881 -0.12837,1.011 -0.0321,1.118 0.14441,0.568 0.21573,0.653 0.41006,1.581 -0.23891,1.398 -0.25673,1.045 -2.00216,2.009 -1.85597,-1.132 -0.42611,-2.517 -0.85934,-1.774 -0.0571,0 -0.69889,-0.36 -0.77911,-0.596 -0.31379,-0.419 -0.53129,-0.906 1.53505,-0.05 -0.15333,-0.973 -0.0642,-0.216 1.90589,-2.105 0.65788,-0.676 0.78802,-0.981"
+ class="c13163"
+ id="Jefferson, GA" />
+ <path
+ d="m 778.16742,407.17614 0.53129,0.905 0.31379,0.419 0.77911,0.596 0.69889,0.36 0.0571,0 0.85934,1.774 0.42611,2.517 -1.60815,0.804 -1.04654,0.489 -2.10201,0.03 -0.56339,-0.275 -2.59585,1.533 -0.27278,-0.945 -0.51347,-0.806 -0.32092,-0.199 -0.8629,-0.298 -1.03407,-1.697 -0.009,-3.124 0.83438,-0.121 1.88271,-1.368 0.1979,-0.262 0.13015,-0.379 0.15332,-0.658 0.19434,-0.387 1.30684,-1.148 0.56161,-0.08 2.00216,2.332"
+ class="c13303"
+ id="Washington, GA" />
+ <path
+ d="m 783.68897,414.87214 -3.26266,6.287 -0.55447,-0.188 -0.16937,-2.03 -2.48176,-1.393 -1.55822,-0.458 -1.77753,0.426 0.0321,-1.198 2.59585,-1.533 0.56339,0.274 2.10201,-0.03 1.04654,-0.489 1.60815,-0.804 1.85597,1.132"
+ class="c13167"
+ id="Johnson, GA" />
+ <path
+ d="m 780.42631,421.15914 2.8936,-0.07 0.50634,0.144 1.69372,0.706 0.18542,0.16 -0.041,1.133 -0.16046,0.902 -4.54097,1.95 -1.30685,-0.08 0.7702,-4.844"
+ class="c13283"
+ id="Treutlen, GA" />
+ <path
+ d="m 785.50393,424.13114 -0.11945,8.934 -1.166,0.442 -1.22305,-1.109 -0.0874,-0.146 -0.19968,-0.352 -0.57587,-1.815 -0.14798,-1.223 -0.68284,-2.298 -0.16045,-0.456 -0.17829,-0.03 4.54097,-1.95"
+ class="c13209"
+ id="Montgomery, GA" />
+ <path
+ d="m 785.50393,424.13114 3.49621,0.312 1.31754,3.945 0.18542,5.279 -4.15231,-0.633 -0.96631,0.03 0.11945,-8.934"
+ class="c13279"
+ id="Toombs, GA" />
+ <path
+ d="m 798.9646,429.27314 0.68284,-1.068 1.6545,0.754 3.41598,1.148 1.41381,0.485 0.16046,0.271 0.62044,1.48 0.0374,0.16 -0.005,0.06 0.20681,0.186 1.45483,1.068 2.20362,1.069 0.11946,0.04 -0.0695,0.171 0.39045,0.353 0.52238,0.151 0.12124,-0.07 0.0303,-0.11 0.0499,-0.03 0.19255,-0.04 0.16937,0.06 0.1355,0.948 0.0802,0.708 -0.32983,1.284 -0.19255,0.369 -0.11232,0.03 -0.32805,-0.234 -0.0267,-0.635 -0.0802,-0.16 -0.64184,-0.53 -0.35301,-0.169 -0.56338,-0.184 -1.05903,-0.04 -1.40668,0.595 -0.49921,-0.119 -0.95561,-0.669 -0.63471,-0.184 -0.16045,0 -2.96492,-1.066 -2.74918,-2.123 -0.0553,-0.248 -1.07685,-2.186 -0.49029,-0.595 1.0929,-0.933"
+ class="c13179"
+ id="Liberty, GA" />
+ <path
+ d="m 793.115,424.76514 1.11608,0.07 3.98649,2.116 1.42987,1.254 -0.68284,1.067 -2.46036,0.314 -1.85597,-0.451 -1.53327,-4.37"
+ class="c13109"
+ id="Evans, GA" />
+ <path
+ d="m 789.00014,424.44314 4.11486,0.322 1.53327,4.37 1.85597,0.451 2.46036,-0.313 -1.0929,0.932 -2.01821,5.561 -1.66164,-0.635 -3.68875,-1.464 -0.18542,-5.279 -1.31754,-3.945"
+ class="c13267"
+ id="Tattnall, GA" />
+ <path
+ d="m 792.14155,418.85014 1.22127,0.419 1.33359,2.089 -0.30309,2.924 -0.16224,0.553 -1.11608,-0.07 -4.11486,-0.322 -0.38689,-0.947 0.86113,-2.74 0.46533,-1.159 1.18204,-1.093 1.0198,0.346"
+ class="c13043"
+ id="Candler, GA" />
+ <path
+ d="m 789.03401,412.92214 3.42846,4.298 -0.32092,1.63 -1.0198,-0.346 -1.18204,1.093 -0.46533,1.159 -0.86113,2.74 0.38689,0.947 -3.49621,-0.312 0.16046,-0.902 0.041,-1.133 -0.18542,-0.16 -1.69372,-0.706 -0.50634,-0.144 -2.8936,0.07 3.26266,-6.287 2.00216,-2.009 3.34288,0.06"
+ class="c13107"
+ id="Emanuel, GA" />
+ <path
+ d="m 810.5586,423.41414 0.0998,0.449 0.18185,0.918 0.2496,0.997 0.0892,0.09 1.08577,0.419 3.57465,0.674 0.66679,0.07 0.18364,0.03 0.0963,0.279 0,0.202 -0.0713,0.353 -0.20147,0.474 -3.22164,5.192 -0.14441,0.201 -0.90214,1.034 -0.13549,0.06 -0.44037,-0.1 -0.64362,-1.952 -0.89143,-2.339 -2.22681,-1.487 -1.59923,-1.425 -0.41185,-0.47 4.66221,-3.682"
+ class="c13051"
+ id="Chatham, GA" />
+ <path
+ d="m 798.21757,426.95114 6.32384,-3.038 1.35498,3.183 0.41185,0.47 1.59923,1.425 2.22681,1.487 0.89143,2.339 0.64362,1.952 -0.73989,0.159 -0.11946,-0.04 -2.20362,-1.069 -1.45483,-1.068 -0.20681,-0.186 0.005,-0.06 -0.0374,-0.16 -0.62044,-1.48 -0.16046,-0.271 -1.41381,-0.485 -3.41598,-1.148 -1.6545,-0.754 -1.42987,-1.254"
+ class="c13029"
+ id="Bryan, GA" />
+ <path
+ d="m 795.37924,415.79614 6.15447,2.79 3.0077,5.327 -6.32384,3.038 -3.98649,-2.116 0.16224,-0.553 0.30309,-2.924 -1.33359,-2.089 -1.22127,-0.419 0.32092,-1.63 2.91677,-1.424"
+ class="c13031"
+ id="Bulloch, GA" />
+ <path
+ d="m 789.03401,412.92214 -0.082,-0.154 0.24782,-1.527 0.69353,-0.878 4.14339,-1.46 0.6454,0.1 0.82547,0.267 0.20147,0.143 0.1765,0.242 -0.50634,6.146 -2.91677,1.424 -3.42846,-4.298"
+ class="c13165"
+ id="Jenkins, GA" />
+ <path
+ d="m 804.17949,415.70014 2.00929,0.804 0.36906,0.137 1.71155,1.414 2.03961,4.138 0.2496,1.221 -4.66221,3.682 -1.35498,-3.183 -3.0077,-5.327 2.64578,-2.886"
+ class="c13103"
+ id="Effingham, GA" />
+ <path
+ d="m 795.88558,409.65014 3.80999,-3.762 3.65489,6.453 0.82903,3.359 -2.64578,2.886 -6.15447,-2.79 0.50634,-6.146"
+ class="c13251"
+ id="Screven, GA" />
+ <path
+ d="m 785.18123,402.87714 1.73651,-0.943 0.12837,0 0.62757,0.364 0.1355,0.271 1.1339,0.435 1.84884,-0.02 1.57427,-1.013 0.75772,0.184 1.78822,1.351 3.20739,1.503 1.57605,0.867 -3.80999,3.761 -0.1765,-0.242 -0.20147,-0.143 -0.82547,-0.267 -0.6454,-0.1 -4.14339,1.461 -0.69353,0.877 -0.24782,1.528 0.082,0.153 -3.34288,-0.06 0.25673,-1.045 0.23891,-1.397 -0.41006,-1.582 -0.21573,-0.652 -0.14441,-0.569 0.0321,-1.118 0.12837,-1.011 0.39401,-1.881 -0.52238,-0.579 -0.16046,-0.129 -0.10697,-0.02"
+ class="c13033"
+ id="Burke, GA" />
+ <path
+ d="m 788.77549,395.87614 0.31201,0.29 0.16224,0.154 0.90035,0.852 1.27475,1.487 0.45107,1.742 1.248,1.767 -0.75772,-0.184 -1.57427,1.013 -1.84884,0.02 -1.1339,-0.435 -0.1355,-0.271 -0.62757,-0.364 -0.12837,0 -1.73651,0.943 -1.77396,-0.79 0.98771,-1.132 4.38051,-5.079"
+ class="c13245"
+ id="Richmond, GA" />
+ <path
+ d="m 784.71768,393.16914 2.20006,1.921 1.85775,0.786 -4.38051,5.079 -0.34409,-0.224 -1.71869,-2.072 -1.26227,-1.763 -0.31378,-1.806 0.016,-0.305 0.16937,-0.234 3.77612,-1.382"
+ class="c13073"
+ id="Columbia, GA" />
+ <path
+ d="m 775.69279,387.50314 1.6242,0.444 2.84368,1.694 0.11945,0.03 0.26743,-0.103 0.0874,0 1.64024,0.827 0.49742,0.355 1.18204,0.971 0.76307,1.439 -3.77612,1.382 -0.98949,0.401 -4.25928,-7.449"
+ class="c13181"
+ id="Lincoln, GA" />
+ <path
+ d="m 772.47828,380.78614 0.7078,1.841 3.34288,4.122 0.78803,1.198 -1.6242,-0.444 -2.46036,0.669 -3.92766,-1.15 -2.47462,-3.938 5.64813,-2.298"
+ class="c13105"
+ id="Elbert, GA" />
+ <path
+ d="m 766.01716,382.10514 0.81299,0.979 2.47462,3.938 -1.2694,0.811 -0.25673,-0.03 -1.02872,-0.3 -0.27456,-0.16 -0.13728,0.02 -2.19115,1.4 -2.04317,-0.694 -1.27832,-3.487 0.80586,-0.722 4.38586,-1.751"
+ class="c13195"
+ id="Madison, GA" />
+ <path
+ d="m 760.10516,378.52814 1.52614,5.328 -0.80586,0.722 -0.47959,-0.409 -1.17491,-0.877 -0.69889,0.227 -0.81833,0.16 -0.22464,-0.08 -0.38689,-0.25 -0.58656,-0.474 -0.30487,-3.127 2.73849,-1.526 1.21591,0.306"
+ class="c13011"
+ id="Banks, GA" />
+ <path
+ d="m 754.96158,378.21514 1.18918,1.533 0.30487,3.127 -3.20738,4.332 -4.72461,-0.34 1.50474,-4.056 -0.66679,-1.897 2.2892,-2.312 3.31079,-0.387"
+ class="c13139"
+ id="Hall, GA" />
+ <path
+ d="m 750.76649,373.65814 0.8843,4.944 -2.2892,2.312 -4.43756,-3.728 0.44393,-1.132 1.43699,-0.289 1.54219,-1.448 2.41935,-0.659"
+ class="c13187"
+ id="Lumpkin, GA" />
+ <path
+ d="m 736.18975,372.36514 3.5693,-0.417 1.06794,0.121 0.82012,0.515 0.43502,0.327 1.32467,1.775 1.11608,1.623 0.20146,0.547 -2.62081,1.606 -0.44216,0.387 -3.53543,0.385 -1.75078,0.25 -0.0963,-0.786 -0.44928,-3.336 0.22464,-1.061 0.49742,-0.545 0.40293,-0.692 0.007,-0.07 -0.0481,-0.07 -0.72384,-0.555"
+ class="c13123"
+ id="Gilmer, GA" />
+ <path
+ d="m 741.34046,368.63714 3.57822,-0.419 -0.74703,0.797 -0.0677,0.128 0.0178,0.12 1.10003,3.102 0.3548,0.232 0.353,-0.111 -0.0874,2.418 -0.47424,1.15 -0.44393,1.132 -0.19969,-0.33 -0.20146,-0.547 -1.11608,-1.623 -1.32467,-1.775 -0.43502,-0.327 -0.82012,-0.515 -1.06794,-0.121 -3.5693,0.417 -0.4172,-3.043 5.56791,-0.685"
+ class="c13111"
+ id="Fannin, GA" />
+ <path
+ d="m 747.22214,367.92914 1.28011,-0.167 -0.11233,0.424 0.59548,0.571 1.13926,0.643 0.54377,-0.04 0.54913,0.314 0.68284,1.599 0.0802,0.578 -1.21413,1.808 -2.41935,0.659 -1.54219,1.448 -1.43699,0.289 0.47424,-1.15 0.0874,-2.418 -0.353,0.111 -0.3548,-0.232 -1.10003,-3.102 -0.0178,-0.12 0.0677,-0.128 0.74703,-0.797 2.30346,-0.289"
+ class="c13291"
+ id="Union, GA" />
+ <path
+ d="m 751.98062,371.85014 1.81497,-0.41 0.98949,0.57 0.12837,0.218 0.12836,0.579 0.72206,4.379 -0.80229,1.029 -3.31079,0.387 -0.8843,-4.944 1.21413,-1.808"
+ class="c13311"
+ id="White, GA" />
+ <path
+ d="m 754.27874,370.85514 5.89595,1.712 0.37084,0.618 -1.65628,5.037 -2.73849,1.526 -1.18918,-1.533 0.80229,-1.029 -0.72206,-4.379 -0.12836,-0.579 -0.12837,-0.218 -0.98949,-0.57 0.48315,-0.585"
+ class="c13137"
+ id="Habersham, GA" />
+ <path
+ d="m 766.46823,376.92014 1.16599,0.163 0.2086,-0.106 0.016,0 0.74881,-0.185 0.67392,-0.09 0.39402,0.112 0.19255,0.146 -0.007,0.06 0.62578,0.966 1.99147,2.803 -5.64813,2.298 -0.81299,-0.979 0.45107,-5.185"
+ class="c13147"
+ id="Hart, GA" />
+ <path
+ d="m 765.31649,376.11814 1.15174,0.802 -0.45107,5.185 -4.38586,1.751 -1.52614,-5.328 0.37619,-0.231 0.14441,-0.05 3.54435,-0.642 1.14638,-1.487"
+ class="c13119"
+ id="Franklin, GA" />
+ <path
+ d="m 760.54553,373.18514 4.77096,2.933 -1.14638,1.487 -3.54435,0.642 -0.14441,0.05 -0.37619,0.231 -1.21591,-0.306 1.65628,-5.037"
+ class="c13257"
+ id="Stephens, GA" />
+ <path
+ d="m 309.6956,550.02314 2.34804,0 1.01088,0.672 0.33162,1.006 0,0.674 -0.67215,1.676 0,2.016 -1.3425,1.341 -1.00375,0.675 -3.35715,-0.338 -1.34428,-1.341 -2.01464,-0.674 -0.67215,-0.67 0,-1.009 1.00911,-1.343 3.35893,-2.685 2.34804,0 m -15.78197,10.747 -0.33518,-0.34 0.33518,-2.013 2.01464,-1.344 0.33697,-1.006 1.00732,0 -0.33518,2.35 -1.67946,0.672 -1.00733,1.681 -0.33696,0"
+ class="c15007"
+ id="Kauai, HI" />
+ <path
+ d="m 349.65684,568.82314 -1.34606,1.013 0,-0.337 -2.01465,0.67 -1.67946,-1.007 -3.35715,0.337 -1.34428,0.337 -0.67036,-1.683 -1.0091,-0.67 -0.3334,-1.006 -1.0091,-1.009 0,-1.007 -1.00733,-0.669 3.35893,-0.676 1.67947,-2.346 1.00732,-0.674 1.00554,0.334 1.67946,3.022 0.33518,0 0.33518,0.674 -0.33518,0.67 0.33518,1.005 1.34428,1.011 0.33518,-1.011 0.67214,0 0,1.011 0.67215,0.337 0.33517,1.343 1.01089,0.331"
+ class="c15003"
+ id="Honolulu, HI" />
+ <path
+ d="m 364.7631,571.51214 0.33874,0 0.67215,0.333 0.33339,0 -0.33339,-0.67 3.0184,-0.67 1.34428,0.337 -0.67214,1.344 -2.01465,1.341 -1.00732,0 -4.02572,-0.669 -4.70143,0.333 -0.33874,0 1.01089,-2.686 0.33518,0 4.70142,0.337 1.00733,0.333 0.33161,0.337 m 8.05857,2.35 1.00732,0.337 1.67947,2.687 3.35714,-1.678 2.01464,0.335 0,0.335 2.68679,1.681 2.34982,0.671 0.33518,0.67 0,1.341 -1.3425,1.344 -1.67946,0.672 -3.35715,1.346 -2.3516,0 -0.67215,-0.338 -0.67035,-4.028 -1.00554,-0.337 -0.67215,0.669 -2.01464,-1.006 -1.3425,-1.344 -0.33696,-1.341 0.67214,-1.344 0.33518,-0.672 1.00732,0 m -8.72715,3.024 2.34804,0 1.34429,1.007 0.67036,1.007 -0.33697,1.341 -3.0184,1.011 -0.33874,-1.344 -0.33161,-1.008 -1.34251,-1.341 0,-0.34 1.00554,-0.333 m 10.07144,6.717 0.33517,0.334 0.33518,1.342 -2.68678,0.672 -1.00554,-0.338 0.67036,-1.002 2.35161,-1.008"
+ class="c15009"
+ id="Maui, HI" />
+ <path
+ d="m 397.00095,619.86514 -0.67036,0.672 -1.34428,-1.007 -3.35714,-1.342 -0.67571,-1.01 -0.33518,-0.67 0.33518,-5.374 -2.34982,-5.71 -1.34429,-1.341 -1.00732,-1.342 0.33696,-1.011 2.01465,-2.013 2.34982,-3.02 0,-1.343 -1.67768,-2.351 -0.33696,-1.343 0.33696,-1.346 0.67036,-0.335 2.01642,0.335 0.67036,1.007 3.02375,1.347 3.69589,0.67 4.02928,1.681 2.68679,1.678 1.3425,1.677 0.33518,2.689 1.67768,-0.337 0.67214,1.004 0,1.346 1.67947,1.342 2.34982,1.006 -0.67214,1.344 -3.69233,3.357 -3.02196,1.683 -2.68679,0.336 -3.02196,2.348 -1.67768,1.005 -2.35161,4.368"
+ class="c15001"
+ id="Hawaii, HI" />
+ <path
+ d="m 364.43149,571.17514 -1.00733,-0.333 2.34983,0.333 0.33339,0.67 -0.33339,0 -0.67215,-0.333 -0.33874,0 -0.33161,-0.337"
+ class="c15005"
+ id="Kalawao, HI" />
+ <path
+ d="m 610.2906,222.59014 1.91124,-0.104 5.72301,-0.162 2.32843,0.685 -0.26565,2.505 -0.89143,1.198 -1.0198,1.189 -3.24661,1.608 -1.38351,0.353 -0.58656,0.02 -0.24782,-0.03 -2.13053,-3.229 -0.19077,-4.027"
+ class="c19163"
+ id="Scott, IA" />
+ <path
+ d="m 609.96969,216.53214 12.62985,-0.717 0.18542,2.405 -1.32646,3.437 -1.20522,1.352 -2.32843,-0.685 -5.72301,0.162 -1.91124,0.104 -0.21751,-4.033 -0.1034,-2.025"
+ class="c19045"
+ id="Clinton, IA" />
+ <path
+ d="m 513.29356,184.92814 2.42471,0.02 6.6608,0.02 3.19134,0 -0.009,5.592 -11.98088,-0.09 -0.28705,-5.552"
+ class="c19119"
+ id="Lyon, IA" />
+ <path
+ d="m 513.58061,190.48014 11.98088,0.09 0.0571,8.045 -11.14472,-0.02 1.16422,-4.019 0.26565,-0.708 0.0481,-0.158 -0.64361,-2.314 -0.15868,-0.08 -1.19809,0 -0.37083,-0.836"
+ class="c19167"
+ id="Sioux, IA" />
+ <path
+ d="m 525.61854,198.61414 0,8.049 -10.45474,-0.02 -0.60975,-1.606 -0.43502,-0.699 -0.55447,-0.515 -0.44037,-0.337 0.67393,-3.084 0.6757,-1.801 11.14472,0.02"
+ class="c19149"
+ id="Plymouth, IA" />
+ <path
+ d="m 533.53449,198.57114 0.0553,8.044 -5.96905,0.03 -2.00217,0.01 0,-8.049 7.91595,-0.04"
+ class="c19035"
+ id="Cherokee, IA" />
+ <path
+ d="m 525.56149,190.56914 7.92308,0.02 0.0499,7.978 -7.91595,0.04 -0.0571,-8.045"
+ class="c19141"
+ id="O'Brien, IA" />
+ <path
+ d="m 532.34531,184.93614 1.10895,0 0.0303,5.657 -7.92308,-0.02 0.009,-5.592 6.7749,-0.04"
+ class="c19143"
+ id="Osceola, IA" />
+ <path
+ d="m 533.45426,184.93614 7.86602,-0.07 0.0874,5.655 -7.92307,0.07 -0.0303,-5.657"
+ class="c19059"
+ id="Dickinson, IA" />
+ <path
+ d="m 533.48457,190.59314 7.92307,-0.07 0.0891,7.981 -7.96229,0.07 -0.0499,-7.978"
+ class="c19041"
+ id="Clay, IA" />
+ <path
+ d="m 541.49678,198.50014 0.0802,8.074 -7.98725,0.04 -0.0553,-8.044 7.96229,-0.07"
+ class="c19021"
+ id="Buena Vista, IA" />
+ <path
+ d="m 541.49678,198.50014 7.90703,-0.07 0.0963,6.082 0.041,1.984 -7.96408,0.08 -0.0802,-8.074"
+ class="c19151"
+ id="Pocahontas, IA" />
+ <path
+ d="m 549.26653,190.41614 0.13728,8.012 -7.90703,0.07 -0.0891,-7.981 7.85889,-0.103"
+ class="c19147"
+ id="Palo Alto, IA" />
+ <path
+ d="m 549.17917,184.75014 0.0874,5.666 -7.85889,0.103 -0.0874,-5.655 1.01267,-0.02 6.84622,-0.1"
+ class="c19063"
+ id="Emmet, IA" />
+ <path
+ d="m 557.03806,184.62214 0.12837,5.641 0.15154,8.028 -7.91416,0.137 -0.13728,-8.012 -0.0874,-5.666 3.25552,-0.05 4.60337,-0.07"
+ class="c19109"
+ id="Kossuth, IA" />
+ <path
+ d="m 549.40381,198.42814 7.91416,-0.137 0.13015,6.074 -7.94803,0.145 -0.0963,-6.082"
+ class="c19091"
+ id="Humboldt, IA" />
+ <path
+ d="m 525.61854,206.66314 2.00217,-0.01 0.007,1.672 0.65966,0.327 0.55269,0 0,6.09 -11.62788,-0.09 0.21038,-1.422 -0.51525,-0.965 -0.19968,-2.646 0.11945,-0.319 -0.007,-0.355 -0.0713,-0.265 -0.17829,-0.248 -0.22464,-0.09 -0.57765,-0.04 -0.60439,-1.666 10.45474,0.02"
+ class="c19193"
+ id="Woodbury, IA" />
+ <path
+ d="m 533.58976,206.61514 0.016,2.01 1.10003,0 0.025,6.11 -5.8906,0.01 0,-6.09 -0.55269,0 -0.65966,-0.327 -0.007,-1.672 5.96905,-0.03"
+ class="c19093"
+ id="Ida, IA" />
+ <path
+ d="m 533.58976,206.61514 7.98725,-0.04 0.0161,1.988 0.98058,0 0.0481,6.114 -3.9455,0.02 -3.94549,0.03 -0.025,-6.11 -1.10003,0 -0.016,-2.01"
+ class="c19161"
+ id="Sac, IA" />
+ <path
+ d="m 541.57701,206.57414 7.96408,-0.08 0.025,1.977 0.7702,0 0.10519,6.108 -3.92231,0.06 -3.89735,0.05 -0.0481,-6.114 -0.98058,0 -0.0161,-1.988"
+ class="c19025"
+ id="Calhoun, IA" />
+ <path
+ d="m 557.44812,204.36514 0.0802,3.987 0.67571,0 0.1355,6.049 -3.95263,0.09 -3.94549,0.09 -0.10519,-6.108 -0.7702,0 -0.025,-1.977 -0.041,-1.984 7.94803,-0.145"
+ class="c19187"
+ id="Webster, IA" />
+ <path
+ d="m 550.44144,214.57214 3.94549,-0.09 0.16759,8.017 -1.98611,0.04 -5.93696,0.107 -0.11232,-8.02 3.92231,-0.06"
+ class="c19073"
+ id="Greene, IA" />
+ <path
+ d="m 542.62178,214.67614 3.89735,-0.05 0.11232,8.02 -1.9772,0.03 -5.92983,0.05 -0.0481,-8.026 3.9455,-0.02"
+ class="c19027"
+ id="Carroll, IA" />
+ <path
+ d="m 538.67628,214.70114 0.0481,8.026 -7.91416,0.05 -1.97007,0.02 0,-8.053 5.8906,-0.01 3.94549,-0.03"
+ class="c19047"
+ id="Crawford, IA" />
+ <path
+ d="m 528.84019,214.73814 0,8.053 -7.9623,-0.06 -2.25889,-4.195 -1.40669,-3.889 11.62788,0.09"
+ class="c19133"
+ id="Monona, IA" />
+ <path
+ d="m 530.81026,222.77514 0.007,6.051 1.02872,0 0.009,2.227 -8.27608,0 -2.39618,-4.065 -0.30487,-4.243 7.9623,0.06 1.97007,-0.02"
+ class="c19085"
+ id="Harrison, IA" />
+ <path
+ d="m 530.81026,222.77514 7.91416,-0.05 0.0553,6.042 0.89322,0 0.025,2.248 -1.96116,0.01 -5.88169,0.02 -0.009,-2.227 -1.02872,0 -0.007,-6.051"
+ class="c19165"
+ id="Shelby, IA" />
+ <path
+ d="m 538.72442,222.72714 5.92983,-0.05 0.0802,5.004 0.75772,1.004 0.0303,2.27 -5.82463,0.05 -0.025,-2.248 -0.89322,0 -0.0553,-6.042"
+ class="c19009"
+ id="Audubon, IA" />
+ <path
+ d="m 546.63145,222.64714 5.93696,-0.107 0.1141,6.053 0.66679,0 0.0392,2.251 -7.86603,0.113 -0.0303,-2.27 -0.75772,-1.004 -0.0802,-5.004 1.9772,-0.03"
+ class="c19077"
+ id="Guthrie, IA" />
+ <path
+ d="m 553.38853,230.84414 0.14619,8.018 -3.94549,0.06 -3.95262,0.05 -0.11411,-8.01 7.86603,-0.113"
+ class="c19001"
+ id="Adair, IA" />
+ <path
+ d="m 545.5225,230.95714 0.11411,8.01 -3.91518,0.04 -3.92945,0.02 -0.0553,-8.009 1.96116,-0.01 5.82463,-0.05"
+ class="c19029"
+ id="Cass, IA" />
+ <path
+ d="m 531.85502,231.04414 5.88169,-0.02 0.0553,8.009 -3.9134,0.03 -8.09066,0.02 -1.20522,-0.724 -0.25674,-4.677 -0.74702,-2.635 8.27608,0"
+ class="c19155"
+ id="Pottawattamie, IA" />
+ <path
+ d="m 526.31921,245.05714 7.5665,-0.03 0.025,3.119 0.20147,2.588 0.016,1.726 -6.79808,-0.07 -1.5511,-4.598 0.54021,-2.732"
+ class="c19071"
+ id="Fremont, IA" />
+ <path
+ d="m 533.87858,239.06214 0.007,5.963 -7.5665,0.03 -0.76485,-3.358 0.23356,-2.619 8.09066,-0.02"
+ class="c19129"
+ id="Mills, IA" />
+ <path
+ d="m 537.79198,239.03014 3.92945,-0.02 0.0481,5.967 -7.88385,0.05 -0.007,-5.963 3.9134,-0.03"
+ class="c19137"
+ id="Montgomery, IA" />
+ <path
+ d="m 541.76956,244.97514 0.0499,4.012 0.26387,0 0.016,3.528 -4.99738,-0.03 -2.97383,-0.02 -0.016,-1.726 -0.20147,-2.588 -0.025,-3.119 7.88385,-0.05"
+ class="c19145"
+ id="Page, IA" />
+ <path
+ d="m 549.68551,244.89714 0.11232,7.609 -2.78663,0.03 -4.91181,-0.02 -0.016,-3.528 -0.26387,0 -0.0499,-4.012 7.91595,-0.08"
+ class="c19173"
+ id="Taylor, IA" />
+ <path
+ d="m 549.58923,238.91914 0.0963,5.978 -7.91595,0.08 -0.0481,-5.967 3.91518,-0.04 3.95262,-0.05"
+ class="c19003"
+ id="Adams, IA" />
+ <path
+ d="m 553.53472,238.86214 3.9134,-0.06 0.11945,6.012 -7.88206,0.09 -0.0963,-5.978 3.94549,-0.06"
+ class="c19175"
+ id="Union, IA" />
+ <path
+ d="m 549.68551,244.89714 7.88206,-0.09 0.13728,7.481 -3.76007,0.117 -4.14695,0.1 -0.11232,-7.609"
+ class="c19159"
+ id="Ringgold, IA" />
+ <path
+ d="m 557.56757,244.81014 7.90703,-0.211 0.18542,7.36 -3.76899,0.155 -4.18618,0.177 -0.13728,-7.481"
+ class="c19053"
+ id="Decatur, IA" />
+ <path
+ d="m 565.30701,238.50714 0.16759,6.092 -7.90703,0.211 -0.11945,-6.012 3.87239,-0.209 3.9865,-0.08"
+ class="c19039"
+ id="Clarke, IA" />
+ <path
+ d="m 561.11192,230.48814 0.20859,8.101 -3.87239,0.209 -3.9134,0.06 -0.14619,-8.018 7.72339,-0.356"
+ class="c19121"
+ id="Madison, IA" />
+ <path
+ d="m 560.48613,222.36514 0.14441,5.078 0.42433,1.005 0.0571,2.04 -7.72339,0.356 -0.0392,-2.251 -0.66679,0 -0.1141,-6.053 1.98611,-0.04 5.93161,-0.137"
+ class="c19049"
+ id="Dallas, IA" />
+ <path
+ d="m 562.29396,214.32114 0.20147,7.996 -2.0093,0.05 -5.93161,0.137 -0.16759,-8.017 3.95263,-0.09 3.9544,-0.07"
+ class="c19015"
+ id="Boone, IA" />
+ <path
+ d="m 565.45856,206.19114 0.82725,8.032 -3.99185,0.1 -3.9544,0.07 -0.1355,-6.049 -0.67571,0 -0.0392,-1.985 7.96943,-0.176"
+ class="c19079"
+ id="Hamilton, IA" />
+ <path
+ d="m 557.31797,198.29114 7.9409,-0.209 0.19969,8.109 -7.96943,0.176 -0.041,-2.002 -0.13015,-6.074"
+ class="c19197"
+ id="Wright, IA" />
+ <path
+ d="m 565.06632,190.07014 0.19255,8.012 -7.9409,0.209 -0.15154,-8.028 7.89989,-0.193"
+ class="c19081"
+ id="Hancock, IA" />
+ <path
+ d="m 564.92191,184.43614 0.14441,5.634 -7.89989,0.193 -0.12837,-5.641 5.35931,-0.121 2.52454,-0.06"
+ class="c19189"
+ id="Winnebago, IA" />
+ <path
+ d="m 572.78793,184.20314 0.18364,5.635 -7.90525,0.232 -0.14441,-5.634 7.45596,-0.215 0.41006,-0.02"
+ class="c19195"
+ id="Worth, IA" />
+ <path
+ d="m 565.06632,190.07014 7.90525,-0.232 0.0321,0.988 0.20147,7.039 -7.94626,0.217 -0.19255,-8.012"
+ class="c19033"
+ id="Cerro Gordo, IA" />
+ <path
+ d="m 565.25887,198.08214 7.94626,-0.217 0.22464,8.116 -7.97121,0.21 -0.19969,-8.109"
+ class="c19069"
+ id="Franklin, IA" />
+ <path
+ d="m 573.42977,205.98114 0.68462,8.01 -3.90627,0.13 -3.92231,0.102 -0.82725,-8.032 7.97121,-0.21"
+ class="c19083"
+ id="Hardin, IA" />
+ <path
+ d="m 570.20812,214.12114 0.23177,8.003 -1.97542,0.05 -5.96904,0.146 -0.20147,-7.996 3.99185,-0.1 3.92231,-0.102"
+ class="c19169"
+ id="Story, IA" />
+ <path
+ d="m 568.46447,222.17114 0.55448,8.215 0.0143,0.369 -7.92129,-0.267 -0.0571,-2.04 -0.42433,-1.005 -0.14441,-5.078 2.0093,-0.05 5.96904,-0.146"
+ class="c19153"
+ id="Polk, IA" />
+ <path
+ d="m 569.03321,230.75514 0.22464,7.656 -3.95084,0.1 -3.9865,0.08 -0.20859,-8.101 7.92129,0.267"
+ class="c19181"
+ id="Warren, IA" />
+ <path
+ d="m 569.25785,238.41114 3.94014,-0.112 0.20682,6.069 -7.93021,0.231 -0.16759,-6.092 3.95084,-0.1"
+ class="c19117"
+ id="Lucas, IA" />
+ <path
+ d="m 573.40481,244.36814 0.23355,7.281 -4.80483,0.223 -3.17351,0.09 -0.18542,-7.36 7.93021,-0.231"
+ class="c19185"
+ id="Wayne, IA" />
+ <path
+ d="m 581.32253,244.09314 0.27991,7.135 -1.32645,0.07 -6.63763,0.348 -0.23355,-7.281 7.91772,-0.275"
+ class="c19007"
+ id="Appanoose, IA" />
+ <path
+ d="m 581.08719,238.02814 0.23534,6.065 -7.91772,0.275 -0.20682,-6.069 3.9455,-0.129 3.9437,-0.142"
+ class="c19135"
+ id="Monroe, IA" />
+ <path
+ d="m 576.85288,230.12814 0.29061,8.042 -3.9455,0.129 -3.94014,0.112 -0.22464,-7.656 -0.0143,-0.369 7.83393,-0.258"
+ class="c19125"
+ id="Marion, IA" />
+ <path
+ d="m 570.43989,222.12414 7.93021,-0.24 0.44393,8.171 -1.96115,0.07 -7.83393,0.258 -0.55448,-8.215 1.97542,-0.05"
+ class="c19099"
+ id="Jasper, IA" />
+ <path
+ d="m 574.11439,213.99114 3.95975,-0.144 0.29596,8.037 -7.93021,0.24 -0.23177,-8.003 3.90627,-0.13"
+ class="c19127"
+ id="Marshall, IA" />
+ <path
+ d="m 581.41702,205.73314 0.54735,5.958 -3.95562,0.156 0.0654,2 -3.95975,0.144 -0.68462,-8.01 7.98725,-0.248"
+ class="c19075"
+ id="Grundy, IA" />
+ <path
+ d="m 573.20513,197.86514 7.89989,-0.248 0.21751,6.115 0.0945,2.001 -7.98725,0.248 -0.22464,-8.116"
+ class="c19023"
+ id="Butler, IA" />
+ <path
+ d="m 573.00366,190.82614 7.84285,-0.266 0.25851,7.057 -7.89989,0.248 -0.20147,-7.039"
+ class="c19067"
+ id="Floyd, IA" />
+ <path
+ d="m 580.63078,183.92314 0.21573,6.637 -7.84285,0.266 -0.21573,-6.623 7.84285,-0.28"
+ class="c19131"
+ id="Mitchcell, IA" />
+ <path
+ d="m 582.36729,183.85914 6.12951,-0.25 0.26565,6.638 -7.91594,0.313 -0.21573,-6.637 1.73651,-0.06"
+ class="c19089"
+ id="Howard, IA" />
+ <path
+ d="m 588.76245,190.24714 0.11054,3.007 0.16224,4.056 -7.93021,0.307 -0.25851,-7.057 7.91594,-0.313"
+ class="c19037"
+ id="Chickasaw, IA" />
+ <path
+ d="m 581.10502,197.61714 7.93021,-0.307 0.25138,6.116 -7.96408,0.306 -0.21751,-6.115"
+ class="c19017"
+ id="Bremer, IA" />
+ <path
+ d="m 589.28661,203.42614 0.17294,4.027 0.31557,0.514 0.12837,3.416 -3.96154,0.153 -3.97758,0.155 -0.54735,-5.958 -0.0945,-2.001 7.96408,-0.306"
+ class="c19013"
+ id="Black Hawk, IA" />
+ <path
+ d="m 585.94195,211.53614 0.40114,10.048 -7.97299,0.3 -0.36802,-10.038 7.93987,-0.31"
+ class="c19171"
+ id="Tama, IA" />
+ <path
+ d="m 578.3701,221.88414 7.97299,-0.3 0.33162,8.166 -1.96294,0.08 -5.89774,0.225 -0.44393,-8.171"
+ class="c19157"
+ id="Poweshiek, IA" />
+ <path
+ d="m 578.81403,230.05514 5.89774,-0.225 0.33874,8.037 -3.96332,0.161 -3.9437,0.142 -0.29061,-8.042 1.96115,-0.07"
+ class="c19123"
+ id="Mahaska, IA" />
+ <path
+ d="m 585.05051,237.86714 3.96154,-0.171 0.25673,6.083 -7.94625,0.314 -0.23534,-6.065 3.96332,-0.161"
+ class="c19179"
+ id="Wapello, IA" />
+ <path
+ d="m 589.26878,243.77914 0.26387,6.919 -2.956,0.193 -4.97421,0.337 -0.27991,-7.135 7.94625,-0.314"
+ class="c19051"
+ id="Davis, IA" />
+ <path
+ d="m 589.26878,243.77914 7.95517,-0.369 0.082,2.025 0.26208,4.964 -3.93657,0.01 -4.09882,0.288 -0.26387,-6.919"
+ class="c19177"
+ id="Van Buren, IA" />
+ <path
+ d="m 596.99039,237.35214 0.23356,6.058 -7.95517,0.369 -0.25673,-6.083 4.02394,-0.193 3.9544,-0.151"
+ class="c19101"
+ id="Jefferson, IA" />
+ <path
+ d="m 593.85611,211.17214 0.43502,10.107 -7.94804,0.305 -0.40114,-10.048 3.96154,-0.153 3.95262,-0.211"
+ class="c19011"
+ id="Benton, IA" />
+ <path
+ d="m 586.34309,221.58414 7.94804,-0.305 0.39223,8.091 -1.99147,0.107 -6.01718,0.273 -0.33162,-8.166"
+ class="c19095"
+ id="Iowa, IA" />
+ <path
+ d="m 586.67471,229.75014 6.01718,-0.273 0.3441,8.026 -4.02394,0.193 -3.96154,0.171 -0.33874,-8.037 1.96294,-0.08"
+ class="c19107"
+ id="Keokuk, IA" />
+ <path
+ d="m 594.68336,229.37014 5.28799,-0.23 0.2817,0.401 0.44215,1.583 0.2496,6.05 -3.95441,0.178 -3.9544,0.151 -0.3441,-8.026 1.99147,-0.107"
+ class="c19183"
+ id="Washington, IA" />
+ <path
+ d="m 600.9448,237.17414 2.08061,1.945 -0.36906,6.083 -5.35039,0.233 -0.082,-2.025 -0.23356,-6.058 3.95441,-0.178"
+ class="c19087"
+ id="Henry, IA" />
+ <path
+ d="m 597.30596,245.43514 5.35039,-0.233 5.27195,2.435 -1.207,1.416 -0.56161,0.01 -0.45819,0.03 -0.13729,0 -0.007,0 -0.90926,0.319 -0.025,0.02 -0.10341,0.06 -0.43502,0.248 -0.15332,0.1 -0.0535,0.06 -0.0642,0.06 -0.0642,0.07 -0.73097,1.123 -0.0267,0.171 0.0571,0.192 0.35479,0.168 0.28882,0.419 0.0963,0.28 0.0143,0.232 -0.0464,2.068 -0.007,0.01 -0.041,0.202 -0.18364,0.153 -0.025,0.01 -0.53129,0.187 -1.13926,-0.08 -0.72563,-0.586 -1.75077,-2.154 -0.0642,-0.16 0.0571,-0.467 -0.041,-0.152 -1.37459,-1.038 -0.36193,-0.226 -0.26208,-4.964"
+ class="c19111"
+ id="Lee, IA" />
+ <path
+ d="m 610.28169,238.78214 0.016,0.06 0.0642,0.2 0.0874,0.62 -0.0695,1.872 -0.1462,0.683 -0.0963,0.144 -0.49742,0.282 -0.18542,0.182 -1.3425,1.915 -0.0642,0.297 -0.11945,2.603 -5.27195,-2.435 0.36906,-6.083 7.25628,-0.337"
+ class="c19057"
+ id="Des Moines, IA" />
+ <path
+ d="m 600.6952,231.12414 1.9772,-0.08 0.0874,2.017 4.96529,-0.193 0,0 -0.49029,1.963 0.0178,0.191 0.007,0.02 1.16422,1.399 0.54912,0.273 0.22999,-0.03 0.13907,0.06 0.14619,0.152 0.80942,1.326 -0.016,0.555 -7.25628,0.337 -2.08061,-1.945 -0.2496,-6.05"
+ class="c19115"
+ id="Louisa, IA" />
+ <path
+ d="m 610.48137,226.61714 2.13053,3.229 -1.05189,0 -2.41044,0.658 -0.6454,0.233 -0.18364,0.12 -0.016,0 0,0 -0.12124,0.171 -0.016,0.05 -0.23891,0.982 -0.20325,0.788 -4.96529,0.192 -0.0874,-2.016 -0.16046,-4.051 7.96943,-0.376"
+ class="c19139"
+ id="Muscatine, IA" />
+ <path
+ d="m 602.22133,220.95114 0.29061,6.042 0.16046,4.051 -1.9772,0.08 -0.44215,-1.583 -0.2817,-0.401 -5.28799,0.23 -0.39223,-8.091 7.9302,-0.328"
+ class="c19103"
+ id="Johnson, IA" />
+ <path
+ d="m 601.77918,210.86714 0.34766,8.068 0.0945,2.016 -7.9302,0.328 -0.43502,-10.107 3.97045,-0.114 3.95262,-0.191"
+ class="c19113"
+ id="Linn, IA" />
+ <path
+ d="m 610.07309,218.55714 0.21751,4.033 0.19077,4.027 -7.96943,0.376 -0.3851,-8.058 7.94625,-0.378"
+ class="c19031"
+ id="Cedar, IA" />
+ <path
+ d="m 605.72467,210.68214 3.92053,-0.194 0.32449,6.044 0.1034,2.025 -7.94625,0.378 -0.34766,-8.068 3.94549,-0.185"
+ class="c19105"
+ id="Jones, IA" />
+ <path
+ d="m 597.27922,203.03914 0.0481,1.752 0.11232,2.282 0.2906,2.209 0.0963,1.776 -3.97045,0.114 -3.95262,0.211 -0.12837,-3.416 -0.31557,-0.514 -0.17294,-4.027 7.99261,-0.387"
+ class="c19019"
+ id="Buchanan, IA" />
+ <path
+ d="m 588.87299,193.25414 7.97477,-0.324 0.43146,10.109 -7.99261,0.387 -0.25138,-6.116 -0.16224,-4.056"
+ class="c19065"
+ id="Fayette, IA" />
+ <path
+ d="m 596.30042,183.27214 0.16759,3.657 0.12124,0 0.25851,6.01 -7.97477,0.324 -0.11054,-3.007 -0.26565,-6.638 5.81929,-0.248 1.98433,-0.09"
+ class="c19191"
+ id="Winneshiek, IA" />
+ <path
+ d="m 602.83999,182.95814 0.28882,1.776 -0.016,1.182 1.78465,1.255 0.38688,0.491 0.50456,0.811 -0.0642,0.287 -1.28366,2.162 -0.43681,1.696 -7.15644,0.312 -0.25851,-6.01 -0.12124,0 -0.16759,-3.657 6.53957,-0.314"
+ class="c19005"
+ id="Allamakee, IA" />
+ <path
+ d="m 604.0042,192.61814 0.35658,2.186 0.37618,1.758 1.53505,3.408 0.2086,0.434 1.35676,0.9 0.46712,0.216 0.8843,0.21 -3.92945,0.877 -7.98012,0.432 -0.43146,-10.109 7.15644,-0.312"
+ class="c19043"
+ id="Clayton, IA" />
+ <path
+ d="m 597.27922,203.03914 7.98012,-0.432 0.46533,8.075 -3.94549,0.185 -3.95262,0.191 -0.0963,-1.776 -0.2906,-2.209 -0.11232,-2.282 -0.0481,-1.752"
+ class="c19055"
+ id="Delaware, IA" />
+ <path
+ d="m 605.25934,202.60714 3.92945,-0.877 2.17688,0.417 0.8433,0.202 0.19255,0.09 0.12124,0.122 1.06972,1.945 0.18363,0.579 0.0107,0.13 -0.0642,0.111 -0.23534,0.403 -0.007,0.05 0.016,0.129 0.0392,0.115 0.13728,0.143 0.39223,0.282 1.13569,0.586 1.44412,1.006 0.007,0 0.0428,0.04 -3.21451,0.168 0.10519,2.023 -3.94015,0.202 -3.92053,0.194 -0.46533,-8.075"
+ class="c19061"
+ id="Dubuque, IA" />
+ <path
+ d="m 616.69467,208.09514 1.01089,1.171 0.0481,0.07 0.009,0.09 -0.0963,0.65 -0.0963,0.216 0,0.146 0.23534,0.53 0.0125,0.03 0.48316,0.602 0.016,0.01 0.29061,0.233 0.312,0.202 0.7078,0.226 2.97205,3.541 -12.62985,0.717 -0.32449,-6.044 3.94015,-0.202 -0.10519,-2.023 3.21451,-0.168"
+ class="c19097"
+ id="Jackson, IA" />
+ <path
+ d="m 273.01975,135.82314 0.77198,0.763 1.31933,2.587 0.71493,2.064 0.18542,0.548 1.30862,1.214 -1.7686,11.168 -5.95479,0.451 -0.0642,0.07 -0.0624,0.02 -2.62795,0.385 -2.23394,-0.371 -2.14479,-1.389 -2.27494,-0.387 0.16045,-0.987 -2.91677,-0.515 0.33696,-1.96 1.98612,0.346 2.29812,-1.631 1.06794,-0.844 0.33874,-1.47 0.24782,-1.455 1.20522,-1.15 1.48691,-0.369 1.42987,0.233 0.57943,-3.439 2.77949,-3.191 1.83101,-0.69"
+ class="c16043"
+ id="Fremont, ID" />
+ <path
+ d="m 268.40925,139.70414 -0.57943,3.439 -1.42987,-0.233 -1.48691,0.369 -1.20522,1.15 -0.24782,1.455 -0.33874,1.47 -1.06794,0.844 -2.29812,1.631 -1.98612,-0.346 -8.75746,-1.542 -0.35479,1.959 -4.86188,-0.884 1.05367,-5.937 0.96454,0.266 1.95937,0.344 0.59548,-3.318 -0.0963,-0.467 0.19255,-0.86 0.23356,-0.361 0.6347,-0.674 1.08399,-0.257 5.74619,1.43 2.44253,-0.917 4.475,0.459 3.23948,0.923 2.08952,0.06"
+ class="c16033"
+ id="Clark, ID" />
+ <path
+ d="m 195.36507,59.678143 2.13053,0.473 4.2254,0.666 0.21751,-0.472 0.61152,-0.201 3.94371,0.884 -1.90232,8.741 -1.98612,-0.424 -4.75669,-1.407 -3.68876,-2.933 0.66857,-2.941 0.53665,-2.386"
+ class="c16009"
+ id="Benewah, ID" />
+ <path
+ d="m 198.39416,46.057143 4.16301,0.82 2.12161,0.248 1.96116,0.435 -0.51525,2.25 2.78128,0.603 -2.41223,10.615 -3.94371,-0.884 -0.61152,0.201 -0.21751,0.472 -4.2254,-0.666 -2.13053,-0.473 3.02909,-13.621"
+ class="c16055"
+ id="Kootenai, ID" />
+ <path
+ d="m 202.87095,26.781143 3.72085,0.811 -0.82725,3.849 -0.87717,3.849 11.10549,2.395 -1.37459,6.388 -1.11608,5.311 -0.14441,-0.298 -0.79516,-1.148 -1.39955,-1.109 -0.17651,-0.112 -0.64361,0.06 -0.9164,0.779 -0.0713,0.323 -0.44928,2.539 -2.78128,-0.603 0.51525,-2.25 -1.96116,-0.435 -2.12161,-0.248 -4.16301,-0.82 0.34588,-1.517 4.13091,-17.759"
+ class="c16017"
+ id="Bonner, ID" />
+ <path
+ d="m 203.65006,23.397143 14.71403,3.191 -2.37122,11.097 -11.10549,-2.395 0.87717,-3.849 0.82725,-3.849 -3.72085,-0.811 0.77911,-3.384"
+ class="c16021"
+ id="Boundary, ID" />
+ <path
+ d="m 194.15985,65.005143 3.68876,2.933 4.75669,1.407 1.98612,0.424 -0.42611,1.969 -1.29436,5.963 -0.85221,0.731 -1.3015,-0.289 -2.39617,-0.57 -0.16759,0 -0.68997,0.257 -0.71672,0.442 -0.19255,0.249 0.009,0.08 -0.33697,0.579 -5.00629,-1.095 2.93995,-13.081"
+ class="c16057"
+ id="Latah, ID" />
+ <path
+ d="m 191.2199,78.086143 5.00629,1.095 0.33697,-0.579 -0.009,-0.08 0.19255,-0.249 0.71672,-0.442 0.68997,-0.257 0.16759,0 2.39617,0.57 -0.35479,1.632 -0.24782,1.43 0.95562,0.03 0.36192,0.103 -0.16045,0.731 -0.0891,-0.06 -0.15154,-0.04 -0.39402,-0.07 -0.0891,0.01 0.025,0.313 0.0481,0.282 0.3851,1.262 -0.10519,0.69 -0.0785,0.195 -0.15332,0.192 -1.96829,-0.02 -3.48908,-0.772 -0.0945,0.483 0.007,0.159 -1.36568,6.775 -0.29061,0.112 -0.49742,0.387 -0.12836,0.136 -0.20147,0.371 -0.016,0.272 0.0499,0.33 0.0945,0.136 0.082,0.217 -0.0499,0.234 -0.31378,0.392 -0.11946,0.1 -0.65074,0.168 -0.17651,-0.06 -1.13212,-3.528 -0.0981,-1.59 0.76485,-2.108 -0.0981,-1.975 -0.15333,-1.269 -0.0232,-0.08 -0.50455,-2.034 0.33696,-1.004 0.58657,-2.595"
+ class="c16069"
+ id="Nez Perce, ID" />
+ <path
+ d="m 203.9068,84.877143 0.97344,2.908 -2.85259,1.631 -2.96491,-1.622 -0.37797,0.06 -0.057,0.06 -3.19847,3.014 -1.67055,0.546 1.36568,-6.775 -0.007,-0.159 0.0945,-0.483 3.48908,0.772 1.96829,0.02 0.15332,-0.192 0.0785,-0.195 0.10519,-0.69 -0.3851,-1.262 -0.0481,-0.282 -0.025,-0.313 0.0891,-0.01 0.39402,0.07 0.15154,0.04 0.0891,0.06 0.59369,0.772 1.83279,1.02 0.16046,0.297 0.041,0.305 0.007,0.419"
+ class="c16061"
+ id="Lewis, ID" />
+ <path
+ d="m 190.31063,107.85114 5.52868,1.206 0.0802,0.417 0.16046,1.406 -0.0232,1.052 -0.22642,0.532 -0.11054,0.07 -0.0571,0.225 2.54059,0.579 0.66679,1.189 -0.90035,2.177 -0.34766,0.412 -0.14441,0 -0.23177,-0.139 -0.77199,1.175 -0.22464,0.497 -0.64183,1.785 -0.55626,4.475 0,2.089 -2.55485,0.74 -1.478,-0.322 -0.54556,-0.289 -1.39242,-1.238 -0.60974,-3.054 -0.0891,-1.164 0.86112,-3.954 -4.24323,-0.981 0.48316,-0.513 0.37619,-0.403 0.53842,-0.931 0.016,-0.02 -0.0232,-0.185 -0.0963,-0.225 -0.0571,-0.225 -0.016,-0.465 0.40114,-0.836 0.50812,-0.467 0.77912,-0.706 2.40152,-3.914"
+ class="c16003"
+ id="Adams, ID" />
+ <path
+ d="m 184.99946,116.73714 4.24323,0.981 -0.86112,3.954 0.0891,1.164 0.60974,3.054 1.39242,1.238 0.54556,0.289 1.478,0.322 -0.95562,1.632 -0.36192,0.923 -0.30487,1.503 -0.54556,1.808 -0.21038,0.529 -1.50296,-0.337 -7.15822,-1.606 0.0232,-0.04 0.0232,-0.05 0.0321,-0.06 0.009,0 0,-0.02 0.0232,-0.234 -0.0553,-0.176 -0.0161,-0.03 -0.85221,-1.686 -0.16759,-0.105 -0.63648,-0.225 -0.0874,0 -0.15333,0.07 -2.00038,-0.811 -0.24069,-0.408 -0.0321,-0.33 0.0232,-0.194 0.041,-0.122 0.55448,-3.783 0.20146,-0.403 3.55861,-4.892 0.37797,-0.339 0.11232,-0.05 0.39401,-0.09 1.53505,-0.523 0.87539,-0.941"
+ class="c16087"
+ id="Washington, ID" />
+ <path
+ d="m 181.4569,132.19114 7.15822,1.606 -0.43502,1.937 -2.34447,1.494 -2.26603,-0.521 -0.86826,3.928 -3.94549,-2.61 0.48138,-0.804 0.78089,-1.478 0.62579,-2.555 0.81299,-0.997"
+ class="c16075"
+ id="Payette, ID" />
+ <path
+ d="m 208.15894,133.51614 0.85935,0.964 2.63508,4.01 0.0731,0.378 0.0731,3.794 -0.066,0.191 -0.46533,0.467 -1.27832,-0.04 -3.40706,-0.738 -3.76008,0.417 -0.33874,0.167 -1.81496,1.698 -0.78803,0.946 -0.72385,0.997 -0.46533,0.435 -0.40114,0.186 -2.27494,0.859 -1.29972,0.05 -0.92531,-0.114 -0.19255,-0.09 -0.10519,0.106 -1.80069,-2.869 -2.01643,-3.175 0.12124,0.03 0.0321,-0.113 1.67055,-7.641 0.98057,0.209 1.57428,-0.122 0.60439,-1.42 9.64889,2.073 0.77912,-0.03 0.89322,-0.298 2.17866,-1.333"
+ class="c16015"
+ id="Boise, ID" />
+ <path
+ d="m 195.05128,126.99914 0.0802,0.02 -0.85043,3.93 -0.9574,-0.2 -0.8433,3.896 -0.98057,-0.209 -1.67055,7.642 -0.0321,0.112 -0.12124,-0.03 -3.7369,-0.819 -3.23769,-0.7 0.86826,-3.928 2.26603,0.521 2.34447,-1.494 0.43502,-1.937 1.50296,0.337 0.21038,-0.529 0.54556,-1.808 0.30487,-1.503 0.36192,-0.923 0.95562,-1.632 2.55485,-0.74"
+ class="c16045"
+ id="Gem, ID" />
+ <path
+ d="m 178.75585,138.02514 3.94549,2.61 3.23769,0.7 -0.85934,3.905 0.23356,0.972 -0.16938,1.8 -0.28882,1.311 -0.69889,1.173 -0.75593,2.499 -1.0519,-0.675 -2.37121,-4.413 -0.0321,-0.119 0.14441,-0.878 0.025,-0.41 -0.12124,-0.713 -0.1034,-0.346 -0.40115,-0.499 -1.96294,-2.266 -0.54556,-0.344 1.77574,-4.307"
+ class="c16027"
+ id="Canyon, ID" />
+ <path
+ d="m 185.93903,141.33514 3.7369,0.819 2.01643,3.175 1.80069,2.869 0.10519,-0.105 -1.07685,5.118 -0.37797,1.776 -0.90035,3.883 -4.70856,-0.99 -0.25673,-0.233 -0.38688,-0.458 -0.52238,-0.828 -0.3851,-0.698 -0.007,-0.06 0.12837,-0.458 0.2086,-0.314 0.0321,-0.217 -0.31379,-1.116 -0.20146,-0.266 -0.11945,-0.09 -1.31041,-0.143 0.75593,-2.499 0.69889,-1.173 0.28882,-1.311 0.16938,-1.8 -0.23356,-0.972 0.85934,-3.905"
+ class="c16001"
+ id="Ada, ID" />
+ <path
+ d="m 211.26827,143.32014 0.26565,0.33 -0.65967,1.734 -0.21751,0.138 -0.51346,0.738 -0.22464,0.419 -1.73652,4.145 -1.13391,5.281 -0.78624,3.888 -0.51347,6.645 -0.66857,3.255 -6.8694,-1.399 0.39401,-1.888 0.26565,-0.569 0.31913,-1.191 -5.73549,-1.622 -3.36784,-0.708 -0.20146,-0.09 -1.05903,-1.109 -1.52792,-1.769 -0.71493,-1.446 -0.0481,-0.225 4.70856,0.99 0.90035,-3.883 0.37797,-1.776 1.07685,-5.119 0.19255,0.09 0.92531,0.114 1.29972,-0.05 2.27494,-0.859 0.40114,-0.186 0.46533,-0.435 0.72385,-0.997 0.78803,-0.946 1.81496,-1.698 0.33874,-0.167 3.76008,-0.417 3.40706,0.738 1.27832,0.04"
+ class="c16039"
+ id="Elmore, ID" />
+ <path
+ d="m 176.98011,142.33214 0.54556,0.344 1.96294,2.266 0.40115,0.499 0.1034,0.346 0.12124,0.713 -0.025,0.41 -0.14441,0.878 0.0321,0.119 2.37121,4.413 1.0519,0.675 1.31041,0.143 0.11945,0.09 0.20146,0.266 0.31379,1.116 -0.0321,0.217 -0.2086,0.314 -0.12837,0.458 0.007,0.06 0.3851,0.699 0.52238,0.827 0.38688,0.458 0.25673,0.234 0.0481,0.224 0.71493,1.446 1.52792,1.769 1.05903,1.109 0.20146,0.09 3.36784,0.708 5.73549,1.622 -0.31913,1.191 -0.26565,0.569 -0.39401,1.888 6.8694,1.4 -3.55861,17.502 -24.5002,-5.201 -1.92907,-0.442 -6.49321,-1.487 -0.12836,-0.05 8.50963,-37.886"
+ class="c16073"
+ id="Owyhee, ID" />
+ <path
+ d="m 210.87425,145.38414 1.67947,1.173 2.59586,0.756 0.11945,0.154 0.0481,0.167 0.041,0.337 0.0161,1.045 -0.12837,1.785 -0.0802,1.686 2.46749,6.583 0.53665,0.305 -0.0321,1.88 -0.2086,1.043 -3.60675,-0.681 -8.06035,-1.624 0.78624,-3.888 1.13391,-5.281 1.73652,-4.145 0.22464,-0.419 0.51346,-0.738 0.21751,-0.138"
+ class="c16025"
+ id="Camas, ID" />
+ <path
+ d="m 206.26197,159.99314 8.06035,1.624 -1.56001,7.875 -1.2694,4.491 -2.20184,-0.98 -1.14104,-1.054 -0.88431,-1.654 0.45107,-1.937 -0.009,-0.112 -0.67571,-1.416 -0.58478,-0.192 -0.45998,-0.1 -0.23891,0.1 0.51347,-6.645"
+ class="c16047"
+ id="Gooding, ID" />
+ <path
+ d="m 212.76231,169.49214 3.77612,0.746 -0.11945,0.611 0.26565,0.394 3.18955,0.972 1.50296,0.973 1.92728,0.378 -0.98058,5.213 -1.18026,-0.01 -2.10557,0.216 -0.77911,-0.786 -0.0891,-0.186 -0.79516,-0.69 -2.644,-1.432 -1.02871,-0.385 -2.00038,-1.301 -0.2086,-0.218 1.2694,-4.491"
+ class="c16053"
+ id="Jerome, ID" />
+ <path
+ d="m 205.7485,166.63814 0.23891,-0.1 0.45998,0.1 0.58478,0.192 0.67571,1.416 0.009,0.112 -0.45107,1.937 0.88431,1.654 1.14104,1.054 2.20184,0.98 0.2086,0.218 2.00038,1.301 1.02871,0.385 2.644,1.432 0.79516,0.69 0.0891,0.186 0.77911,0.786 2.10557,-0.216 -0.64361,0.1 -0.86648,1.68 -3.68875,-0.209 -0.24961,1.343 -0.0642,0.624 -1.49404,7.643 -3.61566,-0.715 -4.40369,-0.997 -2.51563,-0.506 -2.08061,-0.328 3.55861,-17.503 0.66857,-3.255"
+ class="c16083"
+ id="Twin Falls, ID" />
+ <path
+ d="m 222.32384,178.77914 3.56931,1.07 0.21573,0.03 0.11232,-0.03 0.69175,-0.218 0.23177,-0.201 0.26565,-0.385 1.23018,-1.59 0.12837,-0.106 0.26565,-0.153 0.68997,-0.112 0.79694,0.08 1.01089,0.07 0.86825,0.266 0.44216,0.731 0.2496,0.353 0.85043,0.467 0.0981,0 0.19255,-0.161 0.68283,-0.08 3.04515,1.639 -1.03585,5.929 -1.35855,7.497 -6.7339,-1.139 -0.49029,-0.08 -5.58395,-0.95 -0.53129,-0.09 -1.42986,-0.249 -0.19968,-0.04 -1.3425,-0.32 -1.11786,-0.282 -4.00076,-0.788 1.49404,-7.643 0.0642,-0.624 0.24961,-1.343 3.68875,0.209 0.86648,-1.68 0.64361,-0.1 1.18026,0.01"
+ class="c16031"
+ id="Cassia, ID" />
+ <path
+ d="m 247.3072,184.10814 1.4156,1.496 0,1.662 0.65788,0.772 1.5511,1.59 0.41006,0.284 0.33696,0.456 0.41006,0.768 -0.26565,1.571 -0.65075,-0.118 -0.67392,3.942 -0.91818,-0.146 -1.2284,-0.317 -0.009,0 -3.55148,-0.614 -4.33059,-0.748 -4.89398,-0.828 1.35855,-7.497 5.78541,1.006 0.35479,-1.986 2.59408,0.46 0.34588,-1.986 1.30149,0.233"
+ class="c16071"
+ id="Oneida, ID" />
+ <path
+ d="m 240.03487,168.54414 -1.02871,5.639 3.17529,0.563 1.44591,-1.815 0.68284,0.739 1.96828,-0.771 0.21751,0.04 0.4582,0.513 0.3851,1.102 1.20522,6.404 -0.0802,0.492 -0.32091,1.189 -0.83617,1.469 -1.30149,-0.233 -0.34588,1.986 -2.59408,-0.46 -0.35479,1.986 -5.78541,-1.006 1.03585,-5.929 -3.04515,-1.639 -0.68283,0.08 0.57051,-3.118 0.24961,-1.968 1.10003,-5.971 3.8813,0.708"
+ class="c16077"
+ id="Power, ID" />
+ <path
+ d="m 255.26237,173.30114 -1.35855,1.59 -0.0481,0.09 -0.33696,0.795 -0.51347,2.557 -0.041,0.649 0.025,0.249 0.312,1.304 0.13728,0.1 0.19968,-0.02 0.31557,-0.162 0.0874,-0.129 0.13728,-0.08 1.46195,0.248 0.44929,2.107 0.0321,0.344 0.0321,3.015 -0.007,1.018 -0.11232,0.662 -0.32983,-0.05 -0.64184,3.632 -1.46373,-0.251 -0.71493,-0.571 -1.54218,-0.487 -0.41006,-0.283 -1.5511,-1.59 -0.65788,-0.772 0,-1.662 -1.4156,-1.496 0.83617,-1.469 0.32091,-1.189 0.0802,-0.492 -1.20522,-6.404 -0.3851,-1.102 -0.4582,-0.513 -0.21751,-0.04 -1.96828,0.771 -0.68284,-0.739 0,-0.153 0.041,-0.112 0.25674,-0.555 1.34071,-0.474 0.19255,-0.03 9.80401,1.688"
+ class="c16005"
+ id="Bannock, ID" />
+ <path
+ d="m 256.03435,187.63714 4.61941,0.788 -0.1765,2.28 -0.73098,1.546 -0.33696,0.816 -0.0571,0.41 0.0963,2.177 0.0571,0.13 1.10894,2.384 -10.116,-1.637 0.67392,-3.942 0.65075,0.118 0.26565,-1.571 -0.41006,-0.768 -0.33696,-0.456 1.54218,0.486 0.71493,0.571 1.46373,0.251 0.64184,-3.632 0.32983,0.05"
+ class="c16041"
+ id="Franklin, ID" />
+ <path
+ d="m 270.22599,187.69414 -1.87379,11.679 -7.73766,-1.205 -1.10894,-2.384 -0.0571,-0.13 -0.0963,-2.177 0.0571,-0.41 0.33696,-0.816 0.73098,-1.546 0.1765,-2.28 -0.0553,-3.079 0.0321,-0.548 0.59369,-0.385 6.01897,0.958 0.2086,0.472 0.009,0.153 -0.15332,0.573 -0.12124,0.319 -0.19968,0.426 1.36568,0.668 1.87379,-0.288"
+ class="c16007"
+ id="Bear Lake, ID" />
+ <path
+ d="m 263.08025,174.66614 9.03202,1.471 -1.88628,11.557 -1.87379,0.288 -1.36568,-0.668 0.19968,-0.426 0.12124,-0.319 0.15332,-0.573 -0.009,-0.153 -0.2086,-0.472 -6.01897,-0.958 -0.59369,0.385 -0.0321,0.548 0.0553,3.079 -4.61941,-0.788 0.11232,-0.662 0.007,-1.018 -0.0321,-3.015 -0.0321,-0.344 -0.44929,-2.107 -1.46195,-0.248 -0.13728,0.08 -0.0874,0.129 -0.31557,0.162 -0.19968,0.02 -0.13728,-0.1 -0.312,-1.304 -0.025,-0.249 0.041,-0.649 0.51347,-2.557 0.33696,-0.795 0.0481,-0.09 1.35855,-1.59 7.81788,1.365"
+ class="c16029"
+ id="Caribou, ID" />
+ <path
+ d="m 228.77783,164.37214 4.94212,0.932 -1.46374,7.964 -0.97879,-0.185 -0.75594,4.09 -0.79694,-0.08 -0.68997,0.112 -0.26565,0.153 -0.12837,0.106 -1.23018,1.59 -0.26565,0.385 -0.23177,0.201 -0.69175,0.218 -0.11232,0.03 -0.21573,-0.03 -3.56931,-1.07 0.98058,-5.213 2.78128,0.546 1.20522,-1.783 1.48691,-7.957"
+ class="c16067"
+ id="Minidoka, ID" />
+ <path
+ d="m 214.32232,161.61714 3.60675,0.681 10.84876,2.074 -1.48691,7.957 -1.20522,1.783 -2.78128,-0.546 -1.92728,-0.378 -1.50296,-0.973 -3.18955,-0.972 -0.26565,-0.394 0.11945,-0.611 -3.77612,-0.746 1.56001,-7.875"
+ class="c16063"
+ id="Lincoln, ID" />
+ <path
+ d="m 264.76863,160.74914 3.69589,0.715 2.55663,0.426 0.23178,0.394 0.016,0.232 1.35855,1.736 1.21235,0.917 -0.65788,4.218 -1.06972,6.75 -9.03202,-1.471 0.69889,-4.09 0.3227,-1.863 -3.54435,-2.572 -4.38764,-2.113 -6.84622,-1.198 0.80407,-4.58 14.64093,2.499"
+ class="c16019"
+ id="Bonneville, ID" />
+ <path
+ d="m 250.1277,158.25014 -0.80407,4.58 6.84622,1.198 4.38764,2.113 3.54435,2.572 -0.3227,1.863 -0.69889,4.09 -7.81788,-1.365 -9.80401,-1.689 -0.19255,0.03 -1.34071,0.474 -0.25674,0.555 -0.041,0.112 0,0.154 -1.44591,1.814 -3.17529,-0.563 1.02871,-5.639 0.72385,-3.946 0.98058,0.177 0.49742,-1.849 0.34588,-1.865 1.9772,0.364 2.2892,-1.73 0.36193,-1.872 2.91677,0.427"
+ class="c16011"
+ id="Bingham, ID" />
+ <path
+ d="m 211.53392,143.65014 0.77911,-0.557 0.19968,-0.103 0.61153,-0.225 0.24068,-0.04 0.97345,0.193 1.85418,1.906 1.35142,1.51 1.85597,-0.136 2.38726,0.699 0.62579,0.466 4.31633,4.701 1.28366,1.583 0.22643,0.305 0.45819,0.891 0.15868,0.362 0.13728,0.546 0.89322,-0.273 0.33696,0 0.42611,0.2 0.0802,0.144 0.6347,2.042 0.12123,0.941 -0.36192,0.248 -0.32983,1.752 4.48392,0.844 -0.34588,1.881 5.82642,1.06 -0.72385,3.946 -3.8813,-0.708 -1.10003,5.971 -0.24961,1.968 -0.57051,3.118 -0.19255,0.161 -0.0981,0 -0.85043,-0.467 -0.2496,-0.353 -0.44216,-0.731 -0.86825,-0.266 -1.01089,-0.07 0.75594,-4.09 0.97879,0.186 1.46374,-7.965 -4.94212,-0.932 -10.84876,-2.073 0.2086,-1.043 0.0321,-1.881 -0.53665,-0.305 -2.46749,-6.583 0.0802,-1.686 0.12837,-1.785 -0.0161,-1.045 -0.041,-0.337 -0.0481,-0.167 -0.11945,-0.154 -2.59586,-0.755 -1.67947,-1.174 0.65967,-1.734"
+ class="c16013"
+ id="Blaine, ID" />
+ <path
+ d="m 198.2034,113.33914 0.0143,-0.128 0.25673,-0.5 0.34588,-0.433 2.49245,-0.337 20.38534,4.17 -0.31379,0.154 -0.21751,0.224 -0.26386,0.642 -0.2496,1.238 -0.16938,1.053 -0.55269,2.115 -0.94135,1.824 -0.93244,1.148 -2.52276,1.478 -0.16938,0.03 -0.68997,-0.241 -0.52238,-0.715 -0.4992,-0.435 -0.27278,-0.09 -0.78625,0.369 -2.9346,2.499 -0.55447,0.651 -0.0143,0.635 0.0392,0.387 0.0891,0.424 0.3851,0.128 0.0963,-0.06 0.0481,0.02 0.10519,0.218 0.0553,0.722 -0.28882,1.301 -0.0963,0.17 -0.36192,0.579 -0.29774,0.337 -0.51347,0.474 -0.19255,0.12 -2.17866,1.333 -0.89322,0.298 -0.77912,0.03 -9.64889,-2.073 -0.60439,1.421 -1.57428,0.121 0.8433,-3.896 0.9574,0.2 0.85043,-3.93 -0.0802,-0.02 0,-2.089 0.55626,-4.475 0.64183,-1.785 0.22464,-0.497 0.77199,-1.175 0.23177,0.139 0.14441,0 0.34766,-0.412 0.90035,-2.177 -0.66679,-1.189"
+ class="c16085"
+ id="Valley, ID" />
+ <path
+ d="m 208.90597,50.413143 0.44928,-2.539 0.0713,-0.323 0.9164,-0.779 0.64361,-0.06 0.17651,0.112 1.39955,1.109 0.79516,1.148 0.14441,0.298 0.47425,0.843 3.09328,6.301 0.0232,0.08 0.025,0.06 0.007,0.03 0,0.09 -0.007,1.287 -0.52238,1.325 -0.44215,1.005 -0.29774,1.849 0,0.02 0.0161,0.569 2.46036,3.4 0.33696,0.289 0.26565,0.233 0.8433,0.41 1.22126,0.489 0.26565,0.194 1.39777,3.149 1.30863,3.054 0.73989,1.381 0.40114,0.74 -20.94694,-4.428 0.42611,-1.969 1.90232,-8.741 2.41223,-10.615"
+ class="c16079"
+ id="Shoshone, ID" />
+ <path
+ d="m 204.16531,71.738143 20.94694,4.428 0.30666,2.323 0,0.01 0.0713,0.194 2.31595,3.093 0.22464,0.06 0.10341,0.03 0.68997,0 0.86826,2.176 -10.00369,0.177 -6.86226,0.128 -0.0321,0.02 -2.18579,2.589 -0.48138,0.94 -0.27278,0.305 -0.32983,0.29 -0.2496,-0.03 -0.32092,-0.103 -2.35339,-1.109 -0.0891,-0.07 -0.41006,-0.578 -0.28169,-0.619 -1.53505,-0.955 -0.37797,-0.17 -0.007,-0.418 -0.041,-0.305 -0.16046,-0.298 -1.83279,-1.02 -0.59369,-0.772 0.16045,-0.731 -0.36192,-0.103 -0.95562,-0.03 0.24782,-1.43 0.35479,-1.631 1.3015,0.288 0.85221,-0.731 1.29436,-5.963"
+ class="c16035"
+ id="Clearwater, ID" />
+ <path
+ d="m 233.63972,84.605143 0.0874,0.09 0.0571,0.266 -0.0963,0.506 -0.55626,1.574 -0.93957,2.163 -1.40669,3.125 -4.48391,11.185997 -0.56161,3.077 -0.28169,1.558 -0.0161,0.08 0.0481,0.06 -0.70602,0.531 -1.5921,0.995 -0.81834,-0.433 -0.22642,-0.225 -0.1355,-0.257 -0.16046,-0.169 -0.22642,-0.03 -0.10341,0.07 -0.13015,0.259 -0.0963,0.465 -0.11232,0.82 0.009,0.09 0.57943,0.82 0.82726,1.117 0.69888,1.486 -1.59923,2.291 -20.38534,-4.17 -2.49245,0.337 -0.34588,0.434 -0.25673,0.499 -0.0143,0.128 -2.54059,-0.579 0.0571,-0.225 0.11054,-0.07 0.22642,-0.532 0.0232,-1.051 -0.16046,-1.407 -0.0802,-0.417 -5.52868,-1.206 0.54556,-1.15 2.78128,-3.567 1.54218,-1.576 0.38688,-0.44 0.0642,-0.291 -0.55448,-2.907997 -0.10519,-0.442 0,0 -0.312,-0.396 -0.27456,-0.353 -0.007,0 -0.58657,-0.257 -1.39955,-1.287 -0.73098,-0.674 -0.0481,-0.09 -0.0713,-0.135 0.17651,0.06 0.65074,-0.168 0.11946,-0.1 0.31378,-0.392 0.0499,-0.234 -0.082,-0.217 -0.0945,-0.136 -0.0499,-0.329 0.016,-0.273 0.20147,-0.371 0.12836,-0.135 0.49742,-0.387 0.29061,-0.113 1.67055,-0.545 3.19847,-3.015 0.057,-0.06 0.37797,-0.06 2.96491,1.623 2.85259,-1.632 -0.97344,-2.907 0.37797,0.169 1.53505,0.956 0.28169,0.618 0.41006,0.578 0.0891,0.07 2.35339,1.109 0.32092,0.103 0.2496,0.03 0.32983,-0.29 0.27278,-0.305 0.48138,-0.94 2.18579,-2.588 0.0321,-0.02 6.86226,-0.128 10.00369,-0.176 0.0321,0.03 1.71155,0.36 0.36192,-0.1 0.24961,-0.1 0.41006,-0.08 0.82725,0.112 0.28169,0.234 0.0731,0.07"
+ class="c16049"
+ id="Idaho, ID" />
+ <path
+ d="m 208.15894,133.51614 0.19255,-0.12 0.51347,-0.474 0.29774,-0.337 0.36192,-0.579 0.0963,-0.17 0.28882,-1.301 -0.0553,-0.722 -0.10519,-0.218 -0.0481,-0.02 -0.0963,0.06 -0.3851,-0.128 -0.0891,-0.424 -0.0392,-0.387 0.0143,-0.635 0.55447,-0.651 2.9346,-2.499 0.78625,-0.369 0.27278,0.09 0.4992,0.435 0.52238,0.715 0.68997,0.241 0.16938,-0.03 2.52276,-1.478 -0.40115,1.349 0.0232,0.298 0.12836,0.369 2.63687,3.432 0.47424,0.562 0.0963,0.03 1.45482,-0.145 0.49742,-0.329 1.24623,-1.061 0.0642,-0.09 0.37619,-0.788 0.37083,-0.916 0.48138,-0.715 0.68462,-0.538 1.64737,-1.198 0.312,0.522 -0.0874,0.813 0.0392,1.952 4.52492,6.629 2.29812,1.455 1.70264,0.916 0.2086,0.08 0.57051,0.161 0.0981,-0.02 0.24069,-0.179 0.25673,-0.312 0.16046,-0.121 0.2086,0.04 0.0731,0.112 0.11232,0.296 0.82726,2.372 0.22464,0.7 0.0571,0.979 -0.0891,0.972 -1.55823,-0.289 -1.39955,3.817 -0.12837,0.642 -0.27991,2.676 -0.40293,2.41 -1.70264,1.721 -2.75632,0.907 -1.5921,0.852 -0.70602,0.747 -0.0571,0.129 -0.13728,-0.546 -0.15868,-0.362 -0.45819,-0.891 -0.22643,-0.305 -1.28366,-1.583 -4.31633,-4.702 -0.62579,-0.465 -2.38726,-0.699 -1.85597,0.136 -1.35142,-1.51 -1.85418,-1.906 -0.97345,-0.193 -0.24068,0.04 -0.61153,0.225 -0.19968,0.103 -0.77911,0.557 -0.26565,-0.33 0.46533,-0.467 0.066,-0.191 -0.0731,-3.794 -0.0731,-0.378 -2.63508,-4.01 -0.85935,-0.964"
+ class="c16037"
+ id="Custer, ID" />
+ <path
+ d="m 235.567,107.17614 0.32983,0.346 1.55823,2.201 0.0891,0.289 0.18364,1.824 -0.0143,0.683 -0.2086,0.378 -0.041,1.366 0.0232,1.8 2.51563,9.353 2.66718,3.712 0.54734,-0.135 0.57052,0.449 0.68283,0.763 0.30666,0.474 0.35122,1.102 0.46712,2 0,0.177 -0.0963,0.176 -0.0642,0.05 -0.0232,2.868 0.19077,1.086 0.44393,0.642 1.30863,1.464 0.41719,0.151 0.32983,-0.184 0.16046,-0.249 0.009,-0.06 0.0963,0.467 -0.59548,3.318 -1.95937,-0.344 -0.96454,-0.266 -5.27194,-0.941 0.0891,-0.972 -0.0571,-0.979 -0.22464,-0.7 -0.82726,-2.372 -0.11232,-0.296 -0.0731,-0.112 -0.2086,-0.04 -0.16046,0.121 -0.25673,0.312 -0.24069,0.179 -0.0981,0.02 -0.57051,-0.161 -0.2086,-0.08 -1.70264,-0.916 -2.29812,-1.455 -4.52492,-6.629 -0.0392,-1.952 0.0874,-0.813 -0.312,-0.522 -1.64737,1.198 -0.68462,0.538 -0.48138,0.715 -0.37083,0.916 -0.37619,0.788 -0.0642,0.09 -1.24623,1.061 -0.49742,0.329 -1.45482,0.145 -0.0963,-0.03 -0.47424,-0.562 -2.63687,-3.432 -0.12836,-0.369 -0.0232,-0.298 0.40115,-1.349 0.93244,-1.148 0.94135,-1.824 0.55269,-2.115 0.16938,-1.053 0.2496,-1.238 0.26386,-0.642 0.21751,-0.224 0.31379,-0.154 1.59923,-2.291 -0.69888,-1.486 -0.82726,-1.117 -0.57943,-0.82 -0.009,-0.09 0.11232,-0.82 0.0963,-0.466 0.13015,-0.258 0.10341,-0.07 0.22642,0.03 0.16046,0.169 0.1355,0.257 0.22642,0.225 0.81834,0.433 1.5921,-0.995 0.70602,-0.531 0.7078,0.1 0.6347,0.16 0.20147,0.09 1.18026,1.865 0.14441,0.562 0,0 0.65966,0.103 3.15033,-1.446 1.98434,-1.736 1.41381,-0.811"
+ class="c16059"
+ id="Lemhi, ID" />
+ <path
+ d="m 244.84862,143.07914 -1.05367,5.937 4.86188,0.884 -1.4459,7.923 -0.36193,1.872 -2.2892,1.73 -1.9772,-0.364 -0.34588,1.865 -0.49742,1.849 -0.98058,-0.177 -5.82642,-1.06 0.34588,-1.881 -4.48392,-0.844 0.32983,-1.752 0.36192,-0.248 -0.12123,-0.941 -0.6347,-2.042 -0.0802,-0.144 -0.42611,-0.2 -0.33696,0 -0.89322,0.273 0.0571,-0.129 0.70602,-0.747 1.5921,-0.852 2.75632,-0.907 1.70264,-1.721 0.40293,-2.41 0.27991,-2.676 0.12837,-0.642 1.39955,-3.817 1.55823,0.289 5.27194,0.941"
+ class="c16023"
+ id="Butte, ID" />
+ <path
+ d="m 248.65683,149.90014 0.35479,-1.959 8.75746,1.542 -0.33696,1.96 2.91677,0.515 -0.16045,0.987 -0.60261,2.933 -0.17651,0.997 0.18364,0.169 0.35479,0.03 0.0571,-0.03 4.87615,3.06 -0.11232,0.652 -14.64093,-2.499 -2.91677,-0.427 1.4459,-7.923"
+ class="c16051"
+ id="Jefferson, ID" />
+ <path
+ d="m 260.18844,152.94514 2.27494,0.387 2.14479,1.389 2.23394,0.371 2.62795,-0.385 0.0624,-0.02 0.0642,-0.07 -1.13212,6.846 -3.69589,-0.715 0.11232,-0.652 -4.87615,-3.06 -0.0571,0.03 -0.35479,-0.03 -0.18364,-0.169 0.17651,-0.997 0.60261,-2.932"
+ class="c16065"
+ id="Madison, ID" />
+ <path
+ d="m 275.55143,154.16714 -1.71156,11.002 -1.21235,-0.917 -1.35855,-1.736 -0.016,-0.232 -0.23178,-0.394 -2.55663,-0.426 1.13212,-6.846 5.95479,-0.451"
+ class="c16081"
+ id="Teton, ID" />
+ <path
+ d="m 670.36441,248.32714 0.59369,7.604 0.51347,6.115 -7.05482,0.69 -0.76485,-7.971 0.23356,-0.02 -0.40828,-4.01 -0.21751,-1.993 7.07799,-0.74 0.0267,0.328"
+ class="c17183"
+ id="Vermilion, IL" />
+ <path
+ d="m 658.88094,237.21614 10.38878,-1.191 1.06794,11.974 -7.07799,0.74 -3.16638,0.225 -1.21235,-11.748"
+ class="c17075"
+ id="Iroquois, IL" />
+ <path
+ d="m 641.41951,323.66214 4.27354,-0.306 -0.0553,2.515 -0.0571,2.338 0.16937,0.362 0.14442,0.171 0.44393,0.2 1.18204,0.497 0.85756,1.927 -3.4962,-0.376 -1.21414,-0.989 -0.64183,-1.575 -1.11608,-2.089 -0.45998,-0.658 -0.0303,-2.017"
+ class="c17003"
+ id="Alexander, IL" />
+ <path
+ d="m 645.69305,323.35614 3.69589,-0.145 2.13944,0.475 0.15333,1.768 -0.0981,0.03 -4.06316,3.953 -1.18204,-0.497 -0.44393,-0.2 -0.14442,-0.171 -0.16937,-0.362 0.0571,-2.338 0.0553,-2.515"
+ class="c17153"
+ id="Pulaski, IL" />
+ <path
+ d="m 651.52838,323.68614 3.89558,-1.092 4.30741,3.791 0.17829,2.145 -1.32468,-0.141 -6.90327,-2.935 -0.15333,-1.768"
+ class="c17127"
+ id="Massac, IL" />
+ <path
+ d="m 661.00256,316.05314 4.4126,0.223 1.43521,1.487 0,0.371 -0.3441,0.392 -0.18363,0.04 -2.5085,0.531 -0.37797,0.08 -0.312,0.09 -0.1141,0.03 -0.0392,0 -0.43502,0.264 -0.0874,0.06 -0.016,0 -0.30666,0.283 -0.45641,0.608 -1.05368,-0.344 -0.27278,-4.081 0.65967,-0.05"
+ class="c17069"
+ id="Hardin, IL" />
+ <path
+ d="m 660.34289,316.10114 0.27278,4.081 -0.11232,0.05 -0.312,0.143 -0.12837,0.1 -0.16224,0.114 -0.23355,0.303 -0.0945,0.227 -0.51525,2.264 0,0 -0.0107,0.153 0.15511,0.498 0.76307,0.916 0.24247,0.137 0.22464,0.216 0.51346,1.141 -0.26564,1.277 -0.21573,0.595 -0.41898,0.185 -0.13549,0.02 -0.17829,-2.145 -4.30741,-3.791 -0.42433,-6.059 5.34326,-0.434"
+ class="c17151"
+ id="Pope, IL" />
+ <path
+ d="m 654.99963,316.53514 0.42433,6.059 -3.89558,1.092 -2.13944,-0.475 -0.39223,-6.163 6.00292,-0.513"
+ class="c17087"
+ id="Johnson, IL" />
+ <path
+ d="m 648.99671,317.04814 0.39223,6.163 -3.69589,0.145 -4.27354,0.306 0.65788,-0.176 0.2086,-0.107 0.016,-0.02 0.0178,-0.02 0.0143,-0.02 0.0731,-0.218 0.0713,-0.708 0.009,-0.03 -0.009,-0.02 -0.10341,-0.387 -0.009,-0.04 -0.007,-0.02 -0.28882,-0.651 -0.22464,-0.282 -0.47603,-0.467 -0.33696,-0.504 -0.51347,-0.958 -0.007,0 -0.1141,-0.46 -0.016,-0.209 0,-0.137 6.58949,-1.118 2.02534,-0.06"
+ class="c17181"
+ id="Union, IL" />
+ <path
+ d="m 665.96785,308.89114 0.90748,2.035 -0.23356,0.875 -0.0874,0.234 -0.1355,0.247 -0.21751,0.236 -0.83616,0.608 -0.0143,0 -0.29061,0.547 -0.1462,0.248 -0.0232,0.05 -0.0963,0.256 -0.025,0.161 0.009,0.03 0.0945,0.52 0.0107,0.02 0.3851,1.045 0.1462,0.264 -4.4126,-0.223 -0.55448,-7.121 0,-0.02 5.51977,-0.02"
+ class="c17059"
+ id="Gallatin, IL" />
+ <path
+ d="m 660.44808,308.93214 0.55448,7.121 -0.65967,0.05 -5.34326,0.434 -0.44215,-6.109 -0.0713,-1.003 5.96191,-0.491"
+ class="c17165"
+ id="Saline, IL" />
+ <path
+ d="m 654.55748,310.42614 0.44215,6.109 -6.00292,0.513 -2.02534,0.06 -0.39402,-6.051 7.98013,-0.626"
+ class="c17199"
+ id="Williamson, IL" />
+ <path
+ d="m 638.4546,309.45514 7.49697,-0.41 0.62578,2.007 0.39402,6.051 -6.58949,1.118 -3.11645,-5.16 1.18917,-3.606"
+ class="c17077"
+ id="Jackson, IL" />
+ <path
+ d="m 625.66251,297.15314 2.23215,2.032 4.20223,3.429 0.49207,1.054 -2.45323,0.107 0.13015,2.025 -2.94352,1.269 -0.91283,-0.683 -1.51187,-1.47 -0.0464,-0.05 -0.0571,-0.08 -0.32983,-0.451 -0.2086,-0.515 -0.24068,-1.034 -0.0339,-0.965 0.016,-0.233 0.0339,-0.1 0.26208,-0.892 0.0802,-0.16 0.0499,-0.06 1.2391,-3.222"
+ class="c17133"
+ id="Monroe, IL" />
+ <path
+ d="m 638.07841,303.34814 0.37619,6.107 -1.18917,3.606 -4.85476,-1.347 -5.08831,-4.645 2.94352,-1.269 -0.13015,-2.025 2.45323,-0.107 3.51047,-0.191 1.97898,-0.129"
+ class="c17157"
+ id="Randolph, IL" />
+ <path
+ d="m 638.07841,303.34814 7.97656,-0.411 0.47781,2.009 -0.58121,4.099 -7.49697,0.41 -0.37619,-6.107"
+ class="c17145"
+ id="Perry, IL" />
+ <path
+ d="m 654.13137,304.36814 0.42611,6.058 -7.98013,0.626 -0.62578,-2.007 0.58121,-4.099 7.59859,-0.578"
+ class="c17055"
+ id="Franklin, IL" />
+ <path
+ d="m 659.87578,300.89714 0.5723,8.019 0,0.02 -5.96191,0.491 -0.3548,-5.055 -0.19433,-3.038 5.93874,-0.433"
+ class="c17065"
+ id="Hamilton, IL" />
+ <path
+ d="m 666.65069,300.23014 0.66679,0.747 -0.10341,2.411 -0.25673,5.325 -0.0481,0.1 -0.0107,0.02 -0.0392,0.03 -0.0303,0 -0.86112,0.03 -5.51977,0.02 -0.5723,-8.019 3.92232,-0.337 2.85259,-0.33"
+ class="c17193"
+ id="White, IL" />
+ <path
+ d="m 653.60899,296.28514 0.32805,5.045 0.19433,3.038 -7.59859,0.578 -0.47781,-2.009 -0.37796,-6.043 7.93198,-0.609"
+ class="c17081"
+ id="Jefferson, IL" />
+ <path
+ d="m 645.63778,296.22014 0.0392,0.674 0.37796,6.043 -7.97656,0.411 -1.97898,0.129 -0.32092,-4.605 0.60974,-0.612 0.9164,-0.763 0.72384,-0.273 5.3504,-0.925 2.25889,-0.08"
+ class="c17189"
+ id="Washington, IL" />
+ <path
+ d="m 643.27548,290.83414 2.06456,-0.01 0.29774,5.4 -2.25889,0.08 -5.3504,0.925 -0.72384,0.273 -0.9164,0.763 -0.60974,0.612 -0.41006,-5.472 1.80783,-2.17 6.0992,-0.396"
+ class="c17027"
+ id="Clinton, IL" />
+ <path
+ d="m 626.92121,293.81714 8.44724,-0.417 0.41006,5.472 0.32092,4.605 -3.51047,0.191 -0.49207,-1.054 -4.20223,-3.429 -2.23215,-2.032 0.0802,-0.284 1.17847,-3.052"
+ class="c17163"
+ id="St. Clair, IL" />
+ <path
+ d="m 636.03524,285.36514 0.16938,1.863 0.28169,1.003 0.5616,1.407 0.12837,1.592 -1.80783,2.17 -8.44724,0.417 -0.36727,-1.85 1.29437,-1.58 0.0392,-0.218 0.0642,-0.531 -0.016,-0.135 -0.0731,-0.129 -1.74365,-1.053 -0.33874,-0.2 -0.44929,-0.216 -0.45819,-0.139 2.19471,-1.849 7.92307,-0.479 1.04476,-0.07"
+ class="c17119"
+ id="Madison, IL" />
+ <path
+ d="m 642.87255,284.22414 0.40293,6.61 -6.0992,0.396 -0.12837,-1.592 -0.5616,-1.407 -0.28169,-1.003 -0.16938,-1.863 6.83731,-1.141"
+ class="c17005"
+ id="Bond, IL" />
+ <path
+ d="m 645.34004,290.82014 -0.13728,-2.032 2.45323,-0.154 5.39853,-0.474 0.33875,5.087 0.21572,3.038 -7.93198,0.609 -0.0392,-0.674 -0.29774,-5.4"
+ class="c17121"
+ id="Marion, IL" />
+ <path
+ d="m 661.30743,292.77214 1.95224,0.557 0.53843,7.231 -3.92232,0.337 -5.93874,0.433 -0.32805,-5.045 -0.21572,-3.038 7.91416,-0.475"
+ class="c17191"
+ id="Wayne, IL" />
+ <path
+ d="m 667.43693,292.93514 4.64616,-0.348 -1.27832,3.68 -3.46233,4.598 -0.025,0.112 -0.66679,-0.747 0.0321,-7.231 0.75415,-0.06"
+ class="c17185"
+ id="Wabash, IL" />
+ <path
+ d="m 666.68278,292.99914 -0.0321,7.231 -2.85259,0.33 -0.53843,-7.231 3.42311,-0.33"
+ class="c17047"
+ id="Edwards, IL" />
+ <path
+ d="m 673.61636,285.83714 0.0731,0 0.0392,0.06 0.68462,1.471 -0.007,0.562 -0.25138,1.462 -0.17651,0.322 -0.14263,0.12 -1.40668,1.799 -0.34588,0.941 -4.64616,0.348 -0.47424,-6.47 6.65367,-0.628"
+ class="c17101"
+ id="Lawrence, IL" />
+ <path
+ d="m 666.96269,286.46514 0.47424,6.47 -0.75415,0.06 -3.42311,0.33 -1.95224,-0.557 -0.72385,-2.018 -0.0499,-0.344 -0.005,-0.651 0.46711,-0.02 -0.24425,-2.692 5.54473,-0.522 0.66679,-0.06"
+ class="c17159"
+ id="Richland, IL" />
+ <path
+ d="m 652.92615,286.11214 5.89061,-0.378 0.11756,1.487 1.81685,-0.17 0.24425,2.692 -0.46711,0.02 0.005,0.651 0.0499,0.344 0.72385,2.018 -7.91416,0.475 -0.33875,-5.087 -0.12837,-2.048"
+ class="c17025"
+ id="Clay, IL" />
+ <path
+ d="m 664.56116,279.14414 1.01267,-0.11 0.72207,7.495 -7.36165,0.694 -0.59174,-7.499 6.21865,-0.58"
+ class="c17079"
+ id="Jasper, IL" />
+ <path
+ d="m 665.57383,279.03414 5.70519,-0.08 0.36192,1.235 0.83617,0.983 1.27653,2.28 -0.0481,0.733 -0.12836,0.363 -0.10519,0.145 0.14441,1.146 -6.65367,0.628 -0.66679,0.06 -0.72207,-7.495"
+ class="c17033"
+ id="Crawford, IL" />
+ <path
+ d="m 664.80185,271.97714 4.7567,-0.554 0.0107,0.247 2.76344,-0.256 -0.82012,5.143 -0.23355,2.395 -5.70519,0.08 -1.01267,0.11 -0.47424,-4.724 0.71493,-2.443"
+ class="c17023"
+ id="Clark, IL" />
+ <path
+ d="m 664.08692,274.42014 0.47424,4.724 -8.16009,0.759 -0.3745,-4.719 8.06035,-0.764"
+ class="c17035"
+ id="Cumberland, IL" />
+ <path
+ d="m 656.31539,278.87114 0.0842,1.034 1.94293,-0.181 0.47425,6.01 -5.89061,0.378 -2.00038,0.217 -0.50633,-7.04"
+ class="c17049"
+ id="Effingham, IL" />
+ <path
+ d="m 650.41944,279.28914 0.50633,7.04 2.00038,-0.217 0.12837,2.048 -5.39853,0.474 -2.45323,0.154 0.13728,2.032 -2.06456,0.01 -0.40293,-6.61 1.63846,-4.532 5.90843,-0.403"
+ class="c17051"
+ id="Fayette, IL" />
+ <path
+ d="m 645.78219,269.46114 3.76899,-0.256 0.16046,1.681 4.15409,2.385 0.84329,0.312 1.19096,-0.09 0.12659,1.688 0.28882,3.687 -5.89595,0.418 -5.90843,0.403 -0.21573,-3.03 2.01821,-0.08 -0.27278,-4.088 -0.25852,-3.031"
+ class="c17173"
+ id="Shelby, IL" />
+ <path
+ d="m 634.13114,273.32014 2.94708,-0.236 0.3334,4.067 4.91716,-0.337 1.9665,-0.152 0.21573,3.03 -1.63846,4.532 -6.83731,1.141 -1.04476,0.07 -0.85934,-12.118"
+ class="c17135"
+ id="Montgomery, IL" />
+ <path
+ d="m 626.65735,279.86114 0.41006,6.056 -2.19471,1.849 -3.1646,-0.77 -2.89894,-3.311 0.31021,-1.583 0.77912,-0.185 0.49207,0.09 0.10162,0.09 0.0107,0.05 0.30309,0.175 3.04692,-0.239 -0.082,-1.182 2.05922,-0.983 0.82725,-0.05"
+ class="c17083"
+ id="Jersey, IL" />
+ <path
+ d="m 630.18387,273.59914 3.94727,-0.279 0.85934,12.118 -7.92307,0.479 -0.41006,-6.056 -0.47424,-5.964 4.00076,-0.298"
+ class="c17117"
+ id="Macoupin, IL" />
+ <path
+ d="m 612.31594,277.49714 5.94409,-0.241 0.54913,6.429 2.89894,3.311 -3.7672,0.995 -0.95562,-2.562 0,0 -0.0446,-0.161 0.0178,-0.07 0.48315,-0.747 0.0143,-0.289 -0.82725,-2.82 -4.31277,-3.833"
+ class="c17013"
+ id="Calhoun, IL" />
+ <path
+ d="m 626.18311,273.89714 0.47424,5.964 -0.82725,0.05 -2.05922,0.983 0.082,1.182 -3.04692,0.239 -0.30309,-0.175 -0.0107,-0.05 -0.10162,-0.09 -0.49207,-0.09 -0.77912,0.185 -0.31021,1.583 -0.54913,-6.429 0.41006,-2.949 4.91003,-0.249 2.60299,-0.161"
+ class="c17061"
+ id="Greene, IL" />
+ <path
+ d="m 642.15762,266.03114 1.35142,0.191 0.28704,3.359 1.98611,-0.12 0.25852,3.031 0.27278,4.088 -2.01821,0.08 -1.9665,0.152 -4.91716,0.337 -0.3334,-4.067 -0.20681,-2.69 2.27316,-2.507 2.35517,-1.856 0.65788,0"
+ class="c17021"
+ id="Christian, IL" />
+ <path
+ d="m 655.49527,268.77914 7.16179,-0.603 -0.0553,-0.667 0.64896,-0.137 1.03585,-0.116 0.51525,4.721 -0.71493,2.443 -8.06035,0.764 -0.12659,-1.688 -0.40471,-4.717"
+ class="c17029"
+ id="Coles, IL" />
+ <path
+ d="m 664.41675,262.73614 7.05482,-0.69 0.58656,6.364 0.27456,3.004 -2.76344,0.256 -0.0107,-0.247 -4.7567,0.554 -0.51525,-4.721 -0.16759,-1.683 0.43324,-0.813 -0.1355,-2.024"
+ class="c17045"
+ id="Edgar, IL" />
+ <path
+ d="m 655.24745,263.50714 9.1693,-0.771 0.1355,2.024 -0.43324,0.813 0.16759,1.683 -1.03585,0.116 -0.64896,0.137 0.0553,0.667 -7.16179,0.603 -0.27991,-3.238 0.0321,-2.034"
+ class="c17041"
+ id="Douglas, IL" />
+ <path
+ d="m 655.21536,265.54114 0.27991,3.238 0.40471,4.717 -1.19096,0.09 -0.84329,-0.312 -4.15409,-2.385 -0.16046,-1.681 0.89857,-3.293 4.76561,-0.371"
+ class="c17139"
+ id="Moultrie, IL" />
+ <path
+ d="m 649.99155,259.83614 0.4582,6.076 -0.89857,3.293 -3.76899,0.256 -1.98611,0.12 -0.28704,-3.359 -1.35142,-0.191 -0.1765,-2.403 1.0608,-3.134 2.01821,-0.168 3.91162,-0.421 1.0198,-0.07"
+ class="c17115"
+ id="Macon, IL" />
+ <path
+ d="m 635.58418,262.70414 1.65628,-0.128 0.0731,1.004 1.39777,0.256 3.26979,-0.208 0.1765,2.403 -0.65788,0 -2.35517,1.856 -2.27316,2.507 0.20681,2.69 -2.94708,0.236 -3.94727,0.279 -0.016,-0.673 -0.11945,-0.498 -1.18026,-3.296 -0.25852,-1.543 -0.1355,-2.025 -0.0481,-0.676 3.93836,-0.256 1.1553,-0.448 -0.0392,-0.467 0.0143,-0.852 2.08952,-0.161"
+ class="c17167"
+ id="Sangamon, IL" />
+ <path
+ d="m 618.15663,266.09514 10.31746,-0.531 0.1355,2.025 0.25852,1.543 1.18026,3.296 0.11945,0.498 0.016,0.673 -4.00076,0.298 -2.60299,0.161 -0.1355,-2.692 -1.39777,-2.636 -2.0093,-0.707 -2.03247,0.1 0.40828,-1.173 -0.25673,-0.853"
+ class="c17137"
+ id="Morgan, IL" />
+ <path
+ d="m 623.58012,274.05814 -4.91003,0.249 0.12837,-0.41 -0.007,-0.09 -0.13728,-0.466 -0.61688,-1.727 -0.31378,-2.444 0.28169,-1.052 2.03247,-0.1 2.0093,0.707 1.39777,2.636 0.1355,2.692"
+ class="c17171"
+ id="Scott, IL" />
+ <path
+ d="m 618.41336,266.94814 -0.40828,1.173 -0.28169,1.052 0.31378,2.444 0.61688,1.727 0.13728,0.466 0.007,0.09 -0.12837,0.41 -0.41006,2.949 -5.94409,0.241 -4.23431,-4.397 -2.47819,-1.886 -1.04298,-1.656 2.88468,-0.104 5.03661,-0.265 -0.11232,-2.033 6.04393,-0.208"
+ class="c17149"
+ id="Pike, IL" />
+ <path
+ d="m 612.09665,261.14414 2.0503,-0.135 1.75078,-0.06 1.31932,1.745 0.40115,0.778 1.6135,-0.02 -1.07507,2.637 0.25673,0.853 -6.04393,0.208 -0.27278,-6.012"
+ class="c17009"
+ id="Brown, IL" />
+ <path
+ d="m 612.0182,259.09414 0.0784,2.05 0.27278,6.012 0.11232,2.033 -5.03661,0.265 -2.88468,0.104 -1.75256,-4.249 -1.23018,-5.858 10.44048,-0.357"
+ class="c17001"
+ id="Adams, IL" />
+ <path
+ d="m 606.7213,249.05314 4.87793,-0.284 0.33874,8.214 0.0802,2.111 -10.44048,0.357 0.10697,-1.125 1.28367,-3.062 0.53129,-0.187 0.025,-0.01 0.18364,-0.153 0.041,-0.202 0.007,-0.01 0.0464,-2.068 -0.0143,-0.232 -0.0963,-0.28 -0.28882,-0.419 -0.35479,-0.167 -0.0571,-0.193 0.0267,-0.171 0.73097,-1.123 0.0642,-0.07 0.0642,-0.06 0.0535,-0.06 0.15332,-0.1 0.43502,-0.248 0.10341,-0.06 0.025,-0.02 0.90926,-0.319 0.007,0 0.13729,0 0.45819,-0.03 0.56161,-0.01"
+ class="c17067"
+ id="Hancock, IL" />
+ <path
+ d="m 613.59248,248.73914 5.96013,-0.153 0.3958,8.131 -8.01044,0.266 -0.33874,-8.214 1.99325,-0.03"
+ class="c17109"
+ id="Donough, IL" />
+ <path
+ d="m 611.93797,256.98314 8.01044,-0.266 4.49105,1.88 -2.62795,1.544 -2.57981,3.317 -1.6135,0.02 -0.40115,-0.778 -1.31932,-1.745 -1.75078,0.06 -2.0503,0.135 -0.15868,-4.161"
+ class="c17169"
+ id="Schuyler, IL" />
+ <path
+ d="m 621.81151,260.14114 1.31041,1.519 1.55823,-0.02 0.0321,-0.02 1.73651,-0.708 1.60102,-0.658 0.0713,-0.128 0.30487,4.763 0.0481,0.676 -10.31746,0.531 1.07507,-2.637 2.57981,-3.317"
+ class="c17017"
+ id="Cass, IL" />
+ <path
+ d="m 628.12109,260.12514 0.7702,-0.61 4.82088,-0.956 0.62578,0.111 0.62044,0.675 0.62579,3.359 -2.08952,0.161 -0.0143,0.852 0.0392,0.467 -1.1553,0.448 -3.93836,0.256 -0.30487,-4.763"
+ class="c17129"
+ id="Menard, IL" />
+ <path
+ d="m 628.86098,252.46714 3.59783,-0.225 0.21751,2.691 1.94333,-0.154 0.33874,4.566 -0.62044,-0.675 -0.62578,-0.111 -4.82088,0.956 -0.7702,0.61 -0.0713,0.128 -1.60102,0.658 -1.73651,0.708 -0.0321,0.02 -1.55823,0.02 -1.31041,-1.519 2.62795,-1.544 1.19809,-1.075 0.11232,-0.147 0.81299,-1.517 0.21572,-1.309 0.0963,-0.363 0.10519,-0.187 1.62954,-1.38 0.25139,-0.152"
+ class="c17125"
+ id="Mason, IL" />
+ <path
+ d="m 640.51203,254.25914 2.06278,0.852 0.46711,5.383 -1.0608,3.134 -3.26979,0.208 -1.39777,-0.256 -0.0731,-1.004 -1.65628,0.128 -0.62579,-3.359 -0.33874,-4.566 5.89238,-0.52"
+ class="c17107"
+ id="Logan, IL" />
+ <path
+ d="m 652.55888,254.37114 -2.56733,5.465 -1.0198,0.07 -3.91162,0.421 -2.01821,0.168 -0.46711,-5.383 9.98407,-0.74"
+ class="c17039"
+ id="De Witt, IL" />
+ <path
+ d="m 652.55888,254.37114 1.9986,-0.16 0.68997,9.296 -0.0321,2.034 -4.76561,0.371 -0.4582,-6.076 2.56733,-5.465"
+ class="c17147"
+ id="Piatt, IL" />
+ <path
+ d="m 654.33284,251.50314 9.14434,-0.771 0.40828,4.01 -0.23356,0.02 0.76485,7.971 -9.1693,0.771 -0.68997,-9.296 -0.22464,-2.708"
+ class="c17019"
+ id="Champaign, IL" />
+ <path
+ d="m 656.90195,237.45014 1.97899,-0.234 1.21235,11.748 3.16638,-0.225 0.21751,1.993 -9.14434,0.771 -0.3851,-5.048 3.87952,-0.328 -0.92531,-8.677"
+ class="c17053"
+ id="Ford, IL" />
+ <path
+ d="m 645.58073,243.94014 5.95657,-0.553 0.18363,2.009 0.24069,1.236 1.98612,-0.177 0.3851,5.048 0.22464,2.708 -1.9986,0.16 -9.98407,0.74 -2.06278,-0.852 -0.53843,-6.212 2.34091,-0.226 1.4994,-0.827 0.96453,-0.94 0.80229,-2.114"
+ class="c17113"
+ id="McLean, IL" />
+ <path
+ d="m 634.78189,244.84014 3.88844,-0.282 0.0963,1.352 0.16937,1.72 1.03763,0.417 0.53843,6.212 -5.89238,0.52 -1.94333,0.154 -0.21751,-2.691 -3.59783,0.225 0.78446,-1.842 3.57822,-2.289 1.62954,-2.46 0.12124,-0.408 -0.0945,-0.427 -0.0981,-0.201"
+ class="c17179"
+ id="Tazewell, IL" />
+ <path
+ d="m 643.2523,240.10814 1.99147,-0.192 0.33696,4.024 -0.80229,2.114 -0.96453,0.94 -1.4994,0.827 -2.34091,0.226 -1.03763,-0.417 -0.16937,-1.72 -0.0963,-1.352 -3.88844,0.282 1.15708,-4.106 7.31333,-0.626"
+ class="c17203"
+ id="Woodford, IL" />
+ <path
+ d="m 632.9901,239.71414 2.94887,1.02 -1.15708,4.106 0.0981,0.201 0.0945,0.427 -0.12124,0.408 -1.62954,2.46 -3.57822,2.289 -0.0874,-1.549 -0.0945,-1.022 -2.00217,0.1 -0.0731,-2.003 -0.37619,-6.067 5.97796,-0.369"
+ class="c17143"
+ id="Peoria, IL" />
+ <path
+ d="m 627.38833,246.15014 0.0731,2.003 2.00217,-0.1 0.0945,1.022 0.0874,1.549 -0.78446,1.842 -0.25139,0.152 -1.62954,1.38 -0.10519,0.187 -0.0963,0.363 -0.21572,1.309 -0.81299,1.517 -0.11232,0.147 -1.19809,1.075 -4.49105,-1.88 -0.3958,-8.131 -0.0963,-2.01 7.93199,-0.426"
+ class="c17057"
+ id="Fulton, IL" />
+ <path
+ d="m 613.1111,238.72714 5.96192,-0.234 0.47959,10.093 -5.96013,0.153 -0.48138,-10.012"
+ class="c17187"
+ id="Warren, IL" />
+ <path
+ d="m 610.29773,238.83914 2.81337,-0.112 0.48138,10.012 -1.99325,0.03 -4.87793,0.284 1.207,-1.416 0.11945,-2.603 0.0642,-0.297 1.3425,-1.915 0.18542,-0.182 0.49742,-0.282 0.0963,-0.144 0.1462,-0.683 0.0695,-1.872 -0.0874,-0.62 -0.0642,-0.2"
+ class="c17071"
+ id="Henderson, IL" />
+ <path
+ d="m 607.72505,232.87514 11.08411,-0.465 0.26386,6.083 -5.96192,0.234 -2.81337,0.112 -0.016,-0.06 0.016,-0.555 -0.80942,-1.326 -0.14619,-0.152 -0.13907,-0.06 -0.22999,0.03 -0.54912,-0.273 -1.16422,-1.399 -0.007,-0.02 -0.0178,-0.191 0.49029,-1.963"
+ class="c17131"
+ id="Mercer, IL" />
+ <path
+ d="m 626.76967,236.04314 0.24247,4.04 0.37619,6.067 -7.93199,0.426 -0.38332,-8.083 -0.0891,-2.016 7.78579,-0.434"
+ class="c17095"
+ id="Knox, IL" />
+ <path
+ d="m 628.8271,233.94514 3.88844,1.736 0.27456,4.033 -5.97796,0.369 -0.24247,-4.04 2.05743,-2.098"
+ class="c17175"
+ id="Stark, IL" />
+ <path
+ d="m 632.71554,235.68114 2.96848,-0.201 2.34982,-0.153 -0.0303,0.563 -0.0339,0.153 -0.10162,0.143 -0.16938,0.09 -0.0963,0.11 3.37675,-0.251 2.27316,3.972 -7.31333,0.626 -2.94887,-1.02 -0.27456,-4.033"
+ class="c17123"
+ id="Marshall, IL" />
+ <path
+ d="m 640.60831,231.37914 0.37083,4.757 -3.37675,0.251 0.0963,-0.11 0.16938,-0.09 0.10162,-0.143 0.0339,-0.153 0.0303,-0.563 -2.34982,0.153 -0.14798,-1.977 2.32308,-1.753 0.93244,-0.513 0.2086,-0.02 1.60815,0.166"
+ class="c17155"
+ id="Putnam, IL" />
+ <path
+ d="m 650.87051,235.30314 5.73549,-0.595 0.29595,2.742 0.92531,8.677 -3.87952,0.328 -1.98612,0.177 -0.24069,-1.236 -0.18363,-2.009 -5.95657,0.553 -0.33696,-4.024 -0.29774,-4.117 5.92448,-0.496"
+ class="c17105"
+ id="Livingston, IL" />
+ <path
+ d="m 668.93989,232.43314 0.32983,3.592 -10.38878,1.191 -1.97899,0.234 -0.29595,-2.742 -0.041,-2.033 2.98274,-0.331 0.86826,-1.334 -0.082,-0.761 8.33313,-0.861 0.27278,3.045"
+ class="c17091"
+ id="Kankakee, IL" />
+ <path
+ d="m 655.9392,226.65614 0.62579,6.019 0.041,2.033 -5.73549,0.595 -0.79873,-8.044 5.86742,-0.603"
+ class="c17063"
+ id="Grundy, IL" />
+ <path
+ d="m 655.27954,220.62914 4.03464,0.57 0.11232,1.015 4.38051,3.615 4.52136,-0.401 0.33874,3.96 -8.33313,0.861 0.082,0.761 -0.86826,1.334 -2.98274,0.331 -0.62579,-6.019 -0.65966,-6.027"
+ class="c17197"
+ id="Will, IL" />
+ <path
+ d="m 655.27241,220.62914 0.007,0 0.65966,6.027 -5.86742,0.603 -0.42432,-4.019 -0.15155,-2.032 5.7765,-0.579"
+ class="c17093"
+ id="Kendall, IL" />
+ <path
+ d="m 643.9191,223.75614 5.72836,-0.516 0.42432,4.019 0.79873,8.044 -5.92448,0.496 0.29774,4.117 -1.99147,0.192 -2.27316,-3.972 -0.37083,-4.757 -0.58479,-7.35 1.96473,-0.1 1.93085,-0.176"
+ class="c17099"
+ id="La Salle, IL" />
+ <path
+ d="m 640.10019,225.03414 0.50812,6.345 -1.60815,-0.166 -0.2086,0.02 -0.93244,0.513 -2.32308,1.753 0.14798,1.977 -2.96848,0.201 -3.88844,-1.736 -0.60261,-8.069 3.93658,-0.289 7.93912,-0.553"
+ class="c17011"
+ id="Bureau, IL" />
+ <path
+ d="m 628.22449,225.87614 0.60261,8.069 -2.05743,2.098 -7.78579,0.434 -0.17472,-4.067 -0.13907,-2.995 1.0929,-1.136 0.20147,-0.153 0.30308,-0.136 0.81299,-0.192 0.6347,-0.104 0.88431,-0.467 0.15332,-0.348 0.0731,-0.401 -0.0267,-0.142 -0.0963,-0.131 5.52155,-0.329"
+ class="c17073"
+ id="Henry, IL" />
+ <path
+ d="m 621.4585,221.65714 -0.0642,0.442 0.016,0.421 0.19255,0.922 0.25674,0.522 0.33161,0.305 0.33518,0.121 0.28348,0.177 0.22464,0.242 0.0392,0.312 0.009,0.282 -0.0481,0.523 -0.041,0.07 -0.29061,0.206 0.0963,0.131 0.0267,0.142 -0.0731,0.401 -0.15332,0.348 -0.88431,0.467 -0.6347,0.104 -0.81299,0.192 -0.30308,0.136 -0.20147,0.153 -1.0929,1.136 0.13907,2.995 -11.08411,0.465 0,0 0.20325,-0.788 0.23891,-0.982 0.016,-0.05 0.12124,-0.171 0,0 0.016,0 0.18364,-0.12 0.6454,-0.233 2.41044,-0.658 1.05189,0 0.24782,0.03 0.58656,-0.02 1.38351,-0.353 3.24661,-1.608 1.0198,-1.189 0.89143,-1.198 0.26565,-2.505 1.20522,-1.352"
+ class="c17161"
+ id="Rock Island, IL" />
+ <path
+ d="m 631.70465,218.27514 1.13926,-0.09 3.43202,-0.252 0.025,0.339 7.119,-0.602 0.49921,6.083 -1.93085,0.176 -1.96473,0.1 0.0767,1.005 -7.93912,0.553 -0.45642,-7.312"
+ class="c17103"
+ id="Lee, IL" />
+ <path
+ d="m 630.69198,217.67314 1.01267,0.602 0.45642,7.312 -3.93658,0.289 -5.52155,0.329 0.29061,-0.206 0.041,-0.07 0.0481,-0.522 -0.009,-0.282 -0.0392,-0.312 -0.22464,-0.242 -0.28348,-0.177 -0.33518,-0.121 -0.33161,-0.305 -0.25674,-0.522 -0.19255,-0.922 -0.016,-0.421 0.0642,-0.442 1.32646,-3.437 7.90702,-0.547"
+ class="c17195"
+ id="Whiteside, IL" />
+ <path
+ d="m 630.24805,211.47514 0.44393,6.198 -7.90702,0.547 -0.18542,-2.405 -2.97205,-3.541 6.71786,-0.476 3.9027,-0.323"
+ class="c17015"
+ id="Carroll, IL" />
+ <path
+ d="m 635.19195,211.06914 3.7779,-0.314 0.0874,1.243 3.94371,-0.337 0.41897,6.012 -7.119,0.602 -0.025,-0.339 -3.43202,0.252 -1.13926,0.09 -1.01267,-0.602 -0.44393,-6.198 4.9439,-0.406"
+ class="c17141"
+ id="Ogle, IL" />
+ <path
+ d="m 648.94144,211.17914 0.55447,10.029 0.15155,2.032 -5.72836,0.516 -0.49921,-6.083 -0.41897,-6.012 3.96332,-0.328 1.9772,-0.154"
+ class="c17037"
+ id="DeKalb, IL" />
+ <path
+ d="m 654.87127,210.69814 -0.10519,3.904 0.50633,6.027 -5.7765,0.579 -0.55447,-10.029 5.92983,-0.481"
+ class="c17089"
+ id="Kane, IL" />
+ <path
+ d="m 655.27241,220.62914 -0.50633,-6.027 3.92053,-0.472 1.69551,-0.169 0.2496,0.811 0.57943,5.543 -1.89697,0.884 -4.03464,-0.57 -0.007,0"
+ class="c17043"
+ id="DuPage, IL" />
+ <path
+ d="m 655.52914,210.64114 7.4417,-0.594 1.69551,2.282 0.92353,2.587 0.20146,0.701 0.17651,0.754 0.16937,0.537 0.0642,0.144 0.12124,0.266 0.49742,0.902 1.04476,1.71 0.46355,5.498 -4.52136,0.401 -4.38051,-3.615 -0.11232,-1.015 1.89697,-0.884 -0.57943,-5.543 -0.2496,-0.811 -1.69551,0.169 -3.92053,0.472 0.10519,-3.904 0.65787,-0.06"
+ class="c17031"
+ id="Cook, IL" />
+ <path
+ d="m 654.86235,202.75914 6.73568,-0.465 0.007,0 0.0802,0.456 0.0481,2.016 -0.15332,0.476 -0.0642,0.08 -0.11232,0.729 0,0.677 0.16046,0.715 0.35479,0.851 0.25495,0.531 0.79694,1.221 -7.4417,0.594 -0.66679,-7.882"
+ class="c17097"
+ id="Lake, IL" />
+ <path
+ d="m 653.10979,202.93514 1.75256,-0.176 0.66679,7.882 -0.65787,0.06 -5.92983,0.481 -1.9772,0.154 -0.6347,-7.834 6.78025,-0.564"
+ class="c17111"
+ id="McHenry, IL" />
+ <path
+ d="m 645.16354,203.57914 1.166,-0.08 0.6347,7.834 -3.96332,0.328 -0.60083,-7.898 2.76345,-0.184"
+ class="c17007"
+ id="Boone, IL" />
+ <path
+ d="m 642.40009,203.76314 0.60083,7.898 -3.94371,0.337 -0.0874,-1.243 -3.7779,0.314 -0.5723,-6.875 0.60261,-0.04 7.17783,-0.394"
+ class="c17201"
+ id="Winnebago, IL" />
+ <path
+ d="m 627.26887,204.57414 7.35078,-0.38 0.5723,6.875 -4.9439,0.406 -3.9027,0.323 -0.57944,-7.137 1.50296,-0.09"
+ class="c17177"
+ id="Stephenson, IL" />
+ <path
+ d="m 625.76591,204.66114 0.57944,7.137 -6.71786,0.476 -0.7078,-0.226 -0.312,-0.202 -0.29061,-0.233 -0.016,-0.01 -0.48316,-0.602 -0.0125,-0.03 -0.23534,-0.53 0,-0.146 0.0963,-0.216 0.0963,-0.65 -0.009,-0.09 -0.0481,-0.07 -1.01089,-1.171 -0.0428,-0.04 -0.007,0 -1.44412,-1.006 -1.13569,-0.586 -0.39223,-0.282 -0.13728,-0.143 -0.0392,-0.115 -0.016,-0.129 0.007,-0.05 0.23534,-0.403 3.61388,-0.178 8.4294,-0.491"
+ class="c17085"
+ id="Jo Daviess, IL" />
+ <path
+ d="m 677.91486,218.94214 1.09646,10.913 -0.14619,0.192 -0.49207,0.275 -0.15155,-0.04 -1.32645,-0.841 -0.93066,-0.323 -0.34588,-0.09 -0.19255,0.04 -0.97166,0.563 -0.40293,0.578 -0.87717,-8.799 4.74065,-2.467"
+ class="c18127"
+ id="Porter, IN" />
+ <path
+ d="m 667.86482,219.93014 5.30939,1.479 0.87717,8.799 -0.92531,0.628 -4.18618,1.597 -0.27278,-3.045 -0.80229,-9.458"
+ class="c18089"
+ id="Lake, IN" />
+ <path
+ d="m 690.04194,298.01914 1.94333,-0.272 2.09844,1.18 0.2906,2.542 -0.35479,1.211 -0.10519,0.01 -0.36905,0.07 -0.0963,0.06 -0.0731,0.104 -0.0303,0.251 0.1355,1.373 -1.17313,2.674 -0.49921,0.387 -0.2389,0.08 -0.13728,0 -3.19669,-3.316 -0.0588,-4.814 -0.11054,-1.012 2.02534,-0.17 -0.0499,-0.346"
+ class="c18123"
+ id="Perry, IN" />
+ <path
+ d="m 688.17706,299.54714 0.0588,4.814 -2.79732,1.854 -1.11786,1.047 -1.3425,2.425 -2.62617,-1.751 -0.0874,-1.109 0.0303,-0.09 3.04514,-4.598 0.80408,-2.168 4.03285,-0.426"
+ class="c18147"
+ id="Spencer, IN" />
+ <path
+ d="m 678.7118,299.49214 4.38051,-0.1 1.0519,0.579 -0.80408,2.168 -3.04514,4.598 -0.0303,0.09 0.0874,1.109 -0.64361,-0.45 -2.75632,-0.739 -0.1765,-2.17 -0.41898,0.04 -0.15867,-2.009 -0.009,-1.013 -0.0571,-0.827 2.67074,-0.257 -0.0909,-1.02"
+ class="c18173"
+ id="Warrick, IN" />
+ <path
+ d="m 672.23464,301.87614 3.9544,-0.28 0.009,1.013 0.15867,2.009 0.41898,-0.04 0.1765,2.17 -4.39477,1.326 -0.3227,-6.197"
+ class="c18163"
+ id="Vanderburgh, IN" />
+ <path
+ d="m 667.34244,300.86514 4.8922,1.011 0.3227,6.197 -4.07565,0.323 -1.60636,2.53 -0.90748,-2.035 0.86112,-0.03 0.0303,0 0.0392,-0.03 0.0107,-0.02 0.0481,-0.1 0.25673,-5.325 0.10341,-2.411 0.025,-0.112"
+ class="c18129"
+ id="Posey, IN" />
+ <path
+ d="m 670.80477,296.26714 4.70143,-3.172 0.13728,1.565 0.39223,0.651 1.05368,1.271 0.2496,-0.09 0.94671,-0.16 0.15154,0.06 0.36549,4.115 -2.67074,0.257 0.0571,0.827 -3.9544,0.28 -4.8922,-1.011 3.46233,-4.598"
+ class="c18051"
+ id="Gibson, IN" />
+ <path
+ d="m 679.41069,292.46814 3.07901,0.417 0.60261,6.509 -4.38051,0.1 -0.27456,-3.095 -0.15154,-0.06 -0.94671,0.16 -0.2496,0.09 -1.05368,-1.271 -0.39223,-0.651 -0.13728,-1.565 0.65075,-0.233 1.18204,-0.186 0.11945,0.03 0.97345,0.656 0.22999,-0.06 0.30666,-0.273 0.23355,-0.234 0.2086,-0.329"
+ class="c18125"
+ id="Pike, IN" />
+ <path
+ d="m 689.39832,291.95214 0.31379,3.028 0.32983,3.039 0.0499,0.346 -2.02534,0.17 0.11054,1.012 -4.03285,0.426 -1.0519,-0.579 -0.60261,-6.509 2.65826,-0.01 4.25036,-0.918"
+ class="c18037"
+ id="Dubois, IN" />
+ <path
+ d="m 696.28555,293.66614 0.95562,-0.09 0.40293,6.776 -3.62458,2.329 0.35479,-1.211 -0.2906,-2.542 -2.09844,-1.18 -1.94333,0.272 -0.32983,-3.039 4.08277,-0.448 2.55485,-0.2 -0.0642,-0.666"
+ class="c18025"
+ id="Crawford, IN" />
+ <path
+ d="m 701.20271,293.27014 0.21751,2.009 0.39401,0.635 0.0571,0 0.73098,0.538 0.36905,0.305 1.14995,1.617 0.0232,0.177 -0.44215,4.041 -0.86826,0.296 -0.53664,0.177 -2.59586,-0.128 -0.12837,-0.02 -0.78089,-0.307 -0.81121,-0.537 -0.0874,-0.06 -0.041,-0.06 -0.10519,-0.161 -0.12836,-0.449 -0.0161,-0.04 -0.007,-0.105 -0.007,-0.161 0,-0.04 0.0553,-0.649 -0.40293,-6.776 3.96154,-0.305"
+ class="c18061"
+ id="Harrison, IN" />
+ <path
+ d="m 701.87841,293.19114 0.0178,0.168 0.51347,0.119 2.8205,-0.319 0.98058,1.157 -0.39402,1.478 -1.67233,2.757 -0.0232,-0.177 -1.14995,-1.617 -0.36905,-0.305 -0.73098,-0.538 -0.0571,0 -0.39401,-0.635 -0.21751,-2.009 0.6757,-0.08"
+ class="c18043"
+ id="Floyd, IN" />
+ <path
+ d="m 708.94928,288.05014 2.58872,0.173 0.0553,1.449 -3.2787,3.712 -2.4978,2.41 0.39402,-1.478 -0.98058,-1.157 -2.8205,0.319 -0.51347,-0.119 -0.0178,-0.168 -0.14441,-1.624 0.77912,-0.394 1.10894,-0.15 0.29774,-0.379 0.25673,-0.701 -0.041,-0.319 4.81375,-1.574"
+ class="c18019"
+ id="Clark, IN" />
+ <path
+ d="m 715.80263,279.30514 4.26106,-2.418 1.77395,2.828 -6.04036,0.02 0.005,-0.433"
+ class="c18115"
+ id="Ohio, IN" />
+ <path
+ d="m 715.79728,279.73814 6.04036,-0.02 0.24247,1.003 -3.89022,2.63 -2.92391,2.001 -0.61865,-5.11 1.14995,-0.501"
+ class="c18155"
+ id="Switzerland, IN" />
+ <path
+ d="m 710.37914,280.73414 4.26819,-0.495 0.61865,5.11 -2.48353,-0.862 -1.24445,3.736 -2.58872,-0.173 -0.20147,-1.673 -0.68997,-0.256 -0.53129,-0.291 -0.57587,-0.612 -0.3958,-0.506 -0.14441,-1.262 1.2694,-0.344 0.56161,-0.901 0.17828,-0.543 0.32092,-0.728 1.63846,-0.2"
+ class="c18077"
+ id="Jefferson, IN" />
+ <path
+ d="m 706.41047,283.45014 0.14441,1.262 0.3958,0.506 0.57587,0.612 0.53129,0.291 0.68997,0.256 0.20147,1.673 -4.81375,1.574 -1.14817,-3.915 1.47087,-1.863 1.95224,-0.396"
+ class="c18143"
+ id="Scott, IN" />
+ <path
+ d="m 696.06982,285.75114 6.91754,-0.04 1.14817,3.915 0.041,0.319 -0.25673,0.701 -0.29774,0.379 -1.10894,0.15 -0.77912,0.394 0.14441,1.624 -0.6757,0.08 -3.96154,0.305 -0.95562,0.09 -0.62579,-6.117 0.41006,-1.798"
+ class="c18175"
+ id="Washington, IN" />
+ <path
+ d="m 695.65976,287.54914 0.62579,6.117 0.0642,0.666 -2.55485,0.2 -4.08277,0.448 -0.31379,-3.028 -0.37618,-3.696 6.63762,-0.707"
+ class="c18117"
+ id="Orange, IN" />
+ <path
+ d="m 684.61845,283.61014 3.9134,-0.39 0.49029,5.036 0.37618,3.696 -4.25036,0.918 -0.52951,-9.26"
+ class="c18101"
+ id="Martin, IN" />
+ <path
+ d="m 681.17929,283.94214 3.43916,-0.332 0.52951,9.26 -2.65826,0.01 -3.07901,-0.417 -0.80229,-3.522 0.24068,-1.886 0.31379,-0.62 1.50296,-2.088 0.51346,-0.41"
+ class="c18027"
+ id="Daviess, IN" />
+ <path
+ d="m 678.65653,284.08614 2.52276,-0.144 -0.51346,0.41 -1.50296,2.088 -0.31379,0.62 -0.24068,1.886 0.80229,3.522 -0.2086,0.329 -0.23355,0.234 -0.30666,0.273 -0.22999,0.06 -0.97345,-0.656 -0.11945,-0.03 -1.18204,0.186 -0.65075,0.233 -4.70143,3.172 1.27832,-3.68 0.34588,-0.941 1.40668,-1.799 0.14263,-0.12 0.17651,-0.322 0.25138,-1.462 0.007,-0.562 -0.68462,-1.471 -0.0392,-0.06 -0.0731,0 -0.14441,-1.146 5.18458,-0.605"
+ class="c18083"
+ id="Knox, IN" />
+ <path
+ d="m 677.91486,275.98714 0.17829,2.009 0.56338,6.09 -5.18458,0.605 0.10519,-0.145 0.12836,-0.363 0.0481,-0.733 -1.27653,-2.28 -0.83617,-0.983 -0.36192,-1.235 0.23355,-2.395 6.40229,-0.57"
+ class="c18153"
+ id="Sullivan, IN" />
+ <path
+ d="m 681.38076,277.77814 6.55739,-0.577 0.40115,3.993 0.19255,2.026 -3.9134,0.39 -3.43916,0.332 -2.52276,0.144 -0.56338,-6.09 3.28761,-0.218"
+ class="c18055"
+ id="Greene, IN" />
+ <path
+ d="m 688.3393,281.19414 6.44329,-0.611 1.28723,5.168 -0.41006,1.798 -6.63762,0.707 -0.49029,-5.036 -0.19255,-2.026"
+ class="c18093"
+ id="Lawrence, IN" />
+ <path
+ d="m 698.83327,278.78214 4.91003,-0.938 0.71493,6.002 -1.47087,1.863 -6.91754,0.04 -1.28723,-5.168 -0.14441,-1.334 4.19509,-0.467"
+ class="c18071"
+ id="Jackson, IN" />
+ <path
+ d="m 709.74622,274.21814 0.63292,6.516 -1.63846,0.2 -0.32092,0.728 -0.17828,0.543 -0.56161,0.901 -1.2694,0.344 -1.95224,0.396 -0.71493,-6.002 1.82209,-1.656 4.18083,-1.97"
+ class="c18079"
+ id="Jennings, IN" />
+ <path
+ d="m 716.02727,270.90014 -0.22464,8.405 -0.005,0.433 -1.14995,0.501 -4.26819,0.495 -0.63292,-6.516 2.33021,-1.961 3.95084,-1.357"
+ class="c18137"
+ id="Ripley, IN" />
+ <path
+ d="m 716.02727,270.90014 4.32524,-0.458 0.52951,4.598 -0.81833,1.847 -4.26106,2.418 0.22464,-8.405"
+ class="c18029"
+ id="Dearborn, IN" />
+ <path
+ d="m 719.83905,265.44314 0.51346,4.999 -4.32524,0.458 -3.95084,1.357 -0.4992,-4.258 -0.20147,-1.654 4.58733,-0.547 3.87596,-0.355"
+ class="c18047"
+ id="Franklin, IN" />
+ <path
+ d="m 705.75972,268.65914 5.81751,-0.66 0.4992,4.258 -2.33021,1.961 -4.18083,1.97 -0.51347,-5.054 0.7078,-2.475"
+ class="c18031"
+ id="Decatur, IN" />
+ <path
+ d="m 705.05192,271.13414 0.51347,5.054 -1.82209,1.656 -4.91003,0.938 -0.80229,-6.766 2.33734,-0.312 4.6836,-0.57"
+ class="c18005"
+ id="Bartholomew, IN" />
+ <path
+ d="m 695.11242,272.38014 2.91856,-0.364 0.80229,6.766 -4.19509,0.467 -1.79892,-6.589 2.27316,-0.28"
+ class="c18013"
+ id="Brown, IN" />
+ <path
+ d="m 688.44449,272.90814 4.39477,-0.248 1.79892,6.589 0.14441,1.334 -6.44329,0.611 -0.40115,-3.993 0.50634,-4.293"
+ class="c18105"
+ id="Monroe, IN" />
+ <path
+ d="m 682.73039,270.54514 4.44291,-0.36 1.27119,2.723 -0.50634,4.293 -6.55739,0.577 -0.36192,-4.032 1.95046,-0.17 -0.23891,-3.031"
+ class="c18119"
+ id="Owen, IN" />
+ <path
+ d="m 677.89346,267.88714 3.26801,-0.258 1.56892,2.916 0.23891,3.031 -1.95046,0.17 0.36192,4.032 -3.28761,0.218 -0.17829,-2.009 -0.52773,-6.044 0.67392,-0.04 -0.16759,-2.017"
+ class="c18021"
+ id="Clay, IN" />
+ <path
+ d="m 677.89346,267.88714 0.16759,2.017 -0.67392,0.04 0.52773,6.044 -6.40229,0.57 0.82012,-5.143 -0.27456,-3.004 2.62082,-0.25 3.21451,-0.273"
+ class="c18167"
+ id="Vigo, IN" />
+ <path
+ d="m 673.16708,256.20914 0.12836,4.06 0.80408,1.052 0.22642,0.298 0.31914,0.634 -0.15155,4.113 0.18542,1.794 -2.62082,0.25 -0.58656,-6.364 -0.51347,-6.115 2.20898,0.278"
+ class="c18165"
+ id="Vermillion, IN" />
+ <path
+ d="m 679.04163,259.73014 1.60815,1.858 0.51169,6.041 -3.26801,0.258 -3.21451,0.273 -0.18542,-1.794 0.15155,-4.113 -0.31914,-0.634 -0.22642,-0.298 -0.80408,-1.052 5.74619,-0.539"
+ class="c18121"
+ id="Parke, IN" />
+ <path
+ d="m 680.64978,261.58814 5.48768,-0.492 0.14441,-0.02 0.30487,3.158 0.52416,2.226 0.29596,0.651 -0.23356,3.07 -4.44291,0.36 -1.56892,-2.916 -0.51169,-6.041"
+ class="c18133"
+ id="Putnam, IN" />
+ <path
+ d="m 694.45454,265.64414 0.65788,6.736 -2.27316,0.28 -4.39477,0.248 -1.27119,-2.723 0.23356,-3.07 3.35179,-0.33 -0.0731,-0.674 2.26602,-0.272 0.16938,-0.02 1.33358,-0.179"
+ class="c18109"
+ id="Morgan, IN" />
+ <path
+ d="m 699.65339,264.99514 0.71493,6.709 -2.33734,0.312 -2.91856,0.364 -0.65788,-6.736 5.19885,-0.649"
+ class="c18081"
+ id="Johnson, IN" />
+ <path
+ d="m 699.51611,263.63514 5.56077,-0.633 0.68284,5.657 -0.7078,2.475 -4.6836,0.57 -0.71493,-6.709 -0.13728,-1.36"
+ class="c18145"
+ id="Shelby, IN" />
+ <path
+ d="m 705.48516,260.90414 5.15249,-0.596 0.93958,7.691 -5.81751,0.66 -0.68284,-5.657 0.40828,-2.098"
+ class="c18139"
+ id="Rush, IN" />
+ <path
+ d="m 710.63765,260.30814 1.39777,-0.176 0.65967,-0.07 0.16759,1.68 2.62795,-0.28 0.47246,4.338 -4.58733,0.547 -0.73811,-6.037"
+ class="c18041"
+ id="Fayette, IN" />
+ <path
+ d="m 715.49063,261.46014 3.80821,-0.726 0.41897,3.666 0.12124,1.043 -3.87596,0.355 -0.47246,-4.338"
+ class="c18161"
+ id="Union, IN" />
+ <path
+ d="m 718.60173,254.31414 0.2086,2.034 0.48851,4.386 -3.80821,0.726 -2.62795,0.28 -0.16759,-1.68 -0.65967,0.07 -0.22642,-5.014 6.79273,-0.804"
+ class="c18177"
+ id="Wayne, IN" />
+ <path
+ d="m 705.10897,254.17914 6.29354,-0.701 0.40649,1.64 0.22642,5.014 -1.39777,0.176 -5.15249,0.596 -0.0463,-3.705 -0.32984,-3.02"
+ class="c18065"
+ id="Henry, IN" />
+ <path
+ d="m 705.43881,257.19914 0.0463,3.705 -0.40828,2.098 -5.56077,0.633 -0.32092,-5.325 1.26941,-0.516 4.97421,-0.595"
+ class="c18059"
+ id="Hancock, IN" />
+ <path
+ d="m 699.19519,258.31014 0.32092,5.325 0.13728,1.36 -5.19885,0.649 -1.33358,0.179 -0.68463,-6.736 1.4887,-0.191 5.27016,-0.586"
+ class="c18097"
+ id="Marion, IN" />
+ <path
+ d="m 692.43633,259.08714 0.68463,6.736 -0.16938,0.02 -2.26602,0.272 0.0731,0.674 -3.35179,0.33 -0.29596,-0.651 -0.52416,-2.226 -0.30487,-3.158 -0.14441,0.02 -0.12837,-1.333 6.42724,-0.676"
+ class="c18063"
+ id="Hendricks, IN" />
+ <path
+ d="m 693.28855,253.02214 0.63648,5.874 -1.4887,0.191 -6.42724,0.676 -0.59548,-5.898 7.87494,-0.843"
+ class="c18011"
+ id="Boone, IN" />
+ <path
+ d="m 693.1994,252.20914 6.5984,-0.762 0.6668,6.347 -1.26941,0.516 -5.27016,0.586 -0.63648,-5.874 -0.0892,-0.813"
+ class="c18057"
+ id="Hamilton, IN" />
+ <path
+ d="m 710.71788,248.19014 7.17427,-0.908 0.70958,7.032 -6.79273,0.804 -0.40649,-1.64 -0.68463,-5.288"
+ class="c18135"
+ id="Randolph, IN" />
+ <path
+ d="m 710.50929,246.52814 0.20859,1.662 0.68463,5.288 -6.29354,0.701 -0.80229,-6.961 2.3213,-0.248 3.88131,-0.442"
+ class="c18035"
+ id="Delaware, IN" />
+ <path
+ d="m 704.30668,247.21814 0.80229,6.961 0.32984,3.02 -4.97421,0.595 -0.6668,-6.347 -0.40292,-3.674 4.9118,-0.555"
+ class="c18095"
+ id="Madison, IN" />
+ <path
+ d="m 699.39488,247.77314 0.40292,3.674 -6.5984,0.762 -0.3851,-3.641 6.51639,-1.446 0.0642,0.651"
+ class="c18159"
+ id="Tipton, IN" />
+ <path
+ d="m 684.85914,248.01314 5.51976,-0.545 1.14995,-0.112 0.10519,0.996 0.52952,0.289 0.65074,-0.07 0.3851,3.641 0.0892,0.813 -7.87494,0.843 -0.0802,-0.827 -0.47424,-5.025"
+ class="c18023"
+ id="Clinton, IN" />
+ <path
+ d="m 685.33338,253.03814 0.0802,0.827 0.59548,5.898 0.12837,1.333 -5.48768,0.492 -1.60815,-1.858 -0.59548,-6.042 6.88723,-0.65"
+ class="c18107"
+ id="Montgomery, IN" />
+ <path
+ d="m 678.44615,253.68814 0.59548,6.042 -5.74619,0.539 -0.12836,-4.06 -0.54556,-0.586 -0.0891,-0.216 0.016,-0.121 0.23534,-0.448 2.77058,-2.909 0.42611,-0.353 2.14479,-1.384 0.32091,3.496"
+ class="c18045"
+ id="Fountain, IN" />
+ <path
+ d="m 717.20396,241.24914 0.56874,5.056 0.11945,0.977 -7.17427,0.908 -0.20859,-1.662 -0.16938,-4.364 2.28386,-0.289 4.58019,-0.626"
+ class="c18075"
+ id="Jay, IN" />
+ <path
+ d="m 706.09668,242.65614 4.24323,-0.492 0.16938,4.364 -3.88131,0.442 -0.5313,-4.314"
+ class="c18009"
+ id="Blackford, IN" />
+ <path
+ d="m 702.57908,241.03214 3.268,-0.376 0.2496,2 0.5313,4.314 -2.3213,0.248 -4.9118,0.555 -0.0642,-0.651 -0.4261,-3.655 -0.22286,-1.986 3.89735,-0.449"
+ class="c18053"
+ id="Grant, IN" />
+ <path
+ d="m 693.71465,244.07714 5.18994,-0.61 0.4261,3.655 -6.51639,1.446 -0.65074,0.07 -0.52952,-0.289 -0.10519,-0.996 -1.14995,0.112 -0.27278,-2.981 3.60853,-0.41"
+ class="c18067"
+ id="Howard, IN" />
+ <path
+ d="m 690.10612,244.48714 0.27278,2.981 -5.51976,0.545 -0.35408,-2.98 -1.25942,0.112 -0.21751,-1.919 0.0874,-1.904 0.066,-0.162 0.0713,-0.09 2.86864,-0.245 0.9788,-0.09 2.70817,0.724 0.29774,3.029"
+ class="c18015"
+ id="Carroll, IN" />
+ <path
+ d="m 677.64208,245.66914 5.60356,-0.524 1.26053,-0.112 0.35297,2.98 0.47424,5.025 -6.88723,0.65 -0.32091,-3.496 -0.26565,-2.515 -0.21751,-2.008"
+ class="c18157"
+ id="Tippecanoe, IN" />
+ <path
+ d="m 670.36441,248.32714 7.49518,-0.65 0.26565,2.515 -2.14479,1.384 -0.42611,0.353 -2.77058,2.909 -0.23534,0.448 -0.016,0.121 0.0891,0.216 0.54556,0.586 -2.20898,-0.278 -0.59369,-7.604"
+ class="c18171"
+ id="Warren, IN" />
+ <path
+ d="m 674.2992,241.93914 2.90964,-0.271 0.65075,6.009 -7.49518,0.65 -0.0267,-0.328 -0.50455,-5.666 4.46609,-0.394"
+ class="c18007"
+ id="Benton, IN" />
+ <path
+ d="m 716.24121,233.19814 0.542,4.468 0.42075,3.583 -4.58019,0.626 -1.02158,-8.026 4.63902,-0.651"
+ class="c18001"
+ id="Adams, IN" />
+ <path
+ d="m 707.10935,234.37814 4.49284,-0.529 1.02158,8.026 -2.28386,0.289 -4.24323,0.492 -0.2496,-2 1.97007,-0.236 -0.7078,-6.042"
+ class="c18179"
+ id="Wells, IN" />
+ <path
+ d="m 701.60564,233.00514 5.2862,-0.661 0.21751,2.034 0.7078,6.042 -1.97007,0.236 -3.268,0.376 -0.97344,-8.027"
+ class="c18069"
+ id="Huntington, IN" />
+ <path
+ d="m 700.80156,232.05714 0.80408,0.948 0.97344,8.027 -3.89735,0.449 -1.29615,0.153 -0.96275,-8.001 -0.0963,-1.004 4.475,-0.572"
+ class="c18169"
+ id="Wabash, IN" />
+ <path
+ d="m 696.42283,233.63314 0.96275,8.001 1.29615,-0.153 0.22286,1.986 -5.18994,0.61 -0.90035,-7.978 3.60853,-2.466"
+ class="c18103"
+ id="Miami, IN" />
+ <path
+ d="m 687.67072,236.62114 5.14358,-0.522 0.90035,7.978 -3.60853,0.41 -0.29774,-3.029 -2.70817,-0.724 -0.9788,0.09 -0.40293,-4.032 1.95224,-0.168"
+ class="c18017"
+ id="Cass, IN" />
+ <path
+ d="m 685.71848,236.78914 0.40293,4.032 -2.86864,0.245 -0.0713,0.09 -0.066,0.162 -0.0874,1.904 0.21751,1.919 -5.60356,0.524 -0.43324,-4.001 2.50672,-4.332 6.00292,-0.547"
+ class="c18181"
+ id="White, IN" />
+ <path
+ d="m 715.33017,225.60314 0.72384,6.06 0.1872,1.535 -4.63902,0.651 -4.49284,0.529 -0.21751,-2.034 -0.19968,-6.008 1.96829,-0.227 6.6198,-0.931 0.0499,0.425"
+ class="c18003"
+ id="Allen, IN" />
+ <path
+ d="m 700.72846,226.28714 1.97721,-0.226 0.057,0.667 3.92944,-0.392 0.19968,6.008 -5.2862,0.661 -0.80408,-0.948 -0.37084,-3.029 0.58122,-0.07 -0.16224,-1.735 -0.12124,-0.94"
+ class="c18183"
+ id="Whitley, IN" />
+ <path
+ d="m 687.08416,230.58614 6.66972,-0.715 2.57268,2.758 0.0963,1.004 -3.60853,2.466 -5.14358,0.522 -0.58656,-6.035"
+ class="c18049"
+ id="Fulton, IN" />
+ <path
+ d="m 687.08416,230.58614 0.58656,6.035 -1.95224,0.168 -6.00292,0.547 -0.56874,-5.987 7.93734,-0.763"
+ class="c18131"
+ id="Pulaski, IN" />
+ <path
+ d="m 707.94374,220.07614 6.61445,-0.852 0.28882,2.394 0.43324,3.56 -6.6198,0.931 -0.71671,-6.033"
+ class="c18033"
+ id="DeKalb, IN" />
+ <path
+ d="m 707.94374,220.07614 0.71671,6.033 -1.96829,0.227 -3.92944,0.392 -0.057,-0.667 -1.97721,0.226 -0.38331,-3.271 -0.24069,-1.984 7.83928,-0.956"
+ class="c18113"
+ id="Noble, IN" />
+ <path
+ d="m 693.43474,223.77914 6.91041,-0.763 0.38331,3.271 0.12124,0.94 0.16224,1.735 -0.58122,0.07 0.37084,3.029 -4.475,0.572 -2.57268,-2.758 -0.31914,-6.092"
+ class="c18085"
+ id="Kosciusko, IN" />
+ <path
+ d="m 693.43474,223.77914 0.31914,6.092 -6.66972,0.715 -0.60261,-6.028 -0.10162,-0.995 3.06653,-0.362 3.87596,-0.41 0.11232,0.988"
+ class="c18099"
+ id="Marshall, IN" />
+ <path
+ d="m 686.48155,224.55814 0.60261,6.028 -7.93734,0.763 -0.1355,-1.494 1.88628,-1.029 0.50634,-0.33 0.39223,-0.618 0.29952,-0.564 0.1141,-0.305 0.35123,-1.351 0.92353,-0.795 2.00751,-0.2 0.98949,-0.105"
+ class="c18149"
+ id="Starke, IN" />
+ <path
+ d="m 679.01132,229.85514 0.1355,1.494 0.56874,5.987 -2.50672,4.332 -2.90964,0.271 -0.39936,-4.033 -0.0963,-0.04 -0.0499,-0.1 -0.62757,-6.933 0.92531,-0.628 0.40293,-0.578 0.97166,-0.563 0.19255,-0.04 0.34588,0.09 0.93066,0.323 1.32645,0.841 0.15155,0.04 0.49207,-0.274 0.14619,-0.193"
+ class="c18073"
+ id="Jasper, IN" />
+ <path
+ d="m 668.93989,232.43314 4.18618,-1.597 0.62757,6.933 0.0499,0.1 0.0963,0.04 0.39936,4.033 -4.46609,0.394 -0.56339,-6.308 -0.32983,-3.592"
+ class="c18111"
+ id="Newton, IN" />
+ <path
+ d="m 713.58652,213.98614 0.49742,1.428 0.47425,3.81 -6.61445,0.852 -0.65788,-5.35 6.30066,-0.74"
+ class="c18151"
+ id="Steuben, IN" />
+ <path
+ d="m 705.66345,214.90014 1.62241,-0.174 0.65788,5.35 -7.83928,0.956 -0.67749,-5.415 6.23648,-0.717"
+ class="c18087"
+ id="LaGrange, IN" />
+ <path
+ d="m 699.42697,215.61714 0.67749,5.415 0.24069,1.984 -6.91041,0.763 -0.84508,-7.456 4.60337,-0.467 2.23394,-0.239"
+ class="c18039"
+ id="Elkhart, IN" />
+ <path
+ d="m 692.58966,216.32314 0.73276,6.468 -3.87596,0.41 -3.06653,0.362 0.10162,0.995 -0.98949,0.105 -0.73811,-7.522 5.06335,-0.522 2.77236,-0.296"
+ class="c18141"
+ id="St. Joseph, IN" />
+ <path
+ d="m 679.64424,217.63214 5.10971,-0.491 0.73811,7.522 -2.00751,0.2 -0.92353,0.795 -0.35123,1.351 -0.1141,0.305 -0.29952,0.564 -0.39223,0.618 -0.50634,0.33 -1.88628,1.029 -1.09646,-10.913 1.72938,-1.31"
+ class="c18091"
+ id="LaPorte, IN" />
+ <path
+ d="m 534.81102,265.90314 0.55447,0 0.009,0.216 0.11232,0.162 2.12161,1.92 0.85935,0.553 0.43324,0.16 0.33696,0.128 0.0642,0.02 0.0802,0 0.66858,-0.06 0.13015,-0.05 0.1034,-0.1 0.0143,-0.02 0.60261,-0.683 1.47086,1.849 0.14442,0.683 0.13728,0.634 -0.36906,0.822 -0.37083,0.06 -1.26941,1.124 -0.0713,0.08 -0.6044,0.882 -0.20859,0.298 -4.8922,-0.644 -0.0571,-8.042"
+ class="c20043"
+ id="Doniphan, KS" />
+ <path
+ d="m 526.96818,265.93314 7.84284,-0.03 0.0571,8.042 -3.94549,0.02 -3.9544,0.02 0,-8.053"
+ class="c20013"
+ id="Brown, KS" />
+ <path
+ d="m 414.2694,314.89414 9.27449,0.619 -0.44215,8.044 -0.56339,-0.03 -8.78241,-0.556 0.3851,-5.898 0.12836,-2.177"
+ class="c20187"
+ id="Stanton, KS" />
+ <path
+ d="m 413.75594,322.96914 8.78241,0.556 -0.50633,9.096 -8.60591,-0.474 -0.25674,-0.02 0.58657,-9.162"
+ class="c20129"
+ id="Morton, KS" />
+ <path
+ d="m 422.53835,323.52514 0.56339,0.03 7.89098,0.457 0.39223,0.02 -0.45641,9.025 -8.89652,-0.443 0.50633,-9.096"
+ class="c20189"
+ id="Stevens, KS" />
+ <path
+ d="m 423.54389,315.51314 7.88207,0.433 -0.43324,8.068 -7.89098,-0.457 0.44215,-8.044"
+ class="c20067"
+ id="Grant, KS" />
+ <path
+ d="m 439.31694,316.35614 -0.31378,6.051 -0.0963,2.026 -7.52193,-0.394 -0.39223,-0.02 0.43324,-8.068 7.89098,0.41"
+ class="c20081"
+ id="Haskell, KS" />
+ <path
+ d="m 438.90688,324.43314 -0.0874,8.984 -5.682,-0.241 -2.20898,-0.112 0.45641,-9.025 7.52193,0.394"
+ class="c20175"
+ id="Seward, KS" />
+ <path
+ d="m 446.91019,322.76214 1.97007,0.105 -0.15333,10.958 -9.90741,-0.408 0.0874,-8.984 0.0963,-2.026 7.90703,0.355"
+ class="c20119"
+ id="Meade, KS" />
+ <path
+ d="m 447.15979,312.59814 -0.2496,10.164 -7.90703,-0.355 0.31378,-6.051 -0.12836,-2.161 0.20859,-4.016 7.86781,0.41 -0.10519,2.009"
+ class="c20069"
+ id="Gray, KS" />
+ <path
+ d="m 447.15979,312.59814 11.82934,0.512 0.0321,4.132 -0.16937,6.185 -9.97159,-0.56 -1.97007,-0.105 0.2496,-10.164"
+ class="c20057"
+ id="Ford, KS" />
+ <path
+ d="m 458.85185,323.42714 0.15154,2.018 -0.28882,8.838 -8.40623,-0.385 -1.58141,-0.07 0.15333,-10.958 9.97159,0.56"
+ class="c20025"
+ id="Clark, KS" />
+ <path
+ d="m 468.64694,325.70214 -0.0874,8.92 -8.29392,-0.282 -1.55109,-0.06 0.28882,-8.838 9.64355,0.257"
+ class="c20033"
+ id="Comanche, KS" />
+ <path
+ d="m 459.02122,317.24214 9.84323,0.385 -0.16938,6.082 -0.0481,1.993 -9.64355,-0.257 -0.15154,-2.018 0.16937,-6.185"
+ class="c20097"
+ id="Kiowa, KS" />
+ <path
+ d="m 459.14781,309.07014 3.92944,0.137 -0.0642,2.016 5.89773,0.2 0.025,4.067 -0.0713,2.137 -9.84323,-0.385 -0.0321,-4.132 0.15868,-4.04"
+ class="c20047"
+ id="Edwards, KS" />
+ <path
+ d="m 478.69163,315.78614 0.0802,2.13 -0.16045,6.058 -9.91633,-0.265 0.16938,-6.082 0.0713,-2.137 9.75587,0.296"
+ class="c20151"
+ id="Pratt, KS" />
+ <path
+ d="m 468.69507,323.70914 9.91633,0.265 2.03247,2.074 -0.16937,8.945 -3.60675,-0.115 -8.30817,-0.256 0.0874,-8.92 0.0481,-1.993"
+ class="c20007"
+ id="Barber, KS" />
+ <path
+ d="m 480.64387,326.04814 9.84322,0.162 -0.0802,8.982 -5.64991,-0.105 -4.28245,-0.09 0.16937,-8.945"
+ class="c20077"
+ id="Harper, KS" />
+ <path
+ d="m 478.77185,317.91614 11.85252,0.239 -0.10519,6.019 -0.0321,2.036 -9.84322,-0.162 -2.03247,-2.074 0.16045,-6.058"
+ class="c20095"
+ id="Kingman, KS" />
+ <path
+ d="m 488.76841,307.92914 3.95262,0.07 -0.11232,6.044 -1.98434,4.111 -11.85252,-0.239 -0.0802,-2.13 0.19968,-8.068 9.8771,0.211"
+ class="c20155"
+ id="Reno, KS" />
+ <path
+ d="m 498.64372,308.09814 3.89557,2.048 -0.0303,4.049 -9.90027,-0.151 0.11232,-6.044 5.92269,0.1"
+ class="c20079"
+ id="Harvey, KS" />
+ <path
+ d="m 492.60871,314.04414 9.90027,0.151 -0.13728,10.134 -11.85252,-0.155 0.10519,-6.019 1.98434,-4.111"
+ class="c20173"
+ id="Sedgwick, KS" />
+ <path
+ d="m 490.51918,324.17414 11.85252,0.155 -0.0321,11.042 -5.73727,-0.07 -6.19548,-0.107 0.0802,-8.982 0.0321,-2.036"
+ class="c20191"
+ id="Sumner, KS" />
+ <path
+ d="m 502.3717,324.32914 11.36223,0.08 0,4.026 -0.0571,7.03 -4.0899,-0.02 -7.24737,-0.07 0.0321,-11.042"
+ class="c20035"
+ id="Cowley, KS" />
+ <path
+ d="m 508.14999,310.25014 5.72122,0.02 -0.11232,11.106 -0.025,3.03 -11.36223,-0.08 0.13728,-10.134 0.0303,-4.049 5.6107,0.104"
+ class="c20015"
+ id="Butler, KS" />
+ <path
+ d="m 513.73393,328.43514 10.17484,0.105 0.005,6.959 -0.66501,0 -9.57223,-0.03 0.0571,-7.03"
+ class="c20019"
+ id="Chautauqua, KS" />
+ <path
+ d="m 523.96226,321.48214 0,5.031 -0.0535,2.027 -10.17484,-0.105 0,-4.026 0.025,-3.03 10.20337,0.103"
+ class="c20049"
+ id="Elk, KS" />
+ <path
+ d="m 523.99613,308.33214 -0.009,3.036 -0.025,7.087 0,3.027 -10.20337,-0.103 0.11232,-11.106 2.98096,-1.991 7.14396,0.05"
+ class="c20073"
+ id="Greenwood, KS" />
+ <path
+ d="m 523.96226,326.51314 7.8999,0.04 0.082,0 0.0713,2.717 -0.0553,4.741 0.005,1.453 -4.82088,0.03 -3.23056,0 -0.005,-6.959 0.0535,-2.027"
+ class="c20125"
+ id="Montgomery, KS" />
+ <path
+ d="m 523.96226,318.45514 7.85889,0.02 0.041,8.083 -7.8999,-0.04 0,-8.058"
+ class="c20205"
+ id="Wilson, KS" />
+ <path
+ d="m 523.98722,311.36814 7.91594,0.02 -0.082,7.08 -7.85889,-0.02 0.025,-7.087"
+ class="c20207"
+ id="Woodson, KS" />
+ <path
+ d="m 531.94417,326.55414 7.8571,-0.06 0.24069,1.02 0.11232,7.884 -6.09741,0.06 -2.09131,0 -0.005,-1.453 0.0553,-4.741 -0.0713,-2.717"
+ class="c20099"
+ id="Labette, KS" />
+ <path
+ d="m 539.72105,318.42414 0.0178,1.339 0.0624,6.734 -7.8571,0.06 -0.082,0 -0.041,-8.083 7.8999,-0.05"
+ class="c20133"
+ id="Neosho, KS" />
+ <path
+ d="m 539.8405,311.34314 -0.11945,7.081 -7.8999,0.05 0.082,-7.08 7.93734,-0.05"
+ class="c20001"
+ id="Allen, KS" />
+ <path
+ d="m 540.04196,327.51714 8.30818,-0.06 0.10519,7.884 -7.10296,0.06 -1.19809,0 -0.11232,-7.884"
+ class="c20021"
+ id="Cherokee, KS" />
+ <path
+ d="m 548.23068,319.69214 0.11232,7.158 0.007,0.603 -8.30818,0.06 -0.24069,-1.02 -0.0624,-6.734 8.49181,-0.07"
+ class="c20037"
+ id="Crawford, KS" />
+ <path
+ d="m 539.8405,311.34314 8.33491,-0.08 0.0553,8.429 -8.49181,0.07 -0.0178,-1.339 0.11945,-7.081"
+ class="c20011"
+ id="Bourbon, KS" />
+ <path
+ d="m 414.99325,302.76914 8.5346,0.508 0.44928,0.02 -0.37797,6.72 0.0642,3.382 -0.11945,2.113 -9.27449,-0.619 0.72385,-12.125"
+ class="c20075"
+ id="Hamilton, KS" />
+ <path
+ d="m 415.62795,292.71014 8.49359,0.472 -0.59369,10.095 -8.5346,-0.508 0.50633,-8.157 0.12837,-1.902"
+ class="c20071"
+ id="Greeley, KS" />
+ <path
+ d="m 426.2913,283.20214 -0.69176,10.052 -1.478,-0.07 -8.49359,-0.472 0.49029,-8.084 0.11232,-1.995 10.06074,0.571"
+ class="c20199"
+ id="Wallace, KS" />
+ <path
+ d="m 416.82604,272.56214 11.17681,0.677 0.43324,0.02 -0.61688,10.022 -1.52791,-0.08 -10.06074,-0.571 0.59548,-10.069"
+ class="c20181"
+ id="Sherman, KS" />
+ <path
+ d="m 417.43578,262.50114 11.18573,0.694 -0.61866,10.044 -11.17681,-0.677 0.007,-0.134 0.60261,-9.927"
+ class="c20023"
+ id="Cheyenne, KS" />
+ <path
+ d="m 471.06451,305.45214 7.75548,0.225 0.0713,2.041 -0.19968,8.068 -9.75587,-0.296 -0.025,-4.067 1.95403,0.06 0.19968,-6.035"
+ class="c20185"
+ id="Stafford, KS" />
+ <path
+ d="m 423.97713,303.29814 7.46488,0.395 0.39401,0.02 -0.18542,3.866 -0.36192,6.216 0.13728,2.154 -7.88207,-0.433 0.11945,-2.113 -0.0642,-3.382 0.37797,-6.72"
+ class="c20093"
+ id="Kearny, KS" />
+ <path
+ d="m 439.33299,304.10114 7.88207,0.421 0.30487,0.02 -0.25495,6.051 -7.86781,-0.41 -0.20859,4.016 0.12836,2.161 -7.89098,-0.41 -0.13728,-2.154 0.36192,-6.216 0.18542,-3.866 7.49697,0.391"
+ class="c20055"
+ id="Finney, KS" />
+ <path
+ d="m 459.03548,305.01014 0.11233,4.06 -0.15868,4.04 -11.82934,-0.512 0.10519,-2.009 0.25495,-6.051 11.51555,0.472"
+ class="c20083"
+ id="Hodgeman, KS" />
+ <path
+ d="m 459.10145,302.98514 9.88245,0.372 2.08061,2.095 -0.19968,6.035 -1.95403,-0.06 -5.89773,-0.2 0.0642,-2.016 -3.92944,-0.137 -0.11233,-4.06 0.066,-2.025"
+ class="c20145"
+ id="Pawnee, KS" />
+ <path
+ d="m 532.05471,302.20614 0,1.021 0.0339,3.036 -0.16937,0 -0.0161,5.128 -7.91594,-0.02 0.009,-3.036 0.15155,-6.1 7.90703,-0.03"
+ class="c20031"
+ id="Coffey, KS" />
+ <path
+ d="m 532.05471,303.22714 7.92485,-0.05 0.0392,3.036 -0.17828,3.102 0,2.026 -7.93734,0.05 0.0161,-5.128 0.16937,0 -0.0339,-3.036"
+ class="c20003"
+ id="Anderson, KS" />
+ <path
+ d="m 548.07023,303.10814 0.0963,7.614 0.009,0.541 -8.33491,0.08 0,-2.026 0.17828,-3.102 -0.0392,-3.036 8.09067,-0.07"
+ class="c20107"
+ id="Linn, KS" />
+ <path
+ d="m 548.02209,295.00614 0.025,6.044 0.0232,2.058 -8.09067,0.07 0.0784,-8.083 7.96408,-0.09"
+ class="c20121"
+ id="Miami, KS" />
+ <path
+ d="m 532.14385,295.16014 7.91416,-0.06 -0.0784,8.083 -7.92485,0.05 0,-1.021 0.0891,-7.046"
+ class="c20059"
+ id="Franklin, KS" />
+ <path
+ d="m 532.13493,292.11514 0.009,3.045 -0.0891,7.046 -7.90703,0.03 0.0731,-7.056 -0.007,-3.036 7.92129,-0.03"
+ class="c20139"
+ id="Osage, KS" />
+ <path
+ d="m 516.98054,295.15114 7.24023,0.03 -0.0731,7.056 -0.15155,6.1 -7.14396,-0.05 0.0874,-8.086 0.041,-5.045"
+ class="c20111"
+ id="Lyon, KS" />
+ <path
+ d="m 508.62245,300.12514 8.31708,0.07 -0.0874,8.086 -2.98096,1.991 -5.72122,-0.02 0.0321,-3.808 0.0802,-2.291 0.32804,0.01 0.0321,-4.036"
+ class="c20017"
+ id="Chase, KS" />
+ <path
+ d="m 514.34368,292.11514 2.63686,3.036 -0.041,5.045 -8.31708,-0.07 -1.95938,-2.032 0.77198,-6.034 6.90863,0.06"
+ class="c20127"
+ id="Morris, KS" />
+ <path
+ d="m 506.66307,298.09314 1.95938,2.032 -0.0321,4.036 -0.32804,-0.01 -0.0802,2.291 -0.0321,3.808 -5.6107,-0.104 -3.89557,-2.048 0.14442,-10.102 7.87493,0.1"
+ class="c20115"
+ id="Marion, KS" />
+ <path
+ d="m 498.78814,297.99614 -0.14442,10.102 -5.92269,-0.1 -3.95262,-0.07 0.15867,-10.109 9.86106,0.176"
+ class="c20113"
+ id="McPherson, KS" />
+ <path
+ d="m 478.9644,299.62814 9.93237,0.208 -0.12836,8.093 -9.8771,-0.211 -0.0713,-2.041 0.14441,-6.049"
+ class="c20159"
+ id="Rice, KS" />
+ <path
+ d="m 498.90937,289.92014 -0.12123,8.076 -9.86106,-0.176 0.0499,-6.06 0.0392,-2.017 9.89315,0.177"
+ class="c20169"
+ id="Saline, KS" />
+ <path
+ d="m 479.0999,291.53514 9.8771,0.225 -0.0499,6.06 -0.0303,2.016 -9.93237,-0.208 0.009,-4.067 0.12658,-4.026"
+ class="c20053"
+ id="Ellsworth, KS" />
+ <path
+ d="m 478.97332,295.56114 -0.009,4.067 -0.14441,6.049 -7.75548,-0.225 -2.08061,-2.095 0.2496,-8.069 9.73982,0.273"
+ class="c20009"
+ id="Barton, KS" />
+ <path
+ d="m 459.39741,294.95114 9.6578,0.328 0.17829,0 -0.2496,8.069 -9.88245,-0.372 0.29596,-8.034"
+ class="c20165"
+ id="Rush, KS" />
+ <path
+ d="m 447.60907,294.42914 1.66342,0.09 9.88423,0.426 0.24069,0 -0.29596,8.034 -0.066,2.025 -11.51555,-0.472 -0.30487,-0.02 0.39401,-10.093"
+ class="c20135"
+ id="Ness, KS" />
+ <path
+ d="m 439.76623,294.01014 7.84284,0.419 -0.39401,10.093 -7.88207,-0.421 0.43324,-10.091"
+ class="c20101"
+ id="Lane, KS" />
+ <path
+ d="m 431.9323,293.59314 5.51263,0.304 2.3213,0.113 -0.43324,10.091 -7.49697,-0.391 -0.39401,-0.02 0.49029,-10.1"
+ class="c20171"
+ id="Scott, KS" />
+ <path
+ d="m 425.59954,293.25414 6.33276,0.339 -0.49029,10.1 -7.46488,-0.395 -0.44928,-0.02 0.59369,-10.095 1.478,0.07"
+ class="c20203"
+ id="Wichita, KS" />
+ <path
+ d="m 427.81921,283.28414 2.63509,0.144 2.69035,0.193 4.92607,0.257 -0.62579,10.019 -5.51263,-0.304 -6.33276,-0.339 0.69176,-10.052 1.52791,0.08"
+ class="c20109"
+ id="Logan, KS" />
+ <path
+ d="m 439.67887,283.95814 9.85035,0.49 0.29061,0 -0.54734,10.061 -1.66342,-0.09 -7.84284,-0.419 -2.3213,-0.113 0.62579,-10.019 1.60815,0.08"
+ class="c20063"
+ id="Gove, KS" />
+ <path
+ d="m 449.81983,284.45514 9.60254,0.387 0.24068,0 -0.50633,10.093 -9.88423,-0.426 0.54734,-10.061"
+ class="c20195"
+ id="Trego, KS" />
+ <path
+ d="m 459.66305,284.84914 9.62572,0.321 0.18542,0 -0.41898,10.1 -9.6578,-0.328 -0.24069,0 0.50633,-10.093"
+ class="c20051"
+ id="Ellis, KS" />
+ <path
+ d="m 469.47419,285.17914 9.6899,0.289 -0.0642,6.067 -0.12658,4.026 -9.73982,-0.273 -0.17829,0 0.41898,-10.1"
+ class="c20167"
+ id="Russell, KS" />
+ <path
+ d="m 489.12141,283.69214 -0.10519,6.051 -0.0392,2.017 -9.8771,-0.225 0.0642,-6.067 0.0571,-2.018 9.90027,0.242"
+ class="c20105"
+ id="Lincoln, KS" />
+ <path
+ d="m 489.16955,281.67614 9.89136,0.176 -0.0874,4.035 -0.0642,4.033 -9.89315,-0.177 0.10519,-6.051 0.0481,-2.016"
+ class="c20143"
+ id="Ottawa, KS" />
+ <path
+ d="m 506.19774,285.96714 1.23731,6.092 -0.77198,6.034 -7.87493,-0.1 0.12123,-8.076 0.0642,-4.033 7.22419,0.08"
+ class="c20041"
+ id="Dickinson, KS" />
+ <path
+ d="m 506.19774,285.96714 0.0553,-2.041 1.96829,0.05 -0.0481,3.033 4.80484,0.39 1.39777,0.02 0,0.678 -0.0321,4.026 -6.90863,-0.06 -1.23731,-6.092"
+ class="c20061"
+ id="Geary, KS" />
+ <path
+ d="m 522.56449,286.19214 1.64915,5.948 0.007,3.036 -7.24023,-0.03 -2.63686,-3.036 0.0321,-4.026 2.00216,-2.983 0.11232,0.105 0.44928,0.282 0.18542,0.05 0.93244,-0.955 1.19809,-0.289 2.1127,0.169 0.41898,0.17 0.25673,0.328 0.49742,1.046 0.0232,0.184"
+ class="c20197"
+ id="Wabaunsee, KS" />
+ <path
+ d="m 522.62867,284.10214 7.89098,0 1.59924,3.703 0.016,4.317 -7.92129,0.03 -1.64915,-5.948 0.0642,-2.09"
+ class="c20177"
+ id="Shawnee, KS" />
+ <path
+ d="m 537.67253,288.04114 2.33734,1.414 0.0481,5.641 -7.91416,0.06 -0.009,-3.045 -0.016,-4.317 0.77376,-0.28 0.36014,-0.04 0.24782,0.04 0.35479,0.152 0.22465,0.257 0.56338,0.338 0.31379,0.08 0.25495,-0.02 2.46036,-0.289"
+ class="c20045"
+ id="Douglas, KS" />
+ <path
+ d="m 542.62178,289.22114 0.47424,-1.462 0.11232,-0.1 0.23356,-0.08 0.27277,0 1.51901,0.386 2.72422,-0.04 0.0571,4.565 0.007,2.522 -7.96408,0.09 -0.0481,-5.641 2.61191,-0.234"
+ class="c20091"
+ id="Johnson, KS" />
+ <path
+ d="m 548.01496,285.23414 -0.082,1.079 0.025,1.606 -2.72422,0.04 -1.51901,-0.386 -0.27277,0 -0.23356,0.08 -0.11232,0.1 -0.47424,1.462 -0.025,-3.19 0.12124,-1.704 1.89697,0 3.39994,0.907"
+ class="c20209"
+ id="Wyandotte, KS" />
+ <path
+ d="m 537.72958,279.34614 3.71907,-0.04 3.16637,5.017 -1.89697,0 -0.12124,1.704 0.025,3.19 -2.61191,0.234 -2.33734,-1.414 -0.0321,-1.961 0.11945,-2.331 -0.0303,-4.403"
+ class="c20103"
+ id="Leavenworth, KS" />
+ <path
+ d="m 530.83344,279.38714 6.89614,-0.04 0.0303,4.403 -0.11945,2.331 0.0321,1.961 -2.46036,0.289 -0.25495,0.02 -0.31379,-0.08 -0.56338,-0.338 -0.22465,-0.257 -0.35479,-0.152 -0.24782,-0.04 -0.36014,0.04 -0.77376,0.28 -1.59924,-3.703 0.31379,-4.708"
+ class="c20087"
+ id="Jefferson, KS" />
+ <path
+ d="m 539.06317,276.68614 2.38548,2.624 -3.71907,0.04 -6.89614,0.04 0.0891,-5.419 3.94549,-0.02 4.8922,0.644 -0.6971,2.097"
+ class="c20005"
+ id="Atchison, KS" />
+ <path
+ d="m 530.83344,279.38714 -0.31379,4.708 -7.89098,0 0,-8.099 4.33951,-2.017 3.9544,-0.02 -0.0891,5.419"
+ class="c20085"
+ id="Jackson, KS" />
+ <path
+ d="m 522.62867,284.10214 -0.0642,2.09 -0.0232,-0.184 -0.49742,-1.046 -0.25673,-0.328 -0.41898,-0.17 -2.1127,-0.169 -1.19809,0.289 -0.93244,0.955 -0.18542,-0.05 -0.44928,-0.282 -0.11232,-0.105 -1.2694,-0.378 -1.17313,-0.515 -1.66342,-1.541 -0.87539,-1.367 -0.86826,-1.597 0.007,-0.926 0.21752,-0.362 2.26602,-2.458 6.03502,0.03 3.57465,0 0,8.099"
+ class="c20149"
+ id="Pottawatomie, KS" />
+ <path
+ d="m 506.25301,283.92614 0.12837,-8.02 2.68322,0.02 3.9544,0.03 -2.26602,2.458 -0.21752,0.362 -0.007,0.926 0.86826,1.597 0.87539,1.367 1.66342,1.541 1.17313,0.515 1.2694,0.378 -2.00216,2.983 0,-0.678 -1.39777,-0.02 -4.80484,-0.39 0.0481,-3.033 -1.96829,-0.05"
+ class="c20161"
+ id="Riley, KS" />
+ <path
+ d="m 499.06091,281.85214 0.10519,-6.044 7.21528,0.1 -0.12837,8.02 -0.0553,2.041 -7.22419,-0.08 0.0874,-4.035"
+ class="c20027"
+ id="Clay, KS" />
+ <path
+ d="m 489.24978,275.63414 0.0481,-2.019 9.89136,0.177 -0.0232,2.016 -0.10519,6.044 -9.89136,-0.176 0.0802,-6.042"
+ class="c20029"
+ id="Cloud, KS" />
+ <path
+ d="m 489.24978,275.63414 -0.0802,6.042 -0.0481,2.016 -9.90027,-0.242 0.25851,-8.057 9.77013,0.241"
+ class="c20123"
+ id="Mitchell, KS" />
+ <path
+ d="m 479.22114,283.45014 -0.0571,2.018 -9.6899,-0.289 -0.18542,0 0.10519,-3.366 0.13728,-2.676 0.14441,-4.024 9.4813,0.28 0.3227,0 -0.25851,8.057"
+ class="c20141"
+ id="Osborne, KS" />
+ <path
+ d="m 459.8556,274.77114 9.44208,0.315 0.37797,0.02 -0.14441,4.024 -0.13728,2.676 -0.10519,3.366 -9.62572,-0.321 -0.24068,0 0.43323,-10.071"
+ class="c20163"
+ id="Rooks, KS" />
+ <path
+ d="m 449.52922,284.44814 0.49029,-10.077 9.38503,0.38 0.45106,0.02 -0.43323,10.071 -9.60254,-0.387 -0.29061,0"
+ class="c20065"
+ id="Graham, KS" />
+ <path
+ d="m 440.19233,273.88614 9.49913,0.478 0.32805,0 -0.49029,10.077 -9.85035,-0.49 0.51346,-10.072"
+ class="c20179"
+ id="Sheridan, KS" />
+ <path
+ d="m 427.81921,283.28414 0.61688,-10.022 11.39432,0.61 0.36192,0.01 -0.51346,10.072 -1.60815,-0.08 -4.92607,-0.257 -2.69035,-0.193 -2.63509,-0.144"
+ class="c20193"
+ id="Thomas, KS" />
+ <path
+ d="m 428.62151,263.19514 1.519,0.08 9.88245,0.529 0.34766,0.03 -0.54021,10.043 -11.39432,-0.61 -0.43324,-0.02 0.61866,-10.044"
+ class="c20153"
+ id="Rawlins, KS" />
+ <path
+ d="m 440.37062,263.82914 9.52944,0.457 0.27278,0.02 -0.48138,10.06 -9.49913,-0.478 -0.36192,-0.01 0.54021,-10.043"
+ class="c20039"
+ id="Decatur, KS" />
+ <path
+ d="m 467.64318,264.97014 1.95937,0.06 -0.30487,10.06 -9.44208,-0.315 -0.45106,-0.02 0.41897,-10.062 7.81967,0.281"
+ class="c20147"
+ id="Phillips, KS" />
+ <path
+ d="m 459.78251,264.68914 0.041,0 -0.41897,10.062 -9.38503,-0.38 -0.32805,0 0.48138,-10.06 9.60967,0.385"
+ class="c20137"
+ id="Norton, KS" />
+ <path
+ d="m 469.60255,265.02614 5.95479,0.185 3.88131,0.105 -0.2817,10.068 -9.4813,-0.28 -0.37797,-0.02 0.30487,-10.06"
+ class="c20183"
+ id="Smith, KS" />
+ <path
+ d="m 483.4715,265.41114 5.98688,0.144 -0.16046,8.06 -0.0481,2.019 -9.77013,-0.241 -0.3227,0 0.2817,-10.068 4.03285,0.09"
+ class="c20089"
+ id="Jewell, KS" />
+ <path
+ d="m 491.38744,265.59814 7.91416,0.127 -0.11232,8.067 -9.89136,-0.177 0.16046,-8.06 1.92906,0.04"
+ class="c20157"
+ id="Republic, KS" />
+ <path
+ d="m 499.3016,265.72514 7.93199,0.105 1.9362,0.02 -0.10519,10.078 -2.68322,-0.02 -7.21528,-0.1 0.0232,-2.016 0.11232,-8.067"
+ class="c20201"
+ id="Washington, KS" />
+ <path
+ d="m 515.14953,265.90314 3.92766,0.02 -0.0232,10.07 -6.03502,-0.03 -3.9544,-0.03 0.10519,-10.078 5.97974,0.05"
+ class="c20117"
+ id="Marshall, KS" />
+ <path
+ d="m 523.07082,265.93314 3.89736,0 0,8.053 -4.33951,2.017 -3.57465,0 0.0232,-10.07 3.99363,0"
+ class="c20131"
+ id="Nemaha, KS" />
+ <path
+ d="m 648.87547,335.90014 5.68201,-0.139 0.41719,6.254 -0.19968,0.02 -0.13728,0 -1.38886,-1.622 -0.7488,-0.282 -4.33059,-1.046 0.70601,-3.188"
+ class="c21105"
+ id="Hickman, KY" />
+ <path
+ d="m 648.16946,339.08814 4.33059,1.046 0.7488,0.282 1.38886,1.622 -9.36185,0.676 -1.29436,0.184 1.42273,-3.19 2.76523,-0.62 m -6.4219,3.986 -0.40828,-0.584 -0.025,-0.03 -0.19968,-0.427 -0.007,-0.02 -0.0178,-0.1 -0.0178,-0.07 0.0178,-0.08 0.025,-0.105 0.0232,-0.09 0.0303,-0.04 0.21038,-0.281 0.1141,-0.07 0.33696,-0.05 0.51347,0.08 0.28169,0.08 0.0481,0.03 0.0392,0.03 0.025,0.02 0.11767,0.183 0.0107,0.02 0.11232,0.266 0.0571,0.25 0,0 0.007,0.04 0,0.1 -0.016,0.06 -0.0571,0.227 -0.0232,0.09 -0.0285,0.06 -0.18007,0.339 -0.98949,0.05"
+ class="c21075"
+ id="Fulton, KY" />
+ <path
+ d="m 750.51689,321.94214 0.48494,0.948 1.21948,5.222 -3.70302,1.987 -4.60515,0.884 0.67392,-2.395 1.22305,-2.155 1.70799,-1.753 0.75772,-0.713 1.11786,-1.244 0.11232,-0.483 -0.0891,-0.177 -0.41006,-0.323 1.51009,0.202"
+ class="c21013"
+ id="Bell, KY" />
+ <path
+ d="m 743.62253,320.12714 0.22643,-0.02 1.57427,0.202 0.58656,0.167 0.23356,0.209 0.2496,0.289 0.0392,0.162 0.53843,0.224 0.77912,0.25 0.75593,0.135 0.40115,0 0.41006,0.323 0.0891,0.177 -0.11232,0.483 -1.11786,1.244 -0.75772,0.713 -1.70799,1.753 -1.22305,2.156 -1.58319,-0.733 -2.29811,-2.667 -0.78625,-2.291 3.70302,-2.771"
+ class="c21121"
+ id="Knox, KY" />
+ <path
+ d="m 736.22897,323.59814 3.69054,-0.7 0.78625,2.291 2.29811,2.667 1.58319,0.732 -0.67392,2.395 -1.03585,0.103 -4.35555,0.5 -1.166,-1.086 -0.53129,-0.651 -1.05903,-2.282 -0.0392,-0.323 0.50277,-3.646"
+ class="c21235"
+ id="Whitley, KY" />
+ <path
+ d="m 738.03858,314.63814 3.70302,1.148 -0.23177,1.809 0.54556,0.603 0.94848,0.586 0.50634,0.755 0.11232,0.588 -3.70302,2.771 -3.69054,0.7 -1.13925,-0.171 0.70779,-4.578 2.24107,-4.211"
+ class="c21125"
+ id="Laurel, KY" />
+ <path
+ d="m 744.30537,313.16714 1.47978,0.07 2.7171,1.34 0.72206,0.07 0.40828,0.465 0.8843,6.839 -1.51009,-0.202 -0.40115,0 -0.75593,-0.135 -0.77912,-0.25 -0.53843,-0.224 -0.0392,-0.162 -0.2496,-0.289 -0.23356,-0.209 -0.58656,-0.167 -1.57427,-0.202 -0.22643,0.02 -0.11232,-0.588 -0.50634,-0.755 -0.94848,-0.586 -0.54556,-0.603 0.23177,-1.809 2.56377,-2.619"
+ class="c21051"
+ id="Clay, KY" />
+ <path
+ d="m 749.63259,315.10314 1.35141,-1.815 1.52614,0.884 1.98611,1.245 0.68997,0.604 0.73098,1.277 0.28348,0.955 -0.025,1.004 -5.17389,3.633 -0.48494,-0.948 -0.8843,-6.839"
+ class="c21131"
+ id="Leslie, KY" />
+ <path
+ d="m 756.17572,319.25714 1.14817,0.305 0.54555,0.684 2.70818,-1.462 1.39956,0.771 -0.0731,1.742 -0.37797,0.661 -3.64062,3.006 -3.81712,2.161 -1.84706,0.987 -1.21948,-5.222 5.17389,-3.633"
+ class="c21095"
+ id="Harlan, KY" />
+ <path
+ d="m 763.48014,312.38814 0.81833,0.714 0.51525,-0.02 0.50277,-0.41 0.10697,0 0.5937,0.376 0.71671,0.644 -4.75669,5.866 -1.39956,-0.771 -2.70818,1.462 -0.54555,-0.684 0.21929,0.178 0.0642,0 0.82012,-0.651 0.0606,-0.09 0.0481,-0.258 -0.0232,-1.115 -0.46533,-0.893 0.0303,-0.16 0.31379,-0.813 0.51346,-0.963 0.32627,0.226 0.39045,0 0.70779,-0.562 0.36014,-0.362 0.33875,-0.435 1.24444,-0.866 1.20701,-0.41"
+ class="c21133"
+ id="Letcher, KY" />
+ <path
+ d="m 759.3314,307.93614 1.79356,0.265 1.31933,0.731 0.16581,0.259 0.0891,0.754 -0.0392,0.626 0.32804,0.963 0.0963,0.1 0.40293,0.233 0.34587,0.154 -0.353,0.369 -1.20701,0.41 -1.24444,0.866 -0.33875,0.435 -0.36014,0.362 -0.70779,0.562 -0.39045,0 -0.32627,-0.226 -2.89003,-4.502 2.85081,-2.674 0.46533,0.321"
+ class="c21119"
+ id="Knott, KY" />
+ <path
+ d="m 756.01526,310.28914 2.89003,4.502 -0.51346,0.963 -0.31379,0.813 -0.0303,0.16 0.46533,0.893 0.0232,1.115 -0.0481,0.258 -0.0606,0.09 -0.82012,0.651 -0.0642,0 -0.21929,-0.178 -1.14817,-0.305 0.025,-1.004 -0.28348,-0.955 -0.73098,-1.277 -0.68997,-0.604 -1.98611,-1.245 -1.52614,-0.884 -1.35141,1.815 -0.40828,-0.465 -0.60974,-1.705 2.1127,-0.747 3.90448,-1.927 1.38351,0.03"
+ class="c21193"
+ id="Perry, KY" />
+ <path
+ d="m 747.53593,309.07014 1.07864,3.863 0.60974,1.705 -0.72206,-0.07 -2.7171,-1.34 -1.47978,-0.07 -2.30525,-3.657 0.4261,0.321 0.4172,0.171 0.36192,0.07 1.42986,-0.345 1.06081,-0.555 0.21573,-0.314 0.85399,-0.06 0.7702,0.266"
+ class="c21189"
+ id="Owsley, KY" />
+ <path
+ d="m 738.17408,308.86814 3.3928,0.114 0.43324,0.528 2.30525,3.657 -2.56377,2.619 -3.70302,-1.148 -0.28169,-1.102 -0.49564,-1.197 -0.54021,-0.756 -0.34588,-0.618 -0.0874,-0.587 0.0553,-0.264 1.83101,-1.246"
+ class="c21109"
+ id="Jackson, KY" />
+ <path
+ d="m 737.52333,302.25414 1.44769,0.16 0.77377,0.758 1.2284,0.827 1.43521,0.1 1.92906,0.482 -2.77058,4.405 -3.3928,-0.114 -0.65075,-6.614"
+ class="c21065"
+ id="Estill, KY" />
+ <path
+ d="m 744.59598,304.53814 3.55861,1.356 -0.61866,3.176 -0.7702,-0.266 -0.85399,0.06 -0.21573,0.314 -1.06081,0.555 -1.42986,0.345 -0.36192,-0.07 -0.4172,-0.171 -0.4261,-0.321 -0.43324,-0.528 2.77058,-4.405 0.25852,-0.04"
+ class="c21129"
+ id="Lee, KY" />
+ <path
+ d="m 748.15459,305.89414 0.6133,0.336 0.55269,-0.304 0.12837,-0.176 0.23177,-0.481 0.0481,-0.296 -0.0214,-0.147 0.0464,-0.217 0.0963,-0.161 0.47602,-0.279 2.6333,0.353 5.90665,3.093 -2.85081,2.674 -1.38351,-0.03 -3.90448,1.927 -2.1127,0.747 -1.07864,-3.863 0.61866,-3.176"
+ class="c21025"
+ id="Breathitt, KY" />
+ <path
+ d="m 763.67982,301.86114 1.49583,0.617 -0.48316,0.163 -0.30487,0.185 -0.0802,0.119 0.34766,3.311 0.52951,0.523 0.30487,0.716 0.0143,0.505 -0.35301,1.455 -0.84329,2.016 -0.30487,0.41 -0.16938,0.138 -0.34587,-0.154 -0.40293,-0.233 -0.0963,-0.1 -0.32804,-0.963 0.0392,-0.626 -0.0891,-0.754 -0.16581,-0.259 -1.31933,-0.731 -1.79356,-0.265 -1.00376,-5.242 0.58657,0.01 2.08952,-1.075 0.57052,-0.209 0.53842,0.01 1.51188,0.377 0.0553,0.05"
+ class="c21071"
+ id="Floyd, KY" />
+ <path
+ d="m 763.66377,298.14214 0.016,3.719 -0.0553,-0.05 -1.51188,-0.377 -0.53842,-0.01 -0.57052,0.209 -2.08952,1.075 -0.58657,-0.01 -1.59745,-3.116 -0.0499,-2.45 0.15333,-0.499 0.0802,-0.161 0.30843,-0.264 0.0695,0 2.17867,0.457 1.87023,0.948 1.06972,0.378 1.25336,0.162"
+ class="c21115"
+ id="Johnson, KY" />
+ <path
+ d="m 756.73019,299.57814 1.59745,3.116 1.00376,5.242 -0.46533,-0.321 -5.90665,-3.093 -0.36905,-0.956 -0.32983,-1.28 2.09843,-3.172 0.0499,-0.05 0.71315,0 0.83438,0.17 0.77377,0.344"
+ class="c21153"
+ id="Magoffin, KY" />
+ <path
+ d="m 747.96382,300.69514 0.24782,0.386 0.98949,0.451 1.89519,0.641 1.49405,1.393 0.36905,0.956 -2.6333,-0.353 -0.47602,0.279 -0.0963,0.161 -0.0464,0.217 0.0214,0.147 -0.0481,0.296 -0.23177,0.481 -0.12837,0.176 -0.55269,0.304 -0.6133,-0.336 -3.55861,-1.356 1.04476,-2.685 2.32308,-1.158"
+ class="c21237"
+ id="Wolfe, KY" />
+ <path
+ d="m 739.33295,300.19614 3.56574,-0.16 2.74205,1.817 -1.04476,2.685 -0.25852,0.04 -1.92906,-0.482 -1.43521,-0.1 -1.2284,-0.827 -0.77377,-0.758 0.36193,-2.218"
+ class="c21197"
+ id="Powell, KY" />
+ <path
+ d="m 736.76918,296.22814 2.56377,3.968 -0.36193,2.218 -1.44769,-0.16 -4.70143,-0.321 0.41363,-4.147 3.53365,-1.558"
+ class="c21049"
+ id="Clark, KY" />
+ <path
+ d="m 738.36128,294.22014 0.95562,0.915 0.93066,0.144 0.20146,0.177 1.03763,0.957 1.18918,1.441 0.15332,0.31 0.0695,1.872 -3.56574,0.16 -2.56377,-3.968 1.5921,-2.008"
+ class="c21173"
+ id="Montgomery, KY" />
+ <path
+ d="m 747.31842,296.36514 1.21592,0.232 -0.57052,4.098 -2.32308,1.158 -2.74205,-1.817 -0.0695,-1.872 4.48927,-1.799"
+ class="c21165"
+ id="Menifee, KY" />
+ <path
+ d="m 755.95108,296.22014 0.72919,0.908 0.0499,2.45 -0.77377,-0.344 -0.83438,-0.17 -0.71315,0 -0.0499,0.05 -2.09843,3.172 0.32983,1.28 -1.49405,-1.393 -1.89519,-0.641 -0.98949,-0.451 -0.24782,-0.386 0.57052,-4.098 2.78662,-2.281 4.63012,1.904"
+ class="c21175"
+ id="Morgan, KY" />
+ <path
+ d="m 757.14738,292.13114 -1.1963,4.089 -4.63012,-1.904 0.0963,-1.807 0.94848,-1.874 0.43502,0.09 1.37281,0.763 0.73098,0.529 1.38173,0.282 0.56338,0 0.29774,-0.158"
+ class="c21063"
+ id="Elliott, KY" />
+ <path
+ d="m 749.30454,289.81614 2.1127,2.693 -0.0963,1.807 -2.78662,2.281 -1.21592,-0.232 -2.84546,-2.821 0.93422,-0.763 0.30487,-0.331 0.7702,-1.172 -0.16759,-0.417 0.17829,-1.014 0.64183,-1.197 2.16976,1.166"
+ class="c21205"
+ id="Rowan, KY" />
+ <path
+ d="m 740.36166,291.52114 0.1355,-0.157 0.0802,0 1.73651,0.09 0.19255,0.105 0.44037,0.337 0.59726,1.148 0.77912,0.919 0.11945,-0.186 0.0303,-0.225 2.84546,2.821 -4.48927,1.799 -0.15332,-0.31 -1.18918,-1.441 -1.03763,-0.957 -0.20146,-0.177 -0.93066,-0.144 -0.95562,-0.915 2.00038,-2.699"
+ class="c21011"
+ id="Bath, KY" />
+ <path
+ d="m 737.61248,288.54514 2.74918,2.976 -2.00038,2.699 -4.35733,-3.641 1.37459,-2.228 2.23394,0.194"
+ class="c21181"
+ id="Nicholas, KY" />
+ <path
+ d="m 743.3444,285.78914 3.79038,2.861 -0.64183,1.197 -0.17829,1.014 0.16759,0.417 -0.7702,1.172 -0.30487,0.331 -0.93422,0.763 -0.0303,0.225 -0.11945,0.185 -0.77912,-0.918 -0.59726,-1.148 -0.44037,-0.337 -0.19255,-0.105 -1.73651,-0.09 -0.0802,0 -0.1355,0.157 -2.74918,-2.976 0.72384,-1.332 1.36568,0.665 2.29812,-1.413 1.34428,-0.676"
+ class="c21069"
+ id="Fleming, KY" />
+ <path
+ d="m 736.9546,285.01714 1.38172,2.196 -0.72384,1.332 -2.23394,-0.194 -1.32467,-2.038 2.90073,-1.296"
+ class="c21201"
+ id="Robertson, KY" />
+ <path
+ d="m 737.99044,280.80814 -1.03584,4.209 -2.90073,1.296 -0.85221,-0.556 -1.14996,-5.607 3.30188,0.939 2.63686,-0.281"
+ class="c21023"
+ id="Bracken, KY" />
+ <path
+ d="m 742.91473,283.25014 0.42967,2.539 -1.34428,0.676 -2.29812,1.413 -1.36568,-0.665 -1.38172,-2.196 1.03584,-4.209 0.60975,0.08 0.21751,0.08 0.11232,0.09 1.56714,1.622 1.39064,0.69 1.02693,-0.121"
+ class="c21161"
+ id="Mason, KY" />
+ <path
+ d="m 753.53172,279.74714 -1.70442,5.416 -0.80408,2.887 0.19434,0.939 -0.0731,0.168 -0.71671,0.41 -1.12321,0.249 -2.16976,-1.166 -3.79038,-2.861 -0.42967,-2.539 0.0963,-0.811 0.13728,-0.225 0.18542,-0.128 1.39777,-0.612 0.21929,-0.05 0.15154,0.02 0.025,0 0.72028,0.177 1.9148,0.46 0.0481,0.02 0.60083,0.282 0.0428,0.01 1.01802,0.763 4.05959,-3.414"
+ class="c21135"
+ id="Lewis, KY" />
+ <path
+ d="m 762.23213,285.63714 0.37797,4.035 -3.35715,0.554 -0.83616,-2.925 2.26424,-3.407 1.5511,1.743"
+ class="c21019"
+ id="Boyd, KY" />
+ <path
+ d="m 757.81418,282.77814 2.86685,1.116 -2.26424,3.407 -1.76148,-0.346 -2.67431,-1.189 -0.73989,-0.257 -1.41381,-0.346 1.70442,-5.416 0,0 0.31914,-0.145 1.48691,-0.673 0.48494,-0.213 0.0214,0 0.0909,0 0.18364,0.08 0.082,0.09 0.0232,0.04 0.0481,0.07 0.0303,0.06 0.009,0.03 0.007,0.03 0.0339,0.137 0.0143,0.163 0,0.02 0.009,0.01 -0.0178,0.278 0.16937,0.724 0.49921,1.502 0.041,0.09 0.11945,0.255 0.14442,0.169 0.0178,0.03 0.3851,0.257 0.0802,0.04"
+ class="c21089"
+ id="Greenup, KY" />
+ <path
+ d="m 751.8273,285.16314 1.41381,0.346 0.73989,0.257 2.67431,1.189 1.76148,0.346 0.83616,2.925 -2.10557,1.905 -0.29774,0.158 -0.56338,0 -1.38173,-0.282 -0.73098,-0.529 -1.37281,-0.763 -0.43502,-0.09 -0.94848,1.874 -2.1127,-2.693 1.12321,-0.249 0.71671,-0.41 0.0731,-0.168 -0.19434,-0.939 0.80408,-2.887"
+ class="c21043"
+ id="Carter, KY" />
+ <path
+ d="m 759.25295,290.22614 3.35715,-0.554 -0.44929,1.967 0,0 0.0713,0.201 0.16224,0.403 0,0.02 0.3227,0.287 0.34409,0.08 0.0481,0.01 2.82763,2.699 0.025,0.03 0.007,0.02 0,0.129 -0.46533,0.804 -1.83992,1.816 -1.25336,-0.162 -1.06972,-0.378 -1.87023,-0.948 -2.17867,-0.457 -0.0695,0 -0.30843,0.264 -0.0802,0.161 -0.15333,0.499 -0.72919,-0.908 1.1963,-4.089 2.10557,-1.905"
+ class="c21127"
+ id="Lawrence, KY" />
+ <path
+ d="m 767.36679,298.04414 1.86488,2.523 -4.05602,1.911 -1.49583,-0.617 -0.016,-3.719 1.83992,-1.816 1.8631,1.718"
+ class="c21159"
+ id="Martin, KY" />
+ <path
+ d="m 765.17565,302.47814 4.05602,-1.911 -0.007,0.02 0.0339,0.113 0.67214,1.035 3.65845,2.461 0.005,0 1.30506,0.474 0.71315,-0.162 0.70066,-0.209 -5.28086,6.347 -0.6757,0.872 -2.71532,1.531 -0.70601,0.507 -0.20147,0.137 -0.71671,-0.644 -0.5937,-0.376 -0.10697,0 -0.50277,0.41 -0.51525,0.02 -0.81833,-0.714 0.353,-0.369 0.16938,-0.138 0.30487,-0.41 0.84329,-2.016 0.35301,-1.455 -0.0143,-0.505 -0.30487,-0.716 -0.52951,-0.523 -0.34766,-3.311 0.0802,-0.119 0.30487,-0.185 0.48316,-0.163"
+ class="c21195"
+ id="Pike, KY" />
+ <path
+ d="m 734.05387,286.31314 1.32467,2.038 -1.37459,2.228 -4.163,2.58 -2.62617,-4.582 1.29258,-1.324 4.6943,-1.496 0.85221,0.556"
+ class="c21097"
+ id="Harrison, KY" />
+ <path
+ d="m 729.84095,293.15914 4.163,-2.58 4.35733,3.641 -1.5921,2.008 -3.53365,1.558 -2.46036,-2.979 -0.93422,-1.648"
+ class="c21017"
+ id="Bourbon, KY" />
+ <path
+ d="m 732.8219,301.93314 4.70143,0.321 0.65075,6.614 -1.83101,1.246 -2.70818,-0.04 -3.8403,-4.919 1.39777,-1.975 1.62954,-1.246"
+ class="c21151"
+ id="Madison, KY" />
+ <path
+ d="m 736.34307,310.11414 -0.0553,0.264 0.0874,0.587 0.34588,0.618 0.54021,0.756 0.49564,1.197 0.28169,1.102 -2.24107,4.211 -4.36446,-3.593 0.57052,-3.742 1.63132,-1.441 2.70818,0.04"
+ class="c21203"
+ id="Rockcastle, KY" />
+ <path
+ d="m 735.08972,323.42714 1.13925,0.171 -0.50277,3.646 0.0392,0.323 1.05903,2.282 0.53129,0.651 1.166,1.086 -0.62757,0.07 -9.43495,0.884 1.46374,-3.239 1.15708,-1.822 0.27991,-1.448 3.72977,-2.605"
+ class="c21147"
+ id="McCreary, KY" />
+ <path
+ d="m 727.79243,308.55414 4.21114,2.96 -0.57052,3.742 -3.67271,2.548 0.0891,-1.448 -0.4582,-1.357 -1.40668,-0.538 -1.08399,-0.724 -0.28169,-0.907 0.0178,-1.881 3.15568,-2.395"
+ class="c21137"
+ id="Lincoln, KY" />
+ <path
+ d="m 726.25025,304.51314 0.33696,-0.321 0.26565,-0.09 1.31041,0.749 0.0713,0.538 0.57052,0.708 0.27456,0.103 0.0481,-0.03 0.66679,-1.015 3.8403,4.919 -1.63132,1.441 -4.21114,-2.96 -1.76861,-1.624 0.22643,-2.417"
+ class="c21079"
+ id="Garrard, KY" />
+ <path
+ d="m 726.73875,300.06314 4.45361,3.116 -1.39777,1.975 -0.66679,1.015 -0.0481,0.03 -0.27456,-0.103 -0.57052,-0.708 -0.0713,-0.538 -1.31041,-0.749 -0.26565,0.09 -0.33696,0.321 -0.007,-1.084 0.49564,-3.366"
+ class="c21113"
+ id="Jessamine, KY" />
+ <path
+ d="m 730.77517,294.80714 2.46036,2.979 -0.41363,4.147 -1.62954,1.246 -4.45361,-3.116 0.31557,-2.671 3.72085,-2.585"
+ class="c21067"
+ id="Fayette, KY" />
+ <path
+ d="m 725.05216,295.78514 2.00216,1.607 -0.31557,2.671 -0.49564,3.366 -1.8417,-2.307 -1.62241,-3.231 2.27316,-2.106"
+ class="c21239"
+ id="Woodford, KY" />
+ <path
+ d="m 727.21478,288.57714 2.62617,4.582 0.93422,1.648 -3.72085,2.585 -2.00216,-1.607 -0.70067,-3.574 2.51028,-3.117 0.35301,-0.517"
+ class="c21209"
+ id="Scott, KY" />
+ <path
+ d="m 722.03198,292.37814 2.31951,-0.167 0.70067,3.574 -2.27316,2.106 -2.87042,0.05 -0.0874,-4.812 2.21076,-0.749"
+ class="c21073"
+ id="Franklin, KY" />
+ <path
+ d="m 719.90858,297.93914 2.87042,-0.05 1.62241,3.231 -1.42095,0.852 -2.14657,1.406 -0.22286,0.12 -0.13015,-0.01 -0.0571,-0.07 -2.20185,0.112 -0.46533,-1.671 1.00554,-1.631 1.14639,-2.291"
+ class="c21005"
+ id="Anderson, KY" />
+ <path
+ d="m 724.40141,301.12214 1.8417,2.307 0.007,1.084 -0.22643,2.417 -4.9332,1.375 -0.66679,-4.885 0.0571,0.07 0.13015,0.01 0.22286,-0.119 2.14657,-1.407 1.42095,-0.852"
+ class="c21167"
+ id="Mercer, KY" />
+ <path
+ d="m 726.02382,306.93014 1.76861,1.624 -3.15568,2.395 -3.44985,0.467 -0.0642,-2.002 -0.0321,-1.109 4.9332,-1.375"
+ class="c21021"
+ id="Boyle, KY" />
+ <path
+ d="m 721.1869,311.41614 3.44985,-0.467 -0.0178,1.881 0.28169,0.907 1.08399,0.724 1.40668,0.538 0.4582,1.357 -0.0891,1.448 -2.92391,3.189 -2.75632,-1.301 -2.53167,-2.614 1.37459,-2.571 0.26387,-3.091"
+ class="c21045"
+ id="Casey, KY" />
+ <path
+ d="m 727.76034,317.80414 3.67271,-2.548 4.36446,3.593 -0.70779,4.578 -3.72977,2.605 -5.01343,-2.444 -1.51009,-2.595 2.92391,-3.189"
+ class="c21199"
+ id="Pulaski, KY" />
+ <path
+ d="m 731.35995,326.03214 -0.27991,1.448 -1.15708,1.822 -1.46374,3.239 -0.1355,0 -3.35892,0.154 -0.38689,-0.08 -0.20859,-0.112 -0.0874,-0.185 -0.47246,-1.366 -0.0499,-0.218 -0.0143,-0.353 0.0481,-0.304 -0.73276,-1.971 -0.49207,-0.85 3.7779,-3.674 5.01343,2.444"
+ class="c21231"
+ id="Wayne, KY" />
+ <path
+ d="m 722.08011,319.69214 2.75632,1.301 1.51009,2.595 -3.7779,3.674 -0.89857,0.842 -1.50296,-0.883 -0.66679,-0.28 -0.0963,0.06 0.016,0.114 0.41898,0.561 -0.24426,0.1 -0.15154,-0.03 -0.11945,-0.07 -0.68463,-0.87 0.70959,-0.713 0.2906,-1.706 0.61688,-0.922 1.14103,-2.266 0.68284,-1.503"
+ class="c21207"
+ id="Russell, KY" />
+ <path
+ d="m 719.83905,327.67914 -0.41898,-0.561 -0.016,-0.114 0.0963,-0.06 0.66679,0.28 1.50296,0.883 0.89857,-0.842 0.49207,0.85 0.73276,1.971 -0.0481,0.304 0.0143,0.353 0.0499,0.218 0.47246,1.366 0.0874,0.185 0.20859,0.112 0.38689,0.08 -5.641,0.354 -0.35301,0.06 0.86826,-5.44"
+ class="c21053"
+ id="Clinton, KY" />
+ <path
+ d="m 719.34876,326.08914 -0.70959,0.713 0.68463,0.87 0.11945,0.07 0.15154,0.03 0.24426,-0.1 -0.86826,5.44 -2.54059,0.46 -3.4142,-4.284 2.31417,-3.062 4.01859,-0.144"
+ class="c21057"
+ id="Cumberland, KY" />
+ <path
+ d="m 719.54844,317.07814 2.53167,2.614 -0.68284,1.503 -1.14103,2.266 -0.61688,0.922 -0.2906,1.706 -4.01859,0.144 -1.79179,-3.785 2.93104,-2.266 3.07902,-3.104"
+ class="c21001"
+ id="Adair, KY" />
+ <path
+ d="m 713.72202,314.12614 0.0339,-0.06 0.35123,-0.149 1.69016,-0.159 4.02394,-0.04 1.10181,0.795 -1.37459,2.571 -3.07902,3.104 -1.68659,-2.396 -1.01802,-1.291 -2.10735,-1.383 -0.0553,-0.202 -0.009,-0.658 2.12875,-0.126"
+ class="c21217"
+ id="Taylor, KY" />
+ <path
+ d="m 714.19626,307.88014 0.68284,0.931 0.78803,0.731 1.38351,0.348 4.07207,-0.476 0.0642,2.002 -0.26387,3.091 -1.10181,-0.795 -4.02394,0.04 -1.69016,0.159 -0.35123,0.149 -0.0339,0.06 -1.2284,-1.94 1.70264,-4.306"
+ class="c21155"
+ id="Marion, KY" />
+ <path
+ d="m 720.42383,303.42014 0.66679,4.885 0.0321,1.109 -4.07207,0.476 -1.38351,-0.348 -0.78803,-0.731 -0.68284,-0.931 4.02572,-4.348 2.20185,-0.112"
+ class="c21229"
+ id="Washington, KY" />
+ <path
+ d="m 712.72718,298.32414 6.03501,1.906 -1.00554,1.631 -5.79432,0.2 0.7488,-3.052 0.016,-0.685"
+ class="c21215"
+ id="Spencer, KY" />
+ <path
+ d="m 714.68655,293.19914 5.13467,-0.07 0.0874,4.812 -1.14639,2.291 -6.03501,-1.906 -1.13391,-3.082 0.19968,-0.262 0.16224,-0.109 0.30488,-0.121 0.6757,-0.202 0.6668,0.05 0.47424,-0.208 0.60974,-1.189"
+ class="c21211"
+ id="Shelby, KY" />
+ <path
+ d="m 716.13424,287.71814 1.63133,-0.449 4.26641,5.109 -2.21076,0.749 -5.13467,0.07 -0.89856,-3.04 2.34625,-2.441"
+ class="c21103"
+ id="Henry, KY" />
+ <path
+ d="m 720.07082,285.48614 2.46749,-1.649 0.48138,2.316 2.95065,2.628 0.34409,0.151 0.54734,0.162 -2.51028,3.117 -2.31951,0.167 -4.26641,-5.109 2.30525,-1.783"
+ class="c21187"
+ id="Owen, KY" />
+ <path
+ d="m 725.31781,281.58714 1.519,0.06 1.67055,5.609 -1.29258,1.324 -0.35301,0.517 -0.54734,-0.162 -0.34409,-0.151 -2.95065,-2.628 -0.48138,-2.316 2.07348,-1.582 0.70602,-0.668"
+ class="c21081"
+ id="Grant, KY" />
+ <path
+ d="m 732.0517,280.15014 1.14996,5.607 -4.6943,1.496 -1.67055,-5.609 1.96116,-0.578 3.08436,-1.97 0.16937,1.054"
+ class="c21191"
+ id="Pendleton, KY" />
+ <path
+ d="m 729.93009,275.89814 1.95224,3.198 -3.08436,1.97 -2.35517,-6.454 3.48729,1.286"
+ class="c21037"
+ id="Campbell, KY" />
+ <path
+ d="m 726.4428,274.61214 2.35517,6.454 -1.96116,0.578 -1.519,-0.06 -0.88431,-6.242 2.0093,-0.733"
+ class="c21117"
+ id="Kenton, KY" />
+ <path
+ d="m 724.4335,275.34514 0.88431,6.242 -0.70602,0.668 -2.53168,-1.537 -0.24247,-1.003 -1.77395,-2.828 0.81833,-1.847 3.55148,0.305"
+ class="c21015"
+ id="Boone, KY" />
+ <path
+ d="m 722.08011,280.71814 2.53168,1.537 -2.07348,1.582 -2.46749,1.649 -1.88093,-2.138 3.89022,-2.63"
+ class="c21077"
+ id="Gallatin, KY" />
+ <path
+ d="m 715.26598,285.34914 2.92391,-2.001 1.88093,2.138 -2.30525,1.783 -1.63133,0.449 -3.35179,-3.231 2.48353,0.862"
+ class="c21041"
+ id="Carroll, KY" />
+ <path
+ d="m 712.78245,284.48714 3.35179,3.231 -2.34625,2.441 -2.19472,-0.487 -0.0553,-1.449 1.24445,-3.736"
+ class="c21223"
+ id="Trimble, KY" />
+ <path
+ d="m 713.78799,290.15914 0.89856,3.04 -0.60974,1.189 -0.47424,0.208 -0.6668,-0.05 -0.6757,0.202 -0.30488,0.121 -0.16224,0.109 -0.19968,0.262 -3.2787,-1.858 3.2787,-3.712 2.19472,0.487"
+ class="c21185"
+ id="Oldham, KY" />
+ <path
+ d="m 708.31457,293.38414 3.2787,1.858 1.13391,3.082 -0.016,0.685 -2.17153,1.276 -2.80981,0 -2.75097,1.327 -0.53842,0.399 -0.52951,0.751 -0.2086,-0.17 0.44215,-4.041 1.67233,-2.757 2.4978,-2.41"
+ class="c21111"
+ id="Jefferson, KY" />
+ <path
+ d="m 712.71113,299.00914 -0.7488,3.052 -1.46196,2.461 0.16938,0.151 -0.025,0.05 -1.02694,1.254 -0.5723,0.411 -0.77911,0.307 -0.30487,-0.02 -4.05068,-3.913 0.52951,-0.751 0.53842,-0.399 2.75097,-1.327 2.80981,0 2.17153,-1.276"
+ class="c21029"
+ id="Bullitt, KY" />
+ <path
+ d="m 717.75665,301.86114 0.46533,1.671 -4.02572,4.348 -1.70264,4.306 -0.62044,0.754 -0.0695,0.05 -0.91639,-0.321 -0.0499,-0.435 0.0321,-0.715 0.0321,-0.354 0.37797,-0.434 -0.41006,-1.615 -0.16759,-0.118 -1.25336,-0.547 -0.25673,-0.05 -1.23018,-1.728 0.30487,0.02 0.77911,-0.307 0.5723,-0.411 1.02694,-1.254 0.025,-0.05 -0.16938,-0.151 1.46196,-2.461 5.79432,-0.2"
+ class="c21179"
+ id="Nelson, KY" />
+ <path
+ d="m 709.19175,308.40314 0.25673,0.05 1.25336,0.547 0.16759,0.118 0.41006,1.615 -0.37797,0.434 -0.0321,0.354 -0.0321,0.715 0.0499,0.435 0.91639,0.321 0.0695,-0.05 0.62044,-0.754 1.2284,1.94 -2.12875,0.126 -1.20522,1.245 -4.2985,0.05 0.0553,-2.441 1.21414,-1.67 0.75415,-0.949 1.07864,-2.08"
+ class="c21123"
+ id="Larue, KY" />
+ <path
+ d="m 710.38805,315.49714 1.20522,-1.245 0.009,0.658 0.0553,0.202 2.10735,1.383 1.01802,1.291 1.68659,2.396 -2.93104,2.266 -3.07901,-1.358 -0.0713,-5.593"
+ class="c21087"
+ id="Green, KY" />
+ <path
+ d="m 710.45937,321.09014 3.07901,1.358 1.79179,3.785 -2.31417,3.062 -2.66004,-0.257 -0.60974,-3.776 -0.31379,-1.407 -0.32983,-0.932 -0.16759,-0.644 0.51347,-0.802 1.01089,-0.387"
+ class="c21169"
+ id="Metcalfe, KY" />
+ <path
+ d="m 710.35596,329.03814 2.66004,0.257 3.4142,4.284 -6.42012,0.617 -3.43915,0.21 -0.24069,-2.17 4.02572,-3.198"
+ class="c21171"
+ id="Monroe, KY" />
+ <path
+ d="m 694.41354,329.72814 0.6347,1.166 3.37319,0.192 -0.0214,0.722 0.19255,2.91 -2.74918,0.676 -3.66558,0 2.23572,-5.666"
+ class="c21213"
+ id="Simpson, KY" />
+ <path
+ d="m 702.36692,327.72614 3.96332,4.51 0.24069,2.17 -4.18618,0.177 -3.79217,0.135 -0.19255,-2.91 1.79892,-1.895 0.54556,-0.868 1.04654,-1.212 0.57587,-0.107"
+ class="c21003"
+ id="Allen, KY" />
+ <path
+ d="m 709.44848,321.47714 -0.51347,0.802 0.16759,0.644 0.32983,0.932 0.31379,1.407 0.60974,3.776 -4.02572,3.198 -3.96332,-4.51 0.65966,-3.03 0.7809,-2.553 5.641,-0.666"
+ class="c21009"
+ id="Barren, KY" />
+ <path
+ d="m 706.08955,315.54314 4.2985,-0.05 0.0713,5.593 -1.01089,0.387 -5.641,0.666 -2.23394,-3.688 1.71156,-2.844 2.80445,-0.07"
+ class="c21099"
+ id="Hart, KY" />
+ <path
+ d="m 703.70229,302.59214 0.2086,0.17 4.05068,3.913 1.23018,1.728 -1.07864,2.08 -0.75415,0.949 -1.21414,1.67 -0.0553,2.441 -2.80445,0.07 -0.28883,-1.134 -1.14995,-1.375 -0.34587,-0.03 -0.31379,0.175 -0.49029,0.194 -1.8631,-0.709 1.74365,-4.966 2.53881,-0.722 0.41897,-1.389 -0.70067,-2.767 0.86826,-0.296"
+ class="c21093"
+ id="Hardin, KY" />
+ <path
+ d="m 694.01952,302.68014 3.62458,-2.329 -0.0553,0.649 0,0.04 0.007,0.161 0.007,0.105 0.0161,0.04 0.12836,0.449 0.10519,0.161 0.041,0.06 0.0874,0.06 0.81121,0.537 0.78089,0.307 0.12837,0.02 2.59586,0.128 0.53664,-0.177 0.70067,2.767 -0.41897,1.389 -2.53881,0.722 -6.66259,-5.072 0.10519,-0.01"
+ class="c21163"
+ id="Meade, KY" />
+ <path
+ d="m 685.43857,306.21514 2.79732,-1.854 3.19669,3.316 -0.17829,0.171 -0.11232,1.011 1.31219,3.077 -0.30665,-0.117 -3.49443,-1.432 -0.0107,-1.253 -0.7702,-1.07 -1.10182,-1.141 -1.40668,0.02 0.0749,-0.731"
+ class="c21091"
+ id="Hancock, KY" />
+ <path
+ d="m 691.43258,307.67714 0.13728,0 0.2389,-0.08 0.49921,-0.387 1.17313,-2.674 -0.1355,-1.373 0.0303,-0.251 0.0731,-0.104 0.0963,-0.06 0.36905,-0.07 6.66259,5.072 -1.74365,4.966 -0.19968,0.146 -1.50474,0.827 -1.79892,-0.683 -0.0178,-0.09 -0.21572,-0.223 -0.49029,-0.233 -0.0784,0 -0.41184,0.224 -0.3851,0.442 -0.53843,0.819 -1.04476,-2.152 0.30665,0.117 -1.31219,-3.077 0.11232,-1.011 0.17829,-0.171"
+ class="c21027"
+ id="Breckinridge, KY" />
+ <path
+ d="m 693.19227,313.97114 0.53843,-0.819 0.3851,-0.442 0.41184,-0.224 0.0784,0 0.49029,0.233 0.21572,0.223 0.0178,0.09 1.79892,0.683 1.50474,-0.827 0.19968,-0.146 1.8631,0.709 0.49029,-0.194 0.31379,-0.175 0.34587,0.03 1.14995,1.374 0.28883,1.134 -1.71156,2.844 -5.58573,0.914 -2.75632,-1.46 -0.0392,-3.938"
+ class="c21085"
+ id="Grayson, KY" />
+ <path
+ d="m 695.98781,319.36914 5.58573,-0.914 2.23394,3.688 -0.7809,2.553 -5.43062,-1.973 -1.60815,-3.354"
+ class="c21061"
+ id="Edmonson, KY" />
+ <path
+ d="m 697.59596,322.72314 5.43062,1.973 -0.65966,3.03 -0.57587,0.107 -1.04654,1.212 -0.54556,0.868 -1.79892,1.895 0.0214,-0.722 -3.37319,-0.192 -0.6347,-1.166 -1.40669,-2.58 0.62757,-4.01 2.74027,-0.08 1.22127,-0.335"
+ class="c21227"
+ id="Warren, KY" />
+ <path
+ d="m 693.23149,317.90914 2.75632,1.46 1.60815,3.354 -1.22127,0.335 -2.74027,0.08 -0.62757,4.01 -4.99738,-1.132 0.44215,-3.373 1.3425,-2.027 1.15708,-0.514 2.28029,-2.193"
+ class="c21031"
+ id="Butler, KY" />
+ <path
+ d="m 688.00947,326.01614 4.99738,1.132 1.40669,2.58 -2.23572,5.666 -5.40745,0.649 -0.7702,-9.651 2.0093,-0.376"
+ class="c21141"
+ id="Logan, KY" />
+ <path
+ d="m 682.2294,326.49714 3.77077,-0.105 0.7702,9.651 -0.98771,0.114 -4.02393,0.394 0.47067,-10.054"
+ class="c21219"
+ id="Todd, KY" />
+ <path
+ d="m 684.38489,318.28414 4.06673,4.359 -0.44215,3.373 -2.0093,0.376 -3.77077,0.105 -1.51543,-1.838 0.29595,-0.651 -1.20522,-1.487 -0.21751,-1.285 1.31041,-2.057 3.48729,-0.895"
+ class="c21177"
+ id="Muhlenberg, KY" />
+ <path
+ d="m 688.65308,310.38714 3.49443,1.432 1.04476,2.152 0.0392,3.938 -2.28029,2.193 -1.15708,0.514 -1.3425,2.027 -4.06673,-4.359 0.78803,-3.445 1.76683,-1.656 0.9984,-2.058 0.71493,-0.738"
+ class="c21183"
+ id="Ohio, KY" />
+ <path
+ d="m 679.70843,307.48614 0.64361,0.45 2.62617,1.751 1.3425,-2.425 1.11786,-1.047 -0.0749,0.731 1.40668,-0.02 1.10182,1.141 0.7702,1.07 0.0107,1.253 -0.71493,0.738 -0.9984,2.058 -1.76683,1.656 -6.91753,-2.209 1.45304,-5.144"
+ class="c21059"
+ id="Daviess, KY" />
+ <path
+ d="m 678.25539,312.63014 6.91753,2.209 -0.78803,3.445 -3.48729,0.895 -1.80605,-3.996 -2.33199,-1.59 1.49583,-0.963"
+ class="c21149"
+ id="McLean, KY" />
+ <path
+ d="m 679.09155,315.18314 1.80605,3.996 -1.31041,2.057 0.21751,1.285 1.20522,1.487 -0.29595,0.651 -1.23019,0.69 -2.07526,0.804 -2.97026,-0.765 -2.80623,-4.432 3.20738,-2.501 2.2268,-1.165 2.02534,-2.107"
+ class="c21107"
+ id="Hopkins, KY" />
+ <path
+ d="m 680.71397,324.65914 1.51543,1.838 -0.47067,10.054 -5.56077,0.579 -0.96454,0.111 0.0856,-1.969 -0.12658,-5.689 -1.4156,-0.706 0.66144,-3.489 2.97026,0.765 2.07526,-0.804 1.23019,-0.69"
+ class="c21047"
+ id="Christian, KY" />
+ <path
+ d="m 673.77682,328.87714 1.4156,0.706 0.12658,5.689 -0.0856,1.969 -2.90073,0.339 0.007,-0.708 -2.98809,-0.06 -1.07151,0.06 -0.86647,-1.526 -1.07508,-2.708 4.91716,-2.57 2.52098,-1.198"
+ class="c21221"
+ id="Trigg, KY" />
+ <path
+ d="m 665.14773,326.24014 1.69551,-0.898 0.98949,0.03 1.42095,2.362 2.00216,2.339 -4.91716,2.57 -1.72581,-2.523 0.53486,-3.882"
+ class="c21143"
+ id="Lyon, KY" />
+ <path
+ d="m 671.63203,320.95614 2.80623,4.432 -0.66144,3.489 -2.52098,1.198 -2.00216,-2.339 -1.42095,-2.362 -0.98949,-0.03 4.95103,-5.063 -0.16224,0.677"
+ class="c21033"
+ id="Caldwell, KY" />
+ <path
+ d="m 676.75956,313.59314 2.33199,1.59 -2.02534,2.107 -2.2268,1.165 -3.20738,2.501 0.16224,-0.677 -2.57803,-2.124 3.26087,-3.967 4.28245,-0.595"
+ class="c21233"
+ id="Webster, KY" />
+ <path
+ d="m 676.95211,306.74714 2.75632,0.739 -1.45304,5.144 -1.49583,0.963 -4.28245,0.595 -3.99542,-5.792 4.07565,-0.323 4.39477,-1.326"
+ class="c21101"
+ id="Henderson, KY" />
+ <path
+ d="m 666.87533,310.92614 1.60636,-2.53 3.99542,5.792 -3.26087,3.967 -2.36587,-0.392 -1.43521,-1.487 -0.1462,-0.264 -0.3851,-1.045 -0.0107,-0.02 -0.0945,-0.52 -0.009,-0.03 0.025,-0.161 0.0963,-0.256 0.0232,-0.05 0.1462,-0.248 0.29061,-0.547 0.0143,0 0.83616,-0.608 0.21751,-0.236 0.1355,-0.247 0.0874,-0.234 0.23356,-0.875"
+ class="c21225"
+ id="Union, KY" />
+ <path
+ d="m 669.21624,318.15514 2.57803,2.124 -4.95103,5.063 -1.69551,0.898 -3.47838,-5.714 0.45641,-0.608 0.30666,-0.283 0.016,0 0.0874,-0.06 0.43502,-0.264 0.0392,0 0.1141,-0.03 0.312,-0.09 0.37797,-0.08 2.5085,-0.531 0.18363,-0.04 0.3441,-0.392 0,-0.371 2.36587,0.392"
+ class="c21055"
+ id="Crittenden, KY" />
+ <path
+ d="m 661.66935,320.52614 3.47838,5.714 -0.53486,3.882 -4.4857,-0.587 -1.54219,-1.146 1.32468,0.141 0.13549,-0.02 0.41898,-0.185 0.21573,-0.595 0.26564,-1.277 -0.51346,-1.141 -0.22464,-0.216 -0.24247,-0.137 -0.76307,-0.916 -0.15511,-0.498 0.0107,-0.153 0,0 0.51525,-2.264 0.0945,-0.227 0.23355,-0.303 0.16224,-0.114 0.12837,-0.1 0.312,-0.143 0.11232,-0.05 1.05368,0.344"
+ class="c21139"
+ id="Livingston, KY" />
+ <path
+ d="m 660.56754,335.82514 6.84622,-0.472 0.86647,1.526 0.65966,4.154 -7.97834,0.554 -0.39401,-5.762"
+ class="c21035"
+ id="Calloway, KY" />
+ <path
+ d="m 660.12717,329.53514 4.4857,0.587 1.72581,2.523 1.07508,2.708 -6.84622,0.472 -0.32984,-4.434 -0.11053,-1.856"
+ class="c21157"
+ id="Marshall, KY" />
+ <path
+ d="m 660.2377,331.39114 0.32984,4.434 0.39401,5.762 -0.49742,0.03 -5.48946,0.396 -0.41719,-6.254 -0.29774,-3.999 5.97796,-0.371"
+ class="c21083"
+ id="Graves, KY" />
+ <path
+ d="m 651.68171,325.45414 6.90327,2.935 1.54219,1.146 0.11053,1.856 -5.97796,0.371 -0.0642,-0.176 -2.61191,-6.1 0.0981,-0.03"
+ class="c21145"
+ id="McCracken, KY" />
+ <path
+ d="m 654.25974,331.76214 0.29774,3.999 -5.68201,0.139 -1.05189,-0.554 -0.009,0 0,-0.53 0.009,0 0.50634,-0.289 0.0107,0 0.68819,-2.298 5.16676,-0.618 0.0642,0.176"
+ class="c21039"
+ id="Carlisle, KY" />
+ <path
+ d="m 651.58365,325.48614 2.61191,6.1 -5.16676,0.618 -0.65075,-0.838 -0.85756,-1.927 4.06316,-3.953"
+ class="c21007"
+ id="Ballard, KY" />
+ <path
+ d="m 636.69491,477.27614 8.21903,0.548 3.30187,4.548 0.0339,0.03 0.12836,0.13 1.23018,2.5 0.0303,0.426 -0.18363,0.465 -0.0499,0.193 0.016,0.123 0.62936,1.194 0.19255,0.371 0.43145,0.505 0.1462,0.169 0.0499,0.03 0.0713,0.05 0.0481,0.03 0.0374,0 0.91818,-0.06 -1.91124,0.784 -0.12837,-0.08 -1.10359,-0.36 -3.87775,-0.307 -0.45998,0.179 -1.8631,1.117 -2.20362,-0.836 -2.77058,-0.577 -0.93244,-11.172"
+ class="c22103"
+ id="St. Tammany, LA" />
+ <path
+ d="m 644.54488,470.11114 2.1127,-0.144 0.041,0.713 -0.24247,1.214 -0.1979,0.442 -0.12302,0.02 -0.16046,0.02 -0.0463,0.05 -0.25852,1.075 -0.29774,1.469 -0.2389,1.213 -0.21929,1.642 -8.21903,-0.548 -0.009,-0.41 -1.42986,-3.405 -0.61866,-0.515 -0.14441,-2.177 1.7276,-0.105 8.32422,-0.553"
+ class="c22117"
+ id="Washington, LA" />
+ <path
+ d="m 572.28873,444.94914 0.83617,0 4.71034,1.879 0.23177,0.227 0.47246,0.713 0.37084,1.159 0.009,0.103 -0.10519,1.334 -1.80783,2.139 -0.8112,0.368 -0.7809,0 -0.56873,-0.202 -0.10698,-0.761 -1.75077,-1.293 -0.2086,-0.256 -1.23018,-1.915 -0.74702,-2.466 -1.2908,-0.972 2.77771,-0.07"
+ class="c22081"
+ id="Red River, LA" />
+ <path
+ d="m 583.46733,436.59314 2.10556,2.967 -0.49028,7.085 -2.4051,0.06 -4.84227,0.135 -4.71034,-1.879 0.96453,-4.042 2.62795,-0.08 1.70442,-1.085 -0.0267,-0.571 -0.67392,-2.403 5.74619,-0.184"
+ class="c22013"
+ id="Bienville, LA" />
+ <path
+ d="m 586.32705,432.46914 1.59032,-0.05 0.82725,0.1 0.62757,0.137 3.00592,1.664 0.0802,2.009 0.0642,2.006 -3.99363,0.141 0.0481,0.993 -3.00414,0.09 -2.10556,-2.967 2.85972,-4.124"
+ class="c22061"
+ id="Lincoln, LA" />
+ <path
+ d="m 585.57289,439.56014 3.00414,-0.09 -0.0481,-0.993 3.99363,-0.141 0.0731,1.85 0.11232,0.282 1.97542,1.824 0.0321,0.995 0.11232,3.029 -9.74516,0.33 0.49028,-7.085"
+ class="c22049"
+ id="Jackson, LA" />
+ <path
+ d="m 585.08261,446.64514 9.74516,-0.33 0.19434,5.029 -0.85935,3.054 -4.99917,0.17 0.025,1.086 -0.0731,0.932 -6.78917,0.248 1.20522,-3.753 0.35301,-1.614 0.0339,-0.281 -0.12837,-1.705 -0.41184,-1.485 -0.70067,-1.294 2.4051,-0.06"
+ class="c22127"
+ id="Winn, LA" />
+ <path
+ d="m 594.71545,443.28614 5.37714,-0.207 2.82763,2.78 0.4261,0.57 0.10519,0.193 0.0481,0.595 -1.0198,0.626 0.4582,1.622 0.26208,0.532 -2.20719,1.116 -5.97083,0.231 -0.19434,-5.029 -0.11232,-3.029"
+ class="c22021"
+ id="Caldwell, LA" />
+ <path
+ d="m 599.07279,432.83314 3.14141,4.878 -2.12161,5.368 -5.37714,0.207 -0.0321,-0.995 -1.97542,-1.824 -0.11232,-0.282 -0.0731,-1.85 -0.0642,-2.006 2.96669,-0.1 0.52952,-0.162 0.19968,-0.138 2.52276,-2.467 0.3958,-0.633"
+ class="c22073"
+ id="Ouachita, LA" />
+ <path
+ d="m 611.16421,435.55014 -0.18898,1.027 -0.22821,3.054 -3.00414,0.16 -0.72384,0.425 -1.68125,2.002 -0.87361,2.016 -1.54396,1.625 -2.82763,-2.78 2.12161,-5.368 0.70602,-0.642 1.34963,-0.959 1.3015,-0.441 1.19095,-0.597 0.18364,-0.199 0.26565,-0.482 0.1765,-0.545 -0.0232,-0.09 0.8023,0.259 0.84329,1.622 2.15371,-0.09"
+ class="c22083"
+ id="Richland, LA" />
+ <path
+ d="m 610.65966,444.30614 -1.26227,7.466 -0.47425,-1.31 -0.98058,-0.465 -0.0303,0.192 -0.35122,0.596 -0.71137,0.786 -0.49563,0.362 -0.9271,0.257 -0.28882,-0.37 -0.46533,-0.714 -0.69889,-0.708 -0.49207,-0.314 -0.28169,-0.09 -0.26208,-0.532 -0.4582,-1.622 1.0198,-0.626 -0.0481,-0.595 -0.10519,-0.193 -0.4261,-0.57 1.54396,-1.625 0.87361,-2.016 1.68125,-2.002 0.72384,-0.425 3.00414,-0.16 -0.0874,4.675"
+ class="c22041"
+ id="Franklin, LA" />
+ <path
+ d="m 610.65966,444.30614 3.33396,-0.136 0.0963,-0.183 0.33696,-0.241 2.14479,-0.692 0.87539,-0.146 0.11411,0 0.25138,0.208 0.005,0.5 0,0.02 1.96116,2.291 -3.99363,5.828 -2.22502,2.942 -0.19255,0.346 -3.23948,-0.307 -0.73097,-2.965 1.26227,-7.466"
+ class="c22107"
+ id="Tensas, LA" />
+ <path
+ d="m 618.02826,435.64414 -0.4368,1.471 0.0339,0.369 0,0.03 0.0553,0.08 0.082,0.128 0.016,0.04 2.14479,2.282 0.1355,3.318 -2.24107,0.278 0,-0.02 -0.005,-0.5 -0.25138,-0.208 -0.11411,0 -0.87539,0.146 -2.14479,0.692 -0.33696,0.241 -0.0963,0.183 -3.33396,0.136 0.0874,-4.675 0.22821,-3.054 7.05303,-0.933"
+ class="c22065"
+ id="Madison, LA" />
+ <path
+ d="m 616.04927,425.55214 -0.63292,1.021 -0.20146,0.731 0.0321,0.186 1.54218,6.988 0.11411,0.275 0.0214,0.04 0.0606,0.07 0.0214,0.04 0.041,0.03 0.18364,0.161 0.0481,0.04 0.61153,0.191 0.13728,0.313 -7.05303,0.933 0.18898,-1.027 0.54912,-0.524 0.18364,-0.56 0.57765,-2.22 0.29596,-2.547 0.0891,-0.676 0.70067,-2.058 0.59369,-1.34 1.89519,-0.07"
+ class="c22035"
+ id="East Carroll, LA" />
+ <path
+ d="m 614.15408,425.62514 -0.59369,1.34 -0.70067,2.058 -0.0891,0.676 -0.29596,2.547 -0.57765,2.22 -0.18364,0.56 -0.54912,0.524 -2.15371,0.09 -0.84329,-1.622 -0.8023,-0.259 0.70602,-1.984 2.69035,-5.52 0.1141,-0.493 3.2787,-0.134"
+ class="c22123"
+ id="West Carroll, LA" />
+ <path
+ d="m 610.40114,425.78514 0.47424,-0.03 -0.1141,0.493 -2.69035,5.52 -0.70602,1.984 0.0232,0.09 -0.1765,0.545 -0.26565,0.482 -0.18364,0.199 -1.19095,0.598 -1.3015,0.44 -1.34963,0.959 -0.70602,0.642 -3.14141,-4.878 0.0874,-0.07 0.14441,-0.314 -0.0571,-1.214 -0.69711,-1.977 0.17473,-2.997 11.67601,-0.475"
+ class="c22067"
+ id="Morehouse, LA" />
+ <path
+ d="m 598.72513,426.25914 -0.17473,2.997 0.69711,1.978 0.0571,1.214 -0.14441,0.314 -0.0874,0.07 -0.3958,0.633 -2.52276,2.467 -0.19968,0.138 -0.52952,0.162 -2.96669,0.1 -0.0802,-2.009 -3.00592,-1.664 -0.62757,-0.137 -0.82725,-0.1 -1.59032,0.05 -0.19433,-5.871 12.59241,-0.339"
+ class="c22111"
+ id="Union, LA" />
+ <path
+ d="m 581.07115,426.69314 5.06157,-0.1 0.19433,5.871 -2.85972,4.124 -5.74619,0.184 0.0481,-1.133 -0.29061,-1.904 -0.97701,0.04 -0.22642,-6.958 4.79592,-0.13"
+ class="c22027"
+ id="Claiborne, LA" />
+ <path
+ d="m 571.4383,426.95114 4.83693,-0.128 0.22642,6.958 0.97701,-0.04 0.29061,1.904 -0.0481,1.133 0.67392,2.403 0.0267,0.57 -1.70442,1.086 -2.62795,0.08 -1.32646,0.02 -0.16224,-2.015 -0.12658,-6.069 -0.20147,-2.498 -0.54734,-0.57 -0.67392,-1.006 -0.36014,-0.642 0,-0.345 0.15867,-0.837 0.58835,0"
+ class="c22119"
+ id="Webster, LA" />
+ <path
+ d="m 570.84995,426.95814 -0.15867,0.837 0,0.345 0.36014,0.642 0.67392,1.006 0.54734,0.57 0.20147,2.498 0.12658,6.069 0.16224,2.015 1.32646,-0.02 -0.96453,4.042 -0.83617,0 -1.71155,-2.225 -2.15371,-1.148 -2.41757,-7.426 -0.20147,-1.085 -0.82725,-5.722 0.0321,-0.09 0.2086,-0.177 0.18542,0 5.44666,-0.121"
+ class="c22015"
+ id="Bossier, LA" />
+ <path
+ d="m 565.21787,427.08014 -0.2086,0.176 -0.0321,0.09 0.82725,5.722 0.20147,1.085 2.41757,7.426 2.15371,1.148 1.71155,2.225 -2.77771,0.07 -0.0178,-0.756 -0.18542,-0.28 -0.44928,-0.483 -0.40293,-0.297 -1.58319,-0.532 -0.33696,-0.07 -0.36727,0.08 -0.28348,0.178 -0.1034,0.09 -0.96632,1.141 -0.0535,0.339 0.0392,0.137 -0.0642,0.2 -0.68284,0.629 -1.04654,0.745 -1.77396,0.03 -0.2496,-11.459 -0.0802,-4.34 -0.0713,-3.189 4.38586,-0.1"
+ class="c22017"
+ id="Caddo, LA" />
+ <path
+ d="m 569.51102,445.01514 1.2908,0.972 0.74702,2.466 1.23018,1.914 0.2086,0.257 1.75077,1.293 -1.62241,2.048 -8.51677,0.227 -2.74027,-3.062 -0.62579,-4.967 1.77396,-0.03 1.04654,-0.745 0.68284,-0.629 0.0642,-0.2 -0.0392,-0.137 0.0535,-0.339 0.96632,-1.141 0.1034,-0.09 0.28348,-0.178 0.36727,-0.08 0.33696,0.07 1.58319,0.531 0.40293,0.298 0.44928,0.483 0.18542,0.28 0.0178,0.756"
+ class="c22031"
+ id="De Soto, LA" />
+ <path
+ d="m 564.59921,454.19214 8.51677,-0.227 0.0642,3.006 2.00929,-0.05 0.1462,4.051 1.96828,-0.06 0.12837,4.002 -3.0291,0.09 -2.79554,2.187 -0.22642,0.715 -0.0963,1.255 0.0481,0.04 -0.91461,0.24 -0.20325,-1.189 -0.1355,-0.754 -0.58656,-2.557 -1.8007,-2.612 -2.1127,-2.219 -0.98058,-5.919"
+ class="c22085"
+ id="Sabine, LA" />
+ <path
+ d="m 577.83524,446.83714 4.84227,-0.135 0.70067,1.294 0.41184,1.485 0.12837,1.705 -0.0339,0.281 -0.35301,1.614 -1.20522,3.753 5.1097,4.234 -5.0063,4.108 -4.99738,-0.257 -0.12837,-4.002 -1.96828,0.06 -0.1462,-4.051 -2.00929,0.05 -0.0642,-3.006 1.62241,-2.048 0.10698,0.761 0.56873,0.202 0.7809,0 0.8112,-0.368 1.80783,-2.139 0.10519,-1.334 -0.009,-0.103 -0.37084,-1.159 -0.47246,-0.713 -0.23177,-0.227"
+ class="c22069"
+ id="Natchitoches, LA" />
+ <path
+ d="m 582.32629,456.83414 6.78917,-0.248 0.0731,-0.932 -0.025,-1.086 4.99917,-0.17 0.22464,2.912 0.64184,1.774 0.92531,1.287 0.89321,0.981 0.84865,0.246 -2.08061,0.533 -6.37198,1.808 -0.52238,0.07 -0.59548,-0.209 -0.13371,-0.1 -0.26565,-1.184 -0.29061,-1.453 -5.1097,-4.234"
+ class="c22043"
+ id="Grant, LA" />
+ <path
+ d="m 595.02211,451.34414 5.97083,-0.231 0.53129,13.838 -1.55288,-0.16 -2.27494,-3.193 -0.84865,-0.246 -0.89321,-0.981 -0.92531,-1.287 -0.64184,-1.774 -0.22464,-2.912 0.85935,-3.054"
+ class="c22059"
+ id="La Salle, LA" />
+ <path
+ d="m 600.99294,451.11314 2.20719,-1.116 0.28169,0.09 0.49207,0.314 0.69889,0.708 0.46533,0.714 0.28882,0.37 0.9271,-0.257 0.49563,-0.362 0.71137,-0.786 0.35122,-0.596 0.0303,-0.192 0.98058,0.465 0.47425,1.31 0.73097,2.965 -2.69391,0.337 -0.15868,0.145 -2.10379,2.531 -0.13015,0.225 -0.73097,2.967 -0.10519,0.656 0.0891,3.489 0.066,0.21 0.624,0.876 -1.09111,-0.539 -0.40293,-0.1 -0.3441,0.06 -0.22642,0.232 -0.1355,0.353 0.19077,0.465 0.23534,0.284 0.0642,0.153 -0.37797,0.225 -0.93244,-0.06 -0.0891,-0.1 -0.35123,-1.431 0,-0.771 -0.53129,-13.838"
+ class="c22025"
+ id="Catahoula, LA" />
+ <path
+ d="m 610.12836,454.73714 3.23948,0.307 -0.30844,0.528 -0.0143,0.02 -2.09666,4.212 -0.0481,0.09 -0.0731,0.155 -0.007,0.02 -0.73098,5.992 -0.47424,2.477 -0.47603,3.592 -0.47246,0.69 0.0571,-0.554 -1.3425,-1.086 0.14441,-0.346 0.0963,-0.335 0.52416,-2.662 -0.22642,-0.271 -0.35836,-0.185 -0.0998,0.03 -0.65966,-0.09 -0.93066,-0.248 -0.44394,-0.28 -0.44215,-0.611 -0.624,-0.876 -0.066,-0.21 -0.0891,-3.489 0.10519,-0.656 0.73097,-2.967 0.13015,-0.225 2.10379,-2.531 0.15868,-0.145 2.69391,-0.337"
+ class="c22029"
+ id="Concordia, LA" />
+ <path
+ d="m 599.97135,464.79114 1.55288,0.16 0,0.771 0.35123,1.431 0.0891,0.1 0.93244,0.06 0.37797,-0.224 -0.0642,-0.154 -0.23534,-0.283 -0.19077,-0.465 0.1355,-0.353 0.22642,-0.232 0.3441,-0.06 0.40293,0.1 1.09111,0.539 0.44215,0.611 0.44394,0.28 0.93066,0.248 0.65966,0.09 0.0998,-0.03 0.35836,0.185 0.22642,0.271 -0.52416,2.662 -0.0963,0.335 -0.14441,0.346 -0.48851,0.611 -1.11251,3.978 -7.83393,0.314 -1.43877,-2.619 1.23909,-0.658 -0.47424,-3.207 -0.16224,-4.388 0.17828,-0.153 0.1355,-0.06 0.082,0.02 1.21949,0.572 1.24622,-0.795"
+ class="c22009"
+ id="Avoyelles, LA" />
+ <path
+ d="m 587.43599,461.06814 0.29061,1.453 0.26565,1.184 0.13371,0.1 0.59548,0.209 0.52238,-0.07 6.37198,-1.808 2.08061,-0.533 2.27494,3.193 -1.24622,0.795 -1.21949,-0.572 -0.082,-0.02 -0.1355,0.06 -0.17828,0.153 0.16224,4.388 0.47424,3.207 -1.23909,0.658 -1.99147,-0.754 -4.19509,2.569 -4.44291,0.296 -0.17651,-2.785 -0.22464,-5.539 -1.02872,-1.462 -0.33874,-0.161 -1.67947,-0.449 5.0063,-4.108"
+ class="c22079"
+ id="Rapides, LA" />
+ <path
+ d="m 577.43231,464.91914 4.99738,0.257 1.67947,0.449 0.33874,0.161 1.02872,1.462 0.22464,5.539 0.17651,2.785 -3.04693,0.371 -3.0594,0 -5.66596,0.151 -2.69927,0.403 -0.0731,-7.288 -0.0481,-0.04 0.0963,-1.256 0.22642,-0.714 2.79554,-2.188 3.0291,-0.09"
+ class="c22115"
+ id="Vernon, LA" />
+ <path
+ d="m 590.32068,475.27614 4.19509,-2.569 1.99147,0.754 1.43877,2.619 0.87539,1.824 0.0499,1.253 0.0232,0.885 -0.82012,2.483 -0.82725,0.715 -3.02197,0.112 -0.65788,0.122 -0.20681,0.233 -0.62935,1.043 -2.74741,0.08 0.0339,-0.153 0.12658,-0.13 0.17651,-0.312 0.5723,-1.391 -0.0428,-0.105 -0.26387,-0.241 -0.16937,-4.195 -0.0321,-0.858 -0.0642,-2.171"
+ class="c22039"
+ id="Evangeline, LA" />
+ <path
+ d="m 585.87777,475.57214 4.44291,-0.296 0.0642,2.171 0.0321,0.858 0.16937,4.195 0.26387,0.241 0.0428,0.105 -0.5723,1.391 -0.17651,0.312 -0.12658,0.13 -2.84724,0.09 -1.57428,0.827 -3.15033,0.484 -2.30525,0.399 -0.10519,-4.001 1.64737,-0.07 1.3425,-0.04 -0.0963,-4.629 -0.0981,-1.8 3.04693,-0.371"
+ class="c22003"
+ id="Allen, LA" />
+ <path
+ d="m 582.83084,475.94314 0.0981,1.8 0.0963,4.629 -1.3425,0.04 -1.64737,0.07 0.10519,4.001 0.016,0.476 -5.04018,0.151 -0.0481,-2.009 -2.00751,0.05 0.0553,2.018 -5.08474,0.136 0.0214,-0.02 0.75772,-0.637 0.0802,-0.2 0.007,-0.119 -0.27991,-1.433 -0.55447,-0.669 -0.0571,-0.06 0,0 0.22464,-0.804 2.8205,-5.311 0.35479,-1.542 2.69927,-0.403 5.66596,-0.152 3.0594,0"
+ class="c22011"
+ id="Beauregard, LA" />
+ <path
+ d="m 589.98371,484.83214 0.44929,8.92 -2.20898,1.339 -5.13466,0.146 -0.025,-1.013 2.12161,-0.121 -0.35479,-1.02 -0.48851,-0.593 -2.09843,-2.332 -2.0717,-2.677 -0.016,-0.529 -0.016,-0.476 2.30525,-0.399 3.15033,-0.484 1.57428,-0.827 2.84724,-0.09 -0.0339,0.153"
+ class="c22053"
+ id="Jefferson Davis, LA" />
+ <path
+ d="m 580.15654,486.95214 0.016,0.529 2.0717,2.677 2.09843,2.332 0.48851,0.593 0.35479,1.02 -2.12161,0.121 0.025,1.013 -2.62795,0.09 -0.009,-0.339 -11.79725,0.328 -0.0303,0.03 0.0143,-4.441 -0.60796,-3.61 5.08474,-0.136 -0.0553,-2.018 2.00751,-0.05 0.0481,2.009 5.04018,-0.151"
+ class="c22019"
+ id="Calcasieu, LA" />
+ <path
+ d="m 588.22402,495.09114 2.45145,-0.104 0.29774,7.859 0.0303,2.667 -0.72385,-0.183 -1.83814,-0.61 -1.6652,-0.724 -0.91461,-0.394 -1.40668,-0.667 -0.66502,-0.267 -0.0267,0 -2.29633,-0.74 -1.79357,-0.435 -1.00554,-0.128 -0.80229,0 -4.14696,0.322 -1.26227,0.168 -1.9255,0.291 -0.96631,0.149 -1.1553,0.277 -0.0588,0.02 -0.11054,0.04 -0.31556,0.103 -0.64897,0.346 -0.39401,0.266 -0.36906,0.314 -0.17828,-5.126 2.29098,-3.193 0.0303,-0.03 11.79725,-0.328 0.009,0.338 2.62795,-0.09 5.13466,-0.146"
+ class="c22023"
+ id="Cameron, LA" />
+ <path
+ d="m 589.98371,484.83214 2.74741,-0.08 4.91894,-0.184 1.39598,0.94 0.80408,2.635 0,0.506 -2.69035,3.584 -1.55823,1.778 -0.41006,0.287 -0.38689,0.178 -0.353,0.119 -3.80108,-0.777 -0.21751,-0.06 -0.44929,-8.92"
+ class="c22001"
+ id="Acadia, LA" />
+ <path
+ d="m 605.77994,475.76614 0.29239,0.227 0.75951,1.292 0.70066,1.728 0.0892,0.772 -0.0963,3.125 -0.21751,0.845 0.79516,1.091 0.84508,1.206 -2.65291,0.128 -0.15154,-0.12 -0.99484,-0.354 -1.19096,0.522 -1.12499,0.692 -2.98274,1.727 0,-0.506 -0.80408,-2.635 -1.39598,-0.94 -4.91894,0.184 0.62935,-1.043 0.20681,-0.233 0.65788,-0.122 3.02197,-0.112 0.82725,-0.715 0.82012,-2.483 -0.0232,-0.885 -0.0499,-1.253 -0.87539,-1.824 7.83393,-0.314"
+ class="c22097"
+ id="St. Landry, LA" />
+ <path
+ d="m 606.89245,471.78914 1.83101,0.474 -0.0571,0.554 0.12837,2.539 0.0464,0.128 0.1462,0.138 0.11945,0.06 2.16975,1.132 3.17529,0.596 0.10341,0.05 0.37618,0.561 0.61331,1.641 -2.86864,3.856 -4.27532,0.194 -1.0929,0.04 0.21751,-0.845 0.0963,-3.125 -0.0892,-0.772 -0.70066,-1.728 -0.75951,-1.292 -0.29239,-0.227 1.11251,-3.977"
+ class="c22077"
+ id="Pointe Coupee, LA" />
+ <path
+ d="m 615.54472,479.66414 0.51347,0.112 0.15332,0.07 3.45521,7.329 -3.36606,0.184 -0.77199,-0.972 -2.18579,-2.373 -0.6668,-0.497 2.86864,-3.856"
+ class="c22121"
+ id="West Baton Rouge, LA" />
+ <path
+ d="m 599.85012,488.64714 2.98274,-1.727 1.03406,6.741 -0.24782,0.902 -2.05743,-0.829 -1.2694,-0.884 -1.65272,-0.546 -1.47978,-0.07 2.69035,-3.584"
+ class="c22055"
+ id="Lafayette, LA" />
+ <path
+ d="m 603.6191,494.56314 0.12302,5.279 -1.2801,0.578 -0.40828,0.233 -0.98771,0.676 -0.71671,0.672 -0.0802,0.451 0.36906,0.82 0.45106,0.877 0.36906,0.06 1.91301,0.06 -0.82725,0.749 -0.10697,-0.06 -1.1963,0 -1.03407,0.153 -0.016,0 -1.06259,0.48 -0.76485,0.565 -0.52238,0.144 -0.0463,0 -0.12837,0 -0.35479,0.03 -0.0963,0 -5.02235,-0.658 -1.15708,-0.162 -0.0321,0 -0.0303,-2.667 -0.29774,-7.859 -2.45145,0.104 2.20898,-1.339 0.21751,0.06 3.80108,0.777 0.353,-0.119 0.38689,-0.179 0.41006,-0.287 1.55823,-1.777 1.47978,0.07 1.65272,0.545 1.2694,0.885 2.05743,0.829"
+ class="c22113"
+ id="Vermilion, LA" />
+ <path
+ class="c22045"
+ d="m 603.37128,504.26014 1.48514,-0.538 0.47602,-0.104 0.6668,0.1 3.15033,1.391 0.0535,0.09 -0.0356,0.151 -1.11252,1.553 -0.23355,0.144 -0.77912,0.241 -0.33696,-0.1 -3.85635,-1.847 -0.30487,-0.33 0.82725,-0.749 m 12.09321,-10.801 2.91678,0.628 -0.55448,1.271 -4.30028,0.56 -3.03623,0.387 -1.61528,2.353 -3.16637,2.999 -1.96651,-1.815 -0.12302,-5.279 0.24782,-0.902 0.87004,-0.02 2.78841,-0.956 0.36906,-0.224 0.26743,-0.07 0.56873,-0.02 0.71315,0.154 0.17829,0.06 3.46411,1.006 2.37835,-0.131"
+ id="Iberia, LA" />
+ <path
+ d="m 612.67608,483.52014 0.6668,0.497 2.18579,2.373 0.77199,0.972 3.36606,-0.184 2.40152,-0.09 -1.37994,6.026 -2.30703,0.972 -2.91678,-0.628 -0.0178,-0.303 -0.21572,-0.522 -2.07348,-2.981 -0.3441,-0.152 -0.37083,-0.07 -0.62757,0.06 -0.40828,-0.03 -0.25852,-0.122 -0.25495,-0.21 -0.7078,-1.179 -0.11232,-0.315 -0.0428,-0.134 0.0428,-0.276 -0.0499,-1.204 -0.0874,-0.449 -0.27278,-0.651 -1.26227,-1.198 4.27532,-0.194"
+ class="c22047"
+ id="Iberville, LA" />
+ <path
+ d="m 623.51593,492.88214 1.75078,3.61 -2.18402,4.489 -1.41559,2.106 -0.43324,-1.655 0.0481,-1.479 -0.0161,-0.867 -0.15333,-0.298 -0.2496,-0.258 -0.40828,-0.216 -0.20859,0 -0.87004,-0.169 -0.29596,-0.289 -1.08577,-2.065 -0.16759,-0.433 0.55448,-1.271 2.30703,-0.972 2.82763,-0.233"
+ class="c22007"
+ id="Assumption, LA" />
+ <path
+ class="c22099"
+ d="m 607.30786,483.75514 1.0929,-0.04 1.26227,1.198 0.27278,0.651 0.0874,0.449 0.0499,1.204 -0.0428,0.276 0.0428,0.134 0.11232,0.315 0.7078,1.179 0.25495,0.21 0.25852,0.122 0.40828,0.03 0.62757,-0.06 0.37083,0.07 0.3441,0.152 2.07348,2.981 0.21572,0.522 0.0178,0.303 -2.37835,0.131 -3.46411,-1.006 -0.17829,-0.06 -0.71315,-0.154 -0.56873,0.02 -0.26743,0.07 -0.36906,0.224 -2.78841,0.956 -0.87004,0.02 -1.03406,-6.741 1.12499,-0.692 1.19096,-0.522 0.99484,0.354 0.15154,0.12 2.65291,-0.128 -0.84508,-1.206 -0.79516,-1.091 m 6.21865,12.163 4.30028,-0.56 0.16759,0.433 1.08577,2.065 0.29596,0.289 0.87004,0.169 0.20859,0 0.40828,0.216 0.2496,0.258 0.15333,0.298 0.0161,0.867 -0.0481,1.479 -2.35339,-1.069 -3.30187,-1.527 -2.05209,-2.918"
+ id="St. Martin, LA" />
+ <path
+ d="m 613.52651,495.91814 2.05209,2.919 3.30187,1.526 2.35339,1.069 0.43324,1.655 -3.61566,3.632 -0.44216,0 -0.84329,-0.161 -3.96154,-0.859 -0.16224,-0.779 -0.11945,-0.651 -0.27278,-0.868 -1.47087,-2.282 -0.23356,-0.161 -2.09487,-0.06 -0.29952,0.04 -2.44253,0.715 3.16637,-2.999 1.61528,-2.353 3.03623,-0.387"
+ class="c22101"
+ id="St. Mary, LA" />
+ <path
+ d="m 623.08269,500.98114 3.49621,-1.583 0.1355,-0.06 0.26565,0.03 4.9332,4.703 3.77077,3.873 0.28704,0.303 0.11945,0.34 0.12124,1.074 -0.50455,2.524 -3.05406,0 -1.63133,1.824 0.23178,1.269 -4.06673,0.91 -9.00527,-4.228 -0.50099,-0.394 -0.67927,-0.716 0.0303,-0.166 1.10004,-0.603 1.35141,-0.781 0.19077,-0.217 -0.0767,-0.451 -0.27634,-0.699 -0.12124,-0.264 -0.0802,-0.08 -1.06793,-0.861 3.61566,-3.632 1.41559,-2.106"
+ class="c22109"
+ id="Terrebonne, LA" />
+ <path
+ d="m 632.16107,496.41214 1.07863,0.704 1.73474,1.847 1.0305,1.327 0.007,0.139 0.18363,0.247 0.24247,0.06 2.22503,-0.115 0.50633,-0.02 0.65788,0.154 0.21038,0.128 0.0553,0.176 0.23177,1.614 0.016,0.232 -0.11767,0.429 1.60636,2.37 1.21235,0.531 0.025,2.603 -1.18917,1.462 0.60083,1.173 -0.29596,1.109 -0.21929,0.216 -0.0535,0.06 -1.28545,1.063 -0.066,0.06 -0.0535,0.03 -0.91105,0.488 -2.36943,0.788 -0.11232,0 0,-0.02 -0.0232,-0.12 0.47424,-0.29 0.42433,-0.08 0.22642,-0.04 0.19077,-0.1 0.49207,-0.239 0.0945,-0.06 0.35479,-0.401 -0.025,-0.425 -0.85221,-1.69 -0.33696,-0.458 -0.64005,-0.859 -0.35657,-0.259 -0.68106,0.107 -0.3851,0.514 -0.36192,1.317 0.50455,-2.524 -0.12124,-1.074 -0.11945,-0.34 -0.28704,-0.303 -3.77077,-3.873 -4.9332,-4.703 -0.26565,-0.03 -0.1355,0.06 -3.49621,1.583 2.18402,-4.489 4.58911,0.111 2.30525,-0.191"
+ class="c22057"
+ id="Lafourche, LA" />
+ <path
+ d="m 629.78272,490.23814 -0.23177,2.669 -0.52952,0.378 0.39224,1.92 0.27456,1.045 0.16759,0.353 -4.58911,-0.111 -1.75078,-3.61 6.26679,-2.644"
+ class="c22093"
+ id="St. James, LA" />
+ <path
+ d="m 624.59992,486.41314 3.61566,3.375 0.4261,0.289 0.0963,0.03 0.0802,-0.04 1.07863,-1.093 -0.1141,1.27 -6.26679,2.644 -2.82763,0.233 1.37994,-6.026 2.53168,-0.676"
+ class="c22005"
+ id="Ascension, LA" />
+ <path
+ d="m 624.97789,477.78314 -1.125,1.674 -1.29258,1.545 0.066,3.178 0.37619,0.941 1.59745,1.292 -2.53168,0.676 -2.40152,0.09 -3.45521,-7.329 0.58657,-1.166 0.20325,-0.152 7.97656,-0.748"
+ class="c22033"
+ id="East Baton Rouge, LA" />
+ <path
+ d="m 620.47792,471.58914 4.60515,-0.259 -0.59547,1.496 0.39401,1.992 0.0963,1.285 0,1.68 -7.97656,0.748 -0.20325,0.152 -0.58657,1.166 -0.15332,-0.07 -0.0464,-0.539 0.0374,-0.754 0.28883,-0.902 0.20325,-0.273 0.79516,-1.365 0.57764,-2.651 0.27992,-1.591 2.28385,-0.112"
+ class="c22037"
+ id="East Feliciana, LA" />
+ <path
+ d="m 630.17852,471.03314 0.45641,8.028 -6.78204,0.396 1.125,-1.674 0,-1.68 -0.0963,-1.285 -0.39401,-1.992 0.59547,-1.496 5.09545,-0.297"
+ class="c22091"
+ id="St. Helena, LA" />
+ <path
+ d="m 623.85289,479.45714 6.78204,-0.396 0.21751,3.744 0.48138,1.205 1.54396,2.138 0.67393,0.693 0.23355,0.191 0.2496,0.112 0.36728,0.09 -1.33181,0.453 -0.45106,0.242 -0.12659,0.111 -0.29952,0.661 -0.2496,0.384 -0.26208,0.274 -0.24247,0.154 -0.20147,0.03 -0.21573,-0.04 -1.12499,-0.533 -1.07863,1.093 -0.0802,0.04 -0.0963,-0.03 -0.4261,-0.288 -3.61566,-3.375 -1.59745,-1.293 -0.37619,-0.941 -0.066,-3.177 1.29258,-1.546"
+ class="c22063"
+ id="Livingston, LA" />
+ <path
+ d="m 634.40214,487.23014 2.52454,1.111 -2.38726,3.601 -1.64559,1.254 -0.85221,0.353 -0.2086,0.338 0.0321,0.425 0.29596,2.1 -2.30525,0.191 -0.16759,-0.353 -0.27456,-1.045 -0.39224,-1.92 0.52952,-0.378 0.34587,-3.939 1.12499,0.533 0.21573,0.04 0.20147,-0.03 0.24247,-0.154 0.26208,-0.274 0.2496,-0.384 0.29952,-0.661 0.12659,-0.111 0.45106,-0.242 1.33181,-0.453"
+ class="c22095"
+ id="St. John the Baptist, LA" />
+ <path
+ d="m 632.16107,496.41214 -0.29596,-2.1 -0.0321,-0.425 0.2086,-0.338 0.85221,-0.353 1.64559,-1.254 2.38726,-3.601 0.26565,5.143 0.0481,0.796 0.20147,1.142 0.12837,0.377 0.60974,0.941 1.21413,0.724 -0.32983,1.911 -0.11232,0.353 -0.28882,0.891 -2.22503,0.115 -0.24247,-0.06 -0.18363,-0.247 -0.007,-0.139 -1.0305,-1.327 -1.73474,-1.847 -1.07863,-0.704"
+ class="c22089"
+ id="St. Charles, LA" />
+ <path
+ d="m 630.5547,471.02014 3.93836,-0.251 0.14441,2.177 0.61866,0.515 1.42986,3.405 0.009,0.41 0.93244,11.172 -0.70067,-0.107 -2.52454,-1.111 -0.36728,-0.09 -0.2496,-0.112 -0.23355,-0.191 -0.67393,-0.693 -1.54396,-2.138 -0.48138,-1.205 -0.21751,-3.744 -0.45641,-8.028 0.37618,-0.01"
+ class="c22105"
+ id="Tangipahoa, LA" />
+ <path
+ d="m 640.39793,489.02514 2.20362,0.837 1.8631,-1.118 0.45998,-0.179 3.87775,0.307 1.10359,0.36 0.12837,0.08 -0.854,1.015 -2.66539,1.711 -0.89321,1.068 -0.89144,3.079 -1.9772,-0.49 -1.06972,-1.084 -1.3425,-1.826 0.0571,-3.76"
+ class="c22071"
+ id="Orleans, LA" />
+ <path
+ d="m 645.62174,493.10614 0.12123,0.507 0.19255,0.49 0.12837,0.219 0.20146,0.134 2.82763,1.441 0.63649,0.08 0.44928,-0.05 0.47959,-0.218 0.29061,-0.233 0.11232,-0.362 0.22643,-1.455 -0.0267,-0.555 1.48157,-1.647 0.68997,-0.337 0.82725,0.257 0.52238,0.428 -0.4261,0.239 -0.13015,0.13 -0.19077,0.183 0.016,0.387 0.0321,0.28 1.17313,1.278 0.22464,0.17 0.94848,0.488 0.22465,0.123 -1.33181,2.225 -0.77198,1.14 -1.14282,0.433 -0.89144,-0.342 -2.08952,-0.08 -0.33874,0.107 0.082,0.674 0.11232,0.201 0.99662,0.546 0.47603,0.201 0.33518,0.06 0.46889,-0.03 0.9788,0.843 0.0553,0.136 -0.0232,0.09 -0.12123,-0.176 -0.55448,-0.443 -2.1858,-0.524 -1.41381,-1.275 -0.29774,-0.315 -2.94887,-0.786 -0.21751,0.08 -0.12836,-0.02 -0.25139,-0.296 -0.44037,-0.765 -0.27991,-0.587 0.89144,-3.079"
+ class="c22087"
+ id="St. Bernard, LA" />
+ <path
+ d="m 642.7531,495.69514 1.9772,0.49 0.27991,0.587 0.44037,0.765 0.25139,0.296 0.12836,0.02 0.21751,-0.08 2.94887,0.786 0.29774,0.316 1.41381,1.274 2.1858,0.525 0.55448,0.442 0.12123,0.176 -0.37084,-0.224 -0.63292,-0.345 -1.72938,-0.08 -0.39401,0.232 -0.6347,0.537 -0.16046,0.554 -0.19968,1.897 0.0143,0.112 0.14619,0.163 0.58657,0.385 3.7262,1.968 0.59547,-0.04 1.55288,-0.07 4.15409,1.198 1.06794,1.326 0.53843,0.746 0.8112,0.467 0.74881,-0.337 0.14263,0.06 0.14619,0.137 0.3441,0.701 0,0.02 -0.0642,0.314 0,0.02 -0.36192,0.829 -0.62579,1.421 -1.82387,1.086 -1.28723,-0.795 -2.77058,0.07 -2.21789,-2.564 -0.0588,-0.06 -0.271,-0.262 -0.0321,-0.03 -0.21929,-0.153 0,0 -0.0856,-0.03 -0.59548,-0.218 -0.43502,-0.16 -2.78662,-1.022 -0.44215,-0.121 -0.0802,-0.02 -0.42611,-0.09 -0.16759,-0.04 -0.0339,0 -0.0874,0 -0.42076,-0.03 -0.59191,-0.05 -1.13213,-1.019 0.25495,-0.443 0.0731,-0.16 0,-0.216 -0.025,-0.121 -0.44215,-1.542 -0.0125,-0.07 -0.13193,-0.06 -0.18364,-0.1 -0.25851,0.06 -0.26387,0.113 -0.50455,0.313 -0.31557,0.386 -0.2496,0.354 -0.4582,0.05 -0.19255,-0.129 -0.26386,-0.28 -0.29061,-3.439 -0.10341,-0.435 -0.79694,-1.358 -0.39223,-0.457 -0.64184,-0.861 -0.22107,-0.747 0.37262,-1.542 0.79516,-1.366"
+ class="c22075"
+ id="Plaquemines, LA" />
+ <path
+ class="c22125"
+ d="m 609.13887,472.12714 9.0552,-0.426 -0.27992,1.591 -0.57764,2.651 -0.79516,1.365 -0.20325,0.273 -0.28883,0.902 -0.0374,0.754 0.0464,0.539 -0.51347,-0.112 -0.61331,-1.641 -0.37618,-0.561 -0.10341,-0.05 -3.17529,-0.596 -2.16975,-1.132 -0.11945,-0.06 -0.1462,-0.137 -0.0464,-0.129 -0.12837,-2.539 0.47246,-0.69 m -1.75791,-0.95 1.3425,1.086 -1.83101,-0.474 0.48851,-0.612"
+ id="West Feliciana, LA" />
+ <path
+ class="c22051"
+ d="m 636.92668,488.34114 0.70067,0.107 2.77058,0.577 -0.0571,3.76 1.3425,1.826 1.06972,1.084 -0.79516,1.366 -0.37262,1.542 0.22107,0.747 0.64184,0.861 0.39223,0.457 0.79694,1.358 0.10341,0.435 0.29061,3.439 -0.9895,0.33 -1.21235,-0.531 -1.60636,-2.37 0.11767,-0.429 -0.016,-0.232 -0.23177,-1.614 -0.0553,-0.176 -0.21038,-0.128 -0.65788,-0.154 -0.50633,0.02 0.28882,-0.891 0.11232,-0.353 0.32983,-1.911 -1.21413,-0.724 -0.60974,-0.941 -0.12837,-0.377 -0.20147,-1.142 -0.0481,-0.796 -0.26565,-5.143 m 5.55186,23.127 0.0178,0.02 0.55447,-0.107 0.43324,-0.488 1.15708,-0.892 0.16937,0.02 0.0339,0.07 -0.0178,0.06 -0.10341,0.167 -1.26405,0.94 -1.08399,1.127 -0.1872,0.192 -0.005,0 0.29596,-1.109"
+ id="Jefferson, LA" />
+ <path
+ d="m 924.76925,151.99914 0.0713,0.16 1.23731,1.261 0.82904,-0.193 0.26743,-0.24 1.33893,0.167 0.65788,0.08 2.45145,0.997 0.25851,0.476 0.11946,1.253 0.0642,1.284 -0.19968,0.652 -0.51525,1.013 1.14104,2.876 0.44928,0.419 0.53129,0.175 1.42987,0.226 0.4885,3.206 -4.90111,1.503 -0.11232,-0.337 -4.28958,1.019 -0.7078,0.147 -0.56161,0.11 -0.73989,-2.949 -1.07685,0.289 -1.17313,-0.248 -0.0784,-0.29 0.007,-0.175 0.42432,-1.086 -2.09487,-1.808 -0.29774,-1.182 -0.0963,-1.968 0.19968,-1.196 -0.35122,-1.913 -1.09468,-2.355 5.83176,-1.263 0.49208,-0.11"
+ class="c25027"
+ id="Worcester, MA" />
+ <path
+ d="m 935.11702,148.75214 0.63827,1.535 1.63846,1.1 1.8631,1.109 1.33358,1.696 -0.0963,0.618 -0.3851,0.867 -0.65966,0.613 -0.68997,0.441 0.0874,1.807 -0.81121,-0.634 -0.0481,-0.03 -0.41006,-0.04 -0.27991,0.04 -0.89321,0.602 0.21037,0.33 0.39224,0.513 0.22642,0.484 -0.3958,1.246 -0.82547,0.738 -1.11072,0.82 -1.42987,-0.226 -0.53129,-0.175 -0.44928,-0.419 -1.14104,-2.876 0.51525,-1.012 0.19968,-0.653 -0.0642,-1.284 -0.11946,-1.253 -0.25851,-0.476 -2.45145,-0.997 -0.65788,-0.08 -1.33893,-0.167 -0.26743,0.24 -0.82904,0.193 -1.23731,-1.261 -0.0713,-0.16 4.06494,-0.909 0.2496,-0.06 0.0713,-0.02 5.5465,-1.278 0.41541,-0.988"
+ class="c25017"
+ id="Middlesex, MA" />
+ <path
+ d="m 962.95297,175.58314 0.15155,-0.08 0.26743,-0.306 0.19255,-0.36 0.12836,-0.468 -0.0784,-0.465 -0.0909,-0.16 -0.1765,-0.163 -0.16225,-0.128 -0.0945,-0.08 -0.016,-0.09 0.29774,0.06 0.353,0.312 1.52614,1.729 0.0909,0.321 -0.0107,0.241 -0.007,0.05 -0.12124,0.16 -0.39401,0.298 -0.21751,0.1 -1.3639,0.314 -0.36905,0.07 -0.95027,-0.06 -1.61528,-0.321 -0.21573,-0.1 -0.15332,-0.128 -0.0892,-0.186 0.2496,-0.06 0.21751,0.05 0.0963,0.03 0.8433,-0.03 1.1963,-0.312 0.51525,-0.233"
+ class="c25019"
+ id="Nantucket, MA" />
+ <path
+ d="m 952.43582,166.16514 0.11232,0.12 0.33875,0.241 0.4885,0.272 0.44216,0.179 1.07863,0.112 0.64718,-0.04 1.72047,-0.177 2.32308,-1.429 0.85935,-0.58 0.56338,-0.504 0.17294,-0.378 0.0357,-0.195 -0.20146,-0.666 -0.31379,-0.821 -0.14441,-0.32 -0.52951,-0.755 -1.71691,-2.009 -0.26743,-0.185 -0.29774,-0.113 -0.47424,-0.112 -0.11945,0.03 -0.22465,0.127 -0.12301,0.114 -0.0963,0.169 -0.0553,0.28 0.016,0.121 -0.94849,-0.369 -0.0553,-0.07 0.0642,-0.232 0.16937,-0.185 0.28882,-0.16 0.27991,-0.09 0.49564,-0.05 0.79694,0.04 0.62936,0.138 0.47959,0.208 0.55626,0.385 0.52951,0.53 0.66679,0.772 0.5313,0.763 0.79516,1.374 0.37975,0.756 0.54556,1.486 0.31735,1.101 0.0571,0.507 -0.26387,2.194 -0.16045,0.159 -0.0553,-1.526 -0.0392,-0.128 -0.082,-0.145 -0.4261,-0.201 -0.19969,-0.05 -0.12123,0.03 -5.11149,2.28 -0.21573,0.1 -3.72263,3.222 -0.59369,0.772 -0.62579,-0.06 -0.37084,-4.475 1.17491,-2.547"
+ class="c25001"
+ id="Barnstable, MA" />
+ <path
+ d="m 940.59043,154.19214 0.81299,0.322 0.37619,2.7 -2.93282,1.324 -0.0874,-1.807 0.68997,-0.441 0.65966,-0.613 0.3851,-0.867 0.0963,-0.618"
+ class="c25025"
+ id="Suffolk, MA" />
+ <path
+ d="m 937.49715,166.02814 4.29137,-3.792 1.29258,2.819 1.44056,2.621 1.70977,0.666 0.76307,0.53 1.79179,2.758 -0.30487,-0.02 -0.76307,0.112 -0.312,0.411 -0.18721,0.242 -0.0303,0.06 0.0553,0.747 0.0784,0.273 0.25852,0.531 -1.478,1.382 -1.39955,0.419 -2.29634,-3.64 -0.69889,-0.651 -1.92193,-1.07 -2.28921,-4.395"
+ class="c25005"
+ id="Bristol, MA" />
+ <path
+ d="m 943.38063,157.78414 1.56536,-0.483 0.82012,0.12 0.16224,0.02 0.13549,0.09 0.91283,0.61 2.06813,2.298 2.99522,3.953 0.28883,0.66 0.10697,1.117 -1.17491,2.548 -2.47462,2.917 -1.79179,-2.758 -0.76307,-0.53 -1.70977,-0.666 -1.44056,-2.621 -1.29258,-2.819 1.59211,-4.452"
+ class="c25023"
+ id="Plymouth, MA" />
+ <path
+ d="m 941.77961,157.21414 1.60102,0.57 -1.59211,4.452 -4.29137,3.792 -2.10735,-0.217 -0.4885,-3.206 1.11072,-0.82 0.82547,-0.738 0.3958,-1.246 -0.22642,-0.484 -0.39224,-0.513 -0.21037,-0.33 0.89321,-0.602 0.27991,-0.04 0.41006,0.04 0.0481,0.03 0.81121,0.634 2.93282,-1.324"
+ class="c25021"
+ id="Norfolk, MA" />
+ <path
+ d="m 941.40342,143.74614 0.11946,0.481 0.61865,1.478 0.96275,1.849 0.99663,0.442 -1.60637,3.334 -1.09112,3.184 -0.81299,-0.322 -1.33358,-1.696 -1.8631,-1.109 -1.63846,-1.1 -0.63827,-1.535 0.10698,-0.242 0.90748,-1.822 0.21751,-0.227 0.39223,-0.337 1.18917,-1.012 1.54932,-1.15 0.007,0 0.13193,-0.06 0.11232,-0.06 0.48851,-0.03 1.18382,-0.07"
+ class="c25009"
+ id="Essex, MA" />
+ <path
+ d="m 922.18052,163.79414 -0.42432,1.086 -0.007,0.175 0.0784,0.29 1.17313,0.248 1.07685,-0.289 0.73989,2.949 -6.17942,1.464 -8.26004,1.952 -0.73989,0.168 -0.62757,-1.132 -0.0802,-0.209 -0.19255,-1.022 0.62757,-0.04 -0.0499,-2.547 -0.32092,-1.382 0.59548,-0.901 0.96988,-0.16 0.2193,0.137 0.44928,1.494 -0.25673,0.482 0.69888,0.355 1.55823,0.233 1.64915,-0.02 1.37281,-1.02 2.99701,-1.239 2.93282,-1.068"
+ class="c25013"
+ id="Hampden, MA" />
+ <path
+ d="m 920.08565,161.98614 2.09487,1.808 -2.93282,1.068 -2.99701,1.239 -1.37281,1.02 -1.64915,0.02 -1.55823,-0.233 -0.69888,-0.355 0.25673,-0.482 -0.44928,-1.494 -0.2193,-0.137 -0.96988,0.161 -0.59548,0.9 -0.0553,0.192 -0.36192,0.02 -0.69888,-0.321 -0.37797,-1.141 0,-0.201 0.93957,-0.02 -0.0713,-2.049 -0.11232,-1.72 -0.20325,-0.328 2.11626,1.189 2.80089,0.07 2.88112,-0.137 0.84865,-0.369 1.95402,-0.176 1.43165,1.47"
+ class="c25015"
+ id="Hampshire, MA" />
+ <path
+ d="m 902.26943,156.83614 3.98471,-0.861 1.79892,3.963 0.20325,0.328 0.11232,1.72 0.0713,2.049 -0.93957,0.02 0,0.201 0.37797,1.141 0.69888,0.321 0.36192,-0.02 0.0553,-0.192 0.32092,1.382 0.0499,2.547 -0.62757,0.04 0.19255,1.022 0.0802,0.209 0.62757,1.132 -7.22419,1.528 -0.16046,0.04 -0.3851,-0.779 0.25317,-10.141 0.14798,-5.648"
+ class="c25003"
+ id="Berkshire, MA" />
+ <path
+ d="m 915.55181,153.99014 2.8936,-0.618 1.09468,2.355 0.35122,1.913 -0.19968,1.196 0.0963,1.968 0.29774,1.182 -1.43165,-1.47 -1.95402,0.176 -0.84865,0.369 -2.88112,0.137 -2.80089,-0.07 -2.11626,-1.189 -1.79892,-3.963 1.52792,-0.321 7.76975,-1.664"
+ class="c25011"
+ id="Franklin, MA" />
+ <path
+ class="c25007"
+ d="m 953.53585,173.99914 2.72601,0.482 0.21573,0.522 0.23177,0.965 -0.016,0.137 -4.79592,1.751 -0.49921,-0.425 0.65075,-2.041 0.17829,-0.298 0.49742,-0.611 0.624,-0.681 0.0981,0 0.0891,0.192 m -1.27831,-0.747 -1.37281,1.737 -0.40293,0.456 -1.12499,0.884 -0.58657,0.186 -0.15867,-0.03 0.77733,-0.795 1.51187,-1.664 0.73098,-0.836 0.62579,0.06"
+ id="Dukes, MA" />
+ <path
+ d="m 831.01703,243.76514 0.65253,-0.121 0.53665,1.945 -1.83993,3.15 -3.35001,0.184 -2.12161,-0.844 -2.88469,3.971 -1.89697,-0.426 1.3942,-6.108 2.11805,-0.387 7.39178,-1.364"
+ class="c24001"
+ id="Allegany, MD" />
+ <path
+ d="m 821.5072,245.51614 -1.3942,6.108 -3.26978,3.945 -2.87756,3.454 -1.88806,-11.789 1.46374,-0.264 7.96586,-1.454"
+ class="c24023"
+ id="Garrett, MD" />
+ <path
+ d="m 871.70212,268.87714 0.8433,2.2 -0.93957,2.048 -6.60553,-1.333 -0.70424,-0.949 -0.91818,-1.597 0.007,-0.428 0.95561,-2.931 0.15511,-0.138 0.61688,-0.09 0.32983,-0.03 0.7078,0.1 5.55185,3.145"
+ class="c24037"
+ id="St. Mary's, MD" />
+ <path
+ d="m 858.00968,262.51214 1.06259,1.911 0.27991,-0.603 0.0464,-0.178 0.082,-0.103 0.23177,-0.159 0.56517,-0.266 1.83101,-0.315 2.17688,0.508 0.0695,0.128 0.4368,1.222 0.89143,0.265 0.27278,0 0.19434,0.819 -0.7078,-0.1 -0.32983,0.03 -0.61688,0.09 -0.15511,0.138 -0.95561,2.931 -0.007,0.428 0.91818,1.597 0.0927,0.587 0,0.297 -0.0392,0.179 -6.89436,-1.102 -0.18542,-0.04 -0.67392,-0.328 -0.38689,-0.667 -0.48137,-1.494 0.0463,-0.733 0.27457,-0.987 0.72384,-1.304 0.77911,-0.964 0.4582,-1.774"
+ class="c24017"
+ id="Charles, MD" />
+ <path
+ d="m 889.6788,261.83314 5.10079,-1.115 0.0892,0.844 0.007,0.602 -0.016,0.822 -0.0713,0.747 -0.70067,5.272 -0.0464,0.323 -0.0571,0.223 -0.0998,0.369 -0.0588,0.265 -0.28348,0.883 -6.5467,2.227 0.99484,-2.482 -0.56338,-2.059 -1.63668,-1.951 4.29672,-1.214 0.53842,-1.189 0.0892,-0.54 -0.38688,-1.083 -0.64897,-0.944"
+ class="c24047"
+ id="Worcester, MD" />
+ <path
+ d="m 882.84863,260.75214 0.24068,0.867 0.19255,0.657 0.20682,0.726 0.54021,-0.09 1.22839,-0.209 0.0642,0 0.52238,-0.1 1.04476,-0.2 0.36727,-0.07 0.895,-0.167 0.066,-0.01 0.24425,-0.05 0.28348,-0.05 0.6757,-0.153 0.25852,-0.06 0.64897,0.944 0.38688,1.083 -0.0892,0.54 -0.53842,1.189 -4.29672,1.214 -4.21114,1.87 -1.04654,-0.362 0.0339,-1.725 0.54556,-3.568 0.11232,-0.21 0.37084,-0.209 0.41541,-0.378 0.83795,-1.469"
+ class="c24045"
+ id="Wicomico, MD" />
+ <path
+ d="m 835.87892,242.84914 10.87372,-2.058 -0.25851,1.262 -0.26387,0.713 -0.14441,0.245 -0.62935,0.406 -0.0446,0.25 -0.13906,1.672 -0.041,2.154 -0.32804,3.141 -0.68998,0.08 -2.60477,-3.577 -3.97223,-2.193 -0.29596,-0.328 -0.80229,-0.581 -0.64362,-0.241 -0.64896,-0.07 -0.59548,-0.02 -0.10519,0.04 -0.12123,0.137 -0.45642,0.722 -0.62044,1.143 -0.20859,0.03 -0.93244,-0.185 -0.53665,-1.945 4.20936,-0.796"
+ class="c24043"
+ id="Washington, MD" />
+ <path
+ d="m 871.70212,268.87714 -5.55185,-3.145 -0.19434,-0.819 -1.18026,-4.781 0.0874,-0.193 0.48138,-0.417 0.44215,-0.05 0.66679,0.956 1.22305,-0.05 0.007,0.305 0.10519,0.481 0.91462,3.111 0.082,0.225 0.27991,0.515 0.33874,0.45 0.79516,0.577 1.48692,1.198 0.0642,0.12 0.0802,0.476 -0.12837,1.045"
+ class="c24009"
+ id="Calvert, MD" />
+ <path
+ d="m 876.79578,253.57614 0.16938,0.546 -0.21395,3.278 -0.18007,0.722 0.0571,0.08 0.93958,0.789 0.48137,0.111 -3.39815,1.695 0.0553,-0.103 -0.24782,-0.451 -1.81674,-1.446 -0.29774,0.03 -0.97167,0.344 -0.0571,0.04 -0.18364,0.424 0,0.234 0.2817,0.266 0.0303,0.233 -0.27278,0.248 -0.19968,-0.305 -0.20325,-1.519 0.016,-0.499 0.34231,-1.332 0.0374,-0.06 0.46533,-0.554 1.24622,-0.1 3.92053,-2.683"
+ class="c24041"
+ id="Talbot, MD" />
+ <path
+ d="m 876.79578,253.57614 2.3944,-5.851 3.19133,11.362 -4.33237,0.02 -0.48137,-0.111 -0.93958,-0.789 -0.0571,-0.08 0.18007,-0.722 0.21395,-3.278 -0.16938,-0.546"
+ class="c24011"
+ id="Caroline, MD" />
+ <path
+ d="m 873.67041,243.47614 4.05068,-0.973 0.50634,1.799 0.32091,1.133 -2.29812,0.393 -1.46373,0.412 -0.58657,0.256 -0.68284,0.867 -1.19808,3.006 -0.74524,0.354 -0.54734,-0.02 -1.04477,-1.068 -0.025,-0.467 0.0642,-0.369 0.73989,-3.441 0.20146,-0.344 0.8433,-1.134 1.86488,-0.408"
+ class="c24029"
+ id="Kent, MD" />
+ <path
+ d="m 865.28914,248.90114 -1.62241,-0.114 -1.36746,-0.451 -0.33518,-2.178 3.309,0 0.016,2.743"
+ class="c24510"
+ id="Baltimore City, MD" />
+ <path
+ d="m 859.48768,252.14614 0.95562,0.48 3.02196,2.203 0.65967,1.471 0.65074,3.832 1.18026,4.781 -0.27278,0 -0.89143,-0.265 -0.4368,-1.222 -0.0695,-0.128 -2.17688,-0.508 -1.83101,0.315 -0.56517,0.266 -0.23177,0.159 -0.082,0.103 -0.0464,0.178 -0.27991,0.603 -1.06259,-1.911 0.43324,-2.004 -0.009,-0.102 1.9148,-3.006 -2.09131,-1.077 1.23018,-4.177"
+ class="c24033"
+ id="Prince George's, MD" />
+ <path
+ d="m 865.28914,248.90114 0.0339,0 2.13588,2.034 1.04476,1.92 0.11946,0.25 -0.64005,1.794 -0.44394,1.42 -0.65075,2.915 0.15511,0.51 0.11767,0.202 0.51525,0.424 -1.22305,0.05 -0.66679,-0.956 -0.44215,0.05 -0.48138,0.417 -0.0874,0.193 -0.65074,-3.832 -0.65967,-1.471 -3.02196,-2.203 1.95224,-3.02 1.27119,-0.819 1.62241,0.114"
+ class="c24003"
+ id="Anne Arundel, MD" />
+ <path
+ d="m 858.57307,247.16314 3.82247,2.443 -1.95224,3.02 -0.95562,-0.48 -0.28882,0.216 -0.75594,0.04 -0.20146,-0.06 -3.68698,-2.509 -0.84508,-0.866 -0.35301,-0.46 -0.016,-0.05 0.0321,-0.123 0.21929,-0.239 0.0143,-0.02 4.96708,-0.909"
+ class="c24027"
+ id="Howard, MD" />
+ <path
+ d="m 853.59173,248.08814 -0.21929,0.239 -0.0321,0.123 0.016,0.05 0.35301,0.46 0.84508,0.866 3.68698,2.509 0.20146,0.06 0.75594,-0.04 0.28882,-0.216 -1.23018,4.177 -0.91461,-0.474 -0.98236,1.599 -4.1844,-2.096 -0.83616,0.09 -0.86113,0.04 -0.63292,-0.04 -0.0339,-0.01 -1.13926,-0.765 -0.11232,-0.08 -0.0107,0 -0.10162,-0.136 -0.12302,-0.392 -0.005,-0.02 0.0214,-0.208 0.0428,-0.289 0.007,-0.105 0.0731,-0.193 0.70601,-1.116 4.42152,-4.042"
+ class="c24031"
+ id="Montgomery, MD" />
+ <path
+ d="m 876.79578,253.57614 -3.92053,2.683 -0.55625,-5.89 1.19808,-3.006 0.68284,-0.867 0.58657,-0.256 1.46373,-0.412 2.29812,-0.393 0.64184,2.29 -2.3944,5.851"
+ class="c24035"
+ id="Queen Anne's, MD" />
+ <path
+ d="m 869.69283,236.05814 5.9637,-1.277 2.06456,7.722 -4.05068,0.973 -2.08417,-3.592 -3.57287,-3.463 1.67946,-0.363"
+ class="c24015"
+ id="Cecil, MD" />
+ <path
+ d="m 867.90104,236.44414 0.11233,-0.02 3.57287,3.463 0.6864,2.009 0.025,0.103 -1.72047,2.024 -0.67571,0.799 -0.72384,0.793 -0.47424,-0.312 -0.4172,-0.3 -0.0874,-0.206 -1.57605,-1.874 -1.0519,-0.795 -1.03763,-0.314 -0.36014,0.07 -0.46711,-0.369 -0.72206,-1.079 -0.16937,-0.401 -0.57944,-2.403 5.66596,-1.188"
+ class="c24025"
+ id="Harford, MD" />
+ <path
+ d="m 858.49284,238.41114 3.74224,-0.779 0.57944,2.403 0.16937,0.401 0.72206,1.079 0.46711,0.369 0.36014,-0.07 1.03763,0.314 1.0519,0.795 1.57605,1.874 0.0874,0.206 -0.0874,0 -0.29774,0.138 -0.41719,1.39 -0.17472,1.004 0.30309,0.153 0.0998,-0.03 -0.0196,0.169 -0.0553,0.187 -0.47603,0.802 -0.24782,0.298 -1.08398,-0.105 -0.50634,-0.1 -0.0339,0 -0.016,-2.744 -3.309,0 0.33518,2.179 1.36746,0.451 -1.27119,0.819 -3.82247,-2.443 -0.68284,-2.394 0.27991,-1.817 0.3227,-4.541"
+ class="c24005"
+ id="Baltimore County, MD" />
+ <path
+ d="m 858.49284,238.41114 -0.3227,4.541 -0.27991,1.817 0.68284,2.394 -4.96708,0.909 0.36193,-2.637 0.0642,-0.706 -0.0161,-0.05 -2.1537,-1.574 -1.45661,-1.321 0.68997,-1.856 3.73868,-0.756 3.65845,-0.763"
+ class="c24013"
+ id="Carroll, MD" />
+ <path
+ d="m 846.92023,240.75714 4.17548,-0.827 -0.68997,1.856 1.45661,1.321 2.1537,1.574 0.0161,0.05 -0.0642,0.706 -0.36193,2.637 -0.0143,0.02 -4.42152,4.042 -4.2664,-1.496 0.32804,-3.141 0.041,-2.154 0.13906,-1.672 0.0446,-0.25 0.62935,-0.406 0.14441,-0.245 0.26387,-0.713 0.25851,-1.262 0.16759,-0.03"
+ class="c24021"
+ id="Frederick, MD" />
+ <path
+ class="c24039"
+ d="m 881.57922,268.67314 4.21114,-1.87 1.63668,1.951 0.56338,2.059 -0.99484,2.482 -0.58835,1.15 -2.11448,-0.06 -1.55823,-3.48 -1.1553,-2.234 m -3.24125,3.568 0.58834,-0.207 0.22464,-0.467 0.0963,-0.456 0.2496,0.584 0.25495,0.756 0.13015,0.41 -0.0802,0.127 -0.19433,0.08 -0.26387,-0.08 -0.4885,-0.351 -0.51703,-0.396 m 1.42629,3.567 -0.19433,-0.666 -0.13728,-0.714 -0.0107,-0.249 0.0499,-0.168 0.32983,-0.233 0.13728,-0.05 0.16046,0.04 0.58656,0.248 0.11946,0.1 0.041,0.215 -0.23355,0.107 -0.0392,0.697 0.11946,0.484 0.0321,0.433 -0.0481,0.44 -0.48316,0.138 -0.31913,-0.32 -0.11054,-0.501"
+ id="Somerset, MD" />
+ <path
+ class="c24019"
+ d="m 878.04914,259.10314 4.33237,-0.02 0.46712,1.665 -0.83795,1.469 -0.41541,0.378 -0.37084,0.209 -0.11232,0.21 -0.54556,3.568 -0.0339,1.725 -2.08953,0.635 -2.4354,0.364 -0.24781,-0.08 -1.38173,-0.844 -0.0802,-0.06 -0.2496,-0.449 -1.0929,-2.146 -0.57052,-1.261 0.14798,-2.667 0.0998,-0.169 0.3958,-0.337 0.16046,-0.09 1.46195,-0.41 3.39815,-1.695 m 0.28883,13.138 -0.0392,-0.03 -0.016,0.01 -0.15333,-0.266 -0.12837,-0.451 -0.12836,-0.958 0.2496,-0.304 0.39401,-0.09 0.5937,0.484 0.0339,0.137 0.10341,0.339 -0.0963,0.456 -0.22464,0.467 -0.58834,0.207"
+ id="Dorchester, MD" />
+ <path
+ d="m 950.81341,56.776143 -1.19096,-3.873 -13.73879,3.937 -4.6212,1.301 -0.34588,-2.715 -0.009,-0.07 0.0178,-0.06 0.41719,-1.238 1.17134,-3.439 2.26781,-6.589 3.05406,-8.84 1.24444,-0.103 1.47979,-0.03 0.22464,0.06 0.27099,0.369 0.0571,0.1 -0.11233,0.152 -0.016,0.03 -0.0321,0.536 0.80407,2.589 0.23356,0.209 0.12836,0.06 2.40331,0.786 0.61688,-0.537 1.67233,-1.592 1.84705,-1.679 2.84546,-2.484 0.39402,-0.224 0.74702,-0.234 0.69888,-0.06 0.2817,0.06 1.28545,0.433 3.74402,1.599 3.36784,2.122 0.0481,0.112 5.35931,17.125 3.1432,10.157 -0.25139,0.376 -0.016,0.217 0.50633,2.275 0.27278,0.225 -3.46055,2.033 -2.96669,1.711 -0.007,0.08 0.0392,0.12 -1.09469,0.62 -1.15708,0.642 -0.36014,-0.06 -1.08398,-3.682 -0.25852,-1.084 -0.49742,-1.767 -0.48316,-1.528 -2.997,-9.568 -4.04177,0.882 -1.90232,0.546"
+ class="c23003"
+ id="Aroostook, ME" />
+ <path
+ d="m 950.81341,56.776143 0.89857,3.214 1.60636,5.481 2.0093,6.992 -1.9362,1.1 0.89144,3.327 1.56001,-0.813 3.12358,5.955 -0.61865,2.523 -4.35377,2.275 -2.99879,1.519 -2.20897,1.807 -1.54219,0.772 -1.09289,-1.824 -4.73352,-9.24 -0.58479,-4.919 0.64897,-2.772 -1.33359,-2.427 -1.07685,-1.221 -2.23394,-7.658 -0.95383,-4.027 13.73879,-3.937 1.19096,3.873"
+ class="c23021"
+ id="Piscataquis, ME" />
+ <path
+ class="c23013"
+ d="m 966.53654,108.29214 -0.22464,0.499 -0.15155,0.137 -0.65966,0.36 -0.1765,0.04 -0.29596,-0.09 -1.34963,-1.453 -0.0428,-0.06 0.0339,-0.435 0.16937,-0.474 0.88252,-1.093 0.32805,-0.177 0.12836,0.1 1.40847,2.041 0.0856,0.185 -0.066,0.304 -0.0695,0.121 m -11.63323,-3.206 0.14442,-0.385 1.831,-1.061 3.65667,1.51 0.81121,0.426 -0.15155,1.609 -0.0125,0.09 0.0125,0.1 0.25495,0.86 0.24069,0.586 0.58835,0.49 -1.71156,2.596 -1.26227,0.803 -1.54397,0.274 0.10698,-1.326 0.67392,-1.077 -0.72206,-1.655 -1.0305,-1.537 -0.52238,0.243 -0.5616,0.04 -0.52952,-0.234 -0.49207,-0.716 -0.35301,-1.132 0.16224,-0.296 0.41006,-0.211"
+ id="Knox, ME" />
+ <path
+ d="m 950.57094,110.84714 1.72047,-0.08 -0.80407,-2.291 -0.0892,-1.23 1.73652,-0.05 0.1355,-0.129 0.16224,-0.426 -0.16224,-1.439 1.6331,-0.121 -0.41006,0.211 -0.16224,0.295 0.35301,1.133 0.49207,0.716 0.52952,0.234 0.5616,-0.04 0.52238,-0.243 1.0305,1.537 0.72206,1.655 -0.67392,1.077 -0.10698,1.326 -0.41719,-0.05 -0.32091,-0.04 -0.24782,0.321 -0.0695,0.08 -0.0125,0.54 0.11232,0.892 -0.27991,1.654 -0.13729,0.193 -2.12161,0.948 -0.50634,0.161 -0.37796,0 -2.81159,-6.839"
+ class="c23015"
+ id="Lincoln, ME" />
+ <path
+ d="m 950.57094,110.84714 2.81159,6.839 -2.59586,1.784 -0.36014,-1.718 -0.82725,-1.528 -0.3548,0.449 -0.93065,0 -0.74168,-0.435 -0.36014,-0.513 -0.47246,-3.431 1.21949,-0.08 0.54734,-0.428 0.0392,-0.545 0.0321,-0.161 0.14441,-0.265 0.11946,-0.152 1.55822,-0.09 0.12302,0.153 0.0481,0.127"
+ class="c23023"
+ id="Sagadahoc, ME" />
+ <path
+ d="m 939.76497,116.44114 -0.0107,0.05 0.0481,0.07 0.59547,0.24 0.90927,0.147 5.02947,0.665 0.43324,-0.594 0.44215,-1.302 0.36014,0.514 0.74168,0.435 0.93065,0 0.3548,-0.449 0.82725,1.527 0.36014,1.719 -1.06794,0.523 -0.83438,-0.507 -0.41006,-1.182 -0.15511,-0.11 -0.14442,0.05 -1.55823,2.04 -0.63291,1.101 -0.43502,1.792 0,0.153 0.32091,0.337 0.0892,2.282 -1.12678,0.965 -0.71315,-0.241 -1.94511,-0.732 0.32805,-0.94 -1.9255,-1.228 -4.32524,-1.166 0.18542,-3.584 1.02871,-2.699 0.26387,0.417 0.43502,0.403 0.11232,0.06 0.62757,0.1 0.86113,-0.859"
+ class="c23005"
+ id="Cumberland, ME" />
+ <path
+ d="m 936.25093,122.61214 4.32524,1.166 1.9255,1.228 -0.32805,0.94 1.94511,0.732 0.71315,0.241 -0.0713,1.599 -1.93798,9.04 -0.21573,0.973 -0.0802,0.16 -0.42789,0.37 -2.2482,-0.901 -0.624,-2.507 -0.0499,-0.06 -1.94333,-1.159 -0.80586,-0.401 -0.29595,-0.153 -0.46712,-0.649 -0.15154,-0.323 -0.12302,-0.513 -0.27991,-3.135 -2.02534,-5.279 3.16638,-1.374"
+ class="c23031"
+ id="York, ME" />
+ <path
+ d="m 940.9684,105.89914 1.5511,-1.118 1.07685,2.129 1.51723,3.872 1.62597,1.505 0.47246,3.43 -0.44215,1.302 -0.43324,0.594 -5.02947,-0.665 -0.90927,-0.147 -0.59547,-0.24 -0.0481,-0.07 0.0107,-0.05 -0.25852,-0.611 1.478,-4.001 0.15154,-0.685 0,-3.006 -0.52951,-1.098 -0.0891,-0.588 0.45106,-0.553"
+ class="c23001"
+ id="Androscoggin, ME" />
+ <path
+ d="m 926.75358,90.638143 1.25336,2.909 0.35301,2.548 2.56555,6.032997 2.0396,-2.071 2.67609,3.285 3.97758,0.282 0.8843,1.334 0.46533,0.941 -0.45106,0.553 0.0891,0.588 0.52951,1.098 0,3.006 -0.15154,0.685 -1.478,4.001 0.25852,0.611 -0.86113,0.86 -0.62757,-0.1 -0.11232,-0.06 -0.43502,-0.403 -0.26387,-0.417 -1.02871,2.699 -0.18542,3.584 -3.16638,1.374 -3.28404,-10.872 -3.01484,-9.586 -0.24068,-0.772 -3.39994,-10.252997 -0.61865,-1.767 1.10181,-0.619 2.21789,1.229 0.22464,0.112 0.46711,0 0.007,0 0.19254,-0.177 0.0339,-0.09 -0.0178,-0.563"
+ class="c23017"
+ id="Oxford, ME" />
+ <path
+ d="m 944.89072,101.16614 1.71868,-0.41 3.61745,-0.298 0.18363,-0.216 -0.082,-1.004997 -0.54556,-0.402 -0.21573,-0.06 -0.28169,-0.29 -0.18542,-0.386 -0.0802,-0.24 2.21789,-1.118 0.22465,0 0.1141,0.209 0.0214,0.353 0.48673,0.964 1.08933,-0.151 0.93422,2.047997 0.18542,2.016 -0.8219,0.08 -0.20146,2.957 0.16224,1.439 -0.16224,0.426 -0.1355,0.129 -1.73652,0.05 0.0892,1.23 0.80407,2.291 -1.72047,0.08 -0.0481,-0.127 -0.12302,-0.153 -1.55822,0.09 -0.11946,0.151 -0.14441,0.266 -0.0321,0.161 -0.0392,0.545 -0.54734,0.428 -1.21949,0.08 -1.62597,-1.505 -1.51723,-3.872 -1.07685,-2.129 2.37122,-3.615"
+ class="c23011"
+ id="Kennebec, ME" />
+ <path
+ d="m 954.63588,95.726143 0.9164,-0.451 0.89322,1.792 5.06156,-2.869 0.4582,0.305 -0.1141,1.432 0.0339,0.128 0.10163,0.144 0.42075,0.264 0.54021,0.476 0.60083,1.591 0.0874,0.442 0.0161,0.128 -0.19968,0.12 -1.72582,1.229997 -0.71672,0.506 -0.0571,0.291 0.21573,0.369 0.15511,0.208 0.21573,0.06 0.13728,0.112 0.32983,0.36 0.1034,0.731 0,0.233 -0.76306,2.25 -0.81121,-0.426 -3.65667,-1.51 -1.831,1.061 -0.14442,0.385 -1.6331,0.121 0.20146,-2.957 0.8219,-0.08 -0.18542,-2.016 -0.93422,-2.047997 -1.08933,0.151 -0.48673,-0.964 3.03801,-1.566"
+ class="c23027"
+ id="Waldo, ME" />
+ <path
+ class="c23009"
+ d="m 966.72196,102.81314 0.0802,-0.03 0.13728,0.04 0.8433,0.25 0.25851,0.185 0.18364,0.28 0.11945,1.157 -0.22286,0.635 -0.33161,0.554 -0.0481,0.05 -0.11232,0 -0.70602,-0.378 -0.10519,-0.128 -0.36905,-1.1 -0.0232,-0.09 0.0303,-0.128 0.10519,-0.04 0.14441,-0.17 0.13728,-0.713 0,-0.162 -0.041,-0.143 -0.0802,-0.07 m 4.39656,-3.502997 0.85399,-0.651 0.7185,-0.41 0.93422,-0.09 0.0161,0.02 0.312,0.321 0.3227,0.515 0.11945,0.33 -0.1355,0.545 -0.009,0.02 -0.0642,0.07 -0.46533,0.528997 -0.65967,0.193 -0.19255,0.178 -0.0874,0.208 0.0517,0.216 0.0446,0.07 0.0481,0.02 0.16045,0.289 -0.27277,0.626 -0.33162,0.153 -1.17134,-0.36 -0.43502,-0.403 -0.33697,-0.481 -0.0874,-0.307 0.10341,-0.658 0.40114,-0.714997 0.16225,-0.224 m -9.15326,-4.807 0.45107,-0.2 0.86647,-0.483 0.3958,-0.731 1.03406,-0.772 2.52455,-1.301 -1.70443,-3.423 -0.60261,-1.116 1.87202,-0.958 0.96631,-2.747 -1.32823,-2.516 3.62457,-1.895 1.42986,2.69 1.18918,2.532 0.27456,1.15 -1.56714,0.818 2.00929,3.625 1.14817,1.736 0.49029,1.238 0.0713,0.706 0.98771,1.768 0.47603,0.844 0.44215,0.691 0.2086,0.225 0.0321,0.394 -0.18542,0.346 -0.11232,0.03 -0.0874,-0.08 -0.17829,-0.152 -0.19968,0.296 -0.0642,0.444 -0.0571,0.312 -0.0232,0.41 -0.009,0.129 0,0.185 -0.18363,0.03 -0.009,0 -0.12123,-0.05 -0.9057,-0.916 -0.25139,-0.323 -0.40827,-0.931 -0.0892,-0.313 0.016,-0.202 -0.0891,-0.144 -0.11232,-0.06 -0.4582,0.06 -0.62401,0.128 -0.55804,0.112 -0.56873,0.248 -0.0891,0.811 -0.60261,0.596 -0.53843,0.371 -0.36192,0.321 -0.27278,0.529 -0.0713,0.06 -0.10697,0.02 -0.11945,-0.08 -0.14441,-0.554 -0.0374,-0.296 -0.21217,-0.146 -0.14441,0 -0.0945,0.07 -0.0588,0.121 -0.0143,0.161 0.23177,0.57 0.19434,0.699 -0.0642,0.06 -0.20324,0.04 -0.14442,-0.199 -0.0214,-0.218 -0.41006,-0.282 -0.43502,0.525 -0.24425,0.633997 0.2603,1.293 0.0392,0.1 0.0642,0.1 0.16937,0.129 0.29061,-0.06 0.16759,0.176 0.36192,0.499 0.025,0.113 0.1034,0.554 0.025,0.193 -0.15867,0 -0.30844,-0.08 -0.0143,-0.04 -0.24247,-0.16 -0.81834,-0.392 -0.4992,-0.13 -1.73295,-0.337 -0.71672,0.233 -0.28882,0.392 -0.542,0.06 -0.0463,-0.1 -0.4992,-2.073 -0.0161,-0.45 0.0428,-0.06 0.12837,-0.159997 0.0624,-0.683 -0.0303,-0.257 -0.1872,0.113 -0.0161,-0.129 -0.0874,-0.442 -0.60083,-1.59 -0.54021,-0.476 -0.42075,-0.264 -0.10163,-0.145 -0.0339,-0.128 0.1141,-1.432"
+ id="Hancock, ME" />
+ <path
+ d="m 971.08464,67.826143 5.40923,0.25 0.18542,-0.131 0.32091,-0.112 0.10341,0.02 0.5313,0.401 0.0802,0.145 1.33359,4.22 0.12837,0.811 -0.18364,1.093 -0.066,0.112 -0.26743,0.225 0.0196,0.242 0.64896,0.69 1.44056,1.446 0.9467,0.499 0.0321,0.02 0.0571,0.03 0.16759,0.04 0.0802,-0.02 0.40293,-0.587 -0.0642,-0.378 0,-0.635 0.0802,-0.128 0.19968,-0.04 1.89698,0.09 0.009,0 0.70602,0.515 0.39579,0.353 3.39815,4.138 0.35301,0.692 0.42611,1.02 0.0321,0.16 -0.42432,1.029 -1.40669,2.901 -0.37083,0.692 -1.06794,1.173 -0.6044,0.128 -2.20006,1.052 -5.27016,5.794 -0.63649,0.33 -0.53842,0.241 -0.14441,0.05 -0.2086,-0.225 -0.44215,-0.691 -0.47603,-0.844 -0.98771,-1.768 -0.0713,-0.706 -0.49029,-1.238 -1.14817,-1.736 -2.00929,-3.625 1.56714,-0.818 -0.27456,-1.15 -1.18918,-2.532 -1.42986,-2.69 0.45107,-0.177 1.28366,-0.643 -0.82725,-1.824 -3.34823,-5.859 3.46055,-2.032"
+ class="c23029"
+ id="Washington, ME" />
+ <path
+ d="m 967.62409,69.858143 3.34823,5.859 0.82725,1.824 -1.28366,0.643 -0.45107,0.177 -3.62457,1.895 1.32823,2.516 -0.96631,2.747 -1.87202,0.958 0.60261,1.116 1.70443,3.423 -2.52455,1.301 -1.03406,0.772 -0.3958,0.731 -0.86647,0.483 -0.45107,0.2 -0.4582,-0.305 -5.06156,2.869 -0.89322,-1.792 -0.9164,0.451 -3.64062,-7.377 2.99879,-1.519 4.35377,-2.275 0.61865,-2.523 -3.12358,-5.955 -1.56001,0.813 -0.89144,-3.327 1.9362,-1.1 -2.0093,-6.992 -1.60636,-5.481 -0.89857,-3.214 1.90232,-0.546 4.04177,-0.882 2.997,9.568 0.48316,1.528 0.49742,1.767 0.25852,1.084 1.08398,3.682 0.36014,0.06 1.15708,-0.642 1.09469,-0.62 -0.0392,-0.12 0.007,-0.08 2.96669,-1.712"
+ class="c23019"
+ id="Penobscot, ME" />
+ <path
+ d="m 928.70404,80.570143 2.1234,4.58 3.09328,6.308 2.00038,-0.08 1.80783,-0.498 0.35301,-0.185 5.9013,9.039 0.90748,1.431997 -2.37122,3.615 -1.5511,1.118 -0.46533,-0.941 -0.8843,-1.334 -3.97758,-0.281 -2.67609,-3.286 -2.0396,2.071 -2.56555,-6.032997 -0.35301,-2.548 -1.25336,-2.909 -0.0161,-0.77 -0.016,-0.74 0.21573,-4.58 0.22464,-1.229 0.14619,-0.29 0.16759,-0.337 0.3958,-0.715 0.60796,-1.116 0.0499,-0.08 0.17472,-0.209"
+ class="c23007"
+ id="Franklin, ME" />
+ <path
+ d="m 935.88366,56.840143 0.95383,4.027 2.23394,7.658 1.07685,1.221 1.33359,2.427 -0.64897,2.772 0.58479,4.919 4.73352,9.24 1.09289,1.824 1.54219,-0.772 2.20897,-1.807 3.64062,7.377 -3.03801,1.565 -0.0214,-0.353 -0.1141,-0.208 -0.22465,0 -2.21789,1.118 0.0802,0.24 0.18542,0.385 0.28169,0.291 0.21573,0.06 0.54556,0.401 0.082,1.005997 -0.18363,0.216 -3.61745,0.297 -1.71868,0.41 -0.90748,-1.430997 -5.9013,-9.039 -0.35301,0.185 -1.80783,0.498 -2.00038,0.08 -3.09328,-6.308 -2.1234,-4.58 0.13015,-0.161 0.89322,-1.069 2.07348,-5.014 0.0374,-0.369 -0.0374,-0.957 -0.24961,-0.193 -0.25673,-0.119 -0.77198,0 -0.29774,-0.983 -0.25852,-1.075 -0.49742,-2.884 0.20147,-1.56 0.2496,-1.872 0.009,-0.02 0.17472,-0.499 0.15511,-0.241 0.0214,-0.02 0.0428,-0.02 0.50455,-0.371 0.89143,-1.381 -0.18363,-1.471 -0.27278,-2.147 4.6212,-1.301"
+ class="c23025"
+ id="Somerset, ME" />
+ <path
+ d="m 620.09104,106.75814 0.41897,-0.03 0.23356,3.945 2.08239,1.881 5.96905,-0.417 0.28169,3.945 5.9637,-0.433 0.39223,5.399 -1.13212,-0.555 -1.0929,-0.369 -0.67749,-0.144 -0.86647,-0.177 -11.52447,-2.364 -1.62242,-0.337 -1.47799,-0.312 -3.23056,-3.97 -1.81497,-0.988 1.06081,-0.861 0.31379,-0.177 2.54772,-1.021 0.98771,-0.28 0.85934,-0.362 0.25852,-0.153 0.4885,-0.466 1.15709,-1.15 0.42432,-0.601"
+ class="c26053"
+ id="Gogebic, MI" />
+ <path
+ d="m 634.76584,99.615143 0.46533,6.098997 1.08399,-0.08 0.13906,1.952 -1.97542,0.128 0.15867,2.596 0.24961,3.359 0.15332,1.977 -5.9637,0.433 -0.28169,-3.945 -5.96905,0.417 -2.08239,-1.881 -0.23356,-3.945 -0.41897,0.03 0.59726,-0.74 0.25673,-0.209 0.62579,-0.369 1.10003,-0.346 0.73098,-0.114 0.21038,0.03 0.29595,0.112 3.22343,-0.545 0.33875,-0.12 0.65788,-0.354 5.67131,-3.577 0.96631,-0.913997"
+ class="c26131"
+ id="Ontonagon, MI" />
+ <path
+ d="m 734.38013,203.79514 1.97186,-0.442 2.1127,-0.305 0.14441,0.06 1.90411,1.18 -1.91302,2.437 -0.91462,1.637 -0.72384,1.318 -0.0713,0.139 -0.025,0.103 0.0303,1.776 -5.21311,0.884 -1.24623,-8.205 3.94371,-0.586"
+ class="c26115"
+ id="Monroe, MI" />
+ <path
+ d="m 730.43642,204.38114 1.24623,8.205 -1.9772,0.346 -8.10136,1.326 -1.07329,-8.413 3.91162,-0.46 5.994,-1.004"
+ class="c26091"
+ id="Lenawee, MI" />
+ <path
+ d="m 720.5308,205.84514 1.07329,8.413 -0.64897,0.104 -6.87118,1.052 -0.49742,-1.428 -0.86826,-7.18 1.97542,-0.182 5.83712,-0.779"
+ class="c26059"
+ id="Hillsdale, MI" />
+ <path
+ d="m 704.82728,207.74214 7.89098,-0.936 0.86826,7.18 -6.30066,0.74 -1.62241,0.174 -0.83617,-7.158"
+ class="c26023"
+ id="Branch, MI" />
+ <path
+ d="m 696.91312,208.67314 7.91416,-0.931 0.83617,7.158 -6.23648,0.717 -2.23394,0.239 -0.27991,-7.183"
+ class="c26149"
+ id="St. Joseph, MI" />
+ <path
+ d="m 689.12733,209.44514 7.78579,-0.772 0.27991,7.183 -4.60337,0.467 -2.77236,0.296 -0.68997,-7.174"
+ class="c26027"
+ id="Cass, MI" />
+ <path
+ d="m 686.32109,205.74714 2.80624,3.698 0.68997,7.174 -5.06335,0.522 -5.10971,0.491 0.007,-0.01 0.74881,-0.627 0.93779,-0.901 0.58656,-0.65 0.90214,-1.229 0.312,-0.595 0.20859,-0.58 0.30666,-1.374 0.87539,-2.532 0.33874,-0.713 1.45304,-2.669"
+ class="c26021"
+ id="Berrien, MI" />
+ <path
+ d="m 740.92327,194.48314 3.56039,-0.571 -0.13728,1.236 -0.0624,0.217 -0.38689,0.926 -0.55269,0.369 -0.46711,0.233 -0.4261,0.114 -0.0642,0.01 -0.73276,0.378 -0.23177,0.249 -0.22643,0.459 -0.36905,1.253 0.007,0.08 0,0.08 0.0981,1.327 -0.12124,2.096 -0.29773,1.357 -1.90411,-1.18 -0.14441,-0.06 -2.1127,0.305 -1.97186,0.442 -1.26583,-7.982 7.80897,-1.33"
+ class="c26163"
+ id="Wayne, MI" />
+ <path
+ d="m 733.1143,195.81314 1.26583,7.982 -3.94371,0.586 -5.994,1.004 -1.01267,-8.082 7.81253,-1.173 1.87202,-0.317"
+ class="c26161"
+ id="Washtenaw, MI" />
+ <path
+ d="m 723.26929,197.31814 0.16046,-0.02 1.01267,8.082 -3.91162,0.46 -5.83712,0.779 -1.11607,-8.06 1.97898,-0.227 7.7127,-1.019"
+ class="c26075"
+ id="Jackson, MI" />
+ <path
+ d="m 707.64778,199.28214 5.92983,-0.718 1.11607,8.06 -1.97542,0.182 -7.89098,0.936 -0.99662,-7.982 3.81712,-0.478"
+ class="c26025"
+ id="Calhoun, MI" />
+ <path
+ d="m 699.72471,200.17614 4.10595,-0.416 0.99662,7.982 -7.91416,0.931 -0.90035,-8.075 3.71194,-0.422"
+ class="c26077"
+ id="Kalamazoo, MI" />
+ <path
+ d="m 687.44786,201.52914 8.56491,-0.931 0.90035,8.075 -7.78579,0.772 -2.80624,-3.698 1.12677,-4.218"
+ class="c26159"
+ id="Van Buren, MI" />
+ <path
+ d="m 694.83964,192.64114 3.96867,-0.435 0.9164,7.97 -3.71194,0.422 -8.56491,0.931 0.26565,-8.118 7.12613,-0.77"
+ class="c26005"
+ id="Allegan, MI" />
+ <path
+ d="m 706.68325,191.25914 0.96453,8.023 -3.81712,0.478 -4.10595,0.416 -0.9164,-7.97 3.93836,-0.481 3.93658,-0.466"
+ class="c26015"
+ id="Barry, MI" />
+ <path
+ d="m 710.64479,190.79914 3.9134,-0.447 0.9984,7.985 -1.97898,0.227 -5.92983,0.718 -0.96453,-8.023 3.96154,-0.46"
+ class="c26045"
+ id="Eaton, MI" />
+ <path
+ d="m 718.53755,189.72414 3.42846,-0.44 1.30328,8.034 -7.7127,1.019 -0.9984,-7.985 3.97936,-0.628"
+ class="c26065"
+ id="Ingham, MI" />
+ <path
+ d="m 729.81955,188.13614 1.42273,7.994 -7.81253,1.173 -0.16046,0.02 -1.30328,-8.034 3.91696,-0.596 3.93658,-0.552"
+ class="c26093"
+ id="Livingston, MI" />
+ <path
+ d="m 739.25272,184.41314 1.67055,10.07 -7.80897,1.33 -1.87202,0.317 -1.42273,-7.994 -0.31378,-2.02 1.96115,-0.303 1.95046,-0.419 5.83534,-0.981"
+ class="c26125"
+ id="Oakland, MI" />
+ <path
+ d="m 741.18,184.02814 4.06494,-0.649 0.78803,4.354 0.0891,0.545 -1.63845,5.634 -3.56039,0.571 -1.67055,-10.07 1.92728,-0.385"
+ class="c26099"
+ id="Macomb, MI" />
+ <path
+ d="m 740.15307,178.09814 8.12988,-1.471 0.041,0.145 0.32983,0.971 0.13015,0.346 1.35676,2.01 -0.11232,6.427 -0.12123,2.259 -0.0731,0.561 -0.0571,0.154 -0.8433,1.365 -0.0785,0.1 -0.28347,0.08 -0.95562,0.19 -0.92174,-0.907 -0.0606,-0.161 0.29952,-0.722 0.31379,-0.281 0.41006,0.09 0.20859,-0.293 0.0642,-0.126 0.025,-0.2 -0.041,-0.217 -0.14441,-0.17 -0.0802,-0.04 -0.69176,-0.169 -0.19255,-0.04 -0.25673,0.05 -0.40115,0.219 -0.025,0.01 -0.0891,-0.545 -0.78803,-4.354 -4.06494,0.649 -1.02693,-5.93"
+ class="c26147"
+ id="St. Clair, MI" />
+ <path
+ d="m 732.24604,177.56014 -0.0321,-0.227 1.48691,-2.282 3.85635,-0.625 0.15154,0.98 1.96116,-0.291 0.48316,2.983 1.02693,5.93 -1.92728,0.385 -5.83534,0.981 -1.17134,-7.834"
+ class="c26087"
+ id="Lapeer, MI" />
+ <path
+ d="m 728.35403,178.10514 3.89201,-0.545 1.17134,7.834 -1.95046,0.419 -1.96115,0.303 0.31378,2.02 -3.93658,0.552 -1.1339,-8.051 3.60496,-2.532"
+ class="c26049"
+ id="Genesee, MI" />
+ <path
+ d="m 724.74907,180.63714 1.1339,8.051 -3.91696,0.596 -3.42846,0.44 -1.03763,-7.834 -0.025,-0.231 7.27411,-1.022"
+ class="c26155"
+ id="Shiawassee, MI" />
+ <path
+ d="m 717.49992,181.89014 1.03763,7.834 -3.97936,0.628 -3.9134,0.447 -0.93958,-7.985 7.79471,-0.924"
+ class="c26037"
+ id="Clinton, MI" />
+ <path
+ d="m 701.79818,183.72314 7.90703,-0.909 0.93958,7.985 -3.96154,0.46 -3.93658,0.466 -0.94849,-8.002"
+ class="c26067"
+ id="Ionia, MI" />
+ <path
+ d="m 693.61659,182.62314 0.49921,3.983 0.36192,2.685 0.36192,3.35 -7.12613,0.77 -1.88271,-7.946 2.44432,-0.248 3.62279,-0.412 -0.24247,-1.991 1.96115,-0.191"
+ class="c26139"
+ id="Ottawa, MI" />
+ <path
+ d="m 681.83896,177.64714 7.01381,-0.602 0.43323,3.986 4.12378,-0.426 0.20681,2.018 -1.96115,0.191 0.24247,1.991 -3.62279,0.412 -2.44432,0.248 -0.19255,-0.401 -0.73097,-1.294 -1.60637,-2.652 -0.2496,-0.488 -0.58657,-1.287 -0.30487,-0.795 -0.32091,-0.901"
+ class="c26121"
+ id="Muskegon, MI" />
+ <path
+ d="m 693.40978,180.60514 3.77612,-0.451 4.15409,-0.457 0.45819,4.026 0.94849,8.002 -3.93836,0.481 -3.96867,0.435 -0.36192,-3.35 -0.36192,-2.685 -0.49921,-3.983 -0.20681,-2.018"
+ class="c26081"
+ id="Kent, MI" />
+ <path
+ d="m 708.61231,174.86814 1.0929,7.946 -7.90703,0.909 -0.45819,-4.026 -4.15409,0.457 -0.43324,-3.994 7.90525,-0.836 3.9544,-0.456"
+ class="c26117"
+ id="Montcalm, MI" />
+ <path
+ d="m 712.5578,174.40114 3.92767,-0.482 0.98949,7.74 0.025,0.231 -7.79471,0.924 -1.0929,-7.946 3.94549,-0.467"
+ class="c26057"
+ id="Gratiot, MI" />
+ <path
+ d="m 727.5357,172.22414 0.81833,5.881 -3.60496,2.532 -7.27411,1.022 -0.98949,-7.74 -0.0374,-0.362 3.28583,-0.41 -0.20325,-1.991 1.94689,-0.211 0.65967,0.596 1.20522,0.2 2.1127,-0.264 0.73097,0.577 1.34964,0.17"
+ class="c26145"
+ id="Saginaw, MI" />
+ <path
+ d="m 736.51423,166.44714 8.36166,-1.512 0.0802,0.475 0.29774,1.51 0.0891,0.29 2.41935,8.155 0.11233,0.282 0.40827,0.98 -8.12988,1.471 -0.48316,-2.983 -1.96116,0.291 -0.15154,-0.98 -1.04298,-7.979"
+ class="c26151"
+ id="Sanilac, MI" />
+ <path
+ d="m 730.59688,165.99614 0.20325,1.407 5.7141,-0.956 1.04298,7.979 -3.85635,0.625 -1.48691,2.282 0.0321,0.227 -3.89201,0.545 -0.81833,-5.881 -0.36193,-2.7 3.42311,-3.528"
+ class="c26157"
+ id="Tuscola, MI" />
+ <path
+ d="m 736.51423,166.44714 -5.7141,0.956 -0.20325,-1.407 0.0267,-0.112 0.18185,-0.909 0.4582,-1.462 1.9772,-3.456 4.51601,-2.875 0.82725,-0.218 2.15371,0.804 0.85934,0.514 0.13728,0.128 0.60974,0.875 1.40669,2.035 0.22642,0.465 0.4582,1.391 0.18363,0.641 0.25674,1.118 -8.36166,1.512"
+ class="c26063"
+ id="Huron, MI" />
+ <path
+ d="m 718.32539,161.35214 1.98612,-0.257 0.26564,1.961 2.1858,-0.258 -0.12123,3.512 2.49958,2.403 2.03247,0.811 0.36193,2.7 -1.34964,-0.17 -0.73097,-0.577 -2.1127,0.264 -1.20522,-0.2 -0.65967,-0.596 -1.94689,0.211 -0.72028,-5.884 -0.48494,-3.92"
+ class="c26017"
+ id="Bay, MI" />
+ <path
+ d="m 711.62002,166.40614 3.9437,-0.458 -0.041,-0.337 3.28761,-0.339 0.72028,5.884 0.20325,1.991 -3.28583,0.41 0.0374,0.362 -3.92767,0.482 -0.93778,-7.995"
+ class="c26111"
+ id="Midland, MI" />
+ <path
+ d="m 711.62002,166.40614 0.93778,7.995 -3.94549,0.467 -3.9544,0.456 -0.9788,-7.953 7.94091,-0.965"
+ class="c26073"
+ id="Isabella, MI" />
+ <path
+ d="m 695.87549,168.20514 7.80362,-0.834 0.9788,7.953 -7.90525,0.836 -0.87717,-7.955"
+ class="c26107"
+ id="Mecosta, MI" />
+ <path
+ d="m 695.87549,168.20514 0.87717,7.955 0.43324,3.994 -3.77612,0.451 -4.12378,0.426 -0.43323,-3.986 -0.82904,-7.997 7.85176,-0.843"
+ class="c26123"
+ id="Newaygo, MI" />
+ <path
+ d="m 681.54835,169.63714 6.47538,-0.589 0.82904,7.997 -7.01381,0.602 -1.19809,-2.298 -0.19434,-0.369 -0.20859,-0.538 -0.0713,-0.353 -0.0267,-0.266 0.0107,-0.33 0.1034,-0.458 0.26565,-0.506 0.41006,-0.651 0.29061,-0.53 0.20681,-0.602 0.0892,-0.419 0.041,-0.619 -0.009,-0.07"
+ class="c26127"
+ id="Oceana, MI" />
+ <path
+ d="m 727.68011,156.26514 0.0481,0.86 0.009,0.586 -0.041,1.045 -1.38885,1.638 -1.3425,0.378 -0.39402,0.05 -0.68997,0 -0.28882,0.218 -0.0981,0.112 -0.32092,0.458 -0.36905,1.004 -0.041,0.186 -2.1858,0.258 -0.26564,-1.961 -1.98612,0.257 -0.46355,-3.778 4.60694,-0.587 5.21133,-0.722"
+ class="c26011"
+ id="Arenac, MI" />
+ <path
+ d="m 717.86184,157.57414 0.94849,7.698 -3.28761,0.339 0.041,0.337 -3.9437,0.458 -0.99128,-7.916 3.92945,-0.481 3.30365,-0.435"
+ class="c26051"
+ id="Gladwin, MI" />
+ <path
+ d="m 706.64403,158.94814 3.98471,-0.458 0.99128,7.916 -7.94091,0.965 -0.89856,-8.045 3.86348,-0.378"
+ class="c26035"
+ id="Clare, MI" />
+ <path
+ d="m 702.78055,159.32614 0.89856,8.045 -7.80362,0.834 -0.92353,-8.003 3.76721,-0.426 4.06138,-0.45"
+ class="c26133"
+ id="Osceola, MI" />
+ <path
+ d="m 694.95196,160.20214 0.92353,8.003 -7.85176,0.843 -0.9057,-8.074 3.63171,-0.307 4.20222,-0.465"
+ class="c26085"
+ id="Lake, MI" />
+ <path
+ d="m 681.44494,161.31314 5.67309,-0.339 0.9057,8.074 -6.47538,0.589 -0.87717,-3.432 0.20324,-3.472 0.57052,-1.42"
+ class="c26105"
+ id="Mason, MI" />
+ <path
+ d="m 721.41332,149.06414 9.2424,-1.276 0.0856,0.577 0.10518,1.641 -0.20146,1.952 -1.34072,1.551 -0.30487,-0.09 -0.26743,0 -0.33696,0.121 -0.12659,0.09 -0.21751,0.305 -0.1765,0.339 -0.12123,0.497 -0.0731,1.487 -5.21133,0.722 -1.05546,-7.923"
+ class="c26069"
+ id="Iosco, MI" />
+ <path
+ d="m 721.41332,149.06414 1.05546,7.923 -4.60694,0.587 -3.30365,0.435 -1.00376,-7.923 7.85889,-1.022"
+ class="c26129"
+ id="Ogemaw, MI" />
+ <path
+ d="m 705.71158,150.94514 7.84285,-0.859 1.00376,7.923 -3.92945,0.481 -3.98471,0.458 -0.93245,-8.003"
+ class="c26143"
+ id="Roscommon, MI" />
+ <path
+ d="m 705.71158,150.94514 0.93245,8.003 -3.86348,0.378 -4.06138,0.45 -0.8843,-7.955 7.87671,-0.876"
+ class="c26113"
+ id="Missaukee, MI" />
+ <path
+ d="m 689.9528,152.67314 7.88207,-0.852 0.8843,7.955 -3.76721,0.426 -4.20222,0.465 -0.79694,-7.994"
+ class="c26165"
+ id="Wexford, MI" />
+ <path
+ d="m 689.9528,152.67314 0.79694,7.994 -3.63171,0.307 -5.67309,0.339 1.54218,-4.019 0.14442,-1.31 0.016,-0.457 0.007,-2.252 6.79809,-0.602"
+ class="c26101"
+ id="Manistee, MI" />
+ <path
+ d="m 720.36856,141.12514 9.17465,-1.26 0.41897,0.618 0.79516,2.587 0.0178,0.571 -0.11945,4.147 -9.2424,1.276 -1.04476,-7.939"
+ class="c26001"
+ id="Alcona, MI" />
+ <path
+ d="m 712.55067,142.14714 7.81789,-1.022 1.04476,7.939 -7.85889,1.022 -1.00376,-7.939"
+ class="c26135"
+ id="Oscoda, MI" />
+ <path
+ d="m 704.82728,142.99014 7.72339,-0.843 1.00376,7.939 -7.84285,0.859 -0.8843,-7.955"
+ class="c26039"
+ id="Crawford, MI" />
+ <path
+ d="m 704.82728,142.99014 0.8843,7.955 -7.87671,0.876 -0.75951,-6.879 0.0464,-0.802 0.0232,-0.114 0.48316,-0.225 7.19923,-0.811"
+ class="c26079"
+ id="Kalkaska, MI" />
+ <path
+ d="m 695.26575,143.85814 1.80961,1.084 0.75951,6.879 -7.88207,0.852 -0.60083,-5.985 2.82585,-0.339 3.08793,-2.491"
+ class="c26055"
+ id="Grand Treverse, MI" />
+ <path
+ d="m 689.35197,146.68814 0.60083,5.985 -6.79809,0.602 0.0802,-0.731 0.0178,-0.41 -0.14441,-0.625 -0.14441,-0.323 -0.44929,-0.86 -0.12301,-0.345 -0.0161,-0.53 0.0161,-0.128 0.0891,-0.17 0.2496,-0.192 0.93957,-0.433 1.05368,-0.348 0.24782,-0.273 0.14619,-0.401 0.0392,-0.273 -0.009,-0.201 4.20401,-0.344"
+ class="c26019"
+ id="Benzie, MI" />
+ <path
+ d="m 692.17782,146.34914 -2.82585,0.339 -4.20401,0.344 -0.1765,-1.992 0.54734,-1.028 1.32467,-1.224 2.61904,-1.693 0.31378,-0.868 1.72939,-3.32 1.02871,-0.667 0.16759,0 0.2817,0.449 -0.86113,6.26 -0.0624,0.05 -0.23356,0.891 -0.0321,0.234 0.009,0.571 0.0642,0.402 0.31022,1.261"
+ class="c26089"
+ id="Leelanau, MI" />
+ <path
+ d="m 727.40733,132.07014 1.31041,1.439 1.1963,2.41 -0.0784,0.09 -0.27635,-0.03 -0.89143,-0.233 -0.30487,-0.17 -0.19255,-0.249 -0.54021,-0.113 -0.51169,0.362 -0.11053,0.17 -0.13907,0.385 -0.007,0.08 0.19255,0.94 0.21751,0.852 0.11945,0.249 0.11232,0.17 0.14442,0.128 0.57943,0.474 1.31576,0.844 -9.17465,1.26 -0.47603,-3.535 0.009,-0.289 0.0731,-0.161 -0.50633,-3.913 7.93912,-1.157"
+ class="c26007"
+ id="Alpena, MI" />
+ <path
+ d="m 719.46821,133.22714 0.50633,3.913 -0.0731,0.161 -0.009,0.289 0.47603,3.535 -7.81789,1.022 -0.89321,-7.866 1.93619,-0.243 5.87456,-0.811"
+ class="c26119"
+ id="Montmorency, MI" />
+ <path
+ d="m 705.73476,134.92214 5.9227,-0.641 0.89321,7.866 -7.72339,0.843 -0.84151,-5.875 1.74899,-2.193"
+ class="c26137"
+ id="Otsego, MI" />
+ <path
+ d="m 695.18552,136.01514 0.19077,-0.03 2.46749,-0.231 0.1765,1.654 0.63649,0.282 3.01305,-0.353 2.31595,-0.227 0.84151,5.875 -7.19923,0.811 -0.48316,0.225 -0.0232,0.114 -0.0464,0.802 -1.80961,-1.084 0.12658,-0.321 0.24247,-0.724 0.12124,-0.458 0.1141,-1.574 0.005,-1.64 -0.12837,-1.093 -0.5616,-2.033"
+ class="c26009"
+ id="Antrim, MI" />
+ <path
+ d="m 699.83703,131.83614 1.12499,1.48 0.82012,0 3.73511,-0.394 0.21751,1.993 -1.74899,2.193 -2.31595,0.227 -3.01305,0.353 -0.63649,-0.282 -0.1765,-1.654 -2.46749,0.231 -0.19077,0.03 -0.0981,-0.627 0.18542,-0.851 0.23356,-0.297 0.45106,-0.532 0.23891,-0.248 1.46373,-1.182 0.19969,-0.112 0.82903,-0.314 1.14817,-0.02"
+ class="c26029"
+ id="Charlevoix, MI" />
+ <path
+ d="m 727.40733,132.07014 -7.93912,1.157 -5.87456,0.811 -0.67392,-5.32 -0.61866,-4.42 0.76129,-0.112 1.47978,1.776 5.49659,2.153 3.5283,1.086 0.47424,0.06 0.89857,-0.105 0.25851,-0.289 0.12659,0.02 0.82903,0.941 1.25336,2.234"
+ class="c26141"
+ id="Presque Isle, MI" />
+ <path
+ d="m 705.51725,132.92914 -1.34785,-11.378 0.32092,0.467 4.37873,2.097 1.35854,-0.234 0.72385,-0.298 1.91124,0.451 0.19968,0.152 -0.76129,0.112 0.61866,4.42 0.67392,5.32 -1.93619,0.243 -5.9227,0.641 -0.21751,-1.993"
+ class="c26031"
+ id="Cheboygan, MI" />
+ <path
+ d="m 705.51725,132.92914 -3.73511,0.394 -0.82012,0 -1.12499,-1.48 0.80942,-0.128 0.98949,-0.328 0.65075,-0.476 0.0321,-0.225 -0.0214,-0.16 -0.0749,-0.177 -0.11054,-0.08 -0.96453,-0.07 -0.14442,0.114 -0.83438,-0.169 -0.52594,-0.458 -0.34232,-0.369 -0.45998,-0.979 -0.14263,-0.396 -0.14619,-0.667 0,-0.144 0.082,-0.257 0.48138,-1.061 0.18541,-0.256 1.69551,-1.833 2.20898,-1.118 0.16224,-0.136 0.80229,-0.916 1.34785,11.378"
+ class="c26047"
+ id="Emmet, MI" />
+ <path
+ d="m 684.93937,113.17914 9.96446,-1.125 1.9772,-0.234 0.24069,1.993 11.90065,-1.414 1.87202,1.776 0.57052,1.776 2.02534,0.06 -3.36785,0.926 -3.37497,-0.733 -3.10932,1.761 -4.56415,-0.964 -1.94511,-0.587 -3.39102,-0.692 -1.23731,-0.06 -0.24247,0.02 -1.14639,0.241 -0.19433,0.07 -0.13728,0.1 -0.271,0.298 -0.8843,1.236 -0.16224,0.524 -0.50455,0.859 -0.12837,0.168 -0.51525,0.21 -2.72423,0.104 -0.65074,-6.299"
+ class="c26097"
+ id="Mackinac, MI" />
+ <path
+ class="c26033"
+ d="m 718.71227,114.81014 0.0802,-0.08 0.1355,-0.346 -0.0303,-0.314 -0.20146,-0.426 -0.37619,-0.07 -0.29774,-0.346 -0.27456,-0.669 0.1141,-0.126 0.0571,0 2.83477,-0.257 0.15332,0.02 0.7399,0.2 1.87736,1.913 0.13193,0.16 0.0232,0.09 -0.42611,1.334 -0.0891,0.144 -0.12837,0.13 -0.55269,0.216 -2.72601,0 -0.51525,-0.371 -0.23177,-0.305 -0.26386,-0.297 -0.0339,-0.337 0,-0.241 m -23.80844,-2.756 -1.31754,-11.619 0.99484,-0.298 2.16262,-0.176997 0.53843,0.682997 -0.16046,0.385 -0.0731,0.353 -0.007,0.289 0.007,3.65 0.0463,0.273 0.10698,0.233 0.29595,0.337 0.1462,0.1 0.16937,0.06 3.03623,0.466 3.47303,-0.706 2.48354,-1.045 0.36014,-0.321 3.47124,-1.328 0.87539,0.07 0.16759,0.02 0.21751,0.266 0.13728,0.297 -0.0553,3.054 0.025,4.393 1.94332,1.938 0.69889,0.667 0.67571,0.426 1.519,0.587 0.36727,0.06 0.19434,0.635 -0.13729,0.515 -2.17866,-0.06 -1.18026,-0.04 -0.25674,-0.105 -0.16045,-0.1 -2.02534,-0.06 -0.57052,-1.776 -1.87202,-1.775 -11.90065,1.413 -0.24069,-1.993 -1.9772,0.234"
+ id="Chippewa, MI" />
+ <path
+ d="m 684.30467,107.24014 -0.42433,-4.218 1.09825,0.09 0.70958,0 2.58695,-0.218 0.70601,-0.07 0.51525,-0.1 0.42789,-0.153 1.68303,-0.956 1.97899,-1.189 1.31754,11.619 -9.96446,1.125 -0.6347,-5.939"
+ class="c26095"
+ id="Luce, MI" />
+ <path
+ d="m 684.30467,107.24014 0.6347,5.939 0.65074,6.298 -0.85042,0.555 -2.41936,-0.136 -0.37084,0 -1.61528,0.248 -0.36905,0.136 -0.88252,0.483 -0.53843,0.676 -0.11232,0.215 -0.009,1.254 -0.17651,1.262 -0.1765,0.201 -1.14995,0.796 -0.2496,0.112 -0.0642,-0.02 -0.30487,-3.158 -0.53129,-1.961 -0.57052,-3.968 -2.00038,0.176 -0.39402,-3.979 3.97937,-0.36 -0.39401,-3.978 7.91416,-0.804"
+ class="c26153"
+ id="Schoolcraft, MI" />
+ <path
+ d="m 684.30467,107.24014 -7.91416,0.804 0.39401,3.978 -3.97937,0.36 0.39402,3.979 -7.97121,0.77 -0.72207,-7.68 0.57765,-0.516 0.90749,-0.506 0.13728,0 0.51346,0.09 0.22464,0.209 0.34766,0.708 1.09112,0.884 0.1462,0.09 0.40827,0.03 4.11487,-1.077 2.87577,-2.586 2.98987,-2.402 4.0899,-1.134 0.95027,-0.225 0.42433,4.219"
+ class="c26003"
+ id="Alger, MI" />
+ <path
+ d="m 665.22796,117.13114 7.97121,-0.77 2.00038,-0.176 0.57052,3.968 0.53129,1.961 0.30487,3.158 -0.86825,0.217 -0.46533,-2.282 -3.97046,1.744 -2.94886,1.237 -0.18364,-0.884 -0.15332,-0.41 -0.31379,-0.458 -0.23356,-0.138 -0.19968,0.06 -0.12836,0.08 -0.16759,0.297 -2.42827,5.609 -0.3851,0.885 -0.009,0.03 -1.0198,0.1 -0.69888,-7.964 -0.49742,-0.626 -0.35479,-1.294 1.99324,-0.177 -0.34587,-3.977 2.00038,-0.186"
+ class="c26041"
+ id="Delta, MI" />
+ <path
+ d="m 657.59549,121.80814 3.98472,-0.337 0.35479,1.294 0.49742,0.626 0.69888,7.964 1.0198,-0.1 -0.29595,1.157 -0.51347,1.654 -1.47265,3.336 -1.04298,1.687 -0.99841,3.07 -0.73097,-0.114 -0.41719,-0.07 -0.0161,0 -1.2694,-1.342 -0.0731,-0.121 -0.14263,-0.473 -0.009,-0.02 -1.42273,-6.839 -0.16045,-4.147 -0.48138,-0.594 -0.041,-0.04 -0.025,-0.02 -0.30488,-0.248 2.10379,-0.194 -0.34231,-4.017 1.2694,-0.114 -0.16937,-2"
+ class="c26109"
+ id="Menominee, MI" />
+ <path
+ d="m 649.10012,116.53814 7.98012,-0.692 0.51525,5.962 0.16937,2 -1.2694,0.114 0.34231,4.017 -2.10379,0.194 -3.79929,-1.021 -0.21751,0.03 -0.016,0 -0.21751,-0.06 -0.1355,-0.03 -0.6133,-0.498 -0.0161,0 -0.1034,-0.201 0.0232,-0.08 0.009,-0.02 0.28169,-0.36 0.11232,-0.09 0.25673,-0.362 0.22465,-0.385 -0.0232,-0.08 -0.0499,-0.07 -0.47246,-0.676 -0.24782,-0.159 -0.62935,-7.521"
+ class="c26043"
+ id="Dickinson, MI" />
+ <path
+ d="m 648.98779,101.23714 2.27316,-0.128 1.41739,0.37 0.50455,0.145 2.48354,1.342 0.65787,0.61 0.13729,0.674 0.16759,0.506 3.48907,4.429 0.1355,0.152 0.25852,0.208 0.25495,0.121 0.65966,0.145 0.83616,0 2.06635,-0.321 0.1765,-0.05 0.72207,7.68 -2.00038,0.186 0.34587,3.977 -1.99324,0.177 -3.98472,0.337 -0.51525,-5.962 -7.98012,0.692 -0.32092,-3.955 -0.47424,-5.914 1.96294,-0.185 -0.16225,-1.936 -0.0392,-0.02 -0.80407,0.06 -0.27457,-3.352"
+ class="c26103"
+ id="Marquette, MI" />
+ <path
+ d="m 639.83632,113.29114 8.94288,-0.708 0.32092,3.955 0.62935,7.521 -0.37797,-0.251 -0.61152,-0.296 -0.39937,-0.06 -0.0356,0 -4.67647,-0.587 -2.81159,0.298 -0.32983,-0.586 -4.08099,-1.045 -0.97345,-0.474 -0.39223,-5.399 -0.15332,-1.977 4.94924,-0.378"
+ class="c26071"
+ id="Iron, MI" />
+ <path
+ class="c26083"
+ d="m 636.77514,74.640143 0.1141,-0.217 0.0285,-0.06 0.24247,-0.29 0.64183,-0.41 0.99662,-0.537 1.89519,-0.515 0.0892,0.231 -0.007,0.227 -2.27316,2.74 -1.31754,1.18 -3.54613,3.022 -3.19669,1.664 -0.51346,0.144 -0.52417,-0.137 -0.72206,-0.408 -0.36192,-0.532 0.1141,-0.288 0.46355,-0.612 0.51525,-0.522 1.248,-0.844 1.50831,-0.898 3.42311,-2.147 1.18205,-0.795 m 4.15408,18.683 0.73811,-1.304 0.58122,-0.763 0.43323,-0.337 2.56912,-1.679 0.53843,-0.248 2.18579,-0.602 0.95027,-0.163 0.77734,-0.05 2.00929,-0.05 0.72206,0.227 0.42789,0.231 0.24782,0.186 0.15333,0.763 -0.0143,0.112 -1.58497,0.515 -0.18542,-0.02 -2.13587,0.45 -2.35518,3.294 -0.44036,0.571 -0.9895,0.458 -1.10894,0.1 -0.16937,-1.968 -3.35002,0.273"
+ id="Keweenaw, MI" />
+ <path
+ d="m 640.92922,93.323143 3.35002,-0.273 0.16937,1.968 1.10894,-0.1 -3.00592,6.041997 -1.62241,0.33 -1.8417,2.138 0.7488,9.859 -4.94924,0.378 -0.24961,-3.359 -0.15867,-2.596 1.97542,-0.128 -0.13906,-1.953 -1.08399,0.08 -0.46533,-6.099997 0.36906,-1.269 0.20859,-0.346 1.09468,-1.02 1.70264,-1.585 0.39937,-0.36 2.38904,-1.711"
+ class="c26061"
+ id="Houghton, MI" />
+ <path
+ d="m 648.98779,101.23714 0.27457,3.352 0.80407,-0.06 0.0392,0.02 0.16225,1.936 -1.96294,0.185 0.47424,5.914 -8.94288,0.708 -0.7488,-9.859 1.8417,-2.138 1.62241,-0.33 -0.31913,1.43 -0.0267,1.246 0.0267,0.129 0.18185,0.442 0.21038,0.433 0.37619,-0.03 0.0571,-0.161 0.26565,-0.442 0.77198,-1.077 1.70442,-1.823 1.34072,-0.924 0.17651,-0.06 0.1765,0.09 1.49404,1.02"
+ class="c26013"
+ id="Baraga, MI" />
+ <path
+ d="m 601.33703,175.02814 0.40293,2.78 1.10003,5.15 -6.53957,0.314 -1.98433,0.09 -0.36371,-7.98 7.38465,-0.353"
+ class="c27055"
+ id="Houston, MN" />
+ <path
+ d="m 588.18302,175.62214 5.76936,-0.241 0.36371,7.98 -5.81929,0.248 -6.12951,0.25 -0.2906,-7.69 6.10633,-0.547"
+ class="c27045"
+ id="Fillmore, MN" />
+ <path
+ d="m 547.5728,73.080143 -0.15332,-7.73 0.21573,-0.09 0.41897,-0.03 1.23731,0.02 0.27456,0.05 0.47246,0.257 0.14442,0.289 0.009,0.153 0.0161,0.458 0,0 0.0945,0.06 0.31557,0.08 1.51009,0.09 1.13212,-0.02 3.26978,0.282 0.0981,0.08 0.19255,0.353 0.25673,0.717 0.0321,0.206 -0.0802,0.596 -0.10341,0.176 0,0.106 0.0553,0.08 0.3227,0.233 0.58656,0 1.45304,-0.05 1.80783,-0.346 1.18204,-0.41 0.0963,-0.112 0.0553,-0.257 -0.005,-0.128 -0.0749,-0.153 -0.0802,-0.298 0.0267,-0.105 1.78287,-0.835 1.41382,-0.41 0.73098,-0.02 0.43323,0.385 0.54734,-0.02 0.0321,0 0.82725,-0.09 0.0874,4.846 0.0428,3.92 0.13371,3.978 0.15511,1.045 0.17472,2.089 0.0339,0.875 -10.82559,0.129 0.025,1.198 -10.01973,0.216 -0.35301,-11.885"
+ class="c27071"
+ id="Koochiching, MN" />
+ <path
+ d="m 533.62898,58.881143 2.59586,-0.02 -0.0303,-4.218 -0.016,-1.48 -0.016,-2.369 -0.009,-0.651 0,-0.03 2.98988,0.29 0.7381,0.441 1.30328,0.925 0.83439,4.258 0.38688,2.74 0.97879,5.031 0.71493,0.651 0.24782,0.225 1.02337,0.57 0.44037,0.243 0.025,0.02 0.21751,0.02 0.77733,0.08 0.58835,-0.259 0.15332,7.731 -12.10212,0.185 -0.0481,-3.961 -2.01821,0 -0.0232,-3.931 3.88844,-0.03 -0.0713,-4.722 -0.37796,0.392 -0.33875,0.201 -0.15154,0.06 -1.19631,0.249 -0.1765,0 -0.25852,-0.06 -0.7078,-0.435 -0.33696,-0.651 -0.0642,-1.109 0.0392,-0.394"
+ class="c27077"
+ id="Lake of the Woods, MN" />
+ <path
+ d="m 533.62898,58.881143 -0.0392,0.394 0.0642,1.109 0.33696,0.651 0.7078,0.435 0.25852,0.06 0.1765,0 1.19631,-0.249 0.15154,-0.06 0.33875,-0.201 0.37796,-0.392 0.0713,4.723 -3.88844,0.03 0.0232,3.931 -4.00968,0.06 -12.11638,-0.128 -0.009,-1.737 -0.24247,-2.2 0.025,-6.422 16.57713,0"
+ class="c27135"
+ id="Roseau, MN" />
+ <path
+ d="m 504.42914,58.753143 12.62271,0.128 -0.025,6.422 0.24247,2.2 0.009,1.737 -11.96662,-0.09 1.12677,-3.126 -0.67571,-1.535 -0.29774,-0.884 -1.10894,-3.623 -0.0892,-0.481 0.0178,-0.339 0.0713,-0.337 0.0731,-0.07"
+ class="c27069"
+ id="Kittson, MN" />
+ <path
+ d="m 527.7883,83.109143 0.009,1.993 -1.99325,2.007 -8.03539,0 -2.02534,-1.998 0,-2.644 12.03615,0 0.009,0.651"
+ class="c27125"
+ id="Red Lake, MN" />
+ <path
+ d="m 529.56404,77.692143 0.18541,3.481 0.016,1.968 -1.9772,-0.03 -0.009,-0.651 -12.03615,0 -0.25852,-4.807 3.80286,0 1.1553,0.05 2.81159,0.03 6.30958,-0.05"
+ class="c27113"
+ id="Pennington, MN" />
+ <path
+ d="m 505.31166,69.151143 11.96662,0.09 12.11638,0.128 0,2.958 0.025,0.98 0.1355,0 0.009,4.379 -6.30958,0.05 -2.81159,-0.03 -1.1553,-0.05 -3.80286,0 -10.03577,-0.06 0.009,-0.468 0.50634,-1.952 -0.0981,-5.48 -0.36014,-0.442 -0.12124,-0.06 -0.0731,-0.04"
+ class="c27089"
+ id="Marshall, MN" />
+ <path
+ d="m 515.48471,77.660143 0.25852,4.807 0,2.644 2.02534,1.998 8.03539,0 1.99325,-2.007 -0.009,-1.993 1.9772,0.03 0.0802,5.577 0.16224,0.369 0.2389,0 0,3.954 -8.04252,0.04 -12.33568,-0.06 -0.53843,-3.961 -2.02355,-4.622 -1.49583,-5.391 -0.36192,-1.398 0,-0.06 10.03577,0.06"
+ class="c27119"
+ id="Polk, MN" />
+ <path
+ d="m 522.20435,93.082143 0,7.945997 -2.0093,0 -9.96446,-0.04 -0.0802,-1.992997 -0.2817,-5.978 12.33568,0.06"
+ class="c27107"
+ id="Norman, MN" />
+ <path
+ d="m 530.24687,93.041143 0.0892,7.970997 -8.13167,0.02 0,-7.945997 8.04252,-0.04"
+ class="c27087"
+ id="Mahnomen, MN" />
+ <path
+ d="m 529.7655,83.141143 -0.016,-1.968 5.50372,-0.03 0.57944,3.36 0.1765,4.547 0.0713,5.947 0.27456,5.945997 -6.01897,0.06 -0.0892,-7.970997 0,-3.954 -0.2389,0 -0.16224,-0.369 -0.0802,-5.577"
+ class="c27029"
+ id="Clearwater, MN" />
+ <path
+ d="m 533.40434,69.313143 2.01821,0 0.0481,3.961 12.10212,-0.185 0.35301,11.885 0.0571,3.697 0.11946,2.876 0.009,2.58 -3.97045,0.852 -8.06035,0.03 -0.0713,-5.947 -0.1765,-4.547 -0.57944,-3.361 -5.50372,0.03 -0.18541,-3.48 -0.009,-4.378 -0.1355,0 -0.025,-0.981 0,-2.958 4.00968,-0.06"
+ class="c27007"
+ id="Beltrami, MN" />
+ <path
+ d="m 600.30118,75.275143 0.82012,-0.683 1.38173,-0.676 0.59548,0 0.0553,0.02 0.0731,0.09 0.61866,1.373 0.26386,0.756 0,0.02 0.49742,1.006 0.16224,0.151 2.80446,-0.522 6.0885,-0.482 0.62935,-0.03 0.70067,0.129 0.27813,0.06 0.80407,0.321 0.43502,0.595 0.0785,0.186 -0.0321,0.312 0.0731,0.16 0.40292,0.291 1.14104,0.545 0.37619,0.02 0.3851,-0.185 2.95956,-0.546 2.57803,-0.33 -0.0232,0.216 -0.0571,0.06 -0.8843,0.692 -0.25674,0.193 -3.31792,1.952 -2.11983,1.159 -1.207,0.658 -1.13391,0.49 -1.38885,0.465 -1.06972,0.378 -2.94887,1.238 -1.45482,0.62 -3.00592,1.967 -1.98434,1.649 -2.31416,2.225 -0.45642,-9.346 -0.28169,-4.307 -0.26565,-2.892"
+ class="c27031"
+ id="Cook, MN" />
+ <path
+ d="m 600.30118,75.275143 0.26565,2.892 0.28169,4.307 0.45642,9.346 -0.34588,0.208 -1.21948,1.366 -0.42432,0.499 -1.93798,2.684 -2.51742,3.021 -0.30487,0.329 -0.6347,0.426997 -0.8433,0.459 -1.9772,2.032 -0.49029,0.537 -0.86112,1.03 -0.49564,-13.258997 -0.37975,-4.837 -0.0963,-1.945 -0.36192,-8.718 0.87182,-0.138 0.42433,0.1 0.016,0.03 0.0553,0.1 0.22464,1.109 -0.11232,0.499 -0.0553,0.145 0.007,0.06 1.11786,0.328 2.40153,0.563 2.47641,-0.176 0.59191,-0.104 0.3637,-0.13 0.23891,-0.128 0.0107,0 3.25373,-2.619"
+ class="c27075"
+ id="Lake, MN" />
+ <path
+ d="m 568.74617,83.422143 0.007,1.593 0.0981,2.321 0.27278,2.644 0.21572,5.311 0.0963,2.772 0.25673,3.214997 0.0588,1.895 -11.35688,0.218 -0.12837,-6.275997 -0.15155,-0.08 -1.14995,-0.218 -0.30487,-0.02 -0.007,0.09 -0.3851,0.337 -0.17829,0.1 -0.42432,-0.265 -1.35141,-0.917 -0.18364,-0.192 -0.12837,-0.346 0,-0.571 0.0303,-0.06 -0.041,-0.41 -0.60974,-1.068 -0.24069,-0.217 -0.36192,-0.06 -2.79555,1.327 -0.38688,0.225 -0.97344,-0.275 -0.51169,-0.369 -0.009,-2.58 -0.11946,-2.876 -0.0571,-3.697 10.01973,-0.216 -0.025,-1.198 10.82559,-0.128"
+ class="c27061"
+ id="Itasca, MN" />
+ <path
+ d="m 536.08043,95.002143 8.06035,-0.03 0.13015,2.025 0.19077,7.882997 0.0321,3.97 -2.00751,0.02 -5.95479,0.04 -0.0339,-3.968 -0.11232,-0.266 -0.0303,-1.648 0,-2.073 -0.27456,-5.945997"
+ class="c27057"
+ id="Hubbard, MN" />
+ <path
+ d="m 544.14078,94.970143 3.97045,-0.852 0.51169,0.369 0.97344,0.275 0.38688,-0.225 2.79555,-1.327 0.36192,0.06 0.24069,0.217 0.60974,1.068 0.041,0.41 -0.0303,0.06 0,0.571 0.12837,0.346 0.18364,0.192 1.35141,0.917 0.42432,0.265 0.17829,-0.1 0.3851,-0.337 0.007,-0.09 0.30487,0.02 1.14995,0.218 0.15155,0.08 0.23355,11.482997 -8.97496,0.122 -0.009,2.644 0.0321,1.347 0.25674,1.095 0.15332,5.777 0.0161,0.948 -0.0802,0.241 -0.14441,0.04 -0.0392,-0.234 -0.10519,-0.169 -1.23018,-0.827 -0.53843,0.04 -0.11232,0.194 -0.312,0.2 -0.75772,0.273 -0.15868,-0.04 -1.29436,-0.57 -0.45107,-0.41 -1.25336,-0.449 -0.77198,-0.571 -0.17472,-5.407 -0.0642,-3.978 2.00751,-0.02 -0.0321,-3.97 -0.19077,-7.882997 -0.13015,-2.025"
+ class="c27021"
+ id="Cass, MN" />
+ <path
+ d="m 542.48628,108.86414 0.0642,3.978 0.17472,5.407 0.77198,0.571 -6.76599,0.07 -0.19968,-7.989 0,-2.001 5.95479,-0.04"
+ class="c27159"
+ id="Wadena, MN" />
+ <path
+ d="m 536.35499,100.94814 0,2.074 0.0303,1.647 0.11232,0.266 0.0339,3.968 0,2.001 -7.4827,0.1 -8.556,-0.05 -0.29774,-9.915 2.0093,0 8.13167,-0.02 6.01897,-0.06"
+ class="c27005"
+ id="Becker, MN" />
+ <path
+ d="m 520.19505,101.03714 0.29774,9.915 -1.69729,1.993 -7.97834,-0.04 -0.009,-1.287 0.30666,-4.998 -0.19434,-0.531 -0.66679,-2.186 -0.0232,-2.908 9.96446,0.04"
+ class="c27027"
+ id="Clay, MN" />
+ <path
+ d="m 510.81716,112.90614 7.97834,0.04 -0.007,7.987 0.24247,0 -0.0178,3.994 -0.016,1.993 -4.99739,-0.03 0.29774,-0.836 0.0392,-0.145 0.0321,-0.465 -0.0481,-0.403 -0.61153,-4.821 -2.20897,-5.32 -0.68284,-1.984 0,0"
+ class="c27167"
+ id="Wilkin, MN" />
+ <path
+ d="m 520.49279,110.95214 8.556,0.05 7.4827,-0.1 0.19968,7.989 0.21038,6.017 -9.99833,0.03 -7.93021,-0.02 0.0178,-3.994 -0.24247,0 0.007,-7.987 1.69729,-1.993"
+ class="c27111"
+ id="Otter Tail, MN" />
+ <path
+ d="m 568.1186,66.669143 1.66342,0 10.90403,6.035 0.40114,-0.28 3.19847,-0.234 0.41006,0.747 0.70067,1.462 0.0713,0.113 0.12836,0.178 2.81872,0.956 0.36192,8.718 0.0963,1.945 0.37975,4.837 0.49564,13.258997 -0.72028,0.36 -0.64362,0.474 -2.69213,2.308 -0.41006,0.377 -0.12124,0.152 0.10697,0.321 0.40115,0.628 0.64183,0.763 0.17651,0.1 -0.082,0.06 -0.22285,-0.1 -0.91462,-0.894 -0.42789,0.03 -1.1232,0.764 -0.0892,0.184 -0.016,0.169 0.0553,0.145 0,0.02 0.0802,0.09 0.016,0.02 0.016,0.257 -0.21573,0.563 -0.0731,0.07 -0.0784,0.05 -0.47603,0.03 -0.44215,-0.04 -0.36014,-0.25 -0.24247,-2.298 -3.67985,0.1 -8.36522,0.266 -0.0945,-5.948 -0.0588,-1.895 -0.25673,-3.214997 -0.0963,-2.772 -0.21572,-5.311 -0.27278,-2.644 -0.0981,-2.321 -0.007,-1.593 -0.0339,-0.875 -0.17472,-2.089 -0.15511,-1.045 -0.13371,-3.978 -0.0428,-3.92 -0.0874,-4.846"
+ class="c27137"
+ id="St. Louis, MN" />
+ <path
+ d="m 569.8462,109.12114 8.36522,-0.266 3.67985,-0.1 0.24247,2.298 0.20859,5.632 -12.14312,0.387 -0.11946,-3.448 -0.12836,-0.539 -0.0499,-0.85 -0.0464,-1.134 -0.009,-1.984"
+ class="c27017"
+ id="Carlton, MN" />
+ <path
+ d="m 570.19921,117.07614 12.14312,-0.387 0.21573,5.964 0.041,0.996 0.0321,0.901 -2.33913,1.46 -3.34288,2.195 -0.005,0 -0.79872,0.699 -0.20147,0.265 -0.19968,0.36 -1.61349,3.231 -4.83871,0.137 -0.19434,-5.737 1.40669,-0.06 -0.10163,-4.058 -0.20324,-5.978"
+ class="c27115"
+ id="Pine, MN" />
+ <path
+ d="m 564.35853,123.32714 6.04392,-0.273 0.10163,4.058 -1.40669,0.06 0.19434,5.737 -5.99401,0.09 -0.15333,-3.23 -0.0624,-2.45 0.71315,-0.03 0.63648,-0.667 -0.0731,-3.294"
+ class="c27065"
+ id="Kanabec, MN" />
+ <path
+ d="m 569.75171,103.17314 0.0945,5.948 0.009,1.984 0.0464,1.134 0.0499,0.85 0.12836,0.539 0.11946,3.448 0.20324,5.978 -6.04392,0.273 0.016,-0.603 -0.0481,-1.51 -1.65628,0.03 -4.18618,0.191 -0.18364,-0.12 -0.0499,-0.05 -0.007,-0.06 -0.18363,-7.586 0.4885,-1.68 -0.0481,-3.343 -0.10518,-5.207 11.35688,-0.218"
+ class="c27001"
+ id="Aitkin, MN" />
+ <path
+ d="m 549.74969,120.81314 0.14441,-0.04 0.0802,-0.241 -0.0161,-0.948 -0.15332,-5.777 -0.25674,-1.095 -0.0321,-1.347 0.009,-2.644 8.97496,-0.122 0.0481,3.343 -0.4885,1.68 0.18363,7.586 0.007,0.06 0.0499,0.05 0.18364,0.12 -0.18364,1.993 -9.02488,0.169 -0.025,-0.763 0.016,-1.214 0.48316,-0.802"
+ class="c27035"
+ id="Crow Wing, MN" />
+ <path
+ d="m 544.75052,119.26914 0.45107,0.41 1.29436,0.57 0.15868,0.04 0.75772,-0.273 0.312,-0.2 0.11232,-0.194 0.53843,-0.04 1.23018,0.827 0.10519,0.169 0.0392,0.234 -0.48316,0.802 -0.016,1.214 0.025,0.763 9.02488,-0.169 0.0945,3.979 0.082,0 0.61865,1.341 0.12837,2.33 -3.96154,0.05 -5.51263,0.152 1.32467,1.054 -5.98509,0.121 -0.33875,-13.179"
+ class="c27097"
+ id="Morrison, MN" />
+ <path
+ d="m 543.49716,118.82014 1.25336,0.449 0.33875,13.179 -7.97835,0.112 -0.16937,-7.65 -0.21038,-6.017 6.76599,-0.07"
+ class="c27153"
+ id="Todd, MN" />
+ <path
+ d="m 536.94155,124.91014 0.16937,7.65 0,0.33 -9.96624,0.03 -0.007,-3.986 -0.1765,0 -0.0178,-3.994 9.99833,-0.03"
+ class="c27041"
+ id="Douglas, MN" />
+ <path
+ d="m 519.01301,124.92614 7.93021,0.02 0.0178,3.994 0.1765,0 0.007,3.986 -7.96943,0 -0.17828,-6.01 0.016,-1.993"
+ class="c27051"
+ id="Grant, MN" />
+ <path
+ d="m 513.99958,126.88714 4.99739,0.03 0.17828,6.01 0,4.003 -9.40285,-0.07 -0.28883,-0.369 -0.0642,-0.09 0.22464,-0.771 0.0553,-0.128 0.025,-0.02 0.0321,-0.04 0.025,-0.03 1.46909,-1.18 0.55625,-0.362 0.61866,-0.337 0.32805,-0.33 1.12499,-1.671 0.025,-0.06 0.016,-0.03 0.016,-0.05 0.016,-0.114 0.0392,-0.209 0.0571,-0.497 0.0713,-0.61 0.009,-0.03 0,-0.05 0.0891,-1.004 -0.21751,-1.993"
+ class="c27155"
+ id="Traverse, MN" />
+ <path
+ d="m 509.7724,136.85914 9.40285,0.07 0.19077,0 -0.0161,3.968 2.01821,0.03 0.2086,5.408 -1.13391,-0.394 -1.64737,-0.665 -0.15154,-0.332 -0.68997,-0.314 -2.04139,-0.433 -0.26565,-1.326 -0.30665,-0.706 -0.52951,-0.426 -1.5511,-0.756 -2.3623,-2.619 -1.12499,-1.503"
+ class="c27011"
+ id="Big Stone, MN" />
+ <path
+ d="m 527.34436,140.90914 7.97478,-0.05 0.18364,5.987 -12.84023,0.05 -1.08577,-0.563 -0.2086,-5.408 5.97618,-0.02"
+ class="c27151"
+ id="Swift, MN" />
+ <path
+ d="m 527.14468,132.92214 0.016,4.01 0.16937,0 0.0143,3.977 -5.97618,0.02 -2.01821,-0.03 0.0161,-3.968 -0.19077,0 0,-4.003 7.96943,0"
+ class="c27149"
+ id="Stevens, MN" />
+ <path
+ d="m 537.11092,132.89014 0.0303,3.992 0.13728,0 0.0321,3.972 -1.99147,0 -7.97478,0.05 -0.0143,-3.977 -0.16937,0 -0.016,-4.01 9.96624,-0.03"
+ class="c27121"
+ id="Pope, MN" />
+ <path
+ d="m 545.08927,132.44814 5.98509,-0.121 2.06635,4.926 1.72047,3.109 -3.39994,3.247 -1.98611,0.06 -0.93958,-0.981 -1.53505,0.02 -3.70302,0.06 -0.0267,-1.993 -5.96013,0.08 -0.0321,-3.972 -0.13728,0 -0.0303,-3.992 0,-0.33 7.97835,-0.112"
+ class="c27145"
+ id="Stearns, MN" />
+ <path
+ d="m 551.07436,132.32714 -1.32467,-1.054 5.51263,-0.152 3.96154,-0.05 0.2086,6.026 -6.29175,0.154 -2.06635,-4.926"
+ class="c27009"
+ id="Benton, MN" />
+ <path
+ d="m 558.48397,121.43014 4.18618,-0.191 1.65628,-0.03 0.0481,1.51 -0.016,0.603 0.0731,3.294 -0.63648,0.667 -0.71315,0.03 0.0624,2.45 0.15333,3.23 0.15154,4.026 -4.0168,0.08 -0.2086,-6.026 -0.12837,-2.33 -0.61865,-1.341 -0.082,0 -0.0945,-3.979 0.18364,-1.993"
+ class="c27095"
+ id="Mille Lacs, MN" />
+ <path
+ d="m 569.29173,132.90614 0.11232,3.97 1.94511,0.288 0.14441,3.005 -2.32308,0.02 -4.64438,0.143 -0.97166,0 -0.10519,-3.311 -0.15154,-4.026 5.99401,-0.09"
+ class="c27059"
+ id="Isanti, MN" />
+ <path
+ d="m 574.13044,132.76914 -0.65432,2 -0.0214,0.364 0.007,0.151 0.041,0.61 0.0553,0.451 0.21751,0.168 0.77199,0.13 0.32091,-0.05 1.27119,0.685 0.79338,1.501 0.32091,1.624 -0.60974,1.558 -0.42789,0.53 -0.0214,0.02 -0.19433,0.176 -4.41796,0.128 -0.0891,-2.644 -0.14441,-3.005 -1.94511,-0.288 -0.11232,-3.97 4.83871,-0.137"
+ class="c27025"
+ id="Chisago, MN" />
+ <path
+ d="m 568.38246,148.92914 3.29653,-2.138 0.18542,5.359 -2.57982,0.138 -0.90213,-3.359"
+ class="c27123"
+ id="Ramsey, MN" />
+ <path
+ d="m 563.55445,140.33014 0.97166,0 4.64438,-0.143 2.32308,-0.02 0.0891,2.644 0.0963,3.978 -3.29653,2.138 -4.76383,-4.709 -0.0642,-3.89"
+ class="c27003"
+ id="Anoka, MN" />
+ <path
+ d="m 563.44926,137.01914 0.10519,3.311 0.0642,3.89 -0.15154,-0.02 -0.99662,-1.022 -1.43165,-0.04 -1.36568,0.05 -0.23355,-0.06 -1.63133,-0.932 -2.94708,-1.84 -1.72047,-3.109 6.29175,-0.154 4.0168,-0.08"
+ class="c27141"
+ id="Sherburne, MN" />
+ <path
+ d="m 551.46124,143.60914 3.39994,-3.247 2.94708,1.84 1.63133,0.932 0.23355,0.06 1.36568,-0.05 1.43165,0.04 0.99662,1.022 -1.93798,0.988 -0.22464,0.185 -1.45482,2.771 -0.2086,2.33 -4.00254,0.07 -3.96867,0.06 -0.2086,-6.999"
+ class="c27171"
+ id="Wright, MN" />
+ <path
+ d="m 543.29748,142.76514 3.70302,-0.06 1.53505,-0.02 0.93958,0.981 1.98611,-0.06 0.2086,6.999 -3.98471,2.081 -4.17192,0.06 -0.21573,-9.988"
+ class="c27093"
+ id="Meeker, MN" />
+ <path
+ d="m 535.31914,140.86114 1.99147,0 5.96013,-0.08 0.0267,1.993 0.21573,9.988 -7.99439,0.1 -0.016,-6.003 -0.18364,-5.987"
+ class="c27067"
+ id="Kandiyohi, MN" />
+ <path
+ d="m 522.66255,146.89614 12.84023,-0.05 0.016,6.003 -3.83317,0.04 0.025,3.167 -4.16478,-4.195 -4.88328,-4.966"
+ class="c27023"
+ id="Chippewa, MN" />
+ <path
+ d="m 571.58271,142.81314 4.41796,-0.128 -0.24782,2 -0.33875,3.03 0.0499,0.755 0.39936,0.853 0.34945,1.615 -0.1248,1.735 -0.56874,2.717 -3.65488,-3.24 -0.18542,-5.359 -0.0963,-3.978"
+ class="c27163"
+ id="Washington, MN" />
+ <path
+ d="m 569.28459,152.28814 2.57982,-0.138 3.65488,3.24 1.166,0.674 0.0624,1.945 -0.9057,2.009 -2.07526,0.07 -1.94333,0.724 0.0232,0.995 -4.02572,-1.542 -0.007,-2 -0.65253,0.02 -0.21573,-1.992 -0.0731,-1.688 2.41222,-2.314"
+ class="c27037"
+ id="Dakota, MN" />
+ <path
+ d="m 563.61863,144.22014 4.76383,4.709 0.90213,3.359 -2.41222,2.314 -3.12537,-0.227 -0.0481,-2 -4.02572,0.105 -0.0321,-2.002 0.2086,-2.33 1.45482,-2.771 0.22464,-0.185 1.93798,-0.988 0.15154,0.02"
+ class="c27053"
+ id="Hennepin, MN" />
+ <path
+ d="m 563.747,154.37514 3.12537,0.227 0.0731,1.688 0.21573,1.992 0.65253,-0.02 0.007,2 -3.9758,0.114 -6.33276,0.161 2.28208,-2.291 0.0731,0.03 0.43323,-0.179 1.3746,-1.077 0.40114,-0.538 -0.11232,-0.209 0.0161,-0.337 0.82547,-1.308 0.60439,-0.252 0.33696,0"
+ class="c27139"
+ id="Scott, MN" />
+ <path
+ d="m 555.63851,150.55114 4.00254,-0.07 0.0321,2.002 4.02572,-0.105 0.0481,2 -0.33696,0 -0.60439,0.252 -0.82547,1.308 -0.0161,0.337 0.11232,0.209 -0.40114,0.538 -1.3746,1.077 -0.43323,0.178 -0.0731,-0.03 -4.00254,-1.686 -0.15333,-6.012"
+ class="c27019"
+ id="Carver, MN" />
+ <path
+ d="m 551.66984,150.60814 3.96867,-0.06 0.15333,6.012 -1.99147,0.04 -1.98612,0.25 0.0178,1.799 -3.38389,0.07 -0.59547,0 -0.0321,-2.01 -0.13549,-4.025 3.98471,-2.081"
+ class="c27085"
+ id="McLeod, MN" />
+ <path
+ d="m 555.79184,156.56314 4.00254,1.687 -2.28208,2.291 -0.26564,2 -11.40324,0.217 -0.11232,-1.986 -0.0642,-4.018 2.1537,-0.04 0.0321,2.009 0.59547,0 3.38389,-0.07 -0.0178,-1.799 1.98612,-0.25 1.99147,-0.04"
+ class="c27143"
+ id="Sibley, MN" />
+ <path
+ d="m 547.68513,152.68914 0.13549,4.025 -2.1537,0.04 0.0642,4.018 0.11232,1.986 -2.57268,0.02 -1.4049,-0.94 -8.1388,-4.532 -2.01643,-1.253 -0.025,-3.167 3.83317,-0.04 7.99439,-0.1 4.17192,-0.06"
+ class="c27129"
+ id="Renville, MN" />
+ <path
+ d="m 521.57678,146.33314 1.08577,0.563 4.88328,4.966 0,1.028 -1.81318,1.985 -9.84501,-0.02 0.025,-10.663 2.04139,0.433 0.68997,0.314 0.15154,0.332 1.64737,0.665 1.13391,0.394"
+ class="c27073"
+ id="Lac qui Parle, MN" />
+ <path
+ d="m 515.88764,154.85914 9.84501,0.02 1.81318,-1.985 0,-1.028 4.16478,4.195 2.01643,1.253 0.016,3.607 -3.84208,0 -0.15155,-2.017 -8.01221,0 -5.87456,-0.03 0.025,-4.018"
+ class="c27173"
+ id="Yellow Medicine, MN" />
+ <path
+ d="m 521.73724,158.90914 0.22464,9.995 -6.16338,-0.02 0.0499,-7.987 0.0143,-2.017 5.87456,0.03"
+ class="c27081"
+ id="Lincoln, MN" />
+ <path
+ d="m 529.95627,168.91314 -7.74479,0 -0.2496,0 -0.22464,-9.995 8.01221,0 0.15155,2.017 0.0553,7.987"
+ class="c27083"
+ id="Lyon, MN" />
+ <path
+ d="m 541.86584,161.84214 0.0571,4.974 -3.96867,0.06 -0.009,2 -5.82642,0.02 -2.16262,0.02 -0.0553,-7.987 3.84208,0 -0.016,-3.607 8.1388,4.532"
+ class="c27127"
+ id="Redwood, MN" />
+ <path
+ d="m 543.27074,162.78214 0.52595,0.16 0.6971,0.346 3.48016,1.76 0.19255,0.137 0.39401,0.385 1.50296,1.544 0.10519,3.591 -8.09244,0.128 -4.13091,-1.961 0.009,-2.001 3.96867,-0.06 -0.0571,-4.974 1.4049,0.94"
+ class="c27015"
+ id="Brown, MN" />
+ <path
+ d="m 557.24666,162.54114 -0.49742,2.009 -0.78803,2.354 0.0392,0.675 0.18542,1.462 -0.025,0.161 -0.69175,0.337 -0.14442,0.02 -0.47959,-0.146 -0.49207,-0.281 -0.20147,-0.159 -3.41419,-1.624 -0.67393,-0.232 -1.50296,-1.544 -0.39401,-0.385 -0.19255,-0.137 -3.48016,-1.76 -0.6971,-0.346 -0.52595,-0.16 2.57268,-0.02 11.40324,-0.217"
+ class="c27103"
+ id="Nicollet, MN" />
+ <path
+ d="m 557.5123,160.54114 6.33276,-0.161 0.19077,8.011 -4.00076,0.1 -4.03464,-0.908 -0.0392,-0.675 0.78803,-2.354 0.49742,-2.009 0.26564,-2"
+ class="c27079"
+ id="Le Sueur, MN" />
+ <path
+ d="m 563.84506,160.38014 3.9758,-0.114 4.02572,1.542 0.16937,6.342 -0.0891,0 -5.93696,0.176 -1.95402,0.07 -0.19077,-8.011"
+ class="c27131"
+ id="Rice, MN" />
+ <path
+ d="m 576.68529,156.06414 1.69372,1.439 0.17651,0.224 0.041,0.225 1.18918,1.182 0.25851,0.119 0.69889,0.08 2.20898,0.09 0.28169,0.06 0.18542,0.09 0.15867,0.137 0.0571,0.09 1.30328,1.945 -3.09506,0.103 -1.89697,2.067 0.1355,4.009 -2.10201,0.05 -5.9637,0.177 -0.16937,-6.342 -0.0232,-0.995 1.94333,-0.723 2.07526,-0.07 0.9057,-2.009 -0.0624,-1.945"
+ class="c27049"
+ id="Goodhue, MN" />
+ <path
+ d="m 584.93819,161.74614 2.63508,1.004 3.84031,4.756 -3.47838,2.131 -3.95441,0.153 -0.0891,-2.009 -3.80999,0.144 -0.1355,-4.01 1.89697,-2.066 3.09506,-0.103"
+ class="c27157"
+ id="Wabasha, MN" />
+ <path
+ d="m 591.41358,167.50614 5.1828,3.664 2.33912,0.804 2.40153,3.054 -7.38465,0.353 -5.76936,0.241 -0.24782,-5.985 3.47838,-2.131"
+ class="c27169"
+ id="Winona, MN" />
+ <path
+ d="m 577.97965,167.97314 2.10201,-0.05 3.80999,-0.144 0.0891,2.009 3.95441,-0.153 0.24782,5.985 -6.10633,0.547 -4.00255,-0.192 -0.0945,-8.004"
+ class="c27109"
+ id="Olmsted, MN" />
+ <path
+ d="m 572.01595,168.15014 5.9637,-0.177 0.0945,8.004 -5.88882,0.201 -0.25851,-8.028 0.0891,0"
+ class="c27039"
+ id="Dodge, MN" />
+ <path
+ d="m 571.92681,168.15014 0.25851,8.028 -0.0624,0 -5.91734,0.177 -0.21573,-8.029 5.93696,-0.176"
+ class="c27147"
+ id="Steele, MN" />
+ <path
+ d="m 564.03583,168.39114 1.95402,-0.07 0.21573,8.029 -4.00076,0.103 -1.9772,0.05 -0.19255,-8.019 4.00076,-0.1"
+ class="c27161"
+ id="Waseca, MN" />
+ <path
+ d="m 560.03507,168.48714 0.19255,8.019 -7.93912,0.178 -2.01643,0.03 -0.10341,-6.01 -0.10519,-3.591 0.67393,0.232 3.41419,1.624 0.20147,0.159 0.49207,0.281 0.47959,0.146 0.14442,-0.02 0.69175,-0.337 0.025,-0.161 -0.18542,-1.462 4.03464,0.908"
+ class="c27013"
+ id="Blue Earth, MN" />
+ <path
+ d="m 542.07622,170.83314 8.09244,-0.128 0.10341,6.01 -8.03539,0.112 -0.0802,0 -0.0802,-5.994"
+ class="c27165"
+ id="Watonwan, MN" />
+ <path
+ d="m 532.11889,168.89014 5.82642,-0.02 4.13091,1.961 0.0802,5.994 -9.82897,0.1 -0.16759,0 -0.041,-8.033"
+ class="c27033"
+ id="Cottonwood, MN" />
+ <path
+ d="m 529.95627,168.91314 2.16262,-0.02 0.041,8.033 -9.76299,0 -0.20147,0 0.0161,-8.012 7.74479,0"
+ class="c27101"
+ id="Murray, MN" />
+ <path
+ d="m 515.7985,168.88114 6.16338,0.02 0.2496,0 -0.0161,8.012 -6.44507,-0.03 0.0481,-8.003"
+ class="c27117"
+ id="Pipestone, MN" />
+ <path
+ d="m 515.75036,176.88414 6.44507,0.03 0.20147,0 -0.0178,8.052 -6.6608,-0.02 0.0321,-8.06"
+ class="c27133"
+ id="Rock, MN" />
+ <path
+ d="m 522.3969,176.91614 9.76299,0 0.16759,0 0.0178,8.013 -6.7749,0.04 -3.19134,0 0.0178,-8.052"
+ class="c27105"
+ id="Nobles, MN" />
+ <path
+ d="m 542.15645,176.82714 0.0802,0 0.0963,8.021 -1.01267,0.02 -7.86602,0.07 -1.10895,0 -0.0178,-8.013 9.82897,-0.1"
+ class="c27063"
+ id="Jackson, MN" />
+ <path
+ d="m 552.2885,176.68414 0.14619,8.011 -3.25552,0.05 -6.84622,0.1 -0.0963,-8.021 8.03539,-0.112 2.01643,-0.03"
+ class="c27091"
+ id="Martin, MN" />
+ <path
+ d="m 562.20482,176.45814 0.19255,8.043 -5.35931,0.121 -4.60337,0.07 -0.14619,-8.011 7.93912,-0.178 1.9772,-0.05"
+ class="c27043"
+ id="Faribault, MN" />
+ <path
+ d="m 572.12292,176.17814 0.25495,8.043 -7.45596,0.215 -2.52454,0.06 -0.19255,-8.043 4.00076,-0.103 5.91734,-0.177"
+ class="c27047"
+ id="Freeborn, MN" />
+ <path
+ d="m 578.07414,175.97714 4.00255,0.192 0.2906,7.69 -1.73651,0.06 -7.84285,0.28 -0.41006,0.02 -0.25495,-8.043 0.0624,0 5.88882,-0.201"
+ class="c27099"
+ id="Mower, MN" />
+ <path
+ d="m 638.39755,334.91214 3.11824,-0.442 3.88844,5.238 -1.42273,3.19 -1.24445,0.123 0.18007,-0.339 0.0285,-0.06 0.0232,-0.09 0.0571,-0.227 0.016,-0.06 0,-0.1 -0.007,-0.04 0,0 -0.0571,-0.25 -0.11232,-0.266 -0.0107,-0.02 -0.11767,-0.183 -0.025,-0.02 -0.0392,-0.03 -0.0481,-0.03 -0.28169,-0.08 -0.51347,-0.08 -0.33696,0.05 -0.1141,0.07 -0.21038,0.281 -0.0303,0.04 -0.0232,0.09 -0.025,0.105 -0.0178,0.08 0.0178,0.07 0.0178,0.1 0.007,0.02 0.19968,0.427 0.025,0.03 0.40828,0.584 0.1462,3.737 -0.96454,-1.485 -0.3637,-0.153 -1.33181,0.24 -1.35141,0.521 -2.81872,0.178 -0.8843,0 -0.31557,-5.559 4.72639,-0.267 -0.42433,-5.358 0.23178,-0.02"
+ class="c29143"
+ id="New Madrid, MO" />
+ <path
+ d="m 641.89376,346.81114 -1.3122,3.6 -1.62241,4.396 -4.17013,0.314 -0.60974,-9.009 0.8843,0 2.81872,-0.178 1.35141,-0.521 1.33181,-0.24 0.3637,0.153 0.96454,1.485"
+ class="c29155"
+ id="Pemiscot, MO" />
+ <path
+ d="m 527.3301,252.38714 6.79808,0.07 2.97383,0.02 0.0321,2.296 0.41719,0 0.0232,2.188 -0.0303,2.853 -6.47716,-0.03 0.0178,-0.418 0,-0.03 0.005,-0.04 -0.0463,-0.119 -1.21414,-1.182 -1.13212,-2.846 -0.0963,-0.408 0.19968,-0.185 0.37797,-0.676 -0.65075,-0.578 -0.22643,0.491 -0.97166,-1.414"
+ class="c29005"
+ id="Atchison, MO" />
+ <path
+ d="m 537.54416,259.82014 1.65272,0 0.37084,0.717 -0.0464,0.09 -0.0891,0.708 0.23356,1.16 0.1034,0.175 0.21038,0.168 0.92175,5.311 -0.60261,0.683 -0.0143,0.02 -0.1034,0.1 -0.13015,0.05 -0.66858,0.06 -0.0802,0 -0.0642,-0.02 -0.33696,-0.128 -0.43324,-0.16 -0.85935,-0.553 -2.12161,-1.92 -0.11232,-0.163 -0.009,-0.215 -4.29849,-6.044 0,-0.06 6.47716,0.03"
+ class="c29087"
+ id="Holt, MO" />
+ <path
+ d="m 539.06317,276.68614 8.82877,-0.08 0.041,1.767 0.082,6.862 -3.39994,-0.907 -3.16637,-5.017 -2.38548,-2.624"
+ class="c29165"
+ id="Platte, MO" />
+ <path
+ d="m 547.77249,269.94314 0.0321,1.681 0.0874,4.981 -8.82877,0.08 0.6971,-2.097 0.20859,-0.298 0.6044,-0.882 0.0713,-0.08 1.26941,-1.124 0.37083,-0.06 0.36906,-0.822 -0.13728,-0.634 -0.14442,-0.683 5.40032,-0.06"
+ class="c29021"
+ id="Buchanan, MO" />
+ <path
+ d="m 547.61381,262.84014 0.0374,2.018 0.12124,5.085 -5.40032,0.06 -1.47086,-1.849 -0.92175,-5.311 7.63425,0"
+ class="c29003"
+ id="Andrew, MO" />
+ <path
+ d="m 542.09939,252.51514 4.91181,0.02 0.64005,4.265 -0.0374,6.035 -7.63425,0 -0.21038,-0.168 -0.1034,-0.174 -0.23356,-1.161 0.0891,-0.708 0.0464,-0.09 -0.37084,-0.717 -1.65272,0 0.0303,-2.853 -0.0232,-2.187 -0.41719,0 -0.0321,-2.297 4.99738,0.03"
+ class="c29147"
+ id="Nodaway, MO" />
+ <path
+ d="m 549.79783,252.50614 4.14695,-0.1 0.39223,4.342 -6.68576,0.06 -0.64005,-4.265 2.78663,-0.03"
+ class="c29227"
+ id="Worth, NO" />
+ <path
+ d="m 547.65125,256.80514 6.68576,-0.06 0.0731,5.748 0,2.349 -6.75886,0.01 -0.0374,-2.018 0.0374,-6.035"
+ class="c29075"
+ id="Gentry, MO" />
+ <path
+ d="m 554.41011,264.84714 0.33696,5.689 0.016,1.001 -6.95854,0.09 -0.0321,-1.681 -0.12124,-5.085 6.75886,-0.01"
+ class="c29063"
+ id="DeKalb, MO" />
+ <path
+ d="m 554.76312,271.53714 0.0499,5.068 0,1.68 -6.8801,0.09 -0.041,-1.767 -0.0874,-4.981 6.95854,-0.09"
+ class="c29049"
+ id="Clinton, MO" />
+ <path
+ d="m 547.93294,278.37214 6.8801,-0.09 0.0713,5.737 -0.51524,-0.529 -0.0963,-0.07 -0.1765,-0.06 -0.61153,0 -0.20681,0.104 -0.10519,0.132 -0.1355,0.262 -0.0891,0.403 -0.23534,0.344 -0.5206,0.538 -1.78465,0.884 -2.47463,0.291 0.082,-1.079 -0.082,-6.862"
+ class="c29047"
+ id="Clay, MO" />
+ <path
+ d="m 554.74707,270.53614 1.97721,0.03 3.56574,-0.09 2.2999,-0.01 0.10519,4.012 0.0321,2.016 -7.91416,0.105 -0.0499,-5.068 -0.016,-1.001"
+ class="c29025"
+ id="Caldwell, MO" />
+ <path
+ d="m 562.31714,262.40714 0.12837,4.018 0.14441,4.047 -2.2999,0.01 -3.56574,0.09 -1.97721,-0.03 -0.33696,-5.689 0,-2.349 7.90703,-0.09"
+ class="c29061"
+ id="Daviess, MO" />
+ <path
+ d="m 561.89103,252.11414 0.36193,7.256 0.0642,3.037 -7.90703,0.09 -0.0731,-5.748 -0.39223,-4.342 3.76007,-0.117 4.18618,-0.177"
+ class="c29081"
+ id="Harrison, MO" />
+ <path
+ d="m 565.66002,251.95914 3.17351,-0.09 0.25673,4.564 0.066,2.701 -6.90327,0.233 -0.36193,-7.256 3.76899,-0.155"
+ class="c29129"
+ id="Mercer, MO" />
+ <path
+ d="m 569.15623,259.13714 0.24069,5.398 0.0392,1.518 -6.99063,0.372 -0.12837,-4.018 -0.0642,-3.037 6.90327,-0.233"
+ class="c29079"
+ id="Grundy, MO" />
+ <path
+ d="m 569.43614,266.05314 0.0321,2.034 0.0891,4.083 1.72047,-0.05 -0.13906,2.047 -8.44367,0.316 -0.10519,-4.012 -0.14441,-4.047 6.99063,-0.372"
+ class="c29117"
+ id="Livingston, MO" />
+ <path
+ d="m 562.69511,274.48414 8.44367,-0.316 3.21451,5.283 -0.73097,0.06 -0.75237,0.291 -1.61885,1.446 -1.00376,1.688 -0.19255,0.12 -0.70601,0.176 -0.24069,-0.04 -0.11232,-0.103 -1.15887,-1.35 -1.88805,1.262 -1.18205,-0.146 -1.84705,0.997 -0.19255,-7.353 -0.0321,-2.016"
+ class="c29033"
+ id="Carroll, MO" />
+ <path
+ d="m 562.7272,276.50014 0.19255,7.353 -1.3015,-0.161 -2.4764,0.36 -0.9788,0.79 0.0464,0.09 0.0339,0.249 -0.37797,0.323 -0.19255,0.126 -0.24068,0.04 -0.24961,-0.02 -0.36192,-0.186 -1.9362,-1.437 -0.0713,-5.737 0,-1.68 7.91416,-0.105"
+ class="c29177"
+ id="Ray, MO" />
+ <path
+ d="m 562.91975,283.85314 1.84705,-0.997 1.18205,0.146 1.88805,-1.262 -0.12836,8.116 0,0.338 -6.00114,-0.07 -0.0107,0.676 -4.94033,-0.09 0.0642,-5.249 0.36192,0.186 0.24961,0.02 0.24068,-0.04 0.19255,-0.126 0.37797,-0.323 -0.0339,-0.249 -0.0464,-0.09 0.9788,-0.79 2.4764,-0.36 1.3015,0.161"
+ class="c29107"
+ id="Lafayette, MO" />
+ <path
+ d="m 556.82055,285.45914 -0.0642,5.249 -0.0481,1.952 -8.69327,-0.176 -0.0571,-4.565 -0.025,-1.606 2.47463,-0.291 1.78465,-0.884 0.5206,-0.538 0.23534,-0.344 0.0891,-0.403 0.1355,-0.262 0.10519,-0.132 0.20681,-0.104 0.61153,0 0.1765,0.06 0.0963,0.07 0.51524,0.529 1.9362,1.437"
+ class="c29095"
+ id="Jackson, MO" />
+ <path
+ d="m 567.70854,290.19414 -0.025,8.631 -9.87532,-0.03 -1.10003,-6.139 0.0481,-1.952 4.94033,0.09 0.0107,-0.676 6.00114,0.07"
+ class="c29101"
+ id="Johnson, MO" />
+ <path
+ d="m 567.68358,298.82514 0,1.011 -0.007,7.08 -9.4403,0.06 -0.3958,-5.393 -0.0321,-2.788 9.87532,0.03"
+ class="c29083"
+ id="Henry, MO" />
+ <path
+ d="m 548.01496,292.48414 8.69327,0.176 1.10003,6.139 0.0321,2.788 -2.57268,0.02 -1.00375,-0.103 -1.03585,-0.394 -5.18102,-0.06 -0.025,-6.044 -0.007,-2.522"
+ class="c29037"
+ id="Cass, MO" />
+ <path
+ d="m 558.23615,306.98014 9.4403,-0.06 0.43502,3.102 -0.0481,3.694 -0.45998,0 -0.57052,1.006 -0.0232,1.014 -0.99662,-0.01 -3.30188,-0.05 0.0232,-1.34 -4.63546,-0.09 0.0713,-3.151 0.066,-4.113"
+ class="c29185"
+ id="St. Clair, MO" />
+ <path
+ d="m 548.04705,301.05014 5.18102,0.06 1.03585,0.394 1.00375,0.103 2.57268,-0.02 0.3958,5.393 -0.066,4.113 -1.35676,-0.472 -1.20522,0.101 -0.71493,0.107 -6.72677,-0.107 -0.0963,-7.614 -0.0232,-2.058"
+ class="c29013"
+ id="Bates, MO" />
+ <path
+ d="m 558.09887,314.24414 4.63546,0.09 -0.0232,1.34 3.30188,0.05 0.37084,5.938 -8.30818,-0.02 0,-1.349 0.0232,-6.051"
+ class="c29039"
+ id="Cedar, MO" />
+ <path
+ d="m 558.17018,311.09314 -0.0713,3.151 -0.0232,6.051 -9.83787,-0.152 -0.007,-0.451 -0.0553,-8.429 -0.009,-0.541 6.72677,0.107 0.71493,-0.107 1.20522,-0.101 1.35676,0.472"
+ class="c29217"
+ id="Vernon, MO" />
+ <path
+ d="m 558.07569,321.64414 8.30818,0.02 -0.009,3.368 0,3.373 -7.74657,0 -0.56873,-1.363 0.016,-5.385"
+ class="c29057"
+ id="Dade, MO" />
+ <path
+ d="m 558.07569,320.29514 0,1.349 -0.016,5.384 -9.71665,-0.178 -0.10518,-6.707 9.83787,0.152"
+ class="c29011"
+ id="Barton, MO" />
+ <path
+ d="m 558.05965,327.02814 0.56873,1.364 -0.007,5.611 -10.18375,-0.02 -0.0874,-6.525 -0.007,-0.603 9.71665,0.178"
+ class="c29097"
+ id="Jasper, MO" />
+ <path
+ d="m 548.4375,333.97814 10.18375,0.02 -0.041,6.95 -10.05182,-0.257 -0.0909,-6.718"
+ class="c29145"
+ id="Newton, MO" />
+ <path
+ d="m 558.58024,340.95314 -0.0321,5.778 -9.92523,0.159 -0.0553,-3.903 -0.0392,-2.291 10.05182,0.257"
+ class="c29119"
+ id="McDonald, MO" />
+ <path
+ d="m 566.37495,328.40114 0.41719,4.252 0.0321,2.37 0.0321,1.688 -8.25113,-0.02 0.0161,-2.692 0.007,-5.611 7.74657,0"
+ class="c29109"
+ id="Lawrence, MO" />
+ <path
+ d="m 558.6052,336.69514 8.25113,0.02 0.025,2.371 0.71493,0 -0.007,7.44 -5.17568,0.129 -3.86526,0.08 0.0571,-10.036"
+ class="c29009"
+ id="Barry, MO" />
+ <path
+ d="m 567.00965,315.73214 6.96746,0.392 0.35479,8.927 -7.95695,-0.02 0.009,-3.368 -0.37084,-5.938 0.99662,0.01"
+ class="c29167"
+ id="Polk, MO" />
+ <path
+ d="m 566.82423,335.02314 4.97421,-0.06 0.0321,4.056 0.69176,0 0.007,7.384 -4.94033,0.121 0.007,-7.439 -0.71493,0 -0.025,-2.372 -0.0321,-1.688"
+ class="c29209"
+ id="Stone, MO" />
+ <path
+ d="m 574.3319,325.05114 1.98255,0 0.0428,3.357 0.271,0 0.0642,4.195 -9.90028,0.06 -0.41719,-4.252 0,-3.373 7.95695,0.02"
+ class="c29077"
+ id="Greene, MO" />
+ <path
+ d="m 579.73756,338.97514 2.644,-0.01 0.10519,7.144 -1.50475,0.05 -8.09779,0.241 -0.35479,0 -0.007,-7.385 7.21527,-0.04"
+ class="c29213"
+ id="Taney, MO" />
+ <path
+ d="m 576.69242,332.59614 2.96491,0.323 0.0802,6.056 -7.21527,0.04 -0.69176,0 -0.0321,-4.056 -4.97421,0.06 -0.0321,-2.37 9.90028,-0.06"
+ class="c29043"
+ id="Christian, MO" />
+ <path
+ d="m 580.2439,323.31714 3.02374,-0.05 0.0713,5.054 0.2389,0 0.0339,4.548 -3.95441,0.05 -2.96491,-0.323 -0.0642,-4.195 -0.271,0 -0.0428,-3.357 3.92945,-1.727"
+ class="c29225"
+ id="Webster, MO" />
+ <path
+ d="m 575.97749,313.74414 3.9134,0.03 0.0553,4.053 0.24247,0 0.0553,5.497 -3.92945,1.727 -1.98255,0 -0.35479,-8.927 2.00038,-2.38"
+ class="c29059"
+ id="Dallas, MO" />
+ <path
+ d="m 568.11147,310.01814 7.88028,0.02 -0.0143,3.71 -2.00038,2.38 -6.96746,-0.392 0.0232,-1.014 0.57052,-1.006 0.45998,0 0.0481,-3.694"
+ class="c29085"
+ id="Hickory, MO" />
+ <path
+ d="m 567.68358,299.83614 3.94549,0.04 0.009,-0.675 1.87202,-0.02 2.11448,0.02 0.007,6.252 0.36014,4.582 -7.88028,-0.02 -0.43502,-3.102 0.007,-7.08"
+ class="c29015"
+ id="Benton, MO" />
+ <path
+ d="m 567.70854,289.85614 3.46233,0.07 3.66558,0 0.80408,0.04 0,5.454 -0.0161,3.776 -2.11448,-0.02 -1.87202,0.02 -0.009,0.675 -3.94549,-0.04 0,-1.011 0.025,-8.631 0,-0.338"
+ class="c29159"
+ id="Pettis, MO" />
+ <path
+ d="m 574.35329,279.45114 4.63012,3.51 -1.39064,3.784 -1.95224,3.225 -0.80408,-0.04 -3.66558,0 -3.46233,-0.07 0.12836,-8.116 1.15887,1.35 0.11232,0.103 0.24069,0.04 0.70601,-0.176 0.19255,-0.12 1.00376,-1.688 1.61885,-1.446 0.75237,-0.291 0.73097,-0.06"
+ class="c29195"
+ id="Saline, MO" />
+ <path
+ d="m 578.46816,271.98614 2.98274,1.982 -0.041,6.688 -2.42648,2.305 -4.63012,-3.51 -3.21451,-5.283 0.13906,-2.047 7.19032,-0.135"
+ class="c29041"
+ id="Chariton, MO" />
+ <path
+ d="m 578.23638,264.17314 0.15155,0 0.0802,7.818 -7.19032,0.135 -1.72047,0.05 -0.0891,-4.083 -0.0321,-2.034 -0.0392,-1.518 8.83946,-0.362"
+ class="c29115"
+ id="Linn, MO" />
+ <path
+ d="m 569.09026,256.43614 4.87972,-0.216 4.0168,-0.121 0.0232,1.004 0.22642,7.07 -8.83946,0.362 -0.24069,-5.398 -0.066,-2.701"
+ class="c29211"
+ id="Sullivan, MO" />
+ <path
+ d="m 580.27599,251.30114 0.31557,1.134 -0.11411,2.193 0.52238,2.355 -2.98987,0.12 -0.0232,-1.004 -4.0168,0.121 -4.87972,0.216 -0.25673,-4.564 4.80483,-0.223 6.63763,-0.348"
+ class="c29171"
+ id="Putnam, MO" />
+ <path
+ d="m 586.57665,250.89114 0.23177,5.801 -5.80859,0.291 -0.52238,-2.355 0.11411,-2.193 -0.31557,-1.134 1.32645,-0.07 4.97421,-0.337"
+ class="c29197"
+ id="Schuyler, MO" />
+ <path
+ d="m 586.80842,256.69214 0.082,1.013 0.27991,6.147 -8.78242,0.316 -0.15155,0 -0.22642,-7.071 2.98987,-0.119 5.80859,-0.291"
+ class="c29001"
+ id="Adair, MO" />
+ <path
+ d="m 587.17035,263.85214 1.07863,1.928 0.11232,8.046 -0.0339,0 -6.87653,0.142 -2.98274,-1.982 -0.0802,-7.818 8.78242,-0.316"
+ class="c29121"
+ id="Macon, MO" />
+ <path
+ d="m 588.32743,273.82614 0.0713,5.969 0.0161,2.348 -2.04674,0.02 -4.95816,-1.51 0.041,-6.688 6.87653,-0.142"
+ class="c29175"
+ id="Randolph, MO" />
+ <path
+ d="m 581.40989,280.65614 4.95816,1.51 -2.0182,6.525 -4.03286,0.127 -1.10181,-0.184 -0.19077,-0.08 -0.89321,-0.619 -0.14442,-0.192 -0.39401,-0.843 0,-0.155 1.39064,-3.784 2.42648,-2.305"
+ class="c29089"
+ id="Howard, MO" />
+ <path
+ d="m 577.59277,286.74514 0,0.155 0.39401,0.843 0.14442,0.192 0.89321,0.619 0.19077,0.08 1.10181,0.184 4.03286,-0.127 1.09289,1.093 -1.42807,3.937 -0.34766,1.029 -0.1355,0.506 -2.27316,0.209 -1.68838,0.05 -3.92944,-0.09 0,-5.454 1.95224,-3.225"
+ class="c29053"
+ id="Cooper, MO" />
+ <path
+ d="m 588.41479,282.14314 3.71372,0 0.0713,4.072 -0.26386,0.01 -0.0963,0.216 -0.34409,3.351 -0.0981,3.382 -0.90748,1.591 0.1355,1.278 -3.18242,-2.105 -2.00039,-4.162 -1.09289,-1.093 2.0182,-6.525 2.04674,-0.02"
+ class="c29019"
+ id="Boone, MO" />
+ <path
+ d="m 587.44313,293.94614 3.18242,2.105 3.84921,1.517 -3.09328,5.588 -0.99662,0.337 -2.83476,-0.321 0.016,-1.945 -1.64024,0 1.51723,-7.281"
+ class="c29051"
+ id="Cole, MO" />
+ <path
+ d="m 585.44274,289.78414 2.00039,4.162 -1.51723,7.281 -2.33199,0.02 -4.00076,-3.712 -0.0232,-2.018 1.68838,-0.05 2.27316,-0.209 0.1355,-0.506 0.34766,-1.029 1.42807,-3.937"
+ class="c29135"
+ id="Moniteau, MO" />
+ <path
+ d="m 575.64053,295.42414 3.92944,0.09 0.0232,2.018 4.00076,3.712 -1.09112,4.876 -1.21413,0.628 -3.56039,0.112 -2.09666,-1.407 -0.007,-6.252 0.0161,-3.776"
+ class="c29141"
+ id="Morgan, MO" />
+ <path
+ d="m 585.9259,301.22714 1.64024,0 -0.016,1.945 2.83476,0.321 0.99662,-0.337 0.016,1.005 0.0874,3.028 0.29061,0 0.0642,3.359 -3.97045,0.04 -1.6135,0.03 -1.03763,-0.653 -0.33696,-0.33 -0.50455,-1.005 -0.0267,-0.667 -0.16938,-0.713 -0.6757,-0.958 -1.00198,-0.176 1.09112,-4.876 2.33199,-0.02"
+ class="c29131"
+ id="Miller, MO" />
+ <path
+ d="m 582.50279,306.11914 1.00198,0.176 0.6757,0.958 0.16938,0.713 0.0267,0.667 0.50455,1.005 0.33696,0.33 1.03763,0.653 1.6135,-0.03 0.0891,3.751 -1.05189,0.779 -1.24801,0.635 -0.1658,0.04 -0.28348,-0.111 -0.67393,-0.781 -0.28169,-0.538 -0.12837,-0.524 0.0339,-0.05 -0.025,-0.08 -4.24323,0.06 -3.9134,-0.03 0.0143,-3.71 -0.36014,-4.582 2.09666,1.407 3.56039,-0.112 1.21413,-0.628"
+ class="c29029"
+ id="Camden, MO" />
+ <path
+ d="m 591.83968,310.54814 2.956,0 0.2496,9.456 -3.9758,0.114 -0.0339,-1.014 -3.02732,-1.405 -0.0499,-3.368 -0.0891,-3.751 3.97045,-0.04"
+ class="c29169"
+ id="Pulaski, MO" />
+ <path
+ d="m 579.89089,313.77614 4.24323,-0.06 0.025,0.08 -0.0339,0.05 0.12837,0.524 0.28169,0.538 0.67393,0.781 0.28348,0.111 0.1658,-0.04 1.24801,-0.635 1.05189,-0.779 0.0499,3.368 3.02732,1.405 0.0339,1.014 0.0713,3.052 -7.87316,0.09 -3.02374,0.05 -0.0553,-5.497 -0.24247,0 -0.0553,-4.053"
+ class="c29105"
+ id="Laclede, MO" />
+ <path
+ d="m 583.26764,323.26714 7.87316,-0.09 0.18363,5.048 0.12124,0.843 0.0874,3.68 -7.92129,0.119 -0.0339,-4.548 -0.2389,0 -0.0713,-5.054"
+ class="c29229"
+ id="Wright, MO" />
+ <path
+ d="m 594.49081,332.70214 -0.17472,6.09 -11.93453,0.169 -2.644,0.01 -0.0802,-6.056 3.95441,-0.05 7.92129,-0.119 2.95778,-0.05"
+ class="c29067"
+ id="Douglas, MO" />
+ <path
+ d="m 582.38156,338.96114 11.93453,-0.169 0.12658,6.839 -0.54734,0.03 -6.94963,0.287 -4.45895,0.153 -0.10519,-7.144"
+ class="c29153"
+ id="Ozark, MO" />
+ <path
+ d="m 602.38179,332.53214 0.13015,3.712 0.0713,2.339 -0.0321,4.227 0.11054,2.452 -8.21903,0.369 -0.12658,-6.839 0.17472,-6.09 1.97007,-0.06 2.26425,0.02 3.65666,-0.129"
+ class="c29091"
+ id="Howell, MO" />
+ <path
+ d="m 595.04528,320.01314 3.98472,-0.09 0.98236,-0.04 0.17828,4.043 1.9576,-0.06 0.23355,8.663 -3.65666,0.129 -2.26425,-0.02 -1.97007,0.06 -2.95778,0.05 -0.0874,-3.68 -0.12124,-0.843 -0.18363,-5.048 -0.0713,-3.052 3.9758,-0.114"
+ class="c29215"
+ id="Texas, MO" />
+ <path
+ d="m 601.66864,306.93914 1.71869,-0.06 0.49564,8.415 -4.99739,0.168 0.14442,4.459 -3.98472,0.09 -0.2496,-9.456 1.45482,-0.683 0.76307,-0.355 2.16084,-0.128 2.56555,-0.07 -0.0713,-2.378"
+ class="c29161"
+ id="Phelps, MO" />
+ <path
+ d="m 601.26572,303.81914 0.40292,3.12 0.0713,2.378 -2.56555,0.07 -2.16084,0.128 -0.76307,0.355 -1.45482,0.683 -2.956,0 -0.0642,-3.359 -0.29061,0 -0.0874,-3.028 3.0701,-0.04 2.51385,-0.136 4.28424,-0.164"
+ class="c29125"
+ id="Maries, MO" />
+ <path
+ d="m 600.78256,294.22014 0.12123,-0.02 0.36193,9.615 -4.28424,0.164 -2.51385,0.136 -3.0701,0.04 -0.016,-1.005 3.09328,-5.588 0.7078,-0.527 1.42273,-1.35 0.12837,-0.235 0.13015,-0.145 0.15868,-0.103 2.31416,-0.988 0.57943,-0.07 0.86648,0.07"
+ class="c29151"
+ id="Osage, MO" />
+ <path
+ d="m 592.19982,286.22214 8.43833,-0.248 0.14441,8.246 -0.86648,-0.07 -0.57943,0.07 -2.31416,0.988 -0.15868,0.103 -0.13015,0.145 -0.12837,0.235 -1.42273,1.35 -0.7078,0.527 -3.84921,-1.517 -0.1355,-1.278 0.90748,-1.591 0.0981,-3.382 0.34409,-3.351 0.0963,-0.216 0.26386,-0.01"
+ class="c29027"
+ id="Callaway, MO" />
+ <path
+ d="m 598.5825,272.17714 0.27991,7.377 -10.46367,0.241 -0.0713,-5.969 0.0339,0 1.98434,-0.05 -0.0321,-1.368 5.94587,-0.144 2.32308,-0.09"
+ class="c29137"
+ id="Monroe, MO" />
+ <path
+ d="m 594.11462,265.60514 1.96829,-0.06 0.17651,6.718 -5.94587,0.144 0.0321,1.368 -1.98434,0.05 -0.11232,-8.046 5.86564,-0.175"
+ class="c29205"
+ id="Shelby, MO" />
+ <path
+ d="m 586.89044,257.70514 6.92823,-0.232 0.0303,1.013 0.26564,7.119 -5.86564,0.175 -1.07863,-1.928 -0.27991,-6.147"
+ class="c29103"
+ id="Knox, MO" />
+ <path
+ d="m 593.63147,250.41014 0.1872,7.063 -6.92823,0.232 -0.082,-1.013 -0.23177,-5.801 2.956,-0.193 4.09882,-0.288"
+ class="c29199"
+ id="Scotland, MO" />
+ <path
+ d="m 597.56804,250.39914 0.36193,0.226 1.37459,1.038 0.041,0.152 -0.0571,0.467 0.0642,0.16 1.75077,2.154 0.72563,0.586 1.13926,0.08 -1.28367,3.062 -7.83571,0.16 -0.0303,-1.013 -0.1872,-7.063 3.93657,-0.01"
+ class="c29045"
+ id="Clark, MO" />
+ <path
+ d="m 601.68469,258.32614 -0.10697,1.125 1.23018,5.858 -6.72499,0.239 -1.96829,0.06 -0.26564,-7.119 7.83571,-0.16"
+ class="c29111"
+ id="Lewis, MO" />
+ <path
+ d="m 602.8079,265.30914 1.75256,4.249 1.04298,1.656 -7.02094,0.963 -2.32308,0.09 -0.17651,-6.718 6.72499,-0.239"
+ class="c29127"
+ id="Marion, MO" />
+ <path
+ d="m 598.5825,272.17714 7.02094,-0.963 2.47819,1.886 -0.45107,0.02 -4.3502,3.639 0.53308,3.04 -2.332,0 -2.61903,0.09 0,-0.344 -0.27991,-7.377"
+ class="c29173"
+ id="Ralls, MO" />
+ <path
+ d="m 588.39874,279.79514 10.46367,-0.241 0,0.344 2.61903,-0.09 2.332,0 0.71493,4.049 -3.89022,2.121 -8.43833,0.248 -0.0713,-4.072 -3.71372,0 -0.0161,-2.348"
+ class="c29007"
+ id="Audrain, MO" />
+ <path
+ d="m 607.16345,283.79014 0.0963,3.406 0.15868,3.448 -2.67431,0.09 0.0963,3.143 -3.93658,0.323 -0.12123,0.02 -0.14441,-8.246 3.89022,-2.121 2.63508,-0.06"
+ class="c29139"
+ id="Montgomery, MO" />
+ <path
+ d="m 608.08163,273.10014 4.23431,4.397 4.31277,3.833 -5.02948,0.264 -3.17529,0.1 0.0642,2.05 -1.32467,0.05 -2.63508,0.06 -0.71493,-4.049 -0.53308,-3.04 4.3502,-3.639 0.45107,-0.02"
+ class="c29163"
+ id="Pike, MO" />
+ <path
+ d="m 616.62871,281.33014 0.82725,2.82 -0.0143,0.289 -0.48315,0.747 -0.0178,0.07 0.0446,0.161 0,0 0.95562,2.562 -5.11149,1.745 -1.87201,0.06 -1.33537,-1.31 -1.01267,-1.317 -1.34964,0.03 -0.0963,-3.406 1.32467,-0.05 -0.0642,-2.05 3.17529,-0.1 5.02948,-0.264"
+ class="c29113"
+ id="Lincoln, MO" />
+ <path
+ d="m 607.25972,287.19614 1.34964,-0.03 1.01267,1.317 1.33537,1.31 1.87201,-0.06 0.29596,7.488 -4.79771,-1.936 -0.11232,-0.217 -1.49404,-1.215 -0.19968,-0.02 -0.78803,0.248 -0.89322,-0.202 -0.0963,-3.143 2.67431,-0.09 -0.15868,-3.448"
+ class="c29219"
+ id="Warren, MO" />
+ <path
+ d="m 605.73359,294.08314 0.22464,4.393 0.25673,4.116 0.10519,2.821 -2.93282,1.469 -1.71869,0.06 -0.40292,-3.12 -0.36193,-9.615 3.93658,-0.323 0.89322,0.202"
+ class="c29073"
+ id="Gasconage, MO" />
+ <path
+ d="m 606.32015,305.41314 4.8708,-0.114 0.47959,10.745 -0.91282,1.034 -2.83833,0.08 -0.0571,-2.016 -3.97936,0.153 -0.49564,-8.415 2.93282,-1.469"
+ class="c29055"
+ id="Crawford, MO" />
+ <path
+ d="m 610.75772,317.07814 0.10162,2.534 -2.85259,0.03 0.0749,2.032 1.86131,-0.02 0.0874,2.002 -7.88206,0.207 -1.9576,0.06 -0.17828,-4.043 -0.98236,0.04 -0.14442,-4.459 4.99739,-0.168 3.97936,-0.153 0.0571,2.016 2.83833,-0.08"
+ class="c29065"
+ id="Dent, MO" />
+ <path
+ d="m 602.14824,323.86914 7.88206,-0.207 0.66145,-0.02 1.92015,5.463 1.32645,1.769 -1.6652,0.297 -1.95224,0.113 0.12837,4.683 -7.93734,0.273 -0.13015,-3.712 -0.23355,-8.663"
+ class="c29203"
+ id="Shannon, MO" />
+ <path
+ d="m 602.51194,336.24414 7.93734,-0.273 2.02534,1.295 0.19433,7.554 -5.14358,0.273 -0.78624,0.02 -4.07743,0.146 -0.11054,-2.452 0.0321,-4.227 -0.0713,-2.339"
+ class="c29149"
+ id="Oregon, MO" />
+ <path
+ d="m 612.47462,337.26614 1.31932,-0.04 2.8419,0.07 4.12378,-0.193 1.99324,7.153 -3.8189,0.207 -6.26501,0.355 -0.19433,-7.554"
+ class="c29181"
+ id="Ripley, MO" />
+ <path
+ d="m 613.93835,330.87814 4.38765,0.82 1.99146,2.763 0.44216,2.644 -4.12378,0.193 -2.8419,-0.07 -1.31932,0.04 -2.02534,-1.295 -0.12837,-4.683 1.95224,-0.113 1.6652,-0.297"
+ class="c29035"
+ id="Carter, MO" />
+ <path
+ d="m 610.85934,319.61214 3.51404,-0.548 3.4445,-0.167 0.1765,4.348 0.52238,3.341 0.3227,-0.04 0.0802,1.015 0.0232,1.405 -0.68997,1.157 0.0731,1.576 -4.38765,-0.82 -1.32645,-1.769 -1.92015,-5.463 -0.66145,0.02 -0.0874,-2.002 -1.86131,0.02 -0.0749,-2.032 2.85259,-0.03"
+ class="c29179"
+ id="Reynolds, MO" />
+ <path
+ d="m 619.87531,315.72214 2.10557,2.002 0.16937,7.552 -3.31079,1.269 -0.3227,0.04 -0.52238,-3.341 -0.1765,-4.348 -3.4445,0.167 -3.51404,0.548 -0.10162,-2.534 0.91282,-1.034 8.20477,-0.322"
+ class="c29093"
+ id="Iron, MO" />
+ <path
+ d="m 616.84622,304.99414 2.67608,2.813 0.35301,7.915 -8.20477,0.322 -0.47959,-10.745 5.65527,-0.305"
+ class="c29221"
+ id="Washington, MO" />
+ <path
+ d="m 613.12537,297.22414 4.01859,-2.344 0.15154,3.999 -0.44928,6.115 -5.65527,0.305 -4.8708,0.114 -0.10519,-2.821 -0.25673,-4.116 -0.22464,-4.393 0.78803,-0.248 0.19968,0.02 1.49404,1.215 0.11232,0.217 4.79771,1.936"
+ class="c29071"
+ id="Franklin, MO" />
+ <path
+ d="m 626.55394,291.96714 0.36727,1.85 -1.17847,3.052 -0.73989,-0.383 -0.22643,-1.225 -0.27991,-1.806 0.44215,-0.916 0.72385,-0.546 0.89143,-0.03"
+ class="c29510"
+ id="St. Louis, MO" />
+ <path
+ d="m 621.7081,286.99614 3.1646,0.77 0.45819,0.139 0.44929,0.216 0.33874,0.2 1.74365,1.053 0.0731,0.129 0.016,0.135 -0.0642,0.531 -0.0392,0.218 -0.16938,-0.337 -0.2906,-0.187 -0.30488,0.03 -0.43323,0.29 -0.30487,-0.114 -1.10182,-0.659 -0.1765,-0.184 -1.28545,0.112 -0.0303,0.275 -0.13906,0.312 -0.11232,0.178 -0.19969,0.168 -0.26564,0.02 -0.63649,-0.12 -0.19076,0 -0.13015,0.06 -0.11946,0.134 -0.41897,0.765 -0.90035,1.945 0.0161,0.264 -0.11767,0.225 -0.29061,0.162 -0.26743,0.03 -1.53327,-0.09 -0.12837,0.04 -0.23355,0.176 -0.52238,0.819 -0.41719,0.187 -4.01859,2.344 -0.29596,-7.488 5.11149,-1.745 3.7672,-0.995"
+ class="c29183"
+ id="St. Charles, MO" />
+ <path
+ d="m 627.84831,290.38714 -1.29437,1.58 -0.89143,0.03 -0.72385,0.546 -0.44215,0.916 0.27991,1.806 0.22643,1.225 0.73989,0.383 -0.0802,0.284 -1.2391,3.222 -0.13728,-0.523 -1.13212,-2.113 -3.31079,0.184 -2.34626,0.587 -0.20146,0.369 -0.15154,-3.999 0.41719,-0.187 0.52238,-0.819 0.23355,-0.176 0.12837,-0.04 1.53327,0.09 0.26743,-0.03 0.29061,-0.162 0.11767,-0.225 -0.0161,-0.264 0.90035,-1.945 0.41897,-0.765 0.11946,-0.134 0.13015,-0.06 0.19076,0 0.63649,0.12 0.26564,-0.02 0.19969,-0.168 0.11232,-0.178 0.13906,-0.312 0.0303,-0.275 1.28545,-0.112 0.1765,0.184 1.10182,0.659 0.30487,0.114 0.43323,-0.29 0.30488,-0.03 0.2906,0.187 0.16938,0.337"
+ class="c29189"
+ id="St. Louis Co., MO" />
+ <path
+ d="m 617.2955,298.87914 0.20146,-0.369 2.34626,-0.587 3.31079,-0.183 1.13212,2.112 0.13728,0.523 -0.0499,0.06 -0.0802,0.16 -0.26208,0.892 -0.0339,0.1 -0.016,0.233 0.0339,0.965 0.24068,1.034 0.2086,0.515 0.32983,0.451 0.0571,0.08 0.0464,0.05 1.51187,1.47 -2.8205,1.983 -4.06673,-0.562 -2.67608,-2.813 0.44928,-6.115"
+ class="c29099"
+ id="Jefferson, MO" />
+ <path
+ d="m 619.5223,307.80714 4.06673,0.562 1.75078,1.301 -2.30525,2.527 1.46908,1.419 3.48195,3.141 0.78624,-0.745 0.82547,0.612 -0.60796,0.72 -7.00846,0.38 -2.10557,-2.002 -0.35301,-7.915"
+ class="c29187"
+ id="St. Francois, MO" />
+ <path
+ d="m 627.32236,307.06914 5.08831,4.645 -2.81337,4.91 -0.82547,-0.612 -0.78624,0.745 -3.48195,-3.141 -1.46908,-1.419 2.30525,-2.527 -1.75078,-1.301 2.8205,-1.983 0.91283,0.683"
+ class="c29186"
+ id="Sainte Genevieve, MO" />
+ <path
+ d="m 628.98934,317.34414 0.0642,1.03 0.23177,1.286 0.19255,5.313 -1.30863,0.01 -6.01897,0.291 -0.16937,-7.552 7.00846,-0.38"
+ class="c29123"
+ id="Madison, MO" />
+ <path
+ d="m 622.15025,325.27614 6.01897,-0.291 0.22286,5.29 2.0503,-0.112 0.0481,1.037 -2.51563,2.915 -7.65743,0.346 -1.99146,-2.763 -0.0731,-1.576 0.68997,-1.157 -0.0232,-1.405 -0.0802,-1.015 3.31079,-1.269"
+ class="c29223"
+ id="Wayne, MO" />
+ <path
+ d="m 627.97489,334.11514 0.89322,2.356 0.63292,1.397 0.12301,0.05 0.16759,0.122 0.5937,1.139 0.22642,0.82 -0.0481,0.449 -0.16224,0.282 -1.13213,3.159 -6.51639,0.371 -1.99324,-7.153 -0.44216,-2.644 7.65743,-0.346"
+ class="c29023"
+ id="Butler, MO" />
+ <path
+ d="m 633.86371,340.55314 0.31557,5.559 0.60974,9.009 -6.07424,0.433 -1.4673,0.1 2.84011,-4.942 2.0093,-1.767 0.12836,-0.202 0.19433,-0.529 -0.11945,-1.826 -0.17828,-0.239 -1.63846,-2.314 -0.72385,0.02 -0.49029,0.03 1.13213,-3.159 3.46233,-0.175"
+ class="c29069"
+ id="Dunklin, MO" />
+ <path
+ d="m 634.81576,328.94914 1.83101,-0.113 0.35122,2.131 0.36906,0.495 0.29061,0.468 0.39401,0.957 0.28169,0.786 0.0642,1.239 -0.23178,0.02 0.42433,5.358 -4.72639,0.267 -3.46233,0.175 0.16224,-0.282 0.0481,-0.449 -0.22642,-0.82 -0.5937,-1.139 -0.16759,-0.122 -0.12301,-0.05 -0.63292,-1.397 -0.89322,-2.356 2.51563,-2.915 1.68659,-0.09 1.06259,-0.396 -0.1141,-1.686 1.69016,-0.08"
+ class="c29207"
+ id="Stoddard, MO" />
+ <path
+ d="m 634.20424,318.00414 0.61152,10.945 -1.69016,0.08 0.1141,1.686 -1.06259,0.396 -1.68659,0.09 -0.0481,-1.037 -2.0503,0.112 -0.22286,-5.29 1.30863,-0.01 -0.19255,-5.313 -0.23177,-1.286 5.15071,-0.37"
+ class="c29017"
+ id="Bollinger, MO" />
+ <path
+ d="m 632.41067,311.71414 4.85476,1.347 3.11645,5.16 0,0.137 -6.17764,-0.354 -5.15071,0.37 -0.0642,-1.03 0.60796,-0.72 2.81337,-4.91"
+ class="c29157"
+ id="Perry, MO" />
+ <path
+ d="m 634.20424,318.00414 6.17764,0.354 0.016,0.209 0.1141,0.46 0.007,0 0.51347,0.958 0.33696,0.504 0.47603,0.467 0.22464,0.282 0.28882,0.651 0.007,0.02 0.009,0.04 0.10341,0.387 0.009,0.02 -0.009,0.03 -0.0713,0.708 -0.0731,0.218 -0.0143,0.02 -0.0178,0.02 -0.016,0.02 -0.2086,0.107 -0.65788,0.176 0.0303,2.017 -4.80305,3.157 -1.83101,0.113 -0.61152,-10.945"
+ class="c29031"
+ id="Cape Girardeau, MO" />
+ <path
+ d="m 641.44982,325.67914 0.45998,0.658 1.11608,2.089 0.64183,1.575 1.21414,0.989 -3.36606,3.48 -3.11824,0.442 -0.0642,-1.239 -0.28169,-0.786 -0.39401,-0.957 -0.29061,-0.468 -0.36906,-0.495 -0.35122,-2.131 4.80305,-3.157"
+ class="c29201"
+ id="Scott, MO" />
+ <path
+ d="m 644.88185,330.99014 3.4962,0.376 0.65075,0.838 -0.68819,2.298 -0.0107,0 -0.50634,0.289 -0.009,0 0,0.53 0.009,0 1.05189,0.554 -0.70601,3.188 -2.76523,0.62 -3.88844,-5.238 3.36606,-3.48"
+ class="c29133"
+ id="Mississippi, MO" />
+ <path
+ d="m 663.79096,476.24014 1.23732,6.18 -1.49583,0.378 -3.15033,0.816 -3.86527,1.113 -1.23731,-0.852 -0.45819,-6.301 2.00038,-0.137 0.0909,-0.69 6.87831,-0.507"
+ class="c28047"
+ id="Harrison, MS" />
+ <path
+ d="m 663.68399,474.90514 9.29945,-0.72 1.0198,8.363 -0.016,0.337 -1.4156,0.909 -0.15868,0.06 -4.96707,-0.176 -0.37084,-0.08 -1.34072,-0.756 -0.70601,-0.417 -1.23732,-6.18 -0.10697,-1.335"
+ class="c28059"
+ id="Jackson, MS" />
+ <path
+ d="m 638.50274,403.58114 2.97204,-0.165 0.0481,0.681 4.96529,-0.328 0.30487,4.371 -5.3183,0.376 -6.49321,0.41 -0.21573,-1.019 -0.12123,-2.026 2.0503,-0.146 1.92015,-0.44 -0.0481,-0.667 -0.0642,-1.047"
+ class="c28043"
+ id="Grenada, MS" />
+ <path
+ d="m 645.97474,396.97814 0.51347,6.791 -4.96529,0.328 -0.0481,-0.681 -2.97204,0.165 -0.48851,-6.129 3.92766,-0.908 4.03285,0.434"
+ class="c28161"
+ id="Yalobusha, MS" />
+ <path
+ d="m 661.49819,403.98414 0.24069,3.004 4.16478,-0.312 0.11411,0.138 -0.31557,0.57 -2.73136,3.552 -0.1141,-1.357 -5.94409,0.472 -0.65075,0.09 -0.59547,-4.058 5.83176,-2.099"
+ class="c28025"
+ id="Clay, MS" />
+ <path
+ d="m 652.67834,406.31614 2.98809,-0.233 0.59547,4.058 -1.27118,0.764 -5.45558,2.079 -2.38548,0.178 -0.42789,-6.043 5.95657,-0.803"
+ class="c28155"
+ id="Webster, MS" />
+ <path
+ d="m 659.06279,398.05614 1.99325,-0.146 0.44215,6.074 -5.83176,2.099 -2.98809,0.233 -0.0909,-1.688 0.98949,-0.08 -0.4582,-6.033 5.94409,-0.457"
+ class="c28017"
+ id="Chickasaw, MS" />
+ <path
+ d="m 645.97474,396.97814 4.99026,-0.328 2.1537,1.863 0.4582,6.033 -0.98949,0.08 0.0909,1.688 -5.95657,0.803 -0.23356,-3.35 -0.51347,-6.791"
+ class="c28013"
+ id="Calhoun, MS" />
+ <path
+ d="m 658.55111,391.37014 0.51168,6.686 -5.94409,0.457 -2.1537,-1.863 -0.37084,-5.041 7.95695,-0.239"
+ class="c28115"
+ id="Pontotoc, MS" />
+ <path
+ d="m 659.95601,387.92114 3.72798,0.723 0.66145,8.671 -3.2894,0.595 -1.99325,0.146 -0.51168,-6.686 1.4049,-3.449"
+ class="c28081"
+ id="Lee, MS" />
+ <path
+ d="m 653.19893,386.35514 6.62158,-0.46 0.1355,2.026 -1.4049,3.449 -7.95695,0.239 -0.19255,-2.674 -0.12658,-2.018 2.9239,-0.562"
+ class="c28145"
+ id="Union, MS" />
+ <path
+ d="m 641.38564,388.19314 0.98949,-0.06 1.94689,-0.162 1.65986,-0.08 2.44431,0.564 1.97542,0.481 0.19255,2.674 0.37084,5.041 -4.99026,0.328 -4.03285,-0.434 -0.55625,-8.351"
+ class="c28071"
+ id="Lafayette, MS" />
+ <path
+ d="m 632.13967,384.84314 1.83101,-0.303 3.51047,-1.15 3.5283,-0.226 0.15155,2 1.01267,0.163 0.20146,2.804 -0.98949,0.06 -8.96606,0.573 -0.27991,-3.923"
+ class="c28137"
+ id="Tate, MS" />
+ <path
+ d="m 632.41958,388.76614 8.96606,-0.573 0.55625,8.351 -3.92766,0.908 -3.851,0.337 -0.13728,-2.443 -1.19809,-1.308 -0.35301,-4.269 -0.0553,-1.003"
+ class="c28107"
+ id="Panola, MS" />
+ <path
+ d="m 632.47485,389.76914 0.35301,4.269 1.19809,1.308 0.13728,2.443 0.12124,2.009 -1.02159,0.06 -4.94211,0.296 -0.24961,-4.37 0.98237,-0.04 -0.23534,-3.746 1.84348,-0.128 -0.17115,-1.961 1.98433,-0.144"
+ class="c28119"
+ id="Quitman, MS" />
+ <path
+ d="m 634.16323,397.78914 3.851,-0.337 0.48851,6.129 0.0642,1.047 0.0481,0.667 -1.92015,0.44 -2.0503,0.146 0.12123,2.026 -0.7488,-1.494 -0.24782,-0.475 -5.10971,0.255 -0.21929,-4.025 -0.11945,-2.01 4.94211,-0.296 1.02159,-0.06 -0.12124,-2.009"
+ class="c28135"
+ id="Tallahatchie, MS" />
+ <path
+ d="m 628.65951,406.19314 5.10971,-0.255 0.24782,0.475 0.7488,1.494 0.21573,1.019 0.50099,0.314 0.0463,0.241 0.27991,4.436 -0.63292,1.019 -0.6971,0.03 0.11945,1.928 -2.95956,0.884 -2.35339,-0.474 -0.62579,-11.115"
+ class="c28083"
+ id="Leflore, MS" />
+ <path
+ d="m 628.44022,402.16814 0.21929,4.025 0.62579,11.115 -1.96294,0.121 0.0909,1.35 -3.07724,0.183 -1.23196,-5.93 -0.11054,-2 1.99325,-0.111 -0.45107,-8.566 3.90449,-0.187"
+ class="c28133"
+ id="Sunflower, MS" />
+ <path
+ d="m 629.2853,417.30814 2.35339,0.474 0.25851,3.865 -0.61865,1.141 -0.11232,0.08 -0.21751,-0.04 -0.51347,-0.319 -0.24069,-0.322 -0.082,0.02 -0.0464,0.08 -0.0677,0.383 0.0891,0.763 0.0428,0.121 0.93066,0.772 0.36192,0.23 -1.63133,0.13 0.10519,1.979 -3.97045,0.248 -1.09111,-3.952 -0.49921,-3.996 3.07724,-0.183 -0.0909,-1.35 1.96294,-0.121"
+ class="c28053"
+ id="Humphreys, MS" />
+ <path
+ d="m 631.63869,417.78214 2.95956,-0.884 8.29035,2.225 -3.64776,7.982 -7.81788,-2.552 -0.36192,-0.23 -0.93066,-0.772 -0.0428,-0.121 -0.0891,-0.763 0.0677,-0.383 0.0464,-0.08 0.082,-0.02 0.24069,0.322 0.51347,0.319 0.21751,0.04 0.11232,-0.08 0.61865,-1.141 -0.25851,-3.865"
+ class="c28051"
+ id="Holmes, MS" />
+ <path
+ d="m 634.98157,408.92614 6.49321,-0.41 0.42611,6.003 1.35141,0.241 1.31576,-0.103 0.20146,2.699 -1.88092,1.767 -8.29035,-2.225 -0.11945,-1.928 0.6971,-0.03 0.63292,-1.019 -0.27991,-4.436 -0.0463,-0.241 -0.50099,-0.314"
+ class="c28015"
+ id="Carroll, MS" />
+ <path
+ d="m 646.79308,408.14014 0.35658,5.022 2.38548,-0.178 -1.10895,4.113 -3.65667,0.259 -0.20146,-2.699 -1.31576,0.103 -1.35141,-0.241 -0.42611,-6.003 5.3183,-0.376"
+ class="c28097"
+ id="Montgomery, MS" />
+ <path
+ d="m 654.99072,410.90514 0.41184,5.695 -0.3958,0.03 -1.84527,2.175 0.1355,2.027 -1.98612,0.152 -2.88468,-3.891 1.10895,-4.113 5.45558,-2.079"
+ class="c28019"
+ id="Choctaw, MS" />
+ <path
+ d="m 656.2619,410.14114 0.65075,-0.09 5.94409,-0.472 0.1141,1.357 0.43681,5.038 -2.75275,0.223 -5.25234,0.403 -0.41184,-5.695 1.27118,-0.765"
+ class="c28105"
+ id="Oktibbeha, MS" />
+ <path
+ d="m 665.7022,407.38414 4.8601,-2.589 -0.10162,4.894 -0.10519,5.704 -6.94784,0.581 -0.43681,-5.038 2.73136,-3.552"
+ class="c28087"
+ id="Lowndes, MS" />
+ <path
+ d="m 670.76555,396.85814 -0.0178,0.658 -0.18542,7.279 -4.8601,2.589 0.31557,-0.57 -0.11411,-0.138 -4.16478,0.312 -0.24069,-3.004 -0.44215,-6.074 3.2894,-0.595 6.42011,-0.457"
+ class="c28095"
+ id="Monroe, MS" />
+ <path
+ d="m 670.9581,388.10814 -0.19255,8.75 -6.42011,0.457 -0.66145,-8.671 4.01146,-0.281 3.26265,-0.255"
+ class="c28057"
+ id="Itawamba, MS" />
+ <path
+ d="m 666.45814,381.68614 1.23731,6.677 -4.01146,0.281 -3.72798,-0.723 -0.1355,-2.026 0.0392,-3.719 6.5984,-0.49"
+ class="c28117"
+ id="Prentiss, MS" />
+ <path
+ d="m 666.05521,376.15214 3.05227,-0.251 2.10735,2.225 -0.19255,7.226 -0.0642,2.756 -3.26265,0.255 -1.23731,-6.677 -0.40293,-5.534"
+ class="c28141"
+ id="Tishomingo, MS" />
+ <path
+ d="m 665.74142,376.17314 0.31379,-0.02 0.40293,5.534 -6.5984,0.49 -2.37657,-5.343 0.68284,-0.06 7.57541,-0.603"
+ class="c28003"
+ id="Alcorn, MS" />
+ <path
+ d="m 653.85681,377.11514 3.62636,-0.282 2.37657,5.343 -0.0392,3.719 -6.62158,0.46 -0.36192,-5.006 0.98771,-0.07 0.25852,-1.031 -0.22643,-3.132"
+ class="c28139"
+ id="Tippah, MS" />
+ <path
+ d="m 650.48362,377.36214 3.37319,-0.247 0.22643,3.132 -0.25852,1.031 -0.98771,0.07 0.36192,5.006 -2.9239,0.562 -0.9895,0.07 -0.44928,-6.035 -0.74702,-1.1 -0.49029,-2.289 2.88468,-0.204"
+ class="c28009"
+ id="Benton, MS" />
+ <path
+ d="m 642.15049,377.91914 5.44845,-0.353 0.49029,2.289 0.74702,1.1 0.44928,6.035 0.9895,-0.07 0.12658,2.018 -1.97542,-0.481 -2.44431,-0.564 -1.65986,0.08 -1.94689,0.162 -0.20146,-2.804 -1.01267,-0.163 -0.15155,-2 -0.35301,-5.135 1.49405,-0.11"
+ class="c28093"
+ id="Marshall, MS" />
+ <path
+ d="m 640.65644,378.02914 0.35301,5.135 -3.5283,0.226 -3.51047,1.15 -1.83101,0.303 -1.93976,-3.043 -0.47246,-3.102 10.92899,-0.669"
+ class="c28033"
+ id="DeSoto, MS" />
+ <path
+ d="m 630.19991,381.80014 1.93976,3.043 0.27991,3.923 0.0553,1.003 -1.98433,0.145 0.17115,1.961 -1.84348,0.128 -3.35002,-2.153 -0.25673,-2.676 2.89182,-4.606 2.09665,-0.768"
+ class="c28143"
+ id="Tunica, MS" />
+ <path
+ d="m 625.46817,389.85014 3.35002,2.153 0.23534,3.746 -0.98237,0.04 0.24961,4.37 0.11945,2.01 -3.90449,0.187 -0.21572,-3.031 -3.02197,0.119 -2.13053,0.129 -0.0642,-0.225 0.27278,-0.569 0.85399,-1.759 1.8007,-3.231 0.98593,-0.193 0.98949,-0.203 0.81834,-0.392 0.65075,-0.571 0.041,-0.03 0.0178,-0.04 0.1355,-0.442 -0.20147,-2.064"
+ class="c28027"
+ id="Coahoma, MS" />
+ <path
+ d="m 619.16751,399.57214 2.13053,-0.129 3.02197,-0.119 0.21572,3.031 0.45107,8.566 -1.99325,0.111 0.11054,2 -8.61305,0.459 -0.26386,-0.73 1.4049,-0.565 0.33696,-0.289 0.0499,-0.247 0,-0.02 -0.53842,-0.435 -0.56874,-0.426 -0.1141,-0.203 -0.025,-0.05 0.10519,-0.523 1.52613,-6.573 3.71372,-1.87 0.11232,-0.772 -0.20146,-0.5 -0.85221,-0.682 -0.009,-0.03"
+ class="c28011"
+ id="Bolivar, MS" />
+ <path
+ d="m 614.49104,413.49114 8.61305,-0.459 1.23196,5.93 0.49921,3.996 -3.96511,2.258 -4.66577,0.159 0.56161,-0.635 0.016,-0.02 0.60261,-2.501 0,-0.02 -0.0553,-1.747 -0.4992,-0.529 -0.65075,-1.181 -0.96453,-2.758 0.98949,-0.289 0.23178,-0.458 -0.15155,-0.536 -0.79516,-0.537 -0.97345,-0.663 -0.025,-0.01"
+ class="c28151"
+ id="Washington, MS" />
+ <path
+ d="m 624.83526,422.95814 1.09111,3.952 -1.87201,2.113 0.0321,0.499 0.36192,0.09 0.52238,0.416 0.5206,0.522 0.60261,1.817 -0.0232,0.297 -0.18541,0.193 -0.89857,0.121 -4.66042,0.241 -0.19255,-4.044 0.11232,-0.337 0.0963,-0.01 0.1355,-0.103 0.0891,-0.148 0.32804,-1.79 -0.025,-1.566 3.96511,-2.258"
+ class="c28125"
+ id="Sharkey, MS" />
+ <path
+ d="m 620.87015,425.21614 0.025,1.566 -0.32804,1.79 -0.0891,0.148 -0.1355,0.103 -0.0963,0.01 -0.11232,0.336 0.19255,4.044 4.66042,-0.241 0.11054,0.995 -0.86469,1.07 -1.64203,3.148 -1.94333,0.605 -0.20146,-3.568 -2.55485,0.104 -0.61153,-0.191 -0.0481,-0.04 -0.18364,-0.16 -0.041,-0.03 -0.0214,-0.04 -0.0606,-0.07 -0.0214,-0.04 -0.11411,-0.274 -1.54218,-6.989 -0.0321,-0.186 0.20146,-0.731 0.63292,-1.021 0.15511,-0.177 4.66577,-0.158"
+ class="c28055"
+ id="Issaquena, MS" />
+ <path
+ d="m 631.42296,424.55314 7.81788,2.552 -1.22126,3.132 -0.19255,0.305 -1.10003,0.788 -5.64992,3.207 -0.71493,0.168 -1.91123,1.647 -3.35358,-2.38 -0.11054,-0.995 0.89857,-0.121 0.18541,-0.192 0.0232,-0.298 -0.60261,-1.817 -0.5206,-0.522 -0.52238,-0.416 -0.36192,-0.09 -0.0321,-0.499 1.87201,-2.113 3.97045,-0.248 -0.10519,-1.979 1.63133,-0.13"
+ class="c28163"
+ id="Yazoo, MS" />
+ <path
+ d="m 648.42619,417.09714 2.88468,3.891 0.25674,4.082 -4.60337,0.346 -3.27157,0.232 0.0713,1.045 -4.52315,0.412 3.64776,-7.982 1.88092,-1.767 3.65667,-0.259"
+ class="c28007"
+ id="Attala, MS" />
+ <path
+ d="m 655.40256,416.60014 5.25234,-0.403 0.63648,8.296 -1.95224,0.135 -7.77153,0.442 -0.25674,-4.082 1.98612,-0.152 -0.1355,-2.027 1.84527,-2.175 0.3958,-0.03"
+ class="c28159"
+ id="Winston, MS" />
+ <path
+ d="m 663.40765,415.97414 6.94784,-0.581 -0.1355,6.896 -0.0267,1.439 -8.90187,0.765 -0.63648,-8.296 2.75275,-0.223"
+ class="c28103"
+ id="Noxubee, MS" />
+ <path
+ d="m 661.29138,424.49314 8.90187,-0.765 -0.1355,8.131 -10.11779,0.812 -0.60082,-8.043 1.95224,-0.135"
+ class="c28069"
+ id="Kemper, MS" />
+ <path
+ d="m 651.56761,425.07014 7.77153,-0.442 0.60082,8.043 -7.76083,0.57 -0.61152,-8.171"
+ class="c28099"
+ id="Neshoba, MS" />
+ <path
+ d="m 651.56761,425.07014 0.61152,8.171 -0.0981,0.01 -7.84997,0.52 -0.0963,-1.317 -0.37083,-5.762 -0.0713,-1.045 3.27157,-0.232 4.60337,-0.346"
+ class="c28079"
+ id="Leake, MS" />
+ <path
+ d="m 639.24084,427.10514 4.52315,-0.412 0.37083,5.762 -0.96453,1.166 -0.42611,0.02 -1.00375,0.119 -2.70105,2.484 -1.05189,1.171 -0.0713,0.171 -0.009,0.296 0.11232,0.394 -2.45145,0.138 -0.99484,-0.1 -0.11232,-1.847 -0.70958,0.04 -3.268,0.185 -0.12124,-1.984 0.71493,-0.168 5.64992,-3.207 1.10003,-0.788 0.19255,-0.305 1.22126,-3.133"
+ class="c28089"
+ id="Madison, MS" />
+ <path
+ d="m 643.17029,433.62114 1.5921,8.324 0.27278,4.017 -9.70772,0.556 -0.49743,-1.423 0.69889,-3.255 1.17313,-1.696 1.31754,-1.872 -0.11232,-0.394 0.009,-0.296 0.0713,-0.171 1.05189,-1.171 2.70105,-2.484 1.00375,-0.119 0.42611,-0.02"
+ class="c28121"
+ id="Rankin, MS" />
+ <path
+ d="m 628.45092,436.35214 1.91123,-1.647 0.12124,1.984 3.268,-0.185 0.70958,-0.04 0.11232,1.847 0.99484,0.1 2.45145,-0.137 -1.31754,1.872 -1.17313,1.695 -0.69889,3.256 0.49743,1.422 -9.46526,0.585 -0.42254,-4.056 3.01127,-6.695"
+ class="c28049"
+ id="Hinds, MS" />
+ <path
+ d="m 617.89098,435.33114 2.55485,-0.104 0.20146,3.568 1.94333,-0.605 1.64203,-3.148 0.86469,-1.07 3.35358,2.38 -3.01127,6.695 -0.4689,0.562 -0.95561,1.132 -2.01821,1.783 -0.5313,-0.07 -1.68659,-0.524 -1.96116,-2.291 2.24107,-0.278 -0.1355,-3.318 -2.14479,-2.282 -0.016,-0.04 -0.082,-0.128 -0.0553,-0.08 0,-0.03 -0.0339,-0.369 0.4368,-1.471 -0.13728,-0.313"
+ class="c28149"
+ id="Warren, MS" />
+ <path
+ d="m 615.78541,451.75614 4.57128,-0.06 3.37675,0.635 0.0481,0.271 0.007,0.258 0.15333,0.401 1.9041,-0.112 0.10341,2.016 0.0981,2.01 -8.12276,0.46 -4.36446,-2.942 2.22502,-2.942"
+ class="c28063"
+ id="Jefferson, MS" />
+ <path
+ d="m 625.43965,443.04714 0.42254,4.056 -0.0161,6.051 -1.9041,0.112 -0.15333,-0.401 -0.007,-0.258 -0.0481,-0.271 -3.37675,-0.635 -4.57128,0.06 3.99363,-5.828 1.68659,0.524 0.5313,0.07 2.01821,-1.783 0.95561,-1.132 0.4689,-0.562"
+ class="c28021"
+ id="Claiborne, MS" />
+ <path
+ d="m 635.32745,446.51814 2.51562,6.702 -2.33912,0.956 -9.5544,0.994 -0.10341,-2.016 0.0161,-6.051 9.46526,-0.585"
+ class="c28029"
+ id="Copiah, MS" />
+ <path
+ d="m 645.03517,445.96214 1.90411,6.028 -1.97721,0.273 -4.25036,0.57 -2.86864,0.387 -2.51562,-6.702 9.70772,-0.556"
+ class="c28127"
+ id="Simpson, MS" />
+ <path
+ d="m 644.76239,441.94514 7.89099,-0.569 0.79516,9.672 -1.64024,0.234 -4.86902,0.708 -1.90411,-6.028 -0.27278,-4.017"
+ class="c28129"
+ id="Smith, MS" />
+ <path
+ d="m 644.13482,432.45514 0.0963,1.317 7.84997,-0.52 0.57231,8.124 -7.89099,0.569 -1.5921,-8.324 0.96453,-1.166"
+ class="c28123"
+ id="Scott, MS" />
+ <path
+ d="m 652.17913,433.24114 7.76083,-0.57 0.61866,8.11 -7.90524,0.595 -0.57231,-8.124 0.0981,-0.01"
+ class="c28101"
+ id="Newton, MS" />
+ <path
+ d="m 659.93996,432.67114 10.11779,-0.812 -0.13728,6.246 -0.0464,1.879 -9.3155,0.797 -0.61866,-8.11"
+ class="c28075"
+ id="Lauderdale, MS" />
+ <path
+ d="m 669.87412,439.98414 -0.13015,7.707 -8.43654,2.218 -0.74881,-9.128 9.3155,-0.797"
+ class="c28023"
+ id="Clarke, MS" />
+ <path
+ d="m 660.55862,440.78114 0.74881,9.128 -0.63649,0.09 -7.2224,1.044 -0.79516,-9.672 7.90524,-0.595"
+ class="c28061"
+ id="Jasper, MS" />
+ <path
+ d="m 660.67094,450.00414 0.66145,8.982 -3.95263,0.276 -4.94568,0.353 -0.62578,-8.333 1.64024,-0.234 7.2224,-1.044"
+ class="c28067"
+ id="Jones, MS" />
+ <path
+ d="m 651.8083,451.28214 0.62578,8.333 -1.02871,0.07 -2.64222,0.188 -0.11945,-1.833 -0.35479,-0.563 -0.69889,-0.411 -0.70601,-0.09 -0.52417,-0.256 -1.15708,-0.667 -0.24069,-3.792 1.97721,-0.273 4.86902,-0.708"
+ class="c28031"
+ id="Covington, MS" />
+ <path
+ d="m 640.71171,452.83314 4.25036,-0.57 0.24069,3.792 1.15708,0.667 0.52417,0.256 0.70601,0.09 0.69889,0.41 0.35479,0.563 0.11945,1.833 -1.31754,0.09 -3.32505,0.212 0.0874,1.011 -2.65291,0.161 -0.19255,-3.027 -0.46533,-2.406 -0.18542,-3.077"
+ class="c28065"
+ id="Jefferson Davis, MS" />
+ <path
+ d="m 637.84307,453.22014 2.86864,-0.387 0.18542,3.077 0.46533,2.405 0.19255,3.028 -1.51187,1.351 -4.00076,-0.08 -0.53843,-8.438 2.33912,-0.956"
+ class="c28077"
+ id="Lawrence, MS" />
+ <path
+ d="m 635.50395,454.17614 0.53843,8.438 -0.32805,0.02 -5.62674,0.348 -1.67055,0.103 -0.33696,-6.027 -2.03247,0.121 -0.0981,-2.01 9.5544,-0.994"
+ class="c28085"
+ id="Lincoln, MS" />
+ <path
+ d="m 617.92485,457.64014 8.12276,-0.46 2.03247,-0.121 0.33696,6.027 -6.84622,0.387 -2.15905,0.747 -1.26406,-0.524 -0.22286,-6.056"
+ class="c28037"
+ id="Franklin, MS" />
+ <path
+ d="m 613.56039,454.69814 4.36446,2.942 0.22286,6.056 -0.0963,-0.09 -1.38173,-0.463 -0.80229,0.144 -0.63648,0.225 -2.63509,1.085 -2.50671,2.331 -0.18542,0.408 -0.28882,1.198 0.47424,-2.476 0.73098,-5.993 0.007,-0.02 0.0731,-0.155 0.0481,-0.09 2.09666,-4.211 0.0143,-0.02 0.30844,-0.528 0.19255,-0.346"
+ class="c28001"
+ id="Adams, MS" />
+ <path
+ d="m 618.14771,463.69614 1.26406,0.524 1.06615,7.369 -2.28385,0.112 -9.0552,0.426 0.47603,-3.592 0.28882,-1.198 0.18542,-0.408 2.50671,-2.331 2.63509,-1.085 0.63648,-0.225 0.80229,-0.145 1.38173,0.464 0.0963,0.09"
+ class="c28157"
+ id="Wilkinson, MS" />
+ <path
+ d="m 630.08759,462.98314 0.46711,8.037 -0.37618,0.01 -5.09545,0.297 -4.60515,0.259 -1.06615,-7.369 2.15905,-0.747 6.84622,-0.387 1.67055,-0.103"
+ class="c28005"
+ id="Amite, MS" />
+ <path
+ d="m 630.08759,462.98314 5.62674,-0.348 0.50633,8.029 -1.7276,0.105 -3.93836,0.251 -0.46711,-8.037"
+ class="c28113"
+ id="Pike, MS" />
+ <path
+ d="m 636.04238,462.61414 4.00076,0.08 0.14619,2.345 0.33875,1.326 0.76307,0.941 1.43699,0.908 1.43877,0.232 0.37797,1.665 -8.32422,0.553 -0.50633,-8.029 0.32805,-0.02"
+ class="c28147"
+ id="Walthall, MS" />
+ <path
+ d="m 647.44561,459.95914 0.6668,9.901 -1.45483,0.107 -2.1127,0.144 -0.37797,-1.665 -1.43877,-0.232 -1.43699,-0.908 -0.76307,-0.941 -0.33875,-1.326 -0.14619,-2.345 1.51187,-1.351 2.65291,-0.161 -0.0874,-1.011 3.32505,-0.212"
+ class="c28091"
+ id="Marion, MS" />
+ <path
+ d="m 651.40537,459.68614 0.15511,2.01 2.01642,-0.145 0.51525,7.715 -5.97974,0.594 -0.6668,-9.901 1.31754,-0.09 2.64222,-0.188"
+ class="c28073"
+ id="Lamar, MS" />
+ <path
+ d="m 657.37976,459.26214 0.5206,7.087 0.3441,2.853 0.16224,2.08 -3.99363,0.278 -0.32092,-2.294 -0.51525,-7.715 -2.01642,0.145 -0.15511,-2.01 1.02871,-0.07 4.94568,-0.353"
+ class="c28035"
+ id="Forrest, MS" />
+ <path
+ d="m 669.74397,447.69114 0.46533,4.507 0.76485,5.994 -7.64852,0.644 -1.99324,0.15 -0.66145,-8.982 0.63649,-0.09 8.43654,-2.218"
+ class="c28153"
+ id="Wayne, MS" />
+ <path
+ d="m 663.32563,458.83614 7.64852,-0.644 0.93065,7.342 0.34053,2.655 -8.02113,0.628 -0.89857,-9.981"
+ class="c28041"
+ id="Greene, MS" />
+ <path
+ d="m 661.33239,458.98614 1.99324,-0.15 0.89857,9.981 -0.85221,2.071 -4.96529,0.394 -0.16224,-2.08 -0.3441,-2.853 -0.5206,-7.087 3.95263,-0.276"
+ class="c28111"
+ id="Perry, MS" />
+ <path
+ d="m 663.37199,470.88814 0.312,4.017 0.10697,1.335 -6.87831,0.507 -0.0909,0.69 -2.00038,0.137 -0.40828,-6.014 3.99363,-0.278 4.96529,-0.394"
+ class="c28131"
+ id="Stone, MS" />
+ <path
+ d="m 654.09215,469.26614 0.32092,2.294 0.40828,6.014 -2.73136,0.185 -1.21414,0.764 0.15155,2.339 -1.94333,1.453 -0.86826,0.06 -3.30187,-4.548 0.21929,-1.642 0.2389,-1.213 0.29774,-1.469 0.25852,-1.075 0.0463,-0.05 0.16046,-0.02 0.12302,-0.02 0.1979,-0.442 0.24247,-1.214 -0.041,-0.713 1.45483,-0.107 5.97974,-0.594"
+ class="c28109"
+ id="Pearl River, MS" />
+ <path
+ d="m 648.21581,482.37214 0.86826,-0.06 1.94333,-1.453 -0.15155,-2.34 1.21414,-0.763 2.73136,-0.185 0.45819,6.301 -3.33396,4.653 -0.91818,0.06 -0.0374,0 -0.0481,-0.03 -0.0713,-0.05 -0.0499,-0.03 -0.1462,-0.169 -0.43145,-0.505 -0.19255,-0.371 -0.62936,-1.194 -0.016,-0.123 0.0499,-0.193 0.18363,-0.465 -0.0303,-0.426 -1.23018,-2.5 -0.12836,-0.13 -0.0339,-0.03"
+ class="c28045"
+ id="Hancock, MS" />
+ <path
+ d="m 664.2242,468.81714 8.02113,-0.628 0.73811,5.996 -9.29945,0.72 -0.312,-4.017 0.85221,-2.071"
+ class="c28039"
+ id="George, MS" />
+ <path
+ d="m 400.09559,53.675143 -0.69176,8.292 -0.45819,5.545 -8.95179,-0.779 0.18541,-1.977 -1.81674,-2.154 -3.31079,-0.312 0.18542,-1.961 -1.00376,-0.105 0.27278,-5.923 0.19434,-2 15.39508,1.374"
+ class="c30091"
+ id="Sheridan, MT" />
+ <path
+ d="m 385.05173,62.290143 3.31079,0.312 1.81674,2.154 -0.18541,1.977 8.95179,0.779 -0.71493,8.936 -2.94887,-1.022 -3.03801,-1.767 -6.50748,-1.638 -0.90926,0.369 -0.41006,0.546 -0.49742,0.378 -0.32983,0.167 -1.88806,0 -1.14995,-0.224 -0.87539,-0.635 -1.31754,-0.257 -1.14995,-0.05 -2.81159,-0.04 -0.76307,0.03 -0.83616,0.458 -2.41044,0.738 0.4992,-4.731 0.60083,0.06 0.80407,-7.795 12.76,1.262"
+ class="c30085"
+ id="Roosevelt, MT" />
+ <path
+ d="m 283.339,103.93614 4.39478,0.708 -0.2817,1.125 -0.53842,3.214 -0.11946,1.19 -0.25851,1.656 -0.33518,2.016 -0.7809,4.427 -1.14995,0.756 -1.06794,0.41 -0.27278,1.969 -0.32092,1.984 -1.92906,-0.305 -0.77198,3.945 -0.2817,1.719 -0.312,2.266 -1.39777,7.595 -0.59548,4.388 -1.30862,-1.214 -0.18542,-0.548 -0.71493,-2.064 -1.31933,-2.587 -0.77198,-0.763 0.60439,-3.632 1.69551,-9.957 0.46533,-0.642 0.95562,-5.907 -2.94887,-0.49 -1.09111,-1.519 -0.62757,-1.118 -0.74703,-0.802 -0.58656,-0.433 -0.62757,-0.371 2.44253,-0.417 3.43203,-2.179 0.93957,-0.859 0.21573,-1.519 0.56338,-0.924 1.06972,-1.366 0.70602,-0.256 2.31417,0.247 1.54396,0.257"
+ class="c30031"
+ id="Gallatin, MT" />
+ <path
+ d="m 263.82014,111.04114 0.0892,0.03 0.31378,-0.02 0.5206,-0.387 0.46711,-0.866 0.0874,-0.442 0.18542,-0.17 0.39401,-0.135 1.03585,-0.07 1.37459,0.346 1.77574,1.246 0.0731,0.119 -0.025,0.25 0.62757,0.371 0.58656,0.433 0.74703,0.802 0.62757,1.118 1.09111,1.519 2.94887,0.49 -0.95562,5.907 -0.46533,0.642 -1.69551,9.957 -0.60439,3.632 -1.83101,0.69 -4.84584,-0.795 0.27456,-1.639 -1.94511,-0.321 -2.61903,-0.515 -1.46374,-1.253 -0.0392,-2.017 0.33696,-1.986 -2.29812,-0.401 -1.62241,-2.339 1.02872,-5.921 0.0624,-1.022 -0.4582,-1.221 -0.48851,-0.144 -0.43502,0.1 -0.26386,0.144 -0.29774,-0.04 -0.47425,-0.346 -0.80407,-1.037 -0.0392,-0.12 0.007,-1.164 0.64183,-2.027 1.55288,-0.594 0.7702,-0.337 0.39402,-0.289 0.19255,-0.185 1.1339,-0.619 4.33059,0.619"
+ class="c30057"
+ id="Madison, MT" />
+ <path
+ d="m 273.31036,93.556143 2.37835,0.09 0.59369,-3.522 0.62044,-0.754 0.0874,-0.05 0.26565,-0.05 1.32645,0.667 3.92945,7.971 0.72206,4.677997 0.10519,1.348 -1.54396,-0.256 -2.31417,-0.248 -0.70602,0.256 -1.06972,1.366 -0.56338,0.924 -0.21573,1.519 -0.93957,0.859 -3.43203,2.179 0.80408,-4.894 -1.96116,-0.337 1.91302,-11.747997"
+ class="c30007"
+ id="Broadwater, MT" />
+ <path
+ d="m 264.53507,95.500143 0.6044,0.233 0.59369,-0.137 1.03763,-0.514 0.0392,-0.06 -0.0481,-0.369 2.76345,-1.743 3.78503,0.643 -1.91302,11.747997 1.96116,0.337 -0.80408,4.894 -2.44253,0.417 0.025,-0.25 -0.0731,-0.119 -1.77574,-1.247 -1.37459,-0.345 -1.03585,0.07 -0.39401,0.135 -0.18542,0.169 -0.0874,0.443 -0.46711,0.866 -0.5206,0.387 -0.31378,0.02 -0.0892,-0.03 -2.72422,-2.257 -0.45642,-1.047 0.15155,-4.796 0.007,-0.442 -0.83439,-2.064 -0.5723,-0.193 0.63649,-1.914997 0.009,-0.577 0.0624,-0.346 0.58657,-0.489 2.46749,-0.772 1.38172,-0.643"
+ class="c30043"
+ id="Jefferson, MT" />
+ <path
+ d="m 259.39149,100.24214 0.5723,0.193 0.83439,2.064 -0.007,0.442 -0.15155,4.796 0.45642,1.047 2.72422,2.257 -4.33059,-0.619 -1.1339,0.619 -0.19255,0.185 -0.39402,0.289 -0.7702,0.337 -1.55288,0.594 -0.67392,-2.257 -0.54734,-1.086 -0.56161,-0.546 -2.56377,-1.333 -1.0198,-1.23 1.03585,-0.104 0.7078,-0.346 0.93244,-0.586 0.18542,-0.177 1.59032,-2.362 1.52614,-1.769 1.95224,-0.02 1.38172,-0.392"
+ class="c30093"
+ id="Silver Bow, MT" />
+ <path
+ d="m 260.02798,98.327143 -0.63649,1.914997 -1.38172,0.392 -1.95224,0.02 -1.52614,1.769 -1.59032,2.362 -0.18542,0.177 -0.93244,0.586 -0.7078,0.346 -1.03585,0.104 0.0161,-0.266 -0.15154,-0.239 -0.11233,-0.05 -1.11786,-0.275 -0.60261,0.131 -2.25889,1.083 -0.27278,0.33 -1.15708,-0.666 -0.10519,-1.215 -0.40115,-1.72 -0.0802,-0.143 -0.0642,0 -0.1765,0.02 -0.0161,-0.03 1.36568,-0.707 1.36568,-0.352 1.75969,-2.684997 0.36192,-1.961 3.89736,0.699 0.1765,-0.979 7.52193,1.364"
+ class="c30023"
+ id="Deer Lodge, MT" />
+ <path
+ d="m 243.59527,102.98114 0.1765,-0.02 0.0642,0 0.0802,0.143 0.40115,1.72 0.10519,1.215 1.15708,0.666 0.27278,-0.329 2.25889,-1.084 0.60261,-0.131 1.11786,0.275 0.11233,0.05 0.15154,0.239 -0.0161,0.266 1.0198,1.23 2.56377,1.333 0.56161,0.546 0.54734,1.086 0.67392,2.257 -0.64183,2.027 -0.007,1.164 0.0392,0.12 0.80407,1.037 0.47425,0.346 0.29774,0.04 0.26386,-0.144 0.43502,-0.1 0.48851,0.144 0.4582,1.221 -0.0624,1.022 -1.02872,5.921 1.62241,2.339 2.29812,0.401 -0.33696,1.986 0.0392,2.017 1.46374,1.253 2.61903,0.515 1.94511,0.321 -0.27456,1.639 4.84584,0.795 -2.77949,3.191 -2.08952,-0.06 -3.23948,-0.923 -4.475,-0.459 -2.44253,0.917 -5.74619,-1.43 -1.08399,0.257 -0.6347,0.674 -0.23356,0.362 -0.19255,0.859 -0.009,0.06 -0.16046,0.25 -0.32983,0.183 -0.41719,-0.151 -1.30863,-1.464 -0.44393,-0.642 -0.19077,-1.086 0.0232,-2.868 0.0642,-0.05 0.0963,-0.177 0,-0.176 -0.46712,-2.001 -0.35122,-1.102 -0.30666,-0.474 -0.68283,-0.763 -0.57052,-0.449 -0.54734,0.135 -2.66718,-3.712 -2.51563,-9.353 -0.0232,-1.8 0.041,-1.366 0.2086,-0.378 0.0143,-0.683 -0.18364,-1.824 -0.0891,-0.288 -1.55823,-2.202 -0.32983,-0.346 0.32983,0.02 0.5313,-0.09 5.08653,-2.25 1.00375,-0.53 0.57052,-0.403 0.50634,-0.948"
+ class="c30001"
+ id="Beaverhead, MT" />
+ <path
+ d="m 241.77139,85.778143 -0.8843,2.899 0.24068,3.713 0.0553,2.266 -0.81834,2.09 0.0963,3.068 1.166,2.178997 0.97166,0.804 0.98058,0.151 0.0161,0.03 -0.50634,0.948 -0.57052,0.403 -1.00375,0.53 -5.08653,2.249 -0.5313,0.09 -0.32983,-0.02 -1.41381,0.811 -1.98434,1.736 -3.15033,1.446 -0.65966,-0.103 0,0 -0.14441,-0.562 -1.18026,-1.865 -0.20147,-0.09 -0.6347,-0.16 -0.7078,-0.1 -0.0481,-0.06 0.0161,-0.08 0.28169,-1.558 0.56161,-3.077 4.48391,-11.185997 1.40669,-3.125 0.93957,-2.163 0.55626,-1.574 0.0963,-0.507 -0.0571,-0.265 -0.0874,-0.09 8.13167,1.174"
+ class="c30081"
+ id="Ravalli, MT" />
+ <path
+ d="m 250.67504,83.455143 1.96829,2.715 0.4582,0.492 0.89856,-0.226 0.24247,-0.113 0.16046,0.05 -1.01267,5.779 -0.8843,4.813 -0.1765,0.979 -3.89736,-0.699 -0.36192,1.961 -1.75969,2.684997 -1.36568,0.352 -1.36568,0.707 -0.98058,-0.151 -0.97166,-0.804 -1.166,-2.178997 -0.0963,-3.068 0.81834,-2.09 -0.0553,-2.266 -0.24068,-3.713 0.8843,-2.899 0.52238,0.16 1.96829,0.369 3.30901,-1.51 0.21929,-1.189 1.11607,-0.474 1.76861,0.321"
+ class="c30039"
+ id="Granite, MT" />
+ <path
+ d="m 260.18844,59.131143 0.21751,4.363 -0.15333,1.679 0.0642,0.218 0.52238,1.182 0.50634,0.795 0.5616,0.314 0.12124,0.02 1.81496,-0.241 1.76861,-0.369 0.0802,0.02 1.75256,1.446 0.12836,0.474 -0.0802,0.112 -0.016,0.514 0.0232,0.05 1.73651,1.237 1.03585,0.385 1.61706,0.225 0.99484,-0.05 -1.20522,7.295 1.45482,1.432 0.5937,0.506 0.33875,0.04 0.0553,-0.08 1.28545,0.209 -0.82012,4.855 2.05922,0.353 1.93619,3.824 -1.32645,-0.667 -0.26565,0.05 -0.0874,0.05 -0.62044,0.754 -0.59369,3.521 -2.37835,-0.09 -3.78503,-0.643 -2.76345,1.743 0.0481,0.369 -0.0392,0.06 -1.03763,0.514 -0.59369,0.137 -0.6044,-0.233 0.2086,-0.651 0.66679,-3.263 -0.19968,-1.437 -1.14817,-1.214 -1.95402,-0.314 0.54021,-3.061 -2.07526,-0.353 -0.17651,0.02 -1.81674,-0.33 1.32645,-7.48 0.0481,-0.305 -3.92053,-0.699 -0.13728,-0.08 1.24622,-6.911 -0.28169,0 -0.43324,-1.784 -0.15332,-0.924 0.18541,-2.853 0.0392,-0.176 2.20184,-3.215 0.82725,-0.875 0.65967,-0.467"
+ class="c30049"
+ id="Lewis and Clark, MT" />
+ <path
+ d="m 251.33292,65.720143 4.94212,0.997 0.15332,0.924 0.43324,1.784 0.28169,0 -1.24622,6.911 0.13728,0.08 3.92053,0.699 -0.0481,0.305 -1.32645,7.48 1.81674,0.33 0.17651,-0.02 2.07526,0.353 -0.54021,3.061 1.95402,0.314 1.14817,1.214 0.19968,1.437 -0.66679,3.263 -0.2086,0.651 -1.38172,0.643 -2.46749,0.772 -0.58657,0.489 -0.0624,0.346 -0.009,0.577 -7.52193,-1.364 0.8843,-4.813 1.01267,-5.779 -0.16046,-0.05 -0.24247,0.113 -0.89856,0.226 -0.4582,-0.492 -1.96829,-2.715 1.43699,-7.818 -2.53167,-0.451 1.75256,-9.466"
+ class="c30077"
+ id="Powell, MT" />
+ <path
+ d="m 248.75489,65.246143 -4.83871,-0.932 0.51347,7.682 0.0321,0.137 -0.37797,1.953 -1.91837,0.65 -3.93122,-0.756 0.20146,-0.98 0.50633,-3.953 -1.31754,-0.257 -0.37796,-0.169 -0.12837,-0.144 -0.33696,-0.628 0.39401,-1.1 0.36192,-0.57 0.0802,-0.02 0.12837,0.07 0.37618,-0.555 0.0571,-2.307 -0.0874,-0.128 -0.33875,-0.152 -0.96453,-0.185 -2.61904,-0.515 0.31379,-3.302 0.19968,-0.972 1.94511,0.385 0.37797,-1.913 -0.0232,-0.683 0.18364,-1.301 6.92645,1.333 0.0891,-0.616 -0.0321,-0.17 -0.0731,-0.1 -0.11054,-0.02 -0.025,-0.537 0.29596,-0.274 0.40293,-0.257 2.16797,0.433 2.62795,4.122 0.0321,0.122 0.25851,3.961 -0.016,0.563 -0.0731,0.353 -0.88252,1.728"
+ class="c30047"
+ id="Lake, MT" />
+ <path
+ d="m 248.75489,65.246143 2.57803,0.474 -1.75256,9.466 2.53167,0.451 -1.43699,7.818 -1.76861,-0.321 -1.11607,0.474 -0.21929,1.189 -3.30901,1.51 -1.96829,-0.369 -0.52238,-0.16 -8.13167,-1.173 -0.0731,-0.07 -0.28169,-0.233 -0.82725,-0.112 -0.41006,0.08 -0.24961,0.1 -0.36192,0.1 -1.71155,-0.36 -0.0321,-0.03 -0.86826,-2.177 0.12123,-0.627 2.16262,-2.04 1.67947,-3.312 -0.72385,-1.494 -2.79554,-4.597 0.11945,-0.634 1.73652,0.208 0.87539,0.378 1.12499,0.626 1.83101,1.358 0.50812,0.516 0.28882,0.795 0.81121,0.82 0.23355,0.16 0.32983,0.122 1.10717,-0.195 3.93122,0.756 1.91837,-0.65 0.37797,-1.953 -0.0321,-0.137 -0.51347,-7.682 4.83871,0.932"
+ class="c30063"
+ id="Missoula, MT" />
+ <path
+ d="m 216.15333,60.393143 0.55447,0.965 0.35301,0.408 0.75594,0.258 0.62757,0.209 2.08774,0.362 0.5313,-0.137 0.12836,0.02 1.71869,0.314 0.48316,0.24 3.08436,2.17 0.67571,0.587 0.0642,0.515 -0.27991,1.373 1.75969,1.383 0.68997,0.136 -0.11945,0.634 2.79554,4.597 0.72385,1.494 -1.67947,3.312 -2.16262,2.04 -0.12123,0.627 -0.68997,0 -0.10341,-0.03 -0.22464,-0.06 -2.31595,-3.093 -0.0713,-0.195 0,-0.01 -0.30666,-2.323 -0.40114,-0.74 -0.73989,-1.382 -1.30863,-3.054 -1.39777,-3.148 -0.26565,-0.194 -1.22126,-0.489 -0.8433,-0.41 -0.26565,-0.234 -0.33696,-0.288 -2.46036,-3.4 -0.0161,-0.569 0,-0.02 0.29774,-1.849"
+ class="c30061"
+ id="Mineral, MT" />
+ <path
+ d="m 214.61828,44.073143 1.61528,1.084 0.89144,-0.266 1.77573,-0.779 1.25514,2.564 0.87539,4.685 0.83617,1.157 0.16046,0.129 2.79554,1.133 1.56714,-0.354 0.75415,-0.876 0.16225,-1.23 2.18579,0.451 0.26387,0.392 -0.5937,2.91 1.96116,0.394 1.31754,0.225 2.61904,0.499 -0.37797,1.92 -0.19968,0.972 -0.31379,3.302 2.61904,0.515 0.96453,0.185 0.33875,0.152 0.0874,0.128 -0.0571,2.307 -0.37618,0.555 -0.12837,-0.07 -0.0802,0.02 -0.36192,0.57 -0.39401,1.1 0.33696,0.628 0.12837,0.144 0.37796,0.17 1.31754,0.256 -0.50633,3.953 -0.20146,0.98 -1.10717,0.195 -0.32983,-0.121 -0.23355,-0.161 -0.81121,-0.82 -0.28882,-0.795 -0.50812,-0.515 -1.83101,-1.359 -1.12499,-0.626 -0.87539,-0.378 -1.73652,-0.208 -0.68997,-0.136 -1.75969,-1.383 0.27991,-1.373 -0.0642,-0.515 -0.67571,-0.587 -3.08436,-2.17 -0.48316,-0.24 -1.71869,-0.314 -0.12836,-0.02 -0.5313,0.137 -2.08774,-0.362 -0.62757,-0.209 -0.75594,-0.258 -0.35301,-0.408 -0.55447,-0.965 0.44215,-1.005 0.52238,-1.325 0.007,-1.287 0,-0.09 -0.007,-0.03 -0.025,-0.06 -0.0232,-0.08 -3.09328,-6.301 -0.47425,-0.843 1.11608,-5.311"
+ class="c30089"
+ id="Sanders, MT" />
+ <path
+ d="m 215.99287,37.685143 2.37122,-11.097 11.96484,2.546 6.63584,1.327 1.22127,0.24 -0.0232,3.167 0.66679,2.66 0,0.06 -0.81833,1.993 -3.77077,-0.749 -0.0553,1.304 0.25673,0.715 -1.52614,7.753 -2.26602,-0.458 -0.35301,-0.06 -0.40293,1.936 -0.40115,2.749 -2.18579,-0.451 -0.16225,1.23 -0.75415,0.876 -1.56714,0.354 -2.79554,-1.133 -0.16046,-0.129 -0.83617,-1.157 -0.87539,-4.685 -1.25514,-2.564 -1.77573,0.779 -0.89144,0.266 -1.61528,-1.084 1.37459,-6.388"
+ class="c30053"
+ id="Lincoln, MT" />
+ <path
+ d="m 248.09523,32.670143 0.27991,3.929 0.63648,0.449 3.27692,2.348 2.98096,5.087 -0.0802,0.36 -0.10341,0.242 -0.37797,1.309 0.9895,2.885 0.37618,0.845 1.33537,2.385 -0.14441,0.949 0.0392,0.128 1.40669,0.965 0.0963,0.06 0.11232,0.04 1.34963,0.417 0.15333,-0.03 -0.23355,4.09 -0.65967,0.467 -0.82725,0.875 -2.20184,3.215 -0.0392,0.176 -0.18541,2.853 -4.94212,-0.997 -2.57803,-0.474 0.88252,-1.727 0.0731,-0.353 0.016,-0.564 -0.25851,-3.961 -0.0321,-0.122 -2.62795,-4.122 -2.16797,-0.433 -0.40293,0.257 -0.29596,0.274 0.025,0.537 0.11054,0.02 0.0731,0.1 0.0321,0.17 -0.0891,0.616 -6.92645,-1.333 -0.18364,1.301 0.0232,0.683 -0.37797,1.913 -1.94511,-0.385 0.37797,-1.92 -2.61904,-0.499 -1.31754,-0.225 -1.96116,-0.394 0.5937,-2.91 -0.26387,-0.392 0.40115,-2.749 0.40293,-1.936 0.35301,0.06 2.26602,0.458 1.52614,-7.753 -0.25673,-0.715 0.0553,-1.304 3.77077,0.749 0.81833,-1.993 0,-0.06 -0.66679,-2.66 0.0232,-3.167 9.90919,1.969"
+ class="c30029"
+ id="Flathead, MT" />
+ <path
+ d="m 274.48349,49.537143 -0.41719,-0.169 -0.57052,-0.145 -4.95816,-0.859 -0.68463,3.824 -0.0642,0.06 -11.71524,-2.12 -0.37618,-0.845 -0.9895,-2.885 0.37797,-1.309 0.10341,-0.242 0.0802,-0.36 -2.98096,-5.087 -3.27692,-2.348 -0.63648,-0.449 -0.27991,-3.929 1.478,0.288 4.17013,0.829 8.68614,1.591 1.60815,0.281 12.31785,2.186 -1.87201,11.692"
+ class="c30035"
+ id="Glacier, MT" />
+ <path
+ d="m 290.29754,40.184143 7.97835,1.261 -0.41006,1.872 -1.20522,7.811 -0.5937,3.221 -0.71493,4.566 -1.0929,-0.169 -0.30487,1.943 -8.92861,-1.405 0.3227,-1.961 2.05565,0.33 1.25335,-7.802 1.3425,-7.788 0.29774,-1.879"
+ class="c30051"
+ id="Liberty, MT" />
+ <path
+ d="m 274.48349,49.537143 1.87201,-11.692 5.12753,0.876 1.39064,0.24 3.83139,0.635 3.59248,0.588 -0.29774,1.879 -1.3425,7.788 -1.25335,7.802 -2.05565,-0.33 -3.9455,-0.651 0.49743,-2.924 -1.87202,-0.973 -1.43877,-0.587 -1.478,-0.281 -2.50672,-2.106 -0.12123,-0.264"
+ class="c30101"
+ id="Toole, MT" />
+ <path
+ d="m 256.07357,50.124143 11.71524,2.12 0.0642,-0.06 0.68463,-3.824 4.95816,0.859 0.57052,0.145 0.41719,0.169 0.12123,0.264 2.50672,2.106 1.478,0.281 1.43877,0.587 1.87202,0.973 -0.49743,2.924 3.9455,0.651 -0.3227,1.961 -0.52238,3.263 -8.8466,-1.416 0.16045,-0.923 -2.57089,-2.869 -12.82419,-2.298 -0.15333,0.03 -1.34963,-0.417 -0.11232,-0.04 -0.0963,-0.06 -1.40669,-0.965 -0.0392,-0.128 0.14441,-0.949 -1.33537,-2.385"
+ class="c30073"
+ id="Pondera, MT" />
+ <path
+ d="m 260.42199,55.041143 12.82419,2.298 2.57089,2.869 -0.16045,0.923 8.8466,1.416 -1.07686,6.509 -3.97758,-0.652 -0.32092,1.954 -3.95262,-0.669 -0.7078,2.323 -1.58319,-0.506 -0.99484,0.05 -1.61706,-0.225 -1.03585,-0.385 -1.73651,-1.237 -0.0232,-0.05 0.016,-0.514 0.0802,-0.112 -0.12836,-0.474 -1.75256,-1.446 -0.0802,-0.02 -1.76861,0.369 -1.81496,0.241 -0.12124,-0.02 -0.5616,-0.314 -0.50634,-0.795 -0.52238,-1.182 -0.0642,-0.218 0.15333,-1.679 -0.21751,-4.363 0.23355,-4.09"
+ class="c30099"
+ id="Teton, MT" />
+ <path
+ d="m 272.88425,71.506143 1.58319,0.506 0.7078,-2.323 3.95262,0.669 0.32092,-1.954 3.97758,0.652 6.67863,1.059 -0.52951,0.667 -0.32983,0.33 -0.53843,0.811 -0.0963,0.275 0.0713,0.183 3.72798,3.946 1.90411,0.98 -0.19255,1.295 -1.98434,-0.314 -0.51346,1.116 -0.20147,1.303 -0.29774,3.52 1.97721,0.313 -0.4582,3.905 -0.30487,1.961 -0.30665,0.266 -1.50118,-1.617 -2.0093,-2.562 -0.16045,-0.138 -2.16084,-1.727 -7.37752,-0.17 -0.32983,1.961 -1.84705,-0.304 -2.05922,-0.353 0.82012,-4.855 -1.28545,-0.209 -0.0553,0.08 -0.33875,-0.04 -0.5937,-0.506 -1.45482,-1.432 1.20522,-7.295"
+ class="c30013"
+ id="Cascade, MT" />
+ <path
+ d="m 276.64611,86.115143 1.84705,0.304 0.32983,-1.961 7.37752,0.17 2.16084,1.727 0.16045,0.138 2.0093,2.562 1.50118,1.617 -0.0232,0.513 0.0642,0.257 0.12837,0.273 0.16046,0.217 2.33912,2.452 1.42986,0.02 1.45483,-0.266 -0.65967,4.34 -0.65788,3.486997 -0.4992,3.264 -0.11945,0.819 -7.91594,-1.407 -4.39478,-0.708 -0.10519,-1.348 -0.72206,-4.677997 -3.92945,-7.971 -1.93619,-3.824"
+ class="c30059"
+ id="Meagher, MT" />
+ <path
+ d="m 287.73378,104.64414 7.91594,1.407 -0.34588,1.125 -1.19809,7.914 1.14104,0.169 -0.57765,4.154 -0.79516,5.169 -0.25852,0.569 -0.59369,4.002 2.64399,0.417 4.25037,0.731 -0.55448,3.762 -3.66379,-0.57 -1.35142,-0.211 -1.81496,-0.09 -5.34326,-0.724 -0.041,0 -2.41935,-0.378 -0.70602,-0.242 -2.00038,-0.409 -2.70818,-0.419 0.312,-2.266 0.2817,-1.718 0.77198,-3.946 1.92906,0.305 0.32092,-1.984 0.27278,-1.969 1.06794,-0.41 1.14995,-0.756 0.7809,-4.427 0.33518,-2.016 0.25851,-1.656 0.11946,-1.189 0.53842,-3.215 0.2817,-1.125"
+ class="c30067"
+ id="Park, MT" />
+ <path
+ d="m 298.27589,41.445143 19.00539,2.797 -0.58656,2.947 -0.37797,2.027 -0.6668,4.732 -1.0929,6.147 -0.74702,3.536 -0.98949,-0.09 -1.98434,-0.28 0.29774,-2.002 -1.54218,-2.177 -11.94166,-1.808 -0.30487,1.952 -1.99325,-0.312 0.71493,-4.566 0.5937,-3.221 1.20522,-7.811 0.41006,-1.872"
+ class="c30041"
+ id="Hill, MT" />
+ <path
+ d="m 295.35198,58.915143 1.99325,0.312 0.30487,-1.952 11.94166,1.808 1.54218,2.177 -0.29774,2.002 1.98434,0.28 0.98949,0.09 -1.34963,8.936 -0.62757,-0.289 -1.54397,0.08 -1.76682,0.337 -0.90035,0.754 0.009,0.524 -0.53842,2.241 -0.0481,0.105 -0.41719,0.314 -4.90289,1.79 -0.78803,-0.11 -6.62158,-1.006 -1.90411,-0.98 -3.72798,-3.946 -0.0713,-0.184 0.0963,-0.274 0.53843,-0.811 0.32983,-0.33 0.52951,-0.667 -6.67863,-1.059 1.07686,-6.509 0.52238,-3.263 8.92861,1.405 0.30487,-1.943 1.0929,0.169"
+ class="c30015"
+ id="Chouteau, MT" />
+ <path
+ d="m 294.31435,77.307143 6.62158,1.006 -0.19968,1.299 1.14816,1.439 1.77574,1.673 1.94511,0.618 1.65451,1.245 -0.93066,6.557 -0.51525,4.614 -1.15708,-0.162 -0.68997,-0.49 -0.9895,-0.779 -0.14441,-0.186 -0.32983,-0.233 -1.33359,-0.127 -0.79516,0 -2.7884,0.353 -1.45483,0.266 -1.42986,-0.02 -2.33912,-2.451 -0.16046,-0.218 -0.12837,-0.272 -0.0642,-0.257 0.0232,-0.514 0.30665,-0.265 0.30487,-1.961 0.4582,-3.905 -1.97721,-0.314 0.29774,-3.519 0.20147,-1.303 0.51346,-1.116 1.98434,0.313 0.19255,-1.294"
+ class="c30045"
+ id="Judith Basin, MT" />
+ <path
+ d="m 305.81386,95.758143 5.60178,0.802 -0.42611,3.03 -1.31754,7.704997 -3.97758,-0.57 -9.92524,-1.493 0.4992,-3.264 0.65788,-3.486997 0.65967,-4.34 2.7884,-0.353 0.79516,0 1.33359,0.127 0.32983,0.233 0.14441,0.186 0.9895,0.779 0.68997,0.49 1.15708,0.162"
+ class="c30107"
+ id="Wheatland, MT" />
+ <path
+ d="m 295.76917,105.23214 9.92524,1.493 -0.2817,1.977 0.49029,2.089 2.97205,0.442 -0.27278,1.245 -0.90748,0.563 -1.47087,1.84 -0.52238,1.961 -0.53843,3.962 -1.96829,-0.282 -2.12161,0.692 -2.1127,0.699 -0.58657,3.954 -2.09843,-0.314 -0.60975,4.017 -2.64399,-0.417 0.59369,-4.002 0.25852,-0.569 0.79516,-5.169 0.57765,-4.154 -1.14104,-0.169 1.19809,-7.914 0.34588,-1.125 0.11945,-0.819"
+ class="c30097"
+ id="Sweet Grass, MT" />
+ <path
+ d="m 316.66262,122.37114 0.77912,-0.451 0.27278,-0.05 -0.0874,0.586 -0.16938,0.321 -0.12836,0.202 -0.0642,0.01 0.44216,1.553 0.81833,1.478 0.85221,0.112 -0.69175,0.626 -0.53843,1.872 -0.40114,2.999 9.20852,1.148 -0.1355,0.298 -2.47462,4.492 -6.00292,-0.813 -4.99026,-0.659 -2.13053,-0.289 -0.32804,-0.05 -2.98988,-0.547 -8.54173,-1.157 0.55448,-3.762 1.7276,0.259 0.68284,-2.083 1.51187,-1.471 1.26762,-1.164 0.75594,-0.563 2.12161,-0.715 2.63508,0.378 1.19809,-1.196 0.10341,-0.756 0.54734,-0.555 2.05743,-0.483 0.16759,0.05 0.48316,0.339 0.36905,0.08 0.31379,0.04 0.80407,-0.09"
+ class="c30009"
+ id="Carbon, MT" />
+ <path
+ d="m 316.98354,110.33314 -0.28169,1.881 -0.22465,2.049 -0.59369,6.341 0.24069,0.699 0.53842,1.068 -0.80407,0.09 -0.31379,-0.04 -0.36905,-0.08 -0.48316,-0.339 -0.16759,-0.05 -2.05743,0.483 -0.54734,0.555 -0.10341,0.756 -1.19809,1.196 -2.63508,-0.378 -2.12161,0.715 -0.75594,0.563 -1.26762,1.165 -1.51187,1.47 -0.68284,2.083 -1.7276,-0.259 -4.25037,-0.731 0.60975,-4.016 2.09843,0.313 0.58657,-3.954 2.1127,-0.699 2.12161,-0.692 1.96829,0.282 0.53843,-3.962 0.52238,-1.961 1.47087,-1.84 0.90748,-0.563 0.27278,-1.244 0.31557,-1.985 7.79292,1.084"
+ class="c30095"
+ id="Stillwater, MT" />
+ <path
+ d="m 317.56297,96.102143 -0.39401,2.926 0.18363,1.028997 1.03763,2.202 1.33359,5.1 -0.44928,3.281 -2.29099,-0.307 -7.79292,-1.084 -0.31557,1.984 -2.97205,-0.442 -0.49029,-2.089 0.2817,-1.977 3.97758,0.57 1.31754,-7.704997 0.42611,-3.03 0.18542,-1.301 5.96191,0.843"
+ class="c30037"
+ id="Golden Valley, MT" />
+ <path
+ d="m 312.4604,72.567143 1.69551,0.675 1.83279,-0.604 0.41541,-0.28 4.6622,-0.06 0.25674,0.05 0.57051,0.369 0.57052,1.358 0.69889,0.45 0.34587,0.322 0.44929,0.642 0.0232,0.154 -0.0553,0.119 0.36192,0.653 1.2284,0.722 4.8387,1.865 0.16759,0.02 0.24961,-0.07 0.20859,-0.265 -0.57052,4.009 -0.26386,2.074 -0.35479,0.119 -3.93658,-0.49 -2.14479,0.547 -0.5313,1.913 -0.26564,1.953 2.00038,0.273 -0.82726,5.922 -0.57765,1.936 -5.94587,-0.836 -5.96191,-0.843 -0.18542,1.301 -5.60178,-0.802 0.51525,-4.614 0.93066,-6.557 -1.65451,-1.245 -1.94511,-0.618 -1.77574,-1.673 -1.14816,-1.439 0.19968,-1.299 0.78803,0.11 4.90289,-1.79 0.41719,-0.313 0.0481,-0.106 0.53842,-2.241 -0.009,-0.524 0.90035,-0.754 1.76682,-0.337 1.54397,-0.08 0.62757,0.289"
+ class="c30027"
+ id="Fergus, MT" />
+ <path
+ d="m 313.81003,63.631143 0.74702,-3.536 1.0929,-6.147 0.6668,-4.732 0.37797,-2.027 0.58656,-2.947 1.59923,0.225 4.90824,0.708 0.90927,0.135 0.0874,0 6.85513,0.924 0.8433,0.112 3.81713,0.497 -0.0802,0.635 -0.2086,1.294 -0.81299,3.825 -2.4247,6.637 -0.13015,-0.08 -0.55269,-0.128 -0.13015,0.33 -0.97166,4.692 -0.72385,5.488 -3.61566,0.788 -0.2086,-0.08 -3.35179,-0.434 -0.19968,1.172 -0.42611,3.079 -0.57052,-1.359 -0.57051,-0.369 -0.25674,-0.05 -4.6622,0.06 -0.41541,0.28 -1.83279,0.604 -1.69551,-0.675 1.34963,-8.936"
+ class="c30005"
+ id="Blaine, MT" />
+ <path
+ d="m 322.46408,74.070143 0.42611,-3.079 0.19968,-1.172 3.35179,0.433 0.2086,0.08 3.61566,-0.788 0.72385,-5.488 0.97166,-4.693 0.13015,-0.329 0.55269,0.128 0.13015,0.08 2.4247,-6.637 0.81299,-3.825 0.2086,-1.294 0.0802,-0.635 16.07079,1.985 -0.63471,1.913 -0.82725,6.942 -1.64024,6.695 -1.67055,-0.211 -0.8112,2.22 -1.06973,7.536 -0.49742,4.051 -0.17828,0.731 -0.30487,0.626 -0.0785,0.1 -0.10519,0.05 -0.77198,-0.121 -1.33359,-0.715 -0.18542,-0.06 -0.6347,-0.08 -0.94849,0.444 -0.68283,1.013 -0.56161,0.617 -1.8007,1.874 -0.66679,0.08 -0.0963,-0.03 0.10519,-0.845 -0.11232,-1.478 -0.0802,-0.417 -0.59548,-0.475 -0.13728,-0.07 -1.94332,-0.305 -0.50634,0.06 -0.65966,-0.02 -1.50296,-0.121 -0.35301,-0.07 -0.10519,-0.08 -0.20859,0.265 -0.24961,0.07 -0.16759,-0.02 -4.8387,-1.864 -1.2284,-0.722 -0.36192,-0.653 0.0553,-0.119 -0.0232,-0.154 -0.44929,-0.642 -0.34587,-0.322 -0.69889,-0.45"
+ class="c30071"
+ id="Phillips, MT" />
+ <path
+ d="m 330.98085,78.682143 0.10519,0.08 0.35301,0.07 1.50296,0.122 0.65966,0.02 0.50634,-0.06 1.94332,0.305 0.13728,0.07 0.59548,0.475 0.0802,0.417 0.11232,1.478 -0.10519,0.845 -1.13212,2.081 -0.34588,2.307 -0.65074,8.445 0.007,0.136 0.0571,0.07 0.5313,0.538 0.0874,0.05 0.7381,2.298 -6.94249,-0.836 -1.75078,-0.128 -3.96154,-0.523 0.57765,-1.936 0.82726,-5.922 -2.00038,-0.273 0.26564,-1.953 0.5313,-1.913 2.14479,-0.547 3.93658,0.49 0.35479,-0.119 0.26386,-2.074 0.57052,-4.009"
+ class="c30069"
+ id="Petroleum, MT" />
+ <path
+ d="m 317.56297,96.102143 5.94587,0.836 3.96154,0.523 1.75078,0.128 6.94249,0.836 -0.007,6.002997 -0.29774,2.289 -2.31416,-0.29 -1.48513,1.166 -0.36192,0.619 -0.13729,1.005 -4.61228,-0.603 -1.41382,0.457 -0.31378,2.355 -5.94587,-0.786 0.44928,-3.281 -1.33359,-5.1 -1.03763,-2.202 -0.18363,-1.028997 0.39401,-2.926"
+ class="c30065"
+ id="Musselshell, MT" />
+ <path
+ d="m 336.15652,104.42814 0.6347,0.409 0.29774,0.37 1.33359,2.837 1.50296,4.202 -0.40115,1.993 -0.36192,1.02 -2.58873,-0.321 -2.12874,1.068 -0.75594,0.58 -0.11232,0.643 -0.70602,0.53 -2.65291,-0.282 -0.67392,2.587 -0.78803,6.051 -4.122,0.804 -2.05743,-0.273 -3.19847,-0.506 -0.85221,-0.112 -0.81833,-1.478 -0.44216,-1.553 0.0642,-0.01 0.12836,-0.202 0.16938,-0.321 0.0874,-0.586 -0.27278,0.05 -0.77912,0.451 -0.53842,-1.068 -0.24069,-0.699 0.59369,-6.341 0.22465,-2.049 0.28169,-1.881 2.29099,0.307 5.94587,0.786 0.31378,-2.355 1.41382,-0.457 4.61228,0.603 0.13729,-1.005 0.36192,-0.619 1.48513,-1.166 2.31416,0.29 0.29774,-2.289"
+ class="c30111"
+ id="Yellowstone, MT" />
+ <path
+ d="m 347.82362,120.28914 -0.10519,0.877 0.0321,3.416 1.03763,0.289 1.54218,0.183 0.3227,0.122 -0.82725,7.336 -0.56339,1.253 -0.50634,2.603 3.95263,0.548 2.00216,0.176 1.92907,0.154 -0.20147,4.282 -10.10887,-1.182 -3.10219,-0.378 -0.85935,-0.177 -7.65921,-0.939 -4.89219,-0.61 -5.47163,-0.667 2.47462,-4.492 0.1355,-0.298 -9.20852,-1.148 0.40114,-2.999 0.53843,-1.872 0.69175,-0.626 3.19847,0.506 2.05743,0.273 4.122,-0.804 0.78803,-6.051 0.67392,-2.587 2.65291,0.282 0.70602,-0.53 0.11232,-0.643 0.75594,-0.58 2.12874,-1.068 2.58873,0.321 1.38173,0.17 -0.24069,1.968 3.95975,0.474 0.73989,1.086 1.01267,1.123 1.80783,0.209"
+ class="c30003"
+ id="Big Horn, MT" />
+ <path
+ d="m 336.79122,104.83714 8.9197,1.069 2.08061,2.25 0.73098,6.058 -0.69889,6.075 -1.80783,-0.209 -1.01267,-1.123 -0.73989,-1.086 -3.95975,-0.474 0.24069,-1.968 -1.38173,-0.17 0.36192,-1.02 0.40115,-1.993 -1.50296,-4.202 -1.33359,-2.837 -0.29774,-0.37"
+ class="c30103"
+ id="Treasure, MT" />
+ <path
+ d="m 335.42555,96.127143 6.68576,0.827 0.312,-0.08 0.60439,0 0.53665,0.06 10.31033,1.206 0.56161,0.29 1.15886,0.241 8.21903,0.875 -0.57765,0.28 -0.74702,5.264997 -0.64361,2.603 -0.57052,5.32 -0.009,0.594 -0.36014,1.301 -0.48315,0.619 -0.86648,7.948 -0.67571,-0.06 -0.39401,3.735 -0.7078,4.14 -0.71315,2.057 -0.4261,3.897 -1.92907,-0.153 -2.00216,-0.176 -3.95263,-0.548 0.50634,-2.603 0.56339,-1.253 0.82725,-7.337 -0.3227,-0.121 -1.54218,-0.183 -1.03763,-0.289 -0.0321,-3.416 0.10519,-0.877 0.69889,-6.075 -0.73098,-6.058 -2.08061,-2.25 -8.9197,-1.07 -0.6347,-0.408 0.007,-6.002997 -0.7381,-2.298"
+ class="c30087"
+ id="Rosebud, MT" />
+ <path
+ d="m 361.36452,73.740143 0.93244,0.105 1.28367,2.184 -0.82725,7.698 -0.52952,1.279 -0.49028,2.628 1.99146,0.208 -0.41541,3.946 1.30863,0.144 -0.77198,7.296 -0.0321,0.322 -8.21903,-0.875 -1.15886,-0.241 -0.56161,-0.29 -10.31033,-1.206 -0.53665,-0.06 -0.60439,0 -0.312,0.08 -6.68576,-0.828 -0.0874,-0.05 -0.5313,-0.538 -0.0571,-0.07 -0.007,-0.136 0.65074,-8.445 0.34588,-2.307 1.13212,-2.081 0.0963,0.03 0.66679,-0.08 1.8007,-1.874 0.56161,-0.617 0.68283,-1.012 0.94849,-0.444 0.6347,0.08 0.18542,0.06 1.33359,0.715 0.77198,0.121 0.10519,-0.05 0.0785,-0.1 0.30487,-0.626 0.17828,-0.731 2.51563,0.997 3.39815,0.424 0.23356,0 1.46195,-0.05 0.38689,-0.05 0.27277,-0.08 3.95263,-2.138 2.65291,-3.528 0.78803,-0.177 0.48137,0.362"
+ class="c30033"
+ id="Garfield, MT" />
+ <path
+ d="m 368.62793,50.677143 16.07258,1.624 -0.19434,2 -0.27278,5.923 1.00376,0.105 -0.18542,1.961 -12.76,-1.262 -2.52276,-0.275 -0.65966,-1.381 0.47424,-4.588 -1.99146,-0.208 0.21572,-1.962 0.47603,-0.627 0.34409,-1.31"
+ class="c30019"
+ id="Daniels, MT" />
+ <path
+ d="m 368.62793,50.677143 -0.34409,1.31 -0.47603,0.627 -0.21572,1.962 1.99146,0.208 -0.47424,4.588 0.65966,1.381 2.52276,0.275 -0.80407,7.795 -0.60083,-0.06 -0.4992,4.732 -1.18918,0.03 -4.74065,-1.021 -0.22464,-0.104 -0.39402,-0.41 -1.83279,-0.626 -0.10519,0.05 -0.0945,0.105 -0.21751,0.297 -0.21751,0.562 -0.007,1.375 -0.48137,-0.362 -0.78803,0.176 -2.65291,3.529 -3.95263,2.137 -0.27277,0.08 -0.38689,0.05 -1.46195,0.05 -0.23356,0 -3.39815,-0.425 -2.51563,-0.996 0.49742,-4.051 1.06973,-7.536 0.8112,-2.22 1.67055,0.211 1.64024,-6.695 0.82725,-6.943 0.63471,-1.913 16.2562,1.84"
+ class="c30105"
+ id="Valley, MT" />
+ <path
+ d="m 380.55177,73.249143 -0.12659,1.487 -0.28169,2.668 -0.64183,0.265 -0.16938,1.76 -2.00216,-0.193 -0.61865,3.937 -0.64184,1.938 -0.77911,7.905 -6.69468,-0.667 -0.19968,2.002 -0.67571,-0.06 -1.32645,-0.146 0.20859,-2 -1.98433,-0.209 -1.30863,-0.144 0.41541,-3.946 -1.99146,-0.208 0.49028,-2.628 0.52952,-1.279 0.82725,-7.698 -1.28367,-2.184 -0.93244,-0.105 0.007,-1.375 0.21751,-0.561 0.21751,-0.298 0.0945,-0.105 0.10519,-0.05 1.83279,0.626 0.39402,0.41 0.22464,0.104 4.74065,1.021 1.18918,-0.03 2.41044,-0.738 0.83616,-0.458 0.76307,-0.03 2.81159,0.04 1.14995,0.05 1.31754,0.257 0.87539,0.634"
+ class="c30055"
+ id="McCone, MT" />
+ <path
+ d="m 364.61826,91.932143 1.98433,0.209 -0.20859,2 1.32645,0.146 0.67571,0.06 0.19968,-2.002 6.69468,0.667 1.27653,0.13 -0.46533,4.654 2.01643,0.19 1.87914,1.521 0.29774,0.344 0.28883,0.490997 -0.0553,0.538 6.68576,0.635 -0.41719,4.009 -0.0642,0.66 -1.98612,-0.185 -0.0874,0.987 -1.99325,-0.176 -0.41719,0.955 -1.73652,0.5 -4.03463,-0.402 -3.24661,-1.005 -0.55269,-0.731 -0.79516,-1.416 -0.26564,-2.023 -0.45107,-2.058 -3.32684,-0.986997 -3.99362,-0.419 0.77198,-7.296"
+ class="c30079"
+ id="Prairie, MT" />
+ <path
+ d="m 359.55669,123.48014 19.36375,2 -0.73098,7.884 -0.28882,2.056 -0.82725,-0.07 -0.77198,8.051 -0.82726,-0.08 -12.28575,-1.23 -1.15709,-0.06 -1.72938,-0.08 -3.86348,-0.417 0.20147,-4.282 0.4261,-3.898 0.71315,-2.057 0.7078,-4.14 0.39401,-3.735 0.67571,0.06"
+ class="c30075"
+ id="Powder River, MT" />
+ <path
+ d="m 363.84628,99.228143 3.99362,0.419 3.32684,0.986997 0.45107,2.058 0.26564,2.023 0.79516,1.416 0.55269,0.731 3.24661,1.005 4.03463,0.402 1.73652,-0.5 0.41719,-0.955 1.99325,0.176 -0.28169,2.981 -2.74027,-0.257 -0.22465,2.452 0.0161,0.948 0.16759,0.491 -0.38332,4.033 -0.85399,-0.08 -0.74703,7.988 -0.69175,-0.06 -19.36375,-2 0.86648,-7.948 0.48315,-0.619 0.36014,-1.301 0.009,-0.594 0.57052,-5.32 0.64361,-2.603 0.74702,-5.264997 0.57765,-0.28 0.0321,-0.322"
+ class="c30017"
+ id="Custer, MT" />
+ <path
+ d="m 381.21321,117.63814 4.122,0.394 1.75791,0.361 0.87717,1.744 0.80407,2.017 1.38173,0.185 2.70818,0.209 -0.16938,1.984 1.44591,0.128 -1.23731,15.326 -0.69888,4.917 -15.9032,-1.503 0.77198,-8.051 0.82725,0.07 0.28882,-2.056 0.73098,-7.884 0.69175,0.06 0.74703,-7.988 0.85399,0.08"
+ class="c30011"
+ id="Carter, MT" />
+ <path
+ d="m 384.6595,106.99014 0.0874,-0.987 1.98612,0.185 0.0642,-0.66 2.98809,0.264 0.98058,0.419 -0.0571,0.667 4.88684,0.417 -0.19255,2.3 -0.51525,5.955 -0.64183,7.657 -0.10519,1.453 -1.44591,-0.128 0.16938,-1.984 -2.70818,-0.209 -1.38173,-0.185 -0.80407,-2.017 -0.87717,-1.744 -1.75791,-0.361 -4.122,-0.394 0.38332,-4.033 -0.16759,-0.491 -0.0161,-0.948 0.22465,-2.452 2.74027,0.257 0.28169,-2.981"
+ class="c30025"
+ id="Fallon, MT" />
+ <path
+ d="m 397.06649,90.060143 -0.13728,1.535 -1.33359,15.699997 -4.88684,-0.417 0.0571,-0.667 -0.98058,-0.419 -2.98809,-0.264 0.41719,-4.009 1.6866,0.151 1.0608,-0.569 0.36193,-0.297 1.53505,-2.201997 0.41897,-0.802 0.15155,-1.826 -0.0392,-1.334 -0.041,-0.337 -0.12837,-0.508 -1.11786,-3.27 4.52493,0.411 0.0874,-0.997 1.35141,0.121"
+ class="c30109"
+ id="Wibaux, MT" />
+ <path
+ d="m 379.33228,79.429143 -0.20146,1.977 4.00076,0.385 -0.19968,1.984 6.00292,0.564 1.07686,2.089 -0.36193,3.969 1.45304,0.128 1.11786,3.27 0.12837,0.508 0.041,0.337 0.0392,1.334 -0.15155,1.826 -0.41897,0.802 -1.53505,2.201997 -0.36193,0.297 -1.0608,0.569 -1.6866,-0.151 -6.68576,-0.635 0.0553,-0.539 -0.28883,-0.489997 -0.29774,-0.344 -1.87914,-1.521 -2.01643,-0.19 0.46533,-4.654 -1.27653,-0.13 0.77911,-7.905 0.64184,-1.938 0.61865,-3.937 2.00216,0.193"
+ class="c30021"
+ id="Dawson, MT" />
+ <path
+ d="m 398.23071,76.448143 -1.16422,13.612 -1.35141,-0.121 -0.0874,0.997 -4.52493,-0.411 -1.45304,-0.128 0.36193,-3.969 -1.07686,-2.089 -6.00292,-0.564 0.19968,-1.984 -4.00076,-0.385 0.20146,-1.977 0.16938,-1.76 0.64183,-0.265 0.28169,-2.668 0.12659,-1.487 1.14995,0.225 1.88806,0 0.32983,-0.168 0.49742,-0.377 0.41006,-0.546 0.90926,-0.369 6.50748,1.638 3.03801,1.767 2.94887,1.022"
+ class="c30083"
+ id="Richland, MT" />
+ <path
+ d="m 751.68289,363.42214 5.20776,3.101 -1.21592,0.194 -7.17248,1.045 -1.28011,0.167 4.46075,-4.507"
+ class="c37043"
+ id="Clay, NC" />
+ <path
+ d="m 758.52911,358.43214 5.29512,7 -6.93358,1.091 -5.20776,-3.101 0.3851,-2.209 0.32091,-0.765 0.13015,-0.09 3.9758,-1.228 2.03426,-0.699"
+ class="c37113"
+ id="Macon, NC" />
+ <path
+ d="m 769.21028,354.82314 2.40866,2.145 0.51346,0.589 0.2086,0.657 0.12123,0.844 0.44394,1.342 0.1355,0.227 0.24068,0.126 -3.29474,2.25 -2.41757,0.619 -1.96116,0.947 0.77912,-6.29 2.82228,-3.456"
+ class="c37175"
+ id="Transylvania, NC" />
+ <path
+ d="m 760.79513,353.84314 5.59287,4.436 -0.77912,6.29 -1.78465,0.863 -5.29512,-7 2.26602,-4.589"
+ class="c37099"
+ id="Jackson, NC" />
+ <path
+ d="m 764.00252,346.87014 1.831,2.457 3.37676,5.496 -2.82228,3.456 -5.59287,-4.436 -1.82566,-3.992 -0.0802,-0.437 5.11327,-2.544"
+ class="c37087"
+ id="Haywood, NC" />
+ <path
+ d="m 758.96947,349.85114 1.82566,3.992 -2.26602,4.589 -2.03426,0.699 -3.9758,1.228 -0.13015,0.09 -0.33696,-0.379 -0.007,-0.223 0.12836,-0.41 0.0981,-0.122 0.32983,-0.199 0.43146,-0.178 0.25851,-0.145 0.3851,-0.891 0.0874,-0.571 -0.016,-0.249 -0.0802,-0.427 -1.05189,-0.07 -5.80146,0.351 5.02056,-3.18 0.0891,0 0.33697,0 2.62616,-0.271 0.22643,-0.146 3.18955,-2.525 0.66679,-0.977"
+ class="c37173"
+ id="Swain, NC" />
+ <path
+ d="m 746.81387,356.93414 5.80146,-0.351 1.05189,0.07 0.0802,0.427 0.016,0.249 -0.0874,0.571 -0.3851,0.891 -0.25851,0.145 -0.43146,0.178 -0.32983,0.199 -0.0981,0.122 -0.12836,0.41 0.007,0.223 0.33696,0.379 -0.32091,0.765 -3.38211,0.738 -1.2694,0.594 -0.18007,0 -0.67393,-0.28 -0.65609,-1.262 0.75415,-4.122 0.15333,0.05"
+ class="c37075"
+ id="Graham, NC" />
+ <path
+ d="m 752.06799,361.21314 -0.3851,2.209 -4.46075,4.507 -2.30346,0.289 -3.57822,0.419 -0.0695,-5.079 1.51543,-1.334 1.98077,-0.05 0.70424,-0.579 0.43502,-0.594 0.65609,1.262 0.67393,0.28 0.18007,0 1.2694,-0.594 3.38211,-0.738"
+ class="c37039"
+ id="Cherokee, NC" />
+ <path
+ d="m 779.13373,337.41714 2.47463,4.181 -2.47463,2.409 -0.52416,-1.976 -0.19255,-0.363 -1.0305,-1.765 -0.0856,-0.106 -3.04514,-1.164 -1.14104,0.433 3.2787,-2.442 2.74027,0.793"
+ class="c37121"
+ id="Mitchell, NC" />
+ <path
+ d="m 773.11476,339.06614 1.14104,-0.433 3.04514,1.164 0.0856,0.106 1.0305,1.765 0.19255,0.363 0.52416,1.976 -2.20184,3.125 -2.82942,-2.25 -2.29633,-3.421 1.30862,-2.395"
+ class="c37199"
+ id="Yancey, NC" />
+ <path
+ d="m 769.82715,340.31114 1.97899,1.15 2.29633,3.421 -1.7276,0.628 -1.01267,0.636 -0.59369,0.425 -1.15708,0.841 -2.34626,1.53 -1.43165,0.385 -1.831,-2.457 0.71136,-3.625 0.83082,-0.21 1.62241,-1.519 1.1553,-1.141 0.3227,-0.234 0.46711,-0.336 0.0874,-0.01 0.27635,0.175 0,0 0.35122,0.337"
+ class="c37115"
+ id="Madison, NC" />
+ <path
+ d="m 776.93189,347.13214 2.53702,3.762 -1.57427,1.64 -1.34072,-0.563 -1.21413,0.852 -1.53505,0.827 -1.39064,0.516 -0.85221,-0.07 -0.57765,-0.13 -0.19434,-0.101 -0.36014,-0.06 -0.56873,0.223 -0.17829,0.138 -0.47246,0.666 -3.37676,-5.496 1.43165,-0.385 2.34626,-1.53 1.15708,-0.841 0.59369,-0.425 1.01267,-0.636 1.7276,-0.628 2.82942,2.25"
+ class="c37021"
+ id="Buncombe, NC" />
+ <path
+ d="m 777.89464,352.53414 0.32983,1.696 -1.11429,4.514 -3.82783,2.009 -0.24068,-0.126 -0.1355,-0.227 -0.44394,-1.342 -0.12123,-0.844 -0.2086,-0.657 -0.51346,-0.589 -2.40866,-2.145 0.47246,-0.666 0.17829,-0.138 0.56873,-0.223 0.36014,0.06 0.19434,0.101 0.57765,0.13 0.85221,0.07 1.39064,-0.516 1.53505,-0.827 1.21413,-0.852 1.34072,0.563"
+ class="c37089"
+ id="Henderson, NC" />
+ <path
+ d="m 784.30584,358.15014 -4.59624,0.475 -2.59942,0.119 1.11429,-4.514 1.10003,-0.387 0.71493,-0.257 0.16937,0.02 0.57944,0.252 0.27278,0.18 2.93817,2.478 0.1872,0.305 0.11945,1.326"
+ class="c37149"
+ id="Polk, NC" />
+ <path
+ d="m 788.06056,348.39414 0.57765,5.126 -0.57765,3.249 -0.016,0.987 -1.97721,0.202 -1.76147,0.192 -0.11945,-1.326 -0.1872,-0.305 -2.93817,-2.478 -0.27278,-0.18 -0.57944,-0.252 -0.16937,-0.02 -0.71493,0.257 -1.10003,0.387 -0.32983,-1.696 1.57427,-1.64 6.17943,-2.015 2.41222,-0.485"
+ class="c37161"
+ id="Rutherford, NC" />
+ <path
+ d="m 781.60836,341.59814 0.53664,-1.198 0.13015,0.07 0.13728,0.175 0.40828,0.659 0.10341,0.218 0.1551,0.513 -0.12301,0.869 1.36568,2.779 1.32645,3.193 -6.17943,2.015 -2.53702,-3.762 2.20184,-3.125 2.47463,-2.409"
+ class="c37111"
+ id="McDowell, NC" />
+ <path
+ d="m 781.29457,333.37614 0.19255,-0.555 2.54772,3.73 0.5937,3.414 -2.48354,0.435 -0.53664,1.198 -2.47463,-4.181 2.16084,-4.041"
+ class="c37011"
+ id="Avery, NC" />
+ <path
+ d="m 784.73373,329.98414 1.63132,0.644 1.06794,0.941 0.7078,0.516 1.53327,0.602 -0.80229,2.994 -4.83693,0.87 -2.54772,-3.73 0.1355,-0.369 0.84508,-0.947 0.9164,-0.627 0.0232,-0.02 0.0963,-0.06 0.1141,0.263 0.48138,0.154 0.28704,-0.01 0.0339,0 0.38332,-0.129 -0.0695,-1.095"
+ class="c37189"
+ id="Watauga, NC" />
+ <path
+ d="m 798.54027,335.85214 -0.56517,6.324 -4.11308,0.255 -0.60261,-4.597 0.99663,-0.825 0.53842,-0.21 0.82725,-0.264 0.29774,0.07 1.26762,-0.303 1.02159,-0.291 0.33161,-0.16"
+ class="c37003"
+ id="Alexander, NC" />
+ <path
+ d="m 784.82109,325.27114 5.92269,-0.596 0.0731,0.457 1.20344,1.697 0.65253,0.554 0.1765,0.289 0.41006,0.858 0.10341,0.691 -3.68876,3.466 -1.53327,-0.602 -0.7078,-0.516 -1.06794,-0.941 -1.63132,-0.644 0.0874,-4.713"
+ class="c37009"
+ id="Ashe, NC" />
+ <path
+ d="m 798.97173,323.67814 -0.60261,3.857 -0.16046,0.658 -0.84508,0.135 -0.35301,-0.39 -0.0713,-0.394 -0.80408,-0.403 -0.14263,-0.02 -1.166,0.346 -1.46373,1.757 -0.10341,-0.691 -0.41006,-0.858 -0.1765,-0.289 -0.65253,-0.554 -1.20344,-1.697 -0.0731,-0.457 8.22795,-0.997"
+ class="c37005"
+ id="Alleghany, NC" />
+ <path
+ d="m 793.36282,329.22114 1.46373,-1.757 1.166,-0.346 0.14263,0.02 0.80408,0.403 0.0713,0.394 0.35301,0.39 0.84508,-0.135 0.16046,-0.658 2.31595,3.503 0.49742,4.163 -2.64222,0.651 -0.33161,0.16 -1.02159,0.291 -1.26762,0.303 -0.29774,-0.07 -0.82725,0.264 -0.53842,0.21 -0.99663,0.825 -4.38764,-2.153 0.80229,-2.994 3.68876,-3.466"
+ class="c37193"
+ id="Wilkes, NC" />
+ <path
+ d="m 784.03484,336.55114 4.83693,-0.87 4.38764,2.153 0.60261,4.597 -0.44215,0.741 -0.21573,0.282 -0.39579,0.03 -2.94174,0 -3.56752,-2.161 -1.51722,-1.158 -0.15333,-0.209 -0.5937,-3.414"
+ class="c37027"
+ id="Caldwell, NC" />
+ <path
+ d="m 784.62854,339.96514 0.15333,0.209 1.51722,1.158 3.56752,2.161 2.94174,0 0.39579,-0.03 0.21573,-0.282 -2.42649,5.039 -0.041,0.11 -2.89182,0.07 -2.41222,0.485 -1.32645,-3.193 -1.36568,-2.779 0.12301,-0.869 -0.1551,-0.513 -0.10341,-0.217 -0.40828,-0.66 -0.13728,-0.175 -0.13015,-0.07 2.48354,-0.435"
+ class="c37023"
+ id="Burke, NC" />
+ <path
+ d="m 790.95238,348.32114 2.00038,3.079 3.2787,5.497 -0.72385,0.07 -7.46309,0.788 0.016,-0.987 0.57765,-3.249 -0.57765,-5.126 2.89182,-0.07"
+ class="c37045"
+ id="Cleveland, NC" />
+ <path
+ d="m 792.95276,351.40014 9.28162,-1.019 -0.70067,6.033 -5.30225,0.483 -3.2787,-5.497"
+ class="c37071"
+ id="Gaston, NC" />
+ <path
+ d="m 801.61751,347.03814 0.45641,1.333 0.16046,2.01 -9.28162,1.019 -2.00038,-3.079 0.041,-0.11 10.62413,-1.173"
+ class="c37109"
+ id="Lincoln, NC" />
+ <path
+ d="m 793.86202,342.43114 4.11308,-0.255 2.3944,1.389 0.67571,0.675 0.8843,1.15 -0.312,1.648 -10.62413,1.173 2.42649,-5.039 0.44215,-0.741"
+ class="c37035"
+ id="Catawba, NC" />
+ <path
+ d="m 801.18249,335.20114 3.46946,-0.458 0.45998,4.58 -0.35479,2.972 -0.15154,1.279 1.0608,2.893 0.11946,0.433 0.0731,0.41 -0.86825,0.138 -2.91678,0.923 -0.45641,-1.333 0.312,-1.648 -0.8843,-1.15 -0.67571,-0.675 -2.3944,-1.389 0.56517,-6.324 2.64222,-0.651"
+ class="c37097"
+ id="Iredell, NC" />
+ <path
+ d="m 802.07392,348.37114 2.91678,-0.923 -0.016,0.167 0.025,0.154 0.71493,2.039 2.33913,2.765 2.35339,0.997 -4.58911,5.6 -1.49405,-1.526 -2.79019,-1.23 0.70067,-6.033 -0.16046,-2.01"
+ class="c37119"
+ id="Mecklenburg, NC" />
+ <path
+ d="m 805.11193,339.32314 4.96529,1.769 2.40331,0.158 2.80446,2.791 0.75415,1.656 -2.06456,0.374 -8.11563,1.239 -0.0731,-0.41 -0.11946,-0.433 -1.0608,-2.893 0.15154,-1.279 0.35479,-2.972"
+ class="c37159"
+ id="Rowan, NC" />
+ <path
+ d="m 804.65195,334.74314 3.59605,-0.476 2.11805,1.367 0.33696,0.186 0.10697,0.16 0.21573,0.603 0.0927,0.635 -0.16402,1.356 -0.69176,0.467 -0.18542,2.051 -4.96529,-1.769 -0.45998,-4.58"
+ class="c37059"
+ id="Davie, NC" />
+ <path
+ d="m 808.31753,329.68014 -0.0695,4.587 -3.59605,0.476 -3.46946,0.458 -0.49742,-4.163 1.57427,-0.98 2.69035,-0.917 1.08755,-0.02 1.69373,0.289 0.38688,0.121 0.19968,0.145"
+ class="c37197"
+ id="Yadkin, NC" />
+ <path
+ d="m 804.22941,322.91414 3.14142,-0.337 0.87717,6.636 0.0695,0.467 -0.19968,-0.145 -0.38688,-0.121 -1.69373,-0.289 -1.08755,0.02 -2.69035,0.917 -1.57427,0.98 -2.31595,-3.503 0.60261,-3.857 1.16599,-0.121 4.09169,-0.643"
+ class="c37171"
+ id="Surry, NC" />
+ <path
+ d="m 814.86601,321.50914 0.9574,6.539 -7.57541,1.165 -0.87717,-6.636 7.02094,-0.988 0.47424,-0.08"
+ class="c37169"
+ id="Stokes, NC" />
+ <path
+ d="m 808.248,329.21314 7.57541,-1.165 0.81834,5.659 -6.2757,1.927 -2.11805,-1.367 0.0695,-4.587 -0.0695,-0.467"
+ class="c37067"
+ id="Forsyth, NC" />
+ <path
+ d="m 810.36605,335.63414 6.2757,-1.927 0.27278,2.065 1.24801,9.529 -2.1234,0.396 -0.75415,-1.656 -2.80446,-2.791 -2.40331,-0.158 0.18542,-2.051 0.69176,-0.467 0.16402,-1.356 -0.0927,-0.635 -0.21573,-0.603 -0.10697,-0.16 -0.33696,-0.186"
+ class="c37057"
+ id="Davidson, NC" />
+ <path
+ d="m 813.97458,346.07114 2.06456,-0.374 1.42273,0.722 0.11232,0.07 0.86113,1.366 0.34409,0.717 0.89144,4.154 0.0267,0.135 -0.0339,0.209 -0.26565,0.538 -3.91875,-0.586 -4.15765,0.939 2.65291,-7.891"
+ class="c37167"
+ id="Stanly, NC" />
+ <path
+ d="m 813.97458,346.07114 -2.65291,7.891 -0.91461,-0.392 -2.35339,-0.997 -2.33913,-2.765 -0.71493,-2.039 -0.025,-0.154 0.016,-0.167 0.86825,-0.138 8.11563,-1.239"
+ class="c37025"
+ id="Cabarrus, NC" />
+ <path
+ d="m 815.47932,353.02314 0.6561,8.853 -4.47322,0.664 -4.01146,0.592 -0.37797,-0.07 -0.009,-0.217 -0.12837,-2.346 -1.31754,-1.327 4.58911,-5.6 0.91461,0.392 4.15765,-0.939"
+ class="c37179"
+ id="Union, NC" />
+ <path
+ d="m 819.39807,353.60914 0.0481,0.202 0.21751,0.483 0.87717,0.344 0.4885,0.05 0.0981,-0.02 0.11232,-0.1 0.0464,-0.06 0.0571,-0.234 0.37084,-0.394 0.2389,-0.144 0.29774,0 0.33875,0.419 0.53129,0.859 1.38707,3.318 0,0.121 -0.18185,0.435 -0.89322,1.929 -7.29728,1.057 -0.6561,-8.853 3.91875,0.586"
+ class="c37007"
+ id="Anson, NC" />
+ <path
+ d="m 820.51593,320.55814 3.69589,-0.618 0.78089,6.702 0.0214,0.192 -9.1907,1.214 -0.9574,-6.539 5.64992,-0.951"
+ class="c37157"
+ id="Rockingham, NC" />
+ <path
+ d="m 815.82341,328.04814 9.1907,-1.214 1.19096,7.829 -9.29054,1.109 -0.27278,-2.065 -0.81834,-5.659"
+ class="c37081"
+ id="Guilford, NC" />
+ <path
+ d="m 826.20507,334.66314 0.21572,1.285 1.06081,7.527 -3.89557,0.765 -5.42349,1.061 -1.24801,-9.529 9.29054,-1.109"
+ class="c37151"
+ id="Randolph, NC" />
+ <path
+ d="m 823.58603,344.24014 1.9362,4.919 0.0553,0.289 0.27277,0.44 1.05368,1.232 0.43502,0.353 0.47424,0.209 -1.87379,0.105 -2.57981,0.2 -0.9788,0.66 -1.92015,0.843 -0.41184,0.09 -0.65075,0.03 0.26565,-0.538 0.0339,-0.209 -0.0267,-0.135 -0.89144,-4.154 -0.34409,-0.717 -0.86113,-1.366 -0.11232,-0.07 -1.42273,-0.722 2.1234,-0.396 5.42349,-1.061"
+ class="c37123"
+ id="Montgomery, NC" />
+ <path
+ d="m 819.39807,353.60914 0.65075,-0.03 0.41184,-0.09 1.92015,-0.843 0.9788,-0.66 2.57981,-0.2 1.87379,-0.105 3.34289,2.25 -0.90927,0.562 -0.67571,0.611 -0.30665,0.328 -0.0963,0.909 0.0731,0.28 0.16938,0.266 -0.26387,1.335 -0.29061,0.619 -0.97879,1.253 -4.4447,0.724 0.89322,-1.929 0.18185,-0.435 0,-0.121 -1.38707,-3.318 -0.53129,-0.859 -0.33875,-0.419 -0.29774,0 -0.2389,0.144 -0.37084,0.394 -0.0571,0.234 -0.0464,0.06 -0.11232,0.1 -0.0981,0.02 -0.4885,-0.05 -0.87717,-0.344 -0.21751,-0.483 -0.0481,-0.202"
+ class="c37153"
+ id="Richmond, NC" />
+ <path
+ d="m 834.02117,358.23014 -1.26584,5.112 -4.87793,-3.247 0.97879,-1.253 0.29061,-0.619 0.26387,-1.335 -0.16938,-0.266 -0.0731,-0.28 0.0963,-0.909 0.30665,-0.328 0.67571,-0.611 0.90927,-0.562 2.86507,4.298"
+ class="c37165"
+ id="Scotland, NC" />
+ <path
+ d="m 830.9368,318.72714 0.93957,6.879 -1.87914,0.297 -5.00452,0.739 -0.78089,-6.702 0.73097,-0.136 2.29812,-0.408 2.24285,-0.412 1.45304,-0.257"
+ class="c37033"
+ id="Caswell, NC" />
+ <path
+ d="m 824.99271,326.64214 5.00452,-0.739 1.63133,8.343 -5.20777,1.702 -0.21572,-1.285 -1.19096,-7.829 -0.0214,-0.192"
+ class="c37001"
+ id="Alamance, NC" />
+ <path
+ d="m 831.24167,342.75314 3.9134,4.26 2.06635,2.328 0.0481,0.421 -2.90073,-0.362 -0.62757,0.545 -0.88252,1.052 -1.14995,1.929 -0.55269,1.006 -3.34289,-2.25 -0.47424,-0.209 -0.43502,-0.353 -1.05368,-1.232 -0.27277,-0.44 -0.0553,-0.289 -1.9362,-4.919 3.89557,-0.765 3.76007,-0.722"
+ class="c37125"
+ id="Moore, NC" />
+ <path
+ d="m 831.1561,353.93214 0.55269,-1.006 1.14995,-1.929 0.88252,-1.052 0.62757,-0.545 2.90073,0.362 2.06634,4.812 -2.13944,2.885 -1.01089,0.465 -2.1644,0.306 -2.86507,-4.298"
+ class="c37093"
+ id="Hoke, NC" />
+ <path
+ d="m 839.3359,354.57414 2.94887,2.259 2.36943,2.988 0.0713,0.339 -0.18364,4.098 -0.24782,0.491 -0.8843,0.864 -1.11786,2.404 -0.94849,1.574 -8.33313,-6.073 -0.25495,-0.176 1.26584,-5.112 2.1644,-0.306 1.01089,-0.465 2.13944,-2.885"
+ class="c37155"
+ id="Robeson, NC" />
+ <path
+ d="m 856.04853,364.51314 1.92906,0.639 -1.10894,3.524 -2.24999,1.27 -2.00929,0.691 -0.21573,0.02 -0.14441,0.05 -0.47424,0.579 -0.85935,3.159 -0.26743,1.79 -9.3048,-6.646 0.94849,-1.574 1.11786,-2.404 0.8843,-0.864 0.78625,0.312 0.16046,0 0.39401,-0.07 2.04852,-0.531 2.33021,0.497 2.6119,0.739 2.06457,-0.152 1.35855,-1.029"
+ class="c37047"
+ id="Columbus, NC" />
+ <path
+ d="m 857.97759,365.15214 2.5602,0.11 1.5297,1.808 1.10895,2.603 0.3851,1.432 0.0891,0.495 0.36906,2.47 -1.3425,1.221 -1.50831,-0.129 -0.80586,0 -0.76307,0.1 -1.83279,0.385 -1.89519,0.595 -0.0642,0.02 -0.007,0 -2.17867,1.262 -0.54021,0.442 -2.43362,-1.737 0.26743,-1.79 0.85935,-3.159 0.47424,-0.579 0.14441,-0.05 0.21573,-0.02 2.00929,-0.691 2.24999,-1.27 1.10894,-3.524"
+ class="c37019"
+ id="Brunswick, NC" />
+ <path
+ d="m 866.51932,365.04514 -0.34588,0.52 -0.32091,0.701 -0.85221,2.113 -0.13729,0.547 -0.32091,1.588 -0.0303,0.195 -0.49207,3.361 -0.36906,-2.47 -0.0891,-0.495 -0.3851,-1.432 -1.10895,-2.603 -1.5297,-1.808 1.78644,-1.095 1.44769,-0.69 0.74702,0 -0.1462,0.226 0.0802,0.177 0.29774,0.288 1.29437,0.885 0.47424,0"
+ class="c37129"
+ id="New Hanover, NC" />
+ <path
+ d="m 849.69081,354.96114 5.72301,6.042 -0.2496,0.426 0.0499,0.111 0.4582,0.572 0.32805,0.201 0.56338,0.07 0.68106,0.361 -1.1963,1.767 -1.35855,1.029 -2.06457,0.152 -2.6119,-0.739 -2.33021,-0.497 -2.04852,0.531 -0.39401,0.07 -0.16046,0 -0.78625,-0.312 0.24782,-0.491 0.18364,-4.098 -0.0713,-0.339 -2.36943,-2.988 1.02693,-0.483 0.77377,-0.2 4.91537,-0.941 0.51347,-0.129 0.1765,-0.119"
+ class="c37017"
+ id="Bladen, NC" />
+ <path
+ d="m 845.79524,346.52214 -0.33874,3.664 0,0.17 0.45106,0.989 0.59548,1.109 0.1355,0.209 3.05227,2.298 -0.1765,0.119 -0.51347,0.129 -4.91537,0.941 -0.77377,0.2 -1.02693,0.483 -2.94887,-2.259 -2.06634,-4.812 -0.0481,-0.421 0.57052,-0.255 3.31079,-1.519 1.63132,-0.877 0.55448,-0.127 2.50671,-0.04"
+ class="c37051"
+ id="Cumberland, NC" />
+ <path
+ d="m 837.92209,333.32014 0.0374,0.587 -0.60974,5.577 1.58318,0.345 -0.76485,1.584 -1.79713,-1.416 -0.35657,-0.233 -0.19077,-0.09 -0.4992,-0.139 -0.37084,0.03 -0.32983,0.107 -0.77733,1.194 -0.82904,0.726 -1.31754,0.931 -0.4582,0.224 -3.76007,0.722 -1.06081,-7.527 5.20777,-1.702 4.2985,-0.459 1.99503,-0.467"
+ class="c37037"
+ id="Chatham, NC" />
+ <path
+ d="m 838.93297,339.82914 4.04177,0.78 3.92231,4.072 -1.10181,1.841 -2.50671,0.04 -0.55448,0.127 -1.63132,0.877 -3.31079,1.519 -0.57052,0.255 -2.06635,-2.328 3.01305,-5.6 0.76485,-1.584"
+ class="c37085"
+ id="Harnett, NC" />
+ <path
+ d="m 831.24167,342.75314 0.4582,-0.224 1.31754,-0.931 0.82904,-0.726 0.77733,-1.194 0.32983,-0.107 0.37084,-0.03 0.4992,0.139 0.19077,0.09 0.35657,0.233 1.79713,1.416 -3.01305,5.6 -3.9134,-4.26"
+ class="c37105"
+ id="Lee, NC" />
+ <path
+ d="m 831.87637,325.60614 3.69233,-0.594 0.35836,8.775 -4.2985,0.459 -1.63133,-8.343 1.87914,-0.297"
+ class="c37135"
+ id="Orange, NC" />
+ <path
+ d="m 830.9368,318.72714 6.1723,-1.116 1.17313,6.982 -2.71353,0.419 -3.69233,0.594 -0.93957,-6.879"
+ class="c37145"
+ id="Person, NC" />
+ <path
+ d="m 838.28223,324.59314 1.64737,3.575 1.14817,1.159 -0.0802,1.06 -0.20682,0.587 -0.41362,0.715 -1.07507,1.398 -1.37994,0.233 -1.99503,0.467 -0.35836,-8.775 2.71353,-0.419"
+ class="c37063"
+ id="Durham, NC" />
+ <path
+ d="m 857.3108,356.68814 7.97834,-1.503 4.25214,5.768 -3.02196,4.092 -0.47424,0 -1.29437,-0.885 -0.29774,-0.289 -0.0802,-0.176 0.1462,-0.226 -0.74702,0 -1.44769,0.69 -1.78644,1.095 -2.5602,-0.11 -1.92906,-0.639 1.1963,-1.767 -0.68106,-0.361 -0.56338,-0.07 -0.32805,-0.201 -0.4582,-0.573 -0.0499,-0.11 0.2496,-0.426 1.89698,-4.315"
+ class="c37141"
+ id="Pender, NC" />
+ <path
+ d="m 846.89705,344.68114 4.45896,-0.152 3.00414,1.712 0.54734,2.483 0.99484,3.976 -0.27278,3.947 1.33537,0.401 0.1141,-0.06 0.23178,-0.296 -1.89698,4.315 -5.72301,-6.042 -3.05227,-2.298 -0.1355,-0.209 -0.59548,-1.109 -0.45106,-0.989 0,-0.17 0.33874,-3.664 1.10181,-1.841"
+ class="c37163"
+ id="Sampson, NC" />
+ <path
+ d="m 854.45821,336.89514 4.45004,-0.56 1.21413,4.546 0.32983,4.468 -6.09206,0.892 -3.00414,-1.712 0.72206,-1.054 1.45483,-2.449 0.92531,-4.131"
+ class="c37191"
+ id="Wayne, NC" />
+ <path
+ d="m 851.49864,334.03514 0.79694,0.851 0.97345,1.818 1.18918,0.191 -0.92531,4.131 -1.45483,2.449 -0.72206,1.054 -4.45896,0.152 -3.92231,-4.072 2.52989,-3.543 2.57803,-2.87 1.89876,-1.929 1.51722,1.768"
+ class="c37101"
+ id="Johnston, NC" />
+ <path
+ d="m 839.9296,328.16814 3.88131,0.451 1.05189,0.249 1.32467,0.412 2.49959,1.405 0.64361,0.537 0.60261,0.813 0.0481,0.232 -1.89876,1.929 -2.57803,2.87 -2.52989,3.543 -4.04177,-0.78 -1.58318,-0.345 0.60974,-5.577 -0.0374,-0.587 1.37994,-0.233 1.07507,-1.398 0.41362,-0.715 0.20682,-0.587 0.0802,-1.06 -1.14817,-1.159"
+ class="c37183"
+ id="Wake, NC" />
+ <path
+ d="m 838.22517,317.39414 4.99917,-0.933 -0.61152,0.781 -0.0481,0.451 0.15333,1.493 0.65074,3.487 0.44929,2.147 0.2496,0.135 -0.25673,3.664 -3.88131,-0.451 -1.64737,-3.575 -1.17313,-6.982 1.11607,-0.217"
+ class="c37077"
+ id="Granville, NC" />
+ <path
+ d="m 843.22434,316.46114 2.3944,-0.481 1.49404,6.26 -3.04514,2.715 -0.2496,-0.135 -0.44929,-2.147 -0.65074,-3.487 -0.15333,-1.493 0.0481,-0.451 0.61152,-0.781"
+ class="c37181"
+ id="Vance, NC" />
+ <path
+ d="m 850.61612,315.02314 2.63687,-0.523 0.19968,0.861 -0.62579,7.289 -5.7141,-0.41 -1.49404,-6.26 4.99738,-0.957"
+ class="c37185"
+ id="Warren, NC" />
+ <path
+ d="m 852.82688,322.65014 -2.84546,9.617 -0.0481,-0.232 -0.60261,-0.813 -0.64361,-0.537 -2.49959,-1.405 -1.32467,-0.412 -1.05189,-0.249 0.25673,-3.664 3.04514,-2.715 5.7141,0.41"
+ class="c37069"
+ id="Franklin, NC" />
+ <path
+ d="m 858.62834,322.70514 -0.0499,1.116 -0.75237,3.794 -0.30666,2.049 -6.02075,4.371 -1.51722,-1.768 2.84546,-9.617 5.80146,0.06"
+ class="c37127"
+ id="Nash, NC" />
+ <path
+ d="m 866.47831,311.85614 1.65629,1.432 -0.73098,2.605 -0.35479,2.931 -1.14638,2.082 -0.10697,0.104 -0.18542,-0.03 -1.56536,-0.665 -4.03464,-2.732 -0.32805,-1.455 -1.82565,-0.98 -4.32346,0.07 -0.0802,0.144 -0.19968,-0.861 2.38548,-0.456 8.47754,-1.672 2.3623,-0.516"
+ class="c37131"
+ id="Northampton, NC" />
+ <path
+ d="m 853.45267,315.36114 0.0802,-0.144 4.32346,-0.07 1.82565,0.98 0.32805,1.455 4.03464,2.732 1.56536,0.665 0.18542,0.03 0.10697,-0.104 -0.2193,2.259 -1.04297,1.854 -0.37976,0.105 -1.85596,-0.428 -0.31914,-0.688 -0.98949,-0.531 -2.46749,-0.772 -5.80146,-0.06 0.62579,-7.289"
+ class="c37083"
+ id="Halifax, NC" />
+ <path
+ d="m 864.64018,325.01914 1.77395,4.026 -0.77911,-0.168 -1.34964,1.02 -0.3851,0.658 -0.53129,0.685 -1.97007,2.144 -1.29971,-0.996 -0.83795,-1.689 -1.74187,-1.035 0.30666,-2.049 0.75237,-3.794 0.0499,-1.116 2.46749,0.772 0.98949,0.531 0.31914,0.688 1.85596,0.428 0.37976,-0.105"
+ class="c37065"
+ id="Edgecombe, NC" />
+ <path
+ d="m 857.51939,329.66414 1.74187,1.035 0.83795,1.689 1.29971,0.996 -0.60083,0.708 -1.88984,2.243 -4.45004,0.56 -1.18918,-0.191 -0.97345,-1.818 -0.79694,-0.851 6.02075,-4.371"
+ class="c37195"
+ id="Wilson, NC" />
+ <path
+ d="m 860.79809,334.09214 5.10436,4.324 -1.48157,1.317 -1.14995,0.901 -0.60261,0.271 -0.16581,0.03 -0.33874,-0.385 -2.04139,0.328 -1.21413,-4.546 1.88984,-2.243"
+ class="c37079"
+ id="Greene, NC" />
+ <path
+ d="m 867.84578,340.07014 -1.02337,2.837 -1.01089,-0.138 0.61153,1.593 -0.009,0.151 -1.2284,2.427 -2.08061,1.905 -2.65291,-3.496 -0.32983,-4.468 2.04139,-0.328 0.33874,0.385 0.16581,-0.03 0.60261,-0.271 1.14995,-0.901 1.48157,-1.317 1.94333,1.654"
+ class="c37107"
+ id="Lenoir, NC" />
+ <path
+ d="m 866.82241,342.90714 0.19433,0.02 5.62496,2.241 0.57051,0.305 0.69889,-0.426 0.20859,0.04 0.11411,0.137 0.33696,1.043 0.69889,4.325 0.52238,0.56 -1.31041,0.684 -1.39777,-1.911 -0.0892,-0.109 -1.02871,-0.791 -0.57943,-0.07 -5.26839,0 -1.90588,0.495 -1.10717,-0.61 2.08061,-1.905 1.2284,-2.427 0.009,-0.151 -0.61153,-1.593 1.01089,0.138"
+ class="c37103"
+ id="Jones, NC" />
+ <path
+ d="m 854.36015,346.24114 6.09206,-0.892 2.65291,3.496 1.10717,0.61 0.72384,1.004 0.19255,4.315 0.016,0.144 0.14441,0.267 -7.97834,1.503 -0.23178,0.296 -0.1141,0.06 -1.33537,-0.401 0.27278,-3.947 -0.99484,-3.976 -0.54734,-2.483"
+ class="c37061"
+ id="Duplin, NC" />
+ <path
+ d="m 864.21229,349.45514 1.90588,-0.495 5.26839,0 0.57943,0.07 1.02871,0.791 0.0892,0.109 1.39777,1.911 1.64737,3.11 -6.58771,6.001 -4.25214,-5.768 -0.14441,-0.267 -0.016,-0.144 -0.19255,-4.315 -0.72384,-1.004"
+ class="c37133"
+ id="Onslow, NC" />
+ <path
+ d="m 882.97878,344.57014 0.0784,0.153 0.32983,0.352 0.75416,-0.08 3.54434,-0.385 0.54556,2.748 3.75294,-3.994 -0.92531,2.218 -3.63884,6.523 -0.93957,0.578 -0.63113,-0.216 -1.93263,-0.376 -0.95027,0.112 -0.7916,0.161 -0.85399,0.248 -1.59032,0.581 -1.48692,0.617 -0.16224,0.07 -0.066,0.03 -0.48138,0.235 -0.40828,0.234 -0.69888,0.401 -0.29774,0.168 -1.64737,-3.11 1.31041,-0.684 2.4354,-0.683 3.47838,-1.549 1.08576,-0.756 0.34588,-1.1 0.0874,-0.523 -0.13015,-0.119 -1.16421,-0.749 1.04833,-1.109"
+ class="c37031"
+ id="Carteret, NC" />
+ <path
+ d="m 882.15509,337.19414 2.03425,-0.02 0.36906,0.113 0.27278,0.392 0.17115,0.394 0.0713,0.355 -0.26565,1.196 -0.52416,2.232 -0.28705,0.678 -1.01801,2.032 -1.04833,1.109 -0.80229,0.829 -0.3227,0.152 -0.71493,0.1 -1.65451,-0.408 -1.03763,-0.58 -0.43323,-0.458 -0.84509,-2.548 0.20325,-1.094 0.24069,-0.571 0.73276,-0.882 1.0822,0.666 3.80999,-1.237 0.15868,-0.868 0,-0.209 -0.19255,-1.373"
+ class="c37137"
+ id="Pamlico, NC" />
+ <path
+ d="m 871.14765,337.55514 6.14912,2.66 -0.73276,0.882 -0.24069,0.571 -0.20325,1.094 0.84509,2.548 0.43323,0.458 1.03763,0.58 1.65451,0.408 0.71493,-0.1 0.3227,-0.152 0.80229,-0.829 1.16421,0.749 0.13015,0.119 -0.0874,0.523 -0.34588,1.1 -1.08576,0.756 -3.47838,1.549 -2.4354,0.683 -0.52238,-0.56 -0.69889,-4.325 -0.33696,-1.043 -0.11411,-0.137 -0.20859,-0.04 -0.69889,0.426 -0.57051,-0.305 -5.62496,-2.241 -0.19433,-0.02 1.02337,-2.837 3.30187,-2.515"
+ class="c37049"
+ id="Craven, NC" />
+ <path
+ d="m 866.41413,329.04514 3.60675,1.319 1.12677,7.191 -3.30187,2.515 -1.94333,-1.654 -5.10436,-4.324 0.60083,-0.708 1.97007,-2.144 0.53129,-0.685 0.3851,-0.658 1.34964,-1.02 0.77911,0.168"
+ class="c37147"
+ id="Pitt, NC" />
+ <path
+ d="m 865.68315,323.16514 0.025,0.127 0.16759,0.258 2.74741,2.216 0.21929,0.129 2.94708,1.078 0.21038,0.06 3.58357,-0.442 1.32646,-0.74 -0.78982,3.93 -1.7579,1.223 -0.57944,0.367 -1.62954,-0.506 -2.13231,-0.496 -3.60675,-1.319 -1.77395,-4.026 1.04297,-1.854"
+ class="c37117"
+ id="Martin, NC" />
+ <path
+ d="m 876.05589,315.82814 2.21789,-1.765 -0.0214,2.673 0.90748,2.835 0.0713,0.07 0.21038,0.105 0.40828,0.06 0.74702,0.06 1.63668,-0.1 -4.38408,2.193 -1.72939,-4.917 -0.0642,-1.219"
+ class="c37041"
+ id="Chowan, NC" />
+ <path
+ d="m 870.96223,311.01314 0.34588,0.515 -0.025,0.225 -0.312,0.907 -0.29774,0.138 0.31022,1.246 0.0678,0.08 0.28169,0.191 0.51347,0.151 1.64024,0.273 0.49742,0 2.07169,1.087 0.0642,1.22 -3.47837,0.731 -1.95225,0.483 -3.15746,0.562 -0.48316,0 0.35479,-2.931 0.73098,-2.605 -1.65629,-1.432 4.45183,-0.836 0.0321,0"
+ class="c37091"
+ id="Hertford, NC" />
+ <path
+ d="m 876.12007,317.04814 1.72939,4.917 -0.0731,1.803 -0.86647,2.078 -1.32646,0.74 -3.58357,0.442 -0.21038,-0.06 -2.94708,-1.078 -0.21929,-0.129 -2.74741,-2.216 -0.16759,-0.258 -0.025,-0.127 0.2193,-2.259 1.14638,-2.082 0.48316,0 3.15746,-0.562 1.95225,-0.483 3.47837,-0.731"
+ class="c37015"
+ id="Bertie, NC" />
+ <path
+ d="m 877.65691,309.48714 1.08398,0.715 1.30863,2.859 -1.77574,1.002 -2.21789,1.765 -2.07169,-1.087 -0.49742,0 -1.64024,-0.273 -0.51347,-0.151 -0.28169,-0.191 -0.0678,-0.08 -0.31022,-1.246 0.29774,-0.138 0.312,-0.907 0.025,-0.225 -0.34588,-0.515 6.69468,-1.526"
+ class="c37073"
+ id="Gates, NC" />
+ <path
+ d="m 878.55904,309.29414 3.1949,-0.675 3.37498,2.234 2.1858,1.196 0.0891,-0.08 0.24782,0.02 0.41006,0.16 1.35854,1.029 1.85241,2.596 0.0125,0.06 -2.95778,0.08 -0.55626,-0.626 -1.39777,-0.98 -2.72244,-1.657 -3.67271,-1.686 -1.23732,-0.763 -1.08398,-0.715 0.90213,-0.193"
+ class="c37029"
+ id="Camden, NC" />
+ <path
+ d="m 878.74089,310.20214 1.23732,0.763 3.67271,1.686 2.72244,1.657 1.39777,0.98 0.55626,0.626 -2.24999,2.017 -1.81496,-1.181 -2.23572,-1.285 -1.79,-2.088 -0.1872,-0.316 -1.30863,-2.859"
+ class="c37139"
+ id="Pasquotank, NC" />
+ <path
+ d="m 880.04952,313.06114 0.1872,0.316 1.79,2.088 2.23572,1.285 1.81496,1.181 -3.84386,1.841 -1.63668,0.1 -0.74702,-0.06 -0.40828,-0.06 -0.21038,-0.105 -0.0713,-0.07 -0.90748,-2.835 0.0214,-2.673 1.77574,-1.002"
+ class="c37143"
+ id="Perquimans, NC" />
+ <path
+ d="m 879.88193,329.01114 3.29653,2.451 -1.50475,1.48 -0.20859,0.122 -0.0571,0.1 0,0.1 0.0731,0.273 0.58657,1.087 0.63648,0.842 0.31201,0.362 -0.86113,1.374 0.19255,1.373 0,0.209 -0.15868,0.868 -3.80999,1.237 -1.0822,-0.666 -6.14912,-2.66 -1.12677,-7.191 2.13231,0.496 1.62954,0.506 0.57944,-0.367 1.7579,-1.223 3.76186,-0.765"
+ class="c37013"
+ id="Beaufort, NC" />
+ <path
+ d="m 877.77636,323.76814 0.0161,0.01 0.37083,0.151 0.11946,0 1.0608,-0.289 1.7597,-0.684 0.55625,-0.375 0.19077,-0.267 1.06259,-0.547 0.1765,0.07 0.18364,0.159 0.54734,0.578 0.29774,2.428 -0.37084,1.221 0.57944,2.033 -4.4447,0.745 -3.76186,0.765 0.78982,-3.93 0.86647,-2.078"
+ class="c37187"
+ id="Washington, NC" />
+ <path
+ d="m 891.14075,327.50114 -6.81412,0.765 -0.57944,-2.033 0.37084,-1.221 -0.29774,-2.428 1.4263,-1.022 0.98236,-0.569 0.65074,-0.256 2.07527,-0.433 0.78802,0.353 0.22465,0.201 0.44928,1.212 -0.041,0.298 -0.007,0.651 0.18542,1.262 0.32983,1.293 0.30309,1.519 -0.0464,0.408"
+ class="c37177"
+ id="Tyrrell, NC" />
+ <path
+ class="c37055"
+ d="m 891.14075,327.50114 0.0464,-0.408 -0.30309,-1.519 -0.32983,-1.293 -0.18542,-1.262 0.007,-0.651 0.041,-0.298 0.7702,-1.463 0.13728,-0.152 0.64362,-0.424 0.353,-0.113 0.34588,-0.07 0.19968,0 0.81121,0.224 0.64361,0.596 1.3015,1.834 0.21216,0.344 0.86291,2.748 0.0196,0.105 0.0321,1.606 -0.59548,1.23 -0.36905,0.202 -0.71671,0.232 -0.63292,-0.145 -3.29475,-1.335 m 5.10971,-7.255 0.32983,0.152 0.32805,0.258 0.42789,0.443 0.32805,0.561 0.2496,0.908 -0.0802,0.171 -0.0731,0.01 -0.86113,-0.153 -0.15867,-0.12 -1.34963,-1.968 -0.0981,-0.169 -0.009,-0.05 0.13728,-0.122 0.23356,-0.05 0.27456,0 0.32092,0.119 m 2.15371,16.811 0.33696,-0.185 0.26565,-0.177 1.45482,-1.005 1.55823,-1.156 0.0428,-0.369 -0.0838,-2.332 -0.11054,-1.558 -0.19433,-2.307 -0.23356,-1.045 -0.16759,-0.522 -0.24068,-0.544 -0.28883,-0.364 -0.22821,-0.288 -0.93065,-2.003 0.0678,-0.08 0.10162,0.02 0.0339,0 0.0374,0.05 0.47603,0.58 0.18364,0.297 0.55447,1.059 0.32805,0.764 0.45106,1.012 0.14441,0.99 0.0339,0.296 0.16759,1.406 0.15867,2.058 0.0767,1.679 -0.0107,2.042 -0.0963,0.21 -0.21573,0 -0.29774,-0.03 -0.36192,0.105 -0.52952,0.2 -0.4261,0.266 -1.90589,1.237 -0.15154,-0.305 m -5.40032,-23.281 1.00554,1.616 0.005,0 0.55626,0.838 0.5616,0.731 0.97345,1.141 1.03584,1.397 1.34251,1.81 0.88252,1.364 -0.0856,0.266 -1.81675,-2.024 -3.09328,-3.739 -1.7276,-3.228 0.36014,-0.179"
+ id="Dare, NC" />
+ <path
+ d="m 885.17527,307.89714 4.58376,-0.981 3.24482,6.86 -0.36014,0.179 -1.94511,-4.044 -1.19809,-1.316 -0.14441,-0.06 -1.83101,-0.09 -0.26921,0.118 -0.0588,0.08 -0.0767,0.169 0.0107,0.273 0.32805,0.499 0.19255,0.225 0.17828,0.09 0.86648,0.396 1.15708,1.287 3.23948,4.982 0.30487,0.657 0.016,0.248 -0.11232,0 -0.75593,-0.312 -0.25495,-0.169 -0.48495,-0.49 -0.52059,-0.674 -0.0125,-0.06 -1.85241,-2.596 -1.35854,-1.029 -0.41006,-0.16 -0.24782,-0.02 -0.0891,0.08 -2.1858,-1.196 -3.37498,-2.234 3.42133,-0.722"
+ class="c37053"
+ id="Currituck, NC" />
+ <path
+ class="c37095"
+ d="m 891.14075,327.50114 3.29475,1.335 -0.42611,0.321 -0.79694,1.173 -0.0553,0.114 -0.49742,1.318 0.0713,0.264 -0.009,0.241 -0.10162,0.739 -0.025,0.154 -0.0892,0.167 -0.68284,1.086 -1.14103,1.246 -0.11232,0.07 -4.66043,0.451 -0.16937,0 -1.51187,-0.188 -1.21235,-0.183 -0.31201,-0.362 -0.63648,-0.842 -0.58657,-1.087 -0.0731,-0.273 0,-0.1 0.0571,-0.1 0.20859,-0.121 1.50475,-1.48 -3.29653,-2.451 4.4447,-0.745 6.81412,-0.765 m 7.26342,9.556 0.15154,0.305 -0.34409,0.193 -0.33162,0.265 -0.82547,0.667 -1.16599,1.004 -0.51347,0.451 -0.57943,0.683 -0.27278,0.401 -0.18542,0.169 -0.0553,-0.07 0.0178,-0.09 0.28704,-0.818 0.32983,-0.473 1.166,-1.021 1.76682,-1.416 0.55448,-0.248"
+ id="Hyde, NC" />
+ <path
+ d="m 500.41055,98.850143 9.73982,0.153 0.0802,1.992997 0.0232,2.908 0.66679,2.186 0.19434,0.531 -0.30666,4.998 0.009,1.287 0,0 -7.89812,-0.06 -6.38089,-0.113 0.14442,-7.987 -0.33697,-2.323 0.0553,-3.663997 4.00968,0.09"
+ class="c38017"
+ id="Cass, ND" />
+ <path
+ d="m 510.81716,112.91314 0.68284,1.984 2.20897,5.32 0.61153,4.821 0.0481,0.403 -0.0321,0.465 -0.0392,0.145 -0.29774,0.836 0.21751,1.993 -10.68117,-0.105 -0.33696,-1.391 -0.12837,-1.422 0.0731,-5.149 -0.33875,0 0.1141,-7.955 7.89812,0.06"
+ class="c38077"
+ id="Richland, ND" />
+ <path
+ d="m 430.78234,60.352143 -1.99146,-0.135 -1.38351,1.895 -0.26386,3.954 -10.03756,-0.708 0.14441,-1.968 0.14441,-1.984 -0.83438,-0.06 0.48138,-6.317 14.03118,0.965 -0.29061,4.355"
+ class="c38013"
+ id="Burke, ND" />
+ <path
+ d="m 400.09559,53.675143 16.94618,1.357 -0.48138,6.317 0.83438,0.06 -0.14441,1.984 -17.84653,-1.423 0.69176,-8.292"
+ class="c38023"
+ id="Divide, ND" />
+ <path
+ d="m 399.40383,61.967143 17.84653,1.423 -0.14441,1.968 -0.27278,3.946 0.8843,0.06 -0.41719,5.666 -0.65253,-0.346 -3.53365,-0.481 -1.57605,0.135 -0.19255,0.138 -0.40293,0.419 -0.27991,0.385 -0.009,0.04 0.0321,0.05 0.23356,0.103 0.12837,0.138 0.007,0.1 -0.0321,0.128 -0.11946,0.129 -0.72384,0.265 -1.06081,0.289 -2.24998,0.417 -0.19968,-0.02 -0.81121,-0.715 -0.34766,-0.577 -0.0392,-0.708 -0.27278,-0.523 -1.01267,-0.337 -0.32092,0.07 -0.31378,0.16 -0.48138,0.369 -0.009,0.105 0.0481,0.104 0.32091,0.314 -0.44928,0.659 -1.36568,1.045 -0.98058,0.538 -0.54734,0.113 -1.85596,-1.077 0.71493,-8.936 0.45819,-5.545"
+ class="c38105"
+ id="Williams, ND" />
+ <path
+ d="m 427.14351,66.066143 4.01859,0.225 0.53664,4.026 -0.49742,7.939 0.44215,1.365 0.0963,2.676 -8.00331,-0.513 -0.13728,2.04 -3.88844,-1.767 -0.0642,-0.07 -0.0321,-0.113 -0.066,-0.674 0.041,-0.322 0.15332,-0.603 0.0553,-0.112 0.55448,-0.667 0.33874,-0.209 0.25673,-0.233 0.23178,-0.314 0.20146,-0.408 0.009,-0.121 -0.0499,-0.07 -2.21611,-2.167 -1.15887,-0.854 -0.66501,-0.09 0.41719,-5.666 -0.8843,-0.06 0.27278,-3.946 10.03756,0.708"
+ class="c38061"
+ id="Mountrail, ND" />
+ <path
+ d="m 417.30028,75.025143 0.66501,0.09 1.15887,0.854 2.21611,2.168 0.0499,0.07 -0.009,0.121 -0.20146,0.408 -0.23178,0.314 -0.25673,0.233 -0.33874,0.209 -0.55448,0.667 -0.0553,0.112 -0.15332,0.603 -0.041,0.322 0.066,0.674 0.0321,0.113 0.0642,0.07 -0.2496,3.407 -7.12791,-0.531 -0.57765,7.876 -8.89652,-0.7 -5.92983,-0.514 0.13728,-1.535 1.16422,-13.612 1.85596,1.077 0.54734,-0.113 0.98058,-0.538 1.36568,-1.045 0.44928,-0.659 -0.32091,-0.314 -0.0481,-0.104 0.009,-0.105 0.48138,-0.369 0.31378,-0.16 0.32092,-0.06 1.01267,0.336 0.27278,0.523 0.0392,0.708 0.34766,0.577 0.81121,0.715 0.19968,0.02 2.24998,-0.417 1.06081,-0.289 0.72384,-0.265 0.11946,-0.129 0.0321,-0.128 -0.007,-0.1 -0.12837,-0.138 -0.23356,-0.103 -0.0321,-0.05 0.009,-0.04 0.27991,-0.385 0.40293,-0.419 0.19255,-0.138 1.57605,-0.135 3.53365,0.481 0.65253,0.346"
+ class="c38053"
+ id="McKenzie, ND" />
+ <path
+ d="m 423.59916,83.824143 0.51347,-0.763 0.11232,-0.106 0.1141,-0.06 0.22464,0.04 0.85043,0.378 0.16224,0.103 0.0392,0.122 -0.007,0.144 -0.0642,0.168 -0.26564,3.175 0.0321,0.112 0.0642,0.1 0.76485,0.948 -0.37084,5.625 0.95562,0.06 -0.47424,7.256997 -6.00114,-0.402 -0.041,0.658 -8.0033,-0.545 0.5937,-7.947997 -1.04298,-0.08 0.57765,-7.876 7.12791,0.531 0.2496,-3.407 3.88844,1.767"
+ class="c38025"
+ id="Dunn, ND" />
+ <path
+ d="m 426.25029,101.12514 0.71671,0.715 -0.37797,6.019 -0.13728,1.977 -13.17897,-0.877 -4.81197,-0.361 0.61866,-7.996 3.12537,0.234 8.0033,0.545 0.041,-0.658 6.00114,0.402"
+ class="c38089"
+ id="Stark, ND" />
+ <path
+ d="m 402.85904,92.109143 -0.65075,7.963997 0.90926,0.07 -0.6347,7.992 -3.03801,-0.247 -0.16937,2.032 -3.8724,-0.328 0.19255,-2.3 1.33359,-15.699997 5.92983,0.514"
+ class="c38033"
+ id="Golden Valley, ND" />
+ <path
+ d="m 402.85904,92.109143 8.89652,0.7 1.04298,0.08 -0.5937,7.947997 -3.12537,-0.234 -0.61866,7.996 -5.97796,-0.46 0.6347,-7.992 -0.90926,-0.07 0.65075,-7.963997"
+ class="c38007"
+ id="Billings, ND" />
+ <path
+ d="m 411.61828,116.86614 -0.57052,7.675 -16.80177,-1.334 0.64183,-7.657 16.73046,1.316"
+ class="c38011"
+ id="Bowman, ND" />
+ <path
+ d="m 402.48285,108.13814 5.97796,0.46 4.81197,0.361 -0.52951,7.973 -1.12499,-0.07 -16.73046,-1.316 0.51525,-5.955 3.8724,0.328 0.16937,-2.032 3.03801,0.247"
+ class="c38087"
+ id="Slope, ND" />
+ <path
+ d="m 426.45175,109.83614 0.72385,0.06 -0.0321,5.361 0.36905,2.772 -0.11232,1.655 -7.97121,-0.538 0.12837,-1.767 -6.81413,-0.442 0.52951,-7.973 13.17897,0.877"
+ class="c38041"
+ id="Hettinger, ND" />
+ <path
+ d="m 411.61828,116.86614 1.12499,0.07 6.81413,0.442 -0.12837,1.767 7.97121,0.538 -0.3851,5.971 -0.0321,0 -15.07595,-1.045 -0.85934,-0.06 0.57052,-7.675"
+ class="c38001"
+ id="Adams, ND" />
+ <path
+ d="m 426.13975,88.188143 0.3441,0.177 4.45182,1.718 1.0198,0.305 0.22464,-0.04 0.36371,-0.184 0.77911,-0.483 0.54556,-0.176 3.99363,-0.337 0.28169,0 0.12837,0.06 0.86826,0.898 -0.0321,0.138 -0.13015,0.144 -0.58478,0.298 -0.1462,0.128 -0.27278,0.312 -0.0553,0.17 0.0232,0.16 1.24623,3.471 1.38172,1.205 -0.041,0.539 -7.96229,-0.465 -0.36193,5.937997 -5.23807,-0.322 -0.71671,-0.715 0.47424,-7.256997 -0.95562,-0.06 0.37084,-5.625"
+ class="c38057"
+ id="Mercer, ND" />
+ <path
+ d="m 426.58903,107.85914 5.98688,0.361 -0.12123,1.992 6.65367,0.403 -0.33697,5.923 3.99185,0.215 0.25852,2.018 -1.52792,1.527 -1.63133,1.271 -1.50118,1.059 -3.42489,1.558 -1.2694,0.378 -0.0464,0 -1.5921,-0.33 -2.38013,-0.836 -1.05011,-0.353 -1.42273,0.121 0.22464,-3.48 0.11232,-1.654 -0.36905,-2.773 0.0321,-5.361 -0.72385,-0.06 0.13728,-1.977"
+ class="c38037"
+ id="Grant, ND" />
+ <path
+ d="m 443.02175,118.77114 0.18363,-0.82 1.64024,-1.519 0.67393,-0.224 0.22464,0.201 0.62757,0.129 1.62419,0.103 0.40115,-0.127 1.7276,-0.677 0.13728,0.274 0.30487,0.804 0.11232,0.427 0.009,0.69 -0.2496,2.098 -0.066,0.216 -0.24782,0.506 -0.29774,0.305 -0.44215,0.66 -0.19255,0.458 -0.007,0.265 0.16046,1.43 0.0642,0.232 1.43878,2.79 -3.64776,-0.185 -0.36192,-0.02 -0.13015,0 -1.92728,-0.1 -1.45482,-0.08 -4.66042,-0.256 -1.63846,-0.09 -0.93244,-0.06 -2.0093,-0.112 -2.42827,-0.153 -2.30525,-0.136 -1.93619,-0.121 -0.25852,-0.02 -0.0392,0 -0.10341,0 0.16046,-2.491 1.42273,-0.121 1.05011,0.353 2.38013,0.836 1.5921,0.33 0.0464,0 1.2694,-0.378 3.42489,-1.558 1.50118,-1.059 1.63133,-1.272 1.52792,-1.526"
+ class="c38085"
+ id="Sioux, ND" />
+ <path
+ d="m 426.967,101.84014 5.23807,0.322 13.07379,0.699 0.025,0.426 0.36192,1.501 0.96275,3.545 0.69889,1.381 0.78089,0.772 1.10895,0.562 0.92353,0.756 0.30665,0.538 0.44037,0.981 -0.49029,0.74 -0.14441,0.289 -0.24069,1.02 0.0161,0.201 0.0963,0.264 -1.7276,0.677 -0.40115,0.127 -1.62419,-0.103 -0.62757,-0.129 -0.22464,-0.201 -0.67393,0.224 -1.64024,1.519 -0.18363,0.82 -0.25852,-2.018 -3.99185,-0.215 0.33697,-5.923 -6.65367,-0.403 0.12123,-1.992 -5.98688,-0.361 0.37797,-6.019"
+ class="c38059"
+ id="Morton, ND" />
+ <path
+ d="m 445.02926,98.867143 0.2496,3.993997 -13.07379,-0.699 0.36193,-5.938997 7.96229,0.466 0.041,-0.539 2.15371,-0.529 0.55447,-0.05 0.44928,0.119 0.36193,0.154 0.52238,0.401 0.27278,0.355 0.0571,0.128 0.0874,2.138"
+ class="c38065"
+ id="Oliver, ND" />
+ <path
+ d="m 430.78234,60.352143 0.29061,-4.355 8.01757,0.474 -0.36906,6.342 0.46712,3.984 6.03501,0.353 -0.10519,1.97 -12.06111,-0.707 0.353,-5.923 -2.7474,-0.17 0.11945,-1.968"
+ class="c38075"
+ id="Renville, ND" />
+ <path
+ d="m 427.14351,66.066143 0.26386,-3.954 1.38351,-1.895 1.99146,0.135 -0.11945,1.968 2.7474,0.17 -0.353,5.923 12.06111,0.707 -0.10519,1.983 0.36192,2.082 0.009,4.122 0.40115,1.801 0.19254,0 -0.21572,3.96 -14.02227,-0.779 -0.0963,-2.677 -0.44215,-1.365 0.49742,-7.939 -0.53664,-4.026 -4.01859,-0.225"
+ class="c38101"
+ id="Ward, ND" />
+ <path
+ d="m 445.76202,83.077143 6.01005,0.329 -0.18363,3.955 -1.36746,-0.07 -0.0802,1.166 -0.32805,6.743 -1.19096,-0.07 -0.20146,3.89 -3.39102,-0.161 -0.0874,-2.137 -0.0571,-0.129 -0.27278,-0.354 -0.52238,-0.402 -0.36193,-0.153 -0.44928,-0.119 -0.55447,0.05 -2.15371,0.529 -1.38172,-1.205 -1.24623,-3.471 -0.0232,-0.161 0.0553,-0.169 0.27278,-0.312 0.1462,-0.128 0.58478,-0.298 0.13015,-0.145 0.0321,-0.137 -0.86826,-0.898 -0.12837,-0.06 -0.28169,0 -3.99363,0.336 -0.54556,0.177 -0.77911,0.483 -0.36371,0.184 -0.22464,0.04 -1.0198,-0.305 -4.45182,-1.719 -0.3441,-0.176 -0.76485,-0.949 -0.0642,-0.1 -0.0321,-0.112 0.26564,-3.175 0.0642,-0.168 0.007,-0.144 -0.0392,-0.122 -0.16224,-0.103 -0.85043,-0.378 -0.22464,-0.04 -0.1141,0.06 -0.11232,0.105 -0.51347,0.763 0.13728,-2.039 8.00331,0.513 14.02227,0.779"
+ class="c38055"
+ id="McLean, ND" />
+ <path
+ d="m 439.09052,56.471143 20.10721,1.029 -0.2817,6.364 0.57052,0.03 -0.17829,3.944 -2.01642,-0.07 -2.00038,-0.09 0.0891,-1.994 -6.01184,-0.305 -4.04176,-0.201 -0.10341,1.977 -6.03501,-0.353 -0.46712,-3.984 0.36906,-6.342"
+ class="c38009"
+ id="Bottineau, ND" />
+ <path
+ d="m 457.29184,67.760143 -0.16759,3.938 0.27991,2.676 -0.0321,5.312 0.35479,1.342 0.0784,2.651 -6.03323,-0.273 -6.01005,-0.329 0.21572,-3.96 -0.19254,0 -0.40115,-1.801 -0.009,-4.122 -0.36192,-2.082 0.21038,-3.953 0.10341,-1.977 4.04176,0.201 6.01184,0.305 -0.0891,1.994 2.00038,0.09"
+ class="c38049"
+ id="McHenry, ND" />
+ <path
+ d="m 457.8053,83.679143 2.0093,0.1 -0.17651,3.961 0.57052,0.03 -0.33696,7.907 -1.26227,-0.05 -8.79668,-0.417 0.32805,-6.743 0.0802,-1.166 1.36746,0.07 0.18363,-3.954 6.03323,0.272"
+ class="c38083"
+ id="Sheridan, ND" />
+ <path
+ d="m 458.60938,95.621143 -0.36014,7.890997 0.62579,0.02 -0.44216,7.964 -9.21565,-0.451 -1.10895,-0.562 -0.78089,-0.772 -0.69889,-1.381 -0.96275,-3.545 -0.36192,-1.501 -0.025,-0.426 -0.2496,-3.992997 3.39102,0.16 0.20146,-3.89 1.19096,0.07 8.79668,0.417"
+ class="c38015"
+ id="Burleigh, ND" />
+ <path
+ d="m 458.43287,111.49914 2.62795,0.12 0.26565,8.044 -0.35301,7.82 -9.92523,-0.484 -0.19968,0 -1.43878,-2.79 -0.0642,-0.232 -0.16046,-1.429 0.007,-0.266 0.19255,-0.458 0.44215,-0.66 0.29774,-0.305 0.24782,-0.506 0.066,-0.216 0.2496,-2.098 -0.009,-0.69 -0.11232,-0.426 -0.30487,-0.804 -0.13728,-0.275 -0.0963,-0.264 -0.0161,-0.201 0.24069,-1.02 0.14441,-0.289 0.49029,-0.74 -0.44037,-0.98 -0.30665,-0.539 -0.92353,-0.756 9.21565,0.451"
+ class="c38029"
+ id="Emmons, ND" />
+ <path
+ d="m 461.32647,119.66314 13.4268,0.481 0.54734,0.03 -0.29061,7.868 -11.43355,-0.435 -2.60299,-0.119 0.35301,-7.82"
+ class="c38051"
+ id="McIntosh, ND" />
+ <path
+ d="m 461.06082,111.61914 7.4007,0.313 6.55739,0.257 -0.26564,7.955 -13.4268,-0.481 -0.26565,-8.044"
+ class="c38047"
+ id="Logan, ND" />
+ <path
+ d="m 458.60938,95.621143 1.26227,0.05 8.67901,0.346 -0.29774,7.913997 0.54556,0.02 -0.33696,7.987 -7.4007,-0.313 -2.62795,-0.12 0.44216,-7.964 -0.62579,-0.02 0.36014,-7.890997"
+ class="c38043"
+ id="Kidder, ND" />
+ <path
+ d="m 459.8146,83.775143 4.00967,0.163 8.01222,0.312 -0.12837,3.97 0.48138,0.02 -0.0642,1.945 -0.2086,5.946 -3.36606,-0.119 -8.67901,-0.346 0.33696,-7.907 -0.57052,-0.03 0.17651,-3.962"
+ class="c38103"
+ id="Wells, ND" />
+ <path
+ d="m 459.30826,67.833143 10.06252,0.417 -0.13728,3.955 -5.47341,-0.216 -0.34409,7.962 0.5616,0.03 -0.15333,3.962 -4.00967,-0.162 -2.0093,-0.1 -0.0784,-2.651 -0.35479,-1.342 0.0321,-5.312 -0.27991,-2.676 0.16759,-3.938 2.01642,0.07"
+ class="c38069"
+ id="Pierce, ND" />
+ <path
+ d="m 459.30826,67.833143 0.17829,-3.944 -0.57052,-0.03 0.2817,-6.364 10.05895,0.402 -0.24782,6.388 0.51347,0.01 -0.15155,3.945 -10.06252,-0.417"
+ class="c38079"
+ id="Rolette, ND" />
+ <path
+ d="m 469.25668,57.902143 8.05144,0.273 -0.15333,4.09 -0.0464,2.305 0.44928,0.02 -0.11945,3.953 -0.13728,3.952 -3.54435,-0.119 -4.52314,-0.169 0.13728,-3.955 0.15155,-3.945 -0.51347,-0.01 0.24782,-6.388"
+ class="c38095"
+ id="Towner, ND" />
+ <path
+ d="m 469.2335,72.205143 4.52314,0.169 -0.16046,4.901 0.11232,0.153 3.18243,3.575 0.54734,-0.119 2.997,0.328 1.92728,1.784 1.54397,0.07 -0.0321,1.566 -12.03794,-0.385 -8.01222,-0.312 0.15333,-3.962 -0.5616,-0.03 0.34409,-7.962 5.47341,0.216"
+ class="c38005"
+ id="Benson, ND" />
+ <path
+ d="m 471.83649,84.250143 12.03794,0.385 0.28882,3.977 -0.0481,1.946 -11.9898,-0.37 0.0642,-1.945 -0.48138,-0.02 0.12837,-3.97"
+ class="c38027"
+ id="Eddy, ND" />
+ <path
+ d="m 472.12532,90.188143 11.9898,0.37 -0.14442,5.954 -12.05398,-0.378 0.2086,-5.946"
+ class="c38031"
+ id="Foster, ND" />
+ <path
+ d="m 468.55066,96.015143 3.36606,0.119 12.05398,0.378 0.44929,1.978 -0.15155,5.969997 0.44037,0 -0.19968,7.979 -9.49022,-0.257 -6.55739,-0.257 0.33696,-7.987 -0.54556,-0.02 0.29774,-7.913997"
+ class="c38093"
+ id="Stutsman, ND" />
+ <path
+ d="m 484.50913,112.44614 6.43616,0.162 -0.18542,7.978 -15.45926,-0.417 -0.54734,-0.03 0.26564,-7.955 9.49022,0.257"
+ class="c38045"
+ id="LaMoure, ND" />
+ <path
+ d="m 475.30061,120.16914 15.45926,0.417 0.4582,0 -0.20146,7.947 -11.49773,-0.344 -4.50888,-0.161 0.29061,-7.868"
+ class="c38021"
+ id="Dickey, ND" />
+ <path
+ d="m 491.21807,120.59514 11.58687,0.209 0.33875,0 -0.0731,5.149 0.12837,1.423 0.33696,1.39 -12.04507,-0.217 -0.47424,-0.02 0.20146,-7.947"
+ class="c38081"
+ id="Sargent, ND" />
+ <path
+ d="m 490.94529,112.60814 5.59286,0.128 6.38089,0.113 -0.1141,7.955 -11.58687,-0.209 -0.4582,0 0.18542,-7.978"
+ class="c38073"
+ id="Ransom, ND" />
+ <path
+ d="m 492.3912,98.675143 4.00967,0.09 -0.0553,3.663997 0.33697,2.323 -0.14442,7.987 -5.59286,-0.128 -6.43616,-0.162 0.19968,-7.978 -0.44037,0 0.15155,-5.970997 7.97121,0.185"
+ class="c38003"
+ id="Barnes, ND" />
+ <path
+ d="m 492.22361,88.807143 0.16759,9.868 -7.97121,-0.185 -0.44929,-1.978 0.19255,-7.9 8.06036,0.195"
+ class="c38039"
+ id="Griggs, ND" />
+ <path
+ d="m 492.22361,88.807143 1.59923,0.03 6.40229,0.121 0.18542,9.89 -4.00968,-0.09 -4.00967,-0.09 -0.16759,-9.868"
+ class="c38091"
+ id="Steele, ND" />
+ <path
+ d="m 487.69868,76.778143 6.03502,0.135 -0.0802,3.971 0.32805,0 0,0.03 -0.15868,7.914 -1.59923,-0.03 -8.06036,-0.194 -0.28882,-3.978 0.0321,-1.565 0.0713,-2.42 1.59924,0.04 0.11232,-3.954 2.00929,0.04"
+ class="c38063"
+ id="Nelson, ND" />
+ <path
+ d="m 487.49722,68.830143 -0.0713,2.669 0.37796,1.301 -0.10519,3.978 -2.00929,-0.04 -0.11232,3.954 -1.59924,-0.04 -0.0713,2.419 -1.54397,-0.07 -1.92728,-1.784 -2.997,-0.328 -0.54734,0.119 -3.18243,-3.575 -0.11232,-0.153 0.16046,-4.901 3.54435,0.12 0.13728,-3.953 10.05895,0.289"
+ class="c38071"
+ id="Ramsey, ND" />
+ <path
+ d="m 477.30812,58.175143 16.07257,0.401 -0.12123,6.421 0.34587,0 -0.0802,3.977 -6.02788,-0.153 -10.05895,-0.289 0.11945,-3.953 -0.44928,-0.02 0.0464,-2.306 0.15333,-4.09"
+ class="c38019"
+ id="Cavalier, ND" />
+ <path
+ d="m 493.38069,58.576143 11.04845,0.177 -0.0731,0.07 -0.0713,0.337 -0.0178,0.339 0.0892,0.481 1.10894,3.623 0.29774,0.884 0.67571,1.535 -1.12677,3.126 0.0731,0.04 -11.85965,-0.209 0.0802,-3.978 -0.34587,0 0.12123,-6.42"
+ class="c38067"
+ id="Pembina, ND" />
+ <path
+ d="m 487.49722,68.830143 6.02788,0.153 11.85965,0.209 0.12124,0.06 0.36014,0.442 0.0981,5.481 -0.50634,1.952 -11.72415,-0.218 -6.03502,-0.135 0.10519,-3.978 -0.37796,-1.301 0.0713,-2.669"
+ class="c38099"
+ id="Walsh, ND" />
+ <path
+ d="m 505.45785,77.131143 -0.009,0.467 0,0.06 0.36192,1.398 1.49583,5.391 2.02355,4.622 -9.10511,-0.104 -6.40229,-0.121 0.15868,-7.914 0,-0.03 -0.32805,0 0.0802,-3.971 11.72415,0.218"
+ class="c38035"
+ id="Grand Forks, ND" />
+ <path
+ d="m 500.22513,88.960143 9.10511,0.103 0.53843,3.962 0.2817,5.978 -9.73982,-0.153 -0.18542,-9.89"
+ class="c38097"
+ id="Traill, ND" />
+ <path
+ d="m 397.53895,191.53414 8.42941,0.651 3.48729,0.265 -0.36014,4.948 0.22465,1.344 -0.46712,6.643 -11.32122,-0.786 -0.59548,-0.05 0.61866,-8.013 -0.14441,-0.898 -0.0392,-1.771 0.16759,-2.335"
+ class="c31045"
+ id="Dawes, NE" />
+ <path
+ d="m 397.53895,191.53414 -0.16759,2.335 0.0392,1.771 0.14441,0.898 -0.61866,8.013 0.59548,0.05 -0.61866,7.987 0.71494,0.06 -0.15333,2.002 -11.03953,-0.854 1.94511,-23.013 9.1586,0.749"
+ class="c31165"
+ id="Sioux, NE" />
+ <path
+ d="m 523.07974,259.89114 7.98726,-0.03 4.29849,6.044 -0.55447,0 -7.84284,0.03 -3.89736,0 0.009,-6.042"
+ class="c31147"
+ id="Richardson, NE" />
+ <path
+ d="m 515.17984,259.85214 6.91932,0.02 0.98058,0.02 -0.009,6.042 -3.99363,0 -3.92766,-0.02 0.0303,-6.051"
+ class="c31133"
+ id="Pawnee, NE" />
+ <path
+ d="m 522.09916,253.82414 6.2026,-0.02 0.22643,-0.491 0.65075,0.578 -0.37797,0.676 -0.19968,0.185 0.0963,0.408 1.13212,2.846 1.21414,1.182 0.0463,0.119 -0.005,0.04 0,0.03 -0.0178,0.418 0,0.06 -7.98726,0.03 -0.98058,-0.02 0,-6.051"
+ class="c31127"
+ id="Nemaha, NE" />
+ <path
+ d="m 522.09916,253.82414 0,6.051 -6.91932,-0.02 0.025,-6.037 6.89436,0"
+ class="c31097"
+ id="Johnson, NE" />
+ <path
+ d="m 525.779,247.78914 1.5511,4.598 0.97166,1.414 -6.2026,0.02 -6.89436,0 0.0232,-6.049 10.55102,0.02"
+ class="c31131"
+ id="Otoe, NE" />
+ <path
+ d="m 517.75965,241.73114 0.12837,0.199 0.2496,0.227 1.26941,0.724 0.15332,0.02 0.46533,-0.177 0.51347,-0.256 0.26565,-0.209 0.17828,-0.241 0.3851,-0.363 0.16938,-0.111 0.75415,-0.282 0.38688,0 2.36052,0.147 0.13015,0.02 0.3851,0.275 0.76485,3.358 -0.54021,2.732 -10.55102,-0.02 0.0321,-5.376 2.49958,-0.659"
+ class="c31025"
+ id="Cass, NE" />
+ <path
+ d="m 517.62416,238.37214 6.95854,-0.02 1.20522,0.724 -0.23356,2.619 -0.3851,-0.275 -0.13015,-0.02 -2.36052,-0.147 -0.38688,0 -0.75415,0.282 -0.16938,0.111 -0.3851,0.363 -0.17828,0.241 -0.26565,0.209 -0.51347,0.256 -0.46533,0.177 -0.15332,-0.02 -1.26941,-0.724 -0.2496,-0.227 -0.12837,-0.199 -0.13549,-3.359"
+ class="c31153"
+ id="Sarpy, NE" />
+ <path
+ d="m 515.17984,233.65614 2.4354,0.02 6.71072,0 0.25674,4.677 -6.95854,0.02 -2.44432,-4.716"
+ class="c31055"
+ id="Douglas, NE" />
+ <path
+ d="m 515.663,226.93814 5.51976,0.04 2.39618,4.065 0.74702,2.635 -6.71072,0 -1.64737,-2.066 -0.16046,-0.417 -0.15333,-0.555 0.009,-3.696"
+ class="c31177"
+ id="Washington, NE" />
+ <path
+ d="m 518.619,218.54114 2.25889,4.195 0.30487,4.243 -5.51976,-0.04 -1.88093,-1.358 0.0392,-6.34 4.79771,-0.699"
+ class="c31021"
+ id="Burt, NE" />
+ <path
+ d="m 510.94553,213.15814 6.47716,0.07 -0.21038,1.422 1.40669,3.889 -4.79771,0.699 -4.56236,-1.753 0.0624,-4.026 1.6242,-0.303"
+ class="c31173"
+ id="Thurston, NE" />
+ <path
+ d="m 512.52158,207.47514 3.24661,0.829 0.57765,0.04 0.22464,0.09 0.17829,0.248 0.0713,0.265 0.007,0.355 -0.11945,0.319 0.19968,2.646 0.51525,0.965 -6.47716,-0.07 1.57605,-5.683"
+ class="c31043"
+ id="Dakota, NE" />
+ <path
+ d="m 506.16387,202.00514 3.52117,1.315 1.37281,0.869 0.18541,0.419 0.0963,0.385 -0.0642,0.271 -0.009,0.21 0.0499,0.209 1.20522,1.792 -1.57605,5.683 -1.6242,0.303 -3.28583,-2.039 0.12837,-9.417"
+ class="c31051"
+ id="Dixon, NE" />
+ <path
+ d="m 500.11281,211.33314 5.92269,0.09 3.28583,2.039 -0.0624,4.026 -3.3197,-0.04 -5.92983,-0.08 0.10341,-6.033"
+ class="c31179"
+ id="Wayne, NE" />
+ <path
+ d="m 492.09346,217.26314 0.15333,-8.05 5.90664,0.09 1.95938,2.033 -0.10341,6.033 -7.91594,-0.103"
+ class="c31139"
+ id="Pierce, NE" />
+ <path
+ d="m 498.30498,199.68214 1.04476,-0.138 1.5921,0.06 1.19631,0.144 1.94511,1.656 2.08061,0.596 -0.12837,9.417 -5.92269,-0.09 -1.95938,-2.033 0.15155,-9.618"
+ class="c31027"
+ id="Cedar, NE" />
+ <path
+ d="m 484.46991,198.78814 2.36052,1.07 1.83279,1.582 0.36192,0.16 0.29774,0.05 0.27991,-0.01 0.85221,-0.128 0.22464,-0.14 0.47425,-0.431 0.353,-0.506 1.93798,-0.715 1.46909,0.191 3.39102,-0.223 -0.15155,9.618 -5.90664,-0.09 -7.86603,-0.153 0.0963,-7.492 -0.007,-2.78"
+ class="c31107"
+ id="Knox, NE" />
+ <path
+ d="m 513.78207,225.58014 1.88093,1.358 -0.009,3.696 0.15333,0.555 0.16046,0.417 1.64737,2.066 -2.4354,-0.02 -7.44883,-1.448 0,-0.02 0.057,-6.671 5.99401,0.07"
+ class="c31053"
+ id="Dodge, NE" />
+ <path
+ d="m 505.84295,225.49014 1.94511,0.02 -0.057,6.671 -0.24782,0 -0.23355,0.06 -2.57269,1.245 -1.79891,0.41 -1.13391,0 0.13015,-8.448 3.96867,0.05"
+ class="c31037"
+ id="Colfax, NE" />
+ <path
+ d="m 505.93923,217.44814 3.3197,0.04 4.56236,1.753 -0.0392,6.34 -5.99401,-0.07 -1.94511,-0.02 0.0963,-8.042"
+ class="c31039"
+ id="Cuming, NE" />
+ <path
+ d="m 505.93923,217.44814 -0.0963,8.042 -3.96867,-0.05 -1.9772,-0.03 0.11232,-8.046 5.92983,0.08"
+ class="c31167"
+ id="Stanton, NE" />
+ <path
+ d="m 492.09346,217.26314 7.91594,0.103 -0.11232,8.046 -7.89811,-0.114 0.0392,-4.028 0.0553,-4.007"
+ class="c31119"
+ id="Madison, NE" />
+ <path
+ d="m 492.09346,217.26314 -0.0553,4.007 -7.87494,-0.135 0.0161,-4.024 0.20146,-8.051 7.86603,0.153 -0.15333,8.05"
+ class="c31003"
+ id="Antelope, NE" />
+ <path
+ d="m 484.16325,221.13514 7.87494,0.135 -0.0392,4.028 -0.082,4.997 -0.9467,0 -2.87755,0.637 -0.81121,0.328 -3.28761,-0.07 0.0731,-6.034 0.0963,-4.011"
+ class="c31011"
+ id="Boone, NE" />
+ <path
+ d="m 499.89708,225.41214 1.9772,0.03 -0.13015,8.448 -1.95937,-0.419 -3.97937,1.374 -1.78287,-1.471 -2.10557,-3.079 0.082,-4.997 7.89811,0.114"
+ class="c31141"
+ id="Platte, NE" />
+ <path
+ d="m 507.73101,232.20814 7.44883,1.448 2.44432,4.716 0.13549,3.359 -2.49958,0.659 0.009,-0.668 -7.67525,-0.08 0.13728,-9.433"
+ class="c31155"
+ id="Saunders, NE" />
+ <path
+ d="m 507.55451,241.64114 -0.11946,8.063 -7.88385,-0.107 0.11232,-8.066 7.89099,0.11"
+ class="c31159"
+ id="Seward, NE" />
+ <path
+ d="m 499.66352,241.53114 0.12124,-8.06 1.95937,0.419 1.13391,0 1.79891,-0.41 2.57269,-1.245 0.23355,-0.06 0.24782,0 0,0.02 -0.13728,9.433 -0.0392,0 -7.89099,-0.11"
+ class="c31023"
+ id="Butler, NE" />
+ <path
+ d="m 495.80539,234.84514 3.97937,-1.374 -0.12124,8.06 -7.89811,-0.128 0.0232,-2.944 4.0168,-3.614"
+ class="c31143"
+ id="Polk, NE" />
+ <path
+ d="m 499.66352,241.53114 -0.11232,8.066 -7.90702,-0.145 -0.025,0 0.14619,-8.049 7.89811,0.128"
+ class="c31185"
+ id="York, NE" />
+ <path
+ d="m 491.76541,241.40314 -0.14619,8.049 -7.83394,-0.16 -0.0802,0 0.0963,-4.026 0.85221,-1.004 1.81496,-1.809 2.14658,-1.714 0.65075,-0.452 0.0963,0.149 0.025,0 0.37619,-0.135 0.89322,-0.426 0.21572,-0.17 0.27456,-0.31 0.49743,-0.668 0.14441,-0.268 -0.0232,2.944"
+ class="c31081"
+ id="Hamilton, NE" />
+ <path
+ d="m 483.99388,231.18014 3.28761,0.07 0.81121,-0.328 2.87755,-0.637 0.9467,0 2.10557,3.079 -0.0642,1.985 -2.45145,-0.02 -2.61903,0.272 -1.51901,0.321 -0.73989,0.309 -2.12696,-0.04 -0.35479,0 0.0963,-2.997 -0.21751,-0.01 -0.0874,0 0.0553,-2.007"
+ class="c31125"
+ id="Nance, NE" />
+ <path
+ d="m 484.02597,233.18714 0.21751,0.01 -0.0963,2.997 0.35479,0 2.12696,0.04 0.73989,-0.309 1.51901,-0.321 2.61903,-0.272 2.45145,0.02 0.0642,-1.985 1.78287,1.471 -4.0168,3.614 -0.14441,0.267 -0.49743,0.669 -0.27456,0.31 -0.21572,0.17 -0.89322,0.426 -0.37619,0.135 -0.025,0 -0.0963,-0.15 -0.65075,0.453 -2.14658,1.714 -1.81496,1.809 -0.85221,1.004 0.025,-4.033 0.19968,-8.046"
+ class="c31121"
+ id="Merrick, NE" />
+ <path
+ d="m 476.32932,241.03214 7.49697,0.201 -0.025,4.033 -0.0963,4.026 -7.60038,-0.216 0.22464,-8.044"
+ class="c31079"
+ id="Hall, NE" />
+ <path
+ d="m 476.176,232.97114 7.76261,0.216 0.0874,0 -0.19968,8.046 -7.49697,-0.201 -0.45819,-0.02 0.30487,-8.045"
+ class="c31093"
+ id="Howard, NE" />
+ <path
+ d="m 476.04763,232.97114 0.12837,0 -0.30487,8.045 -7.91595,-0.259 0.34588,-8.026 7.74657,0.24"
+ class="c31163"
+ id="Sherman, NE" />
+ <path
+ d="m 468.69507,195.63314 12.67086,0.371 3.10398,2.784 0.007,2.78 -2.65113,-0.185 -1.80961,-0.337 -2.7474,-0.931 -1.5101,-0.522 -1.70442,-0.979 -0.41006,-0.419 -0.20146,-0.07 -0.26387,0 -0.19255,0.05 -2.90073,1.205 -1.45482,0.622 -0.12837,0.104 0.19255,-4.466"
+ class="c31015"
+ id="Boyd, NE" />
+ <path
+ d="m 468.50252,200.09914 0.12837,-0.104 1.45482,-0.622 2.90073,-1.205 0.19255,-0.05 0.26387,0 0.20146,0.07 0.41006,0.419 1.70442,0.978 1.5101,0.523 2.7474,0.931 1.80961,0.336 2.65113,0.186 -0.0963,7.492 -0.20146,8.051 -7.8268,-0.203 -7.84284,-0.234 -0.19969,0 0.25674,-7.367 0.0713,-7.939 -0.1355,-1.262"
+ class="c31089"
+ id="Holt, NE" />
+ <path
+ d="m 468.42229,224.71114 7.72875,0.25 0.12123,0 -0.22464,8.01 -7.74657,-0.24 0.12123,-8.02"
+ class="c31175"
+ id="Valley, NE" />
+ <path
+ d="m 484.06698,225.14614 -0.0731,6.034 -0.0553,2.007 -7.76261,-0.216 -0.12837,0 0.22464,-8.01 7.79471,0.185"
+ class="c31077"
+ id="Greeley, NE" />
+ <path
+ d="m 484.1793,217.11114 -0.0161,4.024 -0.0963,4.011 -7.79471,-0.185 -0.12123,0 0.20146,-8.053 7.8268,0.203"
+ class="c31183"
+ id="Wheeler, NE" />
+ <path
+ d="m 468.25292,224.70214 0.25674,-8.028 7.84284,0.234 -0.20146,8.053 -7.72875,-0.25 -0.16937,0"
+ class="c31071"
+ id="Garfield, NE" />
+ <path
+ d="m 468.30997,216.66714 0.19969,0 -0.25674,8.028 -7.9302,-0.279 0.30487,-7.995 0.41719,0.02 7.26519,0.217"
+ class="c31115"
+ id="Loup, NE" />
+ <path
+ d="m 468.30997,216.66714 -7.26519,-0.217 0.28882,-8.059 -0.20859,0 0.24247,-6.853 1.26762,0.271 0.93244,0.105 0.33874,-0.05 0.5937,-0.219 3.68876,-1.339 0.14441,-0.07 0.16937,-0.144 0.1355,1.262 -0.0713,7.939 -0.25674,7.367"
+ class="c31149"
+ id="Rock, NE" />
+ <path
+ d="m 452.88102,194.99814 11.12867,0.467 4.68538,0.168 -0.19255,4.466 -0.16937,0.144 -0.14441,0.07 -3.68876,1.339 -0.5937,0.219 -0.33874,0.05 -0.93244,-0.105 -1.26762,-0.271 -0.1462,0.06 -0.312,0 -1.23909,-0.218 -4.61942,-1.349 -0.96453,-0.392 -0.32092,-0.186 -1.04654,-0.932 0.16224,-3.518"
+ class="c31103"
+ id="Keya Paha, NE" />
+ <path
+ d="m 461.36748,201.53814 -0.24247,6.853 0.20859,0 -0.28882,8.059 -0.41719,-0.02 -8.15663,-0.331 0.35301,-8.027 -0.10519,-9.554 1.04654,0.932 0.32092,0.186 0.96453,0.392 4.61942,1.349 1.23909,0.218 0.312,0 0.1462,-0.06"
+ class="c31017"
+ id="Brown, NE" />
+ <path
+ d="m 450.77545,216.01614 1.69551,0.08 8.15663,0.331 -0.30487,7.995 -9.6275,-0.387 -0.24782,-0.02 0.32805,-8.004"
+ class="c31009"
+ id="Blaine, NE" />
+ <path
+ d="m 460.32272,224.42314 7.9302,0.279 0.16937,0 -0.12123,8.02 -0.34588,8.026 -3.76007,-0.117 -13.75662,-0.557 -0.24247,0 0.13728,-2.685 0.15332,-2.312 0.0963,-2.926 -0.2496,-0.105 0.36192,-8.012 9.6275,0.387"
+ class="c31041"
+ id="Custer, NE" />
+ <path
+ d="m 464.19511,240.64014 3.76007,0.117 7.91595,0.259 0.45819,0.02 -0.22464,8.044 -0.057,0.216 -0.54734,0.06 -1.25336,0.25 -0.66501,0.313 -0.7078,0.136 -2.11448,-0.07 -2.46571,-0.209 -0.1462,-0.06 -4.11308,-0.378 0.16046,-8.702"
+ class="c31019"
+ id="Buffalo, NE" />
+ <path
+ d="m 450.43849,240.08314 13.75662,0.557 -0.16046,8.702 -3.90627,-0.475 -5.84246,-0.579 -4.18618,-0.193 0.33875,-8.012"
+ class="c31047"
+ id="Dawson, NE" />
+ <path
+ d="m 460.12838,248.86714 3.90627,0.475 4.11308,0.378 -0.24068,7.174 -7.8589,-0.289 -0.20146,0 0.28169,-7.729"
+ class="c31137"
+ id="Phelps, NE" />
+ <path
+ d="m 476.04763,249.29214 -0.2086,7.859 -0.0571,0 -7.87493,-0.25 0.24068,-7.174 0.1462,0.06 2.46571,0.209 2.11448,0.07 0.7078,-0.136 0.66501,-0.313 1.25336,-0.25 0.54734,-0.06"
+ class="c31099"
+ id="Kearney, NE" />
+ <path
+ d="m 476.04763,249.29214 0.057,-0.216 7.60038,0.216 0.0802,0 -0.19255,8.062 -7.7537,-0.203 0.2086,-7.859"
+ class="c31001"
+ id="Adams, NE" />
+ <path
+ d="m 491.61922,249.45214 0.025,0 -0.14442,8.07 -7.8268,-0.168 -0.0802,0 0.19255,-8.062 7.83394,0.16"
+ class="c31035"
+ id="Clay, NE" />
+ <path
+ d="m 499.5512,249.59714 -0.11945,8.06 -7.87672,-0.135 -0.0553,0 0.14442,-8.07 7.90702,0.145"
+ class="c31059"
+ id="Fillmore, NE" />
+ <path
+ d="m 499.5512,249.59714 7.88385,0.107 -0.0321,4.04 -0.0963,4.025 -7.87494,-0.112 0.11945,-8.06"
+ class="c31151"
+ id="Saline, NE" />
+ <path
+ d="m 507.59373,241.64114 7.67525,0.08 -0.009,0.668 -0.0321,5.376 -0.0232,6.049 -7.80184,-0.07 0.0321,-4.04 0.11946,-8.062 0.0392,0"
+ class="c31109"
+ id="Lancaster, NE" />
+ <path
+ d="m 515.2048,253.81514 -0.025,6.037 -0.0303,6.051 -5.97974,-0.05 -1.9362,-0.02 0.0731,-8.061 0.0963,-4.025 7.80184,0.07"
+ class="c31067"
+ id="Gage, NE" />
+ <path
+ d="m 499.43175,257.65714 7.87494,0.112 -0.0731,8.061 -7.93199,-0.105 0.13015,-8.068"
+ class="c31095"
+ id="Jefferson, NE" />
+ <path
+ d="m 499.43175,257.65714 -0.13015,8.068 -7.91416,-0.127 0.16759,-8.076 7.87672,0.135"
+ class="c31169"
+ id="Thayer, NE" />
+ <path
+ d="m 491.49976,257.52214 0.0553,0 -0.16759,8.076 -1.92906,-0.04 -5.98688,-0.144 0.20146,-8.057 7.8268,0.168"
+ class="c31129"
+ id="Nuckolls, NE" />
+ <path
+ d="m 475.83903,257.15114 7.7537,0.203 0.0802,0 -0.20146,8.057 -4.03285,-0.09 -3.88131,-0.105 0.22464,-8.067 0.0571,0"
+ class="c31181"
+ id="Webster, NE" />
+ <path
+ d="m 475.78198,257.14414 -0.22464,8.067 -5.95479,-0.185 -1.95937,-0.06 0.26387,-8.076 7.87493,0.25"
+ class="c31061"
+ id="Franklin, NE" />
+ <path
+ d="m 460.04815,256.60514 7.8589,0.289 -0.26387,8.076 -7.81967,-0.281 -0.041,0 0.26564,-8.084"
+ class="c31083"
+ id="Harlan, NE" />
+ <path
+ d="m 460.12838,248.86714 -0.28169,7.729 -7.87494,-0.322 0.082,-2.022 1.98433,0.09 0.24782,-6.058 5.84246,0.579"
+ class="c31073"
+ id="Gosper, NE" />
+ <path
+ d="m 450.18175,256.22014 1.79,0.05 7.87494,0.322 0.20146,0 -0.26564,8.084 -9.60967,-0.385 -0.27278,-0.02 0.28169,-8.066"
+ class="c31065"
+ id="Furnas, NE" />
+ <path
+ d="m 440.42589,255.76914 9.75586,0.451 -0.28169,8.066 -9.52944,-0.457 -0.34766,-0.03 0.40293,-8.035"
+ class="c31145"
+ id="Red Willow, NE" />
+ <path
+ d="m 430.60584,255.23114 9.49913,0.531 0.32092,0 -0.40293,8.035 -9.88245,-0.529 0.46533,-8.044"
+ class="c31087"
+ id="Hitchcock, NE" />
+ <path
+ d="m 430.26888,255.21614 0.33696,0.01 -0.46533,8.044 -1.519,-0.08 -11.18573,-0.694 0.50634,-8.001 12.32676,0.716"
+ class="c31057"
+ id="Dundy, NE" />
+ <path
+ d="m 440.4972,247.64314 9.60254,0.452 4.18618,0.193 -0.24782,6.058 -1.98433,-0.09 -0.082,2.022 -1.79,-0.05 -9.75586,-0.451 -0.32092,0 0.39223,-8.119"
+ class="c31063"
+ id="Frontier, NE" />
+ <path
+ d="m 440.4972,247.64314 -0.39223,8.119 -9.49913,-0.531 -0.33696,-0.01 0.41006,-8.046 1.68659,0.1 8.13167,0.375"
+ class="c31085"
+ id="Hayes, NE" />
+ <path
+ d="m 418.4645,246.44814 12.21444,0.722 -0.41006,8.046 -12.32676,-0.716 0.52238,-8.052"
+ class="c31029"
+ id="Chase, NE" />
+ <path
+ d="m 418.90665,239.39914 0.007,-0.03 13.80654,0.82 -0.35479,7.08 -1.68659,-0.1 -12.21444,-0.722 0.0802,-1.207 0.36192,-5.842"
+ class="c31135"
+ id="Perkins, NE" />
+ <path
+ d="m 442.41022,231.66314 7.92308,0.385 0.2496,0.105 -0.0963,2.926 -0.15332,2.312 -0.13728,2.685 0.24247,0 -0.33875,8.012 -9.60254,-0.452 -8.13167,-0.375 0.35479,-7.08 0.16046,-9.055 9.52944,0.53"
+ class="c31111"
+ id="Lincoln, NE" />
+ <path
+ d="m 420.63425,230.40814 9.89136,0.581 2.35517,0.144 -0.16046,9.055 -13.80654,-0.82 0.2496,-5.029 1.47087,-3.931"
+ class="c31101"
+ id="Keith, NE" />
+ <path
+ d="m 442.83633,223.66714 7.61107,0.353 0.24782,0.02 -0.36192,8.012 -7.92308,-0.385 0.42611,-7.996"
+ class="c31113"
+ id="Logan, NE" />
+ <path
+ d="m 430.99272,222.95214 4.37873,0.265 3.00414,0.209 2.23572,0.112 2.22502,0.129 -0.42611,7.996 -9.52944,-0.53 -2.35517,-0.144 0.46711,-8.037"
+ class="c31117"
+ id="McPherson, NE" />
+ <path
+ d="m 421.12454,222.38314 9.53835,0.553 0.32983,0.02 -0.46711,8.037 -9.89136,-0.581 0.49029,-8.025"
+ class="c31005"
+ id="Arthur, NE" />
+ <path
+ d="m 440.9554,215.49414 9.82005,0.522 -0.32805,8.004 -7.61107,-0.353 -2.22502,-0.129 0.34409,-8.044"
+ class="c31171"
+ id="Thomas, NE" />
+ <path
+ d="m 431.11218,214.87714 9.84322,0.617 -0.34409,8.044 -2.23572,-0.112 -3.00414,-0.209 -4.37873,-0.265 -0.32983,-0.02 0.44929,-8.059"
+ class="c31091"
+ id="Hooker, NE" />
+ <path
+ d="m 420.13683,216.13014 1.1553,-1.945 9.82005,0.692 -0.44929,8.059 -9.53835,-0.553 -1.40669,-0.08 0.41898,-6.171"
+ class="c31075"
+ id="Grant, NE" />
+ <path
+ d="m 409.64107,233.69514 9.52231,0.644 -0.2496,5.029 -0.007,0.03 -9.80222,-0.656 0.53664,-5.048"
+ class="c31049"
+ id="Deuel, NE" />
+ <path
+ d="m 420.13683,216.13014 -0.41898,6.171 1.40669,0.08 -0.49029,8.025 -1.47087,3.931 -9.52231,-0.644 -0.1034,-5.054 0.39223,-5.721 -0.37797,-1.336 -0.11054,-0.672 -0.025,-0.412 0.0571,-1.228 0.28883,-3.744 10.37452,0.602"
+ class="c31069"
+ id="Garden, NE" />
+ <path
+ d="m 409.53767,228.64114 0.1034,5.054 -0.53664,5.048 -0.55626,-0.03 -12.5514,-0.918 0.79516,-9.055 0.22642,-0.989 12.51932,0.893"
+ class="c31033"
+ id="Cheyenne, NE" />
+ <path
+ d="m 409.41643,215.51014 0.34588,0.02 -0.28883,3.744 -0.0571,1.228 0.025,0.412 0.11054,0.672 0.37797,1.336 -0.39223,5.721 -12.51932,-0.893 0.44037,-6.032 0.66858,-6.999 11.28913,0.793"
+ class="c31123"
+ id="Morrill, NE" />
+ <path
+ d="m 396.79193,228.73714 -0.79516,9.055 -3.30188,-0.255 -8.22794,-0.674 0.77911,-9.033 11.54587,0.907"
+ class="c31105"
+ id="Kimball, NE" />
+ <path
+ d="m 397.45872,221.71614 -0.44037,6.032 -0.22642,0.989 -11.54587,-0.907 0.58657,-7.03 11.62609,0.916"
+ class="c31007"
+ id="Banner, NE" />
+ <path
+ d="m 397.47477,214.65214 0.65253,0.06 -0.66858,6.999 -11.62609,-0.916 0.60261,-7.002 11.03953,0.854"
+ class="c31157"
+ id="Scotts Bluff, NE" />
+ <path
+ d="m 409.41643,215.51014 -11.28913,-0.793 -0.65253,-0.06 0.15333,-2.002 -0.71494,-0.06 0.61866,-7.987 11.32122,0.786 0.40293,0.02 -0.44928,8.027 0.42432,0.709 0.18542,1.364"
+ class="c31013"
+ id="Box Butte, NE" />
+ <path
+ d="m 421.33313,193.26714 0,0 3.46234,0.226 4.17904,0.321 6.66081,0.346 5.37713,0.282 6.07424,0.281 3.26265,0.154 1.19809,0.06 1.33359,0.07 -0.16224,3.518 0.10519,9.554 -0.35301,8.027 -1.69551,-0.08 -9.82005,-0.522 -9.84322,-0.617 -9.82005,-0.692 -0.57765,-0.05 0.54556,-7.996 -0.15868,-2.651 0.17472,-5.27 -0.0802,-1.658 0.13728,-3.295"
+ class="c31031"
+ id="Cherry, NE" />
+ <path
+ d="m 421.33313,193.26714 -0.13728,3.295 0.0802,1.658 -0.17472,5.27 0.15868,2.651 -0.54556,7.996 0.57765,0.05 -1.1553,1.945 -10.37452,-0.602 -0.34588,-0.02 -0.18542,-1.364 -0.42432,-0.71 0.44928,-8.026 -0.40293,-0.02 0.46712,-6.643 -0.22465,-1.344 0.36014,-4.948 11.87748,0.817"
+ class="c31161"
+ id="Sheridan, NE" />
+ <path
+ d="m 922.5264,90.736143 0.61865,1.767 3.39994,10.252997 0.24068,0.772 3.01484,9.586 -0.23534,1.181 -4.58733,2.941 -1.20522,-0.786 -0.65075,-0.708 -0.48315,-0.128 -2.13588,-0.506 -1.76504,-0.298 -1.65094,-1.23 0.34409,0.03 0.51525,-0.378 0.041,-0.06 0.22464,-0.29 0.0945,-0.137 0.066,-0.104 0.79516,-1.398 0.0802,-0.137 0,0 0.18542,-0.515 0.21572,-2.001 -0.41719,-0.673 -0.0713,-0.115 -0.40293,-0.499 -0.73811,-0.907 -0.60439,-0.596 -0.1355,-0.383 0.0232,-5.642997 0.38688,-0.795 -0.1355,-1.366 0.3851,-4.154 1.29258,-1.688 0.17829,-0.127 0.34409,0.177 0.14442,0.287 0.0731,0.08 0.51525,0.257 0.8433,0.06 0.70602,-0.147 0.10519,-0.09 0.3851,-1.526"
+ class="c33007"
+ id="Coos, NH" />
+ <path
+ d="m 916.01001,114.97814 1.07685,-1.398 1.65094,1.23 1.76504,0.298 2.13588,0.506 0.48315,0.128 0.65075,0.708 0.78981,1.139 1.1553,1.76 0.6668,3.487 -3.10933,1.35 0.9057,2.074 0.36192,0.65 0.56339,1.471 -1.92015,1.368 -0.60261,2.481 -0.92531,0.298 -1.30863,-0.859 -0.47424,1.003 -0.42611,1.213 -1.05546,0.08 -1.84527,0.07 -1.87201,-0.289 -1.99325,0.161 1.0198,-4.331 0.44215,-9.273 -0.27277,-0.217 -0.29953,-0.403 -0.52773,-1.84 0,-0.144 0.0553,-0.234 0.53843,-0.972 0.0499,-0.04 0.0838,-0.08 1.11252,-0.692 1.12499,-0.707"
+ class="c33009"
+ id="Grafton, NH" />
+ <path
+ d="m 931.80089,130.37414 0.37618,-0.909 0.65075,1.407 1.83101,-0.562 0.45106,-1.045 0.27991,3.135 0.12302,0.513 0.15154,0.323 0.46712,0.649 0.29595,0.153 0.80586,0.401 1.94333,1.159 0.0499,0.06 0.624,2.507 -0.50633,0.99 -0.14441,0.208 -3.2056,0.829 0.41006,-1.456 -4.3716,-2.081 0.12123,-0.289 0.79516,-1.913 -0.79516,-1.784 -0.65074,-1.568 0.29774,-0.722"
+ class="c33017"
+ id="Strafford, NH" />
+ <path
+ d="m 942.09874,139.06114 -0.69532,4.685 -1.18382,0.07 -0.48851,0.03 -0.11232,0.06 -0.13193,0.06 -0.007,0 -1.54932,1.15 -1.18917,1.012 -0.39223,0.337 -0.21751,0.227 -0.90748,1.822 -1.89698,-0.209 -1.59923,-0.98 -0.56339,-1.254 -0.40114,-0.875 0.4992,-2.001 0.7702,-6.541 4.3716,2.081 -0.41006,1.456 3.2056,-0.829 0.14441,-0.208 0.50633,-0.99 2.2482,0.901"
+ class="c33015"
+ id="Rockingham, NH" />
+ <path
+ d="m 913.19664,144.23614 0.47602,0.489 0.98771,-0.168 0.0481,-0.586 0.42611,-0.266 2.73135,-1.157 -0.082,0.804 0.0178,0.408 2.28921,-0.513 0.30487,2.54 0.36192,1.68 0.91639,-0.218 1.89876,3.215 0.70423,1.645 -5.83176,1.263 -2.8936,0.618 -1.83814,-1.478 -0.47603,-1.021 -0.0731,-0.232 1.04654,-3.584 -0.43859,-2.458 -0.0357,-0.138 -0.54021,-0.843"
+ class="c33005"
+ id="Cheshire, NH" />
+ <path
+ d="m 912.68317,133.91014 1.99325,-0.161 1.87201,0.289 1.84527,-0.07 1.05546,-0.08 -1.11429,3.102 -0.19433,2.147 0.78624,1.405 0.57052,0.618 0.72385,0.653 -0.13015,1.437 -2.28921,0.513 -0.0178,-0.408 0.082,-0.804 -2.73135,1.157 -0.42611,0.266 -0.0481,0.586 -0.98771,0.168 -0.47602,-0.489 -0.0642,-1.695 0.0731,-2.01 -0.34409,-0.9 -0.79694,-3.664 0.61865,-2.057"
+ class="c33019"
+ id="Sullivan, NH" />
+ <path
+ d="m 920.22115,141.81014 1.43699,-0.836 4.29137,0.183 3.12537,1.672 2.18758,0.362 -0.4992,2.001 0.40114,0.875 0.56339,1.254 1.59923,0.98 1.89698,0.209 -0.10698,0.242 -0.41541,0.988 -5.5465,1.278 -0.0713,0.02 -0.2496,0.06 -4.06494,0.909 -0.49208,0.11 -0.70423,-1.645 -1.89876,-3.215 -0.91639,0.218 -0.36192,-1.68 -0.30487,-2.54 0.13015,-1.437"
+ class="c33011"
+ id="Hillsborough, NH" />
+ <path
+ d="m 924.54282,126.91014 1.41382,0.885 4.08277,2.266 1.76148,0.313 -0.29774,0.722 0.65074,1.568 0.79516,1.784 -0.79516,1.913 -2.16262,-0.9 -3.84921,-1.512 -0.75416,0.62 -0.20859,-0.03 -1.43165,-1.141 -0.28169,-0.265 -0.88252,-0.908 0.60261,-2.481 1.92015,-1.368 -0.56339,-1.471"
+ class="c33001"
+ id="Belknap, NH" />
+ <path
+ d="m 922.58345,132.23014 0.88252,0.908 0.28169,0.265 1.43165,1.141 0.20859,0.03 0.75416,-0.62 3.84921,1.512 2.16262,0.9 -0.12123,0.289 -0.7702,6.541 -2.18758,-0.361 -3.12537,-1.673 -4.29137,-0.183 -1.43699,0.836 -0.72385,-0.653 -0.57052,-0.618 -0.78624,-1.405 0.19433,-2.147 1.11429,-3.102 0.42611,-1.212 0.47424,-1.004 1.30863,0.859 0.92531,-0.298"
+ class="c33013"
+ id="Merrimack, NH" />
+ <path
+ d="m 929.80051,113.11414 3.28404,10.872 2.02534,5.279 -0.45106,1.045 -1.83101,0.562 -0.65075,-1.407 -0.37618,0.909 -1.76148,-0.313 -4.08277,-2.266 -1.41382,-0.885 -0.36192,-0.65 -0.9057,-2.074 3.10933,-1.35 -0.6668,-3.487 -1.1553,-1.76 -0.78981,-1.139 1.20522,0.786 4.58733,-2.941 0.23534,-1.181"
+ class="c33003"
+ id="Carroll, NH" />
+ <path
+ d="m 898.3899,212.20114 2.83298,-0.1 0.78981,-1.102 -0.016,-0.05 0.0553,-0.07 0.12123,0 0.23178,0.107 0.44393,0.57 0.47781,1.519 0.13015,0.535 0.0107,0.04 0.14441,1.075 0.0392,0.467 0.025,0.99 0.0481,3.287 -2.28386,0.351 -0.57765,0.02 -1.42986,-1.021 -2.44431,0.483 -2.00751,2.676 -0.89322,-1.196 -0.66501,-0.901 0.89143,-0.659 1.03407,-1.221 0,-0.06 -0.0945,-0.168 3.13607,-5.584"
+ class="c34025"
+ id="Monmouth, NJ" />
+ <path
+ d="m 894.98106,221.98714 2.00751,-2.676 2.44431,-0.483 1.42986,1.021 0.57765,-0.02 2.28386,-0.351 -0.009,0.426 0.0981,1.879 0.0303,0.523 0.1355,1.59 0.35479,2.555 0.0891,0.859 -0.0143,0.09 -0.36549,1.749 -0.97523,3.431 -0.42254,1.071 -0.52416,0.546 -2.1341,-0.967 0.24069,-0.415 0.0571,-0.562 -0.92531,-4.009 -4.04176,-5.804 -0.33696,-0.458"
+ class="c34029"
+ id="Ocean, NJ" />
+ <path
+ d="m 899.53629,210.08614 -0.0713,0.03 -0.16224,0.226 -0.25316,0.225 -0.0731,0 -0.25852,0.272 -0.16224,0.1 -0.11945,0.191 -0.41185,0.168 -0.0945,-0.06 -0.0339,-0.113 0.0339,-0.128 0.0945,-0.187 -0.0214,-0.271 0.041,-0.209 0.34587,-0.403 0.0784,-0.36 -0.0571,-0.442 0.0499,-0.209 -0.0143,-0.226 0.0945,-0.353 0.14976,-0.33 0.24247,-0.184 0.44215,-0.233 0.53664,-0.282 0.18721,-0.03 0.13728,0.137 0.12836,0.378 0.35123,0.401 -0.0464,0.25 -0.64183,1.261 -0.41184,0.411 -0.0802,-0.02"
+ class="c36085"
+ id="Richmond, NY" />
+ <path
+ d="m 895.47848,202.42014 2.79732,1.189 -0.12124,0.829 0.77912,2.466 -4.31633,-0.529 0.86113,-3.955"
+ class="c34013"
+ id="Essex, NJ" />
+ <path
+ d="m 894.61735,206.37514 4.31633,0.529 -0.25673,0.797 -0.34588,0.02 -0.0802,0.03 -0.0392,0.06 -0.16046,0.337 0.11945,0.861 -0.72206,0.02 -0.19255,0 -0.79516,0.02 -2.20363,0.788 -0.44215,0.07 -0.35301,-1.713 1.1553,-1.815"
+ class="c34039"
+ id="Union, NJ" />
+ <path
+ d="m 900.79856,203.52214 -0.16224,2.161 -0.23177,0.659 -1.7276,1.359 0.25673,-0.797 -0.77912,-2.466 2.644,-0.916"
+ class="c34017"
+ id="Hudson, NJ" />
+ <path
+ d="m 895.22174,196.86114 6.08137,1.819 0.0268,1.884 -0.0713,0.87 -0.45998,2.088 -2.644,0.916 0.12124,-0.829 0.0802,-0.08 0.10519,-0.85 -0.025,-0.122 -0.69889,-1.228 -0.41006,-0.551 -0.74702,-0.526 -1.73652,-0.652 0.37797,-2.739"
+ class="c34003"
+ id="Bergen, NJ" />
+ <path
+ d="m 898.17061,209.01114 0.016,0.129 0.041,0.273 -0.016,0.376 -0.041,0.1 -0.11232,0 -0.11945,0.01 -0.24247,0.28 -0.007,0.176 0.19968,0.457 -0.24604,0.556 -0.0107,0.03 -0.0232,0.257 0.1765,0.36 0.13728,0.137 0.4582,0.06 0.009,0 -3.13607,5.584 -2.93282,-2.227 0.10519,-0.03 0.2086,-0.241 1.58319,-2.767 -0.0321,-0.567 -0.33697,-0.116 -0.43502,-0.353 -0.44928,-0.481 -0.025,-0.168 0.11232,-0.331 0.10519,-0.129 0.65788,-0.472 0.44215,-0.07 2.20363,-0.788 0.79516,-0.02 0.19255,0 0.72206,-0.02"
+ class="c34023"
+ id="Middlesex, NJ" />
+ <path
+ d="m 893.46205,208.19014 0.35301,1.713 -0.65788,0.472 -0.10519,0.129 -0.11232,0.331 0.025,0.168 0.44928,0.481 0.43502,0.353 0.33697,0.116 0.0321,0.567 -1.58319,2.767 -0.2086,0.241 -0.10519,0.03 -0.10162,-0.191 -0.51525,-0.06 -1.12677,0.644 -0.68997,-1.004 -0.10698,-0.144 -0.75237,-1.56 0.28883,-1.23 0.11945,-0.191 0.19255,-1.494 -0.64362,-1.819 -0.12836,-0.24 -0.11232,-0.08 2.67608,-1.519 0.0553,0.03 0.12124,0.2 0.0339,0.146 0.89857,1.953 0.93244,-0.813"
+ class="c34035"
+ id="Somerset, NJ" />
+ <path
+ d="m 890.61124,199.06114 1.62954,1.045 1.10182,0.06 1.10894,0 1.02694,2.264 -0.86113,3.955 -1.1553,1.815 -0.93244,0.813 -0.89857,-1.953 -0.0339,-0.146 -0.12124,-0.2 -0.0553,-0.03 -2.67608,1.519 -3.11824,-0.906 1.42273,-3.272 3.56217,-4.951"
+ class="c34027"
+ id="Morris, NJ" />
+ <path
+ d="m 894.8206,196.74014 0.40114,0.121 -0.37797,2.739 1.73652,0.652 0.74702,0.526 0.41006,0.551 0.69889,1.228 0.025,0.122 -0.10519,0.85 -0.0802,0.08 -2.79732,-1.189 -1.02694,-2.264 -1.10894,0 -1.10182,-0.06 -1.62954,-1.045 1.69373,-3.173 2.51563,0.852"
+ class="c34031"
+ id="Passaic, NJ" />
+ <path
+ d="m 892.30497,195.88814 -1.69373,3.173 -3.56217,4.951 -4.35555,-3.432 -0.0963,-0.119 0.68462,-0.963 0.47425,-1.118 0.1034,-0.692 -0.0321,-0.378 -0.0713,-0.07 0.0321,-0.313 0.20859,-0.892 0.0874,-0.257 0.41006,-0.843 0.48138,-0.522 1.01445,-0.731 6.31493,2.209"
+ class="c34037"
+ id="Sussex, NJ" />
+ <path
+ d="m 882.69352,200.58014 4.35555,3.432 -1.42273,3.272 -0.16581,0.44 -0.7488,1.439 -0.13729,0.185 -0.97879,0.983 -1.68838,1.884 -0.37618,0.644 -0.18721,-0.362 -0.1141,-0.209 -0.42432,-1.64 -0.17829,-1.387 0.29239,-0.686 0.1355,-0.04 0.25673,0.03 0.2603,-0.04 0.35123,-0.486 0.57765,-1.771 0.009,-0.135 -0.0571,-0.136 -1.63133,-1.922 1.87202,-3.496"
+ class="c34041"
+ id="Warren, NJ" />
+ <path
+ d="m 885.62634,207.28414 3.11824,0.906 0.11232,0.08 0.12836,0.24 0.64362,1.819 -0.19255,1.494 -0.11945,0.191 -0.28883,1.23 0.75237,1.56 0.10698,0.144 -0.91818,0.578 -0.50812,1.597 -1.21057,0.435 -0.16759,0 -0.1141,-0.06 -1.67055,-1.013 -1.3015,-2.619 -2.4657,-1.005 0.37618,-0.644 1.68838,-1.884 0.97879,-0.983 0.13729,-0.185 0.7488,-1.439 0.16581,-0.44"
+ class="c34019"
+ id="Hunterdon, NJ" />
+ <path
+ d="m 889.8874,214.95014 0.68997,1.004 1.12677,-0.644 0.51525,0.06 0.10162,0.191 2.93282,2.227 0.0945,0.168 0,0.06 -1.03407,1.221 -0.89143,0.659 0.66501,0.901 -2.36944,0.33 -4.63546,-3.561 0.16759,0 1.21057,-0.435 0.50812,-1.597 0.91818,-0.578"
+ class="c34021"
+ id="Mercer, NJ" />
+ <path
+ d="m 885.53185,228.35914 1.30862,-2.433 6.82126,4.667 -1.8007,3.288 -2.22502,-1.753 -2.4978,-2.74 -0.93957,-0.685 -0.66679,-0.344"
+ class="c34007"
+ id="Camden, NJ" />
+ <path
+ d="m 884.84544,229.34014 0.68641,-0.981 0.66679,0.344 0.93957,0.685 2.4978,2.74 2.22502,1.753 -1.37102,2.54 -1.59211,-0.925 -7.65742,-3.175 0.4261,-0.756 3.17886,-2.225"
+ class="c34015"
+ id="Gloucester, NJ" />
+ <path
+ d="m 881.24048,232.32114 7.65742,3.175 0.21038,2.007 0,0.476 -0.025,0.113 -3.18955,-1.696 -1.70443,2.819 -0.27277,1.833 -3.69768,-4.516 -0.17472,-0.532 0.56874,-1.453 0.62757,-2.226"
+ class="c34033"
+ id="Salem, NJ" />
+ <path
+ d="m 893.59755,240.26214 -0.17472,3.51 -3.50334,-0.02 -1.207,-0.278 -2.31952,-0.799 -2.08417,-1.162 -0.10341,-0.112 -0.28882,-0.355 0.27277,-1.833 1.70443,-2.819 3.18955,1.696 0.025,-0.113 0,-0.476 -0.21038,-2.007 1.59211,0.925 3.10754,3.841"
+ class="c34011"
+ id="Cumberland, NJ" />
+ <path
+ d="m 893.59755,240.26214 5.60356,-0.701 -0.73276,1.134 -0.21751,0.387 -0.24782,0.617 -0.39401,1.067 -0.43324,1.53 0,0.07 0.007,0.01 0.0232,0.03 -0.65075,2.323 -0.47246,1.148 -0.60439,1.038 -0.89144,0.497 -0.22464,0.06 -0.52951,0.06 -0.082,-0.04 -0.11233,-0.137 -0.025,-1.437 0.0321,-0.355 0.0891,-0.481 0.33875,-1.318 0.0392,-0.28 0.016,-0.347 -0.041,-0.715 -0.0945,-0.339 -0.3958,-0.289 -0.17472,-0.02 0.17472,-3.51"
+ class="c34009"
+ id="Cape May, NJ" />
+ <path
+ d="m 902.12145,234.20214 -2.92034,5.359 -5.60356,0.701 -3.10754,-3.841 1.37102,-2.54 1.8007,-3.288 0.24247,0.128 0.98593,0.507 1.27297,1.255 1.59032,0.738 0.4261,0.128 0.7702,0.154 1.03763,-0.268 2.1341,0.967"
+ class="c34001"
+ id="Atlantic, NJ" />
+ <path
+ d="m 891.7184,221.12114 2.36944,-0.33 0.89322,1.196 0.33696,0.458 4.04176,5.804 0.92531,4.009 -0.0571,0.562 -0.24069,0.415 -1.03763,0.268 -0.7702,-0.154 -0.4261,-0.128 -1.59032,-0.738 -1.27297,-1.255 -0.98593,-0.507 -0.24247,-0.128 -6.82126,-4.667 1.10895,-1.616 3.76898,-3.189"
+ class="c34005"
+ id="Burlington, NJ" />
+ <path
+ d="m 388.91878,409.84314 -0.39402,4.195 -0.8843,9.868 -1.48692,20.056 -0.15154,1.993 -0.47603,-0.03 -1.09111,-0.09 -1.36746,-0.106 -1.00376,-0.07 -1.14104,-0.09 -7.6913,-0.603 0.98236,-12.004 -1.75256,-0.135 0.82012,-10.182 0.92353,0.07 0.81121,-9.902 1.19808,-3.937 4.00076,0.307 8.70398,0.658"
+ class="c35025"
+ id="Lea, NM" />
+ <path
+ d="m 352.48405,431.11214 0.18541,0.01 0.96454,-10.168 19.64722,1.689 -0.82012,10.182 1.75256,0.135 -0.98236,12.004 -4.98134,-0.408 -0.85934,-0.07 -15.94955,-1.43 0.54556,-5.794 -0.0731,0 0.57052,-6.14"
+ class="c35015"
+ id="Eddy, NM" />
+ <path
+ d="m 334.21141,349.21314 -0.0392,0.822 -0.24247,1.727 -0.52951,-0.05 0.45106,0.369 0.0392,0.06 -0.2086,1.929 -0.26565,-0.588 -0.27278,-0.321 -0.74702,-0.433 -0.56339,-0.273 -0.11232,0.103 -0.37797,0.03 -0.33696,-0.02 -0.18542,-0.1 -0.12123,-0.224 0.62044,-2.363 0.312,-0.625 1.62419,-0.17 0.6668,0.02 0.28882,0.102"
+ class="c35028"
+ id="Los Alamos, NM" />
+ <path
+ d="m 315.54476,322.97814 7.61108,0.9 2.34447,0.451 4.58198,0.505 2.55485,0.274 8.51677,0.876 0.20146,1.59 -0.16937,2.491 -0.22464,4.951 0.10519,1.365 0.0642,1.439 -0.0161,0.466 -0.51346,2.242 -0.15333,0.321 -0.24069,0.195 -0.57943,0.231 -0.4582,0.03 -0.23177,0.06 -0.37084,0.442 -0.0642,0.176 3.52652,1.922 1.49582,2.459 0.18542,0.385 0.23356,0.385 3.56574,2.394 -3.5176,0.443 0.0713,-0.548 -6.46825,-0.667 0.0232,0.298 0.1765,0.03 0.025,0.09 -0.12837,1.261 -3.51938,-0.385 0.0392,-0.822 0.041,-0.159 0.0642,-0.644 -11.72415,-1.251 0.29774,-2.74 0.27991,-2.268 -6.45221,-0.747 -7.06195,-0.931 0.62579,-5.425 0.23356,-1.776 0.87539,-5.996 0.48137,-0.875 2.91856,-2.411 0.75415,-1.012"
+ class="c35039"
+ id="Rio Arriba, NM" />
+ <path
+ d="m 298.20457,320.81014 16.24016,2.032 1.10003,0.136 -0.75415,1.012 -2.91856,2.411 -0.48137,0.875 -0.87539,5.996 -0.23356,1.776 -0.62579,5.425 -0.65966,5.037 -8.47754,-1.118 -17.5167,-2.323 3.17351,-22.867 12.02902,1.608"
+ class="c35045"
+ id="San Juan, NM" />
+ <path
+ d="m 283.00204,342.06914 17.5167,2.323 8.47754,1.118 5.83355,0.747 -1.93619,15.935 -4.33951,-0.481 -1.55823,-0.225 -1.95224,-0.242 -13.58012,-1.785 -0.041,0.323 -1.02158,7.659 -10.70257,-1.464 3.30366,-23.908"
+ class="c35031"
+ id="McKinely, NM" />
+ <path
+ d="m 314.76565,364.41914 4.32346,0.52 3.7048,0.435 3.04514,0.353 4.43579,0.498 2.12161,0.29 -0.41897,4.026 -0.21573,1.993 1.75078,0.184 -0.20147,1.92 -1.48513,-0.135 -3.38388,-0.394 -0.009,-0.516 -0.14441,-0.231 -0.15155,-0.06 -4.7246,-0.594 -0.58835,0.538 -0.15154,0.218 -5.66596,-0.653 -0.54556,-2.087 -1.69551,-6.308"
+ class="c35001"
+ id="Bernalillo, NM" />
+ <path
+ d="m 316.46116,370.72714 0.54556,2.087 5.66596,0.653 0.15154,-0.218 0.58835,-0.538 4.7246,0.594 0.15155,0.06 0.14441,0.231 0.009,0.516 -1.14996,1.294 -0.6347,4.587 -0.19968,2.026 0.98058,0.1 -0.19433,1.881 -1.50118,-0.515 -4.92607,-2.377 -1.92906,-1.303 -0.5206,-0.08 -5.49837,-0.603 1.0608,-8.711 2.53168,0.323"
+ class="c35061"
+ id="Valencia, NM" />
+ <path
+ d="m 314.76565,364.41914 1.69551,6.308 -2.53168,-0.323 -1.0608,8.711 -9.72199,-1.166 -1.27119,-0.184 -6.20974,-0.822 -4.46787,-0.529 -12.70473,-1.719 1.20522,-8.718 10.70257,1.464 1.02158,-7.659 0.041,-0.323 13.58012,1.785 1.95224,0.242 1.55823,0.225 4.33951,0.481 1.87201,2.227"
+ class="c35006"
+ id="Cibola, NM" />
+ <path
+ d="m 300.23704,403.23714 12.49436,1.471 2.09843,0.298 6.01897,0.708 2.72423,0.287 2.07348,0.13 0.29773,2.105 -0.74702,7.77 -11.05023,4.099 -0.11232,0.995 -7.8678,-0.94 -0.48138,4.003 -5.91378,-0.715 -2.04138,-0.651 -0.30487,-0.253 0.0481,-0.246 0.2086,-0.401 0.34588,-1.35 0.0963,-0.973 -0.0321,-0.344 -1.1339,-9.421 -0.0321,-0.182 -0.23355,-0.412 -0.16046,-0.05 -2.54594,-0.305 0.80408,-6.332 5.44666,0.707"
+ class="c35051"
+ id="Sierra, NM" />
+ <path
+ d="m 312.86868,379.11514 5.49837,0.603 0.5206,0.08 1.92906,1.303 4.92607,2.377 1.50118,0.515 -0.43324,4.138 9.24061,0.988 -0.65788,5.971 -0.40292,4.018 -2.41758,-0.267 -0.43323,4.036 -1.84171,-0.194 -0.16046,-0.07 -2.05743,-0.4 -1.99146,-0.226 -0.44215,4.147 -2.07348,-0.13 -2.72423,-0.287 -6.01897,-0.708 -2.09843,-0.298 -12.49436,-1.471 0.47425,-3.76 1.68837,-14.199 -0.1765,-0.03 0.66501,-5.512 0.25852,-1.792 9.72199,1.166"
+ class="c35053"
+ id="Socorro, NM" />
+ <path
+ d="m 303.14669,377.94914 -0.25852,1.792 -0.66501,5.512 0.1765,0.03 -1.68837,14.199 -0.47425,3.76 -5.44666,-0.707 -0.80408,6.332 -8.53281,-1.093 -1.76148,-0.394 -1.95224,-0.299 -7.60216,-1.018 4.35555,-31.363 12.70473,1.719 4.46787,0.53 6.20974,0.821 1.27119,0.184"
+ class="c35003"
+ id="Catron, NM" />
+ <path
+ d="m 274.13761,406.05814 7.60216,1.018 1.95224,0.299 1.76148,0.394 8.53281,1.093 2.54594,0.305 0.16046,0.05 0.23355,0.412 0.0321,0.182 1.1339,9.421 0.0321,0.344 -0.0963,0.973 -0.34588,1.35 -0.2086,0.401 -0.0481,0.246 0.30487,0.253 2.04138,0.651 -6.04214,-0.731 -0.2496,1.991 -5.86743,-0.738 -1.30149,9.986 0.009,1.223 -0.22464,2.418 -0.17651,1.328 -5.93874,-0.772 0.71494,-7.224 1.0198,-7.733 -1.82388,-2.258 -3.95262,-0.537 0.51347,-3.971 -3.67985,-0.515 1.36568,-9.857"
+ class="c35017"
+ id="Grant, NM" />
+ <path
+ d="m 272.77193,415.91514 3.67985,0.515 -0.51347,3.971 3.95262,0.537 1.82388,2.258 -1.0198,7.733 -0.71494,7.224 5.93874,0.772 -0.0642,1.856 -0.84508,6.484 -0.48851,3.8 -12.49613,-1.632 -0.19255,-0.03 -1.54218,-0.21 -2.13053,-0.298 3.49621,-24.959 1.11607,-8.021"
+ class="c35023"
+ id="Hidalgo, NM" />
+ <path
+ d="m 305.68549,424.16314 -2.19471,18.811 -17.63615,-2.193 0.0642,-1.856 0.17651,-1.328 0.22464,-2.418 -0.009,-1.223 1.30149,-9.986 5.86743,0.738 0.2496,-1.991 6.04214,0.731 5.91378,0.715"
+ class="c35029"
+ id="Luna, NM" />
+ <path
+ d="m 325.19722,416.00614 -0.24247,2.17 -0.68284,-0.07 -2.41044,21.92 -4.22718,-0.447 -0.0642,0 -0.007,0 0,0 -0.41897,0.987 -0.0481,0.168 -0.44928,1.984 0.0321,0.106 0.18542,0.249 1.51009,1.615 -14.8834,-1.711 2.19471,-18.811 0.48138,-4.003 7.8678,0.94 0.11232,-0.995 11.05023,-4.099"
+ class="c35013"
+ id="Dona Ana, NM" />
+ <path
+ d="m 346.37772,326.52214 9.03202,0.915 -0.0731,1.415 -0.56161,3.657 -1.14995,1.084 -0.64183,0.241 -0.57943,0.267 -0.42433,0.305 -0.24247,1.678 -0.041,1.246 0.14619,2.314 -0.28169,4.475 -4.05068,5.4 -3.56574,-2.394 -0.23356,-0.385 -0.18542,-0.385 -1.49582,-2.459 -3.52652,-1.922 0.0642,-0.176 0.37084,-0.442 0.23177,-0.06 0.4582,-0.03 0.57943,-0.231 0.24069,-0.195 0.15333,-0.321 0.51346,-2.242 0.0161,-0.466 -0.0642,-1.439 -0.10519,-1.365 0.22464,-4.951 0.16937,-2.491 -0.20146,-1.59 5.22381,0.538"
+ class="c35055"
+ id="Taos, NM" />
+ <path
+ d="m 334.17219,350.03514 3.51938,0.385 0.12837,-1.261 -0.025,-0.09 -0.1765,-0.03 -0.0232,-0.298 6.46825,0.667 -0.0713,0.548 -0.30666,2.474 -1.84705,19.111 -9.86105,-1.006 0.41897,-4.026 1.28545,-12.446 0.24782,-2.307 0.24247,-1.727"
+ class="c35049"
+ id="Santa Fe, NM" />
+ <path
+ d="m 325.94424,408.23614 6.55562,0.73 5.19171,0.522 -0.16937,1.97 7.74657,0.77 -0.35301,3.978 -0.36192,2.594 -0.36192,1.289 -0.53843,1.961 -0.83616,8.171 3.93835,0.387 0.74703,0.03 4.98134,0.472 -0.57052,6.141 0.0731,0 -0.54556,5.794 -1.36746,-0.128 -20.88454,-2.131 -7.3276,-0.772 2.41044,-21.92 0.68284,0.07 0.24247,-2.17 0.74702,-7.77"
+ class="c35035"
+ id="Otero, NM" />
+ <path
+ d="m 341.83853,371.54714 7.88207,0.777 -0.96454,10.004 -0.4261,-0.03 -0.5937,5.994 -0.20146,1.992 -11.48347,-1.164 -9.24061,-0.988 0.43324,-4.138 0.19433,-1.881 -0.98058,-0.1 0.19968,-2.026 0.6347,-4.587 1.14996,-1.294 3.38388,0.394 1.48513,0.135 0.20147,-1.92 -1.75078,-0.184 0.21573,-1.993 9.86105,1.006"
+ class="c35057"
+ id="Torrance, NM" />
+ <path
+ d="m 347.73626,388.29114 7.91416,0.755 -0.58656,5.947 -0.5937,6.075 0.0392,0 0.016,0.06 -0.82012,8.536 -0.93244,7.158 -1.9362,-0.08 -5.92091,-0.531 0.35301,-3.978 -7.74657,-0.77 0.16937,-1.97 -5.19171,-0.522 -6.55562,-0.73 -0.29773,-2.105 0.44215,-4.147 1.99146,0.226 2.05743,0.4 0.16046,0.07 1.84171,0.194 0.43323,-4.036 2.41758,0.267 0.40292,-4.018 0.65788,-5.971 11.48347,1.164 0.20146,-1.991"
+ class="c35027"
+ id="Lincoln, NM" />
+ <path
+ d="m 356.59891,327.55114 2.80445,0.315 4.8708,0.448 13.16115,1.1 -1.54218,17.961 -7.84285,-0.692 -7.87493,-0.706 0.1034,-0.99 -8.71823,-0.868 0.28169,-4.475 -0.14619,-2.314 0.041,-1.246 0.24247,-1.678 0.42433,-0.305 0.57943,-0.267 0.64183,-0.241 1.14995,-1.084 0.56161,-3.657 0.0731,-1.415 1.18917,0.114"
+ class="c35007"
+ id="Colfax, NM" />
+ <path
+ d="m 351.56052,344.11914 8.71823,0.868 -0.1034,0.99 7.87493,0.706 0.37797,10.198 -7.08156,-0.556 -4.72282,-0.298 -1.82388,-0.995 -4.22005,-1.881 -6.89436,-0.715 0.30666,-2.474 3.5176,-0.443 4.05068,-5.4"
+ class="c35033"
+ id="Mora, NM" />
+ <path
+ d="m 394.18894,330.66014 1.52614,0.113 -0.85043,11.547 -0.75594,0.449 -0.27991,3.705 -0.43502,6.074 -0.54734,7.298 -6.17051,-0.491 0.46711,-5.97 0.21572,-0.409 0.12124,-1.599 -7.8999,-0.62 0.17651,-2.033 -3.94549,-0.346 0.082,-1.003 1.54218,-17.961 16.75363,1.246"
+ class="c35059"
+ id="Union, NM" />
+ <path
+ d="m 368.05028,346.68314 7.84285,0.692 -0.082,1.003 3.94549,0.346 -0.17651,2.033 7.8999,0.62 -0.12124,1.599 -0.21572,0.409 -0.46711,5.97 -0.23356,2.019 -0.47424,5.872 -0.19969,0.168 -4.5891,-0.36 0.066,-0.74 -1.62419,-0.137 -3.94549,-9.145 -2.78128,0.225 -4.46609,-0.376 -0.37797,-10.198"
+ class="c35021"
+ id="Harding, NM" />
+ <path
+ d="m 343.68558,352.43614 6.89436,0.715 4.22005,1.881 1.82388,0.995 4.72282,0.298 7.08156,0.556 4.46609,0.376 2.78128,-0.225 3.94549,9.145 1.62419,0.137 -0.066,0.74 -0.27278,3.439 -4.09882,-0.369 0.041,-0.506 -5.20777,2.392 0.13015,-1.697 -21.66543,-2.008 -0.3851,4.019 -7.88207,-0.777 1.84705,-19.111"
+ class="c35047"
+ id="San Miguel, NM" />
+ <path
+ d="m 386.67593,359.35514 6.17051,0.491 -0.2086,2.694 -0.76307,10.139 -0.40114,5.286 -3.72798,-0.28 -4.71748,3.703 -4.41973,1.648 -0.77912,1.968 -3.94549,-0.328 -3.37497,-0.289 0.32983,-4.017 0.18364,-2.107 0.4261,-4.09 0.19255,-2.163 5.20777,-2.392 -0.041,0.506 4.09882,0.369 0.27278,-3.439 4.5891,0.36 0.19969,-0.168 0.47424,-5.872 0.23356,-2.019"
+ class="c35037"
+ id="Quay, NM" />
+ <path
+ d="m 371.64098,372.01014 -0.19255,2.163 -0.4261,4.09 -0.18364,2.107 -3.93836,-0.333 -0.85934,1.94 -1.46374,1.895 -8.37235,-0.754 -0.55448,5.928 -7.91416,-0.755 0.5937,-5.994 0.4261,0.03 1.34964,-14.023 21.66543,2.008 -0.13015,1.697"
+ class="c35019"
+ id="Guadelupe, NM" />
+ <path
+ d="m 370.83869,380.37014 -0.32983,4.017 3.37497,0.289 -0.57051,6.716 -0.0499,1.239 -0.33697,4.081 -3.96153,-0.353 -0.18542,2.025 -4.13626,-0.371 -7.74835,-0.795 0.18541,-2.025 -2.01642,-0.2 0.58656,-5.947 0.55448,-5.928 8.37235,0.754 1.46374,-1.895 0.85934,-1.94 3.93836,0.333"
+ class="c35011"
+ id="De Baca, NM" />
+ <path
+ d="m 391.47363,377.96514 -0.35301,4.766 -0.77198,10.021 -0.0161,0.241 -13.10588,-1.036 0.60261,-6.953 0.77912,-1.968 4.41973,-1.648 4.71748,-3.703 3.72798,0.28"
+ class="c35009"
+ id="Curry, NM" />
+ <path
+ d="m 377.82932,385.00414 -0.60261,6.953 13.10588,1.036 -0.8843,11.009 -0.52951,5.841 -8.70398,-0.658 0.16938,-2.002 -3.96154,-0.289 0.33696,-3.755 -2.36943,-0.199 0.50633,-6.044 -1.97007,-0.184 0.33697,-4.081 0.0499,-1.239 0.57051,-6.716 3.94549,0.328"
+ class="c35041"
+ id="Roosevelt, NM" />
+ <path
+ d="m 372.92643,396.71214 1.97007,0.184 -0.50633,6.044 2.36943,0.199 -0.33696,3.755 3.96154,0.289 -0.16938,2.002 -4.00076,-0.307 -1.19808,3.937 -0.81121,9.902 -0.92353,-0.07 -19.64722,-1.689 -0.96454,10.168 -0.18541,-0.01 -4.98134,-0.472 -0.74703,-0.03 -3.93835,-0.387 0.83616,-8.171 0.53843,-1.961 0.36192,-1.289 0.36192,-2.594 5.92091,0.531 1.9362,0.08 0.93244,-7.158 0.82012,-8.536 -0.016,-0.06 -0.0392,0 0.5937,-6.074 2.01642,0.2 -0.18541,2.025 7.74835,0.795 4.13626,0.371 0.18542,-2.025 3.96153,0.353"
+ class="c35005"
+ id="Chaves, NM" />
+ <path
+ class="c35043"
+ d="m 309.65594,340.47314 7.06195,0.931 6.45221,0.747 -0.27991,2.268 -0.29774,2.74 11.72415,1.251 -0.0642,0.644 -0.041,0.159 -0.28882,-0.102 -0.6668,-0.02 -1.62419,0.17 -0.312,0.625 -0.62044,2.363 0.12123,0.224 0.18542,0.1 0.33696,0.02 0.37797,-0.03 0.11232,-0.103 0.56339,0.273 0.74702,0.433 0.27278,0.321 0.26565,0.588 -1.28545,12.446 -2.12161,-0.29 -4.43579,-0.498 -3.04514,-0.353 -3.7048,-0.435 -4.32346,-0.52 -1.87201,-2.227 1.93619,-15.935 -5.83355,-0.747 0.65966,-5.037 m 24.23456,11.667 -0.0392,-0.06 -0.45106,-0.369 0.52951,0.05 -0.0392,0.378"
+ id="Sandoval, NM" />
+ <path
+ d="m 201.52132,187.39614 2.08061,0.328 2.51563,0.506 4.40369,0.997 3.61566,0.715 4.00076,0.788 -4.34664,22.589 -3.92945,20.07 -3.51938,-0.674 -10.52785,-2.22 -3.87239,-0.786 -3.91162,-0.844 -3.39102,-0.788 -5.35217,-1.123 -2.83833,-0.586 -0.0553,-10.136 0.009,-2.232 0.0464,-0.642 1.56714,-7.328 -7.22241,-1.585 -7.27232,-1.611 5.07761,-22.568 6.49321,1.487 1.92907,0.442 24.5002,5.201"
+ class="c32007"
+ id="Elko, NV" />
+ <path
+ d="m 179.28715,226.95414 5.35217,1.123 3.39102,0.788 3.91162,0.844 3.87239,0.786 10.52785,2.22 3.51938,0.674 -0.93244,4.799 -1.59923,8.26 -3.82426,19.694 -16.63417,-3.286 -13.47494,-14.263 1.31755,-6.212 0.16759,-0.497 0.71671,-0.53 0.42611,-0.411 0.44215,-0.523 0.62578,-1.276 1.56715,-5.836 0.65074,-5.792 -0.0232,-0.562"
+ class="c32033"
+ id="White Pine, NV" />
+ <path
+ d="m 162.45151,301.20214 2.33912,0.52 0.49742,-0.156 13.26812,2.738 2.89182,0.587 1.31754,0.49 12.69581,2.507 -0.72206,3.786 -0.0891,0.462 -0.73098,4.172 -0.44215,2.316 -0.77912,4.042 -2.33021,3.148 -0.2496,0.282 -0.0321,0.02 -0.0642,0.04 -0.016,0 -1.11608,-0.02 -0.36192,-0.04 -0.0963,-0.02 -0.23356,-0.178 -0.16046,-0.168 -0.4261,-0.676 -0.12837,-0.385 -0.0161,-0.192 -0.009,-0.05 -0.0321,-0.176 -0.22464,-0.563 -0.54556,-0.772 -0.2496,-0.234 -2.33913,-0.69 -1.05902,-0.217 -1.12678,0 -2.05743,0.483 -0.18363,0.1 -0.24961,0.225 -0.016,0.146 -0.23356,2.25 -0.49742,6.588 -0.22464,4.027 0.24069,2.844 0.16759,1.348 0.025,0.675 -0.12837,2.805 -0.0232,0.513 -0.0981,0.458 -0.16758,0.548 -1.72047,2.875 -2.51385,-3.742 -6.81591,-10.198 -0.47246,-0.7 -1.27119,-1.896 -3.68697,-5.537 -3.61566,-5.383 4.11308,-18.996"
+ class="c32003"
+ id="Clark, NV" />
+ <path
+ d="m 186.87148,262.85614 16.63417,3.286 -0.46711,2.38 -1.84705,9.658 -2.42649,12.367 -2.6119,13.757 -0.69176,3.584 -12.69581,-2.507 -1.31754,-0.49 -2.89182,-0.587 -13.26812,-2.738 -0.49742,0.156 -2.33912,-0.52 0.33696,-1.79 1.02871,-4.839 4.45361,-20.74 15.716,3.263 2.88469,-14.24"
+ class="c32017"
+ id="Lincoln, NV" />
+ <path
+ d="m 138.95685,257.27414 6.74103,12.767 -5.28621,23.302 -9.2424,-13.876 -8.18872,-12.223 0.24069,0.121 1.11786,0.264 6.51639,-4.652 8.10136,-5.703"
+ class="c32009"
+ id="Esmeralda, NV" />
+ <path
+ d="m 139.10126,243.02714 1.64737,-0.09 4.98134,0.06 3.04514,0.128 12.61559,2.871 12.00584,2.594 13.47494,14.263 -2.88469,14.24 -15.716,-3.263 -4.45361,20.74 -1.02871,4.839 -0.33696,1.79 -4.11308,18.996 -0.2086,-0.306 -2.63687,-3.953 -0.6347,-0.948 -4.91715,-7.385 -6.06711,-9.08 -1.14995,-1.744 -1.96829,-2.926 -0.34409,-0.513 5.28621,-23.302 -13.13797,-24.88 0.43324,-1.824 6.10811,-0.31"
+ class="c32023"
+ id="Nye, NV" />
+ <path
+ d="m 170.79355,204.44514 7.22241,1.585 -1.56714,7.328 -0.0464,0.642 -0.009,2.232 0.0553,10.136 2.83833,0.586 0.0232,0.562 -0.65074,5.792 -1.56715,5.836 -0.62578,1.276 -0.44215,0.523 -0.42611,0.411 -0.71671,0.53 -0.16759,0.497 -1.31755,6.212 -12.00584,-2.594 0.32983,-1.198 0.98771,-4.122 1.7276,-7.651 1.67233,-7.6 -0.1034,-0.04 -0.0481,-0.03 1.71155,-7.297 2.68322,-12.432 0.44215,-1.181"
+ class="c32011"
+ id="Eureka, NV" />
+ <path
+ d="m 163.52123,202.83414 7.27232,1.611 -0.44215,1.181 -2.68322,12.432 -1.71155,7.297 0.0481,0.03 0.1034,0.04 -1.67233,7.6 -1.7276,7.651 -0.98771,4.122 -0.32983,1.198 -12.61559,-2.871 -3.04514,-0.128 -4.98134,-0.06 -0.16937,-0.61 0.0963,-0.635 1.65629,-4.555 0.14263,-0.353 0.23355,-0.267 2.28208,-1.551 1.17313,-0.553 1.46195,-0.285 0.13015,0.03 0.12123,-0.04 0.23178,-0.224 0.16937,-0.362 0.50634,-2.018 1.34963,-6.654 -0.61866,-1.485 6.81413,-10.913 1.51009,-2.427 3.86526,0.86 1.81675,-8.064"
+ class="c32015"
+ id="Lander, NV" />
+ <path
+ d="m 123.78462,239.33414 15.31664,3.693 -6.10811,0.31 -0.43324,1.824 6.39694,12.113 -8.10136,5.703 -6.51639,4.652 -1.11786,-0.264 -0.24069,-0.121 -9.81827,-14.772 4.33773,1.072 0.56338,-2.234 1.3746,-5.65 0.13549,-2.031 -1.51722,-0.37 0.50634,-2.067 0.98771,-1.196 1.1963,-1.384 3.03801,0.722"
+ class="c32021"
+ id="Mineral, NV" />
+ <path
+ d="m 102.5239,233.09314 2.09665,0.529 2.0093,0.838 0.0481,0.36 3.4552,0.861 4.10595,1.084 -0.50634,2.092 -0.68462,0 -0.92353,-0.227 -0.49029,0.562 -0.7381,1.547 -0.16938,0.664 0.0892,2.103 0.16046,0.74 0.36905,1.35 -0.19968,2.225 -0.29061,1.216 -3.43024,-5.135 -4.23432,-6.35 -0.90926,-3.447 0.24247,-1.012"
+ class="c32005"
+ id="Douglas, NV" />
+ <path
+ d="m 102.81272,231.89514 5.48768,-0.626 0.28882,1.061 0.49029,0.465 1.48692,0.371 0.009,0.119 -0.37084,2.307 -0.0713,0.09 -3.4552,-0.861 -0.0481,-0.36 -2.0093,-0.838 -2.09665,-0.529 0.28882,-1.198"
+ class="c32510"
+ id="Carson City, NV" />
+ <path
+ d="m 119.36489,224.97714 1.92906,-1.214 0.47425,-0.186 -0.61866,1.698 -1.14995,2.533 -0.73098,2.922 1.64738,2.86 1.02871,1.64 0.81121,1.197 1.23018,2.066 -0.20147,0.841 -3.03801,-0.722 -1.1963,1.384 -0.98771,1.196 -0.50634,2.067 1.51722,0.37 -0.13549,2.031 -1.3746,5.65 -0.56338,2.234 -4.33773,-1.072 -2.30703,-3.435 0.29061,-1.216 0.19968,-2.225 -0.36905,-1.35 -0.16046,-0.74 -0.0892,-2.103 0.16938,-0.664 0.7381,-1.547 0.49029,-0.562 0.92353,0.227 0.68462,0 0.50634,-2.092 -4.10595,-1.084 0.0713,-0.09 0.37084,-2.307 -0.009,-0.119 -1.48692,-0.371 -0.49029,-0.465 -0.28882,-1.061 1.21413,-0.07 3.28583,-0.861 4.94212,-5.543 1.62241,0.184"
+ class="c32019"
+ id="Lyon NV" />
+ <path
+ d="m 149.515,223.37814 0.61866,1.485 -1.34963,6.654 -0.50634,2.018 -0.16937,0.362 -0.23178,0.224 -0.12123,0.04 -0.13015,-0.03 -1.46195,0.285 -1.17313,0.553 -2.28208,1.551 -0.23355,0.267 -0.14263,0.353 -1.65629,4.555 -0.0963,0.635 0.16937,0.61 -1.64737,0.09 -15.31664,-3.693 0.20147,-0.841 -1.23018,-2.066 -0.81121,-1.197 -1.02871,-1.64 -1.64738,-2.86 0.73098,-2.922 1.14995,-2.533 0.61866,-1.698 -0.47425,0.186 -1.92906,1.214 0.43502,-1.07 0.52238,-2.417 -0.15333,-0.828 0.4582,-3.152 0.23356,-0.971 10.51715,2.621 6.05997,1.356 5.19885,1.222 6.87831,1.64"
+ class="c32001"
+ id="Churchill, NV" />
+ <path
+ d="m 156.32913,212.46514 -6.81413,10.913 -6.87831,-1.64 -5.19885,-1.222 -6.05997,-1.356 -10.51715,-2.621 -1.94511,-0.467 2.93995,-11.659 0.43502,0.1 2.53881,-9.924 8.76637,2.161 -0.57765,2.364 19.22825,4.53 -0.90748,3.914 5.64813,1.319 0.13728,0.06 -0.007,0.143 -0.78803,3.391"
+ class="c32027"
+ id="Pershing, NV" />
+ <path
+ d="m 117.74248,224.79314 -4.94212,5.543 -3.28583,0.861 -1.21413,0.07 1.39064,-1.576 0.72206,-2.596 -0.21751,-0.633 0.0642,-1.132 2.685,-0.332 1.32646,0.136 1.78287,0.05 0.82903,-0.129 0.85935,-0.264"
+ class="c32029"
+ id="Storey, NV" />
+ <path
+ d="m 129.81072,171.16314 0.58835,0.151 -0.81299,3.071 -1.50296,5.986 -0.60974,4.035 -0.61152,2.443 -0.42611,1.028 -0.41719,0.45 -1.10003,4.38 -0.42611,1.799 0.33697,0.08 -2.53881,9.924 -0.43502,-0.1 -2.93995,11.659 1.94511,0.467 -0.23356,0.971 -0.4582,3.152 0.15333,0.828 -0.52238,2.417 -0.43502,1.07 -1.62241,-0.184 -0.85935,0.264 -0.82903,0.129 -1.78287,-0.05 -1.32646,-0.136 -2.685,0.332 -0.0642,1.132 0.21751,0.633 -0.72206,2.596 -1.39064,1.576 -5.48768,0.626 0.85935,-3.383 0.77911,-2.884 1.64024,-6.212 0.35301,-1.31 1.73473,-6.508 1.12499,-4.277 0.009,-0.02 0.32983,-1.294 1.03585,-4.008 2.06456,-8.221 1.83279,-7.135 4.70143,-18.16 10.53319,2.683"
+ class="c32031"
+ id="Washoe, NV" />
+ <path
+ d="m 130.39907,171.31414 9.02311,2.275 9.61858,2.211 19.42972,4.418 0.12836,0.05 -6.89436,30.632 -3.86526,-0.86 -1.51009,2.427 0.78803,-3.391 0.007,-0.143 -0.13728,-0.06 -5.64813,-1.319 0.90748,-3.914 -19.22825,-4.53 0.57765,-2.364 -8.76637,-2.161 -0.33697,-0.08 0.42611,-1.799 1.10003,-4.38 0.41719,-0.45 0.42611,-1.028 0.61152,-2.443 0.60974,-4.035 1.50296,-5.986 0.81299,-3.071"
+ class="c32013"
+ id="Humboldt, NV" />
+ <path
+ d="m 888.65722,106.38814 -0.025,0.394 0.58834,3.769 0.81834,4.797 0.48138,0.901 0.26564,0.224 0.46711,0.273 -1.93619,0.69 0.0624,0.428 -0.30309,0.843 -1.11786,0.788 -1.42986,0.892 -1.24623,0.264 -2.51563,0.909 -0.56338,-1.64 -0.58657,-1.559 -1.22839,-2.852 -2.08953,-5.119 -0.40114,-1.077 2.39439,-0.691 3.94549,-1.004 4.41974,-1.23"
+ class="c36019"
+ id="Clinton, NY" />
+ <path
+ d="m 882.76661,121.56014 2.51563,-0.909 1.24623,-0.264 1.42986,-0.892 1.11786,-0.788 0.30309,-0.843 -0.0624,-0.428 1.93619,-0.69 0.76486,0.924 0.22999,0.499 0.29774,0.804 0.009,0.01 0.025,0.25 -0.0891,0.964 0.53842,2.796 -0.67392,1.922 -0.009,1.902 0,0.749 0.0392,0.765 0,0 0.0356,0.08 1.91659,4.525 0.27991,0.507 -0.92174,0.338 -9.66672,3.703 -0.0161,-0.868 -0.0963,-0.337 -1.82566,-0.353 -0.59192,0.266 -0.19255,0.126 -0.15511,0.266 -2.58694,-2.106 1.06972,-1.299 -1.19809,-3.295 2.93639,-1.086 -2.18936,-5.874 3.58356,-1.373"
+ class="c36031"
+ id="Essex, NY" />
+ <path
+ d="m 822.76591,164.99114 -1.09468,0.249 -5.69627,1.095 -0.89144,0.216 -0.98949,-5.522 7.70735,-1.309 0.96453,5.271"
+ class="c36073"
+ id="Orleans, NY" />
+ <path
+ d="m 822.76591,164.99114 2.07348,3.022 -0.19434,2.98 -8.43654,1.478 -0.93065,-5.013 -0.19434,-0.907 0.89144,-0.216 5.69627,-1.095 1.09468,-0.249"
+ class="c36037"
+ id="Genesee, NY" />
+ <path
+ d="m 816.20851,172.47114 8.43654,-1.478 0.82904,4.42 -0.30665,1.189 -0.61688,0.539 -0.13906,0.781 -0.10341,0.825 0.0232,0.07 0.41184,0.193 -4.47678,0.852 -2.64222,0.137 -1.02158,-5.553 -0.41898,0.07 -0.33696,-1.985 0.36192,-0.07"
+ class="c36121"
+ id="Wyoming, NY" />
+ <path
+ d="m 824.83939,168.01314 2.94708,-0.587 0.19255,0.16 0.0802,0.145 -0.0945,0.635 -0.016,0.05 -0.4261,0.1 -0.025,0.03 0.041,0.06 2.00217,-0.376 0.91461,-0.275 0.25851,0.209 0.15155,0.241 0.25673,0.595 0.19968,0.868 0,0.03 -0.58656,0.119 0.0107,2.138 0.61865,2.025 1.64559,-0.289 0.37084,0.997 0.20859,1.084 -3.39102,3.166 -1.96115,0.298 -0.19255,-0.981 -3.30188,0.562 -0.41184,-0.193 -0.0232,-0.07 0.10341,-0.825 0.13906,-0.781 0.61688,-0.539 0.30665,-1.189 -0.82904,-4.419 0.19434,-2.981"
+ class="c36051"
+ id="Livingston, NY" />
+ <path
+ d="m 887.60532,155.36514 0.63292,-0.1 2.21789,0.609 0.73811,0.532 0.19433,0.545 1.47087,1.246 0.11232,0.06 0.21751,-0.02 -5.8175,2.531 -1.72047,-1.18 -0.0321,-0.06 0.0571,-0.307 2.38548,-2.587 -0.45642,-1.269"
+ class="c36093"
+ id="Schenectady, NY" />
+ <path
+ d="m 887.39851,154.76214 0.20681,0.603 0.45642,1.269 -2.38548,2.587 -0.0571,0.307 0.0321,0.06 -1.15709,0.61 -1.84883,0.651 -1.95938,-0.491 -1.50295,-0.06 -2.05744,-0.33 -0.89143,-4.163 3.88131,0.58 0.87539,-0.193 6.40763,-1.439"
+ class="c36057"
+ id="Montgomery, NY" />
+ <path
+ d="m 875.7849,150.26214 3.19846,0.644 4.94925,-1.624 1.33359,-0.45 2.13231,5.93 -6.40763,1.439 -0.87539,0.193 -3.88131,-0.58 -0.44928,-5.552"
+ class="c36035"
+ id="Fulton, NY" />
+ <path
+ d="m 844.34042,163.27214 -0.10341,1.503 0.77198,3.897 0.0963,0.433 0.36014,1.093 0.082,0.17 0.1248,0.176 1.31933,1.632 -0.14442,1.839 -3.26265,0.796 -2.29812,-4.789 -0.60261,-2.227 0.025,-0.112 0.0392,-0.05 0.19433,-0.1 -0.65075,-3.18 4.0489,-1.086"
+ class="c36099"
+ id="Seneca, NY" />
+ <path
+ d="m 840.29152,164.35814 0.65075,3.18 -0.19433,0.1 -0.0392,0.05 -0.025,0.112 0.60261,2.227 -5.59999,1.196 -0.2817,0.731 -0.0802,0.476 -0.11233,1.091 0.42611,2.067 -2.04852,0.385 -0.20859,-1.084 -0.37084,-0.997 -1.64559,0.289 -0.61865,-2.025 -0.0107,-2.138 0.58656,-0.12 0,-0.03 -0.19968,-0.868 -0.25673,-0.595 -0.15155,-0.241 -0.25851,-0.209 1.61349,-0.297 -0.44928,-2.065 1.8738,-0.369 2.02534,-0.522 1.84705,-0.378 0.13728,0.618 2.78841,-0.577"
+ class="c36069"
+ id="Ontario, NY" />
+ <path
+ d="m 841.28636,170.02214 2.29812,4.789 -3.23769,2.016 -0.65788,-0.128 -0.1141,-0.104 -0.2086,-1.037 -0.0553,-0.53 0.009,-0.192 -3.68163,0.747 -0.42611,-2.067 0.11233,-1.091 0.0802,-0.476 0.2817,-0.731 5.59999,-1.196"
+ class="c36123"
+ id="Yates, NY" />
+ <path
+ d="m 843.58448,174.81114 3.26265,-0.796 0.39402,1.543 0.50633,1.961 0.016,0.403 0.3958,2.016 1.20522,-0.208 0.15867,0.77 -0.30665,0.419 -0.73811,0.06 -0.85756,-0.207 -0.21038,-0.893 -1.75969,0.36 -2.04139,0.563 0.0392,0.202 -2.03068,0.562 -0.17829,0.03 -0.61866,-2.635 -0.47424,-2.131 3.23769,-2.016"
+ class="c36097"
+ id="Schuyler, NY" />
+ <path
+ d="m 846.99155,172.17614 3.3928,-0.788 0.0642,0.185 3.15746,-0.779 1.23732,4.844 -4.13091,3.833 -1.34785,0.259 -1.20522,0.208 -0.3958,-2.016 -0.016,-0.403 -0.50633,-1.961 -0.39402,-1.543 0.14442,-1.839"
+ class="c36109"
+ id="Tompkins, NY" />
+ <path
+ d="m 844.05873,154.03114 0.73097,2.635 0.86113,0.892 1.41203,-0.337 0.17116,0.651 0.47424,1.777 0.22464,0.972 -0.025,0.02 -0.29774,0 -0.0874,0.103 -0.009,0.122 0.56338,2.073 1.43165,3.455 1.51722,-0.403 1.15887,0.747 0.51346,0.532 0.0553,0.201 0.85221,3.311 -3.15746,0.779 -0.0642,-0.185 -3.3928,0.788 -1.31933,-1.632 -0.1248,-0.176 -0.082,-0.17 -0.36014,-1.092 -0.0963,-0.434 -0.77198,-3.897 0.10341,-1.503 -1.62241,-7.199 1.34072,-2.042"
+ class="c36011"
+ id="Cayuga, NY" />
+ <path
+ d="m 855.39778,157.18914 0.31913,0.314 1.18383,1.599 0.78624,2.186 1.20522,4.426 -6.13842,1.769 -0.0553,-0.201 -0.51346,-0.532 -1.15887,-0.747 -1.51722,0.403 -1.43165,-3.455 -0.56338,-2.074 0.009,-0.121 0.0874,-0.103 0.29774,0 0.025,-0.02 -0.22464,-0.972 -0.47424,-1.778 2.51384,-0.634 2.1448,-1.077 2.06634,0.594 1.43878,0.435"
+ class="c36067"
+ id="Onodaga, NY" />
+ <path
+ d="m 858.8922,165.71414 0.42611,1.496 1.92193,6.87 -4.37159,1.06 -2.02534,0.498 -1.23732,-4.844 -0.85221,-3.311 6.13842,-1.769"
+ class="c36023"
+ id="Cortland, NY" />
+ <path
+ d="m 859.31831,167.21014 6.41298,-1.825 1.11786,-0.152 2.14479,-0.611 0.16759,10.14 0.54021,2.702 -1.89697,0.408 -1.7276,0.371 -1.19809,-0.58 -2.10379,0.04 -0.24247,0.163 -0.20146,-0.33 -1.09112,-3.455 -1.92193,-6.87"
+ class="c36017"
+ id="Chenango, NY" />
+ <path
+ d="m 855.39778,157.18914 1.91837,0.249 1.69907,-0.756 0.82547,0.09 0.39401,0.209 1.02872,0.587 2.0503,1.358 0.60261,2.04 0.0642,0.323 2.09666,1.155 3.06119,-0.867 -0.14442,3.045 -2.14479,0.612 -1.11786,0.152 -6.41298,1.825 -0.42611,-1.496 -1.20522,-4.426 -0.78624,-2.186 -1.18383,-1.6 -0.31913,-0.313"
+ class="c36053"
+ id="Madison, NY" />
+ <path
+ d="m 867.65144,144.30914 1.97721,6.29 0.64361,2.298 -0.90926,2.805 -0.65966,1.686 0.98236,3.867 -0.54734,0.321 -3.06119,0.867 -2.09666,-1.155 -0.0642,-0.323 -0.60261,-2.04 -2.0503,-1.358 -1.02872,-0.587 -0.39401,-0.208 -0.82547,-0.09 -1.69907,0.756 -0.4475,-3.769 -0.41898,-0.05 0.41363,-3.833 1.0091,0.1 3.87061,0.355 5.90843,-5.93"
+ class="c36065"
+ id="Oneida, NY" />
+ <path
+ d="m 859.2149,131.94914 5.04552,1.727 3.39102,10.633 -5.90843,5.93 -3.87061,-0.355 -1.36746,-4.869 -0.68106,-2.193 0.0232,-2.146 3.04514,-2.764 0.45998,-1.085 -0.0731,-1.414 -1.10182,-0.532 1.03763,-2.932"
+ class="c36049"
+ id="Lewis, NY" />
+ <path
+ d="m 864.26042,133.67614 5.22381,-0.538 4.25215,12.842 -0.74881,3.648 2.79733,0.634 0.44928,5.552 0.89143,4.163 -2.07347,-0.362 0.11232,1.519 -0.19968,0.234 -3.6014,-1.166 -0.39223,1.237 -1.14995,0.337 -0.1355,-0.521 -0.98236,-3.867 0.65966,-1.686 0.90926,-2.805 -0.64361,-2.298 -1.97721,-6.29 -3.39102,-10.633"
+ class="c36043"
+ id="Herkimer, NY" />
+ <path
+ d="m 879.18305,160.30714 -0.0892,0.907 0.0963,0.635 0.0802,0.307 1.03049,2.104 0.21573,0.547 -0.36192,1.535 -0.40828,1.219 -2.1537,0.621 -2.8936,2.603 -1.46374,1.382 -0.68997,0.804 -1.63311,1.237 -0.42432,0.169 -1.32646,0.385 -0.16759,-10.14 0.14442,-3.046 0.54734,-0.321 0.1355,0.521 1.14995,-0.337 0.39223,-1.237 3.6014,1.166 0.19968,-0.234 -0.11232,-1.519 2.07347,0.362 2.05744,0.33"
+ class="c36077"
+ id="Otsego, NY" />
+ <path
+ d="m 885.6513,159.59214 1.72047,1.18 0.32091,0.225 0.17651,1.141 -0.12837,1.182 -0.1141,2.161 -0.0143,2.597 0.0874,0.28 0.14441,-0.06 -2.8419,1.92 -5.2559,-2.662 0.40828,-1.219 0.36192,-1.535 -0.21573,-0.547 -1.03049,-2.104 -0.0802,-0.307 -0.0963,-0.635 0.0892,-0.907 1.50295,0.06 1.95938,0.491 1.84883,-0.651 1.15709,-0.61"
+ class="c36095"
+ id="Schoharie, NY" />
+ <path
+ d="m 893.18927,158.24114 2.14479,-0.619 -0.041,7.595 -7.44883,3.086 -0.14441,0.06 -0.0874,-0.279 0.0143,-2.598 0.1141,-2.161 0.12837,-1.182 -0.17651,-1.141 -0.32091,-0.225 5.8175,-2.531"
+ class="c36001"
+ id="Albany, NY" />
+ <path
+ d="m 884.32663,146.26914 4.35376,-1.648 0.2086,0.266 1.0305,1.599 0.32805,1.245 0.16402,0.09 1.08933,0.296 1.36568,-1.318 0.98236,-1.237 0.12837,0.201 1.32467,4.308 0.0731,0.433 0.0713,1.576 -0.0802,0.811 -0.2086,1.02 0.1765,3.712 -2.14479,0.619 -0.21751,0.02 -0.11232,-0.06 -1.47087,-1.246 -0.19433,-0.546 -0.73811,-0.531 -2.21789,-0.61 -0.63292,0.1 -0.20681,-0.603 -2.13231,-5.93 -0.93957,-2.563"
+ class="c36091"
+ id="Saratoga, NY" />
+ <path
+ d="m 884.02889,137.49314 9.66672,-3.703 -0.041,1.871 -0.10341,1.39 -0.92352,2.25 -0.29952,0.797 -0.17473,0.835 -0.0178,0.153 0.0481,0.321 1.6652,4.154 -0.98236,1.237 -1.36568,1.318 -1.08933,-0.296 -0.16402,-0.09 -0.32805,-1.245 -1.0305,-1.599 -0.2086,-0.266 -4.35376,1.648 -2.75454,-7.827 2.4568,-0.949"
+ class="c36113"
+ id="Warren, NY" />
+ <path
+ d="m 878.43602,129.89314 1.19809,3.295 -1.06972,1.299 2.58694,2.106 0.15511,-0.266 0.19255,-0.126 0.59192,-0.266 1.82566,0.353 0.0963,0.337 0.0161,0.868 -2.4568,0.949 2.75454,7.827 0.93957,2.563 -1.33359,0.45 -4.94925,1.624 -3.19846,-0.644 -2.79733,-0.634 0.74881,-3.648 -4.25215,-12.842 4.99026,-1.824 3.96153,-1.421"
+ class="c36041"
+ id="Hamilton, NY" />
+ <path
+ d="m 882.76661,121.56014 -3.58356,1.373 2.18936,5.874 -2.93639,1.086 -3.96153,1.421 -0.2193,-1.639 -0.58478,-1.743 -3.25374,-9.314 -2.04316,-6.074 -1.24445,0.28 -0.39223,-1.173 0.42432,-0.02 6.57523,-1.253 2.29633,-0.515 1.67947,-0.49 0.18542,-0.06 0.40114,1.077 2.08953,5.119 1.22839,2.852 0.58657,1.559 0.56338,1.64"
+ class="c36033"
+ id="Franklin, NY" />
+ <path
+ d="m 866.73683,111.65114 0.39223,1.173 1.24445,-0.28 2.04316,6.074 3.25374,9.314 0.58478,1.743 0.2193,1.639 -4.99026,1.824 -5.22381,0.538 -5.04552,-1.727 -1.19809,-0.457 -3.51938,-1.207 -2.84368,-1.075 0.50455,-1.72 0.46711,-1.15 0.85222,-1.398 2.5709,-3.987 0.74702,-1.035 5.87277,-6.67 0.29774,-0.209 2.15371,-1.244 0.40293,-0.06 1.21413,-0.08"
+ class="c36089"
+ id="St. Lawrence, NY" />
+ <path
+ d="m 851.65375,129.21014 2.84368,1.075 3.51938,1.207 1.19809,0.457 -1.03763,2.932 1.10182,0.532 0.0731,1.414 -0.45998,1.085 -3.04514,2.764 -0.0232,2.146 0.68106,2.193 -3.34288,0.385 -0.73811,0.337 0.15333,0.612 -2.93995,0.362 -1.0626,-2.717 1.13391,-2.338 0.0731,-0.128 -0.0339,-0.346 -0.35301,-0.916 -0.11232,-0.145 -0.13015,-0.04 -1.4049,-0.119 -0.99484,-0.419 -1.56001,-1.123 -0.24782,-0.644 -0.0107,-0.264 0.0339,-0.517 0.3851,-1.629 3.67449,-3.907 2.62617,-2.248"
+ class="c36045"
+ id="Jefferson, NY" />
+ <path
+ d="m 849.63733,146.71114 2.93995,-0.362 -0.15333,-0.612 0.73811,-0.337 3.34288,-0.385 1.36746,4.869 -1.0091,-0.1 -0.41363,3.833 0.41898,0.05 0.4475,3.769 -1.91837,-0.249 -1.43878,-0.435 -2.06634,-0.594 -2.1448,1.077 -2.51384,0.635 -0.17116,-0.651 -1.41203,0.337 -0.86113,-0.892 -0.73097,-2.635 0.77376,-0.868 2.02356,-2.138 0.10519,-0.06 0.66679,-0.209 0.44037,0.202 0.24247,-0.02 0.54556,-0.137 0.92531,-0.58 0.0963,-0.112 0.11945,-0.305 0.0571,-0.369 0.0321,-0.355 -0.0481,-0.594 -0.19255,-1.117 -0.20859,-0.658"
+ class="c36075"
+ id="Oswego, NY" />
+ <path
+ d="m 842.71801,156.07314 1.62241,7.199 -4.0489,1.086 -2.78841,0.577 -0.13728,-0.618 -1.84705,0.378 -2.02534,0.522 -1.14995,-5.497 0.97344,-0.272 2.77058,-0.708 0.51525,-0.112 0.76307,0 0.58657,0.112 1.24622,-0.227 0.0963,-0.03 2.39439,-1.405 0.38688,-0.29 0.64184,-0.722"
+ class="c36117"
+ id="Wayne, NY" />
+ <path
+ d="m 822.76591,164.99114 -0.96453,-5.271 0.68997,-0.1 2.65291,0.05 1.71155,0.41 0.78625,0.442 0.12123,0.06 1.41382,0.579 0.46711,0.08 0.27991,-0.03 2.41936,-1.494 1.14995,5.497 -1.8738,0.369 0.44928,2.065 -1.61349,0.297 -0.91461,0.275 -2.00217,0.376 -0.041,-0.06 0.025,-0.03 0.4261,-0.1 0.016,-0.05 0.0945,-0.634 -0.0802,-0.145 -0.19255,-0.16 -2.94708,0.586 -2.07348,-3.022"
+ class="c36055"
+ id="Monroe, NY" />
+ <path
+ d="m 815.08352,166.55114 0.19434,0.907 -0.37976,0.202 -1.74364,0.57 -5.71053,1.173 -1.36925,0.257 -0.53129,-0.104 -0.19077,-0.338 -0.77198,-3.882 3.65488,-1.961 3.11111,-1.51 1.37459,-0.538 0.93957,-0.298 0.10519,0 0.32805,0 0.98949,5.522"
+ class="c36063"
+ id="Niagara, NY" />
+ <path
+ d="m 815.27786,167.45814 0.93065,5.013 -0.36192,0.07 0.33696,1.985 0.41898,-0.07 1.02158,5.553 -2.14479,0.981 -1.84884,0.989 -1.92371,1.277 -0.40828,0.168 -0.41006,0.105 -0.98771,-0.507 -2.1965,-1.237 -1.38707,-0.49 0.0321,-0.483 0.2086,-0.596 0.72206,-1.902 0.45107,-0.378 1.10894,-0.916 0.41185,-0.193 0.68818,-0.9 0.19434,-0.362 0,-0.184 -0.60261,-1.334 -0.94136,-1.704 -0.21751,-0.282 -0.25495,-0.16 -0.70958,-0.128 -0.72206,-0.305 -0.17651,-0.193 -0.13728,-0.499 -0.29774,-1.109 1.36925,-0.257 5.71053,-1.173 1.74364,-0.57 0.37976,-0.202"
+ class="c36029"
+ id="Erie, NY" />
+ <path
+ d="m 807.70422,181.77814 2.20363,12.263 -9.19248,1.629 -0.25673,0.05 -2.28207,0.394 -0.52951,-3.011 -0.44216,-2.549 -0.098,-0.61 0.6757,-0.465 1.08399,-0.917 1.46373,-1.376 1.35855,-1.355 0.33696,-0.467 0.28883,-0.637 0.74702,-0.964 1.64916,-1.3 1.60636,-1.173 1.38707,0.49"
+ class="c36013"
+ id="Chautauqua, NY" />
+ <path
+ d="m 817.62411,180.00214 2.64222,-0.137 2.24463,11.853 -4.83336,0.889 -4.64259,0.902 -0.7399,0.129 -2.38726,0.403 -2.20363,-12.263 2.1965,1.237 0.98771,0.507 0.41006,-0.105 0.40828,-0.168 1.92371,-1.277 1.84884,-0.989 2.14479,-0.981"
+ class="c36009"
+ id="Cattaraugus, NY" />
+ <path
+ d="m 824.74311,179.01314 3.30188,-0.562 0.19255,0.981 1.96115,-0.298 1.63846,10.808 -7.63425,1.44 -1.69194,0.336 -2.24463,-11.853 4.47678,-0.852"
+ class="c36003"
+ id="Allegany, NY" />
+ <path
+ d="m 833.58971,175.96814 2.04852,-0.385 3.68163,-0.747 -0.009,0.192 0.0553,0.53 0.2086,1.037 0.1141,0.104 0.65788,0.128 0.47424,2.131 0.61866,2.635 0.17829,-0.03 2.03068,-0.562 1.26228,6.29 -10.73466,2.18 -2.33913,0.473 -1.63846,-10.808 3.39102,-3.166"
+ class="c36101"
+ id="Steuben, NY" />
+ <path
+ d="m 850.7124,179.47114 0.9984,6.445 -6.15625,1.23 -0.64361,0.143 -1.26228,-6.29 -0.0392,-0.202 2.04139,-0.563 1.75969,-0.36 0.21038,0.893 0.85756,0.207 0.73811,-0.06 0.30665,-0.419 -0.15867,-0.77 1.34785,-0.259"
+ class="c36015"
+ id="Chemung, NY" />
+ <path
+ d="m 856.86865,175.14014 0.13014,0.17 1.37995,2.956 0.041,0.144 0.18542,0.901 0.0464,0.738 -0.47425,0.13 1.06794,4.186 -0.68106,0.144 -6.85335,1.407 -0.9984,-6.445 4.13091,-3.833 2.02534,-0.498"
+ class="c36107"
+ id="Tioga, NY" />
+ <path
+ d="m 861.24024,174.08014 1.09112,3.455 0.20146,0.33 0.24247,-0.163 2.10379,-0.04 1.19809,0.58 1.7276,-0.371 1.89697,-0.408 1.95046,4.202 -2.05565,0.456 -10.35134,2.243 -1.06794,-4.186 0.47425,-0.13 -0.0464,-0.738 -0.18542,-0.901 -0.041,-0.144 -1.37995,-2.956 -0.13014,-0.17 4.37159,-1.06"
+ class="c36007"
+ id="Broome, NY" />
+ <path
+ d="m 879.74643,167.56114 5.2559,2.662 0.28704,0.07 -1.03584,3.745 1.58319,0.402 -4.66043,4.692 -5.23985,5.103 -2.10557,-0.346 -0.53843,-1.15 -0.30487,-0.289 -1.01267,-0.713 -0.3227,-0.07 -1.95046,-4.202 -0.54021,-2.702 1.32646,-0.385 0.42432,-0.169 1.63311,-1.237 0.68997,-0.804 1.46374,-1.382 2.8936,-2.603 2.1537,-0.621"
+ class="c36025"
+ id="Delaware, NY" />
+ <path
+ d="m 875.93644,184.23714 5.23985,-5.103 2.35518,0.715 3.79929,1.214 -0.34588,1.036 -0.65787,1.51 -0.33697,0.859 1.64559,0.765 1.86488,0.811 0.74703,1.109 -0.58657,0.523 -0.32091,0.692 -0.44216,1.157 -4.57127,1.292 -0.12124,0.1 -0.016,0.06 0.2086,0.87 0.22464,0.503 -0.75415,0.08 -1.35142,0.07 -0.29774,-0.137 -1.831,-0.95 -0.52239,-0.497 -0.7381,-0.723 -0.45998,-1.053 -2.73136,-4.901"
+ class="c36105"
+ id="Sullivan, NY" />
+ <path
+ d="m 895.29306,165.21714 0.0891,0 0.0571,0.04 0.13015,0.378 0.63292,3.199 0.0642,0.577 -0.041,0.314 -0.65075,1.631 -0.50633,1.6 -0.0713,0.337 -1.6545,-0.699 -0.74702,0.242 -0.14442,1.79 -2.64221,0.339 -1.29615,0.16 -2.67608,-0.682 -1.58319,-0.402 1.03584,-3.745 -0.28704,-0.07 2.8419,-1.92 7.44883,-3.086"
+ class="c36039"
+ id="Greene, NY" />
+ <path
+ d="m 902.54399,203.16014 0.0303,0.153 -0.312,1.55 -0.25852,0.226 -1.24444,1.109 -0.12302,-0.515 0.16224,-2.161 0.45998,-2.088 1.07507,0.537 0.21038,1.189"
+ class="c36061"
+ id="New York, NY" />
+ <path
+ d="m 894.94005,174.45814 0.33161,3.938 0.94671,3.084 0.36192,0.738 0.56874,3.343 -1.62242,0.603 -1.21948,0.242 -1.04476,-0.03 -1.2391,-0.45 -1.77573,1.23 -0.74703,-1.109 -1.86488,-0.811 -1.64559,-0.765 0.33697,-0.859 0.65787,-1.51 0.34588,-1.036 -3.79929,-1.214 -2.35518,-0.715 4.66043,-4.692 2.67608,0.682 1.29615,-0.16 2.64221,-0.339 0.14442,-1.79 0.74702,-0.242 1.6545,0.699 -0.0571,1.166"
+ class="c36111"
+ id="Ulster, NY" />
+ <path
+ d="m 901.32986,200.56414 2.44966,0.291 0.32983,1.752 -1.56536,0.553 -0.21038,-1.189 -1.07507,-0.537 0.0713,-0.87"
+ class="c36005"
+ id="Bronx, NY" />
+ <path
+ d="m 900.75934,206.19814 1.24444,-1.109 0.43324,0.112 0.57943,1.311 -0.16759,2.055 -1.10181,-0.06 -0.75416,-1.132 -0.23355,-1.173"
+ class="c36047"
+ id="Kings, NY" />
+ <path
+ d="m 898.09038,191.71814 0.55626,1.166 1.02693,1.406 0.91639,1.036 0.10519,0.264 0.60796,3.09 -6.08137,-1.819 -0.40114,-0.121 3.26978,-5.092 0,0.07"
+ class="c36087"
+ id="Rockland, NY" />
+ <path
+ d="m 911.29253,205.51514 -5.43953,1.863 -1.37281,-4.821 3.88844,-3.808 2.9239,6.766"
+ class="c36059"
+ id="Nassau, NY" />
+ <path
+ d="m 897.14903,185.56114 0.33874,3.514 0.60261,2.573 -3.26978,5.092 -2.51563,-0.852 -6.31493,-2.209 -1.36746,-1.337 -0.22464,-0.503 -0.2086,-0.87 0.016,-0.06 0.12124,-0.1 4.57127,-1.292 0.44216,-1.157 0.32091,-0.692 0.58657,-0.523 1.77573,-1.23 1.2391,0.45 1.04476,0.03 1.21948,-0.242 1.62242,-0.603"
+ class="c36071"
+ id="Orange, NY" />
+ <path
+ d="m 902.54399,203.16014 1.56536,-0.553 0.37084,-0.05 1.37281,4.821 -3.00414,1.189 0.16759,-2.055 -0.57943,-1.311 -0.43324,-0.112 0.25852,-0.226 0.312,-1.55 -0.0303,-0.153"
+ class="c36081"
+ id="Queens, NY" />
+ <path
+ d="m 911.29253,205.51514 -2.9239,-6.766 -0.0196,-0.442 0.0909,-0.13 1.37459,-0.514 3.14855,0.403 10.27825,-4.756 2.58516,-3.008 0.97523,-0.506 4.66933,1.576 -0.20859,0.515 -4.10773,3.567 -1.10895,0.853 -8.83768,6.411 -1.39956,0.843 -0.98949,0.589 -0.48851,0.258 -0.36192,0.173 -2.67609,0.934"
+ class="c36103"
+ id="Suffolk, NY" />
+ <path
+ d="m 898.09038,191.71814 7.07086,-2.748 0.2817,1.623 -0.54556,3.712 -0.10697,0.105 -1.25158,1.278 1.79713,2.312 -1.55644,2.855 -2.44966,-0.291 -0.0268,-1.884 -0.60796,-3.09 -0.10519,-0.264 -0.91639,-1.036 -1.02693,-1.406 -0.55626,-1.166"
+ class="c36119"
+ id="Westchester, NY" />
+ <path
+ d="m 904.53367,185.29014 0.62757,3.68 -7.07086,2.748 0,-0.07 -0.60261,-2.573 0.5313,-1.303 5.70518,-2.266 0.80942,-0.216"
+ class="c36079"
+ id="Putnam, NY" />
+ <path
+ d="m 902.41384,173.36514 1.57427,8.743 0.54556,3.182 -0.80942,0.216 -5.70518,2.266 -0.5313,1.303 -0.33874,-3.514 -0.56874,-3.343 -0.36192,-0.738 -0.94671,-3.084 -0.33161,-3.938 0.22642,-0.1 0.21573,0 2.72066,0.65 0.84686,0.234 3.19134,-0.113 0.11232,-1.736 0.16046,-0.04"
+ class="c36027"
+ id="Dutchess, NY" />
+ <path
+ d="m 895.29306,165.21714 6.82839,-2.733 -0.25317,10.141 0.3851,0.779 -0.11232,1.736 -3.19134,0.113 -0.84686,-0.234 -2.72066,-0.651 -0.21573,0 -0.22642,0.1 0.0571,-1.166 0.0713,-0.337 0.50633,-1.6 0.65075,-1.631 0.041,-0.314 -0.0642,-0.577 -0.63292,-3.199 -0.13015,-0.378 -0.0571,-0.04 -0.0891,0"
+ class="c36021"
+ id="Columbia, NY" />
+ <path
+ d="m 895.15756,153.91014 5.88169,-1.478 1.23018,4.404 -0.14798,5.648 -6.82839,2.733 0.041,-7.595 -0.1765,-3.712"
+ class="c36083"
+ id="Rensselaer, NY" />
+ <path
+ d="m 894.61735,133.45214 0.59548,1.157 -0.31022,1.704 -0.0909,0.933 0.16224,1.342 0.0642,0.09 0.54556,0.226 2.76344,0.61 0.97345,4.525 1.71869,8.397 -5.88169,1.478 0.2086,-1.02 0.0802,-0.811 -0.0713,-1.576 -0.0731,-0.433 -1.32467,-4.308 -0.12837,-0.201 -1.6652,-4.154 -0.0481,-0.321 0.0178,-0.153 0.17473,-0.835 0.29952,-0.797 0.92352,-2.25 0.10341,-1.39 0.041,-1.871 0.92174,-0.338"
+ class="c36115"
+ id="Washington, NY" />
+ <path
+ d="m 787.33494,209.65314 0.0428,0.25 1.34072,8.123 -8.1798,1.312 -0.8023,-4.889 -0.59547,-3.51 8.19407,-1.286"
+ class="c39155"
+ id="Trumbull, OH" />
+ <path
+ d="m 786.02631,201.66614 1.30863,7.987 -8.19407,1.286 -0.7809,-4.878 -0.49742,-3.197 7.68595,-4.115 0.47781,2.917"
+ class="c39007"
+ id="Ashtabula, OH" />
+ <path
+ d="m 759.84843,275.96914 1.32645,-0.08 0.0856,1.52 2.16084,0.578 2.22502,1.567 0.1462,1.751 1.33358,-0.135 -0.007,1.005 -0.007,0.05 -0.0802,1.648 -0.0321,0.167 -0.0321,0.153 -0.0499,0.136 -0.0945,0.121 -0.17651,0.114 -2.83833,1.124 -1.57605,-0.05 -1.5511,-1.743 -2.86685,-1.116 1.09111,-0.699 1.04655,-3.757 0.016,-0.342 -0.11945,-2.011"
+ class="c39087"
+ id="Lawrence, OH" />
+ <path
+ d="m 748.39706,273.64814 1.14816,1.103 0.0642,0.04 3.73511,-0.418 3.41598,-0.283 0.9574,-0.07 0.0802,1.157 0.41184,0.909 1.63846,-0.114 0.11945,2.011 -0.016,0.342 -1.04655,3.757 -1.09111,0.699 -0.0802,-0.04 -0.3851,-0.257 -0.0178,-0.03 -0.14442,-0.169 -0.11945,-0.255 -0.041,-0.09 -0.49921,-1.502 -0.16937,-0.724 0.0178,-0.278 -0.009,-0.01 0,-0.02 -0.0143,-0.163 -0.0339,-0.137 -0.007,-0.03 -0.009,-0.03 -0.0303,-0.06 -0.0481,-0.07 -0.0232,-0.04 -0.082,-0.09 -0.18364,-0.08 -0.0909,0 -0.0214,0 -0.48494,0.213 -1.48691,0.673 -0.31914,0.145 0,0 -4.05959,3.414 -1.07507,-9.513"
+ class="c39145"
+ id="Scioto, OH" />
+ <path
+ d="m 748.39706,273.64814 1.07507,9.513 -1.01802,-0.763 -0.0428,-0.01 -0.60083,-0.282 -0.0481,-0.02 -1.9148,-0.46 -0.72028,-0.177 -0.025,0 -0.15154,-0.02 -0.21929,0.05 -1.39777,0.612 -0.18542,0.128 -0.13728,0.225 -0.0963,0.811 -1.02693,0.121 -0.57943,-8.887 4.94924,-1.462 2.13945,0.626"
+ class="c39001"
+ id="Adams, OH" />
+ <path
+ d="m 746.38776,269.66814 10.03756,-0.697 0.33518,5.117 -3.41598,0.283 -3.73511,0.418 -0.0642,-0.04 -1.14816,-1.103 -2.13945,-0.626 0.13015,-3.354"
+ class="c39131"
+ id="Pike, OH" />
+ <path
+ d="m 756.70523,268.01514 1.99325,-0.144 2.05743,0.207 2.10557,0.701 0.15154,2.387 -1.83814,4.723 -1.32645,0.08 -1.63846,0.114 -0.41184,-0.909 -0.0802,-1.157 -0.9574,0.07 -0.33518,-5.117 0.27991,-0.956"
+ class="c39079"
+ id="Jackson, OH" />
+ <path
+ d="m 765.0134,271.05214 0.0267,0.338 4.04711,-0.353 0.0892,1.043 -0.40293,2.202 -0.23178,3.714 0.005,0 0.45998,1.874 0.025,0.16 0,0.03 -0.009,0.08 -0.009,0.135 -0.0232,0.113 -0.0731,0.119 -0.0446,0.05 -0.0998,0.08 -0.0392,0.04 -0.10519,0.02 -0.33696,0.07 -1.166,0.387 -1.33358,0.135 -0.1462,-1.751 -2.22502,-1.567 -2.16084,-0.578 -0.0856,-1.52 1.83814,-4.723 2.00038,-0.114"
+ class="c39053"
+ id="Gallia, OH" />
+ <path
+ d="m 765.37711,266.87414 9.16752,-0.795 0.32804,1.928 -1.09111,0.474 0,0.2 0.0874,0.313 0.19255,0.252 0.19968,0.146 0.40293,0.269 0.19255,0.225 0.42789,1.85 -0.0428,0.193 -1.8631,1.326 -0.58656,0.154 0,-1.206 -0.0642,-0.178 -0.44037,-0.659 -0.34766,-0.432 -1.30149,-0.71 -0.009,0 -0.27277,-0.01 -0.30488,0.161 -0.82012,1.389 -0.0553,0.32 -0.0892,-1.043 -4.04711,0.353 -0.0267,-0.338 0.36371,-4.178"
+ class="c39105"
+ id="Meigs, OH" />
+ <path
+ d="m 756.43958,264.30414 1.99503,-0.131 2.03961,-0.472 -0.0321,-0.612 3.96866,-0.296 0.13728,2.072 0.67393,-0.06 0.15511,2.066 -0.36371,4.178 -2.00038,0.114 -0.15154,-2.387 -2.10557,-0.701 -2.05743,-0.207 -1.99325,0.144 -0.26565,-3.711"
+ class="c39163"
+ id="Vinton, OH" />
+ <path
+ d="m 781.18047,255.07014 0.72384,0.515 3.67985,-0.419 0.0802,0.731 -1.54932,2.42 -3.53186,3.029 -0.77555,-0.956 -0.12837,-0.137 -0.45106,-0.25 -0.20147,-0.02 -0.16046,0.05 -0.18363,0.159 -1.11786,1.365 -2.29812,2.926 -0.41006,0.902 -0.1355,-1.44 -1.69551,0.192 -0.7702,-0.955 -0.30843,-3.045 3.99541,-3.818 5.23807,-1.253"
+ class="c39167"
+ id="Washington, OH" />
+ <path
+ d="m 766.1063,258.50914 1.97007,-0.151 3.87062,1.783 0.30843,3.045 0.7702,0.955 1.69551,-0.192 0.1355,1.44 -0.312,0.69 -9.16752,0.795 -0.15511,-2.066 -0.67393,0.06 -0.27277,-4.122 1.99324,-0.144 -0.16224,-2.09"
+ class="c39009"
+ id="Athens, OH" />
+ <path
+ d="m 762.02531,256.79814 4.08099,1.711 0.16224,2.09 -1.99324,0.144 0.13549,2.05 -3.96866,0.296 0.0321,0.612 -2.03961,0.472 -1.99503,0.131 -0.18363,-2.316 -0.12124,-2.001 0.29774,-0.353 1.51901,-1.173 2.04138,-1.535 2.03247,-0.128"
+ class="c39073"
+ id="Hocking, OH" />
+ <path
+ d="m 746.91727,262.14814 4.53741,-0.392 0.3958,0.312 0.22464,0.242 4.18083,-0.322 0.18363,2.316 0.26565,3.711 -0.27991,0.956 -10.03756,0.697 -0.89322,-4.079 1.42273,-3.441"
+ class="c39141"
+ id="Ross, OH" />
+ <path
+ d="m 741.67207,266.06314 3.82247,-0.474 0.89322,4.079 -0.13015,3.354 -4.94924,1.462 -3.50334,0.433 -0.55269,-5.208 4.41973,-3.646"
+ class="c39071"
+ id="Highland, OH" />
+ <path
+ d="m 734.99344,269.83914 2.2589,-0.13 0.55269,5.208 3.50334,-0.433 0.57943,8.887 -1.39064,-0.69 -1.56714,-1.622 -0.11232,-0.09 -0.21751,-0.08 -0.60975,-0.08 -2.63686,0.281 -0.36014,-11.25"
+ class="c39015"
+ id="Brown, OH" />
+ <path
+ d="m 734.75097,269.83914 0.24247,0 0.36014,11.25 -3.30188,-0.939 -0.16937,-1.054 -1.95224,-3.198 -0.0713,-3.552 -0.28347,-0.772 0.70067,-1.526 4.475,-0.209"
+ class="c39025"
+ id="Clermont, OH" />
+ <path
+ d="m 728.57154,269.75914 1.70443,0.289 -0.70067,1.526 0.28347,0.772 0.0713,3.552 -3.48729,-1.286 -2.0093,0.733 -3.55148,-0.305 -0.52951,-4.598 2.90073,-0.337 1.29437,-0.235 3.34466,-0.152 0.67927,0.04"
+ class="c39061"
+ id="Hamilton, OH" />
+ <path
+ d="m 739.7751,262.30114 1.89697,3.762 -4.41973,3.646 -2.2589,0.13 -0.24247,0 -0.39223,-7.277 5.41636,-0.261"
+ class="c39027"
+ id="Clinton, OH" />
+ <path
+ d="m 731.93938,262.65414 2.41936,-0.09 0.39223,7.277 -4.475,0.209 -1.70443,-0.289 -1.05189,-6.821 4.41973,-0.284"
+ class="c39165"
+ id="Warren, OH" />
+ <path
+ d="m 725.53353,263.16814 1.98612,-0.23 1.05189,6.821 -0.67927,-0.04 -3.34466,0.152 -1.29437,0.235 -2.90073,0.337 -0.51346,-4.999 -0.12124,-1.043 5.81572,-1.232"
+ class="c39017"
+ id="Butler, OH" />
+ <path
+ d="m 724.49055,255.63314 1.04298,7.535 -5.81572,1.232 -0.41897,-3.666 -0.48851,-4.386 5.68022,-0.715"
+ class="c39135"
+ id="Preble, OH" />
+ <path
+ d="m 725.52818,255.47814 4.66756,-0.658 -0.14442,0.282 0.10341,0.362 0.13015,0.218 1.87023,-0.1 0.0428,0.674 -0.25852,6.395 -4.41973,0.284 -1.98612,0.23 -1.04298,-7.535 1.03763,-0.155"
+ class="c39113"
+ id="Montgomery, OH" />
+ <path
+ d="m 739.50054,257.12814 0.066,1.308 0.2086,3.865 -5.41636,0.261 -2.41936,0.09 0.25852,-6.395 1.24266,-0.06 0.75594,0.02 2.02712,0.172 0.0303,0.577 3.24661,0.154"
+ class="c39057"
+ id="Greene, OH" />
+ <path
+ d="m 739.5665,258.43614 7.0459,-0.433 0.30487,4.145 -1.42273,3.441 -3.82247,0.474 -1.89697,-3.762 -0.2086,-3.865"
+ class="c39047"
+ id="Fayette, OH" />
+ <path
+ d="m 746.40381,255.27014 7.34364,-0.576 0.15333,2.296 0.26564,3.111 1.96829,-0.114 0.12124,2.001 -4.18083,0.322 -0.22464,-0.242 -0.3958,-0.312 -4.53741,0.392 -0.30487,-4.145 -0.20859,-2.733"
+ class="c39129"
+ id="Pickaway, OH" />
+ <path
+ d="m 754.0131,251.26914 5.56968,-0.571 0.14263,2.161 0.90927,-0.06 1.25335,1.961 0.13728,2.033 -2.03247,0.128 -2.04138,1.535 -1.51901,1.173 -0.29774,0.353 -1.96829,0.114 -0.26564,-3.111 -0.15333,-2.296 0.26565,-3.425"
+ class="c39045"
+ id="Fairfield, OH" />
+ <path
+ d="m 759.58278,250.69814 4.02572,-0.185 3.21452,2.869 1.25335,4.976 -1.97007,0.151 -4.08099,-1.711 -0.13728,-2.033 -1.25335,-1.961 -0.90927,0.06 -0.14263,-2.161"
+ class="c39127"
+ id="Perry, OH" />
+ <path
+ d="m 781.03606,248.94814 1.92015,-0.234 4.08277,-0.362 1.2694,-0.144 0.15333,-0.113 0.19255,3.094 -1.58319,2.924 -1.40668,1.784 -0.0802,-0.731 -3.67985,0.419 -0.72384,-0.515 -0.32805,-2.321 -0.65788,0.09 -0.48494,-3.726 1.32646,-0.169"
+ class="c39111"
+ id="Monroe, OH" />
+ <path
+ d="m 780.79715,247.02814 0.23891,1.92 -1.32646,0.169 0.48494,3.726 0.65788,-0.09 0.32805,2.321 -5.23807,1.253 -2.49246,-3.574 -0.2389,-2.001 1.98433,-0.224 -0.0963,-0.731 0.55447,-0.685 2.51385,-1.656 0.65075,-0.169 1.97898,-0.255"
+ class="c39121"
+ id="Noble, OH" />
+ <path
+ d="m 766.82302,253.38214 6.62692,-0.633 2.49246,3.574 -3.99541,3.818 -3.87062,-1.783 -1.25335,-4.976"
+ class="c39115"
+ id="Morgan, OH" />
+ <path
+ d="m 763.5675,244.58514 8.18872,-0.877 0.54734,5.085 0.64896,-0.08 0.25852,2.034 0.2389,2.001 -6.62692,0.633 -3.21452,-2.869 -0.041,-5.928"
+ class="c39119"
+ id="Muskingum, OH" />
+ <path
+ d="m 786.10654,241.29714 3.10932,-0.451 -0.0464,2.926 -0.7078,4.323 -0.15333,0.113 -1.2694,0.144 -4.08277,0.362 -1.92015,0.234 -0.23891,-1.92 -0.6454,-5.032 5.95479,-0.699"
+ class="c39013"
+ id="Belmont, OH" />
+ <path
+ d="m 784.1222,235.39814 1.31754,-0.168 0.12837,0.997 -0.0553,0.144 0.5937,4.926 -5.95479,0.699 -2.09665,-0.706 -0.25674,-2.075 0.64362,-0.09 0.35301,-0.253 -0.34588,-2.79 5.67309,-0.685"
+ class="c39067"
+ id="Harrison, OH" />
+ <path
+ d="m 773.13081,241.88414 4.92429,-0.594 2.09665,0.706 0.6454,5.032 -1.97898,0.254 -0.65075,0.17 -2.51385,1.656 -0.55447,0.685 0.0963,0.731 -1.98433,0.224 -0.25852,-2.034 -0.64896,0.08 -0.54734,-5.085 0.62579,-0.08 0.14441,-0.1 -0.15155,-1.397 0.75594,-0.257"
+ class="c39059"
+ id="Guernsey, OH" />
+ <path
+ d="m 762.64575,237.94614 8.21903,-0.956 0.20147,1.704 1.66163,-0.192 0.40293,3.382 -0.75594,0.257 0.15155,1.397 -0.14441,0.1 -0.62579,0.08 -8.18872,0.877 -0.39402,-1.633 -0.52773,-5.006"
+ class="c39031"
+ id="Coshocton, OH" />
+ <path
+ d="m 753.44258,243.45814 4.81375,-0.394 0.0392,0.435 1.97007,-0.169 2.90786,-0.378 0.39402,1.633 0.041,5.928 -4.02572,0.185 -5.56968,0.571 -0.24961,-4.323 -0.32091,-3.488"
+ class="c39089"
+ id="Licking, OH" />
+ <path
+ d="m 744.36242,240.80714 3.95441,-0.305 5.02769,1.277 0.0981,1.679 0.32091,3.488 -7.11186,0.579 -0.35301,-2.305 -1.3015,0.158 -0.44393,-2.988 -0.19077,-1.583"
+ class="c39041"
+ id="Delaware, OH" />
+ <path
+ d="m 753.76349,246.94614 0.24961,4.323 -0.26565,3.425 -7.34364,0.576 -0.26565,-6.846 0.51347,-0.899 7.11186,-0.579"
+ class="c39049"
+ id="Franklin, OH" />
+ <path
+ d="m 740.97319,249.03714 5.16497,-0.613 0.26565,6.846 0.20859,2.733 -7.0459,0.433 -0.066,-1.308 1.58318,-5.772 -0.11053,-2.319"
+ class="c39097"
+ id="Madison, OH" />
+ <path
+ d="m 731.94652,251.86314 9.1372,-0.507 -1.58318,5.772 -3.24661,-0.154 -0.0303,-0.577 -2.02712,-0.172 -0.75594,-0.02 -1.24266,0.06 -0.0428,-0.674 -0.20859,-3.722"
+ class="c39023"
+ id="Clark, OH" />
+ <path
+ d="m 739.79114,246.43214 1.18205,2.605 0.11053,2.319 -9.1372,0.507 -0.29774,-5.408 4.0275,-0.21 1.03763,0.299 3.07723,-0.112"
+ class="c39021"
+ id="Champaign, OH" />
+ <path
+ d="m 724.62783,249.10814 7.13505,-0.577 0.18364,3.332 0.20859,3.722 -1.87023,0.1 -0.13015,-0.218 -0.10341,-0.362 0.14442,-0.282 -4.66756,0.658 -0.90035,-6.37"
+ class="c39109"
+ id="Miami, OH" />
+ <path
+ d="m 724.16072,245.49114 0.19077,-0.578 1.09646,-2.541 0.38332,-0.05 5.41636,-0.722 0.40115,4.851 0.1141,2.076 -7.13505,0.577 -0.47602,-3.608 0.009,0"
+ class="c39149"
+ id="Shelby, OH" />
+ <path
+ d="m 724.15181,245.50014 0.47602,3.608 0.90035,6.37 -1.03763,0.155 -5.68022,0.715 -0.2086,-2.034 -0.70958,-7.032 -0.11945,-0.977 6.37911,-0.805"
+ class="c39037"
+ id="Darke, OH" />
+ <path
+ d="m 722.85744,237.94614 1.30328,7.545 -0.009,0 -6.37911,0.805 -0.56874,-5.056 -0.42075,-3.583 6.07423,0.28"
+ class="c39107"
+ id="Mercer, OH" />
+ <path
+ d="m 723.87368,237.81914 2.98809,-0.396 0.0856,0.669 3.32148,-0.121 2.61191,-0.346 0.31022,2.437 -1.94333,1.542 -5.41636,0.722 -0.38332,0.05 -1.09646,2.541 -0.19077,0.578 -1.30328,-7.545 1.01624,-0.127"
+ class="c39011"
+ id="Auglaize, OH" />
+ <path
+ d="m 733.19096,240.06214 0.72919,0.118 5.54116,-0.25 0.0392,0.121 0.2906,6.381 -3.07723,0.112 -1.03763,-0.299 -4.0275,0.21 -0.40115,-4.851 1.94333,-1.542"
+ class="c39091"
+ id="Logan, OH" />
+ <path
+ d="m 739.50054,240.05114 1.74364,-0.265 3.11824,1.021 0.19077,1.583 0.44393,2.988 1.3015,-0.158 0.35301,2.305 -0.51347,0.899 -5.16497,0.613 -1.18205,-2.605 -0.2906,-6.381"
+ class="c39159"
+ id="Union, OH" />
+ <path
+ d="m 750.25124,233.89714 0.16224,1.342 -1.67946,0.264 -0.50634,3.824 0.0892,1.175 -3.95441,0.305 -3.11824,-1.021 -0.57586,-4.162 5.24342,-1.084 4.3395,-0.643"
+ class="c39101"
+ id="Marion, OH" />
+ <path
+ d="m 750.25124,233.89714 2.22681,-0.458 2.30703,3.446 -0.041,1.175 0.30487,3.581 -1.70442,0.138 -5.02769,-1.277 -0.0892,-1.175 0.50634,-3.824 1.67946,-0.264 -0.16224,-1.342"
+ class="c39117"
+ id="Morrow, OH" />
+ <path
+ d="m 761.65448,235.47114 0.99127,2.475 0.52773,5.006 -2.90786,0.378 -1.97007,0.169 -0.0392,-0.435 -4.81375,0.394 -0.0981,-1.679 1.70442,-0.138 -0.30487,-3.581 0.041,-1.175 4.91002,-0.819 1.95938,-0.595"
+ class="c39083"
+ id="Knox, OH" />
+ <path
+ d="m 771.10547,231.71814 0.11232,0.765 -0.19433,0.192 0.51525,4.235 -0.67393,0.08 -8.21903,0.956 -0.99127,-2.475 1.27831,-2.532 8.17268,-1.221"
+ class="c39075"
+ id="Holmes, OH" />
+ <path
+ d="m 776.84988,231.22214 0.23355,1.949 0.98771,-0.11 0.72385,5.812 -0.35301,0.253 -0.64362,0.09 0.25674,2.075 -4.92429,0.594 -0.40293,-3.382 -1.66163,0.192 -0.20147,-1.704 0.67393,-0.08 -0.51525,-4.235 0.19433,-0.192 5.63209,-1.261"
+ class="c39157"
+ id="Tuscarawas, OH" />
+ <path
+ d="m 780.52437,228.85814 4.32168,2.322 -0.72385,4.218 -5.67309,0.685 -0.37797,-3.022 -0.98771,0.11 -0.23355,-1.949 1.31754,-0.178 -0.16759,-1.462 0.60974,-0.451 1.9148,-0.273"
+ class="c39019"
+ id="Carroll, OH" />
+ <path
+ d="m 784.84605,231.18014 3.39102,-0.154 1.56536,4.165 -0.40115,4.933 -0.18542,0.722 -3.10932,0.451 -0.5937,-4.926 0.0553,-0.144 -0.12837,-0.997 -1.31754,0.168 0.72385,-4.218"
+ class="c39081"
+ id="Jefferson, OH" />
+ <path
+ d="m 789.57779,223.36214 0.20324,1.105 0.79516,4.857 -2.33912,1.702 -3.39102,0.154 -4.32168,-2.322 -0.62757,-4.011 9.68099,-1.485"
+ class="c39029"
+ id="Columbiana, OH" />
+ <path
+ d="m 774.35564,223.71714 5.23629,-0.812 0.93244,5.953 -1.9148,0.273 -0.60974,0.451 0.16759,1.462 -1.31754,0.178 -5.63209,1.261 -0.93957,-6.406 4.07742,-2.36"
+ class="c39151"
+ id="Stark, OH" />
+ <path
+ d="m 769.32795,224.48014 0.95027,1.597 0.82725,5.641 -8.17268,1.221 -1.15173,-7.416 7.54689,-1.043"
+ class="c39169"
+ id="Wayne, OH" />
+ <path
+ d="m 760.82544,223.99614 0.95562,1.527 1.15173,7.416 -1.27831,2.532 -1.95938,0.595 -0.61152,-3.938 -1.11786,-1.742 -0.69889,-1.569 -0.40827,-2.594 -0.25674,0.03 1.40491,-1.905 2.81871,-0.353"
+ class="c39005"
+ id="Ashland, OH" />
+ <path
+ d="m 751.60444,226.90614 4.99738,-0.652 0.25674,-0.03 0.40827,2.594 0.69889,1.569 1.11786,1.742 0.61152,3.938 -4.91002,0.819 -2.30703,-3.446 -0.87361,-6.533"
+ class="c39139"
+ id="Richland, OH" />
+ <path
+ d="m 751.60444,226.90614 0.87361,6.533 -2.22681,0.458 -4.3395,0.643 -0.92888,-6.662 4.82801,-0.747 1.79357,-0.225"
+ class="c39033"
+ id="Crawford, OH" />
+ <path
+ d="m 739.72696,228.61814 5.2559,-0.74 0.92888,6.662 -5.24342,1.084 -0.35658,0.03 -0.99484,-0.192 -0.36192,-2.678 -0.34053,0.04 1.11251,-4.211"
+ class="c39175"
+ id="Wyandot, OH" />
+ <path
+ d="m 732.36371,233.60114 6.25074,-0.772 0.34053,-0.04 0.36192,2.678 0.99484,0.192 0.35658,-0.03 0.57586,4.162 -1.74364,0.265 -0.0392,-0.121 -5.54116,0.25 -0.72919,-0.118 -0.82725,-6.461"
+ class="c39065"
+ id="Hardin, OH" />
+ <path
+ d="m 732.06062,231.29414 0.30309,2.307 0.51703,4.024 -2.61191,0.346 -3.32148,0.121 -0.0856,-0.669 -2.98809,0.396 0.47246,-4.124 1.99325,-0.273 1.92015,-0.593 -0.0891,-0.676 1.93085,-0.594 1.95937,-0.265"
+ class="c39003"
+ id="Allen, OH" />
+ <path
+ d="m 731.32251,225.61214 7.85711,-0.997 0.54734,4.003 -1.11251,4.211 -6.25074,0.772 -0.30309,-2.307 -0.73811,-5.682"
+ class="c39063"
+ id="Hancock, OH" />
+ <path
+ d="m 731.32251,225.61214 0.73811,5.682 -1.95937,0.265 -1.93085,0.594 0.0891,0.676 -1.92015,0.593 -1.99325,0.273 -1.37459,-2.893 0.50098,-4.146 1.92729,-0.251 5.92269,-0.793"
+ class="c39137"
+ id="Putnam, OH" />
+ <path
+ d="m 716.05401,231.66314 6.91754,-0.861 1.37459,2.893 -0.47246,4.124 -1.01624,0.127 -6.07423,-0.28 -0.542,-4.468 -0.1872,-1.535"
+ class="c39161"
+ id="Van Wert, OH" />
+ <path
+ d="m 788.74875,218.21114 0.82904,5.151 -9.68099,1.485 -0.30487,-1.942 0.94671,-3.567 8.1798,-1.312 0.0303,0.185"
+ class="c39099"
+ id="Mahoning, OH" />
+ <path
+ d="m 773.1219,215.47114 6.61444,-1.022 0.8023,4.889 -0.94671,3.567 -5.23629,0.812 -1.24088,-8.246 0.007,0"
+ class="c39133"
+ id="Portage, OH" />
+ <path
+ d="m 773.11476,215.47114 1.24088,8.246 -4.07742,2.36 -0.95027,-1.597 -0.9467,-6.615 2.03247,-0.321 -0.52238,-0.941 -0.29061,-0.649 3.51403,-0.483"
+ class="c39153"
+ id="Summit, OH" />
+ <path
+ d="m 768.38125,217.86514 0.9467,6.615 -7.54689,1.043 -0.95562,-1.527 -0.21572,-1.686 2.9346,-3.32 1.56536,-0.578 3.27157,-0.547"
+ class="c39103"
+ id="Medina, OH" />
+ <path
+ d="m 748.66984,220.43614 8.50785,-1.061 0.82904,4.974 -1.40491,1.905 -4.99738,0.652 -1.79357,0.225 -1.14103,-6.695"
+ class="c39077"
+ id="Huron, OH" />
+ <path
+ d="m 748.80533,221.23314 1.00554,5.898 -4.82801,0.747 -5.2559,0.74 -0.54734,-4.003 -0.2496,-2.007 9.87531,-1.375"
+ class="c39147"
+ id="Seneca, OH" />
+ <path
+ d="m 738.27214,216.94214 1.27832,-0.195 0.15154,1.006 4.59802,-0.619 1.93442,-0.289 0.0963,0.651 1.79,-0.26 0.68462,3.997 -9.87531,1.375 -0.65788,-5.666"
+ class="c39143"
+ id="Sandusky, OH" />
+ <path
+ d="m 737.89417,214.22314 0.37797,2.719 0.65788,5.666 0.2496,2.007 -7.85711,0.997 -0.76485,-5.657 0.49742,-0.06 1.6652,-1.422 0.46533,-0.867 2.08774,-2.991 2.62082,-0.387"
+ class="c39173"
+ id="Wood, OH" />
+ <path
+ d="m 730.34906,218.27514 0.2086,1.68 0.76485,5.657 -5.92269,0.793 -0.75772,-6.017 -1.92907,0.241 -0.16759,-1.323 7.80362,-1.031"
+ class="c39069"
+ id="Henry, OH" />
+ <path
+ d="m 723.47253,226.65614 -0.50098,4.146 -6.91754,0.861 -0.72384,-6.06 5.90486,-0.731 2.10736,0.781 0.13014,1.003"
+ class="c39125"
+ id="Paulding, OH" />
+ <path
+ d="m 722.71303,220.62914 1.92907,-0.241 0.75772,6.017 -1.92729,0.251 -0.13014,-1.003 -2.10736,-0.781 -5.90486,0.731 -0.0499,-0.425 -0.43324,-3.56 7.86602,-0.989"
+ class="c39039"
+ id="Defiance, OH" />
+ <path
+ d="m 772.341,210.40714 1.60815,-0.255 -0.24069,-1.626 2.92569,-0.456 0.0874,-1.583 1.63846,-0.426 0.7809,4.878 0.59547,3.51 -6.61444,1.022 -0.7809,-5.064"
+ class="c39055"
+ id="Geauga, OH" />
+ <path
+ d="m 777.86255,202.86414 0.49742,3.197 -1.63846,0.426 -0.0874,1.583 -2.92569,0.456 0.24069,1.626 -1.60815,0.255 -1.87023,-1.146 0.6347,-1.086 0.78625,-0.916 0.52238,-0.564 1.00375,-0.916 3.67985,-2.434 0.76485,-0.481"
+ class="c39085"
+ id="Lake, OH" />
+ <path
+ d="m 770.47077,209.26114 1.87023,1.146 0.7809,5.064 -0.007,0 -3.51403,0.483 0.29061,0.649 0.52238,0.941 -2.03247,0.321 -3.27157,0.547 -0.24069,-1.738 -1.60636,0.227 -0.48138,-3.559 0.11767,0.105 0.082,0.05 0.36906,0.113 1.05367,0.03 2.23216,-0.426 0.0981,-0.05 0.42611,-0.37 1.18026,-1.087 0.49742,-0.544 1.46374,-1.699 0.16937,-0.205"
+ class="c39035"
+ id="Cuyahoga, OH" />
+ <path
+ d="m 762.78125,213.34214 0.48138,3.559 1.60636,-0.227 0.24069,1.738 -1.56536,0.578 -2.9346,3.32 0.21572,1.686 -2.81871,0.353 -0.82904,-4.974 -0.57052,-3.303 6.17408,-2.73"
+ class="c39093"
+ id="Lorain, OH" />
+ <path
+ d="m 750.51689,215.41414 1.52792,1.31 1.0929,0.512 0.80407,0.251 0.25673,0.03 0.30488,-0.04 0.32983,-0.168 0.46711,-0.313 1.30684,-0.927 0.57052,3.303 -8.50785,1.061 -0.54913,-3.2 -1.79,0.26 -0.0963,-0.651 4.28245,-1.431"
+ class="c39043"
+ id="Erie, OH" />
+ <path
+ d="m 742.03934,213.53514 1.84171,0.435 3.68162,0.215 0.56874,-0.233 1.89697,1.15 0.48851,0.312 -4.28245,1.431 -1.93442,0.289 -4.59802,0.619 -0.15154,-1.006 -1.27832,0.195 -0.37797,-2.719 4.14517,-0.688"
+ class="c39123"
+ id="Ottawa, OH" />
+ <path
+ d="m 731.68265,212.58614 5.21311,-0.884 5.14358,1.833 -4.14517,0.688 -2.62082,0.387 -2.08774,2.991 -0.46533,0.867 -1.6652,1.422 -0.49742,0.06 -0.2086,-1.68 -0.64361,-5.343 1.9772,-0.346"
+ class="c39095"
+ id="Lucas, OH" />
+ <path
+ d="m 721.60409,214.25814 8.10136,-1.326 0.64361,5.343 -7.80362,1.031 -1.59032,-4.944 0.64897,-0.104"
+ class="c39051"
+ id="Fulton, OH" />
+ <path
+ d="m 714.08394,215.41414 6.87118,-1.052 1.59032,4.944 0.16759,1.323 -7.86602,0.989 -0.28882,-2.394 -0.47425,-3.81"
+ class="c39171"
+ id="Williams, OH" />
+ <path
+ d="m 422.03202,332.62114 8.89652,0.443 2.20898,0.112 -0.18542,3.455 -0.15155,0 -0.4261,8.062 -2.40331,-0.119 -9.86819,-0.563 -7.47914,-0.473 0.8023,-11.396 8.60591,0.474"
+ class="c40139"
+ id="Texas, OK" />
+ <path
+ d="m 395.71508,330.77314 2.30703,0.178 9.45099,0.779 5.69627,0.401 0.25674,0.02 -0.8023,11.396 -2.38726,-0.155 -15.3719,-1.068 0.85043,-11.547"
+ class="c40025"
+ id="Cimarron, OK" />
+ <path
+ d="m 548.45533,335.33714 0.0731,5.359 0.0392,2.291 -6.99064,0.03 -0.22464,-7.618 7.10296,-0.06"
+ class="c40115"
+ id="Ottawa, OK" />
+ <path
+ d="m 540.15428,335.40114 1.19809,0 0.22464,7.618 -0.0713,3.728 -5.91556,0.04 -1.91124,-2.007 0.37797,-9.314 6.09741,-0.06"
+ class="c40035"
+ id="Craig, OK" />
+ <path
+ d="m 541.5057,346.74014 -0.0178,8.06 -1.97542,0.02 0.025,2.017 -1.65629,0 -4.29136,0.02 -0.016,-4.029 0.0499,-6.041 1.96651,-0.02 5.91556,-0.04"
+ class="c40097"
+ id="Mayes, OK" />
+ <path
+ d="m 548.56765,342.98714 0.0553,3.903 1.1339,7.803 -4.32168,0.07 -3.94727,0.04 0.0178,-8.06 0.0713,-3.728 6.99064,-0.03"
+ class="c40041"
+ id="Delaware, OK" />
+ <path
+ d="m 545.43514,354.75914 4.32168,-0.07 0.21751,1.377 1.64024,10.709 -6.21152,0.09 -0.082,-6.078 0.15511,-2.481 -0.041,-3.552"
+ class="c40001"
+ id="Adair, OK" />
+ <path
+ d="m 541.48787,354.80014 3.94727,-0.04 0.041,3.552 -0.15511,2.481 0.082,6.078 -5.94765,0.06 -2.59408,-4.01 -0.041,-0.06 -0.29774,-2.122 0.0731,-1.31 0.11233,-0.216 0.36905,-0.33 0.25673,-0.01 0.0731,-0.08 0.48138,-1.13 -0.007,-0.806 1.65629,0 -0.025,-2.017 1.97542,-0.02"
+ class="c40021"
+ id="Cherokee, OK" />
+ <path
+ d="m 551.61457,366.77914 0.84152,5.554 -0.007,0.403 -1.14816,1.18 -3.5283,0.129 -0.85222,-0.562 -0.37796,-0.105 -0.36014,0.04 -0.10341,0.05 -0.7078,0.697 -1.77574,-1.712 -0.61152,0 -0.9164,-0.24 -0.27456,-0.1 -0.28704,-0.264 -0.5723,-0.779 -1.478,-4.154 5.94765,-0.06 6.21152,-0.09"
+ class="c40135"
+ id="Sequoyah, OK" />
+ <path
+ d="m 540.9334,371.08014 0.5723,0.779 0.28704,0.264 0.27456,0.1 0.9164,0.24 0.61152,0 1.77574,1.712 0.0143,2.305 -1.39777,0.508 -0.71671,0 0.041,3.343 -7.88029,0.07 -0.0178,-2.362 -1.96829,0 -0.0178,-0.981 0.0678,-2.153 1.98256,0.05 1.3425,0.239 1.78465,-1.058 0.59191,-1.176 1.43343,-1.687 0.30309,-0.2"
+ class="c40061"
+ id="Haskell, OK" />
+ <path
+ d="m 552.44895,372.73614 -0.11232,10.341 -0.0481,4.747 -0.0392,5.121 -8.97853,0.135 -2.33734,-3.993 -0.0392,-4.035 1.14104,-1.679 1.30863,-0.361 -0.0731,-6.027 0.71671,0 1.39777,-0.509 -0.0143,-2.305 0.7078,-0.697 0.10341,-0.05 0.36014,-0.04 0.37796,0.105 0.85222,0.562 3.5283,-0.129 1.14816,-1.18"
+ class="c40079"
+ id="Le Flore, OK" />
+ <path
+ d="m 543.31175,380.32714 0.0321,2.685 -1.30863,0.361 -1.14104,1.679 0.0392,4.035 -8.54886,0.06 0,-2.083 0.0874,-5.971 2.4764,-0.02 0.48316,-0.667 7.88029,-0.07"
+ class="c40077"
+ id="Latimer, OK" />
+ <path
+ d="m 533.49526,374.91114 -0.0678,2.154 0.0178,0.98 1.96829,0 0.0178,2.363 -0.48316,0.666 -2.4764,0.02 -0.0874,5.97 0,2.083 -2.94887,2.032 -3.96154,0.02 0,-2.018 -3.94549,0 0,-2.007 0.0731,-6.535 0.5206,-0.964 0.90748,-1.237 0.16224,-0.1 0.36905,-0.06 0.67571,0.03 3.7048,-0.779 0.69176,-0.316 3.61387,-2.007 1.24801,-0.298"
+ class="c40121"
+ id="Pittsburg, OK" />
+ <path
+ d="m 521.52864,387.16614 0,6.043 -1.00375,2.027 -4.95103,-0.02 -1.99325,-2.016 0.0571,-4.035 1.98433,0 0.009,-2.015 5.89773,0.01"
+ class="c40029"
+ id="Coal, OK" />
+ <path
+ d="m 521.52864,389.17414 3.94549,0 0,2.018 3.96154,-0.02 0.009,2.009 -2.01821,0.159 0.009,7.941 -4.01859,0 -7.86602,-0.02 0.0232,-6.044 4.95103,0.02 1.00375,-2.027 0,-4.035"
+ class="c40005"
+ id="Atoka, OK" />
+ <path
+ d="m 532.38454,389.14414 8.54886,-0.06 2.33734,3.993 -2.05387,0.01 0.0642,6.092 -1.17491,0 -0.80408,0.435 -0.0802,1.581 -11.78655,0.07 -0.009,-7.941 2.01821,-0.158 -0.009,-2.01 2.94887,-2.032"
+ class="c40127"
+ id="Pushmataha, OK" />
+ <path
+ d="m 543.27074,393.08014 8.97853,-0.135 -0.0571,7.343 -0.0874,12.762 -4.97421,-1.431 -2.3623,-0.965 -3.26265,-2.612 -2.22681,-1.904 -0.0571,-4.926 0.0802,-1.581 0.80408,-0.436 1.17491,0 -0.0642,-6.092 2.05387,-0.01"
+ class="c40089"
+ id="McCurtain, OK" />
+ <path
+ d="m 539.22184,401.21214 0.0571,4.926 -1.20522,-0.403 -0.13549,0 -0.0642,0.03 -0.016,0 -0.0107,0 -0.40828,0.619 -0.009,0.03 0,0.04 -0.007,0.02 0.007,0.02 0.0731,0.154 0,0.03 0.0321,0.2 -0.0321,0.232 -0.10341,0.233 -0.10697,0.104 -0.50634,0.33 -0.14976,0.02 -0.28169,0.03 -0.55448,0.07 -0.009,0 -1.28723,0.06 -0.71315,-0.06 -1.88093,-0.25 -0.0713,-0.06 -0.0749,-0.128 0,-0.02 -0.005,-0.118 0.0571,-0.162 0.005,-0.153 -0.20147,-0.514 -0.14441,-0.06 -0.61687,-0.03 -1.39064,0.722 -1.5921,0.829 -0.007,0 -1.58319,-0.16 -1.478,-1.165 -0.32983,-0.417 -0.041,-0.13 -0.007,-4.097 -1.01267,-0.724 4.01859,0 11.78655,-0.07"
+ class="c40023"
+ id="Choctaw, OK" />
+ <path
+ d="m 523.4167,401.28514 1.01267,0.724 0.007,4.097 0.041,0.13 0.32983,0.417 1.478,1.164 1.58319,0.161 -1.63133,0.611 -0.92353,-0.169 -1.10003,-0.217 -0.25851,0.03 -0.41006,0.03 -2.13766,0.178 -0.96454,0.223 -0.16046,0.563 -0.11945,0.555 -0.009,0.06 -0.016,0.06 -0.0553,0.176 -0.0481,0.154 -0.009,0.02 -0.0232,0.03 -0.17828,0.185 -0.0232,0.03 -0.34588,0.148 -0.39401,0.105 -2.83655,0.701 -0.18363,-0.252 -0.82725,-1.125 0,0 -0.24961,-0.08 -0.22464,-0.03 -0.97344,0.186 -0.025,0 -0.17651,-0.122 -1.95224,-1.31 -0.0161,-0.06 -0.016,-0.111 -0.016,-0.283 0.0642,-0.369 0.54735,-5.659 3.37497,-0.97 7.86602,0.02"
+ class="c40013"
+ id="Bryan, OK" />
+ <path
+ d="m 505.59513,400.83414 4.92429,0.05 0.99662,0.246 0.72385,0.854 0,0.144 -0.0642,0.104 -0.54735,5.659 -1.9041,0.859 -0.0161,0 -0.92352,0.155 -1.79357,-0.549 -0.19255,-0.134 -0.312,-0.349 -0.96454,-1.983 -0.6347,-2.715 0.7078,-2.348"
+ class="c40095"
+ id="Marshall, OK" />
+ <path
+ d="m 507.67574,393.14414 5.90487,0.06 1.99325,2.016 -0.0232,6.044 -3.37497,0.97 0.0642,-0.104 0,-0.144 -0.72385,-0.854 -0.99662,-0.246 -4.92429,-0.05 0.0392,-3.696 0.98771,0 0.0499,-4.001 1.00375,0"
+ class="c40069"
+ id="Johnston, OK" />
+ <path
+ d="m 514.06376,383.83314 1.56715,3.319 -0.009,2.015 -1.98433,0 -0.0571,4.034 -5.90487,-0.06 0.0143,-2.016 -1.97542,-0.02 0.009,-1.004 0.0481,-5.038 0.0642,-2.539 2.88468,1.508 5.34326,-0.207"
+ class="c40123"
+ id="Pontotoc, OK" />
+ <path
+ d="m 505.77164,385.07014 -0.0481,5.038 -3.95441,-0.05 -0.97166,0.312 -0.0481,0.06 -0.0321,0.234 0.14263,0.321 0.29774,0.242 0.2496,0.722 0.22464,0.997 -0.7078,0.119 -3.1325,-0.05 -3.96154,-0.06 -1.92906,-4.065 0.0802,-4.019 13.7905,0.202"
+ class="c40049"
+ id="Garvin, OK" />
+ <path
+ d="m 497.79151,393.01614 3.1325,0.05 0.7078,-0.119 -0.22464,-0.997 -0.2496,-0.722 -0.29774,-0.242 -0.14263,-0.321 0.0321,-0.234 0.0481,-0.06 0.97166,-0.312 3.95441,0.05 -0.009,1.004 1.97542,0.02 -0.0143,2.016 -1.00375,0 -0.0499,4.001 -0.98771,0 -1.8007,-0.02 -0.19968,-0.119 -0.0571,-0.113 0,-0.05 0.21751,-0.153 -0.041,-0.506 -0.0553,-0.06 -5.95479,-0.09 0.0481,-3.022"
+ class="c40099"
+ id="Murray, OK" />
+ <path
+ d="m 493.69269,403.02914 11.19464,0.153 0.6347,2.715 -0.18541,0.104 -2.85973,4.96 -0.0891,0.119 -0.19255,0.153 -0.27278,0.09 -0.30487,-0.04 -0.26565,-0.09 -5.53759,-2.42 -0.16759,-0.112 -0.11232,-0.136 0,0 -0.0161,-0.04 -0.0499,-0.119 -0.37618,-1.719 -1.46374,0.394 0.0642,-4.002"
+ class="c40085"
+ id="Love, OK" />
+ <path
+ d="m 493.82997,392.95214 3.96154,0.06 -0.0481,3.022 5.95479,0.09 0.0553,0.06 0.041,0.507 -0.21751,0.153 0,0.05 0.0571,0.113 0.19968,0.119 1.8007,0.02 -0.0392,3.696 -0.7078,2.348 -11.19464,-0.153 0.0499,-5.037 0.0874,-5.04"
+ class="c40019"
+ id="Carter, OK" />
+ <path
+ d="m 482.85284,397.75714 10.88977,0.235 -0.0499,5.037 -0.0642,4.002 -0.68284,-0.476 -1.9362,-1.292 -0.65074,0.82 -0.99663,1.036 -0.94849,0.747 -0.59369,0.176 -0.22643,-0.02 -1.67768,-0.765 -0.21037,-0.194 0.49028,-1.061 0.16938,-1.229 -0.007,0 -0.7078,-0.28 -0.65967,0.161 -0.0232,0 -0.41006,0 -0.80408,-0.241 -0.0321,0 -0.0481,-0.05 -0.32983,-0.66 -0.49029,-5.938"
+ class="c40067"
+ id="Jefferson, OK" />
+ <path
+ d="m 491.90091,388.88714 1.92906,4.065 -0.0874,5.04 -10.88977,-0.235 0.0571,-5.023 1.08398,-4 7.90703,0.153"
+ class="c40137"
+ id="Stephens, OK" />
+ <path
+ d="m 473.05062,394.82414 0.99485,0.03 1.9772,-0.28 3.96154,-0.565 0.99662,-0.849 0.66679,-0.444 1.26228,0.02 -0.0571,5.023 0.49029,5.939 -1.14817,-1.889 -2.94173,-0.923 -0.72385,-0.162 -0.36905,0.208 -0.76307,0.965 -1.01267,0.909 -0.016,0.02 -0.007,0 -0.54021,-0.194 -0.89856,-1.446 -0.43324,-0.369 -0.41897,-0.277 -0.19255,-0.01 0.11945,-3.993 -0.98771,-0.02 0.041,-1.68"
+ class="c40033"
+ id="Cotton, OK" />
+ <path
+ d="m 474.13461,384.46714 9.88423,0.248 -0.025,4.019 -1.08398,4 -1.26228,-0.02 -0.66679,0.444 -0.99662,0.849 -3.96154,0.565 -1.9772,0.28 -0.99485,-0.03 0.0553,-1.749 -1.0929,-0.622 -1.98433,-0.06 0.0571,-2.016 0.17651,-6.035 3.87239,0.121"
+ class="c40031"
+ id="Comanche, OK" />
+ <path
+ d="m 470.08571,390.38114 -0.0571,2.016 1.98433,0.06 1.0929,0.622 -0.0553,1.749 -0.041,1.679 0.98771,0.02 -0.11945,3.994 -1.72047,0.53 -1.23731,-0.05 -1.74365,-0.426 -1.75078,-1.047 -0.26565,-0.133 -0.025,0 -1.74364,-0.138 -0.76307,0.01 -0.35301,0.02 -0.7078,-0.161 -0.3851,-0.119 -0.24069,-0.07 -0.009,-0.01 0,0 -0.32805,-1.783 0.0161,-0.499 0.0232,-0.531 0.29774,-0.09 0.0642,-0.126 0,-0.188 -0.2817,-0.795 -0.11945,-0.1 -0.25852,0.03 -0.1034,-0.348 -0.0321,-0.447 0.353,-1.553 0.75594,-1.575 0.42432,-0.595 0.41898,-0.09 0.79516,0.06 0.0891,0.1 0.1355,-0.02 0.0731,-0.05 0.0392,-0.545 -0.14263,-0.273 -0.24247,-0.298 1.2694,0.05 0.62757,0.772 -0.009,0.255 3.28761,0.1"
+ class="c40141"
+ id="Tillman, OK" />
+ <path
+ d="m 462.36232,384.85914 1.06081,-0.795 0.1765,-0.03 0.0731,0.03 0.39401,0.266 0.0874,0.146 1.61528,3.293 -0.85934,1.439 0.24247,0.298 0.14263,0.272 -0.0392,0.546 -0.0731,0.05 -0.1355,0.02 -0.0891,-0.1 -0.79516,-0.06 -0.41898,0.09 -0.42432,0.595 -0.75594,1.575 -0.353,1.552 0.0321,0.448 0.1034,0.348 0.25852,-0.03 0.11945,0.1 0.2817,0.795 0,0.187 -0.0642,0.127 -0.29774,0.09 0,-0.02 -0.89143,-1.551 -0.94136,-0.506 -0.82725,-0.45 -0.8112,1.453 -0.007,0.02 -0.025,0.04 -0.016,0 -0.14441,0.06 -0.63471,-0.06 -0.61865,-0.586 -0.46711,-0.273 -0.28883,-0.121 -0.90035,-0.105 -0.20859,-0.03 -0.10341,0.04 -0.73276,0.925 -0.73098,0 -0.16046,0 -0.57943,-0.137 -1.31754,-1.254 -0.47424,-0.561 -0.98058,-1.272 3.42311,0.138 0.18542,-5.03 2.6119,0.09 1.78466,-0.06 -0.0892,-0.208 -0.025,-0.507 0.0642,-0.176 0.62757,-0.997 2.91677,0.113 0.0802,-0.218"
+ class="c40065"
+ id="Jackson, OK" />
+ <path
+ d="m 459.54895,377.99714 0.92531,-0.01 9.53835,0.314 3.29475,0.05 0.95562,0.507 -0.12837,5.61 -3.87239,-0.121 -0.17651,6.035 -3.28761,-0.1 0.009,-0.255 -0.62757,-0.772 -1.2694,-0.05 0.85934,-1.439 -1.61528,-3.293 -0.0874,-0.146 -0.39401,-0.266 -0.0731,-0.03 -0.1765,0.03 -1.06081,0.795 -1.14817,-0.987 -0.13728,-0.193 -0.24069,-2.717 0.17651,-0.626 0.0802,-0.522 -0.79516,-1.173 -0.74881,-0.644"
+ class="c40075"
+ id="Kiowa, OK" />
+ <path
+ d="m 450.51871,379.59614 1.97542,0.09 0.0802,-2.01 6.18121,0.243 0.79338,0.08 0.74881,0.644 0.79516,1.173 -0.0802,0.522 -0.17651,0.626 0.24069,2.717 0.13728,0.193 1.14817,0.987 -0.0802,0.218 -2.91677,-0.112 -0.62757,0.996 -0.0642,0.177 0.025,0.506 0.0892,0.209 -1.78466,0.06 -2.6119,-0.09 -1.00554,-5.118 -2.94708,-0.114 0.0802,-2.001"
+ class="c40055"
+ id="Greer, OK" />
+ <path
+ d="m 448.42919,379.50914 2.08952,0.09 -0.0802,2.001 2.94708,0.114 1.00554,5.119 -0.18542,5.029 -3.42311,-0.137 -2.75453,-1.373 0.12836,-4.275 0.27278,-6.565"
+ class="c40057"
+ id="Harmon, OK" />
+ <path
+ d="m 527.58683,361.95814 2.14658,-0.02 3.2056,1.206 2.8615,-0.232 1.06081,0 2.59408,4.01 1.478,4.154 -0.30309,0.199 -1.43343,1.687 -0.59191,1.177 -1.78465,1.057 -1.3425,-0.239 -0.0464,-5.994 -6.83909,0.04 -0.009,-4.026 -0.98771,0 -0.009,-3.031"
+ class="c40101"
+ id="Muskogee, OK" />
+ <path
+ d="m 528.59237,369.00614 6.83909,-0.04 0.0464,5.994 -1.98256,-0.05 -1.24801,0.298 -3.61387,2.007 -0.69176,0.316 -3.7048,0.779 -0.67571,-0.03 0.0499,-3.197 0,-2.018 1.96651,0 0,-0.644 0.27278,-1.373 0.7078,-2.041 2.03425,0"
+ class="c40091"
+ id="McIntosh, OK" />
+ <path
+ d="m 515.0283,375.05514 8.58273,0.03 -0.0499,3.197 -0.36905,0.06 -0.16224,0.1 -0.90748,1.238 -0.5206,0.964 -0.0731,6.535 -5.89773,-0.01 -1.56715,-3.319 0.0321,-4.752 0.91639,0.01 0.016,-4.037"
+ class="c40063"
+ id="Hughes, OK" />
+ <path
+ d="m 511.64441,372.47014 0.12124,0.12 0.11232,0.03 1.39063,0.09 0.0321,-0.03 0.025,-0.119 -0.066,-0.289 0.15333,-0.79 1.0929,-0.399 0.54555,-0.145 -0.0232,4.111 -0.016,4.037 -0.91639,-0.01 -0.0321,4.752 -5.34326,0.206 0.0784,-11.825 0.97345,-0.314 1.87201,0.57"
+ class="c40133"
+ id="Seminole, OK" />
+ <path
+ d="m 502.02583,370.91614 9.61145,0.123 0.007,1.431 -1.87201,-0.57 -0.97345,0.314 -0.0784,11.825 -2.88468,-1.508 -3.97937,0.704 0.13729,-10.29 0.0321,-2.029"
+ class="c40125"
+ id="Pottawatomie, OK" />
+ <path
+ d="m 492.13446,372.78414 9.85928,0.161 -0.13729,10.29 -1.0198,0.06 -2.3623,-0.632 -0.24069,-0.145 -0.0963,-0.09 -0.12124,-0.369 -0.15154,-1.302 -0.28348,-1.125 -0.88252,-1.488 -3.76899,-3.767 -0.81833,-0.667 0.0232,-0.931"
+ class="c40027"
+ id="Cleveland, OK" />
+ <path
+ d="m 492.11129,373.71514 0.81833,0.667 3.76899,3.767 0.88252,1.488 0.28348,1.125 0.15154,1.302 0.12124,0.369 0.0963,0.09 0.24069,0.144 2.3623,0.633 1.0198,-0.06 3.97937,-0.704 -0.0642,2.539 -13.7905,-0.202 0.13015,-11.128 0,-0.03"
+ class="c40087"
+ id="McClain, OK" />
+ <path
+ d="m 484.21852,372.61514 2.51563,0.754 2.18758,0.362 1.99147,0.258 0.54556,0 0.65253,-0.24 -0.13015,11.128 -0.0802,4.019 -7.90703,-0.153 0.025,-4.019 0.19968,-12.1"
+ class="c40051"
+ id="Grady, OK" />
+ <path
+ d="m 480.27303,368.50014 0.0981,0 0.016,0.248 -0.0802,3.794 3.91161,0.07 -0.19968,12.1 -9.88423,-0.248 0.12837,-5.61 0.066,-0.09 0.0642,-2.373 -0.0321,-2.378 0.0963,-3.648 0.0624,-2.015 5.75332,0.152"
+ class="c40015"
+ id="Caddo, OK" />
+ <path
+ d="m 482.33938,364.52914 9.88423,0.188 -0.0892,8.067 -0.0232,0.931 0,0.03 -0.65253,0.24 -0.54556,0 -1.99147,-0.258 -2.18758,-0.362 -2.51563,-0.754 -3.91161,-0.07 0.0802,-3.794 -0.016,-0.248 -0.0981,0 2.06635,-3.971"
+ class="c40017"
+ id="Canadian, OK" />
+ <path
+ d="m 492.22361,364.71714 9.88423,0.173 -0.082,6.026 -0.0321,2.029 -9.85928,-0.161 0.0892,-8.067"
+ class="c40109"
+ id="Oklahoma, OK" />
+ <path
+ d="m 511.77278,359.96014 -0.0321,6.998 -0.10341,4.081 -9.61145,-0.123 0.082,-6.026 0.0624,-5.028 9.60254,0.1"
+ class="c40081"
+ id="Lincoln, OK" />
+ <path
+ d="m 519.68872,366.99014 -0.009,2.025 1.94512,0 0.007,4.058 1.97898,0 0,2.018 -8.58273,-0.03 0.0232,-4.111 -0.54555,0.145 -1.0929,0.399 -0.15333,0.79 0.066,0.289 -0.025,0.119 -0.0321,0.03 -1.39063,-0.09 -0.11232,-0.03 -0.12124,-0.12 -0.007,-1.431 0.10341,-4.081 7.94803,0.03"
+ class="c40107"
+ id="Okfuskee, OK" />
+ <path
+ d="m 527.58683,361.95814 0.009,3.031 0.98771,0 0.009,4.026 -2.03425,0 -0.7078,2.041 -0.27278,1.373 0,0.644 -1.96651,0 -1.97898,0 -0.007,-4.058 -1.94512,0 0.009,-2.025 0.007,-5.039 2.95065,0 3.94549,0.02 0.99484,-0.02"
+ class="c40111"
+ id="Okmulgee, OK" />
+ <path
+ d="m 533.58976,356.86514 4.29136,-0.02 0.007,0.806 -0.48138,1.13 -0.0731,0.08 -0.25673,0.01 -0.36905,0.33 -0.11233,0.216 -0.0731,1.31 0.29774,2.122 0.041,0.06 -1.06081,0 -2.8615,0.232 -3.2056,-1.206 -2.14658,0.02 -0.99484,0.02 1.06794,-7.103 2.63687,-0.02 0.88252,1.133 0.20146,0.361 -0.0802,0.315 -0.28882,0.04 0.0464,0.105 0.1141,0.07 2.41758,-0.02"
+ class="c40145"
+ id="Wagoner, OK" />
+ <path
+ d="m 526.75245,344.79514 6.92645,-0.02 1.91124,2.007 -1.96651,0.02 -0.0499,6.041 0.016,4.029 -2.41758,0.02 -0.1141,-0.07 -0.0464,-0.105 0.28882,-0.04 0.0802,-0.315 -0.20146,-0.361 -0.88252,-1.133 -2.63687,0.02 -0.94849,-6.043 0.041,-4.034"
+ class="c40131"
+ id="Rogers, OK" />
+ <path
+ d="m 531.96556,335.46514 2.09131,0 -0.37797,9.314 -6.92645,0.02 0.39223,-9.305 4.82088,-0.03"
+ class="c40105"
+ id="Nowata, OK" />
+ <path
+ d="m 523.91412,335.49914 3.23056,0 -0.39223,9.305 -0.041,4.034 -3.47124,0 0.009,-13.33 0.66501,0"
+ class="c40147"
+ id="Washington, OK" />
+ <path
+ d="m 523.2402,348.82914 3.47124,0 0.94849,6.043 -1.06794,7.103 -3.94549,-0.02 0.0731,-1.028 -0.0107,-4.033 -4.94033,-0.02 0,-2 0.54556,0 4.92607,0.04 0,-6.089"
+ class="c40143"
+ id="Tulsa, OK" />
+ <path
+ d="m 511.80665,354.89714 5.96192,-0.02 0,2 4.94033,0.02 0.0107,4.033 -0.0731,1.028 -2.95065,0 -0.007,5.039 -7.94803,-0.03 0.0321,-6.998 0.0339,-5.063"
+ class="c40037"
+ id="Creek, OK" />
+ <path
+ d="m 506.22092,352.84614 1.96116,0.02 -0.025,2.035 3.64953,0 -0.0339,5.063 -9.60254,-0.1 -3.92945,-1.052 0.0571,-4.036 3.92944,0.05 0.025,-2.016 3.96867,0.04"
+ class="c40119"
+ id="Payne, OK" />
+ <path
+ d="m 492.36802,354.54914 3.96154,0.07 1.96829,0.152 -0.0571,4.036 3.92945,1.052 -0.0624,5.028 -9.88423,-0.173 0.14441,-10.168"
+ class="c40083"
+ id="Logan, OK" />
+ <path
+ d="m 482.51588,354.34914 1.96116,0.04 7.89098,0.159 -0.14441,10.168 -9.88423,-0.188 0.0963,-4.016 0.025,-3.352 0.0553,-2.812"
+ class="c40073"
+ id="Kingfisher, OK" />
+ <path
+ d="m 474.65699,354.15014 7.85889,0.199 -0.0553,2.812 -0.025,3.352 -0.0963,4.016 -2.06635,3.971 -5.75332,-0.152 0,-6.035 0.13728,-8.163"
+ class="c40011"
+ id="Blaine, OK" />
+ <path
+ d="m 474.45731,370.36314 -0.0963,3.648 0.0321,2.378 -0.0642,2.373 -0.066,0.09 -0.95562,-0.507 -3.29475,-0.05 -9.53835,-0.314 0.2086,-8.076 13.77445,0.456"
+ class="c40149"
+ id="Washita, OK" />
+ <path
+ d="m 460.71495,368.90114 -0.0321,1.006 -0.2086,8.076 -0.92531,0.01 -0.79338,-0.08 -6.18121,-0.243 -0.0802,2.01 -1.97542,-0.09 -2.08952,-0.09 0.15333,-3.519 0.23177,-5.547 7.8999,0.332 0.0713,-2.018 3.92945,0.144"
+ class="c40009"
+ id="Beckham, OK" />
+ <path
+ d="m 460.74704,361.87614 13.77267,0.437 0,6.035 -0.0624,2.015 -13.77445,-0.456 0.0321,-1.006 0.0321,-7.025"
+ class="c40039"
+ id="Custer, OK" />
+ <path
+ d="m 468.7753,354.05314 5.88169,0.1 -0.13728,8.163 -13.77267,-0.437 0.0731,-4.651 0.1034,-3.503 7.85176,0.331"
+ class="c40043"
+ id="Dewey, OK" />
+ <path
+ d="m 460.82014,357.22514 -0.0731,4.651 -0.0321,7.025 -3.92945,-0.144 -0.0713,2.018 -7.8999,-0.332 0.19433,-4.546 0.24782,-6.06 1.75078,-1.02 1.96294,0.481 0.44037,0.548 0.16046,0.128 0.90926,0.571 0.57765,0.208 0.92353,0.234 0.28169,0.03 1.08577,-0.451 0.0642,-0.06 0.88431,-1.398 0.312,-1.054 0.0481,-0.1 0.17828,-0.159 0.45642,-0.33 0.31378,-0.155 0.45107,-0.1 0.76307,0"
+ class="c40129"
+ id="Roger Mills, OK" />
+ <path
+ d="m 457.18843,343.65614 -0.29774,8.01 0.0963,1.92 3.93657,0.136 -0.1034,3.503 -0.76307,0 -0.45107,0.1 -0.31378,0.155 -0.45642,0.33 -0.17828,0.159 -0.0481,0.1 -0.312,1.054 -0.88431,1.398 -0.0642,0.06 -1.08577,0.451 -0.28169,-0.03 -0.92353,-0.234 -0.57765,-0.208 -0.90926,-0.571 -0.16046,-0.128 -0.44037,-0.548 -1.96294,-0.481 -1.75078,1.02 0.16938,-4.04 0.37796,-10.278 0.10341,-2.163 7.28124,0.3"
+ class="c40045"
+ id="Ellis, OK" />
+ <path
+ d="m 457.18843,343.65614 5.68022,0.151 0.18542,-5.192 0.016,0.33 0.41719,0.369 0.30487,0.113 1.60815,-0.07 0.24069,0.08 0.26564,0.155 3.07724,4.32 -0.0392,2.139 -0.16938,7.996 -7.85176,-0.331 -3.93657,-0.136 -0.0963,-1.92 0.29774,-8.01"
+ class="c40153"
+ id="Woodward, OK" />
+ <path
+ d="m 484.62145,347.48514 -0.14441,6.905 -1.96116,-0.04 -7.85889,-0.199 -5.88169,-0.1 0.16938,-7.996 2.13766,0.08 0.41719,0.828 0.20859,0.24 0.27278,0.186 1.68838,0.907 1.00376,0.467 0.33696,0.114 0.41897,0.05 1.27832,-0.12 0.0392,-1.528 7.87494,0.2"
+ class="c40093"
+ id="Major, OK" />
+ <path
+ d="m 496.45792,344.69114 0.009,0 -0.13728,9.931 -3.96154,-0.07 -7.89098,-0.159 0.14441,-6.905 0.0713,-3.02 11.76515,0.226"
+ class="c40047"
+ id="Garfield, OK" />
+ <path
+ d="m 503.87466,344.77914 0.85221,2.025 -0.41006,0 -0.041,4.019 1.96829,0.02 -0.0232,2.009 -3.96867,-0.04 -0.025,2.016 -3.92944,-0.05 -1.96829,-0.152 0.13728,-9.931 7.40782,0.09"
+ class="c40103"
+ id="Noble, OK" />
+ <path
+ d="m 506.22092,352.84614 0.0232,-2.009 -1.96829,-0.02 0.041,-4.019 0.41006,0 0.0802,0.481 0.42611,0.468 0.24782,0.135 0.53129,0.12 4.5802,0.764 6.46825,4.557 1.25336,1.551 -0.54556,0 -5.96192,0.02 -3.64953,0 0.025,-2.035 -1.96116,-0.02"
+ class="c40117"
+ id="Pawnee, OK" />
+ <path
+ d="m 509.58698,335.44214 4.0899,0.02 9.57223,0.03 -0.009,13.33 0,6.089 -4.92607,-0.04 -1.25336,-1.551 -6.46825,-4.557 -4.5802,-0.764 -0.53129,-0.12 -0.24782,-0.135 -0.42611,-0.468 -0.0802,-0.481 -0.85221,-2.025 0.0963,-1.157 0.98058,-1.061 2.69213,-1.277 0.36192,0.07 0.1355,-0.05 1.35855,-0.834 0.0874,-5.031"
+ class="c40113"
+ id="Osage, OK" />
+ <path
+ d="m 496.60234,335.29914 5.73727,0.07 7.24737,0.07 -0.0874,5.031 -1.35855,0.834 -0.1355,0.05 -0.36192,-0.07 -2.69213,1.277 -0.98058,1.061 -0.0963,1.157 -7.40782,-0.09 -0.009,0 0.14442,-9.392"
+ class="c40071"
+ id="Kay, OK" />
+ <path
+ d="m 490.40686,335.19214 6.19548,0.107 -0.14442,9.392 -11.76515,-0.226 -0.0945,0 0.17472,-8.068 -0.016,-1.303 5.64991,0.105"
+ class="c40053"
+ id="Grant, OK" />
+ <path
+ d="m 480.4745,334.99314 4.28245,0.09 0.016,1.303 -0.17472,8.068 0.0945,0 -0.0713,3.02 -7.87494,-0.2 0.12124,-12.407 3.60675,0.115"
+ class="c40003"
+ id="Alfalfa, OK" />
+ <path
+ d="m 460.26566,334.34014 8.29392,0.282 8.30817,0.256 -0.12124,12.407 -0.0392,1.528 -1.27832,0.12 -0.41897,-0.05 -0.33696,-0.114 -1.00376,-0.467 -1.68838,-0.907 -0.27278,-0.186 -0.20859,-0.24 -0.41719,-0.828 -2.13766,-0.08 0.0392,-2.139 -3.07724,-4.32 -0.26564,-0.155 -0.24069,-0.08 -1.60815,0.07 -0.30487,-0.113 -0.41719,-0.369 -0.016,-0.33 -2.78841,-4.275"
+ class="c40151"
+ id="Woods, OK" />
+ <path
+ d="m 450.30834,333.89814 8.40623,0.385 1.55109,0.06 2.78841,4.275 -0.18542,5.192 -5.68022,-0.151 -7.28124,-0.3 0.40115,-9.458"
+ class="c40059"
+ id="Harper, OK" />
+ <path
+ d="m 433.13752,333.17614 5.682,0.241 9.90741,0.408 1.58141,0.07 -0.40115,9.458 -0.10341,2.163 -9.94841,-0.444 -7.48092,-0.376 0.4261,-8.063 0.15155,0 0.18542,-3.455"
+ class="c40007"
+ id="Beaver, OK" />
+ <path
+ d="m 91.290036,61.438143 -2.34804,8.083 -1.943328,-0.474 -3.576437,-1.012 -0.04814,-0.02 0.01605,-0.233 -3.80821,-1.15 2.144793,-4.78 0.19255,-0.717 0.137281,-0.674 0.06418,-0.836 0.0089,-0.151 6.282834,-0.862 0.714931,-0.256 0.08023,-0.234 1.035847,0.06 0.08914,0.06 0.04814,0.03 0.06418,0.105 0.233556,0.417 0.167589,0.538 -0.351225,1.029 0.673925,1.052 0.121235,0.04"
+ class="c41007"
+ id="Clatsop, OR" />
+ <path
+ d="m 93.771791,61.541143 0.82012,-0.151 0.755937,0.314 2.594076,3.18 0.153327,0.605 0.449283,2.505 -0.144413,2.185 -0.119452,0.378 -0.418974,2.805 -2.619036,-0.619 -1.214135,-1.719 -5.086528,-1.503 2.34804,-8.083 2.481755,0.103"
+ class="c41009"
+ id="Columbia, OR" />
+ <path
+ d="m 62.104455,133.42114 1.501177,0.585 -0.07131,0.03 -0.297739,0.225 -2.497801,2.539 -0.0089,0.112 0.09627,0.249 0,0.09 -0.07131,0.119 -1.519005,1.865 -0.329831,0.2 -0.625788,-0.04 -0.877172,-0.329 -0.0731,-0.06 -0.263865,3.328 0.682839,0.41 0.625787,0.915 0.160459,1.92 -0.08736,0.588 -0.41006,0.642 -0.3851,0.547 -1.116076,2.354 0.02318,0.627 0.09627,0.61 -6.332754,-1.993 -0.634702,-1.334 -0.747022,-2.266 0.169372,-4.91 0.570519,-1.895 0.474243,-1.269 0.119452,-0.275 0.256734,-6.251 0.0089,-2.105 1.961157,-2.163 3.558608,1.102 0.04814,0.103 0.723845,1.89 -0.08023,1.286 -0.144413,0.217 -0.176504,0.619 -0.265647,1.116 -0.121236,1.631 0.06418,0.122 2.323079,0.24 1.244444,-0.659 0.251384,-0.184 0.256733,-0.779 1.317541,0.06 0.60261,0.178"
+ class="c41015"
+ id="Curry, OR" />
+ <path
+ d="m 62.104455,133.42114 -0.60261,-0.178 -1.317541,-0.06 -0.256733,0.779 -0.251384,0.183 -1.244444,0.66 -2.323079,-0.241 -0.06418,-0.121 0.121236,-1.631 0.265647,-1.116 0.176504,-0.619 0.144413,-0.217 0.08023,-1.286 -0.723845,-1.89 -0.04814,-0.103 -3.558608,-1.102 8.596999,-13.186 3.054056,0.941 2.394394,0.771 0.60261,4.419 -0.19255,4.147 -1.10003,3.785 -1.319324,0.94 -0.916395,0.594 -0.279911,-0.09 -1.133905,3.801 -0.103407,0.813"
+ class="c41011"
+ id="Coos, OR" />
+ <path
+ d="m 70.918964,138.14414 -4.580193,15.493 -4.708559,-1.317 -4.974207,-1.375 -0.09627,-0.61 -0.02318,-0.627 1.116076,-2.354 0.3851,-0.547 0.41006,-0.642 0.08736,-0.588 -0.160459,-1.92 -0.625787,-0.915 -0.682839,-0.41 0.263865,-3.329 0.0731,0.06 0.877172,0.33 0.625788,0.04 0.329831,-0.199 1.519005,-1.865 0.07131,-0.12 0,-0.09 -0.09627,-0.249 0.0089,-0.113 2.497801,-2.538 0.297739,-0.225 0.07131,-0.03 -0.270996,0.981 2.594075,1.486 0.730977,0.403 0.595479,0.264 0.900349,-0.09 0.135498,-0.216 0.625787,0 1.486914,0.45 0.345877,0.273 0.169372,0.586"
+ class="c41033"
+ id="Josephine, OR" />
+ <path
+ d="m 88.114745,136.04014 -3.182423,11.031 -0.442152,1.351 -2.747402,9.571 -0.916396,-0.282 -0.52238,-0.169 -2.016426,-0.546 -2.208976,-0.547 -5.569686,-1.574 -0.426106,-0.122 -0.722062,-0.215 -1.752561,-0.637 -1.228398,-0.255 -0.04101,0 4.580193,-15.493 0.04814,-0.168 1.567142,-0.65 0.634702,0.199 1.688378,0.402 3.5907,0.563 2.458578,-1.391 2.355171,-1.068 2.941735,-0.529 1.911237,0.538"
+ class="c41029"
+ id="Jackson, OR" />
+ <path
+ d="m 93.313593,126.86214 0.29774,0.137 0.281693,0.378 0.682839,1.769 0.08736,0.424 -0.0071,1.865 -2.868637,3.423 -3.230561,-0.394 -0.442151,1.576 -1.911237,-0.538 -2.941735,0.529 -2.355171,1.068 -2.458578,1.391 -3.5907,-0.563 -1.688378,-0.402 -0.634702,-0.199 -1.567142,0.651 -0.04814,0.167 -0.169372,-0.586 -0.345877,-0.273 -1.486914,-0.45 -0.625787,0 -0.135498,0.216 -0.900349,0.09 -0.595479,-0.264 -0.730977,-0.402 -2.594075,-1.487 0.270996,-0.981 -1.501177,-0.585 0.103407,-0.813 1.133905,-3.801 0.279911,0.09 0.916395,-0.594 1.319324,-0.94 1.10003,-3.785 0.19255,-4.147 -0.60261,-4.419 -2.394394,-0.771 -3.054056,-0.941 2.668956,-5.286 1.477999,0.481 1.727601,0.514 0.497421,0.07 2.080609,-1.279 1.96294,0.603 0.648964,0.403 0.418975,0.891 -0.08023,0.273 1.028716,1.785 0.79516,0.715 1.752561,1.246 3.342881,0.997 -1.126774,3.849 0.04992,1.599 1.686594,0.514 0.217511,0.05 0.03209,-0.04 1.78287,0.45 2.146576,0.626 -0.666794,2.387 3.879525,1.02 5.890602,1.695"
+ class="c41019"
+ id="Douglas, OR" />
+ <path
+ d="m 96.47997,123.56014 10.73466,2.942 -1.57427,5.793 -0.3851,0.916 -0.65075,1.865 -1.92194,6.846 -1.03584,3.88 5.40031,1.479 2.16262,0.635 -4.42865,16.77 -9.304795,-2.603 -13.733447,-4.09 2.747402,-9.571 0.442152,-1.351 3.182423,-11.031 0.442151,-1.576 3.230561,0.394 2.868637,-3.423 0.0071,-1.865 -0.08736,-0.424 -0.682839,-1.769 -0.281693,-0.378 -0.29774,-0.137 3.166377,-3.302"
+ class="c41035"
+ id="Klamath, OR" />
+ <path
+ d="m 107.21463,126.50214 5.51263,1.469 0.24069,0.07 10.32638,2.885 6.95855,1.831 -0.11946,0.586 -1.7686,5.987 -1.17313,2.924 -1.67947,5.81 -0.99484,3.818 2.58695,0.65 1.30149,0.289 5.5679,1.4 -2.72422,10.959 -0.62757,2.788 -0.81121,3.199 -10.53319,-2.683 -4.74244,-1.198 -0.65074,-0.168 -6.0261,-1.599 -0.0232,0 -3.05406,-0.82 4.42865,-16.77 -2.16262,-0.635 -5.40031,-1.48 1.03584,-3.879 1.92194,-6.846 0.65075,-1.865 0.3851,-0.917 1.57427,-5.792"
+ class="c41037"
+ id="Lake, OR" />
+ <path
+ d="m 136.08821,125.93914 13.49098,3.342 0.49028,-1.961 2.44254,0.66 1.19809,0.41 5.76758,1.391 -1.39777,5.849 -0.24782,0.754 -0.65075,2.693 -1.47086,6.188 -2.27495,9.779 -0.99484,4.821 -2.19471,9.593 0.12123,0.443 -0.0891,0.82 -1.23731,5.079 -9.61858,-2.211 -9.02311,-2.275 -0.58835,-0.151 0.81121,-3.199 0.62757,-2.788 2.72422,-10.959 -5.5679,-1.4 -1.30149,-0.289 -2.58695,-0.65 0.99484,-3.818 1.67947,-5.81 1.17313,-2.924 1.7686,-5.987 0.11946,-0.586 0.48315,-1.976 1.9362,0.505 1.51901,-5.825 1.89697,0.482"
+ class="c41025"
+ id="Harney, OR" />
+ <path
+ d="m 160.55453,124.91014 0.62757,0.153 0.73098,-0.176 1.2694,-1.07 1.29437,-1.141 0.13728,-0.571 0.40114,-0.249 0.7078,-0.152 6.09029,1.391 0.83616,0.875 0.52951,0.779 -0.42432,1.946 4.63546,1.059 -0.041,0.121 -0.0232,0.194 0.0321,0.33 0.24069,0.408 2.00038,0.811 0.15333,-0.07 0.0874,0 0.63648,0.225 0.16759,0.105 0.85221,1.687 0.0161,0.03 0.0553,0.176 -0.0232,0.234 0,0.02 -0.009,0 -0.0321,0.06 -0.0232,0.05 -0.0232,0.04 -0.81299,0.997 -0.62579,2.555 -0.78089,1.478 -0.48138,0.804 -1.77574,4.307 -8.50963,37.886 -19.42972,-4.418 1.23731,-5.079 0.0891,-0.82 -0.12123,-0.442 2.19471,-9.594 0.99484,-4.821 2.27495,-9.779 1.47086,-6.188 0.65075,-2.692 0.24782,-0.755 1.39777,-5.849 1.07685,-4.871"
+ class="c41045"
+ id="Malheur, OR" />
+ <path
+ d="m 164.10779,109.13514 0.65075,-0.617 1.478,-0.811 0.3227,-0.04 0.72206,0.9 0.82725,0.642 0.15333,0.06 3.42311,0.852 3.40706,0.78 0.4582,-1.946 4.70856,1.052 7.6503,1.762 -0.77912,0.706 -0.50812,0.467 -0.40114,0.836 0.016,0.465 0.0571,0.225 0.0963,0.225 0.0232,0.185 -0.016,0.02 -0.53842,0.931 -0.37619,0.403 -0.48316,0.513 -0.87539,0.942 -1.53505,0.522 -0.39401,0.09 -0.11232,0.05 -0.37797,0.338 -3.55861,4.892 -0.20146,0.403 -0.55448,3.784 -4.63546,-1.059 0.42432,-1.945 -0.52951,-0.78 -0.83616,-0.875 -6.09029,-1.391 -0.7078,0.152 -0.40114,0.25 -0.13728,0.57 -1.29437,1.141 -1.2694,1.07 -0.73098,0.176 -0.62757,-0.153 -4.24144,-0.988 0.10518,-0.524 0.0553,-0.143 2.0717,-3.262 0.16937,-0.225 0.96453,-0.843 1.23018,-1.375 0.24782,-0.378 2.82942,-6.106 0.15332,-0.925 0.041,-0.555 -0.0731,-0.451"
+ class="c41001"
+ id="Baker, OR" />
+ <path
+ d="m 173.82978,86.814143 5.84247,1.406 1.92015,0.466 8.81629,2.057 1.13212,3.528 0.0713,0.136 0.0481,0.09 0.73098,0.674 1.39955,1.287 0.58657,0.257 0.007,0 0.27456,0.353 0.312,0.396 0,0 0.10519,0.442 0.55448,2.907997 -0.0642,0.29 -0.38688,0.441 -1.54218,1.576 -2.78128,3.567 -0.54556,1.15 -2.40152,3.913 -7.6503,-1.761 0.42611,-1.911 -3.32684,-0.747 -0.18542,-2.461 -0.16759,-0.706 -0.43502,-1.101 -0.61865,-0.145 -0.2086,-0.627 -0.29061,-1.607 -0.2389,-2.095997 -0.0339,-4.131 0.42611,-1.888 0.57943,-0.546 0.52238,-1.253 -3.53543,-0.82 0.65788,-3.151"
+ class="c41063"
+ id="Wallowa, OR" />
+ <path
+ d="m 173.1719,89.964143 3.53543,0.82 -0.52238,1.253 -0.57943,0.546 -0.42611,1.888 0.0339,4.131 0.2389,2.095997 0.29061,1.607 0.2086,0.627 0.61865,0.145 0.43502,1.102 0.16759,0.706 0.18542,2.46 3.32684,0.747 -0.42611,1.911 -4.70856,-1.052 -0.4582,1.946 -3.40706,-0.78 -3.42311,-0.852 -0.15333,-0.06 -0.82725,-0.642 -0.72206,-0.9 -0.3227,0.04 -1.478,0.811 -0.65075,0.617 -4.13804,-1.888 0.46533,-1.895 0.1765,-2.708 -1.71868,-0.411 -0.31557,-1.519 0.45998,-1.958997 1.38172,0.104 2.91678,0.698 4.00967,-0.739 1.26941,-0.723 0.44928,-0.932 0.94136,-3.888 1.80783,-2.603 1.35854,-0.708"
+ class="c41061"
+ id="Union, OR" />
+ <path
+ d="m 141.73634,102.76514 8.02826,1.984 10.20515,2.498 4.13804,1.888 0.0731,0.451 -0.041,0.555 -0.15332,0.925 -2.82942,6.106 -0.24782,0.378 -1.23018,1.375 -0.96453,0.843 -0.16937,0.225 -2.0717,3.262 -0.0553,0.143 -0.10518,0.524 4.24144,0.988 -1.07685,4.871 -5.76758,-1.391 -1.19809,-0.41 -2.44254,-0.66 -0.49028,1.961 -13.49098,-3.342 2.00038,-7.763 2.98987,-11.516 0.0874,-1.629 0.57052,-2.266"
+ class="c41023"
+ id="Grant, OR" />
+ <path
+ d="m 129.19385,97.750143 11.08767,2.899997 1.45482,2.115 -0.57052,2.266 -0.0874,1.629 -2.98987,11.516 -3.50334,-0.9 0.0731,-1.831 -1.64916,-1.705 -5.78541,-1.478 0.20146,-0.866 0.54556,-1.954 1.71869,-5.681 -0.49564,-6.010997"
+ class="c41069"
+ id="Wheeler, OR" />
+ <path
+ d="m 127.9708,109.44214 -0.54556,1.954 -0.20146,0.866 5.78541,1.478 1.64916,1.705 -0.0731,1.831 3.50334,0.9 -2.00038,7.763 -1.89697,-0.482 -1.51901,5.825 -1.9362,-0.505 -5.43953,-1.383 -0.34588,-0.121 0.50455,-1.928 -1.42986,-2.442 -5.91378,-1.551 0.4582,-1.929 -1.56714,-0.427 -2.16976,-0.657 1.02872,-3.857 -1.81675,-0.588 0.39402,-1.817 1.05368,-3.824 1.88092,0.522 0.51347,-1.927 2.55485,0.683 0.52238,-1.913 7.00668,1.824"
+ class="c41013"
+ id="Crook, OR" />
+ <path
+ d="m 103.85749,107.01514 11.63501,3.238 -1.05368,3.824 -0.39402,1.817 1.81675,0.588 -1.02872,3.857 2.16976,0.657 1.56714,0.427 -0.4582,1.929 5.91378,1.551 1.42986,2.442 -0.50455,1.928 0.34588,0.121 5.43953,1.383 -0.48315,1.976 -6.95855,-1.831 -10.32638,-2.885 -0.24069,-0.07 -5.51263,-1.469 -10.73466,-2.942 0.49029,-0.795 0.538426,-1.157 0.786246,-2.17 2.219678,-2.137 2.59585,-3.279 0.21573,-0.506 0.1355,-1.061 0.25138,-2.275 0.14442,-3.165"
+ class="c41017"
+ id="Deschutes, OR" />
+ <path
+ d="m 107.8422,97.767143 10.51002,2.891997 1.74543,0.514 9.59184,2.588 -1.71869,5.681 -7.00668,-1.824 -0.52238,1.913 -2.55485,-0.683 -0.51347,1.927 -1.88092,-0.522 -11.63501,-3.238 2.56198,-6.259 1.42273,-2.988997"
+ class="c41031"
+ id="Jefferson, OR" />
+ <path
+ d="m 85.624075,93.234143 1.510091,0.731 2.073478,0.442 1.904105,-0.273 2.467492,0.642 4.92607,1.977 0.586564,0.298 1.847055,1.349 1.73651,1.254 1.0929,0.354997 2.65113,0.747 -2.56198,6.259 -0.14442,3.165 -3.64062,-1.004 -4.749562,-1.237 -0.144413,0.192 -0.0089,0.09 0.05705,0.08 -0.08914,0.135 -0.739891,0.298 -0.222858,-0.06 -1.864882,-0.844 -1.101814,-0.666 -0.600827,-0.482 -0.588347,-0.635 -0.369054,-0.338 -0.955619,-0.562 -1.672332,-0.419 -0.786245,0.467 -0.169373,0.474 -0.249602,0.812 -3.487293,-1.013 -0.60261,-0.241 0.226424,-0.666 0.103407,-1.006 -0.02496,-0.112 -0.09628,-0.122 -0.215728,-0.05 -0.04992,-0.04 -0.02318,-0.1 -0.10519,-1.245 1.479782,-4.395997 3.086148,-1.824 -0.764851,-1.808 0.281693,-0.627"
+ class="c41043"
+ id="Linn, OR" />
+ <path
+ d="m 67.223075,99.108143 5.407444,1.461997 2.836546,0.972 3.544346,0.941 2.708179,0.786 0.215728,0.05 0.09628,0.122 0.02496,0.112 -0.103407,1.006 -0.226424,0.666 0.60261,0.241 3.487293,1.013 0.249602,-0.811 0.169373,-0.475 0.786245,-0.467 1.672332,0.419 0.955619,0.562 0.369054,0.339 0.588347,0.634 0.600827,0.482 1.101814,0.666 1.864882,0.844 0.222858,0.06 0.739891,-0.298 0.08914,-0.135 -0.05705,-0.08 0.0089,-0.09 0.144413,-0.192 4.749563,1.237 3.64062,1.004 -0.25138,2.275 -0.1355,1.061 -0.21573,0.506 -2.59585,3.279 -2.219679,2.137 -0.786246,2.17 -0.538426,1.157 -0.49029,0.795 -3.166377,3.302 -5.890602,-1.695 -3.879525,-1.02 0.666794,-2.387 -2.146576,-0.626 -1.78287,-0.449 -0.03209,0.04 -0.217511,-0.05 -1.686594,-0.514 -0.04992,-1.599 1.126774,-3.849 -3.342881,-0.997 -1.752561,-1.246 -0.79516,-0.715 -1.028716,-1.785 0.08023,-0.273 -0.418975,-0.891 -0.648964,-0.403 -1.96294,-0.602 -2.080609,1.278 -0.497421,-0.07 -1.727601,-0.514 -1.477999,-0.481 3.455202,-8.903997"
+ class="c41039"
+ id="Lane, OR" />
+ <path
+ d="m 85.342382,93.861143 0.764851,1.808 -3.086148,1.824 -1.479782,4.395997 0.10519,1.245 0.02318,0.1 0.04992,0.04 -2.708179,-0.786 -3.544346,-0.941 -2.836546,-0.972 0.05705,-0.762997 0.215728,-0.619 2.508497,-1.388 1.010888,0.319 1.399553,-4.675 0.417191,-1.713 7.102954,2.13"
+ class="c41003"
+ id="Benton, OR" />
+ <path
+ d="m 78.456938,84.041143 -2.018208,6.718 0.208595,0.497 1.592103,0.475 -0.417191,1.713 -1.399553,4.675 -1.010888,-0.319 -2.508497,1.388 -0.215728,0.619 -0.05705,0.762997 -5.407444,-1.461997 0.609741,-1.15 0.90035,-1.84 0.09628,-0.24 1.383507,-3.85 2.506715,-6.282 1.388856,-3.038 4.348419,1.333"
+ class="c41041"
+ id="Lincoln, OR" />
+ <path
+ d="m 78.456938,84.041143 0.231773,-0.706 10.190885,3.052 -0.210379,0.772 -1.326455,2.243 -0.07845,0.02 -0.836166,0.981 -0.483158,0.988 -0.353008,1.695 0.03209,0.145 -0.281693,0.627 -7.102954,-2.13 -1.592103,-0.475 -0.208595,-0.497 2.018208,-6.718"
+ class="c41053"
+ id="Polk, OR" />
+ <path
+ d="m 85.069603,76.656143 5.109705,1.528 0.941355,0.956 0.898567,1.052 0.982361,1.416 0.584782,0.344 -0.08023,1.358 -1.333586,-0.586 -1.775739,1.397 0.0089,0.33 -0.249602,0.851 -0.361923,0.725 -0.914612,0.36 -10.190885,-3.052 -0.946704,-0.29 0.932441,-3.069 4.997385,1.487 0.650747,-2.146 0.747023,-2.661"
+ class="c41071"
+ id="Yamhill, OR" />
+ <path
+ d="m 93.506143,83.310143 0.3227,-0.249 0.779114,0.224 0.57765,0.523 -0.545558,1.381 -0.19255,0.307 -0.242471,0.289 -0.142629,0.05 -0.249602,0.33 -0.176504,0.297 0.834383,1.93 2.19293,3.959 1.536834,1.279 6.22578,1.688 4.18796,1.171 -0.77198,1.28 -1.42273,2.988997 -2.65113,-0.748 -1.0929,-0.353997 -1.73651,-1.254 -1.847055,-1.349 -0.586564,-0.298 -4.92607,-1.977 -2.467492,-0.642 -1.904105,0.273 -2.073478,-0.442 -1.510091,-0.731 -0.03209,-0.145 0.353008,-1.695 0.483158,-0.988 0.836166,-0.981 0.07845,-0.02 1.326455,-2.243 0.210379,-0.772 0.914612,-0.36 0.361923,-0.725 0.249602,-0.851 -0.0089,-0.33 1.775739,-1.397 1.333586,0.586"
+ class="c41047"
+ id="Marion, OR" />
+ <path
+ d="m 96.26246,79.951143 1.477999,0.442 -0.03209,-0.602 0.322699,0 12.776042,3.608 0.67571,5.046 -1.10181,0.925 -0.0874,0.161 -2.00217,3.881 -0.0392,0.1 -0.32983,1.583 0.025,0.06 0.66679,1.324 -4.18796,-1.171 -6.225779,-1.688 -1.536834,-1.279 -2.19293,-3.96 -0.834383,-1.929 0.176504,-0.297 0.249602,-0.33 0.142629,-0.05 0.242471,-0.289 0.19255,-0.307 0.545558,-1.381 -0.57765,-0.523 -0.779114,-0.224 -0.3227,0.249 0.08023,-1.358 2.676087,-2.001"
+ class="c41005"
+ id="Clackamas, OR" />
+ <path
+ d="m 158.08882,83.037143 15.44501,3.703 0.29595,0.07 -0.65788,3.15 -1.35854,0.708 -1.80783,2.603 -0.94136,3.888 -0.44928,0.933 -1.26941,0.722 -4.00967,0.739 -2.91678,-0.698 -1.38172,-0.104 -0.45998,1.959997 0.31557,1.519 1.71868,0.41 -0.1765,2.708 -0.46533,1.895 -10.20515,-2.498 0.76307,-1.872 2.41757,-9.666997 -1.14103,-2.314 -2.90786,-0.747 1.47086,-5.833 0.31201,-1.086 0.90926,0.05 2.41044,0.33 0.44215,0.226 0.41006,0.104 0.69889,0.05 0.57052,-0.09 1.17312,-0.339 0.3441,-0.152 0.45106,-0.378"
+ class="c41059"
+ id="Umatilla, OR" />
+ <path
+ d="m 141.2621,83.239143 2.1858,0 1.53505,0.16 1.67055,0.159 3.11824,-0.385 0.90748,0.06 -0.31201,1.086 -1.47086,5.833 2.90786,0.747 1.14103,2.314 -2.41757,9.666997 -0.76307,1.872 -8.02826,-1.984 -1.45482,-2.115 0.54556,-0.176 0.4992,-1.926997 -1.54931,-1.929 -1.80962,-1.07 1.52614,-5.777 0.62044,-2.169 1.14817,-4.363"
+ class="c41049"
+ id="Morrow, OR" />
+ <path
+ d="m 130.64689,82.233143 0.33696,-0.112 0.68462,0.168 0.44929,0.315 0.41719,0.786 0.19433,0.282 0.32805,0.216 1.25336,0.217 3.16637,0.193 0.83617,-0.635 0.51347,-0.128 2.41044,-0.296 0.025,0 -1.14817,4.363 -0.62044,2.169 -1.52614,5.777 1.80962,1.07 1.54931,1.929 -0.4992,1.926997 -0.54556,0.176 -11.08767,-2.899997 -0.0499,-0.353 0.55447,-0.516 0.27456,-1.991 -0.57051,-1.478 0.75415,-1.585 0.86113,-1.678 1.92906,-1.045 0.58478,-0.297 0.19434,-0.04 0.15154,-0.241 -0.28169,-2.138 -1.13213,-1.952 -1.36746,-1.704 -0.44928,-0.498"
+ class="c41021"
+ id="Gilliam, OR" />
+ <path
+ d="m 125.98647,83.278143 0.83616,-0.257 1.41382,-0.217 1.71869,-0.241 0.69175,-0.33 0.44928,0.498 1.36746,1.704 1.13213,1.952 0.28169,2.138 -0.15154,0.241 -0.19434,0.04 -0.58478,0.297 -1.92906,1.045 -0.86113,1.678 -0.75415,1.585 0.57051,1.478 -0.27456,1.991 -0.55447,0.516 -2.49067,-0.676 -0.76307,-0.754 -2.23393,-2.894 0.009,-3.045 1.63133,-1.221 0.93957,-1.664 0.28882,-0.579 0.0321,-0.152 -0.57052,-3.134"
+ class="c41055"
+ id="Sherman, OR" />
+ <path
+ d="m 118.15254,79.814143 1.10003,0.162 0.55447,0.113 5.83355,2.731 0.34588,0.458 0.57052,3.134 -0.0321,0.152 -0.28882,0.579 -0.93957,1.664 -1.63133,1.221 -0.009,3.045 2.23393,2.894 0.76307,0.754 2.49067,0.676 0.0499,0.353 0.49564,6.010997 -9.59184,-2.588 -1.74543,-0.514 -10.51002,-2.891997 0.77198,-1.28 -0.66679,-1.324 -0.025,-0.06 0.32983,-1.583 0.0392,-0.1 2.00217,-3.881 0.0874,-0.161 1.10181,-0.925 3.37497,0.925 0.19969,-0.692 1.37459,-5.109 0.78803,-1.189 0.93244,-2.573"
+ class="c41065"
+ id="Wasco, OR" />
+ <path
+ d="m 110.38101,78.826143 0.45106,-0.403 0.68284,-0.353 0.94849,-0.06 1.10716,0.61 0.43502,0.105 1.32646,0.103 1.72582,0.03 1.09468,0.949 -0.93244,2.573 -0.78803,1.189 -1.37459,5.109 -0.19969,0.692 -3.37497,-0.925 -0.67571,-5.046 -0.4261,-4.58"
+ class="c41027"
+ id="Hood River, OR" />
+ <path
+ d="m 97.861695,73.362143 -0.344094,0.579 -0.153327,0.417 0.01605,0.564 0.313785,0.401 0.818337,0.859 0.426106,0.323 4.458958,2.747 0.52416,0.257 0.0143,0 0.44215,0.112 0.0321,0 0.26564,0 5.70519,-0.795 0.4261,4.58 -12.776039,-3.608 -0.322699,0 0.03209,0.603 -1.477999,-0.443 0.290608,-2.218 -0.297739,-0.192 -0.90035,-1.655 -0.625787,-1.39 0.513467,-1.753 2.619036,0.619"
+ class="c41051"
+ id="Multnomah, OR" />
+ <path
+ d="m 95.242659,72.743143 -0.513467,1.753 0.625787,1.39 0.90035,1.655 0.297739,0.192 -0.290608,2.218 -2.676087,2.001 -0.584782,-0.344 -0.982361,-1.416 -0.898567,-1.052 -0.941355,-0.956 -5.109705,-1.528 -0.329831,-0.09 0.105189,-0.314 2.194713,-3.865 1.436993,-1.31 0.465329,-1.559 5.086528,1.503 1.214135,1.719"
+ class="c41067"
+ id="Washington, OR" />
+ <path
+ d="m 88.941996,69.521143 -0.465329,1.559 -1.436993,1.31 -2.194713,3.865 -0.105189,0.314 0.329831,0.09 -0.747023,2.66 -0.650747,2.146 -4.997385,-1.487 -0.932441,3.069 0.946704,0.29 -0.231773,0.706 -4.348419,-1.333 0.563386,-1.013 0.06418,-0.12 0.0071,-0.02 0.458198,-0.868 0.03209,-0.06 0.13015,-0.298 0.36014,-0.893 3.519385,-9.995 0.306654,-1.037 0.06418,-0.418 0,-0.153 -0.03209,-1.205 3.80821,1.15 -0.01605,0.233 0.04814,0.02 3.576437,1.012 1.943328,0.474"
+ class="c41057"
+ id="Tillamook, OR" />
+ <path
+ d="m 887.94942,224.31014 -1.10895,1.616 -1.30862,2.433 -0.68641,0.981 -1.67768,-2.25 0.82012,-1.109 -0.91461,-0.706 0.98771,-1.519 0.97879,0.65 1.77574,-1.952 1.13391,1.856"
+ class="c42101"
+ id="Philadelphia, PA" />
+ <path
+ d="m 881.53109,212.85914 2.4657,1.005 1.3015,2.619 1.67055,1.013 0.1141,0.06 4.63546,3.561 -3.76898,3.189 -1.13391,-1.856 -9.39216,-4.582 1.95938,-3.236 1.96115,-2.139 0.18721,0.362"
+ class="c42017"
+ id="Bucks, PA" />
+ <path
+ d="m 793.115,244.78514 3.54078,-1.945 0.19968,-0.02 1.92193,-0.01 3.25731,0 2.43362,5.752 -8.75033,1.462 -1.70264,0.274 -0.90035,-5.512"
+ class="c42059"
+ id="Greene, PA" />
+ <path
+ d="m 803.55192,239.17414 2.28386,-0.426 4.07207,-1.009 0.41898,-0.123 0.43323,0.11 0.17829,0.09 3.01127,1.576 -0.44215,1.187 -0.8023,2.322 -0.13728,1.125 0.60261,2.692 0.37084,0.249 -1.46374,0.264 -4.97599,0.878 -2.63329,0.449 -2.43362,-5.752 1.51722,-3.635"
+ class="c42051"
+ id="Fayette, PA" />
+ <path
+ d="m 793.89233,232.56314 3.6014,2.805 4.03998,1.679 1.85775,0.496 0.16046,1.631 -1.51722,3.635 -3.25731,0 -1.92193,0.01 -0.19968,0.02 -3.54078,1.945 -0.73633,-4.507 -0.88786,-5.474 -0.30488,-1.792 2.7064,-0.449"
+ class="c42125"
+ id="Washington, PA" />
+ <path
+ d="m 804.58064,226.23914 0.007,0.01 0.70067,5.175 0.0481,0.371 -0.016,0.118 -0.9164,4.639 -0.16046,0.408 -0.85221,0.578 -1.85775,-0.496 -4.03998,-1.679 -3.6014,-2.805 1.90767,-2.564 1.26762,-1.173 -0.29774,-1.374 7.81076,-1.213"
+ class="c42003"
+ id="Allegheny, PA" />
+ <path
+ d="m 789.78103,224.46714 6.12951,-1.105 0.85934,4.09 0.29774,1.374 -1.26762,1.173 -1.90767,2.564 -2.7064,0.449 -0.60974,-3.688 -0.79516,-4.857"
+ class="c42007"
+ id="Beaver, PA" />
+ <path
+ d="m 796.13518,218.28414 -0.22464,5.078 -6.12951,1.105 -0.20324,-1.105 -0.82904,-5.151 4.42152,-0.797 1.92015,0 1.04476,0.861"
+ class="c42073"
+ id="Lawrence, PA" />
+ <path
+ d="m 802.63731,214.79714 1.94333,11.442 -7.81076,1.213 -0.85934,-4.09 0.22464,-5.078 1.25336,-2.612 5.16854,-0.916 0.0802,0.04"
+ class="c42019"
+ id="Butler, PA" />
+ <path
+ d="m 811.18439,216.11314 0.56517,3.175 0.55269,3.095 -2.03961,4.322 -0.97344,1.995 -4.70143,-2.446 -0.007,-0.01 -1.94333,-11.442 0.44037,1.551 0.0571,0.209 0.40114,0.939 1.85597,1.173 0.36192,0.06 0.51525,0.04 0.32092,-0.1 1.23731,-0.444 1.84884,-0.745 1.50831,-1.367"
+ class="c42005"
+ id="Armstrong, PA" />
+ <path
+ d="m 805.38649,209.25014 1.30685,-0.233 -0.19255,-1.131 0.7078,-0.13 2.57089,-0.33 0.36906,2.258 1.03585,6.429 -1.50831,1.367 -1.84884,0.745 -1.23731,0.444 -0.32092,0.1 -0.51525,-0.04 -0.36192,-0.06 -1.85597,-1.173 -0.40114,-0.939 -0.0571,-0.209 -0.44037,-1.551 -0.0802,-0.04 0.44037,-1.968 0.28704,-0.603 0.3227,-0.483 0.7809,-0.738 0.17828,-0.03 1.01089,-0.526 -0.19077,-1.157"
+ class="c42031"
+ id="Clarion, PA" />
+ <path
+ d="m 803.84966,203.92314 9.36898,-1.654 0.50634,3.102 -0.14442,0.882 -1.47086,0.227 -0.38867,0.779 0.31735,1.881 -1.88984,0.544 -0.36906,-2.258 -2.57089,0.33 -0.7078,0.13 0.19255,1.131 -1.30685,0.233 -0.22642,-1.228 -0.82012,-1.416 -0.49029,-2.683"
+ class="c42053"
+ id="Forest, PA" />
+ <path
+ d="m 803.84966,203.92314 0.49029,2.683 0.82012,1.416 0.22642,1.228 0.19077,1.157 -1.01089,0.526 -0.17828,0.03 -0.7809,0.738 -0.3227,0.483 -0.28704,0.603 -0.44037,1.968 -5.16854,0.916 -1.23731,-7.263 0.61152,-0.653 1.83101,-2.394 3.59248,-0.972 -0.0321,-0.151 1.69551,-0.316"
+ class="c42121"
+ id="Venango, PA" />
+ <path
+ d="m 787.37772,209.90314 8.77351,-1.494 1.23731,7.263 -1.25336,2.612 -1.04476,-0.861 -1.92015,0 -4.42152,0.797 -0.0303,-0.185 -1.34072,-8.123"
+ class="c42085"
+ id="Mercer, PA" />
+ <path
+ d="m 801.26985,199.07914 0.8843,5.16 0.0321,0.151 -3.59248,0.972 -1.83101,2.394 -0.61152,0.653 -8.77351,1.494 -0.0428,-0.25 -1.30863,-7.987 10.23724,-1.744 3.81891,-0.686 1.18739,-0.157"
+ class="c42039"
+ id="Crawford, PA" />
+ <path
+ d="m 800.71537,195.67014 0.55448,3.409 -1.18739,0.157 -3.81891,0.686 -10.23724,1.744 -0.47781,-2.917 2.95422,-1.863 3.89557,-3.23 3.08614,-2.525 1.62242,-1.189 0.098,0.61 0.44216,2.549 0.52951,3.011 2.28207,-0.394 0.25673,-0.05"
+ class="c42049"
+ id="Erie, PA" />
+ <path
+ d="m 809.2892,228.70014 -0.11946,0.301 0.24069,0.749 0.0428,0.04 1.14639,0.458 4.2254,0.257 3.1432,-0.2 -0.93066,2.778 -3.08793,6.311 -3.01127,-1.576 -0.17829,-0.09 -0.43323,-0.11 -0.41898,0.123 -4.07207,1.009 -2.28386,0.426 -0.16046,-1.631 0.85221,-0.578 0.16046,-0.408 0.9164,-4.639 0.016,-0.118 -0.0481,-0.371 -0.70067,-5.175 4.70143,2.446"
+ class="c42129"
+ id="Westmoreland, PA" />
+ <path
+ d="m 811.74956,219.28814 6.99776,-1.134 0.80942,4.122 -1.58853,8.03 -3.1432,0.2 -4.2254,-0.257 -1.14639,-0.458 -0.0428,-0.04 -0.24069,-0.749 0.11946,-0.301 0.97344,-1.995 2.03961,-4.322 -0.55269,-3.095"
+ class="c42063"
+ id="Indiana, PA" />
+ <path
+ d="m 810.14854,209.68414 1.88984,-0.544 0.33518,-0.355 1.8738,-0.547 4.19509,1.567 0.5616,0.668 0.12124,0.651 -0.9574,0.152 -0.28883,1.413 -0.009,0.05 0.0196,0.665 0.85756,4.75 -6.99776,1.134 -0.56517,-3.175 -1.03585,-6.429"
+ class="c42065"
+ id="Jefferson, PA" />
+ <path
+ d="m 809.90785,194.04114 2.38726,-0.403 0.24069,1.012 0.4582,2.557 -0.0464,0.239 -0.45998,0.1 0.73098,4.725 -9.36898,1.654 -1.69551,0.316 -0.8843,-5.16 -0.55448,-3.409 9.19248,-1.629"
+ class="c42123"
+ id="Warren, PA" />
+ <path
+ d="m 822.51096,191.71814 1.69194,-0.336 1.69551,8.669 -3.55861,1.044 -1.19809,-0.426 -2.28207,0.467 -0.87539,0.23 -2.6119,0.534 -2.15371,0.369 -0.73098,-4.725 0.45998,-0.1 0.0464,-0.239 -0.4582,-2.557 -0.24069,-1.012 0.7399,-0.129 4.64259,-0.902 4.83336,-0.889"
+ class="c42083"
+ id="McKean, PA" />
+ <path
+ d="m 822.3398,201.09514 3.55861,-1.044 4.2254,2.571 -0.63292,6.204 -2.48888,0.152 -0.36549,-2.127 -0.66679,-1.787 -2.80267,0.523 -0.82726,-4.492"
+ class="c42023"
+ id="Cameron, PA" />
+ <path
+ d="m 813.21864,202.26914 2.15371,-0.369 2.6119,-0.534 0.87539,-0.23 2.28207,-0.467 1.19809,0.426 0.82726,4.492 2.80267,-0.523 0.66679,1.787 0.36549,2.127 -5.48233,0.611 -1.51009,0.307 -0.8843,1.228 -0.12124,-0.651 -0.5616,-0.668 -4.19509,-1.567 -1.8738,0.547 -0.33518,0.355 -0.31735,-1.881 0.38867,-0.779 1.47086,-0.227 0.14442,-0.882 -0.50634,-3.102"
+ class="c42047"
+ id="Elk, PA" />
+ <path
+ d="m 827.00201,208.97814 2.48888,-0.152 1.20701,1.26 0.16759,2.723 0.0232,0.549 -0.20681,1.43 -0.0909,0.103 -0.96275,0.396 -0.82012,0.722 -0.19255,0.216 -1.9362,4.024 0.0232,0.08 0.29952,0.369 0.24603,0.153 -7.6913,1.43 -0.80942,-4.122 -0.85756,-4.75 -0.0196,-0.665 0.009,-0.05 0.28883,-1.413 0.9574,-0.152 0.8843,-1.228 1.51009,-0.307 5.48233,-0.611"
+ class="c42033"
+ id="Clearfield, PA" />
+ <path
+ d="m 827.00201,220.69314 4.17548,-0.931 -1.27654,1.205 -0.18541,0.346 -0.0642,0.266 0.93244,2.537 0.94849,0.619 0.4992,0.764 0.0161,0.159 -0.0339,0.218 -0.2086,0.852 -1.13391,3.535 -0.11766,0.628 -0.17829,0.674 -2.78128,-0.191 -3.268,-0.612 2.92212,-9.916 -0.24603,-0.153"
+ class="c42013"
+ id="Blair, PA" />
+ <path
+ d="m 819.55674,222.27614 7.6913,-1.43 -2.92212,9.916 -0.29774,2.033 -1.56714,0.289 -2.25177,0.338 -0.34409,-0.488 -0.60261,-0.251 -2.22502,0.401 0.93066,-2.778 1.58853,-8.03"
+ class="c42021"
+ id="Cambria, PA" />
+ <path
+ d="m 824.02818,232.79514 -0.66857,4.211 0.72384,5.666 -0.0499,0.665 -0.40828,1.792 -10.08391,1.841 -0.37084,-0.249 -0.60261,-2.692 0.13728,-1.125 0.8023,-2.322 0.44215,-1.187 3.08793,-6.311 2.22502,-0.401 0.60261,0.251 0.34409,0.488 2.25177,-0.338 1.56714,-0.289"
+ class="c42111"
+ id="Somerset, PA" />
+ <path
+ d="m 824.32592,230.76214 3.268,0.612 2.78128,0.191 0.17829,-0.674 0.11766,-0.628 2.67609,2.621 -0.22464,1.061 -0.55269,3.368 -0.58835,3.84 -0.48137,1.535 -0.48316,1.077 -7.39178,1.364 0.40828,-1.792 0.0499,-0.665 -0.72384,-5.666 0.66857,-4.211 0.29774,-2.033"
+ class="c42009"
+ id="Bedford, PA" />
+ <path
+ d="m 833.34724,232.88414 1.12499,0.547 2.73314,0.207 1.23018,0.715 -0.1765,0.194 -0.0981,0.168 -0.41719,1.143 -0.0731,1.301 -0.37797,2.218 -0.21572,0.811 -0.77912,1.913 -0.41897,0.748 -4.20936,0.795 -0.65253,0.121 0.48316,-1.077 0.48137,-1.535 0.58835,-3.84 0.55269,-3.368 0.22464,-1.061"
+ class="c42057"
+ id="Fulton, PA" />
+ <path
+ d="m 831.17749,219.76214 3.12715,0.523 3.87596,-1.286 0.42967,-0.451 -0.11945,0.531 -0.97166,2.136 -0.50634,0.966 -0.21751,0.571 -0.12123,0.417 -0.52238,3.359 0.90926,0.779 0.18542,0.121 0.44928,-0.07 1.13926,-0.335 0.13015,-0.267 1.34071,2.458 -1.87023,5.135 -1.23018,-0.715 -2.73314,-0.207 -1.12499,-0.547 -2.67609,-2.621 1.13391,-3.535 0.2086,-0.852 0.0339,-0.218 -0.0161,-0.159 -0.4992,-0.764 -0.94849,-0.619 -0.93244,-2.537 0.0642,-0.266 0.18541,-0.346 1.27654,-1.205"
+ class="c42061"
+ id="Huntingdon, PA" />
+ <path
+ d="m 840.30578,229.21814 0.42076,-0.697 1.39599,1.865 -0.18542,0.287 0.46711,0.74 2.61191,2.981 0.68284,1.302 1.22126,5.061 -0.16759,0.03 -10.87372,2.058 0.41897,-0.748 0.77912,-1.913 0.21572,-0.811 0.37797,-2.218 0.0731,-1.301 0.41719,-1.143 0.0981,-0.168 0.1765,-0.194 1.87023,-5.135"
+ class="c42055"
+ id="Franklin, PA" />
+ <path
+ d="m 843.48108,214.81814 0.29773,0.885 1.67769,2.355 -0.95562,0.65 -0.54556,0.411 -1.04655,0.9 -0.56873,0.556 -1.59745,2.649 -1.77752,3.536 -0.13015,0.267 -1.13926,0.335 -0.44928,0.07 -0.18542,-0.121 -0.90926,-0.779 0.52238,-3.359 0.12123,-0.417 0.21751,-0.571 0.50634,-0.966 0.97166,-2.136 0.11945,-0.531 4.87081,-3.73"
+ class="c42087"
+ id="Mifflin, PA" />
+ <path
+ d="m 834.17628,189.46914 2.20184,10.35 0.312,1.446 -6.56631,1.357 -4.2254,-2.571 -1.69551,-8.669 7.63425,-1.44 2.33913,-0.473"
+ class="c42105"
+ id="Potter, PA" />
+ <path
+ d="m 836.69012,201.26514 0.17829,0.843 1.18917,1.147 2.04852,1.825 5.74619,4.035 0.33518,-0.07 0.12302,0.57 -3.07902,1.928 -2.73135,1.141 -1.58319,-1.678 -0.26387,-0.521 -0.63648,-0.338 -5.87456,-1.666 -1.44412,1.608 -1.20701,-1.26 0.63292,-6.204 6.56631,-1.357"
+ class="c42035"
+ id="Clinton, PA" />
+ <path
+ d="m 830.6979,210.08614 1.44412,-1.608 5.87456,1.666 0.63648,0.338 0.26387,0.521 1.58319,1.678 2.73135,-1.141 3.07902,-1.928 -0.78981,1.375 -0.86648,2.073 -1.17312,1.758 -4.87081,3.73 -0.42967,0.451 -3.87596,1.286 -3.12715,-0.523 -4.17548,0.931 -0.29952,-0.369 -0.0232,-0.08 1.9362,-4.024 0.19255,-0.216 0.82012,-0.722 0.96275,-0.396 0.0909,-0.103 0.20681,-1.43 -0.0232,-0.549 -0.16759,-2.723"
+ class="c42027"
+ id="Centre, PA" />
+ <path
+ d="m 846.18747,209.04214 2.71888,-0.988 0.0214,-1.453 1.11786,0 0.42611,0.988 0.624,2.517 -0.0214,0.289 0.20146,0.408 0.56339,0.749 0.57587,0.428 0.45106,0.12 -0.57052,-0.03 -1.84705,0.376 -2.22324,0.948 -3.75829,1.89 -0.68819,0.415 -0.29773,-0.884 1.17312,-1.758 0.86648,-2.073 0.78981,-1.375 -0.12302,-0.57"
+ class="c42119"
+ id="Union, PA" />
+ <path
+ d="m 852.65751,205.29114 1.63132,0.06 0.78803,1.709 0.8843,0.346 1.33359,1.945 0.14441,0.296 0.0321,1.494 -1.76861,-1.26 -0.36906,-0.209 -0.51524,0 -1.16957,0.564 -0.95918,0.385 -0.0392,-0.05 0.16758,-2.395 -0.16045,-2.884"
+ class="c42093"
+ id="Montour, PA" />
+ <path
+ d="m 845.55455,187.14614 2.74919,9.009 -0.0784,0.191 -1.15351,1.128 -3.86348,0.913 -6.83018,1.432 -2.20184,-10.35 10.73466,-2.18 0.64361,-0.143"
+ class="c42117"
+ id="Tioga, PA" />
+ <path
+ d="m 848.30374,196.15514 1.05189,-0.07 1.90411,3.946 3.1432,1.77 0.79516,0.104 1.77395,0.04 -2.68322,3.4 -1.63132,-0.06 -2.61191,1.315 -1.11786,0 -0.0214,1.453 -2.71888,0.988 -0.33518,0.07 -5.74619,-4.035 -2.04852,-1.825 -1.18917,-1.147 -0.17829,-0.843 -0.312,-1.446 6.83018,-1.432 3.86348,-0.912 1.15351,-1.129 0.0784,-0.191"
+ class="c42081"
+ id="Lycoming, PA" />
+ <path
+ d="m 860.74995,192.25114 0.0553,0.19 4.11487,-0.891 2.47462,-0.49 -0.12124,0.174 -0.45106,1.553 -0.21573,1.254 0.60261,0.288 -0.66679,1.999 -0.24782,0.187 -2.47641,1.414 -4.55701,1.132 0.26743,-3.951 1.22126,-2.859"
+ class="c42131"
+ id="Wyoming, PA" />
+ <path
+ d="m 849.35563,196.08714 10.17306,-0.977 -0.26743,3.951 -0.14442,1.657 -2.14479,1.23 -1.77395,-0.04 -0.79516,-0.104 -3.1432,-1.77 -1.90411,-3.946"
+ class="c42113"
+ id="Sullivan, PA" />
+ <path
+ d="m 859.11684,200.71814 0.25139,1.847 0.11232,0.533 1.04298,1.51 2.04317,3.881 -0.53843,0.911 -0.44393,0.856 0.009,1.938 -1.10894,0.85 -3.01305,-1.906 -0.0321,-1.494 -0.14441,-0.296 -1.33359,-1.945 -0.8843,-0.346 -0.78803,-1.709 2.68322,-3.4 2.14479,-1.23"
+ class="c42037"
+ id="Columbia, PA" />
+ <path
+ d="m 850.0456,206.60614 2.61191,-1.315 0.16045,2.884 -0.16758,2.395 0.0392,0.05 0.95918,-0.385 1.16957,-0.564 0.51524,0 0.36906,0.209 1.76861,1.26 3.01305,1.906 -4.90111,3.801 -0.72207,0.225 -1.98611,1.318 -0.79695,0.313 -0.0802,0.03 -0.19968,-0.05 -0.27991,-0.303 0.12124,-0.274 0.1355,-0.161 0.64005,-1.141 0.13015,-0.296 0.0802,-0.306 0.0321,-0.401 -0.14442,-0.612 0.18542,-2.023 0.16759,-1.061 -0.45106,-0.12 -0.57587,-0.428 -0.56339,-0.748 -0.20146,-0.409 0.0214,-0.289 -0.624,-2.517 -0.42611,-0.988"
+ class="c42097"
+ id="Northumberland, PA" />
+ <path
+ d="m 852.8661,212.10514 -0.16759,1.061 -0.18542,2.023 0.14442,0.612 -0.0321,0.401 -0.0802,0.306 -0.13015,0.296 -0.64005,1.141 -0.1355,0.161 -0.0571,-0.17 -0.0981,-0.08 -1.76683,-0.312 -1.20522,-0.05 -0.66857,0.403 -2.38726,0.159 -1.67769,-2.355 0.68819,-0.416 3.75829,-1.89 2.22324,-0.948 1.84705,-0.376 0.57052,0.03"
+ class="c42109"
+ id="Snyder, PA" />
+ <path
+ d="m 851.63949,218.10614 -0.12124,0.274 -3.45698,2.241 -1.83992,1.414 -2.44254,2.25 -1.29436,1.311 -1.47087,2.355 -0.28704,0.57 -0.42076,0.697 -1.34071,-2.458 1.77752,-3.536 1.59745,-2.649 0.56873,-0.556 1.04655,-0.9 0.54556,-0.411 0.95562,-0.65 2.38726,-0.159 0.66857,-0.403 1.20522,0.05 1.76683,0.312 0.0981,0.08 0.0571,0.17"
+ class="c42067"
+ id="Juniata, PA" />
+ <path
+ d="m 853.50794,225.05014 -0.96989,0.651 -0.76306,0.289 -6.28462,2.36 -3.16638,2.323 -0.20146,-0.287 -1.39599,-1.865 0.28704,-0.57 1.47087,-2.355 1.29436,-1.311 2.44254,-2.25 1.83992,-1.414 3.45698,-2.241 -0.13906,1.043 -0.12837,4.638 0.0161,0.08 0.23177,0.435 0.25852,0.135 1.75078,0.339"
+ class="c42099"
+ id="Perry, PA" />
+ <path
+ d="m 853.50794,225.05014 1.41738,2.136 -0.76485,1.068 -2.11449,1.769 -1.17313,1.688 -0.43323,0.658 -0.62044,0.565 -1.20344,0.497 -1.96829,0.908 -0.94848,1.357 -0.68284,-1.302 -2.61191,-2.981 -0.46711,-0.74 0.18542,-0.287 0.20146,0.287 3.16638,-2.323 6.28462,-2.36 0.76306,-0.289 0.96989,-0.651"
+ class="c42041"
+ id="Cumberland, PA" />
+ <path
+ d="m 850.87285,231.71114 0.20147,0.02 0.65253,0.191 1.42808,0.65 1.26227,1.603 0.0802,0.321 0.12837,1.1 -0.2817,1.036 0,0.1 0.49029,2.451 -3.73868,0.756 -4.17548,0.827 -1.22126,-5.061 0.94848,-1.357 1.96829,-0.908 1.20344,-0.497 0.62044,-0.565 0.43323,-0.658"
+ class="c42001"
+ id="Adams, PA" />
+ <path
+ d="m 854.92532,227.18614 2.82763,1.929 1.62241,1.102 1.12677,0.05 0.47246,-0.06 0.40115,0.1 3.33575,2.871 3.09328,3.02 0.0963,0.146 0,0.112 -5.66596,1.188 -3.74224,0.779 -3.65845,0.763 -0.49029,-2.451 0,-0.1 0.2817,-1.036 -0.12837,-1.1 -0.0802,-0.321 -1.26227,-1.603 -1.42808,-0.65 -0.65253,-0.191 -0.20147,-0.02 1.17313,-1.688 2.11449,-1.769 0.76485,-1.068"
+ class="c42133"
+ id="York, PA" />
+ <path
+ d="m 855.5832,216.84514 3.309,1.746 -2.04851,2.326 3.15746,5.948 0.0571,-0.04 -2.30525,2.289 -2.82763,-1.929 -1.41738,-2.136 -1.75078,-0.339 -0.25852,-0.135 -0.23177,-0.435 -0.0161,-0.08 0.12837,-4.638 0.13906,-1.043 0.27991,0.303 0.19968,0.05 0.0802,-0.03 0.79695,-0.313 1.98611,-1.318 0.72207,-0.225"
+ class="c42043"
+ id="Dauphin, PA" />
+ <path
+ d="m 858.8922,218.59114 1.89698,1.011 5.77649,3.045 -2.36943,1.936 -2.12161,0.852 -2.01643,1.391 -0.0571,0.04 -3.15746,-5.948 2.04851,-2.326"
+ class="c42075"
+ id="Lebanon, PA" />
+ <path
+ d="m 866.56567,222.64714 5.60357,3.038 -1.05368,0.907 -0.11232,3.696 0.0642,0.587 0.0874,0.403 0.22464,0.617 -0.17472,1.246 -0.27456,1.012 -0.22642,0.603 -1.01089,1.302 -1.67946,0.363 -0.11233,0.02 0,-0.112 -0.0963,-0.146 -3.09328,-3.02 -3.33575,-2.871 -0.40115,-0.1 -0.47246,0.06 -1.12677,-0.05 -1.62241,-1.102 2.30525,-2.289 2.01643,-1.391 2.12161,-0.852 2.36943,-1.936"
+ class="c42071"
+ id="Lancaster, PA" />
+ <path
+ d="m 876.50696,217.39314 -1.83101,5.268 -2.50671,3.024 -5.60357,-3.038 -5.77649,-3.045 2.19471,-0.926 0.81834,-0.208 0.34587,-0.177 2.7581,-1.895 0.76129,-0.94 0.025,-0.723 1.54218,-1.214 7.27233,3.874"
+ class="c42011"
+ id="Berks, PA" />
+ <path
+ d="m 862.5667,208.48914 3.73689,0.07 4.91538,3.147 -1.98434,1.81 -1.54218,1.214 -0.025,0.723 -0.76129,0.94 -2.7581,1.895 -0.34587,0.177 -0.81834,0.208 -2.19471,0.926 -1.89698,-1.011 -3.309,-1.746 4.90111,-3.801 1.10894,-0.85 -0.009,-1.938 0.44393,-0.856 0.53843,-0.911"
+ class="c42107"
+ id="Schuylkill, PA" />
+ <path
+ d="m 866.30359,208.56214 4.00789,-3.118 -0.21751,-0.451 -0.67392,-0.548 -0.0802,-0.483 0.007,-0.199 0.0499,-0.104 0.92531,-1.102 0.0695,-0.06 0.41006,-0.146 0.35301,0.201 0.54734,0.193 2.69214,2.298 -1.01446,1.239 2.24464,2.587 -2.14658,1.114 -2.25889,1.721 -4.91538,-3.147"
+ class="c42025"
+ id="Carbon, PA" />
+ <path
+ d="m 859.26126,199.06114 4.55701,-1.132 2.47641,-1.414 0.24782,-0.187 0.1355,0.405 0.41897,0.456 1.01445,0.376 1.01802,0.213 1.30328,1.711 0.40828,1.589 0.14263,0.233 0.23534,0.123 0.55447,0.06 -0.61866,1.066 -0.35301,-0.201 -0.41006,0.146 -0.0695,0.06 -0.92531,1.102 -0.0499,0.104 -0.007,0.199 0.0802,0.483 0.67392,0.548 0.21751,0.451 -4.00789,3.118 -3.73689,-0.07 -2.04317,-3.881 -1.04298,-1.51 -0.11232,-0.533 -0.25139,-1.848 0.14442,-1.656"
+ class="c42079"
+ id="Luzerne, PA" />
+ <path
+ d="m 867.39471,191.06014 4.32346,-0.933 2.25711,8.572 -0.27991,0.337 -0.67571,0.499 -1.24622,1.956 -0.55447,-0.06 -0.23534,-0.123 -0.14263,-0.233 -0.40828,-1.589 -1.30328,-1.711 -1.01802,-0.213 -1.01445,-0.376 -0.41897,-0.456 -0.1355,-0.405 0.66679,-1.999 -0.60261,-0.288 0.21573,-1.254 0.45106,-1.553 0.12124,-0.174"
+ class="c42069"
+ id="Lackawanna, PA" />
+ <path
+ d="m 851.7108,185.91614 6.85335,-1.407 2.1858,7.742 -1.22126,2.859 -10.17306,0.977 -1.05189,0.07 -2.74919,-9.009 6.15625,-1.23"
+ class="c42015"
+ id="Bradford, PA" />
+ <path
+ d="m 859.24521,184.36514 10.35134,-2.243 2.12162,8.005 -4.32346,0.933 -2.47462,0.49 -4.11487,0.891 -0.0553,-0.19 -2.1858,-7.742 0.68106,-0.144"
+ class="c42115"
+ id="Susquehanna, PA" />
+ <path
+ d="m 869.59655,182.12214 2.05565,-0.456 0.3227,0.07 1.01267,0.713 0.30487,0.289 0.53843,1.15 2.10557,0.346 2.73136,4.901 -1.25514,3.792 -1.58854,3.748 -0.37084,2.159 -2.43362,0.698 0.67571,-0.499 0.27991,-0.337 -2.25711,-8.572 -2.12162,-8.005"
+ class="c42127"
+ id="Wayne, PA" />
+ <path
+ d="m 878.6678,189.13814 0.45998,1.053 0.7381,0.723 0.52239,0.497 1.831,0.95 0.29774,0.137 1.35142,-0.07 0.75415,-0.08 1.36746,1.337 -1.01445,0.731 -0.48138,0.522 -0.41006,0.843 -0.0874,0.257 -0.20859,0.892 -0.0321,0.313 0.0713,0.07 0.0321,0.378 -0.1034,0.692 -0.47425,1.118 -0.68462,0.963 -0.23355,0.328 -0.57765,0.362 -2.49959,-1.045 -0.016,-2.432 -3.81713,1.163 0.37084,-2.159 1.58854,-3.748 1.25514,-3.792"
+ class="c42103"
+ id="Pike, PA" />
+ <path
+ d="m 875.45328,198.83714 3.81713,-1.163 0.016,2.432 2.49959,1.045 0.57765,-0.362 0.23355,-0.328 0.0963,0.119 -1.87202,3.496 -5.19706,4.798 -2.24464,-2.587 1.01446,-1.239 -2.69214,-2.298 -0.54734,-0.193 0.61866,-1.066 1.24622,-1.956 2.43362,-0.698"
+ class="c42089"
+ id="Monroe, PA" />
+ <path
+ d="m 880.8215,204.07614 1.63133,1.922 0.0571,0.136 -0.009,0.135 -0.57765,1.771 -0.35123,0.486 -0.2603,0.04 -0.25673,-0.03 -0.1355,0.04 -0.29239,0.686 0.17829,1.387 0.42432,1.64 0.1141,0.209 -1.96115,2.139 -1.30863,-1.046 -1.78287,-1.093 -2.28207,-1.412 -0.22643,-0.285 -0.30487,-0.812 2.14658,-1.114 5.19706,-4.798"
+ class="c42095"
+ id="Northampton, PA" />
+ <path
+ d="m 873.47786,209.98814 0.30487,0.812 0.22643,0.285 2.28207,1.412 1.78287,1.093 1.30863,1.046 -1.95938,3.236 -0.91639,-0.479 -7.27233,-3.874 1.98434,-1.81 2.25889,-1.721"
+ class="c42077"
+ id="Lehigh, PA" />
+ <path
+ d="m 881.29575,225.37814 1.87201,1.712 1.67768,2.25 -3.17886,2.225 -3.27156,-0.118 2.90073,-6.069"
+ class="c42045"
+ id="Delaware, PA" />
+ <path
+ d="m 877.42335,217.87214 9.39216,4.582 -1.77574,1.952 -0.97879,-0.65 -0.98771,1.519 0.91461,0.706 -0.82012,1.109 -1.87201,-1.712 -1.92015,-0.442 -1.6973,-1.342 -0.18185,-0.241 -0.0571,-0.07 -1.78287,-0.729 -0.98058,0.11 1.83101,-5.268 0.91639,0.479"
+ class="c42091"
+ id="Montgomery, PA" />
+ <path
+ d="m 874.67595,222.66114 0.98058,-0.11 1.78287,0.729 0.0571,0.07 0.18185,0.241 1.6973,1.342 1.92015,0.442 -2.90073,6.069 -2.73849,3.334 -5.9637,1.277 1.01089,-1.302 0.22642,-0.603 0.27456,-1.012 0.17472,-1.246 -0.22464,-0.617 -0.0874,-0.403 -0.0642,-0.587 0.11232,-3.696 1.05368,-0.907 2.50671,-3.024"
+ class="c42029"
+ id="Chester, PA" />
+ <path
+ d="m 939.47436,171.79014 -0.4582,1.767 -0.95027,1.471 -5.01343,1.455 -0.25495,-0.965 -0.4992,-1.897 5.43953,-1.606 0.0481,-0.03 0.12837,-0.217 -0.0481,-0.232 0.0481,-0.234 0.0499,-0.05 0.51346,-0.298 0.22465,0.04 0.20859,0.154 0.32983,0.378 0.23356,0.256"
+ class="c44003"
+ id="Kent, RI" />
+ <path
+ d="m 935.3898,165.81114 2.10735,0.217 2.28921,4.395 -0.54556,1.111 -0.32983,-0.378 -0.20859,-0.154 -0.22465,-0.04 -0.51346,0.298 -0.0499,0.05 -0.0481,0.234 0.0481,0.232 -0.12837,0.217 -0.0481,0.03 -5.43953,1.606 -1.80962,-6.307 4.90111,-1.503"
+ class="c44007"
+ id="Providence, RI" />
+ <path
+ d="m 939.47436,171.79014 -0.23356,-0.256 0.54556,-1.111 1.92193,1.07 0.69889,0.65 -0.69889,1.054 -0.25673,0.424 -0.0267,0.09 -1.26049,-0.387 -0.68997,-1.534"
+ class="c44001"
+ id="Bristol, RI" />
+ <path
+ d="m 942.40718,172.14314 2.29634,3.641 -0.60975,0.786 -2.26602,1.1 -0.65788,0.17 -0.2496,-0.161 -0.009,-0.103 0.50634,-3.842 0.007,-0.02 0.0267,-0.09 0.25673,-0.424 0.69889,-1.054"
+ class="c44005"
+ id="Newport, RI" />
+ <path
+ d="m 933.05246,176.48314 5.01343,-1.455 0.95027,-1.471 0.4582,1.416 0.24782,1.686 0.10875,0.724 0.0196,0.287 0.016,0.435 -0.0303,0.234 -0.14798,0.923 -0.24603,0.933 -5.48768,2.779 -0.46711,-0.04 -0.43502,-6.452"
+ class="c44009"
+ id="Washington, RI" />
+ <path
+ d="m 769.98761,363.00314 3.53543,-0.41 0.8326,1.029 1.33002,2.917 0.20147,0.538 0.15332,0.779 -0.0909,0.113 -5.93696,5.425 -1.84883,-5.015 -1.2391,-3.069 0.32448,-1.182 0.32092,-0.506 2.41757,-0.619"
+ class="c45077"
+ id="Pickens, SC" />
+ <path
+ d="m 767.57004,363.62214 -0.32092,0.506 -0.32448,1.182 1.2391,3.069 1.84883,5.015 -2.37835,3.689 -1.16599,-0.163 -1.15174,-0.802 -4.77096,-2.933 -0.37084,-0.618 0.30666,-1.737 1.23553,-2.243 1.70442,-1.324 0.40293,-1.831 1.78465,-0.863 1.96116,-0.947"
+ class="c45073"
+ id="Oconee, SC" />
+ <path
+ d="m 814.52192,411.52914 7.47201,3.844 1.10894,1.614 0.0981,0.192 0.0553,0.273 -0.041,0.346 -0.21751,1.18 -0.18363,0.202 -4.74957,4.951 -1.10003,0.891 -1.1339,0.859 -0.48138,-0.385 -2.30703,-1.848 -0.30309,-0.489 -0.16224,-0.522 0.0232,-0.123 0.24068,-1.011 1.0198,-0.886 1.00554,-1.075 0.5313,-0.699 0.1355,-0.637 -0.007,-1.476 -0.72384,-2.724 -0.0963,-0.219 -0.33696,-0.496 -0.51346,-0.644 0.66679,-1.118"
+ class="c45013"
+ id="Beaufort, SC" />
+ <path
+ d="m 814.52192,411.52914 -0.66679,1.118 -0.48316,0.997 -0.34588,-0.08 -0.5723,-0.209 -0.15868,-0.433 0.0642,-0.33 -0.0642,-0.332 -0.69888,-0.65 -0.79516,-0.516 -0.39401,0.355 -4.21828,5.055 -2.00929,-0.804 -0.82903,-3.359 0.3637,-0.175 0.82725,-0.556 0.80229,-1.357 0.15333,-1.095 0.0553,-0.848 0.32983,-0.919 0.25673,-0.353 0.21573,-0.201 2.1234,-1.87 6.04393,6.562"
+ class="c45049"
+ id="Hampton, SC" />
+ <path
+ d="m 813.85513,412.64714 0.51346,0.644 0.33696,0.496 0.0963,0.219 0.72384,2.724 0.007,1.476 -0.1355,0.637 -0.5313,0.699 -1.00554,1.075 -1.0198,0.886 -0.24068,1.011 -0.0232,0.123 0.16224,0.522 0.30309,0.489 2.30703,1.848 0.48138,0.385 0.009,1.077 -3.57465,-0.674 -1.08577,-0.419 -0.0892,-0.09 -0.2496,-0.997 -0.18185,-0.918 -0.0998,-0.449 -0.2496,-1.221 -2.03961,-4.138 -1.71155,-1.414 -0.36906,-0.137 4.21828,-5.055 0.39401,-0.355 0.79516,0.516 0.69888,0.65 0.0642,0.332 -0.0642,0.33 0.15868,0.433 0.5723,0.209 0.34588,0.08 0.48316,-0.997"
+ class="c45053"
+ id="Jasper, SC" />
+ <path
+ d="m 832.76246,372.73614 0.21573,-0.508 1.04298,-1.091 0.99127,-0.444 0.57765,-0.113 3.89557,-0.385 0.98236,0.619 -1.36567,4.364 -0.54021,0.956 -0.79516,1.116 -0.0642,0.145 0.0802,0.693 0.0731,0.255 1.93085,2.901 1.02693,1.383 0.73098,0.86 -2.67609,-1.261 -0.22642,-0.412 -3.54078,-2.651 -0.19434,-0.192 -0.30665,-0.58 -2.03069,-4.346 -0.0802,-0.17 0,-0.09 0.27278,-1.052"
+ class="c45067"
+ id="Marion, SC" />
+ <path
+ d="m 833.01028,363.51814 8.33313,6.073 -0.87539,1.223 -0.98236,-0.619 -3.89557,0.385 -0.57765,0.113 -0.99127,0.444 -1.04298,1.091 -0.21573,0.508 -1.8738,-1.269 2.12162,-7.949"
+ class="c45033"
+ id="Dillon, SC" />
+ <path
+ d="m 840.46802,370.81414 0.87539,-1.223 9.3048,6.646 2.43362,1.737 -0.78625,0.305 -1.519,0.909 -0.71493,0.537 -0.96275,0.925 -0.0909,0.1 -0.37618,0.409 -0.17651,0.203 -0.27991,0.369 -0.38688,0.506 -0.1141,0.154 -1.13926,1.75 -0.67571,1.295 -0.24068,0.463 -4.07386,-2.408 -0.73098,-0.86 -1.02693,-1.383 -1.93085,-2.901 -0.0731,-0.255 -0.0802,-0.693 0.0642,-0.145 0.79516,-1.116 0.54021,-0.956 1.36567,-4.364"
+ class="c45051"
+ id="Horry, SC" />
+ <path
+ d="m 838.70833,395.54114 3.34823,1.831 -0.88252,2.579 -0.81834,0.207 -1.49404,0.323 -2.02712,2.122 -1.37995,2.009 -2.83832,3.197 -3.26087,3.585 -0.20147,0.08 -0.16046,0.09 -0.62757,0.344 -1.46195,1.061 -0.74702,0.731 -0.009,0 -0.15154,-0.126 -1.18204,0.513 -0.2086,0.266 0.21751,0.192 0.025,0.06 -0.025,0.169 -0.14441,0.04 -0.36014,-0.09 -0.81477,-1.13 -1.13212,-2.523 -0.7078,-1.239 0.41897,-2.017 -0.0571,-1.1 2.25711,-0.09 2.4978,0.23 0.1872,-0.02 0.73098,-1.696 0.17829,-1.022 -1.69729,-1.921 2.28385,1.135 1.95224,0.81 0.64184,1.743 0.27991,0.129 0.1872,-0.06 0.15154,-0.139 2.02534,-3.357 0.49921,-1.647 1.10894,-2.395 2.74027,-2.514 0.65788,-0.345"
+ class="c45019"
+ id="Charleston, SC" />
+ <path
+ d="m 821.26295,397.49314 0.32092,0.214 1.21413,1.353 -0.19255,0.49 -0.17829,0.209 0.62044,0.426 3.13251,1.999 1.69729,1.922 -0.17829,1.021 -0.73098,1.696 -0.1872,0.02 -2.4978,-0.23 -2.25711,0.09 -0.41006,-4.032 -0.0892,-0.227 -0.22285,-0.167 -0.0481,0 -2.32308,0.181 -1.28723,0.293 -0.60083,-0.09 -0.0874,-0.05 -3.50512,-2.049 4.8601,-4.386 0.0963,0.08 0.098,0.135 0.0446,0.187 0.0125,0.246 0.0535,0.17 0.22643,0.346 0.21037,0.112 0.9788,0.233 1.23018,-0.192"
+ class="c45035"
+ id="Dorchester, SC" />
+ <path
+ d="m 825.25658,391.21714 0.34588,-0.282 0.14263,-0.04 1.53683,-0.199 0.53843,0.05 1.39063,0.811 0.64184,0.49 0.27991,0.409 0.13906,0.114 1.99147,1.077 1.73473,0.568 4.71034,1.329 -0.65788,0.345 -2.74027,2.514 -1.10894,2.395 -0.49921,1.647 -2.02534,3.357 -0.15154,0.139 -0.1872,0.06 -0.27991,-0.129 -0.64184,-1.743 -1.95224,-0.81 -2.28385,-1.135 -3.13251,-1.999 -0.62044,-0.426 0.17829,-0.209 0.19255,-0.49 -1.21413,-1.353 -0.32092,-0.214 1.92907,-4.687 2.06456,-1.589"
+ class="c45015"
+ id="Berkeley, SC" />
+ <path
+ d="m 838.86879,382.22614 2.67609,1.261 4.07386,2.408 -1.18918,2.284 -0.0553,0.145 -0.13015,0.337 -0.0374,0.1 -0.0107,0.04 -0.009,0.02 -0.38332,1.358 -0.0499,0.225 -0.0642,0.321 -0.016,0.07 -0.0642,1.212 -0.0178,0.637 -0.0214,1.05 -0.009,0.03 0.009,0 0.0481,0.289 0.007,0.07 0.28169,0.684 -0.16046,0.803 -0.11232,0.199 -0.78981,1.102 -0.78803,0.49 -3.34823,-1.831 -4.71034,-1.328 -0.12837,-0.321 0.009,-0.426 1.20522,-2.683 2.17153,-3.962 0.22999,-2.184 0.24961,-0.636 0.7488,-1.574 0.11054,-0.1 0.27456,-0.102"
+ class="c45043"
+ id="Georgetown, SC" />
+ <path
+ d="m 825.89841,380.57014 2.08953,1.084 -2.73136,9.563 -2.06456,1.589 -1.86489,0.611 -0.53842,0.105 -0.24782,-0.02 -0.59013,-0.19 -0.76842,-0.508 -0.60261,-0.578 -0.98236,-1.173 -1.03585,-1.824 2.10557,-3.256 3.51939,-2.248 3.71193,-3.15"
+ class="c45027"
+ id="Clarendon, SC" />
+ <path
+ d="m 838.64237,381.81414 0.22642,0.412 -0.27456,0.102 -0.11054,0.1 -0.7488,1.574 -0.24961,0.637 -0.22999,2.184 -2.17153,3.961 -1.20522,2.683 -0.009,0.427 0.12837,0.32 -1.73473,-0.568 -1.99147,-1.077 -0.13906,-0.114 -0.27991,-0.409 -0.64184,-0.49 -1.39063,-0.811 -0.53843,-0.05 -1.53683,0.2 -0.14263,0.04 -0.34588,0.281 2.73136,-9.563 1.64737,0.877 1.46195,0.248 4.4447,0.1 0.98057,-0.344 0.15155,-0.258 0.90213,-0.692 0.1355,-0.06 0.37618,0.02 0.55448,0.265"
+ class="c45089"
+ id="Williamsburg, SC" />
+ <path
+ d="m 830.40551,371.38514 0.48315,0.08 1.8738,1.269 -0.27278,1.052 0,0.09 0.0802,0.17 2.03069,4.346 0.30665,0.58 0.19434,0.192 3.54078,2.651 -0.55448,-0.265 -0.37618,-0.02 -0.1355,0.06 -0.90213,0.692 -0.15155,0.258 -0.98057,0.344 -4.4447,-0.1 -1.46195,-0.248 -1.64737,-0.877 -2.08953,-1.084 -0.87539,-2.227 -1.49404,-0.642 3.81712,-4.099 1.76683,-1.759 1.29258,-0.459"
+ class="c45041"
+ id="Florence, SC" />
+ <path
+ d="m 823.4327,360.81914 4.4447,-0.724 4.87793,3.247 0.25495,0.176 -2.12162,7.949 -0.48315,-0.08 0,-0.09 -0.56161,-1.421 -0.29595,-0.563 -0.7078,-0.282 -0.11411,0 -0.0535,0.03 -0.0642,-0.03 -2.24285,-1.717 -0.0374,-0.06 -0.0517,-0.369 0.041,-0.113 -2.88469,-5.953"
+ class="c45069"
+ id="Marlboro, SC" />
+ <path
+ d="m 826.31739,366.77214 -0.041,0.113 0.0517,0.369 0.0374,0.06 2.24285,1.717 0.0642,0.03 0.0535,-0.03 0.11411,0 0.7078,0.282 0.29595,0.563 0.56161,1.421 0,0.09 -1.29258,0.458 -1.76683,1.759 -3.81712,4.099 -0.0731,0.02 -1.54218,-1.094 -0.2817,-0.369 0.52239,-0.69 0.0963,-0.99 -0.76307,-1.237 -0.78624,-0.787 -0.63649,-0.192 -1.62954,-0.314 0,-0.05 4.03285,-3.641 3.84922,-1.583"
+ class="c45031"
+ id="Darlington, SC" />
+ <path
+ d="m 818.43532,372.04414 1.62954,0.314 0.63649,0.193 0.78624,0.786 0.76307,1.237 -0.0963,0.99 -0.52239,0.69 0.2817,0.369 1.54218,1.094 0.0731,-0.02 1.49404,0.642 -0.33696,0.981 -2.37657,1.606 -0.27634,0.171 -6.09742,-2.692 -0.32091,-1.319 0.24069,-0.273 0.45106,-1.214 -0.0802,-0.692 -0.0731,-0.298 0.5313,-0.729 1.75078,-1.84"
+ class="c45061"
+ id="Lee, SC" />
+ <path
+ d="m 815.26003,366.69214 3.17529,5.304 0,0.05 -1.75078,1.84 -0.5313,0.729 0.0731,0.298 0.0802,0.692 -0.45106,1.214 -0.24069,0.273 -2.29099,1.991 -1.81674,1.015 -3.22878,-2.138 0.50633,-2.098 -1.68837,-4.162 2.2268,-2.282 0.10341,0 0.0553,0.74 0.59547,0.193 1.26941,0.02 2.12518,-0.779 -0.64718,-1.214 2.4354,-1.678"
+ class="c45055"
+ id="Kershaw, SC" />
+ <path
+ d="m 815.61482,377.09014 0.32091,1.319 6.09742,2.692 0.27634,-0.171 2.37657,-1.606 0.33696,-0.981 0.87539,2.227 -3.71193,3.15 -3.51939,2.248 -2.10557,3.256 -1.98433,-2 -1.25336,-8.143 2.29099,-1.991"
+ class="c45085"
+ id="Sumter, SC" />
+ <path
+ d="m 806.71117,385.28714 0.98592,0.601 2.91856,1.239 1.50296,0.06 2.45858,0.04 1.98433,2 1.03585,1.824 -0.2086,0.506 -1.94332,1.833 -0.58835,0.159 -6.3381,-2.587 -1.75078,-1.641 1.52435,-0.955 0.51525,-0.523 -0.26565,-0.176 -0.52238,-0.225 -0.97879,0.105 -0.29061,0.45 -0.47246,-0.191 -0.0392,-1.947 0.0303,-0.28 0.44216,-0.289"
+ class="c45017"
+ id="Calhoun, SC" />
+ <path
+ d="m 813.4522,400.56114 3.50512,2.049 0.0874,0.05 0.60083,0.09 1.28723,-0.293 2.32308,-0.182 0.0481,0 0.22285,0.168 0.0892,0.226 0.41006,4.033 0.0571,1.1 -0.41897,2.017 0.7078,1.239 1.13212,2.523 0.81477,1.13 0.36014,0.09 0.14441,-0.04 0.025,-0.17 -0.025,-0.06 -0.21751,-0.192 0.2086,-0.266 1.18204,-0.513 0.15154,0.126 0.009,0 -1.39064,1.441 -0.11232,0 -1.57606,-0.02 -1.08398,0.249 -7.47201,-3.844 -6.04393,-6.562 4.84584,-4.294 0.12837,-0.112"
+ class="c45029"
+ id="Colleton, SC" />
+ <path
+ d="m 808.47799,404.96714 -2.1234,1.87 -0.21573,0.201 -0.25673,0.353 -0.32983,0.919 -0.0553,0.848 -0.15333,1.095 -0.80229,1.357 -0.82725,0.556 -0.3637,0.175 -3.65489,-6.453 -1.57605,-0.866 1.18204,-1.703 1.76861,0.271 1.76682,0.353 1.53505,-0.248 1.68125,-0.497 2.4247,1.769"
+ class="c45005"
+ id="Allendale, SC" />
+ <path
+ d="m 813.32383,400.67314 -4.84584,4.294 -2.4247,-1.769 -0.67571,-0.763 -0.0891,-0.332 -0.56339,-4.699 -0.15868,-0.813 -0.22642,-0.635 2.25711,0.998 2.07348,0.706 0.60261,0.209 1.92907,1.006 2.12161,1.798"
+ class="c45009"
+ id="Bamberg, SC" />
+ <path
+ d="m 806.76822,389.31814 1.75078,1.641 6.3381,2.587 0.58835,-0.159 1.94332,-1.833 0.2086,-0.506 0.98236,1.173 0.60261,0.578 0.76842,0.508 0.59013,0.19 0.24782,0.02 0.53842,-0.105 1.86489,-0.611 -1.92907,4.687 -1.23018,0.192 -0.9788,-0.233 -0.21037,-0.112 -0.22643,-0.346 -0.0535,-0.17 -0.0125,-0.246 -0.0446,-0.187 -0.098,-0.135 -0.0963,-0.08 -4.8601,4.386 -0.12837,0.113 -2.12161,-1.799 -1.92907,-1.006 -0.60261,-0.208 -2.07348,-0.707 -2.25711,-0.998 -3.01483,-0.713 2.92747,-4.252 2.51563,-1.673"
+ class="c45075"
+ id="Orangeburg, SC" />
+ <path
+ d="m 804.33995,395.95614 0.22642,0.635 0.15868,0.813 0.56339,4.699 0.0891,0.332 0.67571,0.763 -1.68125,0.497 -1.53505,0.248 -1.76682,-0.353 -1.76861,-0.271 -1.18204,1.703 -3.20739,-1.503 6.41299,-8.276 3.01483,0.713"
+ class="c45011"
+ id="Barnwell, SC" />
+ <path
+ d="m 796.23146,386.99014 0.0802,0.119 0.78802,0.796 2.57982,1.945 0.44037,0.06 0.6757,-0.01 0.42789,0.06 1.18026,0.326 1.84884,0.717 -2.92747,4.252 -6.41299,8.276 -1.78822,-1.352 -1.248,-1.766 -0.45107,-1.742 -1.27475,-1.487 -0.90035,-0.852 -0.16224,-0.154 5.85138,-7.513 1.29258,-1.663"
+ class="c45003"
+ id="Aiken, SC" />
+ <path
+ d="m 799.46202,379.00114 2.2268,1.881 0.55447,0 0.69711,0.07 0.70066,0.408 1.71869,1.239 0.31379,0.33 0.70779,1.084 0.0642,0.129 0.26565,1.142 -0.44216,0.289 -0.0303,0.28 0.0392,1.947 0.47246,0.191 0.29061,-0.45 0.97879,-0.105 0.52238,0.225 0.26565,0.176 -0.51525,0.523 -1.52435,0.955 -2.51563,1.673 -1.84884,-0.717 -1.18026,-0.326 -0.42789,-0.06 -0.6757,0.01 -0.44037,-0.06 -2.57982,-1.945 -0.78802,-0.796 -0.0802,-0.119 1.16778,-4.837 2.06278,-3.152"
+ class="c45063"
+ id="Lexington, SC" />
+ <path
+ d="m 808.78464,375.86014 -0.50633,2.098 3.22878,2.138 1.81674,-1.015 1.25336,8.143 -2.45858,-0.04 -1.50296,-0.06 -2.91856,-1.239 -0.98592,-0.601 -0.26565,-1.143 -0.0642,-0.128 -0.70779,-1.084 -0.31379,-0.33 -1.71869,-1.239 -0.70066,-0.408 -0.69711,-0.07 -0.55447,0 -2.2268,-1.881 0.25673,-1.018 0.6347,0.05 3.03801,-0.07 2.90608,-1.31 2.4871,-0.788"
+ class="c45079"
+ id="Richland, SC" />
+ <path
+ d="m 806.81457,369.74614 0.2817,1.952 1.68837,4.162 -2.4871,0.788 -2.90608,1.31 -3.03801,0.07 -0.6347,-0.05 -2.8829,-5.522 -0.26743,-1.775 3.2466,-0.323 4.32346,-0.344 2.67609,-0.273"
+ class="c45039"
+ id="Fairfield, SC" />
+ <path
+ d="m 796.83585,372.46114 2.8829,5.522 -0.25673,1.018 -2.06278,3.152 -0.56339,0.144 -0.82725,-0.192 -0.54734,-0.202 -1.23018,-0.698 -1.43878,-0.603 -0.48851,-0.136 -2.11448,0.537 -0.52238,0.587 0.0713,0.346 -1.62954,-1.343 0.48138,-1.125 1.50117,-2.539 0.50099,-0.497 1.1553,-2.236 0.85399,-2 2.44788,1.414 0.65967,-0.874 0.28347,-0.139 0.55447,-0.153 0.24961,0 0.0392,0.02"
+ class="c45071"
+ id="Newberry, SC" />
+ <path
+ d="m 789.73824,381.93614 -0.0713,-0.346 0.52238,-0.587 2.11448,-0.537 0.48851,0.136 1.43878,0.603 1.23018,0.698 0.54734,0.202 0.82725,0.192 0.56339,-0.144 -1.16778,4.837 -1.29258,1.663 -3.64954,-0.659 -0.47246,-0.282 -0.24782,-0.216 -0.74167,-1.832 -0.7078,0.07 -1.37459,0.554 1.99324,-4.355"
+ class="c45081"
+ id="Saluda, SC" />
+ <path
+ d="m 787.745,386.29114 1.37459,-0.554 0.7078,-0.07 0.74167,1.832 0.24782,0.216 0.47246,0.282 3.64954,0.659 -5.85138,7.513 -0.31201,-0.29 -1.85775,-0.786 -1.65628,-2.887 -0.17472,-4.764 1.95937,-0.843 0.69889,-0.305"
+ class="c45037"
+ id="Edgefield, SC" />
+ <path
+ d="m 787.04611,386.59614 -1.95937,0.843 0.17472,4.764 1.65628,2.887 -2.20006,-1.921 -0.76307,-1.438 -1.18204,-0.972 -0.49742,-0.355 -1.64024,-0.827 -0.0874,0 -0.26743,0.103 -0.11945,-0.03 -2.84368,-1.694 -0.78803,-1.198 1.05368,-1.551 0.79337,-0.249 0.70067,0.305 0.2086,-0.01 1.21413,-0.121 0.92353,-0.291 0.92531,1.849 1.46195,-0.369 1.17135,-0.194 1.99325,-0.218 0.0713,0.701"
+ class="c45065"
+ id="McCormick, SC" />
+ <path
+ d="m 781.78308,376.70514 0.33874,0.353 1.61707,1.18 2.76345,1.439 1.60636,0.916 1.62954,1.343 -1.99324,4.355 -0.69889,0.305 -0.0713,-0.701 -1.99325,0.218 -1.17135,0.194 -1.46195,0.369 -0.92531,-1.849 0.60974,-0.682 0.36014,-0.491 0.24247,-0.651 0.0802,-0.675 -0.0874,-0.651 -0.24247,-0.624 -0.40115,-0.531 -0.27456,-0.259 -0.36727,-0.264 -0.26565,-0.105 -0.71671,-1.423 1.42273,-1.766"
+ class="c45047"
+ id="Greenwood, SC" />
+ <path
+ d="m 788.46884,371.39214 4.13269,0.804 -0.85399,2 -1.1553,2.236 -0.50099,0.497 -1.50117,2.539 -0.48138,1.125 -1.60636,-0.916 -2.76345,-1.439 -1.61707,-1.18 -0.33874,-0.353 -1.50831,-1.519 1.27654,-1.398 -0.2086,-1.166 0.57052,-2.667 0.46533,-2.122 6.09028,3.559"
+ class="c45059"
+ id="Laurens, SC" />
+ <path
+ d="m 780.27477,375.18614 1.50831,1.519 -1.42273,1.766 0.71671,1.423 0.26565,0.105 0.36727,0.264 0.27456,0.259 0.40115,0.531 0.24247,0.624 0.0874,0.651 -0.0802,0.675 -0.24247,0.651 -0.36014,0.491 -0.60974,0.682 -0.92353,0.291 -1.21413,0.121 -0.2086,0.01 -0.70067,-0.304 -0.79337,0.249 -1.05368,1.551 -3.34288,-4.122 7.08869,-7.441"
+ class="c45001"
+ id="Abbeville, SC" />
+ <path
+ d="m 770.01257,373.39414 5.93696,-5.425 0.86826,3.423 0.0642,0.201 0.3227,0.74 0.82725,1.373 2.24285,1.48 -7.08869,7.441 -0.7078,-1.841 -1.99147,-2.803 -0.62578,-0.966 0.007,-0.06 -0.19255,-0.146 -0.39402,-0.112 -0.67392,0.09 -0.74881,0.185 -0.016,0 -0.2086,0.105 2.37835,-3.688"
+ class="c45007"
+ id="Anderson, SC" />
+ <path
+ d="m 790.01102,363.71814 1.28545,0.17 2.51563,0.112 0.36192,0.105 0.22465,0.121 0.58834,0.448 -0.32983,0.467 1.91124,5.545 0.26743,1.775 -0.0392,-0.02 -0.24961,0 -0.55447,0.154 -0.28347,0.139 -0.65967,0.873 -2.44788,-1.413 -4.13269,-0.804 0.27991,-2.5 0.19433,-3.245 0.59548,-1.134 0.47246,-0.795"
+ class="c45087"
+ id="Union, SC" />
+ <path
+ d="m 816.13542,361.87614 7.29728,-1.057 2.88469,5.953 -3.84922,1.583 -4.03285,3.641 -3.17529,-5.304 -3.59783,-4.152 4.47322,-0.664"
+ class="c45025"
+ id="Chesterfield, SC" />
+ <path
+ d="m 804.3239,357.64414 1.49405,1.526 1.31754,1.327 0.12837,2.346 0.009,0.217 0.37797,0.07 4.01146,-0.592 3.59783,4.152 -2.4354,1.678 0.64718,1.214 -2.12518,0.779 -1.26941,-0.02 -0.59547,-0.193 -0.0553,-0.74 -0.10341,0 -2.2268,2.282 -0.2817,-1.952 -0.68997,-2.043 0.0232,-0.786 0.26565,-0.949 -0.40293,-1.157 -0.40115,-1.029 -0.20146,-0.313 -1.08399,-5.825"
+ class="c45057"
+ id="Lancaster, SC" />
+ <path
+ d="m 805.40789,363.46914 0.20146,0.313 0.40115,1.029 0.40293,1.157 -0.26565,0.949 -0.0232,0.786 0.68997,2.043 -2.67609,0.273 -4.32346,0.344 -3.2466,0.323 -1.91124,-5.545 10.75071,-1.672"
+ class="c45023"
+ id="Chester, SC" />
+ <path
+ d="m 796.23146,356.89714 5.30225,-0.483 2.79019,1.23 1.08399,5.825 -10.75071,1.672 0.32983,-0.467 -0.34766,-0.649 -0.60261,-1.583 -0.29595,-2.026 0.007,-0.128 1.22305,-2.571 0.53664,-0.749 0.72385,-0.07"
+ class="c45091"
+ id="York, SC" />
+ <path
+ d="m 788.04452,357.75614 7.46309,-0.788 -0.53664,0.749 -1.22305,2.571 -0.007,0.128 0.29595,2.026 0.60261,1.583 0.34766,0.649 -0.58834,-0.448 -0.22465,-0.121 -0.36192,-0.105 -2.51563,-0.112 -1.28545,-0.17 -0.9467,-0.506 -1.00376,-2.079 -1.99325,-3.175 1.97721,-0.202"
+ class="c45021"
+ id="Cherokee, SC" />
+ <path
+ d="m 784.30584,358.15014 1.76147,-0.192 1.99325,3.175 1.00376,2.079 0.9467,0.506 -0.47246,0.795 -0.59548,1.134 -0.19433,3.245 -0.27991,2.5 -6.09028,-3.559 -1.64737,-1.31 -0.0713,-0.184 -0.41897,-3.6 -0.5313,-4.114 4.59624,-0.475"
+ class="c45083"
+ id="Spartanburg, SC" />
+ <path
+ d="m 777.11018,358.74414 2.59942,-0.119 0.5313,4.114 0.41897,3.6 0.0713,0.184 1.64737,1.31 -0.46533,2.122 -0.57052,2.667 0.2086,1.166 -1.27654,1.398 -2.24285,-1.48 -0.82725,-1.373 -0.3227,-0.74 -0.0642,-0.201 -0.86826,-3.423 0.0909,-0.113 -0.15332,-0.779 -0.20147,-0.538 -1.33002,-2.917 -0.8326,-1.029 -3.53543,0.41 3.29474,-2.25 3.82783,-2.009"
+ class="c45045"
+ id="Greenville, SC" />
+ <path
+ d="m 411.9071,124.60514 15.07595,1.045 -0.67571,10.824 -0.62757,9.962 -15.54841,-1.084 0.28883,-3.977 0.29774,-3.978 0.69888,-7.939 0.12124,0 0.36905,-4.86"
+ class="c46105"
+ id="Perkins, SD" />
+ <path
+ d="m 394.24599,123.20714 16.80177,1.334 0.85934,0.06 -0.36905,4.86 -0.12124,0 -0.69888,7.939 -0.29774,3.978 -17.5167,-1.389 1.23731,-15.326 0.10519,-1.453"
+ class="c46063"
+ id="Harding, SD" />
+ <path
+ d="m 390.01168,171.16314 11.22494,0.843 11.36937,0.868 -0.0464,0.337 -0.24247,0.869 -2.02534,2.499 -1.67946,0.2 -1.61528,1.464 -0.21751,2.973 -17.49174,-1.413 0.0481,-0.58 0.67571,-8.06"
+ class="c46033"
+ id="Custer, SD" />
+ <path
+ d="m 389.28783,179.80314 17.49174,1.413 -0.81121,10.969 -8.42941,-0.651 -9.1586,-0.749 0.90748,-10.982"
+ class="c46047"
+ id="Fall River, SD" />
+ <path
+ d="m 421.42941,177.04514 -0.32805,5.166 0.46533,0.02 -0.12837,2.001 -0.353,6.01 0.45641,0.03 -0.2086,2.986 -11.87748,-0.817 -3.48729,-0.265 0.81121,-10.969 0.21751,-2.973 1.61528,-1.464 1.67946,-0.2 10.4708,0.731 0.66679,-0.265"
+ class="c46113"
+ id="Shannon, SD" />
+ <path
+ d="m 436.12739,185.13014 -0.49207,9.03 -6.66081,-0.346 -4.17904,-0.321 -3.46234,-0.226 0.2086,-2.986 -0.45641,-0.03 0.353,-6.01 14.68907,0.893"
+ class="c46007"
+ id="Bennett, SD" />
+ <path
+ d="m 439.42035,174.85214 0.1141,-0.122 0.37619,-0.09 0.7078,0.08 1.01267,0.514 0.87539,0.772 5.31117,1.43 2.97382,0.361 0.33697,0.248 0.15332,0.275 1.79179,0.151 -0.0571,7.474 -16.88913,-0.818 0.49029,-8.92 0.23177,-0.522 0.13728,-0.195 1.23731,-0.698 0.82726,-0.138 0.27277,0.105 0.0963,0.09"
+ class="c46095"
+ id="Mellette, SD" />
+ <path
+ d="m 436.12739,185.13014 16.88913,0.818 -0.1355,9.05 -1.33359,-0.07 -1.19809,-0.06 -3.26265,-0.154 -6.07424,-0.281 -5.37713,-0.282 0.49207,-9.03"
+ class="c46121"
+ id="Todd, SD" />
+ <path
+ d="m 453.07357,178.47414 0.47424,0.459 2.56377,0.121 3.15033,-0.02 1.63132,-0.853 1.67947,-0.522 0.15154,0.08 0.42611,0.491 -0.20147,5.601 1.49583,0.06 -0.43502,11.574 -11.12867,-0.467 0.1355,-9.05 0.0571,-7.474"
+ class="c46123"
+ id="Tripp, SD" />
+ <path
+ d="m 468.36524,184.02814 0.65075,1.471 6.99955,6.798 1.519,1.132 1.75078,0.779 0.21751,0.02 0.9164,0.351 0.4885,0.428 0.20147,0.28 0.20859,0.403 0.041,0.144 0.007,0.172 -12.67086,-0.371 -4.68538,-0.168 0.43502,-11.574 3.92053,0.137"
+ class="c46053"
+ id="Gregory, SD" />
+ <path
+ d="m 474.84241,174.18314 1.9772,0.06 -0.0802,10.054 -8.36522,-0.273 0.0963,-0.114 0.1355,-0.239 0.0571,-0.21 -0.009,-0.111 -1.13212,-2.653 -0.0731,-0.121 1.02871,-4.846 0.0178,-0.112 -0.025,-0.07 -0.71493,-1.56 7.08691,0.192"
+ class="c46015"
+ id="Brule, SD" />
+ <path
+ d="m 484.69277,174.39314 0.0571,2.008 -0.12124,8.124 -6.40407,-0.174 -1.48513,-0.05 0.0802,-10.054 7.87316,0.146"
+ class="c46003"
+ id="Aurora, SD" />
+ <path
+ d="m 490.67251,176.54714 -0.11232,8.1 -2.49958,-0.03 -3.43203,-0.09 0.12124,-8.124 5.92269,0.146"
+ class="c46035"
+ id="Davison, SD" />
+ <path
+ d="m 478.22451,184.35114 6.40407,0.174 3.43203,0.09 -0.0713,6.949 -9.16217,-4.168 -0.27278,-0.08 -0.43502,0 0.025,-1.334 0.0802,-1.645"
+ class="c46043"
+ id="Douglas, SD" />
+ <path
+ d="m 468.37416,184.02814 8.36522,0.273 1.48513,0.05 -0.0802,1.645 -0.025,1.334 0.43502,0 0.27278,0.08 9.16217,4.168 0.48138,0.687 -0.17651,0.383 -0.45819,3.478 -0.2086,2.113 -0.55626,1.599 -0.24068,0.03 -2.36052,-1.07 -3.10398,-2.784 -0.007,-0.172 -0.041,-0.144 -0.20859,-0.403 -0.20147,-0.28 -0.4885,-0.428 -0.9164,-0.351 -0.21751,-0.02 -1.75078,-0.779 -1.519,-1.132 -6.99955,-6.798 -0.65075,-1.471 0.009,0"
+ class="c46023"
+ id="Charles Mix, SD" />
+ <path
+ d="m 488.47067,192.25114 7.39178,0.135 -0.94849,7.519 -1.46909,-0.191 -1.93798,0.715 -0.353,0.506 -0.47425,0.431 -0.22464,0.14 -0.85221,0.128 -0.27991,0.01 -0.29774,-0.05 -0.36192,-0.16 -1.83279,-1.582 0.24068,-0.03 0.55626,-1.599 0.2086,-2.113 0.45819,-3.478 0.17651,-0.383"
+ class="c46009"
+ id="Bon Homme, SD" />
+ <path
+ d="m 495.86245,192.38614 3.99362,0.05 3.97046,2.05 0.25673,6.926 -1.94511,-1.656 -1.19631,-0.144 -1.5921,-0.06 -1.04476,0.138 -3.39102,0.223 0.94849,-7.519"
+ class="c46135"
+ id="Yankton, SD" />
+ <path
+ d="m 488.06061,184.61514 2.49958,0.03 5.94587,0.103 3.42311,0.06 -0.0731,7.628 -3.99362,-0.05 -7.39178,-0.135 -0.48138,-0.687 0.0713,-6.949"
+ class="c46067"
+ id="Hutchinson, SD" />
+ <path
+ d="m 492.60158,176.60214 4.0168,0.1 -0.11232,8.051 -5.94587,-0.103 0.11232,-8.1 1.92907,0.06"
+ class="c46061"
+ id="Hanson, SD" />
+ <path
+ d="m 500.57992,176.77214 3.97758,0.06 -0.1034,8.044 -4.52493,-0.07 -3.42311,-0.06 0.11232,-8.051 3.96154,0.07"
+ class="c46087"
+ id="McCook, SD" />
+ <path
+ d="m 504.4541,184.87114 3.41419,0.02 -0.0891,9.628 -3.95262,-0.03 -3.97046,-2.05 0.0731,-7.628 4.52493,0.07"
+ class="c46125"
+ id="Turner, SD" />
+ <path
+ d="m 507.77915,194.51514 1.98612,0.02 -0.0802,8.782 -3.52117,-1.315 -2.08061,-0.596 -0.25673,-6.926 3.95262,0.03"
+ class="c46027"
+ id="Clay, SD" />
+ <path
+ d="m 515.63804,194.57714 -1.16422,4.019 -0.6757,1.801 -0.67393,3.084 0.44037,0.337 0.55447,0.515 0.43502,0.699 0.60975,1.606 0.60439,1.666 -3.24661,-0.829 -1.20522,-1.792 -0.0499,-0.209 0.009,-0.21 0.0642,-0.271 -0.0963,-0.385 -0.18541,-0.419 -1.37281,-0.869 0.0802,-8.782 5.87277,0.04"
+ class="c46127"
+ id="Union, SD" />
+ <path
+ d="m 507.86829,184.88714 5.42527,0.04 0.28705,5.552 0.37083,0.836 1.19809,0 0.15868,0.08 0.64361,2.314 -0.0481,0.158 -0.26565,0.708 -5.87277,-0.04 -1.98612,-0.02 0.0891,-9.628"
+ class="c46083"
+ id="Lincoln, SD" />
+ <path
+ d="m 508.54222,176.86814 7.20814,0.02 -0.0321,8.06 -2.42471,-0.02 -5.42527,-0.04 -3.41419,-0.02 0.1034,-8.044 3.98472,0.04"
+ class="c46099"
+ id="Minnehaha, SD" />
+ <path
+ d="m 464.33239,167.89314 0.15868,2.145 0.0571,0.176 0.29774,0.443 0.44215,0.442 0.46533,0.112 0.54734,0.07 0.36192,0.147 0.81121,0.747 0.36905,0.394 0.12124,0.32 -0.009,0.275 -0.0874,0.528 -0.11232,0.297 0.71493,1.561 0.025,0.07 -0.0178,0.112 -1.02871,4.846 0.0731,0.121 1.13212,2.653 0.009,0.111 -0.0571,0.21 -0.1355,0.239 -0.0963,0.114 -0.009,0 -3.92053,-0.137 -1.49583,-0.06 0.20147,-5.601 -0.42611,-0.491 -0.15154,-0.08 -1.67947,0.522 -1.63132,0.853 -3.15033,0.02 -2.56377,-0.121 -0.47424,-0.459 -1.79179,-0.151 0.10519,-2.468 -0.41897,-0.545 0.3227,-7.41 0.0321,-0.602 7.06373,0.297 0.0392,0.161 0.54556,1.084 0.1141,0.185 0.11946,0.113 0.14441,0.08 0.2496,0.07 3.77612,0.747 0.29774,-0.12 0.11945,-0.146 0.0981,-0.183 0.016,-0.131 -0.016,-0.217 -0.0339,-0.143 -0.11945,-0.226 -0.8112,-1.614 1.40668,0.635"
+ class="c46085"
+ id="Lyman, SD" />
+ <path
+ d="m 451.2907,167.90014 -0.3227,7.41 0.41897,0.545 -0.10519,2.468 -0.15332,-0.275 -0.33697,-0.248 -2.97382,-0.361 -5.31117,-1.43 -0.87539,-0.772 -1.01267,-0.514 -0.7078,-0.08 -0.37619,0.09 -0.1141,0.122 0.18542,-3.529 0.49029,-3.977 11.19464,0.554"
+ class="c46075"
+ id="Jones, SD" />
+ <path
+ d="m 424.04131,170.42314 15.56446,0.9 -0.18542,3.529 -0.0963,-0.09 -0.27277,-0.106 -0.82726,0.138 -1.23731,0.699 -0.13728,0.194 -0.23177,0.522 -0.49029,8.92 -14.68907,-0.893 0.12837,-2.001 -0.46533,-0.02 0.32805,-5.166 0.69888,0.345 0.66858,0 0.0463,0 0.58835,-0.387 0.41719,-6.596 0.19255,0"
+ class="c46071"
+ id="Jackson, SD" />
+ <path
+ d="m 446.2113,153.75814 1.34072,0.796 0.0499,0.05 0.23356,0.706 0,0.314 -0.24247,0.955 -0.17651,0.46 -0.16046,0.248 -0.0642,0.515 0.0731,0.328 0.11232,0.193 0.18363,0.217 0.21038,0.147 0.23178,0.103 1.07685,0.266 -0.73989,1.051 -0.11945,0.17 -0.0963,0.362 -0.025,0.256 0.0161,0.09 0.15332,0.208 3.29475,2.5 0.0642,0.06 0.35301,0.161 1.52613,0.442 0.58835,0.09 0.67393,0.01 0.2496,0.07 1.05189,0.355 2.62795,1.084 0.14441,0.07 0.22465,0.2 0.12123,0.314 -0.016,0.05 -0.78625,0.989 -7.06373,-0.297 -0.0321,0.602 -11.19464,-0.554 -1.96829,-0.1 0.21573,-4.034 0.6347,-7.962 0.35479,-1.302 1.83992,0.635 0.54556,-0.154 0.25851,-0.433 1.01267,-0.403 1.35677,-0.216 1.86488,0.378"
+ class="c46117"
+ id="Stanley, SD" />
+ <path
+ d="m 424.90957,158.53814 0.0802,-0.16 0.1765,-0.137 4.52315,-0.988 0.84508,-0.07 0.44928,0.02 0.10519,0.176 2.69926,-0.772 3.97045,-1.478 1.14817,-0.625 0.42611,-0.555 -0.35479,1.302 -0.6347,7.962 -0.21573,4.035 1.96829,0.1 -0.49029,3.977 -15.56446,-0.9 0.50634,-8.035 0.1034,0 0.24248,-3.85 0.016,0"
+ class="c46055"
+ id="Haakon, SD" />
+ <path
+ d="m 390.58219,164.55714 9.8985,0.82 17.50956,1.286 0.5937,-2.161 0.27456,-1.695 0.9467,-2.509 0.13015,-0.209 0.21751,-0.233 0.21573,-0.136 0.85221,0 1.0519,0.41 0.68462,0.02 1.1963,-1.413 0.13729,-0.06 0.60261,-0.137 -0.24248,3.849 -0.1034,0 -0.50634,8.036 -0.19255,0 -0.41719,6.596 -0.58835,0.387 -0.0463,0 -0.66858,0 -0.69888,-0.345 -0.66679,0.265 -10.4708,-0.731 2.02534,-2.499 0.24247,-0.869 0.0464,-0.337 -11.36937,-0.868 -11.22494,-0.843 0.57051,-6.606"
+ class="c46103"
+ id="Pennington, SD" />
+ <path
+ d="m 391.40053,154.69114 2.53168,-0.339 1.37459,-0.121 4.12913,0.346 -0.60975,6.324 -0.13728,1.663 1.99325,0.144 -0.20146,2.669 -9.8985,-0.82 0.0784,-0.898 0.73989,-8.968"
+ class="c46081"
+ id="Lawrence, SD" />
+ <path
+ d="m 410.42019,141.37514 -0.28883,3.977 -0.0232,0 -0.51524,7.055 -0.29774,2.926 -9.85927,-0.756 -4.12913,-0.346 -1.37459,0.121 -2.53168,0.339 0.80408,-9.788 0.69888,-4.917 17.5167,1.389"
+ class="c46019"
+ id="Butte, SD" />
+ <path
+ d="m 425.67977,146.43614 -0.7702,12.102 -0.016,0 -0.60261,0.138 -0.13729,0.06 -1.1963,1.414 -0.68462,-0.02 -1.0519,-0.41 -0.85221,0 -0.21573,0.135 -0.21751,0.234 -0.13015,0.208 -0.9467,2.509 -0.27456,1.695 -0.5937,2.161 -17.50956,-1.285 0.20146,-2.669 -1.99325,-0.145 0.13728,-1.663 0.60975,-6.324 9.85927,0.756 0.29774,-2.926 0.51524,-7.055 0.0232,0 15.54841,1.084"
+ class="c46093"
+ id="Meade, SD" />
+ <path
+ d="m 426.30734,136.47414 8.54886,0.513 -1.07507,9.941 -0.0571,1.027 5.92269,0.323 -0.31378,5.673 -0.42611,0.555 -1.14817,0.625 -3.97045,1.478 -2.69926,0.772 -0.10519,-0.176 -0.44928,-0.02 -0.84508,0.07 -4.52315,0.988 -0.1765,0.137 -0.0802,0.16 0.7702,-12.102 0.62757,-9.962"
+ class="c46137"
+ id="Ziebach, SD" />
+ <path
+ d="m 453.08248,137.91914 1.00376,2.154 -0.007,0.137 -0.16225,0.459 -0.44215,0.513 -0.0802,0.12 -0.0713,0.194 0.12837,0.61 0.71493,1.069 0.0321,0.257 -0.42611,1.744 -0.82012,1.92 -0.68284,1.004 -0.27278,-0.03 -0.16937,0.06 -0.34409,0.378 -0.23356,0.401 -0.0232,0.435 0.0713,1.148 0.041,0.25 0.2817,0.884 -0.025,0.176 -0.15333,0.234 -0.27278,0.296 -1.90589,1.695 -0.30308,0.122 -0.6044,-0.138 -0.40827,-0.144 -0.47425,-0.522 -0.25851,-0.443 -0.12837,-0.151 -0.19255,-0.186 -0.29774,-0.119 -0.0713,0 -0.20147,0.128 -0.16046,0.289 -0.0642,0.177 -0.0571,0.233 0.009,0.234 0.0553,0.144 0.10519,0.105 -1.86488,-0.378 -1.35677,0.216 -1.01267,0.403 -0.25851,0.433 -0.54556,0.154 -1.83992,-0.635 0.31378,-5.673 -5.92269,-0.323 0.0571,-1.027 1.07507,-9.941 18.22628,0.932"
+ class="c46041"
+ id="Dewey, SD" />
+ <path
+ d="m 451.7792,135.05114 11.49951,0.529 0.15333,0 -0.33874,7.988 -8.92683,-0.402 -0.71493,-1.069 -0.12837,-0.61 0.0713,-0.194 0.0802,-0.12 0.44215,-0.513 0.16225,-0.458 0.007,-0.138 -1.00376,-2.153 -1.30328,-2.869"
+ class="c46129"
+ id="Walworth, SD" />
+ <path
+ d="m 454.16647,143.17514 8.92683,0.402 2.19471,0.09 -0.28169,8.003 -1.65451,-0.07 -11.90065,-0.507 -0.11233,-0.353 -0.041,-0.249 -0.0713,-1.148 0.0232,-0.435 0.23356,-0.401 0.34409,-0.378 0.16937,-0.06 0.27278,0.03 0.68284,-1.004 0.82012,-1.92 0.42611,-1.744 -0.0321,-0.257"
+ class="c46107"
+ id="Potter, SD" />
+ <path
+ d="m 463.35181,151.59614 -0.34587,8.044 -13.926,-0.586 -1.07685,-0.266 -0.23178,-0.103 -0.21038,-0.147 -0.18363,-0.217 -0.11232,-0.193 -0.0731,-0.328 0.0642,-0.515 0.16046,-0.248 0.17651,-0.46 0.24247,-0.955 0,-0.314 -0.23356,-0.706 -0.0499,-0.05 -1.34072,-0.795 -0.10519,-0.106 -0.0553,-0.144 -0.009,-0.234 0.0571,-0.233 0.0642,-0.177 0.16046,-0.289 0.20147,-0.128 0.0713,0 0.29774,0.12 0.19255,0.185 0.12837,0.152 0.25851,0.442 0.47425,0.522 0.40827,0.144 0.6044,0.138 0.30308,-0.121 1.90589,-1.696 0.27278,-0.296 0.15333,-0.233 0.025,-0.177 -0.16937,-0.531 11.90065,0.506"
+ class="c46119"
+ id="Sully, SD" />
+ <path
+ d="m 463.00594,159.64014 -0.0802,7.618 0.8112,1.614 0.11945,0.226 0.0339,0.143 0.016,0.217 -0.016,0.131 -0.0981,0.183 -0.11945,0.146 -0.29774,0.12 -3.77612,-0.747 -0.2496,-0.07 -0.14441,-0.08 -0.11946,-0.113 -0.1141,-0.185 -0.54556,-1.084 -0.0392,-0.161 0.78625,-0.989 0.016,-0.05 -0.12123,-0.314 -0.22465,-0.2 -0.14441,-0.07 -2.62795,-1.084 -1.05189,-0.355 -0.2496,-0.07 -0.67393,-0.01 -0.58835,-0.09 -1.52613,-0.442 -0.35301,-0.161 -0.0642,-0.06 -3.29475,-2.5 -0.15332,-0.208 -0.0161,-0.09 0.025,-0.257 0.0963,-0.362 0.11945,-0.169 0.73989,-1.052 13.926,0.586"
+ class="c46065"
+ id="Hughes, SD" />
+ <path
+ d="m 464.33239,167.89314 4.56415,0.112 6.14555,0.152 -0.19968,6.026 -7.08691,-0.193 0.11232,-0.297 0.0874,-0.528 0.009,-0.275 -0.12124,-0.32 -0.36905,-0.394 -0.81121,-0.747 -0.36192,-0.147 -0.54734,-0.07 -0.46533,-0.112 -0.44215,-0.442 -0.29774,-0.443 -0.0571,-0.176 -0.15868,-2.145"
+ class="c46017"
+ id="Buffalo, SD" />
+ <path
+ d="m 475.04209,168.15714 3.72085,0.112 6.07602,0.161 -0.14619,5.963 -7.87316,-0.146 -1.9772,-0.06 0.19968,-6.026"
+ class="c46073"
+ id="Jerauld, SD" />
+ <path
+ d="m 484.83896,168.43014 7.87494,0.208 0.0713,0 -0.18363,7.964 -1.92907,-0.06 -5.92269,-0.146 -0.0571,-2.008 0.14619,-5.963"
+ class="c46111"
+ id="Sanborn, SD" />
+ <path
+ d="m 500.68511,168.77714 -0.10519,7.995 -3.96154,-0.07 -4.0168,-0.1 0.18363,-7.964 7.8999,0.139"
+ class="c46097"
+ id="Miner, SD" />
+ <path
+ d="m 500.68511,168.77714 3.95975,0.03 3.96332,0.05 -0.066,8.01 -3.98472,-0.04 -3.97758,-0.06 0.10519,-7.995"
+ class="c46079"
+ id="Lake, SD" />
+ <path
+ d="m 515.7985,168.88114 -0.0481,8.003 -7.20814,-0.02 0.066,-8.01 7.19032,0.02"
+ class="c46101"
+ id="Moody, SD" />
+ <path
+ d="m 504.7661,160.81314 3.97758,0.02 7.10474,0.06 -0.0499,7.987 -7.19032,-0.02 -3.96332,-0.05 0.12124,-7.995"
+ class="c46011"
+ id="Brookings, SD" />
+ <path
+ d="m 508.81678,154.83414 -0.0731,6.002 -3.97758,-0.02 -5.96905,-0.105 0.11232,-5.987 9.90741,0.113"
+ class="c46057"
+ id="Hamlin, SD" />
+ <path
+ d="m 498.79705,160.70814 5.96905,0.105 -0.12124,7.995 -3.95975,-0.03 -7.8999,-0.139 -0.0713,0 0.16759,-8.042 5.91556,0.112"
+ class="c46077"
+ id="Kingsburg, SD" />
+ <path
+ d="m 490.88111,158.53814 2.00038,2.058 -0.16759,8.042 -7.87494,-0.208 -6.07602,-0.161 0.20146,-10.077 11.91671,0.346"
+ class="c46005"
+ id="Beadle, SD" />
+ <path
+ d="m 465.00632,151.66914 4.25927,0.16 -0.29774,8.043 0.20147,0 -0.27278,8.124 -4.56415,-0.112 -1.40668,-0.635 0.0802,-7.618 0.34587,-8.044 1.65451,0.07"
+ class="c46069"
+ id="Hyde, SD" />
+ <path
+ d="m 469.26559,151.82914 9.69881,0.305 0,6.058 -0.20146,10.077 -3.72085,-0.112 -6.14555,-0.152 0.27278,-8.124 -0.20147,0 0.29774,-8.043"
+ class="c46059"
+ id="Hand, SD" />
+ <path
+ d="m 463.43204,135.58914 15.85328,0.587 -0.19255,7.98 -13.80476,-0.49 -2.19471,-0.09 0.33874,-7.988"
+ class="c46045"
+ id="Edmunds, SD" />
+ <path
+ d="m 479.09277,144.15614 0.0802,0 -0.2086,7.971 -9.69881,-0.305 -4.25927,-0.16 0.28169,-8.003 13.80476,0.49"
+ class="c46049"
+ id="Faulk, SD" />
+ <path
+ d="m 491.11466,144.53214 -0.0481,2.009 -0.1462,5.666 0,0.328 0.0891,0 -0.12836,5.994 -11.91671,-0.345 0,-6.059 0.2086,-7.971 11.94166,0.369"
+ class="c46115"
+ id="Spink, SD" />
+ <path
+ d="m 498.98068,146.72714 -0.0713,7.994 -0.11232,5.987 -5.91556,-0.112 -2.00038,-2.058 0.12836,-5.994 -0.0891,0 0,-0.328 0.1462,-5.666 7.91415,0.186"
+ class="c46025"
+ id="Clark, SD" />
+ <path
+ d="m 498.98068,146.72714 4.35556,0.06 5.56968,0.1 -0.0178,3.985 -0.0713,3.969 -9.90741,-0.113 0.0713,-7.994"
+ class="c46029"
+ id="Codington, SD" />
+ <path
+ d="m 515.89477,150.89714 -0.007,3.962 -0.025,4.018 -0.0143,2.017 -7.10474,-0.06 0.0731,-6.002 0.0713,-3.969 7.00668,0.03"
+ class="c46039"
+ id="Deuel, SD" />
+ <path
+ d="m 515.64695,142.86914 0.26565,1.326 -0.0178,6.702 -7.00668,-0.03 0.0178,-3.985 -5.56968,-0.1 0.0392,-3.361 3.55326,0.06 1.1963,-0.667 7.52193,0.06"
+ class="c46051"
+ id="Grand, SD" />
+ <path
+ d="m 491.30721,136.52914 9.78618,0.201 0.12836,0.66 2.22681,0.05 -0.11232,9.346 -4.35556,-0.06 -7.91415,-0.186 0.24068,-10.012"
+ class="c46037"
+ id="Day, SD" />
+ <path
+ d="m 514.21709,128.88014 -0.0891,1.004 0,0.05 -0.009,0.03 -0.0713,0.61 -0.0571,0.497 -0.0392,0.209 -0.016,0.114 -0.016,0.05 -0.016,0.03 -0.025,0.06 -1.12499,1.671 -0.32805,0.33 -0.61866,0.337 -0.55625,0.362 -1.46909,1.18 -0.025,0.03 -0.0321,0.04 -0.025,0.02 -0.0553,0.128 -0.22464,0.771 0.0642,0.09 0.28883,0.369 1.12499,1.503 2.3623,2.619 1.5511,0.756 0.52951,0.426 0.30665,0.706 -7.52193,-0.06 -1.1963,0.667 -3.55326,-0.06 0.0731,-5.985 0.0874,-8.663 10.68117,0.105"
+ class="c46109"
+ id="Roberts, SD" />
+ <path
+ d="m 503.53592,128.77514 -0.0874,8.663 -2.22681,-0.05 -0.12836,-0.66 -9.78618,-0.201 0.18364,-7.971 12.04507,0.217"
+ class="c46091"
+ id="Marshall, SD" />
+ <path
+ d="m 479.51888,128.19714 11.49773,0.345 0.47424,0.02 -0.18364,7.971 -0.19255,8.003 -11.94166,-0.369 -0.0802,0 0.19255,-7.98 0.23356,-7.978"
+ class="c46013"
+ id="Brown, SD" />
+ <path
+ d="m 463.57645,127.60214 11.43355,0.435 4.50888,0.16 -0.23356,7.979 -15.85328,-0.587 -0.15333,0 0.29774,-7.978"
+ class="c46089"
+ id="McPherson, SD" />
+ <path
+ d="m 460.97346,127.48314 2.60299,0.119 -0.29774,7.978 -11.49951,-0.529 0.25852,-0.908 0.1765,-0.338 0.32092,-0.209 0.69175,0 0.11946,-0.03 0.28169,-0.177 0.0874,-0.121 0.12124,-0.289 0.016,-0.417 -0.98771,-3.505 -0.0891,-0.257 -1.7276,-1.791 9.92523,0.483"
+ class="c46021"
+ id="Campbell, SD" />
+ <path
+ d="m 427.01514,125.65014 0.10341,0 0.0392,0 0.25852,0.02 1.93619,0.121 2.30525,0.136 2.42827,0.153 2.0093,0.112 0.93244,0.06 1.63846,0.09 4.66042,0.256 1.45482,0.08 1.92728,0.1 0.13015,0 0.36192,0.02 3.64776,0.185 0.19968,0 1.7276,1.792 0.0891,0.257 0.98771,3.505 -0.016,0.417 -0.12124,0.289 -0.0874,0.121 -0.28169,0.177 -0.11946,0.03 -0.69175,0 -0.32092,0.208 -0.1765,0.339 -0.25852,0.908 1.30328,2.868 -18.22628,-0.932 -8.54886,-0.514 0.67571,-10.823 0.0321,0"
+ class="c46031"
+ id="Corson, SD" />
+ <path
+ d="m 782.02555,325.08314 -2.48354,2.855 -5.36822,3.398 -0.8433,0.11 -0.28882,-0.08 -0.90927,-0.662 -0.63292,-0.128 -1.09468,0.346 -2.25711,0.444 -1.01267,0.159 0.77198,-3.905 5.7141,-0.852 0.91461,-0.137 1.76861,-0.241 3.84743,-0.555 0.12837,-0.538 1.74543,-0.209"
+ class="c47163"
+ id="Sullivan, TN" />
+ <path
+ d="m 782.02555,325.08314 3.26978,-0.442 -0.47424,0.63 -0.0874,4.713 0.0695,1.095 -0.38332,0.129 -0.0339,0 -0.28704,0.01 -0.48138,-0.154 -0.1141,-0.263 -0.0963,0.06 -0.0232,0.02 -0.9164,0.627 -0.84508,0.947 -0.1355,0.369 -0.19255,0.555 -0.3227,0.123 -0.61152,-0.523 -1.25336,-1.305 -0.27991,-0.553 1.42273,-2.403 0,-0.07 -0.7078,-0.706 2.48354,-2.855"
+ class="c47091"
+ id="Johnson, TN" />
+ <path
+ d="m 665.35632,367.25414 0.3851,8.919 -7.57541,0.603 -0.35479,-5.832 1.39777,-0.692 0.20859,-0.884 0.33875,-0.611 0.47424,-0.619 0.90035,-0.449 0.3441,-0.147 1.02871,-0.16 2.85259,-0.128"
+ class="c47109"
+ id="McNairy, TN" />
+ <path
+ d="m 660.32685,362.84314 4.99738,3.533 0.0321,0.878 -2.85259,0.128 -1.02871,0.16 -0.3441,0.147 -0.90035,0.449 -0.47424,0.619 -0.33875,0.611 -0.20859,0.884 -1.39777,0.692 -0.38688,-1.72 -0.97345,-1.352 -0.0695,-1.002 3.94549,-4.027"
+ class="c47023"
+ id="Chester, TN" />
+ <path
+ d="m 651.97054,367.11814 4.41082,-0.248 0.0695,1.002 0.97345,1.352 0.38688,1.72 0.35479,5.832 -0.68284,0.06 -3.62636,0.282 -3.37319,0.247 -0.40114,-9.312 1.88806,-0.932"
+ class="c47069"
+ id="Hardeman, TN" />
+ <path
+ d="m 644.68216,368.28914 5.40032,-0.238 0.40114,9.311 -2.88468,0.204 -5.44845,0.353 -0.11232,-3.095 -0.18542,-3.004 -0.0802,-2.702 2.90964,-0.829"
+ class="c47047"
+ id="Fayette, TN" />
+ <path
+ d="m 646.19939,358.56714 0.007,0.08 0.26565,0.338 0.20146,0.209 0.46176,0.335 0.7916,0.371 0.38688,0 1.98433,0.62 1.40669,0.537 0.26565,6.051 -1.88806,0.933 -5.40032,0.238 -0.8112,-4.063 0.14441,-0.07 0.43324,-0.313 0.55447,-3.399 -0.007,-0.169 -0.23356,0 -0.016,-0.314 0.1034,-0.401 0.49921,-1.061 0.85043,0.06"
+ class="c47075"
+ id="Haywood, TN" />
+ <path
+ d="m 660.09329,358.18914 0.23356,4.654 -3.94549,4.027 -4.41082,0.248 -0.26565,-6.051 2.66182,-2.619 3.86883,-0.153 1.85775,-0.106"
+ class="c47113"
+ id="Madison, TN" />
+ <path
+ d="m 648.98779,354.14114 1.0305,0.659 0.19077,1.243 0.18542,0.46 0.35657,0.708 2.39975,0.552 1.21591,0.685 -2.66182,2.619 -1.40669,-0.537 -1.98433,-0.62 -0.38688,0 -0.7916,-0.371 -0.46176,-0.335 -0.20146,-0.209 -0.26565,-0.338 -0.007,-0.08 0.14441,-1.486 2.64399,-2.94"
+ class="c47033"
+ id="Crockett, TN" />
+ <path
+ d="m 649.2784,349.35914 3.55148,-0.683 0.53843,0.617 1.37281,1.214 0.13728,0.07 0.14441,-0.03 1.64737,0.483 1.34963,0.981 0.21573,6.292 -3.86883,0.153 -1.21591,-0.685 -2.39975,-0.552 -0.35657,-0.708 -0.18542,-0.46 -0.19077,-1.243 -1.0305,-0.659 0.29061,-4.782"
+ class="c47053"
+ id="Gibson, TN" />
+ <path
+ d="m 660.84745,349.74414 5.9013,0.226 1.15351,6.282 0.0339,0.675 -7.22241,0.394 -0.27456,0.259 -0.24069,0.312 -0.10519,0.297 -1.85775,0.106 -0.21573,-6.292 2.82764,-2.259"
+ class="c47017"
+ id="Carroll, TN" />
+ <path
+ d="m 654.97467,342.01514 5.48946,-0.396 0.38332,8.125 -2.82764,2.259 -1.34963,-0.981 -1.64737,-0.483 -0.14441,0.03 -0.13728,-0.07 -1.37281,-1.214 -0.53843,-0.617 -0.1462,-4.314 0.0588,-0.07 0.34409,0.02 0.26387,0.07 0.25851,0.249 0.27991,0.03 1.24623,-0.506 -0.0642,-1.382 -0.29596,-0.731 0.19968,-0.02"
+ class="c47183"
+ id="Weakley, TN" />
+ <path
+ d="m 654.63771,342.03814 0.13728,0 0.29596,0.731 0.0642,1.382 -1.24623,0.506 -0.27991,-0.03 -0.25851,-0.249 -0.26387,-0.06 -0.34409,-0.02 -0.0588,0.07 0.1462,4.314 -3.55148,0.683 -6.04214,0.241 2.0396,-6.886 9.36185,-0.675"
+ class="c47131"
+ id="Obion, TN" />
+ <path
+ d="m 645.27586,342.71414 -2.0396,6.886 -2.6547,0.811 1.3122,-3.6 -0.1462,-3.737 0.98949,-0.05 1.24445,-0.123 1.29436,-0.184"
+ class="c47095"
+ id="Lake, TN" />
+ <path
+ d="m 643.23626,349.60014 6.04214,-0.241 -0.29061,4.782 -2.64399,2.94 -0.22999,-0.409 -0.15333,-0.194 -0.91639,-0.827 -1.54219,0.08 -2.65469,1.016 -0.9057,0.232 -0.98236,-2.17 1.62241,-4.396 2.6547,-0.811"
+ class="c47045"
+ id="Dyer, TN" />
+ <path
+ d="m 639.94151,356.97714 0.9057,-0.232 2.65469,-1.016 1.54219,-0.08 0.91639,0.827 0.15333,0.194 0.22999,0.409 -0.14441,1.486 -0.85043,-0.06 -0.49921,1.061 -0.1034,0.401 0.016,0.314 0.23356,0 0.007,0.169 -0.55447,3.399 -0.43324,0.313 -0.14441,0.07 -0.81299,-0.579 -1.48691,-0.795 -2.55307,0.256 -0.55448,0.2 -0.43502,0.323 -0.95561,0.882 -0.3548,0.426 -0.32983,0.772 0.50812,-4.869 1.62241,-3.464 0.11767,-0.103 0.0606,-0.04 0.40115,-0.209 0.33517,-0.06 0.50812,0"
+ class="c47097"
+ id="Lauderdale, TN" />
+ <path
+ d="m 643.87096,364.22614 0.8112,4.063 -2.90964,0.829 -0.36192,-0.256 -0.98058,-0.41 -0.12658,-0.02 -6.15447,0.701 -0.87717,0.424 -1.24623,-1.227 4.36268,-2.621 0.32983,-0.772 0.3548,-0.426 0.95561,-0.882 0.43502,-0.323 0.55448,-0.2 2.55307,-0.256 1.48691,0.795 0.81299,0.579"
+ class="c47167"
+ id="Tipton, TN" />
+ <path
+ d="m 633.2718,369.55914 0.87717,-0.424 6.15447,-0.701 0.12658,0.02 0.98058,0.41 0.36192,0.256 0.0802,2.702 0.18542,3.004 0.11232,3.095 -1.49405,0.11 -10.92899,0.669 -0.0321,-0.321 0.22464,-0.717 1.87201,-0.617 1.97008,-1.513 0.27991,-0.344 0.0339,-0.05 0.007,-0.01 0,-0.02 0.007,-0.03 -0.74702,-5.272 -0.0713,-0.242"
+ class="c47157"
+ id="Shelby, TN" />
+ <path
+ d="m 667.93614,356.92714 0.18541,4.809 -0.8219,1.934 0.10697,2.435 0.11946,-0.01 -2.20185,0.281 -4.99738,-3.533 -0.23356,-4.654 0.10519,-0.297 0.24069,-0.312 0.27456,-0.259 7.22241,-0.394"
+ class="c47077"
+ id="Henderson, TN" />
+ <path
+ d="m 660.96155,341.58714 7.97834,-0.554 1.42452,3.045 -1.89698,0.169 -0.025,0.03 -0.0731,0.763 0.041,0.362 0.40293,1.294 -1.44056,2.492 -0.624,0.779 -5.9013,-0.226 -0.38332,-8.125 0.49742,-0.03"
+ class="c47079"
+ id="Henry, TN" />
+ <path
+ d="m 670.36441,344.07814 0.1765,0.153 0.79516,2.5 0.7702,1.792 0.28169,5.391 0,0.442 -0.12123,0.972 -0.0856,0.258 -0.29952,0.45 -0.0981,0.595 -3.88131,-0.379 -1.15351,-6.282 0.624,-0.779 1.44056,-2.492 -0.40293,-1.294 -0.041,-0.362 0.0731,-0.763 0.025,-0.03 1.89698,-0.169"
+ class="c47005"
+ id="Benton, TN" />
+ <path
+ d="m 667.90226,356.25214 3.88131,0.379 -0.59191,1.696 -0.29953,1.043 0.25852,5.851 0.17651,0.314 0.13728,0.159 0.12836,0.06 0.27278,-0.02 -0.25851,0.747 -4.08099,-0.388 -0.11946,0.01 -0.10697,-2.435 0.8219,-1.934 -0.18541,-4.809 -0.0339,-0.675"
+ class="c47039"
+ id="Decatur, TN" />
+ <path
+ d="m 665.32423,366.37614 2.20185,-0.281 4.08099,0.388 0.0339,0.393 0.30487,1.52 0.84152,2.908 0.31556,4.019 -3.99541,0.578 -3.05227,0.251 -0.31379,0.02 -0.3851,-8.919 -0.0321,-0.878"
+ class="c47071"
+ id="Hardin, TN" />
+ <path
+ d="m 685.04277,364.08014 1.65629,0.114 -0.0392,0.617 -0.009,0.594 0.56161,6.163 0.10697,2.655 -7.14574,0.553 -0.24069,-9.163 0.75594,-0.07 1.55109,-0.642 -0.0749,-0.859 2.27494,-0.178 0.60261,0.217"
+ class="c47099"
+ id="Lawrence, TN" />
+ <path
+ d="m 677.12861,363.89614 2.80446,1.717 0.24069,9.163 -7.07087,0.547 -0.31556,-4.019 -0.84152,-2.908 -0.30487,-1.52 -0.0339,-0.393 0.25851,-0.747 5.26303,-1.84"
+ class="c47181"
+ id="Wayne, TN" />
+ <path
+ d="m 683.76802,359.21314 -0.17115,0.977 0.0178,0.474 0.0642,0.289 0.27991,0.25 0.44928,0.08 0.50812,0.41 0.46355,0.932 -0.0624,0.834 -0.0553,0.273 -0.2193,0.346 -0.60261,-0.217 -2.27494,0.178 0.0749,0.859 -1.55109,0.642 -0.75594,0.07 -2.80446,-1.717 0.84508,-3.005 0.71493,-0.475 1.25158,-0.185 1.68659,0.201 0.13907,-0.03 0.75415,-0.392 1.24801,-0.795"
+ class="c47101"
+ id="Lewis, TN" />
+ <path
+ d="m 676.4226,355.69214 1.55109,5.199 -0.84508,3.005 -5.26303,1.84 -0.27278,0.02 -0.12836,-0.06 -0.13728,-0.159 -0.17651,-0.314 -0.25852,-5.851 0.29953,-1.043 0.59191,-1.696 0.0981,-0.595 2.2268,0.281 0.4582,-0.385 0.32805,-0.06 1.52792,-0.176"
+ class="c47135"
+ id="Perry, TN" />
+ <path
+ d="m 685.61507,352.06714 0.0303,2.525 -1.87736,4.621 -1.24801,0.795 -0.75415,0.392 -0.13907,0.03 -1.68659,-0.201 -1.25158,0.185 -0.71493,0.475 -1.55109,-5.199 3.04514,-3.858 6.14733,0.233"
+ class="c47081"
+ id="Hickman, TN" />
+ <path
+ d="m 678.49608,347.62414 0.97166,4.21 -3.04514,3.858 -1.52792,0.176 -0.32805,0.06 -0.4582,0.385 -2.2268,-0.281 0.29952,-0.45 0.0856,-0.258 0.12123,-0.972 0,-0.442 -0.28169,-5.391 -0.7702,-1.792 2.11983,0.07 0.65253,-0.346 0.74881,0 3.24482,0.738 0.39402,0.419"
+ class="c47085"
+ id="Humphreys, TN" />
+ <path
+ d="m 677.63495,343.29214 1.51187,0.626 -0.65074,3.706 -0.39402,-0.419 -3.24482,-0.738 -0.74881,0 -0.65253,0.346 -2.11983,-0.07 -0.79516,-2.5 1.99147,0.339 0.36192,0.02 0.54021,-0.03 0.35835,-0.06 0.3958,-0.123 0.49742,-0.248 0.32805,-0.232 0.25138,-0.226 2.36944,-0.378"
+ class="c47083"
+ id="Houston, TN" />
+ <path
+ d="m 675.23342,337.24114 0.96454,-0.111 1.43699,6.162 -2.36944,0.378 -0.25138,0.226 -0.32805,0.232 -0.49742,0.248 -0.3958,0.123 -0.35835,0.06 -0.54021,0.03 -0.36192,-0.02 -1.99147,-0.339 -0.1765,-0.153 -1.42452,-3.045 -0.65966,-4.154 1.07151,-0.06 2.98809,0.06 -0.007,0.708 2.90073,-0.339"
+ class="c47161"
+ id="Stewart, TN" />
+ <path
+ d="m 685.78266,336.15714 0.30666,4.323 -2.75632,3.359 -4.18618,0.08 -1.51187,-0.626 -1.43699,-6.162 5.56077,-0.579 4.02393,-0.394"
+ class="c47125"
+ id="Montgomery, TN" />
+ <path
+ d="m 692.17782,335.39414 3.66558,0 -0.47424,1.221 -1.01267,3.036 -0.40828,0.902 -1.06081,0.442 -2.85437,0.794 -3.94371,-1.309 -0.30666,-4.323 0.98771,-0.114 5.40745,-0.649"
+ class="c47147"
+ id="Robertson, TN" />
+ <path
+ d="m 686.08932,340.48014 3.94371,1.309 -1.83993,8.028 -2.36765,0.12 0.14263,-3.286 -0.25673,-0.861 -0.37084,-0.271 0.49921,-0.772 0.0321,-0.619 -0.0571,-0.13 -0.42433,-0.159 -0.95027,-0.121 -1.10716,0.121 2.75632,-3.359 z m -0.13728,3.783 -0.0892,0.113 0.23178,-0.104 -0.0535,-0.05 -0.0321,0.06 -0.0571,-0.02"
+ class="c47021"
+ id="Cheatham, TN" />
+ <path
+ d="m 679.14682,343.91814 4.18618,-0.08 1.10716,-0.121 0.95027,0.121 0.42433,0.159 0.0571,0.13 -0.0321,0.619 -0.49921,0.772 0.37084,0.271 0.25673,0.861 -0.14263,3.286 -0.21038,2.13 -6.14733,-0.233 -0.97166,-4.21 0.65074,-3.706"
+ class="c47043"
+ id="Dickson, TN" />
+ <path
+ d="m 685.82545,349.93714 2.36765,-0.12 0.36906,1.277 0.24247,-0.03 1.67055,-1.63 2.64578,0.136 3.24482,1.26 -0.65075,6.069 -1.75791,0.248 -8.31174,-2.553 -0.0303,-2.525 0.21038,-2.13"
+ class="c47187"
+ id="Williamson, TN" />
+ <path
+ d="m 685.64538,354.59214 8.31174,2.553 -2.67074,6.99 -4.58732,0.06 -1.65629,-0.114 0.2193,-0.346 0.0553,-0.273 0.0624,-0.834 -0.46355,-0.932 -0.50812,-0.41 -0.44928,-0.08 -0.27991,-0.25 -0.0642,-0.289 -0.0178,-0.474 0.17115,-0.977 1.87736,-4.621"
+ class="c47119"
+ id="Maury, TN" />
+ <path
+ d="m 693.95712,357.14514 1.75791,-0.248 0.9164,0.472 -0.0161,4.518 0.0571,0.82 0.18364,0.466 0.90213,1.51 0.27813,0.03 0.0642,-0.03 -4.0168,2.751 -2.79733,-3.306 2.67074,-6.99"
+ class="c47117"
+ id="Marshall, TN" />
+ <path
+ d="m 686.69906,364.19414 4.58732,-0.06 2.79733,3.306 0.45998,6.274 -6.99242,0.49 -0.23177,0.02 -0.10697,-2.655 -0.56161,-6.163 0.009,-0.594 0.0392,-0.617"
+ class="c47055"
+ id="Giles, TN" />
+ <path
+ d="m 699.50007,364.78814 4.37872,4.844 0.30844,3.134 -8.66653,0.854 -0.97701,0.09 -0.45998,-6.274 4.0168,-2.751 1.39956,0.1"
+ class="c47103"
+ id="Lincoln, TN" />
+ <path
+ d="m 704.32808,362.95314 0.11232,1.828 -0.56161,4.851 -4.37872,-4.844 4.82801,-1.835"
+ class="c47127"
+ id="Moore, TN" />
+ <path
+ d="m 704.03925,357.87714 0.28883,5.076 -4.82801,1.835 -1.39956,-0.1 -0.0642,0.03 -0.27813,-0.03 -0.90213,-1.51 -0.18364,-0.466 -0.0571,-0.82 0.0161,-4.518 0.0232,-0.376 0.26743,-0.05 1.46195,-0.03 4.58019,0.517 1.07507,0.442"
+ class="c47003"
+ id="Bedford, TN" />
+ <path
+ d="m 697.9668,347.58314 0.80229,0.539 2.94173,1.775 0.30488,0.12 1.22126,0.298 1.72582,-0.04 -0.39045,5.875 -0.53308,1.727 -1.07507,-0.442 -4.58019,-0.517 -1.46195,0.03 -0.26743,0.05 -0.0232,0.376 -0.9164,-0.472 0.65075,-6.069 1.60102,-3.245"
+ class="c47149"
+ id="Rutherford, TN" />
+ <path
+ d="m 690.03303,341.78914 2.85437,-0.794 3.30009,3.404 1.77931,3.184 -1.60102,3.245 -3.24482,-1.26 -2.64578,-0.136 -1.67055,1.63 -0.24247,0.03 -0.36906,-1.277 1.83993,-8.028"
+ class="c47037"
+ id="Davidson, TN" />
+ <path
+ d="m 698.59258,334.71814 3.79217,-0.135 -0.0713,3.549 -0.66679,3.334 -0.22642,0.838 -0.63292,-0.08 -0.25139,-0.237 -0.0463,-0.351 -0.0981,-0.152 -0.19968,-0.112 -0.0981,0 -1.50118,0.674 -1.87379,1.301 -0.5313,1.043 -3.30009,-3.404 1.06081,-0.442 0.40828,-0.902 1.01267,-3.036 0.47424,-1.221 2.74918,-0.676"
+ class="c47165"
+ id="Sumner, TN" />
+ <path
+ d="m 704.44931,342.37514 1.91302,4.686 1.13212,2.797 -2.53167,0.417 -1.72582,0.04 -1.22126,-0.298 -0.30488,-0.12 -2.94173,-1.775 -0.80229,-0.539 -1.77931,-3.184 0.5313,-1.043 1.87379,-1.301 1.50118,-0.674 0.0981,0 0.19968,0.112 0.0981,0.152 0.0463,0.351 0.25139,0.237 0.63292,0.08 0.22642,-0.838 2.80267,0.909"
+ class="c47189"
+ id="Wilson, TN" />
+ <path
+ d="m 707.49445,349.85814 2.67609,2.539 -1.39777,4.331 -4.20044,-0.578 0.39045,-5.875 2.53167,-0.417"
+ class="c47015"
+ id="Cannon, TN" />
+ <path
+ d="m 708.77277,356.72814 2.332,2.916 -0.0588,0.04 -0.0392,0.122 0.0642,1.711 0.21751,1.155 0.29596,0.266 -0.12837,0.745 -0.35122,1.241 -0.10519,0.209 -2.40866,-1.02 -2.27673,-0.21 -1.68837,0.593 -0.17651,0.186 -0.009,0.1 -0.11232,-1.828 -0.28883,-5.076 0.53308,-1.727 4.20044,0.578"
+ class="c47031"
+ id="Coffee, TN" />
+ <path
+ d="m 704.4404,364.78114 0.009,-0.1 0.17651,-0.186 1.68837,-0.593 2.27673,0.21 2.40866,1.02 0.91639,1.422 0.74702,5.392 -8.33491,0.811 -0.14085,0 -0.30844,-3.134 0.56161,-4.851"
+ class="c47051"
+ id="Franklin, TN" />
+ <path
+ d="m 711.91597,366.55614 5.59108,-2.838 0.21751,0.323 1.59032,0.642 0.47603,0.119 0.75594,0.756 0.27991,0.403 0.27991,1.164 0.016,0.193 -1.15708,3.938 -2.47462,0.257 -4.82802,0.435 -0.74702,-5.392"
+ class="c47115"
+ id="Marion, TN" />
+ <path
+ d="m 719.36302,357.73114 4.21114,4.493 -2.45145,5.094 -0.016,-0.193 -0.27991,-1.164 -0.27991,-0.403 -0.75594,-0.756 -0.47603,-0.119 -1.59032,-0.642 -0.21751,-0.323 -1.43699,-4.79 0.91461,-0.127 2.37835,-1.07"
+ class="c47153"
+ id="Sequatchie, TN" />
+ <path
+ d="m 716.07006,358.92814 1.43699,4.79 -5.59108,2.838 -0.91639,-1.422 0.10519,-0.209 0.35122,-1.241 0.12837,-0.745 -0.29596,-0.266 -0.21751,-1.155 -0.0642,-1.711 0.0392,-0.122 0.0588,-0.04 0.83438,0.122 0.29061,0 1.14817,-0.378 0.9253,-0.2 1.76683,-0.267"
+ class="c47061"
+ id="Grundy, TN" />
+ <path
+ d="m 721.62192,352.22814 -0.0392,0.121 0.40115,0.442 0,0.03 -2.62082,4.908 -2.37835,1.07 -1.50118,-5.939 6.13843,-0.634"
+ class="c47175"
+ id="Van Buren, TN" />
+ <path
+ d="m 713.9324,352.18814 1.55109,0.674 1.50118,5.939 -0.91461,0.127 -1.76683,0.267 -0.9253,0.2 -1.14817,0.378 -0.29061,0 -0.83438,-0.122 -2.332,-2.916 1.39777,-4.331 3.76186,-0.209"
+ class="c47177"
+ id="Warren, TN" />
+ <path
+ d="m 721.23503,347.92914 0.38689,4.299 -6.13843,0.634 -1.55109,-0.674 0.22464,-4.309 0.007,-0.135 0.0802,-0.17 0.32983,-0.344 0.98236,-0.866 0.26387,-0.13 0.68284,-0.168 2.56376,0.401 0.90748,0.344 0.2817,0.22 0.97879,0.898"
+ class="c47185"
+ id="White, TN" />
+ <path
+ d="m 710.87834,345.51914 3.2787,2.36 -0.22464,4.309 -3.76186,0.209 -2.67609,-2.539 -1.13212,-2.797 4.51601,-1.542"
+ class="c47041"
+ id="DeKalb, TN" />
+ <path
+ d="m 711.11903,343.02114 2.67609,0.191 1.15886,-0.353 0.56874,-0.275 0.12123,-0.175 0.52952,-0.909 0,-0.531 1.55109,1.367 4.163,1.48 1.56715,0 0.36905,0.102 -0.85934,1.005 -1.53505,0.03 -0.18364,0.136 -0.0107,2.836 -0.97879,-0.898 -0.2817,-0.22 -0.90748,-0.344 -2.56376,-0.401 -0.68284,0.168 -0.26387,0.13 -0.98236,0.866 -0.32983,0.344 -0.0802,0.17 -0.007,0.135 -3.2787,-2.36 0.24069,-2.498"
+ class="c47141"
+ id="Putnam, TN" />
+ <path
+ d="m 707.02199,339.07414 -2.57268,3.301 -2.80267,-0.909 0.66679,-3.334 4.70856,0.942"
+ class="c47169"
+ id="Trousdale, TN" />
+ <path
+ d="m 706.57093,334.40614 3.43915,-0.21 -0.16045,2.87 -0.0374,2.038 -2.7902,-0.03 -4.70856,-0.942 0.0713,-3.549 4.18618,-0.177"
+ class="c47111"
+ id="Macon, TN" />
+ <path
+ d="m 707.02199,339.07414 2.7902,0.03 1.30684,3.917 -0.24069,2.498 -4.51601,1.542 -1.91302,-4.686 2.57268,-3.301"
+ class="c47159"
+ id="Smith, TN" />
+ <path
+ d="m 709.84963,337.06614 0.8112,-0.508 2.35517,0.371 1.23731,0.303 0.93245,0.684 0.72384,0.724 0.26387,2.329 0,0.531 -0.52952,0.909 -0.12123,0.175 -0.56874,0.275 -1.15886,0.353 -2.67609,-0.191 -1.30684,-3.917 0.0374,-2.038"
+ class="c47087"
+ id="Jackson, TN" />
+ <path
+ d="m 719.41294,335.26514 3.33218,2.516 0.23534,2.36 0.31379,0.821 0.70601,1.592 -0.54555,1.262 -1.56715,0 -4.163,-1.48 -1.55109,-1.367 -0.26387,-2.329 3.50334,-3.375"
+ class="c47133"
+ id="Overton, TN" />
+ <path
+ d="m 719.3238,333.05614 0.0891,2.209 -3.50334,3.375 -0.72384,-0.724 -0.93245,-0.684 -1.23731,-0.303 -2.35517,-0.371 -0.8112,0.508 0.16045,-2.87 6.42012,-0.617 2.54059,-0.46 0.35301,-0.06"
+ class="c47027"
+ id="Clay, TN" />
+ <path
+ d="m 724.9648,332.70214 3.35892,-0.154 1.18918,1.698 -2.4978,-0.756 -0.78981,-0.122 -0.71315,0.03 -1.12678,0.353 -0.68997,0.683 -0.41719,0.685 -0.19433,0.449 -0.33875,2.211 -3.33218,-2.516 -0.0891,-2.209 5.641,-0.354"
+ class="c47137"
+ id="Pickett, TN" />
+ <path
+ d="m 721.98384,352.82314 2.21611,-0.346 0.86825,0.09 1.02159,0 0.71493,-0.04 1.40668,-0.339 -1.95224,3.408 -1.06972,1.374 -0.49742,1.92 0.27278,0.756 -1.39064,2.571 -4.21114,-4.493 2.62082,-4.908"
+ class="c47007"
+ id="Bledsoe, TN" />
+ <path
+ d="m 729.5129,334.24614 0.98949,3.471 -2.81159,2.152 -0.14797,0.19 -0.49742,1.858 0.26743,1.182 -3.48908,0.819 -0.36905,-0.102 0.54555,-1.262 -0.70601,-1.592 -0.31379,-0.821 -0.23534,-2.36 0.33875,-2.211 0.19433,-0.449 0.41719,-0.685 0.68997,-0.683 1.12678,-0.353 0.71315,-0.03 0.78981,0.122 2.4978,0.756"
+ class="c47049"
+ id="Fentress, TN" />
+ <path
+ d="m 723.82376,343.91814 3.48908,-0.819 4.82801,5.206 -1.63133,2.14 -2.29812,1.75 -1.40668,0.339 -0.71493,0.04 -1.02159,0 -0.86825,-0.09 -2.21611,0.346 0,-0.03 -0.40115,-0.442 0.0392,-0.121 -0.38689,-4.299 0.0107,-2.836 0.18364,-0.136 1.53505,-0.03 0.85934,-1.005"
+ class="c47035"
+ id="Cumberland, TN" />
+ <path
+ d="m 731.77893,351.98014 0.23177,0.36 0.0571,0.137 -0.0731,0.901 -0.99484,3.398 -1.9041,2.797 -0.12302,0.08 -1.65985,0.86 -2.34804,-0.86 -0.27278,-0.756 0.49742,-1.92 1.06972,-1.374 1.95224,-3.408 2.29812,-1.75 1.26941,1.535"
+ class="c47143"
+ id="Rhea, TN" />
+ <path
+ d="m 733.98968,354.23714 -3.63348,7.297 -1.42987,1.623 -1.61349,-2.644 1.65985,-0.86 0.12302,-0.08 1.9041,-2.797 0.99484,-3.398 0.0731,-0.901 -0.0571,-0.137 -0.23177,-0.36 2.21075,2.257"
+ class="c47121"
+ id="Meigs, TN" />
+ <path
+ d="m 727.31284,360.51314 1.61349,2.644 -0.75593,2.096 -0.11232,0.419 -0.16581,1.348 0.66323,1.817 0.6133,1.278 -0.0571,0 -5.2969,0.665 -1.83101,0.25 -2.01821,0.217 1.15708,-3.938 2.45145,-5.094 1.39064,-2.571 2.34804,0.86"
+ class="c47065"
+ id="Hamilton, TN" />
+ <path
+ d="m 730.3562,361.53414 3.19668,2.161 -0.65075,5.978 -0.64005,0.08 -3.09328,0.362 -0.6133,-1.278 -0.66323,-1.817 0.16581,-1.348 0.11232,-0.419 0.75593,-2.096 1.42987,-1.623"
+ class="c47011"
+ id="Bradley, TN" />
+ <path
+ d="m 737.28265,362.20614 3.98828,1.352 0.0695,5.079 -5.56791,0.685 -2.87042,0.351 0.65075,-5.978 0.50812,-0.442 0.87717,-0.346 2.01643,-0.209 0.32805,-0.492"
+ class="c47139"
+ id="Polk, TN" />
+ <path
+ d="m 742.03934,354.04114 0.15333,0.253 1.9362,1.1 0.90926,-0.169 1.93798,1.037 0.0214,0.02 -0.0214,0.09 -0.31557,0.506 -0.75415,4.122 -0.43502,0.594 -0.70424,0.579 -1.98077,0.05 -1.51543,1.334 -3.98828,-1.352 1.4459,-1.219 -0.16759,-1.567 -1.90232,-3.327 -0.77376,-1.229 -0.025,-0.249 -0.0784,-0.121 0.61865,-0.804 0.5313,-0.305 0.41541,-0.191 0.12837,-0.03 1.85775,-0.06 2.60477,0.763 0.10162,0.166 z"
+ class="c47123"
+ id="Monroe, TN" />
+ <path
+ d="m 734.64043,354.16614 1.14104,0.328 0.0784,0.121 0.025,0.249 0.77376,1.229 1.90232,3.327 0.16759,1.567 -1.4459,1.219 -0.32805,0.492 -2.01643,0.209 -0.87717,0.346 -0.50812,0.442 -3.19668,-2.161 3.63348,-7.297 0.65075,-0.07"
+ class="c47107"
+ id="McMinn, TN" />
+ <path
+ d="m 735.38567,353.46514 -0.74524,0.701 -0.65075,0.07 -2.21075,-2.257 -1.26941,-1.535 1.63133,-2.14 2.66895,-1.863 1.41917,-0.444 0.61152,-0.544 1.12499,-1.133 1.67947,3.03 0.19433,0.287 -0.34588,-0.103 -0.86825,0.344 -2.92391,4.582 -0.31557,1.004 z m 0,0 0,0"
+ class="c47145"
+ id="Roane, TN" />
+ <path
+ d="m 735.82961,341.91014 2.13587,2.411 -1.12499,1.133 -0.61152,0.544 -1.41917,0.444 -2.66895,1.863 -4.82801,-5.206 -0.26743,-1.182 0.49742,-1.858 0.14797,-0.19 2.81159,-2.152 1.92015,2.112 0.85934,0.644 1.87915,0.704 0.66858,0.733"
+ class="c47129"
+ id="Morgan, TN" />
+ <path
+ d="m 728.45922,332.54114 9.43495,-0.884 -0.11232,2.016 -0.77377,5.529 -0.0767,1.335 -1.10181,1.373 -0.66858,-0.733 -1.87915,-0.704 -0.85934,-0.644 -1.92015,-2.112 -0.98949,-3.471 -1.18918,-1.698 0.1355,0"
+ class="c47151"
+ id="Scott, TN" />
+ <path
+ d="m 742.87729,331.08614 1.99147,3.703 -0.44216,0.66 -0.44928,2.3 -0.20146,0.392 -0.27278,0.323 -6.57166,2.073 0.0767,-1.335 0.77377,-5.529 0.11232,-2.016 0.62757,-0.07 4.35555,-0.5"
+ class="c47013"
+ id="Campbell, TN" />
+ <path
+ d="m 743.50308,338.46414 1.38885,1.783 -0.0481,0 -0.32092,0.297 -1.95224,2.589 0.025,0.296 0.40827,0.715 -3.03622,2.997 -0.3227,0.21 -1.67947,-3.03 -2.13587,-2.411 1.10181,-1.373 6.57166,-2.073"
+ class="c47001"
+ id="Anderson, TN" />
+ <path
+ d="m 739.83928,347.63814 2.04852,1.881 0.15154,4.522 -0.10162,-0.166 -2.60477,-0.763 -1.85775,0.06 -0.12837,0.03 -0.41541,0.191 -0.5313,0.305 -0.61865,0.804 -1.14104,-0.328 0.74524,-0.701 0.31557,-1.004 2.92391,-4.582 0.86825,-0.344 0.34588,0.103"
+ class="c47105"
+ id="Loudon, TN" />
+ <path
+ d="m 748.47729,346.77214 1.56714,2.71 0.78624,1.18 0.64184,0.305 0.36192,2.787 -5.02056,3.18 -0.15333,-0.05 0.31557,-0.506 0.0214,-0.09 -0.0214,-0.02 -1.93798,-1.037 -0.90926,0.169 -1.9362,-1.1 -0.15333,-0.253 -0.15154,-4.522 0.28169,-0.909 2.58695,-1.291 0.97879,0.07 1.15887,0.579 0.26564,0 1.31755,-1.198"
+ class="c47009"
+ id="Blount, TN" />
+ <path
+ d="m 757.31675,345.40514 1.5725,4.009 0.0802,0.437 -0.66679,0.977 -3.18955,2.525 -0.22643,0.146 -2.62616,0.271 -0.33697,0 -0.0891,0 -0.36192,-2.787 -0.64184,-0.305 -0.78624,-1.18 -1.56714,-2.71 1.76682,-3.76 1.27119,0.36 3.75115,1.496 2.0503,0.537"
+ class="c47155"
+ id="Sevier, TN" />
+ <path
+ d="m 748.78394,340.25414 1.43699,1.768 0.0232,0.99 -1.76682,3.76 -1.31755,1.198 -0.26564,0 -1.15887,-0.579 -0.97879,-0.07 -2.58695,1.291 -0.28169,0.909 -2.04852,-1.881 -0.19433,-0.287 0.3227,-0.21 3.03622,-2.997 -0.40827,-0.715 -0.025,-0.296 1.95224,-2.589 0.32092,-0.297 0.0481,0 3.89201,0"
+ class="c47093"
+ id="Knox, TN" />
+ <path
+ d="m 744.86876,334.78914 0.51346,-0.231 1.26228,-0.362 0.10518,0.06 1.2284,1.326 1.45482,0.383 -0.64896,4.292 -3.89201,0 -1.38885,-1.783 0.27278,-0.323 0.20146,-0.392 0.44928,-2.3 0.44216,-0.66"
+ class="c47173"
+ id="Union, TN" />
+ <path
+ d="m 748.51829,330.09914 3.70302,-0.41 2.1234,4.025 -4.91181,2.248 -1.45482,-0.383 -1.2284,-1.326 -0.10518,-0.06 -1.26228,0.362 -0.51346,0.231 -1.99147,-3.703 1.03585,-0.103 4.60515,-0.884"
+ class="c47025"
+ id="Claiborne, TN" />
+ <path
+ d="m 763.88841,328.18614 -2.01642,1.469 -0.47425,-0.06 -0.60974,-0.281 -0.0802,0.02 -0.66679,0.472 -0.8843,0.719 -0.83617,0.995 -1.99325,2.355 -1.98255,-0.161 -2.1234,-4.025 8.86265,-1.118 2.80445,-0.385"
+ class="c47067"
+ id="Hancock, TN" />
+ <path
+ d="m 754.34471,333.71414 1.98255,0.161 0.78803,2.362 -3.50869,3.15 -3.38567,2.635 -1.43699,-1.768 0.64896,-4.292 4.91181,-2.248"
+ class="c47057"
+ id="Grainger, TN" />
+ <path
+ d="m 760.41895,336.88814 -1.33537,1.613 -0.95562,2.371 -4.52136,-1.485 3.50869,-3.15 3.30366,0.651"
+ class="c47063"
+ id="Hamblen, TN" />
+ <path
+ d="m 758.12796,340.87214 -0.81121,4.533 -2.0503,-0.537 -3.75115,-1.496 -1.27119,-0.36 -0.0232,-0.99 3.38567,-2.635 4.52136,1.485"
+ class="c47089"
+ id="Jefferson, TN" />
+ <path
+ d="m 759.08358,338.50114 -0.0481,0.548 0.13015,0.146 0.72028,0.531 1.59923,0.858 2.04139,1.592 1.18739,1.069 -0.71136,3.625 -5.11327,2.544 -1.5725,-4.009 0.81121,-4.533 0.95562,-2.371"
+ class="c47029"
+ id="Cocke, TN" />
+ <path
+ d="m 773.91706,334.74314 2.4764,1.881 -3.2787,2.442 -1.30862,2.395 -1.97899,-1.15 -0.0392,-1.318 1.05189,-1.383 0.71493,-0.257 0.42611,-0.05 0.79516,-0.514 0.57765,-0.859 0.56339,-1.189"
+ class="c47171"
+ id="Unicoi, TN" />
+ <path
+ d="m 767.907,327.61514 -0.77198,3.905 -0.32983,0.547 -1.92015,1.333 -0.88252,0.259 -0.33875,0.184 -0.93066,0.593 -0.41184,0.476 -0.34409,0.617 -0.42611,0.492 -0.77911,0.697 -0.20147,0.154 -0.15154,0.02 -3.30366,-0.651 -0.78803,-2.362 1.99325,-2.355 0.83617,-0.995 0.8843,-0.719 0.66679,-0.472 0.0802,-0.02 0.60974,0.281 0.47425,0.06 2.01642,-1.469 4.01859,-0.571"
+ class="c47073"
+ id="Hawkins, TN" />
+ <path
+ d="m 766.80519,332.06714 1.26405,-0.369 0.0535,0.16 0.41897,4.885 0.19255,1.27 1.05368,0.98 0.0392,1.318 -0.35122,-0.337 0,0 -0.27635,-0.175 -0.0874,0.01 -0.46711,0.337 -0.3227,0.233 -1.1553,1.141 -1.62241,1.519 -0.83082,0.21 -1.18739,-1.069 -2.04139,-1.592 -1.59923,-0.858 -0.72028,-0.531 -0.13015,-0.146 0.0481,-0.548 1.33537,-1.613 0.15154,-0.02 0.20147,-0.154 0.77911,-0.697 0.42611,-0.492 0.34409,-0.617 0.41184,-0.476 0.93066,-0.593 0.33875,-0.184 0.88252,-0.259 1.92015,-1.333"
+ class="c47059"
+ id="Greene, TN" />
+ <path
+ d="m 767.13502,331.52014 1.01267,-0.159 2.25711,-0.444 1.09468,-0.346 0.63292,0.128 0.90927,0.662 0.28882,0.08 0.8433,-0.11 -0.25673,3.407 -0.56339,1.189 -0.57765,0.859 -0.79516,0.514 -0.42611,0.05 -0.71493,0.257 -1.05189,1.383 -1.05368,-0.98 -0.19255,-1.27 -0.41897,-4.885 -0.0535,-0.16 -1.26405,0.369 0.32983,-0.547"
+ class="c47179"
+ id="Washington, TN" />
+ <path
+ d="m 779.54201,327.93814 0.7078,0.706 0,0.07 -1.42273,2.403 0.27991,0.553 1.25336,1.305 0.61152,0.523 0.3227,-0.123 -2.16084,4.041 -2.74027,-0.793 -2.4764,-1.881 0.25673,-3.407 5.36822,-3.398"
+ class="c47019"
+ id="Carter, TN" />
+ <path
+ d="m 552.10486,413.05014 0.15154,0.394 0.1462,0.335 0.12658,0.17 0.7809,0.499 0.27991,0.184 1.02872,0.561 1.84883,-0.938 0.0963,-0.09 0.27991,-0.03 1.06972,-0.155 1.84884,0.371 0.353,0.144 0.4582,0.378 0.13728,6.493 -0.16224,-0.362 -0.40114,-0.206 -1.7276,-0.277 -0.47425,0.107 -0.60083,0.209 -0.30665,0.545 0.0553,0.482 0.066,0.208 -0.041,0.07 -7.20814,-0.04 -0.64362,-0.126 -0.16046,-0.129 -0.0481,-0.221 -1.83101,-1.363 -0.0963,-8.638 4.97421,1.431"
+ class="c48037"
+ id="Bowie, TX" />
+ <path
+ d="m 539.27889,406.13814 2.22681,1.904 3.26265,2.612 2.3623,0.965 0.0963,8.638 -1.19987,-0.788 -6.0582,-0.528 -3.4552,0.289 -0.0392,-0.06 -0.11945,-11.337 0.28169,-0.03 0.14976,-0.02 0.50634,-0.329 0.10697,-0.104 0.10341,-0.233 0.0321,-0.232 -0.0321,-0.2 0,-0.03 -0.0731,-0.153 -0.007,-0.02 0.007,-0.02 0,-0.04 0.009,-0.03 0.40828,-0.619 0.0107,0 0.016,0 0.0642,-0.03 0.13549,0 1.20522,0.403"
+ class="c48387"
+ id="Red River, TX" />
+ <path
+ d="m 417.59624,405.73514 9.91632,0.485 -0.49029,10.066 -9.89136,-0.497 0.46533,-10.054"
+ class="c48107"
+ id="Crosby, TX" />
+ <path
+ d="m 407.67992,405.26314 9.91632,0.472 -0.46533,10.054 -9.90741,-0.483 0.45642,-10.043"
+ class="c48303"
+ id="Lubbock, TX" />
+ <path
+ d="m 397.63523,404.58014 10.04469,0.683 -0.45642,10.043 -9.89136,-0.633 0.30309,-10.093"
+ class="c48219"
+ id="Hockley, TX" />
+ <path
+ d="m 389.44829,404.00214 8.18694,0.578 -0.30309,10.093 -8.80738,-0.635 0.39402,-4.195 0.52951,-5.841"
+ class="c48079"
+ id="Cochran, TX" />
+ <path
+ d="m 419.9835,394.72014 8.10671,0.443 -0.57765,11.057 -9.91632,-0.485 0.62757,-11.12 1.75969,0.105"
+ class="c48153"
+ id="Floyd, TX" />
+ <path
+ d="m 408.3164,393.98814 1.74365,0.112 8.16376,0.515 -0.62757,11.12 -9.91632,-0.472 0.63648,-11.275"
+ class="c48189"
+ id="Hale, TX" />
+ <path
+ d="m 398.43217,393.32814 1.68659,0.123 8.19764,0.537 -0.63648,11.275 -10.04469,-0.683 0.79694,-11.252"
+ class="c48279"
+ id="Lamb, TX" />
+ <path
+ d="m 398.43217,393.32814 -0.79694,11.252 -8.18694,-0.578 0.8843,-11.009 0.0161,-0.241 8.08353,0.576"
+ class="c48017"
+ id="Bailey, TX" />
+ <path
+ d="m 420.56115,384.67614 7.14396,0.376 2.73314,0.146 -0.54734,10.052 -1.8007,-0.09 -8.10671,-0.443 0.57765,-10.044"
+ class="c48045"
+ id="Briscoe, TX" />
+ <path
+ d="m 410.68583,384.05514 6.91932,0.443 2.956,0.178 -0.57765,10.044 -1.75969,-0.105 -8.16376,-0.515 0.62578,-10.045"
+ class="c48437"
+ id="Swisher, TX" />
+ <path
+ d="m 407.48915,383.87214 3.19668,0.183 -0.62578,10.045 -1.74365,-0.112 -8.19764,-0.537 0.69176,-10.014 6.67863,0.435"
+ class="c48069"
+ id="Castro, TX" />
+ <path
+ d="m 391.12062,382.73114 9.6899,0.706 -0.69176,10.014 -1.68659,-0.123 -8.08353,-0.576 0.77198,-10.021"
+ class="c48369"
+ id="Parmer, TX" />
+ <path
+ d="m 418.32008,374.44714 10.00369,0.587 -0.61866,10.018 -7.14396,-0.376 -2.956,-0.178 0.71493,-10.051"
+ class="c48011"
+ id="Armstrong, TX" />
+ <path
+ d="m 408.17199,373.81114 10.14809,0.636 -0.71493,10.051 -6.91932,-0.443 -3.19668,-0.183 0.68284,-10.061"
+ class="c48381"
+ id="Randall, TX" />
+ <path
+ d="m 391.12062,382.73114 0.35301,-4.766 0.40114,-5.286 3.81,0.266 3.95975,0.199 8.52747,0.667 -0.68284,10.061 -6.67863,-0.435 -9.6899,-0.706"
+ class="c48117"
+ id="Deaf Smith, TX" />
+ <path
+ d="m 418.92269,364.34614 0,-0.09 9.95555,0.53 -0.009,0.144 -0.54556,10.102 -10.00369,-0.587 0.60261,-10.101"
+ class="c48065"
+ id="Carson, TX" />
+ <path
+ d="m 408.9101,363.72714 10.01259,0.619 -0.60261,10.101 -10.14809,-0.636 0.73811,-10.084"
+ class="c48375"
+ id="Potter, TX" />
+ <path
+ d="m 408.92614,363.55814 -0.016,0.169 -0.73811,10.084 -8.52747,-0.667 -3.95975,-0.199 -3.81,-0.266 0.76307,-10.139 16.2883,1.018"
+ class="c48359"
+ id="Oldham, TX" />
+ <path
+ d="m 419.50034,354.28514 9.91633,0.562 -0.53843,9.941 -9.95555,-0.53 0.57765,-9.973"
+ class="c48233"
+ id="Hutchinson, TX" />
+ <path
+ d="m 409.56084,353.67314 9.9395,0.612 -0.57765,9.973 0,0.09 -10.01259,-0.619 0.016,-0.169 0.6347,-9.885"
+ class="c48341"
+ id="Moore, TX" />
+ <path
+ d="m 393.39378,352.54814 16.16706,1.125 -0.6347,9.885 -16.2883,-1.018 0.2086,-2.694 0.54734,-7.298"
+ class="c48205"
+ id="Hartley, TX" />
+ <path
+ d="m 429.97114,344.57914 -0.55447,10.212 0,0.06 -9.91633,-0.562 0.60261,-10.269 9.86819,0.563"
+ class="c48195"
+ id="Hansford, TX" />
+ <path
+ d="m 412.62381,343.54314 7.47914,0.473 -0.60261,10.269 -9.9395,-0.612 0.67571,-10.285 2.38726,0.155"
+ class="c48421"
+ id="Sherman, TX" />
+ <path
+ d="m 410.23655,343.38814 -0.67571,10.285 -16.16706,-1.125 0.43502,-6.074 0.27991,-3.705 0.75594,-0.449 15.3719,1.068"
+ class="c48111"
+ id="Dallam, TX" />
+ <path
+ d="m 350.07361,442.92614 -0.29596,3.237 -0.49207,6.253 -1.30863,15.17 -0.19255,1.357 -0.18542,0.669 -0.3851,3.943 -1.31041,0.678 -0.12123,0.103 -1.02694,-1.478 -1.52791,-1.681 -1.49405,-1.284 -0.76307,-0.07 -0.29774,-0.103 -2.41044,-1.542 -2.87755,-3.304 -3.3821,-4.404 -2.60478,-3.399 -1.69372,-2.176 0.93066,-0.754 0.041,-1.273 -0.57052,-0.834 1.08399,-11.243 20.88454,2.131"
+ class="c48229"
+ id="Hudspeth, TX" />
+ <path
+ d="m 329.18907,440.79514 -1.08399,11.243 0.57052,0.834 -0.041,1.273 -0.93066,0.754 -1.91302,-0.852 -0.62757,-0.315 -1.01267,-0.828 -0.25674,-0.208 -0.007,-0.02 -0.0731,-0.08 -0.025,-0.03 -0.15867,-0.257 -0.52416,-1.632 -1.61528,-3.761 -0.38332,-0.73 -0.66858,-0.542 -2.06456,-0.961 -1.51009,-1.615 -0.18542,-0.249 -0.0321,-0.106 0.44928,-1.984 0.0481,-0.168 0.41897,-0.987 0,0 0.007,0 0.0642,0 4.22718,0.447 7.3276,0.772"
+ class="c48141"
+ id="El Paso, TX" />
+ <path
+ d="m 417.13091,415.78914 -0.59548,9.996 -2.56198,-0.167 -7.38465,-0.412 0.6347,-9.9 9.90741,0.483"
+ class="c48305"
+ id="Lynn, TX" />
+ <path
+ d="m 397.33214,414.67314 9.89136,0.633 -0.6347,9.9 -2.53881,-0.145 -7.4096,-0.497 0.69175,-9.891"
+ class="c48445"
+ id="Terry, TX" />
+ <path
+ d="m 397.33214,414.67314 -0.69175,9.891 -8.99993,-0.658 0.8843,-9.868 8.80738,0.635"
+ class="c48501"
+ id="Yoakum, TX" />
+ <path
+ d="m 406.5888,425.20614 7.38465,0.412 -0.55448,10.051 -9.9181,-0.57 0.54912,-10.038 2.53881,0.145"
+ class="c48115"
+ id="Dawson, TX" />
+ <path
+ d="m 387.64046,423.90614 8.99993,0.658 7.4096,0.497 -0.54912,10.038 -0.15868,0 -16.44875,-1.134 0.74702,-10.05"
+ class="c48165"
+ id="Gaines, TX" />
+ <path
+ d="m 403.34219,435.09014 0.15868,0 9.9181,0.571 -0.72384,10.069 -1.57606,-0.08 -8.43654,-0.533 0.65966,-10.036"
+ class="c48317"
+ id="Martin, TX" />
+ <path
+ d="m 386.89344,433.95614 16.44875,1.134 -0.65966,10.036 -1.46195,-0.1 -9.93237,-0.659 -5.13467,-0.408 0.7399,-10.006"
+ class="c48003"
+ id="Andrews, TX" />
+ <path
+ d="m 401.22058,445.03014 1.46195,0.1 8.43654,0.533 -0.60083,10.011 -9.97337,-0.633 0.67571,-10.007"
+ class="c48329"
+ id="Midland, TX" />
+ <path
+ d="m 401.22058,445.03014 -0.67571,10.007 -0.60261,-0.03 -8.75033,-0.621 -0.61865,-0.04 0.71493,-9.975 9.93237,0.66"
+ class="c48135"
+ id="Ector, TX" />
+ <path
+ d="m 391.19193,454.38214 8.75033,0.621 -0.52951,12.992 -1.72047,-0.136 -0.61866,-2.41 -0.1765,-0.444 -0.0553,-0.1 -0.25138,-0.24 -0.94671,-0.821 -0.25673,-0.201 -2.41044,-1.382 -0.2496,0 -2.12162,0.328 0.58656,-8.22"
+ class="c48103"
+ id="Crane, TX" />
+ <path
+ d="m 368.73312,481.24714 -0.16046,2.498 -0.56338,6.935 -0.8433,11.508 -0.43502,5.352 -3.35001,-1.094 -1.0929,-0.419 -0.12124,-0.05 -0.0802,-0.07 -0.71493,-0.57 -1.43877,-1.139 -6.91041,-6.551 -0.3851,-0.859 -2.22502,-5.591 -0.082,-0.235 -0.0642,-2.265 0.30665,-1.663 0.15154,-1.993 -0.30487,-1.325 -3.59248,-8.72 -1.04476,-0.667 0.12123,-0.103 20.84532,6.851 1.98433,0.163"
+ class="c48377"
+ id="Presidio, TX" />
+ <path
+ d="m 351.44107,443.05414 15.94955,1.43 -3.26265,20.394 -16.91409,8.677 0.3851,-3.943 0.18542,-0.669 0.19255,-1.357 1.30863,-15.17 0.49207,-6.253 0.29596,-3.237 1.36746,0.128"
+ class="c48109"
+ id="Culberson, TX" />
+ <path
+ d="m 390.57328,454.34514 0.61865,0.04 -0.58656,8.221 -1.39777,0.09 -0.83617,-0.836 -0.55447,-0.492 -0.61865,-0.371 -1.23018,-0.513 -1.14995,0.06 -0.72207,-0.02 -0.46533,-0.05 -0.99662,-0.224 -5.38427,-1.783 -0.24782,-0.259 -0.22642,-0.403 -0.19255,-1.155 0.0481,-1.376 0.11232,-0.788 -0.11946,-0.487 -0.32269,-0.517 -1.53506,-0.342 5.51442,0.44 10.29251,0.765"
+ class="c48475"
+ id="Ward, TX" />
+ <path
+ d="m 386.15354,443.96214 5.13467,0.408 -0.71493,9.975 -10.29251,-0.765 0.64183,-8.012 1.14104,0.09 1.00376,0.07 1.36746,0.106 1.09111,0.09 0.47603,0.03 0.15154,-1.993"
+ class="c48495"
+ id="Winkler, TX" />
+ <path
+ d="m 368.24996,444.55714 4.98134,0.408 7.6913,0.603 -0.64183,8.012 -5.51442,-0.44 -0.41719,-0.917 -0.96453,-1.399 -0.19255,-0.04 -0.3851,0.08 -0.0161,0.05 -0.0481,0.04 -0.17829,0 -0.42432,-0.1 -0.15333,-0.202 -2.59408,-3.729 -1.14282,-2.377"
+ class="c48301"
+ id="Loving, TX" />
+ <path
+ d="m 367.39062,444.48414 0.85934,0.07 1.14282,2.377 2.59408,3.729 0.15333,0.202 0.42432,0.1 0.17829,0 0.0481,-0.04 0.0161,-0.05 0.3851,-0.08 0.19255,0.04 0.96453,1.399 0.41719,0.917 1.53506,0.342 0.32269,0.517 0.11946,0.487 -0.11232,0.788 -0.0481,1.376 0.19255,1.155 0.22642,0.403 0.24782,0.259 5.38427,1.783 0.99662,0.224 0.46533,0.05 0.72207,0.02 1.14995,-0.06 -12.32498,13.002 -9.51518,-8.606 3.26265,-20.394"
+ class="c48389"
+ id="Reeves, TX" />
+ <path
+ d="m 373.64315,473.48414 2.6743,2.532 -7.58433,5.231 -1.98433,-0.163 -20.84532,-6.851 1.31041,-0.678 16.91409,-8.677 9.51518,8.606"
+ class="c48243"
+ id="Jeff Davis, TX" />
+ <path
+ d="m 376.31745,476.01614 16.24016,15.324 4.72639,4.394 -1.02871,0.66 -2.52455,1.143 -3.6317,0.873 -0.46533,0.282 -0.0481,0.03 -2.70105,4.404 -1.62241,3.76 -5.43241,8.059 -0.85221,0.226 -0.14441,0 -2.34626,-0.587 -1.9772,-0.939 -6.36484,-4.179 -0.18364,-0.193 -0.80407,-0.827 -0.42611,-0.907 0.43502,-5.353 0.8433,-11.508 0.56338,-6.935 0.16046,-2.498 7.58433,-5.231"
+ class="c48043"
+ id="Brewster, TX" />
+ <path
+ d="m 408.95823,486.98614 -0.76306,11.706 -0.35301,-0.105 -0.1462,-0.05 -1.92015,-0.443 -1.21235,-0.192 -1.92907,0.135 -0.19255,0.104 -1.31041,-0.255 -3.84743,-2.156 -4.72639,-4.394 0.37084,-5.288 4.43578,0.281 0.48138,-7.21 2.72422,-0.247 1.41382,-0.796 7.27945,0.514 0.28883,-0.03 1.08577,0.224 0.78803,0.635 0.12836,1.453 -0.0321,0.201 -2.09844,5.055 -0.46533,0.854"
+ class="c48443"
+ id="Terrell, TX" />
+ <path
+ d="m 390.60537,462.60314 2.12162,-0.328 0.2496,0 2.41044,1.382 0.25673,0.201 0.94671,0.821 0.25138,0.24 0.0553,0.1 0.1765,0.444 0.61866,2.41 2.67609,1.214 3.87239,1.205 1.25514,0.393 1.99325,1.665 1.67055,5.666 0.1034,0.592 -7.27945,-0.514 -1.41382,0.795 -2.72422,0.248 -0.48138,7.21 -4.43578,-0.282 -0.37084,5.288 -16.24016,-15.323 -2.6743,-2.532 12.32498,-13.002 1.23018,0.513 0.61865,0.371 0.55447,0.492 0.83617,0.836 1.39777,-0.09"
+ class="c48371"
+ id="Pecos, TX" />
+ <path
+ d="m 399.94226,455.00314 0.60261,0.03 9.97337,0.633 -0.81298,13.129 -10.29251,-0.804 0.52951,-12.992"
+ class="c48461"
+ id="Upton, TX" />
+ <path
+ d="m 410.51824,455.67014 9.91454,0.593 -0.12836,2.17 -0.0392,0.635 -0.70779,10.319 -9.85214,-0.588 0.81298,-13.129"
+ class="c48383"
+ id="Reagan, TX" />
+ <path
+ d="m 412.69513,445.73914 8.34918,0.489 -0.61153,10.035 -9.91454,-0.593 0.60083,-10.011 1.57606,0.08"
+ class="c48173"
+ id="Glasscock, TX" />
+ <path
+ d="m 423.33351,436.26514 -0.73097,10.05 -1.55823,-0.09 -8.34918,-0.489 0.72384,-10.07 9.91454,0.596"
+ class="c48227"
+ id="Howard, TX" />
+ <path
+ d="m 416.53543,425.78514 7.37752,0.362 -0.57052,10.036 -0.009,0.08 -9.91454,-0.596 0.55448,-10.051 2.56198,0.167"
+ class="c48033"
+ id="Borden, TX" />
+ <path
+ d="m 427.02227,416.28614 -0.52238,9.845 -2.58694,0.02 -7.37752,-0.362 0.59548,-9.996 9.89136,0.497"
+ class="c48169"
+ id="Garza, TX" />
+ <path
+ d="m 426.49989,426.13114 7.33651,0.531 -0.58656,10.093 -9.90741,-0.572 0.57052,-10.036 2.58694,-0.02"
+ class="c48415"
+ id="Scurry, TX" />
+ <path
+ d="m 423.34243,436.18314 9.90741,0.572 -0.58657,10.123 -3.02909,-0.185 -7.03164,-0.378 0.73097,-10.05 0.009,-0.08"
+ class="c48335"
+ id="Mitchell, TX" />
+ <path
+ d="m 421.04431,446.22814 1.55823,0.09 7.03164,0.378 -0.5313,8.984 -0.68106,-0.248 -0.25138,3.286 -7.86602,-0.282 0.12836,-2.17 0.61153,-10.035"
+ class="c48431"
+ id="Sterling, TX" />
+ <path
+ d="m 420.26519,459.06814 5.40745,0.314 5.8175,0.386 -0.41719,10.052 -5.37713,-0.176 -6.13842,-0.257 0.70779,-10.319"
+ class="c48235"
+ id="Irion, TX" />
+ <path
+ d="m 397.69228,467.85914 1.72047,0.136 10.29251,0.804 9.85214,0.588 6.13842,0.257 -0.41719,8.647 -0.49743,9.593 -15.82297,-0.898 0.46533,-0.854 2.09844,-5.055 0.0321,-0.201 -0.12836,-1.453 -0.78803,-0.635 -1.08577,-0.224 -0.28883,0.03 -0.1034,-0.592 -1.67055,-5.666 -1.99325,-1.665 -1.25514,-0.392 -3.87239,-1.206 -2.67609,-1.214"
+ class="c48105"
+ id="Crockett, TX" />
+ <path
+ d="m 408.95823,486.98614 15.82297,0.898 5.15785,0.248 -0.74703,15.229 -0.20146,4.21 -0.22464,1.72 -0.11232,0.555 -0.80229,1.895 -0.25852,0.378 -0.0802,0.02 -0.61865,-0.112 -4.71035,-4.22 -3.94371,-4.893 -0.0481,-0.13 -2.90073,-3.23 -0.99663,-0.344 -0.0891,0 -2.86864,-0.184 -0.45641,-0.02 -2.685,-0.298 0.76306,-11.706"
+ class="c48465"
+ id="Val Verde, TX" />
+ <path
+ d="m 452.15717,558.33114 1.75969,-1.18 0.72385,1.076 7.79471,0.346 -0.32983,11.008 -4.66934,4.758 -0.30487,-1.223 -0.36905,-1.494 0,-0.02 -0.61866,-2.275 -0.49742,-1.262 -1.05368,-1.487 -1.15708,-0.674 -1.32646,-2.066 -0.0802,-0.908 0.025,-0.09 0.0963,-0.08 0.36192,-0.532 0.14442,-1.863 -0.25674,-1.688 -0.20859,-0.332 -0.0178,0 -0.0161,0"
+ class="c48505"
+ id="Zapata, TX" />
+ <path
+ d="m 465.71412,556.74114 5.05443,0.02 0.60974,0.376 -0.0713,1.786 0.60974,0.699 1.44769,4.129 -0.25852,6.191 -11.0003,-0.364 0.32983,-11.008 3.2787,-1.832"
+ class="c48247"
+ id="Jim Hogg, TX" />
+ <path
+ d="m 462.10559,569.58114 11.0003,0.364 2.10557,0.06 -1.66163,3.542 -1.9469,3.76 -2.2161,4.5 -0.97345,0.138 -1.49404,-0.66 -7.02273,-3.158 -1.18204,-0.763 -1.20522,-2.751 -0.041,-0.158 -0.0321,-0.12 4.66934,-4.758"
+ class="c48427"
+ id="Starr, TX" />
+ <path
+ class="c48489"
+ d="m 495.90345,574.55714 0.6347,0.02 1.27654,4.306 -0.35301,0 -1.55823,-4.322 m -13.25207,-0.483 10.69544,0.433 1.16599,4.329 -0.8112,1.007 -2.24285,1.494 -6.9425,-1.23 0.0321,-1.687 -0.95562,-0.306 -1.98433,-0.352 0.1765,-0.98 0.27278,-1.013 0.5937,-1.695"
+ id="Willacy, TX" />
+ <path
+ d="m 475.21146,570.00914 6.9425,0.199 0.49742,3.866 -0.5937,1.695 -0.27278,1.013 -0.1765,0.98 1.98433,0.352 0.95562,0.306 -0.0321,1.687 -0.12837,6.518 -0.14441,-0.03 -0.41006,-0.06 -1.87201,0.02 -0.62579,0.01 -0.0802,0.103 -0.68462,0.273 -2.57981,-0.497 -1.51722,-0.298 -0.47425,-0.257 -0.29774,-0.2 -2.20897,-1.504 -1.05368,-1.259 -0.5616,-0.267 -0.0481,-0.02 -2.42827,-0.827 -0.0143,0 2.2161,-4.5 1.9469,-3.76 1.66163,-3.542"
+ class="c48215"
+ id="Hidalgo, TX" />
+ <path
+ d="m 471.30698,558.92614 5.99401,0.209 3.58357,0.114 1.46195,1.212 -0.19255,9.747 -6.9425,-0.199 -2.10557,-0.06 0.25852,-6.19 -1.44769,-4.129 -0.60974,-0.699"
+ class="c48047"
+ id="Brooks, TX" />
+ <path
+ class="c48261"
+ d="m 494.99419,559.12114 0.53129,0 -0.0642,0.219 -0.29061,1.318 -0.16759,1.117 -0.14441,1.364 -0.0642,1.206 0,1.262 0.12836,1.897 0.0963,0.779 0.016,0.08 0.24961,1.448 0.36192,1.638 0.6347,2.313 0.0321,0.09 0.0321,0.09 0.19255,0.629 -0.6347,-0.02 -1.35855,-5.033 0,-2.85 0.0161,-2.422 0.009,-0.955 0.0321,-1.421 0.0874,-1.093 0.0981,-0.555 0.20682,-1.107 m -12.64768,1.341 7.20101,-1.448 -0.0481,0.179 0.007,0.401 0.082,0.144 0.12658,0.1 1.76861,0.337 0.46533,-0.04 0.21751,-0.09 0.13728,-0.1 0.0642,-0.104 0.312,-0.144 0.71493,-0.259 0.54734,-0.02 0.0339,0.144 -0.49207,3.213 -0.87539,2.628 -0.60261,4.475 0.77911,1.029 0.50634,2.86 0.0553,0.739 -10.69544,-0.433 -0.49742,-3.865 0.19255,-9.747"
+ id="Kenedy, TX" />
+ <path
+ class="c48273"
+ d="m 494.99419,559.12114 2.66895,-6.889 0.5313,0.13 -2.66896,6.764 -0.53129,0 m -11.54587,-8.367 1.34963,0.875 0.71494,0.926 0.1765,0 10.38165,0.121 -1.03585,3.623 -0.61865,1.487 -0.0642,0.13 -0.16937,0.192 -0.14441,0.09 -1.83101,0.938 -2.66004,-0.128 -7.20101,1.448 -1.46195,-1.213 0.15332,-8.543 2.41044,0.05"
+ id="Kleberg, TX" />
+ <path
+ d="m 477.66291,540.99114 7.18318,0.176 1.70443,1.43 -2.82942,2.468 -0.0321,2.474 -0.24069,3.215 -2.41044,-0.05 -0.15332,8.543 -3.58357,-0.114 0.36192,-18.144"
+ class="c48249"
+ id="Jim Wells, TX" />
+ <path
+ class="c48355"
+ d="m 501.87428,546.45514 -3.67984,5.907 -0.5313,-0.13 4.10595,-6.067 0.10519,0.29 m -18.42596,4.299 0.24069,-3.215 0.0321,-2.474 2.82942,-2.468 -0.22465,0.54 0.20682,0.835 2.70105,1.408 0.52951,0.248 1.05367,0.232 1.46196,0.121 0.1765,-0.596 3.28761,-0.07 1.41382,0.07 -0.36906,0.07 -1.3425,0.61 -0.38688,0.282 -0.271,0.545 -0.041,0.708 0.14441,0.371 0.35301,0.578 0.43502,0.378 0.61866,0.296 1.0198,0.795 -0.64362,1.464 -0.60261,1.205 -10.38165,-0.121 -0.1765,0 -0.71494,-0.926 -1.34963,-0.875"
+ id="Nueces, TX" />
+ <path
+ d="m 486.22782,538.45714 5.63387,0.373 5.68735,2.12 2.51741,3.995 -2.90964,0.44 -1.41382,-0.07 -3.28761,0.07 -0.1765,0.596 -1.46196,-0.121 -1.05367,-0.232 -0.52951,-0.248 -2.70105,-1.408 -0.20682,-0.835 0.22465,-0.54 -1.70443,-1.43 1.38173,-2.71"
+ class="c48409"
+ id="San Patricio, TX" />
+ <path
+ class="c48057"
+ d="m 506.34215,540.22114 0.27278,-1.054 4.58733,-3.143 0.24069,-0.111 1.06259,-0.458 1.5814,-0.33 0.24247,0.419 -1.93619,0.954 -0.28348,0.128 -0.0232,0.02 -1.478,0.911 -1.49404,1.076 -1.30328,1.021 -1.87915,1.633 -0.041,0.04 -0.0481,0.05 0.4992,-1.155 m 5.18281,-13.725 5.1828,0.899 0.007,0.772 -1.25336,0.586 -1.99324,0.811 -1.62242,-1.479 -0.18541,-0.535 -0.1355,-1.054 m -6.34167,4.676 -0.29596,-0.579 -0.49029,-1.246 1.56715,-1.093 3.05405,-1.045 1.08399,-0.602 -0.29774,0.267 1.06972,2.542 0.0553,0.06 0.89143,0.166 0.56339,0.386 2.35517,2.122 0.18364,0.184 0.16937,0.233 -0.0321,0.154 -3.82604,1.918 -0.1765,0.07 -1.478,0.417 -0.51525,-0.167 -0.14442,-0.138 -1.30149,-1.399 -2.4354,-2.256"
+ id="Calhoun, TX" />
+ <path
+ d="m 499.72058,530.05514 5.46271,1.117 2.4354,2.256 -0.44928,2.068 -6.76599,0.986 0.0321,0.467 0.45641,0.611 0.7809,0.468 0.44215,0.06 0.42432,0.01 -0.12658,0.346 -2.57981,1.945 -1.82388,0.884 -0.0642,0 -0.3958,-0.322 -5.68735,-2.12 3.44628,-5.064 4.41261,-3.711"
+ class="c48391"
+ id="Refugio, TX" />
+ <path
+ d="m 487.24049,527.24314 1.60815,2.917 2.90072,1.768 3.55861,1.839 -3.44628,5.063 -5.63387,-0.373 0.19255,-0.15 -5.47876,-11.073 1.71868,-0.586 1.84171,-0.635 0.26386,0.16 0.16046,0.28 0.71493,0.396 0.63649,0.264 0.96275,0.13"
+ class="c48025"
+ id="Bee, TX" />
+ <path
+ d="m 480.82929,524.38914 1.831,2.259 -1.71868,0.586 5.47876,11.073 -0.19255,0.15 -1.38173,2.71 -7.18318,-0.176 -2.01821,-0.05 0.29774,-12.678 4.88685,-3.874"
+ class="c48297"
+ id="Live Oak, TX" />
+ <path
+ d="m 466.51819,527.42714 9.44208,0.128 -0.31557,13.386 -9.56153,-0.246 0.43502,-13.268"
+ class="c48311"
+ id="McMullen, TX" />
+ <path
+ d="m 466.08317,540.69514 9.56153,0.246 2.01821,0.05 -0.36192,18.144 -5.99401,-0.209 0.0713,-1.786 -0.60974,-0.376 -5.05443,-0.02 0.36905,-16.046"
+ class="c48131"
+ id="Duval, TX" />
+ <path
+ d="m 437.55725,536.45214 1.95224,0.06 14.64985,0.426 -0.041,3.977 11.96484,-0.224 -0.36905,16.046 -3.2787,1.832 -7.79471,-0.345 -0.72385,-1.077 -1.75969,1.18 -0.34587,-0.03 -0.44037,-0.277 -0.041,-0.01 -0.69175,-0.674 -0.0874,-0.1 -0.0321,-0.04 -0.016,-0.02 -0.0232,-0.09 0.0945,-0.128 0.57052,-0.765 0.3227,-0.763 0.12124,-0.442 0.21572,-1.719 -0.73097,-2.034 -0.42611,-0.747 -0.27456,-0.202 -0.90748,-0.659 -0.46533,-0.08 -0.0553,0.03 -0.025,0.1 -0.79516,-0.03 -3.51225,-3.247 -0.63471,-0.754 -2.17866,-4.39 -1.72582,-3.494 -0.0981,-0.08 -2.41757,-1.238"
+ class="c48479"
+ id="Webb, TX" />
+ <path
+ d="m 466.53245,527.21814 -0.0143,0.209 -0.43502,13.268 -11.96484,0.224 0.041,-3.977 0.32091,-9.965 12.0522,0.241"
+ class="c48283"
+ id="La Salle, TX" />
+ <path
+ d="m 439.94273,526.22914 14.27187,0.739 0.26565,0 -0.32091,9.965 -14.64985,-0.426 0.43324,-10.287"
+ class="c48127"
+ id="Dimmit, TX" />
+ <path
+ d="m 440.4348,516.21814 -0.49207,10.011 -0.43324,10.287 -1.95224,-0.06 -0.0731,-0.08 -0.86647,-0.955 -0.64362,-0.828 -0.99662,-3.063 -2.89182,-7.769 -2.57268,-5.698 -0.29774,-2.316 11.2196,0.476"
+ class="c48323"
+ id="Maverick, TX" />
+ <path
+ d="m 429.19202,503.36114 11.75625,0.564 -0.51347,12.293 -11.2196,-0.476 -2.32129,-3.719 0.61865,0.112 0.0802,-0.02 0.25852,-0.378 0.80229,-1.895 0.11232,-0.555 0.22464,-1.72 0.20146,-4.21"
+ class="c48271"
+ id="Kinney, TX" />
+ <path
+ d="m 441.52592,488.62414 7.1921,0.296 -0.26565,4.96 -1.75078,-0.06 -2.41935,-0.289 -1.18918,4.363 -0.21751,3.316 0.0321,2.797 -1.95937,-0.08 -11.75625,-0.564 0.74703,-15.229 11.58687,0.492"
+ class="c48137"
+ id="Edwards, TX" />
+ <path
+ d="m 448.45237,493.88014 1.35141,0.05 -0.14441,3.006 0.40115,0.811 1.32645,0.08 -0.2496,6.418 -8.22973,-0.241 -0.0321,-2.797 0.21751,-3.316 1.18918,-4.363 2.41935,0.289 1.75078,0.06"
+ class="c48385"
+ id="Real, TX" />
+ <path
+ d="m 440.94827,503.92514 1.95937,0.08 8.22973,0.241 3.82426,0.135 -0.48138,12.281 -14.04545,-0.442 0.51347,-12.293"
+ class="c48463"
+ id="Uvalde, TX" />
+ <path
+ d="m 454.48025,516.66014 -0.26565,10.308 -14.27187,-0.739 0.49207,-10.011 14.04545,0.442"
+ class="c48507"
+ id="Zavala, TX" />
+ <path
+ d="m 466.75175,517.07714 -0.2193,10.141 -12.0522,-0.241 -0.26565,0 0.26565,-10.308 12.2715,0.417"
+ class="c48163"
+ id="Frio, TX" />
+ <path
+ d="m 496.87512,522.91114 1.49404,0 0.58656,0.271 0.29061,0.588 0.3851,0.997 0.0891,5.295 -4.41261,3.712 -3.55861,-1.838 -2.90072,-1.769 -1.60815,-2.917 4.18796,-3.25 3.21451,-2.512 0.12659,0 0.53129,0.201 0.89144,0.498 0.27456,0.242 0.40828,0.489"
+ class="c48175"
+ id="Goliad, TX" />
+ <path
+ d="m 503.58584,517.50514 0.75415,0.938 2.00216,0.884 0.1355,0.1 1.44591,2.86 2.29812,4.268 -0.11945,0.06 -1.08399,0.602 -3.05405,1.045 -1.56715,1.093 0.49029,1.246 0.29596,0.58 -5.46271,-1.118 -0.0891,-5.295 -0.3851,-0.997 -0.29061,-0.588 -0.58656,-0.271 -1.49404,0 6.71072,-5.406"
+ class="c48469"
+ id="Victoria, TX" />
+ <path
+ d="m 498.36203,511.01014 5.22381,6.495 -6.71072,5.406 -0.40828,-0.489 -0.27456,-0.242 -0.89144,-0.498 -0.53129,-0.201 -0.12659,0 -3.21451,2.512 -3.56931,-4.497 2.90073,-2.298 7.60216,-6.188"
+ class="c48123"
+ id="DeWitt, TX" />
+ <path
+ d="m 488.48671,514.58614 2.27316,2.612 -2.90073,2.298 3.56931,4.497 -4.18796,3.25 -0.96275,-0.13 -0.63649,-0.264 -0.71493,-0.396 -0.16046,-0.28 -0.26386,-0.16 -1.84171,0.635 -1.831,-2.259 -1.82388,-2.225 9.4813,-7.578"
+ class="c48255"
+ id="Karnes, TX" />
+ <path
+ d="m 486.30091,510.99414 2.1858,3.592 -9.4813,7.578 -4.2361,-5.417 5.68914,-7.377 0.12123,1.182 0.0713,0.289 0.16937,0.306 0.57765,-0.321 4.90289,0.168"
+ class="c48493"
+ id="Wilson, TX" />
+ <path
+ d="m 466.86407,513.41314 7.90524,3.334 4.2361,5.417 1.82388,2.225 -4.88685,3.874 0.0178,-0.708 -9.44208,-0.128 0.0143,-0.209 0.2193,-10.141 0.11232,-3.664"
+ class="c48013"
+ id="Atascosa, TX" />
+ <path
+ d="m 467.1208,503.32914 -0.25673,10.084 -0.11232,3.664 -12.2715,-0.417 0.48138,-12.281 8.5649,0.378 0.13728,0.213 0.0161,0.11 -0.0642,0.25 -0.17472,0.264 0.007,0.46 0.11945,0.272 0.0802,0.07 0.0731,0.01 0.90035,-0.211 2.49958,-2.867"
+ class="c48325"
+ id="Medina, TX" />
+ <path
+ d="m 451.38697,497.82614 6.16338,0.288 2.31417,0.296 1.05189,0.546 4.05068,2.218 2.72423,1.494 -0.57052,0.661 -2.49958,2.867 -0.90035,0.211 -0.0731,-0.01 -0.0802,-0.07 -0.11945,-0.272 -0.007,-0.46 0.17472,-0.264 0.0642,-0.25 -0.0161,-0.11 -0.13728,-0.213 -8.5649,-0.377 -3.82426,-0.136 0.2496,-6.418"
+ class="c48019"
+ id="Bandera, TX" />
+ <path
+ d="m 457.68585,489.33914 -0.0963,3.495 7.57719,0.162 -0.19968,8.178 -4.05068,-2.218 -1.05189,-0.546 -2.31417,-0.296 -6.16338,-0.288 -1.32645,-0.08 -0.40115,-0.811 0.14441,-3.006 -1.35141,-0.05 0.26565,-4.96 8.96783,0.419"
+ class="c48265"
+ id="Kerr, TX" />
+ <path
+ d="m 457.82313,484.44514 6.72499,0.255 7.37751,0.186 -0.15332,8.285 -6.60554,-0.175 -7.57719,-0.162 0.23355,-8.389"
+ class="c48171"
+ id="Gillespie, TX" />
+ <path
+ d="m 476.70729,485.33014 4.41082,1.478 -0.98058,1.583 -2.64399,7.247 -2.37835,2.241 -3.34288,-4.708 0.15332,-8.285 4.78166,0.444"
+ class="c48031"
+ id="Blanco, TX" />
+ <path
+ d="m 465.16677,492.99614 6.60554,0.175 3.34288,4.708 -4.74957,4.291 -2.6743,0.498 -2.72423,-1.494 0.19968,-8.178"
+ class="c48259"
+ id="Kendall, TX" />
+ <path
+ d="m 470.36562,502.17014 1.82388,-0.224 0.16224,0 2.54594,0.33 1.23018,0.987 0.85221,2.532 0.19968,0.635 0.57052,0.442 0.97345,0.312 1.9041,1.278 0.0321,0.683 -0.20146,0.216 -5.68914,7.377 -7.90524,-3.334 0.25673,-10.084 0.57052,-0.661 2.6743,-0.497"
+ class="c48029"
+ id="Bexar, TX" />
+ <path
+ d="m 485.82667,499.94514 4.74957,4.862 -4.27533,6.187 -4.90289,-0.168 -0.57765,0.321 -0.16937,-0.306 -0.0713,-0.289 -0.12123,-1.182 0.20146,-0.216 -0.0321,-0.683 -1.9041,-1.278 -0.97345,-0.312 -0.57052,-0.442 -0.19968,-0.635 6.31493,-3.48 2.53167,-2.379"
+ class="c48187"
+ id="Guadalupe, TX" />
+ <path
+ d="m 477.49354,495.63814 5.22381,4.468 0.57765,2.218 -6.31493,3.48 -0.85221,-2.532 -1.23018,-0.987 -2.54594,-0.33 -0.16224,0 -1.82388,0.224 4.74957,-4.291 2.37835,-2.241"
+ class="c48091"
+ id="Comal, TX" />
+ <path
+ d="m 480.13753,488.39114 9.04807,7.802 -1.10182,0.987 -2.61903,2.163 -0.12837,0.61 0.18542,0.03 0.30487,-0.04 -2.53167,2.378 -0.57765,-2.218 -5.22381,-4.468 2.64399,-7.247"
+ class="c48209"
+ id="Hays, TX" />
+ <path
+ d="m 489.1856,496.19314 1.1963,-1.013 6.58236,6.596 -0.041,0.04 -6.34701,2.99 -4.74957,-4.862 -0.30487,0.04 -0.18542,-0.03 0.12837,-0.61 2.61903,-2.163 1.10182,-0.987"
+ class="c48055"
+ id="Caldwell, TX" />
+ <path
+ d="m 496.92325,501.81714 3.44807,3.641 -1.23018,1.07 0.0161,1.678 -0.79516,2.804 -7.60216,6.188 -2.27316,-2.612 -2.1858,-3.592 4.27533,-6.187 6.34701,-2.99"
+ class="c48177"
+ id="Gonzales, TX" />
+ <path
+ d="m 500.37132,505.45814 5.38249,-0.05 0.16937,0.05 0.37084,0.225 1.08398,1.012 4.61942,5.568 -1.97542,1.632 -5.68201,4.548 -5.97796,-7.433 0.79516,-2.804 -0.0161,-1.678 1.23018,-1.07"
+ class="c48285"
+ id="Lavaca, TX" />
+ <path
+ d="m 510.022,513.89514 0.36192,0.369 6.63763,6.55 -0.31379,6.581 -5.1828,-0.899 -1.30328,0.06 -2.29812,-4.268 -1.44591,-2.86 -0.1355,-0.1 -2.00216,-0.884 5.68201,-4.548"
+ class="c48239"
+ id="Jackson, TX" />
+ <path
+ d="m 517.02155,520.81414 6.94071,-4.193 1.83279,-1.899 0.47424,0.451 0.12124,0.121 0.82725,2.753 0.51347,1.995 0.16937,0.571 0.0481,0.07 3.97758,3.134 0.0731,0.04 1.22126,0.112 -0.3851,0.257 -0.84508,0.539 -0.37618,0.224 -4.55702,2.653 -1.44591,0.731 -2.3623,1.029 -1.56714,0.724 -2.8936,1.478 -1.0198,0.684 -0.0731,0.05 -1.37459,0.962 -0.60261,0.452 -0.16759,0.265 -0.0481,-0.167 0.11945,-0.195 3.26979,-2.458 0.4992,-4.219 -0.0963,-0.103 -0.13549,-0.05 -0.41185,0.06 -0.92174,0.218 -0.3958,0.128 -0.32983,0.262 -0.3851,0.678 -0.007,-0.772 0.31379,-6.581"
+ class="c48321"
+ id="Matagorda, TX" />
+ <path
+ d="m 521.4805,506.19614 1.62955,3.955 1.14995,2.137 1.43877,1.6 0.62579,0.08 -0.52951,0.754 -1.83279,1.899 -6.94071,4.193 -6.63763,-6.55 0.72206,-0.409 5.15963,-3.239 0.32983,-0.957 0.96275,-1.951 2.1858,-2.25 1.73651,0.738"
+ class="c48481"
+ id="Wharton, TX" />
+ <path
+ d="m 511.89401,497.91314 0.67571,1.244 0.81834,0.742 0.20146,0.182 1.26227,0.877 0.19968,0.1 0.3548,0.07 3.8403,3.794 0.49742,0.538 -2.1858,2.25 -0.96275,1.951 -0.32983,0.957 -5.15963,3.239 -0.72206,0.409 -0.36192,-0.369 1.97542,-1.632 -4.61942,-5.568 -1.08398,-1.012 -0.37084,-0.225 -0.16937,-0.05 6.1402,-7.497"
+ class="c48089"
+ id="Colorado, TX" />
+ <path
+ d="m 496.79489,487.62614 2.65112,1.526 2.32308,1.835 1.08577,4.787 -5.8906,6.002 -6.58236,-6.596 0.87718,-0.804 2.33021,-2.37 2.51384,-4.776 0.69176,0.396"
+ class="c48021"
+ id="Bastrop, TX" />
+ <path
+ d="m 507.45823,493.30614 0.51525,0.451 0.65788,-0.135 0.66679,-0.236 0.29774,-0.151 0.76307,0.506 0.29061,0.843 0.18363,0.903 0.041,0.511 1.0198,1.915 -6.1402,7.497 -5.38249,0.05 -3.44807,-3.641 0.041,-0.04 5.8906,-6.002 4.60337,-2.468"
+ class="c48149"
+ id="Fayette, TX" />
+ <path
+ d="m 500.36241,486.42114 3.81712,-2.25 2.29099,2.909 1.81496,2.099 2.24998,1.027 -3.07723,3.1 -4.60337,2.468 -1.08577,-4.787 -2.32308,-1.835 -2.65112,-1.526 3.56752,-1.205"
+ class="c48287"
+ id="Lee, TX" />
+ <path
+ d="m 510.87421,495.99814 0.71493,-0.458 5.84068,-0.697 0.36193,0.07 0.91639,0.399 0.98058,0.348 0.46533,0.03 0.21038,-0.249 2.24106,7.858 -1.12499,2.892 -1.73651,-0.738 -0.49742,-0.538 -3.8403,-3.794 -0.3548,-0.07 -0.19968,-0.1 -1.26227,-0.877 -0.20146,-0.182 -0.81834,-0.742 -0.67571,-1.244 -1.0198,-1.915"
+ class="c48015"
+ id="Austin, TX" />
+ <path
+ d="m 517.3175,488.32714 0.21751,0.288 0.22464,0.161 0.14263,0.05 1.07864,-0.369 0.33875,-0.41 0.13549,-0.104 0.26565,0.03 0.55447,0.585 -0.0874,0.91 1.21235,2.426 -1.03584,3.551 -0.21038,0.25 -0.46533,-0.03 -0.98058,-0.348 -0.91639,-0.399 -0.36193,-0.07 -5.84068,0.697 -0.71493,0.458 -0.041,-0.512 -0.18363,-0.902 -0.29061,-0.843 -0.76307,-0.506 -0.29774,0.151 -0.66679,0.236 -0.65788,0.135 -0.51525,-0.451 3.07723,-3.1 2.93283,-0.722 0.57943,-0.163 3.00413,-1.093 0.17651,0.03 0.0891,0.07"
+ class="c48477"
+ id="Washington, TX" />
+ <path
+ d="m 521.40027,491.89414 5.74441,-0.474 0.0321,3.567 -1.06794,-0.264 -1.07685,-0.602 -0.40293,-0.38 -0.58656,-0.435 0.27456,0.886 2.41935,7.724 -4.13091,1.388 -2.24106,-7.858 1.03584,-3.552"
+ class="c48473"
+ id="Waller, TX" />
+ <path
+ d="m 522.60549,503.30414 4.13091,-1.388 8.05858,4.74 -0.74703,3.238 -2.59586,2.596 -0.68283,0.353 -1.76683,-0.02 -0.77198,-0.275 -0.90748,0.387 -0.99841,1.038 -0.62579,-0.08 -1.43877,-1.6 -1.14995,-2.137 -1.62955,-3.955 1.12499,-2.892"
+ class="c48157"
+ id="Fort Bend, TX" />
+ <path
+ d="m 534.79498,506.65614 4.163,0.53 -0.312,2.073 2.30525,3.865 1.30149,2.201 -1.45482,2.62 0.21751,0.17 -0.12124,0.248 -5.04552,4.412 -2.62795,1.196 -1.22126,-0.112 -0.0731,-0.04 -3.97758,-3.134 -0.0481,-0.07 -0.16937,-0.571 -0.51347,-1.995 -0.82725,-2.753 -0.12124,-0.121 -0.47424,-0.451 0.52951,-0.754 0.99841,-1.038 0.90748,-0.387 0.77198,0.275 1.76683,0.02 0.68283,-0.353 2.59586,-2.596 0.74703,-3.238"
+ class="c48039"
+ id="Brazoria, TX" />
+ <path
+ class="c48167"
+ d="m 555.90416,506.98414 -0.59548,0.275 -1.78287,0.82 -0.13728,0.06 -0.0874,0.05 -1.60637,0.747 -0.2496,0.118 -0.72206,0.387 -0.13015,0.08 -0.41006,0.259 -0.24069,0.144 -0.0713,0.05 -0.23355,0.179 -0.16937,0.119 -0.0802,0.1 -0.0571,0.05 -0.14441,0.154 -0.0481,0.07 -0.17472,0.266 -0.082,0.121 -0.0963,0.232 -0.041,0.09 -0.60974,0.174 -0.34588,0.02 -0.0713,-0.06 -0.016,-0.269 0.32092,-0.409 1.68838,-1.807 0.17472,-0.127 1.53505,-0.731 1.02871,-0.355 0.25852,-0.03 0.19077,-0.08 -0.10341,-0.25 0,-0.33 3.10933,-0.112 m -12.9686,0.186 0.92353,1.044 3.29652,3.527 1.59745,0.474 -1.09289,0.957 -0.3441,0.266 -1.90589,1.309 -2.39617,1.647 -0.14442,0.1 -0.25673,0.203 -0.72206,0.553 -0.12837,0.105 -0.0731,0.06 -0.28882,0.273 -0.21573,0.201 -0.16937,0.234 -0.21751,-0.17 1.45482,-2.621 -1.30149,-2.2 -2.30525,-3.865 0.312,-2.073 0.96453,0.964 2.00038,-1.03 1.01267,0.05"
+ id="Galveston, TX" />
+ <path
+ d="m 526.61517,482.58014 4.58732,2.782 2.13053,0 1.29437,0 1.33358,0.09 3.85635,3.633 1.40669,4.073 -2.00217,1.897 -1.30149,1.23 -0.58657,0.07 -0.35122,-0.08 -0.21216,-0.458 -0.57587,-0.539 -1.44769,-0.777 -2.51385,-1.334 -0.94135,0.819 -1.40669,0.666 -1.31754,0.266 -0.43502,0.04 -0.95562,0.05 -0.0321,-3.567 -0.52951,-8.84"
+ class="c48339"
+ id="Montgomery, TX" />
+ <path
+ d="m 527.17677,494.98714 0.95562,-0.05 0.43502,-0.04 1.31754,-0.266 1.40669,-0.666 0.94135,-0.819 2.51385,1.334 1.44769,0.777 0.57587,0.539 0.21216,0.458 0.35122,0.08 0.58657,-0.07 1.30149,-1.231 2.00217,-1.896 2.38726,6.47 1.0198,4.778 -1.69551,2.783 -1.01267,-0.05 -2.00038,1.03 -0.96453,-0.964 -4.163,-0.53 -8.05858,-4.74 -2.41935,-7.724 -0.27456,-0.886 0.58656,0.435 0.40293,0.38 1.07685,0.603 1.06794,0.263"
+ class="c48201"
+ id="Harris, TX" />
+ <path
+ d="m 554.34593,499.34314 1.68659,0.01 0.2193,7.171 -0.0178,0.303 -0.32983,0.153 -3.10933,0.113 -4.18618,-0.667 0.50634,-0.947 0.28882,-1.592 0.007,-0.209 -0.0642,-0.451 -0.5937,-1.171 -0.21751,-0.242 -0.11232,-0.04 -1.02158,0.467 -0.47246,0.249 -2.29812,1.894 -1.0198,-4.778 10.73466,-0.266"
+ class="c48071"
+ id="Chambers, TX" />
+ <path
+ d="m 552.06385,484.74314 9.38503,-0.144 -0.4992,1.219 -0.17472,0.531 -0.21751,0.892 0.0571,0.321 0.36014,0.822 0.0642,0.02 0.20147,0.21 -0.36193,2.241 -0.20681,0.291 0.0713,1.858 -0.12836,-0.13 -1.47265,-0.491 -0.27813,0.04 -1.29615,0.419 -0.0481,0.06 -0.0161,0.256 0.0481,0.364 -0.0553,0.145 -0.26565,0.383 -0.14441,0.08 -2.0093,0.428 -0.31378,-0.06 -0.55447,-0.289 -3.01305,0.07 -2.82942,-8.637 3.69767,-0.9"
+ class="c48199"
+ id="Hardin, TX" />
+ <path
+ d="m 546.0538,485.59314 2.31238,0.05 2.82942,8.636 3.01305,-0.06 0.13728,5.128 -10.73466,0.265 -2.38726,-6.47 -1.40669,-4.072 6.23648,-3.473"
+ class="c48291"
+ id="Liberty, TX" />
+ <path
+ d="m 554.20865,494.21514 0.55447,0.289 0.31378,0.06 2.0093,-0.428 0.14441,-0.08 0.26565,-0.383 0.0553,-0.145 -0.0481,-0.364 0.0161,-0.256 0.0481,-0.06 1.29615,-0.419 0.27813,-0.04 1.47265,0.491 0.12836,0.13 0.0481,0.28 0.41719,1.446 0.0553,0.06 2.76702,1.801 1.66163,0.428 0.25674,0.112 0.30665,0.472 0.0731,0.186 0.0392,0.226 -0.0339,0.523 0.17828,5.125 -1.85597,0.298 -0.49207,0 -0.91461,0 -1.10003,0.259 -1.51187,0.602 -4.40369,2.024 0.0178,-0.303 -0.2193,-7.171 -1.68659,-0.01 -0.13728,-5.128"
+ class="c48245"
+ id="Jefferson, TX" />
+ <path
+ d="m 568.6392,490.90614 -0.0143,4.441 -2.29098,3.194 0.0339,-0.523 -0.0392,-0.226 -0.0731,-0.186 -0.30665,-0.472 -0.25674,-0.112 -1.66163,-0.428 -2.76702,-1.801 -0.0553,-0.06 -0.41719,-1.446 -0.0481,-0.28 -0.0713,-1.858 4.28959,-0.114 3.67806,-0.127"
+ class="c48361"
+ id="Orange, TX" />
+ <path
+ d="m 481.11811,486.80814 1.59924,-4.517 1.83992,-0.06 0.77911,0.553 0.94136,1.358 0.35122,1.689 0.73276,0.618 0.62757,0.209 0.45642,-0.02 1.3425,-0.472 1.84883,-0.892 0.40115,0 1.26049,0.399 2.80445,1.548 -2.51384,4.776 -2.33021,2.37 -0.87718,0.804 -1.1963,1.012 -9.04807,-7.801 0.98058,-1.584"
+ class="c48453"
+ id="Travis, TX" />
+ <path
+ d="m 436.97069,416.76914 -0.50634,10.029 -2.62795,-0.136 -7.33651,-0.531 0.52238,-9.845 9.94842,0.483"
+ class="c48263"
+ id="Kent, TX" />
+ <path
+ d="m 454.43211,479.47814 -0.18541,4.846 3.57643,0.121 -0.13728,4.894 -8.96783,-0.419 -7.1921,-0.296 0.4261,-9.636 12.48009,0.49"
+ class="c48267"
+ id="Kimble, TX" />
+ <path
+ d="m 441.95202,478.98814 -0.4261,9.636 -11.58687,-0.492 -5.15785,-0.248 0.49743,-9.593 16.67339,0.697"
+ class="c48435"
+ id="Sutton, TX" />
+ <path
+ d="m 431.07295,469.82014 11.27309,0.491 -0.39402,8.677 -16.67339,-0.697 0.41719,-8.647 5.37713,0.176"
+ class="c48413"
+ id="Schleicher, TX" />
+ <path
+ d="m 442.34604,470.31114 10.06073,0.424 2.20185,3.457 -0.17651,5.286 -12.48009,-0.49 0.39402,-8.677"
+ class="c48327"
+ id="Menard, TX" />
+ <path
+ d="m 454.60862,474.19214 7.73052,0.264 2.4978,0.531 -0.28882,9.713 -6.72499,-0.255 -3.57643,-0.121 0.18541,-4.846 0.17651,-5.286"
+ class="c48319"
+ id="Mason, TX" />
+ <path
+ d="m 464.83694,474.98714 10.22298,0.289 1.30863,2.059 0.0874,6.001 0.25138,1.994 -4.78166,-0.444 -7.37751,-0.186 0.28882,-9.713"
+ class="c48299"
+ id="Llano, TX" />
+ <path
+ d="m 485.64125,472.90614 1.57606,2.989 -4.49996,6.396 -1.59924,4.517 -4.41082,-1.478 -0.25138,-1.994 -0.0874,-6.001 -1.30863,-2.059 0.18363,-2.482 10.3977,0.112"
+ class="c48053"
+ id="Burnet, TX" />
+ <path
+ d="m 487.21731,475.89514 3.4142,0.757 0.58656,0.145 6.05997,2.802 3.08437,6.822 -3.56752,1.205 -0.69176,-0.396 -2.80445,-1.547 -1.26049,-0.4 -0.40115,0 -1.84883,0.892 -1.3425,0.472 -0.45642,0.02 -0.62757,-0.208 -0.73276,-0.619 -0.35122,-1.688 -0.94136,-1.359 -0.77911,-0.553 -1.83992,0.06 4.49996,-6.397"
+ class="c48491"
+ id="Williamson, TX" />
+ <path
+ d="m 510.98653,480.24114 1.05903,0.811 -0.11232,0.147 -0.56161,1.059 0,0.06 1.83279,0.437 1.6866,0.786 2.13053,3.038 0.29595,1.744 -0.0891,-0.07 -0.17651,-0.03 -3.00413,1.092 -0.57943,0.163 -2.93283,0.722 -2.24998,-1.027 -1.81496,-2.099 -2.29099,-2.909 6.807,-3.93"
+ class="c48051"
+ id="Burleson, TX" />
+ <path
+ d="m 536.52258,477.26714 2.52454,0.79 1.35676,1.414 5.01522,4.807 0.6347,1.315 -6.23648,3.473 -3.85635,-3.633 0.56161,-8.166"
+ class="c48407"
+ id="San Jacinto, TX" />
+ <path
+ d="m 534.3867,472.72314 2.13588,4.544 -0.56161,8.166 -1.33358,-0.09 -1.29437,0 -2.13053,0 -4.58732,-2.782 -0.65075,-5.368 4.82801,-1.542 3.59427,-2.947"
+ class="c48471"
+ id="Walker, TX" />
+ <path
+ d="m 519.93832,478.15214 6.0261,-0.94 0.65075,5.368 0.52951,8.84 -5.74441,0.474 -1.21235,-2.426 1.38886,-2.067 -0.70602,-0.49 -0.14619,-0.257 -0.22464,-0.415 -0.92353,-3.097 0.16759,-2.378 0.19433,-2.612"
+ class="c48185"
+ id="Grimes, TX" />
+ <path
+ d="m 519.93832,478.15214 -0.19433,2.612 -0.16759,2.378 0.92353,3.097 0.22464,0.415 0.14619,0.257 0.70602,0.49 -1.38886,2.067 0.0874,-0.91 -0.55447,-0.584 -0.26565,-0.03 -0.13549,0.104 -0.33875,0.41 -1.07864,0.369 -0.14263,-0.05 -0.22464,-0.161 -0.21751,-0.288 -0.29595,-1.744 -2.13053,-3.038 -1.6866,-0.786 -1.83279,-0.437 0,-0.06 0.56161,-1.059 0.11232,-0.147 2.18758,-1.107 0.53842,-0.939 0.39224,-0.91 0.44215,-0.841 0.53129,-0.829 0.24782,-0.323 0.3227,-0.28 0.58656,-0.403 0.80408,-0.531 0.41719,-0.2 1.42273,3.463"
+ class="c48041"
+ id="Brazos, TX" />
+ <path
+ d="m 518.51559,474.68914 1.36568,-0.474 1.77574,-1.18 2.07348,-1.061 4.163,-0.06 2.89894,3.753 -4.82801,1.542 -6.0261,0.94 -1.42273,-3.463"
+ class="c48313"
+ id="Madison, TX" />
+ <path
+ d="m 528.3499,462.48414 0.20147,0.337 0.36192,0.811 0.87539,2.505 -0.44037,1.12 -0.082,-0.02 -0.16759,0.1 -0.44216,0.497 -0.98771,3.124 0.0232,0.299 0.20147,0.66 -4.163,0.06 -2.07348,1.061 -1.77574,1.18 -1.36568,0.474 -1.51187,-8.83 1.62419,-1.287 8.79133,-4.714 0.93066,2.626"
+ class="c48289"
+ id="Leon, TX" />
+ <path
+ d="m 511.541,468.96814 5.46272,-3.109 1.51187,8.83 -0.41719,0.2 -0.80408,0.531 -0.58656,0.403 -0.3227,0.28 -0.24782,0.323 -0.53129,0.829 -0.44215,0.841 -0.39224,0.91 -0.53842,0.939 -2.18758,1.107 -1.05903,-0.811 -0.94849,-2.385 -1.69551,-2.17 -1.14995,-3.359 -0.23355,-0.747 4.58197,-2.612"
+ class="c48395"
+ id="Robertson, TX" />
+ <path
+ d="m 506.95903,471.58014 0.23355,0.747 1.14995,3.359 1.69551,2.17 0.94849,2.385 -6.807,3.93 -3.81712,2.25 -3.08437,-6.822 1.15709,-3.136 3.75294,-2.175 4.77096,-2.708"
+ class="c48331"
+ id="Milam, TX" />
+ <path
+ d="m 495.43634,466.51714 2.74027,0.966 4.01146,6.805 -3.75294,2.175 -1.15709,3.136 -6.05997,-2.802 -0.58656,-0.145 -3.4142,-0.757 -1.57606,-2.989 0.10519,-0.788 9.6899,-5.601"
+ class="c48027"
+ id="Bell, TX" />
+ <path
+ d="m 491.88486,460.29814 3.55148,6.219 -9.6899,5.601 -5.15962,-9.194 8.18159,-4.635 3.11645,2.009"
+ class="c48099"
+ id="Coryell, TX" />
+ <path
+ d="m 478.77899,463.97814 1.80783,-1.054 5.15962,9.194 -0.10519,0.788 -10.3977,-0.112 -2.2892,-4.685 5.82464,-4.131"
+ class="c48281"
+ id="Lampasas, TX" />
+ <path
+ d="m 475.16333,457.72514 3.61566,6.253 -5.82464,4.131 -0.0499,-0.275 -0.74702,-1.631 -2.57982,-2.264 -0.62578,0.593 -3.7993,-1.43 -0.50812,-0.666 0.0731,-0.41 1.01267,-0.637 3.21452,-2.152 0.44215,-1.759 1.79,-0.241 3.9865,0.488"
+ class="c48333"
+ id="Mills, TX" />
+ <path
+ d="m 464.71749,462.02614 -0.0731,0.41 0.50812,0.666 3.7993,1.43 0.62578,-0.593 2.57982,2.264 0.74702,1.631 0.0499,0.275 2.2892,4.685 -0.18363,2.482 -10.22298,-0.289 -2.4978,-0.531 0.42433,-11.956 1.95402,-0.474"
+ class="c48411"
+ id="San Saba, TX" />
+ <path
+ d="m 460.57054,462.28214 2.19293,0.218 -0.42433,11.956 -7.73052,-0.264 -2.20185,-3.457 0.37797,-9.303 1.26941,0.248 1.77573,0.274 3.77612,0.1 0.96454,0.233"
+ class="c48307"
+ id="McCulloch, TX" />
+ <path
+ d="m 450.51871,459.38914 2.26603,2.043 -0.37797,9.303 -10.06073,-0.424 0.57052,-11.314 7.60215,0.392"
+ class="c48095"
+ id="Concho, TX" />
+ <path
+ d="m 429.10288,455.67714 11.49238,0.617 2.3213,2.703 -0.57052,11.314 -11.27309,-0.491 0.41719,-10.052 -5.8175,-0.386 -5.40745,-0.314 0.0392,-0.635 7.86602,0.282 0.25138,-3.286 0.68106,0.248"
+ class="c48451"
+ id="Tom Green, TX" />
+ <path
+ d="m 429.63418,446.69314 3.02909,0.185 8.34918,0.457 -0.41719,8.959 -11.49238,-0.617 0.5313,-8.984"
+ class="c48081"
+ id="Coke, TX" />
+ <path
+ d="m 442.62773,447.40114 8.49359,0.369 -0.60261,11.619 -7.60215,-0.392 -2.3213,-2.703 0.41719,-8.959 1.61528,0.07"
+ class="c48399"
+ id="Runnels, TX" />
+ <path
+ d="m 452.72769,447.85014 8.45437,0.348 -0.61152,14.084 -0.96454,-0.233 -3.77612,-0.1 -1.77573,-0.274 -1.26941,-0.248 -2.26603,-2.043 0.60261,-11.619 1.60637,0.08"
+ class="c48083"
+ id="Coleman, TX" />
+ <path
+ d="m 462.68324,448.24414 3.77077,0.153 4.72282,8.84 -1.79,0.241 -0.44215,1.759 -3.21452,2.152 -1.01267,0.637 -1.95402,0.474 -2.19293,-0.218 0.61152,-14.084 1.50118,0.05"
+ class="c48049"
+ id="Brown, TX" />
+ <path
+ d="m 473.81191,444.38114 4.15587,7.486 1.50296,-0.858 0.80229,1.462 0.96632,1.767 -6.07602,3.487 -3.9865,-0.488 -4.72282,-8.84 7.3579,-4.016"
+ class="c48093"
+ id="Comanche, TX" />
+ <path
+ d="m 480.27303,452.47114 4.00254,-2.227 4.49284,8.045 -8.18159,4.635 -1.80783,1.054 -3.61566,-6.253 6.07602,-3.487 -0.96632,-1.767"
+ class="c48193"
+ id="Hamilton, TX" />
+ <path
+ d="m 491.93478,446.10814 2.68322,0.738 -0.21751,1.423 -0.13728,1.196 0.10519,0.974 3.08615,5.561 0.23355,0.36 0.64897,0.403 -6.45221,3.535 -3.11645,-2.009 -4.49284,-8.045 2.75632,-1.542 4.90289,-2.594"
+ class="c48035"
+ id="Bosque, TX" />
+ <path
+ d="m 507.5866,462.00114 3.9544,6.967 -4.58197,2.612 -4.77096,2.708 -4.01146,-6.805 9.40999,-5.482"
+ class="c48145"
+ id="Falls, TX" />
+ <path
+ d="m 505.06384,457.68614 2.52276,4.315 -9.40999,5.482 -2.74027,-0.966 -3.55148,-6.219 6.45221,-3.535 4.71747,-2.652 2.0093,3.575"
+ class="c48309"
+ id="McLennan, TX" />
+ <path
+ d="m 494.618,446.84614 7.58433,-2.016 3.64954,4.452 3.39101,6.001 -4.17904,2.403 -2.0093,-3.575 -4.71747,2.652 -0.64897,-0.403 -0.23355,-0.36 -3.08615,-5.561 -0.10519,-0.974 0.13728,-1.196 0.21751,-1.423"
+ class="c48217"
+ id="Hill, TX" />
+ <path
+ d="m 509.24288,455.28314 4.3306,0.458 5.05443,8.831 -1.62419,1.287 -5.46272,3.109 -3.9544,-6.967 -2.52276,-4.315 4.17904,-2.403"
+ class="c48293"
+ id="Limestone, TX" />
+ <path
+ d="m 522.23466,450.92914 -0.17472,1.075 1.72581,3.206 1.24623,1.255 0.65966,0.242 1.55823,1.838 0.16937,1.313 -8.79133,4.714 -5.05443,-8.831 8.62195,-4.965 0.0392,0.153"
+ class="c48161"
+ id="Freestone, TX" />
+ <path
+ d="m 505.85187,449.28214 9.97872,-5.804 1.82566,0.844 1.06081,0.966 0.68997,0.827 1.64737,1.994 0.90035,1.34 0.24068,1.327 -8.62195,4.965 -4.3306,-0.458 -3.39101,-6.001"
+ class="c48349"
+ id="Navarro, TX" />
+ <path
+ d="m 485.53785,445.30614 6.43616,-1.849 -0.0392,2.651 -4.90289,2.594 -1.49404,-3.396"
+ class="c48425"
+ id="Somervell, TX" />
+ <path
+ d="m 502.26651,438.28014 0.94136,0.03 9.82005,0.163 1.48513,4.305 1.31754,0.697 -9.97872,5.804 -3.64954,-4.452 0.0642,-6.55"
+ class="c48139"
+ id="Ellis, TX" />
+ <path
+ d="m 492.03106,438.00014 1.28366,0.03 8.95179,0.255 -0.0642,6.55 -7.58433,2.016 -2.68322,-0.738 0.0392,-2.651 0.0571,-5.457"
+ class="c48251"
+ id="Johnson, TX" />
+ <path
+ d="m 483.35205,437.75014 8.67901,0.25 -0.0571,5.457 -6.43616,1.849 -2.24285,-6.461 0.0571,-1.095"
+ class="c48221"
+ id="Hood, TX" />
+ <path
+ d="m 483.295,438.84514 2.24285,6.461 1.49404,3.396 -2.75632,1.542 -4.00254,2.227 -0.80229,-1.462 -1.50296,0.858 -4.15587,-7.486 1.62419,-5.763 7.8589,0.227"
+ class="c48143"
+ id="Erath, TX" />
+ <path
+ d="m 463.44809,438.22414 10.03577,0.298 1.95224,0.1 -1.62419,5.763 -7.3579,4.016 -3.77077,-0.153 0.41006,-10.03 0.35479,0.01"
+ class="c48133"
+ id="Eastland, TX" />
+ <path
+ d="m 453.48363,437.87814 9.60967,0.336 -0.41006,10.03 -1.50118,-0.05 -8.45437,-0.348 0.41897,-9.988 0.33697,0.02"
+ class="c48059"
+ id="Callahan, TX" />
+ <path
+ d="m 453.14666,437.86214 -0.41897,9.988 -1.60637,-0.08 -8.49359,-0.369 0.54556,-10.132 9.97337,0.593"
+ class="c48441"
+ id="Taylor, TX" />
+ <path
+ d="m 443.17329,437.26914 -0.54556,10.132 -1.61528,-0.07 -8.34918,-0.457 0.58657,-10.123 9.92345,0.514"
+ class="c48353"
+ id="Nolan, TX" />
+ <path
+ d="m 436.46435,426.79814 7.1921,0.401 -0.48316,10.07 -9.92345,-0.514 0.58656,-10.093 2.62795,0.136"
+ class="c48151"
+ id="Fisher, TX" />
+ <path
+ d="m 443.65645,427.19914 2.98096,0.121 7.23132,0.362 -0.3851,10.196 -0.33697,-0.02 -9.97337,-0.593 0.48316,-10.07"
+ class="c48253"
+ id="Jones, TX" />
+ <path
+ d="m 453.86873,427.68214 2.70818,0.1 7.20101,0.248 -0.32983,10.196 -0.35479,-0.01 -9.60967,-0.336 0.3851,-10.196"
+ class="c48417"
+ id="Shackelford, TX" />
+ <path
+ d="m 466.56633,428.12414 7.20636,0.264 -0.28883,10.134 -10.03577,-0.298 0.32983,-10.196 2.78841,0.1"
+ class="c48429"
+ id="Stephens, TX" />
+ <path
+ d="m 476.66629,427.23314 7.11186,0.273 -0.4261,10.244 -0.0571,1.095 -7.8589,-0.227 -1.95224,-0.1 0.28883,-10.134 2.8936,-1.155"
+ class="c48363"
+ id="Palo Pinto, TX" />
+ <path
+ d="m 483.77815,427.50614 2.57982,0.103 7.24736,0.289 -0.29061,10.127 -1.28366,-0.03 -8.67901,-0.25 0.4261,-10.244"
+ class="c48367"
+ id="Parker, TX" />
+ <path
+ d="m 493.60533,427.89814 2.79554,0.137 7.03164,0.216 -0.22464,10.062 -0.94136,-0.03 -8.95179,-0.255 0.29061,-10.127"
+ class="c48439"
+ id="Tarrant, TX" />
+ <path
+ d="m 503.43251,428.25114 3.59962,-0.03 6.30066,0.167 -0.0642,3.89 -0.24068,6.198 -9.82005,-0.163 0.22464,-10.062"
+ class="c48113"
+ id="Dallas, TX" />
+ <path
+ d="m 517.55284,428.42014 -0.0107,3.229 -4.27354,0.629 0.0642,-3.89 4.22005,0.03"
+ class="c48397"
+ id="Rockwall, TX" />
+ <path
+ d="m 517.54214,431.64914 4.24502,0.08 0.007,11.097 -7.28124,-0.05 -1.48513,-4.305 0.24068,-6.198 4.27354,-0.629"
+ class="c48257"
+ id="Kaufman, TX" />
+ <path
+ d="m 525.90024,428.47714 3.79216,0.434 0.5937,5.537 -5.76045,-2.685 1.37459,-3.286"
+ class="c48379"
+ id="Rains, TX" />
+ <path
+ d="m 524.52565,431.76314 5.76045,2.685 0.78803,0.765 0.0339,4.778 2.37657,2.532 0.43502,0.331 -12.1253,-0.03 -0.007,-11.097 2.73849,0.03"
+ class="c48467"
+ id="Van Zandt, TX" />
+ <path
+ d="m 521.79429,442.82814 12.1253,0.03 -0.17651,5.064 0.61688,1.171 -12.1253,1.84 -0.0392,-0.153 -0.24068,-1.327 -0.90035,-1.341 -1.64737,-1.993 -0.68997,-0.827 -1.06081,-0.966 -1.82566,-0.844 -1.31754,-0.697 7.28124,0.05"
+ class="c48213"
+ id="Henderson, TX" />
+ <path
+ d="m 534.35996,449.08914 -0.3441,3.127 0.31379,1.66 0.72384,2.605 1.3639,1.244 0.26565,0.06 0.44393,0.539 0.27278,0.57 0.27991,0.892 0.0571,0.226 -0.27278,0.385 -4.29315,0.669 -3.10041,0.545 -1.72047,0.876 -0.93066,-2.626 -0.16937,-1.313 -1.55823,-1.838 -0.65966,-0.242 -1.24623,-1.255 -1.72581,-3.206 0.17472,-1.075 12.1253,-1.84"
+ class="c48001"
+ id="Anderson, TX" />
+ <path
+ d="m 528.3499,462.48414 1.72047,-0.876 3.10041,-0.545 4.29315,-0.669 1.25336,0.483 1.94333,1.992 2.12161,1.31 0.90035,0.894 -9.29588,7.65 -3.59427,2.947 -2.89894,-3.753 -0.20147,-0.66 -0.0232,-0.299 0.98771,-3.124 0.44216,-0.497 0.16759,-0.1 0.082,0.02 0.44037,-1.12 -0.87539,-2.505 -0.36192,-0.811 -0.20147,-0.337"
+ class="c48225"
+ id="Houston, TX" />
+ <path
+ d="m 546.00566,470.57414 -6.95854,7.483 -2.52454,-0.79 -2.13588,-4.544 9.29588,-7.65 2.32308,5.501"
+ class="c48455"
+ id="Trinity, TX" />
+ <path
+ d="m 551.55752,472.51214 -1.88093,1.117 2.38726,11.114 -3.69767,0.9 -2.31238,-0.05 -0.6347,-1.315 -5.01522,-4.807 -1.35676,-1.414 6.95854,-7.483 2.23216,0.935 1.71333,0.36 1.60637,0.643"
+ class="c48373"
+ id="Polk, TX" />
+ <path
+ d="m 570.4185,469.44214 0.91461,-0.24 0.0731,7.288 -0.35479,1.542 -2.8205,5.311 -0.22464,0.804 0,0 0.0571,0.06 0.55447,0.669 0.27991,1.433 -0.007,0.12 -0.0802,0.199 -0.75772,0.637 -0.0214,0.02 0.60796,3.61 -3.67806,0.127 0.29773,-9.761 0.0481,-6.447 -0.99841,-4.821 6.1099,-0.562"
+ class="c48351"
+ id="Newton, TX" />
+ <path
+ d="m 561.80189,470.59914 2.50671,-0.595 0.99841,4.821 -0.0481,6.447 -0.29773,9.761 -4.28959,0.114 0.20681,-0.291 0.36193,-2.241 -0.20147,-0.21 -0.0642,-0.02 -0.36014,-0.822 -0.0571,-0.321 0.21751,-0.892 0.17472,-0.531 0.4992,-1.219 -0.29774,-0.484 -0.20681,-0.675 0.0535,-0.177 0.44393,-0.854 -0.0963,-0.922 -1.40491,-2.788 -0.17828,-0.152 -0.44394,-0.06 -0.11945,-0.02 -0.0463,-0.06 -1.32646,-3.867 0.1355,-0.77 -0.0713,-0.184 -0.23355,-0.242 -0.9164,-0.353 -1.16599,0.03 -1.95938,0.06 6.42903,-1.631 1.75791,-0.844"
+ class="c48241"
+ id="Jasper, TX" />
+ <path
+ d="m 553.61495,473.07414 1.95938,-0.06 1.16599,-0.03 0.9164,0.353 0.23355,0.242 0.0713,0.184 -0.1355,0.77 1.32646,3.867 0.0463,0.06 0.11945,0.02 0.44394,0.07 0.17828,0.151 1.40491,2.788 0.0963,0.922 -0.44393,0.854 -0.0535,0.177 0.20681,0.675 0.29774,0.484 -9.38503,0.144 -2.38726,-11.114 1.88093,-1.116 2.05743,0.561"
+ class="c48457"
+ id="Tyler, TX" />
+ <path
+ d="m 545.45119,461.83314 0.83438,0.924 3.63171,0.932 0.87717,-0.144 0.7702,0.322 1.03763,0.544 0.2496,0.268 3.26087,3.952 3.93123,2.812 -6.42903,1.631 -2.05743,-0.562 -1.60637,-0.643 -1.71333,-0.36 -2.23216,-0.935 -2.32308,-5.501 -0.90035,-0.894 2.66896,-2.346"
+ class="c48005"
+ id="Angelina, TX" />
+ <path
+ d="m 565.57979,460.11114 2.1127,2.219 1.8007,2.612 0.58656,2.557 0.1355,0.754 0.20325,1.189 -6.1099,0.562 -2.50671,0.595 -0.16759,-0.538 -0.0713,-3.206 0.016,-2.595 0.83438,-0.899 0.32805,-0.419 -0.0784,-2.369 2.91677,-0.462"
+ class="c48403"
+ id="Sabine, TX" />
+ <path
+ d="m 562.66302,460.57314 0.0784,2.369 -0.32805,0.419 -0.83438,0.899 -0.016,2.595 0.0713,3.206 0.16759,0.538 -1.75791,0.844 -3.93123,-2.812 0.10519,-2.747 0.14441,-5.249 -1.36567,-1.526 -0.46533,-0.323 6.03501,0.644 2.09666,1.143"
+ class="c48405"
+ id="San Augustine, TX" />
+ <path
+ d="m 552.21718,451.44214 9.64176,-0.312 2.74027,3.062 0.98058,5.919 -2.91677,0.462 -2.09666,-1.143 -6.03501,-0.644 -1.11786,-4.379 -1.19631,-2.965"
+ class="c48419"
+ id="Shelby, TX" />
+ <path
+ d="m 543.97319,454.51314 9.4403,-0.106 1.11786,4.379 0.46533,0.323 1.36567,1.526 -0.14441,5.249 -0.10519,2.747 -3.26087,-3.952 -0.2496,-0.268 -1.03763,-0.544 -0.7702,-0.322 -0.87717,0.144 -3.63171,-0.932 -0.83438,-0.924 -1.06259,-1.046 -0.0945,-0.152 -0.48138,-1.309 -0.35657,-1.326 -0.2086,-2.059 0.72563,-1.428"
+ class="c48347"
+ id="Nacogdoches, TX" />
+ <path
+ d="m 533.74308,447.91814 9.21744,-0.132 1.01267,6.727 -0.72563,1.428 0.2086,2.059 0.35657,1.326 0.48138,1.309 0.0945,0.152 1.06259,1.046 -2.66896,2.346 -2.12161,-1.31 -1.94333,-1.992 -1.25336,-0.483 0.27278,-0.385 -0.0571,-0.226 -0.27991,-0.892 -0.27278,-0.57 -0.44393,-0.539 -0.26565,-0.06 -1.3639,-1.244 -0.72384,-2.605 -0.31379,-1.66 0.3441,-3.127 -0.61688,-1.171"
+ class="c48073"
+ id="Cherokee, TX" />
+ <path
+ d="m 561.1351,441.64014 0.0981,4.523 0.62579,4.967 -9.64176,0.312 -1.71869,0.04 -0.066,-2.458 0.37618,-2.846 0.42611,-1.062 0.61866,-1.091 0.58121,-1.407 0.0143,-0.875 0.55448,0.49 2.09665,0.9 0.16224,0.03 5.87278,-1.525"
+ class="c48365"
+ id="Panola, TX" />
+ <path
+ d="m 550.75344,441.75814 1.69551,-0.01 -0.0143,0.875 -0.58121,1.407 -0.61866,1.091 -0.42611,1.062 -0.37618,2.846 0.066,2.458 1.71869,-0.04 1.19631,2.965 -9.4403,0.106 -1.01267,-6.727 -0.0731,-5.335 3.41598,-0.07 3.2056,-0.03 1.24444,-0.588"
+ class="c48401"
+ id="Rusk, TX" />
+ <path
+ d="m 542.81433,438.57714 0.31378,-0.03 2.90964,-1.246 1.14817,-1.597 0.14441,-0.06 0.90749,0.104 0.057,0.112 0.0713,4.598 0.025,0.69 1.14995,0.555 1.0198,0.133 0.19255,-0.07 -1.24444,0.588 -3.2056,0.03 -3.41598,0.07 -0.0731,-3.874"
+ class="c48183"
+ id="Gregg, TX" />
+ <path
+ d="m 531.07413,435.21314 1.74543,1.564 0.55269,0.242 5.55185,1.391 0.13907,-0.02 0.36905,-0.18 0.1765,-0.359 3.20561,0.722 0.0731,3.875 0.0731,5.334 -9.21744,0.132 0.17651,-5.064 -0.43502,-0.331 -2.37657,-2.532 -0.0339,-4.778"
+ class="c48423"
+ id="Smith, TX" />
+ <path
+ d="m 539.53741,427.62714 0.0232,2.562 0.0481,7.666 -0.1765,0.359 -0.36905,0.18 -0.13907,0.02 -5.55185,-1.391 -0.55269,-0.242 -1.74543,-1.564 -0.78803,-0.765 -0.5937,-5.537 6.84622,-0.09 2.99879,-1.196"
+ class="c48499"
+ id="Wood, TX" />
+ <path
+ d="m 548.24673,432.61514 3.79216,2.233 2.36409,-0.02 0.6347,-0.323 2.29099,-0.296 1.35498,-0.112 0.98236,0.12 1.31754,0.49 0.15155,6.935 -5.87278,1.525 -0.16224,-0.03 -2.09665,-0.9 -0.55448,-0.49 -1.69551,0.01 -0.19255,0.07 -1.0198,-0.133 -1.14995,-0.555 -0.025,-0.69 -0.0713,-4.598 -0.0481,-3.238"
+ class="c48203"
+ id="Harrison, TX" />
+ <path
+ d="m 539.56059,430.18914 8.30817,-0.146 0.28169,0.586 0.0963,1.986 0.0481,3.238 -0.057,-0.112 -0.90749,-0.104 -0.14441,0.06 -1.14817,1.597 -2.90964,1.246 -0.31378,0.03 -3.20561,-0.722 -0.0481,-7.666"
+ class="c48459"
+ id="Upshur, TX" />
+ <path
+ d="m 539.53741,427.62714 0.49742,-0.492 1.63846,-0.893 0.4261,-0.08 0.34588,0 1.13212,0.02 0.25852,0.09 1.0198,1.262 1.07685,0.738 1.9362,1.783 -8.30817,0.146 -0.0232,-2.562"
+ class="c48063"
+ id="Camp, TX" />
+ <path
+ d="m 549.14708,430.60814 11.75624,-0.243 0.0802,4.34 -1.31754,-0.49 -0.98236,-0.12 -1.35498,0.112 -2.29099,0.296 -0.6347,0.323 -2.36409,0.02 -3.79216,-2.233 -0.0963,-1.986 0.99663,-0.02"
+ class="c48315"
+ id="Marion, TX" />
+ <path
+ d="m 549.05794,421.62014 0.0481,0.222 0.16046,0.128 0.64362,0.126 7.20814,0.04 0.041,-0.07 -0.066,-0.208 -0.0553,-0.482 0.30665,-0.545 0.60083,-0.209 0.47425,-0.107 1.7276,0.277 0.40114,0.207 0.16224,0.361 0.12124,5.811 0.0713,3.189 -11.75624,0.243 -0.0891,-8.988"
+ class="c48067"
+ id="Cass, TX" />
+ <path
+ d="m 546.02706,419.46914 1.19987,0.788 1.83101,1.363 0.0891,8.988 -0.99663,0.02 -0.28169,-0.586 -1.9362,-1.783 0.0945,-8.791"
+ class="c48343"
+ id="Morris, TX" />
+ <path
+ d="m 546.02706,419.46914 -0.0945,8.791 -1.07685,-0.738 -1.0198,-1.263 -0.25852,-0.09 -1.13212,-0.02 -0.34588,0 -0.4261,0.08 -1.63846,0.893 -0.066,-8.194 6.0582,0.528"
+ class="c48449"
+ id="Titus, TX" />
+ <path
+ d="m 539.96886,418.94114 0.066,8.194 -0.49742,0.492 -2.99879,1.196 -0.0642,-9.563 0.0392,-0.03 3.4552,-0.289"
+ class="c48159"
+ id="Franklin, TX" />
+ <path
+ d="m 525.90737,422.94214 1.57606,-0.935 0.85934,-1.003 2.37835,-1.086 0.4582,-0.193 0.98057,-0.03 4.31455,-0.433 0.0642,9.563 -6.84622,0.09 -3.79216,-0.434 0.007,-5.535"
+ class="c48223"
+ id="Hopkins, TX" />
+ <path
+ d="m 525.98047,417.34914 1.48691,-0.692 0.35301,-0.1 2.65113,0.192 0.37083,0.06 2.09666,0.658 0.37084,0.161 1.93619,1.317 1.2284,0.225 0.0392,0.06 -0.0392,0.03 -4.31455,0.433 -0.98057,0.03 -0.4582,0.193 -2.37835,1.086 -0.85934,1.003 -1.57606,0.935 0.0499,-4.395 0.0232,-1.198"
+ class="c48119"
+ id="Delta, TX" />
+ <path
+ d="m 525.95729,418.54714 -0.0499,4.395 -0.007,5.535 -1.37459,3.286 -2.73849,-0.03 -4.24502,-0.08 0.0107,-3.229 0.0624,-8.549 8.34205,-1.324"
+ class="c48231"
+ id="Hunt, TX" />
+ <path
+ d="m 507.32095,418.57714 8.59165,0.232 1.70264,1.062 -0.0624,8.549 -4.22005,-0.03 -6.30066,-0.167 0.28882,-9.644"
+ class="c48085"
+ id="Collin, TX" />
+ <path
+ d="m 496.84302,417.87814 8.39019,0.426 2.08774,0.273 -0.28882,9.644 -3.59962,0.03 -7.03164,-0.216 0.44215,-10.157"
+ class="c48121"
+ id="Denton, TX" />
+ <path
+ d="m 486.62896,417.62114 8.22973,0.152 1.98433,0.105 -0.44215,10.157 -2.79554,-0.137 -7.24736,-0.289 0.27099,-9.988"
+ class="c48497"
+ id="Wise, TX" />
+ <path
+ d="m 477.03712,416.64114 8.44367,0.192 1.14817,0.788 -0.27099,9.988 -2.57982,-0.103 -7.11186,-0.273 0.34587,-8.959 0.025,-1.633"
+ class="c48237"
+ id="Jack, TX" />
+ <path
+ d="m 466.82306,417.95114 10.1891,0.323 -0.34587,8.959 -2.8936,1.155 -7.20636,-0.264 0.25673,-10.173"
+ class="c48503"
+ id="Young, TX" />
+ <path
+ d="m 456.92278,417.58214 9.90028,0.369 -0.25673,10.173 -2.78841,-0.1 -7.20101,-0.248 0.34587,-10.198"
+ class="c48447"
+ id="Throckmorton, TX" />
+ <path
+ d="m 447.02251,417.23614 9.90027,0.346 -0.34587,10.198 -2.70818,-0.1 -7.23132,-0.362 0.3851,-10.084"
+ class="c48207"
+ id="Haskell, TX" />
+ <path
+ d="m 436.97069,416.76914 10.05182,0.467 -0.3851,10.084 -2.98096,-0.121 -7.1921,-0.401 0.50634,-10.029"
+ class="c48433"
+ id="Stonewall, TX" />
+ <path
+ d="m 427.51256,406.22014 9.91632,0.449 -0.45819,10.1 -9.94842,-0.483 0.49029,-10.066"
+ class="c48125"
+ id="Dickens, TX" />
+ <path
+ d="m 428.09021,395.16314 1.8007,0.09 8.09245,0.374 -0.55448,11.045 -9.91632,-0.449 0.57765,-11.057"
+ class="c48345"
+ id="Motley, TX" />
+ <path
+ d="m 438.01545,385.58314 2.34625,0.12 -0.50633,10.021 -1.87201,-0.1 -8.09245,-0.374 0.54734,-10.052 7.5772,0.385"
+ class="c48191"
+ id="Hall, TX" />
+ <path
+ d="m 438.52891,375.52314 -0.51346,10.06 -7.5772,-0.385 -2.73314,-0.146 0.61866,-10.018 10.20514,0.489"
+ class="c48129"
+ id="Donley, TX" />
+ <path
+ d="m 428.86933,364.93214 10.11778,0.507 -0.4582,10.084 -10.20514,-0.489 0.54556,-10.102"
+ class="c48179"
+ id="Gray, TX" />
+ <path
+ d="m 429.41667,354.84714 0,-0.06 9.9395,0.53 0.12123,0 -0.49029,10.111 -10.11778,-0.507 0.009,-0.144 0.53843,-9.941"
+ class="c48393"
+ id="Roberts, TX" />
+ <path
+ d="m 432.37445,344.69914 7.48092,0.376 -0.4992,10.246 -9.9395,-0.53 0.55447,-10.212 2.40331,0.12"
+ class="c48357"
+ id="Ochiltree, TX" />
+ <path
+ d="m 439.85537,345.07514 9.94841,0.444 -0.37796,10.278 -9.94842,-0.469 -0.12123,0 0.4992,-10.246"
+ class="c48295"
+ id="Lipscomb, TX" />
+ <path
+ d="m 449.42582,355.79714 -0.16938,4.04 -0.24782,6.06 -10.02151,-0.458 0.49029,-10.111 9.94842,0.469"
+ class="c48211"
+ id="Hemphill, TX" />
+ <path
+ d="m 438.98711,365.43914 10.02151,0.458 -0.4261,10.093 -10.05361,-0.467 0.4582,-10.084"
+ class="c48483"
+ id="Wheeler, TX" />
+ <path
+ d="m 438.52891,375.52314 10.05361,0.467 -0.15333,3.519 -0.27278,6.565 -7.79471,-0.371 -2.34625,-0.12 0.51346,-10.06"
+ class="c48087"
+ id="Collingsworth, TX" />
+ <path
+ d="m 440.3617,385.70314 7.79471,0.371 -0.12836,4.275 -0.24961,5.769 -7.92307,-0.394 0.50633,-10.021"
+ class="c48075"
+ id="Childress, TX" />
+ <path
+ d="m 437.98336,395.62414 1.87201,0.1 7.92307,0.394 -0.0802,2.018 -0.21037,-0.411 -0.52952,0.05 -0.18542,0.202 -0.41719,9.085 -8.92683,-0.392 0.55448,-11.045"
+ class="c48101"
+ id="Cottle, TX" />
+ <path
+ d="m 437.42888,406.66914 8.92683,0.393 0.9895,0.05 -0.3227,10.125 -10.05182,-0.467 0.45819,-10.1"
+ class="c48269"
+ id="King, TX" />
+ <path
+ d="m 457.16347,409.85914 -0.24069,7.723 -9.90027,-0.346 0.3227,-10.125 3.05227,0.129 2.56377,0.497 2.91677,0.644 0.96453,0.683 0.27278,0.497 0.0481,0.298"
+ class="c48275"
+ id="Knox, TX" />
+ <path
+ d="m 447.69821,398.13614 3.43916,2.659 4.88506,1.576 1.13391,-0.187 0.21573,-0.225 0.0731,-0.225 -0.21751,5.804 -0.0642,2.321 -0.0481,-0.298 -0.27278,-0.497 -0.96453,-0.683 -2.91677,-0.644 -2.56377,-0.497 -3.05227,-0.129 -0.9895,-0.05 0.41719,-9.086 0.18542,-0.201 0.52952,-0.05 0.21037,0.412"
+ class="c48155"
+ id="Foard, TX" />
+ <path
+ d="m 450.78258,391.72214 0.98058,1.271 0.47424,0.561 1.31754,1.254 0.57943,0.137 0.16046,0 0.73098,0 0.73276,-0.925 0.10341,-0.04 0.20859,0.03 0.90035,0.105 0.28883,0.121 0.46711,0.273 -0.2817,7.231 -0.0731,0.225 -0.21573,0.225 -1.13391,0.187 -4.88506,-1.576 -3.43916,-2.658 0.0802,-2.019 0.24961,-5.769 2.75453,1.373"
+ class="c48197"
+ id="Hardeman, TX" />
+ <path
+ d="m 467.15289,407.87514 10.05895,0.24 -0.17472,8.526 -0.025,1.633 -10.1891,-0.323 0.32983,-10.076"
+ class="c48009"
+ id="Archer, TX" />
+ <path
+ d="m 467.15289,407.87514 -0.32983,10.076 -9.90028,-0.369 0.24069,-7.723 0.0642,-2.321 9.92524,0.337"
+ class="c48023"
+ id="Baylor, TX" />
+ <path
+ d="m 462.64401,396.10014 -0.0232,0.532 -0.0161,0.499 0.32805,1.783 0,0 0.009,0.01 0.24069,0.07 0.3851,0.119 0.7078,0.161 0.35301,-0.02 0.76307,-0.01 1.74364,0.138 0.025,0 0.26565,0.133 -0.27278,8.351 -9.92524,-0.337 0.21751,-5.803 0.2817,-7.231 0.61865,0.586 0.63471,0.06 0.14441,-0.06 0.016,0 0.025,-0.04 0.007,-0.02 0.8112,-1.454 0.82725,0.45 0.94136,0.506 0.89143,1.551 0,0.02"
+ class="c48487"
+ id="Wilbarger, TX" />
+ <path
+ d="m 473.87788,400.51314 0.19255,0.01 0.41897,0.277 0.43324,0.369 0.89856,1.446 0.54021,0.194 0.007,0 0.016,-0.02 1.01267,-0.909 -0.18542,6.22 -10.05895,-0.241 0.27278,-8.351 1.75078,1.047 1.74365,0.426 1.23731,0.05 1.72047,-0.53"
+ class="c48485"
+ id="Wichita, TX" />
+ <path
+ d="m 483.34313,403.69514 0.32983,0.66 0.0481,0.05 0.0321,0 0.80408,0.241 0.41006,0 0.0232,0 0.65967,-0.161 0.7078,0.28 0.007,0 -0.16938,1.229 -0.49028,1.061 -0.22465,9.771 -8.44367,-0.192 0.17472,-8.526 0.18542,-6.22 0.76307,-0.965 0.36905,-0.208 0.72385,0.162 2.94173,0.923 1.14817,1.888"
+ class="c48077"
+ id="Clay, TX" />
+ <path
+ d="m 495.09225,406.63714 -0.23356,11.136 -8.22973,-0.152 -1.14817,-0.788 0.22465,-9.771 0.21037,0.194 1.67768,0.765 0.22643,0.02 0.59369,-0.176 0.94849,-0.747 0.99663,-1.036 0.65074,-0.82 1.9362,1.292 0.68284,0.476 1.46374,-0.394"
+ class="c48337"
+ id="Montague, TX" />
+ <path
+ d="m 505.33662,406.00114 -0.10341,12.303 -8.39019,-0.426 -1.98433,-0.105 0.23356,-11.136 0.37618,1.719 0.0499,0.119 0.0161,0.04 0,0 0.11232,0.136 0.16759,0.112 5.53759,2.42 0.26565,0.09 0.30487,0.04 0.27278,-0.09 0.19255,-0.153 0.0891,-0.119 2.85973,-4.96"
+ class="c48097"
+ id="Cooke, TX" />
+ <path
+ d="m 526.2372,408.58914 -0.25673,8.76 -0.0232,1.198 -8.34205,1.324 -1.70264,-1.062 0.12837,-7.617 0.18363,0.252 2.83655,-0.701 0.39401,-0.105 0.34588,-0.148 0.0232,-0.03 0.17828,-0.185 0.0232,-0.03 0.009,-0.02 0.0481,-0.154 0.0553,-0.176 0.016,-0.06 0.009,-0.06 0.11945,-0.555 0.16046,-0.563 0.96454,-0.223 2.13766,-0.178 0.41006,-0.03 0.25851,-0.03 1.10003,0.217 0.92353,0.169"
+ class="c48147"
+ id="Fannin, TX" />
+ <path
+ d="m 505.52203,405.89714 0.96454,1.983 0.312,0.349 0.19255,0.134 1.79357,0.549 0.92352,-0.155 0.0161,0 1.9041,-0.859 -0.0642,0.369 0.016,0.283 0.016,0.111 0.0161,0.06 1.95224,1.31 0.17651,0.122 0.025,0 0.97344,-0.186 0.22464,0.03 0.24961,0.08 0,0 0.82725,1.125 -0.12837,7.617 -8.59165,-0.232 -2.08774,-0.273 0.10341,-12.303 0.18541,-0.104"
+ class="c48181"
+ id="Grayson, TX" />
+ <path
+ d="m 536.35499,407.83314 0.11945,11.338 -1.2284,-0.225 -1.93619,-1.317 -0.37084,-0.161 -2.09666,-0.658 -0.37083,-0.06 -2.65113,-0.192 -0.35301,0.1 -1.48691,0.692 0.25673,-8.76 1.63133,-0.611 0.007,0 1.5921,-0.829 1.39064,-0.722 0.61687,0.03 0.14441,0.06 0.20147,0.513 -0.005,0.154 -0.0571,0.162 0.005,0.118 0,0.02 0.0749,0.128 0.0713,0.06 1.88093,0.25 0.71315,0.06 1.28723,-0.06 0.009,0 0.55448,-0.07"
+ class="c48277"
+ id="Lamar, TX" />
+ <path
+ class="c48007"
+ d="m 497.54904,540.95014 0.3958,0.322 0.0642,0 1.82388,-0.884 2.57981,-1.945 0.12658,-0.346 -0.42432,-0.01 -0.44215,-0.06 -0.7809,-0.468 -0.45641,-0.611 -0.0321,-0.467 6.76599,-0.986 -0.16938,1.059 0.24069,0.387 0,0.128 -0.27278,0.594 -0.20146,0.153 -2.56199,2.106 -0.57051,0 -1.77753,2.3 -1.79,2.715 -2.51741,-3.995 m 8.79311,-0.73 -0.4992,1.156 -3.96867,5.079 -0.10519,-0.291 4.57306,-5.944"
+ id="Aransas, TX" />
+ <path
+ class="c48061"
+ d="m 484.51626,580.10714 6.9425,1.23 2.24285,-1.494 0.8112,-1.007 0.0981,0.05 0.96275,1.349 -0.0553,1.929 0.72206,3.584 1.54219,2.565 0.0499,0.06 -0.24247,0.786 -3.7993,2.277 -1.84884,-0.565 -0.2906,-0.177 -0.28705,-0.223 -1.19095,-0.941 -1.75078,-1.952 -0.0731,-0.259 -2.37835,-0.415 -1.58319,-0.275 0.12837,-6.518 m 12.94542,-1.229 0.35301,0 0.57052,2.395 0.17828,0.9 0.24069,1.696 0.36192,2.861 -0.0963,-0.02 -0.0571,0 -0.16759,-0.233 -0.18542,-1.549 0.0232,-0.708 -0.0963,-0.845 -0.20146,-1.3 -0.40115,-1.872 -0.24069,-0.731 -0.28169,-0.588"
+ id="Cameron, TX" />
+ <path
+ d="m 290.67551,284.70714 -0.78803,8.01 -0.86112,6.237 -1.27654,9.094 -1.57427,11.154 -17.25283,-2.452 -5.95479,-0.9 -2.93995,-0.58 -4.60516,-0.697 -11.93274,-1.872 0.55447,0.05 1.32645,0.03 6.14734,-1.366 0.60974,-0.209 1.27832,-1.109 3.52652,-3.335 0.30665,-0.484 1.9772,-3.728 4.08991,-4.788 3.66379,-2.001 3.16638,-2.492 2.27316,-1.958 0.10519,-0.07 1.63132,-0.756 0.52239,-0.547 0.18363,-1.155 -0.0232,-0.972 -0.8843,-5.047 -0.0161,-0.08 -0.32804,-0.434 17.07454,2.452"
+ class="c49037"
+ id="San Juan, UT" />
+ <path
+ d="m 228.92225,283.30014 0.62757,0.05 6.77312,1.188 0.4261,0.128 0.86826,0.178 0.63292,0.1 1.93798,0.212 7.58433,1.284 5.06335,0.773 21.31064,3.284 -1.63132,0.756 -0.10519,0.07 -2.27316,1.958 -3.16638,2.492 -3.66379,2.001 -4.08991,4.788 -21.34273,-3.43 -0.0892,0.06 -0.15332,0 -9.0552,-1.574 -2.4354,-0.57 -3.27692,-0.589 0.65075,-4.248 0.30487,-1.764 2.27494,-1.396 1.41382,0.06 0.57765,0.1 0.36905,-1.983 0.46712,-3.913"
+ class="c49017"
+ id="Garfield, UT" />
+ <path
+ d="m 259.6821,212.98014 1.52614,0.521 1.23909,3.473 -0.10519,0.419 -0.16937,0.321 -0.2086,0.265 -0.44928,0.392 -1.88093,0.312 -2.85259,0.981 -0.32983,0.2 -0.29774,0.276 -0.78624,0.777 -0.0339,0.147 0.0178,0.483 0.0553,0.119 0.0963,0.08 0.73098,0.933 0.50812,1.285 0.0553,0.346 -0.93958,1.414 -0.2496,0.112 -0.28882,0.06 -0.15333,-0.02 -1.34963,-0.657 -1.42986,-1.698 -0.94136,-6.685 -0.19968,-0.797 0.11232,-0.359 0.37619,-0.167 0.97344,-0.284 0.41006,0.05 0.4582,0.145 0.11945,0.33 0.29774,0.401 0.51347,0.226 0.4992,-0.04 2.8205,-0.529 0.5937,-0.46 0.53843,-0.553 0.16937,-0.339 0.55447,-1.469"
+ class="c49029"
+ id="Morgan, UT" />
+ <path
+ d="m 251.44524,216.82814 0.94136,6.685 -0.2817,0.13 -0.47424,0.136 -1.63133,0.257 -0.78802,-0.136 -0.42433,-0.08 0.0143,-1.92 0.0731,-0.403 -0.82012,-0.137 -2.61012,1.248 -2.34626,1.388 -2.70817,-7.6 4.36268,-0.699 1.0929,-0.139 2.67608,0.465 2.92391,0.805"
+ class="c49011"
+ id="Davis, UT" />
+ <path
+ d="m 258.38774,211.32414 1.29436,1.656 -0.55447,1.469 -0.16937,0.339 -0.53843,0.553 -0.5937,0.46 -2.8205,0.529 -0.4992,0.04 -0.51347,-0.226 -0.29774,-0.401 -0.11945,-0.33 -0.4582,-0.145 -0.41006,-0.05 -0.97344,0.284 -0.37619,0.167 -0.11232,0.359 0.19968,0.797 -2.92391,-0.805 -2.67608,-0.465 -1.0929,0.139 -4.36268,0.699 5.3593,-5.174 3.54256,0.608 1.23018,-0.456 1.53506,-1.182 0.0963,0.522 0.0891,0.159 1.65451,0.964 0.28169,0.04 4.20936,-0.549"
+ class="c49057"
+ id="Weber, UT" />
+ <path
+ d="m 268.3522,199.37314 -2.73136,17.143 -4.10595,1.855 0.44928,-0.392 0.2086,-0.265 0.16937,-0.321 0.10519,-0.419 -1.23909,-3.473 -1.52614,-0.521 -1.29436,-1.656 1.8007,-2.762 0.90748,-2.212 0.007,-0.111 -0.15155,-6.342 -0.33696,-1.729 7.73766,1.205"
+ class="c49033"
+ id="Rich, UT" />
+ <path
+ d="m 249.58036,196.38514 0.91818,0.146 10.116,1.637 0.33696,1.729 0.15155,6.342 -0.007,0.111 -0.90748,2.212 -1.8007,2.762 -4.20936,0.549 -0.28169,-0.04 -1.65451,-0.964 -0.0891,-0.159 -0.0963,-0.522 -0.0571,-1.666 -0.0232,-0.775 -0.30666,-0.547 -0.0713,-0.06 -0.85221,-0.162 -0.15155,-3.036 0.312,-1.97 0.20147,-0.915 -0.16937,-1.328 -0.40115,-0.986 -0.51525,-0.676 -0.44215,-1.681"
+ class="c49005"
+ id="Cache, UT" />
+ <path
+ d="m 218.13767,190.73014 1.11786,0.282 1.3425,0.32 0.19968,0.04 1.42986,0.249 0.53129,0.09 5.58395,0.95 0.49029,0.08 6.7339,1.139 4.89398,0.828 4.33059,0.748 3.55148,0.614 0.009,0 1.2284,0.317 0.44215,1.681 0.51525,0.676 0.40115,0.986 0.16937,1.328 -0.20147,0.915 -0.312,1.97 0.15155,3.036 0.85221,0.162 0.0713,0.06 0.30666,0.547 0.0232,0.775 0.0571,1.666 -1.53506,1.182 -1.23018,0.456 -3.54256,-0.608 -5.3593,5.174 -5.50551,0.826 -21.09313,-3.903 4.34664,-22.589"
+ class="c49003"
+ id="Box Elder, UT" />
+ <path
+ d="m 298.784,227.33014 -1.07685,7.964 -1.28723,-0.185 -0.55447,-0.779 0.21037,-1.501 0.0784,-0.847 -0.4475,-1.758 -3.28048,-0.451 -2.33021,0.435 -5.49481,0.538 -0.58834,0.02 -1.7276,-1.324 -0.37619,-0.154 0.61687,-4.202 0.0178,0 2.46571,0.353 2.3944,0.337 0.66857,0.1 8.01757,1.07 2.69391,0.392"
+ class="c49009"
+ id="Daggett, UT" />
+ <path
+ d="m 243.09784,223.99614 2.34626,-1.388 2.61012,-1.248 0.82012,0.137 -0.0731,0.403 -0.0143,1.92 0.42433,0.08 0.78802,0.136 1.63133,-0.257 0.47424,-0.136 0.2817,-0.13 1.42986,1.698 0.78624,4.587 -0.81833,0.62 -1.73652,0.787 -4.87793,1.679 -0.66679,0.144 -2.09666,-0.985 -0.97166,-0.781 -0.33697,-7.266"
+ class="c49035"
+ id="Salt Lake, UT" />
+ <path
+ d="m 265.62084,216.51614 -0.93244,5.801 9.29588,1.535 7.73053,1.109 0.8112,0.121 -0.61687,4.202 -2.86151,-0.403 -3.2466,-0.208 -8.72715,0.417 -1.06794,0.933 -1.31041,1.502 -0.26386,0.225 -0.77912,0.137 -2.6119,0.193 -1.31933,-0.747 -1.77573,-1.471 -3.34289,-0.06 -0.78624,-4.587 1.34963,0.657 0.15333,0.02 0.28882,-0.06 0.2496,-0.112 0.93958,-1.414 -0.0553,-0.346 -0.50812,-1.285 -0.73098,-0.933 -0.0963,-0.08 -0.0553,-0.119 -0.0178,-0.483 0.0339,-0.147 0.78624,-0.777 0.29774,-0.276 0.32983,-0.2 2.85259,-0.981 1.88093,-0.312 4.10595,-1.855"
+ class="c49043"
+ id="Summit UT" />
+ <path
+ d="m 254.6027,229.79814 3.34289,0.06 1.77573,1.471 1.31933,0.747 2.6119,-0.193 0.77912,-0.137 0.26386,-0.225 1.31041,-1.502 -0.91639,5.649 -1.06794,8.006 -0.65967,4.191 -3.31079,-0.537 -2.16083,-3.585 -0.11232,-0.241 -0.025,-0.192 0.73097,-1.567 -0.312,-2.764 -0.19433,-0.417 -0.41719,-0.683 -0.0713,-0.06 -1.99325,-1.109 -1.90589,-1.134 -0.34409,-1.743 0.11232,-0.935 0.42611,-2.487 0.81833,-0.62"
+ class="c49051"
+ id="Wasatch, UT" />
+ <path
+ d="m 253.78437,230.41814 -0.42611,2.487 -0.11232,0.935 0.34409,1.743 1.90589,1.134 1.99325,1.109 0.0713,0.06 0.41719,0.683 0.19433,0.417 0.312,2.764 -0.73097,1.567 0.025,0.192 0.11232,0.241 2.16083,3.585 3.31079,0.537 0.27278,2.068 -6.74994,-1.08 -6.83018,-1.116 -1.88806,-0.289 0.27278,-0.876 0.0178,-0.413 -0.50633,-1.426 -0.0891,-0.131 -0.39401,-0.353 -1.7276,0.854 -1.17313,1.364 -0.0481,0.275 -0.15154,0.183 -1.06259,0.387 -0.46533,0.08 -0.46711,-0.147 -0.19077,-0.103 0.49742,-1.59 0.15333,-0.369 0.28882,-0.339 0.12837,-0.145 -0.76485,-2.009 -0.63292,-0.891 -0.3227,-0.17 0.66858,-1.695 0.57051,-2.257 -0.30665,-1.471 -0.0642,-1.357 0.27278,-3.386 0.0571,-0.153 0.41897,-0.143 0.28883,0.09 0.97166,0.781 2.09666,0.985 0.66679,-0.144 4.87793,-1.679 1.73652,-0.787"
+ class="c49049"
+ id="Utah, UT" />
+ <path
+ d="m 213.79103,213.31914 21.09313,3.903 5.50551,-0.826 2.70817,7.6 0.33697,7.266 -0.28883,-0.09 -0.41897,0.143 -0.0571,0.153 -0.27278,3.386 0.0642,1.357 0.30665,1.471 -0.57051,2.257 -0.66858,1.695 -1.18918,1.006 -0.47424,0.326 -1.55823,0.637 -6.57344,-1.141 -22.80469,-4.274 0.93244,-4.799 3.92945,-20.07"
+ class="c49045"
+ id="Tooele, UT" />
+ <path
+ d="m 241.52892,241.63414 0.3227,0.17 0.63292,0.891 0.76485,2.009 -0.12837,0.145 -0.28882,0.339 -0.15333,0.369 -0.49742,1.59 0.19077,0.103 0.46711,0.147 0.46533,-0.08 1.06259,-0.387 0.15154,-0.183 0.0481,-0.275 1.17313,-1.364 1.7276,-0.854 0.39401,0.353 0.0891,0.131 0.50633,1.426 -0.0178,0.413 -0.27278,0.876 1.88806,0.289 -0.28882,1.681 -1.48692,0.811 -0.46532,3.357 -0.33875,2.017 -0.88252,1.667 -3.05406,-0.485 -1.79891,0.749 -0.0891,0.504 -0.98057,-0.176 -2.08774,-0.699 0.27277,-1.118 0.47246,-2.459 0.10519,-1.075 -0.0392,-0.224 -0.29061,-0.316 -3.75116,-0.64 -1.18917,-0.178 -22.7726,-4.163 -4.05959,-0.546 1.59923,-8.26 22.80469,4.274 6.57344,1.141 1.55823,-0.637 0.47424,-0.326 1.18918,-1.006"
+ class="c49023"
+ id="Juab, UT" />
+ <path
+ d="m 207.32991,246.44814 4.05959,0.546 22.7726,4.163 1.18917,0.178 3.75116,0.64 0.29061,0.316 0.0392,0.224 -0.10519,1.075 -0.47246,2.459 -0.27277,1.118 2.08774,0.699 0.98057,0.176 -1.0198,6.158 -4.69251,5.809 -2.72601,1.421 -0.29596,-0.06 -1.3104,-0.169 -0.36014,0.112 -0.42611,0.612 -0.83617,1.558 -5.05443,-0.898 0.007,-0.05 -2.04139,-0.411 -19.85582,-3.607 0.46711,-2.38 3.82426,-19.694"
+ class="c49027"
+ id="Millard, UT" />
+ <path
+ d="m 253.08548,266.57914 -0.27456,1.87 -1.06081,6.366 -0.1355,-0.03 -0.57943,3.712 -8.15485,-1.149 -5.20776,-0.884 0.0321,-0.192 -1.10894,-0.225 -6.91932,-1.148 0.30665,-1.416 0.83617,-1.558 0.42611,-0.612 0.36014,-0.112 1.3104,0.169 0.29596,0.06 2.72601,-1.421 4.69251,-5.809 2.86864,0.48 0.23356,0.331 9.35293,1.568"
+ class="c49041"
+ id="Sevier, UT" />
+ <path
+ d="m 256.88478,248.85714 -1.27654,7.917 -0.94135,-0.151 -1.58141,9.956 -9.35293,-1.568 -0.23356,-0.331 -2.86864,-0.48 1.0198,-6.158 0.0891,-0.504 1.79891,-0.749 3.05406,0.485 0.88252,-1.667 0.33875,-2.017 0.46532,-3.357 1.48692,-0.811 0.28882,-1.681 6.83018,1.116"
+ class="c49039"
+ id="Sanpete, UT" />
+ <path
+ d="m 256.88478,248.85714 6.74994,1.08 5.54651,0.899 0.22464,0.07 0.0945,0.09 9.55618,1.465 1.43699,0.218 0.11232,0.31 0.009,0.162 -0.0802,0.06 -0.0731,-0.01 -1.10003,0.633 -0.78803,0.685 -1.28545,2.487 -0.25673,0.727 -0.11232,1.036 0.007,1.269 -18.35286,-2.845 -0.25674,-1.63 -1.47087,-3.906 -0.18363,-0.232 -0.17829,-0.09 0.40115,-2.485"
+ class="c49007"
+ id="Carbon, UT" />
+ <path
+ d="m 281.90914,229.28414 0.37619,0.154 -2.03961,13.972 -0.54021,3.953 -0.64896,5.104 -9.55618,-1.465 -0.0945,-0.09 -0.22464,-0.07 -5.54651,-0.899 -0.27278,-2.068 0.65967,-4.191 1.06794,-8.006 0.91639,-5.649 1.06794,-0.933 8.72715,-0.417 3.2466,0.208 2.86151,0.403"
+ class="c49013"
+ id="Duchesne, UT" />
+ <path
+ d="m 282.28533,229.43814 1.7276,1.324 0.58834,-0.02 5.49481,-0.538 2.33021,-0.435 3.28048,0.451 0.4475,1.758 -0.0784,0.847 -0.21037,1.501 0.55447,0.779 1.28723,0.185 -1.40668,9.883 -1.79179,12.906 -0.51346,3.737 -1.08577,0.681 -16.00661,-2.289 0.0232,-0.168 -0.007,-1.269 0.11232,-1.036 0.25673,-0.727 1.28545,-2.487 0.78803,-0.685 1.10003,-0.633 0.0731,0.01 0.0802,-0.06 -0.009,-0.162 -0.11232,-0.31 -1.43699,-0.218 0.64896,-5.104 0.54021,-3.953 2.03961,-13.972"
+ class="c49047"
+ id="Uintah, UT" />
+ <path
+ d="m 293.99522,261.82014 -1.19096,8.556 -0.60974,4.172 -0.12837,0.884 -0.69175,4.227 -0.69889,5.048 -17.07454,-2.452 0.6347,-0.499 0.24069,-0.843 0,-1.086 -0.041,-0.209 -0.47424,0.136 -0.47425,0.02 -0.14441,-0.04 -0.0713,-0.06 -0.0499,-0.12 -0.39223,-2.756 0.0392,-4.588 0.46711,-2.758 0.91461,-2.465 0.28169,-0.555 0.0802,-0.112 0.97167,-1.689 1.05367,-2.126 0.25674,-1.001 0.009,-1.285 16.00661,2.289 1.08577,-0.681"
+ class="c49019"
+ id="Grand, UT" />
+ <path
+ d="m 256.48363,251.34214 0.17829,0.09 0.18363,0.232 1.47087,3.906 0.25674,1.63 18.35286,2.845 -0.0232,0.168 -0.009,1.285 -0.25674,1.001 -1.05367,2.126 -0.97167,1.689 -0.0802,0.112 -0.28169,0.555 -0.91461,2.465 -0.46711,2.758 -0.0392,4.588 0.39223,2.756 0.0499,0.12 0.0713,0.06 0.14441,0.04 0.47425,-0.02 0.47424,-0.136 0.041,0.209 0,1.086 -0.24069,0.843 -0.6347,0.499 -22.60501,-3.519 0.0392,-0.235 0.57943,-3.712 0.1355,0.03 1.06081,-6.366 0.27456,-1.871 1.58141,-9.955 0.94135,0.151 0.87539,-5.432"
+ class="c49015"
+ id="Emery, UT" />
+ <path
+ d="m 242.88033,277.35214 8.15485,1.149 -0.0392,0.235 22.60501,3.519 0.32804,0.434 0.0161,0.08 0.8843,5.047 0.0232,0.972 -0.18363,1.155 -0.52239,0.547 -21.31064,-3.284 -5.06335,-0.773 -7.58433,-1.284 0.32092,-1.892 0.62757,-4.386 0.56873,-0.666 1.17491,-0.853"
+ class="c49055"
+ id="Wayne, UT" />
+ <path
+ d="m 229.6764,274.90314 6.91932,1.148 1.10894,0.225 -0.0321,0.192 5.20776,0.884 -1.17491,0.853 -0.56873,0.666 -0.62757,4.386 -0.32092,1.892 -1.93798,-0.212 -0.63292,-0.1 -0.86826,-0.178 -0.4261,-0.128 -6.77312,-1.188 1.56714,-2.146 0.63292,-0.61 0.44215,-1.086 -0.0232,-0.196 -0.81299,-1.701 -0.84329,-0.649 -0.89857,-1.102 -0.0178,-0.201 0.0802,-0.754"
+ class="c49031"
+ id="Piute, UT" />
+ <path
+ d="m 203.03854,268.52214 19.85582,3.607 2.04139,0.411 -0.007,0.05 5.05443,0.898 -0.30665,1.416 -0.0802,0.754 0.0178,0.201 0.89857,1.102 0.84329,0.649 0.81299,1.701 0.0232,0.196 -0.44215,1.086 -0.63292,0.61 -1.56714,2.146 -0.62757,-0.05 -27.73076,-5.12 1.84705,-9.658"
+ class="c49001"
+ id="Beaver, UT" />
+ <path
+ d="m 201.19149,278.18014 27.73076,5.12 -0.46712,3.913 -0.36905,1.983 -0.57765,-0.1 -1.41382,-0.06 -2.27494,1.396 -0.30487,1.764 -0.65075,4.248 -4.05959,0.298 -2.42649,-0.408 -0.71493,0.248 -1.33358,-0.05 -1.88093,-0.531 -3.63884,-2.296 -1.79357,-1.599 -8.25112,-1.568 2.42649,-12.367"
+ class="c49021"
+ id="Iron, UT" />
+ <path
+ d="m 198.765,290.54714 8.25112,1.568 1.79357,1.599 3.63884,2.296 1.88093,0.531 1.33358,0.05 0.71493,-0.248 2.42649,0.408 -2.01643,11.394 -20.63493,-3.84 2.6119,-13.757"
+ class="c49053"
+ id="Washington, UT" />
+ <path
+ d="m 218.80446,296.75014 4.05959,-0.298 3.27692,0.589 2.4354,0.57 9.0552,1.574 0.15332,0 0.0892,-0.06 21.34273,3.431 -1.9772,3.727 -0.30665,0.484 -3.52652,3.335 -1.27832,1.109 -0.60974,0.209 -6.14734,1.366 -1.32645,-0.03 -0.55447,-0.05 -20.25697,-3.414 -6.44508,-1.143 2.01643,-11.394"
+ class="c49025"
+ id="Kane, UT" />
+ <path
+ d="m 886.99558,273.29514 6.5467,-2.227 -0.61866,1.754 -1.40668,2.312 -0.49742,0.1 -0.1462,0.103 -0.0464,0.06 -0.0571,0.06 -0.11232,0.138 -0.0713,0.114 -0.0731,0.112 -0.066,0.104 -0.24782,0.515 -0.32092,0.848 -0.53129,2.429 -0.0624,0.442 -0.45998,5.12 0.0731,0.2 -0.91639,0.41 -1.57428,0.121 -0.12123,-0.08 -0.0731,-0.169 0.025,-0.06 0.10519,-0.07 0.14441,-0.24 -0.0945,-0.933 -1.01445,-0.41 -1.7383,0.517 -0.10341,-0.194 -0.0214,-0.121 0.11054,-0.883 0.16224,-0.572 1.19809,-3.568 0.83438,-1.228 0.28883,-0.387 0.0838,-0.167 0.30309,-0.903 0.0143,-0.28 -0.10341,-1.814 0.58835,-1.15"
+ class="c51001"
+ id="Accomack, VA" />
+ <path
+ d="m 883.64022,284.56214 1.7383,-0.517 1.01445,0.41 0.0945,0.933 -0.14441,0.24 -0.10519,0.07 -0.025,0.06 0.0731,0.169 0.12123,0.08 1.57428,-0.121 0.91639,-0.41 0.0874,0.168 0.009,0.377 -1.207,5.994 -0.18186,0.339 -0.20146,0.355 -0.005,0.02 -0.78981,1.221 -0.0267,0.05 -0.13015,0.174 -0.14263,0.129 -0.10163,0 -1.09468,-0.09 -1.14104,-1.567 -0.47424,-1.132 -0.11054,-0.724 -0.0571,-0.674 0.007,-0.33 0.0874,-2.444 0.0802,-1.583 0.0571,-0.523 0.0784,-0.672"
+ class="c51131"
+ id="Northampton, VA" />
+ <path
+ d="m 776.31323,304.29514 0.81121,0.483 -0.25139,0.113 -0.8112,0.731 -0.0481,0.153 0.12837,0.344 1.55109,2.202 1.51188,1.317 0.007,0 0.2086,0.107 2.04316,0.738 -0.35657,0.988 -1.78287,1.15 -0.4582,0.553 -1.62241,0.709 -0.19968,0.152 -0.12123,0.378 -0.0321,0.314 0.007,0.52 -0.16045,0.275 -0.68284,0.49 -1.166,0.161 -0.1355,-0.03 -3.72085,-5.506 5.28086,-6.347"
+ class="c51027"
+ id="Buchanan, VA" />
+ <path
+ d="m 787.87336,307.22814 2.8205,1.97 -0.47246,1.524 -2.01642,3.022 -0.52238,1.198 -1.36747,0.402 -1.07507,0.458 -2.13944,0.948 -1.42095,0.314 -2.81337,-3.89 0.4582,-0.553 1.78287,-1.15 0.35657,-0.988 1.20344,0.715 2.10557,-0.417 0.0571,-0.03 0.78803,-0.724 0.0143,-0.02 1.57428,-1.44 0.66679,-1.341"
+ class="c51185"
+ id="Tazewell, VA" />
+ <path
+ d="m 788.92704,316.10114 2.80445,4.001 -5.78363,3.808 -0.22642,0.146 -1.99325,-3.342 -2.96491,-2.821 0.91639,-0.829 1.42095,-0.314 2.13944,-0.948 1.07507,-0.458 1.36747,-0.402 1.24444,1.159"
+ class="c51173"
+ id="Smyth, VA" />
+ <path
+ d="m 776.30432,326.38514 -1.76861,0.241 0.90748,-1.823 0.60083,-0.361 0.46889,-0.03 0.30488,0.145 0.14441,0.449 -0.0392,0.498 -0.61866,0.884"
+ class="c51520"
+ id="Bristol, VA" />
+ <path
+ d="m 780.76328,317.89314 2.96491,2.821 1.99325,3.342 0.22642,-0.146 -0.65253,0.731 -3.26978,0.442 -1.74543,0.209 -0.12837,0.538 -3.84743,0.555 0.61866,-0.884 0.0392,-0.498 -0.14441,-0.449 -0.30488,-0.145 -0.46889,0.03 -0.60083,0.361 -0.90748,1.823 -0.91461,0.137 -1.0715,-2.514 3.54434,-3.256 2.66896,-1.31 2.00038,-1.79"
+ class="c51191"
+ id="Washington, VA" />
+ <path
+ d="m 778.8663,313.17414 2.81337,3.89 -0.91639,0.829 -2.00038,1.79 -2.66896,1.31 -3.54434,3.256 -1.90233,-3.633 1.10895,-2.37 2.997,-2.098 0.1355,0.03 1.166,-0.161 0.68284,-0.49 0.16045,-0.275 -0.007,-0.52 0.0321,-0.314 0.12123,-0.378 0.19968,-0.152 1.62241,-0.709"
+ class="c51167"
+ id="Russell, VA" />
+ <path
+ d="m 766.60372,318.70414 0.025,-0.16 0.3548,0.176 0.16758,0.166 0.0339,0.483 -0.41184,0.886 -0.63471,0.186 -0.54555,-0.476 0.066,-0.403 0.31022,-0.569 0.41185,-0.258 0.22285,-0.03"
+ class="c51720"
+ id="Norton, VA" />
+ <path
+ d="m 766.93534,313.55214 0.37618,1.718 1.39777,1.785 0.36193,0.38 2.11448,1.244 0.27278,-0.128 0.29774,-0.305 -1.10895,2.37 -2.55485,0.226 -1.2694,0.216 -0.29953,0.1 -1.92015,1.365 -0.30487,0.537 0,0.25 -2.39439,-2.011 0.0731,-1.742 4.75669,-5.866 0.20147,-0.137 z m -0.33162,5.152 -0.22285,0.03 -0.41185,0.258 -0.31022,0.569 -0.066,0.403 0.54555,0.476 0.63471,-0.186 0.41184,-0.886 -0.0339,-0.483 -0.16758,-0.166 -0.3548,-0.176 -0.025,0.16"
+ class="c51195"
+ id="Wise, VA" />
+ <path
+ d="m 771.03237,310.64214 3.72085,5.506 -2.997,2.098 -0.29774,0.305 -0.27278,0.128 -2.11448,-1.244 -0.36193,-0.38 -1.39777,-1.785 -0.37618,-1.718 0.70601,-0.507 2.71532,-1.531 0.6757,-0.872"
+ class="c51051"
+ id="Dickenson, VA" />
+ <path
+ d="m 764.29847,323.30814 0,-0.25 0.30487,-0.537 1.92015,-1.365 0.29953,-0.1 1.2694,-0.216 2.55485,-0.226 1.90233,3.633 1.0715,2.514 -5.7141,0.852 -4.01859,0.571 -2.80445,0.385 0.41719,-1.969 0.71671,-0.65 2.08061,-2.644"
+ class="c51169"
+ id="Scott, VA" />
+ <path
+ d="m 764.29847,323.30814 -2.08061,2.644 -0.71671,0.65 -0.41719,1.969 -8.86265,1.118 -3.70302,0.41 3.70302,-1.987 1.84706,-0.987 3.81712,-2.161 3.64062,-3.006 0.37797,-0.661 2.39439,2.011"
+ class="c51105"
+ id="Lee, VA" />
+ <path
+ d="m 790.69386,309.19814 4.19688,-2.025 2.77949,2.973 -0.7702,1.864 -2.10557,0.998 -1.519,0.578 -1.89698,-0.106 -1.0091,0.837 -1.44234,1.784 -1.24444,-1.159 0.52238,-1.198 2.01642,-3.022 0.47246,-1.524"
+ class="c51021"
+ id="Bland, VA" />
+ <path
+ d="m 795.53257,318.48714 2.17867,2.451 -0.12302,0.161 -0.0642,0.392 0.0267,0.249 0.11054,0.209 0.48316,0.587 0.36192,-0.09 0.16937,-0.201 -0.025,-0.298 1.48691,1.608 -1.16599,0.121 -8.22795,0.997 -5.92269,0.596 0.47424,-0.63 0.65253,-0.731 5.78363,-3.808 3.80108,-1.615"
+ class="c51077"
+ id="Grayson, VA" />
+ <path
+ d="m 797.71124,320.93814 0.007,0 0.16224,-0.144 0.19255,-0.266 0.58478,-0.151 0.55626,0.09 -0.23356,0.669 -0.34766,0.61 0.0178,0.208 0.025,0.298 -0.16937,0.201 -0.36192,0.09 -0.48316,-0.587 -0.11054,-0.208 -0.0267,-0.25 0.0642,-0.392 0.12302,-0.161"
+ class="c51640"
+ id="Galax, VA" />
+ <path
+ d="m 800.71537,315.95514 -5.1828,2.532 -3.80108,1.615 -2.80445,-4.001 1.44234,-1.784 1.0091,-0.837 1.89698,0.106 1.519,-0.578 2.10557,-0.998 3.81534,3.945"
+ class="c51197"
+ id="Wythe, VA" />
+ <path
+ d="m 796.56842,303.73214 1.78465,1.021 2.23394,-1.677 0.18542,-0.147 1.80783,-1.429 0.86112,1.237 1.16422,2.346 -2.8526,2.115 -4.08277,2.948 -2.77949,-2.973 1.65628,-3.473 0.0214,0.03"
+ class="c51071"
+ id="Giles, VA" />
+ <path
+ d="m 802.90117,310.86114 -0.10519,0.09 -0.3744,-0.408 -0.15511,-0.291 -0.0731,-0.264 0.066,-0.258 0.36371,-0.386 0.38331,-0.258 0.17651,-0.03 0.16045,-0.02 0.14263,-0.05 0.15511,-0.123 0.37619,0.1 0.16224,0.435 -0.14441,0.274 -0.68462,0.849 -0.44929,0.347"
+ class="c51750"
+ id="Radford, VA" />
+ <path
+ d="m 801.753,307.19814 1.42987,1.856 -0.17651,0.03 -0.38331,0.258 -0.36371,0.386 -0.066,0.258 0.0731,0.264 0.15511,0.291 0.3744,0.408 0.10519,-0.09 0.95562,2.104 -1.42095,1.471 -1.72047,1.519 -3.81534,-3.945 0.7702,-1.864 4.08277,-2.948"
+ class="c51155"
+ id="Pulaski, VA" />
+ <path
+ d="m 855.88807,259.20814 -1.07686,0.522 -0.61152,-0.796 0.61152,-0.498 0.12837,0.09 0.94849,0.683"
+ class="c51610"
+ id="Falls Church, VA" />
+ <path
+ d="m 856.36053,257.44814 0.66857,0.546 0.80408,0.353 0.47246,0.918 -1.3639,0.207 -0.18542,0.364 -0.86825,-0.628 -0.94849,-0.683 -0.12837,-0.09 -0.041,-0.03 1.59032,-0.958"
+ class="c51013"
+ id="Arlington, VA" />
+ <path
+ d="m 802.43584,314.43614 3.89736,4.596 -0.5723,1.423 -0.28883,0.232 -0.25673,0.123 -0.14441,-0.03 -0.61866,-0.344 -0.2086,0.01 -0.098,0.05 -0.24604,0.922 -0.082,0.42 0.41184,1.067 -4.09169,0.643 -1.48691,-1.608 -0.0178,-0.209 0.34766,-0.609 0.23356,-0.669 -0.55626,-0.09 -0.58478,0.151 -0.19255,0.266 -0.16224,0.144 -0.007,0 -2.17867,-2.451 5.1828,-2.532 1.72047,-1.519"
+ class="c51035"
+ id="Carroll, VA" />
+ <path
+ d="m 820.51593,320.55814 -5.64992,0.951 -0.47424,0.08 -0.20146,-1.535 -0.32984,-1.013 -0.13549,-0.24 -0.27278,-0.296 -0.47425,-0.878 -0.2389,-1.246 0,-0.08 0.19968,-0.234 0.6971,-0.265 1.18918,-0.915 3.13607,0.225 0.93957,-0.33 1.71155,-1.63 -0.0963,7.406 z m -3.76186,-3.558 -0.0802,0.08 -0.37618,0.869 0.34409,0.331 1.14282,0.587 0.39223,-0.218 0.0874,-0.41 -0.44037,-1.182 -0.93779,-0.184 -0.13193,0.129"
+ class="c51089"
+ id="Henry, VA" />
+ <path
+ d="m 809.84367,314.61414 3.79216,1.188 -0.6971,0.265 -0.19968,0.234 0,0.08 0.2389,1.246 0.47425,0.878 0.27278,0.296 0.13549,0.24 0.32984,1.013 0.20146,1.535 -7.02094,0.988 -3.14142,0.337 -0.41184,-1.067 0.082,-0.42 0.24604,-0.922 0.098,-0.05 0.2086,-0.01 0.61866,0.344 0.14441,0.03 0.25673,-0.123 0.28883,-0.232 0.5723,-1.423 3.51047,-4.418"
+ class="c51141"
+ id="Patrick, VA" />
+ <path
+ d="m 810.80998,308.55414 -0.96631,6.06 -3.51047,4.418 -3.89736,-4.596 1.42095,-1.471 1.26227,-0.399 1.34964,-0.621 0.8112,-0.481 0.0481,-0.139 0.85399,-1.291 1.76683,-1.111 0.86112,-0.369"
+ class="c51063"
+ id="Floyd, VA" />
+ <path
+ d="m 807.56873,303.98314 0.62935,1.171 1.05902,1.088 0.64362,2.296 0.0481,0.385 -1.76683,1.111 -0.85399,1.291 -0.0481,0.139 -0.8112,0.481 -1.34964,0.621 -1.26227,0.399 -0.95562,-2.104 0.44929,-0.347 0.68462,-0.849 0.14441,-0.274 -0.16224,-0.435 -0.37619,-0.1 -0.15511,0.123 -0.14263,0.05 -0.16045,0.02 -1.42987,-1.856 2.8526,-2.115 2.96313,-1.1"
+ class="c51121"
+ id="Montgomery, VA" />
+ <path
+ d="m 812.03838,303.91014 -0.0481,0.105 -0.016,1.059 0.15154,0.266 -1.18739,-0.03 -0.10697,-1.171 1.207,-0.225"
+ class="c51775"
+ id="Salem, VA" />
+ <path
+ d="m 815.44545,305.35614 5.26303,3.4 -0.0963,4.396 -1.71155,1.63 -0.93957,0.33 -3.13607,-0.225 -1.18918,0.915 -3.79216,-1.188 0.96631,-6.06 1.39777,-1.292 1.10717,0.408 0.40114,0.07 0.14441,-0.08 0.62936,-0.717 0.95562,-1.583"
+ class="c51067"
+ id="Franklin Co., VA" />
+ <path
+ d="m 810.62278,301.54914 4.4857,1.903 0.33697,1.904 -0.95562,1.583 -0.62936,0.717 -0.14441,0.08 -0.40114,-0.07 -1.10717,-0.408 -1.39777,1.292 -0.86112,0.369 -0.0481,-0.385 -0.64362,-2.296 -1.05902,-1.088 -0.62935,-1.171 0.17115,-0.29 0.79516,-0.764 1.12499,-0.472 0.96275,-0.908 z m 1.4156,2.361 -1.207,0.225 0.10697,1.171 1.18739,0.03 0.0571,0.105 1.32468,0.546 0.16402,0 0.31913,-0.307 0.34231,-0.587 0.31736,-1.155 -0.0892,-0.273 -0.0802,-0.07 -0.44215,-0.24 -1.18204,-0.184 -0.77912,0.651 -0.0392,0.08"
+ class="c51161"
+ id="Roanoke Co., VA" />
+ <path
+ d="m 821.21303,295.14414 5.09544,2.649 -1.36568,0.414 0.53843,2.337 -2.11448,7.422 -2.65826,0.79 -5.26303,-3.4 -0.33697,-1.904 0.89857,-1.139 -0.26565,-1.322 1.52792,-1.847 0.18364,-0.183 0.31557,-0.1 0.13549,0.04 0.25852,0.194 0.32983,0.335 0.60974,0.04 0.0874,-0.03 0.0892,-0.07 0.91461,-1.496 0.26743,-0.617 0.75237,-2.112 z m -0.93957,6.363 -0.27278,0 -0.0232,0.435 0.40293,0.435 0.271,0.11 0.75593,-0.103 0.24247,-0.981 -0.50098,-0.322 -0.82726,0.169 -0.0481,0.257"
+ class="c51019"
+ id="Bedford Co., VA" />
+ <path
+ d="m 808.92014,289.39014 0.90748,-0.346 1.19809,-0.06 0.041,0.02 0.90748,1.14 0.14441,0.1 3.64775,0.515 0.6347,-0.747 0.016,2.548 -2.68679,-0.425 -0.43145,0.514 0.0481,0.103 -0.0874,0.33 -0.21751,0.403 -0.61866,0.947 -1.39064,1.519 -0.32983,0.306 -0.36727,-0.1 -1.64024,1.637 -1.16421,-0.273 -0.3227,-0.216 -1.58497,-1.239 3.29652,-6.668 z m 1.36746,3.053 -0.0303,1.23 0.24604,0.233 0.32092,0.209 0.59369,-0.476 -0.1355,-1.107 -0.0874,-0.193 -0.64361,-0.135 -0.26387,0.239"
+ class="c51005"
+ id="Alleghany, VA" />
+ <path
+ d="m 810.70301,296.24514 -0.16759,0.241 0.1355,0.314 1.35142,1.646 -1.01267,2.554 -0.38689,0.549 -0.96275,0.908 -1.12499,0.472 -0.79516,0.764 -0.17115,0.29 -2.96313,1.1 -1.16422,-2.346 0.52238,-0.442 2.05565,-1.817 -0.41006,-0.761 0.56339,-1.166 1.03585,-1.254 0.3227,0.216 1.16421,0.273 1.64024,-1.637 0.36727,0.1"
+ class="c51045"
+ id="Craig, VA" />
+ <path
+ d="m 816.41711,292.54814 4.04355,4.708 -0.26743,0.617 -0.91461,1.496 -0.0892,0.07 -0.0874,0.03 -0.60974,-0.04 -0.32983,-0.335 -0.25852,-0.194 -0.13549,-0.04 -0.31557,0.1 -0.18364,0.183 -1.52792,1.847 0.26565,1.322 -0.89857,1.139 -4.4857,-1.903 0.38689,-0.549 1.01267,-2.554 -1.35142,-1.646 -0.1355,-0.314 0.16759,-0.241 0.32983,-0.306 1.39064,-1.519 0.61866,-0.947 0.21751,-0.403 0.0874,-0.33 -0.0481,-0.103 0.43145,-0.514 2.68679,0.425"
+ class="c51023"
+ id="Botetourt, VA" />
+ <path
+ d="m 825.17457,290.06414 0.58834,-0.344 1.22662,0.521 0.0767,0.07 1.84705,1.672 0.47247,0.521 1.67946,2.553 0.5723,-0.01 -2.20184,3.046 -1.04655,1.014 -2.08061,-1.305 -5.09544,-2.649 0.21038,0 0.39223,-0.323 0.56517,-0.563 0.29596,-0.402 0.37975,-1.782 0.23712,-0.796 0.17115,-0.378 0.39402,-0.65 0.17472,-0.193 1.14104,0"
+ class="c51009"
+ id="Amherst, VA" />
+ <path
+ d="m 818.53159,284.57714 2.90786,1.511 3.06832,1.478 0.57052,0.443 0.0963,2.055 -1.14104,0 -0.17472,0.193 -0.39402,0.65 -0.17115,0.378 -0.23712,0.796 -0.37975,1.782 -0.29596,0.402 -0.56517,0.563 -0.39223,0.323 -0.21038,0 -0.75237,2.112 -4.04355,-4.708 -0.016,-2.548 2.13053,-5.423 z m 2.13766,6.477 0.0624,-0.467 -0.67392,-0.154 -0.47424,0.139 -0.27278,0.391 0.19255,0.629 0.32091,0.273 0.28883,-0.193 0.55625,-0.618 z m 0.5937,0.545 -0.28882,0.145 -0.041,0.201 0.16046,0.917 0.28169,0.344 0.27456,0.04 0.27991,-0.305 0.0892,-0.17 0.2906,-0.98 -0.0499,-0.683 -0.58834,0.04 -0.40828,0.417 0,0.03"
+ class="c51163"
+ id="Rockbridge, VA" />
+ <path
+ d="m 812.30225,281.45814 0.8843,0.412 0.83617,0.314 2.65112,0.07 0.95027,0.264 0.90748,2.058 -2.13053,5.423 -0.6347,0.747 -3.64775,-0.515 -0.14441,-0.1 -0.90748,-1.14 -0.041,-0.02 -1.19809,0.06 -0.90748,0.346 1.24444,-2.836 2.13767,-5.096"
+ class="c51017"
+ id="Bath, VA" />
+ <path
+ d="m 820.21819,276.61414 -0.15333,0.225 -0.92531,2.754 -0.0802,0.332 0.066,0.241 -0.31379,0.987 -1.18739,1.366 -0.95027,-0.264 -2.65112,-0.07 -0.83617,-0.314 -0.8843,-0.412 -0.43324,-0.875 0,-0.03 0.009,-0.08 1.10003,-1.71 0.47425,-1.688 0.0891,-1.625 0.0303,-1.904 1.77752,0.426 0.36192,0.161 0.33697,0.337 1.09111,1.617 3.07902,0.522"
+ class="c51091"
+ id="Highland, VA" />
+ <path
+ d="m 834.72362,273.74614 0.35301,-1.336 3.79216,4.099 -1.09112,2.25 -5.57146,-1.157 2.51741,-3.856"
+ class="c51079"
+ id="Greene, VA" />
+ <path
+ d="m 823.27224,267.83914 3.28583,-0.635 4.64973,2.876 -0.47246,2.291 1.41738,0.729 1.34072,0.542 0.27991,0.09 0.95027,0.02 -2.51741,3.856 -1.22127,1.904 -3.08615,-1.769 -2.73135,-1.148 -3.70303,-1.774 1.80783,-6.976 z m 4.41082,5.648 -0.0891,0.08 -0.4261,0.837 -0.0802,0.385 0.15332,1.005 0.0713,0.06 0.44215,-0.13 0.96453,-0.85 -0.007,-0.353 -0.26565,-0.421 -0.76307,-0.617"
+ class="c51165"
+ id="Rockingham, VA" />
+ <path
+ d="m 820.21819,276.61414 1.24622,-1.799 3.70303,1.774 2.73135,1.148 3.08615,1.769 -0.11232,0.644 -0.10341,1.164 0.2086,0.882 0,0.211 -0.24247,0.426 -0.67571,0.586 -1.37103,2.814 -0.60261,0.98 -1.3835,-0.07 -0.30309,0.08 -0.23534,0.128 -1.08577,0.66 -0.57052,-0.443 -3.06832,-1.478 -2.90786,-1.511 -0.90748,-2.058 1.18739,-1.366 0.31379,-0.987 -0.066,-0.241 0.0802,-0.332 0.92531,-2.754 0.15333,-0.225 z m 5.73727,4.074 -1.00553,0.408 -0.11946,0.378 -0.0499,0.403 0.17829,0.312 0.42432,0.209 0.65253,0.02 0.33697,-0.351 0.12123,-0.316 0.0232,-0.472 -0.16759,-0.355 -0.16224,-0.232 -0.20147,-0.06 -0.0303,0.06 z m 2.5709,1.662 -0.1765,-0.03 -0.40828,0.403 -0.28348,0.433 0,0.107 0.11233,0.273 0.61152,0.264 0.77911,-0.214 0.0963,-0.243 0.0713,-0.506 -0.007,-0.13 -0.25495,-0.434 -0.47068,0.02 -0.0695,0.05"
+ class="c51015"
+ id="Augusta, VA" />
+ <path
+ d="m 830.05963,283.41914 4.78344,6.533 -2.46749,4.708 -0.73811,0.378 -0.5723,0.01 -1.67946,-2.553 -0.47247,-0.521 -1.84705,-1.672 -0.0767,-0.07 -1.22662,-0.521 -0.58834,0.344 -0.0963,-2.055 1.08577,-0.66 0.23534,-0.128 0.30309,-0.08 1.3835,0.07 0.60261,-0.98 1.37103,-2.814"
+ class="c51125"
+ id="Nelson, VA" />
+ <path
+ d="m 842.19741,289.58314 0.0713,1.285 -1.19095,3.4 -1.38886,4.056 -2.55663,-0.898 -4.7567,-2.766 2.46749,-4.708 0.0571,-0.152 0.41006,-0.476 0.8326,-0.24 0.9574,-0.13 0.11232,-0.07 0.0892,-0.08 0.025,-0.09 -0.0499,-0.716 4.92072,1.583"
+ class="c51029"
+ id="Buckingham, VA" />
+ <path
+ d="m 837.13228,297.42614 -0.92353,3.688 -2.36944,1.462 -4.40368,-4.492 2.20184,-3.046 0.73811,-0.378 4.7567,2.766"
+ class="c51011"
+ id="Appomattox, VA" />
+ <path
+ d="m 828.38908,299.09814 1.04655,-1.014 4.40368,4.492 -0.67392,4.434 -3.53008,-0.287 -0.50634,-0.411 -2.68322,-0.699 -1.55109,0.338 -0.43324,0.539 -1.09468,1.476 2.11448,-7.422 1.10895,0.642 1.79891,-2.088"
+ class="c51031"
+ id="Campbell, VA" />
+ <path
+ d="m 829.63531,306.72314 3.53008,0.287 3.32505,1.038 1.59745,2.46 0.0731,2.209 0.0196,0.05 0.583,0.65 0.35479,0.145 -0.89322,3.833 -1.11607,0.217 -6.1723,1.116 -1.45304,0.257 0.15155,-12.261"
+ class="c51083"
+ id="Halifax, VA" />
+ <path
+ d="m 823.36674,307.96614 1.09468,-1.476 0.43324,-0.539 1.55109,-0.338 2.68322,0.699 0.50634,0.411 -0.15155,12.261 -2.24285,0.412 0.53843,-0.749 0.0553,-0.121 -0.0642,-0.193 -1.01089,-1.06 -2.31595,0.362 -0.47424,0.595 -0.15155,0.248 -0.007,0.07 0.63292,0.385 0.4992,0.868 -0.73097,0.136 -3.69589,0.618 0.0963,-7.406 0.0963,-4.396 2.65826,-0.79"
+ class="c51143"
+ id="Pittsylvania, VA" />
+ <path
+ d="m 816.75407,317.00014 0.13193,-0.129 0.93779,0.184 0.44037,1.182 -0.0874,0.41 -0.39223,0.218 -1.14282,-0.587 -0.34409,-0.331 0.37618,-0.869 0.0802,-0.08"
+ class="c51690"
+ id="Martinsville, VA" />
+ <path
+ d="m 827.24091,319.39614 -2.29812,0.408 -0.4992,-0.868 -0.63292,-0.385 0.007,-0.07 0.15155,-0.248 0.47424,-0.595 2.31595,-0.362 1.01089,1.06 0.0642,0.193 -0.0553,0.121 -0.53843,0.749"
+ class="c51590"
+ id="Danville, VA" />
+ <path
+ d="m 828.38908,299.09814 -1.79891,2.088 -1.10895,-0.642 -0.53843,-2.337 1.36568,-0.414 2.08061,1.305"
+ class="c51680"
+ id="Lynchburg, VA" />
+ <path
+ d="m 820.27346,301.50714 0.0481,-0.257 0.82726,-0.169 0.50098,0.322 -0.24247,0.981 -0.75593,0.103 -0.271,-0.11 -0.40293,-0.435 0.0232,-0.435 0.27278,0"
+ class="c51515"
+ id="Bedford, VA" />
+ <path
+ d="m 812.03838,303.91014 0.0392,-0.08 0.77912,-0.651 1.18204,0.184 0.44215,0.24 0.0802,0.07 0.0892,0.273 -0.31736,1.155 -0.34231,0.587 -0.31913,0.307 -0.16402,0 -1.32468,-0.546 -0.0571,-0.105 -0.15154,-0.266 0.016,-1.059 0.0481,-0.105"
+ class="c51770"
+ id="Roanoke, VA" />
+ <path
+ d="m 821.26295,291.59914 0,-0.03 0.40828,-0.417 0.58834,-0.04 0.0499,0.683 -0.2906,0.98 -0.0892,0.17 -0.27991,0.305 -0.27456,-0.04 -0.28169,-0.344 -0.16046,-0.917 0.041,-0.201 0.28882,-0.145"
+ class="c51530"
+ id="Buena Vista, VA" />
+ <path
+ d="m 810.2876,292.44314 0.26387,-0.239 0.64361,0.135 0.0874,0.193 0.1355,1.107 -0.59369,0.476 -0.32092,-0.209 -0.24604,-0.233 0.0303,-1.23"
+ class="c51580"
+ id="Covington, VA" />
+ <path
+ d="m 820.66925,291.05414 -0.55625,0.618 -0.28883,0.193 -0.32091,-0.273 -0.19255,-0.629 0.27278,-0.391 0.47424,-0.139 0.67392,0.154 -0.0624,0.467"
+ class="c51678"
+ id="Lexington, VA" />
+ <path
+ d="m 828.52636,282.35014 0.0695,-0.05 0.47068,-0.02 0.25495,0.434 0.007,0.13 -0.0713,0.506 -0.0963,0.243 -0.77911,0.214 -0.61152,-0.264 -0.11233,-0.273 0,-0.107 0.28348,-0.433 0.40828,-0.403 0.1765,0.03"
+ class="c51820"
+ id="Waynesboro, VA" />
+ <path
+ d="m 825.95546,280.68814 0.0303,-0.06 0.20147,0.06 0.16224,0.232 0.16759,0.355 -0.0232,0.472 -0.12123,0.316 -0.33697,0.351 -0.65253,-0.02 -0.42432,-0.209 -0.17829,-0.312 0.0499,-0.403 0.11946,-0.378 1.00553,-0.408"
+ class="c51790"
+ id="Staunton, VA" />
+ <path
+ d="m 836.18557,281.67614 0.39402,-0.04 0.41719,0.178 0.11232,0.282 -0.12124,0.697 -0.22464,0.323 -0.72206,0.206 -0.21751,0 -0.15333,-0.248 -0.0321,-0.192 0.0571,-0.444 0.10341,-0.335 0.38688,-0.419"
+ class="c51540"
+ id="Charlottesville, VA" />
+ <path
+ d="m 827.68306,273.48714 0.76307,0.617 0.26565,0.421 0.007,0.353 -0.96453,0.85 -0.44215,0.13 -0.0713,-0.06 -0.15332,-1.005 0.0802,-0.385 0.4261,-0.837 0.0891,-0.08"
+ class="c51660"
+ id="Harrisonburg, VA" />
+ <path
+ d="m 832.20621,277.60214 5.57146,1.157 3.07367,0.633 -1.19452,3.225 -2.38013,5.383 0.0499,0.716 -0.025,0.09 -0.0892,0.08 -0.11232,0.07 -0.9574,0.13 -0.8326,0.24 -0.41006,0.476 -0.0571,0.152 -4.78344,-6.533 0.67571,-0.586 0.24247,-0.426 0,-0.211 -0.2086,-0.882 0.10341,-1.164 0.11232,-0.644 1.22127,-1.904 z m 3.97936,4.074 -0.38688,0.419 -0.10341,0.335 -0.0571,0.444 0.0321,0.192 0.15333,0.248 0.21751,0 0.72206,-0.206 0.22464,-0.323 0.12124,-0.697 -0.11232,-0.282 -0.41719,-0.178 -0.39402,0.04"
+ class="c51003"
+ id="Albermarle, VA" />
+ <path
+ d="m 839.65682,282.61714 4.73887,1.485 -1.0198,3.898 -1.17848,1.583 -4.92072,-1.583 2.38013,-5.383"
+ class="c51065"
+ id="Fluvanna, VA" />
+ <path
+ d="m 842.19741,289.58314 1.17848,-1.583 1.93619,1.775 -0.18363,4.816 -1.46552,2.319 -3.97402,1.414 1.38886,-4.056 1.19095,-3.4 -0.0713,-1.285"
+ class="c51049"
+ id="Cumberland, VA" />
+ <path
+ d="m 843.66293,296.91014 0.37975,1.625 0.61866,4.033 -3.47838,1.615 -4.97421,-3.069 0.92353,-3.688 2.55663,0.898 3.97402,-1.414"
+ class="c51147"
+ id="Prince Edward, VA" />
+ <path
+ d="m 833.83931,302.57614 2.36944,-1.462 4.97421,3.069 -0.0892,4.45 -1.97542,4.928 -0.35479,-0.145 -0.583,-0.65 -0.0196,-0.05 -0.0731,-2.209 -1.59745,-2.46 -3.32505,-1.038 0.67392,-4.434"
+ class="c51037"
+ id="Charlotte, VA" />
+ <path
+ d="m 849.9422,309.63814 0.67392,5.385 -4.99738,0.957 -2.3944,0.481 -4.99917,0.933 0.89322,-3.833 1.97542,-4.928 8.84839,1.005"
+ class="c51117"
+ id="Mecklenburg, VA" />
+ <path
+ d="m 858.72461,297.24014 -0.32091,-0.593 -0.082,-0.369 0.12837,-0.22 0.30665,-0.36 0.39402,-0.06 0.22464,0.183 0.0321,0.241 -0.0392,0.13 0.10519,0.619 -0.0178,0.04 -0.13728,0.1 -0.0731,-0.02 -0.17294,0.08 -0.21929,0.137 -0.12837,0.09"
+ class="c51570"
+ id="Colonial Heights, VA" />
+ <path
+ d="m 844.66134,302.56814 4.63724,1.415 0.64362,5.655 -8.84839,-1.005 0.0892,-4.45 3.47838,-1.615"
+ class="c51111"
+ id="Lunenburg, VA" />
+ <path
+ d="m 859.96192,295.06214 0.89144,-0.191 0.0891,0 0.52952,0.282 0.18541,0.199 -0.12123,0.451 -0.72206,0.585 -0.45642,-0.335 -0.3958,-0.982"
+ class="c51670"
+ id="Hopewell, VA" />
+ <path
+ d="m 858.30564,259.26514 0.12837,1.141 0.009,0.102 -1.10003,0.501 -1.00376,-0.202 0.41719,-0.971 0.18542,-0.364 1.3639,-0.207"
+ class="c51510"
+ id="Alexandria, VA" />
+ <path
+ d="m 834.72362,264.10914 2.08061,1.287 -0.37262,3.183 -1.35498,3.831 -0.35301,1.336 -0.95027,-0.02 -0.27991,-0.09 -1.34072,-0.542 -1.41738,-0.729 0.47246,-2.291 0.56517,-2.032 0.4992,-1.316 0.74524,0.159 0.52951,-0.69 1.1767,-2.092"
+ class="c51139"
+ id="Page, VA" />
+ <path
+ d="m 835.22639,259.82514 -0.50277,4.284 -1.1767,2.092 -0.52951,0.69 -0.74524,-0.159 -0.4992,1.316 -0.56517,2.032 -4.64973,-2.876 0.68284,-2.323 0.23356,-0.724 0.041,-0.06 0.0784,-0.126 0.9164,-0.869 0.0713,0.12 0.0731,0.112 0.0571,0 1.6866,-1.59 0.56338,-1.247 0.0321,-0.16 0.0143,-0.877 4.21827,0.36"
+ class="c51171"
+ id="Shenandoah, VA" />
+ <path
+ d="m 839.0132,253.05514 4.13804,2.32 -1.81496,3.15 -0.57943,0.926 -2.82941,-0.806 1.08576,-5.59"
+ class="c51043"
+ id="Clarke, VA" />
+ <path
+ d="m 836.69904,254.73114 0.37797,0.03 0.74702,0.369 -0.74702,1.808 -0.58657,-0.458 -0.24069,-0.933 0.0321,-0.371 0.14976,-0.474 0.26743,0.03"
+ class="c51840"
+ id="Winchester, VA" />
+ <path
+ d="m 832.68936,249.50214 2.37122,1.311 3.95262,2.242 -1.08576,5.59 -2.70105,1.18 -4.21827,-0.36 0.49207,-0.843 0.19968,-0.193 0.54021,-0.533 0.271,-0.496 0.26743,-0.626 0.0642,-0.37 0.0481,-4.386 -0.20147,-2.516 z m 4.00968,5.229 -0.26743,-0.03 -0.14976,0.474 -0.0321,0.371 0.24069,0.933 0.58657,0.458 0.74702,-1.808 -0.74702,-0.369 -0.37797,-0.03"
+ class="c51069"
+ id="Frederick, VA" />
+ <path
+ d="m 837.92744,258.64514 2.82941,0.806 -1.69551,3.093 -2.25711,2.852 -2.08061,-1.287 0.50277,-4.284 2.70105,-1.18"
+ class="c51187"
+ id="Warren, VA" />
+ <path
+ d="m 836.80423,265.39614 2.25711,-2.852 0.854,0.635 1.46017,1.453 0.36192,0.643 0.10519,0.104 0.24069,0.169 0.76128,0.218 0.34766,-0.09 -1.62419,1.976 -1.83993,2.795 -1.01088,-0.06 -2.28564,-1.806 0.37262,-3.183"
+ class="c51157"
+ id="Rappahannock, VA" />
+ <path
+ d="m 836.43161,268.57914 2.28564,1.806 3.37319,4.573 -3.22165,1.551 -3.79216,-4.099 1.35498,-3.831"
+ class="c51113"
+ id="Madison, VA" />
+ <path
+ d="m 838.86879,276.50914 3.22165,-1.551 1.59923,-1.205 1.35142,-0.892 0.95561,-0.331 1.64024,-0.425 0.84152,0.257 0.28348,0.146 -3.37676,6.395 -4.53384,0.489 -3.07367,-0.633 1.09112,-2.25"
+ class="c51137"
+ id="Orange, VA" />
+ <path
+ d="m 840.85134,279.39214 4.53384,-0.489 5.19885,1.575 -0.70602,6.718 -2.72422,-1.648 -0.46533,-0.49 -1.4156,-0.818 -0.87717,-0.138 -4.73887,-1.485 1.19452,-3.225"
+ class="c51109"
+ id="Louisa, VA" />
+ <path
+ d="m 852.93742,287.16414 0.21751,3.337 -1.0929,-0.421 -2.16084,-0.36 -2.21789,0.06 -0.0161,0.113 -0.0571,0.121 -0.1355,0.112 -0.29774,0.08 -0.14441,0 -1.52792,-0.275 -0.19255,-0.168 -1.93619,-1.775 1.0198,-3.898 0.87717,0.138 1.4156,0.818 0.46533,0.49 2.72422,1.648 3.05941,-0.03"
+ class="c51075"
+ id="Goochland, VA" />
+ <path
+ d="m 853.15493,290.50114 -2.93282,3.976 -0.36906,-0.612 -0.58656,-0.481 -0.0802,-0.06 -0.48316,-0.07 -1.14638,0.103 -0.73811,0.499 -0.64718,0.58 -0.46355,0.29 -0.3958,0.04 -0.18363,-0.182 0.18363,-4.816 0.19255,0.168 1.52792,0.275 0.14441,0 0.29774,-0.08 0.1355,-0.112 0.0571,-0.121 0.0161,-0.113 2.21789,-0.06 2.16084,0.36 1.0929,0.421"
+ class="c51145"
+ id="Powhatan, VA" />
+ <path
+ d="m 845.12845,294.59114 0.18363,0.182 0.3958,-0.04 0.46355,-0.29 0.64718,-0.58 0.73811,-0.499 1.14638,-0.103 0.48316,0.07 0.0802,0.06 0.58656,0.481 0.36906,0.612 -0.32092,0.06 -0.0321,0.04 0.0891,0.779 0.0963,0.394 2.44075,1.76 0.12301,0.04 0.21573,0 0.0963,-0.06 0.0232,-0.05 -0.016,-0.314 0.3227,-0.417 0.0891,-0.04 0.7702,0.02 0.41897,0.565 -2.27494,2.15 -8.22081,-0.866 -0.37975,-1.625 1.46552,-2.319"
+ class="c51007"
+ id="Amelia, VA" />
+ <path
+ d="m 844.66134,302.56814 -0.61866,-4.033 8.22081,0.866 -0.77911,4.967 -2.1858,-0.385 -4.63724,-1.415"
+ class="c51135"
+ id="Nottoway, VA" />
+ <path
+ d="m 849.29858,303.98314 2.1858,0.385 4.57306,1.334 0.8433,4.108 -1.26227,4.234 -2.38548,0.456 -2.63687,0.523 -0.67392,-5.385 -0.64362,-5.655"
+ class="c51025"
+ id="Brunswick, VA" />
+ <path
+ d="m 854.53843,297.25114 3.81535,0.255 -0.10341,0.674 0.58656,0.371 0.61153,-0.04 0.8112,4.041 -3.43202,3.393 -0.7702,-0.242 -4.57306,-1.334 0.77911,-4.967 2.27494,-2.15"
+ class="c51053"
+ id="Dinwiddie, VA" />
+ <path
+ d="m 859.4966,309.43014 0.19255,0.677 -0.025,0.31 -0.73276,0.477 -0.43146,-0.06 -0.29061,-0.754 -0.0232,-0.155 0.11945,-0.305 0.82725,-0.36 0.21038,0.02 0.15333,0.152"
+ class="c51595"
+ id="Emporia, VA" />
+ <path
+ d="m 860.97459,309.15014 3.14142,3.222 -8.47754,1.672 1.26227,-4.234 -0.8433,-4.108 0.7702,0.242 1.26227,0.523 1.75078,2.587 1.1339,0.1 z m -1.47799,0.28 -0.15333,-0.152 -0.21038,-0.02 -0.82725,0.36 -0.11945,0.305 0.0232,0.155 0.29061,0.754 0.43146,0.06 0.73276,-0.477 0.025,-0.31 -0.19255,-0.677"
+ class="c51081"
+ id="Greensville, VA" />
+ <path
+ d="m 877.65691,296.32614 -0.33875,-1.304 0.0499,-0.378 -0.0339,-0.312 -0.016,-0.09 1.06081,-0.118 0.90035,0.856 0.22642,0.677 -1.84883,0.669"
+ class="c51735"
+ id="Poquoson, VA" />
+ <path
+ d="m 870.04762,307.32614 0.54556,1.293 -0.009,0.04 -1.00732,0.272 -0.4475,-0.552 -0.15332,-0.573 0.0178,-0.337 0.24069,-0.128 0.38688,0.02 0.42611,-0.03"
+ class="c51620"
+ id="Franklin, VA" />
+ <path
+ d="m 870.04762,307.32614 -0.42611,0.03 -0.38688,-0.02 -0.24069,0.128 -0.0178,0.337 0.15332,0.573 0.4475,0.552 1.00732,-0.272 0.009,-0.04 0.23355,0.06 0.10341,2.344 -4.45183,0.836 -2.3623,0.516 -3.14142,-3.222 7.46488,-7.096 1.61528,-1.551 -0.007,6.823"
+ class="c51175"
+ id="Southampton, VA" />
+ <path
+ d="m 877.65691,296.32614 1.84883,-0.669 1.1553,1.84 -0.72206,1.239 -1.76682,0.498 -1.19096,-2.498 0.67571,-0.41"
+ class="c51650"
+ id="Hampton, VA" />
+ <path
+ d="m 872.37605,294.01914 0.025,0.105 -0.19255,0.151 -0.32983,0.113 -0.60974,0.07 -0.38689,-0.02 -0.19968,-0.17 -0.13728,-0.185 -0.19255,-1.093 0.37797,-0.353 0.15154,0.2 0.0963,0.114 0.53842,0.03 0.21038,-0.06 0.48138,0.408 0.16759,0.685"
+ class="c51830"
+ id="Williamsburg, VA" />
+ <path
+ d="m 873.63832,294.60514 3.34288,2.131 1.19096,2.498 -0.13728,0.408 -0.13728,0 -0.2086,-0.09 -4.08277,-2.692 -0.15333,-0.146 -0.12837,-1.301 0.31379,-0.803"
+ class="c51700"
+ id="Newport News, VA" />
+ <path
+ d="m 878.36293,301.10614 1.07863,-0.723 1.43699,2.001 -1.75077,0.676 -0.79695,-1.199 0.0321,-0.755"
+ class="c51740"
+ id="Portsmouth, VA" />
+ <path
+ d="m 870.882,292.83714 0.78803,-1.751 3.49443,2.569 -0.0553,0.18 0.21572,0.16 0.43503,0.129 1.3425,-0.499 0.0874,0.04 0.12836,0.576 0.016,0.09 0.0339,0.312 -0.0499,0.378 0.33875,1.304 -0.67571,0.41 -3.34288,-2.131 -1.26227,-0.586 -0.16759,-0.685 -0.48138,-0.408 -0.21038,0.06 -0.53842,-0.03 -0.0963,-0.114"
+ class="c51199"
+ id="York, VA" />
+ <path
+ d="m 869.78019,289.42114 0.69175,0.7 1.19809,0.965 -0.78803,1.751 -0.15154,-0.2 -0.37797,0.353 0.19255,1.093 0.13728,0.185 0.19968,0.17 0.38689,0.02 0.60974,-0.07 0.32983,-0.113 0.19255,-0.151 -0.025,-0.105 1.26227,0.586 -0.31379,0.803 -2.05564,-0.329 -2.86151,0.394 -1.0929,-3.432 2.46571,-2.62"
+ class="c51095"
+ id="James City, VA" />
+ <path
+ d="m 868.40738,295.47314 2.86151,-0.394 1.40668,1.559 -2.62082,3.865 -1.61528,1.551 -0.48316,-1.223 -1.71868,-1.195 -0.0642,0.09 -0.48315,0 -1.46909,-0.537 -0.0891,-0.06 -0.0642,-0.09 -0.007,-0.07 2.6333,-3.76 1.71334,0.258"
+ class="c51181"
+ id="Surry, VA" />
+ <path
+ d="m 864.06074,298.97514 0.007,0.07 0.0642,0.09 0.0891,0.06 1.46909,0.537 0.48315,0 0.0642,-0.09 1.71868,1.195 0.48316,1.223 -7.46488,7.096 -1.1339,-0.1 -1.75078,-2.587 -1.26227,-0.523 3.43202,-3.393 3.80108,-3.576"
+ class="c51183"
+ id="Sussex, VA" />
+ <path
+ d="m 860.85336,294.87114 0.20146,-0.227 5.63922,0.571 -2.6333,3.76 -3.80108,3.576 -0.8112,-4.041 0.74702,0.192 0.31913,-0.946 -0.11053,-0.566 -0.90035,-0.44 0.45819,-1.688 0.3958,0.982 0.45642,0.335 0.72206,-0.585 0.12123,-0.451 -0.18541,-0.199 -0.52952,-0.282 -0.0891,0"
+ class="c51149"
+ id="Prince George, VA" />
+ <path
+ d="m 859.47342,296.81614 0.0303,-0.07 0.90035,0.44 0.11053,0.566 -0.31913,0.946 -0.74702,-0.192 -0.61153,0.04 -0.58656,-0.371 0.10341,-0.674 0.37083,-0.266 0.12837,-0.09 0.21929,-0.137 0.17294,-0.08 0.0731,0.02 0.13728,-0.1 0.0178,-0.04"
+ class="c51730"
+ id="Petersburg, VA" />
+ <path
+ d="m 852.93742,287.16414 1.78465,0 2.69213,1.486 0.93958,0.338 2.08952,0.58 0.37797,0.03 1.11607,0.85 -0.79694,2.748 -3.32327,-0.899 0.22464,-1.416 -0.0891,-0.739 -0.5937,-0.892 -0.52238,-0.335 -0.19255,-0.06 -0.39401,0.184 -1.03585,0.504 -0.99841,0.895 -1.0608,0.05 -0.21751,-3.337"
+ class="c51087"
+ id="Henrico, VA" />
+ <path
+ d="m 853.15493,290.50114 1.0608,-0.05 0.62758,1.027 1.10894,1.312 1.86488,-0.483 3.32327,0.899 -0.0856,1.438 -0.20146,0.227 -0.89144,0.191 -0.45819,1.688 -0.0303,0.07 -0.10519,-0.619 0.0392,-0.13 -0.0321,-0.241 -0.22464,-0.183 -0.39402,0.06 -0.30665,0.36 -0.12837,0.22 0.082,0.369 0.32091,0.593 -0.37083,0.266 -3.81535,-0.255 -0.41897,-0.565 -0.7702,-0.02 -0.0891,0.04 -0.3227,0.417 0.016,0.314 -0.0232,0.05 -0.0963,0.06 -0.21573,0 -0.12301,-0.04 -2.44075,-1.76 -0.0963,-0.394 -0.0891,-0.779 0.0321,-0.04 0.32092,-0.06 2.93282,-3.976"
+ class="c51041"
+ id="Chesterfield, VA" />
+ <path
+ d="m 861.93734,290.45814 5.37714,1.583 1.0929,3.432 -1.71334,-0.258 -5.63922,-0.571 0.0856,-1.438 0.79694,-2.748"
+ class="c51036"
+ id="Charles City, VA" />
+ <path
+ d="m 862.27609,287.16414 1.35855,0.394 3.67984,0 1.3425,0.892 1.12321,0.963 -2.46571,2.62 -5.37714,-1.583 -1.11607,-0.85 1.45482,-2.444"
+ class="c51127"
+ id="New Kent, VA" />
+ <path
+ d="m 857.81713,292.30714 -1.86488,0.483 -1.10894,-1.312 -0.62758,-1.027 0.99841,-0.895 1.03585,-0.504 0.39401,-0.184 0.19255,0.06 0.52238,0.335 0.5937,0.892 0.0891,0.739 -0.22464,1.416"
+ class="c51760"
+ id="Richmond, VA" />
+ <path
+ d="m 853.58282,273.35914 -0.6668,0.24 -0.90926,-0.515 -0.1141,-0.504 0.30665,-0.227 0.22464,-0.15 0.45107,0.08 0.33696,0.07 0.30665,0.307 0.0642,0.699"
+ class="c51630"
+ id="Fredericksburg, VA" />
+ <path
+ d="m 852.59332,259.82014 0.60261,-0.273 0.56161,0.09 0.12123,0.177 0.0945,0.683 -0.42432,0.265 -0.61865,0.105 -0.55269,-0.386 0,-0.282 0.21572,-0.376"
+ class="c51600"
+ id="Fairfax, VA" />
+ <path
+ d="m 850.47171,262.35114 0.39401,0.166 0.16046,0.137 0.14441,0.123 0.0161,0.698 -0.87539,0.884 -0.47424,-0.209 -0.1355,-0.385 0.0374,-0.248 0.35479,-0.797 0.36192,-0.378 0.0161,0"
+ class="c51683"
+ id="Manassas, VA" />
+ <path
+ d="m 844.21383,250.71514 0.68998,-0.08 4.2664,1.496 -0.70601,1.116 -0.0731,0.193 -0.007,0.105 -0.0428,0.289 -0.0214,0.208 0.005,0.02 0.12302,0.392 0.10162,0.136 0.0107,0 0.11232,0.08 1.13926,0.765 0.0339,0.01 0.63292,0.04 0.86113,-0.04 0.83616,-0.09 -2.66717,5.52 -2.5085,-1.769 -5.66418,-0.578 1.81496,-3.15 1.06259,-4.66"
+ class="c51107"
+ id="Loudoun, VA" />
+ <path
+ d="m 841.33628,258.52514 5.66418,0.578 -0.61866,2.469 0.0571,0.248 3.7672,4.814 0.68284,0.836 -1.17135,3.687 -1.63489,0.119 -0.2389,-0.03 -0.27991,-0.1 -0.16224,-0.16 -1.51723,-1.967 -1.09468,-1.72 -1.59745,-1.623 -0.34766,0.09 -0.76128,-0.218 -0.24069,-0.169 -0.10519,-0.104 -0.36192,-0.643 -1.46017,-1.453 -0.854,-0.635 1.69551,-3.093 0.57943,-0.926"
+ class="c51061"
+ id="Fauquier, VA" />
+ <path
+ d="m 843.19225,265.67814 1.59745,1.623 1.09468,1.72 1.51723,1.967 0.16224,0.16 0.27991,0.1 0.2389,0.03 1.63489,-0.119 0.48138,0.9 -1.43699,0.451 -0.28348,-0.146 -0.84152,-0.257 -1.64024,0.425 -0.95561,0.331 -1.35142,0.892 -1.59923,1.205 -3.37319,-4.573 1.01088,0.06 1.83993,-2.795 1.62419,-1.976"
+ class="c51047"
+ id="Culpeper, VA" />
+ <path
+ d="m 850.19893,272.05714 1.80783,1.027 0.90926,0.515 0.6668,-0.24 1.52435,0.593 -3.64775,6.75 -0.87539,-0.224 -5.19885,-1.575 3.37676,-6.395 1.43699,-0.451"
+ class="c51177"
+ id="Spotsylvania, VA" />
+ <path
+ d="m 850.58403,280.47814 0.87539,0.224 6.15625,3.561 0.65431,1.182 0.67927,0.296 2.29099,0.87 1.03585,0.553 -1.45482,2.444 -0.37797,-0.03 -2.08952,-0.58 -0.93958,-0.338 -2.69213,-1.486 -1.78465,0 -3.05941,0.03 0.70602,-6.718"
+ class="c51085"
+ id="Hanover, VA" />
+ <path
+ d="m 860.04215,281.35514 0.19255,-0.169 0.42433,0.281 1.73651,2.459 3.27157,1.116 2.59586,1.801 0.47424,0.723 0.0303,0.08 -0.0303,0.683 -0.0802,0.128 -1.3425,-0.892 -3.67984,0 -1.35855,-0.394 -1.03585,-0.553 -2.29099,-0.87 -0.67927,-0.296 -0.65431,-1.182 2.42648,-2.908"
+ class="c51101"
+ id="King William, VA" />
+ <path
+ d="m 860.04215,281.35514 1.63133,-2.059 1.22127,1.77 0.73989,0.916 1.27653,0.764 0.75594,-0.147 0.83795,-0.337 0.68284,-0.07 0.23712,0.147 0.8219,0.827 0.15155,0.346 2.30525,2.492 0.0731,1.735 0.0713,0.192 0.46711,0.491 0.0909,0.217 0,0.111 -0.0428,0.192 -0.14441,0.314 -0.74703,0.861 -0.69175,-0.7 -1.12321,-0.963 0.0802,-0.128 0.0303,-0.683 -0.0303,-0.08 -0.47424,-0.723 -2.59586,-1.801 -3.27157,-1.116 -1.73651,-2.459 -0.42433,-0.281 -0.19255,0.169"
+ class="c51097"
+ id="King and Queen, VA" />
+ <path
+ d="m 869.41292,282.34314 2.50493,2.385 0.69354,0.565 0.17472,0.06 2.08239,-0.107 2.29812,0.395 0.0553,0.08 -0.0481,0.171 -0.42254,0.433 -0.33161,0.09 -1.46374,0.812 -4.25214,-1.22 -2.30525,-2.492 1.01445,-1.173"
+ class="c51119"
+ id="Middlesex, VA" />
+ <path
+ d="m 874.95586,287.22814 1.06259,2.467 -0.13015,0 -0.29061,0.587 -0.0802,0.33 0.24248,0.231 1.0608,0.894 0.76307,0.531 0.0802,0.09 -0.2086,0.129 -1.10716,0.634 -1.18382,0.537 -3.49443,-2.569 -1.19809,-0.965 0.74703,-0.861 0.14441,-0.314 0.0428,-0.192 0,-0.111 -0.0909,-0.217 -0.46711,-0.491 -0.0713,-0.192 -0.0731,-1.735 4.25214,1.22"
+ class="c51073"
+ id="Gloucester, VA" />
+ <path
+ d="m 870.02979,281.67614 2.14479,-1.551 4.02572,2.956 0.84508,0.932 0.21751,0.275 0.007,0.105 -1.43878,0.376 -2.51563,-0.797 -0.99662,-0.561 -2.28921,-1.735"
+ class="c51103"
+ id="Lancaster, VA" />
+ <path
+ d="m 863.50627,276.27614 -0.0321,-0.179 0.86647,-1.116 0.0802,0.04 1.43878,1.205 1.02158,1.075 0.38689,0.06 2.07882,0.322 2.82763,2.436 -2.14479,1.551 -2.685,-1.437 -3.83852,-3.963"
+ class="c51159"
+ id="Richmond Co., VA" />
+ <path
+ d="m 860.91754,274.79814 2.58873,1.478 3.83852,3.963 2.06813,2.104 -1.01445,1.173 -0.15155,-0.346 -0.8219,-0.827 -0.23712,-0.147 -0.68284,0.07 -0.83795,0.337 -0.75594,0.147 -1.27653,-0.764 -0.73989,-0.916 -1.22127,-1.77 -1.6545,-4.04 0.89856,-0.458"
+ class="c51057"
+ id="Essex, VA" />
+ <path
+ d="m 855.88094,273.83314 4.13804,1.423 1.6545,4.04 -1.63133,2.059 -2.42648,2.908 -6.15625,-3.561 3.64775,-6.75 0.77377,-0.119"
+ class="c51033"
+ id="Caroline, VA" />
+ <path
+ d="m 852.17613,255.35214 4.1844,2.096 -1.59032,0.958 0.041,0.03 -0.61152,0.498 0.61152,0.796 1.07686,-0.522 0.86825,0.628 -0.41719,0.971 1.00376,0.202 1.10003,-0.501 -0.43324,2.004 -0.4582,1.774 -1.57605,0.24 -6.46647,-3.654 2.66717,-5.52 z m 0.41719,4.468 -0.21572,0.376 0,0.282 0.55269,0.386 0.61865,-0.105 0.42432,-0.265 -0.0945,-0.683 -0.12123,-0.177 -0.56161,-0.09 -0.60261,0.273"
+ class="c51059"
+ id="Fairfax Co., VA" />
+ <path
+ d="m 847.00046,259.10314 2.5085,1.769 6.46647,3.654 -0.86113,3.361 -4.2254,-0.417 -0.68284,-0.836 -3.7672,-4.814 -0.0571,-0.248 0.61866,-2.469 z m 3.47125,3.248 -0.0161,0 -0.36192,0.378 -0.35479,0.797 -0.0374,0.248 0.1355,0.385 0.47424,0.209 0.87539,-0.884 -0.0161,-0.698 -0.14441,-0.123 0.24069,-0.119 0.3227,-0.289 0,-0.151 -0.13015,-0.08 -0.46355,-0.154 -0.25851,0.03 -0.10341,0.177 -0.16224,0.29 z m 1.10181,0.464 0.33696,0.13 0.15155,-0.353 -0.0963,-0.234 -0.23177,-0.07 -0.3227,0.346 0.0339,0.162 0.12836,0.02"
+ class="c51153"
+ id="Prince William, VA" />
+ <path
+ d="m 850.19893,272.05714 -0.48138,-0.9 1.17135,-3.687 4.2254,0.417 1.01445,3.487 -0.24781,2.459 -0.77377,0.119 -1.52435,-0.593 -0.0642,-0.699 -0.30665,-0.307 -0.33696,-0.07 -0.45107,-0.08 -0.22464,0.15 -0.30665,0.227 0.1141,0.504 -1.80783,-1.027"
+ class="c51179"
+ id="Stafford, VA" />
+ <path
+ d="m 856.12875,271.37414 5.38427,0.548 -0.59548,2.876 -0.89856,0.458 -4.13804,-1.423 0.24781,-2.459"
+ class="c51099"
+ id="King George, VA" />
+ <path
+ d="m 861.51302,271.92214 0.9164,1.333 1.71868,0.631 0.68284,0.08 1.71156,-0.199 2.01642,-0.323 0.23534,0.03 0.0642,0.02 1.57427,1.366 0.16937,0.137 0.36014,0.563 0.0892,0.17 -1.70443,1.966 -2.07882,-0.322 -0.38689,-0.06 -1.02158,-1.075 -1.43878,-1.205 -0.0802,-0.04 -0.86647,1.116 0.0321,0.179 -2.58873,-1.478 0.59548,-2.876"
+ class="c51193"
+ id="Westmoreland, VA" />
+ <path
+ d="m 871.05138,275.72314 0.30487,0.232 1.83279,0.932 0.47424,0.09 0.58656,0.03 0.14442,0.02 0.16046,0.03 0.0392,0 1.51187,0.513 0.61687,0.396 0.009,1.325 -0.21573,3.464 -0.31557,0.312 -4.02572,-2.956 -2.82763,-2.436 1.70443,-1.966"
+ class="c51133"
+ id="Northumberland, VA" />
+ <path
+ d="m 874.95586,287.22814 1.46374,-0.812 1.07685,0.227 0.11054,0.04 0.15333,0.111 0.41184,0.538 0.38688,0.733 0.31022,0.955 0.10519,0.386 0,0.274 -0.33875,1.398 -0.60795,-0.316 -2.0093,-1.066 -1.06259,-2.467"
+ class="c51115"
+ id="Mathews, VA" />
+ <path
+ d="m 882.24602,299.52214 0.42432,1.68 -0.73989,0.529 -1.0519,0.653 -1.43699,-2.001 2.80446,-0.861"
+ class="c51710"
+ id="Norfolk, VA" />
+ <path
+ d="m 870.04762,307.32614 0.007,-6.823 2.62082,-3.865 4.26463,4.181 -0.78625,0.31 -0.0713,0.04 -5.2559,7.506 -0.23355,-0.06 -0.54556,-1.293"
+ class="c51093"
+ id="Isle of Wight, VA" />
+ <path
+ d="m 878.36293,301.10614 -0.0321,0.755 0.22821,7.433 -0.90213,0.193 -6.69468,1.526 -0.0321,0 -0.10341,-2.344 5.2559,-7.506 0.0713,-0.04 0.78625,-0.311 1.42273,0.288"
+ class="c51800"
+ id="Suffolk, VA" />
+ <path
+ d="m 880.87855,302.38414 1.0519,-0.653 3.24482,6.166 -3.42133,0.722 -3.1949,0.675 -0.22821,-7.433 0.79695,1.199 1.75077,-0.676"
+ class="c51550"
+ id="Chesapeake, VA" />
+ <path
+ d="m 882.24602,299.52214 2.68322,-0.602 0.36013,-0.05 0.12124,0.02 0.23177,0.109 0.13728,0.236 3.68698,6.958 0.29239,0.724 -4.58376,0.981 -3.24482,-6.166 0.73989,-0.529 -0.42432,-1.68"
+ class="c51810"
+ id="Virginia Beach, VA" />
+ <path
+ d="m 850.9861,261.84114 -0.25768,0.04 -0.12535,0.244 -0.13232,0.23 0.39695,0.16 0.17412,0.16 0.10445,-0.08 0.11143,-0.06 0.0627,-0.03 0.10446,0.153 0.007,0.126 0.20893,0.05 0.2925,0.119 0.12535,-0.355 -0.10445,-0.251 -0.23679,-0.06 -0.1184,-0.06 0,-0.133 -0.13232,-0.08 -0.48054,-0.181 z"
+ class="c51685"
+ id="Manassas Park, VA" />
+ <path
+ d="m 911.49221,100.69114 6.19726,-1.719997 -0.38688,0.795 -0.0232,5.642997 0.1355,0.383 0.60439,0.596 0.73811,0.907 0.40293,0.499 0.0713,0.114 0.41719,0.674 -0.21572,2.001 -0.18542,0.515 0,0 -0.0802,0.137 -0.79516,1.398 -0.066,0.103 -0.0945,0.138 -0.22464,0.29 -0.041,0.06 -0.51525,0.378 -0.34409,-0.03 -1.07685,1.397 -1.80783,-1.478 -0.76307,-4.66 0.69888,-1.881 -1.92906,-0.738 -0.64362,-0.25 0.025,-2.884 -0.0981,-2.395"
+ class="c50009"
+ id="Essex, VT" />
+ <path
+ d="m 911.49221,100.69114 0.0981,2.395 -0.025,2.884 0.64362,0.25 -0.57052,1.423 -0.42611,0.337 -1.65807,-0.621 -0.64005,2.999 -0.52951,2.232 -2.00929,-0.481 -0.29596,-0.289 -1.39064,-1.712 -0.10697,-0.996 -2.54594,-0.594 -0.93244,-5.231 10.38878,-2.596"
+ class="c50019"
+ id="Orleans, VT" />
+ <path
+ d="m 906.71412,143.61814 -0.50812,-0.04 0.0963,1.342 0.40293,2.09 -2.1234,0.385 0.0802,0.481 0.78803,3.801 1.43343,-0.273 0.89856,4.251 -1.52792,0.321 -3.98471,0.861 -1.23018,-4.404 -1.71869,-8.397 6.34702,-1.238 1.04654,0.821"
+ class="c50003"
+ id="Bennington, VT" />
+ <path
+ d="m 891.03556,105.74614 1.00376,6.636 -1.25336,4.091 -0.26564,-0.224 -0.48138,-0.901 -0.81834,-4.797 -0.58834,-3.769 0.025,-0.394 2.37834,-0.642"
+ class="c50013"
+ id="Grand Isle, VT" />
+ <path
+ d="m 905.86904,114.08614 3.80821,0.972 0.0642,0.05 0.12123,0.224 -0.025,0.369 -1.20344,4.871 -0.91639,-0.169 -2.36944,2.041 -0.23533,1.758 -0.45107,1.913 -1.01802,-0.137 -4.12378,-2.113 0.27456,-2.795 -0.27456,-0.07 0.48316,-3.006 0.27278,-1.212 2.69926,0.594 2.45145,-1.27 0.44215,-2.025"
+ class="c50023"
+ id="Washington, VT" />
+ <path
+ d="m 912.20893,106.22014 1.92906,0.738 -0.69888,1.881 0.76307,4.661 1.80783,1.478 -1.12499,0.707 -1.11252,0.692 -0.0838,0.08 -0.0499,0.04 -0.53843,0.972 -0.0553,0.234 0,0.144 0.52773,1.84 0.29953,0.403 0.27277,0.217 -2.28207,-0.274 -2.10557,0.747 -1.12321,-0.207 1.20344,-4.871 0.025,-0.369 -0.12123,-0.224 -0.0642,-0.05 -3.80821,-0.972 0.50634,-1.977 2.00929,0.481 0.52951,-2.232 0.64005,-2.999 1.65807,0.621 0.42611,-0.337 0.57052,-1.423"
+ class="c50005"
+ id="Caledonia, VT" />
+ <path
+ d="m 902.03587,108.51814 2.54594,0.594 0.10697,0.996 1.39064,1.712 0.29596,0.289 -0.50634,1.977 -0.44215,2.025 -2.45145,1.27 -2.69926,-0.594 -2.90073,-3.585 0.72206,-2.033 1.23197,-2.089 2.05564,-0.876 0.65075,0.314"
+ class="c50015"
+ id="Lamoille, VT" />
+ <path
+ d="m 901.10343,103.28714 0.93244,5.231 -0.65075,-0.314 -2.05564,0.876 -1.23197,2.089 -0.72206,2.033 -5.33613,-0.82 -1.00376,-6.636 10.06787,-2.459"
+ class="c50011"
+ id="Franklin, VT" />
+ <path
+ d="m 892.03932,112.38214 5.33613,0.82 2.90073,3.585 -0.27278,1.212 -0.48316,3.006 0.27456,0.07 -0.27456,2.795 -0.73097,-1.913 -0.96454,-0.594 -3.92766,1.543 -0.86826,0.1 -0.53842,-2.796 0.0891,-0.964 -0.025,-0.25 -0.009,-0.01 -0.29774,-0.804 -0.22999,-0.499 -0.76486,-0.924 -0.46711,-0.273 1.25336,-4.091"
+ class="c50007"
+ id="Chittenden,VT" />
+ <path
+ d="m 893.02881,122.99714 0.86826,-0.1 3.92766,-1.543 0.96454,0.594 0.73097,1.913 4.12378,2.113 -0.41897,1.711 -0.33697,1.015 -0.70066,0.667 -1.3425,1.132 0.28347,0.611 0.15333,0.273 -1.26227,-0.169 -2.00038,0.586 -0.97167,0.369 0.58478,1.535 -2.41935,0.901 -0.59548,-1.157 -0.27991,-0.507 -1.91659,-4.525 -0.0356,-0.08 0,0 -0.0392,-0.765 0,-0.749 0.009,-1.902 0.67392,-1.922"
+ class="c50001"
+ id="Addison, VT" />
+ <path
+ d="m 895.21283,134.60914 2.41935,-0.901 -0.58478,-1.535 0.97167,-0.369 2.00038,-0.586 1.26227,0.169 1.18382,-1.045 1.40491,0.33 0.28704,0.312 2.08239,2.589 0.37797,4.862 -0.70958,2.419 -0.24069,1.943 -6.34702,1.238 -0.97345,-4.525 -2.76344,-0.61 -0.54556,-0.226 -0.0642,-0.09 -0.16224,-1.342 0.0909,-0.933 0.31022,-1.704"
+ class="c50021"
+ id="Rutland, VT" />
+ <path
+ d="m 906.71412,143.61814 2.35339,0.199 2.08952,-0.843 1.97542,-0.433 0.0642,1.695 0.54021,0.843 0.0357,0.138 0.43859,2.458 -1.04654,3.584 0.0731,0.232 0.47603,1.021 1.83814,1.478 -7.76975,1.664 -0.89856,-4.251 -1.43343,0.273 -0.78803,-3.801 -0.0802,-0.481 2.1234,-0.385 -0.40293,-2.09 -0.0963,-1.342 0.50812,0.04"
+ class="c50025"
+ id="Windham, VT" />
+ <path
+ d="m 903.22505,127.68914 0.0963,0.355 0.21751,0.346 1.31041,0.112 1.88628,0.225 4.82088,0.554 2.14657,0.298 -1.0198,4.331 -0.61865,2.057 0.79694,3.664 0.34409,0.9 -0.0731,2.01 -1.97542,0.433 -2.08952,0.843 -2.35339,-0.199 -1.04654,-0.821 0.24069,-1.943 0.70958,-2.419 -0.37797,-4.862 -2.08239,-2.589 -0.28704,-0.312 -1.40491,-0.33 -1.18382,1.045 -0.15333,-0.273 -0.28347,-0.611 1.3425,-1.132 0.70066,-0.667 0.33697,-1.015"
+ class="c50027"
+ id="Windsor, VT" />
+ <path
+ d="m 914.14512,120.30614 -0.44215,9.273 -2.14657,-0.298 -4.82088,-0.554 -1.88628,-0.225 -1.31041,-0.112 -0.21751,-0.346 -0.0963,-0.355 0.41897,-1.711 1.01802,0.137 0.45107,-1.913 0.23533,-1.758 2.36944,-2.041 0.91639,0.169 1.12321,0.207 2.10557,-0.747 2.28207,0.274"
+ class="c50017"
+ id="Orange, VT" />
+ <path
+ d="m 146.86209,9.3671435 17.02819,4.4749995 8.45259,2.122 4.39656,1.086 -0.46712,1.984 -1.0929,3.737 -0.80229,1.815 -0.93244,3.794 -0.0481,1.824 -2.41044,9.731 -0.12123,0.112 -1.92015,-0.146 -0.0321,-0.441 0.41006,-0.458 0.28169,-0.41 0.0945,-0.265 -0.67392,-2.443 -0.11232,-0.25 -0.24069,-0.376 -0.9574,-0.531 -0.33696,0.03 -1.74365,0.578 -1.6545,0.845 -4.21114,-0.184 -1.05368,-0.957 0.31379,-1.134 -1.31754,-0.539 -1.15709,0.298 -0.77911,0.257 -0.0802,0.05 -0.0321,0.06 -0.29774,1.753 0.009,0.08 0.12659,0.257 -1.58141,-0.41 -1.36568,-0.617 -2.95065,-6.012 -2.20184,-4.869 -0.44928,-3.552 -0.0571,-0.281 -0.57052,-0.105 -0.0143,-2.973 0.25674,-0.07 1.36567,-0.994 0.0392,-0.266 -0.44215,-4.406 -0.22286,-0.955 -0.44394,-1.2449995"
+ class="c53047"
+ id="Okanogan, WA" />
+ <path
+ class="c53073"
+ d="m 146.86209,9.3671435 0.44394,1.2449995 0.22286,0.955 0.44215,4.406 -0.0392,0.266 -1.36567,0.994 -0.25674,0.07 -1.60815,-0.298 -0.85221,0.03 -5.0687,-1.375 -12.8331,-3.671 -5.14358,-1.438 -0.33874,-0.03 -0.0464,-1.6869995 -1.43164,-2.115 -1.33359,-2.972 -0.25673,-1.182 0.009,-0.08 0.14442,-0.226 0.41719,-0.328 0.43324,-0.25 0.31378,-0.176 5.1828,1.486 4.53206,1.293 5.09544,1.535 9.25666,2.443 4.08099,1.101 m -33.04193,-9.274 0.0963,0.03 0.71671,0.209 0.0464,0.602 -0.11946,0.04 -0.80407,-0.29 0.0642,-0.587"
+ id="Whatcom, WA" />
+ <path
+ d="m 86.652791,56.615143 0.657879,-2.096 3.415979,1.076 2.19293,0.635 2.153707,0.61 -1.301495,4.701 -2.481755,-0.103 -0.121235,-0.04 -0.673925,-1.052 0.351225,-1.029 -0.167589,-0.538 -0.233556,-0.417 -0.06418,-0.106 -0.04814,-0.02 -0.08914,-0.06 -1.035847,-0.06 -2.554853,-1.503"
+ class="c53069"
+ id="Wahkiakum, WA" />
+ <path
+ d="m 187.88415,79.197143 2.74918,1.485 -0.33696,1.004 0.50455,2.034 0.0232,0.08 0.15333,1.27 0.0981,1.975 -0.76485,2.108 0.0981,1.59 -8.81629,-2.058 0.64361,-2.77 0.93958,0.216 1.0198,-4.548 0.3227,-1.295 0.40114,-0.257 0.73098,-0.167 1.9772,0.472 0.25674,-1.139"
+ class="c53003"
+ id="Asotin, WA" />
+ <path
+ d="m 179.06072,73.339143 1.89698,-1.086 0.20859,-0.07 0.94849,0.02 0.40114,0.153 2.31417,0.947 0.7488,0.458 0.78625,0.634 1.55288,2.869 0.12658,0.981 -0.16045,0.957 -0.25674,1.139 -1.9772,-0.472 -0.73098,0.167 -0.40114,0.257 -0.3227,1.295 -1.0198,4.548 -0.93958,-0.216 -0.64361,2.77 -1.92015,-0.465 0.62757,-2.733 0.99662,-4.885 -1.26227,-3.423 -1.95403,-0.449 0.48316,-1.978 0.49742,-1.413"
+ class="c53023"
+ id="Garfield, WA" />
+ <path
+ d="m 173.06671,72.656143 0.17651,0.158 0.49742,0.869 0.15333,0.09 0.68283,0.112 0.13729,0 3.83317,-0.242 0.51346,-0.296 -0.49742,1.413 -0.48316,1.978 1.95403,0.449 1.26227,3.423 -0.99662,4.885 -0.62757,2.733 -5.84247,-1.406 -0.29595,-0.07 0.24781,-0.754 0.93245,-3.849 -1.95225,-0.458 -1.47978,-2.411 1.39955,-5.922 0.3851,-0.69"
+ class="c53013"
+ id="Columbia, WA" />
+ <path
+ d="m 173.06671,72.656143 -0.3851,0.69 -1.39955,5.922 1.47978,2.411 1.95225,0.458 -0.93245,3.849 -0.24781,0.754 -15.44501,-3.703 0.21751,-4.508 0.22465,-0.289 0.18363,-0.17 0.7078,-0.208 0.39401,-0.05 1.57428,0.1 1.18204,-0.644 2.03247,-1.285 0.80408,-0.706 0.46533,-0.571 0.61152,-1.301 0.11945,-0.202 0.47425,-0.387 0.84329,-0.495 1.40669,-0.646 0.0731,0 2.41044,0.387 1.05189,0.393 0.20146,0.21"
+ class="c53071"
+ id="Walla Walla, WA" />
+ <path
+ d="m 156.2489,65.157143 2.77236,0.676 6.4112,1.647 8.25291,1.911 -0.44215,3.423 -0.17651,-0.158 -0.20146,-0.211 -1.05189,-0.392 -2.41044,-0.387 -0.0731,0 -1.40669,0.646 -0.84329,0.495 -0.47425,0.387 -0.11945,0.202 -0.61152,1.301 -0.46533,0.571 -0.80408,0.706 -2.03247,1.285 -1.18204,0.644 -1.57428,-0.1 -0.39401,0.05 -0.7078,0.208 -0.18363,0.169 -0.22465,0.289 -1.01267,-0.946 -0.36192,-0.195 -0.44928,-0.144 -0.47603,-0.298 -0.73811,-1.059 -0.025,-0.13 0.0892,-0.193 1.25335,-4.467 0,-0.731 -0.51525,-0.837 -0.68997,-0.971 -0.36192,-0.82 -0.40114,-1.334 0.0232,-0.28 1.60815,-0.966"
+ class="c53021"
+ id="Franklin, WA" />
+ <path
+ d="m 182.80653,59.275143 12.02189,2.789 -0.66857,2.941 -2.93995,13.081 -0.58657,2.596 -2.74918,-1.485 0.16045,-0.957 -0.12658,-0.981 -1.55288,-2.869 -0.78625,-0.634 -0.7488,-0.458 -2.31417,-0.947 -0.40114,-0.153 -0.94849,-0.02 -0.20859,0.07 -1.89698,1.086 -0.51346,0.296 -3.83317,0.242 -0.13729,0 -0.68283,-0.112 -0.15333,-0.09 -0.49742,-0.869 0.44215,-3.423 3.14142,0.04 0.57943,-0.529 0.44215,-0.499 0.64183,-0.901 0.43502,-1.02 1.79001,-7.698 2.0913,0.49"
+ class="c53075"
+ id="Whitman, WA" />
+ <path
+ d="m 192.75316,43.140143 5.98688,1.4 -0.34588,1.517 -3.02909,13.621 -0.53665,2.386 -12.02189,-2.789 2.98096,-12.551 0.21573,0.33 0.14619,0.09 3.17351,1.141 0.64184,0.119 1.3104,-5.616 1.478,0.353"
+ class="c53063"
+ id="Spokane, WA" />
+ <path
+ d="m 203.65006,23.397143 -0.77911,3.384 -4.13091,17.759 -5.98688,-1.4 0.44216,-1.945 -0.36906,-2.731 2.08952,-9.057 -1.94511,-0.44 0.44216,-1.93 1.58318,-1.823 1.11608,-0.942 1.20522,-0.536 0.40293,-1.705 5.92982,1.366"
+ class="c53051"
+ id="Pend Oreille, WA" />
+ <path
+ d="m 197.72024,22.031143 -0.40293,1.705 -1.20522,0.536 -1.11608,0.942 -1.58318,1.823 -0.44216,1.93 1.94511,0.44 -2.08952,9.057 0.36906,2.731 -0.44216,1.945 -1.478,-0.353 -1.3104,5.616 -0.64184,-0.119 -3.17351,-1.141 -0.14619,-0.09 -0.21573,-0.33 -2.94887,-0.369 -1.1339,-0.225 -0.0963,-0.458 -0.36905,-1.198 -0.70067,-1.76 -0.0481,-0.05 -0.76306,0 -1.00376,0.401 -0.46533,0.25 -0.23355,-3.078 0.0232,-0.1 0.0981,-0.07 0.66679,-0.257 0.29596,0.06 1.83992,-0.459 2.08239,-3.189 0.24069,-0.466 2.51563,-8.252 0.27278,-2.307 -0.0392,-0.651 -0.34588,-1.551 -0.2086,-0.186 -0.0802,-0.85 0.19254,-1.286 0.17651,-0.772 0.22464,-0.288 0.28883,-0.266 11.45137,2.676"
+ class="c53065"
+ id="Stevens, WA" />
+ <path
+ d="m 168.94472,39.901143 1.92015,0.146 0.23356,0.722 0.11945,0.202 1.0929,0.772 0.37975,0.02 0.0642,-0.136 2.61012,0.835 0.35301,0.732 0.82904,0.979 0.58656,0.369 0.14441,0.04 0.22464,0 0.23356,-0.151 0.52238,-1.118 0.46533,-0.25 1.00376,-0.401 0.76306,0 0.0481,0.05 0.70067,1.76 0.36905,1.198 0.0963,0.458 1.1339,0.225 2.94887,0.369 -2.98096,12.551 -2.0913,-0.49 -15.58764,-3.776 3.81713,-15.108"
+ class="c53043"
+ id="Lincoln, WA" />
+ <path
+ d="m 180.71523,58.785143 -1.79001,7.698 -0.43502,1.02 -0.64183,0.901 -0.44215,0.499 -0.57943,0.529 -3.14142,-0.04 -8.25291,-1.911 -6.4112,-1.647 -2.77236,-0.676 0.98771,-3.888 2.1127,0.529 3.81,0.974 1.96828,-7.763 15.58764,3.776"
+ class="c53001"
+ id="Adams, WA" />
+ <path
+ d="m 168.91263,39.460143 0.0321,0.441 -3.81713,15.108 -1.96828,7.763 -3.81,-0.974 -2.1127,-0.529 -0.98771,3.888 -1.60815,0.966 0.0802,-0.08 -0.0143,-0.151 -0.37975,-0.749 -0.17472,-0.216 -0.20147,-0.112 -0.12836,0.05 -0.64362,0.497 -0.48138,0.418 -0.4992,0.281 -0.41897,0.154 -0.38332,0 -2.85259,-0.369 -0.54021,-0.177 -0.12659,-0.07 -0.90034,-2.798 0.70601,-0.755 0.32983,-0.411 0.11232,-0.295 0.13728,-3.071 -0.37083,-2.685 0.44215,-1.212 0.53129,-0.868 0.36014,-1.302 0.009,-0.135 -0.025,-0.105 0.94135,-2.131 2.29812,-2.161 5.22203,1.238 4.27532,-3.295 2.79732,-4.218 0.28883,-1.15 2.04139,-1.238 1.83992,0.451"
+ class="c53025"
+ id="Grant, WA" />
+ <path
+ d="m 147.87654,65.601143 0.12659,0.07 0.54021,0.177 2.85259,0.369 0.38332,0 0.41897,-0.154 0.4992,-0.281 0.48138,-0.417 0.64362,-0.498 0.12836,-0.05 0.20147,0.112 0.17472,0.216 0.37975,0.749 0.0143,0.151 -0.0802,0.08 -0.0232,0.28 0.40114,1.334 0.36192,0.82 0.68997,0.972 0.51525,0.836 0,0.731 -1.25335,4.468 -0.0892,0.192 0.025,0.13 0.73811,1.059 0.47603,0.298 0.44928,0.145 0.36192,0.194 1.01267,0.947 -0.21751,4.509 -0.45106,0.377 -0.3441,0.152 -1.17312,0.339 -0.57052,0.09 -0.69889,-0.05 -0.41006,-0.103 -0.44215,-0.227 -2.41044,-0.33 -0.90926,-0.05 -0.90748,-0.06 -3.11824,0.385 -1.67055,-0.159 -1.53505,-0.16 1.66341,-6.317 0.36193,-1.487 0.0392,-0.634 2.36408,-9.2"
+ class="c53005"
+ id="Benton, WA" />
+ <path
+ d="m 144.64598,78.689143 -1.19808,4.55 -2.21076,0 -2.41044,0.296 -0.51347,0.128 -0.83617,0.635 -3.16637,-0.193 -1.25336,-0.217 -0.32805,-0.216 -0.19433,-0.282 -0.41719,-0.786 -0.44929,-0.315 -0.68462,-0.168 -0.33696,0.112 -0.69175,0.33 -1.71869,0.241 -1.41382,0.217 -0.83616,0.257 -0.34588,-0.458 -5.83355,-2.731 -0.55447,-0.113 -1.10003,-0.162 -1.09468,-0.949 0.41897,-1.189 -1.40668,-0.465 0.4992,-2.057 1.04476,-3.736 1.36568,0.369 1.52614,0.411 4.19509,1.132 1.28545,0.403 7.38464,2.016 11.27487,2.94"
+ class="c53039"
+ id="Klickitat, WA" />
+ <path
+ d="m 98.280669,70.557143 2.451451,-1.253 2.44966,-0.522 0.73098,0.112 0.36192,0.176 0.28169,0.289 0.47424,0.227 1.42987,-0.555 1.43877,-0.579 -0.90926,3.239 -1.05189,3.463 -1.26228,4.467 -0.26564,0 -0.0321,0 -0.44215,-0.112 -0.0143,0 -0.52416,-0.257 -4.458962,-2.747 -0.426106,-0.323 -0.818337,-0.859 -0.313785,-0.401 -0.01605,-0.564 0.153327,-0.417 0.344094,-0.579 0.418974,-2.805"
+ class="c53011"
+ id="Clark, WA" />
+ <path
+ d="m 121.07644,64.176143 -2.09665,7.611 -1.36568,-0.369 -1.04476,3.736 -0.4992,2.057 1.40668,0.465 -0.41897,1.189 -1.72582,-0.03 -1.32646,-0.103 -0.43502,-0.105 -1.10716,-0.61 -0.94849,0.06 -0.68284,0.353 -0.45106,0.403 -5.70519,0.795 1.26228,-4.467 1.05189,-3.463 0.90926,-3.239 2.13588,-7.296 11.04131,3.02"
+ class="c53059"
+ id="Skamania, WA" />
+ <path
+ d="m 110.03513,61.156143 -2.13588,7.296 -1.43877,0.579 -1.42987,0.555 -0.47424,-0.227 -0.28169,-0.289 -0.36192,-0.176 -0.73098,-0.112 -2.44966,0.522 -2.451451,1.253 0.119452,-0.378 0.144413,-2.185 -0.449283,-2.505 -0.153327,-0.605 -2.594076,-3.18 -0.755937,-0.314 -0.82012,0.151 1.301495,-4.701 1.945111,0.506 1.23018,0.355 9.023103,2.628 2.76345,0.827"
+ class="c53015"
+ id="Cowlitz, WA" />
+ <path
+ d="m 84.354672,43.846143 3.647752,1.175 3.801079,1.077 3.583568,1.109 -1.01267,3.703 -0.377968,1.624 -0.442152,1.616 -0.634702,2.08 -2.19293,-0.635 -3.415979,-1.076 -0.657879,2.096 -2.595858,0.419 -0.474244,-0.281 -1.831007,-2.507 1.221266,-3.616 0.272779,0.811 0.353008,0.177 0.185419,-0.02 0.811205,-0.09 1.012671,-0.787 0.135498,-0.297 0.948487,-3.231 0.0731,-1.357 -1.310409,0.416 -0.272779,0.04 -0.240688,-0.232 -0.723845,-0.845 -0.08023,-0.136 -0.03922,-0.06 -0.04101,-0.119 0.297739,-1.063"
+ class="c53049"
+ id="Pacific, WA" />
+ <path
+ d="m 95.387071,47.207143 3.198469,0.915 -0.19255,0.643 3.51047,1.036 11.08232,3.208 2.41044,1.164 3.0701,1.109 0.24782,-0.241 0.65075,-0.41 0.20859,-0.103 0.31379,-0.08 4.64438,1.277 0.56338,1.503 0.0713,0.683 -1.83992,6.348 -0.24069,0.434 -0.0642,0.02 -0.11233,-0.02 -1.83279,-0.508 -11.04131,-3.02 -2.76345,-0.827 -9.023103,-2.628 -1.23018,-0.355 -1.945111,-0.506 -2.153707,-0.61 0.634702,-2.08 0.442152,-1.616 0.377968,-1.624 1.01267,-3.703"
+ class="c53041"
+ id="Lewis, WA" />
+ <path
+ d="m 99.838897,41.541143 1.920153,0.571 3.41419,-0.724 0.46712,-0.186 0.65966,-0.383 0.99662,3.141 0.11945,1.414 0.37797,0.869 1.5511,3.005 0.43324,0.642 0.53842,0.45 0.45107,0.208 2.21789,2.461 -11.08232,-3.208 -3.51047,-1.036 0.19255,-0.643 1.253357,-6.581"
+ class="c53067"
+ id="Thurston, WA" />
+ <path
+ d="m 107.93848,36.301143 4.2664,1.255 -0.46533,0.917 1.46196,1.324 0.90035,1.6 3.78503,3.278 1.31041,0.738 1.81496,0.669 0.0499,-0.07 0.52951,-0.257 0.11946,-0.05 0.0891,0.02 0.19255,0.06 2.11448,1.054 1.04476,1.013 1.81497,1.317 0.54555,0.193 -0.18363,0.724 -2.46036,2.667 -0.15155,2.74 -0.0321,0.08 -0.15332,0.161 -4.64438,-1.277 -0.31379,0.08 -0.20859,0.104 -0.65075,0.41 -0.24782,0.241 -3.0701,-1.109 -2.41044,-1.165 -2.21789,-2.46 -0.45107,-0.208 -0.53842,-0.45 -0.43324,-0.642 -1.5511,-3.006 -0.37797,-0.868 -0.11945,-1.414 -0.99662,-3.141 -0.0892,-1.432 0.025,-0.119 0.1355,-0.298 0.14442,-0.16 0.32983,-0.202 0.30487,-0.257 0.25851,-0.377 0.23178,-0.683 0.29774,-0.99"
+ class="c53053"
+ id="Pierce, WA" />
+ <path
+ d="m 127.5126,49.352143 1.51188,0.36 0.32805,0.251 1.31932,1.712 0.50633,0.875 0.0161,0.07 0.0321,0.522 0.44215,1.239 0.18364,0.305 5.98688,1.592 -0.0571,2.015 0.9574,2.339 5.52868,1.512 2.70818,0.658 0.90034,2.797 -2.36408,9.2 -0.0392,0.634 -0.36193,1.487 -0.46533,1.767 -11.27487,-2.94 -7.38464,-2.016 -1.28545,-0.403 -4.19509,-1.132 -1.52614,-0.411 2.09665,-7.611 1.83279,0.509 0.11233,0.02 0.0642,-0.02 0.24069,-0.434 1.83992,-6.348 -0.0713,-0.683 -0.56338,-1.503 0.15332,-0.161 0.0321,-0.08 0.15155,-2.74 2.46036,-2.667 0.18363,-0.724"
+ class="c53077"
+ id="Yakima, WA" />
+ <path
+ d="m 127.5126,49.352143 0.0499,-1.036 0.30488,-5.272 0.0481,-0.273 1.99147,-1.608 2.97383,-1.783 1.73651,-0.185 0.79516,1.72 1.21414,2.338 1.25335,0.932 1.29258,1.054 2.8526,2.312 0.87717,1.031 0.30487,0.52 0.41719,0.442 4.49283,1.141 1.09112,1.279 0.025,0.105 -0.009,0.135 -0.36014,1.302 -0.53129,0.868 -0.44215,1.213 0.37083,2.685 -0.13728,3.07 -0.11232,0.296 -0.32983,0.41 -0.70601,0.756 -2.70818,-0.658 -5.52868,-1.512 -0.9574,-2.339 0.0571,-2.015 -5.98688,-1.592 -0.18364,-0.305 -0.44215,-1.239 -0.0321,-0.522 -0.0161,-0.07 -0.50633,-0.875 -1.31932,-1.712 -0.32805,-0.251 -1.51188,-0.36"
+ class="c53037"
+ id="Kittitas, WA" />
+ <path
+ d="m 168.91263,39.460143 -1.83992,-0.451 -2.04139,1.238 -0.28883,1.15 -2.79732,4.218 -4.27532,3.295 -5.22203,-1.238 -2.29812,2.161 -0.94135,2.131 -1.09112,-1.279 0.16046,-0.312 0.19968,-0.547 0.22464,-0.676 -0.0143,-0.128 -0.50633,-0.779 -1.55288,-0.699 -0.23178,-0.128 -0.44215,-0.385 -0.0642,-0.193 -0.0481,-0.788 0,-0.556 0.11232,-0.328 0.48316,-1.004 2.50671,-4.429 0.22465,-0.249 0.14441,-0.1 0.22464,-0.09 0.98058,-0.128 0.19255,0.09 0.20146,0.209 0.0802,0.128 0.10519,0.04 1.50118,-0.04 1.84883,-1.808 1.10895,-1.212 0,-0.177 -0.0571,-0.274 -0.12659,-0.257 -0.009,-0.08 0.29774,-1.753 0.0321,-0.06 0.0802,-0.05 0.77911,-0.257 1.15709,-0.298 1.31754,0.539 -0.31379,1.134 1.05368,0.957 4.21114,0.184 1.6545,-0.845 1.74365,-0.578 0.33696,-0.03 0.9574,0.531 0.24069,0.376 0.11232,0.25 0.67392,2.443 -0.0945,0.265 -0.28169,0.41 -0.41006,0.458"
+ class="c53017"
+ id="Douglas, WA" />
+ <path
+ d="m 176.73943,17.050143 9.52944,2.305 -0.28883,0.266 -0.22464,0.289 -0.17651,0.772 -0.19254,1.285 0.0802,0.85 0.2086,0.186 0.34588,1.551 0.0392,0.651 -0.27278,2.307 -2.51563,8.253 -0.24069,0.465 -2.08239,3.189 -1.83992,0.459 -0.29596,-0.06 -0.66679,0.257 -0.0981,0.07 -0.0232,0.1 0.23355,3.077 -0.52238,1.118 -0.23356,0.151 -0.22464,0 -0.14441,-0.04 -0.58656,-0.369 -0.82904,-0.979 -0.35301,-0.732 -2.61012,-0.835 -0.0642,0.136 -0.37975,-0.02 -1.0929,-0.772 -0.11945,-0.202 -0.23356,-0.722 0.12123,-0.112 2.41044,-9.731 0.0481,-1.824 0.93244,-3.794 0.80229,-1.815 1.0929,-3.737 0.46712,-1.984"
+ class="c53019"
+ id="Ferry, WA" />
+ <path
+ class="c53055"
+ d="m 112.92873,13.538143 0.0963,-0.805 0.31379,-0.779 0.36192,-0.474 0.72206,0.02 1.166,-0.03 -0.22464,0.53 -0.082,0.192 -0.86648,1.647 -0.16937,0.106 -0.9467,-0.177 -0.13729,-0.06 -0.23355,-0.176 m -1.64737,-5.1989995 -0.0321,1.189 0.44216,1.2529995 0.33696,1.254 -0.47246,0.442 -0.43502,-0.337 -0.98771,-1.061 -0.24247,-0.371 -0.0874,-0.232 -0.0802,-0.394 -0.19433,-1.4939995 0.0321,-0.137 0.17828,-0.201 0.35301,-0.257 0.41006,0.09 0.77912,0.259 m 4.73352,1.068 -0.13728,0 -0.34588,0.24 -0.0161,0.08 -0.0642,0.4419995 -0.007,0.249 0.0642,0.104 -2.90964,0.233 -0.19255,-0.7879995 -0.22464,-1.157 0,-0.369 0.60974,-0.442 1.33537,-0.834 0.39223,-0.05 0.36192,0.07 0.25852,0.135 0.54556,0.491 1.10181,1.182 0.007,0.03 -0.26565,0.183 -0.51346,0.186"
+ id="San Juan, WA" />
+ <path
+ d="m 116.96336,15.176143 0.0802,-0.06 0.14441,-0.06 0.10341,0.07 0.0499,0.112 0.10341,0.282 0.56338,1.927 0.0713,0.266 -0.0321,0.224 -0.0321,0.05 -0.32983,0.2 -0.14442,0.03 -0.31378,-0.07 -0.0963,-0.04 -0.16046,-0.353 -0.11945,-0.106 -0.22642,-0.07 -0.31379,0 -0.15154,0.08 -0.53843,0.41 -0.40114,0.465 -0.0891,0.371 0.98771,2.756 0.33875,0.642 0.19255,0.03 0.30487,0.169 0.99662,1.648 0.28883,1.036 -0.15155,0.666 -0.25851,0.5 -0.56161,0.41 -0.53842,-0.06 -1.45482,-2.903 -0.3441,-1.382 -0.31557,-1.109 -0.9467,-2.392 0.43324,-1.166 2.20184,-2.717 0.32092,0 0.33874,0.144"
+ class="c53029"
+ id="Island, WA" />
+ <path
+ d="m 119.91223,18.528143 8.08353,2.273 3.86526,1.086 1.125,0.337 7.46487,2.048 0.16937,2.067 -0.26564,1.253 -0.27278,0.939 -1.27832,0.418 -0.0891,-0.01 -1.15709,0.1 -0.65074,0.224 -1.18918,2.331 -0.21573,1.975 0.11946,1.585 -4.53206,-1.246 -0.54734,-0.106 -1.94333,-0.497 -7.37751,-2.034 -4.8298,-1.414 0.009,-0.05 0.1765,-0.506 2.22502,-2.821 0.48316,-0.04 0.44928,0.06 0.36371,-0.169 0.0874,-0.106 0.26386,-0.875 -0.0143,-0.323 -0.61152,-0.642 -0.63471,-1.317 -0.14441,-0.667 -0.009,-0.04 0.16937,-0.563 0.16046,-0.498 -0.1355,-1.317 0,-0.571 0.68284,-0.875"
+ class="c53061"
+ id="Snohomish, WA" />
+ <path
+ d="m 135.6211,35.146143 0.36192,1.036 -0.16937,0.353 -0.93244,0.843 -0.0481,0.1 -0.0571,0.351 -0.15868,1.368 -1.73651,0.185 -2.97383,1.783 -1.99147,1.608 -0.0481,0.273 -0.30488,5.272 -0.0499,1.036 -0.54555,-0.193 -1.81497,-1.317 -1.04476,-1.013 -2.11448,-1.054 -0.19255,-0.06 -0.0891,-0.02 -0.11946,0.05 -0.52951,0.257 -0.0499,0.07 -1.81496,-0.668 -1.31041,-0.739 -3.78503,-3.278 -0.90035,-1.6 1.35854,-0.105 0.22465,-0.103 0.25851,-0.949 0.0143,-0.217 0.009,-1.911 0.65788,-4.75 0.66679,-1.913 4.8298,1.414 7.37751,2.034 1.94333,0.498 0.54734,0.105 4.53206,1.246"
+ class="c53033"
+ id="King, WA" />
+ <path
+ d="m 110.8392,29.102143 2.87577,-1.897 0.65253,-1.373 0.62757,0.264 0.23178,0.378 0.0481,0.612 -0.31201,2.146 -1.22305,4.347 -0.36905,1.711 -1.166,2.266 -4.2664,-1.255 0.76306,-2.539 -2.24998,-0.715 -0.66679,-0.135 -0.66679,-0.194 0.22464,-0.248 1.21413,-1.111 0.0963,-0.06 0.32983,-0.08 3.85634,-2.113"
+ class="c53035"
+ id="Kitsap, WA" />
+ <path
+ d="m 98.088119,30.701143 0.584781,-1.952 8.30996,2.466 -0.32983,0.08 -0.0963,0.06 -1.21413,1.111 -0.22464,0.248 0.66679,0.194 0.66679,0.135 2.24998,0.715 -1.0608,3.529 -0.23178,0.683 -0.25851,0.378 -0.30487,0.256 -0.32983,0.202 -0.14442,0.16 -0.1355,0.298 -0.025,0.119 0.0892,1.432 -0.65966,0.383 -0.46712,0.186 -3.41419,0.724 -1.920153,-0.571 -4.275322,-1.205 -0.08023,-0.03 0.891435,-3.923 1.713338,-5.68"
+ class="c53045"
+ id="Mason, WA" />
+ <path
+ d="m 85.454703,26.499143 3.407064,1.036 1.083985,0.708 8.142367,2.458 -1.713338,5.68 -0.891435,3.923 0.08023,0.03 4.275322,1.205 -1.253357,6.581 -3.198469,-0.915 -3.583568,-1.109 -3.801079,-1.077 -3.647752,-1.175 0.199681,-1.991 0.588348,-0.33 0.666793,0.378 2.779494,-0.257 0.377969,-0.08 0.02318,0 -0.160458,-0.346 -1.814962,-2.202 -0.524164,-0.417 -0.600827,-0.224 -1.117859,-7.827 0.0071,-0.282 0.137281,-1.116 0.538427,-2.644"
+ class="c53027"
+ id="Grays Harbor, WA" />
+ <path
+ d="m 83.951743,17.740143 2.579813,0.74 0.916395,0.321 3.727981,1.157 5.599995,1.679 2.364085,0.829 1.141038,0.578 8.39732,2.458 1.42986,-5.07 2.00038,-0.282 0.78803,0.03 0.353,0.1 0.82904,1.23 -0.67571,4.209 -2.14479,2.122 -0.41898,0.9 -0.0802,0.248 0.0802,0.121 -3.85634,2.113 -8.30996,-2.466 -0.584781,1.952 -8.142367,-2.458 -1.083985,-0.708 -3.407064,-1.036 0.04992,-0.273 0.09449,-0.932 0.08914,-1.086 0.07131,-2.507 -0.02318,-0.199 -0.41006,-1.817 -0.08736,-0.161 -0.659662,-1.246 -0.01605,-0.02 -0.02318,-0.03 -0.265648,-0.321 -0.3227,-0.169"
+ class="c53031"
+ id="Jefferson, WA" />
+ <path
+ d="m 83.951743,17.740143 -0.167589,-0.442 -0.03209,-2.049 0.401146,-3.953 1.399553,-5.0079995 0.119452,-0.08 0.151544,-0.04 0.95027,0.273 0.529512,0.467 0.490289,0.433 0.586564,0.596 0.185419,0.192 1.141037,1.366 4.564147,4.3299995 0.946704,0.594 1.631325,0.733 6.341664,2.772 3.14855,0.715 2.20185,0.802 1.56714,0.99 -1.42986,5.07 -8.39732,-2.458 -1.141036,-0.578 -2.364085,-0.829 -5.599995,-1.679 -3.727981,-1.157 -0.916395,-0.321 -2.579813,-0.74"
+ class="c53009"
+ id="Clallam, WA" />
+ <path
+ d="m 146.3094,17.307143 0.0143,2.972 -2.29811,-0.933 -1.41382,-0.02 -1.7276,0.563 -0.15333,0.136 -0.20859,0.403 -0.86648,2.933 0.79516,0.914 -7.46487,-2.048 -1.125,-0.337 -3.86526,-1.086 -8.08353,-2.273 -0.27456,-0.756 -0.5206,-3.334 0.48851,-0.1 0.041,-0.02 1.45482,-2.596 -0.20146,-0.603 -0.43502,-0.594 0.33874,0.03 5.14358,1.438 12.8331,3.671 5.0687,1.375 0.85221,-0.03 1.60815,0.297"
+ class="c53057"
+ id="Skagit, WA" />
+ <path
+ d="m 146.32366,20.279143 0.57052,0.105 0.0571,0.281 0.44928,3.552 2.20184,4.869 2.95065,6.012 1.36568,0.617 1.58141,0.41 0.0571,0.274 0,0.177 -1.10895,1.212 -1.84883,1.808 -1.50118,0.04 -0.10519,-0.04 -0.0802,-0.128 -0.20146,-0.209 -0.19255,-0.09 -0.98058,0.128 -0.22464,0.09 -0.14441,0.1 -0.22465,0.249 -2.50671,4.429 -0.48316,1.004 -0.11232,0.328 0,0.556 0.0481,0.788 0.0642,0.193 0.44215,0.385 0.23178,0.128 1.55288,0.699 0.50633,0.779 0.0143,0.128 -0.22464,0.676 -0.19968,0.547 -0.16046,0.312 -4.49283,-1.141 -0.41719,-0.442 -0.30487,-0.52 -0.87717,-1.031 -2.8526,-2.312 -1.29258,-1.054 -1.25335,-0.932 -1.21414,-2.338 -0.79516,-1.72 0.15868,-1.368 0.0571,-0.351 0.0481,-0.1 0.93244,-0.843 0.16937,-0.353 -0.36192,-1.036 -0.11946,-1.585 0.21573,-1.975 1.18918,-2.331 0.65074,-0.224 1.15709,-0.1 0.0891,0.01 1.27832,-0.418 0.27278,-0.939 0.26564,-1.253 -0.16937,-2.067 -0.79516,-0.914 0.86648,-2.933 0.20859,-0.403 0.15333,-0.136 1.7276,-0.563 1.41382,0.02 2.29811,0.933"
+ class="c53007"
+ id="Chelan, WA" />
+ <path
+ d="m 658.30151,151.96514 0.15332,-1.116 1.1874,-2.161 0.38688,-0.612 4.27532,-4.91 2.97383,-5.423 0.85934,-0.749 0.52951,-0.351 0.37797,0 0.17472,0.04 0.0981,0.1 0.15333,0.273 0.0232,0.738 -0.0481,0.442 -0.82725,3.272 -0.48138,0.738 -1.4156,3.223 -2.10378,4.966 -0.40115,1.053 -5.91556,0.489"
+ class="c55029"
+ id="Door, WI" />
+ <path
+ d="m 658.30151,151.96514 5.91556,-0.489 -0.90213,1.703 -0.3851,1.262 -0.16937,0.956 -0.5937,4.307 -3.65667,0.328 -0.57052,-7.286 0.36193,-0.781"
+ class="c55061"
+ id="Kewaunee, WI" />
+ <path
+ d="m 576.08803,152.67314 10.1998,-0.282 0.18363,3.987 -2.83655,3.423 -0.0571,-0.09 -0.15867,-0.137 -0.18542,-0.09 -0.28169,-0.06 -2.20898,-0.09 -0.69889,-0.08 -0.25851,-0.119 -1.18918,-1.182 -0.041,-0.225 -0.17651,-0.225 -1.69372,-1.438 -1.166,-0.674 0.56874,-2.717"
+ class="c55093"
+ id="Pierce, WI" />
+ <path
+ d="m 586.47146,156.37814 7.92307,-0.321 0.0963,2 -5.77828,0.25 -0.31379,0.16 -0.10162,0.1 -0.0981,0.425 -0.57052,3.118 -0.0553,0.644 -2.63508,-1.004 -1.30328,-1.945 2.83655,-3.423"
+ class="c55091"
+ id="Pepin, WI" />
+ <path
+ d="m 596.47693,157.97714 0.37083,8.042 -0.15511,3.231 -0.0963,1.92 -5.1828,-3.664 -3.84031,-4.756 0.0553,-0.644 0.57052,-3.118 0.0981,-0.425 0.10162,-0.1 0.31379,-0.16 5.77828,-0.25 1.98612,-0.08"
+ class="c55011"
+ id="Buffalo, WI" />
+ <path
+ d="m 602.4228,157.66314 0.40114,8.042 0.20147,0 0.22464,3.859 -0.58835,-0.1 -1.95937,0.57 -0.47424,0.676 -0.0214,0.08 -0.0339,0.442 0.10519,0.177 0.15154,0.121 0.12123,0.257 0,0.112 -1.61528,0.08 -2.33912,-0.804 0.0963,-1.92 0.15511,-3.231 -0.37083,-8.042 5.94587,-0.314"
+ class="c55121"
+ id="Trempealeau, WI" />
+ <path
+ d="m 602.4228,157.66314 3.9758,-0.193 0.0963,1.994 2.09131,1.895 5.99401,-0.337 1.97542,-0.169 0.30487,4.05 0.1248,2.145 -2.18045,0 -5.73014,0.369 -1.74187,0.112 -0.79516,0.298 -0.44393,0.426 0.1141,1.359 -2.95778,-0.06 -0.22464,-3.858 -0.20147,0 -0.40114,-8.042"
+ class="c55053"
+ id="Jackson, WI" />
+ <path
+ d="m 606.07768,151.46814 0.32092,6.002 -3.9758,0.193 -5.94587,0.314 -1.98612,0.08 -0.0963,-2 -0.18541,-3.971 11.86856,-0.619"
+ class="c55035"
+ id="Eau Claire, WI" />
+ <path
+ d="m 605.84591,147.47414 9.88958,-0.619 0.45998,8.011 0.36014,5.987 -1.97542,0.169 -5.99401,0.337 -2.09131,-1.895 -0.0963,-1.994 -0.32092,-6.002 -0.23177,-3.994"
+ class="c55019"
+ id="Clark, WI" />
+ <path
+ d="m 595.52131,141.98614 9.97872,-0.499 0.57765,9.981 -11.86856,0.618 -0.60975,-8.074 1.92194,-2.026"
+ class="c55017"
+ id="Chippewa, WI" />
+ <path
+ d="m 593.59937,144.01214 0.60975,8.074 0.18541,3.971 -7.92307,0.321 -0.18363,-3.987 -0.65075,-8.075 7.96229,-0.304"
+ class="c55033"
+ id="Dunn, WI" />
+ <path
+ d="m 585.63708,144.31614 0.65075,8.075 -10.1998,0.282 0.1248,-1.735 -0.34945,-1.615 -0.39936,-0.853 -0.0499,-0.755 0.33875,-3.03 9.88423,-0.369"
+ class="c55109"
+ id="St. Croix, WI" />
+ <path
+ d="m 585.25733,134.43214 0.37975,9.884 -9.88423,0.369 0.24782,-2 0.19433,-0.176 0.0214,-0.02 0.42789,-0.53 0.60974,-1.558 -0.32091,-1.624 -0.79338,-1.501 -1.27119,-0.685 -0.32091,0.05 -0.77199,-0.13 -0.21751,-0.168 -0.0553,-0.451 -0.041,-0.61 -0.007,-0.151 0.0214,-0.364 5.74797,-0.16 -0.0553,-1.985 6.01718,-0.16 0.0713,1.968"
+ class="c55095"
+ id="Polk, WIO" />
+ <path
+ d="m 587.25058,134.35214 7.91594,-0.298 0.35479,7.932 -1.92194,2.026 -7.96229,0.304 -0.37975,-9.884 1.99325,-0.08"
+ class="c55005"
+ id="Barron, WI" />
+ <path
+ d="m 609.04259,133.32314 0.33875,5.978 -3.88131,2.186 -9.97872,0.499 -0.35479,-7.932 13.87607,-0.731"
+ class="c55107"
+ id="Rusk, WI" />
+ <path
+ d="m 619.65958,138.59314 0.3548,6.003 -1.56893,0.1 -0.8843,0.723 0.0802,1.327 -1.90589,0.112 -9.88958,0.619 -0.34588,-5.987 3.88131,-2.186 3.56752,-0.183 2.16262,-0.211 3.2056,-0.248 1.3425,-0.07"
+ class="c55119"
+ id="Taylor, WI" />
+ <path
+ d="m 614.63546,125.10214 4.13269,-0.263 0.14441,1.943 0.48138,7.843 0.26564,3.968 -1.3425,0.07 -3.2056,0.248 -2.16262,0.211 -3.56752,0.183 -0.33875,-5.978 -0.40827,-7.875 6.00114,-0.346"
+ class="c55099"
+ id="Price, WI" />
+ <path
+ d="m 594.43554,122.14614 10.01973,-0.451 0.16046,3.657 0.041,0.33 3.97759,-0.234 0.40827,7.875 -13.87607,0.731 -0.73098,-11.908"
+ class="c55113"
+ id="Sawyer, WI" />
+ <path
+ d="m 586.46433,122.48314 7.97121,-0.337 0.73098,11.908 -7.91594,0.298 -0.36014,-7.891 -0.27457,0 -0.15154,-3.987"
+ class="c55129"
+ id="Washburn, WI" />
+ <path
+ d="m 582.55806,122.65314 3.90627,-0.17 0.15154,3.987 0.27457,0 0.36014,7.891 -1.99325,0.08 -0.0713,-1.968 -6.01718,0.16 0.0553,1.985 -5.74797,0.16 0.65432,-2 1.61349,-3.231 0.19968,-0.36 0.20147,-0.266 0.79872,-0.699 0.005,0 3.34288,-2.194 2.33913,-1.46 -0.0321,-0.901 -0.041,-0.996"
+ class="c55013"
+ id="Burnett, WI" />
+ <path
+ d="m 582.13374,111.05714 0.36014,0.25 0.44215,0.04 0.47603,-0.03 0.0784,-0.05 0.0731,-0.07 0.21573,-0.563 -0.016,-0.257 -0.016,-0.02 -0.0802,-0.09 0,-0.02 -0.0553,-0.145 0.016,-0.169 0.0892,-0.184 1.1232,-0.764 0.42789,-0.03 0.91462,0.894 0.22285,0.1 0.082,-0.06 0.44215,0.298 0.24069,0.137 0.1872,0.08 0.30309,0.05 1.93797,-0.321 0.46533,-0.13 3.72798,-1.567 0.21751,5.457 0.11946,1.962 0.30665,6.291 -7.97121,0.337 -3.90627,0.17 -0.21573,-5.964 -0.20859,-5.632"
+ class="c55031"
+ id="Douglas, WI" />
+ <path
+ d="m 603.87762,111.84514 0.57765,9.85 -10.01973,0.451 -0.30665,-6.291 -0.11946,-1.961 -0.21751,-5.458 0.22643,0.02 0.40828,-0.09 6.30066,-2.605 0.13728,-0.09 0.66501,-0.491 0.20146,-0.194 0.51347,-0.642 0.46711,-0.602 0.0802,-0.06 1.51901,-0.474 0.24068,-0.04 0.28883,0.1 0.86113,0.665 0.52773,0.612 0.066,0.121 0,0.112 -0.67392,1.526 -0.99841,1.398 -1.14639,3.826 0.005,0.08 0.16224,0.184 0.23356,0.07"
+ class="c55007"
+ id="Bayfield, WI" />
+ <path
+ d="m 603.87762,111.84514 0.15154,0.04 0.13728,0 0.0642,-0.02 1.70442,-1.038 0.37619,-0.28 0.22642,-0.242 2.04852,0.394 1.29258,0.843 0.13015,1.92 0.18364,3.279 0.0981,2.66 2.01643,-0.112 2.07169,1.849 0.16938,1.984 0.0874,1.984 -6.00114,0.346 -3.97759,0.234 -0.041,-0.33 -0.16046,-3.657 -0.57765,-9.85"
+ class="c55003"
+ id="Ashland, WI" />
+ <path
+ d="m 611.99324,111.82914 1.81497,0.988 3.23056,3.97 1.47799,0.312 1.62242,0.337 0.47781,7.281 -1.84884,0.122 -4.13269,0.263 -0.0874,-1.984 -0.16938,-1.984 -2.07169,-1.849 -2.01643,0.112 -0.0981,-2.66 -0.18364,-3.279 -0.13015,-1.92 2.11448,0.291"
+ class="c55051"
+ id="Iron, WI" />
+ <path
+ d="m 620.13918,117.43614 11.52447,2.364 0.86647,0.177 0.67749,0.144 1.0929,0.369 1.13212,0.555 0.97345,0.474 0.14263,2.098 -1.83101,0.129 0.15155,1.993 -1.99147,0.956 -3.06119,-0.676 -10.90403,0.763 -0.14441,-1.943 1.84884,-0.122 -0.47781,-7.281"
+ class="c55125"
+ id="Vilas, WI" />
+ <path
+ d="m 634.86925,125.73914 0.73989,9.859 -6.10811,0.378 -0.19255,-2.018 -3.94549,0.266 -5.96905,0.401 -0.48138,-7.843 10.90403,-0.763 3.06119,0.676 1.99147,-0.956"
+ class="c55085"
+ id="Oneida, WI" />
+ <path
+ d="m 629.50103,135.97614 0.53129,7.986 -10.01794,0.634 -0.3548,-6.003 -0.26564,-3.968 5.96905,-0.401 3.94549,-0.266 0.19255,2.018"
+ class="c55069"
+ id="Lincoln, WI" />
+ <path
+ d="m 629.50103,135.97614 6.10811,-0.378 1.98433,-0.153 0.10519,1.984 4.01146,-0.305 0.26208,3.987 0.68284,-0.05 0.10697,2.007 -5.53046,0.403 0.16224,2.049 -3.92944,0.272 -3.43203,-1.832 -0.53129,-7.986"
+ class="c55067"
+ id="Langlade, WI" />
+ <path
+ d="m 620.01438,144.59614 10.01794,-0.634 3.43203,1.832 0.57051,7.988 -10.14987,0.611 -7.68952,0.473 -0.45998,-8.011 1.90589,-0.112 -0.0802,-1.327 0.8843,-0.723 1.56893,-0.1"
+ class="c55073"
+ id="Marathon, WI" />
+ <path
+ d="m 616.19547,154.86614 7.68952,-0.473 0.27278,3.985 1.92906,-0.121 0.23177,3.136 0.19434,2.924 -2.92391,0.153 -6.72855,0.433 -0.30487,-4.05 -0.36014,-5.987"
+ class="c55141"
+ id="Wood, WI" />
+ <path
+ d="m 628.60246,164.21914 0.41006,6.068 0.48851,7.818 -3.07367,0.241 -1.74721,-3.35 -1.51188,-1.608 -0.38331,-1.052 -1.03763,-4.074 0.24068,-0.715 1.60102,-3.077 2.92391,-0.153 2.08952,-0.1"
+ class="c55001"
+ id="Adams, WI" />
+ <path
+ d="m 616.86048,164.90314 6.72855,-0.433 -1.60102,3.077 -0.24068,0.715 1.03763,4.074 0.38331,1.052 1.51188,1.608 1.74721,3.35 -8.73785,0.547 -0.11945,-2.082 -0.58478,-9.763 -0.1248,-2.145"
+ class="c55057"
+ id="Juneau, WI" />
+ <path
+ d="m 606.20783,169.61214 -0.1141,-1.359 0.44393,-0.426 0.79516,-0.298 1.74187,-0.112 5.73014,-0.369 2.18045,0 0.58478,9.763 -9.90028,0.701 -0.25138,-4.677 -0.22464,-3.287 -0.98593,0.06"
+ class="c55081"
+ id="Monroe, WI" />
+ <path
+ d="m 603.25005,169.55614 2.95778,0.06 0.98593,-0.06 0.22464,3.287 0.25138,4.677 -5.92982,0.296 -0.40293,-2.78 -2.40153,-3.054 1.61528,-0.08 0,-0.112 -0.12123,-0.257 -0.15154,-0.121 -0.10519,-0.177 0.0339,-0.442 0.0214,-0.08 0.47424,-0.676 1.95937,-0.57 0.58835,0.1"
+ class="c55063"
+ id="La Crosse, WI" />
+ <path
+ d="m 617.57006,176.81114 0.11945,2.082 0.14442,2.001 -5.9851,0.369 0.21751,2.999 -8.93753,0.472 -0.28882,-1.776 -1.10003,-5.15 5.92982,-0.296 9.90028,-0.701"
+ class="c55123"
+ id="Vernon, WI" />
+ <path
+ d="m 617.68951,178.89314 8.73785,-0.547 0.84864,0.941 2.25712,0.667 0.11232,0.1 0.25138,4.099 -0.30487,0.274 -0.40293,0.2 -0.1765,0.06 -0.24069,-0.03 -0.15332,0.05 -0.6668,1.1 -0.041,0.314 0.12836,0.183 -1.831,2.133 -5.87278,1.333 0.0143,-0.06 -0.53665,-8.95 -1.97898,0.145 -0.14442,-2.001"
+ class="c55111"
+ id="Sauk, WI" />
+ <path
+ d="m 617.83393,180.89414 1.97898,-0.145 0.53665,8.95 -0.0143,0.06 -3.99719,-0.611 -3.91162,0.9 -0.36014,-5.785 -0.21751,-2.999 5.9851,-0.369"
+ class="c55103"
+ id="Richland, WI" />
+ <path
+ d="m 603.12881,184.73414 8.93753,-0.472 0.36014,5.785 -1.20522,1.18 -5.10257,3.272 -0.1355,0.05 -1.62241,0.252 -0.35658,-2.186 0.43681,-1.696 1.28366,-2.162 0.0642,-0.287 -0.50456,-0.811 -0.38688,-0.491 -1.78465,-1.255 0.016,-1.182"
+ class="c55023"
+ id="Crawford, WI" />
+ <path
+ d="m 626.20807,188.42514 0.52059,8.033 0.066,1.006 -9.88423,0.633 -0.5723,-8.95 3.99719,0.611 5.87278,-1.333"
+ class="c55049"
+ id="Iowa, WI" />
+ <path
+ d="m 612.42648,190.04714 3.91162,-0.9 0.5723,8.95 0.42611,7.055 -3.61388,0.178 0.0642,-0.111 -0.0107,-0.13 -0.18363,-0.579 -1.06972,-1.945 -0.12124,-0.122 -0.19255,-0.09 -0.8433,-0.202 -2.17688,-0.417 -0.8843,-0.21 -0.46712,-0.216 -1.35676,-0.9 -0.2086,-0.434 -1.53505,-3.408 -0.37618,-1.758 1.62241,-0.252 0.1355,-0.05 5.10257,-3.272 1.20522,-1.18"
+ class="c55043"
+ id="Grant, WI" />
+ <path
+ d="m 616.9104,198.09714 9.88423,-0.633 0.47424,7.11 -1.50296,0.09 -8.4294,0.49 -0.42611,-7.054"
+ class="c55065"
+ id="Lafayette, WI" />
+ <path
+ d="m 626.72866,196.45814 7.88385,-0.248 0.60975,7.947 -0.60261,0.04 -7.35078,0.38 -0.47424,-7.11 -0.066,-1.006"
+ class="c55045"
+ id="Green, WI" />
+ <path
+ d="m 636.09051,169.77214 0.18542,2.452 -0.39223,1.503 -0.7078,1.125 0.19968,2.836 -5.87455,0.417 -0.48851,-7.818 7.07799,-0.515"
+ class="c55077"
+ id="Marquette, WI" />
+ <path
+ d="m 623.88499,154.39314 10.14987,-0.611 0.69889,10.068 -6.13129,0.369 -2.08952,0.1 -0.19434,-2.924 -0.23177,-3.136 -1.92906,0.121 -0.27278,-3.985"
+ class="c55097"
+ id="Portage, WI" />
+ <path
+ d="m 634.03486,153.78214 10.09283,-0.683 0.14441,2.018 -2.13053,0.168 0.2086,2.811 0.34766,5.167 -2.41044,0.201 -5.55364,0.386 -0.69889,-10.068"
+ class="c55135"
+ id="Waupaca, WI" />
+ <path
+ d="m 640.28739,163.46414 0.45641,5.962 -4.65329,0.346 -7.07799,0.515 -0.41006,-6.068 6.13129,-0.369 5.55364,-0.386"
+ class="c55137"
+ id="Waushara, WI" />
+ <path
+ d="m 640.7438,169.42614 0.15333,2.019 0.44928,6.026 -2.00038,0.16 -1.99503,0.177 -0.0143,-0.273 -1.96116,0.153 -0.19968,-2.836 0.7078,-1.125 0.39223,-1.503 -0.18542,-2.452 4.65329,-0.346"
+ class="c55047"
+ id="Green Lake, WI" />
+ <path
+ d="m 635.37558,177.68814 1.96116,-0.153 0.0143,0.273 1.99503,-0.177 0.55626,8.021 -1.59923,0.168 -4.29316,0.337 -0.0232,-0.296 -5.94766,0.431 -0.12836,-0.183 0.041,-0.314 0.6668,-1.1 0.15332,-0.05 0.24069,0.03 0.1765,-0.06 0.40293,-0.2 0.30487,-0.274 -0.25138,-4.099 -0.11232,-0.1 -2.25712,-0.667 -0.84864,-0.941 3.07367,-0.241 5.87455,-0.417"
+ class="c55021"
+ id="Columbia, WI" />
+ <path
+ d="m 639.90229,185.65214 0.15154,1.999 0.51169,8.085 -5.95301,0.474 -7.88385,0.248 -0.52059,-8.033 1.831,-2.133 5.94766,-0.431 0.0232,0.296 4.29316,-0.337 1.59923,-0.168"
+ class="c55025"
+ id="Dane, WI" />
+ <path
+ d="m 644.53775,195.53514 0.62579,8.044 -2.76345,0.184 -7.17783,0.394 -0.60975,-7.947 5.95301,-0.474 3.97223,-0.201"
+ class="c55105"
+ id="Rock, WI" />
+ <path
+ d="m 652.87089,200.25914 1.98433,-0.167 -0.1141,-1.35 3.11645,-0.266 3.30544,-0.256 0.43502,4.074 -6.73568,0.465 -1.75256,0.176 -0.2389,-2.676"
+ class="c55059"
+ id="Kenosha, WI" />
+ <path
+ d="m 656.38849,194.57714 4.05959,-0.337 0.71493,3.98 -3.30544,0.256 -3.11645,0.266 0.1141,1.35 -1.98433,0.167 -0.44216,-5.327 3.95976,-0.355"
+ class="c55101"
+ id="Racine, WI" />
+ <path
+ d="m 648.49216,195.23014 3.93657,-0.298 0.44216,5.327 0.2389,2.676 -6.78025,0.564 -1.166,0.08 -0.62579,-8.044 3.95441,-0.305"
+ class="c55127"
+ id="Walworth, WI" />
+ <path
+ d="m 641.34641,177.47114 2.00217,-0.145 6.04036,-0.419 0.13015,1.512 0.0392,0.498 0.29774,3.995 -0.28169,0.02 0.33161,4.033 -1.96115,0.121 -7.89099,0.562 -0.15154,-1.999 -0.55626,-8.021 2.00038,-0.16"
+ class="c55027"
+ id="Dodge, WI" />
+ <path
+ d="m 640.05383,187.65114 7.89099,-0.562 0.54734,8.141 -3.95441,0.305 -3.97223,0.201 -0.51169,-8.085"
+ class="c55055"
+ id="Jefferson, WI" />
+ <path
+ d="m 655.81797,186.54414 0.57052,8.033 -3.95976,0.355 -3.93657,0.298 -0.54734,-8.141 1.96115,-0.121 5.912,-0.424"
+ class="c55133"
+ id="Waukesha, WI" />
+ <path
+ d="m 658.67948,186.31014 1.7686,7.93 -4.05959,0.337 -0.57052,-8.033 2.86151,-0.234"
+ class="c55079"
+ id="Milwaukee, WI" />
+ <path
+ d="m 655.52914,178.45114 4.08278,-0.362 0.11232,1.157 -0.17651,0.747 -0.27456,0.637 -0.41006,0.715 -0.12658,0.28 -0.10519,0.322 -0.0571,0.257 -0.33875,2.789 0.0588,0.328 0.30487,0.868 0.0802,0.121 -2.86151,0.234 -0.312,-4.026 0.21572,-1.704 -0.19255,-2.363"
+ class="c55089"
+ id="Ozaukee, WI" />
+ <path
+ d="m 653.52876,178.60314 2.00038,-0.152 0.19255,2.363 -0.21572,1.704 0.312,4.026 -5.912,0.424 -0.33161,-4.033 0.28169,-0.02 -0.29774,-3.995 3.97045,-0.314"
+ class="c55131"
+ id="Washington, WI" />
+ <path
+ d="m 648.20868,162.80714 0.66679,8.083 -7.97834,0.555 -0.15333,-2.019 -0.45641,-5.962 2.41044,-0.201 5.51085,-0.456"
+ class="c55139"
+ id="Winnebago, WI" />
+ <path
+ d="m 652.85484,170.59214 0.67392,8.011 -3.97045,0.314 -0.0392,-0.498 -0.13015,-1.512 -6.04036,0.419 -2.00217,0.145 -0.44928,-6.026 7.97834,-0.555 -0.0874,-1.054 4.06673,0.756"
+ class="c55039"
+ id="Fond du Lac, WI" />
+ <path
+ d="m 659.95601,169.94914 0.76485,2.845 0.11945,1.84 -0.0464,0.193 -1.18204,3.262 -4.08278,0.362 -2.00038,0.152 -0.67392,-8.011 1.98433,-0.169 5.11684,-0.474"
+ class="c55117"
+ id="Sheboygan, WI" />
+ <path
+ d="m 651.68171,162.58014 2.45858,-0.184 0.69888,8.027 -1.98433,0.169 -4.06673,-0.756 -0.57943,-7.029 3.47303,-0.227"
+ class="c55015"
+ id="Calumet, WI" />
+ <path
+ d="m 658.5101,160.03214 3.65667,-0.328 0.77198,2.193 0.0481,0.435 -0.0481,0.418 -0.0891,0.306 -0.28883,0.498 -0.353,0.385 -0.58657,0.346 -0.31378,0.249 -0.38689,0.433 -0.43323,2.001 -0.1355,0.715 -0.3958,2.266 -5.11684,0.474 -0.69888,-8.027 2.54594,-0.201 -0.16938,-2 0.99841,-0.08 0.99484,-0.08"
+ class="c55071"
+ id="Manitowoc, WI" />
+ <path
+ d="m 650.04147,152.60014 4.122,-0.305 -0.16938,0.337 -0.46533,2.146 -0.007,0.145 0.65788,0.579 0.58657,0.152 0.44215,-0.02 0.22464,-0.16 0.1765,-0.298 0.21751,-0.499 0.0214,-0.119 -0.0856,-0.161 0.0321,-0.08 0.51347,-0.596 0.89143,-0.722 0.73989,-0.249 0.57052,7.286 -0.99484,0.08 -0.99841,0.08 0.16938,2 -2.54594,0.201 -2.45858,0.184 -0.082,-1.325 -0.53843,-6.598 -0.88252,0.121 -0.13728,-2.178"
+ class="c55009"
+ id="Brown, WI" />
+ <path
+ d="m 644.2721,155.11714 5.90665,-0.339 0.88252,-0.121 0.53843,6.598 0.082,1.325 -3.47303,0.227 -5.51085,0.456 -0.34766,-5.167 -0.2086,-2.811 2.13053,-0.168"
+ class="c55087"
+ id="Outagamie, WI" />
+ <path
+ d="m 637.39379,145.52214 0.15155,1.968 3.99362,-0.305 0.13729,1.992 4.02572,-0.289 3.91874,-0.248 0.42076,3.96 0.13728,2.178 -5.90665,0.339 -0.14441,-2.018 -10.09283,0.683 -0.57051,-7.988 3.92944,-0.272"
+ class="c55115"
+ id="Shawano, WI" />
+ <path
+ d="m 637.39379,145.52214 -0.16224,-2.049 5.53046,-0.403 2.55307,-0.192 0.21038,3.558 0.17651,2.452 -4.02572,0.289 -0.13729,-1.992 -3.99362,0.305 -0.15155,-1.968"
+ class="c55078"
+ id="Menominee, WI" />
+ <path
+ d="m 645.74297,136.84414 1.9772,-0.1 3.51939,5.811 0.12837,1.984 2.92212,0.467 3.03979,0.36 -0.10519,0.02 -0.72206,0.321 -0.0981,0.08 -0.27991,0.466 -1.93619,5.054 -0.041,0.781 0.016,0.2 -4.122,0.305 -0.42076,-3.96 -3.91874,0.248 -0.17651,-2.452 -0.21038,-3.558 -2.55307,0.192 -0.10697,-2.007 -0.68284,0.05 -0.26208,-3.987 4.03285,-0.28"
+ class="c55083"
+ id="Oconto, WI" />
+ <path
+ d="m 636.40608,121.51914 4.08099,1.045 0.20681,0.763 0.42789,5.906 4.02751,-0.305 0.59369,7.916 -4.03285,0.28 -4.01146,0.305 -0.10519,-1.984 -1.98433,0.153 -0.73989,-9.859 -0.15155,-1.993 1.83101,-0.129 -0.14263,-2.098"
+ class="c55041"
+ id="Forest, WI" />
+ <path
+ d="m 640.48707,122.56414 0.32983,0.586 2.81159,-0.298 4.67647,0.587 0.0356,0 0.39937,0.06 0.61152,0.296 0.37797,0.252 0.24782,0.158 0.47246,0.676 0.0499,0.07 0.0232,0.08 -0.22465,0.385 -0.25673,0.362 -0.11232,0.09 -0.28169,0.36 -0.009,0.02 -0.0232,0.08 0.1034,0.201 0.0161,0 0.6133,0.498 0.1355,0.03 0.21751,0.06 0.016,0 0.21751,-0.03 0.11054,1.551 -1.91302,0.04 -3.98293,0.225 -4.02751,0.304 -0.42789,-5.906 -0.20681,-0.763"
+ class="c55037"
+ id="Florence, WI" />
+ <path
+ d="m 650.93469,127.11214 3.79929,1.021 0.30488,0.248 0.025,0.02 0.041,0.04 0.48138,0.594 0.16045,4.147 1.42273,6.839 0.009,0.02 0.14263,0.472 0.0731,0.122 1.2694,1.342 0.0161,0 0.41719,0.07 0.73097,0.115 -2.4978,3.205 -3.03979,-0.36 -2.92212,-0.467 -0.12837,-1.984 -3.51939,-5.811 -1.9772,0.1 -0.59369,-7.916 3.98293,-0.224 1.91302,-0.04 -0.11054,-1.551"
+ class="c55075"
+ id="Marinette, WI" />
+ <path
+ d="m 837.63683,244.94514 3.97223,2.193 -0.19255,1.086 -0.15154,0.321 -0.94136,1.43 -0.33518,0.224 -0.10697,0.245 -0.82012,2.118 -0.0321,0.137 -0.0161,0.356 -3.95262,-2.242 0.64183,-4.8 0.041,-0.103 1.89341,-0.965"
+ class="c54003"
+ id="Berkeley, WV" />
+ <path
+ d="m 841.60906,247.13814 2.60477,3.577 -1.06259,4.66 -4.13804,-2.32 0.0161,-0.356 0.0321,-0.137 0.82012,-2.118 0.10697,-0.245 0.33518,-0.224 0.94136,-1.43 0.15154,-0.321 0.19255,-1.086"
+ class="c54037"
+ id="Jefferson, WV" />
+ <path
+ d="m 768.2921,280.78314 3.29475,2.267 0.48315,2.274 -3.37675,3.897 -4.88507,-3.535 2.83833,-1.124 0.17651,-0.114 0.0945,-0.121 0.0499,-0.136 0.0321,-0.153 0.0321,-0.167 0.0802,-1.648 0.007,-0.05 0.007,-1.005 1.166,-0.387"
+ class="c54011"
+ id="Cabell, WV" />
+ <path
+ d="m 763.80818,285.68614 4.88507,3.535 -0.1462,0.66 0.48494,1.975 0.0802,0.111 0.61687,0.652 0.50812,1.278 -1.32467,1.978 -1.54575,2.169 -1.8631,-1.718 0.46533,-0.804 0,-0.129 -0.007,-0.02 -0.025,-0.03 -2.82763,-2.699 -0.0481,-0.01 -0.34409,-0.08 -0.3227,-0.287 0,-0.02 -0.16224,-0.403 -0.0713,-0.201 0,0 0.44929,-1.967 -0.37797,-4.035 1.57605,0.05"
+ class="c54099"
+ id="Wayne, WV" />
+ <path
+ d="m 768.91254,295.87514 1.95224,-1.013 -0.0749,0.298 1.32646,2.694 1.02158,1.927 2.16975,1.742 0.44037,-0.2 0.61153,-0.267 1.17313,-0.09 1.31932,0.08 -0.56339,2.7 -1.16421,1.037 -0.81121,-0.483 -0.70066,0.209 -0.71315,0.162 -1.30506,-0.474 -0.005,0 -3.65845,-2.461 -0.67214,-1.035 -0.0339,-0.113 0.007,-0.02 -1.86488,-2.523 1.54575,-2.169"
+ class="c54059"
+ id="Mingo, WV" />
+ <path
+ d="m 775.29165,293.02214 -0.4582,0.499 -0.26565,0.401 0,0.12 0.0642,0.09 2.1858,0.465 0.74702,-0.08 0.72384,0.25 2.54772,1.927 0.83617,0.652 0.22464,0.232 -2.1751,0.942 -0.19433,0.552 0.98593,0.758 -0.76129,0.61 -0.90035,0.602 -1.31932,-0.08 -1.17313,0.09 -0.61153,0.267 -0.44037,0.2 -2.16975,-1.742 -1.02158,-1.927 -1.32646,-2.694 0.0749,-0.298 4.42687,-1.84"
+ class="c54045"
+ id="Logan, WV" />
+ <path
+ d="m 781.89718,297.57714 1.65451,-0.312 1.05011,0.05 0.63826,0.674 2.00038,2.605 2.52633,2.291 -1.28901,2.216 -2.75632,-0.635 -2.69214,-0.13 -2.27315,0.284 -1.56002,-0.05 -0.90748,-0.829 0.56339,-2.7 0.90035,-0.602 0.76129,-0.61 -0.98593,-0.758 0.19433,-0.552 2.1751,-0.942"
+ class="c54109"
+ id="Wyoming, WV" />
+ <path
+ d="m 778.28865,303.74114 0.90748,0.829 1.56002,0.05 2.27315,-0.284 2.69214,0.13 2.75632,0.635 -0.6044,2.129 -0.66679,1.341 -1.57428,1.44 -0.0143,0.02 -0.78803,0.724 -0.0571,0.03 -2.10557,0.417 -1.20344,-0.715 -2.04316,-0.738 -0.2086,-0.107 -0.007,0 -1.51188,-1.317 -1.55109,-2.202 -0.12837,-0.344 0.0481,-0.153 0.8112,-0.731 0.25139,-0.113 1.16421,-1.037"
+ class="c54047"
+ id="McDowell, WV" />
+ <path
+ d="m 791.76358,300.73714 4.78344,2.963 -1.65628,3.473 -4.19688,2.025 -2.8205,-1.97 0.6044,-2.129 1.28901,-2.216 1.99681,-2.146"
+ class="c54055"
+ id="Mercer, WV" />
+ <path
+ d="m 798.9325,296.22814 6.69112,-0.17 1.58497,1.239 -1.03585,1.254 -0.56339,1.166 0.41006,0.761 -2.05565,1.817 -0.52238,0.442 -0.86112,-1.237 -1.80783,1.429 -0.18542,0.147 -2.23394,1.677 -1.78465,-1.021 1.08577,-3.229 1.2694,-3.487 0.12124,-0.41 -0.11233,-0.378"
+ class="c54063"
+ id="Monroe, WV" />
+ <path
+ d="m 795.87845,293.49414 3.05405,2.734 0.11233,0.378 -0.12124,0.41 -1.2694,3.487 -1.08577,3.229 -0.0214,-0.03 -4.78344,-2.963 0.19969,-1.054 0.0713,-0.209 1.36924,-1.961 0.54556,-0.103 0.18542,0.03 0.59548,0.24 0.18185,0.184 0,0.259 0.11411,0.03 0.23355,-0.179 0.0161,-0.07 -0.025,-0.153 -0.60261,-1.84 -0.69176,-0.708 -0.22464,-0.137 -0.14441,-0.03 2.29099,-1.537"
+ class="c54089"
+ id="Summers, WV" />
+ <path
+ d="m 783.88152,292.61214 1.41381,0.209 1.69551,1.519 0.11411,0.07 4.02393,0.06 2.45858,0.563 0.14441,0.03 0.22464,0.137 0.69176,0.708 0.60261,1.84 0.025,0.153 -0.0161,0.07 -0.23355,0.179 -0.11411,-0.03 0,-0.259 -0.18185,-0.184 -0.59548,-0.24 -0.18542,-0.03 -0.54556,0.103 -1.36924,1.961 -0.0713,0.209 -0.19969,1.054 -1.99681,2.146 -2.52633,-2.291 -2.00038,-2.605 -0.63826,-0.674 -1.05011,-0.05 0.32983,-4.653"
+ class="c54081"
+ id="Raleigh, WV" />
+ <path
+ d="m 783.88152,292.61214 -0.32983,4.653 -1.65451,0.312 -0.22464,-0.232 -0.83617,-0.652 -2.54772,-1.927 -0.72384,-0.25 -0.74702,0.08 -2.1858,-0.465 -0.0642,-0.09 0,-0.12 0.26565,-0.401 0.4582,-0.499 1.12321,-4.484 1.92193,-0.595 0.46533,-0.127 0.36905,0.02 3.07011,2.008 1.31754,1.961 0.3227,0.804"
+ class="c54005"
+ id="Boone, WV" />
+ <path
+ d="m 772.07,285.32414 2.4978,0.772 1.84706,2.442 -1.12321,4.484 -4.42687,1.84 -1.95224,1.013 1.32467,-1.978 -0.50812,-1.278 -0.61687,-0.652 -0.0802,-0.111 -0.48494,-1.975 0.1462,-0.66 3.37675,-3.897"
+ class="c54043"
+ id="Lincoln, WV" />
+ <path
+ d="m 777.39722,278.61514 -0.86826,1.221 -1.94511,4.548 -0.016,1.712 -2.4978,-0.772 -0.48315,-2.274 -0.61866,-3.038 1.75078,-1.413 3.1432,-1.02 1.53505,1.036"
+ class="c54079"
+ id="Putnam, WV" />
+ <path
+ d="m 772.79207,273.40914 -0.025,0.05 0.1765,0.273 2.41222,2.69 0.50634,1.152 -3.1432,1.02 -1.75078,1.413 0.61866,3.038 -3.29475,-2.267 0.33696,-0.07 0.10519,-0.02 0.0392,-0.04 0.0998,-0.08 0.0446,-0.05 0.0731,-0.119 0.0232,-0.113 0.009,-0.135 0.009,-0.08 0,-0.03 -0.025,-0.16 -0.45998,-1.874 -0.005,0 0.23178,-3.714 0.40293,-2.202 0.0553,-0.32 0.82012,-1.389 0.30488,-0.161 0.27277,0.01 0.009,0 1.30149,0.71 0.34766,0.432 0.44037,0.659 0.0642,0.178 0,1.206"
+ class="c54053"
+ id="Mason, WV" />
+ <path
+ d="m 778.02301,269.14814 1.75791,2.275 0.73276,7.04 -3.11646,0.152 -1.53505,-1.036 -0.50634,-1.152 -2.41222,-2.69 -0.1765,-0.273 0.025,-0.05 0.58656,-0.154 1.8631,-1.326 0.0428,-0.193 -0.42789,-1.85 -0.19255,-0.225 -0.40293,-0.269 -0.19968,-0.146 -0.19255,-0.252 -0.0874,-0.313 0,-0.2 1.09111,-0.474 3.15034,1.141"
+ class="c54035"
+ id="Jackson, WV" />
+ <path
+ d="m 777.39722,278.61514 3.11646,-0.152 1.22304,1.325 4.38586,-0.298 0.48138,0.02 -1.37994,1.519 0.86647,2.138 0.80408,2.491 -0.007,0 -1.59211,7.152 -1.41381,-0.209 -0.3227,-0.804 -1.31754,-1.961 -3.07011,-2.008 -0.36905,-0.02 -0.46533,0.127 -1.92193,0.595 -1.84706,-2.442 0.016,-1.712 1.94511,-4.548 0.86826,-1.221"
+ class="c54039"
+ id="Kanawha, WV" />
+ <path
+ d="m 793.6766,288.34614 2.20185,5.148 -2.29099,1.537 -2.45858,-0.563 -4.02393,-0.06 -0.11411,-0.07 -1.69551,-1.519 1.59211,-7.152 1.51009,0.635 1.44769,0.458 0.12836,0 0.0713,-0.06 -0.0196,-0.314 0.37262,-0.41 1.02693,-0.06 0.28526,0.112 0.52773,0.436 1.43877,1.888"
+ class="c54019"
+ id="Fayette, WV" />
+ <path
+ d="m 788.2442,277.27214 0.7185,-1.421 3.2359,3.261 1.03585,0.128 0.19255,0.339 -1.42095,1.726 -5.11148,4.356 -0.80408,-2.491 -0.86647,-2.138 1.37994,-1.519 1.64024,-2.241"
+ class="c54015"
+ id="Clay, WV" />
+ <path
+ d="m 779.78092,271.42314 1.5297,-0.307 1.34072,0.376 1.08755,-0.619 1.2587,1.473 0.21751,1.029 1.59924,3.375 1.42986,0.522 -1.64024,2.241 -0.48138,-0.02 -4.38586,0.298 -1.22304,-1.325 -0.73276,-7.04"
+ class="c54087"
+ id="Roane, WV" />
+ <path
+ d="m 787.6826,268.03214 0.61152,0.875 0.0945,0.151 0.43324,2.621 0.7809,2.892 -0.64005,1.28 -0.7185,1.421 -1.42986,-0.522 -1.59924,-3.375 -0.21751,-1.029 -1.2587,-1.473 1.61349,-2.963 2.33022,0.122"
+ class="c54013"
+ id="Calhoun, WV" />
+ <path
+ d="m 782.42848,264.73714 2.9239,3.173 -1.61349,2.963 -1.08755,0.619 -1.34072,-0.376 -1.5297,0.307 -1.75791,-2.275 4.40547,-4.411"
+ class="c54105"
+ id="Wirt, WV" />
+ <path
+ d="m 780.58321,261.34614 2.56733,1.333 -0.72206,2.058 -4.40547,4.411 -3.15034,-1.141 -0.32804,-1.928 0.72206,-1.592 2.29812,-2.925 1.11786,-1.366 0.18363,-0.159 0.16046,-0.05 0.20147,0.02 0.45106,0.25 0.12837,0.137 0.77555,0.956"
+ class="c54107"
+ id="Wood, WV" />
+ <path
+ d="m 786.89457,260.14914 -1.23732,0.698 -2.27315,0.868 -0.10519,0.162 -0.0713,0.305 -0.0571,0.497 -2.56733,-1.333 3.53186,-3.029 2.7795,1.832"
+ class="c54073"
+ id="Pleasants, WV" />
+ <path
+ d="m 786.89457,260.14914 2.28385,0.963 2.00751,4.017 -3.50333,2.903 -2.33022,-0.122 -2.9239,-3.173 0.72206,-2.058 0.0571,-0.497 0.0713,-0.305 0.10519,-0.162 2.27315,-0.868 1.23732,-0.698"
+ class="c54085"
+ id="Ritchie, WV" />
+ <path
+ d="m 791.18593,265.12914 1.52614,0.08 2.86151,4.033 -0.0588,0 -0.18185,0.09 -0.86826,0.451 -0.47959,0.319 -2.67074,2.774 -1.71155,1.71 -0.7809,-2.892 -0.43324,-2.621 -0.0945,-0.151 -0.61152,-0.875 3.50333,-2.903"
+ class="c54021"
+ id="Gilmer, WV" />
+ <path
+ d="m 795.57358,269.23714 0.34587,0.747 0.2086,0.226 0.96275,-0.201 1.06259,0.474 0.66679,1.396 0.0464,0.435 -0.0731,0.266 -2.59942,5.423 -3.99542,1.109 -3.2359,-3.261 0.64005,-1.28 1.71155,-1.71 2.67074,-2.774 0.47959,-0.319 0.86826,-0.451 0.18185,-0.09 0.0588,0"
+ class="c54007"
+ id="Braxton, WV" />
+ <path
+ d="m 796.19402,278.00314 -0.34766,0.676 0.78624,1.76 0.91818,1.294 3.39815,1.581 -1.44591,1.849 -2.39617,2.908 -0.33697,0.348 -3.09328,-0.07 -1.43877,-1.889 -0.52773,-0.435 -0.28526,-0.112 -1.02693,0.06 -0.37262,0.41 0.0196,0.314 -0.0713,0.06 -0.12836,0 -1.44769,-0.458 -1.51009,-0.635 0.007,0 5.11148,-4.356 1.42095,-1.726 -0.19255,-0.339 -1.03585,-0.128 3.99542,-1.109"
+ class="c54067"
+ id="Nicholas, WV" />
+ <path
+ d="m 802.45902,284.03814 0.36371,2.564 2.00929,1.253 0.98593,0.06 0.74702,-0.102 1.02158,-0.637 2.57803,-0.618 -1.24444,2.836 -3.29652,6.668 -6.69112,0.17 -3.05405,-2.734 -2.20185,-5.148 3.09328,0.07 0.33697,-0.348 2.39617,-2.908 1.44591,-1.849 1.51009,0.724"
+ class="c54025"
+ id="Greenbrier, WV" />
+ <path
+ d="m 798.79344,272.58014 1.18204,0.09 2.10379,0.408 2.34091,3.593 -0.56339,3.309 -1.29258,1.456 -0.42789,-0.151 0.3227,2.754 -1.51009,-0.724 -3.39815,-1.581 -0.91818,-1.294 -0.78624,-1.76 0.34766,-0.676 2.59942,-5.423"
+ class="c54101"
+ id="Webster, WV" />
+ <path
+ d="m 800.16982,263.78814 1.23552,-0.417 3.12716,3.364 0.17829,2.479 -0.12302,2.248 -1.9362,0.371 -0.5723,1.244 -2.10379,-0.408 -0.45106,-0.885 -0.005,-2.506 0.016,-0.241 0.0624,-0.07 0.12124,-0.02 0.32983,-0.71 0.28883,-0.975 -0.0945,-2.485 -0.0731,-0.983"
+ class="c54097"
+ id="Upshur, WV" />
+ <path
+ d="m 794.76237,263.19514 5.40745,0.593 0.0731,0.983 0.0945,2.485 -0.28883,0.975 -0.32983,0.71 -0.12124,0.02 -0.0624,0.07 -0.016,0.241 0.005,2.506 0.45106,0.885 -1.18204,-0.09 0.0731,-0.266 -0.0464,-0.435 -0.66679,-1.396 -1.06259,-0.474 -0.96275,0.201 -0.2086,-0.226 -0.34587,-0.747 -2.86151,-4.033 2.0503,-2.009"
+ class="c54041"
+ id="Lewis, WV" />
+ <path
+ d="m 793.30577,256.78214 1.36746,0.272 0.0891,6.141 -2.0503,2.009 -1.52614,-0.08 -2.00751,-4.017 4.12735,-4.33"
+ class="c54017"
+ id="Doddridge, WV" />
+ <path
+ d="m 787.07107,254.11314 6.2347,2.669 -4.12735,4.33 -2.28385,-0.963 -2.7795,-1.832 1.54932,-2.42 1.40668,-1.784"
+ class="c54095"
+ id="Tyler, WV" />
+ <path
+ d="m 795.4042,255.98514 5.45559,0.891 1.11786,3.361 -0.57231,3.134 -1.23552,0.417 -5.40745,-0.593 -0.0891,-6.141 0.73097,-1.069"
+ class="c54033"
+ id="Harrison, WV" />
+ <path
+ d="m 790.57619,229.32414 0.60974,3.688 0.30488,1.792 -1.68838,0.387 -1.56536,-4.165 2.33912,-1.702"
+ class="c54029"
+ id="Hancock, WV" />
+ <path
+ d="m 791.49081,234.80414 0.88786,5.474 -2.97739,-0.154 0.40115,-4.933 1.68838,-0.387"
+ class="c54009"
+ id="Brooke, WV" />
+ <path
+ d="m 789.40128,240.12414 2.97739,0.154 0.53487,3.277 -3.74403,0.217 0.0464,-2.926 0.18542,-0.722"
+ class="c54069"
+ id="Ohio, WV" />
+ <path
+ d="m 792.91354,243.55514 1.10181,6.742 -5.36109,0.892 -0.19255,-3.094 0.7078,-4.323 3.74403,-0.217"
+ class="c54051"
+ id="Marshall, WV" />
+ <path
+ d="m 795.71799,250.02314 0.75415,1.849 -1.06794,4.113 -0.73097,1.069 -1.36746,-0.272 -6.2347,-2.669 1.58319,-2.924 5.36109,-0.892 1.70264,-0.274"
+ class="c54103"
+ id="Wetzel, WV" />
+ <path
+ d="m 796.47214,251.87214 0.94136,0.444 3.36784,-0.534 1.37281,1.054 0.87539,0.772 2.08952,1.15 -4.25927,2.118 -5.45559,-0.891 1.06794,-4.113"
+ class="c54049"
+ id="Marion, WV" />
+ <path
+ d="m 808.23552,259.44014 0.1872,2.669 -0.34766,0.554 -0.0642,0.161 -0.21573,1.904 -0.0161,0.668 -0.0481,0.184 -3.19847,1.155 -3.12716,-3.364 0.57231,-3.134 4.49996,-2.115 1.75791,1.318"
+ class="c54001"
+ id="Barbour, WV" />
+ <path
+ d="m 805.11906,254.75814 0.83617,0.255 0.52238,3.109 -4.49996,2.115 -1.11786,-3.361 4.25927,-2.118"
+ class="c54091"
+ id="Taylor, WV" />
+ <path
+ d="m 807.10161,248.11214 0.0981,0.545 -0.15154,1.742 -1.36033,3.569 0.26743,1.045 -0.83617,-0.255 -2.08952,-1.15 -0.87539,-0.772 -1.37281,-1.054 -3.36784,0.534 -0.94136,-0.444 -0.75415,-1.849 8.75033,-1.462 2.63329,-0.449"
+ class="c54061"
+ id="Monongalia, WV" />
+ <path
+ d="m 813.67862,271.82514 -0.10697,1.726 -0.0303,1.904 -0.0891,1.625 -0.47425,1.688 -1.10003,1.71 -0.009,0.08 0,0.03 0.43324,0.875 -2.13767,5.096 -2.57803,0.618 -1.02158,0.637 -0.74702,0.102 -0.98593,-0.06 -2.00929,-1.253 -0.36371,-2.564 -0.3227,-2.754 0.42789,0.151 1.29258,-1.456 1.61528,-1.928 1.94511,-0.33 2.54772,-2.587 0.11946,-1.85 0.0571,-0.399 0.52951,-2.267 0.0963,-0.07 0.38689,0.07 2.46036,0.871 0.0642,0.336"
+ class="c54075"
+ id="Pocahontas, WV" />
+ <path
+ d="m 812.0776,247.23414 1.88806,11.789 0.0339,0.258 -0.44215,-0.426 -3.34288,-0.715 -1.97899,1.3 -1.75791,-1.318 -0.52238,-3.109 -0.26743,-1.045 1.36033,-3.569 0.15154,-1.742 -0.0981,-0.545 4.97599,-0.878"
+ class="c54077"
+ id="Preston, WV" />
+ <path
+ d="m 817.18909,264.14114 0.16759,0.139 -1.59032,1.309 -0.88252,1.093 -0.37084,0.795 0,0.03 0.31201,0.587 0.14441,0.06 0.26743,0.209 0.0481,0.13 -0.0321,0.313 -0.28348,0.819 -0.90748,1.751 -0.38332,0.443 -0.0642,-0.336 -2.46036,-0.871 -0.38689,-0.07 -0.0963,0.07 -0.52951,2.267 -0.0571,0.399 -0.11946,1.85 -2.54772,2.587 -1.94511,0.33 -1.61528,1.928 0.56339,-3.309 -2.34091,-3.593 0.5723,-1.244 1.9362,-0.371 0.12302,-2.248 -0.17829,-2.479 3.19847,-1.155 0.0481,-0.184 0.0161,-0.668 0.21573,-1.904 0.0642,-0.161 0.34766,-0.554 1.04476,1.608 5.26838,0.554 2.45323,-0.13"
+ class="c54083"
+ id="Randolph, WV" />
+ <path
+ d="m 817.35668,264.28014 4.35734,2.611 1.55822,0.948 -1.80783,6.976 -1.24622,1.799 -3.07902,-0.522 -1.09111,-1.617 -0.33697,-0.337 -0.36192,-0.161 -1.77752,-0.426 0.10697,-1.726 0.38332,-0.443 0.90748,-1.751 0.28348,-0.819 0.0321,-0.313 -0.0481,-0.13 -0.26743,-0.209 -0.14441,-0.06 -0.31201,-0.587 0,-0.03 0.37084,-0.795 0.88252,-1.093 1.59032,-1.309"
+ class="c54071"
+ id="Pendleton, WV" />
+ <path
+ d="m 808.23552,259.44014 1.97899,-1.3 3.34288,0.715 0.44215,0.426 1.64559,-0.305 1.26227,0.844 0.8843,1.654 0.007,0.621 -0.0392,0.656 -0.17829,0.781 -0.39223,0.609 -2.45323,0.13 -5.26838,-0.554 -1.04476,-1.608 -0.1872,-2.669"
+ class="c54093"
+ id="Tucker, WV" />
+ <path
+ d="m 816.84322,255.56914 5.8175,1.164 -0.0981,0.241 -0.47246,1.874 -0.52416,2.778 0.27634,0.797 0.50456,2.364 -0.63292,2.104 -4.35734,-2.611 -0.16759,-0.139 0.39223,-0.609 0.17829,-0.781 0.0392,-0.656 -0.007,-0.621 -0.8843,-1.654 -1.26227,-0.844 -1.64559,0.305 -0.0339,-0.258 2.87756,-3.454"
+ class="c54023"
+ id="Grant, WV" />
+ <path
+ d="m 822.66072,256.73314 1.57427,0.628 2.66005,0.505 1.5921,0.176 1.10894,-0.176 0.14798,-0.113 0.64718,0.06 0.47425,0.291 0.6347,0.514 -0.49207,0.843 -0.0143,0.877 -0.0321,0.16 -0.56338,1.247 -1.6866,1.59 -0.0571,0 -0.0731,-0.112 -0.0713,-0.12 -0.9164,0.869 -0.0784,0.126 -0.041,0.06 -0.23356,0.724 -0.68284,2.323 -3.28583,0.635 -1.55822,-0.948 0.63292,-2.104 -0.50456,-2.364 -0.27634,-0.797 0.52416,-2.778 0.47246,-1.874 0.0981,-0.24"
+ class="c54031"
+ id="Hardy, WV" />
+ <path
+ d="m 827.01627,248.92314 -4.35555,7.81 -5.8175,-1.164 3.26978,-3.945 1.89697,0.426 2.88469,-3.971 2.12161,0.844"
+ class="c54057"
+ id="Mineral, WV" />
+ <path
+ d="m 827.01627,248.92314 3.35001,-0.184 2.32308,0.763 0.20147,2.516 -0.0481,4.386 -0.0642,0.37 -0.26743,0.626 -0.271,0.496 -0.54021,0.533 -0.19968,0.193 -0.6347,-0.514 -0.47425,-0.291 -0.64718,-0.06 -0.14798,0.113 -1.10894,0.176 -1.5921,-0.176 -2.66005,-0.505 -1.57427,-0.628 4.35555,-7.81"
+ class="c54027"
+ id="Hampshire, WV" />
+ <path
+ d="m 832.20621,245.58914 0.93244,0.185 0.20859,-0.03 0.62044,-1.143 0.45642,-0.722 0.12123,-0.137 0.10519,-0.04 0.59548,0.02 0.64896,0.07 0.64362,0.241 0.80229,0.581 0.29596,0.328 -1.89341,0.965 -0.041,0.103 -0.64183,4.8 -2.37122,-1.311 -2.32308,-0.763 1.83993,-3.15"
+ class="c54065"
+ id="Morgan, WV" />
+ <path
+ d="m 364.89104,219.84214 10.63125,1.091 -0.18363,2.028 10.23545,0.921 -0.32805,3.948 -0.77911,9.033 -15.30772,-1.296 -5.73015,-0.554 1.46196,-15.171"
+ class="c56021"
+ id="Laramie, WY" />
+ <path
+ d="m 387.62441,199.74414 -1.18917,14.054 -0.60261,7.002 -0.25852,3.082 -10.23545,-0.921 0.18363,-2.028 1.97007,-22.03 2.88469,0.253 4.07207,0.308 3.17529,0.28"
+ class="c56015"
+ id="Goshen, WY" />
+ <path
+ d="m 277.91551,138.61114 6.25787,0.981 -0.28882,1.904 4.73352,0.722 1.05368,0.9 0.17472,0.241 0.13728,0.619 -0.0713,0.322 -0.0178,2.177 0.61331,2.099 1.01089,2.997 0.78803,1.693 -2.24285,15.246 -0.3851,1.977 -4.73352,-0.717 -0.29596,1.977 -3.86704,-0.602 -0.2086,1.285 -3.88131,-0.602 0.22643,-1.471 -1.81675,-0.667 -1.92015,-0.305 2.36944,-15.22 1.7686,-11.168 0.59548,-4.388"
+ class="c56039"
+ id="Teton, WY" />
+ <path
+ d="m 273.18199,169.38714 1.92015,0.305 1.81675,0.667 -0.22643,1.471 3.88131,0.602 -0.37619,2.491 -1.3835,7.898 -0.27991,1.576 -0.92531,5.98 0.21038,4.026 3.82425,0.634 4.32346,0.765 -0.4992,3.332 -0.37797,3.393 -1.38886,9.152 -16.88377,-2.662 1.53505,-9.644 1.87379,-11.679 1.88628,-11.557 1.06972,-6.75"
+ class="c56023"
+ id="Lincoln, WY" />
+ <path
+ d="m 266.81715,209.01714 16.88377,2.662 -1.98611,13.282 -7.73053,-1.109 -9.29588,-1.535 0.93244,-5.801 1.19631,-7.499"
+ class="c56041"
+ id="Uinta, WY" />
+ <path
+ d="m 290.06399,168.51214 4.88506,0.761 0.67571,2.378 0.1765,1.345 -0.0232,0.183 -0.2086,0.548 -0.10519,0.481 -0.0321,0.916 0.21751,0.901 1.15708,4.033 3.37497,4.059 2.72423,3.22 0.85043,1.143 -0.33696,6.019 -0.53843,3.888 -7.66634,-1.069 -4.18618,-0.658 -5.06157,-0.858 -4.32346,-0.765 -3.82425,-0.634 -0.21038,-4.026 0.92531,-5.98 0.27991,-1.576 1.3835,-7.898 0.37619,-2.491 0.2086,-1.285 3.86704,0.602 0.29596,-1.977 4.73352,0.717 0.3851,-1.977"
+ class="c56035"
+ id="Sublette, WY" />
+ <path
+ d="m 299.36165,134.06314 8.54173,1.157 2.98988,0.548 0.32804,0.05 2.13053,0.289 4.99026,0.659 -0.37797,2.942 0.36905,0.706 -0.55447,4.919 -0.11945,2.482 -1.07686,8.051 0.37619,0.05 -0.271,2.035 -3.94727,-0.532 -2.30525,1.753 -0.21751,1.968 -2.94887,-0.394 -0.27278,2.018 -2.95778,-0.41 -0.67571,-0.03 -0.0945,-0.378 -1.23909,-2.05 -0.8433,-0.802 -0.29774,-0.225 -0.80229,-0.458 -0.16937,0 -1.58319,0.651 -0.25674,0.329 -0.4261,0.844 -3.0291,0.29 -1.58319,-3.006 -1.14995,-1.39 0.41898,-2.846 -0.78803,-1.693 -1.01089,-2.997 -0.61331,-2.099 0.0178,-2.177 0.0713,-0.322 -0.13728,-0.619 -0.17472,-0.241 -1.05368,-0.9 -4.73352,-0.722 0.28882,-1.904 -6.25787,-0.981 1.39777,-7.595 2.70818,0.419 2.00038,0.408 0.70602,0.243 2.41935,0.378 0.041,0 5.34326,0.724 1.81496,0.09 1.35142,0.21 3.66379,0.571"
+ class="c56029"
+ id="Park, WY" />
+ <path
+ d="m 285.96695,195.80214 5.06157,0.858 4.18618,0.658 7.66634,1.069 25.56101,3.366 -0.21752,2.676 0.0499,1.357 -0.99663,7.975 -0.30487,1.904 -7.12078,-0.932 -0.43324,4 -0.10519,2.017 -1.17313,9.105 -5.68914,-0.685 -13.66748,-1.84 -2.69391,-0.392 -8.01757,-1.07 -0.66857,-0.1 -2.3944,-0.337 -2.46571,-0.353 -0.0178,0 -0.8112,-0.121 1.98611,-13.282 1.38886,-9.152 0.37797,-3.393 0.4992,-3.332"
+ class="c56037"
+ id="Sweetwater, WY" />
+ <path
+ d="m 330.71699,173.17914 0.98771,0.122 0.21751,0.698 -0.4582,3.955 -0.4992,3.945 0.19433,0.418 -0.90748,7.561 -0.7809,2.596 -0.86826,5.279 0.32092,0.04 -0.48137,3.959 -25.56101,-3.366 0.53843,-3.888 0.33696,-6.019 -0.85043,-1.143 -2.72423,-3.22 -3.37497,-4.059 -1.15708,-4.033 -0.21751,-0.901 0.0321,-0.916 0.10519,-0.481 0.2086,-0.548 0.0232,-0.183 -0.1765,-1.345 -0.67571,-2.378 -4.88506,-0.761 1.82387,-12.4 1.14995,1.391 1.58319,3.005 3.0291,-0.29 0.4261,-0.843 0.25674,-0.33 1.58319,-0.651 0.16937,0 0.80229,0.458 0.29774,0.225 0.8433,0.802 1.23909,2.05 0.0945,0.378 1.11786,1.309 0.8433,1.624 -0.23356,1.655 2.01821,0.451 1.8631,0.264 1.93798,0.586 1.20522,0.956 0.5313,0.98 1.87023,0.926 3.80108,1.51 1.4459,0.192 1.04655,0.05 0.54556,-0.1 9.2727,1.125 0.0892,-0.667"
+ class="c56013"
+ id="Fremont, WY" />
+ <path
+ d="m 316.68758,157.94514 0.99485,0.119 0.76306,2.147 -0.30487,2.025 1.8007,1.549 2.12875,0.926 2.59586,0.337 0.84329,1.349 0.30487,0.781 3.5604,0.441 1.74364,2.242 -0.40114,3.318 -0.0892,0.667 -9.2727,-1.125 -0.54556,0.1 -1.04655,-0.05 -1.4459,-0.192 -3.80108,-1.51 -1.87023,-0.926 -0.5313,-0.98 -1.20522,-0.956 -1.93798,-0.586 -1.8631,-0.264 -2.01821,-0.451 0.23356,-1.655 -0.8433,-1.624 -1.11786,-1.309 0.67571,0.03 2.95778,0.41 0.27278,-2.018 2.94887,0.394 0.21751,-1.968 2.30525,-1.753 3.94727,0.532"
+ class="c56017"
+ id="Hot Springs, WY" />
+ <path
+ d="m 316.68758,157.94514 0.271,-2.035 19.21399,2.443 3.74403,0.499 0.29774,0.03 -0.92353,8.011 -0.57943,7.274 -7.00668,-0.868 -0.98771,-0.122 0.40114,-3.318 -1.74364,-2.242 -3.5604,-0.441 -0.30487,-0.781 -0.84329,-1.349 -2.59586,-0.337 -2.12875,-0.926 -1.8007,-1.549 0.30487,-2.025 -0.76306,-2.147 -0.99485,-0.119"
+ class="c56043"
+ id="Washakie, WY" />
+ <path
+ d="m 318.34209,136.76214 6.00292,0.813 5.47163,0.667 0.32091,0.273 0.10519,0.135 0.26387,1.953 0.29061,2.669 1.05189,1.856 0.76307,0.634 0.43324,0.218 0.2906,-0.121 0.4582,-0.1 0.89144,0.555 2.47462,2.234 0.14441,0.353 0.0481,0.499 2.38013,2.931 0.40115,1.344 0.24068,1.551 -0.45819,3.623 -3.74403,-0.499 -19.21399,-2.443 -0.37619,-0.05 1.07686,-8.051 0.11945,-2.482 0.55447,-4.919 -0.36905,-0.706 0.37797,-2.942"
+ class="c56003"
+ id="Big Horn, WY" />
+ <path
+ d="m 356.43845,141.52814 3.86348,0.417 -0.271,2.862 -0.15332,2.731 -0.2086,2.676 -0.16224,1.592 -2.76345,-0.29 -4.07386,-0.377 -0.009,0.1 -15.30772,-1.833 -0.0481,-0.499 -0.14441,-0.353 -2.47462,-2.234 -0.89144,-0.555 -0.4582,0.1 -0.2906,0.121 -0.43324,-0.218 -0.76307,-0.634 -1.05189,-1.856 -0.29061,-2.669 -0.26387,-1.953 -0.10519,-0.135 -0.32091,-0.273 4.89219,0.61 7.65921,0.94 0.85935,0.176 3.10219,0.378 10.10887,1.182"
+ class="c56033"
+ id="Sheridan, WY" />
+ <path
+ d="m 339.9166,158.85214 0.45819,-3.623 -0.24068,-1.551 -0.40115,-1.344 -2.38013,-2.931 15.30772,1.833 0.009,-0.1 4.07386,0.377 2.76345,0.29 -0.28704,1.927 -0.28348,2.395 -0.45641,4.355 0.007,0.234 0.0392,0.119 -0.16759,1.881 -0.50633,4.837 -0.27278,1.263 -0.49921,4.507 -0.28882,2.981 -1.00376,-0.09 -8.43832,-0.852 -8.66118,-1.013 0.0232,-0.176 0.57943,-7.274 0.92353,-8.011 -0.29774,-0.03"
+ class="c56019"
+ id="Johnson, WY" />
+ <path
+ d="m 331.7047,173.30114 7.00668,0.868 -0.0232,0.176 8.66118,1.013 8.43832,0.852 -0.0321,0.947 -0.48316,4.676 -0.64183,5.884 -0.76307,6.853 -0.6347,6.028 -9.73982,-1.023 -5.05443,-0.624 -9.51518,-1.157 -0.32092,-0.04 0.86826,-5.279 0.7809,-2.596 0.90748,-7.562 -0.19433,-0.417 0.4992,-3.945 0.4582,-3.955 -0.21751,-0.698"
+ class="c56025"
+ id="Natrona, WY" />
+ <path
+ d="m 328.92342,197.79414 9.51518,1.157 5.05443,0.624 9.73982,1.023 0.0392,0 -1.51187,14.263 -0.77911,7.632 -0.16759,2.003 -2.38727,-0.227 -1.95224,-0.249 -0.69175,6.259 -0.27278,2.862 -9.18356,-1.115 -7.89277,-0.928 -10.29251,-1.243 1.17313,-9.105 0.10519,-2.017 0.43324,-4 7.12078,0.932 0.30487,-1.904 0.99663,-7.975 -0.0499,-1.357 0.21752,-2.676 0.48137,-3.959"
+ class="c56007"
+ id="Carbon, WY" />
+ <path
+ d="m 353.27207,200.59814 8.69506,0.965 -0.066,0.561 -0.39223,0.635 -0.65788,-0.07 -0.15332,1.677 0.22464,0.186 1.6545,0.344 2.10557,0.201 0.34588,-0.971 0.0802,-0.988 0.23355,-0.642 0.37797,-0.57 0.82725,0.07 -0.60261,7.907 -0.23355,2.706 -0.51347,5.279 -0.30665,1.954 -1.46196,15.171 -15.68569,-1.607 -2.23393,-0.265 0.27278,-2.862 0.69175,-6.259 1.95224,0.249 2.38727,0.227 0.16759,-2.003 0.77911,-7.632 1.51187,-14.263"
+ class="c56001"
+ id="Albany, WY" />
+ <path
+ d="m 373.82678,162.23614 11.15364,0.908 5.68022,0.515 -0.0784,0.898 -0.57051,6.606 -0.67571,8.06 -14.02227,-1.175 -2.98096,-0.256 1.49404,-15.556"
+ class="c56045"
+ id="Weston, WY" />
+ <path
+ d="m 375.47415,143.32014 0.82726,0.08 15.9032,1.503 -1.54397,18.756 -5.68022,-0.516 -11.15364,-0.907 -0.0481,0 0.0553,-0.932 1.166,-12.391 0.2086,-2.844 0.26564,-2.74"
+ class="c56011"
+ id="Crook, WY" />
+ <path
+ d="m 360.30193,141.94514 1.72938,0.08 1.15709,0.06 12.28575,1.23 -0.26564,2.74 -0.2086,2.844 -1.166,12.391 -0.0553,0.932 0.0481,0 -1.49404,15.556 -15.54128,-1.487 0.28882,-2.981 0.49921,-4.507 0.27278,-1.263 0.50633,-4.837 0.16759,-1.88 -0.0392,-0.12 -0.007,-0.233 0.45641,-4.356 0.28348,-2.394 0.28704,-1.928 0.16224,-1.592 0.2086,-2.676 0.15332,-2.731 0.271,-2.862"
+ class="c56005"
+ id="Campbell, WY" />
+ <path
+ d="m 356.79146,176.30514 15.54128,1.487 2.98096,0.256 -0.2817,3.334 -0.99662,10.576 -0.16046,2.58 -0.36014,4.01 -3.39993,-0.314 -3.22165,-0.248 -0.34588,4.01 -0.82725,-0.07 -0.37797,0.57 -0.23355,0.642 -0.0802,0.988 -0.34588,0.971 -2.10557,-0.201 -1.6545,-0.344 -0.22464,-0.186 0.15332,-1.677 0.65788,0.07 0.39223,-0.635 0.066,-0.561 -8.69506,-0.965 -0.0392,0 0.6347,-6.028 0.76307,-6.853 0.64183,-5.884 0.48316,-4.676 0.0321,-0.947 1.00376,0.09"
+ class="c56009"
+ id="Converse, WY" />
+ <path
+ d="m 389.33597,179.22314 -0.95562,11.562 -0.75594,8.959 -3.17529,-0.28 -4.07207,-0.308 -2.88469,-0.253 -3.97758,-0.355 0.36014,-4.01 0.16046,-2.58 0.99662,-10.576 0.2817,-3.334 14.02227,1.175"
+ class="c56027"
+ id="Niobrara, WY" />
+ <path
+ d="m 373.51478,198.54814 3.97758,0.355 -1.97007,22.03 -10.63125,-1.091 0.30665,-1.954 0.51347,-5.279 0.23355,-2.706 0.60261,-7.907 0.34588,-4.01 3.22165,0.248 3.39993,0.314"
+ class="c56031"
+ id="Platte, WY" />
+ <path
+ class="c11001"
+ d="m 856.36053,257.44814 0.98236,-1.599 0.91461,0.474 2.09131,1.077 -1.9148,3.006 -0.12837,-1.141 -0.47246,-0.918 -0.80408,-0.353 -0.66857,-0.546"
+ id="Washington, DC" />
+ </g>
+ <path
+ d="m 218.13767,190.73014 -4.00076,-0.788 -3.61566,-0.715 -4.40369,-0.997 -2.51563,-0.506 -2.08061,-0.328 -24.5002,-5.201 -1.92907,-0.442 -6.49321,-1.487 -0.12836,-0.05 -19.42972,-4.418 -9.61858,-2.211 -9.02311,-2.275 -0.58835,-0.151 -10.53319,-2.683 m 298.15825,94.021 -0.60261,9.927 -0.007,0.134 -0.59548,10.069 -0.11232,1.995 -0.49029,8.084 -0.12837,1.902 -0.49742,8.013 -0.009,0.144 -0.72385,12.125 -0.12836,2.177 -0.3851,5.898 -0.58657,9.162 -5.69627,-0.401 -9.45099,-0.779 -2.30703,-0.178 -1.52614,-0.113 -16.75363,-1.246 -13.16115,-1.1 -4.8708,-0.448 -2.80445,-0.315 -1.18917,-0.114 -9.03202,-0.915 -5.22381,-0.538 -8.51677,-0.876 -2.55485,-0.274 -4.58198,-0.505 -2.34447,-0.451 -7.61108,-0.9 -1.10003,-0.136 -16.24016,-2.032 -12.02902,-1.608 -17.25283,-2.452 -5.95479,-0.9 -2.93995,-0.58 -4.60516,-0.697 -11.93274,-1.872 -20.25697,-3.414 -6.44508,-1.143 -20.63493,-3.84 m 122.22108,140.381 -1.51009,-1.615 -0.18542,-0.249 -0.0321,-0.106 0.44928,-1.984 0.0481,-0.168 0.41897,-0.987 0,0 0.007,0 0.0642,0 4.22718,0.447 7.3276,0.772 20.88454,2.131 1.36746,0.128 15.94955,1.43 0.85934,0.07 4.98134,0.408 7.6913,0.603 1.14104,0.09 1.00376,0.07 1.36746,0.106 1.09111,0.09 0.47603,0.03 0.15154,-1.993 0.7399,-10.006 0.74702,-10.05 0.8843,-9.868 0.39402,-4.195 0.52951,-5.841 0.8843,-11.009 0.0161,-0.241 0.77198,-10.021 0.35301,-4.766 0.40114,-5.286 0.76307,-10.139 0.2086,-2.694 0.54734,-7.298 0.43502,-6.074 0.27991,-3.705 0.75594,-0.449 0.85043,-11.547 m 120.05311,-122.469 0.57765,0.04 0.22464,0.09 0.17829,0.248 0.0713,0.265 0.007,0.355 -0.11945,0.319 0.19968,2.646 0.51525,0.965 -0.21038,1.422 1.40669,3.889 2.25889,4.195 0.30487,4.243 2.39618,4.065 0.74702,2.635 0.25674,4.677 1.20522,0.724 -0.23356,2.619 0.76485,3.358 -0.54021,2.732 1.5511,4.598 0.97166,1.414 0.22643,-0.491 0.65075,0.578 -0.37797,0.676 -0.19968,0.185 0.0963,0.408 1.13212,2.846 1.21414,1.182 0.0463,0.119 -0.005,0.04 0,0.03 -0.0178,0.417 0,0.06 4.29849,6.044 0.009,0.216 0.11232,0.162 2.12161,1.92 0.85935,0.553 0.43324,0.16 0.33696,0.128 0.0642,0.02 0.0802,0 0.66858,-0.06 0.13015,-0.05 0.1034,-0.1 0.0143,-0.02 0.60261,-0.683 1.47086,1.849 0.14442,0.683 0.13728,0.634 -0.36906,0.822 -0.37083,0.06 -1.26941,1.124 -0.0713,0.08 -0.6044,0.882 -0.20859,0.298 -0.6971,2.097 2.38548,2.624 3.16637,5.017 3.39994,0.907 -0.082,1.079 0.025,1.606 0.0571,4.565 0.007,2.522 0.025,6.044 0.0232,2.058 0.0963,7.614 0.009,0.541 0.0553,8.429 0.007,0.451 0.10518,6.707 0.007,0.603 0.0874,6.525 0.0178,1.359 0.0731,5.359 0.0392,2.291 0.0553,3.903 1.1339,7.803 0.21751,1.377 1.21414,7.921 0.4261,2.788 0.84152,5.554 -0.007,0.403 -0.11232,10.341 -0.0481,4.747 -0.0392,5.121 -0.0571,7.343 -0.041,5.761 -0.0463,7.001 m 34.38265,-303.159 -0.082,0.06 -0.22285,-0.1 -0.91462,-0.893 -0.42789,0.03 -1.1232,0.765 -0.0892,0.183 -0.016,0.17 0.0553,0.144 0.0802,0.105 0.016,0.02 0.016,0.257 -0.21573,0.563 -0.0731,0.07 -0.0784,0.05 -0.47603,0.03 -0.44215,-0.04 -0.36014,-0.25 0.20859,5.632 0.21573,5.964 0.041,0.996 0.0321,0.901 -2.33913,1.46 -3.34823,2.204 -0.79872,0.698 -0.20147,0.266 -0.19968,0.36 -1.61349,3.231 -0.65432,2 -0.0214,0.364 0.007,0.151 0.041,0.61 0.0553,0.451 0.21751,0.168 0.77199,0.13 0.32091,-0.05 1.27119,0.685 0.79338,1.501 0.32091,1.624 -0.60974,1.558 -0.42789,0.53 -0.0214,0.02 -0.19433,0.176 -0.24782,2.001 -0.33875,3.029 0.0499,0.756 0.39936,0.852 0.34945,1.615 -0.1248,1.735 -0.56874,2.717 1.166,0.674 1.69372,1.439 0.17651,0.224 0.041,0.225 1.18918,1.182 0.25851,0.119 0.69889,0.08 2.20898,0.09 0.28169,0.06 0.18542,0.09 0.15867,0.137 0.0571,0.09 1.30328,1.945 2.63508,1.004 3.84031,4.756 5.1828,3.664 2.33912,0.804 2.40153,3.054 0.40293,2.78 1.10003,5.151 0.28882,1.775 -0.016,1.182 1.78465,1.255 0.38688,0.491 0.50456,0.811 -0.0642,0.287 -1.28366,2.163 -0.43681,1.695 0.35658,2.186 0.37618,1.758 1.53505,3.409 0.2086,0.433 1.35676,0.9 0.46712,0.216 0.8843,0.21 2.17688,0.418 0.8433,0.201 0.19255,0.1 0.12124,0.121 1.06972,1.945 0.18363,0.579 0.0107,0.13 -0.0642,0.111 3.61388,-0.178 8.4294,-0.491 1.50296,-0.09 7.35078,-0.38 0.60261,-0.04 7.17783,-0.394 2.76345,-0.184 1.166,-0.08 6.78025,-0.563 1.75256,-0.177 6.73568,-0.465 m -47.8754,3.036 -0.23534,0.403 -0.007,0.05 0.016,0.129 0.0392,0.116 0.13728,0.142 0.39223,0.282 1.13569,0.587 1.44412,1.005 0.007,0 0.0428,0.04 1.01089,1.172 0.0481,0.07 0.009,0.09 -0.0963,0.651 -0.0963,0.215 0,0.146 0.23534,0.53 0.0125,0.03 0.48316,0.603 0.016,0.01 0.29061,0.233 0.312,0.202 0.7078,0.226 2.97205,3.541 0.18542,2.405 -1.32646,3.437 -1.20522,1.352 -0.26565,2.505 -0.89143,1.198 -1.0198,1.189 -3.24661,1.608 -1.38351,0.353 -0.58656,0.02 -0.24782,-0.03 -1.05189,0 -2.41044,0.658 -0.6454,0.234 -0.18364,0.119 -0.016,0 0,0 -0.12124,0.171 -0.016,0.05 -0.23891,0.982 -0.20325,0.792 -0.49029,1.966 0.025,0.207 1.16422,1.4 0.54912,0.272 0.22999,-0.03 0.13907,0.06 0.14619,0.152 0.80942,1.326 -0.016,0.555 0.016,0.06 0.0642,0.2 0.0874,0.62 -0.0695,1.872 -0.1462,0.683 -0.0963,0.144 -0.49742,0.282 -0.18542,0.182 -1.3425,1.915 -0.0642,0.297 -0.11945,2.603 -1.207,1.416 -0.56161,0.01 -0.45819,0.03 -0.14442,0 -0.93422,0.335 -0.10341,0.06 -0.43502,0.248 -0.15332,0.1 -0.0535,0.06 -0.0642,0.06 -0.0642,0.07 -0.73097,1.123 -0.0267,0.171 0.0571,0.193 0.35479,0.167 0.28882,0.419 0.0963,0.28 0.0143,0.232 -0.0535,2.082 -0.041,0.202 -0.2086,0.167 -0.53129,0.187 -1.28367,3.062 -0.10697,1.125 1.23018,5.858 1.75256,4.249 1.04298,1.656 2.47819,1.886 4.23431,4.397 4.31277,3.833 0.82725,2.821 -0.0143,0.288 -0.48315,0.747 -0.0178,0.07 0.0446,0.161 0,0 0.95562,2.562 3.7672,-0.995 3.1646,0.77 0.45819,0.139 0.44929,0.216 0.33874,0.2 1.74365,1.053 0.0731,0.129 0.016,0.135 -0.0642,0.532 -0.0392,0.217 -1.29437,1.58 0.36727,1.85 -1.17847,3.053 -0.0802,0.283 -1.2391,3.222 -0.0499,0.06 -0.0802,0.16 -0.26208,0.892 -0.0339,0.1 -0.016,0.234 0.0339,0.964 0.24068,1.034 0.2086,0.515 0.32983,0.451 0.0571,0.08 0.0464,0.05 1.51187,1.47 0.91283,0.683 5.08831,4.645 4.85476,1.348 3.11645,5.159 0,0 0,0.137 m 1.36568,24.716 0.98949,-0.05 0.18007,-0.339 0.0285,-0.06 0.0232,-0.09 0.0571,-0.227 0.016,-0.06 0,-0.1 -0.007,-0.04 -0.0571,-0.259 -0.11232,-0.266 -0.0107,-0.02 -0.11767,-0.183 -0.025,-0.02 -0.0392,-0.03 -0.0481,-0.03 -0.28169,-0.08 -0.51347,-0.08 -0.33696,0.05 -0.1141,0.07 -0.21038,0.281 -0.0303,0.04 -0.0232,0.09 -0.025,0.105 -0.0178,0.08 0.0178,0.07 0.0178,0.1 0.007,0.02 0.19968,0.426 0.43324,0.609 0.1462,3.737 -1.3122,3.6 -1.62241,4.396 0.98236,2.17 -0.50812,0 -0.33517,0.06 -0.40115,0.209 -0.0606,0.04 -0.11767,0.103 -1.62241,3.464 -0.50812,4.87 -4.36268,2.62 1.24623,1.227 0.0713,0.242 0.74702,5.272 -0.007,0.03 0,0.02 -0.007,0.01 -0.0339,0.05 -0.27991,0.344 -1.97008,1.513 -1.87201,0.617 -0.22464,0.717 0.0321,0.321 0.47246,3.102 -2.09665,0.769 -2.89182,4.605 0.25673,2.676 0.20147,2.064 -0.1355,0.442 -0.0178,0.04 -0.041,0.03 -0.65075,0.57 -0.81834,0.392 -0.98949,0.204 -0.98593,0.192 -1.8007,3.231 -0.85399,1.759 -0.27278,0.569 0.0686,0.242 0.85667,0.699 0.20146,0.5 -0.11232,0.772 -3.71372,1.87 -1.52613,6.573 -0.10519,0.523 0.025,0.05 0.1141,0.203 0.56874,0.426 0.53842,0.435 0,0.02 -0.0499,0.247 -0.33696,0.289 -1.4049,0.565 0.26386,0.73 0.025,0.01 0.97345,0.663 0.79516,0.537 0.15155,0.536 -0.23178,0.459 -0.98949,0.288 0.96453,2.759 0.65075,1.18 0.4992,0.529 0.0553,1.767 -0.61865,2.518 -0.56161,0.634 -0.15511,0.177 -0.63292,1.021 -0.20146,0.731 0.0321,0.186 1.54218,6.989 0.11411,0.274 0.0214,0.04 0.0606,0.07 0.0214,0.04 0.041,0.03 0.18364,0.16 0.0481,0.04 0.61153,0.191 0.13728,0.314 -0.4368,1.47 0.0339,0.369 0,0.03 0.0553,0.08 0.082,0.128 0.016,0.04 2.14479,2.282 0.1355,3.318 -2.24107,0.278 1.96116,2.291 -3.99363,5.828 -2.22502,2.942 -0.19255,0.346 -0.30844,0.528 -0.0143,0.02 -2.09666,4.212 -0.0481,0.09 -0.0731,0.155 -0.007,0.02 -0.73098,5.992 -0.47424,2.477 -0.47603,3.592 9.0552,-0.426 2.28385,-0.112 4.60515,-0.259 5.09545,-0.297 0.37618,-0.01 3.93836,-0.251 1.7276,-0.105 8.32422,-0.553 2.1127,-0.144 0.041,0.713 -0.24247,1.214 -0.1979,0.442 -0.12302,0.02 -0.16046,0.02 -0.0463,0.05 -0.25852,1.075 -0.29774,1.469 -0.2389,1.213 -0.21929,1.642 0,0 3.30187,4.548 0.0339,0.03 0.12836,0.13 1.23018,2.5 0.0303,0.426 -0.18363,0.465 -0.0499,0.193 0.016,0.123 0.62936,1.194 0.19255,0.371 0.43145,0.505 0.1462,0.169 0.0499,0.03 0.0713,0.05 0.0481,0.03 0.0374,0 0.91818,-0.06 m -3.56753,-157.162 -0.85756,-1.927 4.06316,-3.953 0.0981,-0.03 0,0 6.90327,2.935 1.32468,0.141 0.13549,-0.02 0.41898,-0.185 0.21573,-0.595 0.26564,-1.277 -0.51346,-1.141 -0.22464,-0.216 -0.24247,-0.137 -0.76307,-0.916 -0.15511,-0.498 0.0107,-0.153 0.51525,-2.273 0.0945,-0.227 0.23355,-0.303 0.16224,-0.114 0.12837,-0.1 0.312,-0.143 0.11232,-0.05 1.05368,0.344 0.45641,-0.608 0.30666,-0.283 0.016,0 0.0874,-0.06 0.43502,-0.264 0.0392,0 0.1141,-0.03 0.312,-0.09 0.37797,-0.08 2.5085,-0.531 0.18363,-0.04 0.3441,-0.392 0,-0.371 -1.43521,-1.487 -0.1462,-0.264 -0.3851,-1.045 -0.0107,-0.02 -0.0945,-0.52 -0.009,-0.03 0.025,-0.161 0.0963,-0.256 0.0232,-0.05 0.1462,-0.248 0.29061,-0.547 0.0143,0 0.83616,-0.608 0.21751,-0.236 0.1355,-0.247 0.0874,-0.234 0.23356,-0.875 1.60636,-2.53 4.07565,-0.323 4.39477,-1.326 2.75632,0.739 0.64361,0.45 2.62617,1.75 1.3425,-2.424 1.11786,-1.047 2.79732,-1.854 3.19669,3.316 0.13728,0 0.2389,-0.08 0.49921,-0.387 1.17313,-2.674 -0.1355,-1.373 0.0303,-0.252 0.0731,-0.103 0.0963,-0.06 0.36905,-0.07 0.10519,-0.01 3.62458,-2.329 -0.0553,0.649 0,0.04 0.007,0.161 0.007,0.105 0.0161,0.04 0.12836,0.449 0.10519,0.161 0.041,0.06 0.0874,0.06 0.81121,0.537 0.78089,0.306 0.12837,0.02 2.59586,0.128 0.53664,-0.177 0.86826,-0.296 0.44215,-4.041 1.67233,-2.757 2.4978,-2.41 3.2787,-3.712 -0.0553,-1.449 1.24445,-3.736 2.48353,0.862 2.92391,-2.001 3.89022,-2.63 -0.24247,-1.003 -1.77395,-2.828 0.81833,-1.847 3.55148,0.305 2.0093,-0.733 3.48729,1.286 1.95224,3.198 0.16937,1.054 3.30188,0.939 2.63686,-0.281 0.60975,0.08 0.21751,0.08 0.11232,0.09 1.56714,1.622 1.39064,0.69 1.02693,-0.121 0.0963,-0.811 0.13728,-0.225 0.18542,-0.128 1.39777,-0.612 0.21929,-0.05 0.15154,0.02 0.025,0 0.72028,0.177 1.9148,0.46 0.0481,0.02 0.60083,0.282 1.06081,0.777 4.05959,-3.423 0.31914,-0.145 1.48691,-0.674 0.48494,-0.212 0.0214,0 0.0909,0 0.18364,0.08 0.082,0.09 0.0232,0.04 0.0481,0.07 0.0303,0.06 0.009,0.03 0.007,0.03 0.0339,0.137 0.0143,0.163 0,0.02 0.009,0.01 -0.0178,0.278 0.16937,0.724 0.49921,1.502 0.041,0.09 0.11945,0.255 0.14442,0.169 0.0178,0.03 0.3851,0.257 0.0802,0.04 2.86685,1.116 1.5511,1.743 0.37797,4.035 -0.44929,1.966 0.0713,0.209 0.16224,0.403 0,0.02 0.3227,0.287 0.34409,0.08 0.0481,0.01 2.82763,2.699 0.025,0.03 0.007,0.02 0,0.129 -0.46533,0.804 1.8631,1.718 1.86132,2.531 0.0303,0.12 0.67214,1.036 3.65845,2.461 1.31041,0.474 0.71315,-0.162 0.70066,-0.209 0.81121,0.483 -0.25139,0.113 -0.8112,0.731 -0.0481,0.153 0.12837,0.344 1.55109,2.202 1.51188,1.317 0.21573,0.107 2.04316,0.738 1.20344,0.715 2.10557,-0.417 0.0571,-0.03 0.78803,-0.724 0.0143,-0.02 1.57428,-1.44 0.66679,-1.341 2.8205,1.97 4.19688,-2.025 1.66698,-3.457 1.79535,1.037 2.23394,-1.677 0.18542,-0.147 1.80783,-1.429 0.86112,1.237 0.52238,-0.442 2.05565,-1.817 -0.41006,-0.761 0.56339,-1.166 1.03585,-1.254 -1.58497,-1.239 3.29652,-6.668 1.24444,-2.836 2.13767,-5.096 -0.43324,-0.875 0,-0.03 0.009,-0.08 1.10003,-1.71 0.47425,-1.688 0.0891,-1.625 0.0303,-1.904 1.77752,0.426 0.36192,0.161 0.33697,0.337 1.09111,1.617 3.07902,0.522 1.24622,-1.799 1.80783,-6.976 3.28583,-0.635 0.68284,-2.323 0.23356,-0.724 0.041,-0.06 0.0784,-0.126 0.9164,-0.869 0.0713,0.12 0.0731,0.112 0.0571,0 1.6866,-1.59 0.56338,-1.247 0.0321,-0.16 0.0143,-0.877 0.49207,-0.843 0.19968,-0.193 0.54021,-0.533 0.271,-0.496 0.26743,-0.626 0.0642,-0.37 0.0481,-4.386 -0.20147,-2.516 2.37122,1.311 3.95262,2.242 4.13804,2.32 1.06259,-4.661 m -203.83195,67.644 0.016,0.209 0.1141,0.46 0.007,0 0.51347,0.958 0.33696,0.504 0.47603,0.467 0.22464,0.282 0.28882,0.651 0.007,0.02 0.009,0.04 0.10341,0.387 0.009,0.02 -0.009,0.03 -0.0713,0.708 -0.0731,0.217 -0.0143,0.02 -0.0178,0.02 -0.016,0.02 -0.2086,0.107 -0.65788,0.176 0.0303,2.017 0.45998,0.658 1.11608,2.089 0.64183,1.574 1.21414,0.99 3.4962,0.376 0.65075,0.838 -0.68819,2.298 -0.52594,0.305 0,0.53 1.0608,0.563 -0.70601,3.188 -2.76523,0.62 -1.42273,3.19 1.29436,-0.184 9.36185,-0.676 0.13728,0 0.19968,-0.02 5.48946,-0.396 0.49742,-0.03 7.97834,-0.554 -0.65966,-4.154 1.07151,-0.06 2.98809,0.06 -0.007,0.707 2.90073,-0.338 0.96454,-0.111 5.56077,-0.579 4.02393,-0.394 0.98771,-0.114 5.40745,-0.649 3.66558,0 2.74918,-0.676 3.79217,-0.136 4.18618,-0.176 3.43915,-0.21 6.42012,-0.617 2.54059,-0.46 0.35301,-0.06 5.641,-0.354 3.35892,-0.154 0.1355,0 9.43495,-0.884 0.62757,-0.07 4.35555,-0.499 1.03585,-0.103 4.60515,-0.884 3.70302,-0.41 8.86265,-1.118 2.80445,-0.385 4.01859,-0.571 5.7141,-0.852 0.91461,-0.137 1.76861,-0.241 3.84743,-0.555 0.12837,-0.538 1.74543,-0.209 3.26978,-0.442 -0.47424,0.63 5.92269,-0.596 8.22795,-0.997 1.16599,-0.121 4.09169,-0.643 3.14142,-0.337 7.02094,-0.988 0.47424,-0.08 5.64992,-0.951 3.69589,-0.618 0.73097,-0.136 2.29812,-0.408 2.24285,-0.412 1.45304,-0.257 6.1723,-1.116 1.11607,-0.217 4.99917,-0.933 2.3944,-0.481 4.99738,-0.957 2.63687,-0.523 2.38548,-0.456 8.47754,-1.672 2.3623,-0.516 4.46788,-0.839 7.61285,-1.723 3.1949,-0.675 3.42133,-0.722 4.58376,-0.981 m -79.99559,151.861 -0.30309,0.03 -1.67233,0.202 -1.22305,0.06 -2.31238,-0.257 -3.06297,-0.658 -0.83617,-0.563 -2.15014,1.253 -0.17116,2.484 0.0874,0.474 0.30665,0.465 0.60261,0.788 0.25852,0.706 0.0143,1.537 -0.10519,1.573 -0.10341,1.592 -2.24998,0.435 -0.13015,-0.03 -0.40828,-0.321 -0.36905,-0.529 -0.19433,-0.514 -0.57765,-3.221 -4.03464,0.247 -0.80407,0.06 -2.45858,0.176 -2.08952,0.153 -8.84482,0.608 -3.41598,0.236 -0.95027,0.06 -5.02769,0.346 -2.61191,0.169 -5.20776,0.355 -1.50831,0.102 -3.89913,0.274 -1.97008,0.137 -9.54192,0.642 -3.48194,-6.283 -9.59541,1.173 -10.59738,1.231 -2.98274,0.296 -3.94549,0.401 -5.89951,0.565 -1.88628,0.143 -7.39356,0.659 -8.54886,0.812 -0.44394,3.077 0.25852,0.438 2.00038,2.181 0.62935,0.433 0.11054,0.04 0.32983,0.06 0.66679,0.344 0.88431,0.548 0.24068,0.394 0.0713,0.272 0.0321,0.378 -0.19968,5.023 -0.26565,2.514 -1.2694,0.572 m 161.56902,-105.138 -2.43362,-1.736 -9.3048,-6.647 -8.33313,-6.072 -0.25495,-0.177 -4.87793,-3.246 -4.4447,0.723 -7.29728,1.058 -4.47322,0.663 -4.01146,0.592 -0.37797,-0.07 -0.009,-0.218 -0.12837,-2.346 -1.31754,-1.327 -1.49405,-1.526 -2.79019,-1.23 -5.30225,0.483 -0.72385,0.07 -7.46309,0.788 -1.97721,0.202 -1.76147,0.192 -4.59624,0.475 -2.59942,0.119 -3.82783,2.009 -3.29474,2.25 -2.41757,0.619 -1.96116,0.947 -1.78465,0.863 -0.40293,1.831 -1.70442,1.324 -1.23553,2.243 -0.30666,1.737 0.37084,0.618 4.77096,2.933 1.15174,0.803 1.16599,0.162 0.2086,-0.105 0.016,0 0.74881,-0.186 0.67392,-0.09 0.39402,0.112 0.19255,0.147 -0.007,0.06 0.62578,0.966 1.99147,2.803 0.7078,1.842 3.34288,4.122 0.78803,1.198 2.84368,1.693 0.11945,0.03 0.26743,-0.104 0.0874,0 1.64024,0.827 0.49742,0.355 1.18204,0.972 0.76307,1.439 2.20006,1.92 1.85775,0.786 0.31201,0.291 0.16224,0.153 0.90035,0.852 1.27475,1.487 0.45107,1.742 1.248,1.767 1.78822,1.351 3.20739,1.503 1.57605,0.867 3.65489,6.452 0.82903,3.359 2.00929,0.804 0.36906,0.137 1.71155,1.414 2.03961,4.138 0.2496,1.221 0.0998,0.45 0.18185,0.918 0.2496,0.996 0.0892,0.09 1.08577,0.419 3.57465,0.674 m 70.56777,-152.514 0.58835,-1.15 0,0 6.5467,-2.227 m 1.23731,-10.35 -5.10079,1.115 -0.25852,0.06 -0.6757,0.154 -0.28348,0.05 -0.24425,0.05 -0.066,0.01 -0.895,0.168 -0.36727,0.07 -1.04476,0.199 -0.52238,0.1 -0.0642,0 -1.22839,0.208 -0.54021,0.09 -0.20682,-0.725 -0.19255,-0.658 -0.24068,-0.867 -0.46712,-1.665 -1.22304,-4.355 -1.96829,-7.007 -0.64184,-2.289 -0.32091,-1.134 -0.50634,-1.799 -2.06456,-7.722 2.73849,-3.334 0,0 3.27156,0.118 m 4.32346,-37.886 -1.01445,0.731 -0.48138,0.522 -0.41006,0.844 -0.0874,0.256 -0.20859,0.892 -0.0321,0.314 0.0713,0.07 0.0321,0.378 -0.1034,0.691 -0.47425,1.118 -0.68462,0.963 0.0963,0.119 -1.87202,3.497 1.63133,1.922 0.0571,0.135 -0.009,0.136 -0.57765,1.77 -0.35123,0.487 -0.2603,0.03 -0.25673,-0.03 -0.1355,0.04 -0.29239,0.686 0.17829,1.387 0.42432,1.641 0.1141,0.208 0.18721,0.362 2.4657,1.006 1.3015,2.619 1.67055,1.012 0.1141,0.06 4.63546,3.56 -3.76898,3.189 -1.10895,1.616 -1.30862,2.433 -0.68641,0.981 -3.17886,2.225 -0.4261,0.756 -0.62757,2.227 m 20.02341,-28.865 0.16224,-2.161 0.45998,-2.088 0.0713,-0.87 -0.0268,-1.884 -6.08137,-1.819 -0.40114,-0.121 -2.51563,-0.852 -6.31493,-2.209 -1.36746,-1.337 -0.75415,0.08 -1.35142,0.07 -0.29774,-0.138 -1.831,-0.95 -0.52239,-0.497 -0.7381,-0.722 -0.45998,-1.054 -2.73136,-4.901 -2.10557,-0.346 -0.53843,-1.15 -0.30487,-0.289 -1.01267,-0.713 -0.3227,-0.07 -2.05565,0.456 -10.35134,2.243 -0.68106,0.145 -6.85335,1.406 -6.15625,1.231 -0.64361,0.142 -10.73466,2.181 -2.33913,0.472 -7.63425,1.441 -1.69194,0.335 -4.83336,0.889 -4.64259,0.903 -0.7399,0.128 -2.38726,0.403 -9.19248,1.629 -0.25673,0.05 -2.28207,0.394 -0.52951,-3.012 -0.44216,-2.549 -0.098,-0.61 m 144.29657,-46.196 -1.18382,0.07 -0.48851,0.03 -0.11232,0.06 -0.13193,0.06 -1.55645,1.15 -1.18917,1.013 -0.39223,0.337 -0.21751,0.226 -0.90748,1.822 -0.10698,0.243 -0.41541,0.987 -5.5465,1.279 -0.0713,0.02 -0.2496,0.06 -4.06494,0.909 -0.49208,0.111 -5.83176,1.262 -2.8936,0.619 -7.76975,1.663 -1.52792,0.321 -3.98471,0.861 -0.14798,5.648 -0.25317,10.141 0.3851,0.779 0.16046,-0.04 7.22419,-1.528 0.73989,-0.167 8.26004,-1.953 6.17942,-1.463 0.56161,-0.111 0.7078,-0.146 4.28958,-1.02 0.11232,0.337 4.90111,-1.503 2.10735,0.218 2.28921,4.394 1.92193,1.07 0.69889,0.651 2.29634,3.641 m -205.3874,285.775 -0.57587,-1.665 -0.21216,-0.458 -0.14619,-0.262 -0.92888,-1.022 -0.14619,-0.04 -0.16938,0 -0.16937,-0.1 -0.19968,-0.465 -0.27278,-1.632 0.1355,-0.595 0.20859,-0.61 0.24247,-4.901 -2.13766,-5.329 -0.33874,-0.449 0.90748,-4.937 -0.0535,-1.719 2.08953,-4.127 0.0464,-0.07 0.16046,-0.724 -0.19255,-0.383 -0.47424,-0.396 -1.27654,-0.344 -0.12123,-0.136 -0.041,-0.194 0.21573,-0.82 -0.53486,-3.174 -1.84349,-2.05 -1.38886,-3.059 -1.2284,-2.735 -1.54396,-5.344 -0.13728,-0.481 -1.8631,-6.725 -0.34588,-1.239 -1.07685,-3.831 -1.55823,-5.611 -0.39401,-1.405 -0.73098,-2.628 -1.28545,-4.644 -1.57606,-5.351 -0.40827,-1.455 -0.22465,-0.789 -1.51187,-5.344 -0.72384,-2.811 m -87.76356,7.185 10.92899,-0.669 1.49405,-0.11 5.44845,-0.353 2.88468,-0.204 3.37319,-0.247 3.62636,-0.282 0.68284,-0.06 7.57541,-0.603 0.31379,-0.02 3.05227,-0.251 3.99541,-0.578 7.07087,-0.547 7.14574,-0.553 0.23177,-0.02 6.99242,-0.49 0.97701,-0.09 8.66653,-0.854 0.14085,0 8.33491,-0.811 4.82802,-0.435 2.47462,-0.257 2.01821,-0.217 1.83101,-0.25 5.32543,-0.669 3.1218,-0.367 0.64005,-0.08 2.87042,-0.351 5.56791,-0.685 -0.0695,-5.079 1.51543,-1.334 1.98077,-0.05 0.70424,-0.579 0.43502,-0.594 0.75415,-4.122 0.15333,0.05 5.02056,-3.18 0.0891,0 0.33697,0 2.62616,-0.271 0.22643,-0.146 3.18955,-2.525 0.66679,-0.977 -0.0802,-0.437 5.11327,-2.544 0.71136,-3.625 0.83082,-0.21 1.62241,-1.519 1.1553,-1.141 0.3227,-0.234 0.46711,-0.336 0.0874,-0.01 0.27635,0.184 0.35122,0.337 1.97899,1.15 1.30862,-2.395 3.2787,-2.442 2.74027,0.793 2.16084,-4.042 0.19255,-0.554 0.1355,-0.369 0.84508,-0.947 0.9164,-0.627 0.0232,-0.02 0.0963,-0.06 0.1141,0.263 0.48138,0.154 0.28704,-0.01 0.0339,0 0.38332,-0.129 -0.0695,-1.095 0.0874,-4.713 m 117.44834,-168.435 -1.23018,-4.404 -1.71869,-8.397 -0.97345,-4.525 -2.76344,-0.61 -0.54556,-0.226 -0.0642,-0.09 -0.16224,-1.342 0.0909,-0.933 0.31022,-1.704 -0.59548,-1.157 -0.27991,-0.507 -1.91659,-4.525 -0.0356,-0.08 -0.0392,-0.772 0,-0.749 0.009,-1.902 0.67392,-1.922 -0.53842,-2.796 0.0891,-0.964 -0.025,-0.25 -0.009,-0.01 -0.29774,-0.804 -0.22999,-0.499 -0.76486,-0.924 -0.46711,-0.273 -0.26564,-0.224 -0.48138,-0.901 -0.81834,-4.797 -0.58834,-3.769 0.025,-0.394 m -30.22321,154.018 1.9148,-3.006 -2.09131,-1.077 -0.91461,-0.474 -0.98236,1.599 m -44.28293,-10.214 1.88806,11.789 2.87756,-3.454 3.26978,-3.945 1.89697,0.426 2.88469,-3.971 2.12161,0.844 3.35001,-0.184 1.83993,-3.15 0.93244,0.185 0.20859,-0.03 0.62044,-1.143 0.45642,-0.722 0.12123,-0.137 0.10519,-0.04 0.59548,0.02 0.64896,0.07 0.64362,0.241 0.80229,0.581 0.29596,0.328 3.97223,2.193 2.60477,3.576 0.68998,-0.08 4.2664,1.496 -0.70601,1.116 -0.0731,0.193 -0.007,0.105 -0.0428,0.289 -0.0214,0.208 0.005,0.02 0.12302,0.392 0.11232,0.136 0.11232,0.08 1.13926,0.765 0.0339,0.01 0.63292,0.04 0.86113,-0.04 0.83616,-0.09 4.1844,2.096 0.66857,0.546 0.80408,0.353 0.47246,0.918 0.12837,1.141 0.009,0.102 -0.43324,2.004 -0.4582,1.774 m -95.31935,21.351 1.57605,0.05 2.83833,-1.123 0.17651,-0.114 0.0945,-0.121 0.0499,-0.136 0.0321,-0.153 0.0321,-0.168 0.0802,-1.647 0.007,-0.05 0.007,-1.006 1.166,-0.386 0.33696,-0.07 0.10519,-0.02 0.0392,-0.04 0.0998,-0.08 0.0446,-0.05 0.0731,-0.12 0.0232,-0.112 0.009,-0.135 0.009,-0.08 0,-0.03 -0.025,-0.16 -0.45998,-1.874 0.22643,-3.721 0.40293,-2.202 0.0553,-0.321 0.82012,-1.388 0.30488,-0.161 0.28169,0.01 1.30149,0.71 0.34766,0.431 0.44037,0.66 0.0642,0.178 0,1.206 0.58656,-0.154 1.8631,-1.326 0.0428,-0.193 -0.42789,-1.85 -0.19255,-0.225 -0.40293,-0.269 -0.19968,-0.146 -0.19255,-0.252 -0.0874,-0.314 0,-0.199 1.09111,-0.475 -0.32804,-1.927 0.312,-0.69 0.41006,-0.902 2.29812,-2.926 1.11786,-1.365 0.18363,-0.159 0.16046,-0.05 0.20147,0.02 0.45106,0.25 0.12837,0.137 0.77555,0.956 3.53186,-3.029 1.54932,-2.42 1.40668,-1.784 1.58319,-2.924 -0.19255,-3.094 0.7078,-4.323 0.0464,-2.926 0.18542,-0.722 0.40115,-4.933 -1.56536,-4.165 2.33912,-1.702 m -76.49225,-13.91 0.47425,3.81 0.28882,2.394 0.43324,3.56 0.0499,0.425 0.72384,6.06 0.1872,1.535 0.542,4.468 0.42075,3.583 0.56874,5.056 0.11945,0.977 0.70958,7.032 0.2086,2.034 0.48851,4.386 0.41897,3.666 0.12124,1.043 0.51346,4.999 0.52951,4.598 m -54.00669,35.885 -0.90748,-2.034 0.86112,-0.03 0.0303,0 0.0392,-0.03 0.0107,-0.02 0.0481,-0.1 0.25673,-5.325 0.10341,-2.411 0.025,-0.112 3.46233,-4.598 1.27832,-3.68 0.34588,-0.941 1.40668,-1.799 0.14263,-0.12 0.17651,-0.322 0.25138,-1.462 0.007,-0.562 -0.68462,-1.471 -0.0392,-0.06 -0.0731,0 -0.14441,-1.146 0.10519,-0.145 0.12836,-0.363 0.0481,-0.733 -1.27653,-2.281 -0.83617,-0.982 -0.36192,-1.235 0.23355,-2.395 0.82012,-5.143 -0.27456,-3.005 -0.58656,-6.363 -0.51347,-6.115 -0.59369,-7.604 -0.0267,-0.328 -0.50455,-5.666 -0.56339,-6.308 -0.32983,-3.592 -0.27278,-3.045 -0.33874,-3.96 -0.46355,-5.498 m -64.89646,35.334 -1.13926,-0.08 -0.72563,-0.586 -1.75077,-2.154 -0.0642,-0.16 0.0571,-0.467 -0.041,-0.152 -1.37459,-1.038 -0.36193,-0.226 -3.93657,0.01 -4.09882,0.288 -2.956,0.193 -4.97421,0.337 -1.32645,0.07 -6.63763,0.348 -4.80483,0.223 -3.17351,0.09 -3.76899,0.155 -4.18618,0.177 -3.76007,0.117 -4.14695,0.1 -2.78663,0.03 -4.91181,-0.02 -4.99738,-0.03 -2.97383,-0.02 -6.79808,-0.07 m 84.66314,-140.558 1.81497,0.988 3.23056,3.97 1.47799,0.312 1.62242,0.337 11.52447,2.364 0.86647,0.177 0.67749,0.144 1.0929,0.369 1.13212,0.555 0.97345,0.474 4.08099,1.045 0.32983,0.586 2.81159,-0.298 4.67647,0.587 0.0356,0 0.39937,0.06 0.61152,0.296 0.37797,0.252 0.24782,0.158 0.47246,0.676 0.0499,0.07 0.0232,0.08 -0.22465,0.385 -0.25673,0.362 -0.11232,0.09 -0.28169,0.36 -0.009,0.02 -0.0232,0.08 0.1034,0.201 0.0161,0 0.6133,0.498 0.1355,0.03 0.21751,0.06 0.016,0 0.21751,-0.03 3.79929,1.021 0.30488,0.248 0.025,0.02 0.041,0.04 0.48138,0.594 0.16045,4.147 1.42273,6.839 0.009,0.02 0.14263,0.472 0.0731,0.122 1.2694,1.342 0.0161,0 0.41719,0.07 0.73097,0.115 m -495.02988,256.913 2.01821,0.151 2.66718,-1.654 0.83438,-1.173 0.16937,-0.596 0.18542,-1.512 -0.57052,-1.331 -0.0553,-0.06 -0.0571,-0.07 -1.67233,-0.28 -0.312,-0.137 -0.88609,-0.62 -0.40115,-1.068 -0.0143,-0.04 1.13212,-6.975 1.92729,-0.476 2.31416,-2.731 0.74881,-2.603 0.54555,-2.725 0.10519,-0.747 0.49029,-1.759 0.53843,-0.933 1.7276,-2.442 2.36943,-0.908 1.6242,-0.667 2.41044,-1.39 0.10519,-1.029 -0.8843,-1.546 -1.02159,-1.137 -1.17313,-1.407 -1.18739,-4.999 -0.0642,-0.925 -1.27832,-2.008 -1.01267,-2.635 -0.0161,-0.121 0.0321,-0.321 0.57765,-2.557 -2.51385,-3.742 -6.81591,-10.198 -0.47246,-0.701 -1.27119,-1.895 -3.68697,-5.537 -3.61566,-5.383 -0.2086,-0.307 -2.63687,-3.952 -0.6347,-0.949 -4.91715,-7.384 -6.06711,-9.08 -1.14995,-1.744 -1.96829,-2.926 -0.34409,-0.513 -9.2424,-13.876 -8.18872,-12.224 -9.81827,-14.771 -2.30703,-3.435 -3.43024,-5.135 -4.23432,-6.351 -0.90926,-3.446 0.24247,-1.013 0.28882,-1.198 0.85935,-3.382 0.77911,-2.884 1.64024,-6.212 0.35301,-1.31 1.73473,-6.508 1.13391,-4.3 0.32983,-1.294 1.03585,-4.008 2.06456,-8.221 1.83279,-7.135 4.70143,-18.161 -4.74244,-1.198 -0.65074,-0.167 -6.04928,-1.608 -3.05406,-0.82 -9.304795,-2.603 -13.733447,-4.09 -0.916396,-0.282 -0.52238,-0.169 -2.016426,-0.546 -2.208976,-0.547 -5.569686,-1.575 -0.426106,-0.121 -0.722062,-0.216 -1.752561,-0.636 -1.228398,-0.255 -4.749565,-1.326 -4.974207,-1.375 -6.332754,-1.993 M 218.36384,26.509143 l -2.37122,11.097 -1.37459,6.388 -1.11608,5.311 0.47425,0.843 3.09328,6.301 0.0232,0.08 0.025,0.06 0.007,0.03 0,0.09 -0.007,1.287 -0.52238,1.325 -0.44215,1.005 -0.29774,1.865 0.0161,0.569 2.46036,3.4 0.33696,0.288 0.26565,0.234 0.8433,0.41 1.22126,0.489 0.26565,0.194 1.39777,3.148 1.30863,3.054 0.73989,1.382 0.40114,0.74 0.30666,2.323 0,0.01 0.0713,0.195 2.31595,3.093 0.22464,0.06 0.10341,0.03 0.68997,0 0.8843,2.19 1.7276,0.372 0.36192,-0.1 0.24961,-0.1 0.41006,-0.08 0.82725,0.112 0.28169,0.233 0.0731,0.07 0.0874,0.09 0.0571,0.266 -0.0963,0.506 -0.55626,1.574 -0.93957,2.163 -1.40669,3.125 -4.48391,11.185997 -0.56161,3.077 -0.28169,1.558 -0.0161,0.08 0.0481,0.06 0.7078,0.1 0.6347,0.16 0.20147,0.09 1.18026,1.864 0.14441,0.571 0.65966,0.103 3.15033,-1.446 1.98434,-1.736 1.41381,-0.811 0.32983,0.346 1.55823,2.201 0.0891,0.289 0.18364,1.824 -0.0143,0.683 -0.2086,0.378 -0.041,1.366 0.0232,1.8 2.51563,9.353 2.66718,3.712 0.54734,-0.135 0.57052,0.449 0.68283,0.763 0.30666,0.474 0.35122,1.102 0.46712,2.001 0,0.176 -0.0963,0.177 -0.0642,0.05 -0.0232,2.868 0.19077,1.086 0.44393,0.642 1.30863,1.464 0.41719,0.151 0.32983,-0.184 0.16046,-0.249 0.009,-0.06 0.19255,-0.86 0.23356,-0.361 0.6347,-0.674 1.08399,-0.257 5.74619,1.43 2.44253,-0.917 4.475,0.459 3.23948,0.923 2.08952,0.06 2.77949,-3.191 1.83101,-0.69 0.77198,0.763 1.31933,2.587 0.71493,2.064 0.18542,0.548 1.30862,1.214 m 116.92596,-19.792 -0.10519,1.453 -1.23731,15.326 -0.69888,4.917 -0.80408,9.788 -0.73989,8.968 -0.0784,0.898 -0.57051,6.606 -0.67571,8.06 -0.0481,0.58 -0.90748,10.982 9.1586,0.749 8.42941,0.651 3.48729,0.265 11.87748,0.817 3.46234,0.226 4.17904,0.321 6.66081,0.346 5.37713,0.282 6.07424,0.281 3.26265,0.154 1.19809,0.06 1.33359,0.07 11.12867,0.467 4.68538,0.168 12.67086,0.371 3.10398,2.784 2.36052,1.07 1.83279,1.582 0.36192,0.16 0.29774,0.05 0.27991,-0.01 0.85221,-0.129 0.22464,-0.139 0.47425,-0.431 0.353,-0.506 1.93798,-0.715 1.46909,0.19 3.39102,-0.222 1.04476,-0.138 1.5921,0.06 1.19631,0.145 1.94511,1.656 2.08061,0.596 3.52117,1.315 1.37281,0.869 0.18541,0.419 0.0963,0.385 -0.0642,0.271 -0.009,0.21 0.0499,0.209 1.20522,1.792 3.24661,0.829 -0.60439,-1.666 -0.60975,-1.606 -0.43502,-0.699 -0.55447,-0.515 -0.44037,-0.337 0.67393,-3.084 0.6757,-1.801 1.16422,-4.019 0.26565,-0.708 0.0481,-0.158 -0.64361,-2.314 -0.15868,-0.08 -1.19809,0 -0.37083,-0.836 -0.28705,-5.552 2.42471,0.02 m -11.28913,-126.190997 -0.0731,0.07 -0.0713,0.337 -0.0178,0.339 0.0892,0.481 1.10894,3.623 0.29774,0.884 0.67571,1.535 -1.02961,3.178 0.45731,0.495 0.0981,5.48 -0.50634,1.953 -0.009,0.467 0.36192,1.453 1.49583,5.391 2.02355,4.621 0.53843,3.962 0.2817,5.978 0.0802,1.992997 0.0232,2.908 0.66679,2.186 0.19434,0.531 -0.30666,4.998 0.009,1.29 0.68284,1.988 2.20897,5.32 0.61153,4.821 0.0481,0.403 -0.0321,0.465 -0.0392,0.145 -0.29774,0.836 0.21751,1.993 -0.0891,1.004 0,0.05 -0.009,0.03 -0.0713,0.61 -0.0571,0.497 -0.0392,0.209 -0.016,0.114 -0.016,0.05 -0.016,0.03 -0.025,0.06 -1.12499,1.671 -0.32805,0.33 -0.61866,0.337 -0.55625,0.362 -1.46909,1.18 -0.025,0.03 -0.0321,0.04 -0.025,0.02 -0.0553,0.128 -0.22464,0.771 0.0642,0.09 0.28883,0.369 1.12499,1.503 2.3623,2.619 1.5511,0.756 0.52951,0.426 0.30665,0.706 0.26565,1.326 -0.0178,6.702 -0.0321,7.98 -0.0143,2.017 -0.0499,7.987 -0.0481,8.003 -0.0321,8.06 6.6608,0.02 3.19134,0 6.7749,-0.04 1.10895,0 7.86602,-0.07 1.01267,-0.02 6.84622,-0.1 3.25552,-0.05 4.60337,-0.07 5.35931,-0.121 2.52454,-0.06 7.45596,-0.215 0.41006,-0.02 7.84285,-0.28 1.73651,-0.06 6.12951,-0.25 5.81929,-0.248 1.98433,-0.09 6.53957,-0.314 m -434.36951,-2.74 8.50963,-37.886 1.77574,-4.307 0.48138,-0.804 0.78089,-1.478 0.62579,-2.555 0.81299,-0.997 0.0232,-0.04 0.0232,-0.05 0.0321,-0.06 0.009,0 0,-0.02 0.0232,-0.234 -0.0553,-0.176 -0.0161,-0.03 -0.85221,-1.686 -0.16759,-0.105 -0.63648,-0.225 -0.0874,0 -0.15333,0.07 -2.00038,-0.811 -0.24069,-0.408 -0.0321,-0.33 0.0232,-0.194 0.041,-0.122 0.55448,-3.783 0.20146,-0.403 3.55861,-4.892 0.37797,-0.339 0.11232,-0.05 0.39401,-0.09 1.53505,-0.523 0.87539,-0.941 0.48316,-0.513 0.37619,-0.403 0.53842,-0.931 0.016,-0.02 -0.0232,-0.185 -0.0963,-0.225 -0.0571,-0.225 -0.016,-0.465 0.40114,-0.836 0.50812,-0.467 0.77912,-0.706 2.40152,-3.914 0.54556,-1.15 2.78128,-3.567 1.54218,-1.576 0.38688,-0.441 0.0642,-0.29 -0.55448,-2.907997 -0.10519,-0.442 0,0 -0.312,-0.396 -0.27456,-0.353 -0.007,0 -0.58657,-0.257 -1.39955,-1.287 -0.73098,-0.674 -0.0481,-0.09 -0.0713,-0.136 -1.13212,-3.528 -8.81629,-2.057 -1.92015,-0.466 -5.84247,-1.406 -0.29595,-0.07 -15.44501,-3.703 -0.45106,0.378 -0.3441,0.151 -1.17312,0.339 -0.57052,0.09 -0.69889,-0.05 -0.41006,-0.103 -0.44215,-0.227 -2.41044,-0.33 -0.90926,-0.05 -0.90748,-0.06 -3.11824,0.385 -1.67055,-0.159 -1.53505,-0.16 -2.19828,0 -2.42292,0.296 -0.51347,0.128 -0.83617,0.635 -3.16637,-0.193 -1.25336,-0.217 -0.32805,-0.216 -0.19433,-0.281 -0.41719,-0.787 -0.44929,-0.315 -0.68462,-0.168 -0.33696,0.112 -0.69175,0.33 -1.71869,0.241 -1.41382,0.217 -0.83616,0.257 -0.34588,-0.458 -5.83355,-2.731 -0.55447,-0.113 -1.10003,-0.162 -1.09468,-0.948 -1.72582,-0.03 -1.32646,-0.104 -0.43502,-0.105 -1.10716,-0.61 -0.94849,0.06 -0.68284,0.353 -0.45106,0.403 -5.70519,0.796 -0.29774,0 -0.45641,-0.122 -0.52416,-0.256 -4.458962,-2.748 -0.426106,-0.322 -0.818337,-0.86 -0.313785,-0.401 -0.01605,-0.563 0.153327,-0.418 0.344094,-0.579 0.418974,-2.804 0.119452,-0.378 0.144413,-2.186 -0.449283,-2.505 -0.153327,-0.605 -2.594076,-3.18 -0.755937,-0.314 -0.82012,0.152 -2.481755,-0.104 -0.121235,-0.04 -0.673925,-1.052 0.351225,-1.028 -0.167589,-0.539 -0.233556,-0.417 -0.06418,-0.105 -0.04814,-0.03 -0.08914,-0.06 -1.035847,-0.06 m 459.247685,277.218997 -7.10296,0.06 -1.19809,0 -6.09741,0.06 -2.09131,0 -4.82088,0.03 -3.89557,0 -9.57223,-0.03 -4.0899,-0.02 -7.24737,-0.07 -5.73727,-0.07 -6.19548,-0.107 -5.64991,-0.105 -4.28245,-0.09 -3.60675,-0.114 -8.30817,-0.257 -8.29392,-0.282 -1.55109,-0.06 -8.40623,-0.385 -1.58141,-0.07 -9.90741,-0.408 -5.682,-0.241 -2.20898,-0.112 -8.89652,-0.443 -8.60591,-0.474 -0.25674,-0.02 m 260.83387,150.417 -1.0198,-8.363 -0.73811,-5.996 -0.34053,-2.655 -0.93065,-7.341 -0.76485,-5.994 -0.46533,-4.508 0.13015,-7.707 0.0464,-1.879 0.13728,-6.245 0.1355,-8.132 0.0267,-1.439 0.1355,-6.896 0.10519,-5.703 0.10162,-4.894 0.18542,-7.28 0.0178,-0.658 0.11945,-5.452 0.0731,-3.298 0.0642,-2.756 0.19255,-7.226 -2.10735,-2.225 m -53.05821,49.651 -1.89519,0.07 -3.2787,0.134 -0.47424,0.03 -11.67601,0.474 -12.59241,0.339 -5.06157,0.1 -4.79592,0.13 -4.83693,0.128 -0.58835,0 -5.44666,0.121 -0.18542,0 -4.38586,0.1 m -168.6274,-282.273 -15.9032,-1.503 -0.82726,-0.08 -12.28575,-1.23 -1.15709,-0.06 -1.72938,-0.08 -3.86348,-0.417 -10.10887,-1.182 -3.10219,-0.378 -0.85935,-0.177 -7.65921,-0.939 -4.89219,-0.61 -5.47163,-0.667 -6.00292,-0.813 -4.99026,-0.659 -2.13053,-0.289 -0.32804,-0.05 -2.98988,-0.547 -8.54173,-1.157 -3.66379,-0.57 -1.35142,-0.211 -1.81496,-0.09 -5.34326,-0.724 -0.041,0 -2.41935,-0.378 -0.70602,-0.243 -2.00038,-0.408 -2.70818,-0.419 -1.39777,7.595 -0.59548,4.388 -1.7686,11.168 -1.71156,11.002 -0.65788,4.218 -1.06972,6.75 -1.88628,11.557 -1.87379,11.679 -1.53505,9.644 -1.19631,7.499 -0.93244,5.801 9.29588,1.535 7.73053,1.109 0.8112,0.121 0.0178,0 2.46571,0.353 2.3944,0.337 0.66857,0.1 8.01757,1.07 2.69391,0.392 13.66748,1.84 5.68914,0.685 10.29251,1.243 7.89277,0.929 9.18356,1.114 2.23393,0.265 15.68569,1.607 5.73015,0.554 15.30772,1.296 8.22794,0.674 3.30188,0.255 12.5514,0.918 0.55626,0.03 9.80222,0.656 -0.36192,5.842 -0.0802,1.207 -0.3851,5.955 -0.13728,2.097 -0.50634,8.001 11.18573,0.694 1.519,0.08 9.88245,0.529 0.34766,0.03 9.52944,0.457 0.27278,0.02 9.63017,0.385 7.84017,0.281 1.95937,0.06 5.95479,0.185 3.88131,0.105 4.03285,0.09 5.98688,0.144 1.92906,0.04 7.91416,0.127 7.93199,0.105 1.9362,0.02 5.97974,0.05 3.92766,0.02 3.99363,0 3.89736,0 7.84284,-0.03 0.55447,0 m -344.9568,-175.159997 -0.0981,-1.59 0.76485,-2.108 -0.0981,-1.975 -0.15333,-1.27 -0.0232,-0.08 -0.50455,-2.034 0.33696,-1.004 0.58657,-2.596 2.93995,-13.08 0.66857,-2.942 0.53665,-2.386 3.02909,-13.621 0.34588,-1.517 4.13091,-17.759 0.77911,-3.384 m 544.86823,306.701997 3.70302,-1.986 1.84706,-0.988 3.81712,-2.161 3.64062,-3.006 0.37797,-0.661 0.0731,-1.742 4.75669,-5.866 0.20147,-0.137 0.70601,-0.506 2.71532,-1.532 0.6757,-0.872 5.28086,-6.347 m 165.78551,-165.234 -2.2482,-0.901 -0.624,-2.506 -0.0499,-0.06 -1.94333,-1.159 -0.80586,-0.401 -0.29595,-0.153 -0.46712,-0.649 -0.15154,-0.323 -0.12302,-0.513 -0.27991,-3.135 -2.02534,-5.279 -3.28404,-10.872 -3.01484,-9.586 -0.24068,-0.772 -3.39994,-10.252997 -0.61865,-1.767 m -4.83693,8.235 -0.38688,0.795 -0.0232,5.642997 0.1355,0.383 0.60439,0.596 0.73811,0.907 0.40293,0.499 0.0713,0.114 0.41719,0.674 -0.21572,2.001 -0.18542,0.515 0,0 -0.0802,0.137 -0.79516,1.398 -0.066,0.103 -0.0945,0.138 -0.22464,0.29 -0.041,0.06 -0.51525,0.378 -0.34409,-0.03 -1.07685,1.397 -1.12499,0.708 -1.11252,0.692 -0.0838,0.08 -0.0499,0.04 -0.53843,0.972 -0.0553,0.234 0,0.144 0.52773,1.84 0.29953,0.403 0.27277,0.217 -0.44215,9.273 -1.0198,4.331 -0.61865,2.057 0.79694,3.664 0.34409,0.9 -0.0731,2.01 0.0642,1.695 0.54021,0.843 0.0357,0.138 0.43859,2.458 -1.04654,3.584 0.0731,0.232 0.47603,1.021 1.83814,1.478 m -13.13797,19.375 1.57427,8.743 0.54556,3.182 0.62757,3.68 0.2817,1.622 -0.54556,3.712 -0.10697,0.106 -1.25158,1.278 1.79713,2.312 m -356.71304,148.89 9.92523,-0.159 3.86526,-0.08 5.17568,-0.129 4.94033,-0.121 0.35479,0 8.09779,-0.241 1.50475,-0.05 4.45895,-0.153 6.94963,-0.287 0.54734,-0.03 8.21903,-0.369 4.07743,-0.146 0.78624,-0.02 5.14358,-0.272 6.26501,-0.355 3.8189,-0.207 6.51639,-0.371 0.49029,-0.03 0.72385,-0.02 1.63846,2.314 0.17828,0.239 0.11945,1.826 -0.19433,0.529 -0.12836,0.202 -2.0093,1.766 -2.84011,4.943 1.4673,-0.1 6.07424,-0.433 4.17013,-0.314 m 40.68509,-137.176 5.10971,-0.49 5.06335,-0.522 2.77236,-0.296 4.60337,-0.467 2.23394,-0.239 6.23648,-0.717 1.62241,-0.175 6.30066,-0.739 0.49742,1.428 6.87118,-1.052 0.64897,-0.104 8.10136,-1.326 1.9772,-0.346 5.21311,-0.884 m 4.4447,156.935 3.57822,-0.419 2.30346,-0.289 1.28011,-0.167 7.17248,-1.045 1.21592,-0.194 6.93358,-1.092 m -119.84266,-22.533 -1.24445,0.123 m -374.5774,105.874 3.49621,-24.959 1.11607,-8.021 1.36568,-9.857 1.80961,-13.026 2.54594,-18.337 1.20522,-8.718 3.30366,-23.908 3.17351,-22.867 0,0 1.57427,-11.154 1.27654,-9.094 0.86112,-6.237 0.78803,-8.01 0.69889,-5.048 0.69175,-4.227 0.12837,-0.884 0.60974,-4.172 0.77198,-5.552 0.41898,-3.004 0.51346,-3.737 3.19847,-22.789 1.07685,-7.964 m 576.87253,7.451 -5.9637,1.277 -1.67946,0.363 -0.11233,0.02 -5.66596,1.188 -3.74224,0.779 -3.65845,0.763 -3.73868,0.756 -4.17548,0.827 -0.16759,0.03 -10.87372,2.058 -4.20936,0.795 -0.65253,0.121 -7.39178,1.364 -2.11805,0.387 -7.96586,1.455 -1.46374,0.263 -4.97599,0.878 -2.63329,0.449 -8.75033,1.462 -1.70264,0.274 -0.90035,-5.512 -0.20146,-1.23 -0.53487,-3.277 -0.88786,-5.474 -0.30488,-1.792 -0.60974,-3.688 -0.79516,-4.857 -0.20324,-1.105 -0.82904,-5.151 -0.0303,-0.185 -1.34072,-8.123 -0.0428,-0.25 -1.30863,-7.987 -0.47781,-2.917 m 144.94019,-31.435 1.80962,6.307 0.4992,1.897 0.25495,0.965 0.43502,6.452 m -665.13527,16.438 -7.73766,-1.205 -10.116,-1.637 -0.91818,-0.146 -1.2284,-0.317 -0.009,0 -3.55148,-0.614 -4.33059,-0.748 -4.89398,-0.828 -6.7339,-1.139 -0.49029,-0.08 -5.58395,-0.95 -0.53129,-0.09 -1.42986,-0.249 -0.19968,-0.04 -1.3425,-0.32 -1.11786,-0.282 0,0 -4.34664,22.589 -3.92945,20.07 -0.93244,4.799 -1.59923,8.26 -3.82426,19.694 -0.46711,2.38 -1.84705,9.658 -2.42649,12.367 -2.6119,13.757 -0.69176,3.584 -0.72206,3.786 -0.0891,0.462 -0.73098,4.172 -0.44215,2.316 -0.77912,4.042 -2.33021,3.148 -0.2496,0.282 -0.0321,0.02 -0.0642,0.04 -0.016,0 -1.11608,-0.02 -0.36192,-0.04 -0.0963,-0.02 -0.23356,-0.178 -0.16046,-0.168 -0.4261,-0.676 -0.12837,-0.385 -0.0161,-0.192 -0.009,-0.05 -0.0321,-0.176 -0.22464,-0.563 -0.54556,-0.772 -0.2496,-0.234 -2.33913,-0.69 -1.05902,-0.217 -1.12678,0 -2.05743,0.483 -0.18363,0.1 -0.24961,0.225 -0.016,0.146 -0.23356,2.25 -0.49742,6.588 -0.22464,4.027 0.24069,2.844 0.16759,1.348 0.025,0.675 -0.12837,2.805 -0.0232,0.513 -0.0981,0.458 -0.16758,0.548 -1.72047,2.875 m 211.66588,-156.869 -0.75594,8.959 -1.18917,14.054 -0.60261,7.002 -0.25852,3.082 -0.32805,3.948 -0.77911,9.033 m 182.04528,266.803 -0.17828,-5.125 2.29098,-3.194 0.0143,-4.441 -0.59727,-3.621 0.76842,-0.647 0.0802,-0.2 0.007,-0.119 -0.27991,-1.433 -0.55447,-0.669 -0.0571,-0.06 0,0 0.22464,-0.804 2.8205,-5.311 0.35479,-1.542 -0.0731,-7.288 -0.91461,0.24 -0.20325,-1.189 -0.1355,-0.754 -0.58656,-2.557 -1.8007,-2.612 -2.1127,-2.219 -0.98058,-5.919 -2.74027,-3.062 -0.62579,-4.967 -0.0981,-4.523 -0.15155,-6.935 -0.0802,-4.34 -0.0713,-3.189 -0.12124,-5.811 -0.13728,-6.493 -0.4582,-0.378 -0.353,-0.144 -1.84884,-0.371 -1.06972,0.155 -0.27991,0.03 -0.0963,0.09 -1.84883,0.938 -1.02872,-0.561 -0.27991,-0.184 -0.7809,-0.499 -0.12658,-0.17 -0.1462,-0.335 -0.15154,-0.394 -4.97421,-1.431 -2.3623,-0.965 -3.26265,-2.612 -2.22681,-1.904 -1.20522,-0.403 -0.13549,0 -0.0642,0.03 -0.016,0 -0.0107,0 -0.40828,0.619 -0.009,0.03 0,0.04 -0.007,0.02 0.007,0.02 0.0731,0.154 0,0.03 0.0321,0.2 -0.0321,0.232 -0.10341,0.233 -0.10697,0.104 -0.50634,0.33 -0.14976,0.02 -0.28169,0.03 -0.55448,0.07 -0.009,0 -1.28723,0.06 -0.71315,-0.06 -1.88093,-0.25 -0.0713,-0.06 -0.0749,-0.128 0,-0.02 -0.005,-0.118 0.0571,-0.162 0.005,-0.153 -0.20147,-0.514 -0.14441,-0.06 -0.61687,-0.03 -1.39064,0.722 -1.59567,0.833 -1.63489,0.615 -0.92353,-0.17 -1.10003,-0.217 -0.25851,0.03 -0.41006,0.03 -2.13766,0.178 -0.96454,0.223 -0.16046,0.563 -0.11945,0.555 -0.009,0.06 -0.016,0.06 -0.0553,0.177 -0.0481,0.153 -0.009,0.02 -0.0232,0.03 -0.17828,0.186 -0.0232,0.03 -0.34588,0.148 -0.39401,0.105 -2.83655,0.701 -0.18363,-0.251 -0.82725,-1.125 0,0 -0.24961,-0.08 -0.22464,-0.02 -0.97344,0.185 -0.025,0 -0.17651,-0.121 -1.95224,-1.311 -0.0161,-0.06 -0.016,-0.111 -0.016,-0.283 0.0642,-0.369 -1.9041,0.859 -0.0161,0 -0.92352,0.155 -1.79357,-0.549 -0.19255,-0.133 -0.312,-0.35 -0.96454,-1.982 0,0 -0.18541,0.103 -2.85973,4.96 -0.0891,0.119 -0.19255,0.154 -0.27278,0.09 -0.30487,-0.04 -0.26565,-0.09 -5.53759,-2.42 -0.16759,-0.112 -0.11232,-0.135 0,0 -0.0161,-0.04 -0.0499,-0.12 -0.37618,-1.718 0,0 -1.46374,0.394 -0.68284,-0.477 -1.9362,-1.292 -0.65074,0.82 -0.99663,1.036 -0.94849,0.747 -0.59369,0.176 -0.22643,-0.02 -1.67768,-0.765 -0.21037,-0.194 0.49028,-1.061 0.16225,-1.237 -0.7078,-0.28 -0.65967,0.16 -0.0232,0 -0.41006,0 -0.80408,-0.24 -0.0321,0 -0.0481,-0.05 -0.32983,-0.659 -1.14817,-1.888 -2.94173,-0.924 -0.72385,-0.162 -0.36905,0.209 -0.76307,0.964 -1.01267,0.909 -0.016,0.02 -0.007,0 -0.54021,-0.194 -0.89856,-1.446 -0.43324,-0.369 -0.41897,-0.276 -0.19255,-0.01 -1.72047,0.53 -1.23731,-0.05 -1.74365,-0.427 -1.75078,-1.046 -0.29061,-0.134 -1.74364,-0.137 -0.76307,0.01 -0.35301,0.02 -0.7078,-0.16 -0.3851,-0.12 -0.24069,-0.07 -0.009,-0.01 0,0 -0.32805,-1.783 0.0161,-0.499 0.0232,-0.531 0,-0.02 -0.89143,-1.551 -0.94136,-0.507 -0.82725,-0.449 -0.8112,1.453 -0.007,0.02 -0.025,0.04 -0.016,0 -0.14441,0.06 -0.63471,-0.06 -0.61865,-0.587 -0.46711,-0.272 -0.28883,-0.122 -0.90035,-0.105 -0.20859,-0.03 -0.10341,0.04 -0.73276,0.925 -0.73098,0 -0.16046,0 -0.57943,-0.137 -1.31754,-1.253 -0.47424,-0.562 -0.98058,-1.271 -2.75453,-1.373 0.12836,-4.275 0.27278,-6.565 0.15333,-3.519 0.23177,-5.547 0.19433,-4.546 0.24782,-6.06 0.16938,-4.04 0.37796,-10.278 -9.94841,-0.444 -7.48092,-0.376 -2.40331,-0.12 -9.86819,-0.563 -7.47914,-0.473 -2.38726,-0.155 -15.3719,-1.068 m 119.35244,-213.439 -10.68117,-0.106 -12.04507,-0.217 -0.47424,-0.02 -11.49773,-0.344 -4.50888,-0.161 -11.43355,-0.435 -2.60299,-0.119 -9.92523,-0.483 -0.19968,0 -3.64776,-0.186 -0.36192,-0.02 -0.13015,0 -1.92728,-0.1 -1.45482,-0.08 -4.66042,-0.257 -1.63846,-0.09 -0.93244,-0.06 -2.0093,-0.113 -2.42827,-0.153 -2.30525,-0.136 -1.93619,-0.121 -0.25852,-0.02 -0.15868,-0.02 -15.09199,-1.045 -0.85934,-0.06 -16.80177,-1.334 0.64183,-7.657 0.51525,-5.955 0.19255,-2.3 1.33359,-15.699997 0.13728,-1.535 1.16422,-13.612 0.71493,-8.936 0.45819,-5.544 0.69176,-8.292"
+ class="State_Lines"
+ id="#State_borders" />
+ <path
+ d="m 275.14573,525.53314 0,63.053 41.27121,37.326 m -315.2580745,-178.336 197.1765345,0 76.81033,77.957 98.59237,0 60.76042,61.907 0,38.472"
+ class="separator"
+ id="#separator" />
+</svg>
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/sample_wikipedia.html b/vendor/github.com/tdewolff/minify/benchmarks/sample_wikipedia.html
new file mode 100644
index 0000000..b396675
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/sample_wikipedia.html
@@ -0,0 +1,3283 @@
+
+<!DOCTYPE html>
+<html lang="en" dir="ltr" class="client-nojs">
+<head>
+<meta charset="UTF-8" />
+<title>President of the United States - Wikipedia, the free encyclopedia</title>
+<meta name="generator" content="MediaWiki 1.25wmf8" />
+<link rel="alternate" href="android-app://org.wikipedia/http/en.m.wikipedia.org/wiki/President_of_the_United_States" />
+<link rel="apple-touch-icon" href="//bits.wikimedia.org/apple-touch/wikipedia.png" />
+<link rel="shortcut icon" href="//bits.wikimedia.org/favicon/wikipedia.ico" />
+<link rel="search" type="application/opensearchdescription+xml" href="/w/opensearch_desc.php" title="Wikipedia (en)" />
+<link rel="EditURI" type="application/rsd+xml" href="//en.wikipedia.org/w/api.php?action=rsd" />
+<link rel="alternate" hreflang="x-default" href="/wiki/President_of_the_United_States" />
+<link rel="copyright" href="//creativecommons.org/licenses/by-sa/3.0/" />
+<link rel="alternate" type="application/atom+xml" title="Wikipedia Atom feed" href="/w/index.php?title=Special:RecentChanges&amp;feed=atom" />
+<link rel="canonical" href="http://en.wikipedia.org/wiki/President_of_the_United_States" />
+<link rel="stylesheet" href="//bits.wikimedia.org/en.wikipedia.org/load.php?debug=false&amp;lang=en&amp;modules=ext.categoryTree.css%7Cext.gadget.DRN-wizard%2CReferenceTooltips%2Ccharinsert%2Cfeatured-articles-links%2CrefToolbar%2Cteahouse%7Cext.rtlcite%2Cwikihiero%2CwikimediaBadges%7Cext.uls.nojs%7Cext.visualEditor.viewPageTarget.noscript%7Cmediawiki.legacy.commonPrint%2Cshared%7Cmediawiki.skinning.interface%7Cmediawiki.ui.button%7Cmw.PopUpMediaTransform%7Cskins.vector.styles%7Cwikibase.client.init&amp;only=styles&amp;skin=vector&amp;*" />
+<meta name="ResourceLoaderDynamicStyles" content="" />
+<link rel="stylesheet" href="//bits.wikimedia.org/en.wikipedia.org/load.php?debug=false&amp;lang=en&amp;modules=site&amp;only=styles&amp;skin=vector&amp;*" />
+<style>a:lang(ar),a:lang(kk-arab),a:lang(mzn),a:lang(ps),a:lang(ur){text-decoration:none}
+/* cache key: enwiki:resourceloader:filter:minify-css:7:3904d24a08aa08f6a68dc338f9be277e */</style>
+<script src="//bits.wikimedia.org/en.wikipedia.org/load.php?debug=false&amp;lang=en&amp;modules=startup&amp;only=scripts&amp;skin=vector&amp;*"></script>
+<script>if(window.mw){
+mw.config.set({"wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"President_of_the_United_States","wgTitle":"President of the United States","wgCurRevisionId":634766157,"wgRevisionId":634766157,"wgArticleId":24113,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Use mdy dates from November 2012","Wikipedia semi-protected pages","Wikipedia indefinitely move-protected pages","All articles with unsourced statements","Articles with unsourced statements from March 2014","Articles with hAudio microformats","Presidents of the United States","Presidency of the United States"],"wgBreakFrames":false,"wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgMonthNamesShort":["","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"wgRelevantPageName":"President_of_the_United_States","wgIsProbablyEditable":false,"wgRestrictionEdit":["autoconfirmed"],"wgRestrictionMove":["sysop"],"wgWikiEditorEnabledModules":{"toolbar":true,"dialogs":true,"hidesig":true,"preview":false,"previewDialog":false,"publish":false},"wgBetaFeaturesFeatures":[],"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgVisualEditor":{"isPageWatched":false,"pageLanguageCode":"en","pageLanguageDir":"ltr","svgMaxSize":4096,"namespacesWithSubpages":{"6":0,"8":0,"1":true,"2":true,"3":true,"4":true,"5":true,"7":true,"9":true,"10":true,"11":true,"12":true,"13":true,"14":true,"15":true,"100":true,"101":true,"102":true,"103":true,"104":true,"105":true,"106":true,"107":true,"108":true,"109":true,"110":true,"111":true,"830":true,"831":true,"447":true,"2600":false,"828":true,"829":true}},"wikilove-recipient":"","wikilove-anon":0,"wgHHVMStart":1412726400000,"wgULSAcceptLanguageList":["de-de","de","en-us","en"],"wgULSCurrentAutonym":"English","wgFlaggedRevsParams":{"tags":{"status":{"levels":1,"quality":2,"pristine":3}}},"wgStableRevisionId":null,"wgCategoryTreePageCategoryOptions":"{\"mode\":0,\"hideprefix\":20,\"showcount\":true,\"namespaces\":false}","wgNoticeProject":"wikipedia","wgWikibaseItemId":"Q11696"});
+}</script><script>if(window.mw){
+mw.loader.implement("user.options",function($,jQuery){mw.user.options.set({"ccmeonemails":0,"cols":80,"date":"default","diffonly":0,"disablemail":0,"editfont":"default","editondblclick":0,"editsectiononrightclick":0,"enotifminoredits":0,"enotifrevealaddr":0,"enotifusertalkpages":1,"enotifwatchlistpages":0,"extendwatchlist":0,"fancysig":0,"forceeditsummary":0,"gender":"unknown","hideminor":0,"hidepatrolled":0,"imagesize":2,"math":0,"minordefault":0,"newpageshidepatrolled":0,"nickname":"","norollbackdiff":0,"numberheadings":0,"previewonfirst":0,"previewontop":1,"rcdays":7,"rclimit":50,"rows":25,"showhiddencats":false,"shownumberswatching":1,"showtoolbar":1,"skin":"vector","stubthreshold":0,"thumbsize":4,"underline":2,"uselivepreview":0,"usenewrc":0,"watchcreations":1,"watchdefault":0,"watchdeletion":0,"watchlistdays":3,"watchlisthideanons":0,"watchlisthidebots":0,"watchlisthideliu":0,"watchlisthideminor":0,"watchlisthideown":0,"watchlisthidepatrolled":0,"watchmoves":0,"watchrollback":0,
+"wllimit":250,"useeditwarning":1,"prefershttps":1,"flaggedrevssimpleui":1,"flaggedrevsstable":0,"flaggedrevseditdiffs":true,"flaggedrevsviewdiffs":false,"usebetatoolbar":1,"usebetatoolbar-cgd":1,"visualeditor-enable":0,"visualeditor-betatempdisable":0,"visualeditor-enable-experimental":0,"visualeditor-enable-language":0,"visualeditor-hidebetawelcome":0,"wikilove-enabled":1,"echo-subscriptions-web-page-review":true,"echo-subscriptions-email-page-review":false,"ep_showtoplink":false,"ep_bulkdelorgs":false,"ep_bulkdelcourses":true,"ep_showdyk":true,"echo-subscriptions-web-education-program":true,"echo-subscriptions-email-education-program":false,"echo-notify-show-link":true,"echo-show-alert":true,"echo-email-frequency":0,"echo-email-format":"html","echo-subscriptions-email-system":true,"echo-subscriptions-web-system":true,"echo-subscriptions-email-user-rights":true,"echo-subscriptions-web-user-rights":true,"echo-subscriptions-email-other":false,"echo-subscriptions-web-other":true,
+"echo-subscriptions-email-edit-user-talk":false,"echo-subscriptions-web-edit-user-talk":true,"echo-subscriptions-email-reverted":false,"echo-subscriptions-web-reverted":true,"echo-subscriptions-email-article-linked":false,"echo-subscriptions-web-article-linked":false,"echo-subscriptions-email-mention":false,"echo-subscriptions-web-mention":true,"echo-subscriptions-web-edit-thank":true,"echo-subscriptions-email-edit-thank":false,"echo-subscriptions-web-flow-discussion":true,"echo-subscriptions-email-flow-discussion":false,"gettingstarted-task-toolbar-show-intro":true,"uls-preferences":"","multimediaviewer-enable":true,"language":"en","variant-gan":"gan","variant-iu":"iu","variant-kk":"kk","variant-ku":"ku","variant-shi":"shi","variant-sr":"sr","variant-tg":"tg","variant-uz":"uz","variant-zh":"zh","searchNs0":true,"searchNs1":false,"searchNs2":false,"searchNs3":false,"searchNs4":false,"searchNs5":false,"searchNs6":false,"searchNs7":false,"searchNs8":false,"searchNs9":false,"searchNs10":
+false,"searchNs11":false,"searchNs12":false,"searchNs13":false,"searchNs14":false,"searchNs15":false,"searchNs100":false,"searchNs101":false,"searchNs108":false,"searchNs109":false,"searchNs118":false,"searchNs119":false,"searchNs446":false,"searchNs447":false,"searchNs710":false,"searchNs711":false,"searchNs828":false,"searchNs829":false,"searchNs2600":false,"gadget-teahouse":1,"gadget-ReferenceTooltips":1,"gadget-geonotice":1,"gadget-DRN-wizard":1,"gadget-charinsert":1,"gadget-refToolbar":1,"gadget-mySandbox":1,"gadget-featured-articles-links":1,"variant":"en"});},{},{},{});mw.loader.implement("user.tokens",function($,jQuery){mw.user.tokens.set({"editToken":"+\\","patrolToken":"+\\","watchToken":"+\\"});},{},{},{});
+/* cache key: enwiki:resourceloader:filter:minify-js:7:1d7d25c363537d562f59445bb7aee239 */
+}</script>
+<script>if(window.mw){
+mw.loader.load(["mw.TMHGalleryHook.js","mediawiki.page.startup","mediawiki.legacy.wikibits","mediawiki.legacy.ajax","ext.centralauth.centralautologin","mmv.head","ext.visualEditor.viewPageTarget.init","ext.uls.init","ext.uls.interface","ext.centralNotice.bannerController","skins.vector.js"]);
+}</script>
+<link rel="dns-prefetch" href="//meta.wikimedia.org" />
+<!--[if lt IE 7]><style type="text/css">body{behavior:url("/w/static-1.25wmf8/skins/Vector/csshover.min.htc")}</style><![endif]-->
+</head>
+<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-President_of_the_United_States skin-vector action-view vector-animateLayout">
+ <div id="mw-page-base" class="noprint"></div>
+ <div id="mw-head-base" class="noprint"></div>
+ <div id="content" class="mw-body" role="main">
+ <a id="top"></a>
+
+ <div id="siteNotice"><!-- CentralNotice --></div>
+ <div class="mw-indicators">
+</div>
+ <h1 id="firstHeading" class="firstHeading" lang="en"><span dir="auto">President of the United States</span></h1>
+ <div id="bodyContent" class="mw-body-content">
+ <div id="siteSub">From Wikipedia, the free encyclopedia</div>
+ <div id="contentSub"></div>
+ <div id="jump-to-nav" class="mw-jump">
+ Jump to: <a href="#mw-navigation">navigation</a>, <a href="#p-search">search</a>
+ </div>
+ <div id="mw-content-text" lang="en" dir="ltr" class="mw-content-ltr"><div class="hatnote">"POTUS" redirects here. For the political talk radio channel, see <a href="/wiki/P.O.T.U.S._(Sirius_XM)" title="P.O.T.U.S. (Sirius XM)">P.O.T.U.S. (Sirius XM)</a>.</div>
+<div class="hatnote">For other uses, see <a href="/wiki/President_of_the_United_States_(disambiguation)" title="President of the United States (disambiguation)" class="mw-disambig">President of the United States (disambiguation)</a>. For a list, see <a href="/wiki/List_of_Presidents_of_the_United_States" title="List of Presidents of the United States">List of Presidents of the United States</a>.</div>
+<div class="metadata topicon nopopups" id="protected-icon" style="display:none;right:55px"><a href="/wiki/Wikipedia:Protection_policy#semi" title="This article is semi-protected."><img alt="Page semi-protected" src="//upload.wikimedia.org/wikipedia/commons/thumb/f/fc/Padlock-silver.svg/20px-Padlock-silver.svg.png" width="20" height="20" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/f/fc/Padlock-silver.svg/30px-Padlock-silver.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/fc/Padlock-silver.svg/40px-Padlock-silver.svg.png 2x" data-file-width="128" data-file-height="128" /></a></div>
+<table class="infobox" style="width:22em">
+<tr>
+<th colspan="2" style="text-align:center;font-size:125%;font-weight:bold;line-height:1.2em; font-size:135%">President of the<br />
+United States of America</th>
+</tr>
+<tr>
+<td colspan="2" style="text-align:center;padding-bottom:0.4em; border-bottom:solid 1px #ccd2d9;"><a href="/wiki/File:Seal_of_the_President_of_the_United_States.svg" class="image"><img alt="Seal of the President of the United States.svg" src="//upload.wikimedia.org/wikipedia/commons/thumb/3/36/Seal_of_the_President_of_the_United_States.svg/110px-Seal_of_the_President_of_the_United_States.svg.png" width="110" height="110" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/3/36/Seal_of_the_President_of_the_United_States.svg/165px-Seal_of_the_President_of_the_United_States.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/3/36/Seal_of_the_President_of_the_United_States.svg/220px-Seal_of_the_President_of_the_United_States.svg.png 2x" data-file-width="2424" data-file-height="2425" /></a>
+<div style="padding-top:0.2em;"><a href="/wiki/Seal_of_the_President_of_the_United_States" title="Seal of the President of the United States">Presidential Seal</a></div>
+</td>
+</tr>
+<tr>
+<td colspan="2" style="text-align:center;padding-bottom:0.4em; border-bottom:solid 1px #ccd2d9;"><a href="/wiki/File:Flag_of_the_President_of_the_United_States_of_America.svg" class="image"><img alt="Flag of the President of the United States of America.svg" src="//upload.wikimedia.org/wikipedia/commons/thumb/a/af/Flag_of_the_President_of_the_United_States_of_America.svg/120px-Flag_of_the_President_of_the_United_States_of_America.svg.png" width="120" height="83" class="thumbborder" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/a/af/Flag_of_the_President_of_the_United_States_of_America.svg/180px-Flag_of_the_President_of_the_United_States_of_America.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/a/af/Flag_of_the_President_of_the_United_States_of_America.svg/240px-Flag_of_the_President_of_the_United_States_of_America.svg.png 2x" data-file-width="942" data-file-height="651" /></a>
+<div style="padding-top:0.2em;"><a href="/wiki/Flag_of_the_President_of_the_United_States" title="Flag of the President of the United States">Presidential Standard</a></div>
+</td>
+</tr>
+<tr>
+<td colspan="2" style="text-align:center;padding:0; line-height:1.2em;">
+<div style="padding-bottom:0.4em; border-bottom:solid 1px #ccd2d9; line-height:1.4em;">
+<div style="padding-bottom:0.4em;"><a href="/wiki/File:President_Barack_Obama.jpg" class="image"><img alt="President Barack Obama.jpg" src="//upload.wikimedia.org/wikipedia/commons/thumb/8/8d/President_Barack_Obama.jpg/220px-President_Barack_Obama.jpg" width="220" height="275" class="thumbborder" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/8/8d/President_Barack_Obama.jpg/330px-President_Barack_Obama.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/8d/President_Barack_Obama.jpg/440px-President_Barack_Obama.jpg 2x" data-file-width="2687" data-file-height="3356" /></a></div>
+<b>Incumbent<br />
+<a href="/wiki/Barack_Obama" title="Barack Obama">Barack Obama</a></b><br />
+<small>since&#160;January&#160;20,&#160;2009<span style="display:none">&#160;(<span class="bday dtstart published updated">2009-01-20</span>)</span></small></div>
+</td>
+</tr>
+<tr>
+<td colspan="2" style="text-align:center;padding:0; line-height:1.2em;"><a href="/wiki/Federal_government_of_the_United_States#Executive_branch" title="Federal government of the United States">Executive branch of the U.S. Government</a><br />
+<a href="/wiki/Executive_Office_of_the_President_of_the_United_States" title="Executive Office of the President of the United States">Executive Office of the President</a></td>
+</tr>
+<tr>
+<th scope="row" style="text-align:left;padding:0; background:transparent; line-height:1.2em;"><a href="/wiki/Style_(manner_of_address)" title="Style (manner of address)">Style</a></th>
+<td style="padding:0; line-height:1.2em;"><a href="/wiki/Mr._President_(title)" title="Mr. President (title)">Mr. President</a><br />
+<small>(informal)</small><sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span>[</span>1<span>]</span></a></sup><sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span>[</span>2<span>]</span></a></sup><br />
+<a href="/wiki/The_Honourable#United_States" title="The Honourable">The Honorable</a><br />
+<small>(formal)</small><sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span>[</span>3<span>]</span></a></sup><br />
+<a href="/wiki/Excellency#United_States" title="Excellency">His Excellency</a><sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span>[</span>4<span>]</span></a></sup><sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span>[</span>5<span>]</span></a></sup><sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span>[</span>6<span>]</span></a></sup><br />
+<small>(diplomatic, outside the U.S.)</small></td>
+</tr>
+<tr>
+<th scope="row" style="text-align:left;padding:0; background:transparent; line-height:1.2em;">Member of</th>
+<td style="padding:0; line-height:1.2em;"><a href="/wiki/United_States_Cabinet" title="United States Cabinet" class="mw-redirect">Cabinet</a><br />
+<a href="/wiki/United_States_Domestic_Policy_Council" title="United States Domestic Policy Council">Domestic Policy Council</a><br />
+<a href="/wiki/United_States_National_Economic_Council" title="United States National Economic Council">National Economic Council</a><br />
+<a href="/wiki/United_States_National_Security_Council" title="United States National Security Council">National Security Council</a></td>
+</tr>
+<tr>
+<th scope="row" style="text-align:left;padding:0; background:transparent; line-height:1.2em;"><a href="/wiki/Official_residence" title="Official residence">Residence</a></th>
+<td style="padding:0; line-height:1.2em;"><a href="/wiki/The_White_House" title="The White House" class="mw-redirect">The White House</a></td>
+</tr>
+<tr>
+<th scope="row" style="text-align:left;padding:0; background:transparent; line-height:1.2em;"><a href="/wiki/Seat_(legal_entity)" title="Seat (legal entity)">Seat</a></th>
+<td style="padding:0; line-height:1.2em;"><a href="/wiki/Washington,_D.C." title="Washington, D.C.">Washington, D.C.</a></td>
+</tr>
+<tr>
+<th scope="row" style="text-align:left;padding:0; background:transparent; line-height:1.2em;">Appointer</th>
+<td style="padding:0; line-height:1.2em;"><a href="/wiki/Electoral_College_(United_States)" title="Electoral College (United States)">Electoral College</a></td>
+</tr>
+<tr>
+<th scope="row" style="text-align:left;padding:0; background:transparent; line-height:1.2em;"><a href="/wiki/Term_of_office" title="Term of office">Term length</a></th>
+<td style="padding:0; line-height:1.2em;">Four years
+<div style="padding-top:0.2em; font-size:80%;">renewable once</div>
+</td>
+</tr>
+<tr>
+<th scope="row" style="text-align:left;padding:0; background:transparent; line-height:1.2em;">Constituting instrument</th>
+<td style="padding:0; line-height:1.2em;"><a href="/wiki/United_States_Constitution" title="United States Constitution">United States Constitution</a></td>
+</tr>
+<tr>
+<th scope="row" style="text-align:left;padding:0; background:transparent; line-height:1.2em;">Formation</th>
+<td style="padding:0; line-height:1.2em;">March 4, 1789</td>
+</tr>
+<tr>
+<th scope="row" style="text-align:left;padding:0; background:transparent; line-height:1.2em;">First holder</th>
+<td style="padding:0; line-height:1.2em;"><a href="/wiki/George_Washington" title="George Washington">George Washington</a><br />
+April 30, 1789</td>
+</tr>
+<tr>
+<th scope="row" style="text-align:left;padding:0; background:transparent; line-height:1.2em;">Salary</th>
+<td style="padding:0; line-height:1.2em;">$400,000 annually <small>(2001–)</small></td>
+</tr>
+<tr>
+<th scope="row" style="text-align:left;padding:0; background:transparent; line-height:1.2em;">Website</th>
+<td style="padding:0; line-height:1.2em;"><a rel="nofollow" class="external text" href="http://www.whitehouse.gov/">The White House</a></td>
+</tr>
+</table>
+<p>The <b>President of the United States of America</b> (<b>POTUS</b>)<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span>[</span>7<span>]</span></a></sup> is the <a href="/wiki/Head_of_state" title="Head of state">head of state</a> and <a href="/wiki/Head_of_government" title="Head of government">head of government</a> of the <a href="/wiki/United_States" title="United States">United States</a>. The president leads the <a href="/wiki/Executive_(government)" title="Executive (government)">executive branch</a> of the <a href="/wiki/Federal_government_of_the_United_States" title="Federal government of the United States">federal government</a> and is the <a href="/wiki/Commander-in-chief#United_States" title="Commander-in-chief">commander-in-chief</a> of the <a href="/wiki/United_States_Armed_Forces" title="United States Armed Forces">United States Armed Forces</a>. The person in this position is the leader of the country which has the <a href="/wiki/List_of_countries_by_GDP_(nominal)#Lists" title="List of countries by GDP (nominal)">largest economy</a> and the <a href="/wiki/List_of_countries_by_military_expenditures#SIPRI_Yearbook_2013_.E2.80.93_World.27s_top_15_military_spenders" title="List of countries by military expenditures">largest military</a>, with command authority over the <a href="/wiki/List_of_states_with_nuclear_weapons#Statistics" title="List of states with nuclear weapons">largest active nuclear arsenal</a>. The president is frequently described as the most powerful person in the world.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span>[</span>8<span>]</span></a></sup><sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span>[</span>9<span>]</span></a></sup><sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span>[</span>10<span>]</span></a></sup><sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span>[</span>11<span>]</span></a></sup><sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span>[</span>12<span>]</span></a></sup></p>
+<p><a href="/wiki/Article_Two_of_the_United_States_Constitution" title="Article Two of the United States Constitution">Article II of the U.S. Constitution</a> vests the executive power of the United States in the president and charges him with the execution of federal law, alongside the responsibility of appointing federal executive, diplomatic, regulatory, and judicial officers, and concluding treaties with foreign powers with the <a href="/wiki/Advice_and_consent#United_States" title="Advice and consent">advice and consent</a> of the <a href="/wiki/United_States_Senate" title="United States Senate">Senate</a>. The president is further empowered to grant federal <a href="/wiki/Pardon" title="Pardon">pardons and reprieves</a>, and to convene and adjourn either or both houses of <a href="/wiki/United_States_Congress" title="United States Congress">Congress</a> under extraordinary circumstances.<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span>[</span>13<span>]</span></a></sup> Since the founding of the United States, the power of the president and the federal government <a href="/wiki/Imperial_Presidency" title="Imperial Presidency">have grown substantially</a>,<sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span>[</span>14<span>]</span></a></sup> and each modern president, despite possessing no formal legislative powers beyond signing or <a href="/wiki/Veto" title="Veto">vetoing</a> congressionally passed bills, is largely responsible for dictating the legislative agenda of his party and the foreign and domestic policy of the United States.<sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span>[</span>15<span>]</span></a></sup></p>
+<p>The president is <a href="/wiki/Indirect_election" title="Indirect election">indirectly elected</a> by the people through the <a href="/wiki/Electoral_College_(United_States)" title="Electoral College (United States)">Electoral College</a> to a four-year term, and is one of only two nationally elected federal officers, the other being the <a href="/wiki/Vice_President_of_the_United_States" title="Vice President of the United States">Vice President of the United States</a>.<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span>[</span>16<span>]</span></a></sup> The <a href="/wiki/Twenty-second_Amendment_to_the_United_States_Constitution" title="Twenty-second Amendment to the United States Constitution">Twenty-second Amendment</a>, adopted in 1951, prohibits anyone from ever being elected to the presidency for a third full term. It also prohibits a person from being elected to the presidency more than once if that person previously had served as president, or <a href="/wiki/Acting_President_of_the_United_States" title="Acting President of the United States">acting president</a>, for more than two years of another person's term as president. In all, <a href="/wiki/List_of_Presidents_of_the_United_States" title="List of Presidents of the United States">43 individuals</a> have served 44 presidencies (<a href="/wiki/Grover_Cleveland" title="Grover Cleveland">Cleveland</a>'s two non-consecutive terms each counted) spanning 56 full four-year terms.<sup id="cite_ref-the_presidency_17-0" class="reference"><a href="#cite_note-the_presidency-17"><span>[</span>17<span>]</span></a></sup> On January 20, 2009, <a href="/wiki/Barack_Obama" title="Barack Obama">Barack Obama</a> <a href="/wiki/First_inauguration_of_Barack_Obama" title="First inauguration of Barack Obama">became</a> the 44th and current president. On November 6, 2012, <a href="/wiki/United_States_presidential_election,_2012" title="United States presidential election, 2012">he was re-elected</a> and is currently serving the 57th term, which ends on January 20, 2017.</p>
+<p></p>
+<div id="toc" class="toc">
+<div id="toctitle">
+<h2>Contents</h2>
+</div>
+<ul>
+<li class="toclevel-1 tocsection-1"><a href="#Origin"><span class="tocnumber">1</span> <span class="toctext">Origin</span></a></li>
+<li class="toclevel-1 tocsection-2"><a href="#Powers_and_duties"><span class="tocnumber">2</span> <span class="toctext">Powers and duties</span></a>
+<ul>
+<li class="toclevel-2 tocsection-3"><a href="#Article_I_legislative_role"><span class="tocnumber">2.1</span> <span class="toctext">Article I legislative role</span></a></li>
+<li class="toclevel-2 tocsection-4"><a href="#Article_II_executive_powers"><span class="tocnumber">2.2</span> <span class="toctext">Article II executive powers</span></a>
+<ul>
+<li class="toclevel-3 tocsection-5"><a href="#War_and_foreign_affairs_powers"><span class="tocnumber">2.2.1</span> <span class="toctext">War and foreign affairs powers</span></a></li>
+<li class="toclevel-3 tocsection-6"><a href="#Administrative_powers"><span class="tocnumber">2.2.2</span> <span class="toctext">Administrative powers</span></a></li>
+<li class="toclevel-3 tocsection-7"><a href="#Juridical_powers"><span class="tocnumber">2.2.3</span> <span class="toctext">Juridical powers</span></a></li>
+<li class="toclevel-3 tocsection-8"><a href="#Legislative_facilitator"><span class="tocnumber">2.2.4</span> <span class="toctext">Legislative facilitator</span></a></li>
+</ul>
+</li>
+<li class="toclevel-2 tocsection-9"><a href="#Ceremonial_roles"><span class="tocnumber">2.3</span> <span class="toctext">Ceremonial roles</span></a></li>
+<li class="toclevel-2 tocsection-10"><a href="#Critics_of_presidency.27s_evolution"><span class="tocnumber">2.4</span> <span class="toctext">Critics of presidency's evolution</span></a></li>
+</ul>
+</li>
+<li class="toclevel-1 tocsection-11"><a href="#Selection_process"><span class="tocnumber">3</span> <span class="toctext">Selection process</span></a>
+<ul>
+<li class="toclevel-2 tocsection-12"><a href="#Eligibility"><span class="tocnumber">3.1</span> <span class="toctext">Eligibility</span></a></li>
+<li class="toclevel-2 tocsection-13"><a href="#Campaigns_and_nomination"><span class="tocnumber">3.2</span> <span class="toctext">Campaigns and nomination</span></a></li>
+<li class="toclevel-2 tocsection-14"><a href="#Election_and_oath"><span class="tocnumber">3.3</span> <span class="toctext">Election and oath</span></a></li>
+<li class="toclevel-2 tocsection-15"><a href="#Tenure_and_term_limits"><span class="tocnumber">3.4</span> <span class="toctext">Tenure and term limits</span></a></li>
+<li class="toclevel-2 tocsection-16"><a href="#Vacancy_or_disability"><span class="tocnumber">3.5</span> <span class="toctext">Vacancy or disability</span></a></li>
+</ul>
+</li>
+<li class="toclevel-1 tocsection-17"><a href="#Compensation"><span class="tocnumber">4</span> <span class="toctext">Compensation</span></a></li>
+<li class="toclevel-1 tocsection-18"><a href="#Post-presidency"><span class="tocnumber">5</span> <span class="toctext">Post-presidency</span></a>
+<ul>
+<li class="toclevel-2 tocsection-19"><a href="#Presidential_libraries"><span class="tocnumber">5.1</span> <span class="toctext">Presidential libraries</span></a></li>
+</ul>
+</li>
+<li class="toclevel-1 tocsection-20"><a href="#Timeline_of_Presidents"><span class="tocnumber">6</span> <span class="toctext">Timeline of Presidents</span></a></li>
+<li class="toclevel-1 tocsection-21"><a href="#See_also"><span class="tocnumber">7</span> <span class="toctext">See also</span></a>
+<ul>
+<li class="toclevel-2 tocsection-22"><a href="#Lists_relating_to_the_United_States_presidency"><span class="tocnumber">7.1</span> <span class="toctext">Lists relating to the United States presidency</span></a></li>
+<li class="toclevel-2 tocsection-23"><a href="#Categories"><span class="tocnumber">7.2</span> <span class="toctext">Categories</span></a></li>
+<li class="toclevel-2 tocsection-24"><a href="#Articles"><span class="tocnumber">7.3</span> <span class="toctext">Articles</span></a></li>
+</ul>
+</li>
+<li class="toclevel-1 tocsection-25"><a href="#Notes"><span class="tocnumber">8</span> <span class="toctext">Notes</span></a></li>
+<li class="toclevel-1 tocsection-26"><a href="#References"><span class="tocnumber">9</span> <span class="toctext">References</span></a></li>
+<li class="toclevel-1 tocsection-27"><a href="#Further_reading"><span class="tocnumber">10</span> <span class="toctext">Further reading</span></a></li>
+<li class="toclevel-1 tocsection-28"><a href="#External_links"><span class="tocnumber">11</span> <span class="toctext">External links</span></a></li>
+</ul>
+</div>
+<p></p>
+<h2><span class="mw-headline" id="Origin">Origin</span></h2>
+<table class="vertical-navbox vcard" style="float:right;clear:right;width:22.0em;margin:0 0 1.0em 1.0em;background:#f9f9f9;border:1px solid #aaa;padding:0.2em;border-spacing:0.4em 0;text-align:center;line-height:1.4em;font-size:88%;">
+<tr>
+<th style="padding:0.2em 0.4em 0.2em;font-size:145%;line-height:1.2em;">
+<div class="adr" style="font-size:smaller"><span class="fn org country-name"><a href="/wiki/United_States" title="United States">United States</a></span></div>
+</th>
+</tr>
+<tr>
+<td><a href="/wiki/File:Great_Seal_of_the_United_States_(obverse).svg" class="image"><img alt="Great Seal of the United States (obverse).svg" src="//upload.wikimedia.org/wikipedia/commons/thumb/5/5c/Great_Seal_of_the_United_States_%28obverse%29.svg/125px-Great_Seal_of_the_United_States_%28obverse%29.svg.png" width="125" height="125" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/5/5c/Great_Seal_of_the_United_States_%28obverse%29.svg/188px-Great_Seal_of_the_United_States_%28obverse%29.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5c/Great_Seal_of_the_United_States_%28obverse%29.svg/250px-Great_Seal_of_the_United_States_%28obverse%29.svg.png 2x" data-file-width="600" data-file-height="600" /></a></td>
+</tr>
+<tr>
+<td style="border-bottom: #aaa 1px solid">This article is part of a series on the<br />
+<span style="font-weight:bold"><a href="/wiki/Politics_of_the_United_States" title="Politics of the United States">politics and government of<br />
+the United States</a></span></td>
+</tr>
+<tr>
+<td style="padding:0 0.1em 0.4em;">
+<div class="NavFrame collapsed" style="border:none;padding:0;">
+<div class="NavHead" style="font-size:105%;background:transparent;text-align:left;"><a href="/wiki/Federal_government_of_the_United_States" title="Federal government of the United States">Federal government</a></div>
+<div class="NavContent" style="font-size:105%;padding:0.2em 0 0.4em;text-align:center;text-align: left;">
+<ul>
+<li><a href="/wiki/United_States_Constitution" title="United States Constitution">Constitution</a></li>
+<li><a href="/wiki/Law_of_the_United_States" title="Law of the United States">Law</a></li>
+<li><a href="/wiki/Taxation_in_the_United_States" title="Taxation in the United States">Taxation</a></li>
+</ul>
+</div>
+</div>
+</td>
+</tr>
+<tr>
+<td style="padding:0 0.1em 0.4em;">
+<div class="NavFrame collapsed" style="border:none;padding:0;">
+<div class="NavHead" style="font-size:105%;background:transparent;text-align:left;">Legislature</div>
+<div class="NavContent" style="font-size:105%;padding:0.2em 0 0.4em;text-align:center;text-align: left;">
+<ul>
+<li><a href="/wiki/United_States_Congress" title="United States Congress">Congress</a>
+<ul>
+<li><a href="/wiki/United_States_House_of_Representatives" title="United States House of Representatives">House</a>
+<ul>
+<li><a href="/wiki/Speaker_of_the_United_States_House_of_Representatives" title="Speaker of the United States House of Representatives">Speaker</a></li>
+<li><a href="/wiki/Party_leaders_of_the_United_States_House_of_Representatives" title="Party leaders of the United States House of Representatives">Party leaders</a></li>
+<li><a href="/wiki/List_of_United_States_congressional_districts" title="List of United States congressional districts">Congressional districts</a></li>
+</ul>
+</li>
+<li><a href="/wiki/United_States_Senate" title="United States Senate">Senate</a>
+<ul>
+<li><a href="/wiki/President_pro_tempore_of_the_United_States_Senate" title="President pro tempore of the United States Senate">President pro tempore</a></li>
+<li><a href="/wiki/Party_leaders_of_the_United_States_Senate" title="Party leaders of the United States Senate">Party leaders</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+</td>
+</tr>
+<tr>
+<td style="padding:0 0.1em 0.4em;">
+<div class="NavFrame collapsed" style="border:none;padding:0;">
+<div class="NavHead" style="font-size:105%;background:transparent;text-align:left;">Executive</div>
+<div class="NavContent" style="font-size:105%;padding:0.2em 0 0.4em;text-align:center;text-align: left;">
+<ul>
+<li><strong class="selflink">President</strong></li>
+<li><a href="/wiki/Vice_President_of_the_United_States" title="Vice President of the United States">Vice President</a></li>
+<li><a href="/wiki/Cabinet_of_the_United_States" title="Cabinet of the United States">Cabinet</a></li>
+<li><a href="/wiki/List_of_United_States_federal_agencies" title="List of United States federal agencies" class="mw-redirect">Federal agencies</a></li>
+</ul>
+</div>
+</div>
+</td>
+</tr>
+<tr>
+<td style="padding:0 0.1em 0.4em;">
+<div class="NavFrame collapsed" style="border:none;padding:0;">
+<div class="NavHead" style="font-size:105%;background:transparent;text-align:left;"><a href="/wiki/Federal_judiciary_of_the_United_States" title="Federal judiciary of the United States">Judiciary</a></div>
+<div class="NavContent" style="font-size:105%;padding:0.2em 0 0.4em;text-align:center;text-align: left;">
+<ul>
+<li><a href="/wiki/Supreme_Court_of_the_United_States" title="Supreme Court of the United States">Supreme Court</a></li>
+<li><a href="/wiki/United_States_courts_of_appeals" title="United States courts of appeals">Courts of Appeals</a></li>
+<li><a href="/wiki/United_States_district_court" title="United States district court">District Courts</a></li>
+<li><a href="/wiki/Federal_tribunals_in_the_United_States" title="Federal tribunals in the United States">Other tribunals</a></li>
+</ul>
+</div>
+</div>
+</td>
+</tr>
+<tr>
+<td style="padding:0 0.1em 0.4em;">
+<div class="NavFrame collapsed" style="border:none;padding:0;">
+<div class="NavHead" style="font-size:105%;background:transparent;text-align:left;"><a href="/wiki/Elections_in_the_United_States" title="Elections in the United States">Elections</a></div>
+<div class="NavContent" style="font-size:105%;padding:0.2em 0 0.4em;text-align:center;text-align: left;">
+<ul>
+<li><a href="/wiki/United_States_presidential_election" title="United States presidential election">Presidential elections</a></li>
+<li><a href="/wiki/United_States_midterm_election" title="United States midterm election">Midterm elections</a></li>
+<li><a href="/wiki/Off-year_election" title="Off-year election">Off-year elections</a></li>
+</ul>
+</div>
+</div>
+</td>
+</tr>
+<tr>
+<td style="padding:0 0.1em 0.4em;">
+<div class="NavFrame collapsed" style="border:none;padding:0;">
+<div class="NavHead" style="font-size:105%;background:transparent;text-align:left;"><a href="/wiki/Political_parties_in_the_United_States" title="Political parties in the United States">Political parties</a></div>
+<div class="NavContent" style="font-size:105%;padding:0.2em 0 0.4em;text-align:center;text-align: left;">
+<ul>
+<li><a href="/wiki/Democratic_Party_(United_States)" title="Democratic Party (United States)">Democratic</a></li>
+<li><a href="/wiki/Republican_Party_(United_States)" title="Republican Party (United States)">Republican</a></li>
+<li><a href="/wiki/Third_party_(United_States)" title="Third party (United States)">Third parties</a></li>
+</ul>
+</div>
+</div>
+</td>
+</tr>
+<tr>
+<td style="padding:0 0.1em 0.4em;">
+<div class="NavFrame collapsed" style="border:none;padding:0;">
+<div class="NavHead" style="font-size:105%;background:transparent;text-align:left;"><a href="/wiki/Federalism_in_the_United_States" title="Federalism in the United States">Federalism</a></div>
+<div class="NavContent" style="font-size:105%;padding:0.2em 0 0.4em;text-align:center;text-align: left;">
+<ul>
+<li><a href="/wiki/State_governments_of_the_United_States" title="State governments of the United States">State government</a>
+<ul>
+<li><a href="/wiki/List_of_current_United_States_governors" title="List of current United States governors">Governors</a></li>
+<li><a href="/wiki/State_legislature_(United_States)" title="State legislature (United States)">Legislatures</a> (<a href="/wiki/List_of_United_States_state_legislatures" title="List of United States state legislatures">List</a>)</li>
+<li><a href="/wiki/State_court_(United_States)" title="State court (United States)">State courts</a></li>
+</ul>
+</li>
+<li><a href="/wiki/Local_government_in_the_United_States" title="Local government in the United States">Local government</a></li>
+</ul>
+</div>
+</div>
+</td>
+</tr>
+<tr>
+<td style="padding:0.3em 0.4em 0.3em;font-weight:bold;border-top: 1px solid #aaa; border-bottom: 1px solid #aaa;;">
+<div class="hlist" style="text-align:center;font-size:100%;font-weight:normal;">
+<ul>
+<li><span style="font-size:90%;"><a href="/wiki/Outline_of_political_science#Politics_by_region" title="Outline of political science">Other countries</a></span></li>
+<li><span style="font-size:90%;"><a href="//commons.wikimedia.org/wiki/Atlas_of_the_United_States" class="extiw" title="commons:Atlas of the United States">Atlas</a></span></li>
+</ul>
+<p><span style="font-size:90%;"><a href="/wiki/File:A_coloured_voting_box.svg" class="image"><img alt="Portal icon" src="//upload.wikimedia.org/wikipedia/en/thumb/0/01/A_coloured_voting_box.svg/16px-A_coloured_voting_box.svg.png" width="16" height="16" class="thumbborder" srcset="//upload.wikimedia.org/wikipedia/en/thumb/0/01/A_coloured_voting_box.svg/24px-A_coloured_voting_box.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/0/01/A_coloured_voting_box.svg/32px-A_coloured_voting_box.svg.png 2x" data-file-width="160" data-file-height="160" /></a> <a href="/wiki/Portal:Politics" title="Portal:Politics">Politics portal</a></span></p>
+</div>
+</td>
+</tr>
+<tr>
+<td style="text-align:right;font-size:115%;padding-top: 0.6em;;">
+<div class="plainlinks hlist navbar mini">
+<ul>
+<li class="nv-view"><a href="/wiki/Template:Politics_of_the_United_States" title="Template:Politics of the United States"><span title="View this template" style=";">v</span></a></li>
+<li class="nv-talk"><a href="/wiki/Template_talk:Politics_of_the_United_States" title="Template talk:Politics of the United States"><span title="Discuss this template" style=";">t</span></a></li>
+<li class="nv-edit"><a class="external text" href="//en.wikipedia.org/w/index.php?title=Template:Politics_of_the_United_States&amp;action=edit"><span title="Edit this template" style=";">e</span></a></li>
+</ul>
+</div>
+</td>
+</tr>
+</table>
+<p>In 1776, the <a href="/wiki/Thirteen_Colonies" title="Thirteen Colonies">Thirteen Colonies</a>, acting through the <a href="/wiki/Second_Continental_Congress" title="Second Continental Congress">Second Continental Congress</a>, declared political independence from <a href="/wiki/Kingdom_of_Great_Britain" title="Kingdom of Great Britain">Great Britain</a> during the <a href="/wiki/American_Revolution" title="American Revolution">American Revolution</a>. The new states, though independent of each other as <a href="/wiki/Nation_state" title="Nation state">nation states</a>,<sup id="cite_ref-Milkis_18-0" class="reference"><a href="#cite_note-Milkis-18"><span>[</span>18<span>]</span></a></sup> recognized the necessity of closely coordinating their efforts against the British.<sup id="cite_ref-Kelly_19-0" class="reference"><a href="#cite_note-Kelly-19"><span>[</span>19<span>]</span></a></sup> Desiring to avoid anything that remotely resembled a <a href="/wiki/Monarchy" title="Monarchy">monarchy</a>, Congress negotiated the <a href="/wiki/Articles_of_Confederation" title="Articles of Confederation">Articles of Confederation</a> to establish a weak alliance between the states.<sup id="cite_ref-Milkis_18-1" class="reference"><a href="#cite_note-Milkis-18"><span>[</span>18<span>]</span></a></sup> As a central authority, Congress under the Articles was without any legislative power; it could make its own resolutions, determinations, and regulations, but not any laws, nor any taxes or local commercial regulations enforceable upon citizens.<sup id="cite_ref-Kelly_19-1" class="reference"><a href="#cite_note-Kelly-19"><span>[</span>19<span>]</span></a></sup> This institutional design reflected the conception of how Americans believed the deposed British system of <a href="/wiki/The_Crown" title="The Crown">Crown</a> and <a href="/wiki/Parliament_of_Great_Britain" title="Parliament of Great Britain">Parliament</a> ought to have functioned with respect to the royal <a href="/wiki/Dominion" title="Dominion">dominion</a>: a superintending body for matters that concerned the entire empire.<sup id="cite_ref-Kelly_19-2" class="reference"><a href="#cite_note-Kelly-19"><span>[</span>19<span>]</span></a></sup> Out from under any monarchy, the states assigned some formerly <a href="/wiki/Royal_prerogative" title="Royal prerogative">royal prerogatives</a> (<i>e.g.</i>, making war, receiving ambassadors, etc.) to Congress, while severally lodging the rest within their own respective state governments. Only after all the states agreed to a resolution settling competing western land claims did the Articles take effect on March 1, 1781, when <a href="/wiki/Maryland" title="Maryland">Maryland</a> became the final state to ratify them.</p>
+<p>In 1783, the <a href="/wiki/Treaty_of_Paris_(1783)" title="Treaty of Paris (1783)">Treaty of Paris</a> secured independence for each of the former colonies. With peace at hand, the states each turned toward their own internal affairs.<sup id="cite_ref-Milkis_18-2" class="reference"><a href="#cite_note-Milkis-18"><span>[</span>18<span>]</span></a></sup> By 1786, Americans found their continental borders besieged and weak, their respective economies in crises as neighboring states agitated trade rivalries with one another, witnessed their <a href="/wiki/Hard_currency" title="Hard currency">hard currency</a> pouring into foreign markets to pay for imports, their <a href="/wiki/Mediterranean_Sea" title="Mediterranean Sea">Mediterranean</a> commerce preyed upon by <a href="/wiki/North_Africa" title="North Africa">North African</a> <a href="/wiki/Barbary_pirates" title="Barbary pirates">pirates</a>, and their foreign-financed Revolutionary War debts unpaid and accruing interest.<sup id="cite_ref-Milkis_18-3" class="reference"><a href="#cite_note-Milkis-18"><span>[</span>18<span>]</span></a></sup> Civil and political unrest loomed.</p>
+<p>Following the successful resolution of commercial and fishing disputes between <a href="/wiki/Virginia" title="Virginia">Virginia</a> and Maryland at the <a href="/wiki/Mount_Vernon_Conference" title="Mount Vernon Conference">Mount Vernon Conference</a> in 1785, Virginia called for a trade conference between all the states, set for September 1786 in <a href="/wiki/Annapolis,_Maryland" title="Annapolis, Maryland">Annapolis, Maryland</a>, with an aim toward resolving further-reaching interstate commercial antagonisms. When the <a href="/wiki/Annapolis_Convention_(1786)" title="Annapolis Convention (1786)">convention</a> failed for lack of attendance due to suspicions among most of the other states, the Annapolis delegates called for a convention to offer revisions to the Articles, to be held the next spring in <a href="/wiki/Philadelphia" title="Philadelphia">Philadelphia</a>. Prospects for the next convention appeared bleak until <a href="/wiki/James_Madison" title="James Madison">James Madison</a> and <a href="/wiki/Edmund_Randolph" title="Edmund Randolph">Edmund Randolph</a> succeeded in securing <a href="/wiki/George_Washington" title="George Washington">George Washington</a>'s attendance to Philadelphia as a delegate for Virginia.<sup id="cite_ref-Milkis_18-4" class="reference"><a href="#cite_note-Milkis-18"><span>[</span>18<span>]</span></a></sup><sup id="cite_ref-Beeman_20-0" class="reference"><a href="#cite_note-Beeman-20"><span>[</span>20<span>]</span></a></sup></p>
+<p>When the <a href="/wiki/Constitutional_Convention_(United_States)" title="Constitutional Convention (United States)">Constitutional Convention</a> convened in May 1787, the 12 state delegations in attendance (<a href="/wiki/Rhode_Island" title="Rhode Island">Rhode Island</a> did not send delegates) brought with them an accumulated experience over a diverse set of institutional arrangements between legislative and executive branches from within their respective state governments. Most states maintained a weak executive without veto or appointment powers, elected annually by the legislature to a single term only, sharing power with an executive council, and countered by a strong legislature.<sup id="cite_ref-Milkis_18-5" class="reference"><a href="#cite_note-Milkis-18"><span>[</span>18<span>]</span></a></sup> <a href="/wiki/New_York" title="New York">New York</a> offered the greatest exception, having a strong, unitary governor with veto and appointment power elected to a three-year term, and eligible for reelection to an indefinite number of terms thereafter.<sup id="cite_ref-Milkis_18-6" class="reference"><a href="#cite_note-Milkis-18"><span>[</span>18<span>]</span></a></sup> It was through the closed-door negotiations at Philadelphia that the presidency framed in the <a href="/wiki/United_States_Constitution" title="United States Constitution">U.S. Constitution</a> emerged.</p>
+<h2><span class="mw-headline" id="Powers_and_duties">Powers and duties</span></h2>
+<h3><span class="mw-headline" id="Article_I_legislative_role">Article I legislative role</span></h3>
+<div class="thumb tright">
+<div class="thumbinner" style="width:222px;"><a href="/wiki/File:BarackObamaSigningLegislation.jpg" class="image"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/0/0a/BarackObamaSigningLegislation.jpg/220px-BarackObamaSigningLegislation.jpg" width="220" height="147" class="thumbimage" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/0/0a/BarackObamaSigningLegislation.jpg/330px-BarackObamaSigningLegislation.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/0a/BarackObamaSigningLegislation.jpg/440px-BarackObamaSigningLegislation.jpg 2x" data-file-width="4096" data-file-height="2731" /></a>
+<div class="thumbcaption">
+<div class="magnify"><a href="/wiki/File:BarackObamaSigningLegislation.jpg" class="internal" title="Enlarge"></a></div>
+Obama signing legislation at the <a href="/wiki/Resolute_desk" title="Resolute desk"><i>Resolute</i> desk</a></div>
+</div>
+</div>
+<p>The first power the <a href="/wiki/United_States_Constitution" title="United States Constitution">Constitution</a> confers upon the president is the <a href="/wiki/Veto#United_States" title="Veto">veto</a>. The <a href="/wiki/Presentment_Clause" title="Presentment Clause">Presentment Clause</a> requires any bill passed by <a href="/wiki/United_States_Congress" title="United States Congress">Congress</a> to be presented to the president before it can become law. Once the legislation has been presented, the president has three options:</p>
+<ol>
+<li>Sign the legislation; the bill then becomes law.</li>
+<li>Veto the legislation and return it to Congress, expressing any objections; the bill does not become law, unless each house of Congress votes to override the veto by a two-thirds vote.</li>
+<li>Take no action. In this instance, the president neither signs nor vetoes the legislation. After 10 days, not counting Sundays, two possible outcomes emerge:
+<ul>
+<li>If Congress is still convened, the bill becomes law.</li>
+<li>If Congress has adjourned, thus preventing the return of the legislation, the bill does not become law. This latter outcome is known as the <a href="/wiki/Pocket_veto" title="Pocket veto">pocket veto</a>.</li>
+</ul>
+</li>
+</ol>
+<p>In 1996, Congress attempted to enhance the president's veto power with the <a href="/wiki/Line_Item_Veto_Act_of_1996" title="Line Item Veto Act of 1996">Line Item Veto Act</a>. The legislation empowered the president to sign any spending bill into law while simultaneously striking certain spending items within the bill, particularly any new spending, any amount of discretionary spending, or any new limited tax benefit. Once a president had stricken the item, Congress could pass that particular item again. If the president then vetoed the new legislation, Congress could override the veto by its ordinary means, a two-thirds vote in both houses. In <i><a href="/wiki/Clinton_v._City_of_New_York" title="Clinton v. City of New York">Clinton v. City of New York</a></i>, 524 <a href="/wiki/United_States_Reports" title="United States Reports">U.S.</a> <a rel="nofollow" class="external text" href="https://supreme.justia.com/cases/federal/us/524/417/case.html">417</a> (1998), the <a href="/wiki/Supreme_Court_of_the_United_States" title="Supreme Court of the United States">U.S. Supreme Court</a> ruled such a legislative alteration of the veto power to be unconstitutional.</p>
+<h3><span class="mw-headline" id="Article_II_executive_powers">Article II executive powers</span></h3>
+<h4><span class="mw-headline" id="War_and_foreign_affairs_powers">War and foreign affairs powers</span></h4>
+<div class="thumb tright">
+<div class="thumbinner" style="width:172px;"><a href="/wiki/File:Abraham_Lincoln_head_on_shoulders_photo_portrait.jpg" class="image"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/4/44/Abraham_Lincoln_head_on_shoulders_photo_portrait.jpg/170px-Abraham_Lincoln_head_on_shoulders_photo_portrait.jpg" width="170" height="223" class="thumbimage" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/44/Abraham_Lincoln_head_on_shoulders_photo_portrait.jpg/255px-Abraham_Lincoln_head_on_shoulders_photo_portrait.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/44/Abraham_Lincoln_head_on_shoulders_photo_portrait.jpg/340px-Abraham_Lincoln_head_on_shoulders_photo_portrait.jpg 2x" data-file-width="2850" data-file-height="3742" /></a>
+<div class="thumbcaption">
+<div class="magnify"><a href="/wiki/File:Abraham_Lincoln_head_on_shoulders_photo_portrait.jpg" class="internal" title="Enlarge"></a></div>
+<a href="/wiki/Abraham_Lincoln" title="Abraham Lincoln">Abraham Lincoln</a>, the 16th President of the United States, successfully preserved the <a href="/wiki/Union_(American_Civil_War)" title="Union (American Civil War)">Union</a> during the <a href="/wiki/American_Civil_War" title="American Civil War">American Civil War</a></div>
+</div>
+</div>
+<p>Perhaps the most important of all presidential powers is command of the <a href="/wiki/United_States_Armed_Forces" title="United States Armed Forces">United States Armed Forces</a> as its <a href="/wiki/Commander-in-chief" title="Commander-in-chief">commander-in-chief</a>. While the power to declare war is constitutionally vested in Congress, the president has ultimate responsibility for direction and disposition of the military. The present-day operational command of the Armed Forces (belonging to the <a href="/wiki/United_States_Department_of_Defense" title="United States Department of Defense">Department of Defense</a>) is normally exercised through the <a href="/wiki/United_States_Secretary_of_Defense" title="United States Secretary of Defense">Secretary of Defense</a>, with assistance of the <a href="/wiki/Chairman_of_the_Joint_Chiefs_of_Staff" title="Chairman of the Joint Chiefs of Staff">Chairman of the Joint Chiefs of Staff</a>, to the <a href="/wiki/Combatant_Command" title="Combatant Command" class="mw-redirect">Combatant Commands</a>, as outlined in the presidentially approved Unified Command Plan (UCP).<sup id="cite_ref-ucp_21-0" class="reference"><a href="#cite_note-ucp-21"><span>[</span>21<span>]</span></a></sup><sup id="cite_ref-22" class="reference"><a href="#cite_note-22"><span>[</span>22<span>]</span></a></sup><sup id="cite_ref-23" class="reference"><a href="#cite_note-23"><span>[</span>23<span>]</span></a></sup> The framers of the Constitution took care to limit the president's powers regarding the military; <a href="/wiki/Alexander_Hamilton" title="Alexander Hamilton">Alexander Hamilton</a> explains this in <a href="/wiki/Federalist_No._69" title="Federalist No. 69">Federalist No. 69</a>:</p>
+<blockquote class="templatequote">
+<p>The President is to be commander-in-chief of the army and navy of the United States. ... It would amount to nothing more than the supreme command and direction of the military and naval forces ... while that [the power] of the <a href="/wiki/Monarchy_of_the_United_Kingdom" title="Monarchy of the United Kingdom">British king</a> extends to the DECLARING of war and to the RAISING and REGULATING of fleets and armies, all [of] which ... would appertain to the legislature.<sup id="cite_ref-24" class="reference"><a href="#cite_note-24"><span>[</span>24<span>]</span></a></sup> [Emphasis in the original.]</p>
+</blockquote>
+<p>Congress, pursuant to the <a href="/wiki/War_Powers_Resolution" title="War Powers Resolution">War Powers Resolution</a>, must authorize any troop deployments longer than 60 days, although that process relies on triggering mechanisms that have never been employed, rendering it ineffectual.<sup id="cite_ref-miller-center_25-0" class="reference"><a href="#cite_note-miller-center-25"><span>[</span>25<span>]</span></a></sup> Additionally, Congress provides a check to presidential military power through its control over military spending and regulation. While historically presidents initiated the process for going to war,<sup id="cite_ref-tws12novef_26-0" class="reference"><a href="#cite_note-tws12novef-26"><span>[</span>26<span>]</span></a></sup><sup id="cite_ref-tws8nov102_27-0" class="reference"><a href="#cite_note-tws8nov102-27"><span>[</span>27<span>]</span></a></sup> critics have charged that there have been several conflicts in which presidents did not get official declarations, including <a href="/wiki/Theodore_Roosevelt" title="Theodore Roosevelt">Theodore Roosevelt</a>'s military move into <a href="/wiki/Panama" title="Panama">Panama</a> in 1903,<sup id="cite_ref-tws12novef_26-1" class="reference"><a href="#cite_note-tws12novef-26"><span>[</span>26<span>]</span></a></sup> the <a href="/wiki/Korean_War" title="Korean War">Korean War</a>,<sup id="cite_ref-tws12novef_26-2" class="reference"><a href="#cite_note-tws12novef-26"><span>[</span>26<span>]</span></a></sup> the <a href="/wiki/Vietnam_War" title="Vietnam War">Vietnam War</a>,<sup id="cite_ref-tws12novef_26-3" class="reference"><a href="#cite_note-tws12novef-26"><span>[</span>26<span>]</span></a></sup> and the invasions of <a href="/wiki/Grenada" title="Grenada">Grenada</a> in 1983<sup id="cite_ref-tws8nov101_28-0" class="reference"><a href="#cite_note-tws8nov101-28"><span>[</span>28<span>]</span></a></sup> and <a href="/wiki/Panama" title="Panama">Panama</a> in 1990.<sup id="cite_ref-tws8nov100_29-0" class="reference"><a href="#cite_note-tws8nov100-29"><span>[</span>29<span>]</span></a></sup></p>
+<p>Along with the armed forces, the president also directs <a href="/wiki/Foreign_policy_of_the_United_States" title="Foreign policy of the United States">U.S. foreign policy</a>. Through the <a href="/wiki/United_States_Department_of_State" title="United States Department of State">Department of State</a> and the <a href="/wiki/United_States_Department_of_Defense" title="United States Department of Defense">Department of Defense</a>, the president is responsible for the protection of Americans abroad and of foreign nationals in the United States. The president decides whether to recognize new nations and new governments, and negotiates treaties with other nations, which become binding on the United States when approved by two-thirds vote of the Senate.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (March 2014)">citation needed</span></a></i>]</sup></p>
+<p>Although not constitutionally provided, presidents also sometimes employ "executive agreements" in foreign relations. These agreements frequently regard administrative policy choices germane to executive power; for example, the extent to which either country presents an armed presence in a given area, how each country will enforce copyright treaties, or how each country will process foreign mail. However, the 20th century witnessed a vast expansion of the use of executive agreements, and critics have challenged the extent of that use as supplanting the treaty process and removing constitutionally prescribed checks and balances over the executive in foreign relations. Supporters counter that the agreements offer a pragmatic solution when the need for swift, secret, and/or concerted action arises.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (March 2014)">citation needed</span></a></i>]</sup></p>
+<h4><span class="mw-headline" id="Administrative_powers">Administrative powers</span></h4>
+<div class="quotebox" style="float: right; clear: right; margin: 0.5em 0 0.8em 1.4em; width: 25%; padding: 6px; border: 1px solid #aaa; font-size: 88%; background-color: #F9F9F9;">
+<div class="" style="position: relative; text-align: left;">
+<div>
+<p>Suffice it to say that the President is made the sole repository of the executive powers of the United States, and the powers entrusted to him as well as the duties imposed upon him are awesome indeed.</p>
+</div>
+</div>
+<div style="text-align: left;"><a href="/wiki/William_Rehnquist" title="William Rehnquist">William Rehnquist</a>, <i><a href="/wiki/Nixon_v._General_Services_Administration" title="Nixon v. General Services Administration">Nixon v. General Services Administration</a></i>, <b>433 <a href="/wiki/United_States_Reports" title="United States Reports">U.S.</a> <a rel="nofollow" class="external text" href="https://supreme.justia.com/cases/federal/us/433/425/case.html">425</a> (1977)</b> (<a href="/wiki/Dissenting_opinion" title="Dissenting opinion">dissenting opinion</a>)</div>
+</div>
+<p>The president is the head of the executive branch of the federal government and is <a href="/wiki/Take_Care_Clause" title="Take Care Clause" class="mw-redirect">constitutionally obligated</a> to "take care that the laws be faithfully executed."<sup id="cite_ref-30" class="reference"><a href="#cite_note-30"><span>[</span>30<span>]</span></a></sup> The executive branch has over four million employees, including members of the military.<sup id="cite_ref-31" class="reference"><a href="#cite_note-31"><span>[</span>31<span>]</span></a></sup></p>
+<p>Presidents make numerous executive branch appointments: an incoming president may make up to 6,000 before he takes office and 8,000 more during his term. <a href="/wiki/Ambassador" title="Ambassador">Ambassadors</a>, members of the <a href="/wiki/Cabinet_of_the_United_States" title="Cabinet of the United States">Cabinet</a>, and other federal officers, are all appointed by a president with the "<a href="/wiki/United_States_Senate#Checks_and_balances" title="United States Senate">advice and consent</a>" of a majority of the Senate. When the Senate is in recess for at least ten days, the president may make <a href="/wiki/Recess_appointment" title="Recess appointment">recess appointments</a>.<sup id="cite_ref-32" class="reference"><a href="#cite_note-32"><span>[</span>32<span>]</span></a></sup> Recess appointments are temporary and expire at the end of the next session of the Senate.</p>
+<p>The power of a president to fire executive officials has long been a contentious political issue. Generally, a president may remove purely executive officials at his discretion.<sup id="cite_ref-33" class="reference"><a href="#cite_note-33"><span>[</span>33<span>]</span></a></sup> However, Congress can curtail and constrain a president's authority to fire commissioners of independent regulatory agencies and certain inferior executive officers by statute.<sup id="cite_ref-34" class="reference"><a href="#cite_note-34"><span>[</span>34<span>]</span></a></sup></p>
+<p>The president additionally possesses the ability to direct much of the executive branch through <a href="/wiki/Executive_order" title="Executive order">executive orders</a> that are grounded in <a href="/wiki/Law_of_the_United_States" title="Law of the United States">federal law</a> or constitutionally granted executive power. Executive orders are reviewable by federal courts and can be superseded by federal legislation.</p>
+<p>To manage the growing federal bureaucracy, Presidents have gradually surrounded themselves with many layers of staff, who were eventually organized into the <a href="/wiki/Executive_Office_of_the_President_of_the_United_States" title="Executive Office of the President of the United States">Executive Office of the President of the United States</a>. Within the Executive Office, the President's innermost layer of aides (and their assistants) are located in the <a href="/wiki/White_House_Office" title="White House Office">White House Office</a>.</p>
+<h4><span class="mw-headline" id="Juridical_powers">Juridical powers</span></h4>
+<p>The president also has the power to nominate <a href="/wiki/United_States_federal_judge" title="United States federal judge">federal judges</a>, including members of the <a href="/wiki/United_States_courts_of_appeals" title="United States courts of appeals">United States courts of appeals</a> and the <a href="/wiki/Supreme_Court_of_the_United_States" title="Supreme Court of the United States">Supreme Court of the United States</a>. However, these nominations do require Senate confirmation. Securing Senate approval can provide a major obstacle for presidents who wish to orient the federal judiciary toward a particular ideological stance. When nominating judges to <a href="/wiki/United_States_district_court" title="United States district court">U.S. district courts</a>, presidents often respect the long-standing tradition of <a href="/wiki/Senatorial_courtesy" title="Senatorial courtesy">Senatorial courtesy</a>. Presidents may also grant <a href="/wiki/Pardon" title="Pardon">pardons</a> and reprieves, as is often done just before the end of a presidential term, not without controversy.<sup id="cite_ref-tws8nov12_35-0" class="reference"><a href="#cite_note-tws8nov12-35"><span>[</span>35<span>]</span></a></sup><sup id="cite_ref-tws8nov11_36-0" class="reference"><a href="#cite_note-tws8nov11-36"><span>[</span>36<span>]</span></a></sup><sup id="cite_ref-tws8nov10_37-0" class="reference"><a href="#cite_note-tws8nov10-37"><span>[</span>37<span>]</span></a></sup></p>
+<p>Historically, two doctrines concerning executive power have developed that enable the president to exercise executive power with a degree of autonomy. The first is <a href="/wiki/Executive_privilege" title="Executive privilege">executive privilege</a>, which allows the president to withhold from disclosure any communications made directly to the president in the performance of executive duties. <a href="/wiki/George_Washington" title="George Washington">George Washington</a> first claimed privilege when Congress requested to see <a href="/wiki/Chief_Justice_of_the_United_States" title="Chief Justice of the United States">Chief Justice</a> <a href="/wiki/John_Jay" title="John Jay">John Jay</a>'s notes from an unpopular treaty negotiation with <a href="/wiki/Kingdom_of_Great_Britain" title="Kingdom of Great Britain">Great Britain</a>. While not enshrined in the Constitution, or any other law, Washington's action created the precedent for the privilege. When <a href="/wiki/Richard_Nixon" title="Richard Nixon">Richard Nixon</a> tried to use executive privilege as a reason for not turning over subpoenaed evidence to Congress during the <a href="/wiki/Watergate_scandal" title="Watergate scandal">Watergate scandal</a>, the Supreme Court ruled in <i><a href="/wiki/United_States_v._Nixon" title="United States v. Nixon">United States v. Nixon</a></i>, 418 <a href="/wiki/United_States_Reports" title="United States Reports">U.S.</a> <a rel="nofollow" class="external text" href="https://supreme.justia.com/cases/federal/us/418/683/case.html">683</a> (1974), that executive privilege did not apply in cases where a president was attempting to avoid criminal prosecution. When President <a href="/wiki/Bill_Clinton" title="Bill Clinton">Bill Clinton</a> attempted to use executive privilege regarding the <a href="/wiki/Lewinsky_scandal" title="Lewinsky scandal">Lewinsky scandal</a>, the Supreme Court ruled in <i><a href="/wiki/Clinton_v._Jones" title="Clinton v. Jones">Clinton v. Jones</a></i>, 520 <a href="/wiki/United_States_Reports" title="United States Reports">U.S.</a> <a rel="nofollow" class="external text" href="https://supreme.justia.com/cases/federal/us/520/681/case.html">681</a> (1997), that the privilege also could not be used in civil suits. These cases established the <a href="/wiki/Precedent" title="Precedent">legal precedent</a> that executive privilege is valid, although the exact extent of the privilege has yet to be clearly defined. Additionally, federal courts have allowed this privilege to radiate outward and protect other executive branch employees, but have weakened that protection for those executive branch communications that do not involve the president.<sup id="cite_ref-38" class="reference"><a href="#cite_note-38"><span>[</span>38<span>]</span></a></sup></p>
+<div class="thumb tright">
+<div class="thumbinner" style="width:222px;"><a href="/wiki/File:SOU2007.jpg" class="image"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/a/a4/SOU2007.jpg/220px-SOU2007.jpg" width="220" height="157" class="thumbimage" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/a/a4/SOU2007.jpg/330px-SOU2007.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/a/a4/SOU2007.jpg/440px-SOU2007.jpg 2x" data-file-width="515" data-file-height="368" /></a>
+<div class="thumbcaption">
+<div class="magnify"><a href="/wiki/File:SOU2007.jpg" class="internal" title="Enlarge"></a></div>
+President <a href="/wiki/George_W._Bush" title="George W. Bush">George W. Bush</a> delivering the <a href="/wiki/2007_State_of_the_Union_Address" title="2007 State of the Union Address">2007 State of the Union Address</a>, with <a href="/wiki/Vice_President_of_the_United_States" title="Vice President of the United States">Vice President</a> <a href="/wiki/Dick_Cheney" title="Dick Cheney">Dick Cheney</a> and <a href="/wiki/Speaker_of_the_United_States_House_of_Representatives" title="Speaker of the United States House of Representatives">Speaker of the House</a> <a href="/wiki/Nancy_Pelosi" title="Nancy Pelosi">Nancy Pelosi</a> behind him</div>
+</div>
+</div>
+<p>The <a href="/wiki/State_secrets_privilege" title="State secrets privilege">state secrets privilege</a> allows the president and the executive branch to withhold information or documents from <a href="/wiki/Discovery_(law)" title="Discovery (law)">discovery</a> in legal proceedings if such release would harm national security. Precedent for the privilege arose early in the 19th century when <a href="/wiki/Thomas_Jefferson" title="Thomas Jefferson">Thomas Jefferson</a> refused to release military documents in the <a href="/wiki/Treason" title="Treason">treason</a> trial of <a href="/wiki/Aaron_Burr" title="Aaron Burr">Aaron Burr</a> and again in <i><a href="/wiki/Totten_v._United_States" title="Totten v. United States">Totten v. United States</a></i> 92 <a href="/wiki/United_States_Reports" title="United States Reports">U.S.</a> <a rel="nofollow" class="external text" href="https://supreme.justia.com/cases/federal/us/92/105/case.html">105</a> (1876), when the Supreme Court dismissed a case brought by a former Union spy.<sup id="cite_ref-39" class="reference"><a href="#cite_note-39"><span>[</span>39<span>]</span></a></sup> However, the privilege was not formally recognized by the U.S. Supreme Court until <i><a href="/wiki/United_States_v._Reynolds" title="United States v. Reynolds">United States v. Reynolds</a></i> 345 <a href="/wiki/United_States_Reports" title="United States Reports">U.S.</a> <a rel="nofollow" class="external text" href="https://supreme.justia.com/cases/federal/us/345/1/case.html">1</a> (1953), where it was held to be a <a href="/wiki/Common_law" title="Common law">common law</a> <a href="/wiki/Evidence_(law)" title="Evidence (law)">evidentiary</a> privilege.<sup id="cite_ref-ACS_40-0" class="reference"><a href="#cite_note-ACS-40"><span>[</span>40<span>]</span></a></sup> Before the <a href="/wiki/September_11_attacks" title="September 11 attacks">September 11 attacks</a>, use of the privilege had been rare, but increasing in frequency.<sup id="cite_ref-41" class="reference"><a href="#cite_note-41"><span>[</span>41<span>]</span></a></sup> Since 2001, the government has asserted the privilege in more cases and at earlier stages of the litigation, thus in some instances causing dismissal of the suits before reaching the merits of the claims, as in the <a href="/wiki/United_States_Court_of_Appeals_for_the_Ninth_Circuit" title="United States Court of Appeals for the Ninth Circuit">Ninth Circuit</a>'s ruling in <i><a href="/wiki/Mohamed_et_al._v._Jeppesen_Dataplan,_Inc." title="Mohamed et al. v. Jeppesen Dataplan, Inc.">Mohamed v. Jeppesen Dataplan</a></i>.<sup id="cite_ref-ACS_40-1" class="reference"><a href="#cite_note-ACS-40"><span>[</span>40<span>]</span></a></sup><sup id="cite_ref-42" class="reference"><a href="#cite_note-42"><span>[</span>42<span>]</span></a></sup><sup id="cite_ref-43" class="reference"><a href="#cite_note-43"><span>[</span>43<span>]</span></a></sup> Critics of the privilege claim its use has become a tool for the government to cover up illegal or embarrassing government actions.<sup id="cite_ref-44" class="reference"><a href="#cite_note-44"><span>[</span>44<span>]</span></a></sup><sup id="cite_ref-45" class="reference"><a href="#cite_note-45"><span>[</span>45<span>]</span></a></sup></p>
+<h4><span class="mw-headline" id="Legislative_facilitator">Legislative facilitator</span></h4>
+<p>The Constitution's <a href="/wiki/Ineligibility_Clause" title="Ineligibility Clause">Ineligibility Clause</a> prevents the President (and all other executive officers) from simultaneously being a member of <a href="/wiki/United_States_Congress" title="United States Congress">Congress</a>. Therefore, the president cannot directly introduce <a href="/wiki/Bill_(proposed_law)" title="Bill (proposed law)" class="mw-redirect">legislative proposals</a> for consideration in Congress. However, the president can take an indirect role in shaping legislation, especially if the president's political party has a majority in one or both houses of Congress. For example, the president or other officials of the executive branch may draft legislation and then ask senators or representatives to introduce these drafts into Congress. The president can further influence the legislative branch through constitutionally mandated, periodic reports to Congress. These reports may be either written or oral, but today are given as the <a href="/wiki/State_of_the_Union_address" title="State of the Union address" class="mw-redirect">State of the Union address</a>, which often outlines the president's legislative proposals for the coming year.</p>
+<p>In the 20th century critics began charging that too many legislative and budgetary powers have slid into the hands of presidents that should belong to Congress. As the head of the executive branch, presidents control a vast array of <a href="/wiki/List_of_United_States_federal_agencies" title="List of United States federal agencies" class="mw-redirect">agencies</a> that can issue regulations with little oversight from Congress. One critic charged that presidents could appoint a "virtual army of 'czars' – each wholly unaccountable to Congress yet tasked with spearheading major policy efforts for the White House."<sup id="cite_ref-tws28sep08_46-0" class="reference"><a href="#cite_note-tws28sep08-46"><span>[</span>46<span>]</span></a></sup> Presidents have been criticized for making <a href="/wiki/Signing_statements" title="Signing statements" class="mw-redirect">signing statements</a> when signing congressional legislation about how they understand a bill or plan to execute it.<sup id="cite_ref-tws04oct08_47-0" class="reference"><a href="#cite_note-tws04oct08-47"><span>[</span>47<span>]</span></a></sup> This practice has been criticized by the <a href="/wiki/American_Bar_Association" title="American Bar Association">American Bar Association</a> as unconstitutional.<sup id="cite_ref-tws11nov301_48-0" class="reference"><a href="#cite_note-tws11nov301-48"><span>[</span>48<span>]</span></a></sup> Conservative commentator <a href="/wiki/George_Will" title="George Will">George Will</a> wrote of an "increasingly swollen executive branch" and "the eclipse of Congress."<sup id="cite_ref-tws28sep_49-0" class="reference"><a href="#cite_note-tws28sep-49"><span>[</span>49<span>]</span></a></sup></p>
+<p>According to <a href="/wiki/Article_Two_of_the_United_States_Constitution#Clause_2:_Calling_Congress_into_extraordinary_session.3B_adjourning_Congress" title="Article Two of the United States Constitution">Article II, Section 3, Clause 2</a> of the Constitution, the president may convene either or both houses of Congress. If both houses cannot agree on a date of adjournment, the president may appoint a date for Congress to adjourn.</p>
+<h3><span class="mw-headline" id="Ceremonial_roles">Ceremonial roles</span></h3>
+<div class="thumb tright">
+<div class="thumbinner" style="width:222px;"><a href="/wiki/File:Wilson_opening_day_1916.jpg" class="image"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Wilson_opening_day_1916.jpg/220px-Wilson_opening_day_1916.jpg" width="220" height="155" class="thumbimage" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Wilson_opening_day_1916.jpg/330px-Wilson_opening_day_1916.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Wilson_opening_day_1916.jpg/440px-Wilson_opening_day_1916.jpg 2x" data-file-width="728" data-file-height="512" /></a>
+<div class="thumbcaption">
+<div class="magnify"><a href="/wiki/File:Wilson_opening_day_1916.jpg" class="internal" title="Enlarge"></a></div>
+President <a href="/wiki/Woodrow_Wilson" title="Woodrow Wilson">Woodrow Wilson</a> throwing out the ceremonial first ball on <a href="/wiki/Opening_Day" title="Opening Day">Opening Day</a>, 1916</div>
+</div>
+</div>
+<p>As head of state, the president can fulfill traditions established by previous presidents. <a href="/wiki/William_Howard_Taft" title="William Howard Taft">William Howard Taft</a> started the tradition of throwing out the <a href="/wiki/Ceremonial_first_pitch" title="Ceremonial first pitch">ceremonial first pitch</a> in 1910 at <a href="/wiki/Griffith_Stadium" title="Griffith Stadium">Griffith Stadium</a>, Washington, D.C., on the <a href="/wiki/Minnesota_Twins#Washington_Nationals.2FSenators:_1901.E2.80.931960" title="Minnesota Twins">Washington Senators</a>' <a href="/wiki/Opening_Day" title="Opening Day">Opening Day</a>. Every president since Taft, except for <a href="/wiki/Jimmy_Carter" title="Jimmy Carter">Jimmy Carter</a>, threw out at least one ceremonial first ball or pitch for Opening Day, the <a href="/wiki/Major_League_Baseball_All-Star_Game" title="Major League Baseball All-Star Game">All-Star Game</a>, or the <a href="/wiki/World_Series" title="World Series">World Series</a>, usually with much fanfare.<sup id="cite_ref-50" class="reference"><a href="#cite_note-50"><span>[</span>50<span>]</span></a></sup></p>
+<p>Other presidential traditions are associated with American holidays. <a href="/wiki/Rutherford_B._Hayes" title="Rutherford B. Hayes">Rutherford B. Hayes</a> began in 1878 the first White House <a href="/wiki/White_House_Easter_Egg_Roll" title="White House Easter Egg Roll" class="mw-redirect">egg rolling</a> for local children.<sup id="cite_ref-51" class="reference"><a href="#cite_note-51"><span>[</span>51<span>]</span></a></sup> Beginning in 1947 during the <a href="/wiki/Harry_S._Truman" title="Harry S. Truman">Harry S. Truman</a> administration, every <a href="/wiki/Thanksgiving_(United_States)" title="Thanksgiving (United States)">Thanksgiving</a> the president is presented with a live domestic turkey during the annual <a href="/wiki/National_Thanksgiving_Turkey_Presentation" title="National Thanksgiving Turkey Presentation">national thanksgiving turkey presentation</a> held at the White House. Since 1989, when the custom of "pardoning" the turkey was formalized by <a href="/wiki/George_H._W._Bush" title="George H. W. Bush">George H. W. Bush</a>, the turkey has been taken to a farm where it will live out the rest of its natural life.<sup id="cite_ref-Hesse_52-0" class="reference"><a href="#cite_note-Hesse-52"><span>[</span>52<span>]</span></a></sup></p>
+<p>Presidential traditions also involve the president's role as head of government. Many outgoing presidents since <a href="/wiki/James_Buchanan" title="James Buchanan">James Buchanan</a> traditionally give advice to their successor during the <a href="/wiki/United_States_presidential_transition" title="United States presidential transition">presidential transition</a>.<sup id="cite_ref-53" class="reference"><a href="#cite_note-53"><span>[</span>53<span>]</span></a></sup> <a href="/wiki/Ronald_Reagan" title="Ronald Reagan">Ronald Reagan</a> and his successors have also left a private message on the desk of the Oval Office on <a href="/wiki/Inauguration_Day" title="Inauguration Day" class="mw-redirect">Inauguration Day</a> for the incoming president.<sup id="cite_ref-54" class="reference"><a href="#cite_note-54"><span>[</span>54<span>]</span></a></sup></p>
+<table class="mbox-small" style="border:1px solid #aaa;background-color:#f9f9f9;">
+<tr>
+<td class="mbox-image">
+<div class="center">
+<div class="floatnone"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/8/87/Gnome-mime-sound-openclipart.svg/50px-Gnome-mime-sound-openclipart.svg.png" width="50" height="50" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/8/87/Gnome-mime-sound-openclipart.svg/75px-Gnome-mime-sound-openclipart.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/87/Gnome-mime-sound-openclipart.svg/100px-Gnome-mime-sound-openclipart.svg.png 2x" data-file-width="160" data-file-height="160" /></div>
+</div>
+</td>
+<td class="mbox-text plainlist" style="line-height:1.1em">
+<div class="haudio">
+<div style="padding:2px 0"><a href="/wiki/File:Four_ruffles_and_flourishes,_hail_to_the_chief_(long_version).ogg" title="File:Four ruffles and flourishes, hail to the chief (long version).ogg">Four ruffles and flourishes and 'Hail to the Chief' (long version)</a></div>
+<div style="padding-right:4px">
+<div class="mediaContainer" style="position:relative;display:block;width:220px"><audio id="mwe_player_0" style="width:220px" poster="//bits.wikimedia.org/static-1.25wmf8/resources/assets/file-type-icons/fileicon-ogg.png" controls="" preload="none" class="kskin" data-durationhint="59.062857142857" data-startoffset="0" data-mwtitle="Four_ruffles_and_flourishes,_hail_to_the_chief_(long_version).ogg" data-mwprovider="wikimediacommons"><source src="//upload.wikimedia.org/wikipedia/commons/7/7c/Four_ruffles_and_flourishes%2C_hail_to_the_chief_%28long_version%29.ogg" type="audio/ogg; codecs=&quot;vorbis&quot;" data-title="Original Ogg file (139 kbps)" data-shorttitle="Ogg source" data-width="0" data-height="0" data-bandwidth="138977"></source>Sorry, your browser either has JavaScript disabled or does not have any supported player.<br />
+You can <a href="//upload.wikimedia.org/wikipedia/commons/7/7c/Four_ruffles_and_flourishes%2C_hail_to_the_chief_%28long_version%29.ogg">download the clip</a> or <a href="https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:TimedMediaHandler/Client_download">download a player</a> to play the clip in your browser.</audio></div>
+</div>
+<div class="description" style="padding:2px 0 0 0"></div>
+</div>
+<hr /></td>
+</tr>
+<tr>
+<td colspan="2" class="mbox-text" style="line-height:1.1em"><span style="font-size:smaller;"><i>Problems playing this file? See <a href="/wiki/Wikipedia:Media_help" title="Wikipedia:Media help">media help</a>.</i></span></td>
+</tr>
+</table>
+<p>During a state visit by a foreign head of state, the president typically hosts a <a href="/wiki/State_Arrival_Ceremony" title="State Arrival Ceremony">State Arrival Ceremony</a> held on the <a href="/wiki/South_Lawn" title="South Lawn" class="mw-redirect">South Lawn</a>, a custom begun by <a href="/wiki/John_F._Kennedy" title="John F. Kennedy">John F. Kennedy</a> in 1961.<sup id="cite_ref-55" class="reference"><a href="#cite_note-55"><span>[</span>55<span>]</span></a></sup> This is followed by a <a href="/wiki/White_House_State_Dinner" title="White House State Dinner" class="mw-redirect">state dinner</a> given by the president which is held in the <a href="/wiki/State_Dining_Room" title="State Dining Room">State Dining Room</a> later in the evening.<sup id="cite_ref-The_White_House_State_Dinner_56-0" class="reference"><a href="#cite_note-The_White_House_State_Dinner-56"><span>[</span>56<span>]</span></a></sup></p>
+<p>The modern presidency holds the president as one of the nation's premier celebrities. Some argue that images of the presidency have a tendency to be manipulated by administration <a href="/wiki/Public_relations" title="Public relations">public relations</a> officials as well as by presidents themselves. One critic described the presidency as "propagandized leadership" which has a "mesmerizing power surrounding the office."<sup id="cite_ref-tws11nov304_57-0" class="reference"><a href="#cite_note-tws11nov304-57"><span>[</span>57<span>]</span></a></sup> Administration public relations managers staged carefully crafted <a href="/wiki/Photo_op" title="Photo op">photo-ops</a> of smiling presidents with smiling crowds for television cameras.<sup id="cite_ref-tws11novjopkl_58-0" class="reference"><a href="#cite_note-tws11novjopkl-58"><span>[</span>58<span>]</span></a></sup> One critic wrote the image of <a href="/wiki/John_F._Kennedy" title="John F. Kennedy">John F. Kennedy</a> was described as carefully framed "in rich detail" which "drew on the power of myth" regarding the incident of <a href="/wiki/Motor_Torpedo_Boat_PT-109" title="Motor Torpedo Boat PT-109">PT 109</a><sup id="cite_ref-tws11novfddxs_59-0" class="reference"><a href="#cite_note-tws11novfddxs-59"><span>[</span>59<span>]</span></a></sup> and wrote that Kennedy understood how to use images to further his presidential ambitions.<sup id="cite_ref-tws11novfyyhhxs_60-0" class="reference"><a href="#cite_note-tws11novfyyhhxs-60"><span>[</span>60<span>]</span></a></sup> As a result, some political commentators have opined that American voters have unrealistic expectations of presidents: voters expect a president to "drive the economy, vanquish enemies, lead the free world, comfort tornado victims, heal the national soul and protect borrowers from hidden credit-card fees."<sup id="cite_ref-tws9novrfrff_61-0" class="reference"><a href="#cite_note-tws9novrfrff-61"><span>[</span>61<span>]</span></a></sup></p>
+<h3><span class="mw-headline" id="Critics_of_presidency.27s_evolution">Critics of presidency's evolution</span></h3>
+<div class="hatnote relarticle mainarticle">Main article: <a href="/wiki/Imperial_Presidency" title="Imperial Presidency">Imperial Presidency</a></div>
+<p>Most of the nation's <a href="/wiki/Founding_Fathers_of_the_United_States" title="Founding Fathers of the United States">Founding Fathers</a> expected the <a href="/wiki/United_States_Congress" title="United States Congress">Congress</a>, which was the first branch of government described in the <a href="/wiki/United_States_Constitution" title="United States Constitution">Constitution</a>, to be the dominant branch of government; they did not expect a strong executive.<sup id="cite_ref-tws9nov09_62-0" class="reference"><a href="#cite_note-tws9nov09-62"><span>[</span>62<span>]</span></a></sup> However, presidential power has shifted over time, which has resulted in claims that the modern presidency has become too powerful,<sup id="cite_ref-twsSEPnnxcvdf1_63-0" class="reference"><a href="#cite_note-twsSEPnnxcvdf1-63"><span>[</span>63<span>]</span></a></sup><sup id="cite_ref-twsSEPnn5454_64-0" class="reference"><a href="#cite_note-twsSEPnn5454-64"><span>[</span>64<span>]</span></a></sup> unchecked, unbalanced,<sup id="cite_ref-tws9nov07_65-0" class="reference"><a href="#cite_note-tws9nov07-65"><span>[</span>65<span>]</span></a></sup> and "monarchist" in nature.<sup id="cite_ref-tws9nov08_66-0" class="reference"><a href="#cite_note-tws9nov08-66"><span>[</span>66<span>]</span></a></sup> Critic <a href="/wiki/Dana_D._Nelson" title="Dana D. Nelson">Dana D. Nelson</a> believes presidents over the past thirty years have worked towards "undivided presidential control of the executive branch and its agencies."<sup id="cite_ref-twsSEPrt8jyh5_67-0" class="reference"><a href="#cite_note-twsSEPrt8jyh5-67"><span>[</span>67<span>]</span></a></sup> She criticizes proponents of the <a href="/wiki/Unitary_executive_theory" title="Unitary executive theory">unitary executive</a> for expanding "the many existing uncheckable executive powers – such as executive orders, decrees, memorandums, proclamations, national security directives and legislative signing statements – that already allow presidents to enact a good deal of foreign and domestic policy without aid, interference or consent from Congress."<sup id="cite_ref-twsSEPrt8jyh5_67-1" class="reference"><a href="#cite_note-twsSEPrt8jyh5-67"><span>[</span>67<span>]</span></a></sup> Activist <a href="/wiki/Bill_Wilson_(activist)" title="Bill Wilson (activist)">Bill Wilson</a> opined that the expanded presidency was "the greatest threat ever to individual freedom and democratic rule."<sup id="cite_ref-tws8nov06_68-0" class="reference"><a href="#cite_note-tws8nov06-68"><span>[</span>68<span>]</span></a></sup></p>
+<h2><span class="mw-headline" id="Selection_process">Selection process</span></h2>
+<div class="thumb tright">
+<div class="thumbinner" style="width:172px;"><a href="/wiki/File:Gilbert_Stuart_Williamstown_Portrait_of_George_Washington.jpg" class="image"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/b/b6/Gilbert_Stuart_Williamstown_Portrait_of_George_Washington.jpg/170px-Gilbert_Stuart_Williamstown_Portrait_of_George_Washington.jpg" width="170" height="203" class="thumbimage" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/b/b6/Gilbert_Stuart_Williamstown_Portrait_of_George_Washington.jpg/255px-Gilbert_Stuart_Williamstown_Portrait_of_George_Washington.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/b/b6/Gilbert_Stuart_Williamstown_Portrait_of_George_Washington.jpg/340px-Gilbert_Stuart_Williamstown_Portrait_of_George_Washington.jpg 2x" data-file-width="920" data-file-height="1101" /></a>
+<div class="thumbcaption">
+<div class="magnify"><a href="/wiki/File:Gilbert_Stuart_Williamstown_Portrait_of_George_Washington.jpg" class="internal" title="Enlarge"></a></div>
+<a href="/wiki/George_Washington" title="George Washington">George Washington</a>, the first President of the United States</div>
+</div>
+</div>
+<h3><span class="mw-headline" id="Eligibility">Eligibility</span></h3>
+<div class="hatnote relarticle mainarticle">Main article: <a href="/wiki/Age_of_candidacy" title="Age of candidacy">Age of candidacy</a></div>
+<p><a href="/wiki/Article_Two_of_the_United_States_Constitution#Clause_5:_Qualifications_for_office" title="Article Two of the United States Constitution">Article II, Section 1, Clause 5</a> of the <a href="/wiki/United_States_Constitution" title="United States Constitution">Constitution</a> sets the requirements to hold office. A president must:</p>
+<ul>
+<li>be a <a href="/wiki/Natural-born-citizen_clause" title="Natural-born-citizen clause">natural-born citizen</a> of the United States;<sup id="cite_ref-69" class="reference"><a href="#cite_note-69"><span>[</span>note 1<span>]</span></a></sup></li>
+<li>be at least thirty-five years old;</li>
+<li>have been a permanent <a href="/wiki/Residency_(domicile)#United_States" title="Residency (domicile)">resident in the United States</a> for at least fourteen years.</li>
+</ul>
+<p>A person who meets the above qualifications is still disqualified from holding the office of president under any of the following conditions:</p>
+<ul>
+<li>Under the <a href="/wiki/Twenty-second_Amendment_to_the_United_States_Constitution" title="Twenty-second Amendment to the United States Constitution">Twenty-second Amendment</a>, no person can be elected president more than twice. The amendment also specifies that if any eligible person who serves as president or acting president for more than two years of a term for which some other eligible person was elected president, the former can only be elected president once. Scholars disagree whether anyone no longer eligible to be elected president could be elected <a href="/wiki/Vice_President_of_the_United_States" title="Vice President of the United States">vice president</a>, pursuant to the qualifications set out under the <a href="/wiki/Twelfth_Amendment_to_the_United_States_Constitution" title="Twelfth Amendment to the United States Constitution">Twelfth Amendment</a>.<sup id="cite_ref-70" class="reference"><a href="#cite_note-70"><span>[</span>69<span>]</span></a></sup></li>
+<li>Under <a href="/wiki/Article_One_of_the_United_States_Constitution#Clause_7:_Judgment_in_cases_of_impeachment.3B_Punishment_on_conviction" title="Article One of the United States Constitution">Article I, Section 3, Clause 7</a>, upon conviction in impeachment cases, the Senate has the option of disqualifying convicted individuals from holding other federal offices, including the presidency.<sup id="cite_ref-71" class="reference"><a href="#cite_note-71"><span>[</span>70<span>]</span></a></sup></li>
+<li>Under <a href="/wiki/Fourteenth_Amendment_to_the_United_States_Constitution#Participants_in_rebellion" title="Fourteenth Amendment to the United States Constitution">Section 3 of the Fourteenth Amendment</a>, no person who swore an oath to support the Constitution, and later rebelled against the United States, can become president. However, this disqualification can be lifted by a two-thirds vote of each house of Congress.</li>
+</ul>
+<h3><span class="mw-headline" id="Campaigns_and_nomination">Campaigns and nomination</span></h3>
+<div class="hatnote relarticle mainarticle">Main articles: <a href="/wiki/United_States_presidential_primary" title="United States presidential primary">United States presidential primary</a>, <a href="/wiki/United_States_presidential_nominating_convention" title="United States presidential nominating convention">United States presidential nominating convention</a>, <a href="/wiki/United_States_presidential_election_debates" title="United States presidential election debates">United States presidential election debates</a> and <a href="/wiki/United_States_presidential_election" title="United States presidential election">United States presidential election</a></div>
+<p>The modern presidential campaign begins before the <a href="/wiki/United_States_presidential_primary" title="United States presidential primary">primary elections</a>, which the two major political parties use to clear the field of candidates before their <a href="/wiki/United_States_presidential_nominating_convention" title="United States presidential nominating convention">national nominating conventions</a>, where the most successful candidate is made the party's nominee for president. Typically, the party's presidential candidate chooses a vice presidential nominee, and this choice is <a href="/wiki/Rubber_stamp_(politics)" title="Rubber stamp (politics)">rubber-stamped</a> by the convention.</p>
+<p>Nominees participate in <a href="/wiki/United_States_presidential_election_debates" title="United States presidential election debates">nationally televised debates</a>, and while the debates are usually restricted to the <a href="/wiki/Democratic_Party_(United_States)" title="Democratic Party (United States)">Democratic</a> and <a href="/wiki/Republican_Party_(United_States)" title="Republican Party (United States)">Republican</a> nominees, third party candidates may be invited, such as <a href="/wiki/Ross_Perot" title="Ross Perot">Ross Perot</a> in the 1992 debates. Nominees campaign across the country to explain their views, convince voters and solicit contributions. Much of the modern electoral process is concerned with winning <a href="/wiki/Swing_state" title="Swing state">swing states</a> through frequent visits and <a href="/wiki/Mass_media" title="Mass media">mass media</a> advertising drives.</p>
+<h3><span class="mw-headline" id="Election_and_oath">Election and oath</span></h3>
+<div class="hatnote relarticle mainarticle">Main articles: <a href="/wiki/Electoral_College_(United_States)" title="Electoral College (United States)">Electoral College (United States)</a> and <a href="/wiki/Oath_of_office_of_the_President_of_the_United_States" title="Oath of office of the President of the United States">Oath of office of the President of the United States</a></div>
+<div class="thumb tright">
+<div class="thumbinner" style="width:222px;"><a href="/wiki/File:Electoral_College_2012.svg" class="image"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Electoral_College_2012.svg/220px-Electoral_College_2012.svg.png" width="220" height="128" class="thumbimage" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Electoral_College_2012.svg/330px-Electoral_College_2012.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Electoral_College_2012.svg/440px-Electoral_College_2012.svg.png 2x" data-file-width="1020" data-file-height="593" /></a>
+<div class="thumbcaption">
+<div class="magnify"><a href="/wiki/File:Electoral_College_2012.svg" class="internal" title="Enlarge"></a></div>
+A map of the <a href="/wiki/United_States" title="United States">United States</a> showing the number of electoral votes allocated to each state following <a href="/wiki/Electoral_College_(United_States)#Apportionment" title="Electoral College (United States)">reapportionment</a> based on the <a href="/wiki/2010_United_States_Census" title="2010 United States Census">2010 census</a>; 270 electoral votes are required for a majority out of 538 overall</div>
+</div>
+</div>
+<p>The president is elected <a href="/wiki/Indirect_election" title="Indirect election">indirectly</a>. A number of electors, collectively known as the <a href="/wiki/Electoral_College_(United_States)" title="Electoral College (United States)">Electoral College</a>, officially select the president. On <a href="/wiki/Election_Day_(United_States)" title="Election Day (United States)">Election Day</a>, voters in each of the states and the <a href="/wiki/Washington,_D.C." title="Washington, D.C.">District of Columbia</a> cast ballots for these electors. Each state is allocated a number of electors, equal to the size of its delegation in both Houses of Congress combined. Generally, the ticket that wins the most votes in a state wins all of that state's electoral votes and thus has its slate of electors chosen to vote in the Electoral College.</p>
+<p>The winning slate of electors meet at its state's capital on the first Monday after the second Wednesday in December, about six weeks after the election, to vote. They then send a record of that vote to Congress. The vote of the electors is opened by the sitting vice president—acting in his capacity as <a href="/wiki/President_of_the_Senate#United_States" title="President of the Senate">President of the Senate</a>—and read aloud to a <a href="/wiki/Joint_session_of_the_United_States_Congress" title="Joint session of the United States Congress">joint session</a> of the incoming Congress, which was elected at the same time as the president.</p>
+<p>Pursuant to the <a href="/wiki/Twentieth_Amendment_to_the_United_States_Constitution" title="Twentieth Amendment to the United States Constitution">Twentieth Amendment</a>, the president's term of office begins at noon on January 20 of the year following the election. This date, known as <a href="/wiki/United_States_presidential_inauguration" title="United States presidential inauguration">Inauguration Day</a>, marks the beginning of the four-year terms of both the president and the <a href="/wiki/Vice_President_of_the_United_States" title="Vice President of the United States">vice president</a>. Before executing the powers of the office, a president is constitutionally required to take the <a href="/wiki/Oath_of_office_of_the_President_of_the_United_States" title="Oath of office of the President of the United States">presidential oath</a>:</p>
+<blockquote class="templatequote">
+<p>I do solemnly swear (or <a href="/wiki/Affirmation_in_law" title="Affirmation in law">affirm</a>) that I will faithfully execute the Office of President of the United States, and will to the best of my Ability, preserve, protect and defend the Constitution of the United States.<sup id="cite_ref-72" class="reference"><a href="#cite_note-72"><span>[</span>71<span>]</span></a></sup></p>
+</blockquote>
+<p>Although not required, presidents have traditionally palmed a <a href="/wiki/Bible" title="Bible">Bible</a> while swearing the oath and have added, "So help me God!" to the end of the oath.<sup id="cite_ref-73" class="reference"><a href="#cite_note-73"><span>[</span>72<span>]</span></a></sup> Further, although the oath may be administered by any person authorized by law to administer oaths, presidents are traditionally sworn in by the <a href="/wiki/Chief_Justice_of_the_United_States" title="Chief Justice of the United States">Chief Justice of the United States</a>.</p>
+<h3><span class="mw-headline" id="Tenure_and_term_limits">Tenure and term limits</span></h3>
+<div class="thumb tright">
+<div class="thumbinner" style="width:172px;"><a href="/wiki/File:FDR_in_1933.jpg" class="image"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/b/b8/FDR_in_1933.jpg/170px-FDR_in_1933.jpg" width="170" height="200" class="thumbimage" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/b/b8/FDR_in_1933.jpg/255px-FDR_in_1933.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/b/b8/FDR_in_1933.jpg/340px-FDR_in_1933.jpg 2x" data-file-width="2488" data-file-height="2928" /></a>
+<div class="thumbcaption">
+<div class="magnify"><a href="/wiki/File:FDR_in_1933.jpg" class="internal" title="Enlarge"></a></div>
+<a href="/wiki/Franklin_D._Roosevelt" title="Franklin D. Roosevelt">Franklin D. Roosevelt</a> was elected to four terms before the adoption of the Twenty-second Amendment</div>
+</div>
+</div>
+<p>The term of office for president and vice president is four years. George Washington, the first president, set an unofficial precedent of serving only two terms, which subsequent presidents followed until 1940. Before <a href="/wiki/Franklin_D._Roosevelt" title="Franklin D. Roosevelt">Franklin D. Roosevelt</a>, attempts at a third term were encouraged by supporters of <a href="/wiki/Ulysses_S._Grant" title="Ulysses S. Grant">Ulysses S. Grant</a> and <a href="/wiki/Theodore_Roosevelt" title="Theodore Roosevelt">Theodore Roosevelt</a>; neither of these attempts succeeded. In 1940, Franklin D. Roosevelt declined to seek a third term, but allowed his political party to "<a href="/wiki/Draft_(politics)" title="Draft (politics)">draft</a>" him as its presidential candidate and was subsequently elected to a third term. In 1941, the United States entered <a href="/wiki/World_War_II" title="World War II">World War II</a>, leading voters to elect Roosevelt to a fourth term in 1944.</p>
+<p>After the war, and in response to Roosevelt being elected to third and fourth terms, the <a href="/wiki/Twenty-second_Amendment_to_the_United_States_Constitution" title="Twenty-second Amendment to the United States Constitution">Twenty-second Amendment</a> was adopted. The amendment bars anyone from being elected president more than twice, or once if that person served more than half of another president's term. <a href="/wiki/Harry_S._Truman" title="Harry S. Truman">Harry S. Truman</a>, who was president when the amendment was adopted, and so by the amendment's provisions exempt from its limitation, also briefly sought a third (a second full) term before withdrawing from the <a href="/wiki/United_States_presidential_election,_1952" title="United States presidential election, 1952">1952 election</a>.</p>
+<p>Since the amendment's adoption, four presidents have served two full terms: <a href="/wiki/Dwight_D._Eisenhower" title="Dwight D. Eisenhower">Dwight D. Eisenhower</a>, <a href="/wiki/Ronald_Reagan" title="Ronald Reagan">Ronald Reagan</a>, <a href="/wiki/Bill_Clinton" title="Bill Clinton">Bill Clinton</a>, and <a href="/wiki/George_W._Bush" title="George W. Bush">George W. Bush</a>. <a href="/wiki/Barack_Obama" title="Barack Obama">Barack Obama</a> has been elected to a second term. <a href="/wiki/Jimmy_Carter" title="Jimmy Carter">Jimmy Carter</a> and <a href="/wiki/George_H._W._Bush" title="George H. W. Bush">George H. W. Bush</a> sought a second term, but were defeated. <a href="/wiki/Richard_Nixon" title="Richard Nixon">Richard Nixon</a> was elected to a second term, but resigned before completing it. <a href="/wiki/Lyndon_B._Johnson" title="Lyndon B. Johnson">Lyndon B. Johnson</a> was the only president under the amendment to be eligible to serve more than two terms in total, having served for only fourteen months following <a href="/wiki/Assassination_of_John_F._Kennedy" title="Assassination of John F. Kennedy">John F. Kennedy's assassination</a>. However, Johnson <a href="/wiki/Democratic_Party_(United_States)_presidential_primaries,_1968#Johnson_withdraws" title="Democratic Party (United States) presidential primaries, 1968" class="mw-redirect">withdrew from the 1968 Democratic Primary</a>, surprising many Americans. <a href="/wiki/Gerald_Ford" title="Gerald Ford">Gerald Ford</a> sought a full term, after serving out the last two years and five months of Nixon's second term, but was not elected.</p>
+<h3><span class="mw-headline" id="Vacancy_or_disability">Vacancy or disability</span></h3>
+<div class="hatnote boilerplate seealso">See also: <a href="/wiki/Twenty-fifth_Amendment_to_the_United_States_Constitution" title="Twenty-fifth Amendment to the United States Constitution">Twenty-fifth Amendment to the United States Constitution</a>, <a href="/wiki/United_States_presidential_line_of_succession" title="United States presidential line of succession">United States presidential line of succession</a>, <a href="/wiki/Presidential_Succession_Act" title="Presidential Succession Act">Presidential Succession Act</a> and <a href="/wiki/Impeachment_in_the_United_States" title="Impeachment in the United States">Impeachment in the United States</a></div>
+<p>Vacancies in the office of president may arise under several possible circumstances: death, resignation and <a href="/wiki/Impeachment_in_the_United_States#Senate" title="Impeachment in the United States">removal from office</a>.</p>
+<p><a href="/wiki/Article_Two_of_the_United_States_Constitution#Section_4:_Impeachment" title="Article Two of the United States Constitution">Article II, Section 4</a> of the Constitution allows the <a href="/wiki/United_States_House_of_Representatives" title="United States House of Representatives">House of Representatives</a> to impeach high federal officials, including the president, for "treason, bribery, or other high crimes and misdemeanors." <a href="/wiki/Article_One_of_the_United_States_Constitution#Clause_6:_Trial_of_Impeachments" title="Article One of the United States Constitution">Article I, Section 3, Clause 6</a> gives the Senate the power to remove impeached officials from office, given a two-thirds vote to convict. The House has thus far impeached two presidents: <a href="/wiki/Impeachment_of_Andrew_Johnson" title="Impeachment of Andrew Johnson">Andrew Johnson</a> in 1868 and <a href="/wiki/Impeachment_of_Bill_Clinton" title="Impeachment of Bill Clinton">Bill Clinton</a> in 1998. Neither was subsequently convicted by the Senate; however, Johnson was acquitted by just one vote.</p>
+<p>Under Section 3 of the Twenty-fifth Amendment, the president may transfer the presidential powers and duties to the vice president, who then becomes <a href="/wiki/Acting_President_of_the_United_States" title="Acting President of the United States">acting president</a>, by transmitting a statement to the <a href="/wiki/Speaker_of_the_United_States_House_of_Representatives" title="Speaker of the United States House of Representatives">Speaker of the House</a> and the <a href="/wiki/President_pro_tempore_of_the_United_States_Senate" title="President pro tempore of the United States Senate">president <i>pro tempore</i> of the Senate</a> stating the reasons for the transfer. The president resumes the discharge of the presidential powers and duties when he transmits, to those two officials, a written declaration stating that resumption. This transfer of power may occur for any reason the president considers appropriate; in 2002 and again in 2007, President <a href="/wiki/George_W._Bush" title="George W. Bush">George W. Bush</a> briefly transferred presidential authority to Vice President <a href="/wiki/Dick_Cheney" title="Dick Cheney">Dick Cheney</a>. In both cases, this was done to accommodate a medical procedure which required Bush to be sedated; both times, Bush returned to duty later the same day.<sup id="cite_ref-74" class="reference"><a href="#cite_note-74"><span>[</span>73<span>]</span></a></sup></p>
+<p>Under Section 4 of the Twenty-fifth Amendment, the vice president, in conjunction with a majority of the <a href="/wiki/Cabinet_of_the_United_States" title="Cabinet of the United States">Cabinet</a>, may transfer the presidential powers and duties from the president to the vice president by transmitting a written declaration to the Speaker of the House and the president <i>pro tempore</i> of the Senate that the president is unable to discharge the presidential powers and duties. If this occurs, then the vice president will assume the presidential powers and duties as acting president; however, the president can declare that no such inability exists and resume the discharge of the presidential powers and duties. If the vice president and Cabinet contest this claim, it is up to Congress, which must meet within two days if not already in session, to decide the merit of the claim.</p>
+<p>The United States Constitution mentions the resignation of the president but does not regulate the form of such a resignation or the conditions for its validity. Pursuant to federal law, the only valid evidence of the president's resignation is a written instrument to that effect, signed by the president and delivered to the office of the <a href="/wiki/United_States_Secretary_of_State" title="United States Secretary of State">Secretary of State</a>.<sup id="cite_ref-75" class="reference"><a href="#cite_note-75"><span>[</span>74<span>]</span></a></sup> This has only occurred once, when <a href="/wiki/Richard_Nixon" title="Richard Nixon">Richard Nixon</a> delivered a letter to <a href="/wiki/Henry_Kissinger" title="Henry Kissinger">Henry Kissinger</a> to that effect.</p>
+<p>The Constitution states that the vice president becomes president upon the removal from office, death or resignation of the preceding president. If the offices of president and vice president both are either vacant or have a disabled holder of that office, the next officer in the presidential line of succession, the Speaker of the House, becomes acting president. The line then extends to the president pro tempore of the Senate, followed by every member of the Cabinet <a href="/wiki/United_States_presidential_line_of_succession" title="United States presidential line of succession">in a set order</a>. <a href="/wiki/Special_election" title="Special election" class="mw-redirect">Special elections</a> are never held for the office of president.</p>
+<h2><span class="mw-headline" id="Compensation">Compensation</span></h2>
+<table class="wikitable" style="float:right; margin:1ex 0 1ex 1ex;">
+<caption><b>Presidential pay history</b></caption>
+<tr style="text-align:center;">
+<th>Date established</th>
+<th>Salary</th>
+<th>Salary in 2012
+<p>dollars</p>
+</th>
+</tr>
+<tr>
+<td>September 24, 1789</td>
+<td style="text-align:right;">$25,000</td>
+<td style="text-align:right;">$673,451</td>
+</tr>
+<tr>
+<td>March 3, 1873</td>
+<td style="text-align:right;">$50,000</td>
+<td style="text-align:right;">$992,777</td>
+</tr>
+<tr>
+<td>March 4, 1909</td>
+<td style="text-align:right;">$75,000</td>
+<td style="text-align:right;">$1,954,850</td>
+</tr>
+<tr>
+<td>January 19, 1949</td>
+<td style="text-align:right;">$100,000</td>
+<td style="text-align:right;">$967,315</td>
+</tr>
+<tr>
+<td>January 20, 1969</td>
+<td style="text-align:right;">$200,000</td>
+<td style="text-align:right;">$1,254,610</td>
+</tr>
+<tr>
+<td>January 20, 2001</td>
+<td style="text-align:right;">$400,000</td>
+<td style="text-align:right;">$519,979</td>
+</tr>
+<tr>
+<td colspan="3" style="text-align:center;">Sources:<sup id="cite_ref-salary_history_76-0" class="reference"><a href="#cite_note-salary_history-76"><span>[</span>75<span>]</span></a></sup><sup id="cite_ref-dollar_calc_77-0" class="reference"><a href="#cite_note-dollar_calc-77"><span>[</span>76<span>]</span></a></sup><sup id="cite_ref-Inflation_Calculator_78-0" class="reference"><a href="#cite_note-Inflation_Calculator-78"><span>[</span>77<span>]</span></a></sup></td>
+</tr>
+</table>
+<p>Since 2001, the president has earned a $400,000 annual salary, along with a $50,000 annual expense account, a $100,000 nontaxable travel account, and $19,000 for entertainment.<sup id="cite_ref-salary_details_79-0" class="reference"><a href="#cite_note-salary_details-79"><span>[</span>78<span>]</span></a></sup><sup id="cite_ref-salaries_of_federal_officials_80-0" class="reference"><a href="#cite_note-salaries_of_federal_officials-80"><span>[</span>79<span>]</span></a></sup> The most recent raise in salary was approved by Congress and President <a href="/wiki/Bill_Clinton" title="Bill Clinton">Bill Clinton</a> in 1999 and went into effect in 2001.</p>
+<p>The <a href="/wiki/White_House" title="White House">White House</a> in <a href="/wiki/Washington,_D.C." title="Washington, D.C.">Washington, D.C.</a>, serves as the official place of residence for the president; he is entitled to use its staff and facilities, including medical care, recreation, housekeeping, and security services. The government pays for state dinners and other official functions, but the president pays for dry cleaning and food that he, his family, and personal guests consume; the high food bill often amazes new residents.<sup id="cite_ref-bumiller200901_81-0" class="reference"><a href="#cite_note-bumiller200901-81"><span>[</span>80<span>]</span></a></sup> Naval Support Facility Thurmont, popularly known as <a href="/wiki/Camp_David" title="Camp David">Camp David</a>, is a mountain-based military camp in <a href="/wiki/Frederick_County,_Maryland" title="Frederick County, Maryland">Frederick County, Maryland</a>, used as a country retreat and for high alert protection of the president and his guests. <a href="/wiki/Blair_House" title="Blair House">Blair House</a>, located next to the <a href="/wiki/Eisenhower_Executive_Office_Building" title="Eisenhower Executive Office Building">Eisenhower Executive Office Building</a> at the White House Complex and <a href="/wiki/Lafayette_Park_(Washington)" title="Lafayette Park (Washington)" class="mw-redirect">Lafayette Park</a>, is a complex of four connected townhouses exceeding 70,000 square feet (6,500&#160;m<sup>2</sup>) of floor space which serves as the president's official guest house and as a secondary residence for the president if needed.<sup id="cite_ref-82" class="reference"><a href="#cite_note-82"><span>[</span>81<span>]</span></a></sup></p>
+<p>For ground travel, the president uses the <a href="/wiki/Presidential_state_car_(United_States)" title="Presidential state car (United States)">presidential state car</a>, which is an armored <a href="/wiki/Limousine" title="Limousine">limousine</a> built on a heavily modified <a href="/wiki/Cadillac" title="Cadillac">Cadillac</a>-based <a href="/wiki/Chassis" title="Chassis">chassis</a>.<sup id="cite_ref-USSSPRL_83-0" class="reference"><a href="#cite_note-USSSPRL-83"><span>[</span>82<span>]</span></a></sup> One of two identical <a href="/wiki/Boeing_VC-25" title="Boeing VC-25">Boeing VC-25</a> aircraft, which are extensively modified versions of <a href="/wiki/Boeing_747" title="Boeing 747">Boeing 747</a>-200B airliners, serve as long distance travel for the president and are referred to as <i><a href="/wiki/Air_Force_One" title="Air Force One">Air Force One</a></i> while the president is on board (although any U.S. Air Force aircraft the President is aboard is designated as "Air Force One" for the duration of the flight). In-country trips are typically handled with just one of the two planes while overseas trips are handled with both, one primary and one backup. Any civilian aircraft the President is aboard is designated <a href="/wiki/Executive_One" title="Executive One">Executive One</a> for the flight.<sup id="cite_ref-af1_84-0" class="reference"><a href="#cite_note-af1-84"><span>[</span>83<span>]</span></a></sup><sup id="cite_ref-85" class="reference"><a href="#cite_note-85"><span>[</span>84<span>]</span></a></sup> The president also has a fleet of thirty-five <a href="/wiki/United_States_Marine_Corps" title="United States Marine Corps">U.S. Marine Corps</a> helicopters at his disposal of varying models, designated <i><a href="/wiki/Marine_One" title="Marine One">Marine One</a></i> when the president is aboard any particular one in the fleet. Flights are typically handled with as many as five helicopters all flying together and frequently swapping positions as to disguise which helicopter the President is actually aboard to any would-be threats.</p>
+<p>The <a href="/wiki/United_States_Secret_Service" title="United States Secret Service">U.S. Secret Service</a> is charged with protecting the sitting president and the <a href="/wiki/First_Family_of_the_United_States" title="First Family of the United States" class="mw-redirect">first family</a>. As part of their protection, presidents, <a href="/wiki/First_Lady_of_the_United_States" title="First Lady of the United States">first ladies</a>, their children and other immediate family members, and other prominent persons and locations are assigned <a href="/wiki/Secret_Service_codename" title="Secret Service codename">Secret Service codenames</a>.<sup id="cite_ref-junior_86-0" class="reference"><a href="#cite_note-junior-86"><span>[</span>85<span>]</span></a></sup> The use of such names was originally for security purposes and dates to a time when sensitive electronic communications were not routinely <a href="/wiki/Encrypted" title="Encrypted" class="mw-redirect">encrypted</a>; today, the names simply serve for purposes of brevity, clarity, and tradition.<sup id="cite_ref-cbs-codenames_87-0" class="reference"><a href="#cite_note-cbs-codenames-87"><span>[</span>86<span>]</span></a></sup></p>
+<ul class="gallery mw-gallery-traditional" style="text-align: center;">
+<li class='gallerycaption'>Presidential amenities</li>
+<li class="gallerybox" style="width: 185px">
+<div style="width: 185px">
+<div class="thumb" style="width: 180px;">
+<div style="margin:19.5px auto;"><a href="/wiki/File:WhiteHouseSouthFacade.JPG" class="image"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/a/af/WhiteHouseSouthFacade.JPG/150px-WhiteHouseSouthFacade.JPG" width="150" height="111" data-file-width="1614" data-file-height="1196" /></a></div>
+</div>
+<div class="gallerytext">
+<p>The <a href="/wiki/White_House" title="White House">White House</a></p>
+</div>
+</div>
+</li>
+<li class="gallerybox" style="width: 185px">
+<div style="width: 185px">
+<div class="thumb" style="width: 180px;">
+<div style="margin:25px auto;"><a href="/wiki/File:Camp_David_1959.jpg" class="image"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Camp_David_1959.jpg/150px-Camp_David_1959.jpg" width="150" height="100" data-file-width="1841" data-file-height="1228" /></a></div>
+</div>
+<div class="gallerytext">
+<p><a href="/wiki/Camp_David" title="Camp David">Camp David</a></p>
+</div>
+</div>
+</li>
+<li class="gallerybox" style="width: 185px">
+<div style="width: 185px">
+<div class="thumb" style="width: 180px;">
+<div style="margin:18.5px auto;"><a href="/wiki/File:Blair_House_daylight.jpg" class="image"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/0/05/Blair_House_daylight.jpg/150px-Blair_House_daylight.jpg" width="150" height="113" data-file-width="2272" data-file-height="1704" /></a></div>
+</div>
+<div class="gallerytext">
+<p><a href="/wiki/Blair_House" title="Blair House">Blair House</a></p>
+</div>
+</div>
+</li>
+<li class="gallerybox" style="width: 185px">
+<div style="width: 185px">
+<div class="thumb" style="width: 180px;">
+<div style="margin:23.5px auto;"><a href="/wiki/File:GPA02-09_US_SecretService_press_release_2009_Limousine_Page_3_Image.jpg" class="image"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/8/89/GPA02-09_US_SecretService_press_release_2009_Limousine_Page_3_Image.jpg/150px-GPA02-09_US_SecretService_press_release_2009_Limousine_Page_3_Image.jpg" width="150" height="103" data-file-width="1264" data-file-height="872" /></a></div>
+</div>
+<div class="gallerytext">
+<p><a href="/wiki/Presidential_state_car_(United_States)" title="Presidential state car (United States)">Presidential state car</a></p>
+</div>
+</div>
+</li>
+<li class="gallerybox" style="width: 185px">
+<div style="width: 185px">
+<div class="thumb" style="width: 180px;">
+<div style="margin:15px auto;"><a href="/wiki/File:Air_Force_One_over_Mt._Rushmore.jpg" class="image"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/7/7d/Air_Force_One_over_Mt._Rushmore.jpg/149px-Air_Force_One_over_Mt._Rushmore.jpg" width="149" height="120" data-file-width="1900" data-file-height="1528" /></a></div>
+</div>
+<div class="gallerytext">
+<p><a href="/wiki/Air_Force_One" title="Air Force One">Air Force One</a></p>
+</div>
+</div>
+</li>
+<li class="gallerybox" style="width: 185px">
+<div style="width: 185px">
+<div class="thumb" style="width: 180px;">
+<div style="margin:15px auto;"><a href="/wiki/File:Marine_One_(1970).jpg" class="image"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/Marine_One_%281970%29.jpg/150px-Marine_One_%281970%29.jpg" width="150" height="120" data-file-width="350" data-file-height="279" /></a></div>
+</div>
+<div class="gallerytext">
+<p><a href="/wiki/Marine_One" title="Marine One">Marine One</a></p>
+</div>
+</div>
+</li>
+</ul>
+<h2><span class="mw-headline" id="Post-presidency">Post-presidency</span></h2>
+<div class="thumb tright">
+<div class="thumbinner" style="width:222px;"><a href="/wiki/File:FordNixonBushReaganCarter.jpg" class="image"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/6/6c/FordNixonBushReaganCarter.jpg/220px-FordNixonBushReaganCarter.jpg" width="220" height="175" class="thumbimage" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/6/6c/FordNixonBushReaganCarter.jpg/330px-FordNixonBushReaganCarter.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/6/6c/FordNixonBushReaganCarter.jpg/440px-FordNixonBushReaganCarter.jpg 2x" data-file-width="706" data-file-height="560" /></a>
+<div class="thumbcaption">
+<div class="magnify"><a href="/wiki/File:FordNixonBushReaganCarter.jpg" class="internal" title="Enlarge"></a></div>
+Presidents <a href="/wiki/Gerald_Ford" title="Gerald Ford">Gerald Ford</a>, <a href="/wiki/Richard_Nixon" title="Richard Nixon">Richard Nixon</a>, <a href="/wiki/George_H._W._Bush" title="George H. W. Bush">George H. W. Bush</a>, <a href="/wiki/Ronald_Reagan" title="Ronald Reagan">Ronald Reagan</a> and <a href="/wiki/Jimmy_Carter" title="Jimmy Carter">Jimmy Carter</a> dedicate the <a href="/wiki/Ronald_Reagan_Presidential_Library" title="Ronald Reagan Presidential Library">Ronald Reagan Presidential Library</a> in 1991.</div>
+</div>
+</div>
+<div class="thumb tright">
+<div class="thumbinner" style="width:222px;"><a href="/wiki/File:Five_Presidents_Oval_Office.jpg" class="image"><img alt="Group portrait of five presidential men in dark suits and ties" src="//upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Five_Presidents_Oval_Office.jpg/220px-Five_Presidents_Oval_Office.jpg" width="220" height="158" class="thumbimage" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Five_Presidents_Oval_Office.jpg/330px-Five_Presidents_Oval_Office.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Five_Presidents_Oval_Office.jpg/440px-Five_Presidents_Oval_Office.jpg 2x" data-file-width="514" data-file-height="369" /></a>
+<div class="thumbcaption">
+<div class="magnify"><a href="/wiki/File:Five_Presidents_Oval_Office.jpg" class="internal" title="Enlarge"></a></div>
+Presidents <a href="/wiki/George_H._W._Bush" title="George H. W. Bush">George H. W. Bush</a>, <a href="/wiki/George_W._Bush" title="George W. Bush">George W. Bush</a>, <a href="/wiki/Bill_Clinton" title="Bill Clinton">Bill Clinton</a> and <a href="/wiki/Jimmy_Carter" title="Jimmy Carter">Jimmy Carter</a>, with President-elect <a href="/wiki/Barack_Obama" title="Barack Obama">Barack Obama</a> in the <a href="/wiki/Oval_Office" title="Oval Office">Oval Office</a> on January 7, 2009.</div>
+</div>
+</div>
+<p>Beginning in 1959, all living former presidents were granted a pension, an office, and a staff. The pension has increased numerous times with Congressional approval. Retired presidents now receive a pension based on the salary of the current administration's cabinet secretaries, which was $199,700 each year in 2012.<sup id="cite_ref-88" class="reference"><a href="#cite_note-88"><span>[</span>87<span>]</span></a></sup> Former presidents who served in Congress may also collect <a href="/wiki/Congressional_pension" title="Congressional pension">congressional pensions</a>.<sup id="cite_ref-89" class="reference"><a href="#cite_note-89"><span>[</span>88<span>]</span></a></sup> The <a href="/wiki/Former_Presidents_Act" title="Former Presidents Act">Former Presidents Act</a>, as amended, also provides former presidents with travel funds and <a href="/wiki/Franking" title="Franking">franking</a> privileges. Prior to 1997, all former presidents, their spouses, and their children until age 16 were protected by the Secret Service until the president's death.<sup id="cite_ref-90" class="reference"><a href="#cite_note-90"><span>[</span>89<span>]</span></a></sup><sup id="cite_ref-91" class="reference"><a href="#cite_note-91"><span>[</span>90<span>]</span></a></sup> In 1997, Congress passed legislation limiting secret service protection to no more than 10 years from the date a president leaves office.<sup id="cite_ref-secretservice.gov_92-0" class="reference"><a href="#cite_note-secretservice.gov-92"><span>[</span>91<span>]</span></a></sup> On January 10, 2013, President Obama signed legislation reinstating lifetime secret service protection for him, <a href="/wiki/George_W._Bush" title="George W. Bush">George W. Bush</a>, and all subsequent presidents.<sup id="cite_ref-93" class="reference"><a href="#cite_note-93"><span>[</span>92<span>]</span></a></sup> A spouse who remarries is no longer eligible for secret service protection.<sup id="cite_ref-secretservice.gov_92-1" class="reference"><a href="#cite_note-secretservice.gov-92"><span>[</span>91<span>]</span></a></sup></p>
+<p>Some presidents have had significant careers after leaving office. Prominent examples include <a href="/wiki/William_Howard_Taft" title="William Howard Taft">William Howard Taft</a>'s tenure as <a href="/wiki/Chief_Justice_of_the_United_States" title="Chief Justice of the United States">Chief Justice of the United States</a> and <a href="/wiki/Herbert_Hoover" title="Herbert Hoover">Herbert Hoover</a>'s work on government reorganization after <a href="/wiki/World_War_II" title="World War II">World War II</a>. <a href="/wiki/Grover_Cleveland" title="Grover Cleveland">Grover Cleveland</a>, whose bid for reelection failed in 1888, was elected president again four years later in 1892. Two former presidents served in Congress after leaving the White House: <a href="/wiki/John_Quincy_Adams" title="John Quincy Adams">John Quincy Adams</a> was elected to the House of Representatives, serving there for seventeen years, and <a href="/wiki/Andrew_Johnson" title="Andrew Johnson">Andrew Johnson</a> returned to the Senate in 1875. <a href="/wiki/John_Tyler" title="John Tyler">John Tyler</a> served in the provisional <a href="/wiki/Congress_of_the_Confederate_States" title="Congress of the Confederate States">Congress of the Confederate States</a> during the <a href="/wiki/American_Civil_War" title="American Civil War">Civil War</a> and was elected to the Confederate House of Representatives, but died before that body first met.</p>
+<p>Presidents may use their predecessors as emissaries to deliver private messages to other nations or as official representatives of the United States to state funerals and other important foreign events.<sup id="cite_ref-apreaction19810331_94-0" class="reference"><a href="#cite_note-apreaction19810331-94"><span>[</span>93<span>]</span></a></sup><sup id="cite_ref-4presidentsphotos_95-0" class="reference"><a href="#cite_note-4presidentsphotos-95"><span>[</span>94<span>]</span></a></sup> <a href="/wiki/Richard_Nixon" title="Richard Nixon">Richard Nixon</a> made multiple foreign trips to countries including China and Russia and was lauded as an elder statesman.<sup id="cite_ref-96" class="reference"><a href="#cite_note-96"><span>[</span>95<span>]</span></a></sup> <a href="/wiki/Jimmy_Carter" title="Jimmy Carter">Jimmy Carter</a> has become a global <a href="/wiki/Human_rights" title="Human rights">human rights</a> campaigner, international arbiter, and election monitor, as well as a recipient of the <a href="/wiki/Nobel_Peace_Prize" title="Nobel Peace Prize">Nobel Peace Prize</a>. <a href="/wiki/Bill_Clinton" title="Bill Clinton">Bill Clinton</a> has also worked as an informal ambassador, most recently in the negotiations that led to the release of two American <a href="/wiki/Journalist" title="Journalist">journalists</a>, <a href="/wiki/Laura_Ling" title="Laura Ling">Laura Ling</a> and <a href="/wiki/Euna_Lee" title="Euna Lee">Euna Lee</a>, from <a href="/wiki/North_Korea" title="North Korea">North Korea</a>. Clinton has also been active politically since his presidential term ended, working with his wife <a href="/wiki/Hillary_Clinton" title="Hillary Clinton" class="mw-redirect">Hillary</a> on her <a href="/wiki/Hillary_Clinton_presidential_campaign,_2008" title="Hillary Clinton presidential campaign, 2008">presidential bid</a> and President Obama on his <a href="/wiki/Barack_Obama_presidential_campaign,_2012" title="Barack Obama presidential campaign, 2012">reelection campaign</a>.</p>
+<ul class="gallery mw-gallery-traditional" style="text-align: center;">
+<li class='gallerycaption'>Living former presidents</li>
+<li class="gallerybox" style="width: 155px">
+<div style="width: 155px">
+<div class="thumb" style="width: 150px;">
+<div style="margin:15px auto;"><a href="/wiki/File:Carter_cropped.jpg" class="image"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/6/68/Carter_cropped.jpg/93px-Carter_cropped.jpg" width="93" height="120" data-file-width="1155" data-file-height="1490" /></a></div>
+</div>
+<div class="gallerytext">
+<div class="center" style="width:auto; margin-left:auto; margin-right:auto;"><b><a href="/wiki/Jimmy_Carter" title="Jimmy Carter">Jimmy Carter</a></b> (D)</div>
+<div class="center" style="width:auto; margin-left:auto; margin-right:auto;"><small style="font-size:85%;"><a href="/wiki/Presidency_of_Jimmy_Carter" title="Presidency of Jimmy Carter">39th</a>, served 1977–1981</small></div>
+<div class="center" style="width:auto; margin-left:auto; margin-right:auto;"><small style="font-size:85%;">b. 1924 (age 90)</small></div>
+</div>
+</div>
+</li>
+<li class="gallerybox" style="width: 155px">
+<div style="width: 155px">
+<div class="thumb" style="width: 150px;">
+<div style="margin:15px auto;"><a href="/wiki/File:43_George_H.W._Bush_3x4.jpg" class="image"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/c/cd/43_George_H.W._Bush_3x4.jpg/90px-43_George_H.W._Bush_3x4.jpg" width="90" height="120" data-file-width="750" data-file-height="1000" /></a></div>
+</div>
+<div class="gallerytext">
+<div class="center" style="width:auto; margin-left:auto; margin-right:auto;"><b><a href="/wiki/George_H._W._Bush" title="George H. W. Bush">George H. W. Bush</a></b> (R)</div>
+<div class="center" style="width:auto; margin-left:auto; margin-right:auto;"><small style="font-size:85%;"><a href="/wiki/Presidency_of_George_H._W._Bush" title="Presidency of George H. W. Bush" class="mw-redirect">41st</a>, served 1989–1993</small></div>
+<div class="center" style="width:auto; margin-left:auto; margin-right:auto;"><small style="font-size:85%;">b. 1924 (age 90)</small></div>
+</div>
+</div>
+</li>
+<li class="gallerybox" style="width: 155px">
+<div style="width: 155px">
+<div class="thumb" style="width: 150px;">
+<div style="margin:15px auto;"><a href="/wiki/File:Bill_Clinton.jpg" class="image"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/d/d3/Bill_Clinton.jpg/92px-Bill_Clinton.jpg" width="92" height="120" data-file-width="2299" data-file-height="3000" /></a></div>
+</div>
+<div class="gallerytext">
+<div class="center" style="width:auto; margin-left:auto; margin-right:auto;"><b><a href="/wiki/Bill_Clinton" title="Bill Clinton">Bill Clinton</a></b> (D)</div>
+<div class="center" style="width:auto; margin-left:auto; margin-right:auto;"><small style="font-size:85%;"><a href="/wiki/Presidency_of_Bill_Clinton" title="Presidency of Bill Clinton">42nd</a>, served 1993–2001</small></div>
+<div class="center" style="width:auto; margin-left:auto; margin-right:auto;"><small style="font-size:85%;">b. 1946 (age 68)</small></div>
+</div>
+</div>
+</li>
+<li class="gallerybox" style="width: 155px">
+<div style="width: 155px">
+<div class="thumb" style="width: 150px;">
+<div style="margin:15px auto;"><a href="/wiki/File:GeorgeWBush.jpg" class="image"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/6/67/GeorgeWBush.jpg/96px-GeorgeWBush.jpg" width="96" height="120" data-file-width="2400" data-file-height="3000" /></a></div>
+</div>
+<div class="gallerytext">
+<div class="center" style="width:auto; margin-left:auto; margin-right:auto;"><b><a href="/wiki/George_W._Bush" title="George W. Bush">George W. Bush</a></b> (R)</div>
+<div class="center" style="width:auto; margin-left:auto; margin-right:auto;"><small style="font-size:85%;"><a href="/wiki/Presidency_of_George_W._Bush" title="Presidency of George W. Bush">43rd</a>, served 2001–2009</small></div>
+<div class="center" style="width:auto; margin-left:auto; margin-right:auto;"><small style="font-size:85%;">b. 1946 (age 68)</small></div>
+</div>
+</div>
+</li>
+</ul>
+<h3><span class="mw-headline" id="Presidential_libraries">Presidential libraries</span></h3>
+<div class="hatnote relarticle mainarticle">Main article: <a href="/wiki/Presidential_library" title="Presidential library">Presidential library</a></div>
+<p>Since <a href="/wiki/Herbert_Hoover" title="Herbert Hoover">Herbert Hoover</a>, each president has created a <a href="/wiki/Institutional_repository" title="Institutional repository">repository</a> known as a <a href="/wiki/Presidential_library" title="Presidential library">presidential library</a> for preserving and making available his papers, records and other documents and materials. Completed libraries are deeded to and maintained by the <a href="/wiki/National_Archives_and_Records_Administration" title="National Archives and Records Administration">National Archives and Records Administration</a> (NARA); the initial funding for building and equipping each library must come from private, non-federal sources.<sup id="cite_ref-97" class="reference"><a href="#cite_note-97"><span>[</span>96<span>]</span></a></sup> There are currently thirteen presidential libraries in the NARA system. There are also presidential libraries maintained by state governments and private foundations, such as the <a href="/wiki/Abraham_Lincoln_Presidential_Library_and_Museum" title="Abraham Lincoln Presidential Library and Museum">Abraham Lincoln Presidential Library and Museum</a>, which is run by the State of <a href="/wiki/Illinois" title="Illinois">Illinois</a>.</p>
+<p>As many presidents live for many years after leaving office, several of them have personally overseen the building and opening of their own presidential libraries, some even making arrangements for their own burial at the site. Several presidential libraries therefore contain the graves of the president they document, such as the <a href="/wiki/Richard_Nixon_Presidential_Library_and_Museum" title="Richard Nixon Presidential Library and Museum">Richard Nixon Presidential Library and Museum</a> in <a href="/wiki/Yorba_Linda,_California" title="Yorba Linda, California">Yorba Linda, California</a> and the <a href="/wiki/Ronald_Reagan_Presidential_Library" title="Ronald Reagan Presidential Library">Ronald Reagan Presidential Library</a> in <a href="/wiki/Simi_Valley,_California" title="Simi Valley, California">Simi Valley, California</a>. The graves are viewable by the general public visiting these libraries.</p>
+<h2><span class="mw-headline" id="Timeline_of_Presidents">Timeline of Presidents</span></h2>
+<p>This is a graphical timeline listing of the <strong class="selflink">Presidents of the United States</strong>.</p>
+<p><map name="timeline_db4cb5025a17a393b2295729e687e04f"></map><img usemap="#timeline_db4cb5025a17a393b2295729e687e04f" src="//upload.wikimedia.org/wikipedia/en/timeline/db4cb5025a17a393b2295729e687e04f.png" /></p>
+<p><br /></p>
+<h2><span class="mw-headline" id="See_also">See also</span></h2>
+<div class="noprint tright portal" style="border:solid #aaa 1px;margin:0.5em 0 0.5em 1em;">
+<table style="background:#f9f9f9;font-size:85%;line-height:110%;max-width:175px;">
+<tr style="vertical-align:middle;">
+<td style="text-align:center;"><a href="/wiki/File:Great_Seal_of_the_United_States_(obverse).svg" class="image"><img alt="Portal icon" src="//upload.wikimedia.org/wikipedia/commons/thumb/5/5c/Great_Seal_of_the_United_States_%28obverse%29.svg/28px-Great_Seal_of_the_United_States_%28obverse%29.svg.png" width="28" height="28" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/5/5c/Great_Seal_of_the_United_States_%28obverse%29.svg/42px-Great_Seal_of_the_United_States_%28obverse%29.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5c/Great_Seal_of_the_United_States_%28obverse%29.svg/56px-Great_Seal_of_the_United_States_%28obverse%29.svg.png 2x" data-file-width="600" data-file-height="600" /></a></td>
+<td style="padding:0 0.2em;vertical-align:middle;font-style:italic;font-weight:bold;"><a href="/wiki/Portal:Government_of_the_United_States" title="Portal:Government of the United States">Government of the United States portal</a></td>
+</tr>
+</table>
+</div>
+<h3><span class="mw-headline" id="Lists_relating_to_the_United_States_presidency">Lists relating to the United States presidency</span></h3>
+<p><a href="/wiki/List_of_Presidents_of_the_United_States" title="List of Presidents of the United States">List of Presidents of the United States</a></p>
+<div class="div-col columns column-count column-count-2" style="-moz-column-count: 2; -webkit-column-count: 2; column-count: 2;">
+<div class="CategoryTreeTag" data-ct-mode="10" data-ct-options="{&quot;mode&quot;:10,&quot;hideprefix&quot;:20,&quot;showcount&quot;:false,&quot;namespaces&quot;:false}">
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet"><span class="CategoryTreeToggle" style="display: none;" data-ct-title="Lists_of_candidates_for_President_of_the_United_States" title="expand" data-ct-state="collapsed">►</span></span> <a class="CategoryTreeLabel CategoryTreeLabelNs14 CategoryTreeLabelCategory" href="/wiki/Category:Lists_of_candidates_for_President_of_the_United_States">Lists of candidates for President of the United States</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet"><span class="CategoryTreeToggle" style="display: none;" data-ct-title="Lists_of_fictional_United_States_Presidents" title="expand" data-ct-state="collapsed">►</span></span> <a class="CategoryTreeLabel CategoryTreeLabelNs14 CategoryTreeLabelCategory" href="/wiki/Category:Lists_of_fictional_United_States_Presidents">Lists of fictional United States Presidents</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet"><span class="CategoryTreeToggle" style="display: none;" data-ct-title="Lists_of_honors_and_awards_received_by_Presidents_of_the_United_States" title="expand" data-ct-state="collapsed">►</span></span> <a class="CategoryTreeLabel CategoryTreeLabelNs14 CategoryTreeLabelCategory" href="/wiki/Category:Lists_of_honors_and_awards_received_by_Presidents_of_the_United_States">Lists of honors and awards received by Presidents of the United States</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet"><span class="CategoryTreeToggle" style="display: none;" data-ct-title="Lists_of_United_States_judicial_appointments_by_president" title="expand" data-ct-state="collapsed">►</span></span> <a class="CategoryTreeLabel CategoryTreeLabelNs14 CategoryTreeLabelCategory" href="/wiki/Category:Lists_of_United_States_judicial_appointments_by_president">Lists of United States judicial appointments by president</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet"><span class="CategoryTreeToggle" style="display: none;" data-ct-title="Vice_presidency_of_the_United_States-related_lists" title="expand" data-ct-state="collapsed">►</span></span> <a class="CategoryTreeLabel CategoryTreeLabelNs14 CategoryTreeLabelCategory" href="/wiki/Category:Vice_presidency_of_the_United_States-related_lists">Vice presidency of the United States-related lists</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_burial_places_of_Presidents_of_the_United_States">List of burial places of Presidents of the United States</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_Presidents_of_the_United_States">List of Presidents of the United States</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_Presidents_of_the_United_States_by_age">List of Presidents of the United States by age</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/American_Presidents:_Life_Portraits">American Presidents: Life Portraits</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_United_States_presidential_assassination_attempts_and_plots">List of United States presidential assassination attempts and plots</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/Assassination_threats_against_Barack_Obama">Assassination threats against Barack Obama</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_autobiographies_by_Presidents_of_the_United_States">List of autobiographies by Presidents of the United States</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_United_States_presidential_candidates">List of United States presidential candidates</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_children_of_the_Presidents_of_the_United_States">List of children of the Presidents of the United States</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_Presidents_of_the_United_States_by_education">List of Presidents of the United States by education</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_U.S._counties_named_after_U.S._Presidents">List of U.S. counties named after U.S. Presidents</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_Presidents_of_the_United_States_by_date_of_birth">List of Presidents of the United States by date of birth</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_Presidents_of_the_United_States_by_date_of_death">List of Presidents of the United States by date of death</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_Presidents_of_the_United_States_who_died_in_office">List of Presidents of the United States who died in office</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/Living_First_Ladies_of_the_United_States">Living First Ladies of the United States</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_United_States_Presidential_firsts">List of United States Presidential firsts</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/Handedness_of_Presidents_of_the_United_States">Handedness of Presidents of the United States</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/Heights_of_presidents_and_presidential_candidates_of_the_United_States">Heights of presidents and presidential candidates of the United States</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/Historical_polling_for_U.S._Presidential_elections">Historical polling for U.S. Presidential elections</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/Historical_rankings_of_Presidents_of_the_United_States">Historical rankings of Presidents of the United States</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_international_trips_made_by_the_President_of_the_United_States">List of international trips made by the President of the United States</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/U.S._Presidential_IQ_hoax">U.S. Presidential IQ hoax</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/Bibliography_of_Thomas_Jefferson">Bibliography of Thomas Jefferson</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_Presidents_of_the_United_States_by_judicial_appointments">List of Presidents of the United States by judicial appointments</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/Bibliography_of_Abraham_Lincoln">Bibliography of Abraham Lincoln</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_observances_in_the_United_States_by_presidential_proclamation">List of observances in the United States by presidential proclamation</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_photographs_of_Abraham_Lincoln">List of photographs of Abraham Lincoln</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_U.S._military_vessels_named_after_Presidents">List of U.S. military vessels named after Presidents</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_United_States_presidential_elections_by_popular_vote_margin">List of United States presidential elections by popular vote margin</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/Living_Presidents_of_the_United_States">Living Presidents of the United States</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/Lyndon_B._Johnson_bibliography">Lyndon B. Johnson bibliography</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/Bibliography_of_William_McKinley">Bibliography of William McKinley</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_meetings_between_the_Pope_and_the_President_of_the_United_States">List of meetings between the Pope and the President of the United States</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_United_States_Presidents_by_military_rank">List of United States Presidents by military rank</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_Presidents_of_the_United_States_by_military_service">List of Presidents of the United States by military service</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_multilingual_Presidents_of_the_United_States">List of multilingual Presidents of the United States</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_Presidents_of_the_United_States_by_name">List of Presidents of the United States by name</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_United_States_Presidents_by_net_worth">List of United States Presidents by net worth</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_nicknames_of_United_States_Presidents">List of nicknames of United States Presidents</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/Richard_Nixon_bibliography">Richard Nixon bibliography</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/North_American_Leaders%27_Summit">North American Leaders' Summit</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_books_and_films_about_Barack_Obama">List of books and films about Barack Obama</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/United_States_presidential_pets">United States presidential pets</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_places_named_for_Dwight_D._Eisenhower">List of places named for Dwight D. Eisenhower</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_places_named_for_Andrew_Jackson">List of places named for Andrew Jackson</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_places_named_for_Thomas_Jefferson">List of places named for Thomas Jefferson</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_places_named_for_James_Monroe">List of places named for James Monroe</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_places_named_for_James_K._Polk">List of places named for James K. Polk</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_places_named_for_George_Washington">List of places named for George Washington</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_United_States_Presidents_on_currency">List of United States Presidents on currency</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_Presidents_of_the_United_States,_sortable_by_previous_experience">List of Presidents of the United States, sortable by previous experience</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_Presidents_of_the_United_States_by_home_state">List of Presidents of the United States by home state</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_Presidents_of_the_United_States_by_political_affiliation">List of Presidents of the United States by political affiliation</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_Presidents_of_the_United_States_by_other_offices_held">List of Presidents of the United States by other offices held</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_Presidents_of_the_United_States_by_occupation">List of Presidents of the United States by occupation</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_Presidents_of_the_United_States_by_time_in_office">List of Presidents of the United States by time in office</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/Ronald_Reagan_bibliography">Ronald Reagan bibliography</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/Religious_affiliations_of_Presidents_of_the_United_States">Religious affiliations of Presidents of the United States</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_residences_of_Presidents_of_the_United_States">List of residences of Presidents of the United States</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_Soviet_Union%E2%80%93United_States_summits">List of Soviet Union–United States summits</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/Timeline_of_Presidents_of_the_United_States">Timeline of Presidents of the United States</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/Bibliography_of_Harry_S._Truman">Bibliography of Harry S. Truman</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/United_States_presidential_visits_to_the_Baltic_states">United States presidential visits to the Baltic states</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/United_States_presidential_visits_to_the_Nordic_countries">United States presidential visits to the Nordic countries</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_Presidents_of_the_United_States_with_facial_hair">List of Presidents of the United States with facial hair</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/List_of_United_States_presidential_vetoes">List of United States presidential vetoes</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/United_States_presidential_visits_to_Sub-Saharan_Africa">United States presidential visits to Sub-Saharan Africa</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/United_States_presidential_visits_to_Mexico">United States presidential visits to Mexico</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/United_States_presidential_visits_to_the_United_Kingdom">United States presidential visits to the United Kingdom</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/U.S._presidents_on_U.S._postage_stamps">U.S. presidents on U.S. postage stamps</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs0 CategoryTreeLabelPage" href="/wiki/White_House_intruders">White House intruders</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+<div class="CategoryTreeSection">
+<div class="CategoryTreeItem"><span class="CategoryTreeBullet">&#160;</span> <a class="CategoryTreeLabel CategoryTreeLabelNs10 CategoryTreeLabelPage" href="/wiki/Template:Lists_of_US_Presidents_and_Vice_Presidents">Template:Lists of US Presidents and Vice Presidents</a></div>
+<div class="CategoryTreeChildren" style="display:none"></div>
+</div>
+</div>
+</div>
+<h3><span class="mw-headline" id="Categories">Categories</span></h3>
+<ul>
+<li><a href="/wiki/Category:United_States_presidential_history" title="Category:United States presidential history">Category:United States presidential history</a></li>
+</ul>
+<h3><span class="mw-headline" id="Articles">Articles</span></h3>
+<ul>
+<li><a href="/wiki/Curse_of_Tippecanoe" title="Curse of Tippecanoe">Curse of Tippecanoe</a></li>
+<li><a href="/wiki/Executive_Office_of_the_President_of_the_United_States" title="Executive Office of the President of the United States">Executive Office of the President of the United States</a></li>
+<li><a href="/wiki/Imperial_Presidency" title="Imperial Presidency">Imperial Presidency</a></li>
+<li><i><a href="/wiki/The_Imperial_Presidency" title="The Imperial Presidency">The Imperial Presidency</a></i></li>
+<li><a href="/wiki/Imperiled_presidency" title="Imperiled presidency">Imperiled presidency</a></li>
+<li><a href="/wiki/President_of_the_Continental_Congress" title="President of the Continental Congress">President of the Continental Congress</a></li>
+<li><a href="/wiki/Presidential_$1_Coin_Program" title="Presidential $1 Coin Program">Presidential $1 Coin Program</a></li>
+<li><a href="/wiki/Second-term_curse" title="Second-term curse">Second-term curse</a></li>
+<li><a href="/wiki/United_States_presidential_line_of_succession_in_fiction" title="United States presidential line of succession in fiction">United States presidential line of succession in fiction</a></li>
+<li><a href="/wiki/Vice_President_of_the_United_States" title="Vice President of the United States">Vice President of the United States</a></li>
+<li><a href="/wiki/White_House_Office" title="White House Office">White House Office</a></li>
+</ul>
+<h2><span class="mw-headline" id="Notes">Notes</span></h2>
+<div class="reflist" style="list-style-type: decimal;">
+<ol class="references">
+<li id="cite_note-69"><span class="mw-cite-backlink"><b><a href="#cite_ref-69">^</a></b></span> <span class="reference-text">Foreign-born American citizens who met the age and residency requirements at the time the Constitution was adopted were also eligible for the presidency. However, this allowance has since become obsolete.</span></li>
+</ol>
+</div>
+<h2><span class="mw-headline" id="References">References</span></h2>
+<div class="reflist columns references-column-width" style="-moz-column-width: 30em; -webkit-column-width: 30em; column-width: 30em; list-style-type: decimal;">
+<ol class="references">
+<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><span class="citation news"><a rel="nofollow" class="external text" href="http://query.nytimes.com/gst/abstract.html?res=9D06E3D9143AE533A25751C0A96E9C94609ED7CF">"How To Address The President; He Is Not Your Excellency Or Your Honor, But Mr. President"</a>. <i>The New York Times</i>. August 2, 1891.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=How+To+Address+The+President%3B+He+Is+Not+Your+Excellency+Or+Your+Honor%2C+But+Mr.+President&amp;rft.date=August+2%2C+1891&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fquery.nytimes.com%2Fgst%2Fabstract.html%3Fres%3D9D06E3D9143AE533A25751C0A96E9C94609ED7CF&amp;rft.jtitle=The+New+York+Times&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><span class="citation web"><a rel="nofollow" class="external text" href="http://www.usgs.gov/usgs-manual/handbook/hb/431-2-h/chap4.html">"USGS Correspondence Handbook - Chapter 4"</a>. Usgs.gov. 2007-07-18<span class="reference-accessdate">. Retrieved 2012-11-15</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.btitle=USGS+Correspondence+Handbook+-+Chapter+4&amp;rft.date=2007-07-18&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fwww.usgs.gov%2Fusgs-manual%2Fhandbook%2Fhb%2F431-2-h%2Fchap4.html&amp;rft.pub=Usgs.gov&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><span class="citation web"><a rel="nofollow" class="external text" href="http://www.ita.doc.gov/ita_sec/Address%20and%20Salutation.htm">"Models of Address and Salutation"</a>. Ita.doc.gov<span class="reference-accessdate">. Retrieved September 4, 2010</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.btitle=Models+of+Address+and+Salutation&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fwww.ita.doc.gov%2Fita_sec%2FAddress%2520and%2520Salutation.htm&amp;rft.pub=Ita.doc.gov&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.un.int/protocol/documents/Hspmfm.pdf">HEADS OF STATE, HEADS OF GOVERNMENT, MINISTERS FOR FOREIGN AFFAIRS</a>, Protocol and Liaison Service, <a href="/wiki/United_Nations" title="United Nations">United Nations</a>. Retrieved on November 1, 2012.</span></li>
+<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><span class="citation web">The White House Office of the Press Secretary (September 1, 2010). <a rel="nofollow" class="external text" href="http://www.whitehouse.gov/the-press-office/2010/09/01/remarks-president-obama-president-mubarak-his-majesty-king-abdullah-prim">"Remarks by President Obama, President Mubarak, His Majesty King Abdullah, Prime Minister Netanyahu and President Abbas Before Working Dinner"</a>. <i>WhiteHouse.gov</i><span class="reference-accessdate">. Retrieved July 19, 2011</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=Remarks+by+President+Obama%2C+President+Mubarak%2C+His+Majesty+King+Abdullah%2C+Prime+Minister+Netanyahu+and+President+Abbas+Before+Working+Dinner&amp;rft.aulast=The+White+House+Office+of+the+Press+Secretary&amp;rft.au=The+White+House+Office+of+the+Press+Secretary&amp;rft.date=September+1%2C+2010&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.whitehouse.gov%2Fthe-press-office%2F2010%2F09%2F01%2Fremarks-president-obama-president-mubarak-his-majesty-king-abdullah-prim&amp;rft.jtitle=WhiteHouse.gov&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><span class="citation web"><a rel="nofollow" class="external text" href="http://www.un.int/wcm/content/site/palestine/cache/offonce/pid/12020">"Exchange of Letters"</a>. Permanent Observer Mission of Palestine to the United Nations. September 1978<span class="reference-accessdate">. Retrieved July 19, 2011</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.btitle=Exchange+of+Letters&amp;rft.date=September+1978&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fwww.un.int%2Fwcm%2Fcontent%2Fsite%2Fpalestine%2Fcache%2Foffonce%2Fpid%2F12020&amp;rft.pub=Permanent+Observer+Mission+of+Palestine+to+the+United+Nations&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><span class="citation web">Safire, William (October 12, 1997). <a rel="nofollow" class="external text" href="http://www.nytimes.com/1997/10/12/magazine/on-language-potus-and-flotus.html?pagewanted=all&amp;src=pm">"On language: POTUS and FLOTUS"</a>. <i>New York Times</i>. New York: The New York Times Company<span class="reference-accessdate">. Retrieved May 11, 2014</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=On+language%3A+POTUS+and+FLOTUS&amp;rft.aufirst=William&amp;rft.aulast=Safire&amp;rft.au=Safire%2C+William&amp;rft.date=October+12%2C+1997&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.nytimes.com%2F1997%2F10%2F12%2Fmagazine%2Fon-language-potus-and-flotus.html%3Fpagewanted%3Dall%26src%3Dpm&amp;rft.jtitle=New+York+Times&amp;rft.place=New+York&amp;rft.pub=The+New+York+Times+Company&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text"><span class="citation news">Noer, Michael; Perlroth, Nicole (November 11, 2009). <a rel="nofollow" class="external text" href="http://www.forbes.com/2009/11/09/world-most-powerful-leadership-power-09-intro.html">"The World's Most Powerful People"</a>. <i>Forbes</i><span class="reference-accessdate">. Retrieved September 4, 2010</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=The+World%27s+Most+Powerful+People&amp;rft.aufirst=Michael&amp;rft.aulast=Noer&amp;rft.au=Noer%2C+Michael&amp;rft.au=Perlroth%2C+Nicole&amp;rft.date=November+11%2C+2009&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.forbes.com%2F2009%2F11%2F09%2Fworld-most-powerful-leadership-power-09-intro.html&amp;rft.jtitle=Forbes&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text"><span class="citation web"><a rel="nofollow" class="external text" href="http://www.lasentinel.net/The-Most-Powerful-Man-in-the-World-is-a-Black-Man.html">"The Most Powerful Man in the World is a Black Man – The Los Angeles Sentinel"</a>. Lasentinel.net<span class="reference-accessdate">. Retrieved September 4, 2010</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.btitle=The+Most+Powerful+Man+in+the+World+is+a+Black+Man+%E2%80%93+The+Los+Angeles+Sentinel&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fwww.lasentinel.net%2FThe-Most-Powerful-Man-in-the-World-is-a-Black-Man.html&amp;rft.pub=Lasentinel.net&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text"><span class="citation news"><a rel="nofollow" class="external text" href="http://www.guardian.co.uk/commentisfree/2008/jan/03/uselections2008.world">"Who should be the world's most powerful person?"</a>. <i>The Guardian</i> (London). January 3, 2008.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=Who+should+be+the+world%27s+most+powerful+person%3F&amp;rft.date=January+3%2C+2008&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.guardian.co.uk%2Fcommentisfree%2F2008%2Fjan%2F03%2Fuselections2008.world&amp;rft.jtitle=The+Guardian&amp;rft.place=London&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text"><span class="citation web">Jon Meacham (December 20, 2008). <a rel="nofollow" class="external text" href="http://www.newsweek.com/2008/12/19/the-story-of-power.html">"Meacham: The History of Power"</a>. <i>Newsweek</i><span class="reference-accessdate">. Retrieved September 4, 2010</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=Meacham%3A+The+History+of+Power&amp;rft.au=Jon+Meacham&amp;rft.aulast=Jon+Meacham&amp;rft.date=December+20%2C+2008&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.newsweek.com%2F2008%2F12%2F19%2Fthe-story-of-power.html&amp;rft.jtitle=Newsweek&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><span class="citation web">Fareed Zakaria (December 20, 2008). <a rel="nofollow" class="external text" href="http://www.newsweek.com/2008/12/19/1-barack-obama.html">"The NEWSWEEK 50: Barack Obama"</a>. <i>Newsweek</i><span class="reference-accessdate">. Retrieved September 4, 2010</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=The+NEWSWEEK+50%3A+Barack+Obama&amp;rft.au=Fareed+Zakaria&amp;rft.aulast=Fareed+Zakaria&amp;rft.date=December+20%2C+2008&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.newsweek.com%2F2008%2F12%2F19%2F1-barack-obama.html&amp;rft.jtitle=Newsweek&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-13">^</a></b></span> <span class="reference-text"><span class="citation web"><a rel="nofollow" class="external text" href="http://www.archives.gov/exhibits/charters/constitution_transcript.html">"Transcript of the Constitution of the United States – Official"</a>. Archives.gov<span class="reference-accessdate">. Retrieved September 4, 2010</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.btitle=Transcript+of+the+Constitution+of+the+United+States+%E2%80%93+Official&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fwww.archives.gov%2Fexhibits%2Fcharters%2Fconstitution_transcript.html&amp;rft.pub=Archives.gov&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-14">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.jstor.org/stable/3038511">The Influence of State Politics in Expanding Federal Power,' Henry Jones Ford, Proceedings of the American Political Science Association, Vol. 5, Fifth Annual Meeting (1908)</a> Retrieved March 17, 2010.</span></li>
+<li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text"><span class="citation journal">Pfiffner, J. P. (1988). "The President's Legislative Agenda". <i>Annals of the American Academy of Political and Social Science</i> <b>499</b>: 22–35. <a href="/wiki/Digital_object_identifier" title="Digital object identifier">doi</a>:<a rel="nofollow" class="external text" href="http://dx.doi.org/10.1177%2F0002716288499001002">10.1177/0002716288499001002</a>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=The+President%27s+Legislative+Agenda&amp;rft.aufirst=J.+P.&amp;rft.aulast=Pfiffner&amp;rft.au=Pfiffner%2C+J.+P.&amp;rft.date=1988&amp;rft.genre=article&amp;rft_id=info%3Adoi%2F10.1177%2F0002716288499001002&amp;rft.jtitle=Annals+of+the+American+Academy+of+Political+and+Social+Science&amp;rft.pages=22-35&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.volume=499" class="Z3988"><span style="display:none;">&#160;</span></span> <span class="plainlinks noprint" style="font-size:smaller"><a class="external text" href="//en.wikipedia.org/w/index.php?title=Template:Cite_doi/10.2307.2F1045815&amp;action=edit&amp;editintro=Template:Cite_doi/editintro2">edit</a></span></span></li>
+<li id="cite_note-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-16">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.whitehouse.gov/our_government/executive_branch/">Our Government • The Executive Branch</a>, The White House.</span></li>
+<li id="cite_note-the_presidency-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-the_presidency_17-0">^</a></b></span> <span class="reference-text"><span class="citation web"><a rel="nofollow" class="external text" href="http://www.whitehouse.gov/our_government/executive_branch/">"The Executive Branch"</a>. <a href="/wiki/Whitehouse.gov" title="Whitehouse.gov" class="mw-redirect">Whitehouse.gov</a><span class="reference-accessdate">. Retrieved January 27, 2009</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.btitle=The+Executive+Branch&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fwww.whitehouse.gov%2Four_government%2Fexecutive_branch%2F&amp;rft.pub=Whitehouse.gov&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span>. <a href="/wiki/Grover_Cleveland" title="Grover Cleveland">Grover Cleveland</a> served two non-consecutive terms, so he is counted twice; as the 22nd and 24th presidents.</span></li>
+<li id="cite_note-Milkis-18"><span class="mw-cite-backlink">^ <a href="#cite_ref-Milkis_18-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Milkis_18-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-Milkis_18-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-Milkis_18-3"><sup><i><b>d</b></i></sup></a> <a href="#cite_ref-Milkis_18-4"><sup><i><b>e</b></i></sup></a> <a href="#cite_ref-Milkis_18-5"><sup><i><b>f</b></i></sup></a> <a href="#cite_ref-Milkis_18-6"><sup><i><b>g</b></i></sup></a></span> <span class="reference-text"><span class="citation book">Milkis, Sidney M.; Nelson, Michael (2008). <i>The American Presidency: Origins and Development</i> (5th ed.). Washington, D.C.: CQ Press. pp.&#160;1–25. <a href="/wiki/International_Standard_Book_Number" title="International Standard Book Number">ISBN</a>&#160;<a href="/wiki/Special:BookSources/0-87289-336-7" title="Special:BookSources/0-87289-336-7">0-87289-336-7</a>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.aufirst=Sidney+M.&amp;rft.aulast=Milkis&amp;rft.au=Milkis%2C+Sidney+M.&amp;rft.au=Nelson%2C+Michael&amp;rft.btitle=The+American+Presidency%3A+Origins+and+Development&amp;rft.date=2008&amp;rft.edition=5th&amp;rft.genre=book&amp;rft.isbn=0-87289-336-7&amp;rft.pages=1-25&amp;rft.place=Washington%2C+D.C.&amp;rft.pub=CQ+Press&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-Kelly-19"><span class="mw-cite-backlink">^ <a href="#cite_ref-Kelly_19-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Kelly_19-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-Kelly_19-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><span class="citation book">Kelly, Alfred H.; Harbison, Winfred A.; Belz, Herman (1991). <i>The American Constitution: Its Origins and Development</i> <b>I</b> (7th ed.). New York: W.W. Norton &amp; Co. pp.&#160;76–81. <a href="/wiki/International_Standard_Book_Number" title="International Standard Book Number">ISBN</a>&#160;<a href="/wiki/Special:BookSources/0-393-96056-0" title="Special:BookSources/0-393-96056-0">0-393-96056-0</a>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.au=Belz%2C+Herman&amp;rft.aufirst=Alfred+H.&amp;rft.au=Harbison%2C+Winfred+A.&amp;rft.au=Kelly%2C+Alfred+H.&amp;rft.aulast=Kelly&amp;rft.btitle=The+American+Constitution%3A+Its+Origins+and+Development&amp;rft.date=1991&amp;rft.edition=7th&amp;rft.genre=book&amp;rft.isbn=0-393-96056-0&amp;rft.pages=76-81&amp;rft.place=New+York&amp;rft.pub=W.W.+Norton+%26+Co.&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.volume=I" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-Beeman-20"><span class="mw-cite-backlink"><b><a href="#cite_ref-Beeman_20-0">^</a></b></span> <span class="reference-text"><span class="citation book">Beeman, Richard (2009). <i>Plain, Honest Men: The Making of the American Constitution</i>. New York: Random House. <a href="/wiki/International_Standard_Book_Number" title="International Standard Book Number">ISBN</a>&#160;<a href="/wiki/Special:BookSources/0-8129-7684-3" title="Special:BookSources/0-8129-7684-3">0-8129-7684-3</a>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.au=Beeman%2C+Richard&amp;rft.aufirst=Richard&amp;rft.aulast=Beeman&amp;rft.btitle=Plain%2C+Honest+Men%3A+The+Making+of+the+American+Constitution&amp;rft.date=2009&amp;rft.genre=book&amp;rft.isbn=0-8129-7684-3&amp;rft.place=New+York&amp;rft.pub=Random+House&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-ucp-21"><span class="mw-cite-backlink"><b><a href="#cite_ref-ucp_21-0">^</a></b></span> <span class="reference-text"><span class="citation news"><a rel="nofollow" class="external text" href="http://www.defense.gov/releases/release.aspx?releaseid=14398">"DOD Releases Unified Command Plan 2011"</a>. <i><a href="/wiki/United_States_Department_of_Defense" title="United States Department of Defense">United States Department of Defense</a></i>. April 8, 2011<span class="reference-accessdate">. Retrieved February 25, 2013</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=DOD+Releases+Unified+Command+Plan+2011&amp;rft.date=April+8%2C+2011&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.defense.gov%2Freleases%2Frelease.aspx%3Freleaseid%3D14398&amp;rft.jtitle=United+States+Department+of+Defense&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-22"><span class="mw-cite-backlink"><b><a href="#cite_ref-22">^</a></b></span> <span class="reference-text"><a href="/wiki/Title_10_of_the_United_States_Code" title="Title 10 of the United States Code">10 U.S.C.</a>&#160;<a rel="nofollow" class="external text" href="http://www.law.cornell.edu/uscode/10/164.html">§&#160;164</a></span></li>
+<li id="cite_note-23"><span class="mw-cite-backlink"><b><a href="#cite_ref-23">^</a></b></span> <span class="reference-text"><a href="/wiki/Joint_Chiefs_of_Staff" title="Joint Chiefs of Staff">Joint Chiefs of Staff</a>. <a rel="nofollow" class="external text" href="http://www.jcs.mil/page.aspx?id=2">About the Joint Chiefs of Staff</a>. Retrieved February 25, 2013.</span></li>
+<li id="cite_note-24"><span class="mw-cite-backlink"><b><a href="#cite_ref-24">^</a></b></span> <span class="reference-text"><a href="/wiki/Alexander_Hamilton" title="Alexander Hamilton">Hamilton, Alexander</a>. <a rel="nofollow" class="external text" href="http://www.constitution.org/fed/federa69.htm"><i>The Federalist</i> #69</a> (reposting). Retrieved June 15, 2007.</span></li>
+<li id="cite_note-miller-center-25"><span class="mw-cite-backlink"><b><a href="#cite_ref-miller-center_25-0">^</a></b></span> <span class="reference-text"><span class="citation web">Christopher, James A.; Baker, III (July 8, 2008). <a rel="nofollow" class="external text" href="http://millercenter.org/policy/commissions/warpowers/report">"The National War Powers Commission Report"</a> (PDF). The Miller Center of Public Affairs at the University of Virginia<span class="reference-accessdate">. Retrieved December 15, 2010</span>. "No clear mechanism or requirement exists today for the president and Congress to consult. The War Powers Resolution of 1973 contains only vague consultation requirements. Instead, it relies on reporting requirements that, if triggered, begin the clock running for Congress to approve the particular armed conflict. By the terms of the 1973 Resolution, however, Congress need not act to disapprove the conflict; the cessation of all hostilities is required in 60 to 90 days merely if Congress fails to act. Many have criticized this aspect of the Resolution as unwise and unconstitutional, and no president in the past 35 years has filed a report “pursuant” to these triggering provisions."</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.au=Baker%2C+III&amp;rft.au=Christopher%2C+James+A.&amp;rft.aufirst=James+A.&amp;rft.aulast=Christopher&amp;rft.btitle=The+National+War+Powers+Commission+Report&amp;rft.date=July+8%2C+2008&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fmillercenter.org%2Fpolicy%2Fcommissions%2Fwarpowers%2Freport&amp;rft.pub=The+Miller+Center+of+Public+Affairs+at+the+University+of+Virginia&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-tws12novef-26"><span class="mw-cite-backlink">^ <a href="#cite_ref-tws12novef_26-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-tws12novef_26-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-tws12novef_26-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-tws12novef_26-3"><sup><i><b>d</b></i></sup></a></span> <span class="reference-text"><span class="citation news"><a rel="nofollow" class="external text" href="http://www.time.com/time/magazine/article/0,9171,878290,00.html">"The Law: The President's War Powers"</a>. <i>Time</i>. June 1, 1970<span class="reference-accessdate">. Retrieved September 28, 2009</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=The+Law%3A+The+President%27s+War+Powers&amp;rft.date=June+1%2C+1970&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.time.com%2Ftime%2Fmagazine%2Farticle%2F0%2C9171%2C878290%2C00.html&amp;rft.jtitle=Time&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-tws8nov102-27"><span class="mw-cite-backlink"><b><a href="#cite_ref-tws8nov102_27-0">^</a></b></span> <span class="reference-text"><span class="citation news">Alison Mitchell (May 2, 1999). <a rel="nofollow" class="external text" href="http://www.nytimes.com/1999/05/02/weekinreview/the-world-only-congress-can-declare-war-really-it-s-true.html">"The World; Only Congress Can Declare War. Really. It's True"</a>. <i>The New York Times</i><span class="reference-accessdate">. Retrieved November 8, 2009</span>. "Presidents have sent forces abroad more than 100 times; Congress has declared war only five times: the War of 1812, the Mexican War, the Spanish-American War, World War I and World War II."</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=The+World%3B+Only+Congress+Can+Declare+War.+Really.+It%27s+True&amp;rft.au=Alison+Mitchell&amp;rft.aulast=Alison+Mitchell&amp;rft.date=May+2%2C+1999&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.nytimes.com%2F1999%2F05%2F02%2Fweekinreview%2Fthe-world-only-congress-can-declare-war-really-it-s-true.html&amp;rft.jtitle=The+New+York+Times&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-tws8nov101-28"><span class="mw-cite-backlink"><b><a href="#cite_ref-tws8nov101_28-0">^</a></b></span> <span class="reference-text"><span class="citation news">Alison Mitchell (May 2, 1999). <a rel="nofollow" class="external text" href="http://www.nytimes.com/1999/05/02/weekinreview/the-world-only-congress-can-declare-war-really-it-s-true.html">"The World; Only Congress Can Declare War. Really. It's True"</a>. <i>The New York Times</i><span class="reference-accessdate">. Retrieved November 8, 2009</span>. "President Reagan told Congress of the invasion of Grenada two hours after he had ordered the landing. He told Congressional leaders of the bombing of Libya while the aircraft were on their way."</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=The+World%3B+Only+Congress+Can+Declare+War.+Really.+It%27s+True&amp;rft.au=Alison+Mitchell&amp;rft.aulast=Alison+Mitchell&amp;rft.date=May+2%2C+1999&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.nytimes.com%2F1999%2F05%2F02%2Fweekinreview%2Fthe-world-only-congress-can-declare-war-really-it-s-true.html&amp;rft.jtitle=The+New+York+Times&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-tws8nov100-29"><span class="mw-cite-backlink"><b><a href="#cite_ref-tws8nov100_29-0">^</a></b></span> <span class="reference-text"><span class="citation news">Michael R. Gordon (December 20, 1990). <a rel="nofollow" class="external text" href="http://www.nytimes.com/learning/general/onthisday/big/1220.html#article">"U.S. troops move in panama in effort to seize noriega; gunfire is heard in capital"</a>. <i>The New York Times</i><span class="reference-accessdate">. Retrieved November 8, 2009</span>. "It was not clear whether the White House consulted with Congressional leaders about the military action, or notified them in advance. Thomas S. Foley, the Speaker of the House, said on Tuesday night that he had not been alerted by the Administration."</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=U.S.+troops+move+in+panama+in+effort+to+seize+noriega%3B+gunfire+is+heard+in+capital&amp;rft.aulast=Michael+R.+Gordon&amp;rft.au=Michael+R.+Gordon&amp;rft.date=December+20%2C+1990&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.nytimes.com%2Flearning%2Fgeneral%2Fonthisday%2Fbig%2F1220.html%23article&amp;rft.jtitle=The+New+York+Times&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-30"><span class="mw-cite-backlink"><b><a href="#cite_ref-30">^</a></b></span> <span class="reference-text"><span class="citation web"><a rel="nofollow" class="external text" href="http://www.law.cornell.edu/constitution/articleii#section3">"Article II, Section 3, U.S. Constitution"</a>. <i>law.cornell.edu</i>. Legal Information Institute. 2012<span class="reference-accessdate">. Retrieved August 7, 2012</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=Article+II%2C+Section+3%2C+U.S.+Constitution&amp;rft.date=2012&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.law.cornell.edu%2Fconstitution%2Farticleii%23section3&amp;rft.jtitle=law.cornell.edu&amp;rft.pub=Legal+Information+Institute&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-31"><span class="mw-cite-backlink"><b><a href="#cite_ref-31">^</a></b></span> <span class="reference-text"><span class="citation web"><a rel="nofollow" class="external text" href="http://www.whitehouse.gov/our-government/executive-branch">"The Executive Branch"</a>. <i><a href="/wiki/The_White_House" title="The White House" class="mw-redirect">The White House</a> website</i><span class="reference-accessdate">. Retrieved October 17, 2010</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=The+Executive+Branch&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.whitehouse.gov%2Four-government%2Fexecutive-branch&amp;rft.jtitle=The+White+House+website&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-32"><span class="mw-cite-backlink"><b><a href="#cite_ref-32">^</a></b></span> <span class="reference-text"><i><a href="/wiki/National_Labor_Relations_Board_v._Noel_Canning" title="National Labor Relations Board v. Noel Canning">National Labor Relations Board v. Noel Canning</a></i>, 572 U.S. __ (2014).</span></li>
+<li id="cite_note-33"><span class="mw-cite-backlink"><b><a href="#cite_ref-33">^</a></b></span> <span class="reference-text"><i>Shurtleff v. United States</i>, 189 <a href="/wiki/United_States_Reports" title="United States Reports">U.S.</a> <a rel="nofollow" class="external text" href="https://supreme.justia.com/cases/federal/us/189/311/case.html">311</a> (1903); <i><a href="/wiki/Myers_v._United_States" title="Myers v. United States">Myers v. United States</a></i>, 272 <a href="/wiki/United_States_Reports" title="United States Reports">U.S.</a> <a rel="nofollow" class="external text" href="https://supreme.justia.com/cases/federal/us/272/52/case.html">52</a> (1926).</span></li>
+<li id="cite_note-34"><span class="mw-cite-backlink"><b><a href="#cite_ref-34">^</a></b></span> <span class="reference-text"><i><a href="/wiki/Humphrey%27s_Executor_v._United_States" title="Humphrey's Executor v. United States">Humphrey's Executor v. United States</a></i>, 295 <a href="/wiki/United_States_Reports" title="United States Reports">U.S.</a> <a rel="nofollow" class="external text" href="https://supreme.justia.com/cases/federal/us/295/602/case.html">602</a> (1935) and <i><a href="/wiki/Morrison_v._Olson" title="Morrison v. Olson">Morrison v. Olson</a></i>, 487 <a href="/wiki/United_States_Reports" title="United States Reports">U.S.</a> <a rel="nofollow" class="external text" href="https://supreme.justia.com/cases/federal/us/487/654/case.html">654</a> (1988), respectively.</span></li>
+<li id="cite_note-tws8nov12-35"><span class="mw-cite-backlink"><b><a href="#cite_ref-tws8nov12_35-0">^</a></b></span> <span class="reference-text"><span class="citation news">David Johnston (December 24, 1992). <a rel="nofollow" class="external text" href="http://www.nytimes.com/learning/general/onthisday/big/1224.html">"Bush Pardons 6 in Iran Affair, Aborting a Weinberger Trial; Prosecutor Assails 'Cover-Up<span style="padding-right:0.2em;">'</span>"</a>. <i>The New York Times</i><span class="reference-accessdate">. Retrieved November 8, 2009</span>. "But not since President Gerald R. Ford granted clemency to former President Richard M. Nixon for possible crimes in Watergate has a Presidential pardon so pointedly raised the issue of whether the President was trying to shield officials for political purposes."</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=Bush+Pardons+6+in+Iran+Affair%2C+Aborting+a+Weinberger+Trial%3B+Prosecutor+Assails+%27Cover-Up%27&amp;rft.au=David+Johnston&amp;rft.aulast=David+Johnston&amp;rft.date=December+24%2C+1992&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.nytimes.com%2Flearning%2Fgeneral%2Fonthisday%2Fbig%2F1224.html&amp;rft.jtitle=The+New+York+Times&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-tws8nov11-36"><span class="mw-cite-backlink"><b><a href="#cite_ref-tws8nov11_36-0">^</a></b></span> <span class="reference-text"><span class="citation news">David Johnston (December 24, 1992). <a rel="nofollow" class="external text" href="http://www.nytimes.com/learning/general/onthisday/big/1224.html">"Bush Pardons 6 in Iran Affair, Aborting a Weinberger Trial; Prosecutor Assails 'Cover-Up<span style="padding-right:0.2em;">'</span>"</a>. <i>The New York Times</i><span class="reference-accessdate">. Retrieved November 8, 2009</span>. "The prosecutor charged that Mr. Weinberger's efforts to hide his notes may have 'forestalled impeachment proceedings against President Reagan' and formed part of a pattern of 'deception and obstruction.'... In light of President Bush's own misconduct, we are gravely concerned about his decision to pardon others who lied to Congress and obstructed official investigations."</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=Bush+Pardons+6+in+Iran+Affair%2C+Aborting+a+Weinberger+Trial%3B+Prosecutor+Assails+%27Cover-Up%27&amp;rft.au=David+Johnston&amp;rft.aulast=David+Johnston&amp;rft.date=December+24%2C+1992&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.nytimes.com%2Flearning%2Fgeneral%2Fonthisday%2Fbig%2F1224.html&amp;rft.jtitle=The+New+York+Times&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-tws8nov10-37"><span class="mw-cite-backlink"><b><a href="#cite_ref-tws8nov10_37-0">^</a></b></span> <span class="reference-text"><span class="citation news">Peter Eisler (March 7, 2008). <a rel="nofollow" class="external text" href="http://www.usatoday.com/news/washington/2008-03-06-clinton-library-foia_N.htm">"Clinton-papers release blocked"</a>. USA TODAY<span class="reference-accessdate">. Retrieved November 8, 2009</span>. "Former president Clinton issued 140 pardons on his last day in office, including several to controversial figures, such as commodities trader Rich, then a fugitive on tax evasion charges. Rich's ex-wife, Denise, contributed $2,000 in 1999 to Hillary Clinton's Senate campaign; $5,000 to a related political action committee; and $450,000 to a fund set up to build the Clinton library."</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.aulast=Peter+Eisler&amp;rft.au=Peter+Eisler&amp;rft.btitle=Clinton-papers+release+blocked&amp;rft.date=March+7%2C+2008&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fwww.usatoday.com%2Fnews%2Fwashington%2F2008-03-06-clinton-library-foia_N.htm&amp;rft.pub=USA+TODAY&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-38"><span class="mw-cite-backlink"><b><a href="#cite_ref-38">^</a></b></span> <span class="reference-text"><span class="citation web">Millhiser, Ian (June 1, 2010). <a rel="nofollow" class="external text" href="http://www.americanprogress.org/issues/2010/06/executive_privilege.html">"Executive Privilege 101"</a>. Center for American Progress<span class="reference-accessdate">. Retrieved October 8, 2010</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.aulast=Millhiser%2C+Ian&amp;rft.au=Millhiser%2C+Ian&amp;rft.btitle=Executive+Privilege+101&amp;rft.date=June+1%2C+2010&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fwww.americanprogress.org%2Fissues%2F2010%2F06%2Fexecutive_privilege.html&amp;rft.pub=Center+for+American+Progress&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-39"><span class="mw-cite-backlink"><b><a href="#cite_ref-39">^</a></b></span> <span class="reference-text"><span class="citation web"><a rel="nofollow" class="external text" href="http://caselaw.findlaw.com/us-9th-circuit/1537579.html">"Part III of the opinion in <i>Mohamed v. Jeppesen Dataplan</i>"</a>. Caselaw.findlaw.com<span class="reference-accessdate">. Retrieved November 29, 2010</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.btitle=Part+III+of+the+opinion+in+Mohamed+v.+Jeppesen+Dataplan&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fcaselaw.findlaw.com%2Fus-9th-circuit%2F1537579.html&amp;rft.pub=Caselaw.findlaw.com&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-ACS-40"><span class="mw-cite-backlink">^ <a href="#cite_ref-ACS_40-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-ACS_40-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><span class="citation web">Frost, Amanda; Florence, Justin (2009). <a rel="nofollow" class="external text" href="http://www.acslaw.org/Advance%20Spring%2009/Reforming%20the%20State%20Secrets%20Privilege.pdf">"Reforming the State Secrets Privilege"</a>. American Constitution Society<span class="reference-accessdate">. Retrieved October 8, 2010</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.aufirst=Amanda&amp;rft.au=Florence%2C+Justin&amp;rft.au=Frost%2C+Amanda&amp;rft.aulast=Frost&amp;rft.btitle=Reforming+the+State+Secrets+Privilege&amp;rft.date=2009&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fwww.acslaw.org%2FAdvance%2520Spring%252009%2FReforming%2520the%2520State%2520Secrets%2520Privilege.pdf&amp;rft.pub=American+Constitution+Society&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-41"><span class="mw-cite-backlink"><b><a href="#cite_ref-41">^</a></b></span> <span class="reference-text"><span class="citation journal">Weaver, William G.; Pallitto, Robert M. (2005). "State Secrets and Executive Power". <i>Political Science Quarterly</i> (The Academy of Political Science) <b>120</b> (1): 85–112. <a href="/wiki/Digital_object_identifier" title="Digital object identifier">doi</a>:<a rel="nofollow" class="external text" href="http://dx.doi.org/10.1002%2Fj.1538-165x.2005.tb00539.x">10.1002/j.1538-165x.2005.tb00539.x</a>. "Use of the state secrets privilege in courts has grown significantly over the last twenty-five years. In the twenty-three years between the decision in Reynolds [1953] and the election of Jimmy Carter, in 1976, there were four reported cases in which the government invoked the privilege. Between 1977 and 2001, there were a total of fifty-one reported cases in which courts ruled on invocation of the privilege. Because reported cases only represent a fraction of the total cases in which the privilege is invoked or implicated, it is unclear precisely how dramatically the use of the privilege has grown. But the increase in reported cases is indicative of greater willingness to assert the privilege than in the past."</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=State+Secrets+and+Executive+Power&amp;rft.aufirst=William+G.&amp;rft.aulast=Weaver&amp;rft.au=Pallitto%2C+Robert+M.&amp;rft.au=Weaver%2C+William+G.&amp;rft.date=2005&amp;rft.genre=article&amp;rft_id=info%3Adoi%2F10.1002%2Fj.1538-165x.2005.tb00539.x&amp;rft.issue=1&amp;rft.jtitle=Political+Science+Quarterly&amp;rft.pages=85-112&amp;rft.pub=The+Academy+of+Political+Science&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.volume=120" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-42"><span class="mw-cite-backlink"><b><a href="#cite_ref-42">^</a></b></span> <span class="reference-text"><span class="citation news">Savage, Charlie (September 8, 2010). <a rel="nofollow" class="external text" href="http://www.nytimes.com/2010/09/09/us/09secrets.html">"Court Dismisses a Case Asserting Torture by C.I.A"</a>. <i><a href="/wiki/The_New_York_Times" title="The New York Times">The New York Times</a></i><span class="reference-accessdate">. Retrieved October 8, 2010</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=Court+Dismisses+a+Case+Asserting+Torture+by+C.I.A&amp;rft.aufirst=Charlie&amp;rft.aulast=Savage&amp;rft.au=Savage%2C+Charlie&amp;rft.date=September+8%2C+2010&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.nytimes.com%2F2010%2F09%2F09%2Fus%2F09secrets.html&amp;rft.jtitle=The+New+York+Times&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-43"><span class="mw-cite-backlink"><b><a href="#cite_ref-43">^</a></b></span> <span class="reference-text"><span class="citation news">Finn, Peter (September 9, 2010). <a rel="nofollow" class="external text" href="http://www.washingtonpost.com/wp-dyn/content/article/2010/09/08/AR2010090807334.html">"Suit dismissed against firm in CIA rendition case"</a>. <i><a href="/wiki/The_Washington_Post" title="The Washington Post">The Washington Post</a></i><span class="reference-accessdate">. Retrieved October 8, 2010</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=Suit+dismissed+against+firm+in+CIA+rendition+case&amp;rft.au=Finn%2C+Peter&amp;rft.aufirst=Peter&amp;rft.aulast=Finn&amp;rft.date=September+9%2C+2010&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.washingtonpost.com%2Fwp-dyn%2Fcontent%2Farticle%2F2010%2F09%2F08%2FAR2010090807334.html&amp;rft.jtitle=The+Washington+Post&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-44"><span class="mw-cite-backlink"><b><a href="#cite_ref-44">^</a></b></span> <span class="reference-text"><span class="citation web">Greenwald, Glenn (February 10, 2009). <a rel="nofollow" class="external text" href="http://www.salon.com/news/opinion/glenn_greenwald/2009/02/10/obama">"The 180-degree reversal of Obama's State Secrets position"</a>. <i>Salon</i><span class="reference-accessdate">. Retrieved October 8, 2010</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=The+180-degree+reversal+of+Obama%27s+State+Secrets+position&amp;rft.au=Greenwald%2C+Glenn&amp;rft.aulast=Greenwald%2C+Glenn&amp;rft.date=February+10%2C+2009&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.salon.com%2Fnews%2Fopinion%2Fglenn_greenwald%2F2009%2F02%2F10%2Fobama&amp;rft.jtitle=Salon&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-45"><span class="mw-cite-backlink"><b><a href="#cite_ref-45">^</a></b></span> <span class="reference-text"><span class="citation web">American Civil Liberties Union (January 31, 2007). <a rel="nofollow" class="external text" href="http://www.aclu.org/national-security/background-state-secrets-privilege">"Background on the State Secrets Privilege"</a>. ACLU<span class="reference-accessdate">. Retrieved October 8, 2010</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.au=American+Civil+Liberties+Union&amp;rft.aulast=American+Civil+Liberties+Union&amp;rft.btitle=Background+on+the+State+Secrets+Privilege&amp;rft.date=January+31%2C+2007&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fwww.aclu.org%2Fnational-security%2Fbackground-state-secrets-privilege&amp;rft.pub=ACLU&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-tws28sep08-46"><span class="mw-cite-backlink"><b><a href="#cite_ref-tws28sep08_46-0">^</a></b></span> <span class="reference-text"><span class="citation news">Eric Cantor (July 30, 2009). <a rel="nofollow" class="external text" href="http://www.washingtonpost.com/wp-dyn/content/article/2009/07/29/AR2009072902624.html">"Obama's 32 Czars"</a>. <i>The Washington Post</i><span class="reference-accessdate">. Retrieved September 28, 2009</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=Obama%27s+32+Czars&amp;rft.au=Eric+Cantor&amp;rft.aulast=Eric+Cantor&amp;rft.date=July+30%2C+2009&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.washingtonpost.com%2Fwp-dyn%2Fcontent%2Farticle%2F2009%2F07%2F29%2FAR2009072902624.html&amp;rft.jtitle=The+Washington+Post&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-tws04oct08-47"><span class="mw-cite-backlink"><b><a href="#cite_ref-tws04oct08_47-0">^</a></b></span> <span class="reference-text"><span class="citation news">Dana D. Nelson (October 11, 2008). <a rel="nofollow" class="external text" href="http://www.latimes.com/news/opinion/la-oe-nelson11-2008oct11,0,224216.story">"The 'unitary executive' question"</a>. <i>Los Angeles Times</i><span class="reference-accessdate">. Retrieved October 4, 2009</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=The+%27unitary+executive%27+question&amp;rft.au=Dana+D.+Nelson&amp;rft.aulast=Dana+D.+Nelson&amp;rft.date=October+11%2C+2008&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.latimes.com%2Fnews%2Fopinion%2Fla-oe-nelson11-2008oct11%2C0%2C224216.story&amp;rft.jtitle=Los+Angeles+Times&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-tws11nov301-48"><span class="mw-cite-backlink"><b><a href="#cite_ref-tws11nov301_48-0">^</a></b></span> <span class="reference-text"><span class="citation news">Transcript – Ray Suarez and others (July 24, 2006). <a rel="nofollow" class="external text" href="http://www.pbs.org/newshour/bb/white_house/july-dec06/signing_07-24.html">"President's Use of 'Signing Statements' Raises Constitutional Concerns"</a>. PBS Online NewsHour<span class="reference-accessdate">. Retrieved November 11, 2009</span>. "The American Bar Association said President Bush's use of "signing statements," which allow him to sign a bill into law but not enforce certain provisions, disregards the rule of law and the separation of powers. Legal experts discuss the implications."</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.aulast=Transcript+%E2%80%93+Ray+Suarez+and+others&amp;rft.au=Transcript+%E2%80%93+Ray+Suarez+and+others&amp;rft.btitle=President%27s+Use+of+%27Signing+Statements%27+Raises+Constitutional+Concerns&amp;rft.date=July+24%2C+2006&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fwww.pbs.org%2Fnewshour%2Fbb%2Fwhite_house%2Fjuly-dec06%2Fsigning_07-24.html&amp;rft.pub=PBS+Online+NewsHour&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-tws28sep-49"><span class="mw-cite-backlink"><b><a href="#cite_ref-tws28sep_49-0">^</a></b></span> <span class="reference-text"><span class="citation news">George F. Will – op-ed columnist (December 21, 2008). <a rel="nofollow" class="external text" href="http://www.washingtonpost.com/wp-dyn/content/article/2008/12/19/AR2008121902929.html">"Making Congress Moot"</a>. <i>The Washington Post</i><span class="reference-accessdate">. Retrieved September 28, 2009</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=Making+Congress+Moot&amp;rft.au=George+F.+Will+%E2%80%93+op-ed+columnist&amp;rft.aulast=George+F.+Will+%E2%80%93+op-ed+columnist&amp;rft.date=December+21%2C+2008&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.washingtonpost.com%2Fwp-dyn%2Fcontent%2Farticle%2F2008%2F12%2F19%2FAR2008121902929.html&amp;rft.jtitle=The+Washington+Post&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-50"><span class="mw-cite-backlink"><b><a href="#cite_ref-50">^</a></b></span> <span class="reference-text"><span class="citation news">Duggan, Paul (April 2, 2007). <a rel="nofollow" class="external text" href="http://www.washingtonpost.com/wp-dyn/content/article/2007/04/01/AR2007040101262.html">"Balking at the First Pitch"</a>. <i><a href="/wiki/The_Washington_Post" title="The Washington Post">The Washington Post</a></i>. p.&#160;A01.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=Balking+at+the+First+Pitch&amp;rft.au=Duggan%2C+Paul&amp;rft.aufirst=Paul&amp;rft.aulast=Duggan&amp;rft.date=April+2%2C+2007&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.washingtonpost.com%2Fwp-dyn%2Fcontent%2Farticle%2F2007%2F04%2F01%2FAR2007040101262.html&amp;rft.jtitle=The+Washington+Post&amp;rft.pages=A01&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-51"><span class="mw-cite-backlink"><b><a href="#cite_ref-51">^</a></b></span> <span class="reference-text"><span class="citation news">Grier, Peter (April 25, 2011). <a rel="nofollow" class="external text" href="http://www.csmonitor.com/USA/Politics/DC-Decoder/2011/0425/The-not-so-secret-history-of-the-White-House-Easter-Egg-Roll">"The (not so) secret history of the White House Easter Egg Roll"</a>. <i><a href="/wiki/The_Christian_Science_Monitor" title="The Christian Science Monitor">The Christian Science Monitor</a></i><span class="reference-accessdate">. Retrieved May 6, 2011</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=The+%28not+so%29+secret+history+of+the+White+House+Easter+Egg+Roll&amp;rft.aufirst=Peter&amp;rft.au=Grier%2C+Peter&amp;rft.aulast=Grier&amp;rft.date=April+25%2C+2011&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.csmonitor.com%2FUSA%2FPolitics%2FDC-Decoder%2F2011%2F0425%2FThe-not-so-secret-history-of-the-White-House-Easter-Egg-Roll&amp;rft.jtitle=The+Christian+Science+Monitor&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-Hesse-52"><span class="mw-cite-backlink"><b><a href="#cite_ref-Hesse_52-0">^</a></b></span> <span class="reference-text"><span class="citation news">Hesse, Monica (November 21, 2007). <a rel="nofollow" class="external text" href="http://www.washingtonpost.com/wp-dyn/content/article/2007/11/20/AR2007112002331_4.html?sub=AR&amp;sid=ST2007112002354">"Turkey Pardons, The Stuffing of Historic Legend"</a>. <i>The Washington Post</i><span class="reference-accessdate">. Retrieved May 14, 2011</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=Turkey+Pardons%2C+The+Stuffing+of+Historic+Legend&amp;rft.aufirst=Monica&amp;rft.au=Hesse%2C+Monica&amp;rft.aulast=Hesse&amp;rft.date=November+21%2C+2007&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.washingtonpost.com%2Fwp-dyn%2Fcontent%2Farticle%2F2007%2F11%2F20%2FAR2007112002331_4.html%3Fsub%3DAR%26sid%3DST2007112002354&amp;rft.jtitle=The+Washington+Post&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-53"><span class="mw-cite-backlink"><b><a href="#cite_ref-53">^</a></b></span> <span class="reference-text"><span class="citation news">Gibbs, Nancy (November 13, 2008). <a rel="nofollow" class="external text" href="http://www.time.com/time/magazine/article/0,9171,1858896,00.html">"How Presidents Pass The Torch"</a>. <i><a href="/wiki/Time_magazine" title="Time magazine" class="mw-redirect">Time</a></i><span class="reference-accessdate">. Retrieved May 6, 2011</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=How+Presidents+Pass+The+Torch&amp;rft.aufirst=Nancy&amp;rft.au=Gibbs%2C+Nancy&amp;rft.aulast=Gibbs&amp;rft.date=November+13%2C+2008&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.time.com%2Ftime%2Fmagazine%2Farticle%2F0%2C9171%2C1858896%2C00.html&amp;rft.jtitle=Time&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-54"><span class="mw-cite-backlink"><b><a href="#cite_ref-54">^</a></b></span> <span class="reference-text"><span class="citation news">Dorning, Mike (January 22, 2009). <a rel="nofollow" class="external text" href="http://www.cleveland.com/news/plaindealer/index.ssf?/base/news/1232616798110550.xml&amp;coll=2">"A note from Bush starts morning in the Oval Office"</a>. <i><a href="/wiki/Chicago_Tribune" title="Chicago Tribune">Chicago Tribune</a></i><span class="reference-accessdate">. Retrieved May 6, 2011</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=A+note+from+Bush+starts+morning+in+the+Oval+Office&amp;rft.au=Dorning%2C+Mike&amp;rft.aufirst=Mike&amp;rft.aulast=Dorning&amp;rft.date=January+22%2C+2009&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.cleveland.com%2Fnews%2Fplaindealer%2Findex.ssf%3F%2Fbase%2Fnews%2F1232616798110550.xml%26coll%3D2&amp;rft.jtitle=Chicago+Tribune&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-55"><span class="mw-cite-backlink"><b><a href="#cite_ref-55">^</a></b></span> <span class="reference-text"><span class="citation book">James A. Abbott and Elaine M. Rice (1998). <i>Designing Camelot: The Kennedy White House Restoration</i>. Van Nostrand Reinhold. pp.&#160;9–10. <a href="/wiki/International_Standard_Book_Number" title="International Standard Book Number">ISBN</a>&#160;<a href="/wiki/Special:BookSources/0-442-02532-7" title="Special:BookSources/0-442-02532-7">0-442-02532-7</a>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.au=James+A.+Abbott+and+Elaine+M.+Rice&amp;rft.aulast=James+A.+Abbott+and+Elaine+M.+Rice&amp;rft.btitle=Designing+Camelot%3A+The+Kennedy+White+House+Restoration&amp;rft.date=1998&amp;rft.genre=book&amp;rft.isbn=0-442-02532-7&amp;rft.pages=9-10&amp;rft.pub=Van+Nostrand+Reinhold&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-The_White_House_State_Dinner-56"><span class="mw-cite-backlink"><b><a href="#cite_ref-The_White_House_State_Dinner_56-0">^</a></b></span> <span class="reference-text"><span class="citation web"><a rel="nofollow" class="external text" href="http://www.whitehousehistory.org/whha_press/press_archives/whha_info-statedinner.pdf">"The White House State Dinner"</a>. <i>The White House Historical Association</i><span class="reference-accessdate">. Retrieved May 14, 2011</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=The+White+House+State+Dinner&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.whitehousehistory.org%2Fwhha_press%2Fpress_archives%2Fwhha_info-statedinner.pdf&amp;rft.jtitle=The+White+House+Historical+Association&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-tws11nov304-57"><span class="mw-cite-backlink"><b><a href="#cite_ref-tws11nov304_57-0">^</a></b></span> <span class="reference-text"><span class="citation news">Rachel Dykoski (November 1, 2008). <a rel="nofollow" class="external text" href="http://www.tcdailyplanet.net/article/2008/10/29/book-note-presidential-idolatry-quotbad-democracyquot.html?mini=eventcalendar/2009/02/all">"Book note: Presidential idolatry is "Bad for Democracy<span style="padding-right:0.2em;">"</span>"</a>. Twin Cities Daily Planet<span class="reference-accessdate">. Retrieved November 11, 2009</span>. "Dana D. Nelson's book makes the case that we've had 200+ years of propagandized leadership..."</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.aulast=Rachel+Dykoski&amp;rft.au=Rachel+Dykoski&amp;rft.btitle=Book+note%3A+Presidential+idolatry+is+%22Bad+for+Democracy%22&amp;rft.date=November+1%2C+2008&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fwww.tcdailyplanet.net%2Farticle%2F2008%2F10%2F29%2Fbook-note-presidential-idolatry-quotbad-democracyquot.html%3Fmini%3Deventcalendar%2F2009%2F02%2Fall&amp;rft.pub=Twin+Cities+Daily+Planet&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-tws11novjopkl-58"><span class="mw-cite-backlink"><b><a href="#cite_ref-tws11novjopkl_58-0">^</a></b></span> <span class="reference-text"><span class="citation news">John Neffinger (April 2, 2007). <a rel="nofollow" class="external text" href="http://www.huffingtonpost.com/john-neffinger/democrats-vs-science-why-_b_44733.html">"Democrats vs. <i>Science</i>: Why We're So Damn Good at Losing Elections"</a>. <i>Huffington Post</i><span class="reference-accessdate">. Retrieved November 11, 2009</span>. "...back in the 1980s Lesley Stahl of 60 Minutes ran a piece skewering Reagan's policies on the elderly ... But while her voiceover delivered a scathing critique, the video footage was all drawn from carefully-staged photo-ops of Reagan smiling with seniors and addressing large crowds ... Deaver thanked ... Stahl...for broadcasting all those images of Reagan looking his best."</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=Democrats+vs.+Science%3A+Why+We%27re+So+Damn+Good+at+Losing+Elections&amp;rft.au=John+Neffinger&amp;rft.aulast=John+Neffinger&amp;rft.date=April+2%2C+2007&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.huffingtonpost.com%2Fjohn-neffinger%2Fdemocrats-vs-science-why-_b_44733.html&amp;rft.jtitle=Huffington+Post&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-tws11novfddxs-59"><span class="mw-cite-backlink"><b><a href="#cite_ref-tws11novfddxs_59-0">^</a></b></span> <span class="reference-text"><span class="citation news"><a href="/wiki/Dana_D._Nelson" title="Dana D. Nelson">Dana D. Nelson</a> (2008). <a rel="nofollow" class="external text" href="http://books.google.com/books?id=qgAWphms5oMC&amp;pg=PA57&amp;lpg=PA57&amp;dq=kennedy+image+nelson+%22bad+for+democracy%22&amp;source=bl&amp;ots=BQX6dXpTNw&amp;sig=qbo2XZA-Exl28hYrX2vuwm532BI&amp;hl=en&amp;ei=ZMr6Spr3K8_anAfxk8X9DA&amp;sa=X&amp;oi=book_result&amp;ct=result&amp;resnum=3&amp;ved=0CA8Q6AEwAg#v=snippet&amp;q=kennedy&amp;f=false">"Bad for democracy: how the Presidency undermines the power of the people"</a>. U of Minnesota Press. <a href="/wiki/International_Standard_Book_Number" title="International Standard Book Number">ISBN</a>&#160;<a href="/wiki/Special:BookSources/978-0-8166-5677-6" title="Special:BookSources/978-0-8166-5677-6">978-0-8166-5677-6</a><span class="reference-accessdate">. Retrieved November 11, 2009</span>. "in rich detail how Kennedy drew on the power of myth as he framed his experience during World War II, when his PT boat was sliced in half by a Japanese..."</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.au=Dana+D.+Nelson&amp;rft.aulast=Dana+D.+Nelson&amp;rft.btitle=Bad+for+democracy%3A+how+the+Presidency+undermines+the+power+of+the+people&amp;rft.date=2008&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fbooks.google.com%2Fbooks%3Fid%3DqgAWphms5oMC%26pg%3DPA57%26lpg%3DPA57%26dq%3Dkennedy%2Bimage%2Bnelson%2B%2522bad%2Bfor%2Bdemocracy%2522%26source%3Dbl%26ots%3DBQX6dXpTNw%26sig%3Dqbo2XZA-Exl28hYrX2vuwm532BI%26hl%3Den%26ei%3DZMr6Spr3K8_anAfxk8X9DA%26sa%3DX%26oi%3Dbook_result%26ct%3Dresult%26resnum%3D3%26ved%3D0CA8Q6AEwAg%23v%3Dsnippet%26q%3Dkennedy%26f%3Dfalse&amp;rft.isbn=978-0-8166-5677-6&amp;rft.pub=U+of+Minnesota+Press&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-tws11novfyyhhxs-60"><span class="mw-cite-backlink"><b><a href="#cite_ref-tws11novfyyhhxs_60-0">^</a></b></span> <span class="reference-text"><span class="citation news">Dana D. Nelson (2008). <a rel="nofollow" class="external text" href="http://books.google.com/books?id=qgAWphms5oMC&amp;dq=kennedy+image+nelson+%22bad+for+democracy%22&amp;q=kennedy#v=snippet&amp;q=kennedy&amp;f=false">"Bad for democracy: how the Presidency undermines the power of the people"</a>. U of Minnesota Press. <a href="/wiki/International_Standard_Book_Number" title="International Standard Book Number">ISBN</a>&#160;<a href="/wiki/Special:BookSources/978-0-8166-5677-6" title="Special:BookSources/978-0-8166-5677-6">978-0-8166-5677-6</a><span class="reference-accessdate">. Retrieved November 11, 2009</span>. "Even before Kennedy ran for Congress, he had become fascinated, through his Hollywood acquaintances and visits, with the idea of image... (p.54)"</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.au=Dana+D.+Nelson&amp;rft.aulast=Dana+D.+Nelson&amp;rft.btitle=Bad+for+democracy%3A+how+the+Presidency+undermines+the+power+of+the+people&amp;rft.date=2008&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fbooks.google.com%2Fbooks%3Fid%3DqgAWphms5oMC%26dq%3Dkennedy%2Bimage%2Bnelson%2B%2522bad%2Bfor%2Bdemocracy%2522%26q%3Dkennedy%23v%3Dsnippet%26q%3Dkennedy%26f%3Dfalse&amp;rft.isbn=978-0-8166-5677-6&amp;rft.pub=U+of+Minnesota+Press&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-tws9novrfrff-61"><span class="mw-cite-backlink"><b><a href="#cite_ref-tws9novrfrff_61-0">^</a></b></span> <span class="reference-text"><span class="citation news">Lexington (July 21, 2009). <a rel="nofollow" class="external text" href="http://www.economist.com/blogs/lexington/2009/07/the_cult_of_the_presidency.cfm">"The Cult of the Presidency"</a>. <i>The Economist</i><span class="reference-accessdate">. Retrieved November 9, 2009</span>. "Gene Healy argues that because voters expect the president to do everything ... When they inevitably fail to keep their promises, voters swiftly become disillusioned. Yet they never lose their romantic idea that the president should drive the economy, vanquish enemies, lead the free world, comfort tornado victims, heal the national soul and protect borrowers from hidden credit-card fees."</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=The+Cult+of+the+Presidency&amp;rft.aulast=Lexington&amp;rft.au=Lexington&amp;rft.date=July+21%2C+2009&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.economist.com%2Fblogs%2Flexington%2F2009%2F07%2Fthe_cult_of_the_presidency.cfm&amp;rft.jtitle=The+Economist&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-tws9nov09-62"><span class="mw-cite-backlink"><b><a href="#cite_ref-tws9nov09_62-0">^</a></b></span> <span class="reference-text"><span class="citation news">Michiko Kakutani (book reviewer) (July 6, 2007). <a rel="nofollow" class="external text" href="http://www.nytimes.com/2007/07/06/books/06book.html">"Unchecked and Unbalanced"</a>. <i>The New York Times</i><span class="reference-accessdate">. Retrieved November 9, 2009</span>. "the founding fathers had 'scant affection for strong executives' like England’s king, and ... Bush White House’s claims are rooted in ideas “about the ‘divine’ right of kings” ... and that certainly did not find their 'way into our founding documents, the 1776 Declaration of Independence and the Constitution of 1787.'"</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=Unchecked+and+Unbalanced&amp;rft.aulast=Michiko+Kakutani+%28book+reviewer%29&amp;rft.au=Michiko+Kakutani+%28book+reviewer%29&amp;rft.date=July+6%2C+2007&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.nytimes.com%2F2007%2F07%2F06%2Fbooks%2F06book.html&amp;rft.jtitle=The+New+York+Times&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-twsSEPnnxcvdf1-63"><span class="mw-cite-backlink"><b><a href="#cite_ref-twsSEPnnxcvdf1_63-0">^</a></b></span> <span class="reference-text"><span class="citation news"><a rel="nofollow" class="external text" href="http://www.huffingtonpost.com/david-sirota/the-conquest-of-president_b_120582.html">"The Conquest of Presidentialism"</a>. <i>Huffington Post</i>. August 22, 2008<span class="reference-accessdate">. Retrieved September 20, 2009</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=The+Conquest+of+Presidentialism&amp;rft.date=August+22%2C+2008&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.huffingtonpost.com%2Fdavid-sirota%2Fthe-conquest-of-president_b_120582.html&amp;rft.jtitle=Huffington+Post&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-twsSEPnn5454-64"><span class="mw-cite-backlink"><b><a href="#cite_ref-twsSEPnn5454_64-0">^</a></b></span> <span class="reference-text"><span class="citation news">interview by David Schimke (September–October 2008). <a rel="nofollow" class="external text" href="http://www.utne.com/2008-09-01/Politics/Presidential-Power-to-the-People.aspx">"Presidential Power to the People – Author Dana D. Nelson on why democracy demands that the next president be taken down a notch"</a>. <i>Utne Reader</i><span class="reference-accessdate">. Retrieved September 20, 2009</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=Presidential+Power+to+the+People+%E2%80%93+Author+Dana+D.+Nelson+on+why+democracy+demands+that+the+next+president+be+taken+down+a+notch&amp;rft.au=interview+by+David+Schimke&amp;rft.aulast=interview+by+David+Schimke&amp;rft.date=September-October+2008&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.utne.com%2F2008-09-01%2FPolitics%2FPresidential-Power-to-the-People.aspx&amp;rft.jtitle=Utne+Reader&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-tws9nov07-65"><span class="mw-cite-backlink"><b><a href="#cite_ref-tws9nov07_65-0">^</a></b></span> <span class="reference-text"><span class="citation news">Ross Linker (September 27, 2007). <a rel="nofollow" class="external text" href="http://media.www.jhunewsletter.com/media/storage/paper932/news/2007/09/27/NewsFeatures/Critical.Of.Presidency.Prof.Ginsberg.And.Crenson.Unite-2997235.shtml">"Critical of Presidency, Prof. Ginsberg and Crenson unite"</a>. The Johns-Hopkins Newsletter<span class="reference-accessdate">. Retrieved November 9, 2009</span>. "presidents slowly but surely gain more and more power with both the public at large and other political institutions doing nothing to prevent it."</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.aulast=Ross+Linker&amp;rft.au=Ross+Linker&amp;rft.btitle=Critical+of+Presidency%2C+Prof.+Ginsberg+and+Crenson+unite&amp;rft.date=September+27%2C+2007&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fmedia.www.jhunewsletter.com%2Fmedia%2Fstorage%2Fpaper932%2Fnews%2F2007%2F09%2F27%2FNewsFeatures%2FCritical.Of.Presidency.Prof.Ginsberg.And.Crenson.Unite-2997235.shtml&amp;rft.pub=The+Johns-Hopkins+Newsletter&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-tws9nov08-66"><span class="mw-cite-backlink"><b><a href="#cite_ref-tws9nov08_66-0">^</a></b></span> <span class="reference-text"><span class="citation news">Michiko Kakutani (book reviewer) (July 6, 2007). <a rel="nofollow" class="external text" href="http://www.nytimes.com/2007/07/06/books/06book.html">"Unchecked and Unbalanced"</a>. <i>The New York Times</i><span class="reference-accessdate">. Retrieved November 9, 2009</span>. "UNCHECKED AND UNBALANCED: Presidential Power in a Time of Terror By Frederick A. O. Schwarz Jr. and Aziz Z. Huq (authors)"</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=Unchecked+and+Unbalanced&amp;rft.aulast=Michiko+Kakutani+%28book+reviewer%29&amp;rft.au=Michiko+Kakutani+%28book+reviewer%29&amp;rft.date=July+6%2C+2007&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.nytimes.com%2F2007%2F07%2F06%2Fbooks%2F06book.html&amp;rft.jtitle=The+New+York+Times&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-twsSEPrt8jyh5-67"><span class="mw-cite-backlink">^ <a href="#cite_ref-twsSEPrt8jyh5_67-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-twsSEPrt8jyh5_67-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><span class="citation news">Dana D. Nelson (October 11, 2008). <a rel="nofollow" class="external text" href="http://www.latimes.com/news/opinion/la-oe-nelson11-2008oct11,0,224216.story">"Opinion–The 'unitary executive' question – What do McCain and Obama think of the concept?"</a>. <i>Los Angeles Times</i><span class="reference-accessdate">. Retrieved September 21, 2009</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=Opinion%E2%80%93The+%27unitary+executive%27+question+%E2%80%93+What+do+McCain+and+Obama+think+of+the+concept%3F&amp;rft.au=Dana+D.+Nelson&amp;rft.aulast=Dana+D.+Nelson&amp;rft.date=October+11%2C+2008&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.latimes.com%2Fnews%2Fopinion%2Fla-oe-nelson11-2008oct11%2C0%2C224216.story&amp;rft.jtitle=Los+Angeles+Times&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-tws8nov06-68"><span class="mw-cite-backlink"><b><a href="#cite_ref-tws8nov06_68-0">^</a></b></span> <span class="reference-text"><span class="citation news">Scott Shane (September 25, 2009). <a rel="nofollow" class="external text" href="http://www.nytimes.com/2009/09/26/us/politics/26activist.html">"A Critic Finds Obama Policies a Perfect Target"</a>. <i>The New York Times</i><span class="reference-accessdate">. Retrieved November 8, 2009</span>. "There is the small, minority-owned firm with deep ties to President Obama’s Chicago backers, made eligible by the Federal Reserve to handle potentially lucrative credit deals. 'I want to know how these firms are picked and who picked them,' Mr. Wilson, the group’s president, tells his eager researchers."</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=A+Critic+Finds+Obama+Policies+a+Perfect+Target&amp;rft.aulast=Scott+Shane&amp;rft.au=Scott+Shane&amp;rft.date=September+25%2C+2009&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.nytimes.com%2F2009%2F09%2F26%2Fus%2Fpolitics%2F26activist.html&amp;rft.jtitle=The+New+York+Times&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-70"><span class="mw-cite-backlink"><b><a href="#cite_ref-70">^</a></b></span> <span class="reference-text">See: <span class="citation journal">Peabody, Bruce G.; Gant, Scott E. (1999). "The Twice and Future President: Constitutional Interstices and the Twenty-Second Amendment". <i>Minnesota Law Review</i> (Minneapolis, MN: Minnesota Law Review) <b>83</b> (565).</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=The+Twice+and+Future+President%3A+Constitutional+Interstices+and+the+Twenty-Second+Amendment&amp;rft.aufirst=Bruce+G.&amp;rft.au=Gant%2C+Scott+E.&amp;rft.aulast=Peabody&amp;rft.au=Peabody%2C+Bruce+G.&amp;rft.date=1999&amp;rft.genre=article&amp;rft.issue=565&amp;rft.jtitle=Minnesota+Law+Review&amp;rft.place=Minneapolis%2C+MN&amp;rft.pub=Minnesota+Law+Review&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.volume=83" class="Z3988"><span style="display:none;">&#160;</span></span>; alternatively, see: <span class="citation journal">Albert, Richard (2005). "The Evolving Vice Presidency". <i>Temple Law Review</i> (Philadelphia, PA: <a href="/wiki/Temple_University" title="Temple University">Temple University</a> of the <a href="/wiki/Commonwealth_System_of_Higher_Education" title="Commonwealth System of Higher Education">Commonwealth System of Higher Education</a>) <b>78</b> (811, at 856–9).</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=The+Evolving+Vice+Presidency&amp;rft.au=Albert%2C+Richard&amp;rft.aufirst=Richard&amp;rft.aulast=Albert&amp;rft.date=2005&amp;rft.genre=article&amp;rft.issue=811%2C+at+856%E2%80%939&amp;rft.jtitle=Temple+Law+Review&amp;rft.place=Philadelphia%2C+PA&amp;rft.pub=Temple+University+of+the+Commonwealth+System+of+Higher+Education&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.volume=78" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-71"><span class="mw-cite-backlink"><b><a href="#cite_ref-71">^</a></b></span> <span class="reference-text">See <a rel="nofollow" class="external text" href="http://www.gpoaccess.gov/constitution/browse2002.html#2002">GPO Annotated U.S. Constitution, 2002 Ed.</a>, at 611 &amp; nn. 772–773.</span></li>
+<li id="cite_note-72"><span class="mw-cite-backlink"><b><a href="#cite_ref-72">^</a></b></span> <span class="reference-text">U.S. Const. art. II, § 1, cl. 8.</span></li>
+<li id="cite_note-73"><span class="mw-cite-backlink"><b><a href="#cite_ref-73">^</a></b></span> <span class="reference-text"><span class="citation news"><a rel="nofollow" class="external text" href="http://www.msnbc.msn.com/id/28663712/ns/politics-inauguration/t/judge-doesnt-ban-god-inaugural-oath/">"Judge doesn't ban "God" in inaugural oath"</a>. <a href="/wiki/Associated_Press" title="Associated Press">Associated Press</a>. January 15, 2009<span class="reference-accessdate">. Retrieved August 18, 2012</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.btitle=Judge+doesn%27t+ban+%22God%22+in+inaugural+oath&amp;rft.date=January+15%2C+2009&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fwww.msnbc.msn.com%2Fid%2F28663712%2Fns%2Fpolitics-inauguration%2Ft%2Fjudge-doesnt-ban-god-inaugural-oath%2F&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-74"><span class="mw-cite-backlink"><b><a href="#cite_ref-74">^</a></b></span> <span class="reference-text">Guardian, "<a rel="nofollow" class="external text" href="http://www.guardian.co.uk/world/2007/jul/20/usa.dickcheney">Bush colonoscopy leaves Cheney in charge</a>", July 20, 2007.</span></li>
+<li id="cite_note-75"><span class="mw-cite-backlink"><b><a href="#cite_ref-75">^</a></b></span> <span class="reference-text"><a href="/wiki/Title_3_of_the_United_States_Code" title="Title 3 of the United States Code">3 U.S.C.</a>&#160;<a rel="nofollow" class="external text" href="http://www.law.cornell.edu/uscode/3/20.html">§&#160;20</a></span></li>
+<li id="cite_note-salary_history-76"><span class="mw-cite-backlink"><b><a href="#cite_ref-salary_history_76-0">^</a></b></span> <span class="reference-text"><span class="citation web"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20110606213444/http://www.lib.umich.edu/node/11736/">"Presidential and Vice Presidential Salaries, 1789+"</a>. <a href="/wiki/University_of_Michigan" title="University of Michigan">University of Michigan</a>. Archived from <a rel="nofollow" class="external text" href="http://www.lib.umich.edu/node/11736/">the original</a> on June 6, 2011<span class="reference-accessdate">. Retrieved October 7, 2009</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.btitle=Presidential+and+Vice+Presidential+Salaries%2C+1789%2B&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fwww.lib.umich.edu%2Fnode%2F11736%2F&amp;rft.pub=University+of+Michigan&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-dollar_calc-77"><span class="mw-cite-backlink"><b><a href="#cite_ref-dollar_calc_77-0">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://measuringworth.com/calculators/uscompare/#">Relative Value in US Dollars</a>. <i>Measuring Worth</i>. Retrieved May 30, 2006.</span></li>
+<li id="cite_note-Inflation_Calculator-78"><span class="mw-cite-backlink"><b><a href="#cite_ref-Inflation_Calculator_78-0">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://data.bls.gov/cgi-bin/cpicalc.pl#">Dept. of Labor Inflation Calculator</a>. <i>Inflation Calculator</i>. Retrieved August 10, 2009.</span></li>
+<li id="cite_note-salary_details-79"><span class="mw-cite-backlink"><b><a href="#cite_ref-salary_details_79-0">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://people.howstuffworks.com/question449.htm">"How much does the U.S. president get paid?"</a>. <i>Howstuffworks</i>. Retrieved July 24, 2007.</span></li>
+<li id="cite_note-salaries_of_federal_officials-80"><span class="mw-cite-backlink"><b><a href="#cite_ref-salaries_of_federal_officials_80-0">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.senate.gov/reference/resources/pdf/98-53.pdf">Salaries of Federal Officials: A Fact Sheet</a>. <i>United States Senate</i> website. Retrieved August 6, 2009.</span></li>
+<li id="cite_note-bumiller200901-81"><span class="mw-cite-backlink"><b><a href="#cite_ref-bumiller200901_81-0">^</a></b></span> <span class="reference-text"><span class="citation news">Bumiller, Elizabeth (January 2009). <a rel="nofollow" class="external text" href="http://ngm.nationalgeographic.com/print/2009/01/president/bumiller-text">"Inside the Presidency"</a>. <i>National Geographic</i><span class="reference-accessdate">. Retrieved June 24, 2012</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=Inside+the+Presidency&amp;rft.au=Bumiller%2C+Elizabeth&amp;rft.aulast=Bumiller%2C+Elizabeth&amp;rft.date=January+2009&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fngm.nationalgeographic.com%2Fprint%2F2009%2F01%2Fpresident%2Fbumiller-text&amp;rft.jtitle=National+Geographic&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-82"><span class="mw-cite-backlink"><b><a href="#cite_ref-82">^</a></b></span> <span class="reference-text"><span class="citation web"><a rel="nofollow" class="external text" href="http://www.gsa.gov/Portal/gsa/ep/buildingView.do?pageTypeId=17109&amp;channelPage=/ep/channel/gsaOverview.jsp&amp;channelId=-25241&amp;bid=724">"President's Guest House (includes Lee House and Blair House), Washington, DC"</a><span class="reference-accessdate">. Retrieved September 30, 2009</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.btitle=President%27s+Guest+House+%28includes+Lee+House+and+Blair+House%29%2C+Washington%2C+DC&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fwww.gsa.gov%2FPortal%2Fgsa%2Fep%2FbuildingView.do%3FpageTypeId%3D17109%26channelPage%3D%2Fep%2Fchannel%2FgsaOverview.jsp%26channelId%3D-25241%26bid%3D724&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-USSSPRL-83"><span class="mw-cite-backlink"><b><a href="#cite_ref-USSSPRL_83-0">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.secretservice.gov/press/GPA02-09_Limo.pdf">New Presidential Limousine enters Secret Service Fleet</a> U.S. Secret Service Press Release (January 14, 2009) Retrieved on January 20, 2009.</span></li>
+<li id="cite_note-af1-84"><span class="mw-cite-backlink"><b><a href="#cite_ref-af1_84-0">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.whitehouse.gov/whmo/af1.html">Air Force One</a>. White House Military Office. Retrieved June 17, 2007.</span></li>
+<li id="cite_note-85"><span class="mw-cite-backlink"><b><a href="#cite_ref-85">^</a></b></span> <span class="reference-text">Any <a href="/wiki/United_States_Air_Force" title="United States Air Force">U.S. Air Force</a> aircraft carrying the president will use the <a href="/wiki/Call_sign" title="Call sign">call sign</a> "Air Force One." Similarly, "<a href="/wiki/Navy_One" title="Navy One">Navy One</a>", "<a href="/wiki/Army_One" title="Army One">Army One</a>", and "<a href="/wiki/Coast_Guard_One" title="Coast Guard One">Coast Guard One</a>" are the call signs used if the president is aboard a craft belonging to these services. "<a href="/wiki/Executive_One" title="Executive One">Executive One</a>" becomes the call sign of any civilian aircraft when the president boards.</span></li>
+<li id="cite_note-junior-86"><span class="mw-cite-backlink"><b><a href="#cite_ref-junior_86-0">^</a></b></span> <span class="reference-text"><span class="citation web"><a rel="nofollow" class="external text" href="http://www.nps.gov/archive/eise/secret16.htm">"Junior Secret Service Program: Assignment 7. Code Names"</a>. <a href="/wiki/National_Park_Service" title="National Park Service">National Park Service</a><span class="reference-accessdate">. Retrieved August 18, 2007</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.btitle=Junior+Secret+Service+Program%3A+Assignment+7.+Code+Names&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fwww.nps.gov%2Farchive%2Feise%2Fsecret16.htm&amp;rft.pub=National+Park+Service&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-cbs-codenames-87"><span class="mw-cite-backlink"><b><a href="#cite_ref-cbs-codenames_87-0">^</a></b></span> <span class="reference-text"><span class="citation news"><a rel="nofollow" class="external text" href="http://www.cbsnews.com/stories/2008/09/16/earlyshow/main4452073.shtml?source=RSSattr=Politics_4452073">"Candidate Code Names Secret Service Monikers Used On The Campaign Trail"</a>. <a href="/wiki/CBS" title="CBS">CBS</a>. September 16, 2008<span class="reference-accessdate">. Retrieved November 12, 2008</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.btitle=Candidate+Code+Names+Secret+Service+Monikers+Used+On+The+Campaign+Trail&amp;rft.date=September+16%2C+2008&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fwww.cbsnews.com%2Fstories%2F2008%2F09%2F16%2Fearlyshow%2Fmain4452073.shtml%3Fsource%3DRSSattr%3DPolitics_4452073&amp;rft.pub=CBS&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-88"><span class="mw-cite-backlink"><b><a href="#cite_ref-88">^</a></b></span> <span class="reference-text"><span class="citation web">Schwemle, Barbara L. (October 17, 2012). <a rel="nofollow" class="external text" href="http://www.fas.org/sgp/crs/misc/RS20115.pdf">"President of the United States: Compensation"</a>. Congressional Research Service<span class="reference-accessdate">. Retrieved January 10, 2013</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.aufirst=Barbara+L.&amp;rft.aulast=Schwemle&amp;rft.au=Schwemle%2C+Barbara+L.&amp;rft.btitle=President+of+the+United+States%3A+Compensation&amp;rft.date=October+17%2C+2012&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fwww.fas.org%2Fsgp%2Fcrs%2Fmisc%2FRS20115.pdf&amp;rft.pub=Congressional+Research+Service&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-89"><span class="mw-cite-backlink"><b><a href="#cite_ref-89">^</a></b></span> <span class="reference-text"><span class="citation web"><a rel="nofollow" class="external text" href="http://www.toledoblade.com/Politics/2007/01/07/Former-presidents-cost-U-S-taxpayers-big-bucks-tab-from-1977-to-2000-is-pegged-at-370-million.html">"Former presidents cost U.S. taxpayers big bucks"</a>. <i><a href="/wiki/The_Blade_(newspaper)" title="The Blade (newspaper)">Toledo Blade</a></i>. January 7, 2007<span class="reference-accessdate">. Retrieved May 22, 2007</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=Former+presidents+cost+U.S.+taxpayers+big+bucks&amp;rft.date=January+7%2C+2007&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.toledoblade.com%2FPolitics%2F2007%2F01%2F07%2FFormer-presidents-cost-U-S-taxpayers-big-bucks-tab-from-1977-to-2000-is-pegged-at-370-million.html&amp;rft.jtitle=Toledo+Blade&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-90"><span class="mw-cite-backlink"><b><a href="#cite_ref-90">^</a></b></span> <span class="reference-text"><a href="/wiki/Title_18_of_the_United_States_Code" title="Title 18 of the United States Code">18 U.S.C.</a>&#160;<a rel="nofollow" class="external text" href="http://www.law.cornell.edu/uscode/18/3056.html">§&#160;3056</a></span></li>
+<li id="cite_note-91"><span class="mw-cite-backlink"><b><a href="#cite_ref-91">^</a></b></span> <span class="reference-text"><span class="citation news"><a rel="nofollow" class="external text" href="http://www.washingtonpost.com/politics/obama-signs-bill-granting-lifetime-secret-service-protection-to-former-presidents-and-spouses/2013/01/10/c4474416-5b5a-11e2-b8b2-0d18a64c8dfa_story.html">"Obama signs bill granting lifetime Secret Service protection to former presidents and spouses"</a>. The Associated Press. January 10, 2013<span class="reference-accessdate">. Retrieved January 10, 2013</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.btitle=Obama+signs+bill+granting+lifetime+Secret+Service+protection+to+former+presidents+and+spouses&amp;rft.date=January+10%2C+2013&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fwww.washingtonpost.com%2Fpolitics%2Fobama-signs-bill-granting-lifetime-secret-service-protection-to-former-presidents-and-spouses%2F2013%2F01%2F10%2Fc4474416-5b5a-11e2-b8b2-0d18a64c8dfa_story.html&amp;rft.pub=The+Associated+Press&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-secretservice.gov-92"><span class="mw-cite-backlink">^ <a href="#cite_ref-secretservice.gov_92-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-secretservice.gov_92-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><span class="citation web"><a rel="nofollow" class="external text" href="http://www.secretservice.gov/protection.shtml">"United States Secret Service: Protection"</a>. United States Secret Service<span class="reference-accessdate">. Retrieved October 8, 2014</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.btitle=United+States+Secret+Service%3A+Protection&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fwww.secretservice.gov%2Fprotection.shtml&amp;rft.pub=United+States+Secret+Service&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-93"><span class="mw-cite-backlink"><b><a href="#cite_ref-93">^</a></b></span> <span class="reference-text"><span class="citation news"><a rel="nofollow" class="external text" href="http://www.washingtontimes.com/news/2013/jan/10/inside-politics-obama-signs-protection-bill-for-fo/?page=all">"Obama signs protection bill for former presidents"</a>. <i>The Washington Times</i>. January 10, 2013<span class="reference-accessdate">. Retrieved August 14, 2013</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=Obama+signs+protection+bill+for+former+presidents&amp;rft.date=January+10%2C+2013&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.washingtontimes.com%2Fnews%2F2013%2Fjan%2F10%2Finside-politics-obama-signs-protection-bill-for-fo%2F%3Fpage%3Dall&amp;rft.jtitle=The+Washington+Times&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-apreaction19810331-94"><span class="mw-cite-backlink"><b><a href="#cite_ref-apreaction19810331_94-0">^</a></b></span> <span class="reference-text"><span class="citation news"><a rel="nofollow" class="external text" href="http://news.google.com/newspapers?id=TE4tAAAAIBAJ&amp;sjid=bM4FAAAAIBAJ&amp;dq=reagan%20assassination%201981&amp;pg=1392%2C4423618">"Shock and Anger Flash Throughout the United States"</a>. Associated Press. March 31, 1981<span class="reference-accessdate">. Retrieved March 11, 2011</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.btitle=Shock+and+Anger+Flash+Throughout+the+United+States&amp;rft.date=March+31%2C+1981&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fnews.google.com%2Fnewspapers%3Fid%3DTE4tAAAAIBAJ%26sjid%3DbM4FAAAAIBAJ%26dq%3Dreagan%2520assassination%25201981%26pg%3D1392%252C4423618&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-4presidentsphotos-95"><span class="mw-cite-backlink"><b><a href="#cite_ref-4presidentsphotos_95-0">^</a></b></span> <span class="reference-text"><span class="citation web"><a rel="nofollow" class="external text" href="http://www.reagan.utexas.edu/archives/photographs/four.html">"FOUR PRESIDENTS"</a>. Reagan Presidential Library, National Archives and Records Administration<span class="reference-accessdate">. Retrieved April 3, 2011</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.btitle=FOUR+PRESIDENTS&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fwww.reagan.utexas.edu%2Farchives%2Fphotographs%2Ffour.html&amp;rft.pub=Reagan+Presidential+Library%2C+National+Archives+and+Records+Administration&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></span></li>
+<li id="cite_note-96"><span class="mw-cite-backlink"><b><a href="#cite_ref-96">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.whitehouse.gov/about/presidents/RichardNixon/">Biography of Richard M. Nixon</a>, The White House.</span></li>
+<li id="cite_note-97"><span class="mw-cite-backlink"><b><a href="#cite_ref-97">^</a></b></span> <span class="reference-text"><a href="/wiki/Title_44_of_the_United_States_Code" title="Title 44 of the United States Code">44 U.S.C.</a>&#160;<a rel="nofollow" class="external text" href="http://www.law.cornell.edu/uscode/44/2112.html">§&#160;2112</a></span></li>
+</ol>
+</div>
+<h2><span class="mw-headline" id="Further_reading">Further reading</span></h2>
+<div class="refbegin" style="">
+<ul>
+<li><span class="citation journal"><a href="/wiki/Elisabeth_Bumiller" title="Elisabeth Bumiller">Bumiller, Elisabeth</a> (January 2009). <a rel="nofollow" class="external text" href="http://ngm.nationalgeographic.com/2009/01/president/bumiller-text">"Inside the Presidency"</a>. <i><a href="/wiki/National_Geographic_Magazine" title="National Geographic Magazine" class="mw-redirect">National Geographic</a></i> <b>215</b> (1): 130–149.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=Inside+the+Presidency&amp;rft.au=Bumiller%2C+Elisabeth&amp;rft.aufirst=Elisabeth&amp;rft.aulast=Bumiller&amp;rft.date=January+2009&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fngm.nationalgeographic.com%2F2009%2F01%2Fpresident%2Fbumiller-text&amp;rft.issue=1&amp;rft.jtitle=National+Geographic&amp;rft.pages=130-149&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.volume=215" class="Z3988"><span style="display:none;">&#160;</span></span></li>
+<li>Couch, Ernie. <i>Presidential Trivia.</i> Rutledge Hill Press. March 1, 1996. <a href="/wiki/Special:BookSources/1558534121" class="internal mw-magiclink-isbn">ISBN 1-55853-412-1</a></li>
+<li>Lang, J. Stephen. <i>The Complete Book of Presidential Trivia.</i> Pelican Publishing. 2001. <a href="/wiki/Special:BookSources/1565548779" class="internal mw-magiclink-isbn">ISBN 1-56554-877-9</a></li>
+<li>Leo, Leonard – Taranto, James – Bennett, William J. <i>Presidential Leadership: Rating the Best and the Worst in the White House.</i> Simon and Schuster. 2004. <a href="/wiki/Special:BookSources/0743254333" class="internal mw-magiclink-isbn">ISBN 0-7432-5433-3</a></li>
+<li><i>Presidential Studies Quarterly</i>, published by Blackwell Synergy, is a quarterly academic journal on the presidency.</li>
+<li>Świątczak, Wasilewska, Iwona. <i>“The Toughest Season in the White House”: The Rhetorical Presidency and the State of the Union Address, 1953–1992.</i> Ph.D. thesis. University of Helsinki, 2014. <a href="/wiki/Special:BookSources/9789515102485" class="internal mw-magiclink-isbn">ISBN 978-951-51-0248-5</a>. <a rel="nofollow" class="external text" href="http://urn.fi/URN:ISBN:978-951-51-0249-2">Online version.</a></li>
+<li>Waldman, Michael – Stephanopoulos, George. <i>My Fellow Americans: The Most Important Speeches of America's Presidents, from George Washington to George W. Bush.</i> Sourcebooks Trade. 2003. <a href="/wiki/Special:BookSources/1402200277" class="internal mw-magiclink-isbn">ISBN 1-4022-0027-7</a></li>
+<li>Winder, Michael K. <i><a href="/wiki/Presidents_and_Prophets" title="Presidents and Prophets">Presidents and Prophets</a>: The Story of America's Presidents and the LDS Church</i>. Covenant Communications. 2007. <a href="/wiki/Special:BookSources/1598114522" class="internal mw-magiclink-isbn">ISBN 1-59811-452-2</a></li>
+</ul>
+</div>
+<h2><span class="mw-headline" id="External_links">External links</span></h2>
+<table style="float:right;">
+<tr>
+<td>
+<table class="mbox-small plainlinks" style="border:1px solid #aaa;background-color:#f9f9f9">
+<tr>
+<td class="mbox-image"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/4/4c/Wikisource-logo.svg/38px-Wikisource-logo.svg.png" width="38" height="40" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/4c/Wikisource-logo.svg/57px-Wikisource-logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/4c/Wikisource-logo.svg/76px-Wikisource-logo.svg.png 2x" data-file-width="410" data-file-height="430" /></td>
+<td class="mbox-text plainlist"><a href="/wiki/Wikisource" title="Wikisource">Wikisource</a> has original text related to this article:
+<div style="margin-left: 10px;"><b><a href="//en.wikisource.org/wiki/Special:Search/President_of_the_United_States" class="extiw" title="wikisource:Special:Search/President of the United States">President of the United States</a></b></div>
+</td>
+</tr>
+</table>
+<table class="mbox-small plainlinks" style="border:1px solid #aaa;background-color:#f9f9f9">
+<tr>
+<td class="mbox-image"><img alt="" src="//upload.wikimedia.org/wikipedia/en/thumb/4/4a/Commons-logo.svg/30px-Commons-logo.svg.png" width="30" height="40" srcset="//upload.wikimedia.org/wikipedia/en/thumb/4/4a/Commons-logo.svg/45px-Commons-logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/4/4a/Commons-logo.svg/59px-Commons-logo.svg.png 2x" data-file-width="1024" data-file-height="1376" /></td>
+<td class="mbox-text plainlist">Wikimedia Commons has media related to <i><b><a href="//commons.wikimedia.org/wiki/Presidents_of_the_United_States" class="extiw" title="commons:Presidents of the United States">Presidents of the United States</a></b></i>.</td>
+</tr>
+</table>
+<table class="mbox-small plainlinks" style="border:1px solid #aaa;background-color:#f9f9f9">
+<tr>
+<td class="mbox-image"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Wikiquote-logo.svg/34px-Wikiquote-logo.svg.png" width="34" height="40" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Wikiquote-logo.svg/51px-Wikiquote-logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Wikiquote-logo.svg/68px-Wikiquote-logo.svg.png 2x" data-file-width="300" data-file-height="355" /></td>
+<td class="mbox-text plainlist">Wikiquote has quotations related to: <i><b><a href="//en.wikiquote.org/wiki/Special:Search/President_of_the_United_States" class="extiw" title="q:Special:Search/President of the United States">President of the United States</a></b></i></td>
+</tr>
+</table>
+</td>
+</tr>
+</table>
+<dl>
+<dt>Official</dt>
+</dl>
+<ul>
+<li><span class="citation web"><a rel="nofollow" class="external text" href="http://www.whitehouse.gov/administration/eop/">"Executive Office of the President"</a><span class="reference-accessdate">. Retrieved January 21, 2009</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.btitle=Executive+Office+of+the+President&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fwww.whitehouse.gov%2Fadministration%2Feop%2F&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></li>
+<li><span class="citation web"><a rel="nofollow" class="external text" href="http://www.whitehouse.gov/president/">"White House"</a><span class="reference-accessdate">. Retrieved October 7, 2005</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.btitle=White+House&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fwww.whitehouse.gov%2Fpresident%2F&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span></li>
+</ul>
+<dl>
+<dt>Presidential histories</dt>
+</dl>
+<ul>
+<li><a rel="nofollow" class="external text" href="http://dca.tufts.edu/features/aas/index.html">A New Nation Votes: American Election Returns, 1787–1825</a> Presidential election returns including town and county breakdowns</li>
+<li><span class="citation web"><a rel="nofollow" class="external text" href="http://www.americanpresidents.org/">"Life Portraits of the American Presidents"</a>. <i>C-SPAN</i><span class="reference-accessdate">. Retrieved October 7, 2005</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=Life+Portraits+of+the+American+Presidents&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.americanpresidents.org%2F&amp;rft.jtitle=C-SPAN&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span> Companion website for the C-SPAN television series: <i>American Presidents: Life Portraits</i></li>
+<li><span class="citation web"><a rel="nofollow" class="external text" href="http://www.footnote.com/us-presidents.php">"Presidential Documents from the National Archives"</a><span class="reference-accessdate">. Retrieved March 21, 2007</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.btitle=Presidential+Documents+from+the+National+Archives&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fwww.footnote.com%2Fus-presidents.php&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span> Collection of letters, portraits, photos, and other documents from the National Archives</li>
+<li><span class="citation web"><a rel="nofollow" class="external text" href="http://www.presidency.ucsb.edu/">"The American Presidency Project"</a>. <i>UC Santa Barbara</i><span class="reference-accessdate">. Retrieved October 7, 2005</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=The+American+Presidency+Project&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.presidency.ucsb.edu%2F&amp;rft.jtitle=UC+Santa+Barbara&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span> Collection of over 67,000 presidential documents</li>
+<li><a rel="nofollow" class="external text" href="http://www.history.com/topics/the-us-presidents">The History Channel: US Presidents</a></li>
+</ul>
+<dl>
+<dt>Miscellaneous</dt>
+</dl>
+<ul>
+<li><span class="citation web"><a rel="nofollow" class="external text" href="http://www.gvsu.edu/hauenstein/index.cfm?id=600041AC-93E7-4378-305E5A2BF6EC3C57">"All the President's Roles"</a>. <i>Ask Gleaves</i><span class="reference-accessdate">. Retrieved October 20, 2006</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=All+the+President%27s+Roles&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.gvsu.edu%2Fhauenstein%2Findex.cfm%3Fid%3D600041AC-93E7-4378-305E5A2BF6EC3C57&amp;rft.jtitle=Ask+Gleaves&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span> Article analyzing a president's many hats</li>
+<li><a rel="nofollow" class="external text" href="http://www.gvsu.edu/hauenstein/">Hauenstein Center for Presidential Studies</a> Educational site on the American presidency</li>
+<li><span class="citation web"><a rel="nofollow" class="external text" href="http://www.factmonster.com/ipka/A0768854.html">"Presidents' Occupations"</a><span class="reference-accessdate">. Retrieved August 20, 2007</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.btitle=Presidents%27+Occupations&amp;rft.genre=book&amp;rft_id=http%3A%2F%2Fwww.factmonster.com%2Fipka%2FA0768854.html&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;">&#160;</span></span> Listing of every President's occupations before and after becoming the Commander in Chief</li>
+<li><span class="citation web"><a rel="nofollow" class="external text" href="http://www.pagrandlodge.org/mlam/presidents/index.html">"The Masonic Presidents Tour"</a>. <i>The Masonic Library and Museum of Pennsylvania</i><span class="reference-accessdate">. Retrieved October 7, 2005</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=The+Masonic+Presidents+Tour&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.pagrandlodge.org%2Fmlam%2Fpresidents%2Findex.html&amp;rft.jtitle=The+Masonic+Library+and+Museum+of+Pennsylvania&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span> Brief histories of the Masonic careers of Presidents who were members of the <a href="/wiki/Freemasonry" title="Freemasonry">Freemasons</a></li>
+<li><span class="citation web"><a rel="nofollow" class="external text" href="http://www.pbs.org/wgbh/amex/presidents/">"The Presidents"</a>. <i>American Experience</i><span class="reference-accessdate">. Retrieved March 4, 2007</span>.</span><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3APresident+of+the+United+States&amp;rft.atitle=The+Presidents&amp;rft.genre=article&amp;rft_id=http%3A%2F%2Fwww.pbs.org%2Fwgbh%2Famex%2Fpresidents%2F&amp;rft.jtitle=American+Experience&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;">&#160;</span></span> PBS site on the American presidency</li>
+<li><a rel="nofollow" class="external text" href="http://www.loc.gov/rr/program/bib/presidents/index.html">Presidents of the United States: Resource Guides</a> from the <a href="/wiki/Library_of_Congress" title="Library of Congress">Library of Congress</a></li>
+<li><a rel="nofollow" class="external text" href="http://www.shapell.org/collection.aspx">Shapell Manuscript Foundation</a> Images of documents written by U.S. presidents</li>
+</ul>
+<table class="navbox" style="border-spacing:0">
+<tr>
+<td style="padding:2px">
+<table class="nowraplinks collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit">
+<tr>
+<th scope="col" class="navbox-title" colspan="3">
+<div class="plainlinks hlist navbar mini">
+<ul>
+<li class="nv-view"><a href="/wiki/Template:US_Presidents" title="Template:US Presidents"><span title="View this template" style=";;background:none transparent;border:none;;">v</span></a></li>
+<li class="nv-talk"><a href="/wiki/Template_talk:US_Presidents" title="Template talk:US Presidents"><span title="Discuss this template" style=";;background:none transparent;border:none;;">t</span></a></li>
+<li class="nv-edit"><a class="external text" href="//en.wikipedia.org/w/index.php?title=Template:US_Presidents&amp;action=edit"><span title="Edit this template" style=";;background:none transparent;border:none;;">e</span></a></li>
+</ul>
+</div>
+<div style="font-size:110%"><a href="/wiki/List_of_Presidents_of_the_United_States" title="List of Presidents of the United States">Presidents of the United States</a></div>
+</th>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<td colspan="2" class="navbox-list navbox-odd hlist hnum" style="width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ol>
+<li><a href="/wiki/George_Washington" title="George Washington">George Washington</a></li>
+<li><a href="/wiki/John_Adams" title="John Adams">John Adams</a></li>
+<li><a href="/wiki/Thomas_Jefferson" title="Thomas Jefferson">Thomas Jefferson</a></li>
+<li><a href="/wiki/James_Madison" title="James Madison">James Madison</a></li>
+<li><a href="/wiki/James_Monroe" title="James Monroe">James Monroe</a></li>
+<li><a href="/wiki/John_Quincy_Adams" title="John Quincy Adams">John Quincy Adams</a></li>
+<li><a href="/wiki/Andrew_Jackson" title="Andrew Jackson">Andrew Jackson</a></li>
+<li><a href="/wiki/Martin_Van_Buren" title="Martin Van Buren">Martin Van Buren</a></li>
+<li><a href="/wiki/William_Henry_Harrison" title="William Henry Harrison">William Henry Harrison</a></li>
+<li><a href="/wiki/John_Tyler" title="John Tyler">John Tyler</a></li>
+<li><a href="/wiki/James_K._Polk" title="James K. Polk">James K. Polk</a></li>
+<li><a href="/wiki/Zachary_Taylor" title="Zachary Taylor">Zachary Taylor</a></li>
+<li><a href="/wiki/Millard_Fillmore" title="Millard Fillmore">Millard Fillmore</a></li>
+<li><a href="/wiki/Franklin_Pierce" title="Franklin Pierce">Franklin Pierce</a></li>
+<li><a href="/wiki/James_Buchanan" title="James Buchanan">James Buchanan</a></li>
+<li><a href="/wiki/Abraham_Lincoln" title="Abraham Lincoln">Abraham Lincoln</a></li>
+<li><a href="/wiki/Andrew_Johnson" title="Andrew Johnson">Andrew Johnson</a></li>
+<li><a href="/wiki/Ulysses_S._Grant" title="Ulysses S. Grant">Ulysses S. Grant</a></li>
+<li><a href="/wiki/Rutherford_B._Hayes" title="Rutherford B. Hayes">Rutherford B. Hayes</a></li>
+<li><a href="/wiki/James_A._Garfield" title="James A. Garfield">James A. Garfield</a></li>
+<li><a href="/wiki/Chester_A._Arthur" title="Chester A. Arthur">Chester A. Arthur</a></li>
+<li><a href="/wiki/Grover_Cleveland" title="Grover Cleveland">Grover Cleveland</a></li>
+<li><a href="/wiki/Benjamin_Harrison" title="Benjamin Harrison">Benjamin Harrison</a></li>
+<li><a href="/wiki/Grover_Cleveland" title="Grover Cleveland">Grover Cleveland</a></li>
+<li><a href="/wiki/William_McKinley" title="William McKinley">William McKinley</a></li>
+<li><a href="/wiki/Theodore_Roosevelt" title="Theodore Roosevelt">Theodore Roosevelt</a></li>
+<li><a href="/wiki/William_Howard_Taft" title="William Howard Taft">William Howard Taft</a></li>
+<li><a href="/wiki/Woodrow_Wilson" title="Woodrow Wilson">Woodrow Wilson</a></li>
+<li><a href="/wiki/Warren_G._Harding" title="Warren G. Harding">Warren G. Harding</a></li>
+<li><a href="/wiki/Calvin_Coolidge" title="Calvin Coolidge">Calvin Coolidge</a></li>
+<li><a href="/wiki/Herbert_Hoover" title="Herbert Hoover">Herbert Hoover</a></li>
+<li><a href="/wiki/Franklin_D._Roosevelt" title="Franklin D. Roosevelt">Franklin D. Roosevelt</a></li>
+<li><a href="/wiki/Harry_S._Truman" title="Harry S. Truman">Harry S. Truman</a></li>
+<li><a href="/wiki/Dwight_D._Eisenhower" title="Dwight D. Eisenhower">Dwight D. Eisenhower</a></li>
+<li><a href="/wiki/John_F._Kennedy" title="John F. Kennedy">John F. Kennedy</a></li>
+<li><a href="/wiki/Lyndon_B._Johnson" title="Lyndon B. Johnson">Lyndon B. Johnson</a></li>
+<li><a href="/wiki/Richard_Nixon" title="Richard Nixon">Richard Nixon</a></li>
+<li><a href="/wiki/Gerald_Ford" title="Gerald Ford">Gerald Ford</a></li>
+<li><a href="/wiki/Jimmy_Carter" title="Jimmy Carter">Jimmy Carter</a></li>
+<li><a href="/wiki/Ronald_Reagan" title="Ronald Reagan">Ronald Reagan</a></li>
+<li><a href="/wiki/George_H._W._Bush" title="George H. W. Bush">George H. W. Bush</a></li>
+<li><a href="/wiki/Bill_Clinton" title="Bill Clinton">Bill Clinton</a></li>
+<li><a href="/wiki/George_W._Bush" title="George W. Bush">George W. Bush</a></li>
+<li><a href="/wiki/Barack_Obama" title="Barack Obama">Barack Obama</a></li>
+</ol>
+</div>
+</td>
+<td class="navbox-image" rowspan="1" style="width:0%;padding:0px 0px 0px 2px">
+<div><a href="/wiki/File:Seal_of_the_President_of_the_United_States.svg" class="image"><img alt="Seal of the President of the United States.svg" src="//upload.wikimedia.org/wikipedia/commons/thumb/3/36/Seal_of_the_President_of_the_United_States.svg/100px-Seal_of_the_President_of_the_United_States.svg.png" width="100" height="100" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/3/36/Seal_of_the_President_of_the_United_States.svg/150px-Seal_of_the_President_of_the_United_States.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/3/36/Seal_of_the_President_of_the_United_States.svg/200px-Seal_of_the_President_of_the_United_States.svg.png 2x" data-file-width="2424" data-file-height="2425" /></a></div>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+</table>
+<table class="navbox" style="border-spacing:0">
+<tr>
+<td style="padding:2px">
+<table class="nowraplinks collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit">
+<tr>
+<th scope="col" class="navbox-title" colspan="2">
+<div class="plainlinks hlist navbar mini">
+<ul>
+<li class="nv-view"><a href="/wiki/Template:US_Chief_Executives" title="Template:US Chief Executives"><span title="View this template" style=";;background:none transparent;border:none;;">v</span></a></li>
+<li class="nv-talk"><a href="/wiki/Template_talk:US_Chief_Executives" title="Template talk:US Chief Executives"><span title="Discuss this template" style=";;background:none transparent;border:none;;">t</span></a></li>
+<li class="nv-edit"><a class="external text" href="//en.wikipedia.org/w/index.php?title=Template:US_Chief_Executives&amp;action=edit"><span title="Edit this template" style=";;background:none transparent;border:none;;">e</span></a></li>
+</ul>
+</div>
+<div style="font-size:110%">Chief executives of the United States</div>
+</th>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group">President</th>
+<td class="navbox-list navbox-odd hlist" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><b><a href="/wiki/List_of_Presidents_of_the_United_States" title="List of Presidents of the United States">President of the United States</a></b></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group"><a href="/wiki/Governor_(United_States)" title="Governor (United States)">State governors</a><br />
+(<a href="/wiki/List_of_current_United_States_governors" title="List of current United States governors">current list</a>)</th>
+<td class="navbox-list navbox-even hlist" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/List_of_Governors_of_Alabama" title="List of Governors of Alabama">Alabama</a></li>
+<li><a href="/wiki/List_of_Governors_of_Alaska" title="List of Governors of Alaska">Alaska</a></li>
+<li><a href="/wiki/List_of_Governors_of_Arizona" title="List of Governors of Arizona">Arizona</a></li>
+<li><a href="/wiki/List_of_Governors_of_Arkansas" title="List of Governors of Arkansas">Arkansas</a></li>
+<li><a href="/wiki/List_of_Governors_of_California" title="List of Governors of California">California</a></li>
+<li><a href="/wiki/List_of_Governors_of_Colorado" title="List of Governors of Colorado" class="mw-redirect">Colorado</a></li>
+<li><a href="/wiki/List_of_Governors_of_Connecticut" title="List of Governors of Connecticut">Connecticut</a></li>
+<li><a href="/wiki/List_of_Governors_of_Delaware" title="List of Governors of Delaware">Delaware</a></li>
+<li><a href="/wiki/List_of_Governors_of_Florida" title="List of Governors of Florida">Florida</a></li>
+<li><a href="/wiki/List_of_Governors_of_Georgia" title="List of Governors of Georgia">Georgia</a></li>
+<li><a href="/wiki/List_of_Governors_of_Hawaii" title="List of Governors of Hawaii">Hawaii</a></li>
+<li><a href="/wiki/List_of_Governors_of_Idaho" title="List of Governors of Idaho">Idaho</a></li>
+<li><a href="/wiki/List_of_Governors_of_Illinois" title="List of Governors of Illinois">Illinois</a></li>
+<li><a href="/wiki/List_of_Governors_of_Indiana" title="List of Governors of Indiana">Indiana</a></li>
+<li><a href="/wiki/List_of_Governors_of_Iowa" title="List of Governors of Iowa">Iowa</a></li>
+<li><a href="/wiki/List_of_Governors_of_Kansas" title="List of Governors of Kansas">Kansas</a></li>
+<li><a href="/wiki/List_of_Governors_of_Kentucky" title="List of Governors of Kentucky">Kentucky</a></li>
+<li><a href="/wiki/List_of_Governors_of_Louisiana" title="List of Governors of Louisiana">Louisiana</a></li>
+<li><a href="/wiki/List_of_Governors_of_Maine" title="List of Governors of Maine">Maine</a></li>
+<li><a href="/wiki/List_of_Governors_of_Maryland" title="List of Governors of Maryland">Maryland</a></li>
+<li><a href="/wiki/List_of_Governors_of_Massachusetts" title="List of Governors of Massachusetts" class="mw-redirect">Massachusetts</a></li>
+<li><a href="/wiki/List_of_Governors_of_Michigan" title="List of Governors of Michigan">Michigan</a></li>
+<li><a href="/wiki/List_of_Governors_of_Minnesota" title="List of Governors of Minnesota">Minnesota</a></li>
+<li><a href="/wiki/List_of_Governors_of_Mississippi" title="List of Governors of Mississippi">Mississippi</a></li>
+<li><a href="/wiki/List_of_Governors_of_Missouri" title="List of Governors of Missouri">Missouri</a></li>
+<li><a href="/wiki/List_of_Governors_of_Montana" title="List of Governors of Montana">Montana</a></li>
+<li><a href="/wiki/List_of_Governors_of_Nebraska" title="List of Governors of Nebraska">Nebraska</a></li>
+<li><a href="/wiki/List_of_Governors_of_Nevada" title="List of Governors of Nevada">Nevada</a></li>
+<li><a href="/wiki/List_of_Governors_of_New_Hampshire" title="List of Governors of New Hampshire">New Hampshire</a></li>
+<li><a href="/wiki/List_of_Governors_of_New_Jersey" title="List of Governors of New Jersey">New Jersey</a></li>
+<li><a href="/wiki/List_of_Governors_of_New_Mexico" title="List of Governors of New Mexico">New Mexico</a></li>
+<li><a href="/wiki/List_of_Governors_of_New_York" title="List of Governors of New York">New York</a></li>
+<li><a href="/wiki/List_of_Governors_of_North_Carolina" title="List of Governors of North Carolina">North Carolina</a></li>
+<li><a href="/wiki/List_of_Governors_of_North_Dakota" title="List of Governors of North Dakota">North Dakota</a></li>
+<li><a href="/wiki/List_of_Governors_of_Ohio" title="List of Governors of Ohio">Ohio</a></li>
+<li><a href="/wiki/List_of_Governors_of_Oklahoma" title="List of Governors of Oklahoma">Oklahoma</a></li>
+<li><a href="/wiki/List_of_Governors_of_Oregon" title="List of Governors of Oregon">Oregon</a></li>
+<li><a href="/wiki/List_of_Governors_of_Pennsylvania" title="List of Governors of Pennsylvania">Pennsylvania</a></li>
+<li><a href="/wiki/List_of_Governors_of_Rhode_Island" title="List of Governors of Rhode Island">Rhode Island</a></li>
+<li><a href="/wiki/List_of_Governors_of_South_Carolina" title="List of Governors of South Carolina">South Carolina</a></li>
+<li><a href="/wiki/List_of_Governors_of_South_Dakota" title="List of Governors of South Dakota">South Dakota</a></li>
+<li><a href="/wiki/List_of_Governors_of_Tennessee" title="List of Governors of Tennessee">Tennessee</a></li>
+<li><a href="/wiki/List_of_Governors_of_Texas" title="List of Governors of Texas">Texas</a></li>
+<li><a href="/wiki/List_of_Governors_of_Utah" title="List of Governors of Utah">Utah</a></li>
+<li><a href="/wiki/List_of_Governors_of_Vermont" title="List of Governors of Vermont">Vermont</a></li>
+<li><a href="/wiki/List_of_Governors_of_Virginia" title="List of Governors of Virginia">Virginia</a></li>
+<li><a href="/wiki/List_of_Governors_of_Washington" title="List of Governors of Washington">Washington</a></li>
+<li><a href="/wiki/List_of_Governors_of_West_Virginia" title="List of Governors of West Virginia">West Virginia</a></li>
+<li><a href="/wiki/List_of_Governors_of_Wisconsin" title="List of Governors of Wisconsin">Wisconsin</a></li>
+<li><a href="/wiki/List_of_Governors_of_Wyoming" title="List of Governors of Wyoming">Wyoming</a></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group"><a href="/wiki/Category:Lists_of_governors_of_insular_areas_of_the_United_States" title="Category:Lists of governors of insular areas of the United States">Territorial executives</a><br />
+(<a href="/wiki/List_of_current_United_States_governors#United_States_Territories_and_the_District_of_Columbia" title="List of current United States governors">current list</a>)</th>
+<td class="navbox-list navbox-odd hlist" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/List_of_governors_of_American_Samoa" title="List of governors of American Samoa">American Samoa</a></li>
+<li><a href="/wiki/List_of_mayors_of_Washington,_D.C." title="List of mayors of Washington, D.C.">District of Columbia</a></li>
+<li><a href="/wiki/List_of_Governors_of_Guam" title="List of Governors of Guam">Guam</a></li>
+<li><a href="/wiki/List_of_Governors_of_the_Northern_Mariana_Islands" title="List of Governors of the Northern Mariana Islands">Northern Mariana Islands</a></li>
+<li><a href="/wiki/List_of_Governors_of_Puerto_Rico" title="List of Governors of Puerto Rico">Puerto Rico</a></li>
+<li><a href="/wiki/List_of_Governors_of_the_United_States_Virgin_Islands" title="List of Governors of the United States Virgin Islands">United States Virgin Islands</a><br /></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group"><i>Defunct</i></th>
+<td class="navbox-list navbox-even hlist" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/Category:Lists_of_territorial_governors_of_the_United_States" title="Category:Lists of territorial governors of the United States">Pre-state territories</a></li>
+<li><a href="/wiki/List_of_Governors_of_the_Panama_Canal_Zone" title="List of Governors of the Panama Canal Zone">Panama Canal Zone</a></li>
+<li><a href="/wiki/Governor-General_of_the_Philippines" title="Governor-General of the Philippines">Philippine Islands</a> (until 1935)</li>
+<li><a href="/wiki/High_Commissioner_to_the_Philippines" title="High Commissioner to the Philippines">Philippine Commonwealth</a> (until 1946)</li>
+<li><a href="/wiki/List_of_colonial_heads_of_Cuba" title="List of colonial heads of Cuba" class="mw-redirect">Cuba</a></li>
+<li><a href="/wiki/List_of_Presidents_of_the_Dominican_Republic#List_of_unofficial_Presidents_of_the_Dominican_Republic" title="List of Presidents of the Dominican Republic">Dominican Republic</a></li>
+<li><a href="/wiki/High_Commissioner_of_the_Trust_Territory_of_the_Pacific_Islands" title="High Commissioner of the Trust Territory of the Pacific Islands">Trust Territory of the Pacific Islands</a></li>
+</ul>
+</div>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+</table>
+<table class="navbox" style="border-spacing:0">
+<tr>
+<td style="padding:2px">
+<table class="nowraplinks collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit">
+<tr>
+<th scope="col" class="navbox-title" colspan="2">
+<div class="plainlinks hlist navbar mini">
+<ul>
+<li class="nv-view"><a href="/wiki/Template:Lists_of_US_Presidents_and_Vice_Presidents" title="Template:Lists of US Presidents and Vice Presidents"><span title="View this template" style=";;background:none transparent;border:none;;">v</span></a></li>
+<li class="nv-talk"><a href="/wiki/Template_talk:Lists_of_US_Presidents_and_Vice_Presidents" title="Template talk:Lists of US Presidents and Vice Presidents"><span title="Discuss this template" style=";;background:none transparent;border:none;;">t</span></a></li>
+<li class="nv-edit"><a class="external text" href="//en.wikipedia.org/w/index.php?title=Template:Lists_of_US_Presidents_and_Vice_Presidents&amp;action=edit"><span title="Edit this template" style=";;background:none transparent;border:none;;">e</span></a></li>
+</ul>
+</div>
+<div style="font-size:110%">Lists related to the <strong class="selflink">Presidents</strong> and <a href="/wiki/Vice_President_of_the_United_States" title="Vice President of the United States">Vice Presidents of the United States</a></div>
+</th>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group"><a href="/wiki/List_of_Presidents_of_the_United_States" title="List of Presidents of the United States">Presidents</a></th>
+<td class="navbox-list navbox-odd hlist" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/List_of_Presidents_of_the_United_States_by_age" title="List of Presidents of the United States by age">Age</a></li>
+<li><a href="/wiki/List_of_autobiographies_by_Presidents_of_the_United_States" title="List of autobiographies by Presidents of the United States">Autobiographies</a></li>
+<li><a href="/wiki/List_of_Presidents_of_the_United_States_by_date_of_birth" title="List of Presidents of the United States by date of birth">Birth</a></li>
+<li><a href="/wiki/List_of_burial_places_of_Presidents_of_the_United_States" title="List of burial places of Presidents of the United States">Burial</a></li>
+<li><a href="/wiki/List_of_Presidents_of_the_United_States_by_date_of_death" title="List of Presidents of the United States by date of death">Death</a></li>
+<li><a href="/wiki/Historical_rankings_of_Presidents_of_the_United_States" title="Historical rankings of Presidents of the United States">Historical rankings</a></li>
+<li><a href="/wiki/List_of_United_States_Presidents_by_military_rank" title="List of United States Presidents by military rank">Military rank</a></li>
+<li><a href="/wiki/List_of_Presidents_of_the_United_States_by_military_service" title="List of Presidents of the United States by military service">Military service</a></li>
+<li><a href="/wiki/List_of_United_States_Presidents_by_net_worth" title="List of United States Presidents by net worth">Net worth</a></li>
+<li><a href="/wiki/Living_Presidents_of_the_United_States" title="Living Presidents of the United States">Number living</a></li>
+<li><a href="/wiki/List_of_Presidents_of_the_United_States_by_time_in_office" title="List of Presidents of the United States by time in office">Time in office</a></li>
+<li><a href="/wiki/Timeline_of_Presidents_of_the_United_States" title="Timeline of Presidents of the United States">Timeline</a></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group">Professional careers</th>
+<td class="navbox-list navbox-even hlist" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/List_of_United_States_presidential_assassination_attempts_and_plots" title="List of United States presidential assassination attempts and plots">Assassination attempts and plots</a></li>
+<li><a href="/wiki/List_of_U.S._presidential_campaign_slogans" title="List of U.S. presidential campaign slogans">Campaign slogans</a></li>
+<li><a href="/wiki/United_States_Presidents_and_control_of_Congress" title="United States Presidents and control of Congress">Control of Congress</a></li>
+<li><a href="/wiki/United_States_presidential_doctrines" title="United States presidential doctrines">Doctrines</a></li>
+<li><a href="/wiki/United_States_presidential_inauguration" title="United States presidential inauguration">Inaugurations</a></li>
+<li><a href="/wiki/List_of_international_trips_made_by_the_President_of_the_United_States" title="List of international trips made by the President of the United States">International trips</a></li>
+<li><a href="/wiki/List_of_Presidents_of_the_United_States_by_judicial_appointments" title="List of Presidents of the United States by judicial appointments">Judicial appointments</a></li>
+<li><a href="/wiki/Presidential_library#List_of_presidential_libraries" title="Presidential library">Libraries</a></li>
+<li><a href="/wiki/List_of_Presidents_of_the_United_States_by_other_offices_held" title="List of Presidents of the United States by other offices held">Other offices held</a></li>
+<li><a href="/wiki/List_of_people_pardoned_or_granted_clemency_by_the_President_of_the_United_States" title="List of people pardoned or granted clemency by the President of the United States">Pardons</a></li>
+<li><a href="/wiki/List_of_Presidents_of_the_United_States_by_political_affiliation" title="List of Presidents of the United States by political affiliation">Political affiliation</a></li>
+<li><a href="/wiki/List_of_Presidents_of_the_United_States,_sortable_by_previous_experience" title="List of Presidents of the United States, sortable by previous experience">Previous experience</a></li>
+<li><a href="/wiki/List_of_United_States_presidential_vetoes" title="List of United States presidential vetoes">Vetoes</a></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group">Personal life</th>
+<td class="navbox-list navbox-odd hlist" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/List_of_Presidents_of_the_United_States_who_died_in_office" title="List of Presidents of the United States who died in office">Deaths in office</a></li>
+<li><a href="/wiki/List_of_Presidents_of_the_United_States_by_education" title="List of Presidents of the United States by education">Education</a></li>
+<li><a href="/wiki/List_of_Presidents_of_the_United_States_with_facial_hair" title="List of Presidents of the United States with facial hair">Facial hair</a></li>
+<li><a href="/wiki/List_of_United_States_Presidential_firsts" title="List of United States Presidential firsts">Firsts</a></li>
+<li><a href="/wiki/Handedness_of_Presidents_of_the_United_States" title="Handedness of Presidents of the United States">Handedness</a></li>
+<li><a href="/wiki/List_of_multilingual_Presidents_of_the_United_States" title="List of multilingual Presidents of the United States">Multilingualism</a></li>
+<li><a href="/wiki/List_of_Presidents_of_the_United_States_by_name" title="List of Presidents of the United States by name">Names</a></li>
+<li><a href="/wiki/List_of_nicknames_of_United_States_Presidents" title="List of nicknames of United States Presidents">Nicknames</a></li>
+<li><a href="/wiki/United_States_presidential_pets" title="United States presidential pets">Pets</a></li>
+<li><a href="/wiki/List_of_Presidents_of_the_United_States_by_home_state" title="List of Presidents of the United States by home state">Home state</a></li>
+<li><a href="/wiki/List_of_Presidents_of_the_United_States_by_occupation" title="List of Presidents of the United States by occupation">Previous occupation</a></li>
+<li><a href="/wiki/Religious_affiliations_of_Presidents_of_the_United_States" title="Religious affiliations of Presidents of the United States">Religious affiliation</a></li>
+<li><a href="/wiki/List_of_residences_of_Presidents_of_the_United_States" title="List of residences of Presidents of the United States">Residences</a></li>
+<li><a href="/wiki/Summer_White_Houses" title="Summer White Houses" class="mw-redirect">Summer White Houses</a></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group"><a href="/wiki/List_of_Vice_Presidents_of_the_United_States" title="List of Vice Presidents of the United States">Vice presidents</a></th>
+<td class="navbox-list navbox-even hlist" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/List_of_Vice_Presidents_of_the_United_States_by_age" title="List of Vice Presidents of the United States by age">Age</a></li>
+<li><a href="/wiki/List_of_Vice_Presidents_of_the_United_States_by_education" title="List of Vice Presidents of the United States by education">Education</a></li>
+<li><a href="/wiki/List_of_Vice_Presidents_of_the_United_States_by_other_offices_held" title="List of Vice Presidents of the United States by other offices held">Other offices held</a></li>
+<li><a href="/wiki/List_of_Vice_Presidents_of_the_United_States_by_place_of_primary_affiliation" title="List of Vice Presidents of the United States by place of primary affiliation">Place of primary affiliation</a></li>
+<li><a href="/wiki/List_of_Vice_Presidents_of_the_United_States_by_religious_affiliation" title="List of Vice Presidents of the United States by religious affiliation">Religious affiliation</a></li>
+<li><a href="/wiki/List_of_tie-breaking_votes_cast_by_Vice_Presidents_of_the_United_States" title="List of tie-breaking votes cast by Vice Presidents of the United States">Tie-breaking votes</a></li>
+<li><a href="/wiki/List_of_Vice_Presidents_of_the_United_States_by_time_in_office" title="List of Vice Presidents of the United States by time in office">Time in office</a></li>
+<li><a href="/wiki/Acting_Vice_President_of_the_United_States" title="Acting Vice President of the United States">Vacancies</a></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group">Succession</th>
+<td class="navbox-list navbox-odd hlist" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/Designated_survivor" title="Designated survivor">Designated survivor</a></li>
+<li><a href="/wiki/United_States_presidential_line_of_succession" title="United States presidential line of succession">Line of succession</a></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group"><a href="/wiki/United_States_presidential_election" title="United States presidential election">Elections</a></th>
+<td class="navbox-list navbox-even hlist" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/List_of_United_States_presidential_elections_by_Electoral_College_margin" title="List of United States presidential elections by Electoral College margin">Electoral College margin</a></li>
+<li><a href="/wiki/List_of_United_States_presidential_elections_by_popular_vote_margin" title="List of United States presidential elections by popular vote margin">Popular vote margin</a></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group"><a href="/wiki/List_of_United_States_presidential_candidates" title="List of United States presidential candidates">Candidates</a></th>
+<td class="navbox-list navbox-odd hlist" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/List_of_United_States_Democratic_Party_presidential_tickets" title="List of United States Democratic Party presidential tickets">Democratic tickets</a></li>
+<li><a href="/wiki/List_of_United_States_Republican_Party_presidential_tickets" title="List of United States Republican Party presidential tickets">Republican tickets</a></li>
+<li><a href="/wiki/List_of_United_States_major_third_party_presidential_tickets" title="List of United States major third party presidential tickets">Third party tickets</a></li>
+<li><a href="/wiki/List_of_African-American_United_States_presidential_and_vice_presidential_candidates" title="List of African-American United States presidential and vice presidential candidates">African American</a></li>
+<li><a href="/wiki/List_of_candidates_for_President_of_the_United_States_who_received_at_least_one_electoral_vote" title="List of candidates for President of the United States who received at least one electoral vote">Candidates with at least one electoral vote</a></li>
+<li><a href="/wiki/List_of_female_United_States_presidential_and_vice-presidential_candidates" title="List of female United States presidential and vice-presidential candidates">Female</a></li>
+<li><a href="/wiki/List_of_former_United_States_presidents_who_ran_for_office_after_leaving_the_presidency" title="List of former United States presidents who ran for office after leaving the presidency">Former presidents who ran again</a></li>
+<li><a href="/wiki/Heights_of_presidents_and_presidential_candidates_of_the_United_States" title="Heights of presidents and presidential candidates of the United States">Height</a></li>
+<li><a href="/wiki/List_of_major-party_United_States_presidential_candidates_who_lost_their_home_state" title="List of major-party United States presidential candidates who lost their home state" class="mw-redirect">Lost their home state</a></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group">Families</th>
+<td class="navbox-list navbox-even hlist" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/First_Family_of_the_United_States" title="First Family of the United States" class="mw-redirect">First Family</a></li>
+<li><a href="/wiki/First_Lady_of_the_United_States" title="First Lady of the United States">First ladies</a>
+<ul>
+<li><a href="/wiki/List_of_First_Ladies_of_the_United_States" title="List of First Ladies of the United States">list</a></li>
+<li><a href="/wiki/Living_First_Ladies_of_the_United_States" title="Living First Ladies of the United States">number living</a></li>
+</ul>
+</li>
+<li><a href="/wiki/Second_Lady_of_the_United_States" title="Second Lady of the United States">Second ladies</a></li>
+<li><a href="/wiki/List_of_children_of_the_Presidents_of_the_United_States" title="List of children of the Presidents of the United States">Children</a></li>
+<li><a href="/wiki/List_of_U.S._presidential_relatives" title="List of U.S. presidential relatives">Relatives</a></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group">Namesakes, honors</th>
+<td class="navbox-list navbox-odd hlist" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/U.S._presidents_on_U.S._postage_stamps" title="U.S. presidents on U.S. postage stamps">U.S. postage stamp appearances</a></li>
+<li><a href="/wiki/List_of_United_States_Presidents_on_currency" title="List of United States Presidents on currency">Currency appearances</a></li>
+<li><a href="/wiki/List_of_U.S._counties_named_after_U.S._Presidents" title="List of U.S. counties named after U.S. Presidents">U.S. county names</a></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group">In fiction</th>
+<td class="navbox-list navbox-even hlist" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/List_of_fictional_Presidents_of_the_United_States" title="List of fictional Presidents of the United States" class="mw-redirect">Presidents</a></li>
+<li><a href="/wiki/List_of_fictional_Vice_Presidents_of_the_United_States" title="List of fictional Vice Presidents of the United States">Vice Presidents</a></li>
+<li><a href="/wiki/List_of_fictional_United_States_presidential_candidates" title="List of fictional United States presidential candidates">Candidates</a></li>
+<li><a href="/wiki/United_States_presidential_line_of_succession_in_fiction" title="United States presidential line of succession in fiction">Line of succession</a></li>
+</ul>
+</div>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+</table>
+<table class="navbox" style="border-spacing:0">
+<tr>
+<td style="padding:2px">
+<table class="nowraplinks hlist collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit">
+<tr>
+<th scope="col" class="navbox-title" colspan="2">
+<div class="plainlinks hlist navbar mini">
+<ul>
+<li class="nv-view"><a href="/wiki/Template:United_States_presidential_elections" title="Template:United States presidential elections"><span title="View this template" style=";;background:none transparent;border:none;;">v</span></a></li>
+<li class="nv-talk"><a href="/wiki/Template_talk:United_States_presidential_elections" title="Template talk:United States presidential elections"><span title="Discuss this template" style=";;background:none transparent;border:none;;">t</span></a></li>
+<li class="nv-edit"><a class="external text" href="//en.wikipedia.org/w/index.php?title=Template:United_States_presidential_elections&amp;action=edit"><span title="Edit this template" style=";;background:none transparent;border:none;;">e</span></a></li>
+</ul>
+</div>
+<div style="font-size:110%"><a href="/wiki/United_States_presidential_election" title="United States presidential election">United States presidential elections</a></div>
+</th>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/United_States_presidential_election,_1788%E2%80%9389" title="United States presidential election, 1788–89">1788–89</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1792" title="United States presidential election, 1792">1792</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1796" title="United States presidential election, 1796">1796</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1800" title="United States presidential election, 1800">1800</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1804" title="United States presidential election, 1804">1804</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1808" title="United States presidential election, 1808">1808</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1812" title="United States presidential election, 1812">1812</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1816" title="United States presidential election, 1816">1816</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1820" title="United States presidential election, 1820">1820</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1824" title="United States presidential election, 1824">1824</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1828" title="United States presidential election, 1828">1828</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1832" title="United States presidential election, 1832">1832</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1836" title="United States presidential election, 1836">1836</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1840" title="United States presidential election, 1840">1840</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1844" title="United States presidential election, 1844">1844</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1848" title="United States presidential election, 1848">1848</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1852" title="United States presidential election, 1852">1852</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1856" title="United States presidential election, 1856">1856</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1860" title="United States presidential election, 1860">1860</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1864" title="United States presidential election, 1864">1864</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1868" title="United States presidential election, 1868">1868</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1872" title="United States presidential election, 1872">1872</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1876" title="United States presidential election, 1876">1876</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1880" title="United States presidential election, 1880">1880</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1884" title="United States presidential election, 1884">1884</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1888" title="United States presidential election, 1888">1888</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1892" title="United States presidential election, 1892">1892</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1896" title="United States presidential election, 1896">1896</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1900" title="United States presidential election, 1900">1900</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1904" title="United States presidential election, 1904">1904</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1908" title="United States presidential election, 1908">1908</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1912" title="United States presidential election, 1912">1912</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1916" title="United States presidential election, 1916">1916</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1920" title="United States presidential election, 1920">1920</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1924" title="United States presidential election, 1924">1924</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1928" title="United States presidential election, 1928">1928</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1932" title="United States presidential election, 1932">1932</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1936" title="United States presidential election, 1936">1936</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1940" title="United States presidential election, 1940">1940</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1944" title="United States presidential election, 1944">1944</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1948" title="United States presidential election, 1948">1948</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1952" title="United States presidential election, 1952">1952</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1956" title="United States presidential election, 1956">1956</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1960" title="United States presidential election, 1960">1960</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1964" title="United States presidential election, 1964">1964</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1968" title="United States presidential election, 1968">1968</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1972" title="United States presidential election, 1972">1972</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1976" title="United States presidential election, 1976">1976</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1980" title="United States presidential election, 1980">1980</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1984" title="United States presidential election, 1984">1984</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1988" title="United States presidential election, 1988">1988</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1992" title="United States presidential election, 1992">1992</a></li>
+<li><a href="/wiki/United_States_presidential_election,_1996" title="United States presidential election, 1996">1996</a></li>
+<li><a href="/wiki/United_States_presidential_election,_2000" title="United States presidential election, 2000">2000</a></li>
+<li><a href="/wiki/United_States_presidential_election,_2004" title="United States presidential election, 2004">2004</a></li>
+<li><a href="/wiki/United_States_presidential_election,_2008" title="United States presidential election, 2008">2008</a></li>
+<li><a href="/wiki/United_States_presidential_election,_2012" title="United States presidential election, 2012">2012</a></li>
+<li><i><a href="/wiki/United_States_presidential_election,_2016" title="United States presidential election, 2016">2016</a></i></li>
+</ul>
+<hr />
+<ul>
+<li><a href="/wiki/Electoral_College_(United_States)" title="Electoral College (United States)">Electoral College</a></li>
+<li><a href="/wiki/Electoral_vote_changes_between_United_States_presidential_elections" title="Electoral vote changes between United States presidential elections">Electoral vote changes</a></li>
+<li><a href="/wiki/List_of_electoral_votes_by_US_state" title="List of electoral votes by US state" class="mw-redirect">Electoral votes by state</a></li>
+<li><a href="/wiki/List_of_United_States_presidential_elections_by_Electoral_College_margin" title="List of United States presidential elections by Electoral College margin">Results by Electoral College margin</a></li>
+<li><a href="/wiki/List_of_United_States_presidential_elections_by_popular_vote_margin" title="List of United States presidential elections by popular vote margin">Results by popular vote margin</a></li>
+<li><a href="/wiki/List_of_United_States_presidential_election_results_by_state" title="List of United States presidential election results by state">Results by state</a></li>
+<li><a href="/wiki/Voter_turnout_in_the_United_States_presidential_elections" title="Voter turnout in the United States presidential elections">Voter turnout</a></li>
+<li><a href="/wiki/United_States_presidential_primary" title="United States presidential primary">Presidential primaries</a></li>
+<li><a href="/wiki/United_States_presidential_nominating_convention" title="United States presidential nominating convention">Presidential nominating conventions</a></li>
+<li><a href="/wiki/United_States_presidential_election_debates" title="United States presidential election debates">Election debates</a></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<td class="navbox-abovebelow" colspan="2">
+<div>
+<dl>
+<dt>See also</dt>
+<dd><a href="/wiki/Template:United_States_House_of_Representatives_elections" title="Template:United States House of Representatives elections">House elections</a></dd>
+<dd><a href="/wiki/Template:United_States_Senate_elections" title="Template:United States Senate elections">Senate elections</a></dd>
+<dd><a href="/wiki/Template:United_States_gubernatorial_elections" title="Template:United States gubernatorial elections">Gubernatorial elections</a></dd>
+</dl>
+</div>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+</table>
+<table class="navbox" style="border-spacing:0">
+<tr>
+<td style="padding:2px">
+<table class="nowraplinks hlist collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit">
+<tr>
+<th scope="col" class="navbox-title" colspan="2" style="background-color:#B0C4DE">
+<div class="plainlinks hlist navbar mini">
+<ul>
+<li class="nv-view"><a href="/wiki/Template:United_States_Armed_Forces" title="Template:United States Armed Forces"><span title="View this template" style=";background-color:#B0C4DE;background:none transparent;border:none;;">v</span></a></li>
+<li class="nv-talk"><a href="/wiki/Template_talk:United_States_Armed_Forces" title="Template talk:United States Armed Forces"><span title="Discuss this template" style=";background-color:#B0C4DE;background:none transparent;border:none;;">t</span></a></li>
+<li class="nv-edit"><a class="external text" href="//en.wikipedia.org/w/index.php?title=Template:United_States_Armed_Forces&amp;action=edit"><span title="Edit this template" style=";background-color:#B0C4DE;background:none transparent;border:none;;">e</span></a></li>
+</ul>
+</div>
+<div style="font-size:110%"><a href="/wiki/Uniformed_Services_of_the_United_States" title="Uniformed Services of the United States" class="mw-redirect">Uniformed Services of the United States</a></div>
+</th>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<td class="navbox-abovebelow" colspan="2" style="background-color:#DCDCDC">
+<div>
+<ul>
+<li><img alt="Wikipedia book" src="//upload.wikimedia.org/wikipedia/commons/thumb/8/89/Symbol_book_class2.svg/16px-Symbol_book_class2.svg.png" width="16" height="16" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/8/89/Symbol_book_class2.svg/23px-Symbol_book_class2.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/89/Symbol_book_class2.svg/31px-Symbol_book_class2.svg.png 2x" data-file-width="180" data-file-height="185" /> <a href="/wiki/Book:United_States_Military" title="Book:United States Military">Book</a></li>
+<li><img alt="Portal" src="//upload.wikimedia.org/wikipedia/en/thumb/f/fd/Portal-puzzle.svg/16px-Portal-puzzle.svg.png" width="16" height="14" srcset="//upload.wikimedia.org/wikipedia/en/thumb/f/fd/Portal-puzzle.svg/24px-Portal-puzzle.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/f/fd/Portal-puzzle.svg/32px-Portal-puzzle.svg.png 2x" data-file-width="32" data-file-height="28" /> <a href="/wiki/Portal:Military_of_the_United_States" title="Portal:Military of the United States">Portal</a>
+<ul>
+<li><a href="/wiki/Portal:United_States_Army" title="Portal:United States Army">A</a></li>
+<li><a href="/wiki/Portal:United_States_Marine_Corps" title="Portal:United States Marine Corps">MC</a></li>
+<li><a href="/wiki/Portal:United_States_Navy" title="Portal:United States Navy">N</a></li>
+<li><a href="/wiki/Portal:United_States_Air_Force" title="Portal:United States Air Force">AF</a></li>
+<li><a href="/wiki/Portal:United_States_Coast_Guard" title="Portal:United States Coast Guard">CG</a></li>
+</ul>
+</li>
+<li><img alt="Category" src="//upload.wikimedia.org/wikipedia/en/thumb/4/48/Folder_Hexagonal_Icon.svg/16px-Folder_Hexagonal_Icon.svg.png" width="16" height="14" srcset="//upload.wikimedia.org/wikipedia/en/thumb/4/48/Folder_Hexagonal_Icon.svg/24px-Folder_Hexagonal_Icon.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/4/48/Folder_Hexagonal_Icon.svg/32px-Folder_Hexagonal_Icon.svg.png 2x" data-file-width="36" data-file-height="31" /> <a href="/wiki/Category:Military_of_the_United_States" title="Category:Military of the United States">Category</a>
+<ul>
+<li><a href="/wiki/Category:United_States_Army" title="Category:United States Army">A</a></li>
+<li><a href="/wiki/Category:United_States_Marine_Corps" title="Category:United States Marine Corps">MC</a></li>
+<li><a href="/wiki/Category:United_States_Navy" title="Category:United States Navy">N</a></li>
+<li><a href="/wiki/Category:United_States_Air_Force" title="Category:United States Air Force">AF</a></li>
+<li><a href="/wiki/Category:United_States_Coast_Guard" title="Category:United States Coast Guard">CG</a></li>
+<li><a href="/wiki/Category:United_States_Public_Health_Service" title="Category:United States Public Health Service">PHS</a></li>
+<li><a href="/wiki/Category:National_Oceanic_and_Atmospheric_Administration" title="Category:National Oceanic and Atmospheric Administration">NOAA</a></li>
+</ul>
+</li>
+<li><a href="/wiki/Template:US_military_navbox" title="Template:US military navbox" class="mw-redirect">Navbox</a>
+<ul>
+<li><a href="/wiki/Template:US_Army_navbox" title="Template:US Army navbox">A</a></li>
+<li><a href="/wiki/Template:US_Marine_Corps_navbox" title="Template:US Marine Corps navbox">MC</a></li>
+<li><a href="/wiki/Template:US_Navy_navbox" title="Template:US Navy navbox">N</a></li>
+<li><a href="/wiki/Template:US_Air_Force_navbox" title="Template:US Air Force navbox">AF</a></li>
+<li><a href="/wiki/Template:US_Coast_Guard_navbox" title="Template:US Coast Guard navbox">CG</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group" style="background-color:#DCDCDC">Leadership</th>
+<td class="navbox-list navbox-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/Commander-in-chief#United_States" title="Commander-in-chief">Commander-in-chief</a>: <strong class="selflink">President of the United States</strong></li>
+<li><a href="/wiki/United_States_Secretary_of_Defense" title="United States Secretary of Defense">Secretary of Defense</a></li>
+<li><a href="/wiki/United_States_Deputy_Secretary_of_Defense" title="United States Deputy Secretary of Defense">Deputy Secretary of Defense</a></li>
+<li><a href="/wiki/Joint_Chiefs_of_Staff" title="Joint Chiefs of Staff">Joint Chiefs of Staff</a>:
+<ul>
+<li><a href="/wiki/Chairman_of_the_Joint_Chiefs_of_Staff" title="Chairman of the Joint Chiefs of Staff">Chairman</a></li>
+<li><a href="/wiki/Vice_Chairman_of_the_Joint_Chiefs_of_Staff" title="Vice Chairman of the Joint Chiefs of Staff">Vice Chairman</a></li>
+</ul>
+</li>
+<li><a href="/wiki/United_States_Congress" title="United States Congress">United States Congress</a>: Committees on Armed Services:
+<ul>
+<li><a href="/wiki/United_States_Senate_Committee_on_Armed_Services" title="United States Senate Committee on Armed Services">Senate</a></li>
+<li><a href="/wiki/United_States_House_Committee_on_Armed_Services" title="United States House Committee on Armed Services">House</a></li>
+</ul>
+</li>
+<li><a href="/wiki/List_of_active_duty_United_States_four-star_officers" title="List of active duty United States four-star officers">Active duty four-star officers</a></li>
+<li><a href="/wiki/List_of_United_States_military_leaders_by_rank" title="List of United States military leaders by rank">Highest ranking officers in history</a></li>
+<li><a href="/wiki/National_Security_Act_of_1947" title="National Security Act of 1947">National Security Act of 1947</a></li>
+<li><a href="/wiki/Goldwater%E2%80%93Nichols_Act" title="Goldwater–Nichols Act">Goldwater–Nichols Act</a></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group" style="background-color:#DCDCDC"><a href="/wiki/Structure_of_the_United_States_Armed_Forces" title="Structure of the United States Armed Forces">Organization</a></th>
+<td class="navbox-list navbox-even" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em"></div>
+<table class="nowraplinks navbox-subgroup" style="border-spacing:0">
+<tr>
+<th scope="row" class="navbox-group" style="padding-left:0em;padding-right:0em;background-color:#DCDCDC">
+<div style="padding:0em 0.75em;"><a href="/wiki/Civilian_control_of_the_military" title="Civilian control of the military">Service departments</a></div>
+</th>
+<td class="navbox-list navbox-even" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><i><a href="/wiki/United_States_Department_of_Defense" title="United States Department of Defense">Department of Defense</a> (<a href="/wiki/United_States_Secretary_of_Defense" title="United States Secretary of Defense">Secretary</a>)</i>: <a href="/wiki/United_States_Department_of_the_Army" title="United States Department of the Army">Army</a> (<a href="/wiki/United_States_Secretary_of_the_Army" title="United States Secretary of the Army">Secretary</a>)</li>
+<li><a href="/wiki/United_States_Department_of_the_Navy" title="United States Department of the Navy">Navy</a> (<a href="/wiki/United_States_Secretary_of_the_Navy" title="United States Secretary of the Navy">Secretary</a>)</li>
+<li><a href="/wiki/United_States_Department_of_the_Air_Force" title="United States Department of the Air Force">Air Force</a> (<a href="/wiki/United_States_Secretary_of_the_Air_Force" title="United States Secretary of the Air Force">Secretary</a>)</li>
+<li><i><a href="/wiki/United_States_Department_of_Homeland_Security" title="United States Department of Homeland Security">Department of Homeland Security</a> (<a href="/wiki/United_States_Secretary_of_Homeland_Security" title="United States Secretary of Homeland Security">Secretary</a>)</i>: <a href="/wiki/United_States_Coast_Guard" title="United States Coast Guard">Coast Guard</a></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group" style="padding-left:0em;padding-right:0em;background-color:#DCDCDC">
+<div style="padding:0em 0.75em;">Branches</div>
+</th>
+<td class="navbox-list navbox-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/United_States_Army" title="United States Army">Army</a> (<a href="/wiki/Chief_of_Staff_of_the_United_States_Army" title="Chief of Staff of the United States Army">Chief of Staff</a>)</li>
+<li><a href="/wiki/United_States_Marine_Corps" title="United States Marine Corps">Marine Corps</a> (<a href="/wiki/Commandant_of_the_Marine_Corps" title="Commandant of the Marine Corps">Commandant</a>)</li>
+<li><a href="/wiki/United_States_Navy" title="United States Navy">Navy</a> (<a href="/wiki/Chief_of_Naval_Operations" title="Chief of Naval Operations">Chief of Naval Operations</a>)</li>
+<li><a href="/wiki/United_States_Air_Force" title="United States Air Force">Air Force</a> (<a href="/wiki/Chief_of_Staff_of_the_United_States_Air_Force" title="Chief of Staff of the United States Air Force">Chief of Staff</a>)</li>
+<li><a href="/wiki/United_States_Coast_Guard" title="United States Coast Guard">Coast Guard</a> (<a href="/wiki/Commandant_of_the_Coast_Guard" title="Commandant of the Coast Guard">Commandant</a>)</li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group" style="padding-left:0em;padding-right:0em;background-color:#DCDCDC">
+<div style="padding:0em 0.75em;"><a href="/wiki/Uniformed_services_of_the_United_States" title="Uniformed services of the United States">Other uniformed services</a></div>
+</th>
+<td class="navbox-list navbox-even" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/United_States_Public_Health_Service_Commissioned_Corps" title="United States Public Health Service Commissioned Corps">Public Health Service Commissioned Corps</a> (<a href="/wiki/Surgeon_General_of_the_United_States" title="Surgeon General of the United States">Surgeon General</a>)</li>
+<li><a href="/wiki/National_Oceanic_and_Atmospheric_Administration_Commissioned_Officer_Corps" title="National Oceanic and Atmospheric Administration Commissioned Officer Corps" class="mw-redirect">NOAA Commissioned Officer Corps</a> (Director)</li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group" style="padding-left:0em;padding-right:0em;background-color:#DCDCDC">
+<div style="padding:0em 0.75em;"><a href="/wiki/Reserve_components_of_the_United_States_Armed_Forces" title="Reserve components of the United States Armed Forces">Reserve components</a></div>
+</th>
+<td class="navbox-list navbox-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li>Reserves:
+<ul>
+<li><a href="/wiki/United_States_Army_Reserve" title="United States Army Reserve">A</a></li>
+<li><a href="/wiki/United_States_Marine_Corps_Reserve" title="United States Marine Corps Reserve">MC</a></li>
+<li><a href="/wiki/United_States_Navy_Reserve" title="United States Navy Reserve">N</a></li>
+<li><a href="/wiki/Air_Force_Reserve_Command" title="Air Force Reserve Command">AF</a></li>
+<li><a href="/wiki/United_States_Coast_Guard_Reserve" title="United States Coast Guard Reserve">CG</a></li>
+</ul>
+</li>
+<li><a href="/wiki/National_Guard_of_the_United_States" title="National Guard of the United States">National Guard</a>:
+<ul>
+<li><a href="/wiki/Army_National_Guard" title="Army National Guard">A</a></li>
+<li><a href="/wiki/Air_National_Guard" title="Air National Guard">AF</a></li>
+</ul>
+</li>
+<li><a href="/wiki/State_defense_force" title="State defense force">State defense forces</a></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group" style="padding-left:0em;padding-right:0em;background-color:#DCDCDC">
+<div style="padding:0em 0.75em;"><a href="/wiki/Auxiliaries" title="Auxiliaries">Civilian auxiliaries</a></div>
+</th>
+<td class="navbox-list navbox-even" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/Military_Auxiliary_Radio_System" title="Military Auxiliary Radio System">Military Auxiliary Radio System</a></li>
+<li><a href="/wiki/United_States_Merchant_Marine" title="United States Merchant Marine">Merchant Marine</a></li>
+<li><a href="/wiki/Civil_Air_Patrol" title="Civil Air Patrol">Civil Air Patrol</a></li>
+<li><a href="/wiki/United_States_Coast_Guard_Auxiliary" title="United States Coast Guard Auxiliary">Coast Guard Auxiliary</a></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group" style="padding-left:0em;padding-right:0em;background-color:#DCDCDC">
+<div style="padding:0em 0.75em;"><a href="/wiki/Unified_Combatant_Command" title="Unified Combatant Command">Unified Combatant Command</a></div>
+</th>
+<td class="navbox-list navbox-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/United_States_Northern_Command" title="United States Northern Command">Northern</a></li>
+<li><a href="/wiki/United_States_Central_Command" title="United States Central Command">Central</a></li>
+<li><a href="/wiki/United_States_European_Command" title="United States European Command">European</a></li>
+<li><a href="/wiki/United_States_Pacific_Command" title="United States Pacific Command">Pacific</a></li>
+<li><a href="/wiki/United_States_Southern_Command" title="United States Southern Command">Southern</a></li>
+<li><a href="/wiki/United_States_Africa_Command" title="United States Africa Command">Africa</a></li>
+<li><a href="/wiki/United_States_Special_Operations_Command" title="United States Special Operations Command">Special Operations</a></li>
+<li><a href="/wiki/United_States_Strategic_Command" title="United States Strategic Command">Strategic</a></li>
+<li><a href="/wiki/United_States_Transportation_Command" title="United States Transportation Command">Transportation</a></li>
+</ul>
+</div>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group" style="background-color:#DCDCDC">Structure</th>
+<td class="navbox-list navbox-even" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/United_States_Code" title="United States Code">United States Code</a>
+<ul>
+<li><a href="/wiki/Title_10_of_the_United_States_Code" title="Title 10 of the United States Code">Title 10</a></li>
+<li><a href="/wiki/Title_14_of_the_United_States_Code" title="Title 14 of the United States Code">Title 14</a></li>
+<li><a href="/wiki/Title_32_of_the_United_States_Code" title="Title 32 of the United States Code">Title 32</a></li>
+<li><a href="/wiki/Title_50_of_the_United_States_Code" title="Title 50 of the United States Code">Title 50</a></li>
+</ul>
+</li>
+<li><a href="/wiki/The_Pentagon" title="The Pentagon">The Pentagon</a></li>
+<li><a href="/wiki/List_of_United_States_military_bases" title="List of United States military bases">Installations</a></li>
+<li>Units:
+<ul>
+<li><a href="/wiki/Category:Military_units_and_formations_of_the_United_States_Army" title="Category:Military units and formations of the United States Army">A</a></li>
+<li><a href="/wiki/Organization_of_the_United_States_Marine_Corps" title="Organization of the United States Marine Corps">MC</a></li>
+<li><a href="/wiki/Category:Military_units_and_formations_of_the_United_States_Navy" title="Category:Military units and formations of the United States Navy">N</a></li>
+<li><a href="/wiki/Category:Military_units_and_formations_of_the_United_States_Air_Force" title="Category:Military units and formations of the United States Air Force">AF</a></li>
+<li><a href="/wiki/Organization_of_the_United_States_Coast_Guard" title="Organization of the United States Coast Guard">CG</a></li>
+</ul>
+</li>
+<li><a href="/wiki/Category:Military_logistics_of_the_United_States" title="Category:Military logistics of the United States">Logistics</a></li>
+<li><a href="/wiki/Category:Media_of_the_military_of_the_United_States" title="Category:Media of the military of the United States">Media</a></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group" style="background-color:#DCDCDC">Operations and <a href="/wiki/Military_history_of_the_United_States" title="Military history of the United States">history</a></th>
+<td class="navbox-list navbox-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/United_States_military_deployments" title="United States military deployments">Current deployments</a></li>
+<li><a href="/wiki/List_of_conflicts_in_the_United_States" title="List of conflicts in the United States">Conflicts</a></li>
+<li><a href="/wiki/List_of_wars_involving_the_United_States" title="List of wars involving the United States">Wars</a></li>
+<li><a href="/wiki/Timeline_of_United_States_military_operations" title="Timeline of United States military operations">Timeline</a></li>
+<li><a href="/wiki/Military_history_of_the_United_States" title="Military history of the United States">History</a>:
+<ul>
+<li><a href="/wiki/History_of_the_United_States_Army" title="History of the United States Army">A</a></li>
+<li><a href="/wiki/History_of_the_United_States_Marine_Corps" title="History of the United States Marine Corps">MC</a></li>
+<li><a href="/wiki/History_of_the_United_States_Navy" title="History of the United States Navy">N</a></li>
+<li><a href="/wiki/History_of_the_United_States_Air_Force" title="History of the United States Air Force">AF</a></li>
+<li><a href="/wiki/History_of_the_United_States_Coast_Guard" title="History of the United States Coast Guard">CG</a></li>
+</ul>
+</li>
+<li><a href="/wiki/Colonial_American_military_history" title="Colonial American military history">Colonial</a></li>
+<li><a href="/wiki/Military_history_of_the_United_States_during_World_War_II" title="Military history of the United States during World War II">World War II</a></li>
+<li><a href="/wiki/History_of_civil_affairs_in_the_United_States_Armed_Forces" title="History of civil affairs in the United States Armed Forces">Civil affairs</a></li>
+<li><a href="/wiki/Military_history_of_African_Americans" title="Military history of African Americans">African Americans</a></li>
+<li><a href="/wiki/Military_history_of_Asian_Americans" title="Military history of Asian Americans">Asian Americans</a></li>
+<li><a href="/wiki/Military_history_of_Pakistani_Americans" title="Military history of Pakistani Americans">Pakistani Americans</a></li>
+<li><a href="/wiki/Military_history_of_Jewish_Americans" title="Military history of Jewish Americans">Jewish Americans</a></li>
+<li><a href="/wiki/Military_history_of_Sikh_Americans" title="Military history of Sikh Americans">Sikh Americans</a></li>
+<li>Historiography:
+<ul>
+<li>A: <a href="/wiki/Military_history_detachment" title="Military history detachment">1</a>/<a href="/wiki/United_States_Army_Center_of_Military_History" title="United States Army Center of Military History">2</a></li>
+<li><a href="/wiki/United_States_Marine_Corps_History_Division" title="United States Marine Corps History Division">MC</a></li>
+<li><a href="/wiki/Naval_History_%26_Heritage_Command" title="Naval History &amp; Heritage Command">N</a></li>
+<li><a href="/wiki/Air_Force_Historical_Research_Agency" title="Air Force Historical Research Agency">AF</a></li>
+</ul>
+</li>
+<li><a href="/wiki/American_official_war_artists" title="American official war artists">Art</a>:
+<ul>
+<li><a href="/wiki/United_States_Army_Art_Program" title="United States Army Art Program">A</a></li>
+<li><a href="/wiki/United_States_Air_Force_Art_Program" title="United States Air Force Art Program">AF</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group" style="background-color:#DCDCDC">Personnel</th>
+<td class="navbox-list navbox-even" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em"></div>
+<table class="nowraplinks navbox-subgroup" style="border-spacing:0">
+<tr>
+<th scope="row" class="navbox-group" style="padding-left:0em;padding-right:0em;background-color:#DCDCDC">
+<div style="padding:0em 0.75em;">Training</div>
+</th>
+<td class="navbox-list navbox-even" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/United_States_Military_Entrance_Processing_Command" title="United States Military Entrance Processing Command">MEPS</a></li>
+<li><a href="/wiki/Armed_Services_Vocational_Aptitude_Battery" title="Armed Services Vocational Aptitude Battery">ASVAB</a></li>
+<li><a href="/wiki/Recruit_training" title="Recruit training">Recruit training</a>:
+<ul>
+<li><a href="/wiki/United_States_Army_Basic_Training" title="United States Army Basic Training">A</a></li>
+<li><a href="/wiki/United_States_Marine_Corps_Recruit_Training" title="United States Marine Corps Recruit Training">MC</a></li>
+<li><a href="/wiki/Recruit_Training_Command,_Great_Lakes,_Illinois" title="Recruit Training Command, Great Lakes, Illinois">N</a></li>
+<li><a href="/wiki/United_States_Air_Force_Basic_Military_Training" title="United States Air Force Basic Military Training">AF</a></li>
+<li><a href="/wiki/United_States_Coast_Guard_Training_Center_Cape_May" title="United States Coast Guard Training Center Cape May">CG</a></li>
+</ul>
+</li>
+<li><a href="/wiki/Officer_Candidate_School#United_States" title="Officer Candidate School">Officer candidate school</a>:
+<ul>
+<li><a href="/wiki/Officer_Candidate_School_(United_States_Army)" title="Officer Candidate School (United States Army)">A</a></li>
+<li><a href="/wiki/Officer_Candidates_School_(United_States_Marine_Corps)" title="Officer Candidates School (United States Marine Corps)">MC</a></li>
+<li><a href="/wiki/Officer_Candidate_School_(United_States_Navy)" title="Officer Candidate School (United States Navy)">N</a></li>
+<li><a href="/wiki/Air_Force_Officer_Training_School" title="Air Force Officer Training School">AF</a></li>
+</ul>
+</li>
+<li><a href="/wiki/Warrant_officer_(United_States)" title="Warrant officer (United States)">Warrant</a>:
+<ul>
+<li><a href="/wiki/Warrant_Officer_Candidate_School_(United_States_Army)" title="Warrant Officer Candidate School (United States Army)">A</a></li>
+<li><a href="/wiki/The_Basic_School#Warrant_Officer_Basic_Course_.28WOBC.29" title="The Basic School">MC</a></li>
+</ul>
+</li>
+<li><a href="/wiki/United_States_Service_academies" title="United States Service academies" class="mw-redirect">Service academies</a>:
+<ul>
+<li><a href="/wiki/United_States_Military_Academy" title="United States Military Academy">A</a> <small>(<a href="/wiki/United_States_Military_Academy_Preparatory_School" title="United States Military Academy Preparatory School">prep</a>)</small></li>
+<li><a href="/wiki/United_States_Naval_Academy" title="United States Naval Academy">N</a> <small>(<a href="/wiki/Naval_Academy_Preparatory_School" title="Naval Academy Preparatory School">prep</a>)</small></li>
+<li><a href="/wiki/United_States_Air_Force_Academy" title="United States Air Force Academy">AF</a> <small>(<a href="/wiki/United_States_Air_Force_Academy_Preparatory_School" title="United States Air Force Academy Preparatory School">prep</a>)</small></li>
+<li><a href="/wiki/United_States_Coast_Guard_Academy" title="United States Coast Guard Academy">CG</a></li>
+<li><a href="/wiki/United_States_Merchant_Marine_Academy" title="United States Merchant Marine Academy">Merchant Marine</a></li>
+<li><a href="/wiki/Uniformed_Services_University_of_the_Health_Sciences" title="Uniformed Services University of the Health Sciences">PHS</a></li>
+</ul>
+</li>
+<li><a href="/wiki/Junior_Reserve_Officers%27_Training_Corps" title="Junior Reserve Officers' Training Corps">Junior</a>/<a href="/wiki/Reserve_Officers%27_Training_Corps" title="Reserve Officers' Training Corps">Reserve Officers' Training Corps</a>:
+<ul>
+<li><a href="/wiki/Army_Reserve_Officers%27_Training_Corps" title="Army Reserve Officers' Training Corps">A</a>: <a href="/wiki/United_States_Military_Junior_College" title="United States Military Junior College" class="mw-redirect">MJC</a>/<a href="/wiki/United_States_Senior_Military_College" title="United States Senior Military College">SMC</a></li>
+<li><a href="/wiki/Naval_Reserve_Officers_Training_Corps" title="Naval Reserve Officers Training Corps">MC/N</a></li>
+<li><a href="/wiki/Air_Force_Reserve_Officer_Training_Corps" title="Air Force Reserve Officer Training Corps">AF</a></li>
+</ul>
+</li>
+<li><a href="/wiki/Medical_Education_and_Training_Campus" title="Medical Education and Training Campus">Medical</a></li>
+<li><a href="/wiki/Category:Military_education_and_training_in_the_United_States" title="Category:Military education and training in the United States">Other education</a></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group" style="padding-left:0em;padding-right:0em;background-color:#DCDCDC">
+<div style="padding:0em 0.75em;"><a href="/wiki/Military_uniform" title="Military uniform">Uniforms</a></div>
+</th>
+<td class="navbox-list navbox-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/Uniforms_of_the_United_States_Military" title="Uniforms of the United States Military" class="mw-redirect">Uniforms</a>:
+<ul>
+<li><a href="/wiki/Uniforms_of_the_United_States_Army" title="Uniforms of the United States Army">A</a></li>
+<li><a href="/wiki/Uniforms_of_the_United_States_Marine_Corps" title="Uniforms of the United States Marine Corps">MC</a></li>
+<li><a href="/wiki/Uniforms_of_the_United_States_Navy" title="Uniforms of the United States Navy">N</a></li>
+<li><a href="/wiki/Uniforms_of_the_United_States_Air_Force" title="Uniforms of the United States Air Force">AF</a></li>
+<li><a href="/wiki/United_States_Coast_Guard#Uniforms" title="United States Coast Guard">CG</a></li>
+</ul>
+</li>
+<li><a href="/wiki/Awards_and_decorations_of_the_United_States_military" title="Awards and decorations of the United States military" class="mw-redirect">Awards &amp; decorations</a>:
+<ul>
+<li><a href="/wiki/Inter-service_awards_and_decorations_of_the_United_States_military" title="Inter-service awards and decorations of the United States military">Inter-service</a></li>
+<li><a href="/wiki/Awards_and_decorations_of_the_United_States_Army" title="Awards and decorations of the United States Army">A</a></li>
+<li><a href="/wiki/Military_awards_of_the_United_States_Department_of_the_Navy" title="Military awards of the United States Department of the Navy">MC/N</a></li>
+<li><a href="/wiki/Awards_and_decorations_of_the_United_States_Air_Force" title="Awards and decorations of the United States Air Force">AF</a></li>
+<li><a href="/wiki/Awards_and_decorations_of_the_United_States_Coast_Guard" title="Awards and decorations of the United States Coast Guard">CG</a></li>
+<li><a href="/wiki/Awards_and_decorations_of_the_Public_Health_Service" title="Awards and decorations of the Public Health Service">PHS</a></li>
+<li><a href="/wiki/Awards_and_decorations_of_the_National_Oceanic_and_Atmospheric_Administration" title="Awards and decorations of the National Oceanic and Atmospheric Administration">NOAA</a></li>
+<li><a href="/wiki/Authorized_foreign_decorations_of_the_United_States_military" title="Authorized foreign decorations of the United States military">Foreign</a></li>
+<li><a href="/wiki/International_military_decoration_authorized_by_the_US_military" title="International military decoration authorized by the US military">International</a></li>
+<li><a href="/wiki/United_States_military_award_devices" title="United States military award devices">Devices</a></li>
+</ul>
+</li>
+<li><a href="/wiki/Military_badges_of_the_United_States" title="Military badges of the United States">Badges</a>:
+<ul>
+<li><a href="/wiki/Identification_badges_of_the_Uniform_Services_of_the_United_States" title="Identification badges of the Uniform Services of the United States">Identification</a></li>
+<li><a href="/wiki/Badges_of_the_United_States_Army" title="Badges of the United States Army">A</a></li>
+<li><a href="/wiki/Badges_of_the_United_States_Marine_Corps" title="Badges of the United States Marine Corps">MC</a></li>
+<li><a href="/wiki/Badges_of_the_United_States_Navy" title="Badges of the United States Navy">N</a></li>
+<li><a href="/wiki/Badges_of_the_United_States_Air_Force" title="Badges of the United States Air Force">AF</a></li>
+<li><a href="/wiki/Badges_of_the_United_States_Coast_Guard" title="Badges of the United States Coast Guard">CG</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group" style="padding-left:0em;padding-right:0em;background-color:#DCDCDC">
+<div style="padding:0em 0.75em;"><a href="/wiki/List_of_comparative_military_ranks" title="List of comparative military ranks">Ranks</a></div>
+</th>
+<td class="navbox-list navbox-even" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li>Enlisted:
+<ul>
+<li><a href="/wiki/United_States_Army_enlisted_rank_insignia" title="United States Army enlisted rank insignia">A</a></li>
+<li><a href="/wiki/United_States_Marine_Corps_rank_insignia" title="United States Marine Corps rank insignia">MC</a></li>
+<li><a href="/wiki/List_of_United_States_Navy_enlisted_rates" title="List of United States Navy enlisted rates">N</a></li>
+<li><a href="/wiki/United_States_Air_Force_enlisted_rank_insignia" title="United States Air Force enlisted rank insignia">AF</a></li>
+<li><a href="/wiki/List_of_United_States_Coast_Guard_enlisted_rates" title="List of United States Coast Guard enlisted rates">CG</a></li>
+</ul>
+</li>
+<li><a href="/wiki/Warrant_officer_(United_States)" title="Warrant officer (United States)">Warrant officers</a></li>
+<li>Officer:
+<ul>
+<li><a href="/wiki/United_States_Army_officer_rank_insignia" title="United States Army officer rank insignia">A</a></li>
+<li><a href="/wiki/United_States_Marine_Corps_rank_insignia" title="United States Marine Corps rank insignia">MC</a></li>
+<li><a href="/wiki/United_States_Navy_officer_rank_insignia" title="United States Navy officer rank insignia">N</a></li>
+<li><a href="/wiki/United_States_Air_Force_officer_rank_insignia" title="United States Air Force officer rank insignia">AF</a></li>
+<li><a href="/wiki/United_States_Coast_Guard_officer_rank_insignia" title="United States Coast Guard officer rank insignia">CG</a></li>
+<li><a href="/wiki/United_States_Public_Health_Service_Commissioned_Corps#Commissioned_officers" title="United States Public Health Service Commissioned Corps">PHS</a></li>
+<li><a href="/wiki/National_Oceanic_and_Atmospheric_Administration_Commissioned_Officer_Corps#Commissioned_officers" title="National Oceanic and Atmospheric Administration Commissioned Officer Corps" class="mw-redirect">NOAA</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group" style="padding-left:0em;padding-right:0em;background-color:#DCDCDC">
+<div style="padding:0em 0.75em;">Other</div>
+</th>
+<td class="navbox-list navbox-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li>Oath:
+<ul>
+<li><a href="/wiki/United_States_Armed_Forces_oath_of_enlistment" title="United States Armed Forces oath of enlistment">Enlistment</a></li>
+<li><a href="/wiki/United_States_Uniformed_Services_Oath_of_Office" title="United States Uniformed Services Oath of Office">Office</a></li>
+</ul>
+</li>
+<li>Creeds &amp; Codes:
+<ul>
+<li><a href="/wiki/Code_of_the_United_States_Fighting_Force" title="Code of the United States Fighting Force">Code of Conduct</a></li>
+<li><a href="/wiki/Noncommissioned_officer%27s_creed" title="Noncommissioned officer's creed">NCO</a></li>
+<li><a href="/wiki/Soldier%27s_Creed" title="Soldier's Creed">A</a></li>
+<li><a href="/wiki/Rifleman%27s_Creed" title="Rifleman's Creed">MC</a></li>
+<li><a href="/wiki/Sailor%27s_Creed" title="Sailor's Creed">N</a></li>
+<li><a href="/wiki/Airman%27s_Creed" title="Airman's Creed">AF</a></li>
+<li><a href="/wiki/Creed_of_the_United_States_Coast_Guardsman" title="Creed of the United States Coast Guardsman">CG</a></li>
+</ul>
+</li>
+<li><a href="/wiki/Service_number_(United_States_Armed_Forces)" title="Service number (United States Armed Forces)">Service numbers</a>:
+<ul>
+<li><a href="/wiki/Service_number_(United_States_Army)" title="Service number (United States Army)">A</a></li>
+<li><a href="/wiki/Service_number_(United_States_Marine_Corps)" title="Service number (United States Marine Corps)">MC</a></li>
+<li><a href="/wiki/Service_number_(United_States_Navy)" title="Service number (United States Navy)">N</a></li>
+<li><a href="/wiki/Service_number_(United_States_Air_Force)" title="Service number (United States Air Force)">AF</a></li>
+<li><a href="/wiki/Service_number_(United_States_Coast_Guard)" title="Service number (United States Coast Guard)">CG</a></li>
+</ul>
+</li>
+<li><a href="/wiki/United_States_military_occupation_code" title="United States military occupation code">Military Occupational Specialty</a>/<a href="/wiki/List_of_United_States_Navy_ratings" title="List of United States Navy ratings">Rating</a>/<a href="/wiki/Air_Force_Specialty_Code" title="Air Force Specialty Code">Air Force Specialty Code</a></li>
+<li><a href="/wiki/United_States_military_pay" title="United States military pay">Pay</a></li>
+<li><a href="/wiki/Uniform_Code_of_Military_Justice" title="Uniform Code of Military Justice">Uniform Code of Military Justice</a></li>
+<li><a href="/wiki/Judge_Advocate_General%27s_Corps" title="Judge Advocate General's Corps">Judge Advocate General's Corps</a></li>
+<li><a href="/wiki/Military_Health_System" title="Military Health System">Military Health System</a>/<a href="/wiki/Tricare" title="Tricare">TRICARE</a></li>
+<li><a href="/wiki/Separation_(United_States_military)" title="Separation (United States military)">Separation</a></li>
+<li><a href="/wiki/United_States_Department_of_Veterans_Affairs" title="United States Department of Veterans Affairs">Veterans Affairs</a></li>
+<li><a href="/wiki/Conscription_in_the_United_States" title="Conscription in the United States">Conscription</a></li>
+<li><a href="/wiki/Chiefs_of_Chaplains_of_the_United_States" title="Chiefs of Chaplains of the United States">Chiefs of Chaplains</a>:
+<ul>
+<li><a href="/wiki/Chief_of_Chaplains_of_the_United_States_Army" title="Chief of Chaplains of the United States Army">A</a></li>
+<li><a href="/wiki/Chaplain_of_the_United_States_Marine_Corps" title="Chaplain of the United States Marine Corps">MC</a></li>
+<li><a href="/wiki/Chief_of_Chaplains_of_the_United_States_Navy" title="Chief of Chaplains of the United States Navy">N</a></li>
+<li><a href="/wiki/Chief_of_Chaplains_of_the_United_States_Air_Force" title="Chief of Chaplains of the United States Air Force">AF</a></li>
+<li><a href="/wiki/Chaplain_of_the_United_States_Coast_Guard" title="Chaplain of the United States Coast Guard">CG</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group" style="background-color:#DCDCDC"><a href="/wiki/Equipment_of_the_United_States_Armed_Forces" title="Equipment of the United States Armed Forces">Equipment</a></th>
+<td class="navbox-list navbox-even" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/Equipment_of_the_United_States_Army" title="Equipment of the United States Army">A</a></li>
+<li>MC:
+<ul>
+<li><a href="/wiki/List_of_vehicles_of_the_United_States_Marine_Corps" title="List of vehicles of the United States Marine Corps">vehicles</a></li>
+<li><a href="/wiki/List_of_weapons_of_the_United_States_Marine_Corps" title="List of weapons of the United States Marine Corps">weapons</a></li>
+<li><a href="/wiki/List_of_United_States_Marine_Corps_individual_equipment" title="List of United States Marine Corps individual equipment">other</a></li>
+</ul>
+</li>
+<li><a href="/wiki/Equipment_of_the_United_States_Navy" title="Equipment of the United States Navy">N</a></li>
+<li><a href="/wiki/Equipment_of_the_United_States_Air_Force" title="Equipment of the United States Air Force">AF</a></li>
+<li><a href="/wiki/Equipment_of_the_United_States_Coast_Guard" title="Equipment of the United States Coast Guard">CG</a></li>
+</ul>
+</div>
+<table class="nowraplinks navbox-subgroup" style="border-spacing:0">
+<tr>
+<th scope="row" class="navbox-group" style="padding-left:0em;padding-right:0em;background-color:#DCDCDC">
+<div style="padding:0em 0.75em;">Land</div>
+</th>
+<td class="navbox-list navbox-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/List_of_individual_weapons_of_the_U.S._Armed_Forces" title="List of individual weapons of the U.S. Armed Forces">Individual weapons</a></li>
+<li><a href="/wiki/List_of_crew-served_weapons_of_the_U.S._Armed_Forces" title="List of crew-served weapons of the U.S. Armed Forces">Crew-served weapons</a></li>
+<li><a href="/wiki/List_of_land_vehicles_of_the_U.S._Armed_Forces" title="List of land vehicles of the U.S. Armed Forces">Vehicles</a> (<a href="/wiki/List_of_currently_active_United_States_military_land_vehicles" title="List of currently active United States military land vehicles">active</a>)</li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group" style="padding-left:0em;padding-right:0em;background-color:#DCDCDC">
+<div style="padding:0em 0.75em;">Sea</div>
+</th>
+<td class="navbox-list navbox-even" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/List_of_currently_active_United_States_military_watercraft" title="List of currently active United States military watercraft">All watercraft</a></li>
+<li>Ships:
+<ul>
+<li><a href="/wiki/List_of_ships_of_the_United_States_Army" title="List of ships of the United States Army">A</a></li>
+<li><a href="/wiki/List_of_United_States_Navy_ships" title="List of United States Navy ships">N</a> (<a href="/wiki/List_of_current_ships_of_the_United_States_Navy" title="List of current ships of the United States Navy">active</a>)</li>
+<li><a href="/wiki/List_of_ships_of_the_United_States_Air_Force" title="List of ships of the United States Air Force">AF</a></li>
+<li><a href="/wiki/List_of_United_States_Coast_Guard_cutters" title="List of United States Coast Guard cutters">CG</a></li>
+<li><a href="/wiki/List_of_Military_Sealift_Command_ships" title="List of Military Sealift Command ships">MSC</a></li>
+<li><a href="/wiki/NOAA_ships_and_aircraft" title="NOAA ships and aircraft">NOAA</a></li>
+</ul>
+</li>
+<li>Weapons:
+<ul>
+<li><a href="/wiki/List_of_United_States_Navy_weapons" title="List of United States Navy weapons">N</a></li>
+<li><a href="/wiki/Equipment_of_the_United_States_Coast_Guard#Small_arms" title="Equipment of the United States Coast Guard">CG</a></li>
+</ul>
+</li>
+<li>Aircraft:
+<ul>
+<li><a href="/wiki/List_of_military_aircraft_of_the_United_States_(naval)" title="List of military aircraft of the United States (naval)">N</a></li>
+<li><a href="/wiki/Equipment_of_the_United_States_Coast_Guard#Aircraft" title="Equipment of the United States Coast Guard">CG</a></li>
+<li><a href="/wiki/NOAA_ships_and_aircraft" title="NOAA ships and aircraft">NOAA</a></li>
+</ul>
+</li>
+<li><a href="/wiki/United_States_naval_reactors" title="United States naval reactors">Reactors</a></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group" style="padding-left:0em;padding-right:0em;background-color:#DCDCDC">
+<div style="padding:0em 0.75em;">Air</div>
+</th>
+<td class="navbox-list navbox-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/List_of_military_aircraft_of_the_United_States" title="List of military aircraft of the United States">Aircraft</a>
+<ul>
+<li><a href="/wiki/List_of_military_aircraft_of_the_United_States_(1909%E2%80%931919)" title="List of military aircraft of the United States (1909–1919)" class="mw-redirect">World War I</a></li>
+<li><a href="/wiki/List_of_active_United_States_military_aircraft" title="List of active United States military aircraft">active</a></li>
+</ul>
+</li>
+<li><a href="/wiki/United_States_military_aircraft_designation_systems" title="United States military aircraft designation systems">Aircraft designation</a></li>
+<li><a href="/wiki/List_of_missiles_by_country#United_States_.28North_America.3B_NATO.29" title="List of missiles by country">Missiles</a></li>
+<li><a href="/wiki/U.S._helicopter_armament_subsystems" title="U.S. helicopter armament subsystems">Helicopter arms</a></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group" style="padding-left:0em;padding-right:0em;background-color:#DCDCDC">
+<div style="padding:0em 0.75em;">Other</div>
+</th>
+<td class="navbox-list navbox-even" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/List_of_military_electronics_of_the_United_States" title="List of military electronics of the United States">Electronics</a> (<a href="/wiki/Joint_Electronics_Type_Designation_System" title="Joint Electronics Type Designation System">designations</a>)</li>
+<li><a href="/wiki/Flags_of_the_United_States_Armed_Forces" title="Flags of the United States Armed Forces">Flags</a>:
+<ul>
+<li><a href="/wiki/Flag_of_the_United_States_Army" title="Flag of the United States Army">A</a></li>
+<li><a href="/wiki/Flag_of_the_United_States_Marine_Corps" title="Flag of the United States Marine Corps">MC</a></li>
+<li><a href="/wiki/Flag_of_the_United_States_Navy" title="Flag of the United States Navy">N</a></li>
+<li><a href="/wiki/Flag_of_the_United_States_Air_Force" title="Flag of the United States Air Force">AF</a></li>
+<li><a href="/wiki/Flag_of_the_United_States_Coast_Guard" title="Flag of the United States Coast Guard">CG</a></li>
+<li><a href="/wiki/Ensign_of_the_United_States" title="Ensign of the United States">Ensign</a></li>
+<li><a href="/wiki/Jack_of_the_United_States" title="Jack of the United States">Jack</a></li>
+<li><a href="/wiki/Guidon_(United_States)" title="Guidon (United States)">Guidons</a></li>
+</ul>
+</li>
+<li><a href="/wiki/United_States_military_ration" title="United States military ration">Food</a></li>
+<li><a href="/wiki/United_States_and_weapons_of_mass_destruction" title="United States and weapons of mass destruction">WMDs</a>:
+<ul>
+<li><a href="/wiki/Nuclear_weapons_and_the_United_States" title="Nuclear weapons and the United States">Nuclear</a></li>
+<li><a href="/wiki/United_States_biological_weapons_program" title="United States biological weapons program">Biological</a></li>
+<li><a href="/wiki/List_of_U.S._chemical_weapons_topics" title="List of U.S. chemical weapons topics">Chemical</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<td class="navbox-abovebelow" colspan="2" style="background-color:#DCDCDC">
+<div>
+<dl>
+<dt>Legend</dt>
+<dd>A = <a href="/wiki/United_States_Army" title="United States Army">Army</a></dd>
+<dd>MC = <a href="/wiki/United_States_Marine_Corps" title="United States Marine Corps">Marine Corps</a></dd>
+<dd>N = <a href="/wiki/United_States_Navy" title="United States Navy">Navy</a></dd>
+<dd>AF = <a href="/wiki/United_States_Air_Force" title="United States Air Force">Air Force</a></dd>
+<dd>CG = <a href="/wiki/United_States_Coast_Guard" title="United States Coast Guard">Coast Guard</a></dd>
+<dd>PHS = <a href="/wiki/United_States_Public_Health_Service" title="United States Public Health Service">Public Health Service</a></dd>
+<dd>NOAA = <a href="/wiki/National_Oceanic_and_Atmospheric_Administration" title="National Oceanic and Atmospheric Administration">National Oceanic and Atmospheric Administration</a></dd>
+<dd>MSC = <a href="/wiki/Military_Sealift_Command" title="Military Sealift Command">Military Sealift Command</a></dd>
+</dl>
+</div>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+</table>
+<table class="navbox" style="border-spacing:0">
+<tr>
+<td style="padding:2px">
+<table class="nowraplinks hlist collapsible collapsed navbox-inner" style="border-spacing:0;background:transparent;color:inherit">
+<tr>
+<th scope="col" class="navbox-title" colspan="2">
+<div class="plainlinks hlist navbar mini">
+<ul>
+<li class="nv-view"><a href="/wiki/Template:United_States_topics" title="Template:United States topics"><span title="View this template" style=";;background:none transparent;border:none;;">v</span></a></li>
+<li class="nv-talk"><a href="/wiki/Template_talk:United_States_topics" title="Template talk:United States topics"><span title="Discuss this template" style=";;background:none transparent;border:none;;">t</span></a></li>
+<li class="nv-edit"><a class="external text" href="//en.wikipedia.org/w/index.php?title=Template:United_States_topics&amp;action=edit"><span title="Edit this template" style=";;background:none transparent;border:none;;">e</span></a></li>
+</ul>
+</div>
+<div style="font-size:110%"><a href="/wiki/United_States" title="United States">United States</a>&#160;topics</div>
+</th>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group"><a href="/wiki/History_of_the_United_States" title="History of the United States">History</a></th>
+<td class="navbox-list navbox-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;background:transparent;;background:transparent;">
+<div style="padding:0em 0.25em"></div>
+<table class="nowraplinks navbox-subgroup" style="border-spacing:0">
+<tr>
+<th scope="row" class="navbox-group" style="padding-left:0.5em;padding-right:0.5em;font-weight:normal;"><a href="/wiki/Timeline_of_United_States_history" title="Timeline of United States history">Timeline</a></th>
+<td class="navbox-list navbox-even" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/Pre-Columbian_era" title="Pre-Columbian era">Pre-Columbian era</a></li>
+<li><a href="/wiki/Colonial_history_of_the_United_States" title="Colonial history of the United States">Colonial era</a>
+<ul>
+<li><a href="/wiki/Thirteen_Colonies" title="Thirteen Colonies">Thirteen Colonies</a></li>
+<li><a href="/wiki/Colonial_American_military_history" title="Colonial American military history">Military history</a></li>
+<li><a href="/wiki/Continental_Congress" title="Continental Congress">Continental Congress</a></li>
+</ul>
+</li>
+<li><a href="/wiki/American_Revolution" title="American Revolution">American Revolution</a>
+<ul>
+<li><a href="/wiki/American_Revolutionary_War" title="American Revolutionary War">War</a></li>
+</ul>
+</li>
+<li><a href="/wiki/American_frontier" title="American frontier">American frontier</a></li>
+<li><a href="/wiki/Federalist_Era" title="Federalist Era">Federalist Era</a></li>
+<li><a href="/wiki/War_of_1812" title="War of 1812">War of 1812</a></li>
+<li><a href="/wiki/United_States_territorial_acquisitions" title="United States territorial acquisitions">Territorial acquisitions</a></li>
+<li><a href="/wiki/Territorial_evolution_of_the_United_States" title="Territorial evolution of the United States">Territorial evolution</a></li>
+<li><a href="/wiki/Mexican%E2%80%93American_War" title="Mexican–American War">Mexican–American War</a></li>
+<li><a href="/wiki/American_Civil_War" title="American Civil War">Civil War</a></li>
+<li><a href="/wiki/Reconstruction_Era" title="Reconstruction Era">Reconstruction Era</a></li>
+<li><a href="/wiki/American_Indian_Wars" title="American Indian Wars">Indian Wars</a></li>
+<li><a href="/wiki/Gilded_Age" title="Gilded Age">Gilded Age</a></li>
+<li><a href="/wiki/Progressive_Era" title="Progressive Era">Progressive Era</a></li>
+<li><a href="/wiki/African-American_Civil_Rights_Movement_(1896%E2%80%931954)" title="African-American Civil Rights Movement (1896–1954)">African-American Civil Rights Movement (1896–1954)</a></li>
+<li><a href="/wiki/Spanish%E2%80%93American_War" title="Spanish–American War">Spanish–American War</a></li>
+<li><a href="/wiki/American_imperialism" title="American imperialism">Imperialism</a></li>
+<li><a href="/wiki/History_of_the_United_States_(1865%E2%80%931918)#World_War_I" title="History of the United States (1865–1918)">World War I</a></li>
+<li><a href="/wiki/Roaring_Twenties" title="Roaring Twenties">Roaring Twenties</a></li>
+<li><a href="/wiki/Great_Depression" title="Great Depression">Great Depression</a></li>
+<li><a href="/wiki/Military_history_of_the_United_States_during_World_War_II" title="Military history of the United States during World War II">World War II</a>
+<ul>
+<li><a href="/wiki/United_States_home_front_during_World_War_II" title="United States home front during World War II">Home front</a></li>
+</ul>
+</li>
+<li><a href="/wiki/Cold_War" title="Cold War">Cold War</a></li>
+<li><a href="/wiki/Korean_War" title="Korean War">Korean War</a></li>
+<li><a href="/wiki/Space_Race" title="Space Race">Space Race</a></li>
+<li><a href="/wiki/African-American_Civil_Rights_Movement_(1954%E2%80%9368)" title="African-American Civil Rights Movement (1954–68)">African-American Civil Rights Movement (1954–68)</a></li>
+<li><a href="/wiki/Second-wave_feminism" title="Second-wave feminism">Feminist Movement</a></li>
+<li><a href="/wiki/Vietnam_War" title="Vietnam War">Vietnam War</a></li>
+<li><a href="/wiki/History_of_the_United_States_(1991%E2%80%93present)" title="History of the United States (1991–present)">Post-Cold War (1991–present)</a></li>
+<li><a href="/wiki/War_on_Terror" title="War on Terror">War on Terror</a>
+<ul>
+<li><a href="/wiki/War_in_Afghanistan_(2001%E2%80%93present)" title="War in Afghanistan (2001–present)">War in Afghanistan</a></li>
+<li><a href="/wiki/Iraq_War" title="Iraq War">Iraq War</a></li>
+</ul>
+</li>
+<li><a href="/wiki/Timeline_of_modern_American_conservatism" title="Timeline of modern American conservatism">Timeline of modern American conservatism</a></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group" style="padding-left:0.5em;padding-right:0.5em;font-weight:normal;"><a href="/wiki/Outline_of_the_United_States#History_of_the_United_States" title="Outline of the United States">By topic</a></th>
+<td class="navbox-list navbox-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/Demographic_history_of_the_United_States" title="Demographic history of the United States">Demographic</a></li>
+<li><a href="/wiki/Timeline_of_United_States_discoveries" title="Timeline of United States discoveries">Discoveries</a></li>
+<li><a href="/wiki/Economic_history_of_the_United_States" title="Economic history of the United States">Economic</a>
+<ul>
+<li><a href="/wiki/History_of_United_States_debt_ceiling" title="History of United States debt ceiling">Debt ceiling</a></li>
+</ul>
+</li>
+<li><a href="/wiki/Timeline_of_United_States_inventions" title="Timeline of United States inventions">Inventions</a>
+<ul>
+<li><small style="font-size:85%;"><a href="/wiki/Timeline_of_United_States_inventions_(before_1890)" title="Timeline of United States inventions (before 1890)">before 1890</a></small></li>
+<li><small style="font-size:85%;"><a href="/wiki/Timeline_of_United_States_inventions_(1890%E2%80%931945)" title="Timeline of United States inventions (1890–1945)">1890–1945</a></small></li>
+<li><small style="font-size:85%;"><a href="/wiki/Timeline_of_United_States_inventions_(1946%E2%80%9391)" title="Timeline of United States inventions (1946–91)">1946–91</a></small></li>
+<li><small style="font-size:85%;"><a href="/wiki/Timeline_of_United_States_inventions_(after_1991)" title="Timeline of United States inventions (after 1991)">after 1991</a></small></li>
+</ul>
+</li>
+<li><a href="/wiki/Military_history_of_the_United_States" title="Military history of the United States">Military</a></li>
+<li><a href="/wiki/Postage_stamps_and_postal_history_of_the_United_States" title="Postage stamps and postal history of the United States">Postal</a></li>
+<li><a href="/wiki/Technological_and_industrial_history_of_the_United_States" title="Technological and industrial history of the United States">Technological and industrial</a></li>
+</ul>
+</div>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group"><a href="/wiki/Geography_of_the_United_States" title="Geography of the United States">Geography</a></th>
+<td class="navbox-list navbox-even" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;background:transparent;">
+<div style="padding:0em 0.25em"></div>
+<table class="nowraplinks navbox-subgroup" style="border-spacing:0">
+<tr>
+<td colspan="2" class="navbox-list navbox-even" style="width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/Lists_of_populated_places_in_the_United_States" title="Lists of populated places in the United States">Cities, towns, and villages</a></li>
+<li><a href="/wiki/County_(United_States)" title="County (United States)">Counties</a></li>
+<li><a href="/wiki/Extreme_points_of_the_United_States" title="Extreme points of the United States">Extreme points</a></li>
+<li><a href="/wiki/List_of_islands_of_the_United_States" title="List of islands of the United States">Islands</a></li>
+<li><a href="/wiki/List_of_mountains_of_the_United_States" title="List of mountains of the United States">Mountains</a>
+<ul>
+<li><a href="/wiki/List_of_mountain_peaks_of_the_United_States" title="List of mountain peaks of the United States">Peaks</a></li>
+<li><a href="/wiki/Appalachian_Mountains" title="Appalachian Mountains">Appalachian</a></li>
+<li><a href="/wiki/Rocky_Mountains" title="Rocky Mountains">Rocky</a></li>
+</ul>
+</li>
+<li><a href="/wiki/List_of_areas_in_the_United_States_National_Park_System" title="List of areas in the United States National Park System">National Park System</a></li>
+<li><a href="/wiki/List_of_regions_of_the_United_States" title="List of regions of the United States">Regions</a>
+<ul>
+<li><a href="/wiki/West_Coast_of_the_United_States" title="West Coast of the United States">West Coast</a></li>
+<li><a href="/wiki/East_Coast_of_the_United_States" title="East Coast of the United States">East Coast</a></li>
+<li><a href="/wiki/Great_Plains" title="Great Plains">Great Plains</a></li>
+<li><a href="/wiki/Mid-Atlantic_states" title="Mid-Atlantic states">Mid-Atlantic</a></li>
+<li><a href="/wiki/Midwestern_United_States" title="Midwestern United States">Midwestern</a></li>
+<li><a href="/wiki/New_England" title="New England">New England</a></li>
+<li><a href="/wiki/Northwestern_United_States" title="Northwestern United States">Northwestern</a></li>
+<li><a href="/wiki/Northeastern_United_States" title="Northeastern United States">Northeastern</a></li>
+<li><a href="/wiki/Southwestern_United_States" title="Southwestern United States">Southwestern</a></li>
+<li><a href="/wiki/Southeastern_United_States" title="Southeastern United States">Southeastern</a></li>
+<li><a href="/wiki/Western_United_States" title="Western United States">Western</a></li>
+<li><a href="/wiki/Eastern_United_States" title="Eastern United States">Eastern</a></li>
+<li><a href="/wiki/Northern_United_States" title="Northern United States">Northern</a></li>
+<li><a href="/wiki/Southern_United_States" title="Southern United States">Southern</a></li>
+<li><a href="/wiki/Pacific_States" title="Pacific States">Pacific</a></li>
+</ul>
+</li>
+<li><a href="/wiki/List_of_rivers_of_the_United_States" title="List of rivers of the United States">Rivers</a>
+<ul>
+<li><a href="/wiki/Colorado_River" title="Colorado River">Colorado</a></li>
+<li><a href="/wiki/Columbia_River" title="Columbia River">Columbia</a></li>
+<li><a href="/wiki/Mississippi_River" title="Mississippi River">Mississippi</a></li>
+<li><a href="/wiki/Missouri_River" title="Missouri River">Missouri</a></li>
+<li><a href="/wiki/Ohio_River" title="Ohio River">Ohio</a></li>
+<li><a href="/wiki/Rio_Grande" title="Rio Grande">Rio Grande</a></li>
+</ul>
+</li>
+<li><a href="/wiki/U.S._state" title="U.S. state">States</a></li>
+<li><a href="/wiki/United_States_territory" title="United States territory">Territory</a></li>
+<li><a href="/wiki/Water_supply_and_sanitation_in_the_United_States" title="Water supply and sanitation in the United States">Water supply and sanitation</a></li>
+</ul>
+</div>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group"><a href="/wiki/Politics_of_the_United_States" title="Politics of the United States">Politics</a></th>
+<td class="navbox-list navbox-even" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;background:transparent;">
+<div style="padding:0em 0.25em"></div>
+<table class="nowraplinks navbox-subgroup" style="border-spacing:0">
+<tr>
+<td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0px">
+<div style="padding:0em 0.25em"></div>
+<table class="nowraplinks navbox-subgroup" style="border-spacing:0">
+<tr>
+<th scope="row" class="navbox-group" style="padding-left:0.5em;padding-right:0.5em;font-weight:normal;"><a href="/wiki/Federal_government_of_the_United_States" title="Federal government of the United States">Federal</a></th>
+<td class="navbox-list navbox-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em"></div>
+<table class="nowraplinks navbox-subgroup" style="border-spacing:0">
+<tr>
+<th scope="row" class="navbox-group" style="padding-left:0.5em;padding-right:0.5em;font-weight:normal;">Executive</th>
+<td class="navbox-list navbox-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><b><strong class="selflink">President</strong></b>
+<ul>
+<li><a href="/wiki/Executive_Office_of_the_President_of_the_United_States" title="Executive Office of the President of the United States">Executive Office</a></li>
+</ul>
+</li>
+<li><a href="/wiki/Cabinet_of_the_United_States" title="Cabinet of the United States">Cabinet</a>&#160;/ <a href="/wiki/United_States_federal_executive_departments" title="United States federal executive departments">Executive departments</a></li>
+<li><a href="/wiki/United_States_federal_civil_service" title="United States federal civil service">Civil service</a></li>
+<li><a href="/wiki/Independent_agencies_of_the_United_States_government" title="Independent agencies of the United States government">Independent agencies</a></li>
+<li><a href="/wiki/Federal_law_enforcement_in_the_United_States" title="Federal law enforcement in the United States">Law enforcement</a></li>
+<li><a href="/wiki/Public_policy_of_the_United_States" title="Public policy of the United States">Public policy</a></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group" style="padding-left:0.5em;padding-right:0.5em;font-weight:normal;">Legislature</th>
+<td class="navbox-list navbox-even" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><b><a href="/wiki/United_States_Congress" title="United States Congress">Congress</a></b>
+<ul>
+<li><a href="/wiki/United_States_Senate" title="United States Senate">Senate</a>
+<ul>
+<li><a href="/wiki/Vice_President_of_the_United_States" title="Vice President of the United States">Vice President</a></li>
+<li><a href="/wiki/President_pro_tempore_of_the_United_States_Senate" title="President pro tempore of the United States Senate">President pro tem</a></li>
+</ul>
+</li>
+<li><a href="/wiki/United_States_House_of_Representatives" title="United States House of Representatives">House of Representatives</a>
+<ul>
+<li><a href="/wiki/Speaker_of_the_United_States_House_of_Representatives" title="Speaker of the United States House of Representatives">Speaker</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group" style="padding-left:0.5em;padding-right:0.5em;font-weight:normal;">Judiciary</th>
+<td class="navbox-list navbox-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><b><a href="/wiki/Supreme_Court_of_the_United_States" title="Supreme Court of the United States">Supreme Court</a></b></li>
+<li><a href="/wiki/Federal_judiciary_of_the_United_States" title="Federal judiciary of the United States">Federal judiciary</a></li>
+<li><a href="/wiki/United_States_courts_of_appeals" title="United States courts of appeals">Courts of appeals</a></li>
+<li><a href="/wiki/United_States_district_court" title="United States district court">District courts</a></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group" style="padding-left:0.5em;padding-right:0.5em;font-weight:normal;"><a href="/wiki/Law_of_the_United_States" title="Law of the United States">Law</a></th>
+<td class="navbox-list navbox-even" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/United_States_Constitution" title="United States Constitution">Constitution</a>
+<ul>
+<li><a href="/wiki/Federalism_in_the_United_States" title="Federalism in the United States">Federalism</a></li>
+<li><a href="/wiki/Federal_preemption" title="Federal preemption">Preemption</a></li>
+<li><a href="/wiki/Separation_of_powers_under_the_United_States_Constitution" title="Separation of powers under the United States Constitution">Separation of powers</a></li>
+</ul>
+</li>
+<li><a href="/wiki/United_States_Bill_of_Rights" title="United States Bill of Rights">Bill of Rights</a>
+<ul>
+<li><a href="/wiki/Civil_liberties_in_the_United_States" title="Civil liberties in the United States">Civil liberties</a></li>
+</ul>
+</li>
+<li><a href="/wiki/Code_of_Federal_Regulations" title="Code of Federal Regulations">Code of Federal Regulations</a></li>
+<li><a href="/wiki/Federal_Reporter" title="Federal Reporter">Federal Reporter</a></li>
+<li><a href="/wiki/United_States_Code" title="United States Code">United States Code</a></li>
+<li><a href="/wiki/United_States_Reports" title="United States Reports">United States Reports</a></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group" style="padding-left:0.5em;padding-right:0.5em;font-weight:normal;"><a href="/wiki/United_States_Intelligence_Community" title="United States Intelligence Community">Intelligence</a></th>
+<td class="navbox-list navbox-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/Central_Intelligence_Agency" title="Central Intelligence Agency">Central Intelligence Agency</a></li>
+<li><a href="/wiki/Defense_Intelligence_Agency" title="Defense Intelligence Agency">Defense Intelligence Agency</a></li>
+<li><a href="/wiki/National_Security_Agency" title="National Security Agency">National Security Agency</a></li>
+<li><a href="/wiki/Federal_Bureau_of_Investigation" title="Federal Bureau of Investigation">Federal Bureau of Investigation</a></li>
+<li><a href="/wiki/National_Reconnaissance_Office" title="National Reconnaissance Office">National Reconnaissance Office</a></li>
+<li><a href="/wiki/National_Geospatial-Intelligence_Agency" title="National Geospatial-Intelligence Agency">National Geospatial-Intelligence Agency</a></li>
+<li><a href="/wiki/Office_of_the_Director_of_National_Intelligence" title="Office of the Director of National Intelligence" class="mw-redirect">Office of the Director of National Intelligence</a></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group" style="padding-left:0.5em;padding-right:0.5em;font-weight:normal;"><a href="/wiki/Uniformed_services_of_the_United_States" title="Uniformed services of the United States">Uniformed</a></th>
+<td class="navbox-list navbox-even" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/United_States_Armed_Forces" title="United States Armed Forces">Armed Forces</a>
+<ul>
+<li><a href="/wiki/United_States_Air_Force" title="United States Air Force">Air Force</a></li>
+<li><a href="/wiki/United_States_Army" title="United States Army">Army</a></li>
+<li><a href="/wiki/United_States_Marine_Corps" title="United States Marine Corps">Marine Corps</a></li>
+<li><a href="/wiki/United_States_Navy" title="United States Navy">Navy</a></li>
+<li><a href="/wiki/National_Guard_of_the_United_States" title="National Guard of the United States">National Guard</a></li>
+<li><a href="/wiki/United_States_Coast_Guard" title="United States Coast Guard">Coast Guard</a></li>
+</ul>
+</li>
+<li><a href="/wiki/National_Oceanic_and_Atmospheric_Administration_Commissioned_Officer_Corps" title="National Oceanic and Atmospheric Administration Commissioned Officer Corps" class="mw-redirect">NOAA Corps</a></li>
+<li><a href="/wiki/United_States_Public_Health_Service_Commissioned_Corps" title="United States Public Health Service Commissioned Corps">Public Health Service Corps</a></li>
+</ul>
+</div>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/Political_divisions_of_the_United_States" title="Political divisions of the United States">Administrative divisions</a></li>
+<li><a href="/wiki/Elections_in_the_United_States" title="Elections in the United States">Elections</a>
+<ul>
+<li><a href="/wiki/Electoral_College_(United_States)" title="Electoral College (United States)">Electoral College</a></li>
+</ul>
+</li>
+<li><a href="/wiki/Foreign_policy_of_the_United_States" title="Foreign policy of the United States">Foreign policy</a></li>
+<li><a href="/wiki/Foreign_relations_of_the_United_States" title="Foreign relations of the United States">Foreign relations</a></li>
+<li><a href="/wiki/Political_ideologies_in_the_United_States" title="Political ideologies in the United States">Ideologies</a></li>
+<li><a href="/wiki/Local_government_in_the_United_States" title="Local government in the United States">Local governments</a></li>
+<li><a href="/wiki/Political_parties_in_the_United_States" title="Political parties in the United States">Parties</a>
+<ul>
+<li><a href="/wiki/Democratic_Party_(United_States)" title="Democratic Party (United States)">Democratic Party</a></li>
+<li><a href="/wiki/Republican_Party_(United_States)" title="Republican Party (United States)">Republican Party</a></li>
+<li><a href="/wiki/Third_party_(United_States)" title="Third party (United States)">Third parties</a></li>
+</ul>
+</li>
+<li><a href="/wiki/51st_state" title="51st state">51st state</a>
+<ul>
+<li><a href="/wiki/Political_status_of_Puerto_Rico" title="Political status of Puerto Rico">Political status of Puerto Rico</a></li>
+</ul>
+</li>
+<li><a href="/wiki/Red_states_and_blue_states" title="Red states and blue states">Red states and blue states</a>
+<ul>
+<li><a href="/wiki/Purple_America" title="Purple America">Purple America</a></li>
+</ul>
+</li>
+<li><a href="/wiki/List_of_federal_political_scandals_in_the_United_States" title="List of federal political scandals in the United States">Scandals</a></li>
+<li><a href="/wiki/State_governments_of_the_United_States" title="State governments of the United States">State governments</a></li>
+<li><a href="/wiki/Uncle_Sam" title="Uncle Sam">Uncle Sam</a></li>
+</ul>
+</div>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group"><a href="/wiki/Economy_of_the_United_States" title="Economy of the United States">Economy</a></th>
+<td class="navbox-list navbox-even" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;background:transparent;">
+<div style="padding:0em 0.25em"></div>
+<table class="nowraplinks navbox-subgroup" style="border-spacing:0">
+<tr>
+<td colspan="2" class="navbox-list navbox-even" style="width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><b><a href="/wiki/Economic_issues_in_the_United_States" title="Economic issues in the United States">Economic issues</a></b></li>
+<li><a href="/wiki/Agriculture_in_the_United_States" title="Agriculture in the United States">Agriculture</a></li>
+<li><a href="/wiki/Banking_in_the_United_States" title="Banking in the United States">Banking</a></li>
+<li><a href="/wiki/Communications_in_the_United_States" title="Communications in the United States">Communications</a></li>
+<li><a href="/wiki/List_of_companies_of_the_United_States" title="List of companies of the United States">Companies</a>
+<ul>
+<li><a href="/wiki/List_of_companies_of_the_United_States_by_state" title="List of companies of the United States by state">by state</a></li>
+</ul>
+</li>
+<li><a href="/wiki/United_States_dollar" title="United States dollar">Dollar <small style="font-size:85%;">(currency)</small></a></li>
+<li><a href="/wiki/Energy_in_the_United_States" title="Energy in the United States">Energy</a></li>
+<li><a href="/wiki/United_States_federal_budget" title="United States federal budget">Federal Budget</a></li>
+<li><a href="/wiki/Federal_Reserve_System" title="Federal Reserve System">Federal Reserve System</a></li>
+<li><a href="/wiki/Financial_position_of_the_United_States" title="Financial position of the United States">Financial position</a></li>
+<li><a href="/wiki/Insurance_in_the_United_States" title="Insurance in the United States">Insurance</a></li>
+<li><a href="/wiki/Labor_unions_in_the_United_States" title="Labor unions in the United States">Labor unions</a></li>
+<li><a href="/wiki/Mining_in_the_United_States" title="Mining in the United States">Mining</a></li>
+<li><a href="/wiki/National_debt_of_the_United_States" title="National debt of the United States">Public debt</a></li>
+<li><a href="/wiki/Social_programs_in_the_United_States" title="Social programs in the United States">Social welfare programs</a></li>
+<li><a href="/wiki/Taxation_in_the_United_States" title="Taxation in the United States">Taxation</a></li>
+<li><a href="/wiki/Tourism_in_the_United_States" title="Tourism in the United States">Tourism</a></li>
+<li><a href="/wiki/Foreign_trade_of_the_United_States" title="Foreign trade of the United States">Trade</a></li>
+<li><a href="/wiki/Transportation_in_the_United_States" title="Transportation in the United States">Transportation</a></li>
+<li><a href="/wiki/Unemployment_in_the_United_States" title="Unemployment in the United States">Unemployment</a></li>
+<li><a href="/wiki/Wall_Street" title="Wall Street">Wall Street</a></li>
+</ul>
+</div>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group">Society</th>
+<td class="navbox-list navbox-even" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;background:transparent;">
+<div style="padding:0em 0.25em"></div>
+<table class="nowraplinks navbox-subgroup" style="border-spacing:0">
+<tr>
+<td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0px">
+<div style="padding:0em 0.25em"></div>
+<table class="nowraplinks navbox-subgroup" style="border-spacing:0">
+<tr>
+<th scope="row" class="navbox-group" style="padding-left:0.5em;padding-right:0.5em;font-weight:normal;"><a href="/wiki/Culture_of_the_United_States" title="Culture of the United States">Culture</a></th>
+<td class="navbox-list navbox-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/Architecture_of_the_United_States" title="Architecture of the United States">Architecture</a></li>
+<li><a href="/wiki/Visual_art_of_the_United_States" title="Visual art of the United States">Art</a></li>
+<li><a href="/wiki/Cinema_of_the_United_States" title="Cinema of the United States">Cinema</a></li>
+<li><a href="/wiki/Crime_in_the_United_States" title="Crime in the United States">Crime</a></li>
+<li><a href="/wiki/Cuisine_of_the_United_States" title="Cuisine of the United States">Cuisine</a></li>
+<li><a href="/wiki/Dance_in_the_United_States" title="Dance in the United States">Dance</a></li>
+<li><a href="/wiki/Demographics_of_the_United_States" title="Demographics of the United States">Demographics</a></li>
+<li><a href="/wiki/Education_in_the_United_States" title="Education in the United States">Education</a></li>
+<li><a href="/wiki/Family_structure_in_the_United_States" title="Family structure in the United States">Family structure</a></li>
+<li><a href="/wiki/Fashion_in_the_United_States" title="Fashion in the United States">Fashion</a></li>
+<li><a href="/wiki/Flag_of_the_United_States" title="Flag of the United States">Flag</a></li>
+<li><a href="/wiki/Folklore_of_the_United_States" title="Folklore of the United States">Folklore</a></li>
+<li><a href="/wiki/Health_care_in_the_United_States" title="Health care in the United States">Health care</a></li>
+<li><a href="/wiki/Health_insurance_in_the_United_States" title="Health insurance in the United States">Health insurance</a></li>
+<li><a href="/wiki/Incarceration_in_the_United_States" title="Incarceration in the United States">Incarceration</a></li>
+<li><a href="/wiki/Languages_of_the_United_States" title="Languages of the United States">Languages</a>
+<ul>
+<li><a href="/wiki/American_English" title="American English">American English</a></li>
+<li><a href="/wiki/Spanish_language_in_the_United_States" title="Spanish language in the United States">Spanish</a></li>
+<li><a href="/wiki/French_language_in_the_United_States" title="French language in the United States">French</a></li>
+<li><a href="/wiki/German_language_in_the_United_States" title="German language in the United States">German</a></li>
+<li><a href="/wiki/Italian_language_in_the_United_States" title="Italian language in the United States">Italian</a></li>
+</ul>
+</li>
+<li><a href="/wiki/American_literature" title="American literature">Literature</a></li>
+<li><a href="/wiki/Media_of_the_United_States" title="Media of the United States">Media</a></li>
+<li><a href="/wiki/Music_of_the_United_States" title="Music of the United States">Music</a></li>
+<li><a href="/wiki/Naming_in_the_United_States" title="Naming in the United States">Names</a></li>
+<li><a href="/wiki/Americans" title="Americans">People</a></li>
+<li><a href="/wiki/American_philosophy" title="American philosophy">Philosophy</a></li>
+<li><a href="/wiki/Public_holidays_in_the_United_States" title="Public holidays in the United States">Public holidays</a></li>
+<li><a href="/wiki/Radio_in_the_United_States" title="Radio in the United States">Radio</a></li>
+<li><a href="/wiki/Religion_in_the_United_States" title="Religion in the United States">Religion</a></li>
+<li><a href="/wiki/Sports_in_the_United_States" title="Sports in the United States">Sports</a></li>
+<li><a href="/wiki/Television_in_the_United_States" title="Television in the United States">Television</a></li>
+<li><a href="/wiki/Theater_of_the_United_States" title="Theater of the United States">Theater</a></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group" style="padding-left:0.5em;padding-right:0.5em;font-weight:normal;"><a href="/wiki/Social_class_in_the_United_States" title="Social class in the United States">Social class</a></th>
+<td class="navbox-list navbox-even" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/Affluence_in_the_United_States" title="Affluence in the United States">Affluence</a></li>
+<li><a href="/wiki/American_Dream" title="American Dream">American Dream</a></li>
+<li><a href="/wiki/Educational_attainment_in_the_United_States" title="Educational attainment in the United States">Educational attainment</a></li>
+<li><a href="/wiki/Homelessness_in_the_United_States" title="Homelessness in the United States">Homelessness</a></li>
+<li><a href="/wiki/Homeownership_in_the_United_States" title="Homeownership in the United States">Homeownership</a></li>
+<li><a href="/wiki/Household_income_in_the_United_States" title="Household income in the United States">Household income</a></li>
+<li><a href="/wiki/Income_inequality_in_the_United_States" title="Income inequality in the United States">Income inequality</a></li>
+<li><a href="/wiki/American_middle_class" title="American middle class">Middle class</a></li>
+<li><a href="/wiki/Personal_income_in_the_United_States" title="Personal income in the United States">Personal income</a></li>
+<li><a href="/wiki/Poverty_in_the_United_States" title="Poverty in the United States">Poverty</a></li>
+<li><a href="/wiki/Professional_and_working_class_conflict_in_the_United_States" title="Professional and working class conflict in the United States">Professional and working class conflict</a></li>
+<li><a href="/wiki/Standard_of_living_in_the_United_States" title="Standard of living in the United States">Standard of living</a></li>
+<li><a href="/wiki/Smoking_in_the_United_States" title="Smoking in the United States">Smoking</a></li>
+<li><a href="/wiki/Wealth_in_the_United_States" title="Wealth in the United States">Wealth</a></li>
+</ul>
+</div>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<th scope="row" class="navbox-group" style="padding-left:0.5em;padding-right:0.5em;font-weight:normal;">Issues</th>
+<td class="navbox-list navbox-odd" style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px">
+<div style="padding:0em 0.25em">
+<ul>
+<li><a href="/wiki/Abortion_in_the_United_States" title="Abortion in the United States">Abortion</a></li>
+<li><a href="/wiki/Affirmative_action_in_the_United_States" title="Affirmative action in the United States">Affirmative action</a></li>
+<li><a href="/wiki/Anti-Americanism" title="Anti-Americanism">Anti-Americanism</a></li>
+<li><a href="/wiki/Capital_punishment_in_the_United_States" title="Capital punishment in the United States">Capital punishment</a></li>
+<li><a href="/wiki/Criticism_of_the_United_States_government" title="Criticism of the United States government">Criticism</a></li>
+<li><a href="/wiki/Discrimination_in_the_United_States" title="Discrimination in the United States">Discrimination</a></li>
+<li><a href="/wiki/Federal_drug_policy_of_the_United_States" title="Federal drug policy of the United States">Drug policy</a></li>
+<li><a href="/wiki/Energy_policy_of_the_United_States" title="Energy policy of the United States">Energy policy</a></li>
+<li><a href="/wiki/Environmental_movement_in_the_United_States" title="Environmental movement in the United States">Environmental movement</a></li>
+<li><a href="/wiki/American_exceptionalism" title="American exceptionalism">Exceptionalism</a></li>
+<li><a href="/wiki/Gun_politics_in_the_United_States" title="Gun politics in the United States">Gun politics</a></li>
+<li><a href="/wiki/Health_care_reform_in_the_United_States" title="Health care reform in the United States">Health care reform</a></li>
+<li><a href="/wiki/Human_rights_in_the_United_States" title="Human rights in the United States">Human rights</a></li>
+<li><a href="/wiki/Immigration_to_the_United_States" title="Immigration to the United States">Immigration</a></li>
+<li><a href="/wiki/Illegal_immigration_to_the_United_States" title="Illegal immigration to the United States">Illegal Immigration</a></li>
+<li><a href="/wiki/International_rankings_of_the_United_States" title="International rankings of the United States">International rankings</a></li>
+<li><a href="/wiki/LGBT_rights_in_the_United_States" title="LGBT rights in the United States">LGBT rights</a>
+<ul>
+<li><a href="/wiki/Same-sex_marriage_in_the_United_States" title="Same-sex marriage in the United States">Same-sex marriage</a></li>
+</ul>
+</li>
+<li><a href="/wiki/American_nationalism" title="American nationalism">Nationalism</a></li>
+<li><a href="/wiki/Obesity_in_the_United_States" title="Obesity in the United States">Obesity</a></li>
+<li><a href="/wiki/Racism_in_the_United_States" title="Racism in the United States">Racism</a></li>
+<li><a href="/wiki/Separation_of_church_and_state_in_the_United_States" title="Separation of church and state in the United States">Separation of church and state</a></li>
+<li><a href="/wiki/Terrorism_in_the_United_States" title="Terrorism in the United States">Terrorism</a></li>
+</ul>
+</div>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+<tr style="height:2px">
+<td colspan="2"></td>
+</tr>
+<tr>
+<td class="navbox-abovebelow" colspan="2" style="padding:0.25em;">
+<div>
+<div style="margin-top:0;line-height:1.4em;margin-bottom:-0.2em;">
+<ul>
+<li><a href="/wiki/Outline_of_the_United_States" title="Outline of the United States">Outline</a></li>
+<li><a href="/wiki/Index_of_United_States-related_articles" title="Index of United States-related articles">Index</a></li>
+</ul>
+</div>
+<div style="margin-top:-0.2em;line-height:1.4em;font-weight:bold;margin-bottom:0;">
+<ul>
+<li><a href="/wiki/Book:United_States" title="Book:United States" class="mw-redirect">Book</a></li>
+<li><a href="/wiki/Category:United_States" title="Category:United States">Category</a></li>
+<li><a href="/wiki/Portal:United_States" title="Portal:United States">Portal</a></li>
+<li><a href="/wiki/Wikipedia:WikiProject_United_States" title="Wikipedia:WikiProject United States">WikiProject</a></li>
+</ul>
+</div>
+</div>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+</table>
+<p><span id="interwiki-de-ga"></span></p>
+
+
+<!--
+NewPP limit report
+Parsed by mw1025
+CPU time usage: 1.834 seconds
+Real time usage: 2.469 seconds
+Preprocessor visited node count: 9845/1000000
+Preprocessor generated node count: 0/1500000
+Post‐expand include size: 582893/2097152 bytes
+Template argument size: 130069/2097152 bytes
+Highest expansion depth: 20/40
+Expensive parser function count: 46/500
+Lua time usage: 0.634/10.000 seconds
+Lua memory usage: 8.53 MB/50 MB
+-->
+
+<!-- Saved in parser cache with key enwiki:pcache:idhash:24113-0!*!0!!en!4!* and timestamp 20141123142748 and revision id 634766157
+ -->
+<noscript><img src="//en.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;" /></noscript></div> <div class="printfooter">
+ Retrieved from "<a dir="ltr" href="http://en.wikipedia.org/w/index.php?title=President_of_the_United_States&amp;oldid=634766157">http://en.wikipedia.org/w/index.php?title=President_of_the_United_States&amp;oldid=634766157</a>" </div>
+ <div id='catlinks' class='catlinks'><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Help:Category" title="Help:Category">Categories</a>: <ul><li><a href="/wiki/Category:Presidents_of_the_United_States" title="Category:Presidents of the United States">Presidents of the United States</a></li><li><a href="/wiki/Category:Presidency_of_the_United_States" title="Category:Presidency of the United States">Presidency of the United States</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Hidden categories: <ul><li><a href="/wiki/Category:Use_mdy_dates_from_November_2012" title="Category:Use mdy dates from November 2012">Use mdy dates from November 2012</a></li><li><a href="/wiki/Category:Wikipedia_semi-protected_pages" title="Category:Wikipedia semi-protected pages">Wikipedia semi-protected pages</a></li><li><a href="/wiki/Category:Wikipedia_indefinitely_move-protected_pages" title="Category:Wikipedia indefinitely move-protected pages">Wikipedia indefinitely move-protected pages</a></li><li><a href="/wiki/Category:All_articles_with_unsourced_statements" title="Category:All articles with unsourced statements">All articles with unsourced statements</a></li><li><a href="/wiki/Category:Articles_with_unsourced_statements_from_March_2014" title="Category:Articles with unsourced statements from March 2014">Articles with unsourced statements from March 2014</a></li><li><a href="/wiki/Category:Articles_with_hAudio_microformats" title="Category:Articles with hAudio microformats">Articles with hAudio microformats</a></li></ul></div></div> <div class="visualClear"></div>
+ </div>
+ </div>
+ <div id="mw-navigation">
+ <h2>Navigation menu</h2>
+
+ <div id="mw-head">
+ <div id="p-personal" role="navigation" class="" aria-labelledby="p-personal-label">
+ <h3 id="p-personal-label">Personal tools</h3>
+ <ul>
+ <li id="pt-createaccount"><a href="/w/index.php?title=Special:UserLogin&amp;returnto=President+of+the+United+States&amp;type=signup" title="You are encouraged to create an account and log in; however, it is not mandatory">Create account</a></li><li id="pt-login"><a href="/w/index.php?title=Special:UserLogin&amp;returnto=President+of+the+United+States" title="You&#039;re encouraged to log in; however, it&#039;s not mandatory. [o]" accesskey="o">Log in</a></li> </ul>
+ </div>
+ <div id="left-navigation">
+ <div id="p-namespaces" role="navigation" class="vectorTabs" aria-labelledby="p-namespaces-label">
+ <h3 id="p-namespaces-label">Namespaces</h3>
+ <ul>
+ <li id="ca-nstab-main" class="selected"><span><a href="/wiki/President_of_the_United_States" title="View the content page [c]" accesskey="c">Article</a></span></li>
+ <li id="ca-talk"><span><a href="/wiki/Talk:President_of_the_United_States" title="Discussion about the content page [t]" accesskey="t">Talk</a></span></li>
+ </ul>
+ </div>
+ <div id="p-variants" role="navigation" class="vectorMenu emptyPortlet" aria-labelledby="p-variants-label">
+ <h3 id="p-variants-label"><span>Variants</span><a href="#"></a></h3>
+
+ <div class="menu">
+ <ul>
+ </ul>
+ </div>
+ </div>
+ </div>
+ <div id="right-navigation">
+ <div id="p-views" role="navigation" class="vectorTabs" aria-labelledby="p-views-label">
+ <h3 id="p-views-label">Views</h3>
+ <ul>
+ <li id="ca-view" class="selected"><span><a href="/wiki/President_of_the_United_States" >Read</a></span></li>
+ <li id="ca-viewsource"><span><a href="/w/index.php?title=President_of_the_United_States&amp;action=edit" title="This page is protected.&#10;You can view its source [e]" accesskey="e">View source</a></span></li>
+ <li id="ca-history" class="collapsible"><span><a href="/w/index.php?title=President_of_the_United_States&amp;action=history" title="Past versions of this page [h]" accesskey="h">View history</a></span></li>
+ </ul>
+ </div>
+ <div id="p-cactions" role="navigation" class="vectorMenu emptyPortlet" aria-labelledby="p-cactions-label">
+ <h3 id="p-cactions-label"><span>More</span><a href="#"></a></h3>
+
+ <div class="menu">
+ <ul>
+ </ul>
+ </div>
+ </div>
+ <div id="p-search" role="search">
+ <h3>
+ <label for="searchInput">Search</label>
+ </h3>
+
+ <form action="/w/index.php" id="searchform">
+ <div id="simpleSearch">
+ <input type="search" name="search" placeholder="Search" title="Search Wikipedia [f]" accesskey="f" id="searchInput" /><input type="hidden" value="Special:Search" name="title" /><input type="submit" name="fulltext" value="Search" title="Search Wikipedia for this text" id="mw-searchButton" class="searchButton mw-fallbackSearchButton" /><input type="submit" name="go" value="Go" title="Go to a page with this exact name if one exists" id="searchButton" class="searchButton" /> </div>
+ </form>
+ </div>
+ </div>
+ </div>
+ <div id="mw-panel">
+ <div id="p-logo" role="banner"><a class="mw-wiki-logo" href="/wiki/Main_Page" title="Visit the main page"></a></div>
+ <div class="portal" role="navigation" id='p-navigation' aria-labelledby='p-navigation-label'>
+ <h3 id='p-navigation-label'>Navigation</h3>
+
+ <div class="body">
+ <ul>
+ <li id="n-mainpage-description"><a href="/wiki/Main_Page" title="Visit the main page [z]" accesskey="z">Main page</a></li>
+ <li id="n-contents"><a href="/wiki/Portal:Contents" title="Guides to browsing Wikipedia">Contents</a></li>
+ <li id="n-featuredcontent"><a href="/wiki/Portal:Featured_content" title="Featured content – the best of Wikipedia">Featured content</a></li>
+ <li id="n-currentevents"><a href="/wiki/Portal:Current_events" title="Find background information on current events">Current events</a></li>
+ <li id="n-randompage"><a href="/wiki/Special:Random" title="Load a random article [x]" accesskey="x">Random article</a></li>
+ <li id="n-sitesupport"><a href="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&amp;utm_medium=sidebar&amp;utm_campaign=C13_en.wikipedia.org&amp;uselang=en" title="Support us">Donate to Wikipedia</a></li>
+ <li id="n-shoplink"><a href="//shop.wikimedia.org" title="Visit the Wikimedia Shop">Wikimedia Shop</a></li>
+ </ul>
+ </div>
+ </div>
+ <div class="portal" role="navigation" id='p-interaction' aria-labelledby='p-interaction-label'>
+ <h3 id='p-interaction-label'>Interaction</h3>
+
+ <div class="body">
+ <ul>
+ <li id="n-help"><a href="/wiki/Help:Contents" title="Guidance on how to use and edit Wikipedia">Help</a></li>
+ <li id="n-aboutsite"><a href="/wiki/Wikipedia:About" title="Find out about Wikipedia">About Wikipedia</a></li>
+ <li id="n-portal"><a href="/wiki/Wikipedia:Community_portal" title="About the project, what you can do, where to find things">Community portal</a></li>
+ <li id="n-recentchanges"><a href="/wiki/Special:RecentChanges" title="A list of recent changes in the wiki [r]" accesskey="r">Recent changes</a></li>
+ <li id="n-contactpage"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us">Contact page</a></li>
+ </ul>
+ </div>
+ </div>
+ <div class="portal" role="navigation" id='p-tb' aria-labelledby='p-tb-label'>
+ <h3 id='p-tb-label'>Tools</h3>
+
+ <div class="body">
+ <ul>
+ <li id="t-whatlinkshere"><a href="/wiki/Special:WhatLinksHere/President_of_the_United_States" title="List of all English Wikipedia pages containing links to this page [j]" accesskey="j">What links here</a></li>
+ <li id="t-recentchangeslinked"><a href="/wiki/Special:RecentChangesLinked/President_of_the_United_States" title="Recent changes in pages linked from this page [k]" accesskey="k">Related changes</a></li>
+ <li id="t-upload"><a href="/wiki/Wikipedia:File_Upload_Wizard" title="Upload files [u]" accesskey="u">Upload file</a></li>
+ <li id="t-specialpages"><a href="/wiki/Special:SpecialPages" title="A list of all special pages [q]" accesskey="q">Special pages</a></li>
+ <li id="t-permalink"><a href="/w/index.php?title=President_of_the_United_States&amp;oldid=634766157" title="Permanent link to this revision of the page">Permanent link</a></li>
+ <li id="t-info"><a href="/w/index.php?title=President_of_the_United_States&amp;action=info" title="More information about this page">Page information</a></li>
+ <li id="t-wikibase"><a href="//www.wikidata.org/wiki/Q11696" title="Link to connected data repository item [g]" accesskey="g">Wikidata item</a></li>
+ <li id="t-cite"><a href="/w/index.php?title=Special:CiteThisPage&amp;page=President_of_the_United_States&amp;id=634766157" title="Information on how to cite this page">Cite this page</a></li> </ul>
+ </div>
+ </div>
+ <div class="portal" role="navigation" id='p-coll-print_export' aria-labelledby='p-coll-print_export-label'>
+ <h3 id='p-coll-print_export-label'>Print/export</h3>
+
+ <div class="body">
+ <ul>
+ <li id="coll-create_a_book"><a href="/w/index.php?title=Special:Book&amp;bookcmd=book_creator&amp;referer=President+of+the+United+States">Create a book</a></li>
+ <li id="coll-download-as-rdf2latex"><a href="/w/index.php?title=Special:Book&amp;bookcmd=render_article&amp;arttitle=President+of+the+United+States&amp;oldid=634766157&amp;writer=rdf2latex">Download as PDF</a></li>
+ <li id="t-print"><a href="/w/index.php?title=President_of_the_United_States&amp;printable=yes" title="Printable version of this page [p]" accesskey="p">Printable version</a></li>
+ </ul>
+ </div>
+ </div>
+ <div class="portal" role="navigation" id='p-lang' aria-labelledby='p-lang-label'>
+ <h3 id='p-lang-label'>Languages</h3>
+
+ <div class="body">
+ <ul>
+ <li class="interlanguage-link interwiki-af"><a href="//af.wikipedia.org/wiki/President_van_die_Verenigde_State_van_Amerika" title="President van die Verenigde State van Amerika – Afrikaans" lang="af" hreflang="af">Afrikaans</a></li>
+ <li class="interlanguage-link interwiki-am"><a href="//am.wikipedia.org/wiki/%E1%8B%A8%E1%8A%A0%E1%88%9C%E1%88%AA%E1%8A%AB_%E1%8D%95%E1%88%AC%E1%8B%9A%E1%8B%B3%E1%8A%95%E1%89%B5" title="የአሜሪካ ፕሬዚዳንት – Amharic" lang="am" hreflang="am">አማርኛ</a></li>
+ <li class="interlanguage-link interwiki-ang"><a href="//ang.wikipedia.org/wiki/Foresittend_%C3%BE%C4%81ra_%C8%9Ce%C4%81nl%C7%A3htra_R%C4%ABca" title="Foresittend þāra Ȝeānlǣhtra Rīca – Old English" lang="ang" hreflang="ang">Ænglisc</a></li>
+ <li class="interlanguage-link interwiki-ar"><a href="//ar.wikipedia.org/wiki/%D8%B1%D8%A6%D9%8A%D8%B3_%D8%A7%D9%84%D9%88%D9%84%D8%A7%D9%8A%D8%A7%D8%AA_%D8%A7%D9%84%D9%85%D8%AA%D8%AD%D8%AF%D8%A9" title="رئيس الولايات المتحدة – Arabic" lang="ar" hreflang="ar">العربية</a></li>
+ <li class="interlanguage-link interwiki-an"><a href="//an.wikipedia.org/wiki/President_d%27Estatos_Unitos" title="President d&#039;Estatos Unitos – Aragonese" lang="an" hreflang="an">Aragonés</a></li>
+ <li class="interlanguage-link interwiki-az"><a href="//az.wikipedia.org/wiki/AB%C5%9E_prezidentl%C9%99rinin_siyah%C4%B1s%C4%B1" title="ABŞ prezidentlərinin siyahısı – Azerbaijani" lang="az" hreflang="az">Azərbaycanca</a></li>
+ <li class="interlanguage-link interwiki-bn"><a href="//bn.wikipedia.org/wiki/%E0%A6%AE%E0%A6%BE%E0%A6%B0%E0%A7%8D%E0%A6%95%E0%A6%BF%E0%A6%A8_%E0%A6%AF%E0%A7%81%E0%A6%95%E0%A7%8D%E0%A6%A4%E0%A6%B0%E0%A6%BE%E0%A6%B7%E0%A7%8D%E0%A6%9F%E0%A7%8D%E0%A6%B0%E0%A7%87%E0%A6%B0_%E0%A6%B0%E0%A6%BE%E0%A6%B7%E0%A7%8D%E0%A6%9F%E0%A7%8D%E0%A6%B0%E0%A6%AA%E0%A6%A4%E0%A6%BF" title="মার্কিন যুক্তরাষ্ট্রের রাষ্ট্রপতি – Bengali" lang="bn" hreflang="bn">বাংলা</a></li>
+ <li class="interlanguage-link interwiki-be"><a href="//be.wikipedia.org/wiki/%D0%9F%D1%80%D1%8D%D0%B7%D1%96%D0%B4%D1%8D%D0%BD%D1%82_%D0%97%D0%A8%D0%90" title="Прэзідэнт ЗША – Belarusian" lang="be" hreflang="be">Беларуская</a></li>
+ <li class="interlanguage-link interwiki-bcl"><a href="//bcl.wikipedia.org/wiki/Presidente_kan_Estados_Unidos" title="Presidente kan Estados Unidos – Bikol Central" lang="bcl" hreflang="bcl">Bikol Central</a></li>
+ <li class="interlanguage-link interwiki-bg"><a href="//bg.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%B7%D0%B8%D0%B4%D0%B5%D0%BD%D1%82_%D0%BD%D0%B0_%D0%A1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D1%82%D0%B5_%D0%B0%D0%BC%D0%B5%D1%80%D0%B8%D0%BA%D0%B0%D0%BD%D1%81%D0%BA%D0%B8_%D1%89%D0%B0%D1%82%D0%B8" title="Президент на Съединените американски щати – Bulgarian" lang="bg" hreflang="bg">Български</a></li>
+ <li class="interlanguage-link interwiki-bs"><a href="//bs.wikipedia.org/wiki/Predsjednik_Sjedinjenih_Ameri%C4%8Dkih_Dr%C5%BEava" title="Predsjednik Sjedinjenih Američkih Država – Bosnian" lang="bs" hreflang="bs">Bosanski</a></li>
+ <li class="interlanguage-link interwiki-br"><a href="//br.wikipedia.org/wiki/Prezidant_Stado%C3%B9-Unanet_Amerika" title="Prezidant Stadoù-Unanet Amerika – Breton" lang="br" hreflang="br">Brezhoneg</a></li>
+ <li class="interlanguage-link interwiki-ca"><a href="//ca.wikipedia.org/wiki/President_dels_Estats_Units" title="President dels Estats Units – Catalan" lang="ca" hreflang="ca">Català</a></li>
+ <li class="interlanguage-link interwiki-cs"><a href="//cs.wikipedia.org/wiki/Prezident_Spojen%C3%BDch_st%C3%A1t%C5%AF_americk%C3%BDch" title="Prezident Spojených států amerických – Czech" lang="cs" hreflang="cs">Čeština</a></li>
+ <li class="interlanguage-link interwiki-co"><a href="//co.wikipedia.org/wiki/Presidenti_di_i_Stati_Uniti_d%27America" title="Presidenti di i Stati Uniti d&#039;America – Corsican" lang="co" hreflang="co">Corsu</a></li>
+ <li class="interlanguage-link interwiki-cy"><a href="//cy.wikipedia.org/wiki/Arlywydd_yr_Unol_Daleithiau" title="Arlywydd yr Unol Daleithiau – Welsh" lang="cy" hreflang="cy">Cymraeg</a></li>
+ <li class="interlanguage-link interwiki-da"><a href="//da.wikipedia.org/wiki/Amerikanske_pr%C3%A6sidenter" title="Amerikanske præsidenter – Danish" lang="da" hreflang="da">Dansk</a></li>
+ <li class="interlanguage-link interwiki-de"><a href="//de.wikipedia.org/wiki/Pr%C3%A4sident_der_Vereinigten_Staaten" title="Präsident der Vereinigten Staaten – German" lang="de" hreflang="de">Deutsch</a></li>
+ <li class="interlanguage-link interwiki-dv"><a href="//dv.wikipedia.org/wiki/%DE%87%DE%AC%DE%89%DE%AC%DE%83%DE%A8%DE%86%DE%A7%DE%8E%DE%AC_%DE%83%DE%A6%DE%87%DE%A9%DE%90%DE%B0%DE%86%DE%A6%DE%82%DE%B0_%DE%86%DE%AA%DE%83%DE%A6%DE%87%DE%B0%DE%88%DE%A7%DE%8A%DE%A6%DE%87%DE%A8%DE%88%DE%A7_%DE%84%DE%AD%DE%8A%DE%AA%DE%85%DE%AA%DE%82%DE%B0" title="އެމެރިކާގެ ރައީސްކަން ކުރައްވާފައިވާ ބޭފުޅުން – Divehi" lang="dv" hreflang="dv">ދިވެހިބަސް</a></li>
+ <li class="interlanguage-link interwiki-et"><a href="//et.wikipedia.org/wiki/Ameerika_%C3%9Chendriikide_president" title="Ameerika Ühendriikide president – Estonian" lang="et" hreflang="et">Eesti</a></li>
+ <li class="interlanguage-link interwiki-es badge-Q17437798 badge-goodarticle" title="good article"><a href="//es.wikipedia.org/wiki/Presidente_de_los_Estados_Unidos" title="Presidente de los Estados Unidos – Spanish" lang="es" hreflang="es">Español</a></li>
+ <li class="interlanguage-link interwiki-eo"><a href="//eo.wikipedia.org/wiki/Prezidanto_de_Usono" title="Prezidanto de Usono – Esperanto" lang="eo" hreflang="eo">Esperanto</a></li>
+ <li class="interlanguage-link interwiki-fa"><a href="//fa.wikipedia.org/wiki/%D8%B1%D8%A6%DB%8C%D8%B3%E2%80%8C%D8%AC%D9%85%D9%87%D9%88%D8%B1_%D8%A7%DB%8C%D8%A7%D9%84%D8%A7%D8%AA_%D9%85%D8%AA%D8%AD%D8%AF%D9%87_%D8%A2%D9%85%D8%B1%DB%8C%DA%A9%D8%A7" title="رئیس‌جمهور ایالات متحده آمریکا – Persian" lang="fa" hreflang="fa">فارسی</a></li>
+ <li class="interlanguage-link interwiki-fo"><a href="//fo.wikipedia.org/wiki/Forseti_Sambandsr%C3%ADki_Amerika" title="Forseti Sambandsríki Amerika – Faroese" lang="fo" hreflang="fo">Føroyskt</a></li>
+ <li class="interlanguage-link interwiki-fr"><a href="//fr.wikipedia.org/wiki/Pr%C3%A9sident_des_%C3%89tats-Unis" title="Président des États-Unis – French" lang="fr" hreflang="fr">Français</a></li>
+ <li class="interlanguage-link interwiki-fy"><a href="//fy.wikipedia.org/wiki/Presidint_fan_de_Feriene_Steaten" title="Presidint fan de Feriene Steaten – Western Frisian" lang="fy" hreflang="fy">Frysk</a></li>
+ <li class="interlanguage-link interwiki-ga"><a href="//ga.wikipedia.org/wiki/Uachtar%C3%A1n_na_St%C3%A1t_Aontaithe" title="Uachtarán na Stát Aontaithe – Irish" lang="ga" hreflang="ga">Gaeilge</a></li>
+ <li class="interlanguage-link interwiki-gv"><a href="//gv.wikipedia.org/wiki/Eaghtyrane_ny_Steatyn_Unnaneysit" title="Eaghtyrane ny Steatyn Unnaneysit – Manx" lang="gv" hreflang="gv">Gaelg</a></li>
+ <li class="interlanguage-link interwiki-gd"><a href="//gd.wikipedia.org/wiki/Cinn-suidhe_nan_St%C3%A0itean_Aonaichte" title="Cinn-suidhe nan Stàitean Aonaichte – Scottish Gaelic" lang="gd" hreflang="gd">Gàidhlig</a></li>
+ <li class="interlanguage-link interwiki-gl"><a href="//gl.wikipedia.org/wiki/Presidentes_dos_Estados_Unidos_de_Am%C3%A9rica" title="Presidentes dos Estados Unidos de América – Galician" lang="gl" hreflang="gl">Galego</a></li>
+ <li class="interlanguage-link interwiki-ko"><a href="//ko.wikipedia.org/wiki/%EB%AF%B8%EA%B5%AD%EC%9D%98_%EB%8C%80%ED%86%B5%EB%A0%B9" title="미국의 대통령 – Korean" lang="ko" hreflang="ko">한국어</a></li>
+ <li class="interlanguage-link interwiki-hr"><a href="//hr.wikipedia.org/wiki/Predsjednik_Sjedinjenih_Ameri%C4%8Dkih_Dr%C5%BEava" title="Predsjednik Sjedinjenih Američkih Država – Croatian" lang="hr" hreflang="hr">Hrvatski</a></li>
+ <li class="interlanguage-link interwiki-ilo"><a href="//ilo.wikipedia.org/wiki/Presidente_iti_Estados_Unidos" title="Presidente iti Estados Unidos – Iloko" lang="ilo" hreflang="ilo">Ilokano</a></li>
+ <li class="interlanguage-link interwiki-id"><a href="//id.wikipedia.org/wiki/Daftar_Presiden_Amerika_Serikat" title="Daftar Presiden Amerika Serikat – Indonesian" lang="id" hreflang="id">Bahasa Indonesia</a></li>
+ <li class="interlanguage-link interwiki-is"><a href="//is.wikipedia.org/wiki/Forseti_Bandar%C3%ADkjanna" title="Forseti Bandaríkjanna – Icelandic" lang="is" hreflang="is">Íslenska</a></li>
+ <li class="interlanguage-link interwiki-it"><a href="//it.wikipedia.org/wiki/Presidente_degli_Stati_Uniti_d%27America" title="Presidente degli Stati Uniti d&#039;America – Italian" lang="it" hreflang="it">Italiano</a></li>
+ <li class="interlanguage-link interwiki-he"><a href="//he.wikipedia.org/wiki/%D7%A0%D7%A9%D7%99%D7%90_%D7%90%D7%A8%D7%A6%D7%95%D7%AA_%D7%94%D7%91%D7%A8%D7%99%D7%AA" title="נשיא ארצות הברית – Hebrew" lang="he" hreflang="he">עברית</a></li>
+ <li class="interlanguage-link interwiki-kn"><a href="//kn.wikipedia.org/wiki/%E0%B2%85%E0%B2%AE%E0%B3%87%E0%B2%B0%E0%B2%BF%E0%B2%95_%E0%B2%B8%E0%B2%82%E0%B2%AF%E0%B3%81%E0%B2%95%E0%B3%8D%E0%B2%A4_%E0%B2%B8%E0%B2%82%E0%B2%B8%E0%B3%8D%E0%B2%A5%E0%B2%BE%E0%B2%A8%E0%B2%A6_%E0%B2%B0%E0%B2%BE%E0%B2%B7%E0%B3%8D%E0%B2%9F%E0%B3%8D%E0%B2%B0%E0%B2%AA%E0%B2%A4%E0%B2%BF" title="ಅಮೇರಿಕ ಸಂಯುಕ್ತ ಸಂಸ್ಥಾನದ ರಾಷ್ಟ್ರಪತಿ – Kannada" lang="kn" hreflang="kn">ಕನ್ನಡ</a></li>
+ <li class="interlanguage-link interwiki-ka"><a href="//ka.wikipedia.org/wiki/%E1%83%90%E1%83%A8%E1%83%A8-%E1%83%98%E1%83%A1_%E1%83%9E%E1%83%A0%E1%83%94%E1%83%96%E1%83%98%E1%83%93%E1%83%94%E1%83%9C%E1%83%A2%E1%83%98" title="აშშ-ის პრეზიდენტი – Georgian" lang="ka" hreflang="ka">ქართული</a></li>
+ <li class="interlanguage-link interwiki-kk"><a href="//kk.wikipedia.org/wiki/%D0%90%D2%9A%D0%A8_%D0%BF%D1%80%D0%B5%D0%B7%D0%B8%D0%B4%D0%B5%D0%BD%D1%82%D1%96" title="АҚШ президенті – Kazakh" lang="kk" hreflang="kk">Қазақша</a></li>
+ <li class="interlanguage-link interwiki-sw"><a href="//sw.wikipedia.org/wiki/Rais_wa_Marekani" title="Rais wa Marekani – Swahili" lang="sw" hreflang="sw">Kiswahili</a></li>
+ <li class="interlanguage-link interwiki-lv badge-Q17437796 badge-featuredarticle" title="featured article"><a href="//lv.wikipedia.org/wiki/ASV_prezidents" title="ASV prezidents – Latvian" lang="lv" hreflang="lv">Latviešu</a></li>
+ <li class="interlanguage-link interwiki-lt"><a href="//lt.wikipedia.org/wiki/Jungtini%C5%B3_Amerikos_Valstij%C5%B3_prezidentas" title="Jungtinių Amerikos Valstijų prezidentas – Lithuanian" lang="lt" hreflang="lt">Lietuvių</a></li>
+ <li class="interlanguage-link interwiki-hu"><a href="//hu.wikipedia.org/wiki/Az_Amerikai_Egyes%C3%BClt_%C3%81llamok_eln%C3%B6ke" title="Az Amerikai Egyesült Államok elnöke – Hungarian" lang="hu" hreflang="hu">Magyar</a></li>
+ <li class="interlanguage-link interwiki-ml"><a href="//ml.wikipedia.org/wiki/%E0%B4%85%E0%B4%AE%E0%B5%87%E0%B4%B0%E0%B4%BF%E0%B4%95%E0%B5%8D%E0%B4%95%E0%B5%BB_%E0%B4%90%E0%B4%95%E0%B5%8D%E0%B4%AF%E0%B4%A8%E0%B4%BE%E0%B4%9F%E0%B5%81%E0%B4%95%E0%B4%B3%E0%B5%81%E0%B4%9F%E0%B5%86_%E0%B4%AA%E0%B5%8D%E0%B4%B0%E0%B4%B8%E0%B4%BF%E0%B4%A1%E0%B4%A3%E0%B5%8D%E0%B4%9F%E0%B5%81%E0%B4%AE%E0%B4%BE%E0%B4%B0%E0%B5%81%E0%B4%9F%E0%B5%86_%E0%B4%AA%E0%B4%9F%E0%B5%8D%E0%B4%9F%E0%B4%BF%E0%B4%95" title="അമേരിക്കൻ ഐക്യനാടുകളുടെ പ്രസിഡണ്ടുമാരുടെ പട്ടിക – Malayalam" lang="ml" hreflang="ml">മലയാളം</a></li>
+ <li class="interlanguage-link interwiki-mr"><a href="//mr.wikipedia.org/wiki/%E0%A4%85%E0%A4%AE%E0%A5%87%E0%A4%B0%E0%A4%BF%E0%A4%95%E0%A5%87%E0%A4%9A%E0%A5%87_%E0%A4%B0%E0%A4%BE%E0%A4%B7%E0%A5%8D%E0%A4%9F%E0%A5%8D%E0%A4%B0%E0%A4%BE%E0%A4%A7%E0%A5%8D%E0%A4%AF%E0%A4%95%E0%A5%8D%E0%A4%B7" title="अमेरिकेचे राष्ट्राध्यक्ष – Marathi" lang="mr" hreflang="mr">मराठी</a></li>
+ <li class="interlanguage-link interwiki-xmf"><a href="//xmf.wikipedia.org/wiki/%E1%83%90%E1%83%90%E1%83%A8-%E1%83%98%E1%83%A8_%E1%83%9E%E1%83%A0%E1%83%94%E1%83%96%E1%83%98%E1%83%93%E1%83%94%E1%83%9C%E1%83%A2%E1%83%98" title="ააშ-იშ პრეზიდენტი – Mingrelian" lang="xmf" hreflang="xmf">მარგალური</a></li>
+ <li class="interlanguage-link interwiki-ms"><a href="//ms.wikipedia.org/wiki/Presiden_Amerika_Syarikat" title="Presiden Amerika Syarikat – Malay" lang="ms" hreflang="ms">Bahasa Melayu</a></li>
+ <li class="interlanguage-link interwiki-nl"><a href="//nl.wikipedia.org/wiki/President_van_de_Verenigde_Staten" title="President van de Verenigde Staten – Dutch" lang="nl" hreflang="nl">Nederlands</a></li>
+ <li class="interlanguage-link interwiki-ja"><a href="//ja.wikipedia.org/wiki/%E3%82%A2%E3%83%A1%E3%83%AA%E3%82%AB%E5%90%88%E8%A1%86%E5%9B%BD%E5%A4%A7%E7%B5%B1%E9%A0%98" title="アメリカ合衆国大統領 – Japanese" lang="ja" hreflang="ja">日本語</a></li>
+ <li class="interlanguage-link interwiki-no"><a href="//no.wikipedia.org/wiki/USAs_president" title="USAs president – Norwegian (bokmål)" lang="no" hreflang="no">Norsk bokmål</a></li>
+ <li class="interlanguage-link interwiki-nn"><a href="//nn.wikipedia.org/wiki/President_i_USA" title="President i USA – Norwegian Nynorsk" lang="nn" hreflang="nn">Norsk nynorsk</a></li>
+ <li class="interlanguage-link interwiki-nrm"><a href="//nrm.wikipedia.org/wiki/Pr%C3%A9sident_d%27s_%C3%8Atats_Unnis" title="Président d&#039;s Êtats Unnis – Nouormand" lang="nrm" hreflang="nrm">Nouormand</a></li>
+ <li class="interlanguage-link interwiki-oc"><a href="//oc.wikipedia.org/wiki/President_dels_Estats_Units_d%27America" title="President dels Estats Units d&#039;America – Occitan" lang="oc" hreflang="oc">Occitan</a></li>
+ <li class="interlanguage-link interwiki-uz"><a href="//uz.wikipedia.org/wiki/AQSh_Prezidenti" title="AQSh Prezidenti – Uzbek" lang="uz" hreflang="uz">Oʻzbekcha</a></li>
+ <li class="interlanguage-link interwiki-pl"><a href="//pl.wikipedia.org/wiki/Prezydent_Stan%C3%B3w_Zjednoczonych" title="Prezydent Stanów Zjednoczonych – Polish" lang="pl" hreflang="pl">Polski</a></li>
+ <li class="interlanguage-link interwiki-pt"><a href="//pt.wikipedia.org/wiki/Presidente_dos_Estados_Unidos" title="Presidente dos Estados Unidos – Portuguese" lang="pt" hreflang="pt">Português</a></li>
+ <li class="interlanguage-link interwiki-ro"><a href="//ro.wikipedia.org/wiki/Pre%C8%99edinte_al_Statelor_Unite_ale_Americii" title="Președinte al Statelor Unite ale Americii – Romanian" lang="ro" hreflang="ro">Română</a></li>
+ <li class="interlanguage-link interwiki-ru"><a href="//ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%B7%D0%B8%D0%B4%D0%B5%D0%BD%D1%82_%D0%A1%D0%A8%D0%90" title="Президент США – Russian" lang="ru" hreflang="ru">Русский</a></li>
+ <li class="interlanguage-link interwiki-sco"><a href="//sco.wikipedia.org/wiki/Preses_o_the_Unitit_States" title="Preses o the Unitit States – Scots" lang="sco" hreflang="sco">Scots</a></li>
+ <li class="interlanguage-link interwiki-sq"><a href="//sq.wikipedia.org/wiki/Kryetari_i_Shteteve_t%C3%AB_Bashkuara" title="Kryetari i Shteteve të Bashkuara – Albanian" lang="sq" hreflang="sq">Shqip</a></li>
+ <li class="interlanguage-link interwiki-scn"><a href="//scn.wikipedia.org/wiki/Prisidenti_d%C3%AE_Stati_Uniti" title="Prisidenti dî Stati Uniti – Sicilian" lang="scn" hreflang="scn">Sicilianu</a></li>
+ <li class="interlanguage-link interwiki-simple"><a href="//simple.wikipedia.org/wiki/President_of_the_United_States" title="President of the United States – Simple English" lang="simple" hreflang="simple">Simple English</a></li>
+ <li class="interlanguage-link interwiki-sk"><a href="//sk.wikipedia.org/wiki/Prezident_Spojen%C3%BDch_%C5%A1t%C3%A1tov" title="Prezident Spojených štátov – Slovak" lang="sk" hreflang="sk">Slovenčina</a></li>
+ <li class="interlanguage-link interwiki-sl"><a href="//sl.wikipedia.org/wiki/Predsednik_Zdru%C5%BEenih_dr%C5%BEav_Amerike" title="Predsednik Združenih držav Amerike – Slovenian" lang="sl" hreflang="sl">Slovenščina</a></li>
+ <li class="interlanguage-link interwiki-sr"><a href="//sr.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D0%B5%D0%B4%D0%BD%D0%B8%D0%BA_%D0%A1%D1%98%D0%B5%D0%B4%D0%B8%D1%9A%D0%B5%D0%BD%D0%B8%D1%85_%D0%90%D0%BC%D0%B5%D1%80%D0%B8%D1%87%D0%BA%D0%B8%D1%85_%D0%94%D1%80%D0%B6%D0%B0%D0%B2%D0%B0" title="Председник Сједињених Америчких Држава – Serbian" lang="sr" hreflang="sr">Српски / srpski</a></li>
+ <li class="interlanguage-link interwiki-sh"><a href="//sh.wikipedia.org/wiki/Predsjednik_Sjedinjenih_Ameri%C4%8Dkih_Dr%C5%BEava" title="Predsjednik Sjedinjenih Američkih Država – Serbo-Croatian" lang="sh" hreflang="sh">Srpskohrvatski / српскохрватски</a></li>
+ <li class="interlanguage-link interwiki-fi"><a href="//fi.wikipedia.org/wiki/Yhdysvaltain_presidentti" title="Yhdysvaltain presidentti – Finnish" lang="fi" hreflang="fi">Suomi</a></li>
+ <li class="interlanguage-link interwiki-sv"><a href="//sv.wikipedia.org/wiki/USA:s_president" title="USA:s president – Swedish" lang="sv" hreflang="sv">Svenska</a></li>
+ <li class="interlanguage-link interwiki-tl"><a href="//tl.wikipedia.org/wiki/Pangulo_ng_Estados_Unidos" title="Pangulo ng Estados Unidos – Tagalog" lang="tl" hreflang="tl">Tagalog</a></li>
+ <li class="interlanguage-link interwiki-tt"><a href="//tt.wikipedia.org/wiki/%D0%90%D0%9A%D0%A8_%D0%BF%D1%80%D0%B5%D0%B7%D0%B8%D0%B4%D0%B5%D0%BD%D1%82%D1%8B" title="АКШ президенты – Tatar" lang="tt" hreflang="tt">Татарча/tatarça</a></li>
+ <li class="interlanguage-link interwiki-th"><a href="//th.wikipedia.org/wiki/%E0%B8%9B%E0%B8%A3%E0%B8%B0%E0%B8%98%E0%B8%B2%E0%B8%99%E0%B8%B2%E0%B8%98%E0%B8%B4%E0%B8%9A%E0%B8%94%E0%B8%B5%E0%B8%AA%E0%B8%AB%E0%B8%A3%E0%B8%B1%E0%B8%90%E0%B8%AD%E0%B9%80%E0%B8%A1%E0%B8%A3%E0%B8%B4%E0%B8%81%E0%B8%B2" title="ประธานาธิบดีสหรัฐอเมริกา – Thai" lang="th" hreflang="th">ไทย</a></li>
+ <li class="interlanguage-link interwiki-tr"><a href="//tr.wikipedia.org/wiki/Amerika_Birle%C5%9Fik_Devletleri_Ba%C5%9Fkan%C4%B1" title="Amerika Birleşik Devletleri Başkanı – Turkish" lang="tr" hreflang="tr">Türkçe</a></li>
+ <li class="interlanguage-link interwiki-uk"><a href="//uk.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%B7%D0%B8%D0%B4%D0%B5%D0%BD%D1%82_%D0%A1%D0%A8%D0%90" title="Президент США – Ukrainian" lang="uk" hreflang="uk">Українська</a></li>
+ <li class="interlanguage-link interwiki-ur"><a href="//ur.wikipedia.org/wiki/%D8%B5%D8%AF%D8%B1_%D8%B1%DB%8C%D8%A7%D8%B3%D8%AA%DB%81%D8%A7%D8%A6%DB%92_%D9%85%D8%AA%D8%AD%D8%AF%DB%81_%D8%A7%D9%85%D8%B1%DB%8C%DA%A9%DB%81" title="صدر ریاستہائے متحدہ امریکہ – Urdu" lang="ur" hreflang="ur">اردو</a></li>
+ <li class="interlanguage-link interwiki-vi"><a href="//vi.wikipedia.org/wiki/T%E1%BB%95ng_th%E1%BB%91ng_Hoa_K%E1%BB%B3" title="Tổng thống Hoa Kỳ – Vietnamese" lang="vi" hreflang="vi">Tiếng Việt</a></li>
+ <li class="interlanguage-link interwiki-zh-classical badge-Q17437798 badge-goodarticle" title="good article"><a href="//zh-classical.wikipedia.org/wiki/%E7%BE%8E%E5%9C%8B%E7%B8%BD%E7%B5%B1" title="美國總統 – Classical Chinese" lang="zh-classical" hreflang="zh-classical">文言</a></li>
+ <li class="interlanguage-link interwiki-war"><a href="//war.wikipedia.org/wiki/Mangulo_han_Estados_Unidos" title="Mangulo han Estados Unidos – Waray" lang="war" hreflang="war">Winaray</a></li>
+ <li class="interlanguage-link interwiki-yi"><a href="//yi.wikipedia.org/wiki/%D7%A4%D7%A8%D7%A2%D7%96%D7%99%D7%93%D7%A2%D7%A0%D7%98_%D7%A4%D7%95%D7%9F_%D7%93%D7%99_%D7%A4%D7%90%D7%A8%D7%90%D7%99%D7%99%D7%A0%D7%99%D7%92%D7%98%D7%A2_%D7%A9%D7%98%D7%90%D7%98%D7%9F" title="פרעזידענט פון די פאראייניגטע שטאטן – Yiddish" lang="yi" hreflang="yi">ייִדיש</a></li>
+ <li class="interlanguage-link interwiki-yo"><a href="//yo.wikipedia.org/wiki/%C3%80%C3%A0r%E1%BA%B9_il%E1%BA%B9%CC%80_Or%C3%ADl%E1%BA%B9%CC%80-%C3%A8d%C3%A8_Am%E1%BA%B9%CC%81r%C3%ADk%C3%A0" title="Ààrẹ ilẹ̀ Orílẹ̀-èdè Amẹ́ríkà – Yoruba" lang="yo" hreflang="yo">Yorùbá</a></li>
+ <li class="interlanguage-link interwiki-zh-yue"><a href="//zh-yue.wikipedia.org/wiki/%E7%BE%8E%E5%9C%8B%E7%B8%BD%E7%B5%B1" title="美國總統 – Cantonese" lang="zh-yue" hreflang="zh-yue">粵語</a></li>
+ <li class="interlanguage-link interwiki-zh"><a href="//zh.wikipedia.org/wiki/%E7%BE%8E%E5%9B%BD%E6%80%BB%E7%BB%9F" title="美国总统 – Chinese" lang="zh" hreflang="zh">中文</a></li>
+ <li class="uls-p-lang-dummy"><a href="#"></a></li>
+ </ul>
+ <div class='after-portlet after-portlet-lang'><span class="wb-langlinks-edit wb-langlinks-link"><a action="edit" href="//www.wikidata.org/wiki/Q11696#sitelinks-wikipedia" text="Edit links" title="Edit interlanguage links" class="wbc-editpage">Edit links</a></span></div> </div>
+ </div>
+ </div>
+ </div>
+ <div id="footer" role="contentinfo">
+ <ul id="footer-info">
+ <li id="footer-info-lastmod"> This page was last modified on 21 November 2014 at 00:34.<br /></li>
+ <li id="footer-info-copyright">Text is available under the <a rel="license" href="//en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License">Creative Commons Attribution-ShareAlike License</a><a rel="license" href="//creativecommons.org/licenses/by-sa/3.0/" style="display:none;"></a>;
+additional terms may apply. By using this site, you agree to the <a href="//wikimediafoundation.org/wiki/Terms_of_Use">Terms of Use</a> and <a href="//wikimediafoundation.org/wiki/Privacy_policy">Privacy Policy</a>. Wikipedia® is a registered trademark of the <a href="//www.wikimediafoundation.org/">Wikimedia Foundation, Inc.</a>, a non-profit organization.</li>
+ </ul>
+ <ul id="footer-places">
+ <li id="footer-places-privacy"><a href="//wikimediafoundation.org/wiki/Privacy_policy" title="wikimedia:Privacy policy">Privacy policy</a></li>
+ <li id="footer-places-about"><a href="/wiki/Wikipedia:About" title="Wikipedia:About">About Wikipedia</a></li>
+ <li id="footer-places-disclaimer"><a href="/wiki/Wikipedia:General_disclaimer" title="Wikipedia:General disclaimer">Disclaimers</a></li>
+ <li id="footer-places-contact"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us">Contact Wikipedia</a></li>
+ <li id="footer-places-developers"><a href="https://www.mediawiki.org/wiki/Special:MyLanguage/How_to_contribute">Developers</a></li>
+ <li id="footer-places-mobileview"><a href="//en.m.wikipedia.org/w/index.php?title=President_of_the_United_States&amp;mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile view</a></li>
+ </ul>
+ <ul id="footer-icons" class="noprint">
+ <li id="footer-copyrightico">
+ <a href="//wikimediafoundation.org/"><img src="//bits.wikimedia.org/images/wikimedia-button.png" srcset="//bits.wikimedia.org/images/wikimedia-button-1.5x.png 1.5x, //bits.wikimedia.org/images/wikimedia-button-2x.png 2x" width="88" height="31" alt="Wikimedia Foundation"/></a>
+ </li>
+ <li id="footer-poweredbyico">
+ <a href="//www.mediawiki.org/"><img src="//bits.wikimedia.org/static-1.25wmf8/resources/assets/poweredby_mediawiki_88x31.png" alt="Powered by MediaWiki" width="88" height="31" /></a>
+ </li>
+ </ul>
+ <div style="clear:both"></div>
+ </div>
+ <script>/*<![CDATA[*/window.jQuery && jQuery.ready();/*]]>*/</script><script>if(window.mw){
+mw.loader.state({"ext.globalCssJs.site":"ready","ext.globalCssJs.user":"ready","mw.PopUpMediaTransform":"loading","site":"loading","user":"ready","user.groups":"ready"});
+}</script>
+<script>if(window.mw){
+document.write("\u003Cscript src=\"//bits.wikimedia.org/en.wikipedia.org/load.php?debug=false\u0026amp;lang=en\u0026amp;modules=mw.PopUpMediaTransform\u0026amp;only=scripts\u0026amp;skin=vector\u0026amp;*\"\u003E\u003C/script\u003E");
+}</script>
+<script>if(window.mw){
+mw.loader.load(["ext.cite","mediawiki.toc","ext.categoryTree","mediawiki.action.view.postEdit","mediawiki.user","mediawiki.hidpi","mediawiki.page.ready","mediawiki.searchSuggest","ext.gadget.teahouse","ext.gadget.ReferenceTooltips","ext.gadget.DRN-wizard","ext.gadget.charinsert","ext.gadget.refToolbar","ext.gadget.featured-articles-links","mmv.bootstrap.autostart","ext.eventLogging.subscriber","ext.navigationTiming","schema.UniversalLanguageSelector","ext.uls.eventlogger","ext.uls.interlanguage"],null,true);
+}</script>
+<script>if(window.mw){
+document.write("\u003Cscript src=\"//bits.wikimedia.org/en.wikipedia.org/load.php?debug=false\u0026amp;lang=en\u0026amp;modules=site\u0026amp;only=scripts\u0026amp;skin=vector\u0026amp;*\"\u003E\u003C/script\u003E");
+}</script>
+<script>if(window.mw){
+mw.config.set({"wgBackendResponseTime":296,"wgHostname":"mw1047"});
+}</script>
+ </body>
+</html>
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/svg_test.go b/vendor/github.com/tdewolff/minify/benchmarks/svg_test.go
new file mode 100644
index 0000000..72bff97
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/svg_test.go
@@ -0,0 +1,33 @@
+package benchmarks
+
+import (
+ "testing"
+
+ "github.com/tdewolff/minify/svg"
+)
+
+var svgSamples = []string{
+ "sample_arctic.svg",
+ "sample_gopher.svg",
+ "sample_usa.svg",
+}
+
+func init() {
+ for _, sample := range svgSamples {
+ load(sample)
+ }
+}
+
+func BenchmarkSVG(b *testing.B) {
+ for _, sample := range svgSamples {
+ b.Run(sample, func(b *testing.B) {
+ b.SetBytes(int64(r[sample].Len()))
+
+ for i := 0; i < b.N; i++ {
+ r[sample].Reset()
+ w[sample].Reset()
+ svg.Minify(m, w[sample], r[sample], nil)
+ }
+ })
+ }
+}
diff --git a/vendor/github.com/tdewolff/minify/benchmarks/xml_test.go b/vendor/github.com/tdewolff/minify/benchmarks/xml_test.go
new file mode 100644
index 0000000..2b5d00c
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/benchmarks/xml_test.go
@@ -0,0 +1,33 @@
+package benchmarks
+
+import (
+ "testing"
+
+ "github.com/tdewolff/minify/xml"
+)
+
+var xmlSamples = []string{
+ "sample_books.xml",
+ "sample_catalog.xml",
+ "sample_omg.xml",
+}
+
+func init() {
+ for _, sample := range xmlSamples {
+ load(sample)
+ }
+}
+
+func BenchmarkXML(b *testing.B) {
+ for _, sample := range xmlSamples {
+ b.Run(sample, func(b *testing.B) {
+ b.SetBytes(int64(r[sample].Len()))
+
+ for i := 0; i < b.N; i++ {
+ r[sample].Reset()
+ w[sample].Reset()
+ xml.Minify(m, w[sample], r[sample], nil)
+ }
+ })
+ }
+}
diff --git a/vendor/github.com/tdewolff/minify/cmd/minify/README.md b/vendor/github.com/tdewolff/minify/cmd/minify/README.md
new file mode 100644
index 0000000..662ca2d
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/cmd/minify/README.md
@@ -0,0 +1,149 @@
+# Minify [![Join the chat at https://gitter.im/tdewolff/minify](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/tdewolff/minify?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+
+**[Download binaries](https://github.com/tdewolff/minify/releases) for Windows, Linux and macOS**
+
+Minify is a CLI implementation of the minify [library package](https://github.com/tdewolff/minify).
+
+## Installation
+Make sure you have [Go](http://golang.org/) and [Git](http://git-scm.com/) installed.
+
+Run the following command
+
+ go get github.com/tdewolff/minify/cmd/minify
+
+and the `minify` command will be in your `$GOPATH/bin`.
+
+## Usage
+
+ Usage: minify [options] [input]
+
+ Options:
+ -a, --all
+ Minify all files, including hidden files and files in hidden directories
+ -l, --list
+ List all accepted filetypes
+ --match string
+ Filename pattern matching using regular expressions, see https://github.com/google/re2/wiki/Syntax
+ --mime string
+ Mimetype (text/css, application/javascript, ...), optional for input filenames, has precedence over -type
+ -o, --output string
+ Output file or directory (must have trailing slash), leave blank to use stdout
+ -r, --recursive
+ Recursively minify directories
+ --type string
+ Filetype (css, html, js, ...), optional for input filenames
+ -u, --update
+ Update binary
+ --url string
+ URL of file to enable URL minification
+ -v, --verbose
+ Verbose
+ -w, --watch
+ Watch files and minify upon changes
+
+ --css-decimals
+ Number of decimals to preserve in numbers, -1 is all
+ --html-keep-conditional-comments
+ Preserve all IE conditional comments
+ --html-keep-default-attrvals
+ Preserve default attribute values
+ --html-keep-document-tags
+ Preserve html, head and body tags
+ --html-keep-end-tags
+ Preserve all end tags
+ --html-keep-whitespace
+ Preserve whitespace characters but still collapse multiple into one
+ --svg-decimals
+ Number of decimals to preserve in numbers, -1 is all
+ --xml-keep-whitespace
+ Preserve whitespace characters but still collapse multiple into one
+
+ Input:
+ Files or directories, leave blank to use stdin
+
+### Types
+
+ css text/css
+ htm text/html
+ html text/html
+ js text/javascript
+ json application/json
+ svg image/svg+xml
+ xml text/xml
+
+## Examples
+Minify **index.html** to **index-min.html**:
+```sh
+$ minify -o index-min.html index.html
+```
+
+Minify **index.html** to standard output (leave `-o` blank):
+```sh
+$ minify index.html
+```
+
+Normally the mimetype is inferred from the extension, to set the mimetype explicitly:
+```sh
+$ minify --type=html -o index-min.tpl index.tpl
+```
+
+You need to set the type or the mimetype option when using standard input:
+```sh
+$ minify --mime=text/javascript < script.js > script-min.js
+
+$ cat script.js | minify --type=js > script-min.js
+```
+
+### Directories
+You can also give directories as input, and these directories can be minified recursively.
+
+Minify files in the current working directory to **out/** (no subdirectories):
+```sh
+$ minify -o out/ .
+```
+
+Minify files recursively in **src/**:
+```sh
+$ minify -r -o out/ src
+```
+
+Minify only javascript files in **src/**:
+```sh
+$ minify -r -o out/ --match=\.js src
+```
+
+### Concatenate
+When multiple inputs are given and either standard output or a single output file, it will concatenate the files together.
+
+Concatenate **one.css** and **two.css** into **style.css**:
+```sh
+$ minify -o style.css one.css two.css
+```
+
+Concatenate all files in **styles/** into **style.css**:
+```sh
+$ minify -o style.css styles
+```
+
+You can also use `cat` as standard input to concatenate files and use gzip for example:
+```sh
+$ cat one.css two.css three.css | minify --type=css | gzip -9 -c > style.css.gz
+```
+
+### Watching
+To watch file changes and automatically re-minify you can use the `-w` or `--watch` option.
+
+Minify **style.css** to itself and watch changes:
+```sh
+$ minify -w -o style.css style.css
+```
+
+Minify and concatenate **one.css** and **two.css** to **style.css** and watch changes:
+```sh
+$ minify -w -o style.css one.css two.css
+```
+
+Minify files in **src/** and subdirectories to **out/** and watch changes:
+```sh
+$ minify -w -r -o out/ src
+```
diff --git a/vendor/github.com/tdewolff/minify/cmd/minify/main.go b/vendor/github.com/tdewolff/minify/cmd/minify/main.go
new file mode 100644
index 0000000..62263ba
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/cmd/minify/main.go
@@ -0,0 +1,648 @@
+package main
+
+import (
+ "bufio"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "log"
+ "net/url"
+ "os"
+ "os/signal"
+ "path"
+ "path/filepath"
+ "regexp"
+ "runtime"
+ "sort"
+ "strings"
+ "sync/atomic"
+ "time"
+
+ humanize "github.com/dustin/go-humanize"
+ "github.com/matryer/try"
+ flag "github.com/spf13/pflag"
+ min "github.com/tdewolff/minify"
+ "github.com/tdewolff/minify/css"
+ "github.com/tdewolff/minify/html"
+ "github.com/tdewolff/minify/js"
+ "github.com/tdewolff/minify/json"
+ "github.com/tdewolff/minify/svg"
+ "github.com/tdewolff/minify/xml"
+)
+
+var Version = "master"
+var Commit = ""
+var Date = ""
+
+var filetypeMime = map[string]string{
+ "css": "text/css",
+ "htm": "text/html",
+ "html": "text/html",
+ "js": "text/javascript",
+ "json": "application/json",
+ "svg": "image/svg+xml",
+ "xml": "text/xml",
+}
+
+var (
+ hidden bool
+ list bool
+ m *min.M
+ pattern *regexp.Regexp
+ recursive bool
+ verbose bool
+ version bool
+ watch bool
+)
+
+type task struct {
+ srcs []string
+ srcDir string
+ dst string
+}
+
+var (
+ Error *log.Logger
+ Info *log.Logger
+)
+
+func main() {
+ output := ""
+ mimetype := ""
+ filetype := ""
+ match := ""
+ siteurl := ""
+
+ cssMinifier := &css.Minifier{}
+ htmlMinifier := &html.Minifier{}
+ jsMinifier := &js.Minifier{}
+ jsonMinifier := &json.Minifier{}
+ svgMinifier := &svg.Minifier{}
+ xmlMinifier := &xml.Minifier{}
+
+ flag.Usage = func() {
+ fmt.Fprintf(os.Stderr, "Usage: %s [options] [input]\n\nOptions:\n", os.Args[0])
+ flag.PrintDefaults()
+ fmt.Fprintf(os.Stderr, "\nInput:\n Files or directories, leave blank to use stdin\n")
+ }
+ flag.StringVarP(&output, "output", "o", "", "Output file or directory (must have trailing slash), leave blank to use stdout")
+ flag.StringVar(&mimetype, "mime", "", "Mimetype (text/css, application/javascript, ...), optional for input filenames, has precedence over -type")
+ flag.StringVar(&filetype, "type", "", "Filetype (css, html, js, ...), optional for input filenames")
+ flag.StringVar(&match, "match", "", "Filename pattern matching using regular expressions, see https://github.com/google/re2/wiki/Syntax")
+ flag.BoolVarP(&recursive, "recursive", "r", false, "Recursively minify directories")
+ flag.BoolVarP(&hidden, "all", "a", false, "Minify all files, including hidden files and files in hidden directories")
+ flag.BoolVarP(&list, "list", "l", false, "List all accepted filetypes")
+ flag.BoolVarP(&verbose, "verbose", "v", false, "Verbose")
+ flag.BoolVarP(&watch, "watch", "w", false, "Watch files and minify upon changes")
+ flag.BoolVarP(&version, "version", "", false, "Version")
+
+ flag.StringVar(&siteurl, "url", "", "URL of file to enable URL minification")
+ flag.IntVar(&cssMinifier.Decimals, "css-decimals", -1, "Number of decimals to preserve in numbers, -1 is all")
+ flag.BoolVar(&htmlMinifier.KeepConditionalComments, "html-keep-conditional-comments", false, "Preserve all IE conditional comments")
+ flag.BoolVar(&htmlMinifier.KeepDefaultAttrVals, "html-keep-default-attrvals", false, "Preserve default attribute values")
+ flag.BoolVar(&htmlMinifier.KeepDocumentTags, "html-keep-document-tags", false, "Preserve html, head and body tags")
+ flag.BoolVar(&htmlMinifier.KeepEndTags, "html-keep-end-tags", false, "Preserve all end tags")
+ flag.BoolVar(&htmlMinifier.KeepWhitespace, "html-keep-whitespace", false, "Preserve whitespace characters but still collapse multiple into one")
+ flag.IntVar(&svgMinifier.Decimals, "svg-decimals", -1, "Number of decimals to preserve in numbers, -1 is all")
+ flag.BoolVar(&xmlMinifier.KeepWhitespace, "xml-keep-whitespace", false, "Preserve whitespace characters but still collapse multiple into one")
+ flag.Parse()
+ rawInputs := flag.Args()
+
+ Error = log.New(os.Stderr, "ERROR: ", 0)
+ if verbose {
+ Info = log.New(os.Stderr, "INFO: ", 0)
+ } else {
+ Info = log.New(ioutil.Discard, "INFO: ", 0)
+ }
+
+ if version {
+ if Version == "devel" {
+ fmt.Printf("minify version devel+%.7s %s\n", Commit, Date)
+ } else {
+ fmt.Printf("minify version %s\n", Version)
+ }
+ return
+ }
+
+ if list {
+ var keys []string
+ for k := range filetypeMime {
+ keys = append(keys, k)
+ }
+ sort.Strings(keys)
+ for _, k := range keys {
+ fmt.Println(k + "\t" + filetypeMime[k])
+ }
+ return
+ }
+
+ useStdin := len(rawInputs) == 0
+ mimetype = getMimetype(mimetype, filetype, useStdin)
+
+ var err error
+ if match != "" {
+ pattern, err = regexp.Compile(match)
+ if err != nil {
+ Error.Fatalln(err)
+ }
+ }
+
+ if watch && (useStdin || output == "") {
+ Error.Fatalln("watch doesn't work with stdin or stdout")
+ }
+
+ ////////////////
+
+ dirDst := false
+ if output != "" {
+ output = sanitizePath(output)
+ if output[len(output)-1] == '/' {
+ dirDst = true
+ if err := os.MkdirAll(output, 0777); err != nil {
+ Error.Fatalln(err)
+ }
+ }
+ }
+
+ tasks, ok := expandInputs(rawInputs, dirDst)
+ if !ok {
+ os.Exit(1)
+ }
+
+ if ok = expandOutputs(output, &tasks); !ok {
+ os.Exit(1)
+ }
+
+ if len(tasks) == 0 {
+ tasks = append(tasks, task{[]string{""}, "", output}) // stdin
+ }
+
+ m = min.New()
+ m.Add("text/css", cssMinifier)
+ m.Add("text/html", htmlMinifier)
+ m.Add("text/javascript", jsMinifier)
+ m.Add("image/svg+xml", svgMinifier)
+ m.AddRegexp(regexp.MustCompile("[/+]json$"), jsonMinifier)
+ m.AddRegexp(regexp.MustCompile("[/+]xml$"), xmlMinifier)
+
+ if m.URL, err = url.Parse(siteurl); err != nil {
+ Error.Fatalln(err)
+ }
+
+ start := time.Now()
+
+ var fails int32
+ if verbose || len(tasks) == 1 {
+ for _, t := range tasks {
+ if ok := minify(mimetype, t); !ok {
+ fails++
+ }
+ }
+ } else {
+ numWorkers := 4
+ if n := runtime.NumCPU(); n > numWorkers {
+ numWorkers = n
+ }
+
+ sem := make(chan struct{}, numWorkers)
+ for _, t := range tasks {
+ sem <- struct{}{}
+ go func(t task) {
+ defer func() {
+ <-sem
+ }()
+ if ok := minify(mimetype, t); !ok {
+ atomic.AddInt32(&fails, 1)
+ }
+ }(t)
+ }
+
+ // wait for all jobs to be done
+ for i := 0; i < cap(sem); i++ {
+ sem <- struct{}{}
+ }
+ }
+
+ if watch {
+ var watcher *RecursiveWatcher
+ watcher, err = NewRecursiveWatcher(recursive)
+ if err != nil {
+ Error.Fatalln(err)
+ }
+ defer watcher.Close()
+
+ var watcherTasks = make(map[string]task, len(rawInputs))
+ for _, task := range tasks {
+ for _, src := range task.srcs {
+ watcherTasks[src] = task
+ watcher.AddPath(src)
+ }
+ }
+
+ c := make(chan os.Signal, 1)
+ signal.Notify(c, os.Interrupt)
+
+ skip := make(map[string]int)
+ changes := watcher.Run()
+ for changes != nil {
+ select {
+ case <-c:
+ watcher.Close()
+ case file, ok := <-changes:
+ if !ok {
+ changes = nil
+ break
+ }
+ file = sanitizePath(file)
+
+ if skip[file] > 0 {
+ skip[file]--
+ continue
+ }
+
+ var t task
+ if t, ok = watcherTasks[file]; ok {
+ if !verbose {
+ fmt.Fprintln(os.Stderr, file, "changed")
+ }
+ for _, src := range t.srcs {
+ if src == t.dst {
+ skip[file] = 2 // minify creates both a CREATE and WRITE on the file
+ break
+ }
+ }
+ if ok := minify(mimetype, t); !ok {
+ fails++
+ }
+ }
+ }
+ }
+ }
+
+ if verbose {
+ Info.Println(time.Since(start), "total")
+ }
+
+ if fails > 0 {
+ os.Exit(1)
+ }
+}
+
+func getMimetype(mimetype, filetype string, useStdin bool) string {
+ if mimetype == "" && filetype != "" {
+ var ok bool
+ if mimetype, ok = filetypeMime[filetype]; !ok {
+ Error.Fatalln("cannot find mimetype for filetype", filetype)
+ }
+ }
+ if mimetype == "" && useStdin {
+ Error.Fatalln("must specify mimetype or filetype for stdin")
+ }
+
+ if verbose {
+ if mimetype == "" {
+ Info.Println("infer mimetype from file extensions")
+ } else {
+ Info.Println("use mimetype", mimetype)
+ }
+ }
+ return mimetype
+}
+
+func sanitizePath(p string) string {
+ p = filepath.ToSlash(p)
+ isDir := p[len(p)-1] == '/'
+ p = path.Clean(p)
+ if isDir {
+ p += "/"
+ } else if info, err := os.Stat(p); err == nil && info.Mode().IsDir() {
+ p += "/"
+ }
+ return p
+}
+
+func validFile(info os.FileInfo) bool {
+ if info.Mode().IsRegular() && len(info.Name()) > 0 && (hidden || info.Name()[0] != '.') {
+ if pattern != nil && !pattern.MatchString(info.Name()) {
+ return false
+ }
+
+ ext := path.Ext(info.Name())
+ if len(ext) > 0 {
+ ext = ext[1:]
+ }
+
+ if _, ok := filetypeMime[ext]; !ok {
+ return false
+ }
+ return true
+ }
+ return false
+}
+
+func validDir(info os.FileInfo) bool {
+ return info.Mode().IsDir() && len(info.Name()) > 0 && (hidden || info.Name()[0] != '.')
+}
+
+func expandInputs(inputs []string, dirDst bool) ([]task, bool) {
+ ok := true
+ tasks := []task{}
+ for _, input := range inputs {
+ input = sanitizePath(input)
+ info, err := os.Stat(input)
+ if err != nil {
+ Error.Println(err)
+ ok = false
+ continue
+ }
+
+ if info.Mode().IsRegular() {
+ tasks = append(tasks, task{[]string{filepath.ToSlash(input)}, "", ""})
+ } else if info.Mode().IsDir() {
+ expandDir(input, &tasks, &ok)
+ } else {
+ Error.Println("not a file or directory", input)
+ ok = false
+ }
+ }
+
+ if len(tasks) > 1 && !dirDst {
+ // concatenate
+ tasks[0].srcDir = ""
+ for _, task := range tasks[1:] {
+ tasks[0].srcs = append(tasks[0].srcs, task.srcs[0])
+ }
+ tasks = tasks[:1]
+ }
+
+ if verbose && ok {
+ if len(inputs) == 0 {
+ Info.Println("minify from stdin")
+ } else if len(tasks) == 1 {
+ if len(tasks[0].srcs) > 1 {
+ Info.Println("minify and concatenate", len(tasks[0].srcs), "input files")
+ } else {
+ Info.Println("minify input file", tasks[0].srcs[0])
+ }
+ } else {
+ Info.Println("minify", len(tasks), "input files")
+ }
+ }
+ return tasks, ok
+}
+
+func expandDir(input string, tasks *[]task, ok *bool) {
+ if !recursive {
+ if verbose {
+ Info.Println("expanding directory", input)
+ }
+
+ infos, err := ioutil.ReadDir(input)
+ if err != nil {
+ Error.Println(err)
+ *ok = false
+ }
+ for _, info := range infos {
+ if validFile(info) {
+ *tasks = append(*tasks, task{[]string{path.Join(input, info.Name())}, input, ""})
+ }
+ }
+ } else {
+ if verbose {
+ Info.Println("expanding directory", input, "recursively")
+ }
+
+ err := filepath.Walk(input, func(path string, info os.FileInfo, err error) error {
+ if err != nil {
+ return err
+ }
+ if validFile(info) {
+ *tasks = append(*tasks, task{[]string{filepath.ToSlash(path)}, input, ""})
+ } else if info.Mode().IsDir() && !validDir(info) && info.Name() != "." && info.Name() != ".." { // check for IsDir, so we don't skip the rest of the directory when we have an invalid file
+ return filepath.SkipDir
+ }
+ return nil
+ })
+ if err != nil {
+ Error.Println(err)
+ *ok = false
+ }
+ }
+}
+
+func expandOutputs(output string, tasks *[]task) bool {
+ if verbose {
+ if output == "" {
+ Info.Println("minify to stdout")
+ } else if output[len(output)-1] != '/' {
+ Info.Println("minify to output file", output)
+ } else if output == "./" {
+ Info.Println("minify to current working directory")
+ } else {
+ Info.Println("minify to output directory", output)
+ }
+ }
+
+ if output == "" {
+ return true
+ }
+
+ ok := true
+ for i, t := range *tasks {
+ var err error
+ (*tasks)[i].dst, err = getOutputFilename(output, t)
+ if err != nil {
+ Error.Println(err)
+ ok = false
+ }
+ }
+ return ok
+}
+
+func getOutputFilename(output string, t task) (string, error) {
+ if len(output) > 0 && output[len(output)-1] == '/' {
+ rel, err := filepath.Rel(t.srcDir, t.srcs[0])
+ if err != nil {
+ return "", err
+ }
+ return path.Clean(filepath.ToSlash(path.Join(output, rel))), nil
+ }
+ return output, nil
+}
+
+func openInputFile(input string) (*os.File, bool) {
+ var r *os.File
+ if input == "" {
+ r = os.Stdin
+ } else {
+ err := try.Do(func(attempt int) (bool, error) {
+ var err error
+ r, err = os.Open(input)
+ return attempt < 5, err
+ })
+ if err != nil {
+ Error.Println(err)
+ return nil, false
+ }
+ }
+ return r, true
+}
+
+func openOutputFile(output string) (*os.File, bool) {
+ var w *os.File
+ if output == "" {
+ w = os.Stdout
+ } else {
+ if err := os.MkdirAll(path.Dir(output), 0777); err != nil {
+ Error.Println(err)
+ return nil, false
+ }
+ err := try.Do(func(attempt int) (bool, error) {
+ var err error
+ w, err = os.OpenFile(output, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0666)
+ return attempt < 5, err
+ })
+ if err != nil {
+ Error.Println(err)
+ return nil, false
+ }
+ }
+ return w, true
+}
+
+func minify(mimetype string, t task) bool {
+ if mimetype == "" {
+ for _, src := range t.srcs {
+ if len(path.Ext(src)) > 0 {
+ srcMimetype, ok := filetypeMime[path.Ext(src)[1:]]
+ if !ok {
+ Error.Println("cannot infer mimetype from extension in", src)
+ return false
+ }
+ if mimetype == "" {
+ mimetype = srcMimetype
+ } else if srcMimetype != mimetype {
+ Error.Println("inferred mimetype", srcMimetype, "of", src, "for concatenation unequal to previous mimetypes", mimetype)
+ return false
+ }
+ }
+ }
+ }
+
+ srcName := strings.Join(t.srcs, " + ")
+ if len(t.srcs) > 1 {
+ srcName = "(" + srcName + ")"
+ }
+ if srcName == "" {
+ srcName = "stdin"
+ }
+ dstName := t.dst
+ if dstName == "" {
+ dstName = "stdin"
+ } else {
+ // rename original when overwriting
+ for i := range t.srcs {
+ if t.srcs[i] == t.dst {
+ t.srcs[i] += ".bak"
+ err := try.Do(func(attempt int) (bool, error) {
+ err := os.Rename(t.dst, t.srcs[i])
+ return attempt < 5, err
+ })
+ if err != nil {
+ Error.Println(err)
+ return false
+ }
+ break
+ }
+ }
+ }
+
+ frs := make([]io.Reader, len(t.srcs))
+ for i, src := range t.srcs {
+ fr, ok := openInputFile(src)
+ if !ok {
+ for _, fr := range frs {
+ fr.(io.ReadCloser).Close()
+ }
+ return false
+ }
+ if i > 0 && mimetype == filetypeMime["js"] {
+ // prepend newline when concatenating JS files
+ frs[i] = NewPrependReader(fr, []byte("\n"))
+ } else {
+ frs[i] = fr
+ }
+ }
+ r := &countingReader{io.MultiReader(frs...), 0}
+
+ fw, ok := openOutputFile(t.dst)
+ if !ok {
+ for _, fr := range frs {
+ fr.(io.ReadCloser).Close()
+ }
+ return false
+ }
+ var w *countingWriter
+ if fw == os.Stdout {
+ w = &countingWriter{fw, 0}
+ } else {
+ w = &countingWriter{bufio.NewWriter(fw), 0}
+ }
+
+ success := true
+ startTime := time.Now()
+ err := m.Minify(mimetype, w, r)
+ if err != nil {
+ Error.Println("cannot minify "+srcName+":", err)
+ success = false
+ }
+ if verbose {
+ dur := time.Since(startTime)
+ speed := "Inf MB"
+ if dur > 0 {
+ speed = humanize.Bytes(uint64(float64(r.N) / dur.Seconds()))
+ }
+ ratio := 1.0
+ if r.N > 0 {
+ ratio = float64(w.N) / float64(r.N)
+ }
+
+ stats := fmt.Sprintf("(%9v, %6v, %5.1f%%, %6v/s)", dur, humanize.Bytes(uint64(w.N)), ratio*100, speed)
+ if srcName != dstName {
+ Info.Println(stats, "-", srcName, "to", dstName)
+ } else {
+ Info.Println(stats, "-", srcName)
+ }
+ }
+
+ for _, fr := range frs {
+ fr.(io.ReadCloser).Close()
+ }
+ if bw, ok := w.Writer.(*bufio.Writer); ok {
+ bw.Flush()
+ }
+ fw.Close()
+
+ // remove original that was renamed, when overwriting files
+ for i := range t.srcs {
+ if t.srcs[i] == t.dst+".bak" {
+ if err == nil {
+ if err = os.Remove(t.srcs[i]); err != nil {
+ Error.Println(err)
+ return false
+ }
+ } else {
+ if err = os.Remove(t.dst); err != nil {
+ Error.Println(err)
+ return false
+ } else if err = os.Rename(t.srcs[i], t.dst); err != nil {
+ Error.Println(err)
+ return false
+ }
+ }
+ t.srcs[i] = t.dst
+ break
+ }
+ }
+ return success
+}
diff --git a/vendor/github.com/tdewolff/minify/cmd/minify/util.go b/vendor/github.com/tdewolff/minify/cmd/minify/util.go
new file mode 100644
index 0000000..d8db16e
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/cmd/minify/util.go
@@ -0,0 +1,46 @@
+package main
+
+import "io"
+
+type countingReader struct {
+ io.Reader
+ N int
+}
+
+func (r *countingReader) Read(p []byte) (int, error) {
+ n, err := r.Reader.Read(p)
+ r.N += n
+ return n, err
+}
+
+type countingWriter struct {
+ io.Writer
+ N int
+}
+
+func (w *countingWriter) Write(p []byte) (int, error) {
+ n, err := w.Writer.Write(p)
+ w.N += n
+ return n, err
+}
+
+type prependReader struct {
+ io.ReadCloser
+ prepend []byte
+}
+
+func NewPrependReader(r io.ReadCloser, prepend []byte) *prependReader {
+ return &prependReader{r, prepend}
+}
+
+func (r *prependReader) Read(p []byte) (int, error) {
+ if r.prepend != nil {
+ n := copy(p, r.prepend)
+ if n != len(r.prepend) {
+ return n, io.ErrShortBuffer
+ }
+ r.prepend = nil
+ return n, nil
+ }
+ return r.ReadCloser.Read(p)
+}
diff --git a/vendor/github.com/tdewolff/minify/cmd/minify/watch.go b/vendor/github.com/tdewolff/minify/cmd/minify/watch.go
new file mode 100644
index 0000000..7fdb381
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/cmd/minify/watch.go
@@ -0,0 +1,106 @@
+package main
+
+import (
+ "os"
+ "path/filepath"
+
+ "github.com/fsnotify/fsnotify"
+)
+
+type RecursiveWatcher struct {
+ watcher *fsnotify.Watcher
+ paths map[string]bool
+ recursive bool
+}
+
+func NewRecursiveWatcher(recursive bool) (*RecursiveWatcher, error) {
+ watcher, err := fsnotify.NewWatcher()
+ if err != nil {
+ return nil, err
+ }
+ return &RecursiveWatcher{watcher, make(map[string]bool), recursive}, nil
+}
+
+func (rw *RecursiveWatcher) Close() error {
+ return rw.watcher.Close()
+}
+
+func (rw *RecursiveWatcher) AddPath(root string) error {
+ info, err := os.Stat(root)
+ if err != nil {
+ return err
+ }
+
+ if info.Mode().IsRegular() {
+ root = filepath.Dir(root)
+ if rw.paths[root] {
+ return nil
+ }
+ if err := rw.watcher.Add(root); err != nil {
+ return err
+ }
+ rw.paths[root] = true
+ return nil
+ } else if !rw.recursive {
+ if rw.paths[root] {
+ return nil
+ }
+ if err := rw.watcher.Add(root); err != nil {
+ return err
+ }
+ rw.paths[root] = true
+ return nil
+ } else {
+ return filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
+ if err != nil {
+ return err
+ }
+ if info.Mode().IsDir() {
+ if !validDir(info) || rw.paths[path] {
+ return filepath.SkipDir
+ }
+ if err := rw.watcher.Add(path); err != nil {
+ return err
+ }
+ rw.paths[path] = true
+ }
+ return nil
+ })
+ }
+}
+
+func (rw *RecursiveWatcher) Run() chan string {
+ files := make(chan string, 10)
+ go func() {
+ for rw.watcher.Events != nil && rw.watcher.Errors != nil {
+ select {
+ case event, ok := <-rw.watcher.Events:
+ if !ok {
+ rw.watcher.Events = nil
+ break
+ }
+ if info, err := os.Stat(event.Name); err == nil {
+ if validDir(info) {
+ if event.Op&fsnotify.Create == fsnotify.Create {
+ if err := rw.AddPath(event.Name); err != nil {
+ Error.Println(err)
+ }
+ }
+ } else if validFile(info) {
+ if event.Op&fsnotify.Create == fsnotify.Create || event.Op&fsnotify.Write == fsnotify.Write {
+ files <- event.Name
+ }
+ }
+ }
+ case err, ok := <-rw.watcher.Errors:
+ if !ok {
+ rw.watcher.Errors = nil
+ break
+ }
+ Error.Println(err)
+ }
+ }
+ close(files)
+ }()
+ return files
+}
diff --git a/vendor/github.com/tdewolff/minify/common.go b/vendor/github.com/tdewolff/minify/common.go
new file mode 100644
index 0000000..fa3c91d
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/common.go
@@ -0,0 +1,339 @@
+package minify // import "github.com/tdewolff/minify"
+
+import (
+ "bytes"
+ "encoding/base64"
+ "net/url"
+
+ "github.com/tdewolff/parse"
+ "github.com/tdewolff/parse/strconv"
+)
+
+// Epsilon is the closest number to zero that is not considered to be zero.
+var Epsilon = 0.00001
+
+// ContentType minifies a given mediatype by removing all whitespace.
+func ContentType(b []byte) []byte {
+ j := 0
+ start := 0
+ inString := false
+ for i, c := range b {
+ if !inString && parse.IsWhitespace(c) {
+ if start != 0 {
+ j += copy(b[j:], b[start:i])
+ } else {
+ j += i
+ }
+ start = i + 1
+ } else if c == '"' {
+ inString = !inString
+ }
+ }
+ if start != 0 {
+ j += copy(b[j:], b[start:])
+ return parse.ToLower(b[:j])
+ }
+ return parse.ToLower(b)
+}
+
+// DataURI minifies a data URI and calls a minifier by the specified mediatype. Specifications: https://www.ietf.org/rfc/rfc2397.txt.
+func DataURI(m *M, dataURI []byte) []byte {
+ if mediatype, data, err := parse.DataURI(dataURI); err == nil {
+ dataURI, _ = m.Bytes(string(mediatype), data)
+ base64Len := len(";base64") + base64.StdEncoding.EncodedLen(len(dataURI))
+ asciiLen := len(dataURI)
+ for _, c := range dataURI {
+ if 'A' <= c && c <= 'Z' || 'a' <= c && c <= 'z' || '0' <= c && c <= '9' || c == '-' || c == '_' || c == '.' || c == '~' || c == ' ' {
+ asciiLen++
+ } else {
+ asciiLen += 2
+ }
+ if asciiLen > base64Len {
+ break
+ }
+ }
+ if asciiLen > base64Len {
+ encoded := make([]byte, base64Len-len(";base64"))
+ base64.StdEncoding.Encode(encoded, dataURI)
+ dataURI = encoded
+ mediatype = append(mediatype, []byte(";base64")...)
+ } else {
+ dataURI = []byte(url.QueryEscape(string(dataURI)))
+ dataURI = bytes.Replace(dataURI, []byte("\""), []byte("\\\""), -1)
+ }
+ if len("text/plain") <= len(mediatype) && parse.EqualFold(mediatype[:len("text/plain")], []byte("text/plain")) {
+ mediatype = mediatype[len("text/plain"):]
+ }
+ for i := 0; i+len(";charset=us-ascii") <= len(mediatype); i++ {
+ // must start with semicolon and be followed by end of mediatype or semicolon
+ if mediatype[i] == ';' && parse.EqualFold(mediatype[i+1:i+len(";charset=us-ascii")], []byte("charset=us-ascii")) && (i+len(";charset=us-ascii") >= len(mediatype) || mediatype[i+len(";charset=us-ascii")] == ';') {
+ mediatype = append(mediatype[:i], mediatype[i+len(";charset=us-ascii"):]...)
+ break
+ }
+ }
+ dataURI = append(append(append([]byte("data:"), mediatype...), ','), dataURI...)
+ }
+ return dataURI
+}
+
+const MaxInt = int(^uint(0) >> 1)
+const MinInt = -MaxInt - 1
+
+// Number minifies a given byte slice containing a number (see parse.Number) and removes superfluous characters.
+func Number(num []byte, prec int) []byte {
+ // omit first + and register mantissa start and end, whether it's negative and the exponent
+ neg := false
+ start := 0
+ dot := -1
+ end := len(num)
+ origExp := 0
+ if 0 < end && (num[0] == '+' || num[0] == '-') {
+ if num[0] == '-' {
+ neg = true
+ }
+ start++
+ }
+ for i, c := range num[start:] {
+ if c == '.' {
+ dot = start + i
+ } else if c == 'e' || c == 'E' {
+ end = start + i
+ i += start + 1
+ if i < len(num) && num[i] == '+' {
+ i++
+ }
+ if tmpOrigExp, n := strconv.ParseInt(num[i:]); n > 0 && tmpOrigExp >= int64(MinInt) && tmpOrigExp <= int64(MaxInt) {
+ // range checks for when int is 32 bit
+ origExp = int(tmpOrigExp)
+ } else {
+ return num
+ }
+ break
+ }
+ }
+ if dot == -1 {
+ dot = end
+ }
+
+ // trim leading zeros but leave at least one digit
+ for start < end-1 && num[start] == '0' {
+ start++
+ }
+ // trim trailing zeros
+ i := end - 1
+ for ; i > dot; i-- {
+ if num[i] != '0' {
+ end = i + 1
+ break
+ }
+ }
+ if i == dot {
+ end = dot
+ if start == end {
+ num[start] = '0'
+ return num[start : start+1]
+ }
+ } else if start == end-1 && num[start] == '0' {
+ return num[start:end]
+ }
+
+ // n is the number of significant digits
+ // normExp would be the exponent if it were normalised (0.1 <= f < 1)
+ n := 0
+ normExp := 0
+ if dot == start {
+ for i = dot + 1; i < end; i++ {
+ if num[i] != '0' {
+ n = end - i
+ normExp = dot - i + 1
+ break
+ }
+ }
+ } else if dot == end {
+ normExp = end - start
+ for i = end - 1; i >= start; i-- {
+ if num[i] != '0' {
+ n = i + 1 - start
+ end = i + 1
+ break
+ }
+ }
+ } else {
+ n = end - start - 1
+ normExp = dot - start
+ }
+
+ if origExp < 0 && (normExp < MinInt-origExp || normExp-n < MinInt-origExp) || origExp > 0 && (normExp > MaxInt-origExp || normExp-n > MaxInt-origExp) {
+ return num
+ }
+ normExp += origExp
+
+ // intExp would be the exponent if it were an integer
+ intExp := normExp - n
+ lenIntExp := 1
+ if intExp <= -10 || intExp >= 10 {
+ lenIntExp = strconv.LenInt(int64(intExp))
+ }
+
+ // there are three cases to consider when printing the number
+ // case 1: without decimals and with an exponent (large numbers)
+ // case 2: with decimals and without an exponent (around zero)
+ // case 3: without decimals and with a negative exponent (small numbers)
+ if normExp >= n {
+ // case 1
+ if dot < end {
+ if dot == start {
+ start = end - n
+ } else {
+ // TODO: copy the other part if shorter?
+ copy(num[dot:], num[dot+1:end])
+ end--
+ }
+ }
+ if normExp >= n+3 {
+ num[end] = 'e'
+ end++
+ for i := end + lenIntExp - 1; i >= end; i-- {
+ num[i] = byte(intExp%10) + '0'
+ intExp /= 10
+ }
+ end += lenIntExp
+ } else if normExp == n+2 {
+ num[end] = '0'
+ num[end+1] = '0'
+ end += 2
+ } else if normExp == n+1 {
+ num[end] = '0'
+ end++
+ }
+ } else if normExp >= -lenIntExp-1 {
+ // case 2
+ zeroes := -normExp
+ newDot := 0
+ if zeroes > 0 {
+ // dot placed at the front and add zeroes
+ newDot = end - n - zeroes - 1
+ if newDot != dot {
+ d := start - newDot
+ if d > 0 {
+ if dot < end {
+ // copy original digits behind the dot backwards
+ copy(num[dot+1+d:], num[dot+1:end])
+ if dot > start {
+ // copy original digits before the dot backwards
+ copy(num[start+d+1:], num[start:dot])
+ }
+ } else if dot > start {
+ // copy original digits before the dot backwards
+ copy(num[start+d:], num[start:dot])
+ }
+ newDot = start
+ end += d
+ } else {
+ start += -d
+ }
+ num[newDot] = '.'
+ for i := 0; i < zeroes; i++ {
+ num[newDot+1+i] = '0'
+ }
+ }
+ } else {
+ // placed in the middle
+ if dot == start {
+ // TODO: try if placing at the end reduces copying
+ // when there are zeroes after the dot
+ dot = end - n - 1
+ start = dot
+ } else if dot >= end {
+ // TODO: try if placing at the start reduces copying
+ // when input has no dot in it
+ dot = end
+ end++
+ }
+ newDot = start + normExp
+ if newDot > dot {
+ // copy digits forwards
+ copy(num[dot:], num[dot+1:newDot+1])
+ } else if newDot < dot {
+ // copy digits backwards
+ copy(num[newDot+1:], num[newDot:dot])
+ }
+ num[newDot] = '.'
+ }
+
+ // apply precision
+ dot = newDot
+ if prec > -1 && dot+1+prec < end {
+ end = dot + 1 + prec
+ inc := num[end] >= '5'
+ if inc || num[end-1] == '0' {
+ for i := end - 1; i > start; i-- {
+ if i == dot {
+ end--
+ } else if inc {
+ if num[i] == '9' {
+ if i > dot {
+ end--
+ } else {
+ num[i] = '0'
+ }
+ } else {
+ num[i]++
+ inc = false
+ break
+ }
+ } else if i > dot && num[i] == '0' {
+ end--
+ }
+ }
+ }
+ if dot == start && end == start+1 {
+ if inc {
+ num[start] = '1'
+ } else {
+ num[start] = '0'
+ }
+ } else {
+ if dot+1 == end {
+ end--
+ }
+ if inc {
+ if num[start] == '9' {
+ num[start] = '0'
+ copy(num[start+1:], num[start:end])
+ end++
+ num[start] = '1'
+ } else {
+ num[start]++
+ }
+ }
+ }
+ }
+ } else {
+ // case 3
+ if dot < end {
+ if dot == start {
+ copy(num[start:], num[end-n:end])
+ end = start + n
+ } else {
+ copy(num[dot:], num[dot+1:end])
+ end--
+ }
+ }
+ num[end] = 'e'
+ num[end+1] = '-'
+ end += 2
+ intExp = -intExp
+ for i := end + lenIntExp - 1; i >= end; i-- {
+ num[i] = byte(intExp%10) + '0'
+ intExp /= 10
+ }
+ end += lenIntExp
+ }
+
+ if neg {
+ start--
+ num[start] = '-'
+ }
+ return num[start:end]
+}
diff --git a/vendor/github.com/tdewolff/minify/common_test.go b/vendor/github.com/tdewolff/minify/common_test.go
new file mode 100644
index 0000000..823e4e2
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/common_test.go
@@ -0,0 +1,237 @@
+package minify // import "github.com/tdewolff/minify"
+
+import (
+ "fmt"
+ "io"
+ "io/ioutil"
+ "math"
+ "math/rand"
+ "strconv"
+ "testing"
+
+ "github.com/tdewolff/test"
+)
+
+func TestContentType(t *testing.T) {
+ contentTypeTests := []struct {
+ contentType string
+ expected string
+ }{
+ {"text/html", "text/html"},
+ {"text/html; charset=UTF-8", "text/html;charset=utf-8"},
+ {"text/html; charset=UTF-8 ; param = \" ; \"", "text/html;charset=utf-8;param=\" ; \""},
+ {"text/html, text/css", "text/html,text/css"},
+ }
+ for _, tt := range contentTypeTests {
+ t.Run(tt.contentType, func(t *testing.T) {
+ contentType := ContentType([]byte(tt.contentType))
+ test.Minify(t, tt.contentType, nil, string(contentType), tt.expected)
+ })
+ }
+}
+
+func TestDataURI(t *testing.T) {
+ dataURITests := []struct {
+ dataURI string
+ expected string
+ }{
+ {"data:,text", "data:,text"},
+ {"data:text/plain;charset=us-ascii,text", "data:,text"},
+ {"data:TEXT/PLAIN;CHARSET=US-ASCII,text", "data:,text"},
+ {"data:text/plain;charset=us-asciiz,text", "data:;charset=us-asciiz,text"},
+ {"data:;base64,dGV4dA==", "data:,text"},
+ {"data:text/svg+xml;base64,PT09PT09", "data:text/svg+xml;base64,PT09PT09"},
+ {"data:text/xml;version=2.0,content", "data:text/xml;version=2.0,content"},
+ {"data:text/xml; version = 2.0,content", "data:text/xml;version=2.0,content"},
+ {"data:,=====", "data:,%3D%3D%3D%3D%3D"},
+ {"data:,======", "data:;base64,PT09PT09"},
+ {"data:text/x,<?x?>", "data:text/x,%3C%3Fx%3F%3E"},
+ }
+ m := New()
+ m.AddFunc("text/x", func(_ *M, w io.Writer, r io.Reader, _ map[string]string) error {
+ b, _ := ioutil.ReadAll(r)
+ test.String(t, string(b), "<?x?>")
+ w.Write(b)
+ return nil
+ })
+ for _, tt := range dataURITests {
+ t.Run(tt.dataURI, func(t *testing.T) {
+ dataURI := DataURI(m, []byte(tt.dataURI))
+ test.Minify(t, tt.dataURI, nil, string(dataURI), tt.expected)
+ })
+ }
+}
+
+func TestNumber(t *testing.T) {
+ numberTests := []struct {
+ number string
+ expected string
+ }{
+ {"0", "0"},
+ {".0", "0"},
+ {"1.0", "1"},
+ {"0.1", ".1"},
+ {"+1", "1"},
+ {"-1", "-1"},
+ {"-0.1", "-.1"},
+ {"10", "10"},
+ {"100", "100"},
+ {"1000", "1e3"},
+ {"0.001", ".001"},
+ {"0.0001", "1e-4"},
+ {"100e1", "1e3"},
+ {"1.1e+1", "11"},
+ {"1.1e6", "11e5"},
+ {"0.252", ".252"},
+ {"1.252", "1.252"},
+ {"-1.252", "-1.252"},
+ {"0.075", ".075"},
+ {"789012345678901234567890123456789e9234567890123456789", "789012345678901234567890123456789e9234567890123456789"},
+ {".000100009", "100009e-9"},
+ {".0001000009", ".0001000009"},
+ {".0001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009", ".0001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009"},
+ {"E\x1f", "E\x1f"}, // fuzz
+ {"1e9223372036854775807", "1e9223372036854775807"},
+ {"11e9223372036854775807", "11e9223372036854775807"},
+ {".01e-9223372036854775808", ".01e-9223372036854775808"},
+ {".011e-9223372036854775808", ".011e-9223372036854775808"},
+
+ {".12345e8", "12345e3"},
+ {".12345e7", "1234500"},
+ {".12345e6", "123450"},
+ {".12345e5", "12345"},
+ {".012345e6", "12345"},
+ {".12345e4", "1234.5"},
+ {"-.12345e4", "-1234.5"},
+ {".12345e0", ".12345"},
+ {".12345e-1", ".012345"},
+ {".12345e-2", ".0012345"},
+ {".12345e-3", "12345e-8"},
+ {".12345e-4", "12345e-9"},
+ {".12345e-5", "12345e-10"},
+
+ {".123456e-3", "123456e-9"},
+ {".123456e-2", ".00123456"},
+ {".1234567e-4", "1234567e-11"},
+ {".1234567e-3", ".0001234567"},
+
+ {"12345678e-1", "1234567.8"},
+ {"72.e-3", ".072"},
+ {"7640e-2", "76.4"},
+ {"10.e-3", ".01"},
+ {".0319e3", "31.9"},
+ {"39.7e-2", ".397"},
+ {"39.7e-3", ".0397"},
+ {".01e1", ".1"},
+ {".001e1", ".01"},
+ {"39.7e-5", "397e-6"},
+ }
+ for _, tt := range numberTests {
+ t.Run(tt.number, func(t *testing.T) {
+ number := Number([]byte(tt.number), -1)
+ test.Minify(t, tt.number, nil, string(number), tt.expected)
+ })
+ }
+}
+
+func TestNumberTruncate(t *testing.T) {
+ numberTests := []struct {
+ number string
+ truncate int
+ expected string
+ }{
+ {"0.1", 1, ".1"},
+ {"0.0001", 1, "1e-4"},
+ {"0.111", 1, ".1"},
+ {"0.111", 0, "0"},
+ {"0.075", 1, ".1"},
+ {"0.025", 1, "0"},
+ {"9.99", 1, "10"},
+ {"8.88", 1, "8.9"},
+ {"8.88", 0, "9"},
+ {"8.00", 0, "8"},
+ {".88", 0, "1"},
+ {"1.234", 1, "1.2"},
+ {"33.33", 0, "33"},
+ {"29.666", 0, "30"},
+ {"1.51", 1, "1.5"},
+ }
+ for _, tt := range numberTests {
+ t.Run(tt.number, func(t *testing.T) {
+ number := Number([]byte(tt.number), tt.truncate)
+ test.Minify(t, tt.number, nil, string(number), tt.expected, "truncate to", tt.truncate)
+ })
+ }
+}
+
+func TestNumberRandom(t *testing.T) {
+ N := int(1e4)
+ if testing.Short() {
+ N = 0
+ }
+ for i := 0; i < N; i++ {
+ b := RandNumBytes()
+ f, _ := strconv.ParseFloat(string(b), 64)
+
+ b2 := make([]byte, len(b))
+ copy(b2, b)
+ b2 = Number(b2, -1)
+ f2, _ := strconv.ParseFloat(string(b2), 64)
+ if math.Abs(f-f2) > 1e-6 {
+ fmt.Println("Bad:", f, "!=", f2, "in", string(b), "to", string(b2))
+ }
+ }
+}
+
+////////////////
+
+var n = 100
+var numbers [][]byte
+
+func TestMain(t *testing.T) {
+ numbers = make([][]byte, 0, n)
+ for j := 0; j < n; j++ {
+ numbers = append(numbers, RandNumBytes())
+ }
+}
+
+func RandNumBytes() []byte {
+ var b []byte
+ n := rand.Int() % 10
+ for i := 0; i < n; i++ {
+ b = append(b, byte(rand.Int()%10)+'0')
+ }
+ if rand.Int()%2 == 0 {
+ b = append(b, '.')
+ n = rand.Int() % 10
+ for i := 0; i < n; i++ {
+ b = append(b, byte(rand.Int()%10)+'0')
+ }
+ }
+ if rand.Int()%2 == 0 {
+ b = append(b, 'e')
+ if rand.Int()%2 == 0 {
+ b = append(b, '-')
+ }
+ n = 1 + rand.Int()%4
+ for i := 0; i < n; i++ {
+ b = append(b, byte(rand.Int()%10)+'0')
+ }
+ }
+ return b
+}
+
+func BenchmarkNumber(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ for j := 0; j < n; j++ {
+ Number(numbers[j], -1)
+ }
+ }
+}
+
+func BenchmarkNumber2(b *testing.B) {
+ num := []byte("1.2345e-6")
+ for i := 0; i < b.N; i++ {
+ Number(num, -1)
+ }
+}
diff --git a/vendor/github.com/tdewolff/minify/css/css.go b/vendor/github.com/tdewolff/minify/css/css.go
new file mode 100644
index 0000000..de0a8c8
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/css/css.go
@@ -0,0 +1,559 @@
+// Package css minifies CSS3 following the specifications at http://www.w3.org/TR/css-syntax-3/.
+package css // import "github.com/tdewolff/minify/css"
+
+import (
+ "bytes"
+ "encoding/hex"
+ "io"
+ "strconv"
+
+ "github.com/tdewolff/minify"
+ "github.com/tdewolff/parse"
+ "github.com/tdewolff/parse/css"
+)
+
+var (
+ spaceBytes = []byte(" ")
+ colonBytes = []byte(":")
+ semicolonBytes = []byte(";")
+ commaBytes = []byte(",")
+ leftBracketBytes = []byte("{")
+ rightBracketBytes = []byte("}")
+ zeroBytes = []byte("0")
+ msfilterBytes = []byte("-ms-filter")
+ backgroundNoneBytes = []byte("0 0")
+)
+
+type cssMinifier struct {
+ m *minify.M
+ w io.Writer
+ p *css.Parser
+ o *Minifier
+}
+
+////////////////////////////////////////////////////////////////
+
+// DefaultMinifier is the default minifier.
+var DefaultMinifier = &Minifier{Decimals: -1}
+
+// Minifier is a CSS minifier.
+type Minifier struct {
+ Decimals int
+}
+
+// Minify minifies CSS data, it reads from r and writes to w.
+func Minify(m *minify.M, w io.Writer, r io.Reader, params map[string]string) error {
+ return DefaultMinifier.Minify(m, w, r, params)
+}
+
+// Minify minifies CSS data, it reads from r and writes to w.
+func (o *Minifier) Minify(m *minify.M, w io.Writer, r io.Reader, params map[string]string) error {
+ isInline := params != nil && params["inline"] == "1"
+ c := &cssMinifier{
+ m: m,
+ w: w,
+ p: css.NewParser(r, isInline),
+ o: o,
+ }
+ defer c.p.Restore()
+
+ if err := c.minifyGrammar(); err != nil && err != io.EOF {
+ return err
+ }
+ return nil
+}
+
+func (c *cssMinifier) minifyGrammar() error {
+ semicolonQueued := false
+ for {
+ gt, _, data := c.p.Next()
+ if gt == css.ErrorGrammar {
+ if perr, ok := c.p.Err().(*parse.Error); ok && perr.Message == "unexpected token in declaration" {
+ if semicolonQueued {
+ if _, err := c.w.Write(semicolonBytes); err != nil {
+ return err
+ }
+ }
+
+ // write out the offending declaration
+ if _, err := c.w.Write(data); err != nil {
+ return err
+ }
+ for _, val := range c.p.Values() {
+ if _, err := c.w.Write(val.Data); err != nil {
+ return err
+ }
+ }
+ semicolonQueued = true
+ continue
+ } else {
+ return c.p.Err()
+ }
+ } else if gt == css.EndAtRuleGrammar || gt == css.EndRulesetGrammar {
+ if _, err := c.w.Write(rightBracketBytes); err != nil {
+ return err
+ }
+ semicolonQueued = false
+ continue
+ }
+
+ if semicolonQueued {
+ if _, err := c.w.Write(semicolonBytes); err != nil {
+ return err
+ }
+ semicolonQueued = false
+ }
+
+ if gt == css.AtRuleGrammar {
+ if _, err := c.w.Write(data); err != nil {
+ return err
+ }
+ for _, val := range c.p.Values() {
+ if _, err := c.w.Write(val.Data); err != nil {
+ return err
+ }
+ }
+ semicolonQueued = true
+ } else if gt == css.BeginAtRuleGrammar {
+ if _, err := c.w.Write(data); err != nil {
+ return err
+ }
+ for _, val := range c.p.Values() {
+ if _, err := c.w.Write(val.Data); err != nil {
+ return err
+ }
+ }
+ if _, err := c.w.Write(leftBracketBytes); err != nil {
+ return err
+ }
+ } else if gt == css.QualifiedRuleGrammar {
+ if err := c.minifySelectors(data, c.p.Values()); err != nil {
+ return err
+ }
+ if _, err := c.w.Write(commaBytes); err != nil {
+ return err
+ }
+ } else if gt == css.BeginRulesetGrammar {
+ if err := c.minifySelectors(data, c.p.Values()); err != nil {
+ return err
+ }
+ if _, err := c.w.Write(leftBracketBytes); err != nil {
+ return err
+ }
+ } else if gt == css.DeclarationGrammar {
+ if _, err := c.w.Write(data); err != nil {
+ return err
+ }
+ if _, err := c.w.Write(colonBytes); err != nil {
+ return err
+ }
+ if err := c.minifyDeclaration(data, c.p.Values()); err != nil {
+ return err
+ }
+ semicolonQueued = true
+ } else if gt == css.CustomPropertyGrammar {
+ if _, err := c.w.Write(data); err != nil {
+ return err
+ }
+ if _, err := c.w.Write(colonBytes); err != nil {
+ return err
+ }
+ if _, err := c.w.Write(c.p.Values()[0].Data); err != nil {
+ return err
+ }
+ semicolonQueued = true
+ } else if gt == css.CommentGrammar {
+ if len(data) > 5 && data[1] == '*' && data[2] == '!' {
+ if _, err := c.w.Write(data[:3]); err != nil {
+ return err
+ }
+ comment := parse.TrimWhitespace(parse.ReplaceMultipleWhitespace(data[3 : len(data)-2]))
+ if _, err := c.w.Write(comment); err != nil {
+ return err
+ }
+ if _, err := c.w.Write(data[len(data)-2:]); err != nil {
+ return err
+ }
+ }
+ } else if _, err := c.w.Write(data); err != nil {
+ return err
+ }
+ }
+}
+
+func (c *cssMinifier) minifySelectors(property []byte, values []css.Token) error {
+ inAttr := false
+ isClass := false
+ for _, val := range c.p.Values() {
+ if !inAttr {
+ if val.TokenType == css.IdentToken {
+ if !isClass {
+ parse.ToLower(val.Data)
+ }
+ isClass = false
+ } else if val.TokenType == css.DelimToken && val.Data[0] == '.' {
+ isClass = true
+ } else if val.TokenType == css.LeftBracketToken {
+ inAttr = true
+ }
+ } else {
+ if val.TokenType == css.StringToken && len(val.Data) > 2 {
+ s := val.Data[1 : len(val.Data)-1]
+ if css.IsIdent([]byte(s)) {
+ if _, err := c.w.Write(s); err != nil {
+ return err
+ }
+ continue
+ }
+ } else if val.TokenType == css.RightBracketToken {
+ inAttr = false
+ }
+ }
+ if _, err := c.w.Write(val.Data); err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+func (c *cssMinifier) minifyDeclaration(property []byte, values []css.Token) error {
+ if len(values) == 0 {
+ return nil
+ }
+ prop := css.ToHash(property)
+ inProgid := false
+ for i, value := range values {
+ if inProgid {
+ if value.TokenType == css.FunctionToken {
+ inProgid = false
+ }
+ continue
+ } else if value.TokenType == css.IdentToken && css.ToHash(value.Data) == css.Progid {
+ inProgid = true
+ continue
+ }
+ value.TokenType, value.Data = c.shortenToken(prop, value.TokenType, value.Data)
+ if prop == css.Font || prop == css.Font_Family || prop == css.Font_Weight {
+ if value.TokenType == css.IdentToken && (prop == css.Font || prop == css.Font_Weight) {
+ val := css.ToHash(value.Data)
+ if val == css.Normal && prop == css.Font_Weight {
+ // normal could also be specified for font-variant, not just font-weight
+ value.TokenType = css.NumberToken
+ value.Data = []byte("400")
+ } else if val == css.Bold {
+ value.TokenType = css.NumberToken
+ value.Data = []byte("700")
+ }
+ } else if value.TokenType == css.StringToken && (prop == css.Font || prop == css.Font_Family) && len(value.Data) > 2 {
+ unquote := true
+ parse.ToLower(value.Data)
+ s := value.Data[1 : len(value.Data)-1]
+ if len(s) > 0 {
+ for _, split := range bytes.Split(s, spaceBytes) {
+ val := css.ToHash(split)
+ // if len is zero, it contains two consecutive spaces
+ if val == css.Inherit || val == css.Serif || val == css.Sans_Serif || val == css.Monospace || val == css.Fantasy || val == css.Cursive || val == css.Initial || val == css.Default ||
+ len(split) == 0 || !css.IsIdent(split) {
+ unquote = false
+ break
+ }
+ }
+ }
+ if unquote {
+ value.Data = s
+ }
+ }
+ } else if prop == css.Outline || prop == css.Border || prop == css.Border_Bottom || prop == css.Border_Left || prop == css.Border_Right || prop == css.Border_Top {
+ if css.ToHash(value.Data) == css.None {
+ value.TokenType = css.NumberToken
+ value.Data = zeroBytes
+ }
+ }
+ values[i].TokenType, values[i].Data = value.TokenType, value.Data
+ }
+
+ important := false
+ if len(values) > 2 && values[len(values)-2].TokenType == css.DelimToken && values[len(values)-2].Data[0] == '!' && css.ToHash(values[len(values)-1].Data) == css.Important {
+ values = values[:len(values)-2]
+ important = true
+ }
+
+ if len(values) == 1 {
+ if prop == css.Background && css.ToHash(values[0].Data) == css.None {
+ values[0].Data = backgroundNoneBytes
+ } else if bytes.Equal(property, msfilterBytes) {
+ alpha := []byte("progid:DXImageTransform.Microsoft.Alpha(Opacity=")
+ if values[0].TokenType == css.StringToken && bytes.HasPrefix(values[0].Data[1:len(values[0].Data)-1], alpha) {
+ values[0].Data = append(append([]byte{values[0].Data[0]}, []byte("alpha(opacity=")...), values[0].Data[1+len(alpha):]...)
+ }
+ }
+ } else {
+ if prop == css.Margin || prop == css.Padding || prop == css.Border_Width {
+ if (values[0].TokenType == css.NumberToken || values[0].TokenType == css.DimensionToken || values[0].TokenType == css.PercentageToken) && (len(values)+1)%2 == 0 {
+ valid := true
+ for i := 1; i < len(values); i += 2 {
+ if values[i].TokenType != css.WhitespaceToken || values[i+1].TokenType != css.NumberToken && values[i+1].TokenType != css.DimensionToken && values[i+1].TokenType != css.PercentageToken {
+ valid = false
+ break
+ }
+ }
+ if valid {
+ n := (len(values) + 1) / 2
+ if n == 2 {
+ if bytes.Equal(values[0].Data, values[2].Data) {
+ values = values[:1]
+ }
+ } else if n == 3 {
+ if bytes.Equal(values[0].Data, values[2].Data) && bytes.Equal(values[0].Data, values[4].Data) {
+ values = values[:1]
+ } else if bytes.Equal(values[0].Data, values[4].Data) {
+ values = values[:3]
+ }
+ } else if n == 4 {
+ if bytes.Equal(values[0].Data, values[2].Data) && bytes.Equal(values[0].Data, values[4].Data) && bytes.Equal(values[0].Data, values[6].Data) {
+ values = values[:1]
+ } else if bytes.Equal(values[0].Data, values[4].Data) && bytes.Equal(values[2].Data, values[6].Data) {
+ values = values[:3]
+ } else if bytes.Equal(values[2].Data, values[6].Data) {
+ values = values[:5]
+ }
+ }
+ }
+ }
+ } else if prop == css.Filter && len(values) == 11 {
+ if bytes.Equal(values[0].Data, []byte("progid")) &&
+ values[1].TokenType == css.ColonToken &&
+ bytes.Equal(values[2].Data, []byte("DXImageTransform")) &&
+ values[3].Data[0] == '.' &&
+ bytes.Equal(values[4].Data, []byte("Microsoft")) &&
+ values[5].Data[0] == '.' &&
+ bytes.Equal(values[6].Data, []byte("Alpha(")) &&
+ bytes.Equal(parse.ToLower(values[7].Data), []byte("opacity")) &&
+ values[8].Data[0] == '=' &&
+ values[10].Data[0] == ')' {
+ values = values[6:]
+ values[0].Data = []byte("alpha(")
+ }
+ }
+ }
+
+ for i := 0; i < len(values); i++ {
+ if values[i].TokenType == css.FunctionToken {
+ n, err := c.minifyFunction(values[i:])
+ if err != nil {
+ return err
+ }
+ i += n - 1
+ } else if _, err := c.w.Write(values[i].Data); err != nil {
+ return err
+ }
+ }
+ if important {
+ if _, err := c.w.Write([]byte("!important")); err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+func (c *cssMinifier) minifyFunction(values []css.Token) (int, error) {
+ n := 1
+ simple := true
+ for i, value := range values[1:] {
+ if value.TokenType == css.RightParenthesisToken {
+ n++
+ break
+ }
+ if i%2 == 0 && (value.TokenType != css.NumberToken && value.TokenType != css.PercentageToken) || (i%2 == 1 && value.TokenType != css.CommaToken) {
+ simple = false
+ }
+ n++
+ }
+ values = values[:n]
+ if simple && (n-1)%2 == 0 {
+ fun := css.ToHash(values[0].Data[:len(values[0].Data)-1])
+ nArgs := (n - 1) / 2
+ if (fun == css.Rgba || fun == css.Hsla) && nArgs == 4 {
+ d, _ := strconv.ParseFloat(string(values[7].Data), 32) // can never fail because if simple == true than this is a NumberToken or PercentageToken
+ if d-1.0 > -minify.Epsilon {
+ if fun == css.Rgba {
+ values[0].Data = []byte("rgb(")
+ fun = css.Rgb
+ } else {
+ values[0].Data = []byte("hsl(")
+ fun = css.Hsl
+ }
+ values = values[:len(values)-2]
+ values[len(values)-1].Data = []byte(")")
+ nArgs = 3
+ } else if d < minify.Epsilon {
+ values[0].Data = []byte("transparent")
+ values = values[:1]
+ fun = 0
+ nArgs = 0
+ }
+ }
+ if fun == css.Rgb && nArgs == 3 {
+ var err [3]error
+ rgb := [3]byte{}
+ for j := 0; j < 3; j++ {
+ val := values[j*2+1]
+ if val.TokenType == css.NumberToken {
+ var d int64
+ d, err[j] = strconv.ParseInt(string(val.Data), 10, 32)
+ if d < 0 {
+ d = 0
+ } else if d > 255 {
+ d = 255
+ }
+ rgb[j] = byte(d)
+ } else if val.TokenType == css.PercentageToken {
+ var d float64
+ d, err[j] = strconv.ParseFloat(string(val.Data[:len(val.Data)-1]), 32)
+ if d < 0.0 {
+ d = 0.0
+ } else if d > 100.0 {
+ d = 100.0
+ }
+ rgb[j] = byte((d / 100.0 * 255.0) + 0.5)
+ }
+ }
+ if err[0] == nil && err[1] == nil && err[2] == nil {
+ val := make([]byte, 7)
+ val[0] = '#'
+ hex.Encode(val[1:], rgb[:])
+ parse.ToLower(val)
+ if s, ok := ShortenColorHex[string(val)]; ok {
+ if _, err := c.w.Write(s); err != nil {
+ return 0, err
+ }
+ } else {
+ if len(val) == 7 && val[1] == val[2] && val[3] == val[4] && val[5] == val[6] {
+ val[2] = val[3]
+ val[3] = val[5]
+ val = val[:4]
+ }
+ if _, err := c.w.Write(val); err != nil {
+ return 0, err
+ }
+ }
+ return n, nil
+ }
+ } else if fun == css.Hsl && nArgs == 3 {
+ if values[1].TokenType == css.NumberToken && values[3].TokenType == css.PercentageToken && values[5].TokenType == css.PercentageToken {
+ h, err1 := strconv.ParseFloat(string(values[1].Data), 32)
+ s, err2 := strconv.ParseFloat(string(values[3].Data[:len(values[3].Data)-1]), 32)
+ l, err3 := strconv.ParseFloat(string(values[5].Data[:len(values[5].Data)-1]), 32)
+ if err1 == nil && err2 == nil && err3 == nil {
+ r, g, b := css.HSL2RGB(h/360.0, s/100.0, l/100.0)
+ rgb := []byte{byte((r * 255.0) + 0.5), byte((g * 255.0) + 0.5), byte((b * 255.0) + 0.5)}
+ val := make([]byte, 7)
+ val[0] = '#'
+ hex.Encode(val[1:], rgb[:])
+ parse.ToLower(val)
+ if s, ok := ShortenColorHex[string(val)]; ok {
+ if _, err := c.w.Write(s); err != nil {
+ return 0, err
+ }
+ } else {
+ if len(val) == 7 && val[1] == val[2] && val[3] == val[4] && val[5] == val[6] {
+ val[2] = val[3]
+ val[3] = val[5]
+ val = val[:4]
+ }
+ if _, err := c.w.Write(val); err != nil {
+ return 0, err
+ }
+ }
+ return n, nil
+ }
+ }
+ }
+ }
+ for _, value := range values {
+ if _, err := c.w.Write(value.Data); err != nil {
+ return 0, err
+ }
+ }
+ return n, nil
+}
+
+func (c *cssMinifier) shortenToken(prop css.Hash, tt css.TokenType, data []byte) (css.TokenType, []byte) {
+ if tt == css.NumberToken || tt == css.PercentageToken || tt == css.DimensionToken {
+ if tt == css.NumberToken && (prop == css.Z_Index || prop == css.Counter_Increment || prop == css.Counter_Reset || prop == css.Orphans || prop == css.Widows) {
+ return tt, data // integers
+ }
+ n := len(data)
+ if tt == css.PercentageToken {
+ n--
+ } else if tt == css.DimensionToken {
+ n = parse.Number(data)
+ }
+ dim := data[n:]
+ parse.ToLower(dim)
+ data = minify.Number(data[:n], c.o.Decimals)
+ if tt == css.PercentageToken && (len(data) != 1 || data[0] != '0' || prop == css.Color) {
+ data = append(data, '%')
+ } else if tt == css.DimensionToken && (len(data) != 1 || data[0] != '0' || requiredDimension[string(dim)]) {
+ data = append(data, dim...)
+ }
+ } else if tt == css.IdentToken {
+ //parse.ToLower(data) // TODO: not all identifiers are case-insensitive; all <custom-ident> properties are case-sensitive
+ if hex, ok := ShortenColorName[css.ToHash(data)]; ok {
+ tt = css.HashToken
+ data = hex
+ }
+ } else if tt == css.HashToken {
+ parse.ToLower(data)
+ if ident, ok := ShortenColorHex[string(data)]; ok {
+ tt = css.IdentToken
+ data = ident
+ } else if len(data) == 7 && data[1] == data[2] && data[3] == data[4] && data[5] == data[6] {
+ tt = css.HashToken
+ data[2] = data[3]
+ data[3] = data[5]
+ data = data[:4]
+ }
+ } else if tt == css.StringToken {
+ // remove any \\\r\n \\\r \\\n
+ for i := 1; i < len(data)-2; i++ {
+ if data[i] == '\\' && (data[i+1] == '\n' || data[i+1] == '\r') {
+ // encountered first replacee, now start to move bytes to the front
+ j := i + 2
+ if data[i+1] == '\r' && len(data) > i+2 && data[i+2] == '\n' {
+ j++
+ }
+ for ; j < len(data); j++ {
+ if data[j] == '\\' && len(data) > j+1 && (data[j+1] == '\n' || data[j+1] == '\r') {
+ if data[j+1] == '\r' && len(data) > j+2 && data[j+2] == '\n' {
+ j++
+ }
+ j++
+ } else {
+ data[i] = data[j]
+ i++
+ }
+ }
+ data = data[:i]
+ break
+ }
+ }
+ } else if tt == css.URLToken {
+ parse.ToLower(data[:3])
+ if len(data) > 10 {
+ uri := data[4 : len(data)-1]
+ delim := byte('"')
+ if uri[0] == '\'' || uri[0] == '"' {
+ delim = uri[0]
+ uri = uri[1 : len(uri)-1]
+ }
+ uri = minify.DataURI(c.m, uri)
+ if css.IsURLUnquoted(uri) {
+ data = append(append([]byte("url("), uri...), ')')
+ } else {
+ data = append(append(append([]byte("url("), delim), uri...), delim, ')')
+ }
+ }
+ }
+ return tt, data
+}
diff --git a/vendor/github.com/tdewolff/minify/css/css_test.go b/vendor/github.com/tdewolff/minify/css/css_test.go
new file mode 100644
index 0000000..ed88bf5
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/css/css_test.go
@@ -0,0 +1,234 @@
+package css // import "github.com/tdewolff/minify/css"
+
+import (
+ "bytes"
+ "fmt"
+ "os"
+ "testing"
+
+ "github.com/tdewolff/minify"
+ "github.com/tdewolff/test"
+)
+
+func TestCSS(t *testing.T) {
+ cssTests := []struct {
+ css string
+ expected string
+ }{
+ {"/*comment*/", ""},
+ {"/*! bang comment */", "/*!bang comment*/"},
+ {"i{}/*! bang comment */", "i{}/*!bang comment*/"},
+ {"i { key: value; key2: value; }", "i{key:value;key2:value}"},
+ {".cla .ss > #id { x:y; }", ".cla .ss>#id{x:y}"},
+ {".cla[id ^= L] { x:y; }", ".cla[id^=L]{x:y}"},
+ {"area:focus { outline : 0;}", "area:focus{outline:0}"},
+ {"@import 'file';", "@import 'file'"},
+ {"@font-face { x:y; }", "@font-face{x:y}"},
+
+ {"input[type=\"radio\"]{x:y}", "input[type=radio]{x:y}"},
+ {"DIV{margin:1em}", "div{margin:1em}"},
+ {".CLASS{margin:1em}", ".CLASS{margin:1em}"},
+ {"@MEDIA all{}", "@media all{}"},
+ {"@media only screen and (max-width : 800px){}", "@media only screen and (max-width:800px){}"},
+ {"@media (-webkit-min-device-pixel-ratio:1.5),(min-resolution:1.5dppx){}", "@media(-webkit-min-device-pixel-ratio:1.5),(min-resolution:1.5dppx){}"},
+ {"[class^=icon-] i[class^=icon-],i[class*=\" icon-\"]{x:y}", "[class^=icon-] i[class^=icon-],i[class*=\" icon-\"]{x:y}"},
+ {"html{line-height:1;}html{line-height:1;}", "html{line-height:1}html{line-height:1}"},
+ {"a { b: 1", "a{b:1}"},
+
+ {":root { --custom-variable:0px; }", ":root{--custom-variable:0px}"},
+
+ // case sensitivity
+ {"@counter-style Ident{}", "@counter-style Ident{}"},
+
+ // coverage
+ {"a, b + c { x:y; }", "a,b+c{x:y}"},
+
+ // bad declaration
+ {".clearfix { *zoom: 1px; }", ".clearfix{*zoom:1px}"},
+ {".clearfix { *zoom: 1px }", ".clearfix{*zoom:1px}"},
+ {".clearfix { color:green; *zoom: 1px; color:red; }", ".clearfix{color:green;*zoom:1px;color:red}"},
+
+ // go-fuzz
+ {"input[type=\"\x00\"] { a: b\n}.a{}", "input[type=\"\x00\"]{a:b}.a{}"},
+ {"a{a:)'''", "a{a:)'''}"},
+ }
+
+ m := minify.New()
+ for _, tt := range cssTests {
+ t.Run(tt.css, func(t *testing.T) {
+ r := bytes.NewBufferString(tt.css)
+ w := &bytes.Buffer{}
+ err := Minify(m, w, r, nil)
+ test.Minify(t, tt.css, err, w.String(), tt.expected)
+ })
+ }
+}
+
+func TestCSSInline(t *testing.T) {
+ cssTests := []struct {
+ css string
+ expected string
+ }{
+ {"/*comment*/", ""},
+ {"/*! bang comment */", ""},
+ {";", ""},
+ {"empty:", "empty:"},
+ {"key: value;", "key:value"},
+ {"margin: 0 1; padding: 0 1;", "margin:0 1;padding:0 1"},
+ {"color: #FF0000;", "color:red"},
+ {"color: #000000;", "color:#000"},
+ {"color: black;", "color:#000"},
+ {"color: rgb(255,255,255);", "color:#fff"},
+ {"color: rgb(100%,100%,100%);", "color:#fff"},
+ {"color: rgba(255,0,0,1);", "color:red"},
+ {"color: rgba(255,0,0,2);", "color:red"},
+ {"color: rgba(255,0,0,0.5);", "color:rgba(255,0,0,.5)"},
+ {"color: rgba(255,0,0,-1);", "color:transparent"},
+ {"color: rgba(0%,15%,25%,0.2);", "color:rgba(0%,15%,25%,.2)"},
+ {"color: rgba(0,0,0,0.5);", "color:rgba(0,0,0,.5)"},
+ {"color: hsla(5,0%,10%,0.75);", "color:hsla(5,0%,10%,.75)"},
+ {"color: hsl(0,100%,50%);", "color:red"},
+ {"color: hsla(1,2%,3%,1);", "color:#080807"},
+ {"color: hsla(1,2%,3%,0);", "color:transparent"},
+ {"color: hsl(48,100%,50%);", "color:#fc0"},
+ {"font-weight: bold; font-weight: normal;", "font-weight:700;font-weight:400"},
+ {"font: bold \"Times new Roman\",\"Sans-Serif\";", "font:700 times new roman,\"sans-serif\""},
+ {"outline: none;", "outline:0"},
+ {"outline: none !important;", "outline:0!important"},
+ {"border-left: none;", "border-left:0"},
+ {"margin: 1 1 1 1;", "margin:1"},
+ {"margin: 1 2 1 2;", "margin:1 2"},
+ {"margin: 1 2 3 2;", "margin:1 2 3"},
+ {"margin: 1 2 3 4;", "margin:1 2 3 4"},
+ {"margin: 1 1 1 a;", "margin:1 1 1 a"},
+ {"margin: 1 1 1 1 !important;", "margin:1!important"},
+ {"padding:.2em .4em .2em", "padding:.2em .4em"},
+ {"margin: 0em;", "margin:0"},
+ {"font-family:'Arial', 'Times New Roman';", "font-family:arial,times new roman"},
+ {"background:url('http://domain.com/image.png');", "background:url(http://domain.com/image.png)"},
+ {"filter: progid : DXImageTransform.Microsoft.BasicImage(rotation=1);", "filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"},
+ {"filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);", "filter:alpha(opacity=0)"},
+ {"content: \"a\\\nb\";", "content:\"ab\""},
+ {"content: \"a\\\r\nb\\\r\nc\";", "content:\"abc\""},
+ {"content: \"\";", "content:\"\""},
+
+ {"font:27px/13px arial,sans-serif", "font:27px/13px arial,sans-serif"},
+ {"text-decoration: none !important", "text-decoration:none!important"},
+ {"color:#fff", "color:#fff"},
+ {"border:2px rgb(255,255,255);", "border:2px #fff"},
+ {"margin:-1px", "margin:-1px"},
+ {"margin:+1px", "margin:1px"},
+ {"margin:0.5em", "margin:.5em"},
+ {"margin:-0.5em", "margin:-.5em"},
+ {"margin:05em", "margin:5em"},
+ {"margin:.50em", "margin:.5em"},
+ {"margin:5.0em", "margin:5em"},
+ {"margin:5000em", "margin:5e3em"},
+ {"color:#c0c0c0", "color:silver"},
+ {"-ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)\";", "-ms-filter:\"alpha(opacity=80)\""},
+ {"filter: progid:DXImageTransform.Microsoft.Alpha(Opacity = 80);", "filter:alpha(opacity=80)"},
+ {"MARGIN:1EM", "margin:1em"},
+ //{"color:CYAN", "color:cyan"}, // TODO
+ {"width:attr(Name em)", "width:attr(Name em)"},
+ {"content:CounterName", "content:CounterName"},
+ {"background:URL(x.PNG);", "background:url(x.PNG)"},
+ {"background:url(/*nocomment*/)", "background:url(/*nocomment*/)"},
+ {"background:url(data:,text)", "background:url(data:,text)"},
+ {"background:url('data:text/xml; version = 2.0,content')", "background:url(data:text/xml;version=2.0,content)"},
+ {"background:url('data:\\'\",text')", "background:url('data:\\'\",text')"},
+ {"margin:0 0 18px 0;", "margin:0 0 18px"},
+ {"background:none", "background:0 0"},
+ {"background:none 1 1", "background:none 1 1"},
+ {"z-index:1000", "z-index:1000"},
+
+ {"any:0deg 0s 0ms 0dpi 0dpcm 0dppx 0hz 0khz", "any:0 0s 0ms 0dpi 0dpcm 0dppx 0hz 0khz"},
+ {"--custom-variable:0px;", "--custom-variable:0px"},
+ {"--foo: if(x > 5) this.width = 10", "--foo: if(x > 5) this.width = 10"},
+ {"--foo: ;", "--foo: "},
+
+ // case sensitivity
+ {"animation:Ident", "animation:Ident"},
+ {"animation-name:Ident", "animation-name:Ident"},
+
+ // coverage
+ {"margin: 1 1;", "margin:1"},
+ {"margin: 1 2;", "margin:1 2"},
+ {"margin: 1 1 1;", "margin:1"},
+ {"margin: 1 2 1;", "margin:1 2"},
+ {"margin: 1 2 3;", "margin:1 2 3"},
+ {"margin: 0%;", "margin:0"},
+ {"color: rgb(255,64,64);", "color:#ff4040"},
+ {"color: rgb(256,-34,2342435);", "color:#f0f"},
+ {"color: rgb(120%,-45%,234234234%);", "color:#f0f"},
+ {"color: rgb(0, 1, ident);", "color:rgb(0,1,ident)"},
+ {"color: rgb(ident);", "color:rgb(ident)"},
+ {"margin: rgb(ident);", "margin:rgb(ident)"},
+ {"filter: progid:b().c.Alpha(rgba(x));", "filter:progid:b().c.Alpha(rgba(x))"},
+
+ // go-fuzz
+ {"FONT-FAMILY: ru\"", "font-family:ru\""},
+ }
+
+ m := minify.New()
+ params := map[string]string{"inline": "1"}
+ for _, tt := range cssTests {
+ t.Run(tt.css, func(t *testing.T) {
+ r := bytes.NewBufferString(tt.css)
+ w := &bytes.Buffer{}
+ err := Minify(m, w, r, params)
+ test.Minify(t, tt.css, err, w.String(), tt.expected)
+ })
+ }
+}
+
+func TestReaderErrors(t *testing.T) {
+ r := test.NewErrorReader(0)
+ w := &bytes.Buffer{}
+ m := minify.New()
+ err := Minify(m, w, r, nil)
+ test.T(t, err, test.ErrPlain, "return error at first read")
+}
+
+func TestWriterErrors(t *testing.T) {
+ errorTests := []struct {
+ css string
+ n []int
+ }{
+ {`@import 'file'`, []int{0, 2}},
+ {`@media all{}`, []int{0, 2, 3, 4}},
+ {`a[id^="L"]{margin:2in!important;color:red}`, []int{0, 4, 6, 7, 8, 9, 10, 11}},
+ {`a{color:rgb(255,0,0)}`, []int{4}},
+ {`a{color:rgb(255,255,255)}`, []int{4}},
+ {`a{color:hsl(0,100%,50%)}`, []int{4}},
+ {`a{color:hsl(360,100%,100%)}`, []int{4}},
+ {`a{color:f(arg)}`, []int{4}},
+ {`<!--`, []int{0}},
+ {`/*!comment*/`, []int{0, 1, 2}},
+ {`a{--var:val}`, []int{2, 3, 4}},
+ {`a{*color:0}`, []int{2, 3}},
+ {`a{color:0;baddecl 5}`, []int{5}},
+ }
+
+ m := minify.New()
+ for _, tt := range errorTests {
+ for _, n := range tt.n {
+ t.Run(fmt.Sprint(tt.css, " ", tt.n), func(t *testing.T) {
+ r := bytes.NewBufferString(tt.css)
+ w := test.NewErrorWriter(n)
+ err := Minify(m, w, r, nil)
+ test.T(t, err, test.ErrPlain)
+ })
+ }
+ }
+}
+
+////////////////////////////////////////////////////////////////
+
+func ExampleMinify() {
+ m := minify.New()
+ m.AddFunc("text/css", Minify)
+
+ if err := m.Minify("text/css", os.Stdout, os.Stdin); err != nil {
+ panic(err)
+ }
+}
diff --git a/vendor/github.com/tdewolff/minify/css/table.go b/vendor/github.com/tdewolff/minify/css/table.go
new file mode 100644
index 0000000..331b314
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/css/table.go
@@ -0,0 +1,153 @@
+package css
+
+import "github.com/tdewolff/parse/css"
+
+var requiredDimension = map[string]bool{
+ "s": true,
+ "ms": true,
+ "dpi": true,
+ "dpcm": true,
+ "dppx": true,
+ "hz": true,
+ "khz": true,
+}
+
+// Uses http://www.w3.org/TR/2010/PR-css3-color-20101028/ for colors
+
+// ShortenColorHex maps a color hexcode to its shorter name
+var ShortenColorHex = map[string][]byte{
+ "#000080": []byte("navy"),
+ "#008000": []byte("green"),
+ "#008080": []byte("teal"),
+ "#4b0082": []byte("indigo"),
+ "#800000": []byte("maroon"),
+ "#800080": []byte("purple"),
+ "#808000": []byte("olive"),
+ "#808080": []byte("gray"),
+ "#a0522d": []byte("sienna"),
+ "#a52a2a": []byte("brown"),
+ "#c0c0c0": []byte("silver"),
+ "#cd853f": []byte("peru"),
+ "#d2b48c": []byte("tan"),
+ "#da70d6": []byte("orchid"),
+ "#dda0dd": []byte("plum"),
+ "#ee82ee": []byte("violet"),
+ "#f0e68c": []byte("khaki"),
+ "#f0ffff": []byte("azure"),
+ "#f5deb3": []byte("wheat"),
+ "#f5f5dc": []byte("beige"),
+ "#fa8072": []byte("salmon"),
+ "#faf0e6": []byte("linen"),
+ "#ff6347": []byte("tomato"),
+ "#ff7f50": []byte("coral"),
+ "#ffa500": []byte("orange"),
+ "#ffc0cb": []byte("pink"),
+ "#ffd700": []byte("gold"),
+ "#ffe4c4": []byte("bisque"),
+ "#fffafa": []byte("snow"),
+ "#fffff0": []byte("ivory"),
+ "#ff0000": []byte("red"),
+ "#f00": []byte("red"),
+}
+
+// ShortenColorName maps a color name to its shorter hexcode
+var ShortenColorName = map[css.Hash][]byte{
+ css.Black: []byte("#000"),
+ css.Darkblue: []byte("#00008b"),
+ css.Mediumblue: []byte("#0000cd"),
+ css.Darkgreen: []byte("#006400"),
+ css.Darkcyan: []byte("#008b8b"),
+ css.Deepskyblue: []byte("#00bfff"),
+ css.Darkturquoise: []byte("#00ced1"),
+ css.Mediumspringgreen: []byte("#00fa9a"),
+ css.Springgreen: []byte("#00ff7f"),
+ css.Midnightblue: []byte("#191970"),
+ css.Dodgerblue: []byte("#1e90ff"),
+ css.Lightseagreen: []byte("#20b2aa"),
+ css.Forestgreen: []byte("#228b22"),
+ css.Seagreen: []byte("#2e8b57"),
+ css.Darkslategray: []byte("#2f4f4f"),
+ css.Limegreen: []byte("#32cd32"),
+ css.Mediumseagreen: []byte("#3cb371"),
+ css.Turquoise: []byte("#40e0d0"),
+ css.Royalblue: []byte("#4169e1"),
+ css.Steelblue: []byte("#4682b4"),
+ css.Darkslateblue: []byte("#483d8b"),
+ css.Mediumturquoise: []byte("#48d1cc"),
+ css.Darkolivegreen: []byte("#556b2f"),
+ css.Cadetblue: []byte("#5f9ea0"),
+ css.Cornflowerblue: []byte("#6495ed"),
+ css.Mediumaquamarine: []byte("#66cdaa"),
+ css.Slateblue: []byte("#6a5acd"),
+ css.Olivedrab: []byte("#6b8e23"),
+ css.Slategray: []byte("#708090"),
+ css.Lightslateblue: []byte("#789"),
+ css.Mediumslateblue: []byte("#7b68ee"),
+ css.Lawngreen: []byte("#7cfc00"),
+ css.Chartreuse: []byte("#7fff00"),
+ css.Aquamarine: []byte("#7fffd4"),
+ css.Lightskyblue: []byte("#87cefa"),
+ css.Blueviolet: []byte("#8a2be2"),
+ css.Darkmagenta: []byte("#8b008b"),
+ css.Saddlebrown: []byte("#8b4513"),
+ css.Darkseagreen: []byte("#8fbc8f"),
+ css.Lightgreen: []byte("#90ee90"),
+ css.Mediumpurple: []byte("#9370db"),
+ css.Darkviolet: []byte("#9400d3"),
+ css.Palegreen: []byte("#98fb98"),
+ css.Darkorchid: []byte("#9932cc"),
+ css.Yellowgreen: []byte("#9acd32"),
+ css.Darkgray: []byte("#a9a9a9"),
+ css.Lightblue: []byte("#add8e6"),
+ css.Greenyellow: []byte("#adff2f"),
+ css.Paleturquoise: []byte("#afeeee"),
+ css.Lightsteelblue: []byte("#b0c4de"),
+ css.Powderblue: []byte("#b0e0e6"),
+ css.Firebrick: []byte("#b22222"),
+ css.Darkgoldenrod: []byte("#b8860b"),
+ css.Mediumorchid: []byte("#ba55d3"),
+ css.Rosybrown: []byte("#bc8f8f"),
+ css.Darkkhaki: []byte("#bdb76b"),
+ css.Mediumvioletred: []byte("#c71585"),
+ css.Indianred: []byte("#cd5c5c"),
+ css.Chocolate: []byte("#d2691e"),
+ css.Lightgray: []byte("#d3d3d3"),
+ css.Goldenrod: []byte("#daa520"),
+ css.Palevioletred: []byte("#db7093"),
+ css.Gainsboro: []byte("#dcdcdc"),
+ css.Burlywood: []byte("#deb887"),
+ css.Lightcyan: []byte("#e0ffff"),
+ css.Lavender: []byte("#e6e6fa"),
+ css.Darksalmon: []byte("#e9967a"),
+ css.Palegoldenrod: []byte("#eee8aa"),
+ css.Lightcoral: []byte("#f08080"),
+ css.Aliceblue: []byte("#f0f8ff"),
+ css.Honeydew: []byte("#f0fff0"),
+ css.Sandybrown: []byte("#f4a460"),
+ css.Whitesmoke: []byte("#f5f5f5"),
+ css.Mintcream: []byte("#f5fffa"),
+ css.Ghostwhite: []byte("#f8f8ff"),
+ css.Antiquewhite: []byte("#faebd7"),
+ css.Lightgoldenrodyellow: []byte("#fafad2"),
+ css.Fuchsia: []byte("#f0f"),
+ css.Magenta: []byte("#f0f"),
+ css.Deeppink: []byte("#ff1493"),
+ css.Orangered: []byte("#ff4500"),
+ css.Darkorange: []byte("#ff8c00"),
+ css.Lightsalmon: []byte("#ffa07a"),
+ css.Lightpink: []byte("#ffb6c1"),
+ css.Peachpuff: []byte("#ffdab9"),
+ css.Navajowhite: []byte("#ffdead"),
+ css.Moccasin: []byte("#ffe4b5"),
+ css.Mistyrose: []byte("#ffe4e1"),
+ css.Blanchedalmond: []byte("#ffebcd"),
+ css.Papayawhip: []byte("#ffefd5"),
+ css.Lavenderblush: []byte("#fff0f5"),
+ css.Seashell: []byte("#fff5ee"),
+ css.Cornsilk: []byte("#fff8dc"),
+ css.Lemonchiffon: []byte("#fffacd"),
+ css.Floralwhite: []byte("#fffaf0"),
+ css.Yellow: []byte("#ff0"),
+ css.Lightyellow: []byte("#ffffe0"),
+ css.White: []byte("#fff"),
+}
diff --git a/vendor/github.com/tdewolff/minify/html/buffer.go b/vendor/github.com/tdewolff/minify/html/buffer.go
new file mode 100644
index 0000000..8486bcb
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/html/buffer.go
@@ -0,0 +1,131 @@
+package html // import "github.com/tdewolff/minify/html"
+
+import (
+ "github.com/tdewolff/parse"
+ "github.com/tdewolff/parse/html"
+)
+
+// Token is a single token unit with an attribute value (if given) and hash of the data.
+type Token struct {
+ html.TokenType
+ Hash html.Hash
+ Data []byte
+ Text []byte
+ AttrVal []byte
+ Traits traits
+}
+
+// TokenBuffer is a buffer that allows for token look-ahead.
+type TokenBuffer struct {
+ l *html.Lexer
+
+ buf []Token
+ pos int
+
+ attrBuffer []*Token
+}
+
+// NewTokenBuffer returns a new TokenBuffer.
+func NewTokenBuffer(l *html.Lexer) *TokenBuffer {
+ return &TokenBuffer{
+ l: l,
+ buf: make([]Token, 0, 8),
+ }
+}
+
+func (z *TokenBuffer) read(t *Token) {
+ t.TokenType, t.Data = z.l.Next()
+ t.Text = z.l.Text()
+ if t.TokenType == html.AttributeToken {
+ t.AttrVal = z.l.AttrVal()
+ if len(t.AttrVal) > 1 && (t.AttrVal[0] == '"' || t.AttrVal[0] == '\'') {
+ t.AttrVal = parse.TrimWhitespace(t.AttrVal[1 : len(t.AttrVal)-1]) // quotes will be readded in attribute loop if necessary
+ }
+ t.Hash = html.ToHash(t.Text)
+ t.Traits = attrMap[t.Hash]
+ } else if t.TokenType == html.StartTagToken || t.TokenType == html.EndTagToken {
+ t.AttrVal = nil
+ t.Hash = html.ToHash(t.Text)
+ t.Traits = tagMap[t.Hash]
+ } else {
+ t.AttrVal = nil
+ t.Hash = 0
+ t.Traits = 0
+ }
+}
+
+// Peek returns the ith element and possibly does an allocation.
+// Peeking past an error will panic.
+func (z *TokenBuffer) Peek(pos int) *Token {
+ pos += z.pos
+ if pos >= len(z.buf) {
+ if len(z.buf) > 0 && z.buf[len(z.buf)-1].TokenType == html.ErrorToken {
+ return &z.buf[len(z.buf)-1]
+ }
+
+ c := cap(z.buf)
+ d := len(z.buf) - z.pos
+ p := pos - z.pos + 1 // required peek length
+ var buf []Token
+ if 2*p > c {
+ buf = make([]Token, 0, 2*c+p)
+ } else {
+ buf = z.buf
+ }
+ copy(buf[:d], z.buf[z.pos:])
+
+ buf = buf[:p]
+ pos -= z.pos
+ for i := d; i < p; i++ {
+ z.read(&buf[i])
+ if buf[i].TokenType == html.ErrorToken {
+ buf = buf[:i+1]
+ pos = i
+ break
+ }
+ }
+ z.pos, z.buf = 0, buf
+ }
+ return &z.buf[pos]
+}
+
+// Shift returns the first element and advances position.
+func (z *TokenBuffer) Shift() *Token {
+ if z.pos >= len(z.buf) {
+ t := &z.buf[:1][0]
+ z.read(t)
+ return t
+ }
+ t := &z.buf[z.pos]
+ z.pos++
+ return t
+}
+
+// Attributes extracts the gives attribute hashes from a tag.
+// It returns in the same order pointers to the requested token data or nil.
+func (z *TokenBuffer) Attributes(hashes ...html.Hash) []*Token {
+ n := 0
+ for {
+ if t := z.Peek(n); t.TokenType != html.AttributeToken {
+ break
+ }
+ n++
+ }
+ if len(hashes) > cap(z.attrBuffer) {
+ z.attrBuffer = make([]*Token, len(hashes))
+ } else {
+ z.attrBuffer = z.attrBuffer[:len(hashes)]
+ for i := range z.attrBuffer {
+ z.attrBuffer[i] = nil
+ }
+ }
+ for i := z.pos; i < z.pos+n; i++ {
+ attr := &z.buf[i]
+ for j, hash := range hashes {
+ if hash == attr.Hash {
+ z.attrBuffer[j] = attr
+ }
+ }
+ }
+ return z.attrBuffer
+}
diff --git a/vendor/github.com/tdewolff/minify/html/buffer_test.go b/vendor/github.com/tdewolff/minify/html/buffer_test.go
new file mode 100644
index 0000000..a220aff
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/html/buffer_test.go
@@ -0,0 +1,37 @@
+package html // import "github.com/tdewolff/minify/html"
+
+import (
+ "bytes"
+ "testing"
+
+ "github.com/tdewolff/parse/html"
+ "github.com/tdewolff/test"
+)
+
+func TestBuffer(t *testing.T) {
+ // 0 12 3 45 6 7 8 9 0
+ s := `<p><a href="//url">text</a>text<!--comment--></p>`
+ z := NewTokenBuffer(html.NewLexer(bytes.NewBufferString(s)))
+
+ tok := z.Shift()
+ test.That(t, tok.Hash == html.P, "first token is <p>")
+ test.That(t, z.pos == 0, "shift first token and restore position")
+ test.That(t, len(z.buf) == 0, "shift first token and restore length")
+
+ test.That(t, z.Peek(2).Hash == html.Href, "third token is href")
+ test.That(t, z.pos == 0, "don't change position after peeking")
+ test.That(t, len(z.buf) == 3, "two tokens after peeking")
+
+ test.That(t, z.Peek(8).Hash == html.P, "ninth token is <p>")
+ test.That(t, z.pos == 0, "don't change position after peeking")
+ test.That(t, len(z.buf) == 9, "nine tokens after peeking")
+
+ test.That(t, z.Peek(9).TokenType == html.ErrorToken, "tenth token is an error")
+ test.That(t, z.Peek(9) == z.Peek(10), "tenth and eleventh tokens are EOF")
+ test.That(t, len(z.buf) == 10, "ten tokens after peeking")
+
+ _ = z.Shift()
+ tok = z.Shift()
+ test.That(t, tok.Hash == html.A, "third token is <a>")
+ test.That(t, z.pos == 2, "don't change position after peeking")
+}
diff --git a/vendor/github.com/tdewolff/minify/html/html.go b/vendor/github.com/tdewolff/minify/html/html.go
new file mode 100644
index 0000000..e6236f0
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/html/html.go
@@ -0,0 +1,463 @@
+// Package html minifies HTML5 following the specifications at http://www.w3.org/TR/html5/syntax.html.
+package html // import "github.com/tdewolff/minify/html"
+
+import (
+ "bytes"
+ "io"
+
+ "github.com/tdewolff/minify"
+ "github.com/tdewolff/parse"
+ "github.com/tdewolff/parse/buffer"
+ "github.com/tdewolff/parse/html"
+)
+
+var (
+ gtBytes = []byte(">")
+ isBytes = []byte("=")
+ spaceBytes = []byte(" ")
+ doctypeBytes = []byte("<!doctype html>")
+ jsMimeBytes = []byte("text/javascript")
+ cssMimeBytes = []byte("text/css")
+ htmlMimeBytes = []byte("text/html")
+ svgMimeBytes = []byte("image/svg+xml")
+ mathMimeBytes = []byte("application/mathml+xml")
+ dataSchemeBytes = []byte("data:")
+ jsSchemeBytes = []byte("javascript:")
+ httpBytes = []byte("http")
+)
+
+////////////////////////////////////////////////////////////////
+
+// DefaultMinifier is the default minifier.
+var DefaultMinifier = &Minifier{}
+
+// Minifier is an HTML minifier.
+type Minifier struct {
+ KeepConditionalComments bool
+ KeepDefaultAttrVals bool
+ KeepDocumentTags bool
+ KeepEndTags bool
+ KeepWhitespace bool
+}
+
+// Minify minifies HTML data, it reads from r and writes to w.
+func Minify(m *minify.M, w io.Writer, r io.Reader, params map[string]string) error {
+ return DefaultMinifier.Minify(m, w, r, params)
+}
+
+// Minify minifies HTML data, it reads from r and writes to w.
+func (o *Minifier) Minify(m *minify.M, w io.Writer, r io.Reader, _ map[string]string) error {
+ var rawTagHash html.Hash
+ var rawTagMediatype []byte
+
+ omitSpace := true // if true the next leading space is omitted
+ inPre := false
+
+ defaultScriptType := jsMimeBytes
+ defaultScriptParams := map[string]string(nil)
+ defaultStyleType := cssMimeBytes
+ defaultStyleParams := map[string]string(nil)
+ defaultInlineStyleParams := map[string]string{"inline": "1"}
+
+ attrMinifyBuffer := buffer.NewWriter(make([]byte, 0, 64))
+ attrByteBuffer := make([]byte, 0, 64)
+
+ l := html.NewLexer(r)
+ defer l.Restore()
+
+ tb := NewTokenBuffer(l)
+ for {
+ t := *tb.Shift()
+ SWITCH:
+ switch t.TokenType {
+ case html.ErrorToken:
+ if l.Err() == io.EOF {
+ return nil
+ }
+ return l.Err()
+ case html.DoctypeToken:
+ if _, err := w.Write(doctypeBytes); err != nil {
+ return err
+ }
+ case html.CommentToken:
+ if o.KeepConditionalComments && len(t.Text) > 6 && (bytes.HasPrefix(t.Text, []byte("[if ")) || bytes.Equal(t.Text, []byte("[endif]"))) {
+ // [if ...] is always 7 or more characters, [endif] is only encountered for downlevel-revealed
+ // see https://msdn.microsoft.com/en-us/library/ms537512(v=vs.85).aspx#syntax
+ if bytes.HasPrefix(t.Data, []byte("<!--[if ")) { // downlevel-hidden
+ begin := bytes.IndexByte(t.Data, '>') + 1
+ end := len(t.Data) - len("<![endif]-->")
+ if _, err := w.Write(t.Data[:begin]); err != nil {
+ return err
+ }
+ if err := o.Minify(m, w, buffer.NewReader(t.Data[begin:end]), nil); err != nil {
+ return err
+ }
+ if _, err := w.Write(t.Data[end:]); err != nil {
+ return err
+ }
+ } else if _, err := w.Write(t.Data); err != nil { // downlevel-revealed
+ return err
+ }
+ }
+ case html.SvgToken:
+ if err := m.MinifyMimetype(svgMimeBytes, w, buffer.NewReader(t.Data), nil); err != nil {
+ if err != minify.ErrNotExist {
+ return err
+ } else if _, err := w.Write(t.Data); err != nil {
+ return err
+ }
+ }
+ case html.MathToken:
+ if err := m.MinifyMimetype(mathMimeBytes, w, buffer.NewReader(t.Data), nil); err != nil {
+ if err != minify.ErrNotExist {
+ return err
+ } else if _, err := w.Write(t.Data); err != nil {
+ return err
+ }
+ }
+ case html.TextToken:
+ // CSS and JS minifiers for inline code
+ if rawTagHash != 0 {
+ if rawTagHash == html.Style || rawTagHash == html.Script || rawTagHash == html.Iframe {
+ var mimetype []byte
+ var params map[string]string
+ if rawTagHash == html.Iframe {
+ mimetype = htmlMimeBytes
+ } else if len(rawTagMediatype) > 0 {
+ mimetype, params = parse.Mediatype(rawTagMediatype)
+ } else if rawTagHash == html.Script {
+ mimetype = defaultScriptType
+ params = defaultScriptParams
+ } else if rawTagHash == html.Style {
+ mimetype = defaultStyleType
+ params = defaultStyleParams
+ }
+ if err := m.MinifyMimetype(mimetype, w, buffer.NewReader(t.Data), params); err != nil {
+ if err != minify.ErrNotExist {
+ return err
+ } else if _, err := w.Write(t.Data); err != nil {
+ return err
+ }
+ }
+ } else if _, err := w.Write(t.Data); err != nil {
+ return err
+ }
+ } else if inPre {
+ if _, err := w.Write(t.Data); err != nil {
+ return err
+ }
+ } else {
+ t.Data = parse.ReplaceMultipleWhitespace(t.Data)
+
+ // whitespace removal; trim left
+ if omitSpace && (t.Data[0] == ' ' || t.Data[0] == '\n') {
+ t.Data = t.Data[1:]
+ }
+
+ // whitespace removal; trim right
+ omitSpace = false
+ if len(t.Data) == 0 {
+ omitSpace = true
+ } else if t.Data[len(t.Data)-1] == ' ' || t.Data[len(t.Data)-1] == '\n' {
+ omitSpace = true
+ i := 0
+ for {
+ next := tb.Peek(i)
+ // trim if EOF, text token with leading whitespace or block token
+ if next.TokenType == html.ErrorToken {
+ t.Data = t.Data[:len(t.Data)-1]
+ omitSpace = false
+ break
+ } else if next.TokenType == html.TextToken {
+ // this only happens when a comment, doctype or phrasing end tag (only for !o.KeepWhitespace) was in between
+ // remove if the text token starts with a whitespace
+ if len(next.Data) > 0 && parse.IsWhitespace(next.Data[0]) {
+ t.Data = t.Data[:len(t.Data)-1]
+ omitSpace = false
+ }
+ break
+ } else if next.TokenType == html.StartTagToken || next.TokenType == html.EndTagToken {
+ if o.KeepWhitespace {
+ break
+ }
+ // remove when followed up by a block tag
+ if next.Traits&nonPhrasingTag != 0 {
+ t.Data = t.Data[:len(t.Data)-1]
+ omitSpace = false
+ break
+ } else if next.TokenType == html.StartTagToken {
+ break
+ }
+ }
+ i++
+ }
+ }
+
+ if _, err := w.Write(t.Data); err != nil {
+ return err
+ }
+ }
+ case html.StartTagToken, html.EndTagToken:
+ rawTagHash = 0
+ hasAttributes := false
+ if t.TokenType == html.StartTagToken {
+ if next := tb.Peek(0); next.TokenType == html.AttributeToken {
+ hasAttributes = true
+ }
+ if t.Traits&rawTag != 0 {
+ // ignore empty script and style tags
+ if !hasAttributes && (t.Hash == html.Script || t.Hash == html.Style) {
+ if next := tb.Peek(1); next.TokenType == html.EndTagToken {
+ tb.Shift()
+ tb.Shift()
+ break
+ }
+ }
+ rawTagHash = t.Hash
+ rawTagMediatype = nil
+ }
+ } else if t.Hash == html.Template {
+ omitSpace = true // EndTagToken
+ }
+
+ if t.Hash == html.Pre {
+ inPre = t.TokenType == html.StartTagToken
+ }
+
+ // remove superfluous tags, except for html, head and body tags when KeepDocumentTags is set
+ if !hasAttributes && (!o.KeepDocumentTags && (t.Hash == html.Html || t.Hash == html.Head || t.Hash == html.Body) || t.Hash == html.Colgroup) {
+ break
+ } else if t.TokenType == html.EndTagToken {
+ if !o.KeepEndTags {
+ if t.Hash == html.Thead || t.Hash == html.Tbody || t.Hash == html.Tfoot || t.Hash == html.Tr || t.Hash == html.Th || t.Hash == html.Td ||
+ t.Hash == html.Optgroup || t.Hash == html.Option || t.Hash == html.Dd || t.Hash == html.Dt ||
+ t.Hash == html.Li || t.Hash == html.Rb || t.Hash == html.Rt || t.Hash == html.Rtc || t.Hash == html.Rp {
+ break
+ } else if t.Hash == html.P {
+ i := 0
+ for {
+ next := tb.Peek(i)
+ i++
+ // continue if text token is empty or whitespace
+ if next.TokenType == html.TextToken && parse.IsAllWhitespace(next.Data) {
+ continue
+ }
+ if next.TokenType == html.ErrorToken || next.TokenType == html.EndTagToken && next.Traits&keepPTag == 0 || next.TokenType == html.StartTagToken && next.Traits&omitPTag != 0 {
+ break SWITCH // omit p end tag
+ }
+ break
+ }
+ }
+ }
+
+ if o.KeepWhitespace || t.Traits&objectTag != 0 {
+ omitSpace = false
+ } else if t.Traits&nonPhrasingTag != 0 {
+ omitSpace = true // omit spaces after block elements
+ }
+
+ if len(t.Data) > 3+len(t.Text) {
+ t.Data[2+len(t.Text)] = '>'
+ t.Data = t.Data[:3+len(t.Text)]
+ }
+ if _, err := w.Write(t.Data); err != nil {
+ return err
+ }
+ break
+ }
+
+ if o.KeepWhitespace || t.Traits&objectTag != 0 {
+ omitSpace = false
+ } else if t.Traits&nonPhrasingTag != 0 {
+ omitSpace = true // omit spaces after block elements
+ }
+
+ if _, err := w.Write(t.Data); err != nil {
+ return err
+ }
+
+ if hasAttributes {
+ if t.Hash == html.Meta {
+ attrs := tb.Attributes(html.Content, html.Http_Equiv, html.Charset, html.Name)
+ if content := attrs[0]; content != nil {
+ if httpEquiv := attrs[1]; httpEquiv != nil {
+ content.AttrVal = minify.ContentType(content.AttrVal)
+ if charset := attrs[2]; charset == nil && parse.EqualFold(httpEquiv.AttrVal, []byte("content-type")) && bytes.Equal(content.AttrVal, []byte("text/html;charset=utf-8")) {
+ httpEquiv.Text = nil
+ content.Text = []byte("charset")
+ content.Hash = html.Charset
+ content.AttrVal = []byte("utf-8")
+ } else if parse.EqualFold(httpEquiv.AttrVal, []byte("content-style-type")) {
+ defaultStyleType, defaultStyleParams = parse.Mediatype(content.AttrVal)
+ if defaultStyleParams != nil {
+ defaultInlineStyleParams = defaultStyleParams
+ defaultInlineStyleParams["inline"] = "1"
+ } else {
+ defaultInlineStyleParams = map[string]string{"inline": "1"}
+ }
+ } else if parse.EqualFold(httpEquiv.AttrVal, []byte("content-script-type")) {
+ defaultScriptType, defaultScriptParams = parse.Mediatype(content.AttrVal)
+ }
+ }
+ if name := attrs[3]; name != nil {
+ if parse.EqualFold(name.AttrVal, []byte("keywords")) {
+ content.AttrVal = bytes.Replace(content.AttrVal, []byte(", "), []byte(","), -1)
+ } else if parse.EqualFold(name.AttrVal, []byte("viewport")) {
+ content.AttrVal = bytes.Replace(content.AttrVal, []byte(" "), []byte(""), -1)
+ for i := 0; i < len(content.AttrVal); i++ {
+ if content.AttrVal[i] == '=' && i+2 < len(content.AttrVal) {
+ i++
+ if n := parse.Number(content.AttrVal[i:]); n > 0 {
+ minNum := minify.Number(content.AttrVal[i:i+n], -1)
+ if len(minNum) < n {
+ copy(content.AttrVal[i:i+len(minNum)], minNum)
+ copy(content.AttrVal[i+len(minNum):], content.AttrVal[i+n:])
+ content.AttrVal = content.AttrVal[:len(content.AttrVal)+len(minNum)-n]
+ }
+ i += len(minNum)
+ }
+ i-- // mitigate for-loop increase
+ }
+ }
+ }
+ }
+ }
+ } else if t.Hash == html.Script {
+ attrs := tb.Attributes(html.Src, html.Charset)
+ if attrs[0] != nil && attrs[1] != nil {
+ attrs[1].Text = nil
+ }
+ }
+
+ // write attributes
+ htmlEqualIdName := false
+ for {
+ attr := *tb.Shift()
+ if attr.TokenType != html.AttributeToken {
+ break
+ } else if attr.Text == nil {
+ continue // removed attribute
+ }
+
+ if t.Hash == html.A && (attr.Hash == html.Id || attr.Hash == html.Name) {
+ if attr.Hash == html.Id {
+ if name := tb.Attributes(html.Name)[0]; name != nil && bytes.Equal(attr.AttrVal, name.AttrVal) {
+ htmlEqualIdName = true
+ }
+ } else if htmlEqualIdName {
+ continue
+ } else if id := tb.Attributes(html.Id)[0]; id != nil && bytes.Equal(id.AttrVal, attr.AttrVal) {
+ continue
+ }
+ }
+
+ val := attr.AttrVal
+ if len(val) == 0 && (attr.Hash == html.Class ||
+ attr.Hash == html.Dir ||
+ attr.Hash == html.Id ||
+ attr.Hash == html.Lang ||
+ attr.Hash == html.Name ||
+ attr.Hash == html.Title ||
+ attr.Hash == html.Action && t.Hash == html.Form ||
+ attr.Hash == html.Value && t.Hash == html.Input) {
+ continue // omit empty attribute values
+ }
+ if attr.Traits&caselessAttr != 0 {
+ val = parse.ToLower(val)
+ if attr.Hash == html.Enctype || attr.Hash == html.Codetype || attr.Hash == html.Accept || attr.Hash == html.Type && (t.Hash == html.A || t.Hash == html.Link || t.Hash == html.Object || t.Hash == html.Param || t.Hash == html.Script || t.Hash == html.Style || t.Hash == html.Source) {
+ val = minify.ContentType(val)
+ }
+ }
+ if rawTagHash != 0 && attr.Hash == html.Type {
+ rawTagMediatype = parse.Copy(val)
+ }
+
+ // default attribute values can be omitted
+ if !o.KeepDefaultAttrVals && (attr.Hash == html.Type && (t.Hash == html.Script && bytes.Equal(val, []byte("text/javascript")) ||
+ t.Hash == html.Style && bytes.Equal(val, []byte("text/css")) ||
+ t.Hash == html.Link && bytes.Equal(val, []byte("text/css")) ||
+ t.Hash == html.Input && bytes.Equal(val, []byte("text")) ||
+ t.Hash == html.Button && bytes.Equal(val, []byte("submit"))) ||
+ attr.Hash == html.Language && t.Hash == html.Script ||
+ attr.Hash == html.Method && bytes.Equal(val, []byte("get")) ||
+ attr.Hash == html.Enctype && bytes.Equal(val, []byte("application/x-www-form-urlencoded")) ||
+ attr.Hash == html.Colspan && bytes.Equal(val, []byte("1")) ||
+ attr.Hash == html.Rowspan && bytes.Equal(val, []byte("1")) ||
+ attr.Hash == html.Shape && bytes.Equal(val, []byte("rect")) ||
+ attr.Hash == html.Span && bytes.Equal(val, []byte("1")) ||
+ attr.Hash == html.Clear && bytes.Equal(val, []byte("none")) ||
+ attr.Hash == html.Frameborder && bytes.Equal(val, []byte("1")) ||
+ attr.Hash == html.Scrolling && bytes.Equal(val, []byte("auto")) ||
+ attr.Hash == html.Valuetype && bytes.Equal(val, []byte("data")) ||
+ attr.Hash == html.Media && t.Hash == html.Style && bytes.Equal(val, []byte("all"))) {
+ continue
+ }
+
+ // CSS and JS minifiers for attribute inline code
+ if attr.Hash == html.Style {
+ attrMinifyBuffer.Reset()
+ if err := m.MinifyMimetype(defaultStyleType, attrMinifyBuffer, buffer.NewReader(val), defaultInlineStyleParams); err == nil {
+ val = attrMinifyBuffer.Bytes()
+ } else if err != minify.ErrNotExist {
+ return err
+ }
+ if len(val) == 0 {
+ continue
+ }
+ } else if len(attr.Text) > 2 && attr.Text[0] == 'o' && attr.Text[1] == 'n' {
+ if len(val) >= 11 && parse.EqualFold(val[:11], jsSchemeBytes) {
+ val = val[11:]
+ }
+ attrMinifyBuffer.Reset()
+ if err := m.MinifyMimetype(defaultScriptType, attrMinifyBuffer, buffer.NewReader(val), defaultScriptParams); err == nil {
+ val = attrMinifyBuffer.Bytes()
+ } else if err != minify.ErrNotExist {
+ return err
+ }
+ if len(val) == 0 {
+ continue
+ }
+ } else if len(val) > 5 && attr.Traits&urlAttr != 0 { // anchors are already handled
+ if parse.EqualFold(val[:4], httpBytes) {
+ if val[4] == ':' {
+ if m.URL != nil && m.URL.Scheme == "http" {
+ val = val[5:]
+ } else {
+ parse.ToLower(val[:4])
+ }
+ } else if (val[4] == 's' || val[4] == 'S') && val[5] == ':' {
+ if m.URL != nil && m.URL.Scheme == "https" {
+ val = val[6:]
+ } else {
+ parse.ToLower(val[:5])
+ }
+ }
+ } else if parse.EqualFold(val[:5], dataSchemeBytes) {
+ val = minify.DataURI(m, val)
+ }
+ }
+
+ if _, err := w.Write(spaceBytes); err != nil {
+ return err
+ }
+ if _, err := w.Write(attr.Text); err != nil {
+ return err
+ }
+ if len(val) > 0 && attr.Traits&booleanAttr == 0 {
+ if _, err := w.Write(isBytes); err != nil {
+ return err
+ }
+ // no quotes if possible, else prefer single or double depending on which occurs more often in value
+ val = html.EscapeAttrVal(&attrByteBuffer, attr.AttrVal, val)
+ if _, err := w.Write(val); err != nil {
+ return err
+ }
+ }
+ }
+ }
+ if _, err := w.Write(gtBytes); err != nil {
+ return err
+ }
+ }
+ }
+}
diff --git a/vendor/github.com/tdewolff/minify/html/html_test.go b/vendor/github.com/tdewolff/minify/html/html_test.go
new file mode 100644
index 0000000..9201c40
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/html/html_test.go
@@ -0,0 +1,408 @@
+package html // import "github.com/tdewolff/minify/html"
+
+import (
+ "bytes"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "net/url"
+ "os"
+ "regexp"
+ "testing"
+
+ "github.com/tdewolff/minify"
+ "github.com/tdewolff/minify/css"
+ "github.com/tdewolff/minify/js"
+ "github.com/tdewolff/minify/json"
+ "github.com/tdewolff/minify/svg"
+ "github.com/tdewolff/minify/xml"
+ "github.com/tdewolff/test"
+)
+
+func TestHTML(t *testing.T) {
+ htmlTests := []struct {
+ html string
+ expected string
+ }{
+ {`html`, `html`},
+ {`<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">`, `<!doctype html>`},
+ {`<!-- comment -->`, ``},
+ {`<style><!--\ncss\n--></style>`, `<style><!--\ncss\n--></style>`},
+ {`<style>&</style>`, `<style>&</style>`},
+ {`<html><head></head><body>x</body></html>`, `x`},
+ {`<meta http-equiv="content-type" content="text/html; charset=utf-8">`, `<meta charset=utf-8>`},
+ {`<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />`, `<meta charset=utf-8>`},
+ {`<meta name="keywords" content="a, b">`, `<meta name=keywords content=a,b>`},
+ {`<meta name="viewport" content="width = 996" />`, `<meta name=viewport content="width=996">`},
+ {`<span attr="test"></span>`, `<span attr=test></span>`},
+ {`<span attr='test&apos;test'></span>`, `<span attr="test'test"></span>`},
+ {`<span attr="test&quot;test"></span>`, `<span attr='test"test'></span>`},
+ {`<span attr='test""&apos;&amp;test'></span>`, `<span attr='test""&#39;&amp;test'></span>`},
+ {`<span attr="test/test"></span>`, `<span attr=test/test></span>`},
+ {`<span>&amp;</span>`, `<span>&amp;</span>`},
+ {`<span clear=none method=GET></span>`, `<span></span>`},
+ {`<span onload="javascript:x;"></span>`, `<span onload=x;></span>`},
+ {`<span selected="selected"></span>`, `<span selected></span>`},
+ {`<noscript><html><img id="x"></noscript>`, `<noscript><img id=x></noscript>`},
+ {`<body id="main"></body>`, `<body id=main>`},
+ {`<link href="data:text/plain, data">`, `<link href=data:,+data>`},
+ {`<svg width="100" height="100"><circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" /></svg>`, `<svg width="100" height="100"><circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" /></svg>`},
+ {`</span >`, `</span>`},
+ {`<meta name=viewport content="width=0.1, initial-scale=1.0 , maximum-scale=1000">`, `<meta name=viewport content="width=.1,initial-scale=1,maximum-scale=1e3">`},
+ {`<br/>`, `<br>`},
+
+ // increase coverage
+ {`<script style="css">js</script>`, `<script style=css>js</script>`},
+ {`<script type="application/javascript">js</script>`, `<script type=application/javascript>js</script>`},
+ {`<meta http-equiv="content-type" content="text/plain, text/html">`, `<meta http-equiv=content-type content=text/plain,text/html>`},
+ {`<meta http-equiv="content-style-type" content="text/less">`, `<meta http-equiv=content-style-type content=text/less>`},
+ {`<meta http-equiv="content-style-type" content="text/less; charset=utf-8">`, `<meta http-equiv=content-style-type content="text/less;charset=utf-8">`},
+ {`<meta http-equiv="content-script-type" content="application/js">`, `<meta http-equiv=content-script-type content=application/js>`},
+ {`<span attr=""></span>`, `<span attr></span>`},
+ {`<code>x</code>`, `<code>x</code>`},
+ {`<p></p><p></p>`, `<p><p>`},
+ {`<ul><li></li> <li></li></ul>`, `<ul><li><li></ul>`},
+ {`<p></p><a></a>`, `<p></p><a></a>`},
+ {`<p></p>x<a></a>`, `<p></p>x<a></a>`},
+ {`<span style=>`, `<span>`},
+ {`<button onclick=>`, `<button>`},
+
+ // whitespace
+ {`cats and dogs `, `cats and dogs`},
+ {` <div> <i> test </i> <b> test </b> </div> `, `<div><i>test</i> <b>test</b></div>`},
+ {`<strong>x </strong>y`, `<strong>x </strong>y`},
+ {`<strong>x </strong> y`, `<strong>x</strong> y`},
+ {"<strong>x </strong>\ny", "<strong>x</strong>\ny"},
+ {`<p>x </p>y`, `<p>x</p>y`},
+ {`x <p>y</p>`, `x<p>y`},
+ {` <!doctype html> <!--comment--> <html> <body><p></p></body></html> `, `<!doctype html><p>`}, // spaces before html and at the start of html are dropped
+ {`<p>x<br> y`, `<p>x<br>y`},
+ {`<p>x </b> <b> y`, `<p>x</b> <b>y`},
+ {`a <code></code> b`, `a <code></code>b`},
+ {`a <code>code</code> b`, `a <code>code</code> b`},
+ {`a <code> code </code> b`, `a <code>code</code> b`},
+ {`a <script>script</script> b`, `a <script>script</script>b`},
+ {"text\n<!--comment-->\ntext", "text\ntext"},
+ {"abc\n</body>\ndef", "abc\ndef"},
+ {"<x>\n<!--y-->\n</x>", "<x></x>"},
+ {"a <template> b </template> c", "a <template>b</template>c"},
+
+ // from HTML Minifier
+ {`<DIV TITLE="blah">boo</DIV>`, `<div title=blah>boo</div>`},
+ {"<p title\n\n\t =\n \"bar\">foo</p>", `<p title=bar>foo`},
+ {`<p class=" foo ">foo bar baz</p>`, `<p class=foo>foo bar baz`},
+ {`<input maxlength=" 5 ">`, `<input maxlength=5>`},
+ {`<input type="text">`, `<input>`},
+ {`<form method="get">`, `<form>`},
+ {`<script language="Javascript">alert(1)</script>`, `<script>alert(1)</script>`},
+ {`<script></script>`, ``},
+ {`<p onclick=" JavaScript: x">x</p>`, `<p onclick=" x">x`},
+ {`<span Selected="selected"></span>`, `<span selected></span>`},
+ {`<table><thead><tr><th>foo</th><th>bar</th></tr></thead><tfoot><tr><th>baz</th><th>qux</th></tr></tfoot><tbody><tr><td>boo</td><td>moo</td></tr></tbody></table>`,
+ `<table><thead><tr><th>foo<th>bar<tfoot><tr><th>baz<th>qux<tbody><tr><td>boo<td>moo</table>`},
+ {`<select><option>foo</option><option>bar</option></select>`, `<select><option>foo<option>bar</select>`},
+ {`<meta name="keywords" content="A, B">`, `<meta name=keywords content=A,B>`},
+ {`<iframe><html> <p> x </p> </html></iframe>`, `<iframe><p>x</iframe>`},
+ {`<math> &int;_a_^b^{f(x)<over>1+x} dx </math>`, `<math> &int;_a_^b^{f(x)<over>1+x} dx </math>`},
+ {`<script language="x" charset="x" src="y"></script>`, `<script src=y></script>`},
+ {`<style media="all">x</style>`, `<style>x</style>`},
+ {`<a id="abc" name="abc">y</a>`, `<a id=abc>y</a>`},
+ {`<a id="" value="">y</a>`, `<a value>y</a>`},
+
+ // from Kangax html-minfier
+ {`<span style="font-family:&quot;Helvetica Neue&quot;,&quot;Helvetica&quot;,Helvetica,Arial,sans-serif">text</span>`, `<span style='font-family:"Helvetica Neue","Helvetica",Helvetica,Arial,sans-serif'>text</span>`},
+
+ // go-fuzz
+ {`<meta e t n content=ful><a b`, `<meta e t n content=ful><a b>`},
+ {`<img alt=a'b="">`, `<img alt='a&#39;b=""'>`},
+ {`</b`, `</b`},
+
+ // bugs
+ {`<p>text</p><br>text`, `<p>text</p><br>text`}, // #122
+ {`text <img> text`, `text <img> text`}, // #89
+ {`text <progress></progress> text`, `text <progress></progress> text`}, // #89
+ {`<pre> <x> a b </x> </pre>`, `<pre> <x> a b </x> </pre>`}, // #82
+ {`<svg id="1"></svg>`, `<svg id="1"></svg>`}, // #67
+ }
+
+ m := minify.New()
+ m.AddFunc("text/html", Minify)
+ m.AddFunc("text/css", func(_ *minify.M, w io.Writer, r io.Reader, _ map[string]string) error {
+ _, err := io.Copy(w, r)
+ return err
+ })
+ m.AddFunc("text/javascript", func(_ *minify.M, w io.Writer, r io.Reader, _ map[string]string) error {
+ _, err := io.Copy(w, r)
+ return err
+ })
+ for _, tt := range htmlTests {
+ t.Run(tt.html, func(t *testing.T) {
+ r := bytes.NewBufferString(tt.html)
+ w := &bytes.Buffer{}
+ err := Minify(m, w, r, nil)
+ test.Minify(t, tt.html, err, w.String(), tt.expected)
+ })
+ }
+}
+
+func TestHTMLKeepEndTags(t *testing.T) {
+ htmlTests := []struct {
+ html string
+ expected string
+ }{
+ {`<p></p><p></p>`, `<p></p><p></p>`},
+ {`<ul><li></li><li></li></ul>`, `<ul><li></li><li></li></ul>`},
+ }
+
+ m := minify.New()
+ htmlMinifier := &Minifier{KeepEndTags: true}
+ for _, tt := range htmlTests {
+ t.Run(tt.html, func(t *testing.T) {
+ r := bytes.NewBufferString(tt.html)
+ w := &bytes.Buffer{}
+ err := htmlMinifier.Minify(m, w, r, nil)
+ test.Minify(t, tt.html, err, w.String(), tt.expected)
+ })
+ }
+}
+
+func TestHTMLKeepConditionalComments(t *testing.T) {
+ htmlTests := []struct {
+ html string
+ expected string
+ }{
+ {`<!--[if IE 6]> <b> </b> <![endif]-->`, `<!--[if IE 6]><b></b><![endif]-->`},
+ {`<![if IE 6]> <b> </b> <![endif]>`, `<![if IE 6]><b></b><![endif]>`},
+ }
+
+ m := minify.New()
+ htmlMinifier := &Minifier{KeepConditionalComments: true}
+ for _, tt := range htmlTests {
+ t.Run(tt.html, func(t *testing.T) {
+ r := bytes.NewBufferString(tt.html)
+ w := &bytes.Buffer{}
+ err := htmlMinifier.Minify(m, w, r, nil)
+ test.Minify(t, tt.html, err, w.String(), tt.expected)
+ })
+ }
+}
+
+func TestHTMLKeepWhitespace(t *testing.T) {
+ htmlTests := []struct {
+ html string
+ expected string
+ }{
+ {`cats and dogs `, `cats and dogs`},
+ {` <div> <i> test </i> <b> test </b> </div> `, `<div> <i> test </i> <b> test </b> </div>`},
+ {`<strong>x </strong>y`, `<strong>x </strong>y`},
+ {`<strong>x </strong> y`, `<strong>x </strong> y`},
+ {"<strong>x </strong>\ny", "<strong>x </strong>\ny"},
+ {`<p>x </p>y`, `<p>x </p>y`},
+ {`x <p>y</p>`, `x <p>y`},
+ {` <!doctype html> <!--comment--> <html> <body><p></p></body></html> `, `<!doctype html><p>`}, // spaces before html and at the start of html are dropped
+ {`<p>x<br> y`, `<p>x<br> y`},
+ {`<p>x </b> <b> y`, `<p>x </b> <b> y`},
+ {`a <code>code</code> b`, `a <code>code</code> b`},
+ {`a <code></code> b`, `a <code></code> b`},
+ {`a <script>script</script> b`, `a <script>script</script> b`},
+ {"text\n<!--comment-->\ntext", "text\ntext"},
+ {"text\n<!--comment-->text<!--comment--> text", "text\ntext text"},
+ {"abc\n</body>\ndef", "abc\ndef"},
+ {"<x>\n<!--y-->\n</x>", "<x>\n</x>"},
+ {"<style>lala{color:red}</style>", "<style>lala{color:red}</style>"},
+ }
+
+ m := minify.New()
+ htmlMinifier := &Minifier{KeepWhitespace: true}
+ for _, tt := range htmlTests {
+ t.Run(tt.html, func(t *testing.T) {
+ r := bytes.NewBufferString(tt.html)
+ w := &bytes.Buffer{}
+ err := htmlMinifier.Minify(m, w, r, nil)
+ test.Minify(t, tt.html, err, w.String(), tt.expected)
+ })
+ }
+}
+
+func TestHTMLURL(t *testing.T) {
+ htmlTests := []struct {
+ url string
+ html string
+ expected string
+ }{
+ {`http://example.com/`, `<a href=http://example.com/>link</a>`, `<a href=//example.com/>link</a>`},
+ {`https://example.com/`, `<a href=http://example.com/>link</a>`, `<a href=http://example.com/>link</a>`},
+ {`http://example.com/`, `<a href=https://example.com/>link</a>`, `<a href=https://example.com/>link</a>`},
+ {`https://example.com/`, `<a href=https://example.com/>link</a>`, `<a href=//example.com/>link</a>`},
+ {`http://example.com/`, `<a href=" http://example.com ">x</a>`, `<a href=//example.com>x</a>`},
+ {`http://example.com/`, `<link rel="stylesheet" type="text/css" href="http://example.com">`, `<link rel=stylesheet href=//example.com>`},
+ {`http://example.com/`, `<!doctype html> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head profile="http://dublincore.org/documents/dcq-html/"> <!-- Barlesque 2.75.0 --> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />`,
+ `<!doctype html><html xmlns=//www.w3.org/1999/xhtml xml:lang=en><head profile=//dublincore.org/documents/dcq-html/><meta charset=utf-8>`},
+ {`http://example.com/`, `<html xmlns="http://www.w3.org/1999/xhtml"></html>`, `<html xmlns=//www.w3.org/1999/xhtml>`},
+ {`https://example.com/`, `<html xmlns="http://www.w3.org/1999/xhtml"></html>`, `<html xmlns=http://www.w3.org/1999/xhtml>`},
+ {`http://example.com/`, `<html xmlns="https://www.w3.org/1999/xhtml"></html>`, `<html xmlns=https://www.w3.org/1999/xhtml>`},
+ {`https://example.com/`, `<html xmlns="https://www.w3.org/1999/xhtml"></html>`, `<html xmlns=//www.w3.org/1999/xhtml>`},
+ }
+
+ m := minify.New()
+ m.AddFunc("text/html", Minify)
+ for _, tt := range htmlTests {
+ t.Run(tt.url, func(t *testing.T) {
+ r := bytes.NewBufferString(tt.html)
+ w := &bytes.Buffer{}
+ m.URL, _ = url.Parse(tt.url)
+ err := Minify(m, w, r, nil)
+ test.Minify(t, tt.html, err, w.String(), tt.expected)
+ })
+ }
+}
+
+func TestSpecialTagClosing(t *testing.T) {
+ m := minify.New()
+ m.AddFunc("text/html", Minify)
+ m.AddFunc("text/css", func(_ *minify.M, w io.Writer, r io.Reader, _ map[string]string) error {
+ b, err := ioutil.ReadAll(r)
+ test.Error(t, err, nil)
+ test.String(t, string(b), "</script>")
+ _, err = w.Write(b)
+ return err
+ })
+
+ html := `<style></script></style>`
+ r := bytes.NewBufferString(html)
+ w := &bytes.Buffer{}
+ err := Minify(m, w, r, nil)
+ test.Minify(t, html, err, w.String(), html)
+}
+
+func TestReaderErrors(t *testing.T) {
+ r := test.NewErrorReader(0)
+ w := &bytes.Buffer{}
+ m := minify.New()
+ err := Minify(m, w, r, nil)
+ test.T(t, err, test.ErrPlain, "return error at first read")
+}
+
+func TestWriterErrors(t *testing.T) {
+ errorTests := []struct {
+ html string
+ n []int
+ }{
+ {`<!doctype>`, []int{0}},
+ {`text`, []int{0}},
+ {`<foo attr=val>`, []int{0, 1, 2, 3, 4, 5}},
+ {`</foo>`, []int{0}},
+ {`<style>x</style>`, []int{2}},
+ {`<textarea>x</textarea>`, []int{2}},
+ {`<code>x</code>`, []int{2}},
+ {`<pre>x</pre>`, []int{2}},
+ {`<svg>x</svg>`, []int{0}},
+ {`<math>x</math>`, []int{0}},
+ {`<!--[if IE 6]> text <![endif]-->`, []int{0, 1, 2}},
+ {`<![if IE 6]> text <![endif]>`, []int{0}},
+ }
+
+ m := minify.New()
+ m.Add("text/html", &Minifier{
+ KeepConditionalComments: true,
+ })
+
+ for _, tt := range errorTests {
+ for _, n := range tt.n {
+ t.Run(fmt.Sprint(tt.html, " ", tt.n), func(t *testing.T) {
+ r := bytes.NewBufferString(tt.html)
+ w := test.NewErrorWriter(n)
+ err := m.Minify("text/html", w, r)
+ test.T(t, err, test.ErrPlain)
+ })
+ }
+ }
+}
+
+func TestMinifyErrors(t *testing.T) {
+ errorTests := []struct {
+ html string
+ err error
+ }{
+ {`<style>abc</style>`, test.ErrPlain},
+ {`<path style="abc"/>`, test.ErrPlain},
+ {`<path onclick="abc"/>`, test.ErrPlain},
+ {`<svg></svg>`, test.ErrPlain},
+ {`<math></math>`, test.ErrPlain},
+ }
+
+ m := minify.New()
+ m.AddFunc("text/css", func(_ *minify.M, w io.Writer, r io.Reader, _ map[string]string) error {
+ return test.ErrPlain
+ })
+ m.AddFunc("text/javascript", func(_ *minify.M, w io.Writer, r io.Reader, _ map[string]string) error {
+ return test.ErrPlain
+ })
+ m.AddFunc("image/svg+xml", func(_ *minify.M, w io.Writer, r io.Reader, _ map[string]string) error {
+ return test.ErrPlain
+ })
+ m.AddFunc("application/mathml+xml", func(_ *minify.M, w io.Writer, r io.Reader, _ map[string]string) error {
+ return test.ErrPlain
+ })
+ for _, tt := range errorTests {
+ t.Run(tt.html, func(t *testing.T) {
+ r := bytes.NewBufferString(tt.html)
+ w := &bytes.Buffer{}
+ err := Minify(m, w, r, nil)
+ test.T(t, err, tt.err)
+ })
+ }
+}
+
+////////////////////////////////////////////////////////////////
+
+func ExampleMinify() {
+ m := minify.New()
+ m.AddFunc("text/html", Minify)
+ m.AddFunc("text/css", css.Minify)
+ m.AddFunc("text/javascript", js.Minify)
+ m.AddFunc("image/svg+xml", svg.Minify)
+ m.AddFuncRegexp(regexp.MustCompile("[/+]json$"), json.Minify)
+ m.AddFuncRegexp(regexp.MustCompile("[/+]xml$"), xml.Minify)
+
+ // set URL to minify link locations too
+ m.URL, _ = url.Parse("https://www.example.com/")
+ if err := m.Minify("text/html", os.Stdout, os.Stdin); err != nil {
+ panic(err)
+ }
+}
+
+func ExampleMinify_options() {
+ m := minify.New()
+ m.Add("text/html", &Minifier{
+ KeepDefaultAttrVals: true,
+ KeepWhitespace: true,
+ })
+
+ if err := m.Minify("text/html", os.Stdout, os.Stdin); err != nil {
+ panic(err)
+ }
+}
+
+func ExampleMinify_reader() {
+ b := bytes.NewReader([]byte("<html><body><h1>Example</h1></body></html>"))
+
+ m := minify.New()
+ m.Add("text/html", &Minifier{})
+
+ r := m.Reader("text/html", b)
+ if _, err := io.Copy(os.Stdout, r); err != nil {
+ panic(err)
+ }
+ // Output: <h1>Example</h1>
+}
+
+func ExampleMinify_writer() {
+ m := minify.New()
+ m.Add("text/html", &Minifier{})
+
+ w := m.Writer("text/html", os.Stdout)
+ w.Write([]byte("<html><body><h1>Example</h1></body></html>"))
+ w.Close()
+ // Output: <h1>Example</h1>
+}
diff --git a/vendor/github.com/tdewolff/minify/html/table.go b/vendor/github.com/tdewolff/minify/html/table.go
new file mode 100644
index 0000000..7693534
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/html/table.go
@@ -0,0 +1,187 @@
+package html // import "github.com/tdewolff/minify/html"
+
+import "github.com/tdewolff/parse/html"
+
+type traits uint8
+
+const (
+ rawTag traits = 1 << iota
+ nonPhrasingTag
+ objectTag
+ booleanAttr
+ caselessAttr
+ urlAttr
+ omitPTag // omit p end tag if it is followed by this start tag
+ keepPTag // keep p end tag if it is followed by this end tag
+)
+
+var tagMap = map[html.Hash]traits{
+ html.A: keepPTag,
+ html.Address: nonPhrasingTag | omitPTag,
+ html.Article: nonPhrasingTag | omitPTag,
+ html.Aside: nonPhrasingTag | omitPTag,
+ html.Audio: objectTag | keepPTag,
+ html.Blockquote: nonPhrasingTag | omitPTag,
+ html.Body: nonPhrasingTag,
+ html.Br: nonPhrasingTag,
+ html.Button: objectTag,
+ html.Canvas: objectTag,
+ html.Caption: nonPhrasingTag,
+ html.Col: nonPhrasingTag,
+ html.Colgroup: nonPhrasingTag,
+ html.Dd: nonPhrasingTag,
+ html.Del: keepPTag,
+ html.Details: omitPTag,
+ html.Div: nonPhrasingTag | omitPTag,
+ html.Dl: nonPhrasingTag | omitPTag,
+ html.Dt: nonPhrasingTag,
+ html.Embed: nonPhrasingTag,
+ html.Fieldset: nonPhrasingTag | omitPTag,
+ html.Figcaption: nonPhrasingTag | omitPTag,
+ html.Figure: nonPhrasingTag | omitPTag,
+ html.Footer: nonPhrasingTag | omitPTag,
+ html.Form: nonPhrasingTag | omitPTag,
+ html.H1: nonPhrasingTag | omitPTag,
+ html.H2: nonPhrasingTag | omitPTag,
+ html.H3: nonPhrasingTag | omitPTag,
+ html.H4: nonPhrasingTag | omitPTag,
+ html.H5: nonPhrasingTag | omitPTag,
+ html.H6: nonPhrasingTag | omitPTag,
+ html.Head: nonPhrasingTag,
+ html.Header: nonPhrasingTag | omitPTag,
+ html.Hgroup: nonPhrasingTag,
+ html.Hr: nonPhrasingTag | omitPTag,
+ html.Html: nonPhrasingTag,
+ html.Iframe: rawTag | objectTag,
+ html.Img: objectTag,
+ html.Input: objectTag,
+ html.Ins: keepPTag,
+ html.Keygen: objectTag,
+ html.Li: nonPhrasingTag,
+ html.Main: nonPhrasingTag | omitPTag,
+ html.Map: keepPTag,
+ html.Math: rawTag,
+ html.Menu: omitPTag,
+ html.Meta: nonPhrasingTag,
+ html.Meter: objectTag,
+ html.Nav: nonPhrasingTag | omitPTag,
+ html.Noscript: nonPhrasingTag | keepPTag,
+ html.Object: objectTag,
+ html.Ol: nonPhrasingTag | omitPTag,
+ html.Output: nonPhrasingTag,
+ html.P: nonPhrasingTag | omitPTag,
+ html.Picture: objectTag,
+ html.Pre: nonPhrasingTag | omitPTag,
+ html.Progress: objectTag,
+ html.Q: objectTag,
+ html.Script: rawTag,
+ html.Section: nonPhrasingTag | omitPTag,
+ html.Select: objectTag,
+ html.Style: rawTag | nonPhrasingTag,
+ html.Svg: rawTag | objectTag,
+ html.Table: nonPhrasingTag | omitPTag,
+ html.Tbody: nonPhrasingTag,
+ html.Td: nonPhrasingTag,
+ html.Textarea: rawTag | objectTag,
+ html.Tfoot: nonPhrasingTag,
+ html.Th: nonPhrasingTag,
+ html.Thead: nonPhrasingTag,
+ html.Title: nonPhrasingTag,
+ html.Tr: nonPhrasingTag,
+ html.Ul: nonPhrasingTag | omitPTag,
+ html.Video: objectTag | keepPTag,
+}
+
+var attrMap = map[html.Hash]traits{
+ html.Accept: caselessAttr,
+ html.Accept_Charset: caselessAttr,
+ html.Action: urlAttr,
+ html.Align: caselessAttr,
+ html.Alink: caselessAttr,
+ html.Allowfullscreen: booleanAttr,
+ html.Async: booleanAttr,
+ html.Autofocus: booleanAttr,
+ html.Autoplay: booleanAttr,
+ html.Axis: caselessAttr,
+ html.Background: urlAttr,
+ html.Bgcolor: caselessAttr,
+ html.Charset: caselessAttr,
+ html.Checked: booleanAttr,
+ html.Cite: urlAttr,
+ html.Classid: urlAttr,
+ html.Clear: caselessAttr,
+ html.Codebase: urlAttr,
+ html.Codetype: caselessAttr,
+ html.Color: caselessAttr,
+ html.Compact: booleanAttr,
+ html.Controls: booleanAttr,
+ html.Data: urlAttr,
+ html.Declare: booleanAttr,
+ html.Default: booleanAttr,
+ html.DefaultChecked: booleanAttr,
+ html.DefaultMuted: booleanAttr,
+ html.DefaultSelected: booleanAttr,
+ html.Defer: booleanAttr,
+ html.Dir: caselessAttr,
+ html.Disabled: booleanAttr,
+ html.Draggable: booleanAttr,
+ html.Enabled: booleanAttr,
+ html.Enctype: caselessAttr,
+ html.Face: caselessAttr,
+ html.Formaction: urlAttr,
+ html.Formnovalidate: booleanAttr,
+ html.Frame: caselessAttr,
+ html.Hidden: booleanAttr,
+ html.Href: urlAttr,
+ html.Hreflang: caselessAttr,
+ html.Http_Equiv: caselessAttr,
+ html.Icon: urlAttr,
+ html.Inert: booleanAttr,
+ html.Ismap: booleanAttr,
+ html.Itemscope: booleanAttr,
+ html.Lang: caselessAttr,
+ html.Language: caselessAttr,
+ html.Link: caselessAttr,
+ html.Longdesc: urlAttr,
+ html.Manifest: urlAttr,
+ html.Media: caselessAttr,
+ html.Method: caselessAttr,
+ html.Multiple: booleanAttr,
+ html.Muted: booleanAttr,
+ html.Nohref: booleanAttr,
+ html.Noresize: booleanAttr,
+ html.Noshade: booleanAttr,
+ html.Novalidate: booleanAttr,
+ html.Nowrap: booleanAttr,
+ html.Open: booleanAttr,
+ html.Pauseonexit: booleanAttr,
+ html.Poster: urlAttr,
+ html.Profile: urlAttr,
+ html.Readonly: booleanAttr,
+ html.Rel: caselessAttr,
+ html.Required: booleanAttr,
+ html.Rev: caselessAttr,
+ html.Reversed: booleanAttr,
+ html.Rules: caselessAttr,
+ html.Scope: caselessAttr,
+ html.Scoped: booleanAttr,
+ html.Scrolling: caselessAttr,
+ html.Seamless: booleanAttr,
+ html.Selected: booleanAttr,
+ html.Shape: caselessAttr,
+ html.Sortable: booleanAttr,
+ html.Src: urlAttr,
+ html.Target: caselessAttr,
+ html.Text: caselessAttr,
+ html.Translate: booleanAttr,
+ html.Truespeed: booleanAttr,
+ html.Type: caselessAttr,
+ html.Typemustmatch: booleanAttr,
+ html.Undeterminate: booleanAttr,
+ html.Usemap: urlAttr,
+ html.Valign: caselessAttr,
+ html.Valuetype: caselessAttr,
+ html.Vlink: caselessAttr,
+ html.Visible: booleanAttr,
+ html.Xmlns: urlAttr,
+}
diff --git a/vendor/github.com/tdewolff/minify/js/js.go b/vendor/github.com/tdewolff/minify/js/js.go
new file mode 100644
index 0000000..1f6c0b8
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/js/js.go
@@ -0,0 +1,88 @@
+// Package js minifies ECMAScript5.1 following the specifications at http://www.ecma-international.org/ecma-262/5.1/.
+package js // import "github.com/tdewolff/minify/js"
+
+import (
+ "io"
+
+ "github.com/tdewolff/minify"
+ "github.com/tdewolff/parse"
+ "github.com/tdewolff/parse/js"
+)
+
+var (
+ spaceBytes = []byte(" ")
+ newlineBytes = []byte("\n")
+)
+
+////////////////////////////////////////////////////////////////
+
+// DefaultMinifier is the default minifier.
+var DefaultMinifier = &Minifier{}
+
+// Minifier is a JS minifier.
+type Minifier struct{}
+
+// Minify minifies JS data, it reads from r and writes to w.
+func Minify(m *minify.M, w io.Writer, r io.Reader, params map[string]string) error {
+ return DefaultMinifier.Minify(m, w, r, params)
+}
+
+// Minify minifies JS data, it reads from r and writes to w.
+func (o *Minifier) Minify(_ *minify.M, w io.Writer, r io.Reader, _ map[string]string) error {
+ prev := js.LineTerminatorToken
+ prevLast := byte(' ')
+ lineTerminatorQueued := false
+ whitespaceQueued := false
+
+ l := js.NewLexer(r)
+ defer l.Restore()
+
+ for {
+ tt, data := l.Next()
+ if tt == js.ErrorToken {
+ if l.Err() != io.EOF {
+ return l.Err()
+ }
+ return nil
+ } else if tt == js.LineTerminatorToken {
+ lineTerminatorQueued = true
+ } else if tt == js.WhitespaceToken {
+ whitespaceQueued = true
+ } else if tt == js.CommentToken {
+ if len(data) > 5 && data[1] == '*' && data[2] == '!' {
+ if _, err := w.Write(data[:3]); err != nil {
+ return err
+ }
+ comment := parse.TrimWhitespace(parse.ReplaceMultipleWhitespace(data[3 : len(data)-2]))
+ if _, err := w.Write(comment); err != nil {
+ return err
+ }
+ if _, err := w.Write(data[len(data)-2:]); err != nil {
+ return err
+ }
+ }
+ } else {
+ first := data[0]
+ if (prev == js.IdentifierToken || prev == js.NumericToken || prev == js.PunctuatorToken || prev == js.StringToken || prev == js.RegexpToken) &&
+ (tt == js.IdentifierToken || tt == js.NumericToken || tt == js.StringToken || tt == js.PunctuatorToken || tt == js.RegexpToken) {
+ if lineTerminatorQueued && (prev != js.PunctuatorToken || prevLast == '}' || prevLast == ']' || prevLast == ')' || prevLast == '+' || prevLast == '-' || prevLast == '"' || prevLast == '\'') &&
+ (tt != js.PunctuatorToken || first == '{' || first == '[' || first == '(' || first == '+' || first == '-' || first == '!' || first == '~') {
+ if _, err := w.Write(newlineBytes); err != nil {
+ return err
+ }
+ } else if whitespaceQueued && (prev != js.StringToken && prev != js.PunctuatorToken && tt != js.PunctuatorToken || (prevLast == '+' || prevLast == '-') && first == prevLast) {
+ if _, err := w.Write(spaceBytes); err != nil {
+ return err
+ }
+ }
+ }
+ if _, err := w.Write(data); err != nil {
+ return err
+ }
+ prev = tt
+ prevLast = data[len(data)-1]
+ lineTerminatorQueued = false
+ whitespaceQueued = false
+ }
+ }
+}
diff --git a/vendor/github.com/tdewolff/minify/js/js_test.go b/vendor/github.com/tdewolff/minify/js/js_test.go
new file mode 100644
index 0000000..816ce90
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/js/js_test.go
@@ -0,0 +1,96 @@
+package js // import "github.com/tdewolff/minify/js"
+
+import (
+ "bytes"
+ "fmt"
+ "os"
+ "testing"
+
+ "github.com/tdewolff/minify"
+ "github.com/tdewolff/test"
+)
+
+func TestJS(t *testing.T) {
+ jsTests := []struct {
+ js string
+ expected string
+ }{
+ {"/*comment*/", ""},
+ {"// comment\na", "a"},
+ {"/*! bang comment */", "/*!bang comment*/"},
+ {"function x(){}", "function x(){}"},
+ {"function x(a, b){}", "function x(a,b){}"},
+ {"a b", "a b"},
+ {"a\n\nb", "a\nb"},
+ {"a// comment\nb", "a\nb"},
+ {"''\na", "''\na"},
+ {"''\n''", "''\n''"},
+ {"]\n0", "]\n0"},
+ {"a\n{", "a\n{"},
+ {";\na", ";a"},
+ {",\na", ",a"},
+ {"}\na", "}\na"},
+ {"+\na", "+\na"},
+ {"+\n(", "+\n("},
+ {"+\n\"\"", "+\n\"\""},
+ {"a + ++b", "a+ ++b"}, // JSMin caution
+ {"var a=/\\s?auto?\\s?/i\nvar", "var a=/\\s?auto?\\s?/i\nvar"}, // #14
+ {"var a=0\n!function(){}", "var a=0\n!function(){}"}, // #107
+ {"function(){}\n\"string\"", "function(){}\n\"string\""}, // #109
+ {"false\n\"string\"", "false\n\"string\""}, // #109
+ {"`\n", "`"}, // go fuzz
+ {"a\n~b", "a\n~b"}, // #132
+ }
+
+ m := minify.New()
+ for _, tt := range jsTests {
+ t.Run(tt.js, func(t *testing.T) {
+ r := bytes.NewBufferString(tt.js)
+ w := &bytes.Buffer{}
+ err := Minify(m, w, r, nil)
+ test.Minify(t, tt.js, err, w.String(), tt.expected)
+ })
+ }
+}
+
+func TestReaderErrors(t *testing.T) {
+ r := test.NewErrorReader(0)
+ w := &bytes.Buffer{}
+ m := minify.New()
+ err := Minify(m, w, r, nil)
+ test.T(t, err, test.ErrPlain, "return error at first read")
+}
+
+func TestWriterErrors(t *testing.T) {
+ errorTests := []struct {
+ js string
+ n []int
+ }{
+ {"a\n{5 5", []int{0, 1, 4}},
+ {`/*!comment*/`, []int{0, 1, 2}},
+ {"false\n\"string\"", []int{1}}, // #109
+ }
+
+ m := minify.New()
+ for _, tt := range errorTests {
+ for _, n := range tt.n {
+ t.Run(fmt.Sprint(tt.js, " ", tt.n), func(t *testing.T) {
+ r := bytes.NewBufferString(tt.js)
+ w := test.NewErrorWriter(n)
+ err := Minify(m, w, r, nil)
+ test.T(t, err, test.ErrPlain)
+ })
+ }
+ }
+}
+
+////////////////////////////////////////////////////////////////
+
+func ExampleMinify() {
+ m := minify.New()
+ m.AddFunc("text/javascript", Minify)
+
+ if err := m.Minify("text/javascript", os.Stdout, os.Stdin); err != nil {
+ panic(err)
+ }
+}
diff --git a/vendor/github.com/tdewolff/minify/json/json.go b/vendor/github.com/tdewolff/minify/json/json.go
new file mode 100644
index 0000000..ffe4b68
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/json/json.go
@@ -0,0 +1,63 @@
+// Package json minifies JSON following the specifications at http://json.org/.
+package json // import "github.com/tdewolff/minify/json"
+
+import (
+ "io"
+
+ "github.com/tdewolff/minify"
+ "github.com/tdewolff/parse/json"
+)
+
+var (
+ commaBytes = []byte(",")
+ colonBytes = []byte(":")
+)
+
+////////////////////////////////////////////////////////////////
+
+// DefaultMinifier is the default minifier.
+var DefaultMinifier = &Minifier{}
+
+// Minifier is a JSON minifier.
+type Minifier struct{}
+
+// Minify minifies JSON data, it reads from r and writes to w.
+func Minify(m *minify.M, w io.Writer, r io.Reader, params map[string]string) error {
+ return DefaultMinifier.Minify(m, w, r, params)
+}
+
+// Minify minifies JSON data, it reads from r and writes to w.
+func (o *Minifier) Minify(_ *minify.M, w io.Writer, r io.Reader, _ map[string]string) error {
+ skipComma := true
+
+ p := json.NewParser(r)
+ defer p.Restore()
+
+ for {
+ state := p.State()
+ gt, text := p.Next()
+ if gt == json.ErrorGrammar {
+ if p.Err() != io.EOF {
+ return p.Err()
+ }
+ return nil
+ }
+
+ if !skipComma && gt != json.EndObjectGrammar && gt != json.EndArrayGrammar {
+ if state == json.ObjectKeyState || state == json.ArrayState {
+ if _, err := w.Write(commaBytes); err != nil {
+ return err
+ }
+ } else if state == json.ObjectValueState {
+ if _, err := w.Write(colonBytes); err != nil {
+ return err
+ }
+ }
+ }
+ skipComma = gt == json.StartObjectGrammar || gt == json.StartArrayGrammar
+
+ if _, err := w.Write(text); err != nil {
+ return err
+ }
+ }
+}
diff --git a/vendor/github.com/tdewolff/minify/json/json_test.go b/vendor/github.com/tdewolff/minify/json/json_test.go
new file mode 100644
index 0000000..ce0e956
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/json/json_test.go
@@ -0,0 +1,74 @@
+package json // import "github.com/tdewolff/minify/json"
+
+import (
+ "bytes"
+ "fmt"
+ "os"
+ "regexp"
+ "testing"
+
+ "github.com/tdewolff/minify"
+ "github.com/tdewolff/test"
+)
+
+func TestJSON(t *testing.T) {
+ jsonTests := []struct {
+ json string
+ expected string
+ }{
+ {"{ \"a\": [1, 2] }", "{\"a\":[1,2]}"},
+ {"[{ \"a\": [{\"x\": null}, true] }]", "[{\"a\":[{\"x\":null},true]}]"},
+ {"{ \"a\": 1, \"b\": 2 }", "{\"a\":1,\"b\":2}"},
+ }
+
+ m := minify.New()
+ for _, tt := range jsonTests {
+ t.Run(tt.json, func(t *testing.T) {
+ r := bytes.NewBufferString(tt.json)
+ w := &bytes.Buffer{}
+ err := Minify(m, w, r, nil)
+ test.Minify(t, tt.json, err, w.String(), tt.expected)
+ })
+ }
+}
+
+func TestReaderErrors(t *testing.T) {
+ r := test.NewErrorReader(0)
+ w := &bytes.Buffer{}
+ m := minify.New()
+ err := Minify(m, w, r, nil)
+ test.T(t, err, test.ErrPlain, "return error at first read")
+}
+
+func TestWriterErrors(t *testing.T) {
+ errorTests := []struct {
+ json string
+ n []int
+ }{
+ //01 234 56 78
+ {`{"key":[100,200]}`, []int{0, 1, 2, 3, 4, 5, 7, 8}},
+ }
+
+ m := minify.New()
+ for _, tt := range errorTests {
+ for _, n := range tt.n {
+ t.Run(fmt.Sprint(tt.json, " ", tt.n), func(t *testing.T) {
+ r := bytes.NewBufferString(tt.json)
+ w := test.NewErrorWriter(n)
+ err := Minify(m, w, r, nil)
+ test.T(t, err, test.ErrPlain)
+ })
+ }
+ }
+}
+
+////////////////////////////////////////////////////////////////
+
+func ExampleMinify() {
+ m := minify.New()
+ m.AddFuncRegexp(regexp.MustCompile("[/+]json$"), Minify)
+
+ if err := m.Minify("application/json", os.Stdout, os.Stdin); err != nil {
+ panic(err)
+ }
+}
diff --git a/vendor/github.com/tdewolff/minify/minify.go b/vendor/github.com/tdewolff/minify/minify.go
new file mode 100644
index 0000000..182eb6b
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/minify.go
@@ -0,0 +1,279 @@
+// Package minify relates MIME type to minifiers. Several minifiers are provided in the subpackages.
+package minify // import "github.com/tdewolff/minify"
+
+import (
+ "errors"
+ "io"
+ "mime"
+ "net/http"
+ "net/url"
+ "os/exec"
+ "path"
+ "regexp"
+ "sync"
+
+ "github.com/tdewolff/parse"
+ "github.com/tdewolff/parse/buffer"
+)
+
+// ErrNotExist is returned when no minifier exists for a given mimetype.
+var ErrNotExist = errors.New("minifier does not exist for mimetype")
+
+////////////////////////////////////////////////////////////////
+
+// MinifierFunc is a function that implements Minifer.
+type MinifierFunc func(*M, io.Writer, io.Reader, map[string]string) error
+
+// Minify calls f(m, w, r, params)
+func (f MinifierFunc) Minify(m *M, w io.Writer, r io.Reader, params map[string]string) error {
+ return f(m, w, r, params)
+}
+
+// Minifier is the interface for minifiers.
+// The *M parameter is used for minifying embedded resources, such as JS within HTML.
+type Minifier interface {
+ Minify(*M, io.Writer, io.Reader, map[string]string) error
+}
+
+////////////////////////////////////////////////////////////////
+
+type patternMinifier struct {
+ pattern *regexp.Regexp
+ Minifier
+}
+
+type cmdMinifier struct {
+ cmd *exec.Cmd
+}
+
+func (c *cmdMinifier) Minify(_ *M, w io.Writer, r io.Reader, _ map[string]string) error {
+ cmd := &exec.Cmd{}
+ *cmd = *c.cmd // concurrency safety
+ cmd.Stdout = w
+ cmd.Stdin = r
+ return cmd.Run()
+}
+
+////////////////////////////////////////////////////////////////
+
+// M holds a map of mimetype => function to allow recursive minifier calls of the minifier functions.
+type M struct {
+ literal map[string]Minifier
+ pattern []patternMinifier
+
+ URL *url.URL
+}
+
+// New returns a new M.
+func New() *M {
+ return &M{
+ map[string]Minifier{},
+ []patternMinifier{},
+ nil,
+ }
+}
+
+// Add adds a minifier to the mimetype => function map (unsafe for concurrent use).
+func (m *M) Add(mimetype string, minifier Minifier) {
+ m.literal[mimetype] = minifier
+}
+
+// AddFunc adds a minify function to the mimetype => function map (unsafe for concurrent use).
+func (m *M) AddFunc(mimetype string, minifier MinifierFunc) {
+ m.literal[mimetype] = minifier
+}
+
+// AddRegexp adds a minifier to the mimetype => function map (unsafe for concurrent use).
+func (m *M) AddRegexp(pattern *regexp.Regexp, minifier Minifier) {
+ m.pattern = append(m.pattern, patternMinifier{pattern, minifier})
+}
+
+// AddFuncRegexp adds a minify function to the mimetype => function map (unsafe for concurrent use).
+func (m *M) AddFuncRegexp(pattern *regexp.Regexp, minifier MinifierFunc) {
+ m.pattern = append(m.pattern, patternMinifier{pattern, minifier})
+}
+
+// AddCmd adds a minify function to the mimetype => function map (unsafe for concurrent use) that executes a command to process the minification.
+// It allows the use of external tools like ClosureCompiler, UglifyCSS, etc. for a specific mimetype.
+func (m *M) AddCmd(mimetype string, cmd *exec.Cmd) {
+ m.literal[mimetype] = &cmdMinifier{cmd}
+}
+
+// AddCmdRegexp adds a minify function to the mimetype => function map (unsafe for concurrent use) that executes a command to process the minification.
+// It allows the use of external tools like ClosureCompiler, UglifyCSS, etc. for a specific mimetype regular expression.
+func (m *M) AddCmdRegexp(pattern *regexp.Regexp, cmd *exec.Cmd) {
+ m.pattern = append(m.pattern, patternMinifier{pattern, &cmdMinifier{cmd}})
+}
+
+// Match returns the pattern and minifier that gets matched with the mediatype.
+// It returns nil when no matching minifier exists.
+// It has the same matching algorithm as Minify.
+func (m *M) Match(mediatype string) (string, map[string]string, MinifierFunc) {
+ mimetype, params := parse.Mediatype([]byte(mediatype))
+ if minifier, ok := m.literal[string(mimetype)]; ok { // string conversion is optimized away
+ return string(mimetype), params, minifier.Minify
+ }
+
+ for _, minifier := range m.pattern {
+ if minifier.pattern.Match(mimetype) {
+ return minifier.pattern.String(), params, minifier.Minify
+ }
+ }
+ return string(mimetype), params, nil
+}
+
+// Minify minifies the content of a Reader and writes it to a Writer (safe for concurrent use).
+// An error is returned when no such mimetype exists (ErrNotExist) or when an error occurred in the minifier function.
+// Mediatype may take the form of 'text/plain', 'text/*', '*/*' or 'text/plain; charset=UTF-8; version=2.0'.
+func (m *M) Minify(mediatype string, w io.Writer, r io.Reader) error {
+ mimetype, params := parse.Mediatype([]byte(mediatype))
+ return m.MinifyMimetype(mimetype, w, r, params)
+}
+
+// MinifyMimetype minifies the content of a Reader and writes it to a Writer (safe for concurrent use).
+// It is a lower level version of Minify and requires the mediatype to be split up into mimetype and parameters.
+// It is mostly used internally by minifiers because it is faster (no need to convert a byte-slice to string and vice versa).
+func (m *M) MinifyMimetype(mimetype []byte, w io.Writer, r io.Reader, params map[string]string) error {
+ err := ErrNotExist
+ if minifier, ok := m.literal[string(mimetype)]; ok { // string conversion is optimized away
+ err = minifier.Minify(m, w, r, params)
+ } else {
+ for _, minifier := range m.pattern {
+ if minifier.pattern.Match(mimetype) {
+ err = minifier.Minify(m, w, r, params)
+ break
+ }
+ }
+ }
+ return err
+}
+
+// Bytes minifies an array of bytes (safe for concurrent use). When an error occurs it return the original array and the error.
+// It returns an error when no such mimetype exists (ErrNotExist) or any error occurred in the minifier function.
+func (m *M) Bytes(mediatype string, v []byte) ([]byte, error) {
+ out := buffer.NewWriter(make([]byte, 0, len(v)))
+ if err := m.Minify(mediatype, out, buffer.NewReader(v)); err != nil {
+ return v, err
+ }
+ return out.Bytes(), nil
+}
+
+// String minifies a string (safe for concurrent use). When an error occurs it return the original string and the error.
+// It returns an error when no such mimetype exists (ErrNotExist) or any error occurred in the minifier function.
+func (m *M) String(mediatype string, v string) (string, error) {
+ out := buffer.NewWriter(make([]byte, 0, len(v)))
+ if err := m.Minify(mediatype, out, buffer.NewReader([]byte(v))); err != nil {
+ return v, err
+ }
+ return string(out.Bytes()), nil
+}
+
+// Reader wraps a Reader interface and minifies the stream.
+// Errors from the minifier are returned by the reader.
+func (m *M) Reader(mediatype string, r io.Reader) io.Reader {
+ pr, pw := io.Pipe()
+ go func() {
+ if err := m.Minify(mediatype, pw, r); err != nil {
+ pw.CloseWithError(err)
+ } else {
+ pw.Close()
+ }
+ }()
+ return pr
+}
+
+// minifyWriter makes sure that errors from the minifier are passed down through Close (can be blocking).
+type minifyWriter struct {
+ pw *io.PipeWriter
+ wg sync.WaitGroup
+ err error
+}
+
+// Write intercepts any writes to the writer.
+func (w *minifyWriter) Write(b []byte) (int, error) {
+ return w.pw.Write(b)
+}
+
+// Close must be called when writing has finished. It returns the error from the minifier.
+func (w *minifyWriter) Close() error {
+ w.pw.Close()
+ w.wg.Wait()
+ return w.err
+}
+
+// Writer wraps a Writer interface and minifies the stream.
+// Errors from the minifier are returned by Close on the writer.
+// The writer must be closed explicitly.
+func (m *M) Writer(mediatype string, w io.Writer) *minifyWriter {
+ pr, pw := io.Pipe()
+ mw := &minifyWriter{pw, sync.WaitGroup{}, nil}
+ mw.wg.Add(1)
+ go func() {
+ defer mw.wg.Done()
+
+ if err := m.Minify(mediatype, w, pr); err != nil {
+ io.Copy(w, pr)
+ mw.err = err
+ }
+ pr.Close()
+ }()
+ return mw
+}
+
+// minifyResponseWriter wraps an http.ResponseWriter and makes sure that errors from the minifier are passed down through Close (can be blocking).
+// All writes to the response writer are intercepted and minified on the fly.
+// http.ResponseWriter loses all functionality such as Pusher, Hijacker, Flusher, ...
+type minifyResponseWriter struct {
+ http.ResponseWriter
+
+ writer *minifyWriter
+ m *M
+ mediatype string
+}
+
+// WriteHeader intercepts any header writes and removes the Content-Length header.
+func (w *minifyResponseWriter) WriteHeader(status int) {
+ w.ResponseWriter.Header().Del("Content-Length")
+ w.ResponseWriter.WriteHeader(status)
+}
+
+// Write intercepts any writes to the response writer.
+// The first write will extract the Content-Type as the mediatype. Otherwise it falls back to the RequestURI extension.
+func (w *minifyResponseWriter) Write(b []byte) (int, error) {
+ if w.writer == nil {
+ // first write
+ if mediatype := w.ResponseWriter.Header().Get("Content-Type"); mediatype != "" {
+ w.mediatype = mediatype
+ }
+ w.writer = w.m.Writer(w.mediatype, w.ResponseWriter)
+ }
+ return w.writer.Write(b)
+}
+
+// Close must be called when writing has finished. It returns the error from the minifier.
+func (w *minifyResponseWriter) Close() error {
+ if w.writer != nil {
+ return w.writer.Close()
+ }
+ return nil
+}
+
+// ResponseWriter minifies any writes to the http.ResponseWriter.
+// http.ResponseWriter loses all functionality such as Pusher, Hijacker, Flusher, ...
+// Minification might be slower than just sending the original file! Caching is advised.
+func (m *M) ResponseWriter(w http.ResponseWriter, r *http.Request) *minifyResponseWriter {
+ mediatype := mime.TypeByExtension(path.Ext(r.RequestURI))
+ return &minifyResponseWriter{w, nil, m, mediatype}
+}
+
+// Middleware provides a middleware function that minifies content on the fly by intercepting writes to http.ResponseWriter.
+// http.ResponseWriter loses all functionality such as Pusher, Hijacker, Flusher, ...
+// Minification might be slower than just sending the original file! Caching is advised.
+func (m *M) Middleware(next http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ mw := m.ResponseWriter(w, r)
+ defer mw.Close()
+
+ next.ServeHTTP(mw, r)
+ })
+}
diff --git a/vendor/github.com/tdewolff/minify/minify_test.go b/vendor/github.com/tdewolff/minify/minify_test.go
new file mode 100644
index 0000000..7e2e810
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/minify_test.go
@@ -0,0 +1,358 @@
+package minify // import "github.com/tdewolff/minify"
+
+import (
+ "bufio"
+ "bytes"
+ "errors"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "net/http"
+ "os"
+ "os/exec"
+ "regexp"
+ "strings"
+ "testing"
+
+ "github.com/tdewolff/test"
+)
+
+var errDummy = errors.New("dummy error")
+
+// from os/exec/exec_test.go
+func helperCommand(t *testing.T, s ...string) *exec.Cmd {
+ cs := []string{"-test.run=TestHelperProcess", "--"}
+ cs = append(cs, s...)
+ cmd := exec.Command(os.Args[0], cs...)
+ cmd.Env = []string{"GO_WANT_HELPER_PROCESS=1"}
+ return cmd
+}
+
+////////////////////////////////////////////////////////////////
+
+var m *M
+
+func init() {
+ m = New()
+ m.AddFunc("dummy/copy", func(m *M, w io.Writer, r io.Reader, _ map[string]string) error {
+ io.Copy(w, r)
+ return nil
+ })
+ m.AddFunc("dummy/nil", func(m *M, w io.Writer, r io.Reader, _ map[string]string) error {
+ return nil
+ })
+ m.AddFunc("dummy/err", func(m *M, w io.Writer, r io.Reader, _ map[string]string) error {
+ return errDummy
+ })
+ m.AddFunc("dummy/charset", func(m *M, w io.Writer, r io.Reader, params map[string]string) error {
+ w.Write([]byte(params["charset"]))
+ return nil
+ })
+ m.AddFunc("dummy/params", func(m *M, w io.Writer, r io.Reader, params map[string]string) error {
+ return m.Minify(params["type"]+"/"+params["sub"], w, r)
+ })
+ m.AddFunc("type/sub", func(m *M, w io.Writer, r io.Reader, _ map[string]string) error {
+ w.Write([]byte("type/sub"))
+ return nil
+ })
+ m.AddFuncRegexp(regexp.MustCompile("^type/.+$"), func(m *M, w io.Writer, r io.Reader, _ map[string]string) error {
+ w.Write([]byte("type/*"))
+ return nil
+ })
+ m.AddFuncRegexp(regexp.MustCompile("^.+/.+$"), func(m *M, w io.Writer, r io.Reader, _ map[string]string) error {
+ w.Write([]byte("*/*"))
+ return nil
+ })
+}
+
+func TestMinify(t *testing.T) {
+ test.T(t, m.Minify("?", nil, nil), ErrNotExist, "minifier doesn't exist")
+ test.T(t, m.Minify("dummy/nil", nil, nil), nil)
+ test.T(t, m.Minify("dummy/err", nil, nil), errDummy)
+
+ b := []byte("test")
+ out, err := m.Bytes("dummy/nil", b)
+ test.T(t, err, nil)
+ test.Bytes(t, out, []byte{}, "dummy/nil returns empty byte slice")
+ out, err = m.Bytes("?", b)
+ test.T(t, err, ErrNotExist, "minifier doesn't exist")
+ test.Bytes(t, out, b, "return input when minifier doesn't exist")
+
+ s := "test"
+ out2, err := m.String("dummy/nil", s)
+ test.T(t, err, nil)
+ test.String(t, out2, "", "dummy/nil returns empty string")
+ out2, err = m.String("?", s)
+ test.T(t, err, ErrNotExist, "minifier doesn't exist")
+ test.String(t, out2, s, "return input when minifier doesn't exist")
+}
+
+type DummyMinifier struct{}
+
+func (d *DummyMinifier) Minify(m *M, w io.Writer, r io.Reader, _ map[string]string) error {
+ return errDummy
+}
+
+func TestAdd(t *testing.T) {
+ mAdd := New()
+ r := bytes.NewBufferString("test")
+ w := &bytes.Buffer{}
+ mAdd.Add("dummy/err", &DummyMinifier{})
+ test.T(t, mAdd.Minify("dummy/err", nil, nil), errDummy)
+
+ mAdd.AddRegexp(regexp.MustCompile("err1$"), &DummyMinifier{})
+ test.T(t, mAdd.Minify("dummy/err1", nil, nil), errDummy)
+
+ mAdd.AddFunc("dummy/err", func(m *M, w io.Writer, r io.Reader, _ map[string]string) error {
+ return errDummy
+ })
+ test.T(t, mAdd.Minify("dummy/err", nil, nil), errDummy)
+
+ mAdd.AddFuncRegexp(regexp.MustCompile("err2$"), func(m *M, w io.Writer, r io.Reader, _ map[string]string) error {
+ return errDummy
+ })
+ test.T(t, mAdd.Minify("dummy/err2", nil, nil), errDummy)
+
+ mAdd.AddCmd("dummy/copy", helperCommand(t, "dummy/copy"))
+ mAdd.AddCmd("dummy/err", helperCommand(t, "dummy/err"))
+ mAdd.AddCmdRegexp(regexp.MustCompile("err6$"), helperCommand(t, "werr6"))
+ test.T(t, mAdd.Minify("dummy/copy", w, r), nil)
+ test.String(t, w.String(), "test", "dummy/copy command returns input")
+ test.String(t, mAdd.Minify("dummy/err", w, r).Error(), "exit status 1", "command returns status 1 for dummy/err")
+ test.String(t, mAdd.Minify("werr6", w, r).Error(), "exit status 2", "command returns status 2 when minifier doesn't exist")
+ test.String(t, mAdd.Minify("stderr6", w, r).Error(), "exit status 2", "command returns status 2 when minifier doesn't exist")
+}
+
+func TestMatch(t *testing.T) {
+ pattern, params, _ := m.Match("dummy/copy; a=b")
+ test.String(t, pattern, "dummy/copy")
+ test.String(t, params["a"], "b")
+
+ pattern, _, _ = m.Match("type/foobar")
+ test.String(t, pattern, "^type/.+$")
+
+ _, _, minifier := m.Match("dummy/")
+ test.That(t, minifier == nil)
+}
+
+func TestWildcard(t *testing.T) {
+ mimetypeTests := []struct {
+ mimetype string
+ expected string
+ }{
+ {"type/sub", "type/sub"},
+ {"type/*", "type/*"},
+ {"*/*", "*/*"},
+ {"type/sub2", "type/*"},
+ {"type2/sub", "*/*"},
+ {"dummy/charset;charset=UTF-8", "UTF-8"},
+ {"dummy/charset; charset = UTF-8 ", "UTF-8"},
+ {"dummy/params;type=type;sub=two2", "type/*"},
+ }
+
+ for _, tt := range mimetypeTests {
+ r := bytes.NewBufferString("")
+ w := &bytes.Buffer{}
+ err := m.Minify(tt.mimetype, w, r)
+ test.Error(t, err)
+ test.Minify(t, tt.mimetype, nil, w.String(), tt.expected)
+ }
+}
+
+func TestReader(t *testing.T) {
+ m := New()
+ m.AddFunc("dummy/dummy", func(m *M, w io.Writer, r io.Reader, _ map[string]string) error {
+ _, err := io.Copy(w, r)
+ return err
+ })
+ m.AddFunc("dummy/err", func(m *M, w io.Writer, r io.Reader, _ map[string]string) error {
+ return errDummy
+ })
+
+ w := &bytes.Buffer{}
+ r := bytes.NewBufferString("test")
+ mr := m.Reader("dummy/dummy", r)
+ _, err := io.Copy(w, mr)
+ test.Error(t, err)
+ test.String(t, w.String(), "test", "equal input after dummy minify reader")
+
+ mr = m.Reader("dummy/err", r)
+ _, err = io.Copy(w, mr)
+ test.T(t, err, errDummy)
+}
+
+func TestWriter(t *testing.T) {
+ m := New()
+ m.AddFunc("dummy/dummy", func(m *M, w io.Writer, r io.Reader, _ map[string]string) error {
+ _, err := io.Copy(w, r)
+ return err
+ })
+ m.AddFunc("dummy/err", func(m *M, w io.Writer, r io.Reader, _ map[string]string) error {
+ return errDummy
+ })
+ m.AddFunc("dummy/late-err", func(m *M, w io.Writer, r io.Reader, _ map[string]string) error {
+ _, _ = ioutil.ReadAll(r)
+ return errDummy
+ })
+
+ w := &bytes.Buffer{}
+ mw := m.Writer("dummy/dummy", w)
+ _, _ = mw.Write([]byte("test"))
+ test.Error(t, mw.Close())
+ test.String(t, w.String(), "test", "equal input after dummy minify writer")
+
+ w = &bytes.Buffer{}
+ mw = m.Writer("dummy/err", w)
+ _, _ = mw.Write([]byte("test"))
+ test.T(t, mw.Close(), errDummy)
+ test.String(t, w.String(), "test", "equal input after dummy minify writer")
+
+ w = &bytes.Buffer{}
+ mw = m.Writer("dummy/late-err", w)
+ _, _ = mw.Write([]byte("test"))
+ test.T(t, mw.Close(), errDummy)
+ test.String(t, w.String(), "")
+}
+
+type responseWriter struct {
+ writer io.Writer
+ header http.Header
+}
+
+func (w *responseWriter) Header() http.Header {
+ return w.header
+}
+
+func (w *responseWriter) WriteHeader(_ int) {}
+
+func (w *responseWriter) Write(b []byte) (int, error) {
+ return w.writer.Write(b)
+}
+
+func TestResponseWriter(t *testing.T) {
+ m := New()
+ m.AddFunc("text/html", func(m *M, w io.Writer, r io.Reader, _ map[string]string) error {
+ _, err := io.Copy(w, r)
+ return err
+ })
+
+ b := &bytes.Buffer{}
+ w := &responseWriter{b, http.Header{}}
+ r := &http.Request{RequestURI: "/index.html"}
+ mw := m.ResponseWriter(w, r)
+ test.Error(t, mw.Close())
+ _, _ = mw.Write([]byte("test"))
+ test.Error(t, mw.Close())
+ test.String(t, b.String(), "test", "equal input after dummy minify response writer")
+
+ b = &bytes.Buffer{}
+ w = &responseWriter{b, http.Header{}}
+ r = &http.Request{RequestURI: "/index"}
+ mw = m.ResponseWriter(w, r)
+ mw.Header().Add("Content-Type", "text/html")
+ _, _ = mw.Write([]byte("test"))
+ test.Error(t, mw.Close())
+ test.String(t, b.String(), "test", "equal input after dummy minify response writer")
+}
+
+func TestMiddleware(t *testing.T) {
+ m := New()
+ m.AddFunc("text/html", func(m *M, w io.Writer, r io.Reader, _ map[string]string) error {
+ _, err := io.Copy(w, r)
+ return err
+ })
+
+ b := &bytes.Buffer{}
+ w := &responseWriter{b, http.Header{}}
+ r := &http.Request{RequestURI: "/index.html"}
+ m.Middleware(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ _, _ = w.Write([]byte("test"))
+ })).ServeHTTP(w, r)
+ test.String(t, b.String(), "test", "equal input after dummy minify middleware")
+}
+
+func TestHelperProcess(*testing.T) {
+ if os.Getenv("GO_WANT_HELPER_PROCESS") != "1" {
+ return
+ }
+ args := os.Args
+ for len(args) > 0 {
+ if args[0] == "--" {
+ args = args[1:]
+ break
+ }
+ args = args[1:]
+ }
+ if len(args) == 0 {
+ fmt.Fprintf(os.Stderr, "No command\n")
+ os.Exit(2)
+ }
+
+ switch args[0] {
+ case "dummy/copy":
+ io.Copy(os.Stdout, os.Stdin)
+ case "dummy/err":
+ os.Exit(1)
+ default:
+ os.Exit(2)
+ }
+ os.Exit(0)
+}
+
+////////////////////////////////////////////////////////////////
+
+func ExampleM_Minify_custom() {
+ m := New()
+ m.AddFunc("text/plain", func(m *M, w io.Writer, r io.Reader, _ map[string]string) error {
+ // remove all newlines and spaces
+ rb := bufio.NewReader(r)
+ for {
+ line, err := rb.ReadString('\n')
+ if err != nil && err != io.EOF {
+ return err
+ }
+ if _, errws := io.WriteString(w, strings.Replace(line, " ", "", -1)); errws != nil {
+ return errws
+ }
+ if err == io.EOF {
+ break
+ }
+ }
+ return nil
+ })
+
+ in := "Because my coffee was too cold, I heated it in the microwave."
+ out, err := m.String("text/plain", in)
+ if err != nil {
+ panic(err)
+ }
+ fmt.Println(out)
+ // Output: Becausemycoffeewastoocold,Iheateditinthemicrowave.
+}
+
+func ExampleM_Reader() {
+ b := bytes.NewReader([]byte("input"))
+
+ m := New()
+ // add minfiers
+
+ r := m.Reader("mime/type", b)
+ if _, err := io.Copy(os.Stdout, r); err != nil {
+ if _, err := io.Copy(os.Stdout, b); err != nil {
+ panic(err)
+ }
+ }
+}
+
+func ExampleM_Writer() {
+ m := New()
+ // add minfiers
+
+ w := m.Writer("mime/type", os.Stdout)
+ if _, err := w.Write([]byte("input")); err != nil {
+ panic(err)
+ }
+ if err := w.Close(); err != nil {
+ panic(err)
+ }
+}
diff --git a/vendor/github.com/tdewolff/minify/svg/buffer.go b/vendor/github.com/tdewolff/minify/svg/buffer.go
new file mode 100644
index 0000000..d1b7804
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/svg/buffer.go
@@ -0,0 +1,130 @@
+package svg // import "github.com/tdewolff/minify/svg"
+
+import (
+ "github.com/tdewolff/parse"
+ "github.com/tdewolff/parse/svg"
+ "github.com/tdewolff/parse/xml"
+)
+
+// Token is a single token unit with an attribute value (if given) and hash of the data.
+type Token struct {
+ xml.TokenType
+ Hash svg.Hash
+ Data []byte
+ Text []byte
+ AttrVal []byte
+}
+
+// TokenBuffer is a buffer that allows for token look-ahead.
+type TokenBuffer struct {
+ l *xml.Lexer
+
+ buf []Token
+ pos int
+
+ attrBuffer []*Token
+}
+
+// NewTokenBuffer returns a new TokenBuffer.
+func NewTokenBuffer(l *xml.Lexer) *TokenBuffer {
+ return &TokenBuffer{
+ l: l,
+ buf: make([]Token, 0, 8),
+ }
+}
+
+func (z *TokenBuffer) read(t *Token) {
+ t.TokenType, t.Data = z.l.Next()
+ t.Text = z.l.Text()
+ if t.TokenType == xml.AttributeToken {
+ t.AttrVal = z.l.AttrVal()
+ if len(t.AttrVal) > 1 && (t.AttrVal[0] == '"' || t.AttrVal[0] == '\'') {
+ t.AttrVal = parse.ReplaceMultipleWhitespace(parse.TrimWhitespace(t.AttrVal[1 : len(t.AttrVal)-1])) // quotes will be readded in attribute loop if necessary
+ }
+ t.Hash = svg.ToHash(t.Text)
+ } else if t.TokenType == xml.StartTagToken || t.TokenType == xml.EndTagToken {
+ t.AttrVal = nil
+ t.Hash = svg.ToHash(t.Text)
+ } else {
+ t.AttrVal = nil
+ t.Hash = 0
+ }
+}
+
+// Peek returns the ith element and possibly does an allocation.
+// Peeking past an error will panic.
+func (z *TokenBuffer) Peek(pos int) *Token {
+ pos += z.pos
+ if pos >= len(z.buf) {
+ if len(z.buf) > 0 && z.buf[len(z.buf)-1].TokenType == xml.ErrorToken {
+ return &z.buf[len(z.buf)-1]
+ }
+
+ c := cap(z.buf)
+ d := len(z.buf) - z.pos
+ p := pos - z.pos + 1 // required peek length
+ var buf []Token
+ if 2*p > c {
+ buf = make([]Token, 0, 2*c+p)
+ } else {
+ buf = z.buf
+ }
+ copy(buf[:d], z.buf[z.pos:])
+
+ buf = buf[:p]
+ pos -= z.pos
+ for i := d; i < p; i++ {
+ z.read(&buf[i])
+ if buf[i].TokenType == xml.ErrorToken {
+ buf = buf[:i+1]
+ pos = i
+ break
+ }
+ }
+ z.pos, z.buf = 0, buf
+ }
+ return &z.buf[pos]
+}
+
+// Shift returns the first element and advances position.
+func (z *TokenBuffer) Shift() *Token {
+ if z.pos >= len(z.buf) {
+ t := &z.buf[:1][0]
+ z.read(t)
+ return t
+ }
+ t := &z.buf[z.pos]
+ z.pos++
+ return t
+}
+
+// Attributes extracts the gives attribute hashes from a tag.
+// It returns in the same order pointers to the requested token data or nil.
+func (z *TokenBuffer) Attributes(hashes ...svg.Hash) ([]*Token, *Token) {
+ n := 0
+ for {
+ if t := z.Peek(n); t.TokenType != xml.AttributeToken {
+ break
+ }
+ n++
+ }
+ if len(hashes) > cap(z.attrBuffer) {
+ z.attrBuffer = make([]*Token, len(hashes))
+ } else {
+ z.attrBuffer = z.attrBuffer[:len(hashes)]
+ for i := range z.attrBuffer {
+ z.attrBuffer[i] = nil
+ }
+ }
+ var replacee *Token
+ for i := z.pos; i < z.pos+n; i++ {
+ attr := &z.buf[i]
+ for j, hash := range hashes {
+ if hash == attr.Hash {
+ z.attrBuffer[j] = attr
+ replacee = attr
+ }
+ }
+ }
+ return z.attrBuffer, replacee
+}
diff --git a/vendor/github.com/tdewolff/minify/svg/buffer_test.go b/vendor/github.com/tdewolff/minify/svg/buffer_test.go
new file mode 100644
index 0000000..c750f40
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/svg/buffer_test.go
@@ -0,0 +1,68 @@
+package svg // import "github.com/tdewolff/minify/svg"
+
+import (
+ "bytes"
+ "strconv"
+ "testing"
+
+ "github.com/tdewolff/parse/svg"
+ "github.com/tdewolff/parse/xml"
+ "github.com/tdewolff/test"
+)
+
+func TestBuffer(t *testing.T) {
+ // 0 12 3 4 5 6 7 8 9 01
+ s := `<svg><path d="M0 0L1 1z"/>text<tag/>text</svg>`
+ z := NewTokenBuffer(xml.NewLexer(bytes.NewBufferString(s)))
+
+ tok := z.Shift()
+ test.That(t, tok.Hash == svg.Svg, "first token is <svg>")
+ test.That(t, z.pos == 0, "shift first token and restore position")
+ test.That(t, len(z.buf) == 0, "shift first token and restore length")
+
+ test.That(t, z.Peek(2).Hash == svg.D, "third token is d")
+ test.That(t, z.pos == 0, "don't change position after peeking")
+ test.That(t, len(z.buf) == 3, "mtwo tokens after peeking")
+
+ test.That(t, z.Peek(8).Hash == svg.Svg, "ninth token is <svg>")
+ test.That(t, z.pos == 0, "don't change position after peeking")
+ test.That(t, len(z.buf) == 9, "nine tokens after peeking")
+
+ test.That(t, z.Peek(9).TokenType == xml.ErrorToken, "tenth token is an error")
+ test.That(t, z.Peek(9) == z.Peek(10), "tenth and eleventh token are EOF")
+ test.That(t, len(z.buf) == 10, "ten tokens after peeking")
+
+ _ = z.Shift()
+ tok = z.Shift()
+ test.That(t, tok.Hash == svg.Path, "third token is <path>")
+ test.That(t, z.pos == 2, "don't change position after peeking")
+}
+
+func TestAttributes(t *testing.T) {
+ r := bytes.NewBufferString(`<rect x="0" y="1" width="2" height="3" rx="4" ry="5"/>`)
+ l := xml.NewLexer(r)
+ tb := NewTokenBuffer(l)
+ tb.Shift()
+ for k := 0; k < 2; k++ { // run twice to ensure similar results
+ attrs, _ := tb.Attributes(svg.X, svg.Y, svg.Width, svg.Height, svg.Rx, svg.Ry)
+ for i := 0; i < 6; i++ {
+ test.That(t, attrs[i] != nil, "attr must not be nil")
+ val := string(attrs[i].AttrVal)
+ j, _ := strconv.ParseInt(val, 10, 32)
+ test.That(t, int(j) == i, "attr data is bad at position", i)
+ }
+ }
+}
+
+////////////////////////////////////////////////////////////////
+
+func BenchmarkAttributes(b *testing.B) {
+ r := bytes.NewBufferString(`<rect x="0" y="1" width="2" height="3" rx="4" ry="5"/>`)
+ l := xml.NewLexer(r)
+ tb := NewTokenBuffer(l)
+ tb.Shift()
+ tb.Peek(6)
+ for i := 0; i < b.N; i++ {
+ tb.Attributes(svg.X, svg.Y, svg.Width, svg.Height, svg.Rx, svg.Ry)
+ }
+}
diff --git a/vendor/github.com/tdewolff/minify/svg/pathdata.go b/vendor/github.com/tdewolff/minify/svg/pathdata.go
new file mode 100644
index 0000000..f14e847
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/svg/pathdata.go
@@ -0,0 +1,282 @@
+package svg
+
+import (
+ strconvStdlib "strconv"
+
+ "github.com/tdewolff/minify"
+ "github.com/tdewolff/parse"
+ "github.com/tdewolff/parse/strconv"
+)
+
+type PathData struct {
+ o *Minifier
+
+ x, y float64
+ coords [][]byte
+ coordFloats []float64
+
+ state PathDataState
+ curBuffer []byte
+ altBuffer []byte
+ coordBuffer []byte
+}
+
+type PathDataState struct {
+ cmd byte
+ prevDigit bool
+ prevDigitIsInt bool
+}
+
+func NewPathData(o *Minifier) *PathData {
+ return &PathData{
+ o: o,
+ }
+}
+
+func (p *PathData) ShortenPathData(b []byte) []byte {
+ var x0, y0 float64
+ var cmd byte
+
+ p.x, p.y = 0.0, 0.0
+ p.coords = p.coords[:0]
+ p.coordFloats = p.coordFloats[:0]
+ p.state = PathDataState{}
+
+ j := 0
+ for i := 0; i < len(b); i++ {
+ c := b[i]
+ if c == ' ' || c == ',' || c == '\n' || c == '\r' || c == '\t' {
+ continue
+ } else if c >= 'A' && (cmd == 0 || cmd != c || c == 'M' || c == 'm') { // any command
+ if cmd != 0 {
+ j += p.copyInstruction(b[j:], cmd)
+ if cmd == 'M' || cmd == 'm' {
+ x0 = p.x
+ y0 = p.y
+ } else if cmd == 'Z' || cmd == 'z' {
+ p.x = x0
+ p.y = y0
+ }
+ }
+ cmd = c
+ p.coords = p.coords[:0]
+ p.coordFloats = p.coordFloats[:0]
+ } else if n := parse.Number(b[i:]); n > 0 {
+ f, _ := strconv.ParseFloat(b[i : i+n])
+ p.coords = append(p.coords, b[i:i+n])
+ p.coordFloats = append(p.coordFloats, f)
+ i += n - 1
+ }
+ }
+ if cmd != 0 {
+ j += p.copyInstruction(b[j:], cmd)
+ }
+ return b[:j]
+}
+
+func (p *PathData) copyInstruction(b []byte, cmd byte) int {
+ n := len(p.coords)
+ if n == 0 {
+ if cmd == 'Z' || cmd == 'z' {
+ b[0] = 'z'
+ return 1
+ }
+ return 0
+ }
+ isRelCmd := cmd >= 'a'
+
+ // get new cursor coordinates
+ di := 0
+ if (cmd == 'M' || cmd == 'm' || cmd == 'L' || cmd == 'l' || cmd == 'T' || cmd == 't') && n%2 == 0 {
+ di = 2
+ // reprint M always, as the first pair is a move but subsequent pairs are L
+ if cmd == 'M' || cmd == 'm' {
+ p.state.cmd = byte(0)
+ }
+ } else if cmd == 'H' || cmd == 'h' || cmd == 'V' || cmd == 'v' {
+ di = 1
+ } else if (cmd == 'S' || cmd == 's' || cmd == 'Q' || cmd == 'q') && n%4 == 0 {
+ di = 4
+ } else if (cmd == 'C' || cmd == 'c') && n%6 == 0 {
+ di = 6
+ } else if (cmd == 'A' || cmd == 'a') && n%7 == 0 {
+ di = 7
+ } else {
+ return 0
+ }
+
+ j := 0
+ origCmd := cmd
+ ax, ay := 0.0, 0.0
+ for i := 0; i < n; i += di {
+ // subsequent coordinate pairs for M are really L
+ if i > 0 && (origCmd == 'M' || origCmd == 'm') {
+ origCmd = 'L' + (origCmd - 'M')
+ }
+
+ cmd = origCmd
+ coords := p.coords[i : i+di]
+ coordFloats := p.coordFloats[i : i+di]
+
+ if cmd == 'H' || cmd == 'h' {
+ ax = coordFloats[di-1]
+ if isRelCmd {
+ ay = 0
+ } else {
+ ay = p.y
+ }
+ } else if cmd == 'V' || cmd == 'v' {
+ if isRelCmd {
+ ax = 0
+ } else {
+ ax = p.x
+ }
+ ay = coordFloats[di-1]
+ } else {
+ ax = coordFloats[di-2]
+ ay = coordFloats[di-1]
+ }
+
+ // switch from L to H or V whenever possible
+ if cmd == 'L' || cmd == 'l' {
+ if isRelCmd {
+ if coordFloats[0] == 0 {
+ cmd = 'v'
+ coords = coords[1:]
+ coordFloats = coordFloats[1:]
+ } else if coordFloats[1] == 0 {
+ cmd = 'h'
+ coords = coords[:1]
+ coordFloats = coordFloats[:1]
+ }
+ } else {
+ if coordFloats[0] == p.x {
+ cmd = 'V'
+ coords = coords[1:]
+ coordFloats = coordFloats[1:]
+ } else if coordFloats[1] == p.y {
+ cmd = 'H'
+ coords = coords[:1]
+ coordFloats = coordFloats[:1]
+ }
+ }
+ }
+
+ // make a current and alternated path with absolute/relative altered
+ var curState, altState PathDataState
+ curState = p.shortenCurPosInstruction(cmd, coords)
+ if isRelCmd {
+ altState = p.shortenAltPosInstruction(cmd-'a'+'A', coordFloats, p.x, p.y)
+ } else {
+ altState = p.shortenAltPosInstruction(cmd-'A'+'a', coordFloats, -p.x, -p.y)
+ }
+
+ // choose shortest, relative or absolute path?
+ if len(p.altBuffer) < len(p.curBuffer) {
+ j += copy(b[j:], p.altBuffer)
+ p.state = altState
+ } else {
+ j += copy(b[j:], p.curBuffer)
+ p.state = curState
+ }
+
+ if isRelCmd {
+ p.x += ax
+ p.y += ay
+ } else {
+ p.x = ax
+ p.y = ay
+ }
+ }
+ return j
+}
+
+func (p *PathData) shortenCurPosInstruction(cmd byte, coords [][]byte) PathDataState {
+ state := p.state
+ p.curBuffer = p.curBuffer[:0]
+ if cmd != state.cmd && !(state.cmd == 'M' && cmd == 'L' || state.cmd == 'm' && cmd == 'l') {
+ p.curBuffer = append(p.curBuffer, cmd)
+ state.cmd = cmd
+ state.prevDigit = false
+ state.prevDigitIsInt = false
+ }
+ for i, coord := range coords {
+ isFlag := false
+ if (cmd == 'A' || cmd == 'a') && (i%7 == 3 || i%7 == 4) {
+ isFlag = true
+ }
+
+ coord = minify.Number(coord, p.o.Decimals)
+ state.copyNumber(&p.curBuffer, coord, isFlag)
+ }
+ return state
+}
+
+func (p *PathData) shortenAltPosInstruction(cmd byte, coordFloats []float64, x, y float64) PathDataState {
+ state := p.state
+ p.altBuffer = p.altBuffer[:0]
+ if cmd != state.cmd && !(state.cmd == 'M' && cmd == 'L' || state.cmd == 'm' && cmd == 'l') {
+ p.altBuffer = append(p.altBuffer, cmd)
+ state.cmd = cmd
+ state.prevDigit = false
+ state.prevDigitIsInt = false
+ }
+ for i, f := range coordFloats {
+ isFlag := false
+ if cmd == 'L' || cmd == 'l' || cmd == 'C' || cmd == 'c' || cmd == 'S' || cmd == 's' || cmd == 'Q' || cmd == 'q' || cmd == 'T' || cmd == 't' || cmd == 'M' || cmd == 'm' {
+ if i%2 == 0 {
+ f += x
+ } else {
+ f += y
+ }
+ } else if cmd == 'H' || cmd == 'h' {
+ f += x
+ } else if cmd == 'V' || cmd == 'v' {
+ f += y
+ } else if cmd == 'A' || cmd == 'a' {
+ if i%7 == 5 {
+ f += x
+ } else if i%7 == 6 {
+ f += y
+ } else if i%7 == 3 || i%7 == 4 {
+ isFlag = true
+ }
+ }
+
+ p.coordBuffer = strconvStdlib.AppendFloat(p.coordBuffer[:0], f, 'g', -1, 64)
+ coord := minify.Number(p.coordBuffer, p.o.Decimals)
+ state.copyNumber(&p.altBuffer, coord, isFlag)
+ }
+ return state
+}
+
+func (state *PathDataState) copyNumber(buffer *[]byte, coord []byte, isFlag bool) {
+ if state.prevDigit && (coord[0] >= '0' && coord[0] <= '9' || coord[0] == '.' && state.prevDigitIsInt) {
+ if coord[0] == '0' && !state.prevDigitIsInt {
+ if isFlag {
+ *buffer = append(*buffer, ' ', '0')
+ state.prevDigitIsInt = true
+ } else {
+ *buffer = append(*buffer, '.', '0') // aggresively add dot so subsequent numbers could drop leading space
+ // prevDigit stays true and prevDigitIsInt stays false
+ }
+ return
+ }
+ *buffer = append(*buffer, ' ')
+ }
+ state.prevDigit = true
+ state.prevDigitIsInt = true
+ if len(coord) > 2 && coord[len(coord)-2] == '0' && coord[len(coord)-1] == '0' {
+ coord[len(coord)-2] = 'e'
+ coord[len(coord)-1] = '2'
+ state.prevDigitIsInt = false
+ } else {
+ for _, c := range coord {
+ if c == '.' || c == 'e' || c == 'E' {
+ state.prevDigitIsInt = false
+ break
+ }
+ }
+ }
+ *buffer = append(*buffer, coord...)
+}
diff --git a/vendor/github.com/tdewolff/minify/svg/pathdata_test.go b/vendor/github.com/tdewolff/minify/svg/pathdata_test.go
new file mode 100644
index 0000000..a975aa0
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/svg/pathdata_test.go
@@ -0,0 +1,60 @@
+package svg // import "github.com/tdewolff/minify/svg"
+
+import (
+ "testing"
+
+ "github.com/tdewolff/test"
+)
+
+func TestPathData(t *testing.T) {
+ var pathDataTests = []struct {
+ pathData string
+ expected string
+ }{
+ {"M10 10 20 10", "M10 10H20"},
+ {"M10 10 10 20", "M10 10V20"},
+ {"M50 50 100 100", "M50 50l50 50"},
+ {"m50 50 40 40m50 50", "m50 50 40 40m50 50"},
+ {"M10 10zM15 15", "M10 10zm5 5"},
+ {"M50 50H55V55", "M50 50h5v5"},
+ {"M10 10L11 10 11 11", "M10 10h1v1"},
+ {"M10 10l1 0 0 1", "M10 10h1v1"},
+ {"M10 10L11 11 0 0", "M10 10l1 1L0 0"},
+ {"M246.614 51.028L246.614-5.665 189.922-5.665", "M246.614 51.028V-5.665H189.922"},
+ {"M100,200 C100,100 250,100 250,200 S400,300 400,200", "M1e2 2e2c0-1e2 150-1e2 150 0s150 1e2 150 0"},
+ {"M200,300 Q400,50 600,300 T1000,300", "M2e2 3e2q2e2-250 4e2.0t4e2.0"},
+ {"M300,200 h-150 a150,150 0 1,0 150,-150 z", "M3e2 2e2H150A150 150 0 1 0 3e2 50z"},
+ {"x5 5L10 10", "L10 10"},
+
+ {"M.0.1", "M0 .1"},
+ {"M200.0.1", "M2e2.1"},
+ {"M0 0a3.28 3.28.0.0.0 3.279 3.28", "M0 0a3.28 3.28.0 0 0 3.279 3.28"}, // #114
+ {"A1.1.0.0.0.0.2.3", "A1.1.0.0 0 0 .2."}, // bad input (sweep and large-arc are not booleans) gives bad output
+
+ // fuzz
+ {"", ""},
+ {"ML", ""},
+ {".8.00c0", ""},
+ {".1.04h0e6.0e6.0e0.0", "h0 0 0 0"},
+ {"M.1.0.0.2Z", "M.1.0.0.2z"},
+ {"A.0.0.0.0.3.2e3.7.0.0.0.0.0.1.3.0.0.0.0.2.3.2.0.0.0.0.20.2e-10.0.0.0.0.0.0.0.0", "A0 0 0 0 .3 2e2.7.0.0.0 0 0 .1.3 30 0 0 0 .2.3.2 3 20 0 0 .2 2e-1100 11 0 0 0 "}, // bad input (sweep and large-arc are not booleans) gives bad output
+ }
+
+ p := NewPathData(&Minifier{Decimals: -1})
+ for _, tt := range pathDataTests {
+ t.Run(tt.pathData, func(t *testing.T) {
+ path := p.ShortenPathData([]byte(tt.pathData))
+ test.Minify(t, tt.pathData, nil, string(path), tt.expected)
+ })
+ }
+}
+
+////////////////////////////////////////////////////////////////
+
+func BenchmarkShortenPathData(b *testing.B) {
+ p := NewPathData(&Minifier{})
+ r := []byte("M8.64,223.948c0,0,143.468,3.431,185.777-181.808c2.673-11.702-1.23-20.154,1.316-33.146h16.287c0,0-3.14,17.248,1.095,30.848c21.392,68.692-4.179,242.343-204.227,196.59L8.64,223.948z")
+ for i := 0; i < b.N; i++ {
+ p.ShortenPathData(r)
+ }
+}
diff --git a/vendor/github.com/tdewolff/minify/svg/svg.go b/vendor/github.com/tdewolff/minify/svg/svg.go
new file mode 100644
index 0000000..984544f
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/svg/svg.go
@@ -0,0 +1,434 @@
+// Package svg minifies SVG1.1 following the specifications at http://www.w3.org/TR/SVG11/.
+package svg // import "github.com/tdewolff/minify/svg"
+
+import (
+ "bytes"
+ "io"
+
+ "github.com/tdewolff/minify"
+ minifyCSS "github.com/tdewolff/minify/css"
+ "github.com/tdewolff/parse"
+ "github.com/tdewolff/parse/buffer"
+ "github.com/tdewolff/parse/css"
+ "github.com/tdewolff/parse/svg"
+ "github.com/tdewolff/parse/xml"
+)
+
+var (
+ voidBytes = []byte("/>")
+ isBytes = []byte("=")
+ spaceBytes = []byte(" ")
+ cdataEndBytes = []byte("]]>")
+ pathBytes = []byte("<path")
+ dBytes = []byte("d")
+ zeroBytes = []byte("0")
+ cssMimeBytes = []byte("text/css")
+ urlBytes = []byte("url(")
+)
+
+////////////////////////////////////////////////////////////////
+
+// DefaultMinifier is the default minifier.
+var DefaultMinifier = &Minifier{Decimals: -1}
+
+// Minifier is an SVG minifier.
+type Minifier struct {
+ Decimals int
+}
+
+// Minify minifies SVG data, it reads from r and writes to w.
+func Minify(m *minify.M, w io.Writer, r io.Reader, params map[string]string) error {
+ return DefaultMinifier.Minify(m, w, r, params)
+}
+
+// Minify minifies SVG data, it reads from r and writes to w.
+func (o *Minifier) Minify(m *minify.M, w io.Writer, r io.Reader, _ map[string]string) error {
+ var tag svg.Hash
+ defaultStyleType := cssMimeBytes
+ defaultStyleParams := map[string]string(nil)
+ defaultInlineStyleParams := map[string]string{"inline": "1"}
+
+ p := NewPathData(o)
+ minifyBuffer := buffer.NewWriter(make([]byte, 0, 64))
+ attrByteBuffer := make([]byte, 0, 64)
+ gStack := make([]bool, 0)
+
+ l := xml.NewLexer(r)
+ defer l.Restore()
+
+ tb := NewTokenBuffer(l)
+ for {
+ t := *tb.Shift()
+ SWITCH:
+ switch t.TokenType {
+ case xml.ErrorToken:
+ if l.Err() == io.EOF {
+ return nil
+ }
+ return l.Err()
+ case xml.DOCTYPEToken:
+ if len(t.Text) > 0 && t.Text[len(t.Text)-1] == ']' {
+ if _, err := w.Write(t.Data); err != nil {
+ return err
+ }
+ }
+ case xml.TextToken:
+ t.Data = parse.ReplaceMultipleWhitespace(parse.TrimWhitespace(t.Data))
+ if tag == svg.Style && len(t.Data) > 0 {
+ if err := m.MinifyMimetype(defaultStyleType, w, buffer.NewReader(t.Data), defaultStyleParams); err != nil {
+ if err != minify.ErrNotExist {
+ return err
+ } else if _, err := w.Write(t.Data); err != nil {
+ return err
+ }
+ }
+ } else if _, err := w.Write(t.Data); err != nil {
+ return err
+ }
+ case xml.CDATAToken:
+ if tag == svg.Style {
+ minifyBuffer.Reset()
+ if err := m.MinifyMimetype(defaultStyleType, minifyBuffer, buffer.NewReader(t.Text), defaultStyleParams); err == nil {
+ t.Data = append(t.Data[:9], minifyBuffer.Bytes()...)
+ t.Text = t.Data[9:]
+ t.Data = append(t.Data, cdataEndBytes...)
+ } else if err != minify.ErrNotExist {
+ return err
+ }
+ }
+ var useText bool
+ if t.Text, useText = xml.EscapeCDATAVal(&attrByteBuffer, t.Text); useText {
+ t.Text = parse.ReplaceMultipleWhitespace(parse.TrimWhitespace(t.Text))
+ if _, err := w.Write(t.Text); err != nil {
+ return err
+ }
+ } else if _, err := w.Write(t.Data); err != nil {
+ return err
+ }
+ case xml.StartTagPIToken:
+ for {
+ if t := *tb.Shift(); t.TokenType == xml.StartTagClosePIToken || t.TokenType == xml.ErrorToken {
+ break
+ }
+ }
+ case xml.StartTagToken:
+ tag = t.Hash
+ if containerTagMap[tag] { // skip empty containers
+ i := 0
+ for {
+ next := tb.Peek(i)
+ i++
+ if next.TokenType == xml.EndTagToken && next.Hash == tag || next.TokenType == xml.StartTagCloseVoidToken || next.TokenType == xml.ErrorToken {
+ for j := 0; j < i; j++ {
+ tb.Shift()
+ }
+ break SWITCH
+ } else if next.TokenType != xml.AttributeToken && next.TokenType != xml.StartTagCloseToken {
+ break
+ }
+ }
+ if tag == svg.G {
+ if tb.Peek(0).TokenType == xml.StartTagCloseToken {
+ gStack = append(gStack, false)
+ tb.Shift()
+ break
+ }
+ gStack = append(gStack, true)
+ }
+ } else if tag == svg.Metadata {
+ skipTag(tb, tag)
+ break
+ } else if tag == svg.Line {
+ o.shortenLine(tb, &t, p)
+ } else if tag == svg.Rect && !o.shortenRect(tb, &t, p) {
+ skipTag(tb, tag)
+ break
+ } else if tag == svg.Polygon || tag == svg.Polyline {
+ o.shortenPoly(tb, &t, p)
+ }
+ if _, err := w.Write(t.Data); err != nil {
+ return err
+ }
+ case xml.AttributeToken:
+ if len(t.AttrVal) == 0 || t.Text == nil { // data is nil when attribute has been removed
+ continue
+ }
+
+ attr := t.Hash
+ val := t.AttrVal
+ if n, m := parse.Dimension(val); n+m == len(val) && attr != svg.Version { // TODO: inefficient, temporary measure
+ val, _ = o.shortenDimension(val)
+ }
+ if attr == svg.Xml_Space && bytes.Equal(val, []byte("preserve")) ||
+ tag == svg.Svg && (attr == svg.Version && bytes.Equal(val, []byte("1.1")) ||
+ attr == svg.X && bytes.Equal(val, []byte("0")) ||
+ attr == svg.Y && bytes.Equal(val, []byte("0")) ||
+ attr == svg.Width && bytes.Equal(val, []byte("100%")) ||
+ attr == svg.Height && bytes.Equal(val, []byte("100%")) ||
+ attr == svg.PreserveAspectRatio && bytes.Equal(val, []byte("xMidYMid meet")) ||
+ attr == svg.BaseProfile && bytes.Equal(val, []byte("none")) ||
+ attr == svg.ContentScriptType && bytes.Equal(val, []byte("application/ecmascript")) ||
+ attr == svg.ContentStyleType && bytes.Equal(val, []byte("text/css"))) ||
+ tag == svg.Style && attr == svg.Type && bytes.Equal(val, []byte("text/css")) {
+ continue
+ }
+
+ if _, err := w.Write(spaceBytes); err != nil {
+ return err
+ }
+ if _, err := w.Write(t.Text); err != nil {
+ return err
+ }
+ if _, err := w.Write(isBytes); err != nil {
+ return err
+ }
+
+ if tag == svg.Svg && attr == svg.ContentStyleType {
+ val = minify.ContentType(val)
+ defaultStyleType = val
+ } else if attr == svg.Style {
+ minifyBuffer.Reset()
+ if err := m.MinifyMimetype(defaultStyleType, minifyBuffer, buffer.NewReader(val), defaultInlineStyleParams); err == nil {
+ val = minifyBuffer.Bytes()
+ } else if err != minify.ErrNotExist {
+ return err
+ }
+ } else if attr == svg.D {
+ val = p.ShortenPathData(val)
+ } else if attr == svg.ViewBox {
+ j := 0
+ newVal := val[:0]
+ for i := 0; i < 4; i++ {
+ if i != 0 {
+ if j >= len(val) || val[j] != ' ' && val[j] != ',' {
+ newVal = append(newVal, val[j:]...)
+ break
+ }
+ newVal = append(newVal, ' ')
+ j++
+ }
+ if dim, n := o.shortenDimension(val[j:]); n > 0 {
+ newVal = append(newVal, dim...)
+ j += n
+ } else {
+ newVal = append(newVal, val[j:]...)
+ break
+ }
+ }
+ val = newVal
+ } else if colorAttrMap[attr] && len(val) > 0 && (len(val) < 5 || !parse.EqualFold(val[:4], urlBytes)) {
+ parse.ToLower(val)
+ if val[0] == '#' {
+ if name, ok := minifyCSS.ShortenColorHex[string(val)]; ok {
+ val = name
+ } else if len(val) == 7 && val[1] == val[2] && val[3] == val[4] && val[5] == val[6] {
+ val[2] = val[3]
+ val[3] = val[5]
+ val = val[:4]
+ }
+ } else if hex, ok := minifyCSS.ShortenColorName[css.ToHash(val)]; ok {
+ val = hex
+ // } else if len(val) > 5 && bytes.Equal(val[:4], []byte("rgb(")) && val[len(val)-1] == ')' {
+ // TODO: handle rgb(x, y, z) and hsl(x, y, z)
+ }
+ }
+
+ // prefer single or double quotes depending on what occurs more often in value
+ val = xml.EscapeAttrVal(&attrByteBuffer, val)
+ if _, err := w.Write(val); err != nil {
+ return err
+ }
+ case xml.StartTagCloseToken:
+ next := tb.Peek(0)
+ skipExtra := false
+ if next.TokenType == xml.TextToken && parse.IsAllWhitespace(next.Data) {
+ next = tb.Peek(1)
+ skipExtra = true
+ }
+ if next.TokenType == xml.EndTagToken {
+ // collapse empty tags to single void tag
+ tb.Shift()
+ if skipExtra {
+ tb.Shift()
+ }
+ if _, err := w.Write(voidBytes); err != nil {
+ return err
+ }
+ } else {
+ if _, err := w.Write(t.Data); err != nil {
+ return err
+ }
+ }
+ case xml.StartTagCloseVoidToken:
+ tag = 0
+ if _, err := w.Write(t.Data); err != nil {
+ return err
+ }
+ case xml.EndTagToken:
+ tag = 0
+ if t.Hash == svg.G && len(gStack) > 0 {
+ if !gStack[len(gStack)-1] {
+ gStack = gStack[:len(gStack)-1]
+ break
+ }
+ gStack = gStack[:len(gStack)-1]
+ }
+ if len(t.Data) > 3+len(t.Text) {
+ t.Data[2+len(t.Text)] = '>'
+ t.Data = t.Data[:3+len(t.Text)]
+ }
+ if _, err := w.Write(t.Data); err != nil {
+ return err
+ }
+ }
+ }
+}
+
+func (o *Minifier) shortenDimension(b []byte) ([]byte, int) {
+ if n, m := parse.Dimension(b); n > 0 {
+ unit := b[n : n+m]
+ b = minify.Number(b[:n], o.Decimals)
+ if len(b) != 1 || b[0] != '0' {
+ if m == 2 && unit[0] == 'p' && unit[1] == 'x' {
+ unit = nil
+ } else if m > 1 { // only percentage is length 1
+ parse.ToLower(unit)
+ }
+ b = append(b, unit...)
+ }
+ return b, n + m
+ }
+ return b, 0
+}
+
+func (o *Minifier) shortenLine(tb *TokenBuffer, t *Token, p *PathData) {
+ x1, y1, x2, y2 := zeroBytes, zeroBytes, zeroBytes, zeroBytes
+ if attrs, replacee := tb.Attributes(svg.X1, svg.Y1, svg.X2, svg.Y2); replacee != nil {
+ if attrs[0] != nil {
+ x1 = minify.Number(attrs[0].AttrVal, o.Decimals)
+ attrs[0].Text = nil
+ }
+ if attrs[1] != nil {
+ y1 = minify.Number(attrs[1].AttrVal, o.Decimals)
+ attrs[1].Text = nil
+ }
+ if attrs[2] != nil {
+ x2 = minify.Number(attrs[2].AttrVal, o.Decimals)
+ attrs[2].Text = nil
+ }
+ if attrs[3] != nil {
+ y2 = minify.Number(attrs[3].AttrVal, o.Decimals)
+ attrs[3].Text = nil
+ }
+
+ d := make([]byte, 0, 5+len(x1)+len(y1)+len(x2)+len(y2))
+ d = append(d, 'M')
+ d = append(d, x1...)
+ d = append(d, ' ')
+ d = append(d, y1...)
+ d = append(d, 'L')
+ d = append(d, x2...)
+ d = append(d, ' ')
+ d = append(d, y2...)
+ d = append(d, 'z')
+ d = p.ShortenPathData(d)
+
+ t.Data = pathBytes
+ replacee.Text = dBytes
+ replacee.AttrVal = d
+ }
+}
+
+func (o *Minifier) shortenRect(tb *TokenBuffer, t *Token, p *PathData) bool {
+ if attrs, replacee := tb.Attributes(svg.X, svg.Y, svg.Width, svg.Height, svg.Rx, svg.Ry); replacee != nil && attrs[4] == nil && attrs[5] == nil {
+ x, y, w, h := zeroBytes, zeroBytes, zeroBytes, zeroBytes
+ if attrs[0] != nil {
+ x = minify.Number(attrs[0].AttrVal, o.Decimals)
+ attrs[0].Text = nil
+ }
+ if attrs[1] != nil {
+ y = minify.Number(attrs[1].AttrVal, o.Decimals)
+ attrs[1].Text = nil
+ }
+ if attrs[2] != nil {
+ w = minify.Number(attrs[2].AttrVal, o.Decimals)
+ attrs[2].Text = nil
+ }
+ if attrs[3] != nil {
+ h = minify.Number(attrs[3].AttrVal, o.Decimals)
+ attrs[3].Text = nil
+ }
+ if len(w) == 0 || w[0] == '0' || len(h) == 0 || h[0] == '0' {
+ return false
+ }
+
+ d := make([]byte, 0, 6+2*len(x)+len(y)+len(w)+len(h))
+ d = append(d, 'M')
+ d = append(d, x...)
+ d = append(d, ' ')
+ d = append(d, y...)
+ d = append(d, 'h')
+ d = append(d, w...)
+ d = append(d, 'v')
+ d = append(d, h...)
+ d = append(d, 'H')
+ d = append(d, x...)
+ d = append(d, 'z')
+ d = p.ShortenPathData(d)
+
+ t.Data = pathBytes
+ replacee.Text = dBytes
+ replacee.AttrVal = d
+ }
+ return true
+}
+
+func (o *Minifier) shortenPoly(tb *TokenBuffer, t *Token, p *PathData) {
+ if attrs, replacee := tb.Attributes(svg.Points); replacee != nil && attrs[0] != nil {
+ points := attrs[0].AttrVal
+
+ i := 0
+ for i < len(points) && !(points[i] == ' ' || points[i] == ',' || points[i] == '\n' || points[i] == '\r' || points[i] == '\t') {
+ i++
+ }
+ for i < len(points) && (points[i] == ' ' || points[i] == ',' || points[i] == '\n' || points[i] == '\r' || points[i] == '\t') {
+ i++
+ }
+ for i < len(points) && !(points[i] == ' ' || points[i] == ',' || points[i] == '\n' || points[i] == '\r' || points[i] == '\t') {
+ i++
+ }
+ endMoveTo := i
+ for i < len(points) && (points[i] == ' ' || points[i] == ',' || points[i] == '\n' || points[i] == '\r' || points[i] == '\t') {
+ i++
+ }
+ startLineTo := i
+
+ if i == len(points) {
+ return
+ }
+
+ d := make([]byte, 0, len(points)+3)
+ d = append(d, 'M')
+ d = append(d, points[:endMoveTo]...)
+ d = append(d, 'L')
+ d = append(d, points[startLineTo:]...)
+ if t.Hash == svg.Polygon {
+ d = append(d, 'z')
+ }
+ d = p.ShortenPathData(d)
+
+ t.Data = pathBytes
+ replacee.Text = dBytes
+ replacee.AttrVal = d
+ }
+}
+
+////////////////////////////////////////////////////////////////
+
+func skipTag(tb *TokenBuffer, tag svg.Hash) {
+ for {
+ if t := *tb.Shift(); (t.TokenType == xml.EndTagToken || t.TokenType == xml.StartTagCloseVoidToken) && t.Hash == tag || t.TokenType == xml.ErrorToken {
+ break
+ }
+ }
+}
diff --git a/vendor/github.com/tdewolff/minify/svg/svg_test.go b/vendor/github.com/tdewolff/minify/svg/svg_test.go
new file mode 100644
index 0000000..7d3cfef
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/svg/svg_test.go
@@ -0,0 +1,199 @@
+package svg // import "github.com/tdewolff/minify/svg"
+
+import (
+ "bytes"
+ "fmt"
+ "io"
+ "os"
+ "testing"
+
+ "github.com/tdewolff/minify"
+ "github.com/tdewolff/minify/css"
+ "github.com/tdewolff/test"
+)
+
+func TestSVG(t *testing.T) {
+ svgTests := []struct {
+ svg string
+ expected string
+ }{
+ {`<!-- comment -->`, ``},
+ {`<!DOCTYPE svg SYSTEM "foo.dtd">`, ``},
+ {`<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "foo.dtd" [ <!ENTITY x "bar"> ]>`, `<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "foo.dtd" [ <!ENTITY x "bar"> ]>`},
+ {`<!DOCTYPE svg SYSTEM "foo.dtd">`, ``},
+ {`<?xml version="1.0" ?>`, ``},
+ {`<style> <![CDATA[ x ]]> </style>`, `<style>x</style>`},
+ {`<style> <![CDATA[ <<<< ]]> </style>`, `<style>&lt;&lt;&lt;&lt;</style>`},
+ {`<style> <![CDATA[ <<<<< ]]> </style>`, `<style><![CDATA[ <<<<< ]]></style>`},
+ {`<style/><![CDATA[ <<<<< ]]>`, `<style/><![CDATA[ <<<<< ]]>`},
+ {`<svg version="1.0"></svg>`, `<svg version="1.0"/>`},
+ {`<svg version="1.1" x="0" y="0px" width="100%" height="100%"><path/></svg>`, `<svg><path/></svg>`},
+ {`<path x="a"> </path>`, `<path x="a"/>`},
+ {`<path x=" a "/>`, `<path x="a"/>`},
+ {"<path x=\" a \n b \"/>", `<path x="a b"/>`},
+ {`<path x="5.0px" y="0%"/>`, `<path x="5" y="0"/>`},
+ {`<svg viewBox="5.0px 5px 240IN px"><path/></svg>`, `<svg viewBox="5 5 240in px"><path/></svg>`},
+ {`<svg viewBox="5.0!5px"><path/></svg>`, `<svg viewBox="5!5px"><path/></svg>`},
+ {`<path d="M 100 100 L 300 100 L 200 100 z"/>`, `<path d="M1e2 1e2H3e2 2e2z"/>`},
+ {`<path d="M100 -100M200 300z"/>`, `<path d="M1e2-1e2M2e2 3e2z"/>`},
+ {`<path d="M0.5 0.6 M -100 0.5z"/>`, `<path d="M.5.6M-1e2.5z"/>`},
+ {`<path d="M01.0 0.6 z"/>`, `<path d="M1 .6z"/>`},
+ {`<path d="M20 20l-10-10z"/>`, `<path d="M20 20 10 10z"/>`},
+ {`<?xml version="1.0" encoding="utf-8"?>`, ``},
+ {`<svg viewbox="0 0 16 16"><path/></svg>`, `<svg viewbox="0 0 16 16"><path/></svg>`},
+ {`<g></g>`, ``},
+ {`<g><path/></g>`, `<path/>`},
+ {`<g id="a"><g><path/></g></g>`, `<g id="a"><path/></g>`},
+ {`<path fill="#ffffff"/>`, `<path fill="#fff"/>`},
+ {`<path fill="#fff"/>`, `<path fill="#fff"/>`},
+ {`<path fill="white"/>`, `<path fill="#fff"/>`},
+ {`<path fill="#ff0000"/>`, `<path fill="red"/>`},
+ {`<line x1="5" y1="10" x2="20" y2="40"/>`, `<path d="M5 10 20 40z"/>`},
+ {`<rect x="5" y="10" width="20" height="40"/>`, `<path d="M5 10h20v40H5z"/>`},
+ {`<rect x="-5.669" y="147.402" fill="#843733" width="252.279" height="14.177"/>`, `<path fill="#843733" d="M-5.669 147.402h252.279v14.177H-5.669z"/>`},
+ {`<rect x="5" y="10" rx="2" ry="3"/>`, `<rect x="5" y="10" rx="2" ry="3"/>`},
+ {`<rect x="5" y="10" height="40"/>`, ``},
+ {`<rect x="5" y="10" width="30" height="0"/>`, ``},
+ {`<polygon points="1,2 3,4"/>`, `<path d="M1 2 3 4z"/>`},
+ {`<polyline points="1,2 3,4"/>`, `<path d="M1 2 3 4"/>`},
+ {`<svg contentStyleType="text/json ; charset=iso-8859-1"><style>{a : true}</style></svg>`, `<svg contentStyleType="text/json;charset=iso-8859-1"><style>{a : true}</style></svg>`},
+ {`<metadata><dc:title /></metadata>`, ``},
+
+ // from SVGO
+ {`<!DOCTYPE bla><?xml?><!-- comment --><metadata/>`, ``},
+
+ {`<polygon fill="none" stroke="#000" points="-0.1,"/>`, `<polygon fill="none" stroke="#000" points="-0.1,"/>`}, // #45
+ {`<path stroke="url(#UPPERCASE)"/>`, `<path stroke="url(#UPPERCASE)"/>`}, // #117
+
+ // go fuzz
+ {`<0 d=09e9.6e-9e0`, `<0 d=""`},
+ {`<line`, `<line`},
+ }
+
+ m := minify.New()
+ for _, tt := range svgTests {
+ t.Run(tt.svg, func(t *testing.T) {
+ r := bytes.NewBufferString(tt.svg)
+ w := &bytes.Buffer{}
+ err := Minify(m, w, r, nil)
+ test.Minify(t, tt.svg, err, w.String(), tt.expected)
+ })
+ }
+}
+
+func TestSVGStyle(t *testing.T) {
+ svgTests := []struct {
+ svg string
+ expected string
+ }{
+ {`<style> a > b {} </style>`, `<style>a>b{}</style>`},
+ {`<style> <![CDATA[ @media x < y {} ]]> </style>`, `<style>@media x &lt; y{}</style>`},
+ {`<style> <![CDATA[ * { content: '<<<<<'; } ]]> </style>`, `<style><![CDATA[*{content:'<<<<<'}]]></style>`},
+ {`<style/><![CDATA[ * { content: '<<<<<'; ]]>`, `<style/><![CDATA[ * { content: '<<<<<'; ]]>`},
+ {`<path style="fill: black; stroke: #ff0000;"/>`, `<path style="fill:#000;stroke:red"/>`},
+ }
+
+ m := minify.New()
+ m.AddFunc("text/css", css.Minify)
+ for _, tt := range svgTests {
+ t.Run(tt.svg, func(t *testing.T) {
+ r := bytes.NewBufferString(tt.svg)
+ w := &bytes.Buffer{}
+ err := Minify(m, w, r, nil)
+ test.Minify(t, tt.svg, err, w.String(), tt.expected)
+ })
+ }
+}
+
+func TestSVGDecimals(t *testing.T) {
+ var svgTests = []struct {
+ svg string
+ expected string
+ }{
+ {`<svg x="1.234" y="0.001" width="1.001"><path/></svg>`, `<svg x="1.2" width="1"><path/></svg>`},
+ }
+
+ m := minify.New()
+ o := &Minifier{Decimals: 1}
+ for _, tt := range svgTests {
+ t.Run(tt.svg, func(t *testing.T) {
+ r := bytes.NewBufferString(tt.svg)
+ w := &bytes.Buffer{}
+ err := o.Minify(m, w, r, nil)
+ test.Minify(t, tt.svg, err, w.String(), tt.expected)
+ })
+ }
+}
+
+func TestReaderErrors(t *testing.T) {
+ r := test.NewErrorReader(0)
+ w := &bytes.Buffer{}
+ m := minify.New()
+ err := Minify(m, w, r, nil)
+ test.T(t, err, test.ErrPlain, "return error at first read")
+}
+
+func TestWriterErrors(t *testing.T) {
+ errorTests := []struct {
+ svg string
+ n []int
+ }{
+ {`<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "foo.dtd" [ <!ENTITY x "bar"> ]>`, []int{0}},
+ {`abc`, []int{0}},
+ {`<style>abc</style>`, []int{2}},
+ {`<![CDATA[ <<<< ]]>`, []int{0}},
+ {`<![CDATA[ <<<<< ]]>`, []int{0}},
+ {`<path d="x"/>`, []int{0, 1, 2, 3, 4, 5}},
+ {`<path></path>`, []int{1}},
+ {`<svg>x</svg>`, []int{1, 3}},
+ {`<svg>x</svg >`, []int{3}},
+ }
+
+ m := minify.New()
+ for _, tt := range errorTests {
+ for _, n := range tt.n {
+ t.Run(fmt.Sprint(tt.svg, " ", tt.n), func(t *testing.T) {
+ r := bytes.NewBufferString(tt.svg)
+ w := test.NewErrorWriter(n)
+ err := Minify(m, w, r, nil)
+ test.T(t, err, test.ErrPlain)
+ })
+ }
+ }
+}
+
+func TestMinifyErrors(t *testing.T) {
+ errorTests := []struct {
+ svg string
+ err error
+ }{
+ {`<style>abc</style>`, test.ErrPlain},
+ {`<style><![CDATA[abc]]></style>`, test.ErrPlain},
+ {`<path style="abc"/>`, test.ErrPlain},
+ }
+
+ m := minify.New()
+ m.AddFunc("text/css", func(_ *minify.M, w io.Writer, r io.Reader, _ map[string]string) error {
+ return test.ErrPlain
+ })
+ for _, tt := range errorTests {
+ t.Run(tt.svg, func(t *testing.T) {
+ r := bytes.NewBufferString(tt.svg)
+ w := &bytes.Buffer{}
+ err := Minify(m, w, r, nil)
+ test.T(t, err, tt.err)
+ })
+ }
+}
+
+////////////////////////////////////////////////////////////////
+
+func ExampleMinify() {
+ m := minify.New()
+ m.AddFunc("image/svg+xml", Minify)
+ m.AddFunc("text/css", css.Minify)
+
+ if err := m.Minify("image/svg+xml", os.Stdout, os.Stdin); err != nil {
+ panic(err)
+ }
+}
diff --git a/vendor/github.com/tdewolff/minify/svg/table.go b/vendor/github.com/tdewolff/minify/svg/table.go
new file mode 100644
index 0000000..42a1e78
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/svg/table.go
@@ -0,0 +1,96 @@
+package svg // import "github.com/tdewolff/minify/svg"
+
+import "github.com/tdewolff/parse/svg"
+
+var containerTagMap = map[svg.Hash]bool{
+ svg.A: true,
+ svg.Defs: true,
+ svg.G: true,
+ svg.Marker: true,
+ svg.Mask: true,
+ svg.Missing_Glyph: true,
+ svg.Pattern: true,
+ svg.Switch: true,
+ svg.Symbol: true,
+}
+
+var colorAttrMap = map[svg.Hash]bool{
+ svg.Color: true,
+ svg.Fill: true,
+ svg.Stroke: true,
+ svg.Stop_Color: true,
+ svg.Flood_Color: true,
+ svg.Lighting_Color: true,
+}
+
+// var styleAttrMap = map[svg.Hash]bool{
+// svg.Font: true,
+// svg.Font_Family: true,
+// svg.Font_Size: true,
+// svg.Font_Size_Adjust: true,
+// svg.Font_Stretch: true,
+// svg.Font_Style: true,
+// svg.Font_Variant: true,
+// svg.Font_Weight: true,
+// svg.Direction: true,
+// svg.Letter_Spacing: true,
+// svg.Text_Decoration: true,
+// svg.Unicode_Bidi: true,
+// svg.White_Space: true,
+// svg.Word_Spacing: true,
+// svg.Clip: true,
+// svg.Color: true,
+// svg.Cursor: true,
+// svg.Display: true,
+// svg.Overflow: true,
+// svg.Visibility: true,
+// svg.Clip_Path: true,
+// svg.Clip_Rule: true,
+// svg.Mask: true,
+// svg.Opacity: true,
+// svg.Enable_Background: true,
+// svg.Filter: true,
+// svg.Flood_Color: true,
+// svg.Flood_Opacity: true,
+// svg.Lighting_Color: true,
+// svg.Solid_Color: true,
+// svg.Solid_Opacity: true,
+// svg.Stop_Color: true,
+// svg.Stop_Opacity: true,
+// svg.Pointer_Events: true,
+// svg.Buffered_Rendering: true,
+// svg.Color_Interpolation: true,
+// svg.Color_Interpolation_Filters: true,
+// svg.Color_Profile: true,
+// svg.Color_Rendering: true,
+// svg.Fill: true,
+// svg.Fill_Opacity: true,
+// svg.Fill_Rule: true,
+// svg.Image_Rendering: true,
+// svg.Marker: true,
+// svg.Marker_End: true,
+// svg.Marker_Mid: true,
+// svg.Marker_Start: true,
+// svg.Shape_Rendering: true,
+// svg.Stroke: true,
+// svg.Stroke_Dasharray: true,
+// svg.Stroke_Dashoffset: true,
+// svg.Stroke_Linecap: true,
+// svg.Stroke_Linejoin: true,
+// svg.Stroke_Miterlimit: true,
+// svg.Stroke_Opacity: true,
+// svg.Stroke_Width: true,
+// svg.Paint_Order: true,
+// svg.Vector_Effect: true,
+// svg.Viewport_Fill: true,
+// svg.Viewport_Fill_Opacity: true,
+// svg.Text_Rendering: true,
+// svg.Alignment_Baseline: true,
+// svg.Baseline_Shift: true,
+// svg.Dominant_Baseline: true,
+// svg.Glyph_Orientation_Horizontal: true,
+// svg.Glyph_Orientation_Vertical: true,
+// svg.Kerning: true,
+// svg.Text_Anchor: true,
+// svg.Writing_Mode: true,
+// }
diff --git a/vendor/github.com/tdewolff/minify/xml/buffer.go b/vendor/github.com/tdewolff/minify/xml/buffer.go
new file mode 100644
index 0000000..d3ce61c
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/xml/buffer.go
@@ -0,0 +1,84 @@
+package xml // import "github.com/tdewolff/minify/xml"
+
+import "github.com/tdewolff/parse/xml"
+
+// Token is a single token unit with an attribute value (if given) and hash of the data.
+type Token struct {
+ xml.TokenType
+ Data []byte
+ Text []byte
+ AttrVal []byte
+}
+
+// TokenBuffer is a buffer that allows for token look-ahead.
+type TokenBuffer struct {
+ l *xml.Lexer
+
+ buf []Token
+ pos int
+}
+
+// NewTokenBuffer returns a new TokenBuffer.
+func NewTokenBuffer(l *xml.Lexer) *TokenBuffer {
+ return &TokenBuffer{
+ l: l,
+ buf: make([]Token, 0, 8),
+ }
+}
+
+func (z *TokenBuffer) read(t *Token) {
+ t.TokenType, t.Data = z.l.Next()
+ t.Text = z.l.Text()
+ if t.TokenType == xml.AttributeToken {
+ t.AttrVal = z.l.AttrVal()
+ } else {
+ t.AttrVal = nil
+ }
+}
+
+// Peek returns the ith element and possibly does an allocation.
+// Peeking past an error will panic.
+func (z *TokenBuffer) Peek(pos int) *Token {
+ pos += z.pos
+ if pos >= len(z.buf) {
+ if len(z.buf) > 0 && z.buf[len(z.buf)-1].TokenType == xml.ErrorToken {
+ return &z.buf[len(z.buf)-1]
+ }
+
+ c := cap(z.buf)
+ d := len(z.buf) - z.pos
+ p := pos - z.pos + 1 // required peek length
+ var buf []Token
+ if 2*p > c {
+ buf = make([]Token, 0, 2*c+p)
+ } else {
+ buf = z.buf
+ }
+ copy(buf[:d], z.buf[z.pos:])
+
+ buf = buf[:p]
+ pos -= z.pos
+ for i := d; i < p; i++ {
+ z.read(&buf[i])
+ if buf[i].TokenType == xml.ErrorToken {
+ buf = buf[:i+1]
+ pos = i
+ break
+ }
+ }
+ z.pos, z.buf = 0, buf
+ }
+ return &z.buf[pos]
+}
+
+// Shift returns the first element and advances position.
+func (z *TokenBuffer) Shift() *Token {
+ if z.pos >= len(z.buf) {
+ t := &z.buf[:1][0]
+ z.read(t)
+ return t
+ }
+ t := &z.buf[z.pos]
+ z.pos++
+ return t
+}
diff --git a/vendor/github.com/tdewolff/minify/xml/buffer_test.go b/vendor/github.com/tdewolff/minify/xml/buffer_test.go
new file mode 100644
index 0000000..019cb12
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/xml/buffer_test.go
@@ -0,0 +1,37 @@
+package xml // import "github.com/tdewolff/minify/xml"
+
+import (
+ "bytes"
+ "testing"
+
+ "github.com/tdewolff/parse/xml"
+ "github.com/tdewolff/test"
+)
+
+func TestBuffer(t *testing.T) {
+ // 0 12 3 45 6 7 8 9 0
+ s := `<p><a href="//url">text</a>text<!--comment--></p>`
+ z := NewTokenBuffer(xml.NewLexer(bytes.NewBufferString(s)))
+
+ tok := z.Shift()
+ test.That(t, string(tok.Text) == "p", "first token is <p>")
+ test.That(t, z.pos == 0, "shift first token and restore position")
+ test.That(t, len(z.buf) == 0, "shift first token and restore length")
+
+ test.That(t, string(z.Peek(2).Text) == "href", "third token is href")
+ test.That(t, z.pos == 0, "don't change position after peeking")
+ test.That(t, len(z.buf) == 3, "two tokens after peeking")
+
+ test.That(t, string(z.Peek(8).Text) == "p", "ninth token is <p>")
+ test.That(t, z.pos == 0, "don't change position after peeking")
+ test.That(t, len(z.buf) == 9, "nine tokens after peeking")
+
+ test.That(t, z.Peek(9).TokenType == xml.ErrorToken, "tenth token is an error")
+ test.That(t, z.Peek(9) == z.Peek(10), "tenth and eleventh token are EOF")
+ test.That(t, len(z.buf) == 10, "ten tokens after peeking")
+
+ _ = z.Shift()
+ tok = z.Shift()
+ test.That(t, string(tok.Text) == "a", "third token is <a>")
+ test.That(t, z.pos == 2, "don't change position after peeking")
+}
diff --git a/vendor/github.com/tdewolff/minify/xml/xml.go b/vendor/github.com/tdewolff/minify/xml/xml.go
new file mode 100644
index 0000000..7974484
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/xml/xml.go
@@ -0,0 +1,193 @@
+// Package xml minifies XML1.0 following the specifications at http://www.w3.org/TR/xml/.
+package xml // import "github.com/tdewolff/minify/xml"
+
+import (
+ "io"
+
+ "github.com/tdewolff/minify"
+ "github.com/tdewolff/parse"
+ "github.com/tdewolff/parse/xml"
+)
+
+var (
+ isBytes = []byte("=")
+ spaceBytes = []byte(" ")
+ voidBytes = []byte("/>")
+)
+
+////////////////////////////////////////////////////////////////
+
+// DefaultMinifier is the default minifier.
+var DefaultMinifier = &Minifier{}
+
+// Minifier is an XML minifier.
+type Minifier struct {
+ KeepWhitespace bool
+}
+
+// Minify minifies XML data, it reads from r and writes to w.
+func Minify(m *minify.M, w io.Writer, r io.Reader, params map[string]string) error {
+ return DefaultMinifier.Minify(m, w, r, params)
+}
+
+// Minify minifies XML data, it reads from r and writes to w.
+func (o *Minifier) Minify(m *minify.M, w io.Writer, r io.Reader, _ map[string]string) error {
+ omitSpace := true // on true the next text token must not start with a space
+
+ attrByteBuffer := make([]byte, 0, 64)
+
+ l := xml.NewLexer(r)
+ defer l.Restore()
+
+ tb := NewTokenBuffer(l)
+ for {
+ t := *tb.Shift()
+ if t.TokenType == xml.CDATAToken {
+ if text, useText := xml.EscapeCDATAVal(&attrByteBuffer, t.Text); useText {
+ t.TokenType = xml.TextToken
+ t.Data = text
+ }
+ }
+ switch t.TokenType {
+ case xml.ErrorToken:
+ if l.Err() == io.EOF {
+ return nil
+ }
+ return l.Err()
+ case xml.DOCTYPEToken:
+ if _, err := w.Write(t.Data); err != nil {
+ return err
+ }
+ case xml.CDATAToken:
+ if _, err := w.Write(t.Data); err != nil {
+ return err
+ }
+ if len(t.Text) > 0 && parse.IsWhitespace(t.Text[len(t.Text)-1]) {
+ omitSpace = true
+ }
+ case xml.TextToken:
+ t.Data = parse.ReplaceMultipleWhitespace(t.Data)
+
+ // whitespace removal; trim left
+ if omitSpace && (t.Data[0] == ' ' || t.Data[0] == '\n') {
+ t.Data = t.Data[1:]
+ }
+
+ // whitespace removal; trim right
+ omitSpace = false
+ if len(t.Data) == 0 {
+ omitSpace = true
+ } else if t.Data[len(t.Data)-1] == ' ' || t.Data[len(t.Data)-1] == '\n' {
+ omitSpace = true
+ i := 0
+ for {
+ next := tb.Peek(i)
+ // trim if EOF, text token with whitespace begin or block token
+ if next.TokenType == xml.ErrorToken {
+ t.Data = t.Data[:len(t.Data)-1]
+ omitSpace = false
+ break
+ } else if next.TokenType == xml.TextToken {
+ // this only happens when a comment, doctype, cdata startpi tag was in between
+ // remove if the text token starts with a whitespace
+ if len(next.Data) > 0 && parse.IsWhitespace(next.Data[0]) {
+ t.Data = t.Data[:len(t.Data)-1]
+ omitSpace = false
+ }
+ break
+ } else if next.TokenType == xml.CDATAToken {
+ if len(next.Text) > 0 && parse.IsWhitespace(next.Text[0]) {
+ t.Data = t.Data[:len(t.Data)-1]
+ omitSpace = false
+ }
+ break
+ } else if next.TokenType == xml.StartTagToken || next.TokenType == xml.EndTagToken {
+ if !o.KeepWhitespace {
+ t.Data = t.Data[:len(t.Data)-1]
+ omitSpace = false
+ }
+ break
+ }
+ i++
+ }
+ }
+
+ if _, err := w.Write(t.Data); err != nil {
+ return err
+ }
+ case xml.StartTagToken:
+ if o.KeepWhitespace {
+ omitSpace = false
+ }
+ if _, err := w.Write(t.Data); err != nil {
+ return err
+ }
+ case xml.StartTagPIToken:
+ if _, err := w.Write(t.Data); err != nil {
+ return err
+ }
+ case xml.AttributeToken:
+ if _, err := w.Write(spaceBytes); err != nil {
+ return err
+ }
+ if _, err := w.Write(t.Text); err != nil {
+ return err
+ }
+ if _, err := w.Write(isBytes); err != nil {
+ return err
+ }
+
+ if len(t.AttrVal) < 2 {
+ if _, err := w.Write(t.AttrVal); err != nil {
+ return err
+ }
+ } else {
+ // prefer single or double quotes depending on what occurs more often in value
+ val := xml.EscapeAttrVal(&attrByteBuffer, t.AttrVal[1:len(t.AttrVal)-1])
+ if _, err := w.Write(val); err != nil {
+ return err
+ }
+ }
+ case xml.StartTagCloseToken:
+ next := tb.Peek(0)
+ skipExtra := false
+ if next.TokenType == xml.TextToken && parse.IsAllWhitespace(next.Data) {
+ next = tb.Peek(1)
+ skipExtra = true
+ }
+ if next.TokenType == xml.EndTagToken {
+ // collapse empty tags to single void tag
+ tb.Shift()
+ if skipExtra {
+ tb.Shift()
+ }
+ if _, err := w.Write(voidBytes); err != nil {
+ return err
+ }
+ } else {
+ if _, err := w.Write(t.Text); err != nil {
+ return err
+ }
+ }
+ case xml.StartTagCloseVoidToken:
+ if _, err := w.Write(t.Text); err != nil {
+ return err
+ }
+ case xml.StartTagClosePIToken:
+ if _, err := w.Write(t.Text); err != nil {
+ return err
+ }
+ case xml.EndTagToken:
+ if o.KeepWhitespace {
+ omitSpace = false
+ }
+ if len(t.Data) > 3+len(t.Text) {
+ t.Data[2+len(t.Text)] = '>'
+ t.Data = t.Data[:3+len(t.Text)]
+ }
+ if _, err := w.Write(t.Data); err != nil {
+ return err
+ }
+ }
+ }
+}
diff --git a/vendor/github.com/tdewolff/minify/xml/xml_test.go b/vendor/github.com/tdewolff/minify/xml/xml_test.go
new file mode 100644
index 0000000..5d99809
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/xml/xml_test.go
@@ -0,0 +1,129 @@
+package xml // import "github.com/tdewolff/minify/xml"
+
+import (
+ "bytes"
+ "fmt"
+ "os"
+ "regexp"
+ "testing"
+
+ "github.com/tdewolff/minify"
+ "github.com/tdewolff/test"
+)
+
+func TestXML(t *testing.T) {
+ xmlTests := []struct {
+ xml string
+ expected string
+ }{
+ {"<!-- comment -->", ""},
+ {"<A>x</A>", "<A>x</A>"},
+ {"<a><b>x</b></a>", "<a><b>x</b></a>"},
+ {"<a><b>x\ny</b></a>", "<a><b>x\ny</b></a>"},
+ {"<a> <![CDATA[ a ]]> </a>", "<a>a</a>"},
+ {"<a >a</a >", "<a>a</a>"},
+ {"<?xml version=\"1.0\" ?>", "<?xml version=\"1.0\"?>"},
+ {"<x></x>", "<x/>"},
+ {"<x> </x>", "<x/>"},
+ {"<x a=\"b\"></x>", "<x a=\"b\"/>"},
+ {"<x a=\"\"></x>", "<x a=\"\"/>"},
+ {"<x a=a></x>", "<x a=a/>"},
+ {"<x a=\" a \n\r\t b \"/>", "<x a=\" a b \"/>"},
+ {"<x a=\"&apos;b&quot;\"></x>", "<x a=\"'b&#34;\"/>"},
+ {"<x a=\"&quot;&quot;'\"></x>", "<x a='\"\"&#39;'/>"},
+ {"<!DOCTYPE foo SYSTEM \"Foo.dtd\">", "<!DOCTYPE foo SYSTEM \"Foo.dtd\">"},
+ {"text <!--comment--> text", "text text"},
+ {"text\n<!--comment-->\ntext", "text\ntext"},
+ {"<!doctype html>", "<!doctype html=>"}, // bad formatted, doctype must be uppercase and html must have attribute value
+ {"<x>\n<!--y-->\n</x>", "<x></x>"},
+ {"<style>lala{color:red}</style>", "<style>lala{color:red}</style>"},
+ {`cats and dogs `, `cats and dogs`},
+
+ {`</0`, `</0`}, // go fuzz
+ }
+
+ m := minify.New()
+ for _, tt := range xmlTests {
+ t.Run(tt.xml, func(t *testing.T) {
+ r := bytes.NewBufferString(tt.xml)
+ w := &bytes.Buffer{}
+ err := Minify(m, w, r, nil)
+ test.Minify(t, tt.xml, err, w.String(), tt.expected)
+ })
+ }
+}
+
+func TestXMLKeepWhitespace(t *testing.T) {
+ xmlTests := []struct {
+ xml string
+ expected string
+ }{
+ {`cats and dogs `, `cats and dogs`},
+ {` <div> <i> test </i> <b> test </b> </div> `, `<div> <i> test </i> <b> test </b> </div>`},
+ {"text\n<!--comment-->\ntext", "text\ntext"},
+ {"text\n<!--comment-->text<!--comment--> text", "text\ntext text"},
+ {"<x>\n<!--y-->\n</x>", "<x>\n</x>"},
+ {"<style>lala{color:red}</style>", "<style>lala{color:red}</style>"},
+ {"<x> <?xml?> </x>", "<x><?xml?> </x>"},
+ {"<x> <![CDATA[ x ]]> </x>", "<x> x </x>"},
+ {"<x> <![CDATA[ <<<<< ]]> </x>", "<x><![CDATA[ <<<<< ]]></x>"},
+ }
+
+ m := minify.New()
+ xmlMinifier := &Minifier{KeepWhitespace: true}
+ for _, tt := range xmlTests {
+ t.Run(tt.xml, func(t *testing.T) {
+ r := bytes.NewBufferString(tt.xml)
+ w := &bytes.Buffer{}
+ err := xmlMinifier.Minify(m, w, r, nil)
+ test.Minify(t, tt.xml, err, w.String(), tt.expected)
+ })
+ }
+}
+
+func TestReaderErrors(t *testing.T) {
+ r := test.NewErrorReader(0)
+ w := &bytes.Buffer{}
+ m := minify.New()
+ err := Minify(m, w, r, nil)
+ test.T(t, err, test.ErrPlain, "return error at first read")
+}
+
+func TestWriterErrors(t *testing.T) {
+ errorTests := []struct {
+ xml string
+ n []int
+ }{
+ {`<!DOCTYPE foo>`, []int{0}},
+ {`<?xml?>`, []int{0, 1}},
+ {`<a x=y z="val">`, []int{0, 1, 2, 3, 4, 8, 9}},
+ {`<foo/>`, []int{1}},
+ {`</foo>`, []int{0}},
+ {`<foo></foo>`, []int{1}},
+ {`<![CDATA[data<<<<<]]>`, []int{0}},
+ {`text`, []int{0}},
+ }
+
+ m := minify.New()
+ for _, tt := range errorTests {
+ for _, n := range tt.n {
+ t.Run(fmt.Sprint(tt.xml, " ", tt.n), func(t *testing.T) {
+ r := bytes.NewBufferString(tt.xml)
+ w := test.NewErrorWriter(n)
+ err := Minify(m, w, r, nil)
+ test.T(t, err, test.ErrPlain)
+ })
+ }
+ }
+}
+
+////////////////////////////////////////////////////////////////
+
+func ExampleMinify() {
+ m := minify.New()
+ m.AddFuncRegexp(regexp.MustCompile("[/+]xml$"), Minify)
+
+ if err := m.Minify("text/xml", os.Stdout, os.Stdin); err != nil {
+ panic(err)
+ }
+}